diff --git a/.gitignore b/.gitignore
index 558bd8a78c3..c209860320c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,4 +9,4 @@
*.lk
*.int
*.backup
-*.int
\ No newline at end of file
+*.int
diff --git a/.travis.yml b/.travis.yml
index 6eb8961a07f..7b90bccd36f 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -4,7 +4,7 @@ sudo: false
env:
global:
- BYOND_MAJOR="509"
- - BYOND_MINOR="1317"
+ - BYOND_MINOR="1319"
- NODE_VERSION="4"
matrix:
- DM_MAPFILE="tgstation2"
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index bf96cb874db..4026811af12 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -208,6 +208,48 @@ This prevents nesting levels from getting deeper then they need to be.
Math operators like +, -, /, *, etc are up in the air, just choose which version looks more readable.
+###Dream Maker Quirks/Tricks:
+Like all languages, Dream Maker has its quirks, some of them are beneficial to us, like these
+
+* In-To for loops: ```for(var/i = 1, i <= some_value, i++)``` is a fairly standard way to write an incremental for loop in most languages (especially those in the C family) however DM's ```for(var/i in 1 to some_value)``` syntax is oddly faster than its implementation of the former syntax; where possible it's advised to use DM's syntax. (Note, the ```to``` keyword is inclusive, so it automatically defaults to replacing ```<=```, if you want ```<``` then you should write it as ```1 to some_value-1```).
+
+* Istypeless for loops: a name for a differing syntax for writing for-each style loops in DM, however it is NOT DM's standard syntax hence why this is considered a quirk. Take a look at this:
+```
+var/list/bag_of_items = list(sword, apple, coinpouch, sword, sword)
+var/obj/item/sword/best_sword = null
+for(var/obj/item/sword/S in bag_of_items)
+ if(!best_sword || S.damage > best_sword.damage)
+ best_sword = S
+```
+The above is a simple proc for checking all swords in a container and returning the one with the highest damage, it uses DM's standard syntax for a for loop, it does this by specifying a type in the variable of the for header which byond interprets as a type to filter by, it performs this filter using ```istype()``` (or some internal-magic similar to ```istype()```, I wouldn't put it past byond), the above example is fine with the data currently contained in ```bag_of_items```, however if ```bag_of_items``` contained ONLY swords, or only SUBTYPES of swords, then the above is inefficient, for example:
+```
+var/list/bag_of_swords = list(sword, sword, sword, sword)
+var/obj/item/sword/best_sword = null
+for(var/obj/item/sword/S in bag_of_swords)
+ if(!best_sword || S.damage > best_sword.damage)
+ best_sword = S
+```
+specifies a type for DM to filter by, with the previous example that's perfectly fine, we only want swords, but here the bag only contains swords? is DM still going to try to filter because we gave it a type to filter by? YES, and here comes the inefficiency. Whereever a list (or other container, such as an atom (in which case you're technically accessing their special contents list but I digress)) contains datums of the same datatype or subtypes of the datatype you require for your for body
+you can circumvent DM's filtering and automatic ```istype()``` checks by writing the loop as such:
+```
+var/list/bag_of_swords = list(sword, sword, sword, sword)
+var/obj/item/sword/best_sword = null
+for(var/s in bag_of_swords)
+ var/obj/item/sword/S = s
+ if(!best_sword || S.damage > best_sword.damage)
+ best_sword = S
+```
+Of course, if the list contains data of a mixed type then the above optimisation is DANGEROUS, as it will blindly typecast all data in the list as the specified type, even if it isn't really that type! which will cause runtime errors.
+
+* Dot variable: like other languages in the C family, Dream maker has a ```.``` or "Dot" operator, used for accessing variables/members/functions of an object instance.
+eg:
+```
+var/mob/living/carbon/human/H = YOU_THE_READER
+H.gib()
+```
+however DM also has a dot variable, accessed just as ```.``` on it's own, defaulting to a value of null, now what's special about the dot operator is that it is automatically returned (as in the ```return``` statment) at the end of a proc, provided the proc does not already manually return (```return count``` for example). Why is this special? well the ```return``` statement should ideally be free from overhead (functionally free, of course nothing's free) but DM fails to fulfill this, DM's return statement is actually fairly costly for what it does and for what it's used for.
+With ```.``` being everpresent in every proc can we use it as a temporary variable? Of course we can! However the ```.``` operator cannot replace a typecasted variable, it can hold data any other var in DM can, it just can't be accessed as one, however the ```.``` operator is compatible with a few operators that look weird but work perfectly fine, such as: ```.++``` for incrementing ```.'s``` value, or ```.[1]``` for accessing the first element of ```.``` (provided it's a list).
+
##Pull Request Process
There is no strict process when it comes to merging pull requests, pull requests will sometimes take a while before they are looked at by a maintainer, the bigger the change the more time it will take before they are accepted into the code. Every team member is a volunteer who is giving up their own time to help maintain and contribute, so please be nice. Here are some helpful ways to make it easier for you and for the maintainer when making a pull request.
diff --git a/README.md b/README.md
index d7e17e395b8..7e086f035ab 100644
--- a/README.md
+++ b/README.md
@@ -130,7 +130,9 @@ Please see [CONTRIBUTING.md](CONTRIBUTING.md)
All code after commit 333c566b88108de218d882840e61928a9b759d8f on 2014/31/12 at 4:38 PM PST (https://github.com/tgstation/-tg-station/commit/333c566b88108de218d882840e61928a9b759d8f) is licensed under GNU AGPL v3 (http://www.gnu.org/licenses/agpl-3.0.html).
All code before commit 333c566b88108de218d882840e61928a9b759d8f on 2014/31/12 at 4:38 PM PST (https://github.com/tgstation/-tg-station/commit/333c566b88108de218d882840e61928a9b759d8f) is licensed under GNU GPL v3 (https://www.gnu.org/licenses/gpl-3.0.html).
+(Including tools unless their readme specifies otherwise.)
+
+See LICENSE-AGPLv3.txt and LICENSE-GPLv3.txt for more details.
-including tools unless their readme specifies otherwise. See LICENSE-AGPLv3.txt and LICENSE-GPLv3.txt for more details.
All content including icons and sound is under a Creative Commons 3.0 BY-SA
license (http://creativecommons.org/licenses/by-sa/3.0/).
diff --git a/_maps/RandomZLevels/snowdin.dmm b/_maps/RandomZLevels/snowdin.dmm
index 6819b565f6e..c1673e47528 100644
--- a/_maps/RandomZLevels/snowdin.dmm
+++ b/_maps/RandomZLevels/snowdin.dmm
@@ -43,8 +43,8 @@
"aQ" = (/obj/machinery/gateway{dir = 1},/turf/simulated/floor/plasteel/bot{baseturf = /turf/simulated/floor/plating/asteroid/snow},/area/awaymission/snowdin/base)
"aR" = (/obj/structure/closet/crate,/obj/item/weapon/survivalcapsule,/obj/item/clothing/gloves/color/black,/obj/item/clothing/gloves/color/black,/obj/item/clothing/suit/hooded/wintercoat,/obj/item/clothing/suit/hooded/wintercoat,/obj/item/clothing/shoes/winterboots,/obj/item/clothing/shoes/winterboots,/turf/simulated/floor/plasteel/bot{baseturf = /turf/simulated/floor/plating/asteroid/snow},/area/awaymission/snowdin/base)
"aS" = (/obj/structure/closet/crate,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/pill_bottle/stimulant,/turf/simulated/floor/plasteel/bot{baseturf = /turf/simulated/floor/plating/asteroid/snow},/area/awaymission/snowdin/base)
-"aT" = (/turf/simulated/floor/plating,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating/snowed,/area/awaymission/snowdin/post)
-"aU" = (/turf/simulated/floor/plating,/turf/simulated/floor/plating/snowed,/area/awaymission/snowdin)
+"aT" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating/snowed,/area/awaymission/snowdin/post)
+"aU" = (/turf/space,/area/awaymission/snowdin)
"aV" = (/obj/structure/flora/bush,/turf/simulated/floor/plating/asteroid/snow,/area/awaymission/snowdin)
"aW" = (/obj/structure/flora/tree/pine,/turf/simulated/floor/plating/asteroid/snow,/area/awaymission/snowdin)
"aX" = (/mob/living/simple_animal/hostile/skeleton/eskimo,/turf/simulated/floor/plating/asteroid/snow,/area/awaymission/snowdin)
@@ -214,12 +214,12 @@
"ef" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile/ice,/turf/simulated/floor/plating{baseturf = /turf/simulated/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140},/area/awaymission/snowdin/post)
"eg" = (/obj/machinery/light/small,/turf/simulated/floor/plating{baseturf = /turf/simulated/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140},/area/awaymission/snowdin/post)
"eh" = (/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1)
-"ei" = (/obj/effect/spider/stickyweb,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1)
-"ej" = (/mob/living/simple_animal/hostile/poison/giant_spider/hunter/ice,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1)
-"ek" = (/turf/simulated/floor/plating,/mob/living/simple_animal/hostile/bear/snow,/turf/simulated/floor/plating/snowed,/area/awaymission/snowdin)
-"el" = (/mob/living/simple_animal/hostile/poison/giant_spider/nurse/ice,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1)
+"ei" = (/mob/living/simple_animal/hostile/poison/giant_spider/hunter/ice,/turf/simulated/floor/plating/asteroid/snow{temperature = 140},/area/awaymission/snowdin/dungeon1)
+"ej" = (/mob/living/simple_animal/hostile/poison/giant_spider/nurse/ice,/turf/simulated/floor/plating/asteroid/snow{temperature = 140},/area/awaymission/snowdin/dungeon1)
+"ek" = (/obj/effect/spider/stickyweb,/obj/effect/spider/stickyweb,/turf/simulated/floor/plating/asteroid/snow{temperature = 140},/area/awaymission/snowdin/dungeon1)
+"el" = (/obj/effect/spider/stickyweb,/obj/effect/spawner/lootdrop/snowdin/dungeonheavy,/turf/simulated/floor/plating/asteroid/snow{temperature = 140},/area/awaymission/snowdin/dungeon1)
"em" = (/obj/effect/spider/stickyweb,/mob/living/simple_animal/hostile/poison/giant_spider/hunter/ice,/turf/simulated/wall/mineral/snow,/area/awaymission/snowdin/dungeon1)
-"en" = (/obj/effect/spider/stickyweb,/obj/effect/spider/stickyweb,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1)
+"en" = (/obj/effect/spider/stickyweb,/mob/living/simple_animal/hostile/poison/giant_spider/nurse/ice,/turf/simulated/floor/plating/asteroid/snow{temperature = 140},/area/awaymission/snowdin/dungeon1)
"eo" = (/obj/effect/spider/stickyweb,/turf/simulated/floor/plating/ice/colder,/area/awaymission/snowdin/dungeon1)
"ep" = (/obj/effect/spider/stickyweb,/turf/simulated/floor/plating/asteroid/snow{temperature = 140},/area/awaymission/snowdin/dungeon1)
"eq" = (/turf/simulated/wall/mineral/snow,/area/awaymission/snowdin/dungeon1)
@@ -228,13 +228,13 @@
"et" = (/obj/structure/table/wood,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1)
"eu" = (/obj/structure/table/wood,/obj/effect/spawner/lootdrop/snowdin/dungeonlite,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1)
"ev" = (/obj/structure/barricade/wooden,/turf/simulated/floor/plating/asteroid/snow{temperature = 140},/area/awaymission/snowdin/dungeon1)
-"ew" = (/mob/living/simple_animal/hostile/skeleton/ice,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1)
-"ex" = (/obj/effect/spider/stickyweb,/obj/structure/barricade/wooden,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1)
+"ew" = (/obj/effect/spider/stickyweb,/mob/living/simple_animal/hostile/poison/giant_spider/hunter/ice,/turf/simulated/floor/plating/asteroid/snow{temperature = 140},/area/awaymission/snowdin/dungeon1)
+"ex" = (/mob/living/simple_animal/hostile/skeleton,/turf/simulated/floor/plating/asteroid/snow{temperature = 140},/area/awaymission/snowdin/dungeon1)
"ey" = (/obj/structure/closet/crate,/obj/effect/spawner/lootdrop/snowdin/dungeonlite,/obj/effect/spawner/lootdrop/snowdin/dungeonlite,/obj/effect/spawner/lootdrop/snowdin/dungeonlite,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1)
-"ez" = (/mob/living/simple_animal/hostile/skeleton/eskimo,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1)
+"ez" = (/turf/space,/turf/simulated/floor/plating/snowed,/area/awaymission/snowdin/post)
"eA" = (/obj/structure/closet/crate,/obj/effect/spawner/lootdrop/snowdin/dungeonlite,/obj/effect/spawner/lootdrop/snowdin/dungeonheavy,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1)
"eB" = (/obj/structure/table/wood,/obj/effect/spawner/lootdrop/snowdin/dungeonmisc,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1)
-"eC" = (/obj/effect/spider/stickyweb,/obj/effect/spawner/lootdrop/snowdin/dungeonheavy,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1)
+"eC" = (/turf/simulated/floor/plating/snowed,/area/awaymission/snowdin/post)
"eD" = (/turf/simulated/wall/ice{baseturf = /turf/simulated/floor/plating/asteroid/snow},/area/awaymission/snowdin/dungeon1)
"eE" = (/obj/structure/table/wood,/obj/effect/spawner/lootdrop/snowdin/dungeonmid,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1)
"eF" = (/obj/structure/barricade/wooden,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1)
@@ -242,13 +242,13 @@
"eH" = (/obj/structure/flora/rock/pile/icy,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1)
"eI" = (/obj/structure/closet/crate,/obj/effect/spawner/lootdrop/snowdin/dungeonmid,/obj/effect/spawner/lootdrop/snowdin/dungeonmid,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1)
"eJ" = (/obj/structure/barricade/wooden,/turf/simulated/floor/plating/ice/colder,/area/awaymission/snowdin/dungeon1)
-"eK" = (/obj/effect/spawner/lootdrop/snowdin/dungeonheavy,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1)
-"eL" = (/obj/effect/spider/stickyweb,/mob/living/simple_animal/hostile/poison/giant_spider/nurse/ice,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1)
-"eM" = (/obj/effect/spider/stickyweb,/mob/living/simple_animal/hostile/poison/giant_spider/hunter/ice,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1)
+"eK" = (/turf/space,/obj/structure/girder,/turf/simulated/floor/plating/snowed,/area/awaymission/snowdin/post)
+"eL" = (/obj/machinery/door/airlock/maintenance_hatch,/turf/space,/area/awaymission/snowdin/post)
+"eM" = (/mob/living/simple_animal/hostile/skeleton/eskimo,/turf/simulated/floor/plasteel/darkbrown{baseturf = /turf/simulated/floor/plating/asteroid/snow; temperature = 180},/area/awaymission/snowdin/post)
"eN" = (/obj/structure/table/wood,/obj/effect/spawner/lootdrop/snowdin/dungeonlite,/obj/effect/spawner/lootdrop/snowdin/dungeonlite,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1)
"eO" = (/obj/structure/closet/crate,/obj/effect/spawner/lootdrop/snowdin/dungeonmid,/obj/effect/spawner/lootdrop/snowdin/dungeonlite,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1)
"eP" = (/obj/structure/closet/crate,/obj/effect/spawner/lootdrop/snowdin/dungeonmid,/obj/effect/spawner/lootdrop/snowdin/dungeonlite,/obj/effect/spawner/lootdrop/snowdin/dungeonlite,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1)
-"eQ" = (/mob/living/simple_animal/hostile/skeleton,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1)
+"eQ" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/surgicaldrill,/obj/item/weapon/hemostat,/obj/item/weapon/scalpel{pixel_y = 12},/obj/item/weapon/cautery{pixel_x = 4},/turf/simulated/floor/plasteel/whiteblue{baseturf = /turf/simulated/floor/plating/asteroid/snow},/area/awaymission/snowdin/sekret)
"eR" = (/turf/indestructible/rock/snow,/area/awaymission/snowdin/cave)
"eS" = (/turf/simulated/floor/plating/asteroid/snow,/area/awaymission/snowdin/cave)
"eT" = (/turf/simulated/floor/plating/ice,/area/awaymission/snowdin/cave)
@@ -321,7 +321,6 @@
"gi" = (/obj/structure/closet/crate,/obj/effect/spawner/lootdrop/snowdin/dungeonmid,/obj/effect/spawner/lootdrop/snowdin/dungeonmid,/obj/effect/spawner/lootdrop/snowdin/dungeonmisc,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1)
"gj" = (/obj/structure/closet/crate,/obj/effect/spawner/lootdrop/snowdin/dungeonmid,/obj/effect/spawner/lootdrop/snowdin/dungeonmid,/obj/effect/spawner/lootdrop/snowdin/dungeonlite,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1)
"gk" = (/obj/structure/barricade/wooden,/turf/simulated/floor/plating/asteroid/basalt{temperature = 140},/area/awaymission/snowdin/dungeon1)
-"gl" = (/mob/living/simple_animal/hostile/bear/snow,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1)
"gm" = (/obj/structure/closet/crate,/obj/effect/spawner/lootdrop/snowdin/dungeonmid,/obj/effect/spawner/lootdrop/snowdin/dungeonmisc,/obj/effect/spawner/lootdrop/snowdin/dungeonlite,/obj/effect/spawner/lootdrop/snowdin/dungeonlite,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1)
"gn" = (/obj/effect/bump_teleporter{id = "up"; id_target = "down"},/turf/simulated/floor/plasteel/stairs/left{baseturf = /turf/simulated/floor/plating/asteroid/snow; temperature = 140},/area/awaymission/snowdin/cave)
"go" = (/obj/effect/bump_teleporter{id = "up"; id_target = "down"},/turf/simulated/floor/plasteel/stairs/right{baseturf = /turf/simulated/floor/plating/asteroid/snow; temperature = 140},/area/awaymission/snowdin/cave)
@@ -333,7 +332,6 @@
"gu" = (/obj/item/weapon/stock_parts/cell/high/empty,/turf/simulated/floor/plating{baseturf = /turf/simulated/floor/plating/asteroid/snow},/area/awaymission/snowdin/post)
"gv" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor/plating{baseturf = /turf/simulated/floor/plating/asteroid/snow},/area/awaymission/snowdin/post)
"gw" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/electrical,/turf/simulated/floor/plating{baseturf = /turf/simulated/floor/plating/asteroid/snow},/area/awaymission/snowdin/post)
-"gx" = (/turf/simulated/floor/plating,/mob/living/simple_animal/hostile/skeleton/eskimo,/turf/simulated/floor/plating/snowed,/area/awaymission/snowdin/post)
"gy" = (/obj/structure/table,/turf/simulated/floor/plasteel/darkbrown{baseturf = /turf/simulated/floor/plating/asteroid/snow; temperature = 180},/area/awaymission/snowdin/post)
"gz" = (/turf/simulated/floor/plasteel/darkbrown{baseturf = /turf/simulated/floor/plating/asteroid/snow; temperature = 180},/area/awaymission/snowdin/post)
"gA" = (/obj/structure/closet/secure_closet{anchored = 1; name = "Contraband Locker"; req_access_txt = "3"},/obj/item/weapon/gun/projectile/automatic/speargun,/obj/item/weapon/twohanded/spear,/obj/item/weapon/twohanded/spear,/obj/item/weapon/twohanded/spear,/turf/simulated/floor/plating{baseturf = /turf/simulated/floor/plating/asteroid/snow},/area/awaymission/snowdin/post)
@@ -408,7 +406,6 @@
"hR" = (/obj/effect/spawner/lootdrop/snowdin/dungeonlite,/turf/simulated/floor/plating/asteroid/snow,/area/awaymission/snowdin/cave)
"hS" = (/obj/structure/table/wood,/obj/effect/spawner/lootdrop/snowdin/dungeonmid,/obj/effect/spawner/lootdrop/snowdin/dungeonmid,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1)
"hT" = (/obj/structure/closet/crate,/obj/effect/spawner/lootdrop/snowdin/dungeonlite,/turf/simulated/floor/plating/snowed/colder,/area/awaymission/snowdin/dungeon1)
-"hU" = (/mob/living/simple_animal/hostile/skeleton/ice,/turf/simulated/floor/plating{baseturf = /turf/simulated/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140},/area/awaymission/snowdin/post)
"hV" = (/turf/simulated/wall/r_wall{baseturf = /turf/simulated/floor/plating/asteroid/snow},/area/awaymission/snowdin/sekret)
"hW" = (/obj/structure/closet/emcloset,/obj/item/weapon/tank/internals/emergency_oxygen/engi,/obj/item/clothing/mask/breath,/turf/simulated/floor/plating{baseturf = /turf/simulated/floor/plating/asteroid/snow},/area/awaymission/snowdin/sekret)
"hX" = (/obj/machinery/space_heater,/turf/simulated/floor/plating{baseturf = /turf/simulated/floor/plating/asteroid/snow},/area/awaymission/snowdin/sekret)
@@ -459,7 +456,6 @@
"iQ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile/ice,/turf/simulated/floor/plating{baseturf = /turf/simulated/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140},/area/awaymission/snowdin/sekret)
"iR" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{baseturf = /turf/simulated/floor/plating/asteroid/snow; wet = 0},/area/awaymission/snowdin/sekret)
"iS" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel/cmo{baseturf = /turf/simulated/floor/plating/asteroid/snow},/area/awaymission/snowdin/sekret)
-"iT" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/surgicaldrill,/obj/item/weapon/hemostat,/obj/item/weapon/scalpel{pixel_y = 12},/obj/item/weapon/circular_saw,/obj/item/weapon/retractor,/obj/item/weapon/cautery{pixel_x = 4},/turf/simulated/floor/plasteel/whiteblue{baseturf = /turf/simulated/floor/plating/asteroid/snow},/area/awaymission/snowdin/sekret)
"iU" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel/whiteblue{baseturf = /turf/simulated/floor/plating/asteroid/snow},/area/awaymission/snowdin/sekret)
"iV" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel/whiteblue{baseturf = /turf/simulated/floor/plating/asteroid/snow},/area/awaymission/snowdin/sekret)
"iW" = (/obj/structure/sign/bluecross{pixel_x = -32},/turf/simulated/floor/plasteel{baseturf = /turf/simulated/floor/plating/asteroid/snow; wet = 0},/area/awaymission/snowdin/sekret)
@@ -737,115 +733,115 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacac
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacalaxawayalacacacacacacacacacacacacacadazazazazadadaAadacacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacalaCaBaEaDalalalalalalaFacacacacacacaGacacacacacamaoamacacacacacacacacacacacacacacacacacacafafafafafafafafafafafafacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacalalaDaIaHaJaIaIaIaKaIaIaIaIaFacacacacacacacacacacacadaAadacacacacacacacacacacacacacacacacacacafafafafafafafafafafafafacacacacacacacacacacaLacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacaFalaMaMaDaIaNaJaOaQaPaIaRaIaSaIaIaFacacacacacacacacacacaTaUaGacacacacacacacacacacacacacacacacaVacafafafafafafafafafafafafacacacaWacacacacacacaLacaXacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacaWacacacacacaFaFaYaZaZaZbaaIaIaJbbbdbcaIbeaIbfaIbgalacacacacacacacacacacaUaUacacacacacacacacacacacacacacacacacacacafafafafafafafafafafacacacaWacacacaWacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacalbibhbjaZaZbkblaDbmaIaJbnbpboaIbqaIbeaIbralacacacacacacacacacaUaUaUacaWacacacacacacacacacacacacacacacacacafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacalbsbkaZaZaZbkaZbtaDbvbubxbwbybwbwaIaIbzaIbAalacacacacacacacacacaUaUacacacacacacacacacacacacacacacacacacacacafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacalbBaZbCbEbDbGbFblaDbvbHbJbIbLbKbwaIaIaIaIaIalacacacacacacacacaUaUaUacbMacacacacacacacacacacacacacacacacacafafafafafafafafafafafacacacacacacacacaWacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacalaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDbNaDaDaDalacacacacacacacacaUaUacacacacacacacacacacacacacacacacacacacacafafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacalbObQbPaDbRbTbSbUaDbVbPaDbWbYbXbZaDcbcaccccalacacacacacacacacaUaUacacacacacacacacacacacacacacacacacacacacafafafafafafafafafafafacacacaLacacacacacacacacacacacacaWacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacalcdcebVaDbUbUbUbUcfcecgaDchchcichaDcbcbckcjaFacacacacacacacacaUaUacacacacacacacacacacacacacaWacacacacacacafafafafafafafafafafafacacacacacacacacacacacacacacaWacacacaWacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaWacacacacacacacacacacacacacalaDcfaDaDbUclbUbUaDcdbOaDchchchchaDcmcbcbcnaFacacacacacacacacaUaUacacacacacacacacacacacacacacacacacacacacafafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacaWacacacacacacacacacaFbUcpcoclcqcrbUbUaDaDaDaDchchchchcsckcbcbctaFacacacacacacacaUaUaUacacacacacacacacacacacacacacacacacacacacafafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacaFbUbUbUbUcucvclbUaDcxcwaDchchchchaDcmcbcbcyaFacacacacacacacaUaUacacacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacaLaLacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaWacacacacacaWacacacacacaFbUbUbUbUclbUcpcAczcCcBaDchchcDchaDcbcbcbcEaFacacacacacacacaUaUacacacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacaLacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacaFbUbUbUbUcpbUcFbUaDcdbOaDcGbZbXbYaDcbcHcIcIalacacacacacacacaUaUacacacacaVacacacacacacacacacacacacacafafafafafafafafafafafafafacacacacacacacacacacaWacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacaWacacacacacacacacalaDaDaDcJaDaDaDaDaDaDaDaDaDaDaDaDaDbNaDaDaDalacacacacacacacaUaUacacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafacacacacacacacacaWacacacaWacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacalaIaKaIaIaIaIaIaIaIaIaIaKaIaIaIaIaIaIaIaKaIalacacacacacacaUaUaUacacacacacacaWacacacacacacacacacacacafafafafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacalaIaIaIcKcKaIcKaIaIaIaIaIaIaIaIaIaIaIaIaIaIalacacacacacacaUaUacacacacacacacacacacacaWacacacacacacafafafafafafafafafafafafafafacacacacacacacacacacacacaLaLaLacacacacaWacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaVacacacacacacacacacacalalaFaFaFaFaFaFalalaDcLaDcLaDalalalalalalalalacacacacacacaUaUacaWacacacacacacacacacacacacacacacacafafafafafafafafafafafafafafacacacacacacacacacacacacaLaLacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaFaZbiaZaFacacacacacacacacacacacacacacaUaUacacacacacacacacacaWacacacacacafafafafafafafafafafafafafafafafafacacacacacbMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaFaZbiaZaFacacacacacacacacacacacacacacaUaUacacacacacacacacacacacacacacacafafafafafafafafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacacacacacaWacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacalcLalcLalacacacacacacacacacacacacacacaUaUaUacacacacacacacacacacacaWacafafafafafafafafafafafafafafafafafacacacacacacaLaLaLaLacaccMacacacaccPcPcPcPcPacacacacaWacacacaWacacacacacaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacaVacaccOaUaUaUcOacacacacacacacacacacacaWacacaccQaUaUacacacacacacacacacacacacafafafafafafafafafafafafafafafafafacacacacacacaLaLaLaLacacacacacaccPcPcScRcTcPcPacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacaWacacacacacacacacacacacaccMacacacacacacaUaUaUacacacacacacacacacacacacacacacacaWaUaUacacacacacacacacacacacacafafafafafafafafafafafafacacacacacacacacacacacacacaLaLaLaLaLaccPcPcPcRcUcRcRcRcPacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacaccVacacacacacacaUaUaUaUacacacacacacacaWacacacacacacacacaUaUacacacacacacacacacacacafafafafafafafafafafafafafacacacacacacacacacacacacacaLaLaLaLaLaccWcRcRcRcRcRcRcXcPacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcYcZcZcYcYcZcYadcYcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacaccMcVdacVcMacacacaUaUaUaUaUacacacacacacacacacacacacacaWacacaUaUaUacacacacacbMacacacacafafafafafafafafafafafacacacacacacacbMacacacacacacacacacaLaLaLaLcPcPcPdbcRdccRcRcPacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNaddddfdededgdedhadcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacaccVacacacacacaUaUaUaUaUacacacacacacacacacacacacacacacacacaUaUacacacacacacacacacacafafafafafafafafafafafacacacacacacacacacacacacacaVacacacaLaLaLaLacaccPcPcRcRdicPcPacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcYdjdgdedfdfdfdkcYcYadadadcNdldldldldldldmdldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaacacacacacacacacacacaWacacacacacacacacacacacacacaccMacacacacacaUaUaUaUaUacacacacacacacacacacacacacacacacaWaUaUacacacacacacaUaUaUaUafafafafafafafafafafafacacacacacacbMacacbMacacacacacacacaLaLaLaLacacaccPcPcPcPcPacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcYdgdfdedfaddfdedeaddfdfdnaddldldldocNcNcNcNdldldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacaWacacacacacacacacacacacacacacacacaUaUaUaUaUaUaUaUacacacacacacacacacacacacacacaUaUaUaUaUaUaUaUaUaUaUdpdpafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNaddfdededfaddfdedgdfdfdfadaddlcNcNcNcNcNcNcNcNcNcNcNdldldldodldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaacacacacacaLaLacacacacacacacacacacacacacacacacacacacacacacacacaUaUaUaUaUaUaUaUaUaUaUaUaUacacacacacacaUaUaUaUaUaUaUaUaUaUaUaUaUaUdpdpdpafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaLaLacacaWacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcZdededgdfdfdfdfdfdfdgadaddldlcNcNcNcNcNcNcNcNcNcNcNdldldldldqdqdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaacacacacaLaLaLaLacacacacaWacacacacacacacacacacacacacacacacacacaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUdpdpdpdpafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaLacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcZdrdfdfdfdfdtdsaddgduaddldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaacacaLaLaLaLaLaLacacacacacacacacacacacacacacaWacacacacacacacacaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUdpdpafafafafafafafafafacacacacacacacacacacacaWacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcYdrdfadadaddfdgaddvdwaddldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNcNcNcNcNcNcNdxdxdydydycNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaacacaLaLaLaLaLaLacacacacacacacaWacacacacacacacacacacaWacacacdzdzdzdzdzdzdzdzaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUacacacacacafdpdpafafafafafafafafacacacacacacaWacacacacacacacacacacacacacacacacacacacacacacacacacacaLacacacbMacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcYaddfdfdfdAdfdfdgdvdwdwdldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldlcNcNcNcNcNcNcNcNcNdydxdxdxdydydxdxdycNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaacacaLaLaLaLaLacacacacacacacacacacacaWacacacacacacacacacacacdzdzdzdzdzacacacaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUacacacacacacacafafafdpdpafafdpafafafafacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcYcYdedBdfdfdCadadaddwdldldlcNcNcNcNcNcNcNcNdDdDdDdDcNcNcNcNcNdldlcNcNcNcNcNcNcNcNcNdydydxdxdydxdxdxdydldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacaFalaMaMaDaIaNaJaOaQaPaIaRaIaSaIaIaFacacacacacacacacacacaTdzaGacacacacacacacacacacacacacacacacaVacafafafafafafafafafafafafacacacaWacacacacacacaLacaXacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacaWacacacacacaFaFaYaZaZaZbaaIaIaJbbbdbcaIbeaIbfaIbgalacacacacacacacacacacdzdzacacacacacacacacacacacacacacacacacacacafafafafafafafafafafacacacaWacacacaWacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacalbibhbjaZaZbkblaDbmaIaJbnbpboaIbqaIbeaIbralacacacacacacacacacdzdzdzacaWacacacacacacacacacacacacacacacacacafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacalbsbkaZaZaZbkaZbtaDbvbubxbwbybwbwaIaIbzaIbAalacacacacacacacacacdzdzacacacacacacacacacacacacacacacacacacacacafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacalbBaZbCbEbDbGbFblaDbvbHbJbIbLbKbwaIaIaIaIaIalacacacacacacacacdzdzdzacbMacacacacacacacacacacacacacacacacacafafafafafafafafafafafacacacacacacacacaWacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacalaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDbNaDaDaDalacacacacacacacacdzdzacacacacacacacacacacacacacacacacacacacacafafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacalbObQbPaDbRbTbSbUaDbVbPaDbWbYbXbZaDcbcaccccalacacacacacacacacdzdzacacacacacacacacacacacacacacacacacacacacafafafafafafafafafafafacacacaLacacacacacacacacacacacacaWacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacalcdcebVaDbUbUbUbUcfcecgaDchchcichaDcbcbckcjaFacacacacacacacacdzdzacacacacacacacacacacacacacaWacacacacacacafafafafafafafafafafafacacacacacacacacacacacacacacaWacacacaWacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaWacacacacacacacacacacacacacalaDcfaDaDbUclbUbUaDcdbOaDchchchchaDcmcbcbcnaFacacacacacacacacdzdzacacacacacacacacacacacacacacacacacacacacafafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacaWacacacacacacacacacaFbUcpcoclcqcrbUbUaDaDaDaDchchchchcsckcbcbctaFacacacacacacacdzdzdzacacacacacacacacacacacacacacacacacacacacafafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacaFbUbUbUbUcucvclbUaDcxcwaDchchchchaDcmcbcbcyaFacacacacacacacdzdzacacacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacaLaLacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaWacacacacacaWacacacacacaFbUbUbUbUclbUcpcAczcCcBaDchchcDchaDcbcbcbcEaFacacacacacacacdzdzacacacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacaLacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacaFbUbUbUbUcpbUcFbUaDcdbOaDcGbZbXbYaDcbcHcIcIalacacacacacacacdzdzacacacacaVacacacacacacacacacacacacacafafafafafafafafafafafafafacacacacacacacacacacaWacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacaWacacacacacacacacalaDaDaDcJaDaDaDaDaDaDaDaDaDaDaDaDaDbNaDaDaDalacacacacacacacdzdzacacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafacacacacacacacacaWacacacaWacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacalaIaKaIaIaIaIaIaIaIaIaIaKaIaIaIaIaIaIaIaKaIalacacacacacacdzdzdzacacacacacacaWacacacacacacacacacacacafafafafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacalaIaIaIcKcKaIcKaIaIaIaIaIaIaIaIaIaIaIaIaIaIalacacacacacacdzdzacacacacacacacacacacacaWacacacacacacafafafafafafafafafafafafafafacacacacacacacacacacacacaLaLaLacacacacaWacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaVacacacacacacacacacacalalaFaFaFaFaFaFalalaDcLaDcLaDalalalalalalalalacacacacacacdzdzacaWacacacacacacacacacacacacacacacacafafafafafafafafafafafafafafacacacacacacacacacacacacaLaLacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaFaZbiaZaFacacacacacacacacacacacacacacdzdzacacacacacacacacacaWacacacacacafafafafafafafafafafafafafafafafafacacacacacbMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaFaZbiaZaFacacacacacacacacacacacacacacdzdzacacacacacacacacacacacacacacacafafafafafafafafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacacacacacaWacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacalcLalcLalacacacacacacacacacacacacacacdzdzdzacacacacacacacacacacacaWacafafafafafafafafafafafafafafafafafacacacacacacaLaLaLaLacaccMacacacaccPcPcPcPcPacacacacaWacacacaWacacacacacaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacaVacaccOdzdzdzcOacacacacacacacacacacacaWacacacaUdzdzacacacacacacacacacacacacafafafafafafafafafafafafafafafafafacacacacacacaLaLaLaLacacacacacaccPcPcScRcTcPcPacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacaWacacacacacacacacacacacaccMacacacacacacdzdzdzacacacacacacacacacacacacacacacacaWdzdzacacacacacacacacacacacacafafafafafafafafafafafafacacacacacacacacacacacacacaLaLaLaLaLaccPcPcPcRcUcRcRcRcPacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacaccVacacacacacacdzdzdzdzacacacacacacacaWacacacacacacacacdzdzacacacacacacacacacacacafafafafafafafafafafafafafacacacacacacacacacacacacacaLaLaLaLaLaccWcRcRcRcRcRcRcXcPacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcYcZcZcYcYcZcYadcYcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacaccMcVdacVcMacacacdzdzdzdzdzacacacacacacacacacacacacacaWacacdzdzdzacacacacacbMacacacacafafafafafafafafafafafacacacacacacacbMacacacacacacacacacaLaLaLaLcPcPcPdbcRdccRcRcPacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNaddddfdededgdedhadcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacaccVacacacacacdzdzdzdzdzacacacacacacacacacacacacacacacacacdzdzacacacacacacacacacacafafafafafafafafafafafacacacacacacacacacacacacacaVacacacaLaLaLaLacaccPcPcRcRdicPcPacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcYdjdgdedfdfdfdkcYcYadadadcNdldldldldldldmdldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaacacacacacacacacacacaWacacacacacacacacacacacacacaccMacacacacacdzdzdzdzdzacacacacacacacacacacacacacacacacaWdzdzacacacacacacdzdzdzdzafafafafafafafafafafafacacacacacacbMacacbMacacacacacacacaLaLaLaLacacaccPcPcPcPcPacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcYdgdfdedfaddfdedeaddfdfdnaddldldldocNcNcNcNdldldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacaWacacacacacacacacacacacacacacacacdzdzdzdzdzdzdzdzacacacacacacacacacacacacacacdzdzdzdzdzdzdzdzdzdzdzdpdpafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNaddfdededfaddfdedgdfdfdfadaddlcNcNcNcNcNcNcNcNcNcNcNdldldldodldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaacacacacacaLaLacacacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzdzdzdzdzdzdzdzacacacacacacdzdzdzdzdzdzdzdzdzdzdzdzdzdzdpdpdpafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaLaLacacaWacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcZdededgdfdfdfdfdfdfdgadaddldlcNcNcNcNcNcNcNcNcNcNcNdldldldldqdqdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaacacacacaLaLaLaLacacacacaWacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdpdpdpdpafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaLacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcZdrdfdfdfdfdtdsaddgduaddldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaacacaLaLaLaLaLaLacacacacacacacacacacacacacacaWacacacacacacacacdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdpdpafafafafafafafafafacacacacacacacacacacacaWacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcYdrdfadadaddfdgaddvdwaddldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNcNcNcNcNcNcNdxdxdydydycNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaacacaLaLaLaLaLaLacacacacacacacaWacacacacacacacacacacaWacacacdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzacacacacacafdpdpafafafafafafafafacacacacacacaWacacacacacacacacacacacacacacacacacacacacacacacacacacaLacacacbMacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcYaddfdfdfdAdfdfdgdvdwdwdldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldlcNcNcNcNcNcNcNcNcNdydxdxdxdydydxdxdycNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaacacaLaLaLaLaLacacacacacacacacacacacaWacacacacacacacacacacacdzdzdzdzdzacacacdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzacacacacacacacafafafdpdpafafdpafafafafacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcYcYdedBdfdfdCadadaddwdldldlcNcNcNcNcNcNcNcNdDdDdDdDcNcNcNcNcNdldlcNcNcNcNcNcNcNcNcNdydydxdxdydxdxdxdydldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
aaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacaWacacacacacdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacafafafafafafafdpdpafafafacacacaWacacacacacacacacacacacacacacacaWacacacacacacacacacacacacacacacacbMacacbMacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcYcZdEdededfdCaddldldldldldldldldlcNcNdldmdDdDdDdDdDcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNdydydydydydxdxdydldqdldFdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
aaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacafafafafafafafafdpdpafafacacacacacacacacaWacacacaLacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcYaddGdededHadaddldldmdldldldldqdlcNcNdldDdDdDdDdldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNdydydxdydydycNcNdldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacaWacacdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacafafafafafafafdpdpdpdpdpafacacacacacacacacacacacacacacacacaWacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcYcZdedgcYdfaddldldldldldldldldldlcNcNdldDdDdDdDdldldldldldldldlcNcNcNcZcZcZcZcZcZcZcNdydxdxdydycNcNcNdldldDdDdDdldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacafafafafafafafafdpdpdpdpdpacacacacacacacacacacacaLaLacacacacacacacacaWacacacacacaWacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcYcZdIdeaddfaddldldldldodldldldldqdqdldldDdDdDdldldldldldldldlcNcNcNcNcZdJdKcZdMdLcZcNdxdxdycNcNcNcNcNdldldDdDdDdDdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafdpdpdpdpdpaUaUacacacacacacacacaLaLacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcYcZdedeadadcYcNdldldldldldldldldqdqdldldDdDdDdldldldldldldldlcNcNcNcNcZdNdJdOdQdQdPdydydydldlcNcNdldldldDdDdDdDdDdDdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacaWacacacacacacacacacacacacbMacacacacdzdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafafdpdpdpdpaUaUacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcYaddededRcZcYcNcNcNcNdldldldldldldldldldDdDdDdlcNdldldodldldlcNcNcNcNcZdSdUcZdQdPdTdydydldldlcNcNdldldmdDdDdDdDdDdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacaWacacacacacacacacacacacacacdzdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafafafdpdpdpaUaUaUaUaUacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcYaddedgdecZcYcNcNcNcNdldldldldldldodldDdDdDdDdlcNdldldldmdldlcNcNcNcNcZcZcZcZdVcZcZcNcNdldldldldldqdldldDdDdldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzdzacacacacacacacacaWacacacacacacacacacacacafafafafafafafafafafafafafafafafafafaUaUaUaUaUaUaUaUacacacacacacdWacacacacacacacacacacacacacacacacacacacacacacacaLaLacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcYcYcZdedecZcYcNcNcNcNdldqdldldldldldldDdDdDcNcNcNdldldldldldldldlcNcNcNcNcZajajajcZcNcNdqdldldldldldldldldldldlcNdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacaWacacacacacacacacaLaLacacacacdzdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafafafafafacaUaUaUaUaUaUaUaUaUacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaLacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcYcYcZdedecZcYcNcNcNcNdldldldldldldldldDdDcNcNcNcNcNdldldldldldldldldldlcNcZajajdXcZcNcNdldldldlcNcNcNcNcNcNcNcNcNdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacaLaLaLaLaLacacacdzdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafafafafafacacaUaUaUaUaUaUaUaUacacacacacacacacacacacacacacacacacacacacacacacacaVacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcYcYcYdededYcZcNcNcNcNdldldldldqdldldldDdDcNcNcNcNcNdldldldldldldldlduadcYcZajajdZcZcNcNcNdldldlcNcNcNcNcNcNcNcNcNdldDcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacaWacacacaLaLaLaLacacacacdzdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafafafafafacacacacaUaUaUaUaUaUaUacacacacacacacacacacacacacacacbMacacbMacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcYebeacYdedgcZcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldldlecdfecajajdXcZcNcNcNdldldlcNcNcNcNcNcNcNcNcNdDdDcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacaLaLaLaLacacacacdzdzdzdzdzdzacacacbMacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafafafafacacacacacaUaUaUaUaUaUaUacacacacacaWacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcYeeedcYdedecZcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldDdldldldlduadefcZcZcZcZcZcNcNcNdldldlcNcNcNcNcNcNcNcNcNdDdDcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacaLaLaLacacacacacdzdzdzdzdzdzacacacacacacacacacacaVacacacacacacacacacacafafafafafafafafafafafafafacacacacacacacacacaUaUaUaUaUaUacacacacacacacacacacdWacacacacacacbMacacbMacacacacacacacaWacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcYdfdfdededecZcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldDdldldlcNcNcNcNcNcNcNcNcNdldlcNcNcNcNcNcNdldldDdDdDcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzacacbMacacbMacacacacacacacacacacacacacafafafafafafafafafafafafafafafacacacacacacacacacacaUaUaUaUacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcZdfegdfdfdecZcNcNcNcNehehehehehehehcNcNcNcNcNcNcNcNcNcNdldldldldldDdldldlcNcNcNcNcNcNcNdldldldldlcNcNcNcNcNdldldDdDcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafafafafafacacacacacacacacacacaUaUaUaUaUaUacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcZcZcZcZcZcZcZcNcNcNcNehehejeieieiehcNcNcNcNcNcNcNcNcNcNdldFdldldldDdldldldlcNcNdldldldldldldldldldldldldlcNdldDdDdDcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacbMacacacacacdzdzdzdzdzdzacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafafafafafacacacacacacacacacacacacaUaUaUaUacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeheieieheieiehehcNcNcNcNcNcNcNcNcNcNdldldldldldDdDdDdldlcNcNdldldldmdldldldldldldldldldldldldDdDcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzacacacacacacacacacacacacacacacafafafafafafafafafafafafafafafafafafafafacacacacbMacacacacacacekaUaUacaUacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeheieheheheheleheienemehcNcNcNdDeoesepdldqdqdldldDdDdldldldldldldldldldlcNcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNcNcNeqeqeqeqeqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacaWacacacacacacbMacacbMacacacdzdzdzdzdzdzacacacacacacacacacacacacacafafafafafafafafafafafafafafafafafafafafafafacacacacacacacacacacacacaUaUacacaUacacacacacacacacacaWacacacacacacacacacacacacacaLaLacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNejereicNcNeheheheieneiehcNcNcNdDeoesepdldqdqdldldDdDdldldldldldlcNcNcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNcNcNeqeheheteueqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzacacacacacaWacacafafafafafafafafafafafafafafafafafafafafafafafafafafafacacacbMacacbMacacacacacaUaUacacacacacacacacacacacacacacacacacacacacacacacacacacaLaLacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeheheheieicNcNcNcNehejeheqeheqdDdDeoeoevdldldldldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNcNcNcNcNeqeqeqeheheheweheqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzacacacacacacacacacafafafafafafafafafafafafafafafafafafafafafafafafafafafacacacacacacacacacacacacaUaUacaUacacacacacacacaWacacacacacacacacacaWacacacacaLacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeheieieieicNcNcNcNehereierehexeodDeoeocNcNcNcNcNdldldldldldldmcNcNcNcNcNcNcNcNcNcNcNcNcNdldldmdlcNcNcNcNcNcNcNcNeqeyehehcNeheheqeqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzacacacacacacacacafafafafafafafafafafafafafafafafafafafafafafafafafafafafacacacacacacacacacacacacacaUacacacacacacacacacacacacacacaWacacacacacacacacacacacaLacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeherejehehcNcNcNcNeheiereieqexeodDepepcNcNcNcNcNdldldldDdDdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNeqehehewehehehehehcNeqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzdzacacacacacacacafafafafafafafafafafafafafafafafafafafafafafafafafafafafafacacacacacacacacacacacacacacacaUacacdWacacacacacaLacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeheieiehehehehcNcNcNcNcNcNcNcNdDdDdldlcNcNcNcNcNdldldldDdDdldlcNcNcNcNeqeqeqcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNeqehehehehehehezeheheqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacbMacacacacacacacacacacacacacacacacdzdzdzdzdzdzdzacacacacacacacafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacaLacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNehehehehehelehcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNeqeAeheheqcNcNcNcNcNcNcNdldodlcNcNcNcNcNeqeBeheheqeqeqeqeheheheqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzacacacacacacafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNejeieieieieCeiehcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdDdldydlcNcNcNcNeDeheqeheDcNcNcNcNcNcNcNdldldlcNcNcNcNcNeqeEehehdDdDdDeheqeheheqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacaVacacacacacacacacacacacdzdzdzdzdzdzacacacacacafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacaLacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeheiereieheieieieicNcNcNcNcNcNcNcNcNcNcNcNcNcNdldydydycNcNcNcNeqeheweFeqeqeqeqcNcNcNcNdldldlcNcNcNcNcNeqehehdDdDdDdDeheqeGcNeqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzacacacafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeheheheheheheheieicNcNcNcNcNcNcNcNcNcNcNcNcNcNdydydydycNcNcNcNcNeqeqeFeFeHeheIeqcNeqeqdldldlcNcNcNcNcNcNeqeqeqeqeJeJeqeqeqeqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaLacacacacacacacacacacacacacacacacdzdzdzdzdzacacacacafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacacacacacaWacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeheheheieiejeieCeheieheheiereieicNcNcNcNcNcNdxdydydycNcNcNcNcNcNeDeheqehdDeheqeqeheJdldlcNcNcNcNcNcNcNcNcNdlevevevcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaLaLaLacacacacacacacacacacacacacacacdzdzdzdzdzacacacacafafafafafafafafafafafafafafafafafacacacacafafafafafafafafafafafafafafafafafafafafacacacacacacacacacacacaUacaUaWacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeheKeheheheheqeieieLeheheMeieieCcNcNcNcNcNcNdydydydycNcNcNcNcNcNcNeDeqeheweheheheheJdmdocNcNcNcNcNcNcNcNdldldodlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaLaLaLaLacacacacacacacacacacacacacacdzdzdzdzdzacacacafafafafafafafafafafafafafafafafacacacacacacacacacafafafafafafafafafafafafafafafafafafafacacacacacacacaUacacacaUacacacacacacacacacaWacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeheieieiehehcNcNcNcNcNcNcNcNcNcNdydydydydydydycNcNcNcNcNcNeqeqeqeqeqeheqdlcNcNcNcNcNdldldldldldldDdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafdpdpdpdpdpdzdzacacacacacacacacaLaLacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcYcZdedeadadcYcNdldldldldldldldldqdqdldldDdDdDdldldldldldldldlcNcNcNcNcZdNdJdOdQdQdPdydydydldlcNcNdldldldDdDdDdDdDdDdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacaWacacacacacacacacacacacacbMacacacacdzdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafafdpdpdpdpdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcYaddededRcZcYcNcNcNcNdldldldldldldldldldDdDdDdlcNdldldodldldlcNcNcNcNcZdSdUcZdQdPdTdydydldldlcNcNdldldmdDdDdDdDdDdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacaWacacacacacacacacacacacacacdzdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafafafdpdpdpdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcYaddedgdecZcYcNcNcNcNdldldldldldldodldDdDdDdDdlcNdldldldmdldlcNcNcNcNcZcZcZcZdVcZcZcNcNdldldldldldqdldldDdDdldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzdzacacacacacacacacaWacacacacacacacacacacacafafafafafafafafafafafafafafafafafafdzdzdzdzdzdzdzdzacacacacacacdWacacacacacacacacacacacacacacacacacacacacacacacaLaLacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcYcYcZdedecZcYcNcNcNcNdldqdldldldldldldDdDdDcNcNcNdldldldldldldldlcNcNcNcNcZajajajcZcNcNdqdldldldldldldldldldldlcNdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacaWacacacacacacacacaLaLacacacacdzdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafafafafafacdzdzdzdzdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaLacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcYcYcZdedecZcYcNcNcNcNdldldldldldldldldDdDcNcNcNcNcNdldldldldldldldldldlcNcZajajdXcZcNcNdldldldlcNcNcNcNcNcNcNcNcNdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacaLaLaLaLaLacacacdzdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafafafafafacacdzdzdzdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacaVacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcYcYcYdededYcZcNcNcNcNdldldldldqdldldldDdDcNcNcNcNcNdldldldldldldldlduadcYcZajajdZcZcNcNcNdldldlcNcNcNcNcNcNcNcNcNdldDcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacaWacacacaLaLaLaLacacacacdzdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafafafafafacacacacdzdzdzdzdzdzdzacacacacacacacacacacacacacacacbMacacbMacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcYebeacYdedgcZcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldldlecdfecajajdXcZcNcNcNdldldlcNcNcNcNcNcNcNcNcNdDdDcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacaLaLaLaLacacacacdzdzdzdzdzdzacacacbMacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafafafafacacacacacdzdzdzdzdzdzdzacacacacacaWacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcYeeedcYdedecZcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldDdldldldlduadefcZcZcZcZcZcNcNcNdldldlcNcNcNcNcNcNcNcNcNdDdDcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacaLaLaLacacacacacdzdzdzdzdzdzacacacacacacacacacacaVacacacacacacacacacacafafafafafafafafafafafafafacacacacacacacacacdzdzdzdzdzdzacacacacacacacacacacdWacacacacacacbMacacbMacacacacacacacaWacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcYdfdfdededecZcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldDdldldlcNcNcNcNcNcNcNcNcNdldlcNcNcNcNcNcNdldldDdDdDcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzacacbMacacbMacacacacacacacacacacacacacafafafafafafafafafafafafafafafacacacacacacacacacacdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcZdfegdfdfdecZcNcNcNcNdldldldldldldlcNcNcNcNcNcNcNcNcNcNdldldldldldDdldldlcNcNcNcNcNcNcNdldldldldlcNcNcNcNcNdldldDdDcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafafafafafacacacacacacacacacacdzdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcZcZcZcZcZcZcZcNcNcNcNdldleiepepepdlcNcNcNcNcNcNcNcNcNcNdldFdldldldDdldldldlcNcNdldldldldldldldldldldldldlcNdldDdDdDcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacbMacacacacacdzdzdzdzdzdzacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafafafafafacacacacacacacacacacacacdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdlepepdlepepdldlcNcNcNcNcNcNcNcNcNcNdldldldldldDdDdDdldlcNcNdldldldmdldldldldldldldldldldldldDdDcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzacacacacacacacacacacacacacacacafafafafafafafafafafafafafafafafafafafafacacacacbMacacacacacacdzdzdzacdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdlepdldldldlejdlepekemdlcNcNcNdDeoesepdldqdqdldldDdDdldldldldldldldldldlcNcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNcNcNeqeqeqeqeqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacaWacacacacacacbMacacbMacacacdzdzdzdzdzdzacacacacacacacacacacacacacafafafafafafafafafafafafafafafafafafafafafafacacacacacacacacacacacacdzdzacacdzacacacacacacacacacaWacacacacacacacacacacacacacaLaLacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeierepcNcNdldldlepekepdlcNcNcNdDeoesepdldqdqdldldDdDdldldldldldlcNcNcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNcNcNeqeheheteueqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzacacacacacaWacacafafafafafafafafafafafafafafafafafafafafafafafafafafafacacacbMacacbMacacdWacacdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacaLaLacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlepepcNcNcNcNdleidleqdleqdDdDeoeoevdldldldldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNcNcNcNcNeqeqeqehehdldoeheqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzacacacacacacacacacafafafafafafafafafafafafafafafafafafafafafafafafafafafacacacacacacacacacacacacdzdzacdzacacacacacacacaWacacacacacacacacacaWacacacacaLacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdlepepepepcNcNcNcNdlereperdleseodDeoeocNcNcNcNcNdldldldldldldmcNcNcNcNcNcNcNcNcNcNcNcNcNdldldmdlcNcNcNcNcNcNcNcNeqeyehehcNeheheqeqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzacacacacacacacacafafafafafafafafafafafafafafafafafafafafafafafafafafafafacacacacacacacacacacacacacdzacacacacacacacacacacacacacacaWacacacacacacacacacacacaLacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdlereidldlcNcNcNcNdleperepeqeseodDepepcNcNcNcNcNdldldldDdDdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNeqehehdodlehdldlehcNeqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzdzacacacacacacacafafafafafafafafafafafafafafafafafafafafafafafafafafafafafacacacacacacacacacacacacacacacdzacacdWacacacacacaLacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdlepepdldldldlcNcNcNcNcNcNcNcNdDdDdldlcNcNcNcNcNdldldldDdDdldlcNcNcNcNeqeqeqcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNeqehehdldlehdldFdleheqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacbMacacacacacacacacacacacacacacacacdzdzdzdzdzdzdzacacacacacacacafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacaLacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldlejdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNeqeAeheheqcNcNcNcNcNcNcNdldodlcNcNcNcNcNeqeBeheheqeqeqeqdldleheqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzacacacacacacafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeiepepepepelepdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdDdldydlcNcNcNcNeDdleqeheDcNcNcNcNcNcNcNdldldlcNcNcNcNcNeqeEehehdDdDdDeheqeheheqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacaVacacacacacacacacacacacdzdzdzdzdzdzacacacacacafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacaLacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdleperepdlepepepepcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldydydycNcNcNcNeqdldoeFeqeqeqeqcNcNcNcNdldldlcNcNcNcNcNeqehehdDdDdDdDeheqeGcNeqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzacacacafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldldlepepcNcNcNcNcNcNcNcNcNcNcNcNcNcNdydydydycNcNcNcNcNeqeqeFeFeHeheIeqcNeqeqdldldlcNcNcNcNcNcNeqeqeqeqeJeJeqeqeqeqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaLacacacacacacacacacacacacacacacacdzdzdzdzdzacacacacafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacacacacacaWacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlepepeiepeldlepdldleperepepcNcNcNcNcNcNdxdydydycNcNcNcNcNcNeDeheqdldDeheqeqeheJdldlcNcNcNcNcNcNcNcNcNdlevevevcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaLaLaLacacacacacacacacacacacacacacacdzdzdzdzdzacacacacafafafafafafafafafafafafafafafafafacacacacafafafafafafafafafafafafafafafafafafafafacacacacacacacacacacacdzacdzaWacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdliOdldldldleqepependldlewepepelcNcNcNcNcNcNdydydydycNcNcNcNcNcNcNeDeqdldoeheheheheJdmdocNcNcNcNcNcNcNcNdldldodlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaLaLaLaLacacacacacacacacacacacacacacdzdzdzdzdzacacacafafafafafafafafafafafafafafafafacacacacacacacacacafafafafafafafafafafafafafafafafafafafacacacacacacacdzacacacdzacacacacacacacacacaWacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdlepepepdldlcNcNcNcNcNcNcNcNcNcNdydydydydydydycNcNcNcNcNcNeqeqeqeqeqeheqdlcNcNcNcNcNdldldldldldldDdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaLaLaLacacacacacacacaWacacacacacacdzdzdzdzdzdzdzacacafafafafafafafafafafafafafafafafacacacacacacacacacafafafafafafafafafafafafafafafafafafafacacacacacacacacacacacacacacacacacacacacacacacacacacaWacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdydydxdydycNcNcNcNcNcNcNcNcNcNcNeqcNcNcNcNcNcNcNdldldldmdldldodldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzdzacacafafafafafafafafafafafafafafafacacacacacacacacacacacacacacacacafafafafafafafafafafafafafacacacacacacacacacaUaUaUacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldydydydydydycNcNcNcNcNcNcNcNcNcNcNdldldldldldldldldldldqdldldDdDdldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzacacacafafafafafafafafafafafafafafafacacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafafafacacacacacacaUaUaUacacacacacacacacaLacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdmdydydydydydycNcNcNcNcNcNcNcNcNcNcNdldldldldldldlcNcNdldldldldDdDdldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacaLaLacacacacacdzdzdzdzdzafafafafafafafafafafafafafafafafafafacacacaWacacacacacacacacacacacacacacacafafafafafafafafafafafafafafafacacacacaUacaUaUaUacacacacacacacacaLaLacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeqeqeqeqeqeqcNdldldydydydydycNcNcNcNcNcNdldldldldldDdDdldldldldlcNcNdldldldldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacaLaLaLaLacacacacacdzdzdzdzdzafafafafafafafafafafafafafafafafafafacacacacacacaLacacacaWacacacacacacacacafafafafafafafafafafafafafafafacacacacacacacaUaUaUacacacaLacacacaLaLacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeOeNePeqeheqeqeqeqdldydydydycNcNcNcNcNcNdmdldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacaLaLaLaLaLacacacacacdzdzdzdzdzdzafafafafafafafafafafafafafafafafafacacacacacacacacacacacacacacaWacacacacacacacafafafafafafafafafafafafafafacacacacacaUaUaUacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeheheheqeheheheqeFdldldydxdycNcNdydldldldldldldldqdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldFdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacaLaLaLacacacacacacdzdzdzdzdzdzdzafafafafafafafafafafafafafafafafacaLacacacacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafafacacacacacacaUaUaUaUacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeqeFeqeqeheQeheFeFdldldydydydydydldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldDdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaWacacacacacacacacacacafafafafafafdzdzdzdzdzafafafafafafafafafafafafacacacacacacacacacacacacacacacaWacacacacacacacacacacafafafafafafafafafafafafafafacacacacacaUaUaUaUacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeheweheqeheheqeqeqdldldldldydydydldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacafafafafafafafdpdpdpdpdpafafafafafafafafafafafacacacacacacaaaaaaaaaaaaacacacacacacacacacacacacacacafafafafafafafafafafafafafafacacacacacaUaUaUaUacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeqeheweqeheheheheqcNcNcNcNdldldqdldDdDdDdDcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldDdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacafafafafafafafafafafafafafafdpdpdpdpdpafafafafafacacacacacacacacacacaaaaaaaaaaaaaaacacacacacacaWacacacacacacacacacafafafafafafafafafafafafafacacacacaUaUaUaUacacacacacaWacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldlcNcNcNcNeqeheheheheheqeqcNcNcNcNcNdldldldldDdDdDdDdDdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafafafafafafafafafafdpdpdpdpdpafafafafacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaLacafafafafafafafafafafafafafacacacacaUaUaUaUacacacacacacacacacacaceSeReReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldldldldldlcNcNcNcNeqeqeQeheheqeqeqcNcNcNcNcNdldldDeUdDdDdldldDdldleqeqeqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdydldqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafafafafafafafafafafafdzdzdzdzdzacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacafafafafafafafafafafafafafafacaUaUaUaUacacacacacacacacacaLaceSeSeSeSeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldldldldldldldldlcNcNcNeqeqeqcNcNcNcNdldldldldDdDdDdDdDdldldldldleFeFeqeqeqeqcNcNcNcNcNcNcNcNcNcNcNcNcNdydydydldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafafafafafafafafafafafdzdzdzdzdzdzacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacafafafafafafafafafafafafafafacacaUaUaUaUacacacacacacacacacaceSeSeSeSeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldqdldldDdDdldDdldldldlcNcNcNcNcNcNcNcNcNcNdldqdldldDdDdDdDdDdldldldleveFeFeheheqeqcNcNcNcNcNcNcNcNcNcNcNcNcNdydxdydldldDdDdldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafafafafafafafafafafafacdzdzdzdzdzacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacafafafafafafafafafafafafafafafdpdpdpaUaUacacacacacacacacacaaaaeSeSeSeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldDdDdldldldldldlcNcNcNcNcNcNcNcNcNcNdldldldldDdDdDdDdDcNcNcNdleqeqeheheheheheqeqcNcNcNcNcNcNcNcNcNcNcNcNdydydydldDdDdDdDdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafafafafafafafafafafafacdzdzdzdzdzacacaWacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacafafafafafafafafafafafafafafdpdpdpdpaUaUacacacacacacacacacaaaaeSeSeSeSeTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldlcNcNdldldqdldlcNcNcNcNcNcNcNcNcNcNdmdldDdDdDdDdDdlcNcNcNcNdldleqeheheheheweheqeqcNcNcNcNdldldlcNcNcNcNdldydydydldDdDdDdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafafafafafacacacacacaVdzdzdzdzdzacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacafafafafafafafafafafafafdpdpdpdpdpacacacacacacacaLacacacaaaaaaeReSeSeTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlcNcNcNcNdldldldldlcNcNcNcNcNcNcNcNdldldldDeUdDdDdDdldlcNcNcNeqeqeqeqeqeheheheheheheqcNcNcNcNdleVdlcNcNcNcNcNdydydycNdDdDdDdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafafacacacacacacacdzdzdzdzdzacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacafafafafafafafafafafafdpdpdpdpdpafacacacacacacacacacacafaaaaaaeReSeSeTeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdmdldlcNcNcNcNcNdmdldldlcNcNcNcNcNcNcNcNdldldldDdDcNcNcNcNcNcNcNcNeqeqeWeqeqeqeqeheheheheqeqcNcNcNdldldldldlcNcNcNdydxcNcNcNdldDdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafafacacacacacacacdzdzdzdzdzacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacafafafafafafafafafafdpdpdpdpdpafafafafacacacacacacacacafaaaaaaeReTeSeSeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNdldldDdlcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNeqeheheheheheheheheheheheheGeqcNcNcNcNcNdldlcNcNdydydycNcNcNdldDdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafacacacacacacacacdzdzdzdzdzacaLaLacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacafafafafafafafdpdpdpdpdpafafafafafafafafafacacacafafaaaaaaeReSeSeSeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNdldldDdlcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNeqehehehehehehehehehehezeheheqcNcNcNcNcNdldlcNcNdydydycNcNcNdldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafacacacacacacacacdzdzdzdzdzdzacacacacacacaaaaaaaaaaaaaaaaaaaaaaaceXaaaaaaaaaaaaaaaaaaaaaaaaacacaLacacacacacacacafafafdpdpdpdpdpafafafafafafafafafafafafafafafaaaaaaeReReReSeTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldDdlcNcNcNcNdldldDdlcNcNcNcNcNcNcNcNdldlcNcNcNcNcNcNcNcNcNcNeqeqeheheheheweheheheqeheheqcNcNcNcNcNcNdldmdldldydycNcNcNcNcNdldDcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafacacacacacacacdzdzdzdzdzdzacacacacacacacaaaaaaaaaaaaaaaaaaaaeYacaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacafafdpdpdpdpdpafafafafafafafafafafafafafafafafaaaaaaeReReReSeTeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldDdlcNcNcNcNdldldldlcNcNcNcNcNcNcNcNdldlcNcNcNcNcNcNcNcNcNcNcNcNeqeqeheheheheheqeheheheqdlcNcNcNcNcNcNdldFdldxcNcNcNcNcNcNdldDcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzdzacacafafafafafafafafafafafafafafafacacacacacacacacacacacacacacacacafafafafafafafafafafafafafacacacacacacacacacdzdzdzacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldydydydydydycNcNcNcNcNcNcNcNcNcNcNdldldldldldldldldldldqdldldDdDdldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzacacacafafafafafafafafafafafafafafafacacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafafafacacacacacacdzdzdzacacacacacacacacaLacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdmdydydydydydycNcNcNcNcNcNcNcNcNcNcNdldldldldldldlcNcNdldldldldDdDdldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacaLaLacacacacacdzdzdzdzdzafafafafafafafafafafafafafafafafafafacacacaWacacacacacacacacacacacacacacacafafafafafafafafafafafafafafafacacacacdzacdzdzdzacacacacacacacacaLaLacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeqeqeqeqeqeqcNdldldydydydydycNcNcNcNcNcNdldldldldldDdDdldldldldlcNcNdldldldldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacaLaLaLaLacacacacacdzdzdzdzdzafafafafafafafafafafafafafafafafafafacacacacacacaLacacacaWacacacacacacacacafafafafafafafafafafafafafafafacacacacacacacdzdzdzacacacaLacacacaLaLacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeOeNePeqeheqeqeqeqdldydydydycNcNcNcNcNcNdmdldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacaLaLaLaLaLacacacacacdzdzdzdzdzdzafafafafafafafafafafafafafafafafafacacacacacacacacacacacacacacaWacacacacacacacafafafafafafafafafafafafafafacacacacacdzdzdzacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeheheheqeheheheqeFdldldydxdycNcNdydldldldldldldldqdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldFdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacaLaLaLacacacacacacdzdzdzdzdzdzdzafafafafafafafafafafafafafafafafacaLacacacacacacacacacacacacacacacacacacacacafafafafafafafafafafafafafafacacacacacacdzdzdzdzacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeqeFeqeqdlexeheFeFdldldydydydydydldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldDdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaWacacacacacacacacacacafafafafafafdzdzdzdzdzafafafafafafafafafafafafacacacacacacacacacacacacacacacaWacacacacacacacacacacafafafafafafafafafafafafafafacacacacacdzdzdzdzacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqehdodleqdldleqeqeqdldldldldydydydldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacafafafafafafafdpdpdpdpdpafafafafafafafafafafafacacacacacacaaaaaaaaaaaaacacacacacacacacacacacacacacafafafafafafafafafafafafafafacacacacacdzdzdzdzacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeqdldoeqeheheheheqcNcNcNcNdldldqdldDdDdDdDcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldDdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacafafafafafafafafafafafafafafdpdpdpdpdpafafafafafacacacacacacacacacacaaaaaaaaaaaaaaacacacacacacaWacacacacacacacacacafafafafafafafafafafafafafacacacacdzdzdzdzacacacacacaWacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldlcNcNcNcNeqehdldldleheqeqcNcNcNcNcNdldldldldDdDdDdDdDdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafafafafafafafafafafdpdpdpdpdpafafafafacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaLacafafafafafafafafafafafafafacacacacdzdzdzdzacacacacacacacacacacaceSeReReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldldldldldlcNcNcNcNeqeqexdleheqeqeqcNcNcNcNcNdldldDeUdDdDdldldDdldleqeqeqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdydldqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafafafafafafafafafafafdzdzdzdzdzacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacafafafafafafafafafafafafafafacdzdzdzdzacacacacacacacacacaLaceSeSeSeSeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldldldldldldldldlcNcNcNeqeqeqcNcNcNcNdldldldldDdDdDdDdDdldldldldleFeFeqeqeqeqcNcNcNcNcNcNcNcNcNcNcNcNcNdydydydldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafafafafafafafafafafafdzdzdzdzdzdzacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacafafafafafafafafafafafafafafacacdzdzdzdzacacacacacacacacacaceSeSeSeSeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldqdldldDdDdldDdldldldlcNcNcNcNcNcNcNcNcNcNdldqdldldDdDdDdDdDdldldldleveFeFeheheqeqcNcNcNcNcNcNcNcNcNcNcNcNcNdydxdydldldDdDdldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafafafafafafafafafafafacdzdzdzdzdzacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacafafafafafafafafafafafafafafafdpdpdpdzdzacacacacacacacacacaaaaeSeSeSeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldDdDdldldldldldlcNcNcNcNcNcNcNcNcNcNdldldldldDdDdDdDdDcNcNcNdleqeqehdldleheheqeqcNcNcNcNcNcNcNcNcNcNcNcNdydydydldDdDdDdDdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafafafafafafafafafafafacdzdzdzdzdzacacaWacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacafafafafafafafafafafafafafafdpdpdpdpdzdzacacacacacacacacacaaaaeSeSeSeSeTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldlcNcNdldldqdldlcNcNcNcNcNcNcNcNcNcNdmdldDdDdDdDdDdlcNcNcNcNdldleqehehehdldodleqeqcNcNcNcNdldldlcNcNcNcNdldydydydldDdDdDdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafafafafafacacacacacaVdzdzdzdzdzacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacafafafafafafafafafafafafdpdpdpdpdpacacacacacacacaLacacacaaaaaaeReSeSeTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlcNcNcNcNdldldldldlcNcNcNcNcNcNcNcNdldldldDeUdDdDdDdldlcNcNcNeqeqeqeqeqehehehdldleheqcNcNcNcNdleVdlcNcNcNcNcNdydydycNdDdDdDdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafafacacacacacacacdzdzdzdzdzacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacafafafafafafafafafafafdpdpdpdpdpafacacacacacacacacacacafaaaaaaeReSeSeTeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdmdldlcNcNcNcNcNdmdldldlcNcNcNcNcNcNcNcNdldldldDdDcNcNcNcNcNcNcNcNeqeqeWeqeqeqeqehdldleheqeqcNcNcNdldldldldlcNcNcNdydxcNcNcNdldDdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafafacacacacacacacdzdzdzdzdzacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacafafafafafafafafafafdpdpdpdpdpafafafafacacacacacacacacafaaaaaaeReTeSeSeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNdldldDdlcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNeqehehehehehehehehdldleheheGeqcNcNcNcNcNdldlcNcNdydydycNcNcNdldDdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafacacacacacacacacdzdzdzdzdzacaLaLacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacafafafafafafafdpdpdpdpdpafafafafafafafafafacacacafafaaaaaaeReSeSeSeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNdldldDdlcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNeqehehehehehdldldldldldFdleheqcNcNcNcNcNdldlcNcNdydydycNcNcNdldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafacacacacacacacacdzdzdzdzdzdzacacacacacacaaaaaaaaaaaaaaaaaaaaaaaceXaaaaaaaaaaaaaaaaaaaaaaaaacacaLacacacacacacacafafafdpdpdpdpdpafafafafafafafafafafafafafafafaaaaaaeReReReSeTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldDdlcNcNcNcNdldldDdlcNcNcNcNcNcNcNcNdldlcNcNcNcNcNcNcNcNcNcNeqeqehehehehdodleheheqdldleqcNcNcNcNcNcNdldmdldldydycNcNcNcNcNdldDcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafacacacacacacacdzdzdzdzdzdzacacacacacacacaaaaaaaaaaaaaaaaaaaaeYacaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacafafdpdpdpdpdpafafafafafafafafafafafafafafafafaaaaaaeReReReSeTeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldDdlcNcNcNcNdldldldlcNcNcNcNcNcNcNcNdldlcNcNcNcNcNcNcNcNcNcNcNcNeqeqehehdldleheqehehdleqdlcNcNcNcNcNcNdldFdldxcNcNcNcNcNcNdldDcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafacacacacacacacdzdzdzdzdzdzacacacacacacacaaaaaaaaaaaaaaacacacacacaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacafdpdpdpdpdpafafafafafafafafafafafafafafafafafaaaaaaeReReReSeSeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeZcNcNcNcNdldldlcNcNcNcNdldldldldldlcNcNcNcNcNcNdldlcNcNcNcNcNcNcNcNcNcNcNcNeqeqfaeheheheheqeFeFeFeqdlcNcNcNcNcNcNdldldldldldldlcNcNcNdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafacacacacacacacdzdzdzdzdzdzacacacacacacacaaaaaaaaaaaaaaacacacacacaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacaUaUdpdpdpdpafafafafafafafafafafafafafafafafafafaaaaaaeReReReSeSeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldlcNcNcNdqdldlcNcNcNcNdldldldldldldldlcNcNcNcNdldldldlcNcNcNcNcNcNcNcNcNcNcNcNeqeqehehfbeqeqeveveqdlcNcNcNcNcNcNdldldldldldldlcNcNcNdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaWacacacacdzdzdzdzdzdzacacacacacacacaaaaaaacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacaUaUdpdpdpafafafafafafafafafafafafafafafafafafafaaaaaaeReReReSeSeSeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlcNcNdldldDdDdlcNcNdldldldldqdldmdlcNcNcNcNcNdqdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeqeqeqcNdldldldlcNcNcNcNcNcNcNcNdldldldldqdldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacdzdzdzdzdzacacacaLacadadadadadadadadadadadadacacaaaaaaaaaaaaaaaaaaaaacacacacacacacacacaUaUaUaUaUaUacafafafafafafafafafafafafafafafafafafaaaaaaeReReReReTfceReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldlcNcNcNcNdDdDdDcNcNdldldldldldldldlcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNcNcNcNcNdldldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacdzdzdzdzdzacacacacaceffdfffefhfgfhcZfjfifladacaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacaUaUaUaUaUaUacacacacacafafafafafafafafafafafafafaaaaaaaaaaaaeReReTeSeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdDdldlcNcNcNadfmfmadadadadadfnadfodldlcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldlcNcNcNcNcNcNdldldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacdzdzdzdzdzacacacacefdSfpcZfqfhfsfraoftfuadacaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacaUaUaUaUaUaUacacacacacacacacafafafafafafafafafafaaaaaaaaaaaaeReReTeSeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdDdDdlcNcNcNcZfmfmfmfvfvfvfwfvfwdldlfxcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldldlcNcNcNcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacdzdzdzdzdzacacacacadadcZadfyadadcZfAfzfBadaaaaaaaaaaaaaaaaaaaaaaacacacacaWacacacacacaUaUaUaUaUaUacacacacacacacacafafafafafafafafafafaaaaaaaaaaaaeReReTeSeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdDdDdldlcNcNcZfvfmfmfvfvfvadfnadfodldldlcNcNcNcNdldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldDdldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacdzdzdzdzdzacacacacacfCadfDajfEajadadadadadaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacaUaUaUaUacacacacacacacacacacacacacafafafafafafaaaaaaaaaaaaeReReSeSeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldleFcNfFfvfvfvfvfvfvaddldldldldldlcNcNcNcNcNcNdldldldldldldldldldlcNcNcNcNcNcNcNcNcNdldldldDdDdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacdzdzdzdzdzacacacacfGacfDfDfDajfHadacacacacaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacaUacaUaUaUacaUacacacacacacacacacacacacacacacafafaaaaaaaaaaaaeReReSeSeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeFeFeFfFadfIadadadadadfFfvdldDdldlcNcNcNcNcNcNdldldldldldldqdldldlcNcNcNcNcNdldldlfxdldldldDdDdldldldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacdzdzdzdzdzdzacacacfJfKfDfMfLfNadacacacacaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacaUacaUaUaUacaUacacacacacacacacacacacacacacacafafaaaaaaaaaaeReReSeSeSeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeFeFfOdQdQfvfmfmfvfvfvfmdldldldldlcNcNcNcNcNcNcNcNcNdldldldldldlcNcNcNeqeqeqeqeqeqeqdldldldDdDdldldldldqdldldmdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacbMacacacacacacacdzdzdzdzdzdzdzfPadeffQcZfDdfdffRadacacacaaaaaaaaaaaaaaaaaaaaaaacacacacaWacacacacacacaUacaUacaUacacacacacacacacacacacacacacacacacacafaaaaaaaaaaeReReSeSeTeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNadfSdQfvfFfvfmfvfvfFdldldldldlcNcNcNcNcNcNcNcNcNdldldlfxdldlcNcNeqeqeqeqdydxdydyeqdldldDdDdldldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacdzdzdzdzdzdzdzdzecdfdfecajajajfTadacacaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacaWacacacacaUacaUacaUacacacacacacacacacacacacaLacacacafafaaaaaaaaeReReSeSeSeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcZdQfvdQadfvfvfvfvadadadaddldldldlcNcNcNcNcNcNcNcNcNcNdldlcNcNeqeqeqeIehdydydyezeheqdDdDdDdDdDdDdDdDdldldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafacacacacacacacdzdzdzdzdzdzacacacacacacacaaaaaaaaaaaaaaacacacacacaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacdzdzdpdpdpdpafafafafafafafafafafafafafafafafafafaaaaaaeReReReSeSeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldlcNcNcNdqdldlcNcNcNcNdldldldldldldldlcNcNcNcNdldldldlcNcNcNcNcNcNcNcNcNcNcNcNeqeqehehfbeqeqeveveqdlcNcNcNcNcNcNdldldldldldldlcNcNcNdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaWacacacacdzdzdzdzdzdzacacacacacacacaaaaaaacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacdzdzdpdpdpafafafafafafafafafafafafafafafafafafafaaaaaaeReReReSeSeSeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlcNcNdldldDdDdlcNcNdldldldldqdldmdlcNcNcNcNcNdqdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeqeqeqcNdldldldlcNcNcNcNcNcNcNcNdldldldldqdldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacdzdzdzdzdzacacacaLacadadadadadadadadadadadadacacaaaaaaaaaaaaaaaaaaaaacacacacacacacacacdzdzdzdzdzdzacafafafafafafafafafafafafafafafafafafaaaaaaeReReReReTfceReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldlcNcNcNcNdDdDdDcNcNdldldldldldldldlcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNcNcNcNcNdldldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacdzdzdzdzdzacacacacaceffdfffefhfgfhcZfjfifladacaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacdzdzdzdzdzdzacacacacacafafafafafafafafafafafafafaaaaaaaaaaaaeReReTeSeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdDdldlcNcNcNadfmfmadadadadadfnadfodldlcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldlcNcNcNcNcNcNdldldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacdzdzdzdzdzacacacacefdSfpcZfqfhfsfraoftfuadacaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacdzdzdzdzdzdzacacacacacacacacafafafafafafafafafafaaaaaaaaaaaaeReReTeSeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdDdDdlcNcNcNcZfmfmfmfvfvfvfwfvfwdldlfxcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldldlcNcNcNcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacdzdzdzdzdzacacacacadadcZadfyadadcZfAfzfBadaaaaaaaaaaaaaaaaaaaaaaacacacacaWacacacacacdzdzdzdzdzdzacacacacacacacacafafafafafafafafafafaaaaaaaaaaaaeReReTeSeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdDdDdldlcNcNcZfvfmfmfvfvfvadfnadfodldldlcNcNcNcNdldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldDdldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacdzdzdzdzdzacacacacacfCadfDajfEajadadadadadaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacdzdzdzdzacacacacacacacacacacacacacafafafafafafaaaaaaaaaaaaeReReSeSeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldleFcNfFfvfvfvfvfvfvaddldldldldldlcNcNcNcNcNcNdldldldldldldldldldlcNcNcNcNcNcNcNcNcNdldldldDdDdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacdzdzdzdzdzacacacacfGacfDfDfDajfHadacacacacaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacdzacdzdzdzacdzacacacacacacacacacacacacacacacafafaaaaaaaaaaaaeReReSeSeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeFeFeFfFadfIadadadadadfFfvdldDdldlcNcNcNcNcNcNdldldldldldldqdldldlcNcNcNcNcNdldldlfxdldldldDdDdldldldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacdzdzdzdzdzdzacacacfJfKfDfMfLfNadacacacacaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacdzacdzdzdzacdzacacacacacacacacacacacacacacacafafaaaaaaaaaaeReReSeSeSeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeFeFfOdQdQfvfmfmfvfvfvfmdldldldldlcNcNcNcNcNcNcNcNcNdldldldldldlcNcNcNeqeqeqeqeqeqeqdldldldDdDdldldldldqdldldmdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacbMacacacacacacacdzdzdzdzdzdzdzfPadeffQcZfDdfdffRadacacacaaaaaaaaaaaaaaaaaaaaaaacacacacaWacacacacacacdzacdzacdzacacacacacacacacacacacacacacacacacacafaaaaaaaaaaeReReSeSeTeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNadfSdQfvfFfvfmfvfvfFdldldldldlcNcNcNcNcNcNcNcNcNdldldlfxdldlcNcNeqeqeqeqdydxdydyeqdldldDdDdldldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacdzdzdzdzdzdzdzdzecdfdfecajajajfTadacacaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacaWacacacacdzacdzacdzacacacacacacacacacacacacaLacacacafafaaaaaaaaeReReSeSeSeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcZdQfvdQadfvfvfvfvadadadaddldldldlcNcNcNcNcNcNcNcNcNcNdldlcNcNeqeqeqeIehdydydydFeheqdDdDdDdDdDdDdDdDdldldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacdzdzdzdzdzdzdzfPadefefadadadadadadacaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacaWacacacaLacacacacacacacacacacaaaaaaaaeReSeSeReReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcZfvfmfvfIfUfUfUfUfUfWfVfndldqdldlcNcNcNcNcNcNcNcNcNcNdldlcNcNeqehehehehehehdyeheheheqdDdDdDdDdDdDdDdDdDdldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacdzdzdzdzdzdzdzdzacacacacacacacacacacacaaaaaaeReReReReRaaaaaaaaacacacacacacacaWacacacacacacacaUacacacacacacacacacacacacacacacacacacacacacaaaaaaaaeReSeSeReReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcZfXfZfYadfUfUfvfvfvfUgafndldldldlcNcNcNcNcNcNcNcNcNcNdldlcNcNeqehehehehehehehehdDdDdDdDdDdDdDdDdDdDdDdDdDdDdldldldlfxdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacaWacacacacdzdzdzdzdzdzdzcMacacacacgbadadadacacacaaaaaaeReReReSeRaaaaaaaaacacacacacacacacacacacacacacacacacacacacaLaLacacacacacacacacacacacacacacacaaaaaaaaeReSeTeReReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcZcZcZcZadadadfvfFfvadadaddldldldDcNcNcNcNcNcNcNcNcNcNdldlcNcNeqdydyehehehehehehdDdDdDdDdDdDdDdDdDdDdDdDdDdDdDdldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacdzdzdzdzdzdzacacacacacacacgcaiadacacacaaaaaaeReReSgdeRaaaaaaacacacacacacacacacacacaWacacacacacacacacacaLaLacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldldldqdldldldldldldldlcNcNeqdxdydyezehehehehdDeqdDdDdDdDdDdDdDdDdDdDdDdDdDdldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacaWacacacacacacacdzdzdzdzdzdzacacacacacacgeadadadacacaaaaaaaaeReReTeSeRaaaaaaacacacacacacacacacacacacacacacaUacacacacacacacacacacacacacacacacacacacacacacacacacacacafacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldmdldldldldldldldldldlcNcNcNcNeqdxdyehehehehehdDdDdDdDdDdDdDeqdDdDdDdDdDdDdDdldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacdzdzdzdzdzdzdzdzacacacacacacacacacacacaaaaaaeReReReReRaaaaaaaaacacacacacacacaWacacacacacacacdzacacacacacacacacacacacacacacacacacacacacacaaaaaaaaeReSeSeReReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcZfXfZfYadfUfUfvfvfvfUgafndldldldlcNcNcNcNcNcNcNcNcNcNdldlcNcNeqehehehehehehehehdDdDdDdDdDdDdDdDdDdDdDdDdDdDdldldldlfxdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacaWacacacacdzdzdzdzdzdzdzcMacacacacgbadadadacacacaaaaaaeReReReSeRaaaaaaaaacacacacacacacacacacacacacacacacacacacacaLaLacacacacacacacacacacacacacacacaaaaaaaaeReSeTeReReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcZcZcZcZadadadfvfFfvadadaddldldldDcNcNcNcNcNcNcNcNcNcNdldlcNcNeqdydyehdldlehehehdDdDdDdDdDdDdDdDdDdDdDdDdDdDdDdldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacdzdzdzdzdzdzacacacacacacacgcaiadacacacaaaaaaeReReSgdeRaaaaaaacacacacacacacacacacacaWacacacacacacacacacaLaLacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldldldqdldldldldldldldlcNcNeqdxdydydFdlehehehdDeqdDdDdDdDdDdDdDdDdDdDdDdDdDdldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacaWacacacacacacacdzdzdzdzdzdzacacacacacacgeadadadacacaaaaaaaaeReReTeSeRaaaaaaacacacacacacacacacacacacacacacdzacacacacacacacacacacacacacacacacacacacacacacacacacacacafacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldmdldldldldldldldldldlcNcNcNcNeqdxdyehehehehehdDdDdDdDdDdDdDeqdDdDdDdDdDdDdDdldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacaWacacdzdzdzdzdzacacacacacacacggacacacacacaaaaaaaaeRgheSeSeRaaaaaaacacaWacacacaLacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaLacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeqeqeqeqcNcNcNcNcNcNcNcNcNcNcNcNeqeqeqeqeqeWeqdDdDdDdDdDdDdDdDdDdDdDdDdDdDdDdldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacdzdzdzdzdzacacacacacacacacacacacacacaaaaaaaaeReSeSeSeRaaaaaaacacacacacaLaLacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldlcNcNcNcNcNeqeqeqeqeheheheqcNcNcNcNcNcNcNcNcNcNcNcNcNdleqeqeqeqdDdDdDeqdDdDdDdDdDdDdDdDdDdDdDdDdldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacdzdzdzdzdzacacacacacacacacacacacacacaaaaaaeReSeSeSgfeReRaaaaaaacacacacaLaLacacacacacacacacacacacacacacacacacacacacacacaWacacacaWacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldlcNcNcNcNeqeheIeqeheheheheqeqeqeqeqeqeqeqeqcNcNcNcNcNdldldldldldldDdDdDdDdDdDdDdDdDdDdDdDdDdDdDdldldldqdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacaLaLacacacacdzdzdzacdzacacacacacacacacacacacacacaaaaaaeReSeSeSeTeReRaaaaaaacacacacacacacacacacacacacacacacacacacdWacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldldldldmdldldldleqehgieqehdxehehehdxdxdDeheheheheheqeqeqcNcNdldldldldldldDdDdDdDdDdDdDdDdDdDdDdDdDdDdDdldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaWacacacacacacaLaLaLacacacdzdzdzacdzacacacacacacacacacacacacacaaaaaaeReTeTeSeTeReRaaaaaaaaaaacaLacacacaWacacacacacacacacacacacacacacacacacaWacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlfxdldldqdlcNcNdldldDdldleqeheheqdxdxdxehdxdDdDdDdDdDdDeheheheheheFevdldqdldldldldDdDdDdDdDdDdDdDdDdDdDdDdDdDdDdldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacaLaLacacacacdzacdzacacacacacacacacacacacacacacacaaaaaaeReTeTeSeReReRaaaaaaaaaaacacacacacacacacacaWacacacacacacacacbMacacacacacacacacacaWacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldydldldldldlcNcNdldldldldleqeheheqdxdxdxdxdxdxdDehdDdDdDeheheheheheFevdldldldldldDdDdDdldldldDdDdDdDdDdDdDdDdldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacdzacdzdzacacacacacacacacacacacacacacaaaaaaeReTeTeSeReReReRaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaWacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldydydycNcNcNcNcNcNdldldldldqevehehehehehehdxdDdDehehehdDeheweheheheqeqcNdldldldldldDdDdldldldldldldldldldDdDdDdldldldldmdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaWacacacacacacaLaLaLacacacdzdzdzacdzacacacacacacacacacacacacacaaaaaaeReTeTeSeTeReRaaaaaaaaaaacaLacacacaWacacacacacacacacacacacacacacacacacaWacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlfxdldldqdlcNcNdldldDdldleqeheheqdxdxdxehdxdDdDdDdDdDdDehdldldldlevevdldqdldldldldDdDdDdDdDdDdDdDdDdDdDdDdDdDdDdldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacaLaLacacacacdzacdzacacacacacacacacacacacacacacacaaaaaaeReTeTeSeReReRaaaaaaaaaaacacacacacacacacacaWacacacacacacacacbMacacacacacacacacacaWacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldydldldldldlcNcNdldldldldleqeheheqdxdxdxdxdxdxdDehdDdDdDdldldldldlevevdldldldldldDdDdDdldldldDdDdDdDdDdDdDdDdldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacdzacdzdzacacacacacacacacacacacacacacaaaaaaeReTeTeSeReReReRaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaWacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldydydycNcNcNcNcNcNdldldldldqevehehehehehehdxdDdDehehehdDdldodleheheqeqcNdldldldldldDdDdldldldldldldldldldDdDdDdldldldldmdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacdzacacacacacacacacbMacacacacacacacaaaaaaaaeReReSeSeSeReReRaaaaaaaaaaacacacacacacaWacacacacacacacacacacacacacacacacacacacacacacacacacacacacaWacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdydydydydycNcNcNcNcNcNcNcNcNcNdlevehdydxeheheheheqeqeqeqeqeqeqehehehgjeqcNcNcNdldldldldDdDdldldldldldldldldldldldDdDdldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacdzacdzacacacacacacacacacacacacacacaaaaaaaaaaeReSeSeSeSeSeRaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacaLacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdydydxdydycNcNcNcNcNcNcNcNcNcNcNeqdydydyehehehehglehehehehgmeqeqeqeqeqcNcNcNcNcNdldldldldldldldqdldldldlfxdldldldldDdldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacaWacacacacacacaVacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaeReSeSeTeSeSeRaaaaaaaaaaaaaaaaacacacacacacaWacacacacaLacacacacacacacacacacacacacacacacacacaWacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdydxdycNcNcNcNcNcNcNcNcNcNcNcNcNeqgkgkeqeqeheheheheqeqeqeqeqeqcNcNcNcNcNcNcNcNcNdldqdldldDdldldldldldldldldldldldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacdzacdzacacacacacacacacacacacacacacaaaaaaaaaaeReSeSeSeSeSeRaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacaLacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdydydxdydycNcNcNcNcNcNcNcNcNcNcNeqdydydyehehdldlfxehehehehgmeqeqeqeqeqcNcNcNcNcNdldldldldldldldqdldldldlfxdldldldldDdldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacaWacacacacacacaVacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaeReSeSeTeSeSeRaaaaaaaaaaaaaaaaacacacacacacaWacacacacaLacacacacacacacacacacacacacacacacacacaWacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdydxdycNcNcNcNcNcNcNcNcNcNcNcNcNeqgkgkeqeqehdldleheqeqeqeqeqeqcNcNcNcNcNcNcNcNcNdldqdldldDdldldldldldldldldldldldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaeReReReSeSeSeReRaaaaaaaaaaaaaaacacacacacacdWacacacaLaLacacacacacacacacacacacacacdWacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdydydycNcNcNcNcNcNcNcNcNcNcNcNcNcNdydycNeqeqeqeqeqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldldldldldldldldldldldldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacaWacacacacacacacacacacacacacacacacacacacacacacaWacacacacaaaaaaaaaaaaaaaaaaeReSeTeSeReRaaaaaaaaaaaaaaaaacacacacacacacacacaLaLacacacacacacacacacacacacacacacacacacacacacaWacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldydycNcNcNcNcNcNcNcNcNcNcNcNcNcNdydycNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldlcNcNcNdldldldldldldldldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacaWacacacacacacacacacacacacacacacaWacacacaWacacaaaaaaaaaaaaaaaaaaeReSeSeSeReRaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacdWacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldqdldycNcNcNcNcNcNcNcNcNcNcNcNdxdxdydycNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldDdlcNcNcNcNcNcNcNcNcNdldldldldldmdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
@@ -855,27 +851,27 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacaLacacacacacacacac
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacaLaLacacacacacacacacacacacacaLacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaeReReReSeTeReReReSeSeRaaaaaaaaaaacacacacacdzacacacacdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaWacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldlfxdlcNcNcNcNcNcNcNcNcNcNcNcNdydydycNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldodldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacaLaLaLacacacacacacacacacacacacaLaLacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaeReTeSeSeSeReReSeSeSeRaaaaaaaaaaacacacacacdzacacacacdzacacacacacacacacacacacacacacaWacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlcNcNcNdldldldlcNcNcNcNcNcNcNcNcNcNcNcNdydydydycNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNdldldldldldlcNcNcNcNcNcNcNcNcNcNcNababababababab
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacaLaLacacbMacacacacacacacacacaLaLaLacacacacbMacacacacacaaaaaaaaaaaaaaaaaaaaaaaaeReTeSeSeReReSeSeSeReRaaaaaaaaaaacacacacacdzdzdzacacacacacacacacacacacacacacacacacacacacacaWacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldlcNcNcNdldldldqcNcNcNcNcNcNcNcNcNcNcNcNcNdydydycNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldlcNcNcNdldldldldldldlcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacaLacacacacacacacacacacacacacacaLaLaLacacacacacacacacacacaaaaaaaaaacZcZcZcZcZcZaddfgrgrgrgsaddfdfcZcZaaaaaaaaaaaaacacacdzacdzdzdzacacdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldlcNeqeqeqcNdldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNdydydydydycNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldldldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaLacacacacbMacacbMacacacaaaaaaaaaacZfjgugtgwgvadgrgrgxfkgrgrdfgzgycZaaaaaaaaaaacacacacdzacdzdzdzacacdzacacacacacacacacacacacacacacacacaWacacacacacacacacacacacacaLaLacacacacaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldleqeheheheqevdldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNdydydycNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldydlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlfxdldldldqdldldlcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacaWacacacacacacacacacacacacacacaccQacacacacacacacacacacacacacacaaaaaaaaaacZgAaoguaoaoadgrgrdfgrdfgzdfgCgBcZaaaaaaaaaaacacacacdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaLaLacacacacaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNdleqeteheheheFeFevdDdDdDdDdDdDcNcNcNcNcNcNcNcNcNcNcNdxdydycNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdydydydydldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldlcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaacZgDaoaoaoaofrgrgrgzgzgzgzgEgzgFcZaaaaaaacacacacacdzdzdzdzdzacdzacacacacacacacacacdWacacacacacacacacacacacaWacacacacdWacacacacacacacacacacaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNdldleqeteheheheFeFeqdDdDdDdDdDdDdldldqcNcNcNcNcNcNcNcNdxdxdydycNcNcNcNcNcNcNcNcNcNcNcNcNcNdydydydydydldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldlcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacaWacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaacZgDaogGaoaoaddfgzdfgzgzgzgzgzgHcZaaacacacaccMacacdzdzdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNdldlcNeqeqehgleheheqdldDdDdDdDdDdldldlcNcNcNcNcNcNcNcNdxdxdydycNcNcNcNcNcNcNcNcNcNcNcNcNcNdydydxdydydydydlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldlcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacaWacacacaWacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaacZaoaoaoaoaoadgIgzgzadadgJadadcZcZcZadacacacacacacdzdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNdldlcNeqeqeqeheheheheqeqdDdDdDdDdDdDdlcNcNcNcNcNcNcNcNcNdxdydycNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdydydydydydydlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacaVacacacacacacacacacacacacacacacacacacacacacacacacacaWacacacacacacacaaaaaaaaaaaacZgKgMgLfufuadgzgzgNaddXajajcZajajajadacacacacacacdzdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNdldlcNeqeqgOeheheheheheqdldldDdDdDdDdlcNcNcNcNcNcNcNcNcNcNdydycNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdydydydxdxdydydldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacaLacacacacacacacacacacacacacacaLaLaLacacacacacacacacacacaaaaaaaaaacZcZcZcZcZcZadezeCeCeCeKadezezcZcZaaaaaaaaaaaaacacacdzacdzdzdzacacdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldlcNeqeqeqcNdldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNdydydydydycNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldldldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaLacacacacbMacacbMacacacaaaaaaaaaacZfjgugtgwgvadeCeCeCfkeCeCezgzgycZaaaaaaaaaaacacacacdzacdzdzdzacacdzacacacacacacacacacacacacacacacacaWacacacacacacacacacacacacaLaLacacacacaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldleqeheheheqevdldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNdydydycNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldydlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlfxdldldldqdldldlcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacaWacacacacacacacacacacacacacacaccQacacacacacacacacacacacacacacaaaaaaaaaacZgAaoguaoaoadeCeCezeCezgzezgCgBcZaaaaaaaaaaacacacacdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaLaLacacacacaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNdleqeteheheheFeFevdDdDdDdDdDdDcNcNcNcNcNcNcNcNcNcNcNdxdydycNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdydydydydldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldlcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaacZgDaoaoaoaoeLeCeCgzeMgzgzgEgzgFcZaaaaaaacacacacacdzdzdzdzdzacdzacacacacacacacacacdWacacacacacacacacacacacaWacacacacdWacacacacacacacacacacaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNdldleqetehdleheFeFeqdDdDdDdDdDdDdldldqcNcNcNcNcNcNcNcNdxdxdydycNcNcNcNcNcNcNcNcNcNcNcNcNcNdydydydydydldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldlcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacaWacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaacZgDaogGaoaoadezgzezgzgzgzgzgzgHcZaaacacacaccMacacdzdzdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNdldlcNeqeqehfxdleheqdldDdDdDdDdDdldldlcNcNcNcNcNcNcNcNdxdxdydycNcNcNcNcNcNcNcNcNcNcNcNcNcNdydydxdydydydydlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldlcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacaWacacacaWacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaacZaoaoaoaoaoadgIgzgzadadgJadadcZcZcZadacacacacacacdzdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNdldlcNeqeqeqdldleheheqeqdDdDdDdDdDdDdlcNcNcNcNcNcNcNcNcNdxdydycNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdydydydydydydlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacaVacacacacacacacacacacacacacacacacacacacacacacacacacaWacacacacacacacaaaaaaaaaaaacZgKgMgLfufuadgzgzezaddXajajcZajajajadacacacacacacdzdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNdldlcNeqeqgOeheheheheheqdldldDdDdDdDdlcNcNcNcNcNcNcNcNcNcNdydycNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdydydydxdxdydydldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNababababababab
aaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaacZcZcZcZcZcZcZgsgPcZcZgQajajcZajajajadacacacacdzdzdzdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacaLaLacacacacacacacaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldleqehehehehehfaeqeqdDdDdDdDdlcNcNcNcNcNcNcNcNcNcNdydycNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdydydydxdxdydydydydlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldlcNcNcNcNcNcNcNcNcNcNababababababab
aaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaacZgRgScZgTgSadgUgUgVcZgWajajgXajajajadamadgYdzdzdzdzdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldleqeqeheheheqeheheheqcNcNdldDdDcNcNcNcNcNcNcNcNdydydydycNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdydxdxdydydydlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldqdlcNcNcNcNcNcNcNcNcNcNcNcNababababababab
aaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacaLacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaacZdJgZcZdJgZadgUgUgUadhahchbcZhdajdXhedfhedzdzdzdzdzdzdzdzacacacacacacacacacacacacacacacacacaWacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNdleqeqeheheheheheqeheheheheqeqeqdDdDcNcNcNcNcNcNcNcNdydydydxcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdydxdxdxdydydlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeqcNcNdldldldlcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacachfacacacaWacacacacacacacacacacacacacacacacacaaaaaaaacZfecZcZfecZadgrgUhgadhhhjhicZajajajadamadgYdzdzdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNeqeqeheheheheheheqeheheheheqeheqdldDdDcNcNcNcNcNcNcNdydydydydxcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdydydxdxdydydlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeWeheFevdldldldlcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaWacacacacacaaaaaaaacZhkhkhkhkhkhlgUdfgUadhmhhhncZcZadadadacacacdzdzdzdzdzdzdzacacacacacacacacacacacacacaVacacacacacacacacacaWacacacacacacacaWacacacacacacacaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNeqeqeqeqeqeqeqeqehehgleheheheFeFeqdDdlcNcNcNcNdydydydydydxdxdxcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdydydydydydydlcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeqeheheFevdmcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaacacacacacacaccPcPcPcPcPacacacacacacacacacacacacacacacacacdWacacacacdWacacacacacacacacacacaWacacacaaaaaaaacZfecZcZhoadadgUgrdfadhphphphpaaacacacacacacacacacdzdzdzdzacacacacacacacacacacacacacacacacacacacacacaWacacacaWacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNeqeqeheheheheheheqeheheheheqeFeFevdldldldlcNcNdydxdydydycNcNcNcNcNcNcNdldldldlcNcNcNcNcNcNcNcNcNcNdydydydydydldlcNcNcNcNcNcNcNcNcNcNcNcNcNeqehehehgleheqeqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaacacacacacaccPcPcRcRcRcPcPacacacacacacacacacacacacacacacacacacaVacacacacacacacacacacacacacacacacacaaaaaaaacZdJgZadhrhqaddfgrgradaaaaaaaaaaacacacacacacacacacdzdzdzdzdzacacaWacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNeqeqeqeqehehgleheheheheheheheheqeqeqdldldldodldldldydydycNcNcNcNcNcNdldldldldodldlcNcNcNcNcNcNcNcNcNcNcNcNdldldldldlcNcNcNcNcNcNcNcNcNcNcNcNeqeqeheheheheheqeqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaacacaLacacaccPcRcRcRcRcRcPcPcPacacacacacacacacacaWacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaacZhsgSadhrhrgrgrgrfkfkaaaaaaaaaaacacacacacacacacacdzdzdzdzdzaWacacacaWacacacacacacacbMacacacacacacacacacacacacacacacaLaLacacacacacacacacaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNeqeqeheheheheheheheheheqeqeqeqdleqeqdlcNdldldldqdldldydycNcNcNcNcNdldldldqdldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNcNeqeqeqeheheheheheqeqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacachfacacacaWacacacacacacacacacacacacacacacacacaaaaaaaacZfecZcZfecZadgrgUhgadhhhjhicZajajajadamadgYdzdzdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNeqeqeheheheheheheqehehdleheqeheqdldDdDcNcNcNcNcNcNcNdydydydydxcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdydydxdxdydydlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeWeheFevdldldldlcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaWacacacacacaaaaaaaacZhkhkhkhkhkhlgUdfgUadhmhhhncZcZadadadacacacdzdzdzdzdzdzdzacacacacacacacacacacacacacaVacacacacacacacacacaWacacacacacacacaWacacacacacacacaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNeqeqeqeqeqeqeqeqehehfxeheheheFeFeqdDdlcNcNcNcNdydydydydydxdxdxcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdydydydydydydlcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeqeheheFevdmcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaacacacacacacaccPcPcPcPcPacacacacacacacacacacacacacacacacacdWacacacacdWacacacacacacacacacacaWacacacaaaaaaaacZfecZcZhoadadgUgrdfadhphphphpaaacacacacacacacacacdzdzdzdzacacacacacacacacacacacacacacacacacacacacacaWacacacaWacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNeqeqehehdldleheheqehdleheheqeFeFevdldldldlcNcNdydxdydydycNcNcNcNcNcNcNdldldldlcNcNcNcNcNcNcNcNcNcNdydydydydydldlcNcNcNcNcNcNcNcNcNcNcNcNcNeqehehdlfxeheqeqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaacacacacacaccPcPcRcRcRcPcPacacacacacacacacacacacacacacacacacacaVacacacacacacacacacacacacacacacacacaaaaaaaacZdJgZadhrhqaddfgrgradaaaaaaaaaaacacacacacacacacacdzdzdzdzdzacacaWacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNeqeqeqeqehdlfxdldldldleheheheheqeqeqdldldldodldldldydydycNcNcNcNcNcNdldldldldodldlcNcNcNcNcNcNcNcNcNcNcNcNdldldldldlcNcNcNcNcNcNcNcNcNcNcNcNeqeqehehdldleheqeqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaacacaLacacaccPcRcRcRcRcRcPcPcPacacacacacacacacacaWacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaacZhsgSadhrhrgrgrgrfkfkaaaaaaaaaaacacacacacacacacacdzdzdzdzdzaWacacacaWacacacacacacacbMacacacacacacacacacacacacacacacaLaLacacacacacacacacaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNeqeqehehehehdldleheheheqeqeqeqdleqeqdlcNdldldldqdldldydycNcNcNcNcNdldldldqdldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNcNeqeqeqeheheheheheqeqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
aaaaaaaaaaaaaaaaaaaaacacacacacaccPcXcRhtcRcRcRcRcWacacacacacacacacacacacacacdWacacacacacacacacacacacacacacacacacacacacacacaaaacZcZcZcZadgsgrgrfkfkfkaaaaaaaaaaaaacacacacacacacacacacdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacaLaLacacacacacacacacaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNeqeqeheheheheheheheheheqeqeqeqdldldldlcNcNcNdldldldmdldldydycNcNcNdldldldldldldldldldldlcNcNcNcNcNcNcNcNcNcNdldldqdlcNcNcNcNcNcNcNcNcNcNeqehethueqeqeheheheheheqcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
aaaaaaaaaaaaaaaaaaaaaaacacacacaccPcRcRcRcRcRcPcPcPacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaeReSeSeTeTeSeReReRaaaaaaacacacacacacacacacacdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNeqeqeqeEhveheteqeqdldldldldldldldlcNcNcNcNcNcNdldldldldlcNcNcNdldldldldlcNcNdldldldlcNcNcNcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNeqeheheheqeqeheheheheheqcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
aaaaaaaaaaaaaaaaaaaaaaacaLacacaccPcPcRcRcRcPcPacacacacacacacacacacacacacacacacacacaccQacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaeReReSeSeTeSeReReRaaaaaaaaaaaaacacacacacacacdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNeqeqeqeqeqeqeqeqeqdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldlcNcNdldldldldlcNcNdldldldlcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNcNcNcNcNcNcNcNeqeheheheqeheqeqeheheteqcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
aaaaaaaaaaaaaaaaaaaaaaacacacacacaccPcPcPcPcPacacacacacacacacacacacacacacacacacacacacacacaWacacacacacacacacaWacacacacacacacaaaaaaaaaaaaaaeReReSeSeTeSeSeReRaaaaaaaaaaaaacacacacacacacdzdzdzdzacacacacacacacacacacacacacdWacacacacacacacacacaWacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlcNdldldldldlcNcNdldldldlcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNcNcNcNcNcNcNcNeqhxeheheqehehehehehhueqcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaeReReSeSeTeSeReRaaaaaaaaaaaaaaaaacacacacdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacaWacacacaWacacacacacacaLacacaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldldldldlcNcNdldldldlcNcNcNcNcNcNcNcNcNdldodldlcNcNcNcNcNcNcNcNcNcNcNeqeheheheheheheheheheheqcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaacacaVacacacacacacacacacbMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaeReReSeSeSeSeReRaaaaaaaaaaaaaaaaacacacacdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaLacacaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldlfxdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldldldlcNcNcNcNdldlcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNcNcNcNcNcNcNcNeqeqehehehehehgleheheheqcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaeReReSeSeTeSeReRaaaaaaaaaaaaaaaaacacacacdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacaWacacacaWacacacacacacaLacacaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldldldldlcNcNdldldldlcNcNcNcNcNcNcNcNcNdldodldlcNcNcNcNcNcNcNcNcNcNcNeqehehehehehehdldleheheqcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaacacaVacacacacacacacacacbMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaeReReSeSeSeSeReRaaaaaaaaaaaaaaaaacacacacdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaLacacaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldlfxdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldldldlcNcNcNcNdldlcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNcNcNcNcNcNcNcNeqeqehehehehehfxdleheheqcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
aaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacaWacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaeReReSeSeSeSeReRaaaaaaaaaaaaaaaaacacacacdzdzdzdzacaWacacacacacacdWacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldldldldldlcNcNdldqcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNeqeqeheqeqeqeqeqeheqcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
aaaaaaaaaaaaaaaaaaaaaaacacacacacaWacacacacacacacacacacacacacacacaWacacacacacacacacacacacacacacacacaWacacacacacacacacacacacacacaaaaaaaaaaaaeReReTeSeSeSeSeReRaaaaaaaaaaaaaaaaaaacacdzdzdzdzacacacacacacacacacacacacacacacacacacacdWacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldqdldldldldodldlcNcNdldlcNcNcNcNcNcNdldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeqeWeqeqeheheheheqcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
aaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacaLacacacacacacacacacacacacacacbMacacacacacacacacaLacacacacaWacacacacacacacacacacacaaaaaaaaaaaaaaaaeTeTeSeSeTeReRaaaaaaaaaaaaaaaaaaacacdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldDdDdldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldldldldldldlcNdldlcNcNcNcNcNcNdldldqdldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeqeqeFeFeqeqdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
@@ -902,15 +898,15 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacdWacacacacacacacacacacacacacacacacacdzac
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacdzacacacacdzacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaeReReReReReSeSeSeSeSeReReReRaaaaaaaaaaaaaaacacacacacacacacacacacacacacdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldldDdDdldlcNcNdldldldldldldldldleqeheFeFdldldldldqdldodldDdDdDdDdDdDdDdDdDdDdldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadWacacacacacacacacaWacacacacacacacacacacacdzdzdzdzacdzacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaeReReReReReReSeSeSeSeSeSeReReReRaaaaaaaaaaacacacacacacacacbMacacacacacdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldDdDdldldldleqeqeqeqeqeqdldldleqeheheqdleqdldldldldDdDdDdDdDdDdDdDdDdDdDdDdldmdldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacdzdzdzdzacdzdzacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeReSeShCeSeSeSeSeReReRaaaaaaaaaaacacacacacacacacacacacacacacacdzdzdzdzacaWacacacacacacacacacacacacacadadadadadadcZaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldleveveqehehhIeqeqeqeqeqeqeheheqdldldldldldDdDdDdDdDdDdDdDdDdDdDdDdldldlcNcNcNdldldycNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaWacacacacacacacacacacacacacaLacacacdzdzdzdzdzdzdzacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeReReSeSeSeSeSeSeReReRaaacacacacacacacacacacacacacacacacacacacdzdzdzdzdzacacacacacacacacacacacacacachJgMgKaohKhLcZcZaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldleveFeFehehglehehehehehehgleheheqdldldldldldDdDdDdDdDdldldldldldldldldldlcNcNcNdldldydydxcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacaLaLaLacacacacdzdzdzdzdzacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaeReReSeSeShHeSeSeSeSeSaaacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzacacacacacacacacacacacacachJaoaoaoaoaoaocZcZaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeFehehehehehehehehehehehehhveqdlcNdldldldDdDdDdDdDdldldqdldldldldldldlcNcNcNcNcNdydydxcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaWacacacacacacacacacacacacacaLacacacdzdzdzdzdzdzdzacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeReReSeSeSeSeSeSeReReRaaacacacacacacacacacacacacacacacacacacacdzdzdzdzdzacacacacacacacacacacacacacachJgMgKaohKhLcZcZaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldleveFeFehehfxdlehehehehehfxdleheqdldldldldldDdDdDdDdDdldldldldldldldldldlcNcNcNdldldydydxcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacaLaLaLacacacacdzdzdzdzdzacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaeReReSeSeShHeSeSeSeSeSaaacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzacacacacacacacacacacacacachJaoaoaoaoaoaocZcZaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeFehehehdlehehehehehehdldlhveqdlcNdldldldDdDdDdDdDdldldqdldldldldldldlcNcNcNcNcNdydydxcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacaLaLacacacacacdzdzdzdzdzacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeReReSeSeSeSeShDeSacacacacacacacacacaVacacacacaLacacacacacacacdzdzdzdzdzdzacacacacacacacacacacacachJaoaoaoaoaoaohMcZaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeqeheheheheheheheheqeqeqeqeqeqeqcNcNdldldDdDdDdDdDdDdldldldldlcNcNcNcNcNcNcNcNcNcNdydydycNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacaWacacacacacacacacacacacacacacacacacacdzdzdzdzacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaeReReReReReSeSeSachNacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzacacacacacacacacacacacadaoaoaoaoaoaofucZaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeheheheheqeheheheheqcNcNcNcNcNcNcNcNdldldDdDdDdDdDdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdydydycNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeReSeSacacacacacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzacacacacacacaccMacadcZcZcZcZhOajcZcZcZcZgheSeReRaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeheqeqeheqeheheheqeqcNcNcNcNcNcNcNcNcNcNcNdDdDdDdDcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdxdydydydlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeRhPacacacacacacacacaLacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzacacacacacacacacadajajajhQdfdfdfgNdfcZeSeShReRaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqhSeheheheheqeheheheteqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdxdydydydlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaWacacacacacacacacacacacacaVacacacacacdzdzdzdzdzacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacachNacdaacacacaLaLacacacacacacacacacacacacacacacacacacacacdzdzdzdzacacacacacacacachJdXajajajdfdfgNgNgNfDeSeSeReRaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeueheheqeheheqeqhTeqeqcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdydldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacaWacacacacacacacacacdzdzdzdzdzacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacaLaLacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzacacacacacacachJdXajajdfhUdfgNfDfDfDeSeReReRaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeBeheheqehgleheqeqcNcNcNdldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlcNhVhVhVhVhVhVhVcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaLaLacacacacacacacacacacacacacacacacacacdzdzdzdzdzacacacacacacacacacacacaLacacacacacacaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacaLacacacacacacacacacacacacacacacacaWacacacdzdzdzdzdzacacacacacachJdXajajajdfdfgNgNfDfDeSeSeReRaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeIeheheheheheheqcNcNdldldldldFdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlcNhVhWhWhXhXhYhVcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacaWacacacacacacacacacdzdzdzdzdzacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacaLaLacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzacacacacacacachJdXajajdfdfdfgNfDfDfDeSeReReRaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeBeheheqehfxdleqeqcNcNcNdldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlcNhVhVhVhVhVhVhVcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaLaLacacacacacacacacacacacacacacacacacacdzdzdzdzdzacacacacacacacacacacacaLacacacacacacaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacaLacacacacacacacacacacacacacacacacaWacacacdzdzdzdzdzacacacacacachJdXajajajdfdfgNgNfDfDeSeSeReRaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeIehehehdldleheqcNcNdldldldldFdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlcNhVhWhWhXhXhYhVcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaLaLaLacacacacacacacacacacacacacacacacacacdzdzdzdzdzacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzdzdzacacacacadajajajajajhZdfgNgNcZeReSeSeRaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeqeqeqeqeFeqeqeqdlcNdldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlcNhVibiaiaiaichVcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaLaLacacacacacacacacacacacacaWacacacacacacdzdzdzdzdzacacacacacacaLaLacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaLacacacacacacacacacacacaWacacacacacacacacacacacacdzdzdzdzdzdzdzfPadefefcZcZcZcZhOajcZcZcZcZcZeReSgheRaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeFeqdldldldliddldldldldlcNcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlhVhVieiaiaiaifhVcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaLaLacacacacacacacacacacacacacacacacacacacdzdzdzdzacacacacacacacaLaLacaWacacacacacacacacaLacacacacacacacacacacacacacacacacacacacacacacacacacacacaWacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzecdfdfecigigihigigiiigigcZaaeReReSeRaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNeqeFdldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldlcNcNcNcNcNcNcNcNcNcNcNcNdldldlijhVhWiaiaiaiaikhVcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
@@ -918,22 +914,22 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacdz
aaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacaWacacacacacacacdzdzdzdzacacacacacacacacacacacacacacacacacaLaLacacacacacacacaLaLacacacacacacacacacacacacacacacacacacacacacacacacacacaWacacacacacacacacacacacacacacacacdzacacacacadhhiocZigigigigigcZaaeReReShRaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldFdlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldDdDdDdlcNcNcNcNcNcNcNcNcNcNcNdldlcNcNhVhWiaipiqiminhVcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
aaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacaWacacacacacacacacacacacacacacacdzdzdzdzdzacacacacacacacacacacacacaWacacacacaLaLacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacdzacacacacadirhhisigigitigigcZaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNdldDdDdldlhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhViuhVhVhVhVhVhVhVhVhVcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
aaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacivfJacacfJacacacacacacacacaLaLacacacacacacacacacacacacacacacacbMacacacacacdzdzacacacadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdliddlcNcNcNcNcNcNcNcNcNcNdldldlcNcNcNcNcNcNcNcNdldDdDdldlhViwiwiwiwixhViziyiBiAiDiCizhViEiwiwiEhViFiwiwiwiwiFhVcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzacacacacacaLacacacacacacacacacacacacacacacacacacacacacacacacacaciGacacacacfGacacacacacacacacacacacacacacacacaWacacacacacacacacacacacacacacacacacacdzaUacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNdldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldlcNcNcNcNcNcNcNcNcNcNcNcNdldlcNcNcNcNdliHdldldldldldlhViwiwiwiwiwhViIiIiIiIiIiIiIhViwiwiwiwhViJiJiJiJiJiJhVcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzacacaLacacacacacacacacaWacacacacacacacacacacacacacacacacacacacacacacacdpiLiKiNiMacacacacacacacacacacacacacacacacacacacdWacacacacacacacacacacacacacaUaUaUaUaUaUacgbadadadacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNdldldldliOdldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldlcNcNcNcNcNcNcNcNcNcNcNcNdldlcNcNcNcNehehehiPhViQiQiQhViRiwiwiwiwhViSiIiUiTiViIiIhViWiwiwiwhViXiXiXiXiXiXhVcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacaciYdzdziZdzacacaLacacaLacacacacacacacacacacacacacacacacacacacacacacacacacacacdpjadpdpdpjbiNacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaUaUaUjcaiadacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNdldldodldldldldldldldldlcNcNcNcNcNcNcNcNdxdxdydydydldlcNcNcNcNcNcNcNcNcNcNcNcNdldlcNcNehehehehehehjdjejejejdiwiwiwiwiwjfiIiIjhjgjhiIiIjfiwiwiwiwjiiwiwiwiwiwiwhVcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacaccMacacacacacacjjjkjkjjaUacacaLacacacacacacacacacacacacacacacacacacacacacacacacacacacaciNjldpdpdpdpjmjmiNacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacjnadadadacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNdldldldldldldldldldldldldlcNcNcNcNcNcNcNcNdxdydydydydydldldldlcNcNcNcNcNcNcNcNdljoehehehehehehehehehjdjejejejdiwiwiwiwjphVjqiIjsjrjtiIjuhViwiwiwiwhVjviwiwiwiwjvhVcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaLaLacacacacacacacacacacacacacaVacacacaciKjwjwiKaUacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaciNjljxjyjmjAjzjBiNacacacacacacacacbMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacjCacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNdldldldldldldDdDdDdDdldodldlcNcNcNcNcNdydydydydydydxdxcNdliddldlcNcNcNcNcNcNcNcNdlehehehehehehehehehiPhViQiQiQhVjEjDjFjFjGhVjqiIiIiIiIiIjHhViwiwiwiwhVhVhVjIjJhVhVhVcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzacacacacacaLacacacacacacacacacacacacacacacacacacacacacacacacacaciGacacacacfGacacacacacacacacacacacacacacacacaWacacacacacacacacacacacacacacacacacacdzdzacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNdldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldlcNcNcNcNcNcNcNcNcNcNcNcNdldlcNcNcNcNdliHdldldldldldlhViwiwiwiwiwhViIiIiIiIiIiIiIhViwiwiwiwhViJiJiJiJiJiJhVcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacdzdzdzdzdzacacaLacacacacacacacacaWacacacacacacacacacacacacacacacacacacacacacacacdpiLiKiNiMacacacacacacacacacacacacacacacacacacacdWacacacacacacacacacacacacacdzdzdzdzdzdzacgbadadadacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNdldldldliOdldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldlcNcNcNcNcNcNcNcNcNcNcNcNdldlcNcNcNcNehehehiPhViQiQiQhViRiwiwiwiwhViSiIiUeQiViIiIhViWiwiwiwhViXiXiXiXiXiXhVcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacaciYdzdziZdzacacaLacacaLacacacacacacacacacacacacacacacacacacacacacacacacacacacdpjadpdpdpjbiNacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacdzdzdzjcaiadacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNdldldodldldldldldldldldlcNcNcNcNcNcNcNcNdxdxdydydydldlcNcNcNcNcNcNcNcNcNcNcNcNdldlcNcNehehehehehehjdjejejejdiwiwiwiwiwjfiIiIjhjgjhiIiIjfiwiwiwiwjiiwiwiwiwiwiwhVcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacaccMacacacacacacjjjkjkjjdzacacaLacacacacacacacacacacacacacacacacacacacacacacacacacacacaciNjldpdpdpdpjmjmiNacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacjnadadadacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNdldldldldldldldldldldldldlcNcNcNcNcNcNcNcNdxdydydydydydldldldlcNcNcNcNcNcNcNcNdljoehehehehehehehehehjdjejejejdiwiwiwiwjphVjqiIjsjrjtiIjuhViwiwiwiwhVjviwiwiwiwjvhVcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaLaLacacacacacacacacacacacacacaVacacacaciKjwjwiKdzacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaciNjljxjyjmjAjzjBiNacacacacacacacacbMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacjCacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNdldldldldldldDdDdDdDdldodldlcNcNcNcNcNdydydydydydydxdxcNdliddldlcNcNcNcNcNcNcNcNdlehehehehehehehehehiPhViQiQiQhVjEjDjFjFjGhVjqiIiIiIiIiIjHhViwiwiwiwhVhVhVjIjJhVhVhVcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaLaLaLaLacaWacacacacacacacacacacacacacacacaciKjwjwiKacacacacacacacacacacacacacacacacacacacacacacacacacacacjKacacacacjLiNiNiNjMiNiNiNjNacacacacacacacacacacacacacdWacacacacacacacacacacacacacacacacacacacacaWacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNdldldldldldldDdDdDdDdDdldldlcNcNcNcNcNdydydydycNcNcNcNcNdldldlevcNcNcNcNcNcNcNcNdlehehehehehjodldldldldldldldlhVjPjDjFjFjGhVjQiIiIiIiIiIjRhVjviwiwjvhVhVhVjOjShVhVhVcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaLaLaLaLacacacaWacacacacacacacacacacacacacacjjjkjkjjjjjjjTjTjjjjacacacacacacacacacacacacacacacacaWacacacacjUjKacacacacaciNjVjmjWiNacacacacacacacacacbMacacbMacacacacacacachfacacacacacdWacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNdldldldldDdDdDdDdDdDdDdlcNcNcNcNdldldydycNcNcNcNcNcNcNcNcNcNcNevevdldldldldldldldlehehehdldldlhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVjXiwhVhVhVhVhVjYiwhVhVhVkajZjZkbhVhVhVcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaacaLaLaLaLaLacacacacacacacacacacacacacacacacacacdpdpdpdpkckckckckckckdacacacacacacacacacacacacacacacacacacacackeackeacacackfdpkhkgkiiNacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNdldldldldDdDdDdDdDdDdDdlcNcNcNcNdldydydxcNcNcNcNcNcNcNcNcNcNcNevdldldldDdDdldldldldlcNcNcNdldlhVkkkjkmklkkkjkmklkoknkphVkrkqktksiwiwiEiwiwhVkwkvkvkwhVhVkujZjZjSkykxhVcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaacaLaLaLaLacacacacacacacacacacacacacacacacacfJacacacdpdpdpdpkckzkckckckAacacacacacacacacacacacacacacacacacacacackBacacacacdpdpkhkCkiiNacacacacacacacacacacacacacaLacacacacacacacacacacacacacacacacacacacacacaWacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNdldliOdldldldldDdDdDdldldldldldldldydydxcNcNcNcNcNcNcNcNcNcNcNdldldldldDdDdDdDdDdldlcNcNcNdldlhVjDkDkEkljDkDkEklkGkFkFhVkHkqkqkJiwiwiwiwiwhVkKkvkvkvhVhVkIjZjZkLhVhVhVcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaacaLaLaLacacacacacacacacacacacacacacacacacacacacdpdpdpdpdpkckMkckckckckcdpacacacacacacacacacacacacacacacacacacacacackeacacdpdpkhjmkiiNacacacackNacacacacacacacacacacacacacacacacacdWacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNdldldldldldldldldDdldldodldldldldldydxcNcNcNcNcNcNcNcNcNcNcNdldldldldldldldldldldlcNcNcNdldlhVkOklklklkOklklklkFkFkFhVhVhVhVhVkPiwhVhVhVhVkRkvkvkKhVhVkSkQkQkThVcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacfJackUackUjjjjkckcjjjjjjjjjjjjjjkckzkcjjacaWacacacacacaLaLacacacacacacacacacacacacacackViNkhkWkXiNacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNdldldldodldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldlcNcNdlcNcNcNcNcNcNcNhVkFkFkFkFkFkFkFkFkFkFkFkFkZkYlblakFkFldlckZhVkKkvkvlehVhVhVhVhVhVhVhVhVhVhVcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacfJacacacfCacacdpdpjjkckcjjlflhlglglhjjkckcdpjjacacacaWacacacaLaLacacacacacacacacacacacacdplikViNljjmkgiNdplkacacacacacacacacacacacacacacacacacacaVacacacacacacacacaWacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNdldldldldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldlcNcNcNcNcNcNhVkFllkFkFkFkFkFkFkFkFkFkFkFkFkFkFkFlclnlmkFhVkvkvkvkKhVhVhVhVhVhVlplolrlqhVcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacjjdpacacacacacacdpdpjjkckcjjlslslslsltjjkcdpacjjacacacacacacacacacacacacacacacacacacfCacacdplukglvjmjmjmlwjmdpdpjTacacacacacacacacacacacdWacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdlcNcNcNcNcNcNhVkOklklklkOklklklkFkFkFkFkFkFkFkFkFkFlylxlchVlzkvkvkvlAiwiwiwhVlplClBlDlqhVcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacjjdpacackUacacacdplFlEkckclGlslslslslHjjlIdpacjjacacacacacacacacacacacacacacacacacacacjTlJjmlKjmlLjmjmlNlMjmjmdpiNacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacbMacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldlcNcNcNcNcNhVjDkDkEkljDkDkEklkGkFkFkFkFkFkFkFkFkFkFkFkFhVlzkvkvlOhViwiwiwhVlplClPlrlqhVcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacjjdpacacjjdplQdpdplFjjkckcjjlslslslsltjjdpacacjjacacacacacacacacacacacacacacacacacaclRiNiNiNiNiNiNlSkglTiNiNiNiNiNacacacacacacacacacacacacacacacacacacacacacacacacacacacaWacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdlcNcNcNcNcNhVkklUlVklkklUlVkllXlWkFkFlXlYmalZkFlXlWlWlZhVmbkvkvmchViRiwjphVmdlClClCmehVcNcNcNcNcNcNcNcNcNcNcNcNababababababab
-aaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacjjacacacjjlFdpdplFlFjjkckcjjltlhlglglhjjdpacacacacacacaLacacacacacacacacacacacacacaciNjmmfjmmgkViNjmjmkgiNkVkVcQmhacacacacacacacacaLacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldlcNhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVjYiwhVhViwiwiwhVlClClPlrlqhVcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaLaLaLaLacacacaWacacacacacacacacacacacacacacjjjkjkjjjjjjjTjTjjjjacacacacacacacacacacacacacacacacaWacacacacjUjKacacacacaciNjVjmjWiNacacacacacacacacacbMacacbMacacacacacacachfacacacacacdWacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNdldldldldDdDdDdDdDdDdDdlcNcNcNcNdldldydycNcNcNcNcNcNcNcNcNcNcNevevdldldldldldldldlehehhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVjXiwhVhVhVhVhVjYiwhVhVhVkajZjZkbhVhVhVcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaacaLaLaLaLaLacacacacacacacacacacacacacacacacacacdpdpdpdpkckckckckckckdacacacacacacacacacacacacacacacacacacacackeackeacacackfdpkhkgkiiNacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNdldldldldDdDdDdDdDdDdDdlcNcNcNcNdldydydxcNcNcNcNcNcNcNcNcNcNcNevdldldldDdDdldldldldlcNhVkkkjkmklkkkjkmklkkkjkmklkoknkphVkrkqktksiwiwiEiwiwhVkwkvkvkwhVhVkujZjZjSkykxhVcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaacaLaLaLaLacacacacacacacacacacacacacacacacacfJacacacdpdpdpdpkckzkckckckAacacacacacacacacacacacacacacacacacacacackBacacacacdpdpkhkCkiiNacacacacacacacacacacacacacaLacacacacacacacacacacacacacacacacacacacacacaWacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNdldliOdldldldldDdDdDdldldldldldldldydydxcNcNcNcNcNcNcNcNcNcNcNdldldldldDdDdDdDdDdldlcNhVjDkDkEkljDkDkEkljDkDkEklkGkFkFhVkHkqkqkJiwiwiwiwiwhVkKkvkvkvhVhVkIjZjZkLhVhVhVcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaacaLaLaLacacacacacacacacacacacacacacacacacacacacdpdpdpdpdpkckMkckckckckcdpacacacacacacacacacacacacacacacacacacacacackeacacdpdpkhjmkiiNacacacackNacacacacacacacacacacacacacacacacacdWacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNdldldldldldldldldDdldldodldldldldldydxcNcNcNcNcNcNcNcNcNcNcNdldldldldldldldldldldlcNhVkOklklklkOklklklkOklklklkFkFkFhVhVhVhVhVkPiwhVhVhVhVkRkvkvkKhVhVkSkQkQkThVcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacfJackUackUjjjjkckcjjjjjjjjjjjjjjkckzkcjjacaWacacacacacaLaLacacacacacacacacacacacacacackViNkhkWkXiNacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNdldldldodldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldlcNcNdlcNcNcNhVkFkFkFkFkFkFkFkFkFkFkFkFkFkFkFkFkZkYlblakFkFldlckZhVkKkvkvlehVhVhVhVhVhVhVhVhVhVhVcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacfJacacacfCacacdpdpjjkckcjjlflhlglglhjjkckcdpjjacacacaWacacacaLaLacacacacacacacacacacacacdplikViNljjmkgiNdplkacacacacacacacacacacacacacacacacacacaVacacacacacacacacaWacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNdldldldldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldlcNcNhVkFllkFkFkFllkFkFkFkFkFkFkFkFkFkFkFkFkFkFkFlclnlmkFhVkvkvkvkKhVhVhVhVhVhVlplolrlqhVcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacjjdpacacacacacacdpdpjjkckcjjlslslslsltjjkcdpacjjacacacacacacacacacacacacacacacacacacfCacacdplukglvjmjmjmlwjmdpdpjTacacacacacacacacacacacdWacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldldldldlcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdlcNcNhVkOklklklkOklklklkOklklklkFkFkFkFkFkFkFkFkFkFlylxlchVlzkvkvkvlAiwiwiwhVlplClBlDlqhVcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacjjdpacackUacacacdplFlEkckclGlslslslslHjjlIdpacjjacacacacacacacacacacacacacacacacacacacjTlJjmlKjmlLjmjmlNlMjmjmdpiNacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacbMacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldlcNhVjDkDkEkljDkDkEkljDkDkEklkGkFkFkFkFkFkFkFkFkFkFkFkFhVlzkvkvlOhViwiwiwhVlplClPlrlqhVcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacjjdpacacjjdplQdpdplFjjkckcjjlslslslsltjjdpacacjjacacacacacacacacacacacacacacacacacaclRiNiNiNiNiNiNlSkglTiNiNiNiNiNacacacacacacacacacacacacacacacacacacacacacacacacacacacaWacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdlcNhVkklUlVklkklUlVklkklUlVkllXlWkFkFlXlYmalZkFlXlWlWlZhVmbkvkvmchViRiwjphVmdlClClCmehVcNcNcNcNcNcNcNcNcNcNcNcNababababababab
+aaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacjjacacacjjlFdpdplFlFjjkckcjjltlhlglglhjjdpacacacacacacaLacacacacacacacacacacacacacaciNjmmfjmmgkViNjmjmkgiNkVkVcQmhacacacacacacacacaLacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldlhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVjYiwhVhViwiwiwhVlClClPlrlqhVcNcNcNcNcNcNcNcNcNcNcNcNababababababab
aaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacmijjiKiKjjacacdpjjjjjjjjjjjjjjkckcjjjjjjjjjjjjjjdpacacacacacacacacacacacacacacaVacacacacacaciNjmmjjmmkjmmljmjmjmmmmnmkdpacfCacacacacacacacaLacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldlcNcNdldldldldlhVmoiwiwiwmpiwmrmqmtmsiwmumwmvmxiJiwiwiwiEhViwiwiwlAlClClBlDlqhVcNcNcNcNcNcNcNcNcNcNcNcNababababababab
aaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacjkjwjwjkacacdpdpdpdpmydpkckckckckcdpdpmzdpacacacacacacacacacacacacacacacacacacacacacacacacjTdpmAjmjmmjmBjmjmjmmCjmmDlQdpmEiNacacacacacacacacacacacacacacacacacacaLacacacacacaWacacacacacacacacacacacaLaLaLacacacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdliOdldldldldliOdldldldlcNcNcNcNcNcNcNcNcNcNcNdldldldldldlmFdlhViwmGiwiwiwiwiJmHmIiwiwiwiwiwiwiwiwiwiwiwhViwiwiwhVlClClolrmJhVcNcNcNcNcNcNcNcNcNcNcNcNababababababab
aaaaaaaaaaaaaaaaaaaaaaaaacacacaWacacacacdWacacacacjkjwjwjkacacacacacdpmKdpdpdpkckcmLkcdpdpdpackeacacacjkacacacacacacaLaLacacacacacacacacacacdpdpmMjmkVkViNmOmNmOiNdpdpdpmPdpiNacacacacacacacacacacacacbMacacacacacacacacacacacacacacacacacacacacacacaLmQmQmQaLaLacacaaaaaaaaaaaaaaaaaaaaaaababcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNdldldldldliddldldldliOdlcNcNcNcNcNcNcNcNcNcNcNcNdldldldldldldlhViRiwiwiwmGiwiJmRmIiwmSiwiwiwiwiwiwiwiwiwhVhVhVhVhVhVhVhVhVhVhVcNcNcNcNcNcNcNcNcNcNcNcNababababababab
diff --git a/_maps/map_files/AsteroidStation/AsteroidStation.dmm b/_maps/map_files/AsteroidStation/AsteroidStation.dmm
index 1ebc45e44da..b717407bddd 100644
--- a/_maps/map_files/AsteroidStation/AsteroidStation.dmm
+++ b/_maps/map_files/AsteroidStation/AsteroidStation.dmm
@@ -314,7 +314,7 @@
"agb" = (/obj/structure/cable/orange{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/maintenance/apmaint)
"agc" = (/obj/machinery/conveyor_switch{id = "Recycler2"},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/apmaint)
"agd" = (/obj/machinery/mineral/stacking_unit_console{machinedir = 4},/turf/simulated/wall,/area/maintenance/apmaint)
-"age" = (/obj/machinery/mineral/stacking_machine,/turf/simulated/floor/plating,/area/maintenance/apmaint)
+"age" = (/obj/machinery/mineral/stacking_machine{input_dir = 2; output_dir = 1},/turf/simulated/floor/plating,/area/maintenance/apmaint)
"agf" = (/turf/simulated/wall/shuttle{icon_state = "swall_s6"; dir = 2},/area/shuttle/transport)
"agg" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
"agh" = (/obj/machinery/ai_slipper{icon_state = "motion0"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
@@ -374,8 +374,8 @@
"ahj" = (/obj/machinery/door/airlock/external{name = "External Airlock"; req_access_txt = "13"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating{icon_state = "warnplate"},/area/maintenance/apmaint)
"ahk" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
"ahl" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
-"ahm" = (/obj/machinery/door/poddoor/preopen{id = "aishutter"; name = "AI core shutters"},/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/turret_protected/ai)
-"ahn" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/preopen{id = "aishutter"; name = "AI core shutters"},/turf/simulated/floor/plating,/area/turret_protected/ai)
+"ahm" = (/obj/machinery/door/poddoor/preopen{id = "aishutter"; name = "AI core shutters"},/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/turret_protected/ai)
+"ahn" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "aishutter"; name = "AI core shutters"},/turf/simulated/floor/plating,/area/turret_protected/ai)
"aho" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
"ahp" = (/obj/machinery/power/solar{id = "auxsolareast"; name = "Port Auxiliary Solar Array"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/solar/auxstarboard)
"ahq" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/solar/auxstarboard)
@@ -478,12 +478,12 @@
"ajj" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plating,/area/maintenance/fpmaint)
"ajk" = (/obj/structure/closet/crate,/turf/simulated/floor/plating,/area/maintenance/fpmaint)
"ajl" = (/obj/structure/closet,/obj/item/device/flashlight,/obj/item/weapon/extinguisher,/turf/simulated/floor/plating,/area/maintenance/fpmaint)
-"ajm" = (/obj/structure/cable/orange{d2 = 4; icon_state = "0-4"},/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/storage/eva)
+"ajm" = (/obj/structure/cable/orange{d2 = 4; icon_state = "0-4"},/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/storage/eva)
"ajn" = (/obj/structure/cable/orange{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/poddoor/shutters{id = "evashutter"; name = "E.V.A. Storage Shutter"},/turf/simulated/floor/plasteel{dir = 0; icon_state = "blue"},/area/storage/eva)
"ajo" = (/obj/structure/cable/orange{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/orange{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/door/poddoor/shutters{id = "evashutter"; name = "E.V.A. Storage Shutter"},/turf/simulated/floor/plasteel{dir = 0; icon_state = "blue"},/area/storage/eva)
-"ajp" = (/obj/structure/cable/orange{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/orange{d2 = 8; icon_state = "0-8"},/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/storage/eva)
+"ajp" = (/obj/structure/cable/orange{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/orange{d2 = 8; icon_state = "0-8"},/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/storage/eva)
"ajq" = (/obj/machinery/door/airlock/glass_command{desc = "Storage area for the station's general-purpose space suits and other critical materials. Can be opened via bridge controls in an emergency."; name = "Standard E.V.A. Suits"; req_access_txt = "18"},/obj/structure/cable/orange{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 0; icon_state = "blue"},/area/storage/eva)
-"ajr" = (/obj/structure/cable/orange{d2 = 8; icon_state = "0-8"},/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/storage/eva)
+"ajr" = (/obj/structure/cable/orange{d2 = 8; icon_state = "0-8"},/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/storage/eva)
"ajs" = (/obj/structure/cable/orange{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/orange{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/fpmaint)
"ajt" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/obj/structure/cable/orange{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/fpmaint)
"aju" = (/obj/structure/cable/orange{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/maintenance{name = "Tech Storage Maintenance"; req_access_txt = "23"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fpmaint)
@@ -552,7 +552,7 @@
"akF" = (/obj/structure/rack,/obj/item/weapon/extinguisher,/obj/item/weapon/storage/belt/utility,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/apmaint)
"akG" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/power/apc{name = "Cargo Bay APC"; pixel_y = -24},/obj/structure/cable/orange,/turf/simulated/floor/plating,/area/quartermaster/office)
"akH" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/apmaint)
-"akI" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/quartermaster/office)
+"akI" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/quartermaster/office)
"akJ" = (/turf/simulated/floor/plating,/area/quartermaster/office)
"akK" = (/obj/machinery/conveyor{id = "QMLoad"},/obj/structure/plasticflaps,/turf/simulated/floor/plating,/area/quartermaster/office)
"akL" = (/obj/item/clothing/under/color/rainbow,/obj/item/clothing/shoes/sneakers/rainbow,/turf/simulated/floor/plating,/area/maintenance/apmaint)
@@ -700,7 +700,7 @@
"anx" = (/turf/simulated/floor/plasteel,/area/quartermaster/qm)
"any" = (/obj/structure/bed/chair/office/light{dir = 1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/quartermaster/qm)
"anz" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "brown"},/area/quartermaster/qm)
-"anA" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/quartermaster/qm)
+"anA" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/quartermaster/qm)
"anB" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "brown"},/area/quartermaster/office)
"anC" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "warningcorner"; dir = 8},/area/quartermaster/office)
"anD" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/quartermaster/office)
@@ -710,7 +710,7 @@
"anH" = (/turf/simulated/floor/plasteel{icon_state = "loadingarea"},/area/quartermaster/office)
"anI" = (/obj/structure/extinguisher_cabinet{pixel_x = 27},/turf/simulated/floor/plasteel{icon_state = "loadingarea"},/area/quartermaster/office)
"anJ" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/apmaint)
-"anK" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/tcommsat/server)
+"anK" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/tcommsat/server)
"anL" = (/obj/machinery/door/airlock/glass_engineering{desc = "The main server room. Dangerously cold to protect the sensitive machinery."; name = "Telecommunications Server Room"; req_access_txt = "61"},/turf/simulated/floor/plasteel,/area/tcommsat/server)
"anM" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload)
"anN" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
@@ -727,7 +727,7 @@
"anY" = (/turf/simulated/floor/plasteel,/area/quartermaster/miningdock)
"anZ" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel,/area/quartermaster/miningdock)
"aoa" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "brown"},/area/quartermaster/miningdock)
-"aob" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/quartermaster/miningdock)
+"aob" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/quartermaster/miningdock)
"aoc" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "brown"},/area/quartermaster/miningdock)
"aod" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/quartermaster/miningdock)
"aoe" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 1},/turf/simulated/floor/plasteel,/area/quartermaster/miningdock)
@@ -840,11 +840,11 @@
"aqh" = (/obj/structure/table/glass,/obj/item/device/taperecorder/empty,/obj/item/device/tape/random,/turf/simulated/floor/plasteel,/area/quartermaster/office)
"aqi" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/apmaint)
"aqj" = (/turf/simulated/wall/r_wall,/area/tcommsat/computer)
-"aqk" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/tcommsat/computer)
-"aql" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating{icon_state = "warnplatecorner"},/area/tcommsat/computer)
+"aqk" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/tcommsat/computer)
+"aql" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating{icon_state = "warnplatecorner"},/area/tcommsat/computer)
"aqm" = (/obj/machinery/door/airlock/glass_engineering{desc = "The main server room. Dangerously cold to protect the sensitive machinery."; name = "Telecommunications Server Room"; req_access_txt = "61"},/turf/simulated/floor/plasteel{icon_state = "warning"},/area/tcommsat/computer)
-"aqn" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating{icon_state = "warnplatecorner"; dir = 1},/area/tcommsat/computer)
-"aqo" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating{icon_state = "warnplate"},/area/tcommsat/computer)
+"aqn" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating{icon_state = "warnplatecorner"; dir = 1},/area/tcommsat/computer)
+"aqo" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating{icon_state = "warnplate"},/area/tcommsat/computer)
"aqp" = (/turf/simulated/wall/r_wall,/area/turret_protected/ai_upload_foyer)
"aqq" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/porta_turret{ai = 1; dir = 1},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
"aqr" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload)
@@ -853,7 +853,7 @@
"aqu" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor/plasteel,/area/quartermaster/miningdock)
"aqv" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/quartermaster/miningdock)
"aqw" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "brown"},/area/quartermaster/miningdock)
-"aqx" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/quartermaster/miningdock)
+"aqx" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/quartermaster/miningdock)
"aqy" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "brown"},/area/quartermaster/miningdock)
"aqz" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/quartermaster/miningdock)
"aqA" = (/obj/structure/closet/emcloset,/obj/machinery/light{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "brown"},/area/quartermaster/miningdock)
@@ -880,7 +880,7 @@
"aqV" = (/obj/machinery/door/airlock/glass_security{desc = "The guardpost for the Cargo Bay. High turnover rate due to allegations of corruption, bribery, and weapons trafficking."; name = "Security Post"; req_access_txt = "63"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/quartermaster/office)
"aqW" = (/obj/structure/table/reinforced,/obj/machinery/door/window/northleft{name = "Quartermaster Desk"; req_access_txt = "41"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 1; icon_state = "brown"},/area/quartermaster/qm)
"aqX" = (/obj/effect/spawner/structure/window/reinforced,/turf/simulated/floor/plating,/area/quartermaster/qm)
-"aqY" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/quartermaster/qm)
+"aqY" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/quartermaster/qm)
"aqZ" = (/turf/simulated/floor/plasteel{icon_state = "bot"},/area/quartermaster/office)
"ara" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/effect/landmark/start{name = "Cargo Technician"},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/quartermaster/office)
"arb" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/quartermaster/office)
@@ -895,7 +895,7 @@
"ark" = (/obj/structure/table,/obj/item/weapon/paper/monitorkey,/obj/item/device/multitool,/turf/simulated/floor/plasteel{icon_state = "warningcorner"; dir = 8},/area/tcommsat/computer)
"arl" = (/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/tcommsat/computer)
"arm" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel{icon_state = "warningcorner"; dir = 4},/area/tcommsat/computer)
-"arn" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/tcommsat/computer)
+"arn" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/tcommsat/computer)
"aro" = (/obj/structure/table/glass,/obj/item/weapon/stock_parts/subspace/ansible,/obj/item/weapon/stock_parts/subspace/ansible,/obj/item/weapon/stock_parts/subspace/ansible,/obj/item/weapon/stock_parts/subspace/crystal,/obj/item/weapon/stock_parts/subspace/crystal,/obj/item/weapon/stock_parts/subspace/crystal,/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/tcommsat/computer)
"arp" = (/obj/structure/table/glass,/obj/item/weapon/stock_parts/subspace/transmitter,/obj/item/weapon/stock_parts/subspace/transmitter,/obj/item/weapon/stock_parts/subspace/amplifier,/obj/item/weapon/stock_parts/subspace/amplifier,/obj/item/weapon/stock_parts/subspace/amplifier,/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/tcommsat/computer)
"arq" = (/obj/structure/table/glass,/obj/item/weapon/stock_parts/subspace/analyzer,/obj/item/weapon/stock_parts/subspace/analyzer,/obj/item/weapon/stock_parts/subspace/analyzer,/turf/simulated/floor/plasteel{dir = 5; icon_state = "warning"},/area/tcommsat/computer)
@@ -980,7 +980,7 @@
"asR" = (/obj/machinery/door/airlock/glass_mining{desc = "Storage of the Company's specialized mining gear."; name = "Mining Equipment Room"; req_access_txt = "54"},/turf/simulated/floor/plasteel{icon_state = "brown"},/area/quartermaster/miningdock)
"asS" = (/obj/machinery/mineral/equipment_vendor,/obj/machinery/status_display{pixel_x = -32},/turf/simulated/floor/plasteel{dir = 8; icon_state = "brown"},/area/quartermaster/miningdock)
"asT" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel,/area/quartermaster/miningdock)
-"asU" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/quartermaster/miningdock)
+"asU" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/quartermaster/miningdock)
"asV" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "brown"},/area/construction/hallway{name = "Port Central Hallway"})
"asW" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel,/area/construction/hallway{name = "Port Central Hallway"})
"asX" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1},/turf/simulated/floor/plasteel,/area/construction/hallway{name = "Port Central Hallway"})
@@ -1206,7 +1206,7 @@
"axj" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 4},/area/construction/hallway{name = "Port Central Hallway"})
"axk" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel,/area/construction/hallway{name = "Port Central Hallway"})
"axl" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 4},/area/construction/hallway{name = "Port Central Hallway"})
-"axm" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/storage/primary{name = "Tool Storage"})
+"axm" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/storage/primary{name = "Tool Storage"})
"axn" = (/obj/structure/table,/obj/item/weapon/wrench,/obj/item/device/analyzer,/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 1},/turf/simulated/floor/plasteel,/area/storage/primary{name = "Tool Storage"})
"axo" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = -1},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/turf/simulated/floor/plasteel,/area/storage/primary{name = "Tool Storage"})
"axp" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plasteel,/area/storage/primary{name = "Tool Storage"})
@@ -1215,7 +1215,7 @@
"axs" = (/obj/structure/table,/obj/item/weapon/storage/belt/utility,/turf/simulated/floor/plasteel,/area/storage/primary{name = "Tool Storage"})
"axt" = (/obj/structure/reagent_dispensers/fueltank,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/storage/primary{name = "Tool Storage"})
"axu" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/storage/primary{name = "Tool Storage"})
-"axv" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/storage/primary{name = "Tool Storage"})
+"axv" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/storage/primary{name = "Tool Storage"})
"axw" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/junction,/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 8},/area/hallway/secondary/construction{name = "Fore Central Hallway"})
"axx" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/turf/simulated/floor/plasteel{icon_state = "browncorner"; dir = 4},/area/hallway/secondary/construction{name = "Fore Central Hallway"})
"axy" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk,/obj/machinery/camera{c_tag = "Cargo Lobby"; dir = 4},/turf/simulated/floor/plasteel,/area/quartermaster/office)
@@ -1278,13 +1278,13 @@
"ayD" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{dir = 8; icon_state = "brown"},/area/construction/hallway{name = "Port Central Hallway"})
"ayE" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 4},/area/construction/hallway{name = "Port Central Hallway"})
"ayF" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/obj/machinery/light{dir = 4},/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 4},/area/construction/hallway{name = "Port Central Hallway"})
-"ayG" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/storage/primary{name = "Tool Storage"})
-"ayH" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/storage/primary{name = "Tool Storage"})
+"ayG" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/storage/primary{name = "Tool Storage"})
+"ayH" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/storage/primary{name = "Tool Storage"})
"ayI" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/turf/simulated/floor/plasteel{icon_state = "neutralcorner"},/area/hallway/secondary/construction{name = "Fore Central Hallway"})
"ayJ" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall,/area/quartermaster/office)
"ayK" = (/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "brown"},/area/quartermaster/office)
"ayL" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "brown"},/area/quartermaster/office)
-"ayM" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/quartermaster/office)
+"ayM" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/quartermaster/office)
"ayN" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/newscaster{dir = 8; pixel_x = -32},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralcorner"},/area/hallway/primary/starboard{name = "Starboard Hallway"})
"ayO" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plasteel{icon_state = "neutralcorner"},/area/hallway/primary/starboard{name = "Starboard Hallway"})
"ayP" = (/turf/simulated/wall,/area/crew_quarters/sleep_female{name = "Fore Dormitory"})
@@ -1303,7 +1303,7 @@
"azc" = (/obj/machinery/conveyor_switch/oneway{id = "Mininginput"},/turf/simulated/floor/plasteel,/area/quartermaster/miningdock)
"azd" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8},/turf/simulated/floor/plasteel,/area/quartermaster/miningdock)
"aze" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/table,/obj/item/weapon/paper_bin,/turf/simulated/floor/plasteel{dir = 4; icon_state = "brown"},/area/quartermaster/miningdock)
-"azf" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/quartermaster/miningdock)
+"azf" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/quartermaster/miningdock)
"azg" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "brown"},/area/construction/hallway{name = "Port Central Hallway"})
"azh" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/construction/hallway{name = "Port Central Hallway"})
"azi" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 4},/area/construction/hallway{name = "Port Central Hallway"})
@@ -1492,9 +1492,9 @@
"aCJ" = (/obj/structure/closet/crate{icon_state = "crateopen"; opened = 1},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/glass{amount = 10},/turf/simulated/floor/plating,/area/construction/Storage{name = "Construction Site"})
"aCK" = (/obj/structure/closet/crate,/turf/simulated/floor/plasteel,/area/construction/Storage{name = "Construction Site"})
"aCL" = (/turf/simulated/wall/r_wall,/area/security/detectives_office)
-"aCM" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor/shutters/preopen{id = "detffice"; name = "detective's shutters"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/detectives_office)
-"aCN" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters/preopen{id = "detffice"; name = "detective's shutters"},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/detectives_office)
-"aCO" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor/shutters/preopen{id = "detffice"; name = "detective's shutters"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/detectives_office)
+"aCM" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor/shutters/preopen{id = "detffice"; name = "detective's shutters"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/detectives_office)
+"aCN" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters/preopen{id = "detffice"; name = "detective's shutters"},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/detectives_office)
+"aCO" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor/shutters/preopen{id = "detffice"; name = "detective's shutters"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/detectives_office)
"aCP" = (/obj/structure/closet/wardrobe/black,/turf/simulated/floor/plating,/area/quartermaster/miningdock)
"aCQ" = (/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/simulated/floor/plating,/area/quartermaster/miningdock)
"aCR" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel,/area/hallway/secondary/construction{name = "Fore Central Hallway"})
@@ -1643,7 +1643,7 @@
"aFE" = (/obj/machinery/computer/secure_data,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/turf/simulated/floor/carpet,/area/security/detectives_office)
"aFF" = (/obj/effect/landmark/start{name = "Detective"},/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/carpet,/area/security/detectives_office)
"aFG" = (/obj/structure/table/wood,/obj/item/weapon/hand_labeler,/turf/simulated/floor/carpet,/area/security/detectives_office)
-"aFH" = (/obj/structure/table/wood,/obj/item/device/camera{desc = "A one use - polaroid camera. 30 photos left."; name = "detective's camera"; pictures_left = 30},/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1},/obj/machinery/light{dir = 4},/turf/simulated/floor/wood,/area/security/detectives_office)
+"aFH" = (/obj/structure/table/wood,/obj/item/device/camera/detective,/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1},/obj/machinery/light{dir = 4},/turf/simulated/floor/wood,/area/security/detectives_office)
"aFI" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralcorner"},/area/security/main)
"aFJ" = (/turf/simulated/floor/plasteel,/area/security/main)
"aFK" = (/obj/machinery/requests_console{department = "Security"; departmentType = 5; name = "Security Requests Console"; pixel_y = 30},/turf/simulated/floor/plasteel,/area/security/main)
@@ -1720,7 +1720,7 @@
"aHd" = (/obj/machinery/shower{dir = 4},/obj/machinery/door/window/westright{dir = 4},/obj/item/weapon/soap/deluxe,/turf/simulated/floor/plasteel{icon_state = "white"},/area/crew_quarters/captain)
"aHe" = (/obj/structure/toilet{pixel_y = 5},/turf/simulated/floor/plasteel{icon_state = "white"; temperature = 273.15},/area/crew_quarters/captain)
"aHf" = (/obj/structure/sink{dir = 4; pixel_x = 11},/obj/structure/mirror{pixel_x = 24},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel{icon_state = "white"; temperature = 273.15},/area/crew_quarters/captain)
-"aHg" = (/obj/structure/grille,/obj/structure/cable/blue{icon_state = "0-2"},/obj/machinery/door/poddoor/shutters/preopen{id = "capffice"; name = "captain's shutters"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/captain)
+"aHg" = (/obj/structure/grille,/obj/structure/cable/blue{icon_state = "0-2"},/obj/machinery/door/poddoor/shutters/preopen{id = "capffice"; name = "captain's shutters"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/crew_quarters/captain)
"aHh" = (/obj/structure/table/wood,/obj/item/device/flashlight/lamp/green,/turf/simulated/floor/carpet,/area/security/detectives_office)
"aHi" = (/obj/structure/table/wood,/obj/item/weapon/book/manual/wiki/security_space_law,/obj/item/weapon/restraints/handcuffs,/obj/machinery/newscaster{hitstaken = 1; pixel_y = -32},/turf/simulated/floor/carpet,/area/security/detectives_office)
"aHj" = (/obj/structure/table/wood,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/carpet,/area/security/detectives_office)
@@ -1900,7 +1900,7 @@
"aKB" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet,/area/crew_quarters/captain)
"aKC" = (/obj/machinery/light{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/captain)
"aKD" = (/obj/machinery/door/airlock{name = "Unisex Restroom"; req_access_txt = "0"},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/prison)
-"aKE" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/button{id = "lawprivacy"; pixel_y = 25},/turf/simulated/floor/wood,/area/lawoffice)
+"aKE" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/button/door{id = "law"; pixel_y = 25},/turf/simulated/floor/wood,/area/lawoffice)
"aKF" = (/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/prison)
"aKG" = (/obj/structure/bed,/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/prison)
"aKH" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "warnwhite"},/area/security/prison)
@@ -1919,12 +1919,12 @@
"aKU" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 2; name = "Law Office APC"; pixel_y = -24},/turf/simulated/floor/wood,/area/lawoffice)
"aKV" = (/obj/structure/filingcabinet/chestdrawer,/obj/machinery/status_display{pixel_y = -32},/obj/machinery/camera{c_tag = "Law Office"; dir = 1},/turf/simulated/floor/wood,/area/lawoffice)
"aKW" = (/obj/structure/table/wood,/obj/item/weapon/folder/red,/obj/machinery/light,/obj/machinery/newscaster{pixel_y = -32},/obj/item/weapon/book/manual/wiki/security_space_law,/turf/simulated/floor/wood,/area/lawoffice)
-"aKX" = (/obj/effect/spawner/structure/window/reinforced,/obj/machinery/door/poddoor/shutters/preopen{id = "lawprivacy"; name = "Privacy Shutter"},/turf/simulated/floor/plating,/area/lawoffice)
+"aKX" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters/preopen{id = "law"; layer = 2.9},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/lawoffice)
"aKY" = (/obj/structure/transit_tube{icon_state = "E-W-Pass"},/turf/simulated/floor/plating/airless,/area/space/nearstation)
"aKZ" = (/obj/structure/transit_tube,/turf/simulated/floor/plating/airless,/area/space/nearstation)
"aLa" = (/turf/simulated/wall/r_wall,/area/engine/engineering)
"aLb" = (/turf/simulated/wall/r_wall,/area/engine/chiefs_office)
-"aLc" = (/obj/structure/grille,/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/chiefs_office)
+"aLc" = (/obj/structure/grille,/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/chiefs_office)
"aLd" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_x = -32},/obj/effect/spawner/structure/window/reinforced,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/engine/gravity_generator)
"aLe" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/plasteel,/area/hallway/secondary/construction{name = "Fore Central Hallway"})
"aLf" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/glass_engineering{name = "Gravity Generator"; req_access_txt = "11"; req_one_access_txt = "0"},/turf/simulated/floor/plasteel{icon_state = "warndark"; dir = 1},/area/engine/gravity_generator)
@@ -1966,7 +1966,7 @@
"aLP" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 1},/obj/machinery/alarm{dir = 4; pixel_x = -22},/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/prison)
"aLQ" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/prison)
"aLR" = (/obj/machinery/light_switch{dir = 4; pixel_x = 22},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/prison)
-"aLS" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/shutters{id = "interrogation"; name = "interrogation shutters"},/turf/simulated/floor/plating,/area/security/main)
+"aLS" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/shutters{id = "interrogation"; name = "interrogation shutters"},/turf/simulated/floor/plating,/area/security/main)
"aLT" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/light{dir = 8},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 8},/area/security/main)
"aLU" = (/obj/structure/table/wood,/obj/item/device/flashlight/lamp/green{on = 0; pixel_x = -3; pixel_y = 8},/obj/item/weapon/paper_bin{pixel_y = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/security/main)
"aLV" = (/obj/machinery/computer/security,/turf/simulated/floor/plasteel,/area/security/main)
@@ -2000,7 +2000,7 @@
"aMx" = (/obj/structure/cable/green{icon_state = "4-8"},/obj/structure/cable/green{icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"aMy" = (/obj/structure/cable/green{icon_state = "4-8"},/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"aMz" = (/obj/structure/cable/green{icon_state = "4-8"},/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
-"aMA" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/cable/green{icon_state = "2-8"},/obj/structure/cable/green{icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
+"aMA" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable/green{icon_state = "2-8"},/obj/structure/cable/green{icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"aMB" = (/obj/structure/cable/green{icon_state = "1-8"},/obj/structure/cable/green{icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"aMC" = (/obj/machinery/door/airlock/maintenance{name = "Hydroponics Maintenance"; req_access_txt = "35"; req_one_access_txt = "0"},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"aMD" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=2"; freq = 1400; location = "Kitchen"},/obj/structure/plasticflaps{opacity = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "loadingarea"},/area/crew_quarters/kitchen)
@@ -2043,7 +2043,7 @@
"aNo" = (/turf/simulated/floor/plasteel,/area/security/brig)
"aNp" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1},/obj/machinery/camera{c_tag = "Brig Cell One"; network = list("SS13","Prison")},/turf/simulated/floor/plasteel,/area/security/brig)
"aNq" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/brig)
-"aNr" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "Security Blast Door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/brig)
+"aNr" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "Security Blast Door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/brig)
"aNs" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/hallway/primary/port{name = "Port Hallway"})
"aNt" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/hallway/primary/port{name = "Port Hallway"})
"aNu" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/port{name = "Port Hallway"})
@@ -2058,7 +2058,7 @@
"aND" = (/obj/structure/table,/obj/item/weapon/paper_bin,/obj/item/weapon/stamp/ce,/turf/simulated/floor/plasteel,/area/engine/chiefs_office)
"aNE" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/engine/chiefs_office)
"aNF" = (/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellow"},/area/engine/chiefs_office)
-"aNG" = (/obj/structure/grille,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/chiefs_office)
+"aNG" = (/obj/structure/grille,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/chiefs_office)
"aNH" = (/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 1},/area/engine/gravity_generator)
"aNI" = (/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/engine/gravity_generator)
"aNJ" = (/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 4},/area/engine/gravity_generator)
@@ -2118,11 +2118,11 @@
"aOL" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 1},/obj/machinery/firealarm{pixel_y = 24},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/brig)
"aOM" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plasteel,/area/security/brig)
"aON" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/turf/simulated/floor/plasteel,/area/security/brig)
-"aOO" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "Security Blast Door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/brig)
+"aOO" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "Security Blast Door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/brig)
"aOP" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/wall/r_wall,/area/engine/gravity_generator)
"aOQ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/obj/machinery/flasher{id = "Cell 1"; pixel_y = -25},/turf/simulated/floor/plasteel,/area/security/brig)
"aOR" = (/obj/structure/bed,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/item/weapon/bedsheet/brown,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/brig)
-"aOS" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "Security Blast Door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/brig)
+"aOS" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "Security Blast Door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/brig)
"aOT" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/hallway/primary/port{name = "Port Hallway"})
"aOU" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/hallway/primary/port{name = "Port Hallway"})
"aOV" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "green"; dir = 4},/area/hallway/primary/port{name = "Port Hallway"})
@@ -2135,7 +2135,7 @@
"aPc" = (/obj/structure/table,/obj/item/weapon/folder/yellow,/obj/item/weapon/pen,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/mob/living/simple_animal/parrot/Poly,/turf/simulated/floor/plasteel,/area/engine/chiefs_office)
"aPd" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/engine/chiefs_office)
"aPe" = (/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellow"},/area/engine/chiefs_office)
-"aPf" = (/obj/structure/grille,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/chiefs_office)
+"aPf" = (/obj/structure/grille,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/chiefs_office)
"aPg" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/engine/gravity_generator)
"aPh" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/engine/gravity_generator)
"aPi" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/engine/gravity_generator)
@@ -2207,7 +2207,7 @@
"aQw" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/hydroponics)
"aQx" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plasteel,/area/hydroponics)
"aQy" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "green"; dir = 4},/area/hydroponics)
-"aQz" = (/obj/structure/table/reinforced,/obj/machinery/door/window/westright{name = "Hydroponics Desk"; req_one_access_txt = "30:35"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "greenfull"},/area/hydroponics)
+"aQz" = (/obj/structure/table/reinforced,/obj/machinery/door/window/westright{name = "Hydroponics Desk"; req_access_txt = "35"; req_one_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "greenfull"},/area/hydroponics)
"aQA" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 8; icon_state = "green"},/area/hallway/primary/starboard{name = "Starboard Hallway"})
"aQB" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/obj/structure/cable/green{icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "neutralcorner"},/area/hallway/primary/starboard{name = "Starboard Hallway"})
"aQC" = (/obj/machinery/door/airlock/maintenance{name = "Maintenance Access"; req_access_txt = "19"; req_one_access_txt = "0"},/turf/simulated/floor/plating,/area/maintenance/maintcentral)
@@ -2219,7 +2219,7 @@
"aQI" = (/turf/simulated/floor/plating,/area/bridge)
"aQJ" = (/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/turf/simulated/wall/shuttle{icon_state = "swall_f5"},/area/shuttle/pod_3)
"aQK" = (/turf/space,/turf/simulated/wall/shuttle{icon_state = "swall_f9"},/area/shuttle/pod_3)
-"aQL" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/security/prison)
+"aQL" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/security/prison)
"aQM" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel,/area/security/prison)
"aQN" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel,/area/security/prison)
"aQO" = (/obj/structure/bed/stool,/turf/simulated/floor/plasteel,/area/security/prison)
@@ -2244,7 +2244,7 @@
"aRh" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/security/brig)
"aRi" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/wood,/area/lawoffice)
"aRj" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/brig)
-"aRk" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "Security Blast Door"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/brig)
+"aRk" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "Security Blast Door"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/brig)
"aRl" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/hallway/primary/port{name = "Port Hallway"})
"aRm" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/port{name = "Port Hallway"})
"aRn" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel,/area/hallway/primary/port{name = "Port Hallway"})
@@ -2263,10 +2263,10 @@
"aRA" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "yellow"},/area/engine/engineering)
"aRB" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "yellow"},/area/engine/engineering)
"aRC" = (/obj/structure/dispenser,/turf/simulated/floor/plasteel{dir = 1; icon_state = "yellow"},/area/engine/engineering)
-"aRD" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/chiefs_office)
-"aRE" = (/obj/structure/grille,/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/door/firedoor,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/chiefs_office)
+"aRD" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/chiefs_office)
+"aRE" = (/obj/structure/grille,/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/door/firedoor,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/chiefs_office)
"aRF" = (/obj/machinery/door/airlock/glass_command{desc = "The office of the Head directly responsible for heat, power, and air pressure concerns aboard SS13."; name = "Chief Engineer's Office"; req_access_txt = "56"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellowfull"},/area/engine/chiefs_office)
-"aRG" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/chiefs_office)
+"aRG" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/chiefs_office)
"aRH" = (/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/engine/gravity_generator)
"aRI" = (/obj/machinery/computer/card/minor/hos,/turf/simulated/floor/wood,/area/security/hos)
"aRJ" = (/obj/machinery/door/window/eastleft{name = "Bar Deliveries"; req_access_txt = "25"},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/crew_quarters/bar)
@@ -2371,12 +2371,12 @@
"aTE" = (/obj/machinery/button/flasher{pixel_x = -26; id = "PCell 2"},/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,/obj/machinery/camera{dir = 4; network = list("SS13","Prison"); c_tag = "Prison Hallway Fore"},/turf/simulated/floor/plasteel,/area/security/prison)
"aTF" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel,/area/security/prison)
"aTG" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellow"},/area/security/prison)
-"aTH" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/prison)
+"aTH" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/prison)
"aTI" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 1},/turf/simulated/floor/plasteel{dir = 8; icon_state = "yellow"},/area/security/prison)
"aTJ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/door/poddoor/preopen{id = "Prison Gate"; name = "Prison Blast Door"},/turf/simulated/floor/plasteel,/area/security/prison)
"aTK" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/security/prison)
"aTL" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/prison)
-"aTM" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/prison)
+"aTM" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/prison)
"aTN" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/brig)
"aTO" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/brig)
"aTP" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/brig)
@@ -2468,7 +2468,7 @@
"aVx" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/obj/structure/disposalpipe/junction{dir = 1; icon_state = "pipe-j2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralcorner"},/area/hallway/primary/port{name = "Port Hallway"})
"aVy" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1},/obj/machinery/camera{c_tag = "Brig Cell Three"; network = list("SS13","Prison")},/turf/simulated/floor/plasteel,/area/security/brig)
"aVz" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/brig)
-"aVA" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/grille,/obj/structure/cable,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "Security Blast Door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/brig)
+"aVA" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/grille,/obj/structure/cable,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "Security Blast Door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/brig)
"aVB" = (/obj/structure/cable{tag = "icon-4-8"; icon_state = "4-8"},/turf/simulated/floor/plating/airless{icon_state = "warnplate"; dir = 1},/area/engine/engineering)
"aVC" = (/obj/machinery/field/generator{anchored = 1; state = 2},/turf/simulated/floor/plating/airless,/area/engine/engineering)
"aVD" = (/obj/structure/lattice,/turf/space,/area/engine/engineering)
@@ -2533,12 +2533,12 @@
"aWK" = (/obj/structure/bed,/obj/item/weapon/bedsheet/brown,/turf/simulated/floor/plasteel,/area/security/prison)
"aWL" = (/obj/machinery/button/door{name = "Cell 2 Lockdown"; pixel_x = -26; req_access_txt = "2"; id = "permacell2"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/turf/simulated/floor/plasteel,/area/security/prison)
"aWM" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellow"},/area/security/prison)
-"aWN" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/cable,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/prison)
+"aWN" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/cable,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/prison)
"aWO" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "yellow"},/area/security/prison)
"aWP" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/door/poddoor/preopen{id = "Prison Gate"; name = "Prison Blast Door"},/turf/simulated/floor/plasteel,/area/security/prison)
"aWQ" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 1},/obj/machinery/button/door{id = "Prison Gate"; name = "Prison Wing Lockdown"; pixel_x = -28; pixel_y = -24; req_access_txt = "2"},/turf/simulated/floor/plasteel,/area/security/prison)
"aWR" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/prison)
-"aWS" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/prison)
+"aWS" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/prison)
"aWT" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/brig)
"aWU" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/security/brig)
"aWV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plasteel,/area/security/brig)
@@ -2616,7 +2616,7 @@
"aYp" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating/airless{icon_state = "warnplate"; dir = 8},/area/engine/engineering)
"aYq" = (/obj/structure/lattice,/obj/item/clothing/head/hardhat,/turf/space,/area/engine/engineering)
"aYr" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating/airless{icon_state = "warnplate"; dir = 8},/area/engine/engineering)
-"aYs" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engine/engineering)
+"aYs" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engine/engineering)
"aYt" = (/obj/item/weapon/wrench,/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/engine/engineering)
"aYu" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/engine/engineering)
"aYv" = (/obj/machinery/light{dir = 1},/obj/machinery/button/door{id = "singularity"; name = "Shutters Control"; pixel_y = 25; req_access_txt = "11"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/engine/engineering)
@@ -2648,7 +2648,7 @@
"aYV" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/condiment/enzyme{layer = 5},/obj/item/stack/packageWrap,/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/kitchen)
"aYW" = (/obj/structure/table,/obj/item/weapon/storage/fancy/egg_box,/obj/item/weapon/kitchen/knife,/obj/machinery/light_switch{dir = 4; pixel_x = 22},/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/kitchen)
"aYX" = (/obj/machinery/door/poddoor/shutters/preopen{id = "hopqueue"; name = "HoP Queue Shutters"},/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 8},/area/hallway/primary/starboard{name = "Starboard Hallway"})
-"aYY" = (/obj/structure/grille,/obj/structure/cable/blue{icon_state = "0-4"; d1 = 1; d2 = 2},/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/shutters/preopen{id = "hop"; layer = 2.9; name = "Privacy Shutters"},/turf/simulated/floor/plating,/area/crew_quarters/heads)
+"aYY" = (/obj/structure/grille,/obj/structure/cable/blue{icon_state = "0-4"; d1 = 1; d2 = 2},/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/shutters/preopen{id = "hop"; layer = 2.9; name = "Privacy Shutters"},/turf/simulated/floor/plating,/area/crew_quarters/heads)
"aYZ" = (/obj/machinery/computer/card,/obj/structure/cable/blue{icon_state = "2-8"; d1 = 1; d2 = 2},/turf/simulated/floor/wood,/area/crew_quarters/heads)
"aZa" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/wood,/area/crew_quarters/heads)
"aZb" = (/obj/machinery/keycard_auth{pixel_y = 24},/obj/structure/bed/dogbed{anchored = 1; desc = "Ian's bed! Looks comfy."; name = "Ian's bed"},/mob/living/simple_animal/pet/dog/corgi/Ian,/turf/simulated/floor/wood,/area/crew_quarters/heads)
@@ -2722,7 +2722,7 @@
"bar" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/kitchen)
"bas" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/airlock/glass{desc = "The workplace of the diligent station chef, with enough ingredients to work up a masterpiece."; name = "Kitchen"; req_access_txt = "28"},/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/kitchen)
"bat" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/obj/structure/disposalpipe/sortjunction{dir = 2; sortType = 19},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralcorner"},/area/hallway/primary/starboard{name = "Starboard Hallway"})
-"bau" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters/preopen{id = "hopqueue"; name = "HoP Queue Shutters"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/starboard{name = "Starboard Hallway"})
+"bau" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters/preopen{id = "hopqueue"; name = "HoP Queue Shutters"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/starboard{name = "Starboard Hallway"})
"bav" = (/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/hallway/primary/starboard{name = "Starboard Hallway"})
"baw" = (/obj/structure/table/reinforced,/obj/machinery/door/window/northleft{dir = 8; name = "Reception Window"; req_access_txt = "0"},/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "Head of Personnel's Desk"; req_access_txt = "57"},/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters/preopen{id = "hop"; layer = 2.9; name = "Privacy Shutters"},/turf/simulated/floor/wood,/area/crew_quarters/heads)
"bax" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1},/turf/simulated/floor/plasteel,/area/hallway/primary/port{name = "Port Hallway"})
@@ -2806,7 +2806,7 @@
"bbX" = (/obj/structure/table,/obj/machinery/reagentgrinder,/obj/machinery/requests_console{department = "Kitchen"; departmentType = 2; name = "Kitchen Requests Console"; pixel_x = 30},/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/kitchen)
"bbY" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/obj/machinery/light{dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralcorner"},/area/hallway/primary/starboard{name = "Starboard Hallway"})
"bbZ" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/obj/structure/cable/green{icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "blue"},/area/hallway/primary/starboard{name = "Starboard Hallway"})
-"bca" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters/preopen{id = "hopqueue"; name = "HoP Queue Shutters"},/obj/machinery/flasher{id = "hopline"; layer = 3.5; name = "civility enforcement flasher"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/starboard{name = "Starboard Hallway"})
+"bca" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters/preopen{id = "hopqueue"; name = "HoP Queue Shutters"},/obj/machinery/flasher{id = "hopline"; layer = 3.5; name = "civility enforcement flasher"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/starboard{name = "Starboard Hallway"})
"bcb" = (/turf/simulated/floor/plasteel{icon_state = "bot"},/area/hallway/primary/starboard{name = "Starboard Hallway"})
"bcc" = (/obj/structure/cable/blue{icon_state = "1-8"; d1 = 1; d2 = 2},/obj/machinery/pdapainter,/turf/simulated/floor/wood,/area/crew_quarters/heads)
"bcd" = (/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/simulated/floor/wood,/area/crew_quarters/heads)
@@ -2832,7 +2832,7 @@
"bcx" = (/obj/item/weapon/grenade/barrier,/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/security/armory)
"bcy" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/armory)
"bcz" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/armory)
-"bcA" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/armory)
+"bcA" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/armory)
"bcB" = (/obj/structure/filingcabinet/chestdrawer,/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 8},/area/security/warden)
"bcC" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/security/warden)
"bcD" = (/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel,/area/security/warden)
@@ -2906,7 +2906,7 @@
"bdT" = (/obj/structure/rack,/obj/item/weapon/storage/box/teargas,/obj/item/weapon/storage/box/flashbangs{pixel_x = -2; pixel_y = -2},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/security/armory)
"bdU" = (/obj/structure/rack,/obj/item/weapon/storage/box/chemimp{pixel_x = 4; pixel_y = 3},/obj/item/weapon/storage/box/trackimp,/obj/item/weapon/storage/lockbox/loyalty,/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/security/armory)
"bdV" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/armory)
-"bdW" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/security/armory)
+"bdW" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/security/armory)
"bdX" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 8},/area/security/warden)
"bdY" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/security/warden)
"bdZ" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/turf/simulated/floor/plasteel,/area/security/warden)
@@ -2915,7 +2915,7 @@
"bec" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/handcuffs,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/warden)
"bed" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/security/brig)
"bee" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4},/obj/structure/disposalpipe/segment,/obj/machinery/light_switch{dir = 4; pixel_x = 22},/turf/simulated/floor/plasteel,/area/security/brig)
-"bef" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/brig)
+"bef" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/brig)
"beg" = (/obj/structure/table/reinforced,/obj/machinery/door/window/brigdoor{layer = 2.9; name = "Brig Desk"; req_access_txt = "1"},/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/turf/simulated/floor/plasteel,/area/security/brig)
"beh" = (/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = -7},/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/engine/engineering)
"bei" = (/turf/simulated/floor/plasteel{icon_state = "warning"},/area/engine/engineering)
@@ -2928,14 +2928,14 @@
"bep" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/engine/engineering)
"beq" = (/obj/machinery/status_display{pixel_x = 32},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellow"},/area/engine/engineering)
"ber" = (/obj/machinery/door/airlock/external{name = "Engineering External Access"; req_access = null; req_access_txt = "10;13"},/turf/simulated/floor/plating,/area/engine/engineering)
-"bes" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/engineering)
+"bes" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/engineering)
"bet" = (/obj/machinery/door/airlock/glass_security{name = "Security Post"; req_access_txt = "63"},/turf/simulated/floor/plasteel{icon_state = "redfull"},/area/engine/engineering)
-"beu" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/engineering)
+"beu" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/engineering)
"bev" = (/obj/machinery/light{dir = 8},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 8; icon_state = "yellow"},/area/hallway/primary/starboard{name = "Starboard Hallway"})
"bew" = (/obj/structure/bed/stool,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar)
"bex" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/closet/secure_closet/brig{id = "Cell 1"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel,/area/security/brig)
-"bey" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters/preopen{id = "kitchen"; name = "kitchen shutters"},/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/kitchen)
-"bez" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters/preopen{id = "kitchen"; name = "kitchen shutters"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/kitchen)
+"bey" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters/preopen{id = "kitchen"; name = "kitchen shutters"},/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/crew_quarters/kitchen)
+"bez" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters/preopen{id = "kitchen"; name = "kitchen shutters"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/crew_quarters/kitchen)
"beA" = (/obj/structure/extinguisher_cabinet{pixel_x = 27},/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/kitchen)
"beB" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/obj/structure/disposalpipe/sortjunction{dir = 2; icon_state = "pipe-j2s"; sortType = 15},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralcorner"},/area/hallway/primary/starboard{name = "Starboard Hallway"})
"beC" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "blue"},/area/hallway/primary/starboard{name = "Starboard Hallway"})
@@ -2956,7 +2956,7 @@
"beR" = (/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/power/emitter{anchored = 1; state = 2},/turf/simulated/floor/plating/airless{icon_state = "warnplate"},/area/engine/engineering)
"beS" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{id_tag = "innerbrig"; name = "Brig"; req_access_txt = "63"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/brig)
"beT" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{id_tag = "innerbrig"; name = "Brig"; req_access_txt = "63"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/brig)
-"beU" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 32},/turf/simulated/floor/plating,/area/security/prison)
+"beU" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 32},/turf/simulated/floor/plating,/area/security/prison)
"beV" = (/obj/structure/rack,/obj/item/weapon/pickaxe{attack_verb = list("ineffectively hit"); desc = "A pickaxe designed to be only effective at digging rock and ore, very ineffective as a weapon."; force = 1; name = "safety pickaxe"; pixel_x = 5; throwforce = 1},/obj/item/weapon/pickaxe{attack_verb = list("ineffectively hit"); desc = "A pickaxe designed to be only effective at digging rock and ore, very ineffective as a weapon."; force = 1; name = "safety pickaxe"; pixel_x = 5; throwforce = 1},/obj/item/weapon/pickaxe{attack_verb = list("ineffectively hit"); desc = "A pickaxe designed to be only effective at digging rock and ore, very ineffective as a weapon."; force = 1; name = "safety pickaxe"; pixel_x = 5; throwforce = 1},/turf/simulated/floor/plasteel,/area/security/prison)
"beW" = (/obj/structure/rack,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/turf/simulated/floor/plasteel,/area/security/prison)
"beX" = (/obj/structure/rack,/obj/item/weapon/shovel{attack_verb = list("ineffectively hit"); desc = "A large tool for digging and moving dirt. Was modified with extra safety, making it ineffective as a weapon."; force = 1; name = "safety shovel"; pixel_x = -5; throwforce = 1},/obj/item/weapon/shovel{attack_verb = list("ineffectively hit"); desc = "A large tool for digging and moving dirt. Was modified with extra safety, making it ineffective as a weapon."; force = 1; name = "safety shovel"; pixel_x = -5; throwforce = 1},/turf/simulated/floor/plasteel,/area/security/prison)
@@ -3022,7 +3022,7 @@
"bgf" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; on = 1},/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/plasteel{dir = 6; icon_state = "yellow"},/area/bridge)
"bgg" = (/obj/machinery/computer/station_alert,/turf/simulated/floor/plasteel{dir = 8; icon_state = "yellow"},/area/bridge)
"bgh" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = 23},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel{dir = 9; icon_state = "brown"},/area/security/prison)
-"bgi" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 32},/turf/simulated/floor/plating,/area/security/prison)
+"bgi" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 32},/turf/simulated/floor/plating,/area/security/prison)
"bgj" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/floor/plasteel{dir = 5; icon_state = "brown"},/area/security/prison)
"bgk" = (/obj/machinery/door/airlock/external{name = "Prison Mining External Airlock"; req_access_txt = 0},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "brown"},/area/security/prison)
"bgl" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel,/area/security/prison)
@@ -3036,7 +3036,7 @@
"bgt" = (/obj/structure/rack,/obj/item/weapon/gun/energy/laser{pixel_x = -3; pixel_y = 3},/obj/item/weapon/gun/energy/laser{pixel_x = 3; pixel_y = -3},/obj/item/weapon/gun/energy/laser,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/security/armory)
"bgu" = (/obj/structure/rack,/obj/item/weapon/gun/energy/gun{pixel_x = -3; pixel_y = 3},/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/security/armory)
"bgv" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/armory)
-"bgw" = (/obj/structure/grille,/obj/structure/cable,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/armory)
+"bgw" = (/obj/structure/grille,/obj/structure/cable,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/armory)
"bgx" = (/obj/structure/table,/obj/item/weapon/paper_bin,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 8},/area/security/warden)
"bgy" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/bed/chair,/turf/simulated/floor/plasteel,/area/security/warden)
"bgz" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel,/area/security/warden)
@@ -3045,11 +3045,11 @@
"bgC" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/security/warden)
"bgD" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/alarm{dir = 4; pixel_x = -22},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/brig)
"bgE" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/security/brig)
-"bgF" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/security/brig)
+"bgF" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/security/brig)
"bgG" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/computer/security,/turf/simulated/floor/plasteel,/area/security/brig)
"bgH" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/computer/secure_data,/obj/machinery/button/door{id = "Secure Gate"; name = "Brig Lockdown"; pixel_x = -6; pixel_y = -26; req_access_txt = "2"},/obj/machinery/button/flasher{id = "brigentry"; pixel_x = 6; pixel_y = -26},/turf/simulated/floor/plasteel,/area/security/brig)
"bgI" = (/obj/machinery/button/door{desc = "A remote control switch for the medbay foyer."; id = "innerbrig"; name = "Brig Interior Doors Control"; normaldoorcontrol = 1; pixel_x = -6; pixel_y = -26; req_access_txt = "63"},/obj/machinery/button/door{desc = "A remote control switch for the medbay foyer."; id = "outerbrig"; name = "Brig Exterior Doors Control"; normaldoorcontrol = 1; pixel_x = 6; pixel_y = -26; req_access_txt = "63"},/turf/simulated/floor/plasteel,/area/security/brig)
-"bgJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "Security Blast Door"},/turf/simulated/floor/plating,/area/security/brig)
+"bgJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "Security Blast Door"},/turf/simulated/floor/plating,/area/security/brig)
"bgK" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/camera{c_tag = "Port Hallway Central"; dir = 8},/turf/simulated/floor/plasteel{icon_state = "neutralcorner"},/area/hallway/primary/port{name = "Port Hallway"})
"bgL" = (/obj/structure/closet,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/aft)
"bgM" = (/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating/airless{icon_state = "warnplate"; dir = 8},/area/engine/engineering)
@@ -3094,7 +3094,7 @@
"bhz" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "brown"},/area/security/prison)
"bhA" = (/obj/machinery/door/airlock/external{name = "Prison Mining External Airlock"; req_access_txt = 0},/turf/simulated/floor/plasteel{dir = 4; icon_state = "brown"},/area/security/prison)
"bhB" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "brown"},/area/security/prison)
-"bhC" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/obj/structure/cable,/obj/structure/sign/securearea{pixel_y = -32},/turf/simulated/floor/plating,/area/security/prison)
+"bhC" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/obj/structure/cable,/obj/structure/sign/securearea{pixel_y = -32},/turf/simulated/floor/plating,/area/security/prison)
"bhD" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "browncorner"},/area/security/prison)
"bhE" = (/obj/machinery/camera{c_tag = "Prison E.V.A."; dir = 8; network = list("SS13","Prison")},/obj/machinery/light{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "browncorner"},/area/security/prison)
"bhF" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plasteel,/area/security/prison)
@@ -3163,7 +3163,7 @@
"biQ" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_y = -32},/obj/machinery/light/small,/turf/simulated/floor/plating/airless{icon_state = "warnplate"; dir = 8},/area/engine/engineering)
"biR" = (/turf/simulated/floor/plating/airless{icon_state = "warnplatecorner"; dir = 8},/area/engine/engineering)
"biS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating/airless{icon_state = "warnplate"; dir = 1},/area/engine/engineering)
-"biT" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/sign/securearea{pixel_y = -32},/turf/simulated/floor/plating,/area/security/prison)
+"biT" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/sign/securearea{pixel_y = -32},/turf/simulated/floor/plating,/area/security/prison)
"biU" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating/airless{icon_state = "warnplate"; dir = 1},/area/engine/engineering)
"biV" = (/obj/item/device/multitool,/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating/airless{icon_state = "warnplate"; dir = 1},/area/engine/engineering)
"biW" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating/airless{icon_state = "warnplatecorner"; dir = 4},/area/engine/engineering)
@@ -3204,8 +3204,8 @@
"bjF" = (/obj/structure/table,/obj/item/weapon/crowbar/red,/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/plasteel,/area/security/brig)
"bjG" = (/obj/structure/filingcabinet/chestdrawer,/turf/simulated/floor/plasteel,/area/security/brig)
"bjH" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/extinguisher_cabinet{pixel_x = -27},/turf/simulated/floor/plasteel,/area/security/brig)
-"bjI" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "Security Blast Door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/brig)
-"bjJ" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "Security Blast Door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/brig)
+"bjI" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "Security Blast Door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/brig)
+"bjJ" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "Security Blast Door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/brig)
"bjK" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/turf/simulated/floor/plasteel,/area/hallway/primary/port{name = "Port Hallway"})
"bjL" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel,/area/hallway/primary/port{name = "Port Hallway"})
"bjM" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/light,/turf/simulated/floor/plating/airless,/area/engine/engineering)
@@ -3235,7 +3235,7 @@
"bkk" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/obj/machinery/flasher{id = "Cell 2"; pixel_y = -28},/turf/simulated/floor/plasteel,/area/security/brig)
"bkl" = (/obj/structure/table,/obj/item/weapon/tank/internals/emergency_oxygen{pixel_x = -1; pixel_y = -2},/obj/item/weapon/tank/internals/emergency_oxygen{pixel_x = 1; pixel_y = 2},/obj/item/weapon/tank/internals/emergency_oxygen{pixel_x = 1; pixel_y = 2},/turf/simulated/floor/plasteel{dir = 6; icon_state = "brown"},/area/security/prison)
"bkm" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel,/area/security/prison)
-"bkn" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/plasteel,/area/security/prison)
+"bkn" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/plasteel,/area/security/prison)
"bko" = (/obj/structure/closet/secure_closet{name = "contraband locker"; req_access_txt = "3"},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/security/armory)
"bkp" = (/obj/structure/rack,/obj/item/weapon/storage/box/rubbershot,/obj/item/weapon/storage/box/rubbershot,/obj/item/weapon/storage/box/rubbershot,/obj/item/weapon/storage/box/rubbershot,/obj/item/weapon/storage/box/rubbershot,/obj/item/weapon/storage/box/rubbershot,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/security/armory)
"bkq" = (/turf/simulated/floor/wood,/area/security/hos)
@@ -3246,10 +3246,10 @@
"bkv" = (/obj/machinery/power/apc{dir = 1; name = "Head of Security's Office APC"; pixel_x = 0; pixel_y = 25},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/mob/living/simple_animal/hostile/bear{desc = "Enemies of the law are unbearable to him!"; faction = list("neutral"); name = "Security Bear"},/turf/simulated/floor/wood,/area/security/hos)
"bkw" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/security/brig)
"bkx" = (/obj/machinery/door_timer{dir = 4; id = "Cell 5"; name = "Cell Five Timer"; pixel_x = 0},/turf/simulated/wall/r_wall,/area/security/brig)
-"bky" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/engineering)
-"bkz" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/engineering)
+"bky" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/engineering)
+"bkz" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/engineering)
"bkA" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/airlock/glass_engineering{desc = "A place for the Engineering staff to slack off (hopefully) after completing the Engine."; name = "Engineering Break Room"; req_access_txt = "11"; req_one_access_txt = "0"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellowfull"},/area/engine/engineering)
-"bkB" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/engineering)
+"bkB" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/engineering)
"bkC" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/turf/simulated/wall/shuttle{icon_state = "swall_f6"},/area/shuttle/pod_4)
"bkD" = (/turf/simulated/wall/shuttle{icon_state = "swall12"},/area/shuttle/pod_4)
"bkE" = (/turf/space,/turf/simulated/wall/shuttle{icon_state = "swall_f10"},/area/shuttle/pod_4)
@@ -3278,7 +3278,7 @@
"blb" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet,/area/security/hos)
"blc" = (/turf/simulated/floor/carpet,/area/security/hos)
"bld" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/wood,/area/security/hos)
-"ble" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/security/hos)
+"ble" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/security/hos)
"blf" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 8},/area/security/brig)
"blg" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel,/area/security/brig)
"blh" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1},/turf/simulated/floor/plasteel,/area/security/brig)
@@ -3324,7 +3324,7 @@
"blV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{icon_state = "neutral"},/area/security/brig)
"blW" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralcorner"},/area/security/brig)
"blX" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/obj/machinery/flasher{id = "Cell 5"; pixel_y = -28},/turf/simulated/floor/plasteel,/area/security/brig)
-"blY" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "Security Blast Door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/brig)
+"blY" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "Security Blast Door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/brig)
"blZ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel,/area/hallway/primary/port{name = "Port Hallway"})
"bma" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "neutralcorner"},/area/hallway/primary/port{name = "Port Hallway"})
"bmb" = (/obj/machinery/door/airlock/maintenance{name = "Port Interior Maintenance Access"; req_access_txt = "12"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/aft)
@@ -3363,7 +3363,7 @@
"bmI" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/table/wood,/obj/item/device/flashlight/lamp/green{on = 0; pixel_x = -3; pixel_y = 8},/obj/item/weapon/paper_bin,/turf/simulated/floor/carpet,/area/security/hos)
"bmJ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/carpet,/area/security/hos)
"bmK" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/wood,/area/security/hos)
-"bmL" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/grille,/obj/structure/cable,/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/hos)
+"bmL" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/grille,/obj/structure/cable,/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/hos)
"bmM" = (/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 8},/area/security/brig)
"bmN" = (/obj/machinery/door_timer{dir = 4; id = "Cell 3"; name = "Cell Three Timer"; pixel_x = 0},/turf/simulated/wall/r_wall,/area/security/brig)
"bmO" = (/obj/structure/extinguisher_cabinet{pixel_y = -30},/turf/simulated/floor/plasteel,/area/security/brig)
@@ -3424,7 +3424,7 @@
"bnR" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "yellow"},/area/engine/engineering)
"bnS" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/bed/stool,/turf/simulated/floor/plasteel,/area/engine/engineering)
"bnT" = (/obj/machinery/status_display{layer = 4; pixel_x = 32},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellow"},/area/engine/engineering)
-"bnU" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/starboard{name = "Starboard Hallway"})
+"bnU" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/starboard{name = "Starboard Hallway"})
"bnV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=Med"; location = "StAF1"},/turf/simulated/floor/plasteel,/area/hallway/primary/starboard{name = "Starboard Hallway"})
"bnW" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/turf/simulated/floor/plasteel,/area/hallway/primary/starboard{name = "Starboard Hallway"})
"bnX" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/starboard{name = "Starboard Hallway"})
@@ -3508,7 +3508,7 @@
"bpx" = (/obj/structure/lattice,/obj/structure/lattice,/obj/structure/grille,/turf/space,/area/space/nearstation)
"bpy" = (/obj/structure/transit_tube{icon_state = "N-S"},/obj/structure/transit_tube{icon_state = "D-SW"},/turf/space,/area/space/nearstation)
"bpz" = (/obj/structure/transit_tube{icon_state = "NW-SE"},/turf/space,/area/space/nearstation)
-"bpA" = (/obj/structure/grille,/obj/structure/cable/yellow,/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/engineering)
+"bpA" = (/obj/structure/grille,/obj/structure/cable/yellow,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/engineering)
"bpB" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/button/door{id = "bridgeshut"; name = "Bridge Shutters Control"; pixel_y = -34; req_access_txt = "19"},/obj/machinery/button/door{id = "bridge blast"; name = "Bridge Blast Door Control"; pixel_x = 0; pixel_y = -24; req_access_txt = "19"},/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 6},/area/bridge)
"bpC" = (/turf/simulated/wall,/area/crew_quarters/sleep_male{name = "Aft Dormitory"})
"bpD" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall,/area/crew_quarters/sleep_male{name = "Aft Dormitory"})
@@ -3541,11 +3541,11 @@
"bqe" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor/plasteel,/area/crew_quarters/courtroom)
"bqf" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/crew_quarters/courtroom)
"bqg" = (/obj/machinery/light_switch{dir = 1; pixel_y = 22},/obj/structure/bed/chair{dir = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "redcorner"},/area/crew_quarters/courtroom)
-"bqh" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/crew_quarters/courtroom)
+"bqh" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/effect/spawner/structure/window/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/courtroom)
"bqi" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "redcorner"},/area/hallway/primary/port{name = "Port Hallway"})
"bqj" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/port{name = "Port Hallway"})
"bqk" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "neutralcorner"},/area/hallway/primary/port{name = "Port Hallway"})
-"bql" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/port{name = "Port Hallway"})
+"bql" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/port{name = "Port Hallway"})
"bqm" = (/obj/machinery/camera{c_tag = "Aft Port Transit"},/obj/machinery/light_switch{dir = 1; pixel_y = 22},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/port{name = "Port Hallway"})
"bqn" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/port{name = "Port Hallway"})
"bqo" = (/obj/machinery/light{dir = 1},/obj/machinery/firealarm{pixel_y = 24},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel,/area/hallway/primary/port{name = "Port Hallway"})
@@ -3621,7 +3621,7 @@
"brG" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/plasteel{dir = 4; icon_state = "redcorner"},/area/crew_quarters/courtroom)
"brH" = (/obj/effect/spawner/structure/window/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/courtroom)
"brI" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8},/turf/simulated/floor/plasteel{icon_state = "neutralcorner"; dir = 4},/area/hallway/primary/port{name = "Port Hallway"})
-"brJ" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/port{name = "Port Hallway"})
+"brJ" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/port{name = "Port Hallway"})
"brK" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; on = 1},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/hallway/primary/port{name = "Port Hallway"})
"brL" = (/obj/structure/transit_tube{icon_state = "Block"; dir = 4},/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/hallway/primary/port{name = "Port Hallway"})
"brM" = (/obj/structure/transit_tube/station/reverse{dir = 1},/obj/structure/transit_tube_pod{dir = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/hallway/primary/port{name = "Port Hallway"})
@@ -4003,19 +4003,19 @@
"byY" = (/turf/simulated/wall/r_wall,/area/medical/chemistry)
"byZ" = (/turf/simulated/wall,/area/medical/medbay)
"bza" = (/obj/structure/sign/bluecross,/turf/simulated/wall,/area/medical/medbay)
-"bzb" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/medbay)
+"bzb" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/medbay)
"bzc" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay)
"bzd" = (/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay)
"bze" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay)
"bzf" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay)
-"bzg" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/medbay)
+"bzg" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/medbay)
"bzh" = (/turf/simulated/wall,/area/medical/surgery)
"bzi" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/wall,/area/medical/surgery)
"bzj" = (/obj/machinery/door/airlock/maintenance{name = "Maintenance Access"; req_one_access_txt = "5; 6; 9; 12; 22; 26; 28; 33; 37; 40"},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/asmaint)
"bzk" = (/turf/simulated/wall,/area/library)
"bzl" = (/obj/effect/spawner/structure/window/reinforced,/turf/simulated/floor/plating,/area/library)
"bzm" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/airlock/glass{desc = "The station's book depository, a place to hang out, aquire porn, and play tabletop games."; name = "Library"},/turf/simulated/floor/wood,/area/library)
-"bzn" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/library)
+"bzn" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/library)
"bzo" = (/turf/simulated/floor/wood,/area/library)
"bzp" = (/obj/machinery/door/window/northright{dir = 8; name = "Library Desk Door"; req_access_txt = "37"},/obj/machinery/status_display{layer = 4; pixel_y = 32},/turf/simulated/floor/wood,/area/library)
"bzq" = (/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor/wood,/area/library)
@@ -4040,14 +4040,14 @@
"bzJ" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/crew_quarters/courtroom)
"bzK" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{dir = 4},/obj/machinery/door/poddoor/shutters{id = "Mechbay"},/turf/simulated/floor/plasteel,/area/assembly/chargebay)
"bzL" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/poddoor/shutters{id = "Mechbay"},/turf/simulated/floor/plasteel,/area/assembly/chargebay)
-"bzM" = (/obj/machinery/door/poddoor/shutters/preopen{id = "robotics"; name = "robotics lab shutters"},/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/assembly/robotics)
+"bzM" = (/obj/machinery/door/poddoor/shutters/preopen{id = "robotics"; name = "robotics lab shutters"},/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/assembly/robotics)
"bzN" = (/turf/simulated/wall,/area/assembly/robotics)
-"bzO" = (/obj/machinery/door/poddoor/shutters/preopen{id = "robotics"; name = "robotics lab shutters"},/obj/structure/table/reinforced,/obj/machinery/door/window/eastleft{dir = 2; layer = 2.7; name = "Robotics Desk"; req_one_access = "29"},/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/simulated/floor/plating,/area/assembly/robotics)
+"bzO" = (/obj/machinery/door/poddoor/shutters/preopen{id = "robotics"; name = "robotics lab shutters"},/obj/structure/table/reinforced,/obj/machinery/door/window/eastleft{dir = 2; layer = 2.7; name = "Robotics Desk"; req_access_txt = "29"; req_one_access = null},/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/simulated/floor/plating,/area/assembly/robotics)
"bzP" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "whiteblue"},/area/toxins/lab)
-"bzQ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/poddoor/shutters/preopen{id = "robotics"; name = "robotics lab shutters"},/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/assembly/robotics)
+"bzQ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/poddoor/shutters/preopen{id = "robotics"; name = "robotics lab shutters"},/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/assembly/robotics)
"bzR" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/plasteel{dir = 5; icon_state = "whiteblue"},/area/toxins/lab)
"bzS" = (/obj/machinery/door/airlock/research{name = "Robotics Lab"; req_access_txt = "29"; req_one_access_txt = "0"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "yellow"},/area/assembly/robotics)
-"bzT" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters/preopen{id = "robotics"; name = "robotics lab shutters"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/assembly/robotics)
+"bzT" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters/preopen{id = "robotics"; name = "robotics lab shutters"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/assembly/robotics)
"bzU" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=1"; freq = 1400; location = "Robotics"},/obj/machinery/door/firedoor,/obj/structure/plasticflaps{opacity = 1},/turf/simulated/floor/plasteel{icon_state = "loadingarea"},/area/assembly/robotics)
"bzV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; on = 1},/turf/simulated/floor/plasteel,/area/hallway/primary/aft{name = "Aft Hallway"})
"bzW" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/obj/machinery/light{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "greencorner"},/area/hallway/primary/aft{name = "Aft Hallway"})
@@ -4062,7 +4062,7 @@
"bAf" = (/obj/structure/table/glass,/obj/item/weapon/storage/box/monkeycubes,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/chemistry)
"bAg" = (/obj/structure/sink{pixel_y = 32},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/chemistry)
"bAh" = (/obj/machinery/button/door{id = "chemTesting"; name = "Containment Blast Doors"; pixel_y = 25; req_access_txt = "5; 33"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warnwhite"},/area/medical/chemistry)
-"bAi" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "chemTesting"; name = "Containment Door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/engine,/area/medical/chemistry)
+"bAi" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "chemTesting"; name = "Containment Door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/engine,/area/medical/chemistry)
"bAj" = (/turf/simulated/floor/engine,/area/medical/chemistry)
"bAk" = (/mob/living/carbon/monkey,/turf/simulated/floor/engine,/area/medical/chemistry)
"bAl" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay)
@@ -4166,7 +4166,7 @@
"bCf" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/maintenance{name = "Mech Bay Maintenance"; req_access_txt = "29"},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"bCg" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/turf/simulated/wall,/area/assembly/chargebay)
"bCh" = (/obj/machinery/door/airlock/research{id_tag = ""; name = "Mech Bay"; req_access_txt = "29"; req_one_access_txt = "0"},/turf/simulated/floor/plasteel,/area/assembly/chargebay)
-"bCi" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/shutters/preopen{id = "robotics"; name = "robotics lab shutters"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/assembly/chargebay)
+"bCi" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/shutters/preopen{id = "robotics"; name = "robotics lab shutters"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/assembly/chargebay)
"bCj" = (/obj/structure/closet/crate,/obj/item/target,/obj/item/target/clown,/turf/simulated/floor/plasteel{icon_state = "warningcorner"},/area/toxins/misc_lab)
"bCk" = (/turf/simulated/floor/plating,/area/toxins/misc_lab)
"bCl" = (/obj/machinery/camera{c_tag = "Shooting Range"; dir = 2},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/toxins/misc_lab)
@@ -4190,7 +4190,7 @@
"bCD" = (/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/asmaint)
"bCE" = (/obj/structure/table/glass,/obj/item/weapon/paper,/obj/item/weapon/pen,/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/chemistry)
"bCF" = (/obj/structure/bed/chair/office/light{dir = 8},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/chemistry)
-"bCG" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/preopen{id = "chemTesting"; name = "Containment Door"},/turf/simulated/floor/engine,/area/medical/chemistry)
+"bCG" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "chemTesting"; name = "Containment Door"},/turf/simulated/floor/engine,/area/medical/chemistry)
"bCH" = (/obj/structure/extinguisher_cabinet{pixel_x = -27},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay)
"bCI" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "whitebluecorner"},/area/medical/medbay)
"bCJ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "whiteblue"},/area/medical/medbay)
@@ -4199,9 +4199,9 @@
"bCM" = (/turf/simulated/floor/plasteel{icon_state = "whiteblue"},/area/medical/medbay)
"bCN" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitebluecorner"},/area/medical/medbay)
"bCO" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 29},/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/plasteel{dir = 10; icon_state = "whitehall"},/area/medical/medbay)
-"bCP" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/surgery)
+"bCP" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/surgery)
"bCQ" = (/obj/machinery/door/airlock/glass_medical{desc = "A storage area for important medical supplies. Leads to the front desk."; name = "Patient Room"; req_access_txt = "5"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery)
-"bCR" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/surgery)
+"bCR" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/surgery)
"bCS" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/surgery)
"bCT" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/surgery)
"bCU" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/surgery)
@@ -4325,7 +4325,7 @@
"bFi" = (/obj/structure/bookcase{name = "bookcase (Non-Fiction)"},/turf/simulated/floor/wood,/area/library)
"bFj" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/wood,/area/library)
"bFk" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1; pixel_y = 0},/turf/simulated/floor/wood,/area/library)
-"bFl" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/library)
+"bFl" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/library)
"bFm" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/wall,/area/maintenance/asmaint2)
"bFn" = (/obj/structure/cable/pink{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"bFo" = (/obj/structure/cable/pink{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
@@ -4373,7 +4373,7 @@
"bGe" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/carpet,/area/library)
"bGf" = (/obj/item/stack/rods,/obj/item/weapon/shard{icon_state = "medium"},/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/simulated/floor/plating/airless,/area/mine/abandoned)
"bGg" = (/obj/structure/door_assembly/door_assembly_ext{name = "Broken External Airlock"},/turf/simulated/floor/plasteel/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/abandoned)
-"bGh" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating/airless,/area/mine/abandoned)
+"bGh" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating/airless,/area/mine/abandoned)
"bGi" = (/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"bGj" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/turf/simulated/wall,/area/maintenance/asmaint2)
"bGk" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/assembly/robotics)
@@ -4433,7 +4433,7 @@
"bHm" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/plasteel,/area/toxins/misc_lab)
"bHn" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/medical/research{name = "Research Division"})
"bHo" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralcorner"},/area/hallway/primary/aft{name = "Aft Hallway"})
-"bHp" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/hallway/primary/aft{name = "Aft Hallway"})
+"bHp" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/hallway/primary/aft{name = "Aft Hallway"})
"bHq" = (/obj/machinery/light{dir = 4},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/turf/simulated/floor/plasteel{icon_state = "neutralcorner"},/area/hallway/primary/aft{name = "Aft Hallway"})
"bHr" = (/turf/simulated/wall,/area/hallway/primary/aft{name = "Aft Hallway"})
"bHs" = (/obj/effect/decal/cleanable/cobweb,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint)
@@ -4446,7 +4446,7 @@
"bHz" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/chemistry)
"bHA" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "whiteyellow"},/area/medical/chemistry)
"bHB" = (/obj/structure/bed/roller,/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 4; icon_state = "whiteblue"},/area/medical/medbay)
-"bHC" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/medbay)
+"bHC" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/medbay)
"bHD" = (/obj/structure/table/reinforced,/obj/machinery/button/door{desc = "A remote control switch for the medbay foyer."; id = "FoyerLeft"; name = "Medbay Doors Control"; normaldoorcontrol = 1; req_access_txt = "5"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/medical/medbay)
"bHE" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/medical/medbay)
"bHF" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/medical/medbay)
@@ -4537,7 +4537,7 @@
"bJm" = (/obj/structure/table/glass,/obj/item/stack/sheet/plasteel{amount = 10},/obj/item/stack/sheet/glass{amount = 20; pixel_x = -3; pixel_y = 6},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/turf/simulated/floor/plasteel,/area/assembly/robotics)
"bJn" = (/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"bJo" = (/turf/simulated/wall/r_wall,/area/crew_quarters/hor)
-"bJp" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/cable/pink{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/crew_quarters/hor)
+"bJp" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable/pink{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/crew_quarters/hor)
"bJq" = (/obj/structure/table/glass,/obj/item/device/assembly/flash/handheld,/obj/item/stack/cable_coil,/obj/item/borg/upgrade/rename,/obj/item/device/assembly/flash/handheld,/obj/item/device/assembly/flash/handheld,/obj/item/device/assembly/flash/handheld,/obj/item/device/assembly/flash/handheld,/turf/simulated/floor/plasteel,/area/assembly/robotics)
"bJr" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_y = -29},/obj/structure/table/glass,/obj/machinery/cell_charger,/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/turf/simulated/floor/plasteel,/area/assembly/robotics)
"bJs" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralcorner"},/area/hallway/primary/aft{name = "Aft Hallway"})
@@ -4668,7 +4668,7 @@
"bLN" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay2)
"bLO" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay2)
"bLP" = (/obj/structure/disposalpipe/segment,/obj/structure/bed/roller,/turf/simulated/floor/plasteel{icon_state = "whitered"; dir = 4},/area/medical/medbay2)
-"bLQ" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/medbay)
+"bLQ" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/medbay)
"bLR" = (/obj/machinery/door/airlock/glass_security{name = "Security Post"; req_access_txt = "63"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitered"},/area/medical/medbay)
"bLS" = (/obj/machinery/button/door{desc = "A remote control switch for the medbay foyer."; id = "FoyerRight"; name = "Medbay Exit Button"; normaldoorcontrol = 1; pixel_y = 26},/obj/structure/bed/roller,/turf/simulated/floor/plasteel{icon_state = "whitered"; dir = 8},/area/medical/medbay2)
"bLT" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay2)
@@ -4694,7 +4694,7 @@
"bMn" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{dir = 9},/obj/structure/cable/pink{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"bMo" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/toxins/misc_lab)
"bMp" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable/pink{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
-"bMq" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/obj/structure/table/glass,/obj/item/stack/cable_coil,/obj/item/stack/cable_coil,/turf/simulated/floor/plasteel,/area/toxins/misc_lab)
+"bMq" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/obj/structure/table/glass,/obj/item/stack/cable_coil,/obj/item/stack/cable_coil,/obj/machinery/light_switch{pixel_y = -25},/turf/simulated/floor/plasteel,/area/toxins/misc_lab)
"bMr" = (/obj/structure/closet/wardrobe/black,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"bMs" = (/obj/machinery/hydroponics/constructable,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"bMt" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
@@ -4764,7 +4764,7 @@
"bNF" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "Janitor"},/obj/structure/plasticflaps{opacity = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{dir = 8; icon_state = "loadingarea"},/area/janitor)
"bNG" = (/obj/machinery/door/airlock/maintenance{name = "Robotics Maintenance"; req_access_txt = "29"},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"bNH" = (/obj/effect/spawner/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/hor)
-"bNI" = (/obj/machinery/door/airlock/research{name = "Robotics Lab"; req_access_txt = "29"; req_one_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whiteyellowfull"},/area/assembly/robotics)
+"bNI" = (/obj/machinery/door/airlock/research{name = "Robotics Lab"; req_access_txt = "29"; req_one_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whiteyellowfull"},/area/assembly/robotics)
"bNJ" = (/obj/effect/spawner/structure/window/reinforced,/turf/simulated/floor/plating,/area/assembly/robotics)
"bNK" = (/turf/simulated/floor/plasteel{icon_state = "white"},/area/crew_quarters/hor)
"bNL" = (/obj/machinery/door/airlock/glass_research{name = "Testing Lab"; req_access_txt = "47"; req_one_access = null},/turf/simulated/floor/plasteel,/area/toxins/misc_lab)
@@ -4886,9 +4886,9 @@
"bPX" = (/obj/effect/spawner/structure/window/reinforced,/turf/simulated/floor/plating,/area/medical/medbay2)
"bPY" = (/obj/machinery/door/airlock/glass_medical{desc = "A storage area for important medical supplies, including a medical hardsuit for SAR operations."; name = "Medbay Storage"; req_access_txt = "45"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "whitebluefull"},/area/medical/medbay2)
"bPZ" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall,/area/medical/medbay2)
-"bQa" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/medbay2)
+"bQa" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/medbay2)
"bQb" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/airlock/glass_medical{desc = "The breakroom for the station's diligent Medical staff, suitably insulated from the screams of the injured."; name = "Medbay Break Room"; req_access_txt = "5"},/turf/simulated/floor/plasteel{icon_state = "whitebluefull"},/area/medical/medbay2)
-"bQc" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/medbay2)
+"bQc" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/medbay2)
"bQd" = (/obj/structure/table/glass,/obj/item/weapon/storage/firstaid/toxin{pixel_x = 4; pixel_y = 4},/obj/item/weapon/storage/firstaid/toxin,/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteblue"},/area/medical/medbay2)
"bQe" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay2)
"bQf" = (/obj/effect/landmark/start{name = "Medical Doctor"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay2)
@@ -4930,7 +4930,7 @@
"bQP" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics)
"bQQ" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics)
"bQR" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurple"},/area/medical/genetics)
-"bQS" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/genetics)
+"bQS" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/genetics)
"bQT" = (/obj/structure/table/glass,/obj/item/weapon/storage/box/rxglasses,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitebluecorner"},/area/medical/genetics)
"bQU" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics)
"bQV" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics)
@@ -4967,7 +4967,7 @@
"bRA" = (/obj/machinery/atmospherics/components/unary/cold_sink/freezer,/turf/simulated/floor/plasteel{icon_state = "warning"},/area/toxins/mixing)
"bRB" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible,/turf/simulated/floor/plasteel{icon_state = "warning"},/area/toxins/mixing)
"bRC" = (/turf/simulated/wall/r_wall,/area/toxins/server)
-"bRD" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/cable/pink{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/crew_quarters/hor)
+"bRD" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable/pink{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/crew_quarters/hor)
"bRE" = (/obj/machinery/door/airlock/glass_command{name = "Research Director's Office"; req_access_txt = "30"},/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/pink{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/pink{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/crew_quarters/hor)
"bRF" = (/obj/effect/spawner/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/toxins/lab)
"bRG" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/sign/directions/medical{dir = 4; icon_state = "direction_med"; pixel_x = 0; pixel_y = 40},/obj/structure/sign/directions/science{dir = 4; icon_state = "direction_sci"; pixel_x = 0; pixel_y = 32},/obj/structure/sign/directions/security{dir = 1; icon_state = "direction_sec"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor/plasteel{icon_state = "neutralcorner"; dir = 1},/area/hallway/primary/central{name = "Aft Central Hallway"})
@@ -5021,7 +5021,7 @@
"bSC" = (/obj/machinery/computer/aifixer,/obj/machinery/ai_status_display{pixel_y = 32},/obj/machinery/button/door{id = "Biohazard"; name = "Biohazard Shutter Control"; pixel_x = -24; req_access_txt = "47"},/obj/machinery/button{id = "research"; name = "Research and Development Shutters"; pixel_x = -37},/turf/simulated/floor/plasteel{dir = 9; icon_state = "whiteblue"},/area/crew_quarters/hor)
"bSD" = (/obj/structure/closet/secure_closet/RD,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whiteblue"},/area/crew_quarters/hor)
"bSE" = (/obj/machinery/portable_atmospherics/pump,/turf/simulated/floor/plasteel{icon_state = "whitepurple"; dir = 5},/area/toxins/mixing)
-"bSF" = (/obj/structure/table,/obj/item/device/aicard,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/item/clothing/glasses/science,/turf/simulated/floor/plasteel{dir = 5; icon_state = "whiteblue"},/area/crew_quarters/hor)
+"bSF" = (/obj/structure/table,/obj/item/device/aicard,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/item/clothing/glasses/science,/obj/machinery/light_switch{pixel_x = 25; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 5; icon_state = "whiteblue"},/area/crew_quarters/hor)
"bSG" = (/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whiteblue"},/area/crew_quarters/hor)
"bSH" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"})
"bSI" = (/obj/structure/cable/pink{d2 = 4; icon_state = "0-4"},/obj/machinery/power/apc{dir = 8; name = "Research Lab APC"; pixel_x = -25; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 9; icon_state = "whiteblue"},/area/toxins/lab)
@@ -5033,7 +5033,7 @@
"bSO" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics)
"bSP" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics)
"bSQ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/dna_scannernew,/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurple"},/area/medical/genetics)
-"bSR" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/genetics)
+"bSR" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/genetics)
"bSS" = (/obj/structure/bed/roller,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitebluecorner"},/area/medical/genetics)
"bST" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics)
"bSU" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics)
@@ -5043,8 +5043,8 @@
"bSY" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteblue"},/area/medical/medbay2)
"bSZ" = (/obj/machinery/light{dir = 4},/obj/machinery/requests_console{department = "Medbay"; departmentType = 1; name = "Medbay Requests Console"; pixel_x = 32},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whiteblue"},/area/medical/medbay2)
"bTa" = (/turf/simulated/wall/r_wall,/area/medical/cmo)
-"bTb" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/cable/cyan{icon_state = "0-2"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/cmo)
-"bTc" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/cable/cyan{icon_state = "0-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/cmo)
+"bTb" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/cable/cyan{icon_state = "0-2"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/cmo)
+"bTc" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/cable/cyan{icon_state = "0-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/cmo)
"bTd" = (/obj/structure/sign/biohazard,/turf/simulated/wall/r_wall,/area/medical/cmo)
"bTe" = (/obj/machinery/light_switch{dir = 8; pixel_x = -22},/turf/simulated/wall/r_wall,/area/medical/virology)
"bTf" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/requests_console{department = "Virology"; name = "Virology Requests Console"; pixel_x = -32},/obj/structure/closet/l3closet/virology,/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitegreen"},/area/medical/virology)
@@ -5082,7 +5082,7 @@
"bTL" = (/obj/machinery/door/window/eastright{name = "Monkey Pen"; req_access_txt = "9"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics)
"bTM" = (/obj/structure/bed/chair/office/light{dir = 4},/obj/effect/landmark/start{name = "Geneticist"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics)
"bTN" = (/obj/machinery/computer/scan_consolenew,/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurple"},/area/medical/genetics)
-"bTO" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/genetics)
+"bTO" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/genetics)
"bTP" = (/obj/structure/closet/wardrobe/white,/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteblue"},/area/medical/genetics)
"bTQ" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics)
"bTR" = (/obj/machinery/dna_scannernew,/turf/simulated/floor/plasteel{dir = 4; icon_state = "whiteblue"},/area/medical/genetics)
@@ -5102,7 +5102,7 @@
"bUf" = (/obj/structure/closet/secure_closet/personal/patient,/turf/simulated/floor/plasteel{dir = 9; icon_state = "whitegreen"},/area/medical/virology)
"bUg" = (/obj/structure/bed,/obj/item/weapon/bedsheet/medical,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitegreen"},/area/medical/virology)
"bUh" = (/obj/structure/table/glass,/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{dir = 5; icon_state = "whitegreen"},/area/medical/virology)
-"bUi" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/virology)
+"bUi" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/virology)
"bUj" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/closet/secure_closet/medical1,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitegreencorner"},/area/medical/virology)
"bUk" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology)
"bUl" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 29},/obj/machinery/camera{c_tag = "Virology"; dir = 9},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitegreencorner"},/area/medical/virology)
@@ -5113,7 +5113,7 @@
"bUq" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; external_pressure_bound = 140; on = 1; pressure_checks = 0},/obj/machinery/camera{c_tag = "Server Room"; dir = 4},/turf/simulated/floor/bluegrid{nitrogen = 100; oxygen = 0; temperature = 80},/area/toxins/server)
"bUr" = (/obj/machinery/light{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whiteyellow"},/area/assembly/robotics)
"bUs" = (/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume{frequency = 1449; id = "tox_airlock_pump"},/turf/simulated/floor/engine,/area/toxins/mixing)
-"bUt" = (/obj/item/weapon/reagent_containers/dropper,/turf/simulated/floor/plasteel,/area/toxins/misc_lab)
+"bUt" = (/obj/structure/cable/pink{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/alarm{frequency = 1439; locked = 0; pixel_y = 23},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whiteblue"},/area/toxins/lab)
"bUu" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "warnwhite"},/area/toxins/mixing)
"bUv" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/mixing)
"bUw" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/mixing)
@@ -5141,8 +5141,8 @@
"bUS" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "whiteblue"},/area/medical/genetics)
"bUT" = (/turf/simulated/floor/plasteel{dir = 6; icon_state = "whiteblue"},/area/medical/genetics)
"bUU" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/alarm{dir = 4; pixel_x = -22},/turf/simulated/floor/plasteel{dir = 10; icon_state = "whiteblue"},/area/medical/medbay2)
-"bUV" = (/obj/machinery/disposal/bin,/turf/simulated/floor/plasteel{icon_state = "whiteblue"},/area/medical/medbay2)
-"bUW" = (/obj/structure/table/glass,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "whiteblue"},/area/medical/medbay2)
+"bUV" = (/obj/machinery/light_switch{pixel_y = 25},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whiteblue"},/area/toxins/lab)
+"bUW" = (/obj/structure/disposalpipe/sortjunction{dir = 8; icon_state = "pipe-j2s"; sortType = 10},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay2)
"bUX" = (/obj/structure/table/glass,/obj/item/weapon/airlock_painter,/obj/machinery/camera{c_tag = "Art Storage"; dir = 1},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/storage/art)
"bUY" = (/obj/structure/table/glass,/obj/item/weapon/hand_labeler,/obj/item/weapon/gun/syringe,/turf/simulated/floor/plasteel{dir = 6; icon_state = "whiteblue"},/area/medical/medbay2)
"bUZ" = (/obj/structure/bed/chair/office/light{dir = 4},/obj/structure/extinguisher_cabinet{pixel_x = -27},/obj/machinery/camera{c_tag = "Medbay Break Room"; dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteblue"},/area/medical/medbay2)
@@ -5159,7 +5159,7 @@
"bVk" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/door/airlock/glass_virology{name = "Isolation Room"; req_access_txt = "39"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitegreen"},/area/medical/virology)
"bVl" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology)
"bVm" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology)
-"bVn" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/virology)
+"bVn" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/virology)
"bVo" = (/turf/simulated/floor/plasteel{dir = 9; icon_state = "whitegreen"},/area/medical/virology)
"bVp" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1},/mob/living/carbon/monkey,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitegreen"},/area/medical/virology)
"bVq" = (/turf/simulated/floor/plasteel{dir = 5; icon_state = "whitegreen"},/area/medical/virology)
@@ -5186,7 +5186,7 @@
"bVL" = (/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay2)
"bVM" = (/obj/structure/bed/chair/office/light{dir = 8},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay2)
"bVN" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "whitebluecorner"},/area/medical/medbay2)
-"bVO" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/cable/cyan{icon_state = "0-4"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/cmo)
+"bVO" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/cable/cyan{icon_state = "0-4"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/cmo)
"bVP" = (/obj/structure/cable/cyan{icon_state = "2-8"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/medical/cmo)
"bVQ" = (/obj/structure/bed/chair/office/light{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/medical/cmo)
"bVR" = (/obj/structure/table/glass,/obj/item/weapon/folder/white,/obj/item/weapon/pen,/obj/structure/cable/cyan{icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/medical/cmo)
@@ -5202,7 +5202,7 @@
"bWb" = (/turf/simulated/floor/plasteel/airless,/area/toxins/test_area)
"bWc" = (/obj/machinery/camera{c_tag = "Toxins Test Chamber Fore"; network = list("SS13","Toxins")},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel/airless,/area/toxins/test_area)
"bWd" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'BOMB RANGE"; name = "BOMB RANGE"},/turf/simulated/wall,/area/mine/explored)
-"bWe" = (/obj/structure/table/glass,/obj/item/clothing/suit/straight_jacket,/obj/item/clothing/mask/muzzle,/obj/item/device/radio/intercom{frequency = 1485; name = "Station Intercom (Medbay)"; pixel_y = -29},/turf/simulated/floor/plasteel{icon_state = "whiteblue"},/area/medical/medbay2)
+"bWe" = (/obj/structure/table/glass,/obj/item/weapon/stock_parts/manipulator,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/item/stack/cable_coil,/obj/item/weapon/stock_parts/capacitor,/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteblue"},/area/toxins/lab)
"bWf" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warnwhitecorner"},/area/toxins/lab)
"bWg" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "warnwhite"},/area/toxins/lab)
"bWh" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whiteblue"},/area/toxins/lab)
@@ -5235,7 +5235,7 @@
"bWI" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay2)
"bWJ" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay2)
"bWK" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whiteblue"},/area/medical/medbay2)
-"bWL" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable/cyan{icon_state = "0-4"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/cmo)
+"bWL" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable/cyan{icon_state = "0-4"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/cmo)
"bWM" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable/cyan{icon_state = "1-4"},/obj/structure/cable/cyan{icon_state = "2-4"},/obj/structure/cable/cyan{icon_state = "4-8"},/obj/machinery/suit_storage_unit/cmo,/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/medical/cmo)
"bWN" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable/cyan{icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/medical/cmo)
"bWO" = (/obj/structure/table/glass,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/obj/item/weapon/stamp/cmo,/obj/structure/cable/cyan{icon_state = "1-2"},/obj/structure/cable/cyan{icon_state = "2-8"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/medical/cmo)
@@ -5247,7 +5247,7 @@
"bWU" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology)
"bWV" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology)
"bWW" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology)
-"bWX" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/virology)
+"bWX" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/virology)
"bWY" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/mob/living/carbon/monkey,/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitegreen"},/area/medical/virology)
"bWZ" = (/obj/machinery/light{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitegreen"},/area/medical/virology)
"bXa" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/medical/virology)
@@ -5354,7 +5354,7 @@
"bYX" = (/obj/structure/table,/obj/item/toy/minimeteor,/obj/item/weapon/poster/contraband,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"bYY" = (/obj/structure/rack,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"bYZ" = (/obj/structure/reagent_dispensers/water_cooler,/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 1},/turf/simulated/floor/plasteel{icon_state = "whitepurple"; dir = 5},/area/medical/research{name = "Research Division"})
-"bZa" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/medical/research{name = "Research Division"})
+"bZa" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/medical/research{name = "Research Division"})
"bZb" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"})
"bZc" = (/obj/machinery/alarm{pixel_y = 23},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"})
"bZd" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"})
@@ -5413,7 +5413,7 @@
"cae" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitepurple"},/area/medical/research{name = "Research Division"})
"caf" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"})
"cag" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurple"},/area/medical/research{name = "Research Division"})
-"cah" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/research{name = "Research Division"})
+"cah" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/research{name = "Research Division"})
"cai" = (/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitepurplecorner"},/area/medical/research{name = "Research Division"})
"caj" = (/turf/simulated/floor/plasteel{icon_state = "whiteredcorner"},/area/medical/research{name = "Research Division"})
"cak" = (/obj/machinery/light,/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "whitered"},/area/medical/research{name = "Research Division"})
@@ -5466,8 +5466,8 @@
"cbf" = (/obj/machinery/door/airlock/glass_research{name = "Research Division Break Room"; req_access_txt = "7"},/turf/simulated/floor/plasteel{icon_state = "whitepurplefull"},/area/medical/research{name = "Research Division"})
"cbg" = (/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitepurple"},/area/medical/research{name = "Research Division"})
"cbh" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 29},/turf/simulated/floor/plasteel{icon_state = "whitered"; dir = 4},/area/medical/research{name = "Research Division"})
-"cbi" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/research{name = "Research Division"})
-"cbj" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/research{name = "Research Division"})
+"cbi" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/research{name = "Research Division"})
+"cbj" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/research{name = "Research Division"})
"cbk" = (/obj/machinery/door/poddoor/preopen{id = "Biohazard"; name = "Biohazard Containment Door"},/turf/simulated/floor/plasteel{icon_state = "whitered"; dir = 8},/area/medical/research{name = "Research Division"})
"cbl" = (/obj/machinery/door/poddoor/preopen{id = "Biohazard"; name = "Biohazard Containment Door"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"})
"cbm" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitecorner"},/area/hallway/primary/aft{name = "Aft Hallway"})
@@ -5508,7 +5508,7 @@
"cbV" = (/obj/machinery/computer/security/telescreen{desc = "Used for watching various laboratories."; name = "Research Monitor"; network = list("RD"); pixel_y = 28},/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/obj/machinery/camera{c_tag = "Research Security Post"; network = list("SS13","RD")},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/medical/research{name = "Research Division"})
"cbW" = (/obj/structure/table/glass,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/medical/research{name = "Research Division"})
"cbX" = (/obj/structure/table/glass,/obj/machinery/recharger{pixel_y = 4},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = 23},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/medical/research{name = "Research Division"})
-"cbY" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/preopen{id = "Biohazard"; name = "Biohazard Containment Door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/research{name = "Research Division"})
+"cbY" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/preopen{id = "Biohazard"; name = "Biohazard Containment Door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/research{name = "Research Division"})
"cbZ" = (/turf/simulated/floor/plasteel{icon_state = "whitered"; dir = 8},/area/medical/research{name = "Research Division"})
"cca" = (/obj/structure/closet/l3closet/scientist,/turf/simulated/floor/plasteel{dir = 9; icon_state = "warnwhite"},/area/medical/research{name = "Research Division"})
"ccb" = (/obj/structure/closet/firecloset,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel{icon_state = "warnwhite"; dir = 1},/area/medical/research{name = "Research Division"})
@@ -5533,7 +5533,7 @@
"ccu" = (/obj/machinery/atmospherics/components/binary/pump{dir = 4},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/maintenance/incinerator)
"ccv" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 10},/obj/machinery/camera{c_tag = "Incinerator"; dir = 6},/turf/simulated/floor/plating,/area/maintenance/incinerator)
"ccw" = (/turf/simulated/floor/plating,/area/maintenance/incinerator)
-"ccx" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/plating,/area/maintenance/incinerator)
+"ccx" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "warnwhite"; dir = 1},/area/toxins/lab)
"ccy" = (/obj/machinery/doorButtons/airlock_controller{idExterior = "incinerator_airlock_exterior"; idSelf = "incinerator_access_control"; idInterior = "incinerator_airlock_interior"; name = "Incinerator Access Console"; pixel_x = 24; pixel_y = -8; req_access_txt = "12"},/obj/machinery/atmospherics/components/binary/pump{dir = 1; name = "Gas Pump"},/turf/simulated/floor/plating{icon_state = "warnplatecorner"},/area/maintenance/incinerator)
"ccz" = (/obj/machinery/doorButtons/access_button{idDoor = "incinerator_airlock_exterior"; layer = 3.1; idSelf = "incinerator_access_control"; name = "Incinerator airlock control"; pixel_x = -24; pixel_y = -8},/obj/structure/sign/fire{pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 6},/turf/simulated/floor/plating,/area/maintenance/incinerator)
"ccA" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/turf/simulated/wall/r_wall,/area/maintenance/incinerator)
@@ -5553,10 +5553,10 @@
"ccO" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; external_pressure_bound = 101.325; on = 1; pressure_checks = 0},/turf/simulated/floor/plasteel{icon_state = "whitepurple"},/area/medical/research{name = "Research Division"})
"ccP" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "whitepurple"},/area/medical/research{name = "Research Division"})
"ccQ" = (/obj/structure/closet/emcloset,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 6; icon_state = "whitepurple"},/area/medical/research{name = "Research Division"})
-"ccR" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/medical/research{name = "Research Division"})
+"ccR" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/medical/research{name = "Research Division"})
"ccS" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/crew_quarters/hor)
"ccT" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "whitered"; dir = 4},/area/medical/research{name = "Research Division"})
-"ccU" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/research{name = "Research Division"})
+"ccU" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/research{name = "Research Division"})
"ccV" = (/obj/structure/filingcabinet,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/medical/research{name = "Research Division"})
"ccW" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/turf/simulated/floor/plasteel,/area/medical/research{name = "Research Division"})
"ccX" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/plasteel,/area/medical/research{name = "Research Division"})
@@ -5577,7 +5577,7 @@
"cdm" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main)
"cdn" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main)
"cdo" = (/obj/structure/bed/chair{dir = 4},/obj/item/device/radio/intercom{broadcasting = 1; frequency = 1480; name = "Confessional Intercom"; pixel_y = 26},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main)
-"cdp" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced/tinted,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main)
+"cdp" = (/obj/structure/grille,/obj/structure/window/reinforced/tinted/fulltile,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main)
"cdq" = (/obj/structure/bed/chair{dir = 8},/obj/item/device/radio/intercom{broadcasting = 1; frequency = 1480; name = "Confessional Intercom"; pixel_y = 26},/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main)
"cdr" = (/obj/structure/cable/cyan,/obj/machinery/power/apc{name = "Atmospherics APC"; pixel_y = -24},/turf/simulated/floor/plating,/area/atmos)
"cds" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint)
@@ -5602,7 +5602,7 @@
"cdL" = (/turf/simulated/floor/plating/airless{icon_state = "warnplatecorner"; dir = 1},/area/toxins/test_area)
"cdM" = (/turf/simulated/floor/plating/airless{icon_state = "warnplatecorner"},/area/toxins/test_area)
"cdN" = (/turf/simulated/wall/r_wall,/area/toxins/storage)
-"cdO" = (/obj/structure/table/glass,/obj/item/weapon/stock_parts/manipulator,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/item/weapon/stock_parts/manipulator,/obj/item/stack/cable_coil,/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteblue"},/area/toxins/lab)
+"cdO" = (/obj/effect/spawner/structure/window/reinforced,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/medical/medbay2)
"cdP" = (/obj/structure/reagent_dispensers/peppertank{pixel_x = -32},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/medical/research{name = "Research Division"})
"cdQ" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1},/turf/simulated/floor/plasteel{icon_state = "red"},/area/medical/research{name = "Research Division"})
"cdR" = (/turf/simulated/floor/plasteel{icon_state = "red"},/area/medical/research{name = "Research Division"})
@@ -5646,7 +5646,7 @@
"ceD" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurplecorner"},/area/medical/research{name = "Research Division"})
"ceE" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitepurple"},/area/medical/research{name = "Research Division"})
"ceF" = (/obj/machinery/atmospherics/components/unary/vent_pump,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitepurplecorner"},/area/medical/research{name = "Research Division"})
-"ceG" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4},/turf/simulated/floor/plasteel{icon_state = "warnwhite"; dir = 1},/area/toxins/lab)
+"ceG" = (/obj/structure/table/glass,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/machinery/light,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "whiteblue"},/area/medical/medbay2)
"ceH" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warnwhitecorner"},/area/toxins/lab)
"ceI" = (/obj/effect/spawner/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters/preopen{id = "research"},/turf/simulated/floor/plating,/area/toxins/lab)
"ceJ" = (/obj/machinery/door/poddoor/preopen{id = "Biohazard"; name = "Biohazard Containment Door"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "whitered"; dir = 8},/area/medical/research{name = "Research Division"})
@@ -5721,7 +5721,7 @@
"cga" = (/turf/simulated/floor/plasteel/airless{dir = 4; icon_state = "warningcorner"},/area/toxins/test_area)
"cgb" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/toxins/storage)
"cgc" = (/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/toxins/storage)
-"cgd" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/toxins/storage)
+"cgd" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/toxins/storage)
"cge" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/toxins/storage)
"cgf" = (/obj/machinery/computer/area_atmos,/turf/simulated/floor/plasteel,/area/toxins/storage)
"cgg" = (/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"})
@@ -5786,7 +5786,7 @@
"chn" = (/turf/simulated/wall/r_wall,/area/toxins/xenobiology)
"cho" = (/obj/structure/disposaloutlet,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/engine,/area/toxins/xenobiology)
"chp" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/engine,/area/toxins/xenobiology)
-"chq" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "xenobio2"; name = "Containment Door"},/obj/structure/cable/pink{d2 = 2; icon_state = "0-2"},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/toxins/xenobiology)
+"chq" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "xenobio2"; name = "Containment Door"},/obj/structure/cable/pink{d2 = 2; icon_state = "0-2"},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/toxins/xenobiology)
"chr" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/toxins/xenobiology)
"chs" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "warnwhitecorner"},/area/toxins/xenobiology)
"cht" = (/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
@@ -5794,7 +5794,7 @@
"chv" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
"chw" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/table/glass,/obj/item/weapon/disk/tech_disk,/obj/item/weapon/disk/design_disk,/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteblue"},/area/toxins/lab)
"chx" = (/obj/structure/table/reinforced,/obj/machinery/button/door{id = "xenobio3"; name = "Containment Blast Doors"; req_access_txt = "55"},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/toxins/xenobiology)
-"chy" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "xenobio3"; name = "Containment Door"},/obj/structure/cable/pink{d2 = 2; icon_state = "0-2"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/toxins/xenobiology)
+"chy" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "xenobio3"; name = "Containment Door"},/obj/structure/cable/pink{d2 = 2; icon_state = "0-2"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/toxins/xenobiology)
"chz" = (/turf/simulated/floor/engine,/area/toxins/xenobiology)
"chA" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/lab)
"chB" = (/turf/simulated/wall/r_wall,/area/toxins/explab)
@@ -5870,13 +5870,13 @@
"ciT" = (/obj/machinery/seed_extractor,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/maintenance/asmaint2)
"ciU" = (/obj/item/weapon/storage/backpack,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/maintenance/asmaint2)
"ciV" = (/obj/item/weapon/reagent_containers/glass/beaker,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/maintenance/asmaint2)
-"ciW" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "xenobio2"; name = "Containment Door"},/obj/structure/cable/pink,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/toxins/xenobiology)
+"ciW" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "xenobio2"; name = "Containment Door"},/obj/structure/cable/pink,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/toxins/xenobiology)
"ciX" = (/obj/structure/table/reinforced,/obj/machinery/button/door{id = "xenobio2"; name = "Containment Blast Doors"; req_access_txt = "55"},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/toxins/xenobiology)
"ciY" = (/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warnwhite"},/area/toxins/xenobiology)
"ciZ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
"cja" = (/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warnwhite"},/area/toxins/xenobiology)
"cjb" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/toxins/xenobiology)
-"cjc" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "xenobio3"; name = "Containment Door"},/obj/structure/cable/pink,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/toxins/xenobiology)
+"cjc" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "xenobio3"; name = "Containment Door"},/obj/structure/cable/pink,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/toxins/xenobiology)
"cjd" = (/obj/structure/disposaloutlet{dir = 1},/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/engine,/area/toxins/xenobiology)
"cje" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/explab)
"cjf" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/explab)
@@ -5935,10 +5935,10 @@
"ckg" = (/obj/machinery/atmospherics/pipe/simple/supplymain/visible{dir = 4},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/meter,/turf/simulated/floor/plasteel,/area/atmos)
"ckh" = (/obj/structure/table,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"cki" = (/obj/structure/table,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/reagent_containers/spray/plantbgone,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/maintenance/asmaint2)
-"ckj" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "xenobio1"; name = "Containment Door"},/obj/structure/cable/pink{d2 = 2; icon_state = "0-2"},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/toxins/xenobiology)
+"ckj" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "xenobio1"; name = "Containment Door"},/obj/structure/cable/pink{d2 = 2; icon_state = "0-2"},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/toxins/xenobiology)
"ckk" = (/obj/machinery/disposal/bin,/obj/structure/sign/electricshock{pixel_y = 32},/obj/structure/disposalpipe/trunk{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/toxins/xenobiology)
"ckl" = (/obj/structure/table/reinforced,/obj/structure/sign/electricshock{pixel_y = 32},/obj/machinery/button/door{id = "xenobio4"; name = "Containment Blast Doors"; req_access_txt = "55"},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/toxins/xenobiology)
-"ckm" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "xenobio4"; name = "Containment Door"},/obj/structure/cable/pink{d2 = 2; icon_state = "0-2"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/toxins/xenobiology)
+"ckm" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "xenobio4"; name = "Containment Door"},/obj/structure/cable/pink{d2 = 2; icon_state = "0-2"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/toxins/xenobiology)
"ckn" = (/obj/structure/table,/obj/item/device/radio/off,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/explab)
"cko" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/explab)
"ckp" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/explab)
@@ -5949,8 +5949,8 @@
"cku" = (/obj/machinery/door/airlock/glass{name = "Escape Hallway"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "neutral"},/area/hallway/primary/aft{name = "Aft Hallway"})
"ckv" = (/obj/machinery/door/airlock/glass{name = "Escape Hallway"},/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "neutralcorner"; dir = 4},/area/hallway/primary/aft{name = "Aft Hallway"})
"ckw" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 1; initialize_directions = 11},/turf/simulated/floor/plasteel,/area/atmos)
-"ckx" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel{dir = 8; icon_state = "yellow"},/area/atmos)
-"cky" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel,/area/atmos)
+"ckx" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel{dir = 8; icon_state = "yellow"},/area/atmos)
+"cky" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel,/area/atmos)
"ckz" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel,/area/atmos)
"ckA" = (/obj/structure/sign/atmosplaque{desc = "This plaque commemorates the rise of the LINDA administration at CentCom, and the advent of a new era."; name = "\improper LINDA plaque"; pixel_x = 32},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellow"},/area/atmos)
"ckB" = (/obj/machinery/light_switch{dir = 4; pixel_x = 22},/obj/structure/table/glass,/obj/item/weapon/storage/box/syringes,/turf/simulated/floor/plasteel{dir = 5; icon_state = "whitepurple"},/area/medical/genetics)
@@ -6006,11 +6006,11 @@
"clz" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/item/weapon/poster/contraband,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"clA" = (/obj/structure/table,/obj/machinery/chem_dispenser/drinks/beer,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"clB" = (/obj/structure/sink/kitchen{pixel_y = 32},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
-"clC" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "xenobio1"; name = "Containment Door"},/obj/structure/cable/pink,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/toxins/xenobiology)
+"clC" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "xenobio1"; name = "Containment Door"},/obj/structure/cable/pink,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/toxins/xenobiology)
"clD" = (/obj/structure/table/reinforced,/obj/machinery/button/door{id = "xenobio1"; name = "Containment Blast Doors"; req_access_txt = "55"},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/toxins/xenobiology)
"clE" = (/obj/machinery/processor{desc = "A machine used to process slimes and retrieve their extract."; name = "Slime Processor"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
-"clF" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "xenobio4"; name = "Containment Door"},/obj/structure/cable/pink,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/toxins/xenobiology)
-"clG" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/preopen{id = "telelab"; name = "test chamber blast door"},/turf/simulated/floor/plating,/area/toxins/explab)
+"clF" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "xenobio4"; name = "Containment Door"},/obj/structure/cable/pink,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/toxins/xenobiology)
+"clG" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "telelab"; name = "test chamber blast door"},/turf/simulated/floor/plating,/area/toxins/explab)
"clH" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/preopen{id = "telelab"; name = "test chamber blast door"},/turf/simulated/floor/engine,/area/toxins/explab)
"clI" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor/plasteel,/area/teleporter)
"clJ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/teleporter)
@@ -6090,7 +6090,7 @@
"cnf" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
"cng" = (/obj/structure/table/glass,/obj/item/weapon/stock_parts/micro_laser,/obj/item/weapon/stock_parts/micro_laser,/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = 5; pixel_y = -5},/obj/item/stack/cable_coil,/turf/simulated/floor/plasteel{icon_state = "whiteblue"},/area/toxins/lab)
"cnh" = (/obj/structure/table/reinforced,/obj/structure/sign/electricshock{pixel_y = 32},/obj/machinery/button/door{id = "xenobio5"; name = "Containment Blast Doors"; req_access_txt = "55"},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/toxins/xenobiology)
-"cni" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "xenobio5"; name = "Containment Door"},/obj/structure/cable/pink{d2 = 2; icon_state = "0-2"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/toxins/xenobiology)
+"cni" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "xenobio5"; name = "Containment Door"},/obj/structure/cable/pink{d2 = 2; icon_state = "0-2"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/toxins/xenobiology)
"cnj" = (/obj/machinery/r_n_d/experimentor,/turf/simulated/floor/engine,/area/toxins/explab)
"cnk" = (/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/engine,/area/toxins/explab)
"cnl" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8},/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/obj/machinery/camera{c_tag = "Escape Hallway Central"; dir = 4},/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 8},/area/hallway/secondary/exit)
@@ -6109,7 +6109,7 @@
"cny" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/turf/simulated/floor/plasteel,/area/atmos)
"cnz" = (/obj/item/clothing/shoes/sneakers/black{dir = 1},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"cnA" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/item/clothing/under/rank/clown/sexy,/obj/item/clothing/under/sexymime,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
-"cnB" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "Xenolab"; name = "Test Chamber Containment Door"},/obj/structure/cable/pink{d2 = 2; icon_state = "0-2"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 5},/area/toxins/xenobiology)
+"cnB" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "Xenolab"; name = "Test Chamber Containment Door"},/obj/structure/cable/pink{d2 = 2; icon_state = "0-2"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 5},/area/toxins/xenobiology)
"cnC" = (/obj/structure/table/reinforced,/obj/machinery/computer/security/telescreen{dir = 4; name = "Test Chamber Monitor"; network = list("Xeno"); pixel_y = 2},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warnwhite"},/area/toxins/xenobiology)
"cnD" = (/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
"cnE" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
@@ -6141,14 +6141,14 @@
"coe" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 6},/turf/simulated/floor/engine,/area/toxins/xenobiology)
"cof" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 4},/turf/simulated/floor/engine,/area/toxins/xenobiology)
"cog" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 4},/obj/structure/sign/electricshock{pixel_y = 32},/turf/simulated/floor/engine,/area/toxins/xenobiology)
-"coh" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 4},/obj/machinery/door/poddoor/preopen{id = "Xenolab"; name = "Test Chamber Containment Door"},/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/pink{d2 = 2; icon_state = "0-2"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/toxins/xenobiology)
+"coh" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 4},/obj/machinery/door/poddoor/preopen{id = "Xenolab"; name = "Test Chamber Containment Door"},/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/pink{d2 = 2; icon_state = "0-2"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/toxins/xenobiology)
"coi" = (/obj/structure/table/reinforced,/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 4},/obj/machinery/button/ignition{id = "Xenobio"; pixel_x = -6; pixel_y = -2},/obj/machinery/button/door{id = "Xenolab"; name = "Test Chamber Blast Doors"; pixel_x = 4; pixel_y = -2; req_access_txt = "55"},/obj/item/weapon/wrench,/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{dir = 8; icon_state = "warnwhite"},/area/toxins/xenobiology)
"coj" = (/obj/structure/bed/chair/office/dark{dir = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
"cok" = (/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 10},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
"col" = (/obj/machinery/smartfridge/extract,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
"com" = (/obj/structure/cable/pink{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/pink{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/general/visible,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
"con" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warnwhitecorner"},/area/toxins/xenobiology)
-"coo" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "xenobio5"; name = "Containment Door"},/obj/structure/cable/pink,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/toxins/xenobiology)
+"coo" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "xenobio5"; name = "Containment Door"},/obj/structure/cable/pink,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/toxins/xenobiology)
"cop" = (/obj/structure/closet/crate{icon_state = "crateopen"; opened = 1},/obj/machinery/light/small{dir = 4},/obj/effect/landmark/costume,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"coq" = (/obj/machinery/atmospherics/components/unary/heat_reservoir/heater{dir = 1; on = 1; tag = ""},/obj/machinery/camera{c_tag = "Atmospherics Mix"; dir = 1},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos)
"cor" = (/obj/effect/spawner/structure/window/reinforced,/obj/machinery/door/poddoor/shutters/preopen{id = "scimaintroom"},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
@@ -6157,7 +6157,7 @@
"cou" = (/obj/structure/table/reinforced,/obj/machinery/door/window/northleft{dir = 4; layer = 2.9; name = "Atmospherics Desk"; req_access_txt = "24"},/obj/item/weapon/folder/yellow,/obj/item/weapon/pen,/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel,/area/atmos)
"cov" = (/obj/effect/landmark/start{name = "Atmospheric Technician"},/obj/structure/bed/chair/office/dark{dir = 8},/turf/simulated/floor/plasteel,/area/atmos)
"cow" = (/obj/machinery/camera{c_tag = "Atmospherics Central East"; dir = 4},/obj/machinery/atmospherics/pipe/simple/cyan/visible,/turf/simulated/floor/plasteel,/area/atmos)
-"cox" = (/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warnwhite"},/area/toxins/xenobiology)
+"cox" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/plasteel{icon_state = "whiteblue"},/area/medical/medbay2)
"coy" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/simulated/floor/plasteel,/area/atmos)
"coz" = (/obj/structure/toilet{cistern = 1; desc = "The HT-451, a torque rotation-based, waste disposal unit for small matter. This one has a heart drawn on the cistern."; dir = 4},/obj/machinery/button/door{id = "barbath"; name = "Bolts Control"; normaldoorcontrol = 1; pixel_y = 25; req_access_txt = "0"; specialfunctions = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"coA" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible,/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{icon_state = "warning"},/area/toxins/mixing)
@@ -6196,20 +6196,20 @@
"cph" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellow"},/area/atmos)
"cpi" = (/obj/machinery/door/window/eastright{dir = 2},/turf/simulated/floor/plasteel,/area/atmos)
"cpj" = (/obj/machinery/light{dir = 8},/obj/machinery/atmospherics/pipe/simple/cyan/visible,/turf/simulated/floor/plasteel,/area/atmos)
-"cpk" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = 3; flipped = 0; on = 1},/turf/simulated/floor/plasteel,/area/atmos)
+"cpk" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = "n2"; flipped = 0; on = 1},/turf/simulated/floor/plasteel,/area/atmos)
"cpl" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/obj/machinery/meter,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel,/area/atmos)
"cpm" = (/obj/machinery/atmospherics/components/binary/pump{dir = 8; name = "To Mix"; on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/atmos)
"cpn" = (/obj/machinery/status_display,/turf/simulated/wall/r_wall,/area/toxins/mixing)
"cpo" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 6; initialize_directions = 6},/turf/simulated/floor/plasteel,/area/atmos)
"cpp" = (/obj/machinery/atmospherics/components/binary/pump{dir = 4; name = "Air to Mix"; on = 0},/turf/simulated/floor/plasteel,/area/atmos)
-"cpq" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = 4; flipped = 0; on = 1},/turf/simulated/floor/plasteel,/area/atmos)
-"cpr" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = 2; flipped = 0; on = 1},/turf/simulated/floor/plasteel,/area/atmos)
+"cpq" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = "o2"; flipped = 0; on = 1},/turf/simulated/floor/plasteel,/area/atmos)
+"cpr" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = "co2"; flipped = 0; on = 1},/turf/simulated/floor/plasteel,/area/atmos)
"cps" = (/obj/machinery/atmospherics/pipe/manifold/cyan/visible,/turf/simulated/floor/plasteel,/area/atmos)
"cpt" = (/obj/machinery/door/airlock/external{name = "Atmosphereics External Access"; req_access_txt = "24"},/turf/simulated/floor/plating,/area/atmos)
"cpu" = (/obj/effect/spawner/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"cpv" = (/mob/living/simple_animal/crab/Coffee,/turf/simulated/floor/engine,/area/toxins/xenobiology)
"cpw" = (/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = -29},/obj/structure/disposaloutlet{dir = 8},/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/engine,/area/toxins/xenobiology)
-"cpx" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "Xenolab"; name = "Test Chamber Containment Door"},/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/pink,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/toxins/xenobiology)
+"cpx" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "Xenolab"; name = "Test Chamber Containment Door"},/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/pink,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/toxins/xenobiology)
"cpy" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warnwhite"},/area/toxins/xenobiology)
"cpz" = (/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/components/binary/pump{dir = 1; name = "Gas Pump"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
"cpA" = (/turf/simulated/wall,/area/mine/explored)
@@ -6221,7 +6221,7 @@
"cpG" = (/obj/structure/bed/chair,/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/hallway/secondary/exit)
"cpH" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/obj/structure/bed/chair,/obj/structure/extinguisher_cabinet{pixel_y = 30},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/hallway/secondary/exit)
"cpI" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/bed/chair,/obj/effect/landmark/start{name = "Assistant"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/hallway/secondary/exit)
-"cpJ" = (/obj/item/weapon/reagent_containers/dropper,/turf/simulated/wall,/area/toxins/misc_lab)
+"cpJ" = (/obj/structure/table/glass,/obj/item/clothing/suit/straight_jacket,/obj/item/clothing/mask/muzzle,/obj/item/device/radio/intercom{frequency = 1485; name = "Station Intercom (Medbay)"; pixel_y = -29},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{icon_state = "whiteblue"},/area/medical/medbay2)
"cpK" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1},/obj/machinery/camera{c_tag = "Atmospherics Front Desk"; dir = 8},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellow"},/area/atmos)
"cpL" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/bed/chair,/obj/machinery/alarm{pixel_y = 24},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/hallway/secondary/exit)
"cpM" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/bed/chair,/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/hallway/secondary/exit)
@@ -6243,7 +6243,7 @@
"cqc" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 10; initialize_directions = 10},/turf/simulated/floor/plasteel,/area/atmos)
"cqd" = (/obj/effect/spawner/structure/window/reinforced,/turf/simulated/floor/plating/airless,/area/maintenance/portsolar)
"cqe" = (/turf/simulated/wall/r_wall,/area/maintenance/portsolar)
-"cqf" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "Xenolab"; name = "Test Chamber Containment Door"},/obj/structure/cable/pink,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 6},/area/toxins/xenobiology)
+"cqf" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "Xenolab"; name = "Test Chamber Containment Door"},/obj/structure/cable/pink,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 6},/area/toxins/xenobiology)
"cqg" = (/obj/structure/table/reinforced,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/glasses/science,/obj/item/clothing/glasses/science,/turf/simulated/floor/plasteel{dir = 8; icon_state = "warnwhite"},/area/toxins/xenobiology)
"cqh" = (/obj/structure/cable/pink{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 1},/turf/simulated/floor/plasteel{icon_state = "warnwhite"},/area/toxins/xenobiology)
"cqi" = (/obj/machinery/power/apc{name = "Xenobiology APC"; pixel_y = -25},/obj/structure/cable/pink,/obj/structure/table/glass,/obj/item/weapon/storage/box/beakers{pixel_x = 2; pixel_y = 2},/obj/item/weapon/storage/box/syringes,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
@@ -6304,7 +6304,7 @@
"crl" = (/obj/machinery/power/apc{dir = 4; name = "Aft Port Solar APC"; pixel_x = 23; pixel_y = 2},/obj/machinery/camera{c_tag = "Aft Port Solar Control"; dir = 1},/obj/structure/cable,/turf/simulated/floor/plating,/area/maintenance/portsolar)
"crm" = (/obj/machinery/door/airlock/external{name = "Escape Airlock"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/hallway/secondary/exit)
"crn" = (/obj/effect/spawner/structure/window/reinforced,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/hallway/secondary/exit)
-"cro" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/hallway/secondary/exit)
+"cro" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/hallway/secondary/exit)
"crp" = (/obj/machinery/door/airlock/external{name = "Shuttle Brig Airlock"; req_access_txt = "63; 42"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/hallway/secondary/exit)
"crq" = (/obj/structure/transit_tube{icon_state = "E-NW"},/turf/space,/area/space/nearstation)
"crr" = (/obj/structure/closet,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
@@ -6337,7 +6337,7 @@
"crS" = (/obj/structure/grille,/obj/structure/window/shuttle,/turf/simulated/floor/plating,/area/shuttle/transport)
"crT" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/atmos)
"crU" = (/obj/machinery/portable_atmospherics/canister/toxins,/turf/simulated/floor/engine{name = "plasma floor"; nitrogen = 0; oxygen = 0; toxins = 70000},/area/atmos)
-"crV" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent/roomfiller{valve_open = 1},/turf/simulated/floor/engine/n20,/area/atmos)
+"crV" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide/roomfiller{valve_open = 1},/turf/simulated/floor/engine/n20,/area/atmos)
"crW" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/simulated/floor/engine{name = "n2 floor"; nitrogen = 100000; oxygen = 0},/area/atmos)
"crX" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/solar/port)
"crY" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/solar/port)
@@ -6385,7 +6385,7 @@
"csO" = (/turf/simulated/wall/shuttle{icon_state = "swall13"; dir = 2},/area/shuttle/supply)
"csP" = (/turf/simulated/wall/shuttle{icon_state = "swall14"; dir = 2},/area/shuttle/escape)
"csQ" = (/turf/simulated/wall/shuttle{icon_state = "swall_s6"; dir = 2},/area/shuttle/escape)
-"csR" = (/obj/structure/window/shuttle,/obj/structure/grille,/turf/space,/area/shuttle/escape)
+"csR" = (/obj/machinery/light/small{dir = 1},/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/machinery/alarm{pixel_y = 23},/obj/machinery/atmospherics/components/unary/vent_pump,/turf/simulated/floor/plasteel,/area/maintenance/asmaint2{icon_state = "toxtest"; name = "Toxins Launch Room"})
"csS" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Airlock"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor2"},/area/shuttle/escape)
"csT" = (/turf/simulated/wall/shuttle{icon_state = "swall_s10"; dir = 2},/area/shuttle/escape)
"csU" = (/obj/structure/grille,/obj/structure/window/shuttle,/turf/simulated/floor/plating/airless,/area/shuttle/escape)
@@ -6394,7 +6394,7 @@
"csX" = (/turf/simulated/wall/shuttle{icon_state = "swall12"; dir = 2},/area/shuttle/escape)
"csY" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Airlock"; req_access_txt = "2"},/turf/simulated/floor/plasteel/shuttle/red,/area/shuttle/escape)
"csZ" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 8},/turf/simulated/floor/plating/airless,/area/shuttle/escape)
-"cta" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion"; dir = 4},/turf/space,/area/shuttle/escape)
+"cta" = (/obj/structure/cable/pink{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/turf/simulated/floor/plasteel,/area/maintenance/asmaint2{icon_state = "toxtest"; name = "Toxins Launch Room"})
"ctb" = (/obj/structure/ore_box,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor2"},/area/shuttle/escape)
"ctc" = (/turf/simulated/wall/shuttle{icon_state = "swall11"; dir = 2},/area/shuttle/escape)
"ctd" = (/obj/machinery/recharge_station,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor2"},/area/shuttle/escape)
@@ -6470,7 +6470,7 @@
"cuv" = (/turf/simulated/wall/shuttle,/area/shuttle/escape)
"cuw" = (/turf/space,/obj/machinery/porta_turret/syndicate,/turf/simulated/wall/shuttle{dir = 8; icon_state = "diagonalWall3"},/area/shuttle/syndicate)
"cux" = (/turf/simulated/wall/shuttle{icon_state = "wall3"},/area/shuttle/syndicate)
-"cuy" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters{id = "syndieshutters"; name = "blast shutters"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/shuttle/syndicate)
+"cuy" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters{id = "syndieshutters"; name = "blast shutters"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/shuttle/syndicate)
"cuz" = (/turf/space,/obj/machinery/porta_turret/syndicate,/turf/simulated/wall/shuttle{dir = 1; icon_state = "diagonalWall3"},/area/shuttle/syndicate)
"cuA" = (/obj/structure/table,/obj/machinery/microwave,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate)
"cuB" = (/obj/machinery/computer/shuttle/syndicate,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate)
@@ -6504,7 +6504,7 @@
"cvd" = (/obj/machinery/door/airlock/external{req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate)
"cve" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "EVA Storage"; req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate)
"cvf" = (/obj/structure/rack,/obj/item/clothing/suit/space/syndicate/black/red,/obj/item/clothing/head/helmet/space/syndicate/black/red,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate)
-"cvg" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/shuttle/syndicate)
+"cvg" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/shuttle/syndicate)
"cvh" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; freerange = 1; frequency = 1213; name = "Syndicate Intercom"; pixel_x = -32; subspace_transmission = 1; syndie = 1},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate)
"cvi" = (/obj/machinery/recharge_station,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate)
"cvj" = (/obj/structure/table,/obj/machinery/cell_charger,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate)
@@ -6561,11 +6561,11 @@
"cwi" = (/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 5},/turf/simulated/floor/plasteel,/area/atmos)
"cwj" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/obj/machinery/atmospherics/pipe/simple/cyan/visible,/turf/simulated/floor/plasteel,/area/atmos)
"cwk" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/simulated/floor/plasteel,/area/atmos)
-"cwl" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = 1; flipped = 0; on = 1},/turf/simulated/floor/plasteel,/area/atmos)
+"cwl" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = "plasma"; flipped = 0; on = 1},/turf/simulated/floor/plasteel,/area/atmos)
"cwm" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/obj/machinery/door/window/eastright{dir = 2},/turf/simulated/floor/plasteel,/area/atmos)
"cwn" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/obj/machinery/door/window/eastright{dir = 2},/obj/machinery/atmospherics/components/binary/pump{dir = 1; name = "O2 to Pure"; on = 0},/turf/simulated/floor/plasteel,/area/atmos)
"cwo" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/obj/machinery/atmospherics/pipe/simple/yellow/visible,/turf/simulated/floor/plasteel,/area/atmos)
-"cwp" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = 0; flipped = 0; on = 1},/turf/simulated/floor/plasteel,/area/atmos)
+"cwp" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = "n2o"; flipped = 0; on = 1},/turf/simulated/floor/plasteel,/area/atmos)
"cwq" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel,/area/atmos)
"cwr" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel,/area/atmos)
"cws" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 9},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel,/area/atmos)
@@ -6622,22 +6622,22 @@
"cxr" = (/obj/machinery/atmospherics/components/binary/valve{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/mixing)
"cxs" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 8},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/mixing)
"cxt" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 2; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/mixing)
-"cxu" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plating,/area/toxins/mixing)
+"cxu" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plating,/area/toxins/mixing)
"cxv" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"})
"cxw" = (/obj/structure/closet/secure_closet/chemical,/turf/simulated/floor/plating,/area/medical/cmo)
"cxx" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; external_pressure_bound = 140; on = 1; pressure_checks = 0},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/space)
"cxy" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/mixing)
"cxz" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/mixing)
-"cxA" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/toxins/mixing)
+"cxA" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/toxins/mixing)
"cxB" = (/obj/item/device/assembly/prox_sensor{pixel_x = -4; pixel_y = 1},/obj/item/device/assembly/prox_sensor{pixel_x = 8; pixel_y = 9},/obj/item/device/assembly/prox_sensor{pixel_x = 9; pixel_y = -2},/obj/item/device/assembly/prox_sensor{pixel_y = 2},/obj/structure/table/glass,/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 1},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurple"},/area/toxins/mixing)
"cxC" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"})
"cxD" = (/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"})
"cxE" = (/obj/structure/table/glass,/obj/item/weapon/hand_labeler,/obj/machinery/light_switch{dir = 1; pixel_x = -22; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/storage/art)
"cxF" = (/mob/living/carbon/monkey,/turf/simulated/floor/plasteel{icon_state = "whitepurple"},/area/medical/genetics)
"cxG" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/mixing)
-"cxH" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/toxins/mixing)
+"cxH" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/toxins/mixing)
"cxI" = (/obj/item/device/assembly/signaler{pixel_y = 8},/obj/item/device/assembly/signaler{pixel_x = -8; pixel_y = 5},/obj/item/device/assembly/signaler{pixel_x = 6; pixel_y = 5},/obj/item/device/assembly/signaler{pixel_x = -2; pixel_y = -2},/obj/structure/table/glass,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurple"},/area/toxins/mixing)
-"cxJ" = (/obj/machinery/light/small{dir = 1},/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/plasteel,/area/maintenance/asmaint2{icon_state = "toxtest"; name = "Toxins Launch Room"})
+"cxJ" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 1},/obj/structure/sign/deathsposal{pixel_y = 32},/turf/simulated/floor/plating,/area/maintenance/incinerator)
"cxK" = (/obj/machinery/power/apc{dir = 8; name = "Toxins Launch Room APC"; pixel_x = -25},/obj/structure/cable/pink{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/maintenance/asmaint2{icon_state = "toxtest"; name = "Toxins Launch Room"})
"cxL" = (/turf/simulated/floor/plasteel{icon_state = "warnwhite"},/area/toxins/mixing)
"cxM" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{icon_state = "warnwhite"},/area/toxins/mixing)
@@ -6646,7 +6646,7 @@
"cxP" = (/obj/structure/table/glass,/obj/structure/extinguisher_cabinet{pixel_y = -30},/obj/item/weapon/wrench,/obj/item/weapon/screwdriver,/turf/simulated/floor/plasteel{icon_state = "whitepurplecorner"},/area/toxins/mixing)
"cxQ" = (/obj/item/device/assembly/timer{pixel_x = 5; pixel_y = 4},/obj/item/device/assembly/timer{pixel_x = -4; pixel_y = 2},/obj/item/device/assembly/timer{pixel_x = 6; pixel_y = -4},/obj/item/device/assembly/timer,/obj/structure/table/glass,/obj/machinery/firealarm{dir = 1; pixel_x = -3; pixel_y = -24},/obj/machinery/light_switch{name = "light switch "; pixel_x = 11; pixel_y = -22},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{dir = 6; icon_state = "whitepurple"},/area/toxins/mixing)
"cxR" = (/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/asmaint)
-"cxS" = (/obj/structure/cable/pink{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/turf/simulated/floor/plasteel,/area/maintenance/asmaint2{icon_state = "toxtest"; name = "Toxins Launch Room"})
+"cxS" = (/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"})
"cxT" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable/pink{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/asmaint2{icon_state = "toxtest"; name = "Toxins Launch Room"})
"cxU" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable/pink{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"cxV" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 8},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/toxins/mixing)
@@ -6663,7 +6663,7 @@
"cyg" = (/obj/effect/landmark/start{name = "Chaplain"},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/turf/simulated/floor/carpet,/area/chapel/main)
"cyh" = (/obj/structure/table/glass,/obj/machinery/button/massdriver{id = "toxinsdriver"; pixel_x = 25},/obj/item/weapon/folder/white,/obj/item/weapon/pen,/turf/simulated/floor/plasteel,/area/maintenance/asmaint2{icon_state = "toxtest"; name = "Toxins Launch Room"})
"cyi" = (/obj/structure/sign/nosmoking_2{pixel_y = 32},/obj/structure/closet/firecloset,/turf/simulated/floor/plasteel{icon_state = "warnwhite"; dir = 5},/area/medical/research{name = "Research Division"})
-"cyj" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"})
+"cyj" = (/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/machinery/camera{c_tag = "Xenobiology Center"; dir = 8},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warnwhite"},/area/toxins/xenobiology)
"cyk" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/maintenance/asmaint)
"cyl" = (/obj/machinery/light{dir = 8},/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"})
"cym" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1},/obj/machinery/camera{c_tag = "Research Divison Access"; dir = 1; network = list("SS13","RD")},/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel{dir = 6; icon_state = "warnwhite"},/area/medical/research{name = "Research Division"})
@@ -6672,7 +6672,7 @@
"cyp" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable/pink{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/pink{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"})
"cyq" = (/obj/structure/cable/pink{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"})
"cyr" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "whiteredcorner"; dir = 4},/area/medical/research{name = "Research Division"})
-"cys" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"})
+"cys" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion"; dir = 4},/turf/simulated/floor/plating/airless,/area/shuttle/escape)
"cyt" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"})
"cyu" = (/turf/simulated/floor/plasteel{dir = 9; icon_state = "warnwhite"},/area/toxins/xenobiology)
"cyv" = (/obj/machinery/camera{c_tag = "Xenobiology North"; dir = 6; network = list("SS13","RD")},/turf/simulated/floor/plasteel{icon_state = "warnwhite"; dir = 5},/area/toxins/xenobiology)
@@ -6885,8 +6885,8 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaadaadaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaLHaLHaaeaaeaaeaaeaVcaVdaVeaQMaVfaQMaQMaVgaVhaViaViaVjaVkaVlaVmaVnaVoaQMaVpaQMaVqaVraVsaNoaNoaNoaVtaNoaNoaVuaVvaVwaTSblOaNoaVyaVzaVAaNsaNtaNuaJKaCdaDeaFZaSzaeHbmSaeHbmSbnQaeGaLaaLaaLaaRraRrbbsbhRaVCaVDaVDaVDaVDaVCaVDaVDaVCaTZaVEaVFaSIaVGaVHaSLaVIaVJaVKaVLaVMaVNaVOaVPaVQaVRaUqaVSaVTaVUaCdaVVaVWaVXaCdaVYaVZaWaaWbaWcaWdblRaWfaPoaWgaWhaQtaWiaLqaWjaWkaWlaWmaWmaWmaWnaLqaWoaFzaWpaWqaWraWsaWtaWuaWvaWwaWxaWsaWyaWzaWAaWBaWCaWDaTtaWEaVbaaaaaaaaaboHaeGaHHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaadaadaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaLHaLHaLHaaeaWFaaeaQLaQMaWGaOpaOpaOpaWHaJjaWIaWJaWKaJjaWLaQQaWMaWNaWOaQQaWPaWQaWRaWSaWTaRhaRhaRhaRhaRhaRhaRhaWUaWVaONaOObmGaWWaORaOSaWXaWYaHBaHCaCdaWZaXaaCdaeHbmSaeHbmSbnQaeHaaiaaiaXbaXcaXdaXebhUaVDaXgaXgaXgaVDaXgaXgaXgaVDaTZaXhaSIaSIaSIaSIaXiaSIaSIaSIaXjaXkaXlaXmaXnaXoaXpaUqaXqaXraXsaCdaXtaXuaXuaXvaXwaXxaXyaQpaQpaXzaQpaQpaPoaPoaPoaXAaPoaLqaLqaXBaLqaXCaXDaLqaLqaLqayRaFzaXEaXFaXFaRZaRZaXGaRXaRXaRXaRXaRXaRXaSaaXHaXIaWDaXJaXKaVbaVbaVbaeGboHaeGaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaadaadaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaLHaLHaLHaaeaXLaaeaQLaXMaXNaXOaXPaXQaXRaJjaJjaJjaJjaJjaXSaOpaXTaXUaXVaXWaJjaXXaXYaJjaXZaYaaYbaYcaYdaYeaYfaYfaYgaYhaQabmNaMcaMcaMcaQcaMaaYjaYkaYlaCdaDcaDeaCdaeHbnPaeHbnPbnQaeHaaaaaiaYmaRraYnaYoaYpaVDaXgaVDaVDaVDaVDaVDaXgaYqaTZaYraYsaNzaNzaYtaYuaYvaYwaSIaSIaYxaSLaYyaYzaYAaYBaUqaYCaCdaCdaCdaYDaPraCdaCdaYFaYGaYHaYIaYJaYKaYLbqObvHaYOaPoaYPaYQaYRaYSaYTaYUaYQaYQaYVaYWaPoayRaFzaWpaYXaFzaYYaYZaZaaZbaZcaZdaZeaZfaZgaSaaZhaZiaWDaQDaZjaZkaZlaVbaeHboHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaadaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaLHaLHaLHaaeaaeaQLaZmaZnaZoaZpaZqaZraJjaZsaZtaTDaLOaZuaOpaZvaZwaZwaZwaZwaZwaZwaZwaZwaZwaZxaZxaZyaZyaZyaZyaZzaZAaZBbeSaZDaZEaZFaZGaZHaZIaZJaZKaCdaDcaDeaCdaeHbmSaeHbmSbnQaeHaaaaaiaYmaRraYnaYoaYpaVDaXgaZLaUaaUbaUcaVDaXgaVDaTZaYraYsaZMaZNaZOaZPaVOaZQaZRaSIaZSaZTaZUaZVaZWaZXaZYaZZbaababbacbadbaebafbagbahaxRbaibajbakbalbambanbanbaobapbaqbaqbaqbaqbarbaqbaqbaqbaqbaqbasbataFzaWpbaubavbawbwQbaybazbazbaAbyEbaCbazaSabaDbaEbaFbaGbaHbaIbaJaVbaeHboHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaLHaLHaLHaLHaaeaPGbaKaOpbaLbaMbaNaPKbaObaPaPKaPKbaQaPLaPKbaRaZwbaSbaSbaTbaUbaVbaWbaWaZwbeObaYbaZbbabbbaZybbcbbdbbebbfbbgbbhbbhbbibbjbbkbblbbmaCdaDeaEfaCdaeGboGaeGboGbpxaeGaaiaHFaLabboczlczkczmaVCaVDaVDaSCcznaTZaVDaVDaVCaTZaYraYsaNzbbtbbubbvbbwaVNbbxbbybbzbbAbbBbbCbbDbbEbbFbbGbbHbbIbbJbbKbbIbbLbbGbbMbbNbbObajbakbanbbPbbQbbRbanbbSaYQaYQaYQbbTbyFaYQaYQaYQbbWbbXaPobbYaIUbbZbcabcbaYYbccbcdbazbcebazbaCbcfbcgbchbcibcjbckbclbcmbcnbcoaVbaeGboHaeHaeHaaaaaaaaaanWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaadaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaLHaLHaLHaaeaaeaQLaZmaZnaZoaZpaZqaZraJjaZsaZtaTDaLOaZuaOpaZvaZwaZwaZwaZwaZwaZwaZwaZwaZwaZxaZxaZyaZyaZyaZyaZzaZAaZBbeSaZDaZEaZFaZGaZHaZIaZJaZKaCdaDcaDeaCdaeHbmSaeHbmSbnQaeHaaaaaiaYmaRraYnaYoaYpaVDaXgaZLaUaaUbaUcaVDaXgaVCaTZaYraYsaZMaZNaZOaZPaVOaZQaZRaSIaZSaZTaZUaZVaZWaZXaZYaZZbaababbacbadbaebafbagbahaxRbaibajbakbalbambanbanbaobapbaqbaqbaqbaqbarbaqbaqbaqbaqbaqbasbataFzaWpbaubavbawbwQbaybazbazbaAbyEbaCbazaSabaDbaEbaFbaGbaHbaIbaJaVbaeHboHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaLHaLHaLHaLHaaeaPGbaKaOpbaLbaMbaNaPKbaObaPaPKaPKbaQaPLaPKbaRaZwbaSbaSbaTbaUbaVbaWbaWaZwbeObaYbaZbbabbbaZybbcbbdbbebbfbbgbbhbbhbbibbjbbkbblbbmaCdaDeaEfaCdaeGboGaeGboGbpxaeGaaiaHFaLabboczlczkczmaVCaVDaVDaSCcznaTZaVDaVDaVDaTZaYraYsaNzbbtbbubbvbbwaVNbbxbbybbzbbAbbBbbCbbDbbEbbFbbGbbHbbIbbJbbKbbIbbLbbGbbMbbNbbObajbakbanbbPbbQbbRbanbbSaYQaYQaYQbbTbyFaYQaYQaYQbbWbbXaPobbYaIUbbZbcabcbaYYbccbcdbazbcebazbaCbcfbcgbchbcibcjbckbclbcmbcnbcoaVbaeGboHaeHaeHaaaaaaaaaanWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaLHaLHaLHaLHaIiaIibcpbcqbcrbcsbctaJjaWIaWJaWKaJjbcubcvbcwaZwbcxbcybczbcybcybcybcybcAbcBbcCbcDbcEbcFbcGbcHbcIbcJbeTbcLbcMbcMbcNbcObcPaNuaJKaCdaDeaFZaSzaeHbmSaeHboGbnQaeHaaaaaiaYmaRraYnaYoaYpaVDaXgaVDbcQcztbcRaVDaXgaVDaTZaYraYsaNzbcSbcTaSLaSLbcUbcVaSIbcWbcXbcYbcZbdabdbbdcbddbdebdfbdgbdhbdibdjbdkbdlayebbObajbakbdmbdnbakbdmbyGaPobdpbdqbdrbdsbdtbdubdvbaqbdwbdxbdybdzaEBbbZbaubdAaRZbdBbdCbazbazbdDbdEbaCbdFaSabdGbdHbdIbdJbdKbdLbdMaVbaeHboHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaLHaLHaLHaLHaIiaIiaIiaIiaIiaIiaJjaJjaJjaJjaJjbdOaOpbdPaZwbdQbcybdSbdRbdTbdUbdVbdWbdXbdYbdZbeabebbecaPYbedbeeaMabefbegbefaQcaMabbkaHBaHCaCdaDeaFZaSzaeHbnPaeHbnPbnQaeHaaaaaiaYmaRraYnaYoaYpaVDaXgaVDaVDaVDaVDaVDaXgaVDaTZaYraYsaNzaNzbehbeibejbekaSIaSIbelbembenbeobepbeqaLaberaSIaSIbesbetbeuaSIaSIbevayebbObanbanbajbewbajbajbyHaPoaPoaPobeybeybezaPoaPoaYQbyIbeAaPobeBaUKbeCbeDbeEbeFbeGbdCbazbeHbeIbeJbyJbeLaSabeMbeNbpBbePaQDbcnbeQaVbaeHboHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaLHaLHaLHbiGbiGbiGbgibghbgjbeUbeVbeWbeXaJjaSlaOpbeYaZwbeZbcybfabfbbfbbfbbfbbfcbfdbfebffbfgbfhbfibfjbfkbflbfmaNobfnaNobfobfpbfqaHBaHCaCdaDeaFZaSzaeHbmSaeHbmSbnQaeHaaiaaiaXbbfrbfsbftaYpaVDaXgaXgaXgaVDaXgaXgbfuaVDaTZaXhaSIaSIaSIaSIbfvaSIaSIaSIbfwbfxbembfybfzbfAbfBaSIbfCaSIbfDbfEbfFbfGbfHbfIbfJayebbObanbfKbfLbfMbfNbfNbfNbfNbfObfPbfQbfRbfSbfTaPobfUbfVbfWaPobfXaHbbfYaXFaXFaRZaRZbfZaRXaRXaRXaRXaRXaRXaSabgabgbbgcbgdbgebgfbggaVbaeGboHaeGaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -6905,47 +6905,47 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaadaadaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaMaaMaaMaaMaaMaaMabnGbnKbqKbqLbqMbqNbzJbqPbqMbqQbqRbqSaNubqTbqUbqVbqWbqWbqXbqYaJPcwMaeGaeHaeHaeHaeHaeHaeGaHHaeHaeHaeHaeHaeHaeHaeGaeHaeHaeHaTwcrqaKYaMeaMeaKZaKYaMeaMeaKZaNwaMeaMeaMeaNwaMecseaIFbrabrabrabraaCdaUqbrbaCFbrcaUxbrdbpCbrebrfbrgbrhbpCbribrjbrkbrlbrmbqzbqxbpCbrnbrobpCbrpbpCbrqaHbbrrbkQaeHaeHaeHaeHaeHaeHaeHbkRbqJapjbrsbrtbrubrubrubrubrubrtaeGaeGbnQaeHaeHaeGaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaadaadaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbrwbrxbrybrzbnIbrAbrBbrCbrDbqfbqfbrEbrFbnKbrGbrHbfqaHBbrIbrJbrKbrLbrMbrNbrOcwQcwNaeGaeHaIyaIyaIyaeHaeGaeGaeHaeHaIyaIyaeHaeGaeGaeHaeHaeHaeHaeHaeGaHHaeGaeGaeGaeHaeHaeGaeHaeHaeHaeHaeHaeHaTwcrqbrRbrSbrTbrUaCdaCdbqraCFboOaPlbrVbpCbrWbrXbpDbpCbpCbpCbpCbpCbpCbpCbpCbpCbpCbpCbrYbpCbpCbpCbrZaFzbsabrsbrsbrsbrsbrsbrsbrsbrsbrsbsbbrsbrsbrtbrubrubrubrubscbrtaeGbnQbnQaeHaeHaeGaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaadaadaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbsdbsebsebsfbnIbsgboxbshbsibsjbskbslbskbskbnIbnIbsmaHBbsnaCdbsoaCdaCdaCdaCdaCdaCdaCdbspbspbspaCdaCdaCdaCdbspbspbspaCdaCdaCdaCdaCdbspbspbspaCdaCdaCdaCdbspbspbspaCdaCdaCdaCdaCdaCdbsqbsqbsqbsqbsrbssbstbsuaCdbsvbswaCFbkFayebrVbpCbsxbsybszbsybsAbsBbsCbsDbQKbsFbsGbsHbsybsIbsybsJbsKbpCbpGaFzbsLbsMbsNbsObsPbsQbsRbsSbsTbsTbsUbsTbsVbrtbrubrubrubrubrubrtaeHbnQaeHaeGaeGaHHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbrvbrvbrvbsWbrvbnIbsXboxbsYbsZbpqbtabtbbtbbtbbtcbtdbteaHBaHCaCdaDeaDeaDeaDeaDeaDeaDeaXabswbswbswbtfbhPbhPaXabswbswbswbtfaDcbtgaDeaXabswbswbswbtfaDeaDeaXabswbswbswbtfaDeaDeaDeaDebthbtibtjbtibtibtkbtlbtmbtnaCdbtoaDeaCFboOaVZaErbtpbtqbtrbtsbttbtrbtubttbtrbttbttbtrbtrbttbttbttbtvbtwbtxbtybtzbtAbrsbtBbtCbtDbtEbtFbtGbtHbtIbtJbsTbtKbtLbrubrubrubrubrubrtaeHbnQaeHaeHaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbtMbsebrvbsebtNbnIbnGbtObnIbsZbnKbtabtabtPbtabnKbnIbtQbtRbtSaCdbtTbtUbtTaCdaCdaCdaCdbtVbtWaSyaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDebtXbtYaDeaDeaDeaDebtZaVWbuaaCdbrabrabrabubbtibucbudbtibthaDeaDeaCFbkFaJZbuebufbugbuhbuibujbuhbuibujbuhbukbujbuhbulbumbunbuobupbuqburbusbutbuubuvbuwbuxbuybuzbuAbuBbuBbuCbsTbuDbuEbrtbrubrubrubrubrubrtaeHbnQaeHaeHaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbuFbuGbuHbuIbuJbnIbuKbnIbnIbuLbnIbnIbnIbnIbnIbnIbnIbuMbuNbuOaCdaCdaCdaCdaCdbuPbuPaCdaCdaCdaCdbuQaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdbuRaCdaCdaCdbuPbuPbrabrabuSbuTbuUbraaCdaCdaCdaCFbuVbuWbuXbpCbuYbuZbvabvbbuZbvcbvbbvdbvabvbbvebvfbsybvgbsybvhbvibpCbvjbvkbvlbvmbsTbsTbsTbvnbvobuBbuBbvpbsTbvqbvrbrtbrubrubrubrubrubrtaeHbnQaeHaeHaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbrvbrvbrvbsWbrvbnIbsXboxbsYbsZbpqbtabtbbtbbtbbtcbtdbteaHBaHCaCdaDeaDeaDeaDeaDeaDeaDeaXabswbswbswbtfbhPbhPaXabswbswbswbtfaDcbtgaDeaXabswbswbswbtfaDeaDeaXabswbswbswbtfaDeaDeaDeaDebthbtibtjbtibtibtkbtlbtmbtnaCdbtoaDeaCFboOaVZaErbtpbtqbtrbtsbttbtrbtubttbtrbttbttbtrbtrbttbttbttbtvbtwbtxbtybtzbtAbrsbtBbtCbtDbtEbtFbtGbtHbtIbtJbsTbtKbtLbrubrubrubrubrubrtaeHbnQaeHaeGaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbtMbsebrvbsebtNbnIbnGbtObnIbsZbnKbtabtabtPbtabnKbnIbtQbtRbtSaCdbtTbtUbtTaCdaCdaCdaCdbtVbtWaSyaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDebtXbtYaDeaDeaDeaDebtZaVWbuaaCdbrabrabrabubbtibucbudbtibthaDeaDeaCFbkFaJZbuebufbugbuhbuibujbuhbuibujbuhbukbujbuhbulbumbunbuobupbuqburbusbutbuubuvbuwbuxbuybuzbuAbuBbuBbuCbsTbuDbuEbrtbrubrubrubrubrubrtaeHbnQaeHaeGaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbuFbuGbuHbuIbuJbnIbuKbnIbnIbuLbnIbnIbnIbnIbnIbnIbnIbuMbuNbuOaCdaCdaCdaCdaCdbuPbuPaCdaCdaCdaCdbuQaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdbuRaCdaCdaCdbuPbuPbrabrabuSbuTbuUbraaCdaCdaCdaCFbuVbuWbuXbpCbuYbuZbvabvbbuZbvcbvbbvdbvabvbbvebvfbsybvgbsybvhbvibpCbvjbvkbvlbvmbsTbsTbsTbvnbvobuBbuBbvpbsTbvqbvrbrtbrubrubrubrubrubrtaeHbnQaeHaeHaeHaeGaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbvsbvtbvubvvbvwbvxbvybvzbvzbvAbvBbvCbvDbvEbvFbvGbzKbvIbvJbvKbvLbRGbvMbvMbvNbvObvObvPbvQbvMbvMbvMbvMbvRbvSbvMbvMbvMbvTbvUbvVbvWbvXbvMbvMbvTbvMbvRbvLbvYbvZbwabwbbvMbvRbwcbwdbvMbvMbwebvObvObwfbvMbwgbwhbwibwjbwkbwlbvMbwmbwnbuNbwobpCbwpbrWbpCbwqbrWbpCbwrbrWbpCbwsbrWbpCbwtbwubwvbwwbwvbpCbwxbnYbwybrsbwzbsTbsTbsTbwAbwBbwCbwDbsTbsTbwEbtLbrubrubrubrubrubrtaeHbnQaeHaeHaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbwFbwGbrvbwHbwIbwJbwKbwKbwKbwKbwLbwMbwNbwObwPbwPbzLbwRbwSbwTbwUbwTbwTbwTbwTbwTbwVbwWbwTbwTbwTbwTbwTbwTbwUbwTbwTbwTbwXbwTbwYbwZbxabxbbxcbwXbwTbwTbwUbxdbwTbxebwTbwTbwTbxfbxgbxbbxbbxbbxbbxbbxhbxbbxibxjbwTbwTbxdbxebwTbxebwTbxkbxlbpCbxmbxnbpCbxobxnbpCbxpbxnbpCbxqbxnbpCbwvbwubwvbwwbxrbpCbxsbiobxtbxubxvbxwbxxbxxbxybxzbxxbxAbxBbsTbwEbrtbrubrubrubrubrubrtaeHbnQaeHaeGaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbrvbrvbrvbrvbxCbxDbrvbrvbrvbsebvBbxEbxFbxGbxHbxIbvBbxJbxKbxLbxLbxLbxLbxLbxMbxLbxNbxLbxLbxObxLbxPbxQbxQbxQbxQbxRbxSbxTbSkbxUbxVbxWbSybxYbxZbxXbxXbxXbyabxXbybbxXbxXbycbxXbydbxXbxXbxXbxXbxXbSJbyebyfbygbyhbyhbyibyfbyhbyfbyhbyjbykbpCbylbymbpCbylbynbpCbylbyobpCbylbypbpCbyqbyrbyqbwwbysbpCbytbyubyvbrsbrsbrsbrsbrsbrsbrsbrsbrsbrsbywbwEbrtbrubrubrubrubscbrtaeHbnQaeHaeGaeGaeGaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbsebyxbyybrvbyzbrvbsebvBbyAbyBbyCbxHbyDbzNbzMbzQbzObzTbzSbzNbzUbzNbzNbAPbzNbzNbzNbAQbAQbAVbAVbAQbAQbAQbAQbAQbAQbyQbyRbySbyTbyUbyTbyTbyTbyTbyVbyTbyWbyXbyYbyYbyYbyYbyYbyYbyYbyYbyYbyZbzabzbbzcbzdbzdbzebzfbzdbzfbzgbzabyZbzhbzhbzhbzhbzhbzhbzhbzhbzhbzhbzhbzhbzhbzhbzibpCbzjbzkbzkbzlbzmbznbzkbzobzpbzqaRYbzkbzsbztbzubzkbAXbzwbrtbrubrubrubrubrubrtaeGbnQaeHaeHaHHaeGaHHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbzxbzybzzbrvbzAbrvbsebvBbAYbzCbzDbzDbzEbBabAZbBcbBbbBbbBbbBebBdbzNbBhbDlbBgbBibzNbBkbBjbCjbBlbClbCkbCnbCmbCobAQbCqbzVbzWbyTbzXbzYbzZbAabAbbAcbyTbAdbAebyYbAfbAgbAhbAibAjbAkbAjbyYbAlbAmbAnbAobApbApbAqbArbApbArbApbAsbAtbzhbzGbAvbAwbzhbAxbAybAzbAAbABbACbADbAEbAFbAGbAHbAIbzkbzrbAubAJbAKbALbzobAMbzobANbzkbAObCvbCsbzkbrsbrsbrsbrsbrsbrsbrsbrsbrsaeHbnQaeHaeHaeHaeHaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbrvbrvbrvbrvbyzbrvbsebvBbARbASbATbxHbAUbzNbCwbDibDhbDhbDhbDkbDjbzNbEqbDnbDmbDobzNbDqbDpbDsbDrbDtbCkbDwbDubDxbAQbEkbBmbBnbyTbBobBpbBqbBpbBrbBsbyTbBtbBubyYbBvbBwbBxbBybAjbAjbBzbyYbApbApbBAbBBbApbApbBCbBDbBEbBFbBGbBHbBIbBJbBKbBLbBMbBNbBObBPbBQbBRbBSbBTbBUbBTbBVbBWbBXbAebzkbBYbBZbCabAKbzobzobCbbCcbzobCdbAObAObCebzkaabaabaabaabaabaabaabaaeaeGaeHbnQaeHaeHaeHaeHaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbrvbrvbsebvBbCfbCgbvBbChbCibzNbElbEmbElbEnbEnbEpbEnbzNbFAbDnbDmbHdbzNbEsbErbEubEtbDtbCkbExbEwbEybAQbCxbBmbCybCzbCAbBpbBpbBpbBpbCBbyTbCCbCDbyYbCEbCFbBxbCGbAjbAjbAjbyYbCHbBEbCIbCJbCJbCJbCKbCLbCMbCMbCNbArbCObzhbCPbCQbCRbzhbCSbCTbCUbAAbCVbBTbCWbBTbCXbzhbCYbAebzkbCZbBZbCabDabDbbzobDcbDdbDebzkbzkbzkbzkbzkaaeaabaabaabaabaabaabaaebnQbnQbnQaeHaeHaeHaeHaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbsebDfbyxbDgbzNbFpbEzbFrbFqbFtbFsbFvbFubFxbFwbFzbFybDnbDmbHfbzNbFCbFBbFCbFEbFGbFGbFCbFCbFCbAQbCxbBmbBnbDAbDBbBpbBpbBpbBpbBpbDCbCCbDDbyYbyYbyYbDEbyYbyYbyYbyYbyYbDFbApbDGbDHbDIbDJbDJbDKbDIbDLbDMbDNbDObDPbDQbBTbDRbzhbAxbCTbCUbAAbDSbDTbDUbDVbDWbzhbDXbAebzkbDYbDZbEabEbbEcbEdbEcbEcbEebEebEfbEgbEhbzkaaeaaeaabaabaabaabaaeaaeaeHaeGaeGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbEibEjbvAbDgbzNbFJbFHbFHbFHbFSbFKbGkbGkbGkbGkbGmbGlbHcbHbbUrbzNbUtbHebHhbHgbHjbHibHkbHibHmbHlbHpbBmbBnbyTbEAbEBbBpbBpbECbEDbyTbCCbEEbyYbEFbEGbEHbEIbEJbEKbELbEMbAqbApbDGbENbEObEPbApbEQbERbESbDMbETbEUbzhbEVbBTbEWbzhbAxbEXbEYbEZbFabFbbFcbFdbFebzhbFfbAebzkbFgbBZbCabFhbFibzobFibFibFjbzobFkbzobzobFlaaeaaeaaeaabaabaaeaaeaaeaeHaHHaHHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbzxbzybzzbrvbzAbrvbsebvBbAYbzCbzDbzDbzEbBabAZbBcbBbbBbbBbbBebBdbzNbBhbDlbBgbBibzNbBkbBjbCjbBlbClbCkbCnbCmbCobAQbCqbzVbzWbyTbzXbzYbzZbAabAbbAcbyTbAdbAebyYbAfbAgbAhbAibAjbAkbAjbyYbAlbAmbAnbAobApbApbAqbArbApbArbApbAsbAtbzhbzGbAvbAwbzhbAxbAybAzbAAbABbACbADbAEbAFbAGbAHbAIbzkbzrbAubAJbAKbALbzobAMbzobANbzkbAObCvbCsbzkbrsbrsbrsbrubrubrubrubrubrsaeHbnQaeHaeHaeHaeHaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbrvbrvbrvbrvbyzbrvbsebvBbARbASbATbxHbAUbzNbCwbDibDhbDhbDhbDkbDjbzNbEqbDnbDmbDobzNbDqbDpbDsbDrbDtbCkbDwbDubDxbAQbEkbBmbBnbyTbBobBpbBqbBpbBrbBsbyTbBtbBubyYbBvbBwbBxbBybAjbAjbBzbyYbApbApbBAbBBbApbApbBCbBDbBEbBFbBGbBHbBIbBJbBKbBLbBMbBNbBObBPbBQbBRbBSbBTbBUbBTbBVbBWbBXbAebzkbBYbBZbCabAKbzobzobCbbCcbzobCdbAObAObCebzkaabaabbrsbrsbrsbrsbrsbrsbrsaeHbnQaeHaeHaeHaeHaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbrvbrvbsebvBbCfbCgbvBbChbCibzNbElbEmbElbEnbEnbEpbEnbzNbFAbDnbDmbHdbzNbEsbErbEubEtbDtbCkbExbEwbEybAQbCxbBmbCybCzbCAbBpbBpbBpbBpbCBbyTbCCbCDbyYbCEbCFbBxbCGbAjbAjbAjbyYbCHbBEbCIbCJbCJbCJbCKbCLbCMbCMbCNbArbCObzhbCPbCQbCRbzhbCSbCTbCUbAAbCVbBTbCWbBTbCXbzhbCYbAebzkbCZbBZbCabDabDbbzobDcbDdbDebzkbzkbzkbzkbzkaaeaabaabaabaabaabaabaaeaeGaeGbnQaeHaeHaeHaeHaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbsebDfbyxbDgbzNbFpbEzbFrbFqbFtbFsbFvbFubFxbFwbFzbFybDnbDmbHfbzNbFCbFBbFCbFEbFGbFGbFCbFCbFCbAQbCxbBmbBnbDAbDBbBpbBpbBpbBpbBpbDCbCCbDDbyYbyYbyYbDEbyYbyYbyYbyYbyYbDFbApbDGbDHbDIbDJbDJbDKbDIbDLbDMbDNbDObDPbDQbBTbDRbzhbAxbCTbCUbAAbDSbDTbDUbDVbDWbzhbDXbAebzkbDYbDZbEabEbbEcbEdbEcbEcbEebEebEfbEgbEhbzkaaeaaeaabaabaabaabaaeaaecxebnQbnQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbEibEjbvAbDgbzNbFJbFHbFHbFHbFSbFKbGkbGkbGkbGkbGmbGlbHcbHbbUrbzNbMwbHebHhbHgbHjbHibHkbHibHmbHlbHpbBmbBnbyTbEAbEBbBpbBpbECbEDbyTbCCbEEbyYbEFbEGbEHbEIbEJbEKbELbEMbAqbApbDGbENbEObEPbApbEQbERbESbDMbETbEUbzhbEVbBTbEWbzhbAxbEXbEYbEZbFabFbbFcbFdbFebzhbFfbAebzkbFgbBZbCabFhbFibzobFibFibFjbzobFkbzobzobFlaaeaaeaaeaabaabaaeaaeaaeaeGaHHaHHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbFmbvAbFnbFobDgbzNbImbIjbInbFvbEobIobJqbJmbKnbJrbKqbKobKubKtbKvbzNbLBbLAbLDbLCbMqbMobMxbMwbNDbMybNEbBmbFLbyTbFMbFNbFObFPbFQbFRbNFbCCbCDbyYbFTbCFbBwbFUbFVbFWbFXbEMbAqbApbDGbENbApbApbApbArbApbFYbDMbETbFZbyZbyZbyZbyZbyZbyZbyZbGabzhbzhbGbbzhbzhbzhbzhbGcbAebzkbGdbBZbCabGebBZbBZbBZbBZbzobzobGdbGdbzobFlaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGfbGgbGhaabaabaacaacaacaacaacaacaacaacaacaacaacaacaadaadaadaadaadaadaadaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbrvbxDbrvbrvbGibGjbzNbzNbzNbzNbNGbzNbzNbzNbzNbzNbzNbzNbzNbNJbNIbNJbzNcpJbFCcpJbFCbFCbAVbNLbAVbAQbAQbGobBmbGpbyTbyUbyTbyTbyTbyTbyTbyTbGqbGrbyYbGsbBwbBwbGtbGubGvbELbEMbBCbGwbGxbzabzgbzgbGybzbbzgbzabGzbGAbGBbGCbyZbGDbGEbGEbGFbyZbGGbGHbGIbGJbGKbGLbGMbzhbCYbAebzkbGNbBZbCabGObGPbzobGQbGQbzobGRbzrbzrbGSbFlaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGfbGgbGhaabaabaacaacaacaacaacaacaacaacaacaacaacaacaadaadaadaadaadaadaadaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbrvbxDbrvbrvbGibGjbzNbzNbzNbzNbNGbzNbzNbzNbzNbzNbzNbzNbzNbNJbNIbNJbzNbFCbFCbFCbFCbFCbAVbNLbAVbAQbAQbGobBmbGpbyTbyUbyTbyTbyTbyTbyTbyTbGqbGrbyYbGsbBwbBwbGtbGubGvbELbEMbBCbGwbGxbzabzgbzgbGybzbbzgbzabGzbGAbGBbGCbyZbGDbGEbGEbGFbyZbGGbGHbGIbGJbGKbGLbGMbzhbCYbAebzkbGNbBZbCabGObGPbzobGQbGQbzobGRbzrbzrbGSbFlaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGTbGUbGVaabaabaabaabaabaabaacaacaacaacaacaacaacaadaadaabaabaabaabaabaabaadaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbGWbGXbGYbrvbGibGjbGZbHabsdbrvbsebsebsebOCbsdcqjbOEbOFbrvbOHbOGbOJbOIbOKbTDbPwbTDbPxbIpbVCbIpbPybIqbGobBmbHqbHrbHsbHtbHubHvbHwbHxbHubCCbAebyYbHybBwbBwbBwbHzbHAbELbEMbAqbApbHBbHCbHDbHEbHFbHGbHHbzgbHIbETbApbHJbHKbHLbHMbHNbHObHPbHQbBLbHRbBLbBLbHSbHTbzhbHUbAebzkbHVbBZbHWbHXbHYbHYbHYbHYbHZbGRbzrbIabGSbFlaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIbbIcbIdbGhbIebIebIebIebIeaabaabaabaadaadaadaadaadaadaabaabaabaaebIfaabaabaabaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbIgbsebGibIhbGibGjbIibsebsebrvbPzbRybRybPAbRybRybRybRybPBbPRbPQbQzbQwbQCbQAbPRbPRbQDbUBcghcarbQEbHnbHobQFbIsbItbIubIvbIwbIxbIybIzbHubCCbAebIAbBwbBwbBwbBwbHzbHAbELbEMbAqbApbIBbzgbICbIDbIEbIFbIGbzgbHIbIHbApbHJbIIbIJbIKbILbIMbINbIObIPbIQbIRbBTbBTbISbzhbHUbAebzkbITbBZbIUbIVbIWbzobIWbzobzobGRbIXbIYbGSbFlaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIZbJabGUbJbbJcbIebJdbJebJfbIeaabaabaabaabaabaabaabaabaabaabaabaaebJgaaeaaeaabaabaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbJhbIkbJibJjbJkbJlbsebsebRzbrvbJncobbRCbRCbRCbRCbRCbJobJobJobJpbREbRDbJobGnbGnbRFbYUbYTbRFbGnbGnbGnbJsbBmbGpbHrbJtbJubJvbJwbJxbJybHubCCbAebyYbJzbBwbJAbJBbJCbJDbJEbJFbJGbJHbJIbyZbJJbJKbJLbJMbJNbyZbHIbETbApbJObyZbJPbIKbApbHJbJQbJRbJSbIQbBTbBTbBTbBTbJTbHUbAebzkbJUbzrbGSbJVbJWbJWbJXbzobzobzobDYbDYbzobFlaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGhbJYbJZbKabKbbKcbKdbKebIeaabaabaabaabaabaabaabaabaabaabbKfbKfaaebKgaaeaabaabaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbrvbrvbrvbrvbrvbGibGjbKhbKibMtbrvbJnbsebRCbSAbSzbSBbJobSCbKrbKsbSDbSGbSFbJobSIbTobTobTwbTvbzPbzPbzRbTxbTzbBmbGpbHrbKwbKxbHubHubHubHubHubKybKzbKAbKBbKCbKCbKCbKDbKEbKFbyZbKGbKHbKIbyZbKJbKKbKLbKMbKNbyZbyZbKObKPbyZbyZbKQbKRbKSbKTbJQbKUbKVbKWbKXbKYbKZbLabzhbHUbAebzkbGRbIYbGSbzobLbbLcbLdbzrbLebLfbzobzobLgbzkaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaanWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGhbJYbJZbKabKbbKcbKdbKebIeaabaabaabaabaabaabaabaabaabaabbKfbKfaaebKgaaeaabaabaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbrvbrvbrvbrvbrvbGibGjbKhbKibMtbrvbJnbsebRCbSAbSzbSBbJobSCbKrbKsbSDbSGbSFbJobSIbUtbTobTwbTvbzPbUVbzRbTxbTzbBmbGpbHrbKwbKxbHubHubHubHubHubKybKzbKAbKBbKCbKCbKCbKDbKEbKFbyZbKGbKHbKIbyZbKJbKKbKLbKMbKNbyZbyZbKObKPbyZbyZbKQbKRbKSbKTbJQbKUbKVbKWbKXbKYbKZbLabzhbHUbAebzkbGRbIYbGSbzobLbbLcbLdbzrbLebLfbzobzobLgbzkaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaanWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGhbLhbLibLjbIebLkbLlbLmbLnavbaaeaaeaaeaaebKfaaeaaeaaeaaeaaeaaebLobLpaaeaabaabaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbLqbLrbuGbLsbLtbLubLvbLtbLtbLtbLtbLwbsebRCbUqbTBbUxbJobLybLzbUzbUybUFbUAbJobUIbCtbVybVBbVAbWgbWfbWhbGnbGobBmbLEbHrbHUbKxbHubLFbLGbLHbHubLIbAebyYbLJbLKbBwbBwbHzbLLbyYbLMbLNbLObLPbyZbyZbLQbLRbzbbyZbyZbLSbLTbLUbLVbyZbyZbLWbLXbJQbJQbLYbLZbMabzhbzhbzhbzhbzhbHUbAebzkbzkbzkbzkbMbbzkbzkbzkbzkbzkbzkbzkbzkbzkbzkaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIebIebIebIebMcbIebMdbMebMfbMgbMhbMiaaebKfaaeaaeaabaabaabaabaabaaeaaeaaeaaeaabaabaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaabaabbrvbLqbMjbvtbMkbMlbMmbMnbIkbIkbIkbIkbWkbsebRCbWmbWlbWmbJobMubMvbWpbWobWqbMzbJobWrbCtbDvbCpbWsbCrbWubDzbXkbMAbBmbGpbHrbMBbMCbMDbMEbMFbMGbHubLIbAebMHbMIbMJbMKbMKbMLbMMbMNbMObMPbMQbMRbMSbMTbMUbMVbMWbMXbMYbMZbNabNbbNcbNdbNebNfbNgbNhbNibNjbNkbNcbNlbNmbNnbNobNpbMBbNqbNqbNqbNrbNqbNqbNqbNqbBXbNsbNtbNubNubNubNubNubNvbNvbNvbNvbNvbNvbNvbNvbNvbNvbNvbNvbNvbNvbNvcwRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIebIebNxbNybIebNzbIebIebIebIebIeavbbNAaaeaaeaabaabaabaabaabaabaabaabaabaabaabaabaabaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaabaabbrvbrvbrvbrvbrvbrvbrvbrvbsebsebsebsebNBbJobJobNHbXlbNHbJobXpbXobXrbXqbXsbNZbJobXtbCtbDvbYVbYibDybWubCubYWbGobBmbGpbHrbAebKxbHubNNbNObNPbHubNQbJxbNRbNSbNTbNUbNVbNWbNXbNYbOpbOabObbOcbOdbOebOfbOgbLUbLUbOhbOibOjbOkbMVbOlbOmbMVbMQbMVbMQbOnbMKbMKbMKbOobODbAebOqbOrbOrbOrbOrbOsbOrbOrbOrbOrbOtbOubHuaabaabaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOvbOwbLibKdbIebOxbOybOzbOAbIeaabaabaabaabaabaabaabaadaadaadaadaadaabaabaabaabaabaadaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaabaabaabbrvbKjbKkbKlbKmbYYbYXbrvbrvbrvbrvbrvbNBbJocamcaAcaqcaXbNKbNKbNKccScccbNKbOLbJocdObCtbEvceGcdYcfsceHcfwbXkbOMbONbOObHrbCDbKxbHubHubOPbHubHubKxbAebOQbOQbOQbOQbORbOQbOQbOQbOSbOTbOUbOSbOVbOSbOWbOXbOYbOZbOZbPabPkbPcbOYbPdbPebPfbPgbPhbLObPibPjbMKbPSbPlbPlbPlbPlbPlbPlbPlbPlbPlbPlbPlbPlbPlbHUbPmbHuaabaabaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPnbPobPpbPqbPrbPsbIebPtbPubIeaabaabaabaabaabaadaadaadaacaacaacaadaadaadaadaadaadaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaabaabaabaabbrvbsebsebLxbsebsebsebsebsebsebsebrvbNBbJocfxbNKbNKcglbNKbNKczibQBcgmcgGbPCbPDchwchAchAchAchAchAchVciPbTxbPEbBmbPFbHrbPGbPHbPIbPIbTIbTHbPIbPLbAebOSbPMbPNbPObPPckKckBbOSbQYbPTbPUbPVbPWbOSbNnbPXbPYbPXbNnbNnbPZbQabQbbQcbNnbNnbQdbMKbQebQfbMKbMKbQgbQhbQibQjbQkbPlbQlbQmbQnbQobQpbQqbQrbPlbHUbPmbHuaabaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabQsbJcbJcbQtbIebQubIebIebIebIeaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaacaacaacaacaacaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabbrvbMrbsebsebMsbsdbMtbsebsebsebsebPvbNBbJobJobJobJobJobJobJobJobJobJobJobJobJockMbFDcmRbFFcngbFIcnKcnLbGncnNbBmbQGbQHbQIbKzbKzbKzbKzbTJbKzbKzbKzbQLbQMbQNbQObQPbQQbQRbQSbQTbQUbQVbQWbQXbOSbScbQZbRabNlbRbbNnbRcbRdbRebRfbRgbNnbRhbRibLObMKbMKbMKbRjbRkbRlbRmbRnbRobRpbRqbRrbRsbRtbRubRvbPlbHUbPmbHuaabaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaibRwbIebIebIebGhbIeaabaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabbrvbNCbsecopbrvbrvbrvbrvcorcorcorbrvbRxbMpbRybRybRybMpbMpcosbQxbRAbRBcoAbRBcoPbQxbQxcpnbQxbQxccNcbPceIbGnbGobBmbGpbUEbUEbUEbUEbUEbAebKxbOSbOSbOSbOSbRHbRIbRIbRIbRJbRKbRLbRIbRMbRNbRIbRObOSbRPbMKbRQbMKbRRbPXbRSbRTbRQbRUbRVbNnbRWbRXbRYbRZbSabSbbTFbPlbSdbSebSfbSgbShbSibSjcvKbSlbSmbSnbSobSpbSqbSrbSsbSsbSsbSsaeFaeFbStaeFbStbStbStbSubStbStbStaeFbStbStbStbStaeFaeFaeFaeFaeFaeFbSvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaajaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabbrvbOBbsecpNbrvbPbcgDbrvcqnbsebsebrvbNBcqocqobQxbQxbQxbQxbSwbQxbSxcqpcqLcqKcvYcgFcwycwbbSEbQxbIpcgHcwzbIqbGobBmbGpbUEbUGbWwbWwbUEbAebKxbOSbSKbSLbSMbSNbSObSPbSPbSPbSQbSRbSSbSTbSUbSVbSWbSRbSXbOnbQfbMKbRRbPXbSYbRTbMKbRUbSZbTabTabTbbTcbTbbTabTdbTabPlbPlbPlbPlbTebTfbTgbThbTibTjbTkbTlbPlbTmbTnbHuaabaabaabaabaaeaaeagnaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagnaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabbrvbLxbsebsebPvbsebsebQvbsebsebsebrvbNBcpucxqbTpbTqbTrbTsbTtbTsbTucxrcxsbTybTybTybTycxtbTAcxubOIbZfcxvbTEbYubWxckEbZxcmkclwcmlbUEcoccoabOSbTKbRIbTLbRIbRIbRIbRIbTMbTNbTObTPbRIbTQbRMbTRbTObTSbPibPjbMKbRRbPXbSYbTUbTVbTWbTXbTYbTZbUabUbbUcbUdbTacxwbPlbUfbUgbUhbUibUjbUkbUlbQpbQpbQpbQpbPlbHUbUmbHuaabaabaabaaeaaeaaeagmaaebUnbUobUpaaebUnbUobUpaaebUnbUobUpaaeagmaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaeaaebrvbrvbrvbrvbrvbsebsebrvbKpbKpbKpbrvbNBcpucxqbTpbTqbTqcvLbUscvMbUubTybTybTycxybUvbUwcxzcxBcxAcxCcdUcxDbHnbHobUCbUDbUEcxEbUXcvRcvQbJxcvSbOSbUHcxFbUJbUKbULbUMbRIbUNbUObOSbUPbUQbURbUSbUTbOSbUUbUVbUWbWebUYbNnbUZbVabVbbRUbMKbVcbVdbVdbVebVdbVfbTabVgbPlbVhbVibVjbVkbVlbRmbVmbVnbVobVpbVqbPlbHUbUmbHuaabaabaabaaeaaeaaeagmaaebUnbVrbUpaaebUnbVrbUpaaebUnbVrbUpaaeagmaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIebIebNxbNybIebNzbIebIebIebIebIeavbbNAaaeaaeaabaabaabaabaabaabaabaabaabaabaabaabaabaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaabaabbrvbrvbrvbrvbrvbrvbrvbrvbsebsebsebsebNBbJobJobNHbXlbNHbJobXpbXobXrbXqbXsbNZbJobXtbCtbDvbYVbYibDybWubCubYWbGobBmbGpbHrbAebKxbHubNNbNObNPbHubNQbJxbNRbNSbNTbNUbNVbNWbNXbNYbOpbOabObbOcbOdbOebOfbOgbLUbUWbOhbOibOjbOkbMVbOlbOmbMVbMQbMVbMQbOnbMKbMKbMKbOobODbAebOqbOrbOrbOrbOrbOsbOrbOrbOrbOrbOtbOubHuaabaabaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOvbOwbLibKdbIebOxbOybOzbOAbIeaabaabaabaabaabaabaabaadaadaadaadaadaabaabaabaabaabaadaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaabaabaabbrvbKjbKkbKlbKmbYYbYXbrvbrvbrvbrvbrvbNBbJocamcaAcaqcaXbNKbNKbNKccScccbNKbOLbJobWebCtbEvccxcdYcfsceHcfwbXkbOMbONbOObHrbCDbKxbHubHubOPbHubHubKxbAebOQbOQbOQbOQbORbOQbOQbOQbOSbOTbOUbOSbOVbOSbOWbOXbOYbPcbOZbPabPkbPcbOYbPdbPebPfbPgbPhbLObPibPjbMKbPSbPlbPlbPlbPlbPlbPlbPlbPlbPlbPlbPlbPlbPlbHUbPmbHuaabaabaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPnbPobPpbPqbPrbPsbIebPtbPubIeaabaabaabaabaabaadaadaadaacaacaacaadaadaadaadaadaadaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaabaabaabaabbrvbsebsebLxbsebsebsebsebsebsebsebrvbNBbJocfxbNKbNKcglbNKbNKczibQBcgmcgGbPCbPDchwchAchAchAchAchAchVciPbTxbPEbBmbPFbHrbPGbPHbPIbPIbTIbTHbPIbPLbAebOSbPMbPNbPObPPckKckBbOSbQYbPTbPUbPVbPWbOSbNnbPXbPYcdObNnbNnbPZbQabQbbQcbNnbNnbQdbMKbQebQfbMKbMKbQgbQhbQibQjbQkbPlbQlbQmbQnbQobQpbQqbQrbPlbHUbPmbHuaabaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabQsbJcbJcbQtbIebQubIebIebIebIeaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaacaacaacaacaacaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabbrvbMrbsebsebMsbsdbMtbsebsebsebsebPvbNBbJobJobJobJobJobJobJobJobJobJobJobJobJockMbFDcmRbFFcngbFIcnKcnLbGncnNbBmbQGbQHbQIbKzbKzbKzbKzbTJbKzbKzbKzbQLbQMbQNbQObQPbQQbQRbQSbQTbQUbQVbQWbQXbOSbScbQZbRabRdbRbbNnbRcbRdbRebRfbRgbNnbRhbRibLObMKbMKbMKbRjbRkbRlbRmbRnbRobRpbRqbRrbRsbRtbRubRvbPlbHUbPmbHuaabaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaibRwbIebIebIebGhbIeaabaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabbrvbNCbsecopbrvbrvbrvbrvcorcorcorbrvbRxbMpbRybRybRybMpbMpcosbQxbRAbRBcoAbRBcoPbQxbQxcpnbQxbQxccNcbPceIbGnbGobBmbGpbUEbUEbUEbUEbUEbAebKxbOSbOSbOSbOSbRHbRIbRIbRIbRJbRKbRLbRIbRMbRNbRIbRObOSbRPbMKbRQbRTbRRbPXbRSbRTbRQbRUbRVbNnbRWbRXbRYbRZbSabSbbTFbPlbSdbSebSfbSgbShbSibSjcvKbSlbSmbSnbSobSpbSqbSrbSsbSsbSsbSsaeFaeFbStaeFbStbStbStbSubStbStbStaeFbStbStbStbStaeFaeFaeFaeFaeFaeFbSvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaajaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabbrvbOBbsecpNbrvbPbcgDbrvcqnbsebsebrvbNBcqocqobQxbQxbQxbQxbSwbQxbSxcqpcqLcqKcvYcgFcwycwbbSEbQxbIpcgHcwzbIqbGobBmbGpbUEbUGbWwbWwbUEbAebKxbOSbSKbSLbSMbSNbSObSPbSPbSPbSQbSRbSSbSTbSUbSVbSWbSRbSXbOnbQfbRTbRRbPXbSYbRTbMKbRUbSZbTabTabTbbTcbTbbTabTdbTabPlbPlbPlbPlbTebTfbTgbThbTibTjbTkbTlbPlbTmbTnbHuaabaabaabaabaaeaaeagnaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagnaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabbrvbLxbsebsebPvbsebsebQvbsebsebsebrvbNBcpucxqbTpbTqbTrbTsbTtbTsbTucxrcxsbTybTybTybTycxtbTAcxubOIbZfcxvbTEbYubWxckEbZxcmkclwcmlbUEcoccoabOSbTKbRIbTLbRIbRIbRIbRIbTMbTNbTObTPbRIbTQbRMbTRbTObTSbPibPjbRTbRRbPXbSYbTUbTVbTWbTXbTYbTZbUabUbbUcbUdbTacxwbPlbUfbUgbUhbUibUjbUkbUlbQpbQpbQpbQpbPlbHUbUmbHuaabaabaabaaeaaeaaeagmaaebUnbUobUpaaebUnbUobUpaaebUnbUobUpaaeagmaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaeaaebrvbrvbrvbrvbrvbsebsebrvbKpbKpbKpbrvbNBcpucxqbTpbTqbTqcvLbUscvMbUubTybTybTycxybUvbUwcxzcxBcxAcxCcdUcxDbHnbHobUCbUDbUEcxEbUXcvRcvQbJxcvSbOSbUHcxFbUJbUKbULbUMbRIbUNbUObOSbUPbUQbURbUSbUTbOSbUUcoxceGcpJbUYbNnbUZbVabVbbRUbMKbVcbVdbVdbVebVdbVfbTabVgbPlbVhbVibVjbVkbVlbRmbVmbVnbVobVpbVqbPlbHUbUmbHuaabaabaabaaeaaeaaeagmaaebUnbVrbUpaaebUnbVrbUpaaebUnbVrbUpaaeagmaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVsbVtbVtbVtbVsaabaabaabaabaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaecpAcpBcpBbVubVubVubVubVubNBcpucxqbTpbTqbVvbTsbVwbTsbVxcxrcxsbTybTybTybVzcxGcxIcxHbIpbVCbVDbIqbGobVEbHqbUEbUEbUEbUEbUEbAebKxbOSbOSbOSbOSbOSbOSbOSbVFbOSbOSbOSbOSbOSbOSbVGbOSbOSbVHbVIbNnbNnbNnbNnbVJbVKbVLbVMbVNbVObVPbVQbVRbVSbVTbTabUebPlbVUbVUbVUbVUbVVbVWbVmbVXbRlbVYbVZbPlbWabUmbHuaabaabaabaaeaaeaaeagmaaebUnbVrbUpaaebUnbVrbUpaaebUnbVrbUpaaeagmaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbVtbWbbWcbWbbVtbVtaabbVtbVtbVtbVtaaeaaeaaeaaebWdaaeaaeaaeaaebWdcpAbVubVubVubXjcxJbVucxKbWicqocqobQxbQxbQxbQxbWjbQxcxMcxLcxLcxLcxNbWncxPcxOcxQbQxbIpbVCbIpbIqbGobBmbGpbHrbWtcxRbWvbCDcbzcoabAebAebAebAebAebAebWybAebAebAebAebNobVIbWzbWAbWBbWzbWCbWDbVIbWEbWFbNnbWGbWHbWIbWJbWKbWLbWMbWNbWObVdbWPbTabWQbPlbWRbWSbWTbVkbWUbWVbWWbWXbWYbWUbWZbXabXbbXcbHuaabaabaabaabaaeaaeagmaaebUnbVrbUpaaebUnbVrbUpaaebUnbVrbUpaaeagmaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbVtbWbbWbbWbbWbbWbbVtbVtbVtbXdbXebXfbXgbXgbXgbXgbXgbXgbXgbXgbXgbXgbXgbXhbXibXhbXNcxSbXmcxTbXnbIkbIkbIkbIkbIkbIkcxUbQxcxWcxVcxXcxXbQxbQxbQxcxYbWjcpnbIpbVCbIpbIqbOMbXubXvbXwbXxbXybXybXybXzbXAbXBbXBbXBbXCbXBbXBbXDbXBbXBbXBbXBbXEbXFbXGbXHbXIbXJbXKbXJbXLbXJbXJbNnbXMbMKbMKbMKbTTbVOcekbVdbXObVdbXPbTabXQbPlbXRbXSbXTbUibXUbXVbXWbUibXXbXYbXZbPlbYabCCbYbbYbbYbbYbbYcaaeaaeagmaaebUnbVrbUpaaebUnbVrbUpaaebUnbVrbUpaaeagmagmagmagmaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbVtbWbbWcbWbbVtbVtaabbVtbVtbVtbVtaaeaaeaaeaaebWdaaeaaeaaeaaebWdcpAbVubVubVubXjcsRbVucxKbWicqocqobQxbQxbQxbQxbWjbQxcxMcxLcxLcxLcxNbWncxPcxOcxQbQxbIpbVCbIpbIqbGobBmbGpbHrbWtcxRbWvbCDcbzcoabAebAebAebAebAebAebWybAebAebAebAebNobVIbWzbWAbWBbWzbWCbWDbVIbWEbWFbNnbWGbWHbWIbWJbWKbWLbWMbWNbWObVdbWPbTabWQbPlbWRbWSbWTbVkbWUbWVbWWbWXbWYbWUbWZbXabXbbXcbHuaabaabaabaabaaeaaeagmaaebUnbVrbUpaaebUnbVrbUpaaebUnbVrbUpaaeagmaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbVtbWbbWbbWbbWbbWbbVtbVtbVtbXdbXebXfbXgbXgbXgbXgbXgbXgbXgbXgbXgbXgbXgbXhbXibXhbXNctabXmcxTbXnbIkbIkbIkbIkbIkbIkcxUbQxcxWcxVcxXcxXbQxbQxbQxcxYbWjcpnbIpbVCbIpbIqbOMbXubXvbXwbXxbXybXybXybXzbXAbXBbXBbXBbXCbXBbXBbXDbXBbXBbXBbXBbXEbXFbXGbXHbXIbXJbXKbXJbXLbXJbXJbNnbXMbMKbMKbMKbTTbVOcekbVdbXObVdbXPbTabXQbPlbXRbXSbXTbUibXUbXVbXWbUibXXbXYbXZbPlbYabCCbYbbYbbYbbYbbYcaaeaaeagmaaebUnbVrbUpaaebUnbVrbUpaaebUnbVrbUpaaeagmagmagmagmaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbVtbWbbWbbWbbWbbWbbWbbWbbVtbVtbYdbYebVtaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaebQybQybVubYfbYgbVubVubYhbYhbYhbYhbYhbYhbYhcxZbIqbIqbIqbIqbIqbIqbYjbYkcyabYlbYkbYkbYmbYnbYobYpbYqbYrbHrbHrbHrbYsbYsbYsbYtbYsbYsbYscembYsbYsbYsbYsbYsbYsbYsbPmbVIbWzbWAbXJbWzbXJbXJbVIbYvbYwbNnbYxbRZbYybYzbYAbTabYBbYCbYDbYEbYFbTabTabPlbPlbPlbPlbPlbPlbPlbPlbPlbPlbPlbPlbPlbYabCCbYGbYHbYIbYJbYcbYcbYcaaeaaeaaebYKaaeaaeaaebYKaaeaaeaaebYKaaeaaeaaeaaeaaeagnaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbVtbWbbWbbYLbYMbWbbYLbYMbWbbWbbVtbYNbVtbVtaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaebQybYObYPbYQbYRbYScqmcqNcybcydcycbYZbZabZbbTDbZcbZdbZebTDbTDbTDbTDcxvbZfbTDbTDbTCbZgbIqbGobBmbGpbHrbZhbZibYsbZjbZkbZlbYsbZmbZnbZobZpbZnbYsbZnbZqbZrbYsbPmbVIbWzbZsbXJbWzbXJbZtbVIbZubZvbNnbNnbNnbJTbNnbNnbTabTabTabZwbTabTabTacvUbZybZzbZAbZBbZCbOrbOrbOrbOrbOrbOrbOrbOrbZDbZEbZFbZGbZHbZIbZJbZKbZJbZLbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZNbZObZObZPaaeagmaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbVtbWbbWbbWbbZQbZRbZSbZTbZUbWbbWbbZVbZWbZXbVtaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaebZYbQybZZcaacabcaccadcaebIpbIpbIpcafcagcahcaibIpcajcakcalcyecancaocapcyfcarcarcarcasbIpbIqcatbBmcaubHrbHrbHrbYscavcawcaxbYscaycazcygcaBbZncaCbZnbZrbZrbYsbPmbVIbWzcaDcaEbWzbXJcaFbVIbVIbVIbVIbAecaGbAebAebAecaHbAebAebLIbAebAebAebAebLIbAebAebAecaIcaJcaKcaLcaMcaMcaMcaMcaMcaNcaObYbcaPcaQcaRbYcbYcbYcaaeaaeaaecaSaaeaaeaaecaSaaeaaeaaecaSaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaadaadaadaacaacaadaadaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVsbVtbWbbWbbYLcaTcaUbZRbZSbZTcaVcaTcaTcaTcaTcaWbVsaaeaaeaaeaaebWdaaeaaeaaeaaebWdaaeaaebQycyhcaacaYcaZbVucaecbacbbcbccbdcbecbfcbgbIpcbhbYhcbibYhcbjbYhbYhcbkcblbYhbYhbYhbYhbIqcbmbBmcbnbHrcbocbpbYscbqbZncbrbYscbscbtcbucbvcbwbYsbZncbxbZrbYsbPmbVIbVIbVIbVIbVIbVIbVIbVIcbycbzbOrbOrcbAbOrbOrbOrbOrbOrbOrcbAbOrbOrbOrbOrcbBcbCcbCcbCcbCcbDcbEcbFcbGcbGcbGcbGcbGcbGcbGbYbbYbbYbbYbbYcaaeaaeagmaaebUncbHbUpaaebUncbHbUpaaebUncbHbUpaaeagmagmagnaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaadaadaadaadaacaacaacaadaadaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbWbbWbbWbbZVcbIcbIcbJbZScbKcbIcbIcbIcbIcbIcbLbVtaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaebQycbMcbNcbNcbObVucaebIpcbQcbRcbdcbecahcbSbIpcbTbYhcbUcbVcbWcbXcbYcbZbIpbYhccaccbcyibIqccdbONbTGcceccfccgbYscbscchcciccjcckcclccmccnccobYsbYsbYsbYsbYsccpccqbOrbOrbOrbOrbOrbOrbOrcbAcbBbAeccrccrccrccrccrccrccrccrccrccrccrbHuccsbHucbCcctccuccvccwccxccycbGcczccAccBccCccDccEccEcbGaaeaaeaaeaaeaaeagmaaebUncbHbUpaaebUncbHbUpaaebUncbHbUpaaeagmaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaadaadaadaadaacaacaacaadaadaadaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtccFbWbbWbbWbbZSbZSccGccHbZSbZSbZSbZSbZSbZSbZSccIavbavbavbavbavbavbavbavbavbavbavbavbccJccKccLccLccMbVucwAccOccPccPccPccQccRcyjcarccTccUccVccWccXccYcbYccZbTDcdacdbbTDcdccddcdebBmbTGbHrcdfcdgbYscbqcdhcdicdjcdkcdlcdmbZncdnbYscdocdpcdqbYscdrcdsbAebCDcdtcducykbAebAebAebAecdvccrcdwcdwcdwcfacfbcfccdycdycdyccrcdzbAecdAcbCcdBcdCcdDcctcdEcdFcdGcdHcdIcdJcdJccDccEccEcbGaaeaaeaaeaaeaaeagmaaebUncbHbUpaaebUncbHbUpaaebUncbHbUpaaeagnaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaadaadaadaadaacaacaacaadaadaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbWbbWbbWbbZVcbIcbIcbJbZScbKcbIcbIcbIcbIcbIcbLbVtaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaebQycbMcbNcbNcbObVucaebIpcbQcbRcbdcbecahcbSbIpcbTbYhcbUcbVcbWcbXcbYcbZbIpbYhccaccbcyibIqccdbONbTGcceccfccgbYscbscchcciccjcckcclccmccnccobYsbYsbYsbYsbYsccpccqbOrbOrbOrbOrbOrbOrbOrcbAcbBbAeccrccrccrccrccrccrccrccrccrccrccrbHuccsbHucbCcctccuccvccwcxJccycbGcczccAccBccCccDccEccEcbGaaeaaeaaeaaeaaeagmaaebUncbHbUpaaebUncbHbUpaaebUncbHbUpaaeagmaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaadaadaadaadaacaacaacaadaadaadaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtccFbWbbWbbWbbZSbZSccGccHbZSbZSbZSbZSbZSbZSbZSccIavbavbavbavbavbavbavbavbavbavbavbavbccJccKccLccLccMbVucwAccOccPccPccPccQccRcxScarccTccUccVccWccXccYcbYccZbTDcdacdbbTDcdccddcdebBmbTGbHrcdfcdgbYscbqcdhcdicdjcdkcdlcdmbZncdnbYscdocdpcdqbYscdrcdsbAebCDcdtcducykbAebAebAebAecdvccrcdwcdwcdwcfacfbcfccdycdycdyccrcdzbAecdAcbCcdBcdCcdDcctcdEcdFcdGcdHcdIcdJcdJccDccEccEcbGaaeaaeaaeaaeaaeagmaaebUncbHbUpaaebUncbHbUpaaebUncbHbUpaaeagnaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbWbbWbbWbbYLcdKcdKcdLbZScdMcdKcdKcdKcdKcdKcdKbVtaaeaaeaaeaaeaaeaaeaaeaaecdNcdNcdNcdNbQybVubVubVubVubVubYhbYhcahcahcbfcahbYhcylbIpcbTbYhcdPcdQcdRcdScbYcdTcdUcdVcdWcdXcymbIqcdZbBmbTGbYsbYsbYsbYsbYsbYsbYsbYsbYsceacebceccedbYsceebYscefccrccrcegcehccrccrccrccrccrccrccrccrccrccrceiceYcljcelcfTcelcgxcfSceoccrcdvbNocepcbCcctceqcercescescetceucevceucewcdJccDccEccEcbGaaeaaeaaeaaeaaeagmaaebUncbHbUpaaebUncbHbUpaaebUncbHbUpaaeagmaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVsbVtbWbbWbbZVbZWbZXbZRbZSbZTcexbZWbZWbZWbZWceybVsaaeaaeaaeaaebWdaaeaaeaaecdNcezcezceAcezcezceBceCceCceCceBbSHbIpceDceEceFcyncyobIpcbTbYhcbicwBcbibYhbYhceJceKbYhbYhceLbYhbIqceMbBmbUDbYsceNceOcePceQbYsbZnbZnceRceSbZobZnceTceUbZnbZnbZnccrceVceWcelcdxceXcfUceZceZceZcelcelcdxcelcelcfdcelcelchccelcelcfebIrccrcfgcfgcfgcbGcbGcbCcbCcbCcbCcbCcbGcbGcbGcbGcbGcbGcbGcbGcbGaaeaaeaaeaaeaaeagmaaebUncfhbUpaaebUncfhbUpaaebUncfhbUpaaeagmaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbVtbWbbWbbWbbZQbZRbZSbZTbZUbWbbWbbYLcaTcaUbVtaabaaeaaeaaeaaeaaeaaeaaecdNcficfjcfjcfkcflcfmcflcflcflcfncfocfocfpcfqcfrcfqcypcfqcftcfucfvcyqcyrcfycfzcfAbVCbYhcfBcfCcfDbIqbGobBmcfEbYscfFcawcckcfGcfHcfIcckcckcfJcfKcfLcfMcfNcfOcfOcfOccrcfPcfQcfRcfRcfRcfRcfRcfRcfRcfRcfRcfRcfRcfRcfVcfRcfRcencfRcfWcenchgchdcelcfXcfYchTaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagnaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbVtbWbbWbbZVcgabWbbZVcgabWbbWbbVtbVtbVtbVtaabaabaabaaeaaeaaeaaeaaecdNcgbcgbcgbcgccgdcgdcgecgfcficeBbIpbIpcggcdUcghcgicyscarcarcgjcgkcytcarcarbUBcarcasbYhcfCcfCcfDbIqbGobBmbGpcecbZnbZncgncdicgocdiczjcdicgpcgqbZncgrcgscfOcgtcguccrcgvcgwcelcelcelcelcelcelcelcelcnXciDciNciMciEciMciMciMciMciFciMciMciGcelcgBcfYchTaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagmagmagnaaeagmagmagmagmagmagmagmagmaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbVtbWbbWbbZVcgabWbbZVcgabWbbWbbVtbVtbVtbVtaabaabaabaaeaaeaaeaaeaaecdNcgbcgbcgbcgccgdcgdcgecgfcficeBbIpbIpcggcdUcghcgicghcarcarcgjcgkcytcarcarbUBcarcasbYhcfCcfCcfDbIqbGobBmbGpcecbZnbZncgncdicgocdiczjcdicgpcgqbZncgrcgscfOcgtcguccrcgvcgwcelcelcelcelcelcelcelcelcnXciDciNciMciEciMciMciMciMciFciMciMciGcelcgBcfYchTaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagmagmagnaaeagmagmagmagmagmagmagmagmaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbVtbWbbWbbWbbWbbWbbWbbWbbVtbVtaabaabaabaabaabaabaabaabaabbrvbrvcdNcdNcdNcdNcyIcdNcdNcdNcdNcdNcdNcgEcbiczccbjcgEbIqbIqbIqbIqbIqbIqcggbIpbIpbVCcgIcgJbYhcfBcgKcfDbIqcgLbBmcgMcgNcgOcgPcgQcgPcgRcgPcgPcgPcgScgPcgPcgTcfOcfOcgUcgVccrcgWcgXcgYcgZcgZcgZcgZcffcgZcgZcejchaciHciLcejcgZcgZcgZcgZchbcgZciOcjCcelcgBcfZccraaeaaeaaeaaeaaeaaeavbaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbVtbWbbWbbWbbWbbWbbVtbVtaabaabaabaabaabaabaabaabaabaabbrvchkchlchlchlbrvchmchnchochpchpchqchrcyuchschuckHcyvchxchychzchzchzchncywchBchBchCchBchBchDchDchDchDchDbGochEchFchGbZncfOchHcfOchIcfOcfOcfOchJchKcfOcfOcfOcfOchLchMccrcelcgwcgzchNchOchOchOchOchOchOchOcgzcjCchOchOchOchOchOchOchQchOciRcjCcelcgBcfYccraaeccrccrccrccrccraaecgCaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbVtbWbchWbWbbVtbVtaabaabaabaabaabaabaabaabaabaabaabbrvchXchYchYchYbrvbsechnchZciachzcibciccidciecifcigcihciicijchzchzcikchncyxchBcilcimcinchBciocipciqciqchDbCxcirciscitcgOcgOciucgOcitcivbZnbZnciwcfNbZncixcfNcfOcgtcguccrcelcgwcgzciychOcizciAciBciCciCchOcgzcjCchOcjAcjDcjBciIciJciKchOckccjIcgZckgchechfcyychfclpcllclqccraaeagnaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -6954,11 +6954,11 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaabaabaabaabbrvbrvbrvbrvbLxckDbLxbsebsebrvckichlchlchlbrvbsechnchochpchpckjckkciYchtciZchvcjacklckmchzchzchzchncyxchBcknckocjgckpchBckqckrckschDcktckuckvbYsbYsbYsbYsbYsbYsbYsbYsbYsbYtbYsbYsccrccrccrccrccrccrcelcgwcgzcgwcelcjvckwckwckwcjycmVcnucmWchTclmclncelcelcelclochOcnWcjCcelcgBcfYccraaeccrccrccrccrccrchScjEaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaabaabaabbrvckCclzbrvbsebsebsebsebsebrvbrvbrvbrvbrvbrvbsechnchZciachzckFcicckGchtcjJchvckIciickJchzchzcikchncyAcyBckLcyCckNckOchBckrckrckPchDckQckRckSckTckUckUckUckVckWckXckYckZclaclbclccldcleclfclgclhclicnYchbcljcgwchOclkclkcoqclkclkchOchPcelchTcmbcmccelcelcmdcmechOcnWcjCcelcgBcfZccraaeaaeaaeaaeaaeaaeaaeagmaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbrvbLxcvVclxbsebsebLxckDclyclAcxaclBbrvbsebsebsechnchzchzchzclCclDciYcyDcnfchvcjacjbclFchpchpcjdchnbGichBclGclGclGclHchBckrclIclJclKclLclMclNclOclOclOclOclOclOclOclOclPclQclRclSclTclUclVclWclXclYclVclZcmacgwchOchOchOchOchOchOchOcnZclVcmKcmLcmMcmNcmOcmOcmPchOcowcjCcelcgBcrhccraaeccrccrccrccrccraaeagmaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbrvbrvbrvbrvbsebsebLxckhbsebsecvWbsebrvbsechnchnchnchnchnchnchnchnciYcyDcnFcnEcoxcjHcjHcjHcjHcjHchnbGichBcmncmncmncmnchBckrckrckrchDcmrcmscmtcmucmvcmvcmvcmvcmvcmvcmvcmucmwcmxcmyccrcmzcmAcmBcmCchOcjzcfQcfRcgychOcmEcmFcmFcmGcmHchOcmIcjzchOchTchTckdchTchTchOchOcpjcoyciMcplcpmciQcyEciQchhchichjccraaeagmaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbrvbrvbrvbrvbsebsebLxckhbsebsecvWbsebrvbsechnchnchnchnchnchnchnchnciYcyDcnFcnEcyjcjHcjHcjHcjHcjHchnbGichBcmncmncmncmnchBckrckrckrchDcmrcmscmtcmucmvcmvcmvcmvcmvcmvcmvcmucmwcmxcmyccrcmzcmAcmBcmCchOcjzcfQcfRcgychOcmEcmFcmFcmGcmHchOcmIcjzchOchTchTckdchTchTchOchOcpjcoyciMcplcpmciQcyEciQchhchichjccraaeagmaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbrvbLxcmXcmYbsebsebLxckhbsecmZcnacxbbrvbsechnchzchzcnbchzchncnccndcnecmmcnGclEcjacnhcnichzchzchzchnbGichBcnjcmncnkcmnchBcmocmpcmqchDcnlcnmcnncmvaabaaeaaeaaeaaeaaeaabcmvcmwcnocnpcnpcnqcnrcnscntchOcnvclZcnwcnwcnxcnwcnwcnwcnwcnwcnxcnwcnycelcelcelcelcelcelcelcpocpscppcqccqacfYchTaaechTchUchjchjccraaecjEaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbrvcnzcnAbrvbsebsebsebsebsebLxbLxbLxbrvbsechnchzchzchzchzchncnBcnCcnDcnHcolcnHckIciicnIchzchzcikchnbGichBchBchBchBchBchBchDchDchDcqocyFckRcmtcmvaabaabaaeaaeaaeaaeaaecmvcnOcnPcnQcnRcnScnTcnUcnVchOcelcfQcqxcelcmhcmDcmDcmDcricmDcmDcmDcmDcmDcmDcmDcmDcmDcmDcmDcuUcnXcvEcwacvTcmTcmUcyGcmUcwdchjchjccraaeagmaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbrvbrvbrvbrvbsebsebsebsebsecvXcobbsebQvbsechncodchzcoecofcogcohcoicokcojchtcojcjacjbcoochpchpcjdchnbGibsebsecyHbsebsebsecnJbsecyJczdcnMcyKcmtcotcmvcmvcmvcmvcmvcmvcmvcmucnOcnPcoucovcelcelcelcpKcwccfRcgXcelcelcwecwfciMciMcwgciNciMciMciNciMciMciMciNciMciMciMciNcmWcelcwhcgBcfYccraaeccrccrccrccrccraaecgCaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbrvcozcvZcoBbsebsebsebseckhcoCcoDcoEbrvbsechncoFcoGcoHchzchzcoIcoJcomciecoMchtconcjHcjHcjHcjHcjHchnbFnbIkbIkbIlbIkbIkbIkcyMcyLcyNcmucyOcoQcoRcoScoTcoUcoVcoWcoXcoYcoZcpacpbcpccpdcpecpfcpgcpfcphchOcpicwicprcwkcwjcwmcwlcwkcwjcwncpkcwkcwocwmcwpcwkcwocwmcpqcwkcwocwqcwqcwscwrcfYccraaeaaeaaeaaeaaeaaeaaeagmaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbrvcozcvZcoBbsebsebsebseckhcoCcoDcoEbrvbsechncoFcoGcoHchzchzcoIcoJcomciecoMchtconcjHcjHcjHcjHcjHchnbFnbIkbIkbIlbIkbIkbIkcyMcyLcyNcmucyOcoQcoRcoScoTcoUcoVcoWcoXcoYcoZcpacpbcpccpdcpecpfcpgcpfcphchOcpicwicpkcwkcwjcwmcpqcwkcwjcwncprcwkcwocwmcwlcwkcwocwmcwpcwkcwocwqcwqcwscwrcfYccraaeaaeaaeaaeaaeaaeaaeagmaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbrvbrvbrvbrvbrvbrvbrvcpucpubrvbrvbrvbrvbsechnchzcpvchzchzcpwcpxcpycoKchtcnDchtcyPcoLcoNcoNcoNcoNchnbsecmucmucmucmucmucmucmucmucmucoOcrgckRcpPcpPcnPcpPcpPcpPcpQcnPcpRcpRcpScpTccrchTchTccrccrccrccrcfYcfYcpUcpZcwtcfYcwucwwcwvcwxcpUcpVcpWcfYcpUcpXcpWcfYcpUcpYcpWcfYcfYcfYcfYcfYccraaeagmagncgCagmagmcjEagmaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaabaaeaaeaaeaaeaaecqdcqecqecqecqebsechnchzchzchzchzchncqfcqgcpzchtcnDchtcyRcyQcoNcoNcoNcpCchnbsecmucpFcpGcpHcpIcyScqycpLcpMcyTcpOcyUcqqcqrcqrcqrcqrcqrcqscqrcqrcqrcqtcqucmuaeHaeHaeHaeHaeHccrcqvcqzcqwcfYcwCcqvcqwcfYcwDczfcqwcfYcwEcqvcqwcfYcwFcqvcqwcfYcwGczgcfYcqvcfYcfYccraaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaabaabaabaabaabaabaabaaeaaeaaecqdcqdcqdcqCcqDcqEcqFbsechnchzchzcqGchzchncqHcqIcqhcpDcqichtcyVcqJcoNcoNcoNcoNchnbEicqlcyWcyYcyXcyZcyZcyYcyYczaczaczaczbcqOcpPcnPcpPcpPcpPcqMcnPcpRcpRcnPczhcmuaeHaeHaeHaeHaeHccrccrccrcqPchTcqQccrcwHcwJcwIccrcqPchTcqQccrcqPchTcqQccrcqPchTcqQccrccrccrccrcptccrccraeHaeHaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -6967,17 +6967,17 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaaeaaeaaeaaeagmagmagmagnagmaaecqRaaeaaeaaeaaeaaecqdcqecqecqecqecrrbsebsebrvbrvbrvbrvbrvcxkcxlbsecxncxmcqZbsecxlbKicqjbrvbrvbrvbrvcrscrtcruaeHaeHaeHcrscrtcruaeGaeGaeGcrscrtcruaeHaeHaeHcrscrtcruaaaaaaaeHaeGaHHaeGaeGaeGaeGaeGcwPcrEcrFcrGcwPcwScwUcwTcwPcrvcrwcrxcwPcrycrzcrAcwPcrBcrCcrDcwPaeHaeHccrccrccrccraeHaeHaeGcxeaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaecqRaaeaaeaaeaaeaaeaaeaaeagnaaebrvbrvbrvbrvbrvaaaaaaaaabrvbrvbrvcpucpucpucpucpubrvbrvbrvbrvaaaaaacxocrHcrmcrIaeHaeHaeHcrHcrmcrIaeGaeGaeGcrHcrmcrIaeHaeHaeHcrHcrmcrIaaaaaaaeHaeHaeGaHHaHHaeGbnQaeGcwPcrPcrWcrQcwPclvcmjcwVcwPcrJcrTcrKcwPcrLcrUcrMcwPcrNcrVcrOcwPaeHaeHaeGaeHaeHaeHaeHaeHcxfcxgaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaaeaaeaaeagmaaecrRcrRcrRcrRcrRaaecqRaaecrRcrRcrRcrRcrRaaeagmaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacsQcsPcsPczecsSczecsTaeHaeHcsUcsVcsUaeHaeHaeHcsUcsWcsUaeHaeHcsQcsXcsYcsXcsTaaaaeHaeHaeGaeHaeGaeHaHHaeGcwPcrPcrPcrPcwPclvclvclvcwPcrJcrJcrJcwPcrLcrLcrLcwPcrNcrNcrNcwPaeHaeHaeGaeHaeHaeHaeHaeHaeGcxeaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaabaaeaaeaaeaaeagnaaecrXcrYcrYcrYcrYcrZcqRcqScsacsacsacsacsbaaeagmaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactacsZctcctbctectdctfcsTaeHcsUctgcsUaeHaeHaeHcsUctgcsUaeHaeHcticthctkctjctiaaaaeHaeHaHHaeHaeHaeHboHaeGcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPaeHaeHaeGaeHaeHaeHaeHaeHaeGcxgaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaabaaeaaeaaeaaeagnaaecrXcrYcrYcrYcrYcrZcqRcqScsacsacsacsacsbaaeagmaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyscsZctcctbctectdctfcsTaeHcsUctgcsUaeHaeHaeHcsUctgcsUaeHaeHcticthctkctjctiaaaaeHaeHaHHaeHaeHaeHboHaeGcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPaeHaeHaeGaeHaeHaeHaeHaeHaeGcxgaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaabaaeaaeaaeaaeaaeaaeagmaaecsccsccsccsccscaaecqRaaecsccsccsccsccscaaeagmaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacsQcsXctlctmctectectectfctncsXctoctgctpctqctqctqctoctgctpcsXcsXctcctrctkctjctfcsTaeHaeHaeHaeHaeHaeHcxhaeGaeGaeGaeGaeGaeGaeGaeGaeGaeGaeGaeGaeGaeGaeGaeGaeGaeGaeGaeGaeGaeGaeGaeGcxhaeGaeGaeGaeGaeGaeGcxeaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeagmaaeaaeaaeaaeaaeaaeaaecqRaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactacsZctictsctectectectucttctwctvctgctxctxctxctxctxctgctyctActzczecthctkctjctfctncsTaeHaeHaeHaeHaeHcxhbnQaeGaHHcxhaeGbnQcxhcxhbnQaeGbnQaeGcxicxhcxhbnQcxhbnQbnQaHHbnQcxhaeGbnQaeGbnQcxgcxicxgcxecxecxeaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeagmaaeaaeaaeaaeaaeaaeaaecqRaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyscsZctictsctectectectucttctwctvctgctxctxctxctxctxctgctyctActzczecthctkctjctfctncsTaeHaeHaeHaeHaeHcxhbnQaeGaHHcxhaeGbnQcxhcxhbnQaeGbnQaeGcxicxhcxhbnQcxhbnQbnQaHHbnQcxhaeGbnQaeGbnQcxgcxicxgcxecxecxeaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagmaaecrRcrRcrRcrRcrRaaecqRaaecrRcrRcrRcrRcrRaaeagmaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactfcsXctncsXcsXcsXcsXctBctgctgctgctgctgctgctgctgctgctgctgctgctgctCctkctkctkczectDctiaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagmaaecrXcrYcrYcrYcrYcrZcqRcqScsacsacsacsacsbaaeagmaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczectFctEctHctGctJctIctKctgctMctLctLctLctLctgctLctLctLctLctNctgczectOctkctkctCctkczeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagnaaecsccsccsccsccscaaecqRaaecsccsccsccsccscaaeagmaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczectEctEctQctPctSctRctTctgctMctUctUctUctUctgctUctUctUctUctNctgctVcsXcsRcsXcsXczectcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagnaaecsccsccsccsccscaaecqRaaecsccsccsccsccscaaeagmaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczectEctEctQctPctSctRctTctgctMctUctUctUctUctgctUctUctUctUctNctgctVcsXczecsXcsXczectcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaacaacaacaacaacaacaacaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagmaaeaaeaaeaaeaaeaaeaaecqRaaeaaeaaeaaeaaeaaeaaeagnaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczectWctEctYctXcuactZcubctgctMctxctxctxctxctgctxctxctxctxctNctgczecucctgctgcudctgczeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaacaacaacaacaacaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagmaaecrRcrRcrRcrRcrRaaecqRaaecrRcrRcrRcrRcrRaaeagmaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactfcsXcsPcsXcsXcsXcsXctmctgctgctgctgctgctgctgctgctgctgctgctgctgcuectgctgctgcsRcufctiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaajaacaacaacaacaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaecrXcrYcrYcrYcrYcrZcqRcqScsacsacsacsacsbaaeagmaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactacsZcticugctgctgctgcuhctgcuictyctEcujctLctLctLcukctEculctwctzczectgctgcumctfcsPcunaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaacaacaacaacaacaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagmaaecrRcrRcrRcrRcrRaaecqRaaecrRcrRcrRcrRcrRaaeagmaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactfcsXcsPcsXcsXcsXcsXctmctgctgctgctgctgctgctgctgctgctgctgctgctgcuectgctgctgctqcufctiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaajaacaacaacaacaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaecrXcrYcrYcrYcrYcrZcqRcqScsacsacsacsacsbaaeagmaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyscsZcticugctgctgctgcuhctgcuictyctEcujctLctLctLcukctEculctwctzczectgctgcumctfcsPcunaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaecsccsccsccsccscaaecsfaaecsccsccsccsccscaaeagmaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacuocsXctlcsPcuhcsPcuhctlcsPcsXcsXcsXcsXctqctqctqcsXcsXcsXcsXcsXctccupctgcuqctfcunaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagmaaeaaeaaeaaeaaeaaeaaecsgaaeaaeaaeaaeaaeaaeaaeagmaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactacsZctccurcticurctfcunaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacticuscuucutctiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagmaaeaaeaaeaaeaaeaaeaaecsgaaeaaeaaeaaeaaeaaeaaeagmaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyscsZctccurcticurctfcunaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacticuscuucutctiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagmagmagnagmagmaaeagmaaecsgaaeaaeagmagnagmagmagmagmaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacuoctnctnczecuvczecunaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacuocsXczecsXcunaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagmaaecshaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagmaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/_maps/map_files/BirdStation/BirdStation.dmm b/_maps/map_files/BirdStation/BirdStation.dmm
index b1ccc5a4938..4abe1355952 100644
--- a/_maps/map_files/BirdStation/BirdStation.dmm
+++ b/_maps/map_files/BirdStation/BirdStation.dmm
@@ -276,7 +276,7 @@
"afp" = (/obj/structure/cable/cyan{icon_state = "2-4"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai{name = "\improper AI Core"})
"afq" = (/obj/structure/cable/cyan{icon_state = "4-8"},/turf/simulated/floor/plasteel/warning{icon_state = "warning"; dir = 4},/area/engine/engineering)
"afr" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/engine/n20,/area/engine/engineering)
-"afs" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/engine/n20,/area/engine/engineering)
+"afs" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/engine/n20,/area/engine/engineering)
"aft" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; external_pressure_bound = 0; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine/n20,/area/engine/engineering)
"afu" = (/obj/structure/lattice/catwalk,/obj/machinery/atmospherics/pipe/simple/general/visible{icon_state = "intact"; dir = 10},/turf/space,/area/space)
"afv" = (/obj/item/clothing/head/cone,/obj/item/clothing/head/cone,/obj/item/clothing/head/cone,/obj/item/clothing/head/cone,/obj/item/clothing/head/cone,/obj/item/clothing/head/cone,/turf/simulated/floor/plasteel,/area/engine/engineering)
@@ -2338,7 +2338,7 @@
"aSY" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/magnetic_controller{autolink = 1},/turf/simulated/floor/plating,/area/toxins/misc_lab)
"aSZ" = (/turf/simulated/floor/plasteel/warning{icon_state = "warning"; dir = 9},/area/toxins/misc_lab)
"aTa" = (/turf/simulated/floor/plasteel/warning{icon_state = "warning"; dir = 5},/area/toxins/misc_lab)
-"aTb" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/plasteel/vault{icon_state = "vault"; dir = 8},/area/toxins/xenobiology)
+"aTb" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/plasteel/vault{icon_state = "vault"; dir = 8},/area/toxins/xenobiology)
"aTc" = (/obj/machinery/portable_atmospherics/canister/toxins,/turf/simulated/floor/plasteel/vault{icon_state = "vault"; dir = 8},/area/toxins/xenobiology)
"aTd" = (/obj/machinery/computer/operating,/turf/simulated/floor/plasteel/white,/area/toxins/xenobiology)
"aTe" = (/obj/structure/flora/kirbyplants{icon_state = "plant-21"; layer = 4.1},/turf/simulated/floor/plasteel/whitebot,/area/maintenance/fore{name = "Security Maintenance"})
@@ -2656,7 +2656,7 @@
"aZe" = (/obj/structure/sink/kitchen{desc = "A sink used for washing one's hands and face. It looks rusty and home-made"; name = "old sink"; pixel_y = 28},/obj/item/weapon/reagent_containers/spray/plantbgone,/turf/simulated/floor/plasteel/white,/area/maintenance/fore{name = "Security Maintenance"})
"aZf" = (/obj/structure/closet/crate/secure/hydrosec{req_access_txt = "35"},/obj/item/seeds/kudzuseed{potency = 0; production = 8},/obj/item/seeds/chilighost,/obj/item/seeds/deathberryseed,/obj/item/device/gps,/turf/simulated/floor/plasteel/white,/area/maintenance/fore{name = "Security Maintenance"})
"aZg" = (/obj/structure/cable/cyan{icon_state = "1-2"},/obj/machinery/camera/autoname{icon_state = "camera"; dir = 5},/turf/simulated/floor/wood,/area/security/brig)
-"aZh" = (/obj/structure/closet/secure_closet/detective,/obj/item/device/camera{desc = "A one use - polaroid camera. 30 photos left."; name = "detective's camera"; pictures_left = 30},/turf/simulated/floor/wood,/area/security/brig)
+"aZh" = (/obj/structure/closet/secure_closet/detective,/obj/item/device/camera/detective,/turf/simulated/floor/wood,/area/security/brig)
"aZi" = (/obj/structure/table/wood,/turf/simulated/floor/wood,/area/security/brig)
"aZj" = (/obj/machinery/computer/pandemic{layer = 2.5; pixel_x = -4},/turf/simulated/floor/plasteel/white,/area/medical/virology)
"aZk" = (/obj/structure/reagent_dispensers/virusfood{density = 0; pixel_y = -32},/turf/simulated/floor/plasteel/white,/area/medical/virology)
diff --git a/_maps/map_files/DiscStation/DiscStation.dmm b/_maps/map_files/DiscStation/DiscStation.dmm
index eb32f869b40..ee4fba18088 100644
--- a/_maps/map_files/DiscStation/DiscStation.dmm
+++ b/_maps/map_files/DiscStation/DiscStation.dmm
@@ -1,7 +1,7 @@
"aaa" = (/turf/space,/area/space)
"aab" = (/turf/space,/obj/machinery/porta_turret/syndicate,/turf/simulated/wall/shuttle{dir = 8; icon_state = "diagonalWall3"},/area/shuttle/syndicate)
"aac" = (/turf/simulated/wall/shuttle{icon_state = "wall3"},/area/shuttle/syndicate)
-"aad" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters{id = "syndieshutters"; name = "blast shutters"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/shuttle/syndicate)
+"aad" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters{id = "syndieshutters"; name = "blast shutters"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/shuttle/syndicate)
"aae" = (/turf/space,/obj/machinery/porta_turret/syndicate,/turf/simulated/wall/shuttle{dir = 1; icon_state = "diagonalWall3"},/area/shuttle/syndicate)
"aaf" = (/obj/structure/table,/obj/machinery/microwave,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate)
"aag" = (/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate)
@@ -35,7 +35,7 @@
"aaI" = (/obj/machinery/door/window{dir = 4; name = "EVA Storage"; req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate)
"aaJ" = (/obj/machinery/door/airlock/external{req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate)
"aaK" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "EVA Storage"; req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate)
-"aaL" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/shuttle/syndicate)
+"aaL" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/shuttle/syndicate)
"aaM" = (/obj/structure/rack,/obj/item/clothing/suit/space/syndicate/black/red,/obj/item/clothing/head/helmet/space/syndicate/black/red,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate)
"aaN" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; freerange = 1; frequency = 1213; name = "Syndicate Intercom"; pixel_x = -32; subspace_transmission = 1; syndie = 1},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate)
"aaO" = (/obj/machinery/recharge_station,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate)
@@ -133,14 +133,14 @@
"acC" = (/turf/space,/turf/simulated/wall/shuttle{dir = 2; icon_state = "swall_f10"; layer = 2},/area/shuttle/pod_1)
"acD" = (/turf/simulated/wall/r_wall,/area/gateway)
"acE" = (/turf/simulated/wall/r_wall,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"})
-"acF" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"})
+"acF" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"})
"acG" = (/turf/simulated/wall,/area/maintenance/auxsolarstarboard)
-"acH" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
+"acH" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
"acI" = (/obj/machinery/door/airlock/external{name = "Solar Maintenance"; req_access = null; req_access_txt = "10; 13"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
"acJ" = (/turf/simulated/wall,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"})
"acK" = (/obj/structure/cable,/obj/machinery/power/solar{id = "auxsolareast"; name = "Port Auxiliary Solar Array"},/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/solar/auxport)
"acL" = (/turf/simulated/wall,/area/ai_monitored/storage/satellite)
-"acM" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/ai_monitored/storage/satellite)
+"acM" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/ai_monitored/storage/satellite)
"acN" = (/obj/structure/cable/orange{tag = "icon-1-2"; icon_state = "1-2"},/turf/simulated/floor/bluegrid{name = "Mainframe Base"},/area/turret_protected/ai)
"acO" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1; pixel_y = 1},/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"},/area/turret_protected/ai)
"acP" = (/obj/machinery/door/window{dir = 1; name = "AI Core Door"; req_access_txt = "16"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
@@ -197,7 +197,7 @@
"adO" = (/obj/machinery/atmospherics/components/binary/pump/on{tag = "icon-pump_map (NORTH)"; icon_state = "pump_map"; dir = 1},/turf/simulated/floor/plasteel/black,/area/ai_monitored/storage/satellite)
"adP" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel/black,/area/ai_monitored/storage/satellite)
"adQ" = (/turf/simulated/wall/r_wall,/area/hallway/primary/starboard)
-"adR" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/starboard)
+"adR" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/starboard)
"adS" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst,/turf/simulated/wall/shuttle{icon_state = "swall_f5"},/area/shuttle/pod_1)
"adT" = (/obj/machinery/door/airlock/shuttle{name = "Escape Pod Airlock"},/obj/docking_port/mobile/pod{id = "pod1"; name = "escape pod 1"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/pod_1)
"adU" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst,/turf/simulated/wall/shuttle{icon_state = "swall_f9"},/area/shuttle/pod_1)
@@ -238,9 +238,9 @@
"aeD" = (/obj/machinery/door/airlock/external{name = "Solar Maintenance"; req_access = null; req_access_txt = "10; 13"},/obj/structure/cable{tag = "icon-1-2"; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
"aeE" = (/obj/structure/girder,/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"})
"aeF" = (/obj/item/weapon/weldingtool,/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"})
-"aeG" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"})
-"aeH" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"})
-"aeI" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"})
+"aeG" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"})
+"aeH" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"})
+"aeI" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"})
"aeJ" = (/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"})
"aeK" = (/obj/effect/decal/cleanable/oil,/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"})
"aeL" = (/obj/structure/rack,/obj/item/weapon/storage/toolbox/electrical{pixel_x = -3; pixel_y = 3},/obj/item/weapon/storage/toolbox/mechanical,/obj/item/device/multitool,/turf/simulated/floor/plasteel/black,/area/ai_monitored/storage/satellite)
@@ -307,7 +307,7 @@
"afU" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"})
"afV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"})
"afW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"})
-"afX" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/ai_monitored/storage/satellite)
+"afX" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/ai_monitored/storage/satellite)
"afY" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/obj/structure/cable/orange{tag = "icon-1-2"; icon_state = "1-2"},/turf/simulated/floor/plating,/area/ai_monitored/storage/satellite)
"afZ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plating,/area/ai_monitored/storage/satellite)
"aga" = (/obj/machinery/door/firedoor,/obj/structure/cable/orange{tag = "icon-1-2"; icon_state = "1-2"},/obj/machinery/door/airlock/highsecurity{name = "AI Chamber"; req_access_txt = "16"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
@@ -334,7 +334,7 @@
"agv" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating{tag = "icon-panelscorched"; icon_state = "panelscorched"},/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"})
"agw" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating{tag = "icon-platingdmg2"; icon_state = "platingdmg2"},/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"})
"agx" = (/obj/structure/bed/stool,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"})
-"agy" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/simulated/floor/plating,/area/ai_monitored/storage/satellite)
+"agy" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/simulated/floor/plating,/area/ai_monitored/storage/satellite)
"agz" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/obj/structure/cable/orange{tag = "icon-1-4"; icon_state = "1-4"},/turf/simulated/floor/plating,/area/ai_monitored/storage/satellite)
"agA" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable/orange{tag = "icon-2-8"; icon_state = "2-8"},/turf/simulated/floor/plating,/area/ai_monitored/storage/satellite)
"agB" = (/obj/machinery/door/airlock/maintenance_hatch{name = "turret maintenance hatch"; req_access_txt = "65"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/satellite)
@@ -345,7 +345,7 @@
"agG" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/camera{c_tag = "MiniSat Ante Turrets"},/turf/simulated/floor/plasteel{tag = "icon-darkpurple (NORTHEAST)"; icon_state = "darkpurple"; dir = 5},/area/turret_protected/ai)
"agH" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/ai_monitored/storage/satellite)
"agI" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plating,/area/ai_monitored/storage/satellite)
-"agJ" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plating,/area/ai_monitored/storage/satellite)
+"agJ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plating,/area/ai_monitored/storage/satellite)
"agK" = (/obj/structure/transit_tube{tag = "icon-N-S"; icon_state = "N-S"},/turf/space,/area/space)
"agL" = (/obj/structure/transit_tube{icon_state = "D-SE"; tag = "icon-D-NE"},/turf/simulated/floor/plating/airless,/area/space/nearstation)
"agM" = (/obj/structure/transit_tube{icon_state = "NE-SW"},/turf/simulated/floor/plating/airless,/area/space/nearstation)
@@ -404,8 +404,8 @@
"ahN" = (/turf/simulated/floor/plating/airless{dir = 9; icon_state = "warnplate"},/area/toxins/test_area)
"ahO" = (/turf/simulated/floor/plating/airless,/area/toxins/test_area)
"ahP" = (/turf/simulated/floor/plating/airless{icon_state = "warnplate"; dir = 5},/area/toxins/test_area)
-"ahQ" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/auxsolarport)
-"ahR" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/fpmaint{name = "Fore Port Maintenance"})
+"ahQ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/auxsolarport)
+"ahR" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/fpmaint{name = "Fore Port Maintenance"})
"ahS" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable/orange{tag = "icon-2-4"; icon_state = "2-4"},/turf/simulated/floor/plating,/area/ai_monitored/storage/satellite)
"ahT" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable/orange{tag = "icon-1-8"; icon_state = "1-8"},/turf/simulated/floor/plating,/area/ai_monitored/storage/satellite)
"ahU" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable/orange{tag = "icon-2-4"; icon_state = "2-4"},/turf/simulated/floor/plasteel{tag = "icon-darkpurple (SOUTHWEST)"; icon_state = "darkpurple"; dir = 10},/area/turret_protected/ai)
@@ -454,10 +454,10 @@
"aiL" = (/obj/structure/transit_tube{icon_state = "D-NE"},/turf/simulated/floor/plating/airless{dir = 2; icon_state = "warnplate"},/area/space/nearstation)
"aiM" = (/obj/structure/transit_tube{icon_state = "E-NW"},/turf/simulated/floor/plating/airless{dir = 1; icon_state = "warnplatecorner"},/area/space/nearstation)
"aiN" = (/obj/structure/transit_tube{icon_state = "W-NE"},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/floor/plating,/area/hallway/primary/starboard)
-"aiO" = (/obj/structure/transit_tube{tag = "icon-D-NW"; icon_state = "D-NW"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/starboard)
-"aiP" = (/obj/structure/transit_tube{icon_state = "D-SE"; tag = "icon-D-NE"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/starboard)
-"aiQ" = (/obj/structure/transit_tube{icon_state = "E-SW"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/starboard)
-"aiR" = (/obj/structure/transit_tube{icon_state = "W-SE"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/starboard)
+"aiO" = (/obj/structure/transit_tube{tag = "icon-D-NW"; icon_state = "D-NW"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/starboard)
+"aiP" = (/obj/structure/transit_tube{icon_state = "D-SE"; tag = "icon-D-NE"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/starboard)
+"aiQ" = (/obj/structure/transit_tube{icon_state = "E-SW"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/starboard)
+"aiR" = (/obj/structure/transit_tube{icon_state = "W-SE"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/starboard)
"aiS" = (/obj/structure/transit_tube{icon_state = "D-SW"},/obj/structure/flora/kirbyplants{icon_state = "plant-05"; layer = 4.1; tag = "icon-plant-05"},/turf/simulated/floor/plasteel/black,/area/hallway/primary/starboard)
"aiT" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; layer = 2.1; on = 1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel/black,/area/hallway/primary/starboard)
"aiU" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4; initialize_directions = 11},/turf/simulated/floor/plasteel/darkpurple/side{tag = "icon-darkpurple (EAST)"; icon_state = "darkpurple"; dir = 4},/area/hallway/primary/starboard)
@@ -468,7 +468,7 @@
"aiZ" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 4; initialize_directions = 11},/turf/simulated/floor/plasteel,/area/toxins/mixing)
"aja" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/toxins/mixing)
"ajb" = (/obj/machinery/atmospherics/components/binary/volume_pump{tag = "icon-volpump_map (WEST)"; icon_state = "volpump_map"; dir = 8},/turf/simulated/floor/plasteel,/area/toxins/mixing)
-"ajc" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/turf/simulated/floor/plating,/area/toxins/mixing)
+"ajc" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/turf/simulated/floor/plating,/area/toxins/mixing)
"ajd" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/turf/simulated/wall/r_wall,/area/toxins/mixing)
"aje" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; external_pressure_bound = 0; initialize_directions = 1; internal_pressure_bound = 4000; name = "mixing vent"; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine,/area/toxins/mixing)
"ajf" = (/obj/structure/table,/obj/machinery/cell_charger,/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"})
@@ -493,7 +493,7 @@
"ajy" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{tag = "icon-darkpurple (NORTH)"; icon_state = "darkpurple"; dir = 1},/area/turret_protected/aisat_interior)
"ajz" = (/obj/machinery/computer/station_alert,/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{tag = "icon-darkpurple (NORTH)"; icon_state = "darkpurple"; dir = 1},/area/turret_protected/aisat_interior)
"ajA" = (/obj/structure/flora/kirbyplants,/turf/simulated/floor/plasteel{tag = "icon-darkpurple (NORTHEAST)"; icon_state = "darkpurple"; dir = 5},/area/turret_protected/aisat_interior)
-"ajB" = (/obj/structure/transit_tube{icon_state = "D-NE"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/starboard)
+"ajB" = (/obj/structure/transit_tube{icon_state = "D-NE"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/starboard)
"ajC" = (/obj/structure/transit_tube{icon_state = "S-NW"},/obj/structure/sign/directions/security,/turf/simulated/floor/plasteel/black,/area/hallway/primary/starboard)
"ajD" = (/turf/simulated/floor/plasteel{tag = "icon-darkred (NORTHWEST)"; icon_state = "darkred"; dir = 9},/area/hallway/primary/starboard)
"ajE" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel/darkpurple/corner{tag = "icon-darkpurplecorners (EAST)"; icon_state = "darkpurplecorners"; dir = 4},/area/hallway/primary/starboard)
@@ -502,7 +502,7 @@
"ajH" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/plasteel/black,/area/hallway/primary/starboard)
"ajI" = (/obj/machinery/r_n_d/server/robotics,/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server)
"ajJ" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; external_pressure_bound = 140; name = "server vent"; on = 1; pressure_checks = 0},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server)
-"ajK" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/structure/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'."; name = "SERVER ROOM"; pixel_y = 32},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/toxins/server)
+"ajK" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/structure/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'."; name = "SERVER ROOM"; pixel_y = 32},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/toxins/server)
"ajL" = (/obj/machinery/atmospherics/pipe/simple{dir = 10},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/machinery/camera{c_tag = "Research Server"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/toxins/server)
"ajM" = (/obj/machinery/power/apc{dir = 1; name = "Server Room APC"; pixel_x = 0; pixel_y = 25},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/toxins/server)
"ajN" = (/obj/machinery/atmospherics/components/unary/cold_sink/freezer{current_temperature = 80; dir = 2; on = 1},/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/toxins/server)
@@ -518,7 +518,7 @@
"ajX" = (/obj/structure/closet/firecloset,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"})
"ajY" = (/obj/structure/closet/emcloset,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"})
"ajZ" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden{tag = "icon-intact (SOUTHWEST)"; icon_state = "intact"; dir = 10},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"})
-"aka" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"})
+"aka" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"})
"akb" = (/obj/structure/closet,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/fpmaint{name = "Fore Port Maintenance"})
"akc" = (/obj/machinery/power/smes,/obj/structure/cable{tag = "icon-0-4"; icon_state = "0-4"},/turf/simulated/floor/plating,/area/maintenance/auxsolarport)
"akd" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{tag = "icon-2-8"; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/auxsolarport)
@@ -546,7 +546,7 @@
"akz" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/camera{c_tag = "MiniSat Lobby East"; dir = 8; network = list("MINE")},/turf/simulated/floor/plasteel{tag = "icon-darkpurple (EAST)"; icon_state = "darkpurple"; dir = 4},/area/turret_protected/aisat_interior)
"akA" = (/obj/machinery/door/airlock/maintenance_hatch{req_access_txt = "65"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/satellite)
"akB" = (/obj/structure/transit_tube{tag = "icon-W-NE-SE"; icon_state = "W-NE-SE"},/turf/simulated/floor/plating/airless{dir = 1; icon_state = "warnplatecorner"},/area/space/nearstation)
-"akC" = (/obj/structure/window/fulltile/reinforced,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 0},/turf/simulated/floor/plating,/area/hallway/primary/starboard)
+"akC" = (/obj/structure/window/reinforced/fulltile,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 0},/turf/simulated/floor/plating,/area/hallway/primary/starboard)
"akD" = (/turf/simulated/floor/plasteel{tag = "icon-darkred (WEST)"; icon_state = "darkred"; dir = 8},/area/hallway/primary/starboard)
"akE" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel/black,/area/hallway/primary/starboard)
"akF" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel/black,/area/hallway/primary/starboard)
@@ -605,7 +605,7 @@
"alG" = (/obj/machinery/vending/coffee,/turf/simulated/floor/plasteel/black,/area/hallway/primary/starboard)
"alH" = (/obj/machinery/r_n_d/server/core,/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server)
"alI" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; external_pressure_bound = 120; initialize_directions = 1; internal_pressure_bound = 4000; name = "server vent"; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server)
-"alJ" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'."; name = "SERVER ROOM"; pixel_y = -32},/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/toxins/server)
+"alJ" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'."; name = "SERVER ROOM"; pixel_y = -32},/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/toxins/server)
"alK" = (/obj/machinery/atmospherics/pipe/simple{dir = 9},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/toxins/server)
"alL" = (/obj/machinery/computer/rdservercontrol,/obj/machinery/light_switch{pixel_y = -23},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/toxins/server)
"alM" = (/obj/structure/table,/obj/item/weapon/folder/white,/obj/item/weapon/pen,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/toxins/server)
@@ -641,7 +641,7 @@
"amq" = (/obj/structure/transit_tube{icon_state = "N-SW"},/obj/structure/lattice,/turf/space,/area/space)
"amr" = (/obj/structure/transit_tube{icon_state = "N-S"},/obj/structure/lattice,/turf/space,/area/space)
"ams" = (/obj/structure/transit_tube{icon_state = "E-NW"},/turf/simulated/floor/plating/airless,/area/space/nearstation)
-"amt" = (/obj/structure/transit_tube{icon_state = "W-NE"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/starboard)
+"amt" = (/obj/structure/transit_tube{icon_state = "W-NE"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/starboard)
"amu" = (/obj/structure/transit_tube{tag = "icon-D-NW"; icon_state = "D-NW"},/obj/structure/flora/kirbyplants{icon_state = "plant-05"; layer = 4.1; tag = "icon-plant-05"},/turf/simulated/floor/plasteel/black,/area/hallway/primary/starboard)
"amv" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/vending/cola,/turf/simulated/floor/plasteel/black,/area/hallway/primary/starboard)
"amw" = (/obj/machinery/status_display,/turf/simulated/wall/r_wall,/area/toxins/storage)
@@ -691,7 +691,7 @@
"ano" = (/obj/machinery/power/apc{dir = 4; name = "Research Lab APC"; pixel_x = 26; pixel_y = 0},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plasteel{tag = "icon-whitepurple (NORTHEAST)"; icon_state = "whitepurple"; dir = 5},/area/toxins/lab)
"anp" = (/turf/simulated/wall,/area/toxins/mixing)
"anq" = (/obj/machinery/door/airlock/research{name = "Testing Lab"; req_access_txt = "47"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/toxins/mixing)
-"anr" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/toxins/mixing)
+"anr" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/toxins/mixing)
"ans" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall,/area/toxins/mixing)
"ant" = (/obj/machinery/light_switch{pixel_x = -23},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/mixing)
"anu" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 4},/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/toxins/mixing)
@@ -703,8 +703,8 @@
"anA" = (/obj/effect/decal/cleanable/oil/streak,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/mob/living/simple_animal/mouse/white,/turf/simulated/floor/plating,/area/maintenance/fpmaint{name = "Fore Port Maintenance"})
"anB" = (/turf/simulated/wall,/area/hallway/primary/port)
"anC" = (/obj/machinery/door/airlock/external{name = "Escape Airlock"},/turf/simulated/floor/plasteel,/area/hallway/primary/port)
-"anD" = (/obj/structure/transit_tube{icon_state = "D-SE"; tag = "icon-D-NE"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/hallway/primary/port)
-"anE" = (/obj/structure/transit_tube{icon_state = "E-SW"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/hallway/primary/port)
+"anD" = (/obj/structure/transit_tube{icon_state = "D-SE"; tag = "icon-D-NE"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/hallway/primary/port)
+"anE" = (/obj/structure/transit_tube{icon_state = "E-SW"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/hallway/primary/port)
"anF" = (/obj/structure/transit_tube{icon_state = "W-SE"},/turf/simulated/floor/plating/airless{dir = 1; icon_state = "warnplate"},/area/space/nearstation)
"anG" = (/obj/structure/transit_tube{tag = "icon-D-SW"; icon_state = "D-SW"},/turf/simulated/floor/plating/airless{dir = 5; icon_state = "warnplate"},/area/space/nearstation)
"anH" = (/obj/structure/lattice/catwalk,/turf/space,/area/space)
@@ -742,7 +742,7 @@
"aon" = (/turf/simulated/floor/plasteel/black,/area/hallway/primary/port)
"aoo" = (/obj/structure/sign/pods{pixel_y = 32},/turf/simulated/floor/plasteel{tag = "icon-darkpurple (NORTHEAST)"; icon_state = "darkpurple"; dir = 5},/area/hallway/primary/port)
"aop" = (/obj/structure/transit_tube{icon_state = "S-NE"},/obj/structure/sign/directions/science,/turf/simulated/floor/plasteel/black,/area/hallway/primary/port)
-"aoq" = (/obj/structure/transit_tube{icon_state = "D-NW"; tag = "icon-D-NE"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/port)
+"aoq" = (/obj/structure/transit_tube{icon_state = "D-NW"; tag = "icon-D-NE"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/port)
"aor" = (/obj/structure/transit_tube{tag = "icon-D-NE"; icon_state = "D-NE"},/turf/simulated/floor/plating/airless,/area/space/nearstation)
"aos" = (/obj/structure/transit_tube{icon_state = "NW-SE"},/turf/simulated/floor/plating/airless{dir = 4; icon_state = "warnplate"},/area/space/nearstation)
"aot" = (/obj/structure/transit_tube{tag = "icon-D-SW"; icon_state = "D-SW"},/turf/space,/area/space)
@@ -771,7 +771,7 @@
"aoQ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/lab)
"aoR" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/lab)
"aoS" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurple"},/area/toxins/lab)
-"aoT" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/toxins/mixing)
+"aoT" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/toxins/mixing)
"aoU" = (/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/mixing)
"aoV" = (/obj/structure/closet/firecloset,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/mixing)
"aoW" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/mixing)
@@ -781,11 +781,11 @@
"apa" = (/obj/item/device/radio/intercom{pixel_y = 25},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel/warning{tag = "icon-warning (NORTHWEST)"; icon_state = "warning"; dir = 9},/area/toxins/test_area)
"apb" = (/obj/machinery/button/massdriver{dir = 2; id = "toxinsdriver"; pixel_y = 24},/turf/simulated/floor/plasteel/warning{tag = "icon-warning (NORTH)"; icon_state = "warning"; dir = 1},/area/toxins/test_area)
"apc" = (/obj/machinery/doppler_array{dir = 4},/turf/simulated/floor/plasteel/warning{tag = "icon-warning (NORTH)"; icon_state = "warning"; dir = 1},/area/toxins/test_area)
-"apd" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/toxins/test_area)
+"apd" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/toxins/test_area)
"ape" = (/obj/machinery/light{dir = 8; icon_state = "tube1"},/turf/simulated/floor/plasteel/black,/area/hallway/primary/port)
"apf" = (/turf/simulated/floor/plasteel{tag = "icon-darkpurple (EAST)"; icon_state = "darkpurple"; dir = 4},/area/hallway/primary/port)
"apg" = (/obj/structure/transit_tube/station{dir = 8; icon_state = "closed"; reverse_launch = 1; tag = "icon-closed (EAST)"},/obj/structure/transit_tube_pod,/turf/simulated/floor/plasteel/black,/area/hallway/primary/port)
-"aph" = (/obj/structure/window/fulltile/reinforced,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 0},/turf/simulated/floor/plating,/area/hallway/primary/port)
+"aph" = (/obj/structure/window/reinforced/fulltile,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 0},/turf/simulated/floor/plating,/area/hallway/primary/port)
"api" = (/obj/structure/transit_tube{icon_state = "D-SE"; tag = "icon-D-NE"},/obj/structure/transit_tube{tag = "icon-D-NE"; icon_state = "D-NE"},/turf/simulated/floor/plating/airless{dir = 4; icon_state = "warnplate"},/area/space/nearstation)
"apj" = (/obj/structure/transit_tube{tag = "icon-E-SW-NW"; icon_state = "E-SW-NW"},/turf/space,/area/space)
"apk" = (/obj/structure/transit_tube{tag = "icon-E-W-Pass"; icon_state = "E-W-Pass"},/turf/simulated/floor/plating/airless,/area/space/nearstation)
@@ -803,7 +803,7 @@
"apw" = (/turf/simulated/floor/plasteel{dir = 10; icon_state = "darkblue"},/area/hallway/primary/starboard)
"apx" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel/black,/area/hallway/primary/starboard)
"apy" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/toxins/storage)
-"apz" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/toxins/storage)
+"apz" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/toxins/storage)
"apA" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/toxins/storage)
"apB" = (/obj/machinery/computer/area_atmos,/obj/machinery/firealarm{dir = 4; pixel_x = 28},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/toxins/storage)
"apC" = (/turf/simulated/floor/plasteel{tag = "icon-whitepurple (SOUTHWEST)"; icon_state = "whitepurple"; dir = 10},/area/toxins/lab)
@@ -828,7 +828,7 @@
"apV" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel/black,/area/hallway/primary/port)
"apW" = (/turf/simulated/floor/plasteel{tag = "icon-darkpurple (SOUTHEAST)"; icon_state = "darkpurple"; dir = 6},/area/hallway/primary/port)
"apX" = (/obj/structure/transit_tube{icon_state = "N-SE"},/turf/simulated/floor/plasteel/black,/area/hallway/primary/port)
-"apY" = (/obj/structure/transit_tube{tag = "icon-D-SW"; icon_state = "D-SW"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/port)
+"apY" = (/obj/structure/transit_tube{tag = "icon-D-SW"; icon_state = "D-SW"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/port)
"apZ" = (/obj/structure/transit_tube{icon_state = "NE-SW"},/turf/simulated/floor/plating/airless{dir = 4; icon_state = "warnplate"},/area/space/nearstation)
"aqa" = (/obj/structure/transit_tube{icon_state = "D-NW"; tag = "icon-D-NE"},/turf/space,/area/space)
"aqb" = (/obj/structure/transit_tube{icon_state = "NW-SE"},/turf/space,/area/space)
@@ -845,7 +845,7 @@
"aqm" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel{tag = "icon-whitepurple (WEST)"; icon_state = "whitepurple"; dir = 8},/area/toxins/lab)
"aqn" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/lab)
"aqo" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8; initialize_directions = 11},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurple"},/area/toxins/lab)
-"aqp" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/toxins/mixing)
+"aqp" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/toxins/mixing)
"aqq" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/mixing)
"aqr" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; on = 1; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/mixing)
"aqs" = (/obj/machinery/portable_atmospherics/canister,/obj/item/device/radio/intercom{pixel_x = 30; pixel_y = 0},/obj/structure/window/reinforced{dir = 1; layer = 2.9},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/mixing)
@@ -865,7 +865,7 @@
"aqG" = (/obj/machinery/power/apc{dir = 8; name = "Port Primary Hall APC"; pixel_x = -24; pixel_y = 0},/obj/structure/cable,/turf/simulated/floor/plasteel/black,/area/hallway/primary/port)
"aqH" = (/obj/machinery/vending/coffee,/turf/simulated/floor/plasteel/black,/area/hallway/primary/port)
"aqI" = (/obj/structure/transit_tube{tag = "icon-D-NE"; icon_state = "D-NE"},/obj/structure/flora/kirbyplants{icon_state = "plant-08"; layer = 4.1; tag = "icon-plant-08"},/turf/simulated/floor/plasteel/black,/area/hallway/primary/port)
-"aqJ" = (/obj/structure/transit_tube{icon_state = "E-NW"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/port)
+"aqJ" = (/obj/structure/transit_tube{icon_state = "E-NW"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/port)
"aqK" = (/obj/structure/transit_tube{icon_state = "W-NE"},/turf/simulated/floor/plating/airless,/area/space/nearstation)
"aqL" = (/obj/structure/transit_tube{icon_state = "D-NW"; tag = "icon-D-NE"},/turf/simulated/floor/plating/airless{dir = 4; icon_state = "warnplate"},/area/space/nearstation)
"aqM" = (/obj/structure/transit_tube{dir = 2; icon_state = "N-S-Pass"; tag = "icon-E-W-Pass"},/turf/space,/area/space)
@@ -880,7 +880,7 @@
"aqV" = (/obj/item/weapon/folder/white,/obj/structure/table,/obj/item/weapon/disk/tech_disk{pixel_x = 0; pixel_y = 0},/obj/item/weapon/disk/tech_disk{pixel_x = 0; pixel_y = 0},/obj/item/weapon/disk/design_disk,/obj/item/weapon/disk/design_disk,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/lab)
"aqW" = (/obj/structure/table,/obj/machinery/cell_charger,/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/lab)
"aqX" = (/obj/structure/flora/kirbyplants{icon_state = "plant-07"; name = "Photosynthetic Potted plant"; pixel_y = 10; tag = "icon-plant-07"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/lab)
-"aqY" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/toxins/lab)
+"aqY" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/toxins/lab)
"aqZ" = (/turf/simulated/floor/plasteel{tag = "icon-whitepurple (WEST)"; icon_state = "whitepurple"; dir = 8},/area/toxins/lab)
"ara" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8; initialize_directions = 11},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/lab)
"arb" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurple"},/area/toxins/lab)
@@ -912,7 +912,7 @@
"arB" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating,/area/storage/tools)
"arC" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 2; on = 1},/obj/machinery/camera/autoname{dir = 4; network = list("SS13")},/turf/simulated/floor/plasteel/black,/area/hallway/primary/port)
"arD" = (/obj/structure/extinguisher_cabinet{pixel_y = -32},/turf/simulated/floor/plasteel{tag = "icon-darkpurple"; icon_state = "darkpurple"},/area/turret_protected/aisat_interior)
-"arE" = (/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating/airless{dir = 2; icon_state = "warnplate"},/area/hallway/primary/port)
+"arE" = (/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating/airless{dir = 2; icon_state = "warnplate"},/area/hallway/primary/port)
"arF" = (/turf/simulated/floor/plating/airless{dir = 6; icon_state = "warnplate"},/area/space/nearstation)
"arG" = (/obj/item/weapon/storage/toolbox/syndicate,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/fpmaint{name = "Fore Port Maintenance"})
"arH" = (/obj/structure/transit_tube{icon_state = "N-SW"},/turf/space,/area/space)
@@ -970,7 +970,7 @@
"asH" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/transport)
"asI" = (/obj/machinery/computer/shuttle/ferry/request,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/transport)
"asJ" = (/obj/structure/bed/chair,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/transport)
-"asK" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/starboard)
+"asK" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/starboard)
"asL" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel/neutral/side{tag = "icon-neutral (WEST)"; icon_state = "neutral"; dir = 8},/area/hallway/primary/starboard)
"asM" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/hallway/primary/starboard)
"asN" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plasteel/neutral/side{tag = "icon-neutral (EAST)"; icon_state = "neutral"; dir = 4},/area/hallway/primary/starboard)
@@ -1078,7 +1078,7 @@
"auL" = (/obj/structure/reagent_dispensers/peppertank{pixel_x = -30; pixel_y = 0},/obj/machinery/alarm{pixel_y = 25},/obj/structure/closet,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/checkpoint/science)
"auM" = (/obj/structure/table,/obj/machinery/computer/security/telescreen{desc = "Used for watching the RD's goons from the safety of your own office."; name = "Research Monitor"; network = list("RD"); pixel_x = 0; pixel_y = 2},/obj/machinery/camera{c_tag = "Research Security Post"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/checkpoint/science)
"auN" = (/obj/structure/table,/obj/machinery/recharger{pixel_y = 4},/obj/machinery/light_switch{pixel_y = 23},/obj/item/weapon/screwdriver{pixel_y = 10},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/checkpoint/science)
-"auO" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/checkpoint/science)
+"auO" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/checkpoint/science)
"auP" = (/obj/structure/closet/crate,/obj/item/target,/obj/item/target,/obj/item/target,/turf/simulated/floor/plasteel,/area/toxins/misc_lab)
"auQ" = (/turf/simulated/floor/plasteel,/area/toxins/misc_lab)
"auR" = (/obj/structure/closet/crate,/obj/item/target/alien,/obj/item/target/alien,/obj/item/target/alien,/turf/simulated/floor/plasteel,/area/toxins/misc_lab)
@@ -1099,9 +1099,9 @@
"avg" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/turf/simulated/floor/plating,/area/maintenance/fpmaint{name = "Fore Port Maintenance"})
"avh" = (/obj/structure/table/glass,/obj/item/weapon/storage/bag/trash,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/fpmaint{name = "Fore Port Maintenance"})
"avi" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/fpmaint{name = "Fore Port Maintenance"})
-"avj" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/storage/tools)
+"avj" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/storage/tools)
"avk" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass{name = "Auxiliary Tool Storage"; req_access_txt = "12"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/storage/tools)
-"avl" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/storage/tools)
+"avl" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/storage/tools)
"avm" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/firealarm{dir = 8; pixel_x = -26; pixel_y = 0},/turf/simulated/floor/plasteel/neutral/side{tag = "icon-neutral (WEST)"; icon_state = "neutral"; dir = 8},/area/hallway/primary/port)
"avn" = (/turf/simulated/floor/plasteel,/area/hallway/primary/port)
"avo" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel/neutral/side{dir = 4},/area/hallway/primary/port)
@@ -1109,8 +1109,8 @@
"avq" = (/obj/structure/closet/firecloset,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/hallway/primary/starboard)
"avr" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/plasteel/neutral/side{tag = "icon-neutral (EAST)"; icon_state = "neutral"; dir = 4},/area/hallway/primary/starboard)
"avs" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall/r_wall,/area/toxins/lab)
-"avt" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters/preopen{id = "rnd"; name = "research lab shutters"},/obj/structure/window/fulltile/reinforced,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/toxins/lab)
-"avu" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters/preopen{id = "rnd"; name = "research lab shutters"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/toxins/lab)
+"avt" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters/preopen{id = "rnd"; name = "research lab shutters"},/obj/structure/window/reinforced/fulltile,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/toxins/lab)
+"avu" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters/preopen{id = "rnd"; name = "research lab shutters"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/toxins/lab)
"avv" = (/obj/structure/table/reinforced,/obj/machinery/door/window/southright{dir = 1; name = "Research and Development Desk"; req_access_txt = "7"},/obj/machinery/door/poddoor/shutters/preopen{id = "rnd"; name = "research lab shutters"},/turf/simulated/floor/plating,/area/toxins/lab)
"avw" = (/obj/structure/flora/kirbyplants{icon_state = "plant-09"; name = "Photosynthetic Potted plant"; pixel_y = 10; tag = "icon-plant-09"},/turf/simulated/floor/plasteel{tag = "icon-whitepurple (WEST)"; icon_state = "whitepurple"; dir = 8},/area/toxins/lab)
"avx" = (/obj/structure/flora/kirbyplants{icon_state = "plant-09"; name = "Photosynthetic Potted plant"; pixel_y = 10; tag = "icon-plant-09"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurple"},/area/toxins/lab)
@@ -1192,14 +1192,14 @@
"awV" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plasteel{tag = "icon-whitepurple (WEST)"; icon_state = "whitepurple"; dir = 8},/area/toxins/lab)
"awW" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurple"},/area/toxins/lab)
"awX" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8; initialize_directions = 11},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/lab)
-"awY" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/security/checkpoint/science)
+"awY" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/security/checkpoint/science)
"awZ" = (/obj/structure/filingcabinet,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel/red/side{tag = "icon-red (SOUTHWEST)"; icon_state = "red"; dir = 10},/area/security/checkpoint/science)
"axa" = (/obj/machinery/computer/secure_data,/obj/machinery/power/apc{dir = 2; name = "Science Security APC"; pixel_y = -24},/obj/structure/cable,/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/checkpoint/science)
"axb" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/firealarm{dir = 4; pixel_x = 28},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 6},/area/security/checkpoint/science)
"axc" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall,/area/security/checkpoint/science)
"axd" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/toxins/misc_lab)
"axe" = (/obj/structure/table/reinforced,/obj/machinery/recharger{pixel_y = 4},/obj/item/weapon/paper/range,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9; pixel_y = 0},/turf/simulated/floor/plasteel,/area/toxins/misc_lab)
-"axf" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/toxins/misc_lab)
+"axf" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/toxins/misc_lab)
"axg" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/toxins/misc_lab)
"axh" = (/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/toxins/misc_lab)
"axi" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel{dir = 5; icon_state = "warning"},/area/toxins/misc_lab)
@@ -1213,10 +1213,10 @@
"axq" = (/obj/item/weapon/bedsheet,/obj/structure/bed,/obj/machinery/power/apc{cell_type = 5000; dir = 1; name = "Virology APC"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plasteel/whitegreen/side{tag = "icon-whitegreen (NORTHEAST)"; icon_state = "whitegreen"; dir = 5},/area/medical/virology)
"axr" = (/obj/machinery/camera/autoname{tag = "icon-camera (NORTHEAST)"; icon_state = "camera"; dir = 5},/mob/living/carbon/monkey,/turf/simulated/floor/grass,/area/medical/virology)
"axs" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/grass,/area/medical/virology)
-"axt" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/virology)
+"axt" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/virology)
"axu" = (/mob/living/carbon/monkey,/turf/simulated/floor/grass,/area/medical/genetics_cloning)
"axv" = (/obj/machinery/light/small{dir = 1},/mob/living/carbon/monkey,/turf/simulated/floor/grass,/area/medical/genetics_cloning)
-"axw" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/genetics_cloning)
+"axw" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/genetics_cloning)
"axx" = (/turf/simulated/floor/plasteel/blue/side{tag = "icon-blue (WEST)"; icon_state = "blue"; dir = 8},/area/hallway/primary/port)
"axy" = (/turf/simulated/floor/plasteel/neutral/corner,/area/hallway/primary/port)
"axz" = (/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel/neutral/side,/area/hallway/primary/port)
@@ -1293,7 +1293,7 @@
"ayS" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Central Port Maintenance"})
"ayT" = (/obj/structure/rack,/obj/item/weapon/storage/fancy/cigarettes,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Central Port Maintenance"})
"ayU" = (/obj/structure/rack,/obj/item/weapon/crowbar,/obj/item/weapon/wrench,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Central Port Maintenance"})
-"ayV" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Central Port Maintenance"})
+"ayV" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Central Port Maintenance"})
"ayW" = (/obj/structure/lattice,/turf/space,/area/construction)
"ayX" = (/turf/space,/area/construction)
"ayY" = (/turf/simulated/floor/plasteel,/area/construction)
@@ -1308,7 +1308,7 @@
"azh" = (/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/hor)
"azi" = (/obj/machinery/computer/security/telescreen{desc = "Used for watching the RD's goons from the safety of his office."; name = "Research Monitor"; network = list("RD"); pixel_x = 0; pixel_y = 2},/obj/structure/table,/obj/machinery/power/apc{dir = 1; name = "RD Office APC"; pixel_y = 24},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/hor)
"azj" = (/obj/structure/table,/obj/item/weapon/folder/white,/obj/item/weapon/stamp/rd{pixel_x = 3; pixel_y = -2},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/hor)
-"azk" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/crew_quarters/hor)
+"azk" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/crew_quarters/hor)
"azl" = (/turf/simulated/wall,/area/toxins/misc_lab)
"azm" = (/obj/item/weapon/cigbutt,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"})
"azn" = (/obj/structure/table,/turf/simulated/floor/plating,/area/maintenance/fpmaint{name = "Fore Port Maintenance"})
@@ -1335,14 +1335,14 @@
"azI" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; layer = 2.1; on = 1},/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/hor)
"azJ" = (/obj/structure/bed/chair/office/light{dir = 8},/obj/effect/landmark/start{name = "Research Director"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/hor)
"azK" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/hor)
-"azL" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/crew_quarters/hor)
-"azM" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/toxins/explab)
+"azL" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/crew_quarters/hor)
+"azM" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/toxins/explab)
"azN" = (/obj/structure/closet/emcloset{pixel_x = -2},/turf/simulated/floor/plasteel,/area/toxins/explab)
"azO" = (/obj/structure/table,/obj/item/weapon/folder/white,/obj/item/weapon/folder/white,/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/obj/item/device/radio/off,/turf/simulated/floor/plasteel,/area/toxins/explab)
"azP" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = 0; pixel_y = 6},/turf/simulated/floor/plasteel,/area/toxins/explab)
"azQ" = (/obj/structure/table,/obj/item/weapon/pen,/obj/machinery/camera{c_tag = "Experimentor Lab"; dir = 2; network = list("SS13","RD")},/obj/item/weapon/hand_labeler,/obj/item/stack/packageWrap,/turf/simulated/floor/plasteel,/area/toxins/explab)
"azR" = (/obj/structure/table,/obj/item/weapon/clipboard,/obj/item/weapon/book/manual/experimentor,/turf/simulated/floor/plasteel,/area/toxins/explab)
-"azS" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "telelab"; name = "test chamber blast door"},/obj/structure/window/fulltile/reinforced,/obj/machinery/door/firedoor/heavy,/turf/simulated/floor/engine,/area/toxins/explab)
+"azS" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "telelab"; name = "test chamber blast door"},/obj/structure/window/reinforced/fulltile,/obj/machinery/door/firedoor/heavy,/turf/simulated/floor/engine,/area/toxins/explab)
"azT" = (/turf/simulated/floor/engine,/area/toxins/explab)
"azU" = (/turf/simulated/wall/r_wall,/area/toxins/explab)
"azV" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"})
@@ -1374,7 +1374,7 @@
"aAv" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/hor)
"aAw" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/hor)
"aAx" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/hor)
-"aAy" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/crew_quarters/hor)
+"aAy" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/crew_quarters/hor)
"aAz" = (/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden,/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurple"},/area/toxins/lab)
"aAA" = (/obj/machinery/door/firedoor/heavy,/obj/machinery/door/airlock/research{name = "Experimentation Lab"; req_access_txt = "7"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/explab)
"aAB" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/toxins/explab)
@@ -1418,7 +1418,7 @@
"aBn" = (/obj/structure/cable{tag = "icon-4-8"; icon_state = "4-8"},/turf/simulated/floor/plasteel{tag = "icon-whitepurple (WEST)"; icon_state = "whitepurple"; dir = 8},/area/toxins/lab)
"aBo" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8; initialize_directions = 11},/obj/structure/cable{tag = "icon-2-8"; icon_state = "2-8"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/lab)
"aBp" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable{tag = "icon-4-8"; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurple"},/area/toxins/lab)
-"aBq" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable{tag = "icon-4-8"; icon_state = "4-8"},/turf/simulated/floor/plating,/area/toxins/explab)
+"aBq" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable{tag = "icon-4-8"; icon_state = "4-8"},/turf/simulated/floor/plating,/area/toxins/explab)
"aBr" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable{tag = "icon-4-8"; icon_state = "4-8"},/turf/simulated/floor/plasteel,/area/toxins/explab)
"aBs" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; layer = 2.1; on = 1},/obj/structure/cable{tag = "icon-4-8"; icon_state = "4-8"},/turf/simulated/floor/plasteel,/area/toxins/explab)
"aBt" = (/obj/structure/cable{tag = "icon-4-8"; icon_state = "4-8"},/turf/simulated/floor/plasteel,/area/toxins/explab)
@@ -1464,7 +1464,7 @@
"aCh" = (/obj/machinery/light{dir = 8; icon_state = "tube1"},/turf/simulated/floor/plasteel/neutral/side{tag = "icon-neutral (WEST)"; icon_state = "neutral"; dir = 8},/area/hallway/primary/port)
"aCi" = (/obj/item/stack/rods,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Central Port Maintenance"})
"aCj" = (/obj/structure/transit_tube{icon_state = "D-SE"; tag = "icon-D-NE"},/turf/simulated/floor/plating/airless{dir = 5; icon_state = "warnplate"},/area/space/nearstation)
-"aCk" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/construction)
+"aCk" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/construction)
"aCl" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel/caution{tag = "icon-caution (WEST)"; icon_state = "caution"; dir = 8},/area/hallway/primary/starboard)
"aCm" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/wall/r_wall,/area/crew_quarters/hor)
"aCn" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/crew_quarters/hor)
@@ -1512,7 +1512,7 @@
"aDd" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-whitepurple (NORTHWEST)"; icon_state = "whitepurple"; dir = 9},/area/toxins/lab)
"aDe" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitepurple"},/area/toxins/lab)
"aDf" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitepurplecorner"},/area/toxins/lab)
-"aDg" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/toxins/xenobiology)
+"aDg" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/toxins/xenobiology)
"aDh" = (/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
"aDi" = (/obj/structure/table,/obj/machinery/reagentgrinder,/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
"aDj" = (/obj/structure/bed/stool,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
@@ -1591,7 +1591,7 @@
"aEE" = (/obj/machinery/light,/obj/machinery/camera/autoname{dir = 1; network = list("SS13")},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitepurple"},/area/toxins/lab)
"aEF" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitepurple"},/area/toxins/lab)
"aEG" = (/obj/machinery/firealarm{pixel_y = -28},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitepurple"},/area/toxins/lab)
-"aEH" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/sign/xenobio,/turf/simulated/floor/plating,/area/toxins/xenobiology)
+"aEH" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/sign/xenobio,/turf/simulated/floor/plating,/area/toxins/xenobiology)
"aEI" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden{tag = "icon-intact (SOUTHWEST)"; icon_state = "intact"; dir = 10},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
"aEJ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
"aEK" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
@@ -1726,10 +1726,10 @@
"aHj" = (/obj/structure/table/reinforced,/turf/simulated/floor/plasteel/warnwhite,/area/toxins/xenobiology)
"aHk" = (/obj/structure/disposalpipe/trunk{dir = 4},/obj/structure/disposaloutlet,/turf/simulated/floor/engine,/area/toxins/xenobiology)
"aHl" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/engine,/area/toxins/xenobiology)
-"aHm" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/poddoor/preopen{id = "xenobio6"; name = "containment blast door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/engine,/area/toxins/xenobiology)
+"aHm" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/poddoor/preopen{id = "xenobio6"; name = "containment blast door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/engine,/area/toxins/xenobiology)
"aHn" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{dir = 6; icon_state = "warning"},/area/toxins/xenobiology)
"aHo" = (/obj/structure/window/reinforced,/obj/structure/table/reinforced,/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/toxins/xenobiology)
-"aHp" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "misclab"; name = "test chamber blast door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/engine,/area/toxins/xenobiology)
+"aHp" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "misclab"; name = "test chamber blast door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/engine,/area/toxins/xenobiology)
"aHq" = (/turf/simulated/floor/engine,/area/toxins/xenobiology)
"aHr" = (/obj/machinery/mineral/stacking_unit_console{dir = 2; machinedir = 8},/turf/simulated/wall,/area/maintenance/disposal)
"aHs" = (/obj/machinery/conveyor{dir = 6; id = "garbage"},/turf/simulated/floor/plating,/area/maintenance/disposal)
@@ -1780,7 +1780,7 @@
"aIl" = (/obj/structure/bed/stool,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/maintenance/disposal)
"aIm" = (/obj/item/conveyor_switch_construct{tag = "garbage"},/turf/simulated/floor/plating{icon_state = "warnplatecorner"},/area/maintenance/disposal)
"aIn" = (/obj/structure/window/reinforced,/obj/machinery/mineral/stacking_machine,/turf/simulated/floor/plating{icon_plating = "warnplate"; icon_state = "warnplate"},/area/maintenance/disposal)
-"aIo" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/disposal)
+"aIo" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/disposal)
"aIp" = (/obj/machinery/light_construct/small{tag = "icon-bulb-construct-stage1 (NORTH)"; icon_state = "bulb-construct-stage1"; dir = 1},/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/fpmaint{name = "Fore Port Maintenance"})
"aIq" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{tag = "icon-intact (NORTH)"; icon_state = "intact"; dir = 1},/obj/structure/disposalpipe/segment,/obj/machinery/power/apc{dir = 4; name = "CM Office APC"; pixel_x = 24; pixel_y = 0},/obj/structure/cable,/turf/simulated/floor/plating,/area/medical/cmo)
"aIr" = (/obj/structure/table/glass,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/medical/cmo)
@@ -1788,7 +1788,7 @@
"aIt" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 2; on = 1},/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/medical/cmo)
"aIu" = (/obj/machinery/doorButtons/access_button{dir = 8; idDoor = "virology_airlock_exterior"; idSelf = "virology_airlock_control"; name = "Virology Access Button"; pixel_x = 26; pixel_y = 0},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/virology{autoclose = 0; frequency = 1449; icon_state = "closed"; id_tag = "virology_airlock_exterior"; locked = 1; name = "Virology Exterior Airlock"; req_access_txt = "39"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology)
"aIv" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{id_tag = "GeneticsDoor"; name = "Genetics"; req_access_txt = "5; 9"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics_cloning)
-"aIw" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/medical/genetics_cloning)
+"aIw" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/medical/genetics_cloning)
"aIx" = (/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Central Port Maintenance"})
"aIy" = (/obj/structure/rack,/obj/item/weapon/tank/internals/oxygen/red,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Central Port Maintenance"})
"aIz" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/lattice,/turf/space,/area/space)
@@ -1812,7 +1812,7 @@
"aIR" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/airlock/hatch,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/construction)
"aIS" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/camera/autoname{tag = "icon-camera (NORTHEAST)"; icon_state = "camera"; dir = 5},/turf/simulated/floor/plasteel/neutral,/area/hallway/primary/starboard)
"aIT" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "purple"},/area/hallway/primary/starboard)
-"aIU" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters/preopen{id = "robotics"; name = "robotics lab shutters"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plasteel,/area/assembly/robotics)
+"aIU" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters/preopen{id = "robotics"; name = "robotics lab shutters"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plasteel,/area/assembly/robotics)
"aIV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plasteel,/area/assembly/robotics)
"aIW" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/assembly/robotics)
"aIX" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/assembly/robotics)
@@ -1820,10 +1820,10 @@
"aIZ" = (/obj/machinery/mecha_part_fabricator,/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/assembly/robotics)
"aJa" = (/obj/structure/table,/obj/item/device/mmi,/obj/item/device/mmi,/obj/item/device/mmi,/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/assembly/robotics)
"aJb" = (/obj/machinery/shieldwallgen{req_access = list(55)},/obj/structure/cable,/turf/simulated/floor/plating,/area/toxins/xenobiology)
-"aJc" = (/obj/structure/grille,/obj/structure/disposalpipe/segment,/obj/machinery/door/poddoor/preopen{id = "misclab"; name = "test chamber blast door"},/obj/structure/window/fulltile/reinforced,/obj/structure/cable,/obj/structure/sign/xeno_warning_mining,/turf/simulated/floor/engine,/area/toxins/xenobiology)
+"aJc" = (/obj/structure/grille,/obj/structure/disposalpipe/segment,/obj/machinery/door/poddoor/preopen{id = "misclab"; name = "test chamber blast door"},/obj/structure/window/reinforced/fulltile,/obj/structure/cable,/obj/structure/sign/xeno_warning_mining,/turf/simulated/floor/engine,/area/toxins/xenobiology)
"aJd" = (/obj/machinery/door/window/southleft{dir = 1; name = "Test Chamber"; req_access_txt = "55"},/obj/machinery/door/poddoor/preopen{id = "misclab"; name = "test chamber blast door"},/turf/simulated/floor/engine,/area/toxins/xenobiology)
-"aJe" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "misclab"; name = "test chamber blast door"},/obj/structure/window/fulltile/reinforced,/obj/structure/cable,/turf/simulated/floor/engine,/area/toxins/xenobiology)
-"aJf" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "misclab"; name = "test chamber blast door"},/obj/structure/window/fulltile/reinforced,/obj/structure/cable,/obj/structure/sign/xeno_warning_mining,/turf/simulated/floor/engine,/area/toxins/xenobiology)
+"aJe" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "misclab"; name = "test chamber blast door"},/obj/structure/window/reinforced/fulltile,/obj/structure/cable,/turf/simulated/floor/engine,/area/toxins/xenobiology)
+"aJf" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "misclab"; name = "test chamber blast door"},/obj/structure/window/reinforced/fulltile,/obj/structure/cable,/obj/structure/sign/xeno_warning_mining,/turf/simulated/floor/engine,/area/toxins/xenobiology)
"aJg" = (/obj/structure/table/reinforced,/turf/simulated/floor/plasteel{dir = 5; icon_state = "warning"},/area/toxins/xenobiology)
"aJh" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/toxins/xenobiology)
"aJi" = (/obj/structure/disposalpipe/trunk{dir = 8},/obj/structure/disposaloutlet{dir = 1},/turf/simulated/floor/engine,/area/toxins/xenobiology)
@@ -1848,7 +1848,7 @@
"aJB" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/medical/cmo)
"aJC" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/medical/cmo)
"aJD" = (/obj/machinery/suit_storage_unit/cmo,/turf/simulated/floor/plasteel/warnwhite{tag = "icon-warnwhite (WEST)"; icon_state = "warnwhite"; dir = 8},/area/medical/cmo)
-"aJE" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating,/area/medical/cmo)
+"aJE" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating,/area/medical/cmo)
"aJF" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (NORTHWEST)"; icon_state = "whiteblue"; dir = 9},/area/medical/medbay)
"aJG" = (/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/medbay)
"aJH" = (/obj/machinery/vending/medical,/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/medbay)
@@ -1917,7 +1917,7 @@
"aKS" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/medical/cmo)
"aKT" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/medical/cmo)
"aKU" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/extinguisher_cabinet{pixel_x = 28; pixel_y = 0},/turf/simulated/floor/plasteel/black,/area/hallway/primary/port)
-"aKV" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plating,/area/medical/cmo)
+"aKV" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plating,/area/medical/cmo)
"aKW" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/medical/medbay)
"aKX" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay)
"aKY" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay)
@@ -1942,7 +1942,7 @@
"aLr" = (/obj/machinery/disposal/bin,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/trunk,/turf/simulated/floor/plasteel/neutral,/area/hallway/primary/starboard)
"aLs" = (/obj/structure/disposalpipe/sortjunction{dir = 2; icon_state = "pipe-j2s"; sortType = 14},/turf/simulated/floor/plasteel,/area/hallway/primary/starboard)
"aLt" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "purple"},/area/hallway/primary/starboard)
-"aLu" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters/preopen{id = "robotics"; name = "robotics lab shutters"},/obj/structure/window/fulltile/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel,/area/assembly/robotics)
+"aLu" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters/preopen{id = "robotics"; name = "robotics lab shutters"},/obj/structure/window/reinforced/fulltile,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel,/area/assembly/robotics)
"aLv" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/plasteel,/area/assembly/robotics)
"aLw" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/assembly/robotics)
"aLx" = (/turf/simulated/floor/plasteel,/area/assembly/robotics)
@@ -1959,9 +1959,9 @@
"aLI" = (/obj/machinery/computer/pod{id = "oldship_gun"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/abandoned)
"aLJ" = (/turf/simulated/wall/shuttle{icon_state = "swall7"; dir = 2},/area/shuttle/abandoned)
"aLK" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{tag = "icon-intact (NORTH)"; icon_state = "intact"; dir = 1},/obj/structure/disposalpipe/segment,/obj/machinery/camera/autoname{tag = "icon-camera (NORTHWEST)"; icon_state = "camera"; dir = 9},/turf/simulated/floor/plating,/area/maintenance/fpmaint{name = "Fore Port Maintenance"})
-"aLL" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/cable,/turf/simulated/floor/plating,/area/medical/cmo)
+"aLL" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable,/turf/simulated/floor/plating,/area/medical/cmo)
"aLM" = (/obj/machinery/door/airlock/glass_command{name = "Chief Medical Officer"; req_access_txt = "40"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "barber"},/area/medical/cmo)
-"aLN" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/medical/cmo)
+"aLN" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/medical/cmo)
"aLO" = (/obj/machinery/light{dir = 8; icon_state = "tube1"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/medical/medbay)
"aLP" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay)
"aLQ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor/plasteel/whiteblue/corner,/area/medical/medbay)
@@ -2051,10 +2051,10 @@
"aNw" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 1; pixel_y = 0},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/turf/space,/area/hallway/primary/starboard)
"aNx" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/hallway/primary/starboard)
"aNy" = (/turf/simulated/wall/r_wall,/area/assembly/chargebay)
-"aNz" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/assembly/chargebay)
-"aNA" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/assembly/chargebay)
+"aNz" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/assembly/chargebay)
+"aNA" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/assembly/chargebay)
"aNB" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/research{name = "Mech Bay"; req_access_txt = "29"; req_one_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/assembly/chargebay)
-"aNC" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/assembly/chargebay)
+"aNC" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/assembly/chargebay)
"aND" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/wall/r_wall,/area/toxins/xenobiology)
"aNE" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area/toxins/xenobiology)
"aNF" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/wall/r_wall,/area/toxins/xenobiology)
@@ -2146,7 +2146,7 @@
"aPn" = (/obj/item/weapon/weldingtool/largetank,/turf/simulated/floor/plasteel,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"})
"aPo" = (/obj/machinery/door/window/northleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Containment Pen"; req_access_txt = "55"},/obj/machinery/door/poddoor/preopen{id = "xenobio1"; name = "containment blast door"},/turf/simulated/floor/engine,/area/toxins/xenobiology)
"aPp" = (/obj/machinery/door/window/northleft{dir = 4; name = "Containment Pen"; req_access_txt = "55"},/obj/machinery/door/poddoor/preopen{id = "xenobio6"; name = "containment blast door"},/turf/simulated/floor/engine,/area/toxins/xenobiology)
-"aPq" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/shuttle/abandoned)
+"aPq" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/shuttle/abandoned)
"aPr" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/fpmaint{name = "Fore Port Maintenance"})
"aPs" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/fpmaint{name = "Fore Port Maintenance"})
"aPt" = (/obj/structure/bed/chair/comfy/black{dir = 4},/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (SOUTHWEST)"; icon_state = "whiteblue"; dir = 10},/area/medical/medbay)
@@ -2200,17 +2200,17 @@
"aQp" = (/obj/machinery/telecomms/server/presets/service,/turf/simulated/floor/bluegrid{name = "Mainframe Base"},/area/tcommsat/server)
"aQq" = (/obj/machinery/telecomms/processor/preset_two,/turf/simulated/floor/bluegrid{name = "Mainframe Base"},/area/tcommsat/server)
"aQr" = (/obj/machinery/telecomms/processor/preset_one,/turf/simulated/floor/bluegrid{name = "Mainframe Base"},/area/tcommsat/server)
-"aQs" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/engine/gravity_generator)
+"aQs" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/engine/gravity_generator)
"aQt" = (/obj/machinery/door/airlock/glass_command{name = "Gravity Generator Area"; req_access_txt = "19; 61"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/engine/gravity_generator)
-"aQu" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/engine/gravity_generator)
-"aQv" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/gravity_generator)
+"aQu" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/engine/gravity_generator)
+"aQv" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/gravity_generator)
"aQw" = (/obj/structure/disposalpipe/sortjunction{dir = 1; icon_state = "pipe-j2s"; sortType = 10},/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"})
"aQx" = (/obj/structure/disposalpipe/sortjunction{sortdir = 8; sortType = 7},/obj/item/stack/tile/plasteel,/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"})
"aQy" = (/obj/structure/girder/reinforced,/turf/simulated/floor/plasteel,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"})
"aQz" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/toxins/xenobiology)
"aQA" = (/turf/simulated/floor/plasteel/black,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"})
"aQB" = (/obj/structure/bed/chair/office/dark{dir = 1},/turf/simulated/floor/plasteel/black,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"})
-"aQC" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/abandoned)
+"aQC" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/abandoned)
"aQD" = (/obj/machinery/door/window,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor5"},/area/shuttle/abandoned)
"aQE" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor5"},/area/shuttle/abandoned)
"aQF" = (/obj/structure/table,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/abandoned)
@@ -2235,7 +2235,7 @@
"aQY" = (/turf/simulated/floor/plasteel{tag = "icon-darkyellowcorners (NORTH)"; icon_state = "darkyellowcorners"; dir = 1},/area/tcommsat/server)
"aQZ" = (/turf/simulated/floor/plasteel{dir = 5; icon_state = "darkblue"},/area/tcommsat/server)
"aRa" = (/obj/machinery/telecomms/receiver/preset_right,/turf/simulated/floor/bluegrid{icon_state = "gcircuit"; luminosity = 2},/area/tcommsat/server)
-"aRb" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/preopen{id = "bridge blast"; layer = 2.9; name = "bridge blast door"},/turf/simulated/floor/plating,/area/bridge)
+"aRb" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "bridge blast"; layer = 2.9; name = "bridge blast door"},/turf/simulated/floor/plating,/area/bridge)
"aRc" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/simulated/floor/plating,/area/maintenance/maintcentral{name = "Central Starboard Maintenance"})
"aRd" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1; pixel_y = 0},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor/plating,/area/maintenance/maintcentral{name = "Central Starboard Maintenance"})
"aRe" = (/obj/machinery/power/apc{dir = 8; name = "Gravity Generator APC"; pixel_x = -25; pixel_y = 1},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/engine/gravity_generator)
@@ -2352,7 +2352,7 @@
"aTl" = (/obj/structure/table,/obj/item/device/radio/off,/turf/simulated/floor/plasteel{tag = "icon-darkblue (WEST)"; icon_state = "darkblue"; dir = 8},/area/tcommsat/lounge)
"aTm" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"},/area/tcommsat/lounge)
"aTn" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{tag = "icon-darkblue (EAST)"; icon_state = "darkblue"; dir = 4},/area/tcommsat/lounge)
-"aTo" = (/obj/structure/window/fulltile/reinforced,/obj/structure/grille,/obj/structure/cable,/turf/simulated/floor/plating,/area/tcommsat/lounge)
+"aTo" = (/obj/structure/window/reinforced/fulltile,/obj/structure/grille,/obj/structure/cable,/turf/simulated/floor/plating,/area/tcommsat/lounge)
"aTp" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{tag = "icon-darkyellowcorners"; icon_state = "darkyellowcorners"},/area/tcommsat/server)
"aTq" = (/turf/simulated/floor/plasteel{dir = 6; icon_state = "darkblue"},/area/tcommsat/server)
"aTr" = (/obj/machinery/telecomms/receiver/preset_left,/turf/simulated/floor/bluegrid{icon_state = "gcircuit"; luminosity = 2},/area/tcommsat/server)
@@ -2443,7 +2443,7 @@
"aUY" = (/obj/structure/table,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"})
"aUZ" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"})
"aVa" = (/obj/machinery/iv_drip{density = 0},/obj/item/roller,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"})
-"aVb" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"})
+"aVb" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint{name = "Fore Starboard Maintenance"})
"aVc" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating/airless{dir = 2; icon_state = "warnplate"},/area/space/nearstation)
"aVd" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating/airless{dir = 1; icon_state = "warnplatecorner"},/area/space/nearstation)
"aVe" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plating/airless{tag = "icon-warnplatecorner"; icon_state = "warnplatecorner"; dir = 2},/area/space/nearstation)
@@ -2485,7 +2485,7 @@
"aVO" = (/obj/item/clothing/glasses/science{pixel_x = 2; pixel_y = 4},/obj/item/clothing/glasses/science,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/obj/structure/table/glass,/obj/machinery/camera{c_tag = "Medical Research Chemistry"; dir = 4; network = list("SS13","Medbay")},/turf/simulated/floor/plasteel{tag = "icon-whiteyellow (NORTHWEST)"; icon_state = "whiteyellow"; dir = 9},/area/medical/research)
"aVP" = (/obj/machinery/chem_heater{pixel_x = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whiteyellow"},/area/medical/research)
"aVQ" = (/obj/machinery/chem_dispenser/constructable,/turf/simulated/floor/plasteel{dir = 5; icon_state = "whiteyellow"},/area/medical/research)
-"aVR" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/shutters{id = "MedResShutters"; name = "Medical Research Chemistry shutters"},/turf/simulated/floor/plating,/area/medical/research)
+"aVR" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/shutters{id = "MedResShutters"; name = "Medical Research Chemistry shutters"},/turf/simulated/floor/plating,/area/medical/research)
"aVS" = (/obj/machinery/vending/wallmed{pixel_y = 32},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research)
"aVT" = (/obj/machinery/sleeper,/turf/simulated/floor/plasteel{tag = "icon-whitebot"; icon_state = "whitebot"},/area/medical/research)
"aVU" = (/obj/structure/table/glass,/obj/item/weapon/storage/firstaid/fire{pixel_x = 6; pixel_y = 6},/obj/item/weapon/storage/firstaid/toxin{pixel_x = -3; pixel_y = -3},/obj/item/weapon/storage/firstaid/regular,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research)
@@ -2628,7 +2628,7 @@
"aYB" = (/obj/structure/table/glass,/obj/item/weapon/storage/box/pillbottles,/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteyellow"},/area/medical/research)
"aYC" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research)
"aYD" = (/obj/machinery/chem_master{pixel_x = -2},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whiteyellow"},/area/medical/research)
-"aYE" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/shutters{id = "MedResShutters"; name = "Medical Research Chemistry shutters"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/medical/research)
+"aYE" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/shutters{id = "MedResShutters"; name = "Medical Research Chemistry shutters"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/medical/research)
"aYF" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research)
"aYG" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research)
"aYH" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research)
@@ -2646,8 +2646,8 @@
"aYT" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/light{dir = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel/brown{tag = "icon-brown (WEST)"; icon_state = "brown"; dir = 8},/area/quartermaster/miningdock)
"aYU" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel,/area/quartermaster/miningdock)
"aYV" = (/obj/structure/closet/secure_closet/miner,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/plasteel/brown{tag = "icon-brown (EAST)"; icon_state = "brown"; dir = 4},/area/quartermaster/miningdock)
-"aYW" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/quartermaster/miningdock)
-"aYX" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/shuttle/mining)
+"aYW" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/quartermaster/miningdock)
+"aYX" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/shuttle/mining)
"aYY" = (/turf/simulated/wall/shuttle{icon_state = "swall3"; dir = 2},/area/shuttle/mining)
"aYZ" = (/obj/structure/table,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/mining)
"aZa" = (/obj/machinery/computer/shuttle/mining,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/mining)
@@ -2700,7 +2700,7 @@
"aZV" = (/obj/machinery/camera/autoname{dir = 2; network = list("SS13")},/obj/machinery/hologram/holopad,/obj/machinery/power/apc{dir = 1; name = "Quartermaster's Office APC"; pixel_x = 0; pixel_y = 30},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plasteel/brown{tag = "icon-brown (NORTH)"; icon_state = "brown"; dir = 1},/area/quartermaster/qm)
"aZW" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plasteel/brown{tag = "icon-brown (NORTH)"; icon_state = "brown"; dir = 1},/area/quartermaster/qm)
"aZX" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plasteel/brown{tag = "icon-brown (NORTHEAST)"; icon_state = "brown"; dir = 5},/area/quartermaster/qm)
-"aZY" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plating,/area/quartermaster/qm)
+"aZY" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plating,/area/quartermaster/qm)
"aZZ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/quartermaster/storage)
"baa" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/quartermaster/storage)
"bab" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/door/airlock/mining{name = "Mining Office"; req_access_txt = "48"},/turf/simulated/floor/plasteel/brown{tag = "icon-brown (WEST)"; icon_state = "brown"; dir = 8},/area/quartermaster/miningdock)
@@ -2739,10 +2739,10 @@
"baI" = (/obj/machinery/vending/engivend,/turf/simulated/floor/plating,/area/storage/secure)
"baJ" = (/obj/machinery/door/airlock/external{req_access_txt = "0"; req_one_access_txt = "12,13,8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/port)
"baK" = (/turf/simulated/wall/r_wall,/area/bridge)
-"baL" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/bridge)
+"baL" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/bridge)
"baM" = (/turf/simulated/floor/plasteel{tag = "icon-stairs-old"; icon_state = "stairs-old"},/area/bridge)
"baN" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{tag = "icon-stairs-old"; icon_state = "stairs-old"},/area/bridge)
-"baO" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/fulltile/reinforced,/obj/structure/grille,/turf/simulated/floor/plasteel{icon_state = "vault"},/area/bridge)
+"baO" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/reinforced/fulltile,/obj/structure/grille,/turf/simulated/floor/plasteel{icon_state = "vault"},/area/bridge)
"baP" = (/turf/simulated/wall,/area/medical/research)
"baQ" = (/obj/structure/bed/roller,/obj/item/weapon/bedsheet/medical,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/button/door{id = "MedResShutters"; name = "Chemistry Shutters"; pixel_x = -26; pixel_y = 0; req_access_txt = "5, 47"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research)
"baR" = (/obj/structure/table,/obj/item/weapon/scalpel{pixel_y = 12},/obj/item/weapon/circular_saw,/turf/simulated/floor/plasteel{dir = 9; icon_state = "warnwhite"},/area/medical/research)
@@ -2790,7 +2790,7 @@
"bbH" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/medbay)
"bbI" = (/obj/structure/bed/chair,/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/medbay)
"bbJ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (NORTHEAST)"; icon_state = "whiteblue"; dir = 5},/area/medical/medbay)
-"bbK" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/checkpoint/medical)
+"bbK" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/checkpoint/medical)
"bbL" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/obj/item/weapon/book/manual/wiki/security_space_law,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/checkpoint/medical)
"bbM" = (/obj/machinery/camera{c_tag = "Security Post - Medbay"; dir = 2; network = list("SS13")},/obj/machinery/requests_console{department = "Security"; departmentType = 5; name = "Security Post RC"; pixel_y = 30},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/checkpoint/medical)
"bbN" = (/obj/structure/filingcabinet,/obj/machinery/newscaster{pixel_x = 32; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/checkpoint/medical)
@@ -2847,7 +2847,7 @@
"bcM" = (/obj/structure/flora/kirbyplants,/obj/machinery/light{dir = 8; icon_state = "tube1"},/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/medical/medbay)
"bcN" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{tag = "icon-manifold-b-f (WEST)"; dir = 8},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay)
"bcO" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay)
-"bcP" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/security/checkpoint/medical)
+"bcP" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/security/checkpoint/medical)
"bcQ" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/effect/landmark/start/depsec/medical,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/checkpoint/medical)
"bcR" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel,/area/security/checkpoint/medical)
"bcS" = (/obj/machinery/computer/secure_data,/obj/item/device/radio/intercom{pixel_x = 25},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/checkpoint/medical)
@@ -2888,7 +2888,7 @@
"bdB" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel/brown,/area/quartermaster/qm)
"bdC" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plasteel/brown,/area/quartermaster/qm)
"bdD" = (/turf/simulated/floor/plasteel/brown{tag = "icon-brown (SOUTHEAST)"; icon_state = "brown"; dir = 6},/area/quartermaster/qm)
-"bdE" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/quartermaster/qm)
+"bdE" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/quartermaster/qm)
"bdF" = (/obj/machinery/vending/cigarette,/turf/simulated/floor/plasteel,/area/quartermaster/storage)
"bdG" = (/obj/structure/table,/obj/item/weapon/folder/yellow,/obj/item/weapon/pen,/obj/machinery/requests_console{department = "Mining"; departmentType = 0; name = "Mining RC"; pixel_x = 0; pixel_y = -30},/turf/simulated/floor/plasteel/brown{tag = "icon-brown (SOUTHWEST)"; icon_state = "brown"; dir = 10},/area/quartermaster/miningdock)
"bdH" = (/turf/simulated/floor/plasteel/brown,/area/quartermaster/miningdock)
@@ -2907,7 +2907,7 @@
"bdU" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay)
"bdV" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay)
"bdW" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; dir = 4},/area/medical/medbay)
-"bdX" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/security/checkpoint/medical)
+"bdX" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/security/checkpoint/medical)
"bdY" = (/obj/structure/table,/obj/machinery/recharger{pixel_y = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/checkpoint/medical)
"bdZ" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; frequency = 1439; id_tag = null; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel,/area/security/checkpoint/medical)
"bea" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/light{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/checkpoint/medical)
@@ -2927,7 +2927,7 @@
"beo" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel/neutral,/area/bridge)
"bep" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel/neutral,/area/bridge)
"beq" = (/obj/machinery/vending/boozeomat,/turf/simulated/floor/plasteel/neutral,/area/bridge)
-"ber" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/maintcentral{name = "Central Starboard Maintenance"})
+"ber" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/maintcentral{name = "Central Starboard Maintenance"})
"bes" = (/obj/structure/rack,/obj/item/stack/sheet/glass{amount = 50},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/maintcentral{name = "Central Starboard Maintenance"})
"bet" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/maintcentral{name = "Central Starboard Maintenance"})
"beu" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 1; pixel_y = 0},/obj/structure/window/reinforced{dir = 8},/turf/space,/area/space)
@@ -2937,8 +2937,8 @@
"bey" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/plasteel/neutral,/area/hallway/primary/starboard)
"bez" = (/obj/structure/disposalpipe/segment,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel/neutral/side{tag = "icon-neutral (WEST)"; icon_state = "neutral"; dir = 8},/area/hallway/primary/starboard)
"beA" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/obj/machinery/camera/autoname{tag = "icon-camera (NORTHWEST)"; icon_state = "camera"; dir = 9},/turf/simulated/floor/plasteel/neutral/side{tag = "icon-neutral (EAST)"; icon_state = "neutral"; dir = 4},/area/hallway/primary/starboard)
-"beB" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/quartermaster/qm)
-"beC" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/quartermaster/qm)
+"beB" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/quartermaster/qm)
+"beC" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/quartermaster/qm)
"beD" = (/obj/machinery/door/airlock/glass_mining{name = "Quartermaster"; req_access_txt = "41"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/quartermaster/qm)
"beE" = (/turf/simulated/wall,/area/quartermaster/office)
"beF" = (/obj/machinery/camera{c_tag = "Cargo Bay North"; dir = 4; network = list("SS13")},/turf/simulated/floor/plasteel,/area/quartermaster/storage)
@@ -2983,7 +2983,7 @@
"bfs" = (/obj/machinery/camera{c_tag = "Cargo Bay MULES"},/turf/simulated/floor/plasteel,/area/quartermaster/storage)
"bft" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel,/area/quartermaster/storage)
"bfu" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/quartermaster/storage)
-"bfv" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/quartermaster/storage)
+"bfv" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/quartermaster/storage)
"bfw" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/mob/living/simple_animal/mouse/gray,/turf/simulated/floor/plating,/area/maintenance/fpmaint{name = "Fore Port Maintenance"})
"bfx" = (/obj/structure/table_frame,/turf/simulated/floor/plating,/area/maintenance/fpmaint{name = "Fore Port Maintenance"})
"bfy" = (/obj/machinery/atmospherics/components/unary/cryo_cell,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/cryo)
@@ -3019,7 +3019,7 @@
"bgc" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (EAST)"; dir = 4},/turf/simulated/floor/plasteel/neutral,/area/bridge)
"bgd" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel/neutral,/area/bridge)
"bge" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/simulated/floor/plasteel/neutral,/area/bridge)
-"bgf" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/preopen{id = "bridge blast"; layer = 2.9; name = "bridge blast door"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/bridge)
+"bgf" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "bridge blast"; layer = 2.9; name = "bridge blast door"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/bridge)
"bgg" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; frequency = 1439; id_tag = null; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel/darkwarning{tag = "icon-warndark (NORTHWEST)"; icon_state = "warndark"; dir = 9},/area/bridge)
"bgh" = (/obj/machinery/light{dir = 1},/obj/machinery/camera{c_tag = "Command EVA"},/turf/simulated/floor/plasteel/darkwarning{tag = "icon-warndark (NORTH)"; icon_state = "warndark"; dir = 1},/area/bridge)
"bgi" = (/obj/machinery/suit_storage_unit/standard_unit,/turf/simulated/floor/plasteel/darkwarning{tag = "icon-warndark (NORTHEAST)"; icon_state = "warndark"; dir = 5},/area/bridge)
@@ -3090,7 +3090,7 @@
"bhv" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel/darkwarning,/area/ai_monitored/nuke_storage)
"bhw" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel/darkwarning,/area/ai_monitored/nuke_storage)
"bhx" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/ai_monitored/nuke_storage)
-"bhy" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/ai_monitored/nuke_storage)
+"bhy" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/ai_monitored/nuke_storage)
"bhz" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel/darkwarning,/area/maintenance/maintcentral{name = "Central Starboard Maintenance"})
"bhA" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel/darkwarning,/area/maintenance/maintcentral{name = "Central Starboard Maintenance"})
"bhB" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel/darkwarning,/area/maintenance/maintcentral{name = "Central Starboard Maintenance"})
@@ -3122,7 +3122,7 @@
"bib" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/medbay)
"bic" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/medbay)
"bid" = (/obj/structure/flora/kirbyplants,/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (NORTHEAST)"; icon_state = "whiteblue"; dir = 5},/area/medical/medbay)
-"bie" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/medbay)
+"bie" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/medbay)
"bif" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/hallway/primary/port)
"big" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel/neutral/side{tag = "icon-neutral (EAST)"; icon_state = "neutral"; dir = 4},/area/hallway/primary/port)
"bih" = (/turf/simulated/floor/wood,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/obj/machinery/light/small{dir = 8},/obj/structure/bed/chair/wood/normal,/turf/simulated/floor/plasteel/sandeffect,/area/crew_quarters/cafeteria)
@@ -3132,7 +3132,7 @@
"bil" = (/obj/structure/rack,/obj/item/weapon/storage/box/cups,/obj/item/weapon/storage/box/cups,/obj/item/weapon/reagent_containers/food/drinks/mug,/obj/item/weapon/reagent_containers/food/drinks/mug,/obj/item/weapon/reagent_containers/food/drinks/mug,/obj/item/weapon/reagent_containers/food/drinks/mug,/obj/item/weapon/reagent_containers/food/drinks/mug,/obj/item/weapon/reagent_containers/food/drinks/mug,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass,/turf/simulated/floor/wood,/area/crew_quarters/cafeteria)
"bim" = (/obj/machinery/smartfridge/drying_rack,/turf/simulated/floor/wood,/area/crew_quarters/cafeteria)
"bin" = (/obj/structure/closet/secure_closet/freezer/fridge,/obj/item/weapon/reagent_containers/food/condiment/milk,/obj/item/weapon/reagent_containers/food/condiment/milk,/turf/simulated/floor/wood,/area/crew_quarters/cafeteria)
-"bio" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/cafeteria)
+"bio" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/crew_quarters/cafeteria)
"bip" = (/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/obj/machinery/porta_turret{ai = 1; dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload)
"biq" = (/obj/machinery/power/apc{cell_type = 10000; dir = 2; name = "Upload APC"; pixel_y = -24},/obj/structure/cable,/turf/simulated/floor/plasteel/black,/area/turret_protected/ai_upload)
"bir" = (/obj/machinery/power/apc{cell_type = 2500; dir = 1; name = "Captain's Office APC"; pixel_y = 24},/obj/structure/cable{tag = "icon-0-2"; icon_state = "0-2"},/turf/simulated/floor/wood,/area/crew_quarters/captain)
@@ -3144,7 +3144,7 @@
"bix" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/camera{c_tag = "Command North"; dir = 4; network = list("SS13")},/turf/simulated/floor/plasteel/neutral,/area/hallway/primary/fore)
"biy" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8; initialize_directions = 11},/turf/simulated/floor/plasteel/neutral,/area/hallway/primary/fore)
"biz" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel/neutral,/area/hallway/primary/fore)
-"biA" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/preopen{id = "bridge blast"; layer = 2.9; name = "bridge blast door"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/bridge)
+"biA" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "bridge blast"; layer = 2.9; name = "bridge blast door"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/bridge)
"biB" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel/darkwarning{tag = "icon-warndark (SOUTHWEST)"; icon_state = "warndark"; dir = 10},/area/bridge)
"biC" = (/turf/simulated/floor/plasteel/darkwarning,/area/bridge)
"biD" = (/obj/machinery/suit_storage_unit/standard_unit,/turf/simulated/floor/plasteel/darkwarning{tag = "icon-warndark (SOUTHEAST)"; icon_state = "warndark"; dir = 6},/area/bridge)
@@ -3173,7 +3173,7 @@
"bja" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/turf/simulated/floor/plating,/area/maintenance/maintcentral{name = "Central Starboard Maintenance"})
"bjb" = (/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/hallway/primary/starboard)
"bjc" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/hallway/primary/starboard)
-"bjd" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/quartermaster/office)
+"bjd" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/quartermaster/office)
"bje" = (/obj/machinery/autolathe,/turf/simulated/floor/plasteel,/area/quartermaster/office)
"bjf" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel,/area/quartermaster/storage)
"bjg" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "QM #3"},/mob/living/simple_animal/bot/mulebot,/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/quartermaster/storage)
@@ -3206,7 +3206,7 @@
"bjH" = (/turf/simulated/floor/wood,/area/crew_quarters/cafeteria)
"bjI" = (/obj/machinery/chem_dispenser/drinks,/obj/structure/table/wood,/turf/simulated/floor/wood,/area/crew_quarters/cafeteria)
"bjJ" = (/turf/simulated/wall,/area/maintenance/port)
-"bjK" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/preopen{id = "lawyer_blast"; name = "privacy shutters"},/turf/simulated/floor/plating,/area/maintenance/port)
+"bjK" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "lawyer_blast"; name = "privacy shutters"},/turf/simulated/floor/plating,/area/maintenance/port)
"bjL" = (/obj/machinery/door/airlock/hatch,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/port)
"bjM" = (/obj/structure/table,/obj/item/weapon/aiModule/supplied/oxygen,/obj/item/weapon/aiModule/zeroth/oneHuman,/obj/machinery/door/window{base_state = "left"; dir = 1; icon_state = "left"; name = "High-Risk Modules"; req_access_txt = "20"},/obj/item/weapon/aiModule/reset/purge,/obj/structure/window/reinforced,/obj/item/weapon/aiModule/core/full/antimov,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/aiModule/supplied/protectStation,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload)
"bjN" = (/obj/structure/table,/obj/item/weapon/aiModule/reset,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload)
@@ -3230,7 +3230,7 @@
"bkf" = (/obj/structure/closet/crate{name = "Gold Crate"},/obj/item/stack/sheet/mineral/gold{pixel_x = -1; pixel_y = 5},/obj/item/stack/sheet/mineral/gold{pixel_y = 2},/obj/item/stack/sheet/mineral/gold{pixel_x = 1; pixel_y = -2},/obj/item/weapon/storage/belt/champion,/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel/darkwarning{tag = "icon-warndark (NORTH)"; icon_state = "warndark"; dir = 1},/area/ai_monitored/nuke_storage)
"bkg" = (/obj/item/weapon/coin/silver{pixel_x = 7; pixel_y = 12},/obj/item/weapon/coin/silver{pixel_x = 12; pixel_y = 7},/obj/item/weapon/coin/silver{pixel_x = 4; pixel_y = 8},/obj/item/weapon/coin/silver{pixel_x = -6; pixel_y = 5},/obj/item/weapon/coin/silver{pixel_x = 5; pixel_y = -8},/obj/structure/closet/crate{name = "Silver Crate"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel/darkwarning{tag = "icon-warndark (NORTH)"; icon_state = "warndark"; dir = 1},/area/ai_monitored/nuke_storage)
"bkh" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/ai_monitored/nuke_storage)
-"bki" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/ai_monitored/nuke_storage)
+"bki" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/ai_monitored/nuke_storage)
"bkj" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel/darkwarning{tag = "icon-warndark (NORTH)"; icon_state = "warndark"; dir = 1},/area/maintenance/maintcentral{name = "Central Starboard Maintenance"})
"bkk" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel/darkwarning{tag = "icon-warndark (NORTH)"; icon_state = "warndark"; dir = 1},/area/maintenance/maintcentral{name = "Central Starboard Maintenance"})
"bkl" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4; initialize_directions = 11},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel/darkwarning{tag = "icon-warndark (NORTH)"; icon_state = "warndark"; dir = 1},/area/maintenance/maintcentral{name = "Central Starboard Maintenance"})
@@ -3247,9 +3247,9 @@
"bkw" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/quartermaster/office)
"bkx" = (/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/disposal/bin,/turf/simulated/floor/plasteel,/area/quartermaster/storage)
"bky" = (/obj/machinery/conveyor_switch/oneway{id = "QMLoad"},/turf/simulated/floor/plasteel,/area/quartermaster/storage)
-"bkz" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/quartermaster/storage)
+"bkz" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/quartermaster/storage)
"bkA" = (/turf/simulated/wall/shuttle{icon_state = "swall3"; dir = 2},/area/shuttle/supply)
-"bkB" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/chapel/main)
+"bkB" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/chapel/main)
"bkC" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main)
"bkD" = (/obj/machinery/button/crematorium{pixel_x = 23},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main)
"bkE" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/fpmaint{name = "Fore Port Maintenance"})
@@ -3261,7 +3261,7 @@
"bkK" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Chemistry Lab"; req_access_txt = "5; 33"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/chemistry)
"bkL" = (/obj/machinery/smartfridge/chemistry,/turf/simulated/wall,/area/medical/chemistry)
"bkM" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/window/eastright{dir = 2; name = "Chemistry Desk"; req_access_txt = "5; 33"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 4; icon_state = "whiteyellowfull"; tag = "icon-whitehall (WEST)"},/area/medical/chemistry)
-"bkN" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/chemistry)
+"bkN" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/chemistry)
"bkO" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/airlock/glass_medical{id_tag = "MedbayFoyer"; name = "Medbay"; req_access_txt = "5"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whiteblue"},/area/medical/medbay)
"bkP" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/airlock/glass_medical{id_tag = "MedbayFoyer"; name = "Medbay"; req_access_txt = "5"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whiteblue"},/area/medical/medbay)
"bkQ" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{id_tag = "MedbayFoyer"; name = "Medbay"; req_access_txt = "5"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whiteblue"},/area/medical/medbay)
@@ -3344,7 +3344,7 @@
"bmp" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel,/area/hallway/primary/starboard)
"bmq" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 2; icon_state = "bot"},/area/hallway/primary/starboard)
"bmr" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel/brown{tag = "icon-brown (EAST)"; icon_state = "brown"; dir = 4},/area/hallway/primary/starboard)
-"bms" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/quartermaster/office)
+"bms" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/quartermaster/office)
"bmt" = (/obj/structure/filingcabinet/filingcabinet,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/turf/simulated/floor/plasteel,/area/quartermaster/office)
"bmu" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plasteel,/area/quartermaster/office)
"bmv" = (/obj/structure/table,/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 29},/obj/item/weapon/storage/firstaid/regular{pixel_x = 0; pixel_y = 0},/turf/simulated/floor/plasteel,/area/quartermaster/office)
@@ -3380,8 +3380,8 @@
"bmZ" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/snacks/badrecipe,/turf/simulated/floor/wood,/area/maintenance/port)
"bna" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/wood,/area/maintenance/port)
"bnb" = (/turf/simulated/floor/wood{tag = "icon-wood-broken6"; icon_state = "wood-broken6"},/area/maintenance/port)
-"bnc" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/captain)
-"bnd" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/crew_quarters/captain)
+"bnc" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/crew_quarters/captain)
+"bnd" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/crew_quarters/captain)
"bne" = (/obj/machinery/door/airlock/command{name = "Captain's Office"; req_access = null; req_access_txt = "20"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/wood,/area/crew_quarters/captain)
"bnf" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel/neutral,/area/hallway/primary/fore)
"bng" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8; initialize_directions = 11},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel/neutral,/area/hallway/primary/fore)
@@ -3410,8 +3410,8 @@
"bnD" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/quartermaster/storage)
"bnE" = (/obj/machinery/camera{c_tag = "Cargo Recieving Dock"; dir = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/status_display{density = 0; pixel_x = 32; pixel_y = 0; supply_display = 1},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/quartermaster/storage)
"bnF" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall,/area/quartermaster/storage)
-"bnG" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/manifold/supply/hidden{tag = "icon-manifold-b-f (EAST)"; dir = 4},/turf/simulated/floor/plating,/area/quartermaster/storage)
-"bnH" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/turf/simulated/floor/plating,/area/quartermaster/storage)
+"bnG" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/manifold/supply/hidden{tag = "icon-manifold-b-f (EAST)"; dir = 4},/turf/simulated/floor/plating,/area/quartermaster/storage)
+"bnH" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/turf/simulated/floor/plating,/area/quartermaster/storage)
"bnI" = (/obj/machinery/button/door{dir = 2; id = "QMLoaddoor2"; name = "Loading Doors"; pixel_x = -24; pixel_y = 8},/obj/machinery/button/door{id = "QMLoaddoor"; name = "Loading Doors"; pixel_x = -24; pixel_y = -8},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/supply)
"bnJ" = (/turf/simulated/floor/carpet,/area/chapel/main)
"bnK" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "chapel"},/area/chapel/main)
@@ -3446,7 +3446,7 @@
"bon" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/maintenance/maintcentral{name = "Central Starboard Maintenance"})
"boo" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plasteel,/area/hallway/primary/starboard)
"bop" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel/brown{tag = "icon-brown (EAST)"; icon_state = "brown"; dir = 4},/area/hallway/primary/starboard)
-"boq" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/quartermaster/office)
+"boq" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/quartermaster/office)
"bor" = (/obj/machinery/conveyor_switch/oneway{convdir = -1; id = "QMDeliver"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel,/area/quartermaster/office)
"bos" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel,/area/quartermaster/office)
"bot" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel,/area/quartermaster/office)
@@ -3475,7 +3475,7 @@
"boQ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating{icon_state = "panelscorched"},/area/maintenance/port)
"boR" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/port)
"boS" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall,/area/maintenance/port)
-"boT" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/port)
+"boT" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/port)
"boU" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{tag = "icon-intact (SOUTHWEST)"; icon_state = "intact"; dir = 10},/turf/simulated/wall,/area/maintenance/port)
"boV" = (/obj/machinery/requests_console{announcementConsole = 1; department = "Captain's Desk"; departmentType = 5; name = "Captain RC"; pixel_x = -30; pixel_y = 0},/obj/structure/filingcabinet,/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/camera{c_tag = "Captain's Office"; dir = 4; network = list("SS13")},/turf/simulated/floor/wood,/area/crew_quarters/captain)
"boW" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/captain)
@@ -3548,10 +3548,10 @@
"bql" = (/turf/simulated/floor/plasteel/black,/area/teleporter)
"bqm" = (/obj/machinery/bluespace_beacon,/turf/simulated/floor/plasteel/black,/area/teleporter)
"bqn" = (/obj/machinery/teleport/station,/turf/simulated/floor/plasteel/black,/area/teleporter)
-"bqo" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/maintcentral{name = "Central Starboard Maintenance"})
+"bqo" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/maintcentral{name = "Central Starboard Maintenance"})
"bqp" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/maintcentral{name = "Central Starboard Maintenance"})
"bqq" = (/turf/simulated/wall,/area/library)
-"bqr" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/library)
+"bqr" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/library)
"bqs" = (/obj/machinery/door/airlock/maintenance{name = "Library Maintenance"; req_access_txt = "12"},/turf/simulated/floor/plating,/area/library)
"bqt" = (/obj/structure/table,/obj/item/weapon/tank/internals/emergency_oxygen{pixel_x = -8},/obj/item/weapon/tank/internals/emergency_oxygen{pixel_x = -8},/obj/item/clothing/mask/breath{pixel_x = 4},/obj/item/clothing/mask/breath{pixel_x = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/maintcentral{name = "Central Starboard Maintenance"})
"bqu" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/disposalpipe/segment,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/starboard)
@@ -3569,7 +3569,7 @@
"bqG" = (/obj/machinery/camera{c_tag = "Cargo Bay South"; dir = 1; network = list("SS13")},/turf/simulated/floor/plasteel,/area/quartermaster/storage)
"bqH" = (/obj/machinery/light,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -35},/obj/effect/landmark/start{name = "Cargo Technician"},/turf/simulated/floor/plasteel,/area/quartermaster/storage)
"bqI" = (/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -30},/turf/simulated/floor/plasteel,/area/quartermaster/storage)
-"bqJ" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/chapel/office)
+"bqJ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/chapel/office)
"bqK" = (/turf/simulated/floor/carpet{tag = "icon-carpetsymbol (EAST)"; icon_state = "carpetsymbol"; dir = 4},/area/chapel/main)
"bqL" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 8; icon_state = "chapel"},/area/chapel/main)
"bqM" = (/obj/machinery/door/morgue{name = "Confession Booth (Chaplain)"; req_access_txt = "22"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main)
@@ -3588,7 +3588,7 @@
"bqZ" = (/turf/simulated/wall,/area/crew_quarters/courtroom)
"bra" = (/turf/simulated/wall/r_wall,/area/crew_quarters/courtroom)
"brb" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/port)
-"brc" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/port)
+"brc" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/port)
"brd" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall/r_wall,/area/crew_quarters/captain)
"bre" = (/obj/machinery/door/airlock/command{name = "Captain's Quarters"; req_access = null; req_access_txt = "20"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/wood,/area/crew_quarters/captain)
"brf" = (/obj/machinery/computer/communications,/turf/simulated/floor/wood,/area/crew_quarters/captain)
@@ -3634,7 +3634,7 @@
"brT" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "chapel"},/area/chapel/main)
"brU" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "chapel"},/area/chapel/main)
"brV" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor/carpet,/area/chapel/main)
-"brW" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced/tinted,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main)
+"brW" = (/obj/structure/grille,/obj/structure/window/reinforced/tinted/fulltile,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main)
"brX" = (/obj/structure/table,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/morgue)
"brY" = (/obj/structure/table,/turf/simulated/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (WEST)"; icon_state = "whiteyellow"; dir = 8},/area/medical/chemistry)
"brZ" = (/obj/structure/bed/chair/office/light{dir = 4},/obj/effect/landmark/start{name = "Chemist"},/turf/simulated/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (EAST)"; icon_state = "whiteyellow"; dir = 4},/area/medical/chemistry)
@@ -3812,7 +3812,7 @@
"bvp" = (/obj/machinery/newscaster{pixel_x = -32; pixel_y = 0},/turf/simulated/floor/plasteel/neutral/side{tag = "icon-neutral (WEST)"; icon_state = "neutral"; dir = 8},/area/hallway/primary/starboard)
"bvq" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel/neutral/side{tag = "icon-neutral (EAST)"; icon_state = "neutral"; dir = 4},/area/hallway/primary/starboard)
"bvr" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel/neutral,/area/hallway/primary/starboard)
-"bvs" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/quartermaster/sorting)
+"bvs" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/quartermaster/sorting)
"bvt" = (/obj/machinery/conveyor{dir = 2; id = "PackageSort1"},/turf/simulated/floor/plasteel/blue,/area/quartermaster/sorting)
"bvu" = (/obj/machinery/conveyor{dir = 2; id = "PackageSort2"},/turf/simulated/floor/plasteel/red,/area/quartermaster/sorting)
"bvv" = (/obj/machinery/conveyor{dir = 2; id = "PackageSort3"},/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/plasteel/purple,/area/quartermaster/sorting)
@@ -3835,7 +3835,7 @@
"bvM" = (/obj/structure/bed/chair,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor/carpet,/area/chapel/main)
"bvN" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/hallway/secondary/exit)
"bvO" = (/obj/machinery/door/airlock/medical{name = "Morgue"; req_access_txt = "6;5"},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/morgue)
-"bvP" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/preopen{id = "fumehood"; name = "fume hood shutter"},/turf/simulated/floor/plating,/area/medical/chemistry)
+"bvP" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "fumehood"; name = "fume hood shutter"},/turf/simulated/floor/plating,/area/medical/chemistry)
"bvQ" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Chemistry Lab"; req_access_txt = "5; 33"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/chemistry)
"bvR" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/item/stack/rods{amount = 50},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/eva)
"bvS" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/eva)
@@ -3891,9 +3891,9 @@
"bwQ" = (/obj/machinery/conveyor{dir = 2; id = "PackageSort3"},/turf/simulated/floor/plasteel/purple,/area/quartermaster/sorting)
"bwR" = (/turf/simulated/floor/plasteel,/area/hallway/secondary/entry)
"bwS" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/hallway/secondary/entry)
-"bwT" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/sign/pods,/turf/simulated/floor/plating,/area/hallway/secondary/entry)
-"bwU" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/secondary/entry)
-"bwV" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/turf/simulated/floor/plating,/area/hallway/secondary/entry)
+"bwT" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/sign/pods,/turf/simulated/floor/plating,/area/hallway/secondary/entry)
+"bwU" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/secondary/entry)
+"bwV" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/turf/simulated/floor/plating,/area/hallway/secondary/entry)
"bwW" = (/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/turf/simulated/wall/shuttle{icon_state = "swall_f6"; dir = 2},/area/shuttle/pod_3)
"bwX" = (/turf/simulated/wall/shuttle{icon_state = "swall12"; dir = 2},/area/shuttle/pod_3)
"bwY" = (/turf/space,/turf/simulated/wall/shuttle{dir = 2; icon_state = "swall_f10"; layer = 2},/area/shuttle/pod_3)
@@ -3922,7 +3922,7 @@
"bxv" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4; initialize_directions = 11},/turf/simulated/floor/plasteel,/area/hallway/primary/port)
"bxw" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/structure/filingcabinet,/obj/machinery/light/small{dir = 1},/obj/machinery/light_switch{pixel_y = 25},/obj/machinery/camera{c_tag = "Detective's Office"; dir = 4; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office)
"bxx" = (/obj/structure/closet/secure_closet/detective,/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office)
-"bxy" = (/obj/structure/table/wood,/obj/machinery/light/small{dir = 8},/obj/item/weapon/book/manual/wiki/security_space_law,/obj/item/device/camera{desc = "A one use - polaroid camera. 30 photos left."; name = "detective's camera"; pictures_left = 30},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office)
+"bxy" = (/obj/structure/table/wood,/obj/machinery/light/small{dir = 8},/obj/item/weapon/book/manual/wiki/security_space_law,/obj/item/device/camera/detective,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office)
"bxz" = (/obj/structure/table/wood,/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/item/device/taperecorder{pixel_x = 3; pixel_y = 0},/obj/item/weapon/storage/box/evidence,/obj/item/device/flashlight/seclite,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office)
"bxA" = (/obj/structure/transit_tube{dir = 2; icon_state = "N-SW-SE"; tag = "icon-E-SW-NW"},/turf/space,/area/space)
"bxB" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating{tag = "icon-platingdmg1"; icon_state = "platingdmg1"},/area/maintenance/port)
@@ -4056,7 +4056,7 @@
"bzZ" = (/obj/machinery/vending/coffee,/turf/simulated/floor/plasteel,/area/hallway/secondary/entry)
"bAa" = (/obj/machinery/vending/cola,/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel,/area/hallway/secondary/entry)
"bAb" = (/obj/item/device/radio/beacon,/turf/simulated/floor/plasteel,/area/hallway/secondary/entry)
-"bAc" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/secondary/entry)
+"bAc" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/secondary/entry)
"bAd" = (/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/turf/simulated/wall/shuttle{icon_state = "swall_f5"; dir = 2},/area/shuttle/pod_3)
"bAe" = (/turf/space,/turf/simulated/wall/shuttle{icon_state = "swall_f9"; dir = 2},/area/shuttle/pod_3)
"bAf" = (/obj/structure/table/wood,/obj/item/weapon/paper_bin{pixel_x = -2; pixel_y = 5},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/chapel/office)
@@ -4070,8 +4070,8 @@
"bAn" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/hallway/secondary/exit)
"bAo" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/secondary/exit)
"bAp" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor/plasteel,/area/hallway/secondary/exit)
-"bAq" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/eva)
-"bAr" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/eva)
+"bAq" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/eva)
+"bAr" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/eva)
"bAs" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_command{name = "EVA Storage"; req_access_txt = "18"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/eva)
"bAt" = (/obj/structure/disposalpipe/junction{dir = 1; icon_state = "pipe-j1"; tag = "icon-pipe-j1 (EAST)"},/turf/simulated/floor/plasteel/neutral/side{tag = "icon-neutral (EAST)"; icon_state = "neutral"; dir = 4},/area/hallway/primary/port)
"bAu" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/plasteel/neutral,/area/hallway/primary/port)
@@ -4156,11 +4156,11 @@
"bBV" = (/obj/structure/table/wood,/obj/item/weapon/folder/red,/obj/item/weapon/hand_labeler,/turf/simulated/floor/carpet,/area/security/detectives_office)
"bBW" = (/obj/effect/landmark/start{name = "Detective"},/obj/structure/bed/chair/office/dark{dir = 8},/turf/simulated/floor/carpet,/area/security/detectives_office)
"bBX" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/computer/secure_data,/turf/simulated/floor/carpet,/area/security/detectives_office)
-"bBY" = (/obj/structure/transit_tube{icon_state = "N-SE"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/central)
-"bBZ" = (/obj/structure/transit_tube{icon_state = "D-SW"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/central)
-"bCa" = (/obj/structure/window/fulltile/reinforced,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 0},/turf/simulated/floor/plating,/area/hallway/primary/central)
-"bCb" = (/obj/structure/transit_tube{icon_state = "D-SE"; tag = "icon-D-NE"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/central)
-"bCc" = (/obj/structure/transit_tube{icon_state = "N-SW"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/central)
+"bBY" = (/obj/structure/transit_tube{icon_state = "N-SE"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/central)
+"bBZ" = (/obj/structure/transit_tube{icon_state = "D-SW"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/central)
+"bCa" = (/obj/structure/window/reinforced/fulltile,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 0},/turf/simulated/floor/plating,/area/hallway/primary/central)
+"bCb" = (/obj/structure/transit_tube{icon_state = "D-SE"; tag = "icon-D-NE"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/central)
+"bCc" = (/obj/structure/transit_tube{icon_state = "N-SW"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/central)
"bCd" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/wood,/area/lawoffice)
"bCe" = (/obj/structure/table/wood,/obj/item/weapon/folder/red,/obj/item/weapon/folder/red,/obj/item/weapon/folder/red,/obj/item/clothing/glasses/sunglasses/big,/turf/simulated/floor/wood,/area/lawoffice)
"bCf" = (/obj/structure/bed/chair{dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/wood,/area/lawoffice)
@@ -4252,9 +4252,9 @@
"bDN" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/turf/simulated/floor/plasteel,/area/crew_quarters/courtroom)
"bDO" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9; pixel_y = 0},/turf/simulated/floor/plasteel,/area/crew_quarters/courtroom)
"bDP" = (/obj/machinery/power/apc{dir = 8; name = "Head of Personnel APC"; pixel_x = 26; pixel_y = 0},/obj/structure/cable,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/crew_quarters/heads)
-"bDQ" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/cable/yellow,/obj/machinery/door/poddoor/preopen{id = "hop"; name = "privacy shutters"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/crew_quarters/heads)
-"bDR" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/cable/yellow,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/door/poddoor/preopen{id = "hop"; name = "privacy shutters"},/turf/simulated/floor/plating,/area/crew_quarters/heads)
-"bDS" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor/preopen{id = "hop"; name = "privacy shutters"},/turf/simulated/floor/plating,/area/crew_quarters/heads)
+"bDQ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable/yellow,/obj/machinery/door/poddoor/preopen{id = "hop"; name = "privacy shutters"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/crew_quarters/heads)
+"bDR" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable/yellow,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/door/poddoor/preopen{id = "hop"; name = "privacy shutters"},/turf/simulated/floor/plating,/area/crew_quarters/heads)
+"bDS" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor/preopen{id = "hop"; name = "privacy shutters"},/turf/simulated/floor/plating,/area/crew_quarters/heads)
"bDT" = (/obj/structure/table/reinforced,/obj/machinery/door/window/brigdoor{base_state = "rightsecure"; dir = 1; icon_state = "rightsecure"; name = "Head of Personnel's Desk"; req_access_txt = "57"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/machinery/door/window/northleft{dir = 2; icon_state = "left"; name = "Reception Window"; req_access_txt = "0"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id = "hop"; layer = 3.1; name = "privacy shutters"; opacity = 0},/turf/simulated/floor/plasteel,/area/crew_quarters/heads)
"bDU" = (/obj/structure/table/wood,/obj/item/device/flashlight/lamp/green,/turf/simulated/floor/carpet,/area/crew_quarters/heads)
"bDV" = (/obj/item/weapon/bedsheet/hop,/obj/structure/bed,/turf/simulated/floor/carpet,/area/crew_quarters/heads)
@@ -4371,14 +4371,14 @@
"bGc" = (/turf/simulated/wall/shuttle{icon_state = "wall3"},/area/shuttle/escape)
"bGd" = (/turf/space,/turf/simulated/wall/shuttle{dir = 1; icon_state = "diagonalWall3"},/area/shuttle/escape)
"bGe" = (/turf/space,/area/shuttle/escape)
-"bGf" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/secondary/exit)
+"bGf" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/secondary/exit)
"bGg" = (/obj/structure/table,/obj/machinery/door/poddoor/shutters{id = "EscapeBarShutters"; name = "Escape Bar Shutters"},/turf/simulated/floor/plasteel/bar,/area/hallway/secondary/exit)
"bGh" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{id = "evaescape"; name = "E.V.A. Escape Shutter"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/ai_monitored/storage/eva)
"bGi" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{id = "evaescape"; name = "E.V.A. Escape Shutter"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/ai_monitored/storage/eva)
"bGj" = (/obj/structure/sign/directions/evac{tag = "icon-direction_evac (NORTH)"; icon_state = "direction_evac"; dir = 1},/obj/structure/sign/directions/security{pixel_y = -8},/obj/structure/sign/directions/medical{dir = 1; icon_state = "direction_med"; pixel_x = 0; pixel_y = 8; tag = "icon-direction_med (NORTH)"},/turf/simulated/wall/r_wall,/area/ai_monitored/storage/eva)
"bGk" = (/obj/structure/sign/directions{tag = "icon-direction_bridge (EAST)"; icon_state = "direction_bridge"; dir = 4},/obj/structure/sign/directions/science{desc = "A direction sign, pointing out which way the research department is."; dir = 4; icon_state = "direction_sci"; name = "research department"; pixel_y = -8; tag = "icon-direction_sci (EAST)"},/obj/structure/sign/directions/engineering{dir = 4; icon_state = "direction_eng"; pixel_y = 8; tag = "icon-direction_eng (EAST)"},/turf/simulated/wall/r_wall,/area/hallway/primary/port)
"bGl" = (/turf/simulated/wall/r_wall,/area/hallway/primary/central)
-"bGm" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plasteel,/area/hallway/primary/central)
+"bGm" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plasteel,/area/hallway/primary/central)
"bGn" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security{name = "Detective's Office"; req_access = null; req_access_txt = "4"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/hallway/primary/central)
"bGo" = (/obj/structure/window,/turf/simulated/floor/plasteel/black,/area/hallway/primary/central)
"bGp" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 2; on = 1},/obj/structure/window,/obj/structure/window{tag = "icon-window (EAST)"; icon_state = "window"; dir = 4},/turf/simulated/floor/plasteel/black,/area/hallway/primary/central)
@@ -4387,14 +4387,14 @@
"bGs" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/window,/turf/simulated/floor/plasteel/black,/area/hallway/primary/central)
"bGt" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall,/area/maintenance/port)
"bGu" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plating,/area/maintenance/port)
-"bGv" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/preopen{id = "lawyer_blast"; name = "privacy shutters"},/turf/simulated/floor/plating,/area/lawoffice)
+"bGv" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "lawyer_blast"; name = "privacy shutters"},/turf/simulated/floor/plating,/area/lawoffice)
"bGw" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock{name = "Law Office"; req_access_txt = "38"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/wood,/area/lawoffice)
-"bGx" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plasteel,/area/crew_quarters/courtroom)
+"bGx" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plasteel,/area/crew_quarters/courtroom)
"bGy" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/centcom{name = "Courtroom"; opacity = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/crew_quarters/courtroom)
"bGz" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/port)
-"bGA" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/crew_quarters/heads)
+"bGA" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/crew_quarters/heads)
"bGB" = (/obj/machinery/door/poddoor/shutters/preopen{id = "hopqueue"; name = "HoP Queue Shutters"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "loadingarea"; tag = "loading"},/area/crew_quarters/heads)
-"bGC" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/crew_quarters/heads)
+"bGC" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/crew_quarters/heads)
"bGD" = (/obj/machinery/door/poddoor/shutters/preopen{id = "hopqueue"; name = "HoP Queue Shutters"},/turf/simulated/floor/plasteel{icon_state = "loadingarea"; tag = "loading"},/area/crew_quarters/heads)
"bGE" = (/obj/structure/sign/directions{dir = 1; icon_state = "direction_bridge"; pixel_y = -8; tag = "icon-direction_bridge (NORTH)"},/turf/simulated/wall/r_wall,/area/crew_quarters/heads)
"bGF" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel/neutral,/area/hallway/primary/central)
@@ -4413,9 +4413,9 @@
"bGS" = (/obj/structure/sign/directions/science{tag = "icon-direction_sci (NORTH)"; icon_state = "direction_sci"; dir = 1},/obj/structure/sign/directions{dir = 1; icon_state = "direction_supply"; pixel_y = 8; tag = "icon-direction_supply (NORTH)"},/obj/structure/sign/directions/security{dir = 8; icon_state = "direction_sec"; pixel_y = -8; tag = "icon-direction_sec (WEST)"},/turf/simulated/wall,/area/maintenance/maintcentral{name = "Central Starboard Maintenance"})
"bGT" = (/obj/structure/disposalpipe/segment,/obj/machinery/alarm{dir = 8; pixel_x = 28; pixel_y = 0},/turf/simulated/floor/plasteel/warning/corner,/area/hallway/primary/starboard)
"bGU" = (/turf/simulated/wall,/area/hallway/secondary/entry)
-"bGV" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/shutters{id = "secpost1"; name = "shutters"},/turf/simulated/floor/plating,/area/hallway/secondary/entry)
+"bGV" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/shutters{id = "secpost1"; name = "shutters"},/turf/simulated/floor/plating,/area/hallway/secondary/entry)
"bGW" = (/obj/machinery/door/firedoor,/obj/structure/table/reinforced,/obj/machinery/door/window{name = "Arrivals Checkpoint"; req_access_txt = "1"},/obj/machinery/door/poddoor/shutters{id = "secpost1"; name = "shutters"},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/hallway/secondary/entry)
-"bGX" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/poddoor/shutters{id = "secpost1"; name = "shutters"},/turf/simulated/floor/plating,/area/hallway/secondary/entry)
+"bGX" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/poddoor/shutters{id = "secpost1"; name = "shutters"},/turf/simulated/floor/plating,/area/hallway/secondary/entry)
"bGY" = (/obj/structure/bed/chair/comfy/beige,/obj/effect/landmark/start{name = "Assistant"},/turf/simulated/floor/carpet,/area/hallway/secondary/entry)
"bGZ" = (/obj/structure/table/wood,/obj/item/device/flashlight/lamp/green{pixel_x = 1; pixel_y = 5},/turf/simulated/floor/carpet,/area/hallway/secondary/entry)
"bHa" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/hallway/secondary/entry)
@@ -4605,12 +4605,12 @@
"bKC" = (/obj/structure/disposalpipe/sortjunction{dir = 4; sortType = 18},/turf/simulated/floor/plasteel,/area/hallway/primary/starboard)
"bKD" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/hallway/primary/starboard)
"bKE" = (/obj/structure/disposalpipe/segment,/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/button/door{id = "evaarrival"; name = "E.V.A. Arrival Shutter Control"; pixel_x = 26; pixel_y = 0},/turf/simulated/floor/plasteel/warning/corner{tag = "icon-warningcorner (WEST)"; icon_state = "warningcorner"; dir = 8},/area/hallway/primary/starboard)
-"bKF" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/poddoor/shutters{id = "secpost1"; name = "shutters"},/turf/simulated/floor/plating,/area/hallway/secondary/entry)
+"bKF" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/poddoor/shutters{id = "secpost1"; name = "shutters"},/turf/simulated/floor/plating,/area/hallway/secondary/entry)
"bKG" = (/obj/machinery/door/firedoor,/obj/structure/table/reinforced,/obj/machinery/door/window{dir = 1; name = "Arrivals Checkpoint"; req_access_txt = "1"},/obj/machinery/door/poddoor/shutters{id = "secpost1"; name = "shutters"},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/hallway/secondary/entry)
"bKH" = (/obj/structure/bed/chair/comfy/beige{dir = 1; icon_state = "comfychair"},/obj/effect/landmark/start{name = "Assistant"},/turf/simulated/floor/carpet,/area/hallway/secondary/entry)
"bKI" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plasteel/shuttle{tag = "icon-delivery"; icon_state = "delivery"},/area/shuttle/escape)
"bKJ" = (/turf/simulated/wall/shuttle{tag = "icon-swall7"; icon_state = "swall7"},/area/shuttle/escape)
-"bKK" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/secondary/exit)
+"bKK" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/secondary/exit)
"bKL" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/secondary/exit)
"bKM" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel,/area/hallway/secondary/exit)
"bKN" = (/turf/simulated/floor/plasteel/neutral/corner,/area/hallway/secondary/exit)
@@ -4683,13 +4683,13 @@
"bMc" = (/obj/structure/flora/kirbyplants,/obj/machinery/light{dir = 4},/obj/machinery/camera{c_tag = "Escape Central"; dir = 8; network = list("SS13","RD"); pixel_y = -22},/turf/simulated/floor/plasteel/neutral/side{tag = "icon-neutral (EAST)"; icon_state = "neutral"; dir = 4},/area/hallway/secondary/exit)
"bMd" = (/obj/machinery/door/airlock/maintenance{name = "Engineering Maintenance"; req_access_txt = "10"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating,/area/hallway/secondary/exit)
"bMe" = (/turf/simulated/wall,/area/storage/auxillary)
-"bMf" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/storage/auxillary)
+"bMf" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/storage/auxillary)
"bMg" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass{name = "Auxiliary Tool Storage"; req_access_txt = "12"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel,/area/storage/auxillary)
"bMh" = (/turf/simulated/wall/r_wall,/area/storage/auxillary)
"bMi" = (/obj/machinery/door/airlock{name = "Escape Emergency Storage"; req_access_txt = "0"},/turf/simulated/floor/plasteel/airless,/area/hallway/secondary/exit)
"bMj" = (/turf/simulated/wall/r_wall,/area/security/brig)
"bMk" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{id_tag = "innerbrig"; name = "Brig"; req_access_txt = "63"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/brig)
-"bMl" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "brig shutters"},/turf/simulated/floor/plating,/area/security/brig)
+"bMl" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "brig shutters"},/turf/simulated/floor/plating,/area/security/brig)
"bMm" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{id_tag = "innerbrig"; name = "Brig"; req_access_txt = "63"},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/brig)
"bMn" = (/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{tag = "icon-blueyellow (WEST)"; icon_state = "blueyellow"; dir = 8},/area/hallway/primary/central)
"bMo" = (/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel,/area/hallway/primary/central)
@@ -4712,7 +4712,7 @@
"bMF" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel/neutral/side{dir = 4},/area/hallway/primary/aft)
"bMG" = (/obj/structure/sign/directions/science{desc = "A direction sign, pointing out which way the research department is."; dir = 4; icon_state = "direction_sci"; name = "research department"; pixel_y = 0; tag = "icon-direction_sci (EAST)"},/obj/structure/sign/directions/engineering{pixel_y = -8},/obj/structure/sign/directions{dir = 4; icon_state = "direction_supply"; pixel_y = 8; tag = "icon-direction_supply (EAST)"},/turf/simulated/wall,/area/hydroponics)
"bMH" = (/turf/simulated/wall,/area/hydroponics)
-"bMI" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hydroponics)
+"bMI" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hydroponics)
"bMJ" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass{name = "Hydroponics"; req_access_txt = "35"},/turf/simulated/floor/plasteel,/area/hydroponics)
"bMK" = (/obj/structure/disposalpipe/segment,/obj/machinery/camera/autoname{tag = "icon-camera (NORTHEAST)"; icon_state = "camera"; dir = 5},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel,/area/hallway/primary/central)
"bML" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel,/area/hallway/primary/central)
@@ -4736,7 +4736,7 @@
"bNd" = (/obj/machinery/door/poddoor/shutters{name = "Escape Shuttle Cargo Shutters"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor2"},/area/shuttle/escape)
"bNe" = (/obj/machinery/door/poddoor/shutters{id = "shuttlecargo"; name = "Escape Shuttle Cargo Shutters"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor2"},/area/shuttle/escape)
"bNf" = (/turf/simulated/wall/shuttle{tag = "icon-swall13"; icon_state = "swall13"; dir = 2},/area/shuttle/escape)
-"bNg" = (/obj/structure/window/fulltile/reinforced,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 0},/obj/structure/grille,/turf/simulated/floor/plating,/area/hallway/secondary/exit)
+"bNg" = (/obj/structure/window/reinforced/fulltile,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 0},/obj/structure/grille,/turf/simulated/floor/plating,/area/hallway/secondary/exit)
"bNh" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/plasteel/neutral/side{tag = "icon-neutral (EAST)"; icon_state = "neutral"; dir = 4},/area/hallway/secondary/exit)
"bNi" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating,/area/hallway/secondary/exit)
"bNj" = (/obj/machinery/power/apc{dir = 1; name = "Auxiliary Tool Storage APC"; pixel_y = 24},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plasteel,/area/storage/auxillary)
@@ -4758,7 +4758,7 @@
"bNz" = (/obj/structure/closet/bombcloset,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/security/main)
"bNA" = (/obj/structure/closet/wardrobe/red,/obj/machinery/camera{c_tag = "Security Locker Room"; dir = 2; network = list("SS13","RD")},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/security/main)
"bNB" = (/obj/structure/closet/l3closet/security,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/security/main)
-"bNC" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plasteel,/area/security/main)
+"bNC" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plasteel,/area/security/main)
"bND" = (/obj/structure/closet/secure_closet/security/sec,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/security/main)
"bNE" = (/obj/structure/rack,/obj/item/weapon/storage/box/handcuffs,/obj/item/weapon/storage/box/flashbangs{pixel_x = -2; pixel_y = -2},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/security/main)
"bNF" = (/turf/simulated/wall/r_wall,/area/security/main)
@@ -4817,7 +4817,7 @@
"bOG" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall,/area/storage/testroom)
"bOH" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass{name = "Terrarium"},/turf/simulated/floor/plasteel,/area/storage/testroom)
"bOI" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass{name = "Terrarium"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/storage/testroom)
-"bOJ" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/storage/testroom)
+"bOJ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/storage/testroom)
"bOK" = (/obj/machinery/button/door{id = "shuttlecargo"; name = "Cargo Shutters"; pixel_y = 26; req_access_txt = "50"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape)
"bOL" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Airlock"},/obj/docking_port/mobile/emergency{dheight = 0; dir = 8; dwidth = 9; height = 20; width = 18},/obj/docking_port/stationary{dheight = 0; dir = 8; dwidth = 9; height = 20; id = "emergency_home"; name = "Escape Home"; width = 18},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape)
"bOM" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel/purple/corner,/area/hallway/secondary/exit)
@@ -4928,7 +4928,7 @@
"bQN" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/atmos)
"bQO" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/atmos)
"bQP" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plasteel/neutral/side{dir = 4},/area/hallway/primary/aft)
-"bQQ" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/hydroponics)
+"bQQ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/hydroponics)
"bQR" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/plasteel,/area/hydroponics)
"bQS" = (/turf/simulated/floor/plasteel/green/side{tag = "icon-green (EAST)"; icon_state = "green"; dir = 4},/area/hydroponics)
"bQT" = (/obj/machinery/hydroponics/constructable,/turf/simulated/floor/plasteel/black,/area/hydroponics)
@@ -4974,7 +4974,7 @@
"bRH" = (/obj/machinery/light/small,/turf/simulated/floor/plasteel,/area/storage/auxillary)
"bRI" = (/obj/structure/dispenser/oxygen,/turf/simulated/floor/plasteel/darkred,/area/hallway/secondary/exit)
"bRJ" = (/obj/machinery/door/firedoor,/obj/machinery/flasher{id = "secentranceflasher"; pixel_x = -25},/obj/machinery/door/airlock/glass_security{id_tag = "outerbrig"; name = "Brig"; req_access_txt = "63"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/brig)
-"bRK" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "brig shutters"},/turf/simulated/floor/plating,/area/security/brig)
+"bRK" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "brig shutters"},/turf/simulated/floor/plating,/area/security/brig)
"bRL" = (/obj/machinery/door/firedoor,/obj/machinery/flasher{id = "secentranceflasher"; pixel_x = 25},/obj/machinery/door/airlock/glass_security{id_tag = "outerbrig"; name = "Brig"; req_access_txt = "63"},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/brig)
"bRM" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security{name = "Interrogation"; req_access = null; req_access_txt = "0"; req_one_access_txt = "1;4"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/brig)
"bRN" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall,/area/security/brig)
@@ -5039,17 +5039,17 @@
"bSU" = (/obj/structure/closet{name = "Evidence Closet 1"},/obj/item/weapon/storage/backpack{name = "Evidence Bag 1"},/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/simulated/floor/plasteel{tag = "icon-vault (NORTH)"; icon_state = "vault"; dir = 1},/area/security/main)
"bSV" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 2; on = 1},/obj/machinery/light/small{dir = 1},/obj/effect/landmark{name = "blobstart"},/obj/machinery/camera{c_tag = "Evidence Storage"; dir = 2; network = list("SS13")},/obj/item/weapon/storage/secure/safe{name = "evidence safe"; pixel_x = 6; pixel_y = 28},/turf/simulated/floor/plasteel{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/security/main)
"bSW" = (/obj/structure/closet/secure_closet{anchored = 1; name = "Secure Evidence Closet"; req_access_txt = "0"; req_one_access_txt = "3,4"},/obj/item/weapon/storage/secure/briefcase{name = "Secure Evidence Briefcase"; pixel_x = 3; pixel_y = -3},/turf/simulated/floor/plasteel{tag = "icon-vault (EAST)"; icon_state = "vault"; dir = 4},/area/security/main)
-"bSX" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8; initialize_directions = 11},/turf/simulated/floor/plating,/area/atmos)
+"bSX" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8; initialize_directions = 11},/turf/simulated/floor/plating,/area/atmos)
"bSY" = (/obj/structure/table/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/door/window/northleft{dir = 1; icon_state = "left"; name = "Atmospherics Desk"; req_access_txt = "24"},/obj/item/weapon/folder/yellow,/obj/item/weapon/folder/yellow,/obj/item/weapon/pen,/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/atmos)
-"bSZ" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id = "atmos"; name = "Atmos Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/atmos)
+"bSZ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id = "atmos"; name = "Atmos Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/atmos)
"bTa" = (/obj/machinery/door/airlock/glass_atmos{name = "Atmospherics Monitoring"; req_access_txt = "24"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/atmos)
"bTb" = (/obj/structure/closet/secure_closet/atmospherics,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plasteel/darkwarning,/area/atmos)
"bTc" = (/obj/structure/closet/secure_closet/atmospherics,/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plasteel/darkwarning,/area/atmos)
"bTd" = (/obj/structure/closet/wardrobe/atmospherics_yellow,/obj/item/clothing/suit/hooded/wintercoat/engineering/atmos,/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel/darkwarning,/area/atmos)
"bTe" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel/darkwarning,/area/atmos)
"bTf" = (/obj/machinery/suit_storage_unit/atmos,/turf/simulated/floor/plasteel/darkwarning,/area/atmos)
-"bTg" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/plasteel/darkwarning,/area/atmos)
-"bTh" = (/obj/structure/window/fulltile/reinforced,/obj/structure/grille,/turf/simulated/floor/plasteel,/area/atmos)
+"bTg" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/plasteel/darkwarning,/area/atmos)
+"bTh" = (/obj/structure/window/reinforced/fulltile,/obj/structure/grille,/turf/simulated/floor/plasteel,/area/atmos)
"bTi" = (/obj/machinery/alarm{frequency = 1439; locked = 0; pixel_y = 23},/turf/simulated/floor/plasteel,/area/atmos)
"bTj" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel,/area/atmos)
"bTk" = (/obj/machinery/light{dir = 1},/obj/machinery/camera{c_tag = "Atmos North East"; dir = 2; network = list("SS13","RD")},/turf/simulated/floor/plasteel,/area/atmos)
@@ -5106,7 +5106,7 @@
"bUj" = (/obj/structure/table,/obj/item/stack/sheet/mineral/plasma{amount = 10; layer = 2.9},/turf/simulated/floor/plasteel/black,/area/security/brig)
"bUk" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/brig)
"bUl" = (/obj/machinery/camera{c_tag = "Brig Cell One"; dir = 2; network = list("SS13","RD")},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 2; on = 1},/turf/simulated/floor/plasteel,/area/security/brig)
-"bUm" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "brig shutters"},/turf/simulated/floor/plating,/area/security/brig)
+"bUm" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "brig shutters"},/turf/simulated/floor/plating,/area/security/brig)
"bUn" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{tag = "icon-intact (NORTH)"; icon_state = "intact"; dir = 1},/turf/simulated/floor/plasteel/red/side{tag = "icon-red (WEST)"; icon_state = "red"; dir = 8},/area/security/brig)
"bUo" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/security/brig)
"bUp" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 1},/turf/simulated/floor/plasteel,/area/security/brig)
@@ -5126,14 +5126,14 @@
"bUD" = (/obj/machinery/computer/atmos_alert,/obj/machinery/camera{c_tag = "Atmospherics - Control Room"; network = list("SS13")},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-blueyellow (NORTH)"; icon_state = "blueyellow"; dir = 1},/area/atmos)
"bUE" = (/obj/machinery/computer/station_alert,/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{dir = 1},/turf/simulated/floor/plasteel{tag = "icon-blueyellow (NORTH)"; icon_state = "blueyellow"; dir = 1},/area/atmos)
"bUF" = (/obj/structure/sign/atmosplaque{pixel_x = 0; pixel_y = 32},/obj/item/weapon/phone{pixel_x = -3; pixel_y = 3},/obj/item/weapon/cigbutt/cigarbutt{pixel_x = 5; pixel_y = -1},/obj/structure/table,/obj/machinery/light_switch{pixel_x = 26; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-blueyellow (NORTHEAST)"; icon_state = "blueyellow"; dir = 5},/area/atmos)
-"bUG" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/atmos)
+"bUG" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id = "atmos"; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/atmos)
"bUH" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plasteel,/area/atmos)
"bUI" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 6; initialize_directions = 6},/turf/simulated/floor/plasteel,/area/atmos)
"bUJ" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/turf/simulated/floor/plasteel,/area/atmos)
"bUK" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/atmos)
-"bUL" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/obj/structure/window/fulltile/reinforced,/obj/structure/grille,/turf/simulated/floor/plasteel,/area/atmos)
+"bUL" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/obj/structure/window/reinforced/fulltile,/obj/structure/grille,/turf/simulated/floor/plasteel,/area/atmos)
"bUM" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 10; initialize_directions = 10},/turf/simulated/floor/plasteel,/area/atmos)
-"bUN" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/atmos)
+"bUN" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/atmos)
"bUO" = (/obj/structure/grille,/turf/simulated/wall/r_wall,/area/atmos)
"bUP" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/simulated/floor/plating,/area/atmos)
"bUQ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall/r_wall,/area/atmos)
@@ -5206,7 +5206,7 @@
"bWf" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/obj/machinery/door/airlock/atmos{name = "Atmospherics"; req_access_txt = "24"},/turf/simulated/floor/plasteel,/area/atmos)
"bWg" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/obj/machinery/atmospherics/components/binary/pump{dir = 2; name = "Air to Distro"; on = 1},/turf/simulated/floor/plasteel,/area/atmos)
"bWh" = (/obj/machinery/atmospherics/components/binary/pump{dir = 8; name = "Mix Outlet Pump"; on = 0},/turf/simulated/floor/plasteel/green/side{tag = "icon-green (NORTHEAST)"; icon_state = "green"; dir = 5},/area/atmos)
-"bWi" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/atmos)
+"bWi" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/atmos)
"bWj" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/turf/space,/area/space)
"bWk" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/structure/grille,/obj/machinery/meter,/turf/simulated/wall/r_wall,/area/atmos)
"bWl" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; external_pressure_bound = 0; frequency = 1441; id_tag = "waste_out"; initialize_directions = 1; internal_pressure_bound = 4000; name = "mix vent"; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/atmos)
@@ -5247,12 +5247,12 @@
"bWU" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9; pixel_y = 0},/turf/simulated/wall/r_wall,/area/security/brig)
"bWV" = (/obj/structure/closet/secure_closet/brig{id = "Cell 3"; name = "Cell 3 Locker"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/brig)
"bWW" = (/obj/machinery/light/small,/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel,/area/security/brig)
-"bWX" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "brig shutters"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/security/brig)
+"bWX" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "brig shutters"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/security/brig)
"bWY" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel/red/side{tag = "icon-red (WEST)"; icon_state = "red"; dir = 8},/area/security/brig)
"bWZ" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/security/brig)
"bXa" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel/red/corner,/area/security/brig)
"bXb" = (/turf/simulated/floor/plasteel/red/side{tag = "icon-red (SOUTHEAST)"; icon_state = "red"; dir = 6},/area/security/brig)
-"bXc" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plasteel,/area/security/warden)
+"bXc" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plasteel,/area/security/warden)
"bXd" = (/turf/simulated/wall,/area/security/warden)
"bXe" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/effect/landmark/start{name = "Security Officer"},/turf/simulated/floor/plasteel,/area/security/main)
"bXf" = (/obj/structure/table,/obj/item/weapon/folder/red,/obj/item/device/taperecorder{pixel_x = -4; pixel_y = 0},/turf/simulated/floor/plasteel,/area/security/main)
@@ -5276,11 +5276,11 @@
"bXx" = (/obj/machinery/atmospherics/components/trinary/mixer{dir = 8},/turf/simulated/floor/plasteel,/area/atmos)
"bXy" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 8},/turf/simulated/floor/plasteel,/area/atmos)
"bXz" = (/obj/machinery/atmospherics/pipe/simple/green/visible,/turf/simulated/floor/plasteel,/area/atmos)
-"bXA" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 6},/obj/structure/window/fulltile/reinforced,/obj/structure/grille,/turf/simulated/floor/plasteel,/area/atmos)
+"bXA" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 6},/obj/structure/window/reinforced/fulltile,/obj/structure/grille,/turf/simulated/floor/plasteel,/area/atmos)
"bXB" = (/obj/machinery/atmospherics/components/binary/pump{dir = 4; name = "Mix to Distro"; on = 0},/turf/simulated/floor/plasteel,/area/atmos)
"bXC" = (/obj/machinery/atmospherics/pipe/manifold/supply/visible{tag = "icon-manifold (EAST)"; icon_state = "manifold"; dir = 4},/turf/simulated/floor/plasteel,/area/atmos)
"bXD" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "waste_in"; name = "Gas Mix Tank Control"; output_tag = "waste_out"; sensors = list("waste_sensor" = "Tank")},/turf/simulated/floor/plasteel{icon_state = "green"; dir = 4},/area/atmos)
-"bXE" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating/airless,/area/atmos)
+"bXE" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating/airless,/area/atmos)
"bXF" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "waste_sensor"; output = 63},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/atmos)
"bXG" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/atmos)
"bXH" = (/obj/machinery/vending/assist,/obj/machinery/status_display{density = 0; pixel_x = -32; pixel_y = 0; supply_display = 1},/turf/simulated/floor/plasteel/neutral,/area/atmos)
@@ -5290,7 +5290,7 @@
"bXL" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/hydroponics/constructable,/turf/simulated/floor/plasteel/black,/area/hydroponics)
"bXM" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel/green/side{tag = "icon-green (WEST)"; icon_state = "green"; dir = 8},/area/hydroponics)
"bXN" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/hydroponics)
-"bXO" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/crew_quarters/kitchen)
+"bXO" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/crew_quarters/kitchen)
"bXP" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen)
"bXQ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen)
"bXR" = (/obj/structure/table,/obj/machinery/firealarm{dir = 8; pixel_x = -26; pixel_y = 0},/obj/machinery/chem_dispenser/drinks,/turf/simulated/floor/plasteel/bar,/area/crew_quarters/bar)
@@ -5346,12 +5346,12 @@
"bYP" = (/obj/machinery/camera{c_tag = "Atmospherics - Port"; dir = 4; network = list("SS13")},/obj/machinery/light{dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel{dir = 8; icon_state = "caution"},/area/atmos)
"bYQ" = (/obj/machinery/atmospherics/pipe/manifold/cyan/visible{dir = 8; initialize_directions = 11},/turf/simulated/floor/plasteel,/area/atmos)
"bYR" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 6},/turf/simulated/floor/plasteel,/area/atmos)
-"bYS" = (/obj/machinery/atmospherics/pipe/manifold/yellow/visible,/obj/structure/window/fulltile/reinforced,/obj/structure/grille,/turf/simulated/floor/plasteel,/area/atmos)
+"bYS" = (/obj/machinery/atmospherics/pipe/manifold/yellow/visible,/obj/structure/window/reinforced/fulltile,/obj/structure/grille,/turf/simulated/floor/plasteel,/area/atmos)
"bYT" = (/obj/machinery/atmospherics/pipe/manifold/yellow/visible{tag = "icon-manifold (NORTH)"; icon_state = "manifold"; dir = 1},/turf/simulated/floor/plasteel,/area/atmos)
"bYU" = (/obj/machinery/atmospherics/pipe/simple/supply/visible{tag = "icon-intact (NORTH)"; icon_state = "intact"; dir = 1},/obj/machinery/atmospherics/components/binary/pump{dir = 8; name = "Pure to Mix"; on = 0},/turf/simulated/floor/plasteel,/area/atmos)
"bYV" = (/obj/machinery/atmospherics/pipe/manifold/green/visible{tag = "icon-manifold (NORTH)"; icon_state = "manifold"; dir = 1},/turf/simulated/floor/plasteel,/area/atmos)
"bYW" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/simulated/floor/plasteel{icon_state = "green"; dir = 6},/area/atmos)
-"bYX" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/atmos)
+"bYX" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/atmos)
"bYY" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/space,/area/space)
"bYZ" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 8; frequency = 1441; id = "waste_in"; pixel_y = 1},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/atmos)
"bZa" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/computer/security/telescreen/entertainment{pixel_x = -32; pixel_y = 0},/turf/simulated/floor/plasteel/neutral,/area/atmos)
@@ -5387,7 +5387,7 @@
"bZE" = (/obj/machinery/atmospherics/components/binary/pump{dir = 8; on = 1},/turf/simulated/floor/plasteel/black,/area/security/brig)
"bZF" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/wall/r_wall,/area/security/brig)
"bZG" = (/obj/machinery/camera{c_tag = "Brig Cell two"; dir = 2; network = list("SS13","RD")},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel,/area/security/brig)
-"bZH" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "brig shutters"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/security/brig)
+"bZH" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "brig shutters"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/security/brig)
"bZI" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel/red/side{tag = "icon-red (WEST)"; icon_state = "red"; dir = 8},/area/security/brig)
"bZJ" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/security/brig)
"bZK" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,/turf/simulated/floor/plasteel/red/side{tag = "icon-red (EAST)"; icon_state = "red"; dir = 4},/area/security/brig)
@@ -5403,9 +5403,9 @@
"bZU" = (/obj/machinery/atmospherics/components/binary/pump{dir = 2; name = "Air to Port"; on = 0},/turf/simulated/floor/plasteel,/area/atmos)
"bZV" = (/obj/machinery/atmospherics/components/binary/pump{dir = 2; name = "Mix to Port"; on = 0},/turf/simulated/floor/plasteel,/area/atmos)
"bZW" = (/obj/machinery/atmospherics/components/binary/pump{dir = 2; name = "Pure to Port"; on = 0},/turf/simulated/floor/plasteel,/area/atmos)
-"bZX" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible,/obj/structure/window/fulltile/reinforced,/obj/structure/grille,/turf/simulated/floor/plasteel,/area/atmos)
-"bZY" = (/obj/machinery/atmospherics/pipe/simple/supply/visible{tag = "icon-intact (NORTH)"; icon_state = "intact"; dir = 1},/obj/structure/window/fulltile/reinforced,/obj/structure/grille,/turf/simulated/floor/plasteel,/area/atmos)
-"bZZ" = (/obj/machinery/atmospherics/pipe/simple/green/visible,/obj/structure/window/fulltile/reinforced,/obj/structure/grille,/turf/simulated/floor/plasteel,/area/atmos)
+"bZX" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible,/obj/structure/window/reinforced/fulltile,/obj/structure/grille,/turf/simulated/floor/plasteel,/area/atmos)
+"bZY" = (/obj/machinery/atmospherics/pipe/simple/supply/visible{tag = "icon-intact (NORTH)"; icon_state = "intact"; dir = 1},/obj/structure/window/reinforced/fulltile,/obj/structure/grille,/turf/simulated/floor/plasteel,/area/atmos)
+"bZZ" = (/obj/machinery/atmospherics/pipe/simple/green/visible,/obj/structure/window/reinforced/fulltile,/obj/structure/grille,/turf/simulated/floor/plasteel,/area/atmos)
"caa" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plasteel,/area/hydroponics)
"cab" = (/obj/structure/table/reinforced,/obj/machinery/door/window/eastleft{dir = 2; name = "Kitchen Window"; req_access_txt = "28"; req_one_access_txt = "0"},/obj/machinery/door/firedoor,/obj/item/weapon/paper,/obj/machinery/door/window/eastleft{dir = 1; name = "Hydroponics Window"; req_access_txt = "0"; req_one_access_txt = "30;35"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/crew_quarters/kitchen)
"cac" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen)
@@ -5439,12 +5439,12 @@
"caE" = (/obj/machinery/door/window/brigdoor{dir = 8; id = "Cell 2"; name = "Cell 2"; req_access_txt = "2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel/red/side{tag = "icon-red (EAST)"; icon_state = "red"; dir = 4},/area/security/brig)
"caF" = (/turf/simulated/floor/plasteel,/area/security/brig)
"caG" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel/red/side{tag = "icon-red (EAST)"; icon_state = "red"; dir = 4},/area/security/brig)
-"caH" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plasteel,/area/space/nearstation)
+"caH" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plasteel,/area/space/nearstation)
"caI" = (/obj/machinery/computer/crew,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/space/nearstation)
"caJ" = (/obj/structure/rack,/obj/item/clothing/mask/gas/sechailer{pixel_x = -3; pixel_y = -3},/obj/item/clothing/mask/gas/sechailer{pixel_x = -3; pixel_y = -3},/obj/item/clothing/mask/gas/sechailer{pixel_x = -3; pixel_y = -3},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/warden)
"caK" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/warden)
"caL" = (/obj/structure/cable{tag = "icon-1-2"; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/warden)
-"caM" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/security/warden)
+"caM" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/security/warden)
"caN" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/security/main)
"caO" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/security/main)
"caP" = (/obj/structure/rack{pixel_y = 2},/obj/item/weapon/gun/energy/laser/practice{pixel_x = 2; pixel_y = -2},/obj/item/weapon/gun/energy/laser/practice{pixel_x = -3; pixel_y = 3},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/camera{c_tag = "Firing Range"; dir = 8; network = list("SS13")},/turf/simulated/floor/plasteel/warning{tag = "icon-warning (SOUTHWEST)"; icon_state = "warning"; dir = 10},/area/security/main)
@@ -5501,7 +5501,7 @@
"cbO" = (/mob/living/simple_animal/cow{name = "Betsy"; real_name = "Betsy"},/turf/simulated/floor/grass,/area/storage/testroom)
"cbP" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/turf/simulated/wall,/area/maintenance/apmaint)
"cbQ" = (/turf/simulated/wall,/area/maintenance/apmaint)
-"cbR" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/apmaint)
+"cbR" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/apmaint)
"cbS" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall,/area/hallway/secondary/exit)
"cbT" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/airlock/maintenance,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/apmaint)
"cbU" = (/obj/machinery/computer/arcade,/turf/simulated/floor/plasteel,/area/hallway/secondary/exit)
@@ -5511,7 +5511,7 @@
"cbY" = (/turf/simulated/floor/plasteel/black{burnt = 1},/area/security/brig)
"cbZ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plasteel,/area/security/brig)
"cca" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel/red/side{tag = "icon-red (EAST)"; icon_state = "red"; dir = 4},/area/security/brig)
-"ccb" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/security/warden)
+"ccb" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/security/warden)
"ccc" = (/obj/machinery/computer/prisoner,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/warden)
"ccd" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/bed/chair/office/dark{dir = 8},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/warden)
"cce" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/warden)
@@ -5529,14 +5529,14 @@
"ccq" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; external_pressure_bound = 0; frequency = 1443; id_tag = "air_out"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/atmos)
"ccr" = (/obj/structure/grille,/obj/machinery/meter{frequency = 1443; id = "mair_out_meter"; name = "Mixed Air Tank Out"},/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/turf/simulated/wall/r_wall,/area/atmos)
"ccs" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/turf/space,/area/space)
-"cct" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/turf/simulated/floor/plating,/area/atmos)
+"cct" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/turf/simulated/floor/plating,/area/atmos)
"ccu" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel/white,/area/atmos)
"ccv" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 9},/turf/simulated/floor/plasteel,/area/atmos)
"ccw" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible,/turf/simulated/floor/plasteel,/area/atmos)
"ccx" = (/obj/machinery/atmospherics/pipe/simple/supply/visible{tag = "icon-intact (NORTH)"; icon_state = "intact"; dir = 1},/turf/simulated/floor/plasteel,/area/atmos)
"ccy" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "n2o_in"; name = "Nitrous Oxide Supply Control"; output_tag = "n2o_out"; sensors = list("n2o_sensor" = "Tank")},/turf/simulated/floor/plasteel{icon_state = "escape"; dir = 4},/area/atmos)
"ccz" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "n2o_sensor"},/turf/simulated/floor/engine/n20,/area/atmos)
-"ccA" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/engine/n20,/area/atmos)
+"ccA" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/engine/n20,/area/atmos)
"ccB" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/engine/n20,/area/atmos)
"ccC" = (/obj/machinery/door/airlock/maintenance{name = "Hydroponics Maintenance"; req_access_txt = "35"},/turf/simulated/floor/plating,/area/hydroponics)
"ccD" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/snacks/mint,/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/obj/machinery/power/apc{dir = 2; name = "Kitchen APC"; pixel_y = -24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen)
@@ -5587,7 +5587,7 @@
"cdw" = (/obj/structure/table,/obj/machinery/recharger,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/warden)
"cdx" = (/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/warden)
"cdy" = (/obj/structure/cable{tag = "icon-1-2"; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/warden)
-"cdz" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/warden)
+"cdz" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/warden)
"cdA" = (/obj/structure/table,/obj/item/weapon/restraints/handcuffs,/obj/item/device/radio/off,/turf/simulated/floor/plasteel,/area/security/main)
"cdB" = (/obj/structure/table,/obj/item/weapon/folder/red,/obj/item/weapon/storage/secure/briefcase,/turf/simulated/floor/plasteel,/area/security/main)
"cdC" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk,/obj/machinery/light_switch{pixel_x = 23},/turf/simulated/floor/plasteel,/area/security/main)
@@ -5599,7 +5599,7 @@
"cdI" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 4},/obj/machinery/portable_atmospherics/canister,/turf/simulated/floor/plasteel{dir = 2; icon_state = "bot"},/area/atmos)
"cdJ" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plasteel,/area/atmos)
"cdK" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 8},/turf/simulated/floor/plasteel{dir = 2; icon_state = "bot"},/area/atmos)
-"cdL" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = 4; on = 1},/turf/simulated/floor/plasteel,/area/atmos)
+"cdL" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = "n2o"; on = 1},/turf/simulated/floor/plasteel,/area/atmos)
"cdM" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/simulated/floor/plasteel{icon_state = "escape"; dir = 6},/area/atmos)
"cdN" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 8; frequency = 1441; id = "n2o_in"; pixel_y = 1},/turf/simulated/floor/engine/n20,/area/atmos)
"cdO" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/grille,/turf/simulated/floor/plating,/area/atmos)
@@ -5667,7 +5667,7 @@
"ceY" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/suit/hazardvest,/obj/item/clothing/suit/hazardvest,/obj/item/clothing/suit/hazardvest,/obj/item/clothing/suit/hazardvest,/obj/item/clothing/gloves/color/black,/obj/item/clothing/gloves/color/black,/obj/item/clothing/gloves/color/black,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/turf/simulated/floor/plasteel,/area/atmos)
"ceZ" = (/obj/machinery/light{dir = 4},/turf/simulated/floor/plasteel,/area/atmos)
"cfa" = (/obj/machinery/camera{c_tag = "South Central Aft Hall"; dir = 4; network = list("SS13")},/turf/simulated/floor/plasteel/neutral/side{tag = "icon-neutral (WEST)"; icon_state = "neutral"; dir = 8},/area/hallway/primary/aft)
-"cfb" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/locker)
+"cfb" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/crew_quarters/locker)
"cfc" = (/obj/structure/bed/stool{pixel_y = 8},/turf/simulated/floor/carpet,/area/crew_quarters/locker)
"cfd" = (/obj/structure/table,/obj/item/weapon/razor,/turf/simulated/floor/plasteel{icon_state = "barber"},/area/crew_quarters/locker)
"cfe" = (/turf/simulated/floor/plasteel{icon_state = "barber"},/area/crew_quarters/locker)
@@ -5713,7 +5713,7 @@
"cfS" = (/turf/simulated/wall/shuttle{tag = "icon-swall_s6"; icon_state = "swall_s6"},/area/shuttle/labor)
"cfT" = (/obj/structure/grille,/obj/structure/window/shuttle,/turf/space,/area/shuttle/labor)
"cfU" = (/turf/simulated/wall/shuttle{tag = "icon-swall_s10"; icon_state = "swall_s10"},/area/shuttle/labor)
-"cfV" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "brig shutters"},/turf/simulated/floor/plating,/area/space)
+"cfV" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "brig shutters"},/turf/simulated/floor/plating,/area/space)
"cfW" = (/obj/machinery/firealarm{pixel_y = 26},/turf/simulated/floor/plasteel/black,/area/security/processing)
"cfX" = (/obj/structure/bed/chair/office/dark{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/processing)
"cfY" = (/obj/machinery/computer/shuttle/labor,/turf/simulated/floor/plasteel/black,/area/security/processing)
@@ -5765,7 +5765,7 @@
"cgS" = (/obj/structure/disposalpipe/sortjunction{sortType = 18},/turf/simulated/floor/plasteel,/area/crew_quarters/fitness)
"cgT" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/crew_quarters/fitness)
"cgU" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/plasteel,/area/crew_quarters/fitness)
-"cgV" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/fitness)
+"cgV" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/crew_quarters/fitness)
"cgW" = (/obj/structure/table/glass,/obj/item/weapon/cultivator,/obj/item/weapon/hatchet,/obj/item/weapon/crowbar,/obj/item/device/analyzer/plant_analyzer,/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor/plasteel{icon_state = "green"; dir = 4},/area/storage/testroom)
"cgX" = (/obj/structure/table/glass,/obj/item/weapon/reagent_containers/food/snacks/grown/wheat,/obj/item/weapon/reagent_containers/food/snacks/grown/watermelon,/obj/item/weapon/reagent_containers/food/snacks/grown/watermelon,/obj/item/weapon/reagent_containers/food/snacks/grown/watermelon,/obj/item/weapon/reagent_containers/food/snacks/grown/citrus/orange,/obj/item/weapon/reagent_containers/food/snacks/grown/grapes,/obj/item/weapon/reagent_containers/food/snacks/grown/cocoapod,/turf/simulated/floor/plasteel{icon_state = "green"; dir = 4},/area/storage/testroom)
"cgY" = (/obj/item/weapon/reagent_containers/spray/plantbgone,/obj/item/weapon/reagent_containers/spray/pestspray{pixel_x = 3; pixel_y = 4},/obj/item/weapon/reagent_containers/glass/bottle/nutrient/ez,/obj/item/weapon/reagent_containers/glass/bottle/nutrient/rh{pixel_x = 2; pixel_y = 1},/obj/structure/table/glass,/obj/machinery/light{dir = 4},/turf/simulated/floor/plasteel,/area/storage/testroom)
@@ -5776,7 +5776,7 @@
"chd" = (/obj/machinery/computer/shuttle/labor,/obj/structure/reagent_dispensers/peppertank{pixel_x = -31; pixel_y = 0},/turf/simulated/floor/plasteel/shuttle/red,/area/shuttle/labor)
"che" = (/obj/structure/bed/chair/office/dark{dir = 1},/turf/simulated/floor/plasteel/shuttle/red,/area/shuttle/labor)
"chf" = (/obj/structure/table,/obj/item/weapon/folder/red,/obj/item/weapon/restraints/handcuffs,/turf/simulated/floor/plasteel/shuttle/red,/area/shuttle/labor)
-"chg" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "brig shutters"},/turf/simulated/floor/plating,/area/security/processing)
+"chg" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "brig shutters"},/turf/simulated/floor/plating,/area/security/processing)
"chh" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel/black,/area/security/processing)
"chi" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plasteel/black,/area/security/processing)
"chj" = (/obj/machinery/computer/security{name = "Labor Camp Monitoring"; network = list("Labor")},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/processing)
@@ -5852,8 +5852,8 @@
"ciB" = (/obj/machinery/alarm{desc = "This particular atmos control unit appears to have no access restrictions."; dir = 8; icon_state = "alarm0"; locked = 0; name = "all-access air alarm"; pixel_x = 24; req_access = "0"; req_one_access = "0"},/turf/simulated/floor/plasteel/red/side{tag = "icon-red (EAST)"; icon_state = "red"; dir = 4},/area/security/brig)
"ciC" = (/turf/simulated/wall/r_wall,/area/security/warden)
"ciD" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Secure Gear Storage"; req_access_txt = "3"},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/security/warden)
-"ciE" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/security/main)
-"ciF" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/security/main)
+"ciE" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/security/main)
+"ciF" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/security/main)
"ciG" = (/obj/machinery/door/firedoor,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/door/airlock/command{name = "Head of Security's Office"; req_access = null; req_access_txt = "58"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel,/area/security/main)
"ciH" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall,/area/maintenance/aft{name = "Aft Port Maintenance"})
"ciI" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/simulated/floor/engine{name = "n2 floor"; nitrogen = 100000; oxygen = 0},/area/atmos)
@@ -5863,7 +5863,7 @@
"ciM" = (/obj/machinery/atmospherics/components/binary/pump{dir = 2; name = "Port to Filter"; on = 0},/turf/simulated/floor/plasteel,/area/atmos)
"ciN" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 8},/obj/structure/bed/stool,/turf/simulated/floor/plasteel,/area/atmos)
"ciO" = (/obj/machinery/atmospherics/components/unary/heat_reservoir/heater{dir = 8},/turf/simulated/floor/plasteel,/area/atmos)
-"ciP" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; on = 1},/turf/simulated/floor/plasteel,/area/atmos)
+"ciP" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = "plasma"; on = 1},/turf/simulated/floor/plasteel,/area/atmos)
"ciQ" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/simulated/floor/plasteel{dir = 6; icon_state = "warning"},/area/atmos)
"ciR" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 8; frequency = 1441; id = "tox_in"; pixel_y = 1},/turf/simulated/floor/engine{carbon_dioxide = 0; name = "plasma floor"; nitrogen = 0; oxygen = 0; toxins = 70000},/area/atmos)
"ciS" = (/obj/structure/closet/firecloset,/turf/simulated/floor/plasteel/neutral,/area/atmos)
@@ -5903,7 +5903,7 @@
"cjA" = (/obj/structure/rack,/obj/item/weapon/book/manual/wiki/engineering_guide{pixel_x = 3; pixel_y = 4},/obj/effect/spawner/lootdrop/maintenance,/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor/plating,/area/maintenance/asmaint{name = "Aft Starboard Maintenance"})
"cjB" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/storage/belt{desc = "Can hold quite a lot of stuff."; name = "mutli-belt"},/obj/item/clothing/gloves/color/fyellow,/obj/effect/spawner/lootdrop/maintenance,/obj/structure/sink/kitchen{desc = "A sink used for washing one's hands and face. It looks rusty and home-made"; name = "old sink"; pixel_y = 28},/turf/simulated/floor/plating,/area/maintenance/asmaint{name = "Aft Starboard Maintenance"})
"cjC" = (/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/apmaint)
-"cjD" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "brig shutters"},/turf/simulated/floor/plating,/area/maintenance/apmaint)
+"cjD" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "brig shutters"},/turf/simulated/floor/plating,/area/maintenance/apmaint)
"cjE" = (/turf/simulated/wall/shuttle{tag = "icon-swall7"; icon_state = "swall7"},/area/shuttle/labor)
"cjF" = (/obj/machinery/door/airlock/shuttle{name = "Labor Shuttle Airlock"; req_access_txt = "2"},/turf/simulated/floor/plasteel/shuttle/red,/area/shuttle/labor)
"cjG" = (/turf/simulated/wall/shuttle{tag = "icon-swall12"; icon_state = "swall12"},/area/shuttle/labor)
@@ -5932,7 +5932,7 @@
"ckd" = (/obj/item/weapon/grenade/barrier,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plasteel/darkred/side{tag = "icon-darkred (NORTH)"; icon_state = "darkred"; dir = 1},/area/ai_monitored/security/armory)
"cke" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel/darkred/side{tag = "icon-darkred (NORTH)"; icon_state = "darkred"; dir = 1},/area/ai_monitored/security/armory)
"ckf" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/rack,/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/floor/plasteel/darkred/side{tag = "icon-darkred (NORTHEAST)"; icon_state = "darkred"; dir = 5},/area/security/hos)
-"ckg" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/security/hos)
+"ckg" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/security/hos)
"ckh" = (/obj/structure/bed/chair,/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/wood,/area/security/hos)
"cki" = (/obj/structure/bed/chair,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/wood,/area/security/hos)
"ckj" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/wood,/area/security/hos)
@@ -5943,7 +5943,7 @@
"cko" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 4; frequency = 1441; id = "n2_in"},/turf/simulated/floor/engine{name = "n2 floor"; nitrogen = 100000; oxygen = 0},/area/atmos)
"ckp" = (/obj/structure/grille,/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/simulated/wall/r_wall,/area/atmos)
"ckq" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/obj/machinery/atmospherics/pipe/simple/yellow/visible,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel/red/side{tag = "icon-red (SOUTHWEST)"; icon_state = "red"; dir = 10},/area/atmos)
-"ckr" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 2; filter_type = 2; on = 1},/turf/simulated/floor/plasteel,/area/atmos)
+"ckr" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 2; filter_type = "n2"; on = 1},/turf/simulated/floor/plasteel,/area/atmos)
"cks" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/turf/simulated/floor/plasteel,/area/atmos)
"ckt" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{dir = 8},/turf/simulated/floor/plasteel,/area/atmos)
"cku" = (/obj/machinery/atmospherics/components/binary/pump{dir = 8; name = "Port to Filter"; on = 0},/turf/simulated/floor/plasteel,/area/atmos)
@@ -6020,7 +6020,7 @@
"clN" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/crew_quarters/fitness)
"clO" = (/obj/structure/table,/obj/item/weapon/paper{desc = ""; info = "Brusies sustained in the holodeck can be healed simply by sleeping."; name = "Holodeck Disclaimer"},/turf/simulated/floor/plasteel,/area/crew_quarters/fitness)
"clP" = (/obj/machinery/door/airlock/maintenance{name = "Storage Room"; req_access_txt = "12"},/turf/simulated/floor/plating,/area/maintenance/asmaint{name = "Aft Starboard Maintenance"})
-"clQ" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/asmaint{name = "Aft Starboard Maintenance"})
+"clQ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/asmaint{name = "Aft Starboard Maintenance"})
"clR" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/apmaint)
"clS" = (/obj/structure/grille{density = 0; icon_state = "brokengrille"},/obj/structure/cable{tag = "icon-1-2"; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/apmaint)
"clT" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/labor)
@@ -6070,7 +6070,7 @@
"cmL" = (/obj/structure/table,/obj/item/device/analyzer/plant_analyzer,/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = 26},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/camera{c_tag = "Tech Storage"},/turf/simulated/floor/plating,/area/storage/tech)
"cmM" = (/obj/structure/table,/obj/item/device/analyzer,/obj/item/device/healthanalyzer,/obj/machinery/power/apc{dir = 1; name = "Tech Storage APC"; pixel_y = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/storage/tech)
"cmN" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = -1},/obj/item/device/multitool,/obj/item/clothing/glasses/meson,/turf/simulated/floor/plating,/area/storage/tech)
-"cmO" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/storage/tech)
+"cmO" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/storage/tech)
"cmP" = (/obj/machinery/light/small{dir = 1},/obj/structure/table/wood,/obj/machinery/newscaster{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/wood,/area/crew_quarters/locker)
"cmQ" = (/obj/structure/closet/secure_closet/personal/cabinet,/obj/machinery/alarm{pixel_y = 23},/obj/item/clothing/under/assistantformal,/turf/simulated/floor/wood,/area/crew_quarters/locker)
"cmR" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/wood,/area/crew_quarters/locker)
@@ -6129,7 +6129,7 @@
"cnS" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "o2_in"; name = "Oxygen Supply Control"; output_tag = "o2_out"; sensors = list("o2_sensor" = "Tank")},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 8},/area/atmos)
"cnT" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/simulated/floor/plasteel,/area/atmos)
"cnU" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/turf/simulated/floor/plasteel,/area/atmos)
-"cnV" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = 3; on = 1},/turf/simulated/floor/plasteel,/area/atmos)
+"cnV" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = "co2"; on = 1},/turf/simulated/floor/plasteel,/area/atmos)
"cnW" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/simulated/floor/plasteel{dir = 6; icon_state = "yellow"},/area/atmos)
"cnX" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 8; frequency = 1441; id = "co2_in"; pixel_y = 1},/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/atmos)
"cnY" = (/turf/simulated/wall/r_wall,/area/hallway/primary/aft)
@@ -6341,7 +6341,7 @@
"crW" = (/obj/machinery/door/poddoor{density = 1; icon_state = "closed"; id = "SecJusticeChamber"; name = "Justice Vent"; opacity = 1},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 9},/area/security/transfer)
"crX" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/security/transfer)
"crY" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 5},/area/security/transfer)
-"crZ" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/preopen{id = "executionfireblast"; layer = 2.9; name = "blast door"},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{dir = 4; icon_state = "darkredfull"; tag = "icon-whitehall (WEST)"},/area/security/transfer)
+"crZ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "executionfireblast"; layer = 2.9; name = "blast door"},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{dir = 4; icon_state = "darkredfull"; tag = "icon-whitehall (WEST)"},/area/security/transfer)
"csa" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel/darkred/side{tag = "icon-darkred (EAST)"; icon_state = "darkred"; dir = 4},/area/security/transfer)
"csb" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/power/apc{dir = 4; name = "Justice APC"; pixel_x = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plasteel/darkred/side{tag = "icon-darkred (WEST)"; icon_state = "darkred"; dir = 8},/area/security/transfer)
"csc" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id = "permacell3"; name = "Cell Shutters"; opacity = 0},/obj/machinery/door/airlock/glass{id_tag = "permabolt3"; name = "Cell 3"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison)
@@ -6351,7 +6351,7 @@
"csg" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/security/armory)
"csh" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/security/armory)
"csi" = (/obj/structure/rack,/obj/item/weapon/storage/box/chemimp{pixel_x = 4; pixel_y = 3},/obj/item/weapon/storage/box/trackimp,/obj/item/weapon/storage/lockbox/loyalty,/obj/item/weapon/reagent_containers/glass/bottle/morphine,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 1},/area/ai_monitored/security/armory)
-"csj" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Port Maintenance"})
+"csj" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Port Maintenance"})
"csk" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/turf/simulated/wall/r_wall,/area/atmos)
"csl" = (/obj/machinery/door/firedoor/heavy,/obj/machinery/door/airlock/atmos{name = "Atmospherics"; req_access_txt = "24"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/atmos)
"csm" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/atmos)
@@ -6459,7 +6459,7 @@
"cuk" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plating,/area/maintenance/asmaint{name = "Aft Starboard Maintenance"})
"cul" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/turf/simulated/floor/plating,/area/maintenance/asmaint{name = "Aft Starboard Maintenance"})
"cum" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint{name = "Aft Starboard Maintenance"})
-"cun" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
+"cun" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
"cuo" = (/obj/machinery/door/airlock/external{name = "Solar Maintenance"; req_access = null; req_access_txt = "10; 13"},/obj/structure/cable{tag = "icon-1-2"; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
"cup" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall,/area/maintenance/starboardsolar)
"cuq" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/asmaint{name = "Aft Starboard Maintenance"})
@@ -6649,8 +6649,8 @@
"cxS" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall/r_wall,/area/engine/engineering)
"cxT" = (/obj/structure/sign/securearea,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall/r_wall,/area/engine/engineering)
"cxU" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_x = 0; pixel_y = 0},/turf/simulated/wall/r_wall,/area/engine/engineering)
-"cxV" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/checkpoint/engineering)
-"cxW" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/engineering)
+"cxV" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/checkpoint/engineering)
+"cxW" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/engineering)
"cxX" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/plasteel,/area/engine/engineering)
"cxY" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel,/area/engine/engineering)
"cxZ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/engine/engineering)
@@ -6665,7 +6665,7 @@
"cyi" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 1},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/asmaint{name = "Aft Starboard Maintenance"})
"cyj" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint{name = "Aft Starboard Maintenance"})
"cyk" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plating,/area/maintenance/asmaint{name = "Aft Starboard Maintenance"})
-"cyl" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
+"cyl" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
"cym" = (/obj/machinery/camera{c_tag = "Aft Starboard Solar"; dir = 2; network = list("SS13")},/turf/space,/area/space)
"cyn" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/turf/simulated/wall/shuttle{icon_state = "swall_f5"; dir = 2},/area/shuttle/pod_4)
"cyo" = (/turf/space,/turf/simulated/wall/shuttle{icon_state = "swall_f9"; dir = 2},/area/shuttle/pod_4)
@@ -6806,7 +6806,7 @@
"cAT" = (/obj/structure/rack,/obj/item/weapon/surgicaldrill,/turf/simulated/floor/plating,/area/maintenance/apmaint)
"cAU" = (/obj/machinery/chem_master/condimaster{name = "CondiMaster Neo"; pixel_x = -4},/turf/simulated/floor/plating,/area/maintenance/apmaint)
"cAV" = (/obj/item/weapon/reagent_containers/glass/bottle/toxin{pixel_x = 4; pixel_y = 2},/obj/structure/table,/obj/effect/decal/cleanable/cobweb2,/obj/machinery/reagentgrinder{pixel_y = 4},/turf/simulated/floor/plating,/area/maintenance/apmaint)
-"cAW" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "brig shutters"},/turf/simulated/floor/plating,/area/security/prison)
+"cAW" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "brig shutters"},/turf/simulated/floor/plating,/area/security/prison)
"cAX" = (/obj/structure/barricade/wooden,/obj/structure/girder,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Port Maintenance"})
"cAY" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall,/area/maintenance/aft{name = "Aft Port Maintenance"})
"cAZ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Port Maintenance"})
@@ -6880,7 +6880,7 @@
"cCp" = (/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralfull"},/area/crew_quarters/chief)
"cCq" = (/obj/machinery/firealarm{pixel_y = 26},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_Toxins = 0},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralfull"},/area/crew_quarters/chief)
"cCr" = (/obj/machinery/disposal/bin,/obj/machinery/light_switch{pixel_x = 0; pixel_y = 27},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/disposalpipe/trunk{dir = 4},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/machinery/button/door{id = "Secure Storage"; name = "Secure Storage"; pixel_x = 8; pixel_y = 23},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralfull"},/area/crew_quarters/chief)
-"cCs" = (/obj/structure/grille,/obj/structure/cable/yellow{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor/preopen{id = "Engineering"; name = "engineering security door"},/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plating,/area/crew_quarters/chief)
+"cCs" = (/obj/structure/grille,/obj/structure/cable/yellow{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor/preopen{id = "Engineering"; name = "engineering security door"},/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plating,/area/crew_quarters/chief)
"cCt" = (/obj/structure/cable{tag = "icon-1-8"; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "caution"},/area/engine/engineering)
"cCu" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{tag = "icon-manifold-b-f (EAST)"; dir = 4},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plasteel,/area/engine/engineering)
"cCv" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel,/area/engine/engineering)
@@ -6949,7 +6949,7 @@
"cDG" = (/obj/structure/table/reinforced,/obj/item/weapon/folder/yellow,/obj/item/weapon/paper/monitorkey,/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralfull"},/area/crew_quarters/chief)
"cDH" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralfull"},/area/crew_quarters/chief)
"cDI" = (/obj/structure/table/reinforced,/obj/item/stack/medical/bruise_pack{pixel_x = -3; pixel_y = 2},/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralfull"},/area/crew_quarters/chief)
-"cDJ" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "Engineering"; name = "engineering security door"},/obj/structure/window/fulltile/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/crew_quarters/chief)
+"cDJ" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "Engineering"; name = "engineering security door"},/obj/structure/window/reinforced/fulltile,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/crew_quarters/chief)
"cDK" = (/obj/machinery/camera{c_tag = "Engineering West"; dir = 1},/turf/simulated/floor/plasteel{dir = 10; icon_state = "caution"},/area/engine/engineering)
"cDL" = (/turf/simulated/floor/plasteel{dir = 2; icon_state = "caution"},/area/engine/engineering)
"cDM" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel{dir = 2; icon_state = "caution"},/area/engine/engineering)
@@ -7063,7 +7063,7 @@
"cFQ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint{name = "Aft Starboard Maintenance"})
"cFR" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/asmaint{name = "Aft Starboard Maintenance"})
"cFS" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/lattice/catwalk,/turf/space,/area/solar/starboard)
-"cFT" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating/airless,/area/assembly/assembly_line)
+"cFT" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating/airless,/area/assembly/assembly_line)
"cFU" = (/turf/simulated/floor/plasteel/airless,/area/assembly/assembly_line)
"cFV" = (/obj/machinery/mecha_part_fabricator{dir = 2; id = "0"; name = "defunct fabricator"; req_access = "0"},/turf/simulated/floor/plasteel/airless,/area/assembly/assembly_line)
"cFW" = (/obj/structure/closet/crate{icon_state = "crateopen"; opened = 1},/obj/item/weapon/storage/box/donkpockets,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating/airless,/area/assembly/assembly_line)
@@ -7151,7 +7151,7 @@
"cHA" = (/obj/structure/flora/tree/pine/xmas,/turf/simulated/floor/plasteel/bar,/area/crew_quarters/bar)
"cHB" = (/obj/machinery/power/grounding_rod,/turf/simulated/floor/plating/airless,/area/engine/engineering)
"cHC" = (/obj/machinery/camera/emp_proof{c_tag = "Singularity North-West"; dir = 2; network = list("Singularity")},/obj/machinery/power/grounding_rod,/turf/simulated/floor/plating/airless,/area/engine/engineering)
-"cHD" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/engine/engineering)
+"cHD" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/engine/engineering)
"cHE" = (/obj/machinery/camera/emp_proof{c_tag = "Singularity North East"; dir = 2; network = list("Singularity")},/obj/machinery/power/grounding_rod,/turf/simulated/floor/plating/airless,/area/engine/engineering)
"cHF" = (/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plating/airless,/area/space)
"cHG" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plating/airless,/area/space)
@@ -7169,6 +7169,7 @@
"cHS" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plating/airless,/area/engine/engineering)
"cHT" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plating/airless,/area/engine/engineering)
"cHU" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plating/airless,/area/engine/engineering)
+"cHV" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 2; filter_type = "o2"; on = 1},/turf/simulated/floor/plasteel,/area/atmos)
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -7347,7 +7348,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbQcdjcdjcdjcjCcdjcdjcbRceqcfRcjDchcckWckWckXchcaaaadpckYckZcdqcdqclaclbclcclcclccldcleclfclcclcclgclhclicljclkckbcllclmclncloclpclqclrclscltcluckmaaaclvciHclwceRabmbUObUObUObUObUOabmbUNclxbXzcktclyclzbTlchIbTlcaWcaXcaYclAbWibWjbWkclBclCclCbUOabmbSZbQNbQObMAbNYckxbSaclDclDclDclDclDclDclDabmabmabmabmcdQcdQcdQcdQcdQcdWckDckEcdWclEclEclEclEclEclFclGclHclEclEclEclIcdWclJckHckIcjcckHcjcckIcjccjccjcckHclKclLclMclNckPckPckQckRcgUcgVcfJcfJcfJcfJcfJcgVclOckTbWLcjxckUcjzclPckVckVckVclQaaaaaaabmabmabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbQcbQcepcbQcbQcbQcbQcbQclRclScbQcipclTckWclUchcchgchgcdqclVclWclXclYclZcmacmbcmccmccmdcmecmccmccmfcdscmgcmhcmicmjcmkcmlcmmcmnckmcmocmpcmqcmrcmsckmaaaclvcmtchBceRabmbUOcmucmucmvchEbWjbWicmwcmxcmycmzbTlbTlcmAcmBcmCbXCbXzcmDbUNabmbXEcmEcmFcmGbUOabmbSZbQNbQObMAbRZckxcmHcmIcmJcmKcmLcmMcmNcmIcmOcmOcmOaaacdQcmPcmQcmRcmScmTcmUcmVcmWclEcmXcmYcmZclEcnacnbcnccndcneclEcnfcdWcngcnhcnicdWcnjcdQcnkcnlcnlcnlcnmbWLcnncnocnpcnqcnqcnrckRbYkcjucfJcfJcfJcfJcfJcjubYkbYkbWLcjxckUcjzciickVckVckVclQaaaabmabmabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbRcdjcbRaaaaaaaaacbRceqcfRcjDchccnsckWckWcntcitciucitcnucnvcnwcnxcnycnzcnAcnzcnBcnCcnAcnDcnEcnFcdscdsckbckbckbcnGcnHcnIcnJckmcnKcnLcnMcnNcnOckmaaaclvcnPchBceRabmbUOcmucnQcnRbXEabmbUNcnSbXzckscnTcnUcnUcnUcnUcmzccxcnVcnWbYXbYYbWkcnXclCclCbUOabmcnYcnZcoacnYbNYcobcoccodcoecofcogcohcohcoicojcokcmOaaacdQcolcomconcoocopcoqckEckyclEcorcorcorclEcoscotcouclEclEcdQchYcovcowcoxchYcoyciacdQcozcoAcoAcoAcoBbWLcoCcoDcoEbYkbYkbYkckRcgUcgVcfJcfJcfJcfJcfJbWLbWLbWLbWLcoFcoGcjzciicoHcoIciiciiabmabmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbRcdjcbRaaaaaaaaacbRceqcfRcjDchccoJcoJcoJchcchgchgcdqcoKcoLcoMcoNcoOcoPcoQcoNcoOcoRcoQcoNcoOcoScdscdsckbckbckbcoTcoUckbckmckmcoVcoWcoXcnNcoYckmaaaclvcnPcoZceRabmbUOcmucpacpbckpbYYbYXcpcckrcktcpdcpdcpecpfcpfcpgbXCbXzcphbUNabmbUObUObUObUObUOabmcnYcpicpjcpkcplcpmcpncmIcpocppcpqcohcprcmIcpscptcmOaaacdQcdQcdQcdQcdQcdWckDckEcdWclEcpucpvcpwclEcoscorcorcpxcpycdQcpzcomcpAcdQcpzcomcpAcdQcpBcoAcoAcoAcpCbWLcpDcpEcpFcpGcpHcpIcpJcgUcgVcfJcfJcfJcfJcfJbWLcoFcpKcpLcpMcpNcpOciiclQclQciiabmabmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbRcdjcbRaaaaaaaaacbRceqcfRcjDchccoJcoJcoJchcchgchgcdqcoKcoLcoMcoNcoOcoPcoQcoNcoOcoRcoQcoNcoOcoScdscdsckbckbckbcoTcoUckbckmckmcoVcoWcoXcnNcoYckmaaaclvcnPcoZceRabmbUOcmucpacpbckpbYYbYXcpccHVcktcpdcpdcpecpfcpfcpgbXCbXzcphbUNabmbUObUObUObUObUOabmcnYcpicpjcpkcplcpmcpncmIcpocppcpqcohcprcmIcpscptcmOaaacdQcdQcdQcdQcdQcdWckDckEcdWclEcpucpvcpwclEcoscorcorcpxcpycdQcpzcomcpAcdQcpzcomcpAcdQcpBcoAcoAcoAcpCbWLcpDcpEcpFcpGcpHcpIcpJcgUcgVcfJcfJcfJcfJcfJbWLcoFcpKcpLcpMcpNcpOciiclQclQciiabmabmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbRcdjcbRaaaaaaaaacbQcpPciocbQcpQcpRcpRcpRcpSaaaadpckYcpTcpUcpVcpTcpWcpXcpYcoNcpZcqacqbcoNcqccqdcqecdsckbcqfcqgcqhcqicqjcqkckmckmckmckmckmckmckmaaaclvcnPcqlceRabmbUObUObUObUObUOabmbUNbXucqmcqncqocqocqocqocqocqpcqqcqrcqsbMAabmabmabmabmabmabmabmcnYcqtcqucqvcqvcqwcqxcqycqzcqAcqBcohcqCcmIcojcqDcmOaaacdQcmPcmQcmRcmScqEcmUcmVcqFclEcorcorcorclEcoscorcorclEclEcdQcolcomcqGcdQcolcomcqGcdQcqHcoAcqIcqJcqKbWLbWLbWLbWLbWLbWLcqLbWLbWLbWLcfJcfJcfJcfJcfJbWLckUcqMcqNcqOcpOaaaaaaaaaaaaaaaabmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbRcdjcbRaaaaaaaaacbQceqcfRcbQcdpcdpcdpcdpcdpcpTcpTcpTcpTcqPcqQcpTcqRcpXcqScoNcqTcqacqScoNcqUcqVcqScdsckbcqWcqXclncqiclncqYcqZckbaaaaaaabmabmaaaaaaclvcnPcraceRabmabmabmabmabmabmabmbUNcrbcrccrdcrecrfcrgcrhcricnTcrjcrkcrlcrmcrnabmabmabmabmabmabmcnYcrocrpcrpcrqcrrcrscrtcrucrvcrwcrxcrycmIcmOcmOcmOaaacdQcolcomconcrzcopcrAcrBcdWclEcmXcrCcorcrDcrEcrFcorcrGcrHcdQcdQcdQcdQcdQcdQcdQcdQcdQciicrIciiciiciiciicrJcrKcrLcrMcrNcrOcrPcrQbWLbWLbWLbWLbWLbWLbWLckUcrRciiciiabmabmabmabmabmabmabmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbQcbQcepcbQcbQaaaaaacbQcrScfRcbQcrTcrUcrVcbQaaacrWcrXcrYcrZcsacsbcpTcdscsccoNcoNcoNcsdcoNcoNcoNcsecdscdsckbcsfcsgclncshclnclncsickbaaaclvcsjcsjclvclvclvcnPchBceRceRceRceRceRceRceRceRbMAbMAcskcslbMAbMAbMAcsmcsnbRXcsobMAbMAbMAcspcspcspcspcspcspcspcspcsqcsrcspcsscstcsucsvcsvcsvcsvcsvcsvcsvabmabmabmabmcdQcdQcdQcdQcdQcswcsxcsycszcsAcsAcsAcsAcsAcsAcsAcsAcsAcsAcsAcsBcsCcsCcsCcsCcsDcsEcsCcsFcsGcsHcsCcsIcsJcsJcsJcsJcsKcsJcsLcsMcsNcsNcsNcsNcsNcsNcsNcsOcsPcjzciiaaaabmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/_maps/map_files/DiscStation/z4.dmm b/_maps/map_files/DiscStation/z4.dmm
index e5c0fe25912..3d977692fac 100644
--- a/_maps/map_files/DiscStation/z4.dmm
+++ b/_maps/map_files/DiscStation/z4.dmm
@@ -847,7 +847,7 @@
"qC" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plasteel/airless{icon_state = "bot"},/area/derelict/storage/engine_storage)
"qD" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plasteel/airless{icon_state = "bot"},/area/derelict/storage/engine_storage)
"qE" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/simulated/floor/plasteel/airless{icon_state = "bot"},/area/derelict/storage/engine_storage)
-"qF" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/plasteel/airless{icon_state = "bot"},/area/derelict/storage/engine_storage)
+"qF" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/plasteel/airless{icon_state = "bot"},/area/derelict/storage/engine_storage)
"qG" = (/obj/machinery/door/firedoor/heavy,/obj/machinery/door/airlock/maintenance{name = "Atmospherics Maintenance"; req_access_txt = "24"},/turf/simulated/floor/plating/airless,/area/derelict/storage/engine_storage)
"qH" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating/airless,/area/derelict/storage/equipment)
"qI" = (/obj/structure/closet/secure_closet/personal/patient,/obj/machinery/button/door{id = "medpriv1"; name = "Privacy Shutters"; pixel_y = -25},/turf/simulated/floor/plasteel{icon_state = "white"},/area/derelict/medical)
diff --git a/_maps/map_files/DreamStation/dreamstation04.dmm b/_maps/map_files/DreamStation/dreamstation04.dmm
index c669211013b..db3fa8f62cd 100644
--- a/_maps/map_files/DreamStation/dreamstation04.dmm
+++ b/_maps/map_files/DreamStation/dreamstation04.dmm
@@ -934,8 +934,8 @@
"arX" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/turf/simulated/wall,/area/maintenance/atmos_control)
"arY" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/obj/machinery/meter,/turf/simulated/wall,/area/maintenance/atmos_control)
"arZ" = (/obj/effect/spawner/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/atmos_control)
-"asa" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{tag = "icon-intact (SOUTHWEST)"; icon_state = "intact"; dir = 10},/turf/simulated/wall,/area/maintenance/atmos_control)
-"asb" = (/obj/structure/cable/green{tag = "icon-1-2"; icon_state = "1-2"},/obj/item/device/assembly/mousetrap/armed,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/atmos_control)
+"asa" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/obj/structure/cable/green{tag = "icon-4-8"; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/atmos_control)
+"asb" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor/plating,/area/maintenance/atmos_control)
"asc" = (/obj/machinery/light/small{dir = 8},/obj/machinery/power/apc{auto_name = 1; dir = 8; name = "Autoname APC West"; pixel_x = -25; pixel_y = 0},/obj/structure/cable/green,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
"asd" = (/obj/machinery/atmospherics/components/binary/pump{dir = 2; name = "atmospherics mix pump"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
"ase" = (/obj/machinery/atmospherics/components/binary/valve{dir = 1; name = "Incinerator to Space"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
@@ -1004,7 +1004,7 @@
"atp" = (/obj/item/weapon/wirecutters,/turf/space,/area/space/nearstation)
"atq" = (/obj/structure/cable/green{tag = "icon-1-2"; icon_state = "1-2"},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering)
"atr" = (/turf/simulated/floor/plating/airless{dir = 1; icon_state = "warnplate"},/area/space/nearstation)
-"ats" = (/obj/structure/lattice,/obj/item/stack/tile/plasteel,/turf/space,/area/space/nearstation)
+"ats" = (/obj/structure/cable/green{tag = "icon-1-2"; icon_state = "1-2"},/obj/item/device/assembly/mousetrap/armed,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/atmos_control)
"att" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 9},/area/engine/engineering)
"atu" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/engine/engineering)
"atv" = (/turf/simulated/floor/plating{dir = 4; icon_state = "warnplatecorner"; tag = ""},/area/engine/engineering)
@@ -1253,7 +1253,7 @@
"aye" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos)
"ayf" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos)
"ayg" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos)
-"ayh" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos)
+"ayh" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos)
"ayi" = (/turf/simulated/wall,/area/atmos)
"ayj" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/suit/hazardvest,/obj/item/clothing/suit/hazardvest,/obj/item/clothing/suit/hazardvest,/obj/item/clothing/suit/hazardvest,/obj/item/clothing/gloves/color/black,/obj/item/clothing/gloves/color/black,/obj/item/clothing/gloves/color/black,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/structure/window/reinforced{dir = 1; layer = 2.9},/obj/machinery/light_switch{pixel_x = -24; tag = "w"},/turf/simulated/floor/plasteel,/area/atmos)
"ayk" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 6},/obj/structure/cable/green{tag = "icon-2-4"; icon_state = "2-4"},/turf/simulated/floor/plasteel,/area/atmos)
@@ -1487,9 +1487,9 @@
"aCE" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible,/turf/simulated/floor/plasteel/warning{tag = "icon-warning (EAST)"; icon_state = "warning"; dir = 4},/area/atmos)
"aCF" = (/obj/machinery/atmospherics/pipe/simple/green/visible,/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "n2o_in"; name = "Nitrous Oxide Supply Control"; output_tag = "n2o_out"; sensors = list("n2o_sensor" = "Tank")},/turf/simulated/floor/plasteel{dir = 8; icon_state = "escape"},/area/atmos)
"aCG" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "n2o_sensor"},/turf/simulated/floor/engine/n20,/area/atmos)
-"aCH" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent/roomfiller{valve_open = 1},/turf/simulated/floor/engine/n20,/area/atmos)
+"aCH" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide/roomfiller{valve_open = 1},/turf/simulated/floor/engine/n20,/area/atmos)
"aCI" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/engine/n20,/area/atmos)
-"aCJ" = (/obj/item/trash/popcorn,/turf/simulated/floor/plating,/area/maintenance/atmos_control)
+"aCJ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/atmos_control)
"aCK" = (/turf/simulated/wall/rust,/area/maintenance/atmos_control)
"aCL" = (/obj/effect/spawner/lootdrop{loot = list(/obj/item/stack/sheet/metal = 1, /obj/item/stack/rods = 2, /obj/item/weapon/shard = 2, "" = 3); lootcount = 2; name = "random material damage spawner"},/turf/simulated/floor/plating,/area/maintenance/atmos_control)
"aCM" = (/obj/item/stack/sheet/metal{amount = 2},/obj/structure/girder/displaced,/turf/simulated/floor/plating,/area/maintenance/atmos_control)
@@ -1559,9 +1559,9 @@
"aDY" = (/obj/effect/spawner/structure/window,/turf/simulated/floor/plating,/area/atmos)
"aDZ" = (/obj/machinery/atmospherics/components/binary/pump{dir = 0; name = "Port Mix to Filling Ports"; on = 0},/turf/simulated/floor/plasteel,/area/atmos)
"aEa" = (/obj/machinery/atmospherics/components/binary/pump{dir = 0; name = "Port Mix to Temperature Ports"; on = 0},/turf/simulated/floor/plasteel,/area/atmos)
-"aEb" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = 4; on = 1},/turf/simulated/floor/plasteel{dir = 10; icon_state = "escape"},/area/atmos)
+"aEb" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = "n2o"; on = 1},/turf/simulated/floor/plasteel{dir = 10; icon_state = "escape"},/area/atmos)
"aEc" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 8; frequency = 1441; id = "n2o_in"; pixel_y = 1},/turf/simulated/floor/engine/n20,/area/atmos)
-"aEd" = (/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/atmos_control)
+"aEd" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/atmos_control)
"aEe" = (/turf/simulated/wall/mineral/wood,/area/maintenance/atmos_control)
"aEf" = (/obj/structure/girder/displaced,/obj/effect/spawner/lootdrop{loot = list(/obj/item/stack/sheet/metal = 1, /obj/item/stack/rods = 2, /obj/item/weapon/shard = 2, "" = 3); lootcount = 2; name = "random material damage spawner"},/turf/simulated/floor/plating,/area/maintenance/atmos_control)
"aEg" = (/obj/structure/reagent_dispensers/watertank,/obj/structure/cable/green{tag = "icon-2-5"; icon_state = "2-5"},/turf/simulated/floor/plating,/area/maintenance/fore)
@@ -1627,7 +1627,7 @@
"aFo" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 4},/obj/machinery/portable_atmospherics/canister,/turf/simulated/floor/plasteel{icon_state = "bot"; dir = 1},/area/atmos)
"aFp" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 8},/turf/simulated/floor/plasteel{icon_state = "bot"; dir = 1},/area/atmos)
"aFq" = (/obj/machinery/atmospherics/pipe/simple/green/visible,/turf/simulated/floor/plasteel/warning{dir = 8},/area/atmos)
-"aFr" = (/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/atmos_control)
+"aFr" = (/obj/item/trash/popcorn,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/atmos_control)
"aFs" = (/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/wood{broken = 1; icon_state = "wood-broken"; tag = "icon-wood-broken"},/area/maintenance/atmos_control)
"aFt" = (/obj/structure/bed/chair/comfy/black,/turf/simulated/floor/wood,/area/maintenance/atmos_control)
"aFu" = (/obj/structure/bed/chair/comfy/beige,/turf/simulated/floor/wood,/area/maintenance/atmos_control)
@@ -1686,7 +1686,7 @@
"aGv" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; external_pressure_bound = 0; frequency = 1441; id_tag = "tox_out"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine{carbon_dioxide = 0; name = "plasma floor"; nitrogen = 0; oxygen = 0; toxins = 70000},/area/atmos)
"aGw" = (/turf/simulated/floor/engine{carbon_dioxide = 0; name = "plasma floor"; nitrogen = 0; oxygen = 0; toxins = 70000},/area/atmos)
"aGx" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/engine{carbon_dioxide = 0; name = "plasma floor"; nitrogen = 0; oxygen = 0; toxins = 70000},/area/atmos)
-"aGy" = (/obj/structure/closet,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/atmos_control)
+"aGy" = (/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/atmos_control)
"aGz" = (/obj/structure/bed/chair/comfy/beige{dir = 4},/turf/simulated/floor/wood,/area/maintenance/atmos_control)
"aGA" = (/obj/structure/table/wood/poker,/turf/simulated/floor/carpet,/area/maintenance/atmos_control)
"aGB" = (/obj/structure/table/wood/poker,/obj/item/toy/cards/deck{pixel_x = 2},/turf/simulated/floor/carpet,/area/maintenance/atmos_control)
@@ -1850,7 +1850,7 @@
"aJD" = (/obj/structure/sign/nosmoking_2,/turf/simulated/wall,/area/atmos)
"aJE" = (/obj/machinery/atmospherics/components/binary/pump{dir = 0; name = "Port to Filter"; on = 0},/turf/simulated/floor/plasteel,/area/atmos)
"aJF" = (/obj/machinery/atmospherics/components/unary/cold_sink/freezer{dir = 8},/turf/simulated/floor/plasteel,/area/atmos)
-"aJG" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; on = 1},/turf/simulated/floor/plasteel{dir = 10; icon_state = "purple"},/area/atmos)
+"aJG" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = "plasma"; on = 1},/turf/simulated/floor/plasteel{dir = 10; icon_state = "purple"},/area/atmos)
"aJH" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 8; frequency = 1441; id = "tox_in"; pixel_y = 1},/turf/simulated/floor/engine{carbon_dioxide = 0; name = "plasma floor"; nitrogen = 0; oxygen = 0; toxins = 70000},/area/atmos)
"aJI" = (/obj/structure/bed/chair/comfy/brown{dir = 1},/turf/simulated/floor/wood{broken = 1; icon_state = "wood-broken6"; tag = "icon-wood-broken6"},/area/maintenance/atmos_control)
"aJJ" = (/obj/structure/bed/chair/comfy/lime{tag = "icon-comfychair (NORTH)"; icon_state = "comfychair"; dir = 1},/turf/simulated/floor/wood,/area/maintenance/atmos_control)
@@ -2140,11 +2140,11 @@
"aPh" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/obj/machinery/atmospherics/components/binary/pump{dir = 1; name = "O2 Outlet Pump"; on = 0},/turf/simulated/floor/plasteel,/area/atmos)
"aPi" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 10; initialize_directions = 10},/turf/simulated/floor/plasteel,/area/atmos)
"aPj" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible,/turf/simulated/floor/plasteel/warning{tag = "icon-warning (EAST)"; icon_state = "warning"; dir = 4},/area/atmos)
-"aPk" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = 3; on = 1},/turf/simulated/floor/plasteel{tag = "icon-caution (SOUTHWEST)"; icon_state = "caution"; dir = 10},/area/atmos)
+"aPk" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = "co2"; on = 1},/turf/simulated/floor/plasteel{tag = "icon-caution (SOUTHWEST)"; icon_state = "caution"; dir = 10},/area/atmos)
"aPl" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4; initialize_directions = 12},/obj/effect/spawner/structure/window/reinforced,/turf/simulated/floor/plating,/area/atmos)
"aPm" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 8; frequency = 1441; id = "co2_in"; pixel_y = 1},/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/atmos)
-"aPn" = (/obj/effect/spawner/structure/window/reinforced,/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (WEST)"; dir = 8},/turf/simulated/floor/plating,/area/maintenance/atmos_control)
-"aPo" = (/obj/structure/cable/green{tag = "icon-1-4"; icon_state = "1-4"},/obj/structure/cable/green{tag = "icon-1-2"; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/atmos_control)
+"aPn" = (/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/atmos_control)
+"aPo" = (/obj/structure/closet,/obj/effect/spawner/lootdrop/maintenance,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/atmos_control)
"aPp" = (/obj/structure/cable/green{tag = "icon-4-8"; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/atmos_control)
"aPq" = (/obj/structure/cable/green{tag = "icon-2-8"; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/effect/spawner/lootdrop{loot = list(/obj/item/stack/sheet/metal = 1, /obj/item/stack/rods = 2, /obj/item/weapon/shard = 2, "" = 3); lootcount = 2; name = "random material damage spawner"},/turf/simulated/floor/plating,/area/maintenance/atmos_control)
"aPr" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating{broken = 1; icon_state = "platingdmg3"},/area/maintenance/atmos_control)
@@ -2226,11 +2226,11 @@
"aQP" = (/turf/simulated/wall/r_wall,/area/engine/chiefs_office)
"aQQ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0; tag = "w"},/turf/simulated/floor/plasteel/neutral/corner{tag = "icon-neutralcorner (NORTH)"; icon_state = "neutralcorner"; dir = 1},/area/hallway/secondary/entry)
"aQR" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 5},/obj/machinery/light,/turf/simulated/floor/plasteel,/area/atmos)
-"aQS" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = 2; on = 1},/turf/simulated/floor/plasteel/red/side{tag = "icon-red (NORTHWEST)"; icon_state = "red"; dir = 9},/area/atmos)
+"aQS" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = "n2"; on = 1},/turf/simulated/floor/plasteel/red/side{tag = "icon-red (NORTHWEST)"; icon_state = "red"; dir = 9},/area/atmos)
"aQT" = (/obj/machinery/atmospherics/pipe/simple/green/visible{tag = "icon-intact (SOUTHWEST)"; icon_state = "intact"; dir = 10; initialize_directions = 12},/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "n2_in"; name = "Nitrogen Supply Control"; output_tag = "n2_out"; sensors = list("n2_sensor" = "Tank")},/turf/simulated/floor/plasteel/red/side{tag = "icon-red (NORTH)"; icon_state = "red"; dir = 1},/area/atmos)
"aQU" = (/obj/machinery/atmospherics/pipe/manifold/cyan/visible{dir = 8; initialize_directions = 11},/turf/simulated/floor/plasteel/red/side{tag = "icon-red (NORTHEAST)"; icon_state = "red"; dir = 5},/area/atmos)
"aQV" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 6},/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 9},/turf/simulated/floor/plasteel,/area/atmos)
-"aQW" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = 1; on = 1},/turf/simulated/floor/plasteel{dir = 9; icon_state = "blue"},/area/atmos)
+"aQW" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = "o2"; on = 1},/turf/simulated/floor/plasteel{dir = 9; icon_state = "blue"},/area/atmos)
"aQX" = (/obj/machinery/atmospherics/pipe/simple/green/visible{tag = "icon-intact (SOUTHWEST)"; icon_state = "intact"; dir = 10; initialize_directions = 12},/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "o2_in"; name = "Oxygen Supply Control"; output_tag = "o2_out"; sensors = list("o2_sensor" = "Tank")},/turf/simulated/floor/plasteel{dir = 1; icon_state = "blue"},/area/atmos)
"aQY" = (/obj/machinery/atmospherics/pipe/manifold/cyan/visible{dir = 8; initialize_directions = 11},/turf/simulated/floor/plasteel{dir = 5; icon_state = "blue"},/area/atmos)
"aQZ" = (/obj/machinery/atmospherics/components/trinary/mixer{node1_concentration = 0.8; node2_concentration = 0.2},/turf/simulated/floor/plasteel/barber,/area/atmos)
@@ -2453,7 +2453,7 @@
"aVi" = (/obj/machinery/atmospherics/pipe/simple,/obj/machinery/meter{frequency = 1443; id = "mair_in_meter"; name = "Mixed Air Tank In"},/obj/structure/grille,/turf/simulated/wall/r_wall,/area/atmos)
"aVj" = (/obj/machinery/atmospherics/pipe/simple,/obj/machinery/meter{frequency = 1443; id = "mair_out_meter"; name = "Mixed Air Tank Out"},/obj/structure/grille,/turf/simulated/wall/r_wall,/area/atmos)
"aVk" = (/obj/structure/rack,/obj/item/weapon/stock_parts/capacitor,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/atmos_control)
-"aVl" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/atmos_control)
+"aVl" = (/obj/structure/girder,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/atmos_control)
"aVm" = (/obj/structure/cable/green{tag = "icon-1-2"; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/turf/simulated/floor/plating{broken = 1; icon_state = "platingdmg3"},/area/maintenance/atmos_control)
"aVn" = (/obj/effect/spawner/structure/window/reinforced,/obj/structure/cable/green{tag = "icon-0-4"; icon_state = "0-4"},/turf/simulated/floor/plating,/area/storage/tech)
"aVo" = (/turf/simulated/floor/plasteel/darkblue/side{tag = "icon-darkblue (SOUTHWEST)"; icon_state = "darkblue"; dir = 10},/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/robotics{pixel_x = -2; pixel_y = 2},/obj/item/weapon/circuitboard/mecha_control{pixel_x = 1; pixel_y = -1},/obj/structure/cable/green{tag = "icon-6-9"; icon_state = "6-9"},/obj/structure/cable/green{tag = "icon-6-8"; icon_state = "6-8"},/obj/structure/cable/green{tag = "icon-1-6"; icon_state = "1-6"},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (SOUTHWEST)"; icon_state = "warningline"; dir = 10},/area/storage/tech)
@@ -2563,7 +2563,7 @@
"aXo" = (/obj/machinery/atmospherics/components/unary/vent_pump/high_volume{dir = 1; external_pressure_bound = 0; frequency = 1443; icon_state = "in"; id_tag = "air_out"; internal_pressure_bound = 2000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/atmos)
"aXp" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plating,/area/maintenance/atmos_control)
"aXq" = (/obj/structure/cable/green{tag = "icon-2-4"; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating{broken = 1; icon_state = "platingdmg2"},/area/maintenance/atmos_control)
-"aXr" = (/obj/structure/cable/green{tag = "icon-4-8"; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plating,/area/maintenance/atmos_control)
+"aXr" = (/obj/structure/cable/green{tag = "icon-6-8"; icon_state = "6-8"},/obj/structure/cable/yellow{tag = "icon-4-9"; icon_state = "4-9"; d1 = 4; d2 = 8},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering)
"aXs" = (/turf/simulated/floor/plasteel/darkblue/side{tag = "icon-darkblue (NORTH)"; icon_state = "darkblue"; dir = 1},/obj/structure/cable/green{tag = "icon-4-10"; icon_state = "4-10"},/obj/structure/cable/green{tag = "icon-4-8"; icon_state = "4-8"},/obj/machinery/light/small,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/storage/tech)
"aXt" = (/turf/simulated/floor/plasteel/darkblue/side{tag = "icon-darkblue (NORTH)"; icon_state = "darkblue"; dir = 1},/obj/structure/cable/green{tag = "icon-2-5"; icon_state = "2-5"},/obj/structure/cable/green{tag = "icon-2-9"; icon_state = "2-9"},/obj/structure/cable/green{tag = "icon-2-4"; icon_state = "2-4"},/obj/structure/cable/green{tag = "icon-2-8"; icon_state = "2-8"},/obj/structure/cable/green{tag = "icon-1-2"; icon_state = "1-2"},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/storage/tech)
"aXu" = (/turf/simulated/floor/plasteel/darkblue/side{tag = "icon-darkblue (NORTH)"; icon_state = "darkblue"; dir = 1},/obj/structure/cable/green{tag = "icon-6-8"; icon_state = "6-8"},/obj/structure/cable/green{tag = "icon-4-8"; icon_state = "4-8"},/obj/machinery/camera{c_tag = "Secure Technical Storage"; dir = 1; network = list("SS13")},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/storage/tech)
@@ -3095,9 +3095,9 @@
"bhA" = (/obj/effect/spawner/structure/window,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/engine/break_room)
"bhB" = (/obj/machinery/door/airlock/maintenance{name = "maintenance access"; req_access_txt = "12"},/obj/structure/cable/green{tag = "icon-1-2"; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/aft)
"bhC" = (/turf/simulated/wall,/area/hallway/primary/central)
-"bhD" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/manifold/supply/hidden{tag = "icon-manifold-b-f (WEST)"; dir = 8},/turf/simulated/floor/plasteel,/area/hallway/primary/central)
-"bhE" = (/obj/machinery/door/firedoor,/obj/structure/cable/green{tag = "icon-1-2"; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plasteel,/area/hallway/primary/central)
-"bhF" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/hallway/primary/central)
+"bhD" = (/obj/structure/cable/yellow{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/simulated/floor/plating/airless,/area/engine/engineering)
+"bhE" = (/obj/structure/cable/green{tag = "icon-1-2"; icon_state = "1-2"},/obj/structure/cable/yellow{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/simulated/floor/plating/airless,/area/engine/engineering)
+"bhF" = (/obj/structure/cable/yellow{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/simulated/floor/plating/airless{dir = 1; icon_state = "warnplate"},/area/engine/engineering)
"bhG" = (/turf/simulated/wall,/area/hallway/primary/fore{name = "Fore Starboard Hallway"})
"bhH" = (/obj/machinery/door/airlock/maintenance{name = "maintenance access"; req_access_txt = "12"},/obj/structure/cable/green{tag = "icon-1-2"; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/atmos_control)
"bhI" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall,/area/hallway/primary/fore{name = "Fore Starboard Hallway"})
@@ -3335,7 +3335,7 @@
"bmg" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/turf/simulated/wall,/area/maintenance/fore)
"bmh" = (/obj/machinery/space_heater,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fore)
"bmi" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 9},/turf/simulated/wall/r_wall,/area/security/transfer)
-"bmj" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/obj/structure/window/reinforced,/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 4},/turf/simulated/floor/plasteel/darkred/side{tag = "icon-darkred (SOUTHWEST)"; icon_state = "darkred"; dir = 10},/area/security/transfer)
+"bmj" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/obj/structure/window/reinforced,/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 4},/turf/simulated/floor/plasteel/darkred/side{tag = "icon-darkred (SOUTHWEST)"; icon_state = "darkred"; dir = 10},/area/security/transfer)
"bmk" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 9},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel/darkred/side,/area/security/transfer)
"bml" = (/obj/machinery/atmospherics/components/binary/pump{dir = 2; layer = 2.4},/obj/machinery/door/window/southleft{base_state = "right"; dir = 2; icon_state = "right"; name = "Additional Transfer Methods"; req_access_txt = "2"},/turf/simulated/floor/plasteel/darkred/side{tag = "icon-darkred (SOUTHEAST)"; icon_state = "darkred"; dir = 6},/area/security/transfer)
"bmm" = (/turf/simulated/wall/shuttle{icon_state = "swall_s6"; dir = 2},/area/shuttle/escape)
@@ -3726,7 +3726,7 @@
"btH" = (/obj/structure/bed/chair/office/dark{dir = 1},/obj/machinery/requests_console{department = "Detective's Office"; name = "Detective's Office RC"; pixel_x = -30; pixel_y = 0},/obj/effect/landmark/start{name = "Detective"},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1},/obj/machinery/light_switch{pixel_y = -24; tag = "s"},/turf/simulated/floor/carpet,/area/security/detectives_office)
"btI" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/carpet,/area/security/detectives_office)
"btJ" = (/obj/structure/closet/secure_closet/detective,/obj/machinery/newscaster{hitstaken = 0; pixel_x = 0; pixel_y = -32; tag = "s"},/turf/simulated/floor/carpet,/area/security/detectives_office)
-"btK" = (/obj/structure/table/wood,/obj/item/weapon/storage/secure/safe{pixel_x = 5; pixel_y = -26},/obj/item/device/camera{desc = "A one use - polaroid camera. 30 photos left."; name = "detectives camera"; pictures_left = 30},/obj/item/device/taperecorder{pixel_y = 0},/turf/simulated/floor/carpet,/area/security/detectives_office)
+"btK" = (/obj/structure/table/wood,/obj/item/weapon/storage/secure/safe{pixel_x = 5; pixel_y = -26},/obj/item/device/camera/detective,/obj/item/device/taperecorder{pixel_y = 0},/turf/simulated/floor/carpet,/area/security/detectives_office)
"btL" = (/obj/structure/table/wood,/obj/item/weapon/hand_labeler,/turf/simulated/floor/carpet,/area/security/detectives_office)
"btM" = (/obj/effect/spawner/structure/window/reinforced,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/security/brig)
"btN" = (/obj/machinery/door/window/brigdoor{dir = 1; id = "Cell 1"; name = "Cell 1"; req_access_txt = "2"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel/darkred/side{tag = "icon-darkred (NORTH)"; icon_state = "darkred"; dir = 1},/area/security/brig)
@@ -6735,7 +6735,7 @@
"czA" = (/obj/structure/shuttle/engine/propulsion/burst,/obj/structure/window/reinforced{dir = 1; layer = 2.9},/turf/simulated/floor/plating/airless,/area/shuttle/mining)
"czB" = (/turf/space,/turf/simulated/wall/shuttle{icon_state = "swall_f9"; dir = 2},/area/shuttle/mining)
"czC" = (/obj/effect/spawner/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
-"czD" = (/obj/structure/cable/green{tag = "icon-1-10"; icon_state = "1-10"},/turf/simulated/floor/plating/airless,/area/engine/engineering)
+"czD" = (/obj/structure/cable/green{tag = "icon-1-9"; icon_state = "1-9"},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering)
"czE" = (/obj/structure/bed/chair,/turf/simulated/floor/plating,/area/maintenance/fsmaint)
"czF" = (/obj/structure/table,/obj/item/weapon/restraints/handcuffs/cable/green,/obj/item/weapon/restraints/handcuffs/cable/green,/obj/item/toy/owl,/turf/simulated/floor/plating,/area/maintenance/fsmaint)
"czG" = (/obj/structure/closet/firecloset/full,/turf/simulated/floor/plating,/area/maintenance/fsmaint)
@@ -6878,7 +6878,7 @@
"cCn" = (/obj/structure/cable/pink{tag = "icon-1-2"; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitepurple"},/area/medical/research{name = "Research Division"})
"cCo" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitepurple"},/area/medical/research{name = "Research Division"})
"cCp" = (/obj/machinery/vending/cigarette,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"})
-"cCq" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/flora/tree/pine/xmas,/turf/simulated/floor/plasteel/bar,/area/crew_quarters/bar)
+"cCq" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/turf/simulated/wall/rust,/area/maintenance/atmos_control)
"cCr" = (/turf/simulated/floor/plasteel/whitepurple/side{tag = "icon-whitepurple (NORTH)"; icon_state = "whitepurple"; dir = 1},/obj/structure/cable/pink{tag = "icon-1-2"; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/medical/research{name = "Research Division"})
"cCs" = (/turf/simulated/floor/plasteel/whitepurple/side{tag = "icon-whitepurple (NORTHEAST)"; icon_state = "whitepurple"; dir = 5},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTHEAST)"; icon_state = "warningline"; dir = 5},/area/medical/research{name = "Research Division"})
"cCt" = (/obj/machinery/vending/coffee,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/light,/obj/machinery/camera{c_tag = "Science Hallway East"; dir = 1; network = list("SS13","Sci")},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"})
@@ -7083,7 +7083,7 @@
"cGk" = (/obj/effect/spawner/structure/window,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"cGl" = (/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating{broken = 1; icon_state = "platingdmg3"},/area/maintenance/asmaint2)
"cGm" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/turf/simulated/floor/plasteel/bot,/area/toxins/storage)
-"cGn" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/plasteel/bot,/area/toxins/storage)
+"cGn" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/plasteel/bot,/area/toxins/storage)
"cGo" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plasteel/bot,/area/toxins/storage)
"cGp" = (/obj/machinery/computer/area_atmos,/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_x = 26; pixel_y = -2; tag = "EAST"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/toxins/storage)
"cGq" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{tag = "icon-manifold-b-f (WEST)"; dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 6; icon_state = "whitehall"},/area/medical/research{name = "Research Division"})
@@ -7220,7 +7220,7 @@
"cIR" = (/obj/machinery/door/poddoor{id = "QMLoaddoor2"; name = "supply dock loading door"},/obj/machinery/conveyor{dir = 1; id = "QMLoad"; tag = "cargoshuttledown"},/turf/simulated/floor/plating,/area/shuttle/supply)
"cIS" = (/obj/machinery/door/airlock/shuttle{name = "Supply Shuttle Airlock"; req_access_txt = "31"},/turf/simulated/floor/plating,/area/shuttle/supply)
"cIT" = (/obj/machinery/door/airlock/shuttle{name = "Supply Shuttle Airlock"; req_access_txt = "31"},/obj/docking_port/mobile/supply{dir = 2; dwidth = 5; width = 12},/obj/docking_port/stationary{dir = 2; dwidth = 5; height = 7; id = "supply_home"; name = "supply bay"; width = 12},/turf/simulated/floor/plating,/area/shuttle/supply)
-"cIU" = (/obj/machinery/door/poddoor{id = "QMLoaddoor2"; name = "supply dock loading door"},/obj/machinery/conveyor{dir = 1; id = "QMLoad2"; tag = "cargoshuttleup"},/turf/simulated/floor/plating,/area/shuttle/supply)
+"cIU" = (/obj/structure/cable/green{tag = "icon-4-8"; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (WEST)"; dir = 8},/turf/simulated/floor/plating,/area/maintenance/atmos_control)
"cIV" = (/turf/simulated/wall/shuttle{icon_state = "swall14"; dir = 2},/area/shuttle/supply)
"cIW" = (/turf/simulated/wall/shuttle{icon_state = "swall_s10"; dir = 2},/area/shuttle/supply)
"cIX" = (/obj/structure/lattice,/obj/structure/lattice,/obj/structure/grille,/turf/space,/area/space)
@@ -7349,7 +7349,7 @@
"cLq" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/maintenance/apmaint)
"cLr" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating{broken = 1; icon_state = "platingdmg1"},/area/maintenance/apmaint)
"cLs" = (/obj/effect/spawner/lootdrop{loot = list(/obj/item/stack/sheet/metal = 1, /obj/item/stack/rods = 2, /obj/item/weapon/shard = 2, "" = 3); lootcount = 2; name = "random material damage spawner"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating{dir = 8; icon_state = "warnplate"},/area/maintenance/apmaint)
-"cLt" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/apmaint)
+"cLt" = (/obj/structure/cable/green{tag = "icon-1-4"; icon_state = "1-4"},/obj/structure/cable/green{tag = "icon-1-2"; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/atmos_control)
"cLu" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plating,/area/maintenance/apmaint)
"cLv" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/structure/closet/wardrobe/cargotech,/turf/simulated/floor/plating,/area/maintenance/apmaint)
"cLw" = (/obj/structure/table,/obj/item/weapon/reagent_containers/syringe,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/apmaint)
@@ -7627,14 +7627,14 @@
"cQI" = (/obj/machinery/camera{active_power_usage = 0; c_tag = "Bomb Test Site"; desc = "A specially-reinforced camera with a long lasting battery, used to monitor the bomb testing site."; dir = 1; invuln = 1; light = null; name = "Hardened Bomb-Test Camera"; network = list("Toxins"); start_active = 1; use_power = 0},/obj/item/target/alien{anchored = 1},/turf/simulated/floor/plating/airless{dir = 2; icon_state = "warnplate"},/area/toxins/test_area)
"cQJ" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/plating/airless{dir = 6; icon_state = "warnplate"},/area/toxins/test_area)
"cQK" = (/turf/indestructible{desc = "A wall impregnated with Fixium, able to withstand massive explosions with ease"; icon_state = "riveted"; name = "hyper-reinforced wall"},/area/toxins/test_area)
-"cQL" = (/obj/structure/flora/tree/pine/xmas,/turf/simulated/floor/carpet,/area/chapel/main)
-"cQM" = (/turf/simulated/floor/plasteel/whitepurple/side{tag = "icon-whitepurple (NORTHWEST)"; icon_state = "whitepurple"; dir = 9},/obj/structure/flora/tree/festivus,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTHWEST)"; icon_state = "warningline"; dir = 9},/area/medical/research{name = "Research Division"})
+"cQL" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 9},/turf/simulated/wall,/area/maintenance/atmos_control)
+"cQM" = (/obj/structure/cable/green{tag = "icon-1-8"; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/atmos_control)
"cQN" = (/obj/structure/cable/green{tag = "icon-1-6"; icon_state = "1-6"},/turf/simulated/floor/plating/airless,/area/engine/engineering)
"cQO" = (/obj/structure/cable/green{tag = "icon-1-2"; icon_state = "1-2"},/obj/item/weapon/wirerod,/turf/simulated/floor/plating/airless,/area/engine/engineering)
-"cQP" = (/obj/structure/cable/yellow{tag = "icon-6-9"; icon_state = "6-9"; d1 = 4; d2 = 8},/obj/structure/grille,/obj/structure/cable/green{tag = "icon-5-8"; icon_state = "5-8"},/turf/simulated/floor/plating/airless,/area/engine/engineering)
-"cQQ" = (/turf/simulated/floor/plating/airless{dir = 1; icon_state = "warnplate"},/area/engine/engineering)
+"cQP" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/manifold/supply/hidden{tag = "icon-manifold-b-f (WEST)"; dir = 8},/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor/plasteel,/area/hallway/primary/central)
+"cQQ" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor/plasteel,/area/hallway/primary/central)
"cQR" = (/obj/machinery/door/airlock/external{name = "Engineering External Access"; req_access = null; req_access_txt = "10;13"},/obj/structure/cable/yellow{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/simulated/floor/plating/airless,/area/engine/engineering)
-"cQS" = (/obj/structure/cable/yellow{tag = "icon-4-10"; icon_state = "4-10"; d1 = 4; d2 = 8},/turf/simulated/floor/plating/airless,/area/engine/engineering)
+"cQS" = (/obj/machinery/door/firedoor,/obj/structure/cable/green{tag = "icon-1-2"; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor/plasteel,/area/hallway/primary/central)
"cQT" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/obj/structure/cable/yellow{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/simulated/floor/plating/airless,/area/engine/engineering)
"cQU" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (WEST)"; dir = 8},/obj/structure/disposalpipe/segment,/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel,/area/engine/engineering)
"cQV" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable/yellow{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/simulated/floor/plasteel/warning{dir = 8},/area/engine/engineering)
@@ -7643,9 +7643,9 @@
"cQY" = (/obj/structure/cable/green{tag = "icon-1-9"; icon_state = "1-9"},/obj/structure/cable/green{tag = "icon-4-9"; icon_state = "4-9"},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering)
"cQZ" = (/obj/structure/cable/green{tag = "icon-4-8"; icon_state = "4-8"},/obj/structure/cable/green{tag = "icon-1-8"; icon_state = "1-8"},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering)
"cRa" = (/obj/structure/cable/green{tag = "icon-5-8"; icon_state = "5-8"},/obj/structure/cable/green{tag = "icon-1-8"; icon_state = "1-8"},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering)
-"cRb" = (/obj/structure/cable/yellow{icon_state = "4-8"; d1 = 4; d2 = 8},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering)
-"cRc" = (/obj/structure/cable/yellow{tag = "icon-4-9"; icon_state = "4-9"; d1 = 4; d2 = 8},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering)
-"cRd" = (/obj/structure/cable/yellow{tag = "icon-5-8"; icon_state = "5-8"; d1 = 4; d2 = 8},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering)
+"cRb" = (/turf/simulated/floor/plasteel/whitepurple/side{tag = "icon-whitepurple (NORTHWEST)"; icon_state = "whitepurple"; dir = 9},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTHWEST)"; icon_state = "warningline"; dir = 9},/area/medical/research{name = "Research Division"})
+"cRc" = (/obj/machinery/conveyor{dir = 1; id = "QMLoad2"; tag = "cargoshuttleup"},/obj/machinery/door/poddoor{id = "QMLoaddoor"; name = "supply dock loading door"},/turf/simulated/floor/plating,/area/shuttle/supply)
+"cRd" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/light/small,/turf/simulated/floor/plating,/area/maintenance/apmaint)
"cRe" = (/obj/machinery/door/airlock/external{glass = 1; name = "Cargo Escape Airlock"; opacity = 0},/turf/simulated/floor/plating{dir = 8; icon_state = "warnplate"},/area/hallway/secondary/exit)
"cRf" = (/obj/machinery/door/airlock/external{glass = 1; name = "Cargo Escape Airlock"; opacity = 0},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/hallway/secondary/exit)
"cRg" = (/obj/machinery/door/airlock/external{glass = 1; name = "Escape Airlock"; opacity = 0},/turf/simulated/floor/plating{dir = 8; icon_state = "warnplate"},/area/hallway/secondary/exit)
@@ -7754,40 +7754,40 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaeaaeaiTaiUaiUaiVaiWaiXaiYaiZajaajaajbafvafvaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaaaaaaaaaaaaaeakEakyakyakyakyakyakyakyalgakyakyakyakyakyakyalNalNakyakyakyalOalPakyakyalQalRakyalSalTajTalUalValUalUalUalUalUalUaiualWalXalXalXalXalXalYaiualZalZalZalZalZamaambalcamcamdamealcamfakZalMalJamgamhamiamjalcaaealcalcalHalcalcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaeaaeaiTaiUaiUaiVaiWaiXaiYaiZajaajaajbaaeaaeaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaeajoajoajoajoajpaaeaiXaaeajpajqajqajqajqafvaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaaaaaaaeaaeaaaaaaaaeakEakyakyakyamkamlammamnakyakyakyampammaneanbakyakyamqamramsamtamuamvamwamxamyamzakyakyalTajTalUamAamBamCamDamEamEalUamFamGamHamIamJamKamLamMamNamOamPamQamRalZamaamSalcamcamTamdalcalcakZalcamUalIakZakZamValcaaealcamWamXamYalcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaeajoajoajoajoajpaaeaiXaaeajpajqajqajqajqaaeaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaiXaaaaaaaaaaaaaaaaaeafvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeakEakyakyaouanaanTamZanaancammandanaamZanTanaaowanganfanganhanianjankanlanlamyanlanmakyalTajTalUannanoanpanqanransantanuanvanwanxanyanzanAanBanCanDanEanFanGalZamaanHalcamdameamcalcanIakZalcalbanJanKanLanManNaaealcalbakZanOalcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaanPaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaanQaaaaaaaaaaaaaaeaaeafvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanRanRanSanRanSanRanRaaeaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaeaaeakEakyakyalNanaanTameamcanaamZamZamZanaamcameanTamZakyakyakyanUanlanVanWanXanlamyanlanYakyalTajTalUanZamEaoaaobaocamEaodaoeaofaogaogaogaogaoganBanCaohaoiaojaokalZamaaolalcalcalcalcalcakZakZalcalcalcalMalcalcalcalcalcaomaonaonaonaonaonaonaonaonaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaooaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaioaaaaaaaaaaaeaaeaaaafvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanSaopaoqaoraosaotanSaaeaaaaaaaaaaaaaabaaaaaaaaaaaaaaeaaeaaaakEakyamZalNaptameameameapuamcaovamcapuameameameaqeakyaoxaoyaozanlaoAaoBaoCaoDaoEaoFaoGakyalTaoHalUaoIanoaoJaoKaoLaoMaoNaoOaoPaoQaoRaoSaoTaoUaoVaoWaoXaoYaoZapaalZamaapbapcapdalMapeakZapfakZalMapgakZakZakZapfakZalIanIakZaonaphapiapjapkaplapmaonaaeaaeaaeaaaaaaaaaapnaaaaaaaaaaaaaaeaaeaaaaaaaaaaooaaaaaaaaaaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaioaaaaaaaaeaaeaaaaaaafvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeanRapoappapqaprapsanRaaeaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaamrakyamZaqkamcarfameameameamcaovamcameameameameamcapvapwapxaozanlapyapzapAaniapBapCapDakyalTapEalVapFapGapHapIamEamEalUapJapKahvahvahvahvahvapLahMalZapMapNalZalZamaapOapPapQapRapSapRapRapRapRapRapRapTapRapUapRapRapRapVaonapWapXapYapYapZaqaaonaaaaonaqbaonafvafvaqcaaaaaaaaaaaaaaaaaeaaeaaaaaaaooaaaaaaaaeaaeaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaqdatoaqdaaeaaeaaaaaaaaaafvafvafvafvaaeaaaaaaaaaaaaanRanRanRanRanRanRanRaqfaqgaqhaqiaqjanRanRanRanRanSanRanRanRaaeaaeaaeaaaaaaaaaakEakyamZatqameameatsameameamcaovawvameameatsameameapvapwaqlaqmaqnaqoaqpaqpaqqaqrapCaqsakyalTajTalUalUalUalUalUalValUalUaqtaquaqvaqwaqxaqyaqzaqAaqBaqCaqDaqEaqFaqGaqHaqIaqJaqKaqLaqMaqNaqOaqNaqPaqNaqNaqNaqQaqNaqRaqNaqNaqSaqTaqUaqVaqWaqXaqYaqZaraaraaraarbaraafvarcardarcaaeaaeaaaaaaaaaaaeaaeareaxPareaaeaaeaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaqdargaqdaaeaaaaaaaaaaaaaaeaaaanRarhanRaaaaaaaaeaaeanRariarjarkarlarjarmarmarmarnaroarmarmarjarjarjarparqarranRaaeaaeaaeaaaaaaaaaakEakyarsatqameatsatsamcamcazsaovazsamcamcatsatsameapvapwaruaozanlarvarwarxaryaqrapCakyakyarzarAarBarCalnalnarDalnarEarFahMarGarHarIarJarKalwarLahMarMarNarOarParParParQarRarSarTarUarVarWarVarXarXarXarYarZarZarXarXasaasbaonascapXasdapYaseasfasgashasgasiaraaraaraardarcarcaaeaaeaaaaaaaaaaaeareasjareaaeaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaaaaaaqdaqdatoaqdaqdaaaaaaaaaaaaaaeaaaanRaskanRaaeaaeaaeaabaslasmasnasnasnasnasnasnasnasoaspasnasnasnasnasnasnasqasranRaaeaaeaaeaaaaaaaaaakEakyakyatqameameazuaztaDzazxaDzaEPaDzaztaFSassameapvapvakyakyastakyakyamrasuasvaswakyasxasyaszasAasAasAasAasAasAasBarMasCahMahMasDajUasEahMaiCasFarMasGasHasHasHasHasHasHasIasJasKasHasLasHasHameamcameameameamcameasMasNaonasOasPasQasRasSasTasUasVasWasXasYasZataatbatcarcaaeaaeaaeaaeaaeareareaxPareareaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeanRanSanSanSanSanRanRanRanRanRanRanRanRatdateatfatgatdanRanRanRanRanRanRanRathatiatiatiatiatiatjatkatlatlatlatlatlatlatlatlatlatlatlatlatlanRanRatmatnanSaaaaaaaaeaaeaaaaaaakEakyamZaFTameatpamcaFUartamdamdamdartaFUamcameameapvattatuatvatwatwatxakyatyatzatAakyatBatCatDatEatEatEatEatEatFatGatHatIatIatIatJatKatLatIatIatIatMasGasHatNatOatPatQatRatSatTatUatVatWatXatYameatZatZatZatZatZamcasMasNaonauaaubaucaudaueaufasgaugasgauharaaraaraauiarcarcaaeaaeaaaaaaaaaaujaukaulaumaujaaaaaaaaaaaaaabaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaanRaunauoauoaupauqaurausautauuauvauwauxatdauyauzauAatdauBauqauqauCauDauEanRauFauGasnasnasnasnauHauIatlauJauKauLauMauNauOauPauQauRauSauTatlauUauVatmaqianSaaaaaaaaaaaeaaeaaaakEakyamZaFTamcamcamcaFUamdauXauYauZamdaFUamcamcamcapvavbavcaJcavdaveavfakyavgaqravhakyaviavjatEavkavlavmavnatEatEavoavpavqavqavravsavtavuavvarParParPavwasHavxavyavzavAatRavBavCavDavEavFavGavHavIavJavKavLavLatZameavMasNaonaonaonaonavNavOaonaraaraaraaraaraafvarcauiavPaaeaaeaaaaaaaaaaaaaujavQavRavSaujaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanRanRanRauqavTavUauqanRavVanRanRanRanRanRauvatdavWavXavYatdavZauqausawaawbawcauVawdaweauqauPauPawfauPauPatlawgawhawiawjawkawlauPawmawnawoawpatlanRanRatmaqianSaaaaaaapnaaaaaeaaeamrakyawqaFTameaJdaovaFUamdavaaJeauWamdaFUaovaJdameapvavbawrawsawtawuaJfawwawxawyawzawAawBawCawDawEawFawGawHawIatEawJawKakLajQahvawLajUawMasHasHasHasHasHasHawNavyavyawOatRawPawQawRawSawTawUawVamcatRawWavLawXatZameavMawYawZaxaawZaxbaxbaxcaxdaxdaxdaxdaxdaxdaxdaxdaxeaaaaaaaaaaaaaaaaaaaaeaujaxfaxgaxhaujaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeanRaxianRaxjaxkaxlaxmanRaxnaxlaxoauqaxpaxqaxratdatdaxsatdatdaxtauqaxuaxvaxuaxuanRaxwaxxauqaxyaxzaxAaxBaxCatlaxDaxEaxEaxFaxGaxHauPaxIaxJaxKaxIatlamcanSatmaqianSaaaaaaaxLaaeaaeaaaakEakyamZaFTamcamcamcaFUamdaxMatraxNamdaFUamcamcamcapvavbaxOatwatwatwatwakyaJgaxQaxRaxSaxTaxUaxVaxWaxXaxYaxZayaatEawJawKaybakKahvaycaydawMasHayeayfaygayhayiayjaykaylaymaynayoaypayqayraysaytayuayvaywayxavLayyatZameavMayzayAayBaonaaeaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaeaaaaaaaaaaabaaaaaeaaeaujaujayCaujaujaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaanRayEanRayFayGanRanRanRauqayHayIauqayJaxqayKayLayMayNayOayPayLayQayRaySayLayLayLayTayUarjayVayWayXayYayZatlazaazbawiazcazdazeazfazgazhaziazjazkazlazmaznazoazpazqazqazraaeaaaaaaakEakyamZaFTameameamcaFUartamdamdamdartaFUamcameameapvazvazwaJhatwatwazyakyazzazAazBakyatBatCatEazCazDazEazFazGatEawJawKazHazIahvazJajUazKasHazLayfaygayhayiazMazNazOazPazQazRazSazTazTazUazVazWameatZatZatZatZatZamcavMayzazXazXazXazXazXazXazXazXazXazXazXazXazYazZazZazZaAaaAaaAaaAaaAaaAaazYaAbaAcaAdazYazYazYazYazYazYazYazYazYazYazYazYazYaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanRanRanRanRanRaAeaqhanRaAfanRaAgaosaAhauqaAiaxqaAjaAkaAlaAlaAlaAlaAlaAlaAlaAmaAmaAmaAmaAnaAoaApaAqatlaAratlatlatlaAsaAtaAuaAvaAwaAxaAyaAzaAwaAAaABaACameanSatmaqianSaaaaaeamdaaaaaaaaaakEakyakyatqameameazuaJiaDzaJjaKIaKHaDzazxaFSameameapvapvakyakyaADakyakyamraAEasvaswakyaAFaAGatEaAHaAIaAJaAKaALatEaAMawKaANahvahvaAOaAPaAQaARaASaATaAUaAVayiaAWazNaAXavyavyaAYaAZaBaaBbaBcaBdaBeaBfaBgaBhaBiaBiatZameavMaBjapRapRapRapRapRapRapRaBkapRapRapRaBlaBmapRapRapRaBmaBmaBmaBmaBmaBmaBmaBmaBnaBoaBpaBoaBoaBoaBqaBraBsaBtazYaBuaBvaBwazYaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanSaBxaxlaByanRaBzaBAauVaBBanRauqaxlaxlauqaBCaxqaAjaqiaBDaBEaBFaBDaBGaBHaBDaxlauqaBIauqaBJaBKaBLaBMaBNaBOaBPaBQaBRaxEaxEaxEaBSaBTaBUauPauPaBVaBWauPatlamcanSatmaqianSaaeaaeaBXamdamdaaeakEakyaBYatqameatsatsamcamcaKJaFUaKJamcamcatsatsameapvapwapxaBZaCaaCbaCcaCdaCeaqrapCakyaCfaAGatEaCgaChaCiaCjaCkatEawJawKaClahvaCmaCnaCoaCpaCqaCraCsaCtaCuaCvaCwaCxaCyaCzaCAaCBaCCaCDavyaCEaCFawVamcatRaCGaCHaCIatZameavMayzaCJazXaCKaCLazXaCMaCNazXazXapPaCOazXazYazZazZazZaAaaAaaAaaAaaAaaAaazYaCPaCQazYaCPaCRazYazYazYazYaCSaCTazYaCUaCVaCVazYaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanSaCWauqauqaCXaCYaCZarmarmarmarmarmarmarmarmarmaDaaDbaBDaDcaDdaDeaDdaDfaDgaDgaDgaDgaDgaDgaDgaDhaDiaDjaDkaDlaDmaDnaDoaAzaDpaDqaDraDsauPaDtaDuaDvaDwatlanRanRatmaqianSaaeamdamdaDxaaaaaaakEakyamZatqameaKKatsameameamcaFUamcameameatsameameapvapwaqlaDybugaDAaDAaDAaDBaDCaDDakyaDEaAGatEaDFaDGaDHaDIaDJatEawJaDKaDLahvaDMaDNaDOaDPaDQaDRaDSaDTaDUaDQaDVaDWaDXayiaDYaDZavyaEaavyaCEaEbayuayvaywaEcaBiaBiatZameavMayzaEdaEeaEeaEeaEeaEeaEeaEeazXapPaEfazXaaaaaeaaaaaeaaaaaaaaaaaeaaaaaeaaaazYaCQazYaEgaEhaEiaCVaEjazYaCSazYazYaCPaEkazYazYaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabanRanRanRanRanRaElaEmasnasnasnasnasnasnasnasnasnaEnaEoaBDaEpaEqaBDaEraEsaDgaEtaEuaEvaEwaExaEyaEzaEAatlaEBaECaEDatlaEEawkaEFaEGaEHaEIauPaEJaEKaELaEMatlaENanRatmaqianSaaeaaeaaaamdaaaaaaamrakyamZbuiamcameameameameamcaFUamcameameameameamcapvapwaruaEObysaoDaEQaERaESaETaEUakyaEVaAGatEaEWaEXaEYaEXaEZatEawJaFaaFbahvaFcaFdaFeaFfaFgaFhaFiaFjaFkaFgaFlaFmaFnaDYaFoaCDavyaCBaFpaCEaFqawVameatZatZatZatZatZamcavMayzaFraEeaFsaFtaFuaFvaFwaEeaCKapPaFxazZaaaaaeaaaaaeaaaaaaaaaaaeaaaaaaaaaaAaaCQazYaFyazYazYazYazYazYaFzaBmaBmaBmaBsaFAaFBaFCaFBaFBaFBaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaeanRaqhaFDaFEaFEaFEaFEaFEaFEaFEaFEaFEaFFaFGaBDaFHaFIaBDaFJaFKaDgaFLaFMaFNaFOaFPaEyaEzaFQatlatlatlatlatlatlatlatlatlatlatlatlatlatlatlatlatlauVanRatmaFRanSaaaaaeaaeaaeaabaaaakEakyamZalNbytameameamebNLamcaFUamcbNLameameamebNMakyaFVaoyaFWcvvanXamyaFYaFZaFZaFZaGaaGbaGcaxVaxVaxVaxVaxVaGdatEaGeaFaaGfahvaGgaGhaGiawMasHaGjaGkaGlaGmaGnaGoazNaGpaDYaFoaGqaGraGsaFpaGtaGuaBeaBfaBgaGvaGwaGxatZameavMayzaGyaEeaGzaGAaGBaGCaGDaEeapPaFxapPazZaaeaaaaaaaaeaGEaGFamdaaeaaaaaeaaeaAaaCQazYaGGaGHaGIaGJaGKazYazYaCPazYaGLaCSaGMaFBaGNaCVaGOaFBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaeaaeanRaqhaFDaFEaGPaGQaGRaGSaGTaGUaGVaBDaGWaGXaGYaGZaHaaHbaHaaHcaHdaHeaHfaHgaHhaHiaHdaHjaHkaHlaHmaHnaHoaHoaHpaHqaHnaHraHsaHtaHsaHuaHvaHwaHxaHxaHxaHxaHyaHzanRaaaaaaaaeaaeaaaaaaakEakyakyalNanaaHAameamcanaamZcyFamZczDamcamecGLamZakyakyakyaHBcGMaHDamyaHEaFZaHFaHGaHHaGaaHIaHJaHKaHJaHJaHJaHLaHJaHMaHNajQahvaHOaHPaHQaHRasHasHaHSaHTatRasHaHUazNaHVaDYaFoaCDaHWaCBaFpaCEaHXawVamcatRaHYaHZaIaatZameavMayzaIbaEeaIcaIdaGAaIeaIfaIgaIhaIiapPazZaaaaaaaabamdamdaIjaIkamdaaaaaaaaaaAaaIlazYaImaCVaInaCVaCVazYaEhaIoazYaIpaCSaIqaFBaCVaIraIsaFBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaaanRaItaFDaFEaIuaIvaIwaIxaIxaIyaIzaIAaIBaICaIDaIEaIFaIGaIFaIHaIIaIJaIJaIKaILaIMaINaIOaIPaIQaHmaHnaHoaIRaIRaISaITaIUaIVaIWaIXaIYaHvaIZanRanRanSaslaJaanRaJbaJbaJbaJbaJbaJbaJbaJbalNakyakycQNanaaHAamZcQOamoammcQPamZamZcQQamZcQScQRcQTcQRcQVcQUcQXcQWaJkaJlaJmaJnaJoaGaakyakyakyakyakyakyaJpaJqaJraJsaJtatIaJuaJvaJwaJxaGnaJyaJzaJAaJBasHaJCazNaDYaJDaDYaJEavyaCBaJFaCEaJGayuayvaywaJHaGwaGwatZameavMayzapPaEeaGDaJIaJJaJKaGDaEeaJLapPaJMazZaaeaaeaaaaaeaIkaDxamdaaeaaaaaeaaeaAaaCQazYaJNaJOaJPaJQaCVaJRaCVaJSazYaJTaCSaJUaJVaEiaJWaJXaFBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaanRaqhaFDaFEaJYaJZaKaaKbaKcaKdaKeaKfaKgaKdaKhaKiaKjaKdaKdaKkaKlaKmaKnaKoaKpaKqaKlaKraKsaKtaHmaHnaIRaHoaHoaKuaHnaKvaIWaIWaIWaKwaHvaKxaJbameamcaKyameaJbaKzaKAaKBaKCaKDaKEaKCaKFaKGakyakyakycQYcQZammcRaakyakyakycRccRbcRbcRdakyakyaKLalgaKMaFXaKNaKOaKPaKQaKRaKSaKTaKUaKVaKWaKXaKYaKZakyaLaaLbaLcaLdaLeaLfaLgaLhaLiaLjaLkaLlaLmaLnaLoaLpaLqaLraLsaLtaLuaLvaLwaLxaLyaCEaFqawVameatZatZatZatZatZamcavMayzapPaEeaLzaLAaLBaLCaLDaEeaLEapPaLFazZaaaaaaaaaaaeaaaaaaaaaaaeaaaaaeaaaaAaaCQazYazYazYazYazYazYazYaLGazYazYaCVaCSaLHaFBaFCaFBaFBaFBaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaanRaqhaFDaFEaLIaLJaLKaLLaLMaLNaLOaBDaLPaLPaLPaLQaLRaBDaLPaLPaDgaEyaLSaDgaLSaEyaDgaLTaLUaLVaHnaHvaHnaHnaHnaHnaHvaLWaLXaIWaLYaLZaHvaKxaJbameamcaKyameaJbaKFaKFaMaaJbaMbaKFaJbaMcaMdaMeakyakyakyakyakyakyakyakyakyakyakyakyakyakyakyakyalNaMfaMgaMhamyaMiaFZaFZaFZaFZaFZaMjaMkaMlaMmaMnakyakyajQaAMaMoajQahvahvaMpaMqaMraCvaMsaMtaMuaMvasHaMwaMxaMyaMzaMzaMAavyavyavyaMBaMCaBeaBfaBgaMDaMEaMEatZameavMayzazXaEeaEeaEeaEeaEeaEeaEeazXapPaCLazXaaaaaeaaaaaeaaaaaaaaaaaeaaaaaaaaaazYaCQazYaEjaCVaEiaCVaMFaGLaCVaLHazYaCVaMGazYazYaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaanRaMHaMIaFEaBDaBDaMJaMKaMLaMKaMKaBDaMMaMNaLPaMOaHaaMPaMQaMRaBDaMSaMTaMUaMTaMVaBDaMWaMXaHnaMYaMZaNaaNbaNcaNdaHnaNeaNfaNgaNhaNiaHvaKxaKCaJbaNjaNkaJbaJbaJbaNlaJbaJbaJbaKCaJbaJbaJbaJbakyakyalgakyakyakyaNmaNnaNoakyakyakyalgakyaNpaNqakyapyaHCanlamyaFYaNranlanlanlaFYaNranVaNsaCaaNtaNuaxSaNvaNwaNxajQazHahvaNyaNzaNAayiaNBayiasHasHasHaNCaNDaNEaNFaNFaNGaNFaNFaNFaNHaNIaNJamcatRaNKaNLaNMatZameavMayzaCKazXazXazXazXazXazXazXazXapPaIbaCKazXazZazZazZazZazZazZazZazZazZazXazYaCQazYazYaGGaCPazYazYazYazYazYazYaCVaCSaCVazYaaaaabaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaabaaaanRaNNaNOaBDaNPaNQaNRaNSaNTaNUaNUaNVaNUaNWaNXaNYaNZaIxaIxaIxaOaaObaOcaOdaOeaOfaOgaOhaOiaOjaOkaOlaOmaOnaOoaOpaOqaOraOsaOtaOuaOvaOwaOxaOyaOzaOAaOBaOzaOzaOzaOzaOCaOzaOzaOzaODaOzaOzaOzaOzaOzaOEaOFaOGaOHaOIaOJaOHaOHaOKaODaOzaOzaOLaOzaOMaONaOOaOPaOQaOPaORaOSaOPaOPaOPaOTaOUaOVaOPaOWaOPaOXavqaOYaOZakLalSahvaPaajUawMahvaPbaPcaPdaPeaMzaMzaPfaPgaDSaDSaPhaDSaPiavyaPjaPkaPlayvaywaPmaMEaMEatZameaPnaPoaPpaPpaPpaPpaPpaPpaPpaPpaPpaPqarVarVaPrarVarVaPsaPpaPtarVarVaPuaPvaPsaPwaPxaPyaPyaPzaPyaPyaPyaPAaPyaPyaPyaPyaPBaPCazYaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaanSaPDaPEaBDaPFaPGaPHaPIaPJaPKaPLaPMaPMaPNaPOaPPaPQaKbaKbaKbaPRaPSaPTaPUaPVaPSaPRaPWaPXaPYaPZaQaaQaaQbaQcaQdaQeaQfaQgaQhaQaaQaaQiaQjaQkaQlaQmaQnaQoaQpaQpaQpaQqaQraQpaQsaQtaQuaQvaQwaQlaQxaQyaQzaQzaQzaQzaQzaQzaQzaQAaQBaQlaQlaQCaQlaxSaQDaQEaQFaQGaQHaQIaQJaCaaCaaQKaQLaQMaQNaQOanlanlaQPaQPaQPaQPaQPaQPaQPaQQajUawMahvaPbaCLasHaQRaQSaQTaQUaQVaQWaQXaQYaDSaQZaRaaRbaRcatRameatZatZatZatZatZameasMayzazXazXazZazZazZazZazZazXazXaPbazXazXazXazXazXaRdazXaReaRfaRgaRhaRhaRiaCPaRjazYaMFaRkaCVaRlaRmaJUaCVaCVaCPazYaRnaRoazYazYazYazYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaaaaaaaaaaaaaaanRaRpaRqaBDaBDaDeaRraRsaBDaBDaBDaBDaBDaBDaBDaRtaRuaRvaMQaMRaBDaRwaRxaRyaRxaRzaBDaRAaRBaHnaRCaRDaREaRFaRGaRHaHvaRIaRJaRKaRLaRMaHvaRNaROaRPaRPaROaRQaRPaRRaRSaRTaRUaRVaRVaRVaRVaRVaRWaRWaRWaRWaRWaRWaRWaRWaRWaRWaRWaRXaRXaRXaRXaRYaRZakyaSaaSbaScakyakyakyakyaSdaSdaSdaSeaSfaSgaSdaSdaSdaShaSiaSjaSkaSlaSmaQPaSnaydaSoahvaPbaCKasHasHaSpaSqayuaSraSpaSqayuaPlayuaPlayuaSratRameamcameameameamcameasMayzazXameamcamcameamcamcameazXaSsazXaStapPaStapPaRdazXaSuaSvaSwaCLaSxaSyaSyaSyaSyaSyaSyaSyaSyaSyaSyaSyazYazYazYaRnaSzazYaSAaSBazYazYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaeaaeaaaaaaaaaaaaanRaqhaFDaBDaSCaSDaSEaSFaSGaLPaSHaSIaBDaSJaBDaLQaLRaBDaLPaLPaBDaBDaLPaLPaLPaBDaBDaSKaLUaLVaHnaHnaHnaHnaSLaSMaHvaHvaHvaHvaHvaHvaHvaKxaROaSNaSOaSPaSQaRPaRRaRSaSRaRUaRVaSSaSSaSSaRVaRWaSTaSUaSVaSTaSWaSTaSXaSYaSTaSZaTaaTbaTcaRXaRYaKFakyaTdaTeaTfakyaTgajDakyaThaTiaTjaTkaTlaTmaTnaToaQKaTpaTqaTraTsaTtaTuaTvaPaajUawMahvaPbazXameameaTwamcaTxameaTwamcaTxameaTxamcaTxameameameazXazXazZazZazXazXasMayzazZamcaTyaTzaTzaTzaTAamcazZaPbazZapPaTBapPapPaRdazXaTCaTCaTCaTCaTCaSyaTDaTEaTFaTGaTHaTIaTJaTKaTLaTMaTNaTOazYaTPaTQaTRaTSaTTaTUazYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaeanRanRanRanRanRaqhaFDaBDaTVaTWaTXaTYaTZaUaaUbaUcaUdaUeaUfaUgaUhaUiaUjaUjaUkaUlaUlaUmaUnaUjaUoaUpaUqaUraUsaUtaUuaUjaUvaUwaUxaUyaUzaQlaQxaQlaQlaUAaROaRPaRPaSPaUBaRPaRRaRSaSRaUCaRVaUDaUDaUEaRVaRWaSTaUFaUGaUHaUIaUHaUJaUKaSTaSZaULaUMaUNaRXaRYaUOakyaUPaUQaURakyakJaUSaOMaUTaUTaUUaUVaUWaUXaOPaUYaUZaVaaVbaVcaVdaVeaVfaTvaPaajUawMahvaPbazXamcatZaVgatRaVhatZaVgatRaVhatZaViatRaVjatZamcazXaCKaVkapQapRapRapRaVlaVmazZamcaVnaVoaVpaVqaVramcazZaPbazXaStapPaStazXaRdaVsaTCaVtaVuaVvaVwaSyaVxaVxaVyaVzaVAaVBaVCaVDaVEaSyaTNaTNazYaRnaVFaCPaVGaCVaCVazYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaanRaVHaVIaVJanRaqhaFDaBDaVKaVLaVMaVNaVOaPOaVPaVQaVRaVSaVTaVUaVVaVWaVWaVXaVYaVZaWaaWbaWcaWdaWeaWfaWgaWhaWiaVWaWjaWkaWlaWmaWnaWoaWpaWqaWraWqaWsaWtaWuaWvaWwaWxaWyaRPaRRaRSaSRaRUaRVaWzaWAaWBaRVaRWaWCaSTaSTaWDaWEaWFaSTaSTaWGaSZaWHaWIaWJaRXaWKaWLakyaWMaWNaWOakyaWPatGakyaWQaWRaWSaWTaWUaWVaWWaWXaWYaWZaXaaXbaXcaXdaXeaTvaPaajUawMahvaXfazXameatZaXgaXhaXiatZaXjaXkaXlatZaXmaXnaXoatZameazXaSvaXpaXqaPpaPpaPpaXraRiazXameaVnaXsaXtaXuaVrameazXaPbazXazXapPaCKazXaRdapPaXvaXwaXxaXyaXwaXzaVxaVxaXAaVxaXBaXCaXDaVxaVxaSyaXEaXFazYaRnaSzazYaVGaCVaCVazYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaanQaaaaaaaaaaaaaaeaaeafvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanRanRanSanRanSanRanRaaeaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaeaaeakEakyakyalNanaanTameamcanaamZamZamZanaamcameanTamZakyakyakyanUanlanVanWanXanlamyanlanYakyalTajTalUanZamEaoaaobaocamEaodaoeaofaogaogaogaogaoganBanCaohaoiaojaokalZamaaolalcalcalcalcalcakZakZalcalcalcalMalcalcalcalcalcalcaomaonaonaonaonaonaonaonaonaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaooaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaioaaaaaaaaaaaeaaeaaaafvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanSaopaoqaoraosaotanSaaeaaaaaaaaaaaaaabaaaaaaaaaaaaaaeaaeaaaakEakyamZalNaptameameameapuamcaovamcapuameameameaqeakyaoxaoyaozanlaoAaoBaoCaoDaoEaoFaoGakyalTaoHalUaoIanoaoJaoKaoLaoMaoNaoOaoPaoQaoRaoSaoTaoUaoVaoWaoXaoYaoZapaalZamaapbapcapdalMapeakZapfakZalMapgakZakZakZapfakZalIanIakZakZaonaphapiapjapkaplapmaonaaeaaeaaeaaaaaaaaaapnaaaaaaaaaaaeaaeaaaaaaaaaaooaaaaaaaaaaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaioaaaaaaaaeaaeaaaaaaafvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeanRapoappapqaprapsanRaaeaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaamrakyamZaqkamcarfameameameamcaovamcameameameameamcapvapwapxaozanlapyapzapAaniapBapCapDakyalTapEalVapFapGapHapIamEamEalUapJapKahvahvahvahvahvapLahMalZapMapNalZalZamaapOapPapQapRapSapRapRapRapRapRapRapTapRapUapRapRapRapVakZaonapWapXapYapYapZaqaaonaaaaonaqbaonafvafvaqcaaaaaaaaaaaaaaeaaeaaaaaaaooaaaaaaaaeaaeaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaqdatoaqdaaeaaeaaaaaaaaaafvafvafvafvaaeaaaaaaaaaaaaanRanRanRanRanRanRanRaqfaqgaqhaqiaqjanRanRanRanRanSanRanRanRaaeaaeaaeaaaaaaaaaakEakyamZatqameameamcameameamcaovawvameameamcameameapvapwaqlaqmaqnaqoaqpaqpaqqaqrapCaqsakyalTajTalUalUalUalUalUalValUalUaqtaquaqvaqwaqxaqyaqzaqAaqBaqCaqDaqEaqFaqGaqHaqIaqJaqKaqLaqMaqNaqOaqNaqPaqNaqNaqNaqQaqNaqRaqNaqNaqSasaaqTaqUaqVaqWaqXaqYaqZaraaraaraarbaraafvarcardarcaaeaaeaaaaaaaaeaaeareaxPareaaeaaeaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaqdargaqdaaeaaaaaaaaaaaaaaeaaaanRarhanRaaaaaaaaeaaeanRariarjarkarlarjarmarmarmarnaroarmarmarjarjarjarparqarranRaaeaaeaaeaaaaaaaaaakEakyarsatqameamcamcamcamcazsaovazsamcamcamcamcameapvapwaruaozanlarvarwarxaryaqrapCakyakyarzarAarBarCalnalnarDalnarEarFahMarGarHarIarJarKalwarLahMarMarNarOarParParParQarRarSarTarUarVarWarVarXarXarXarYarZarZarXarXarXatsasbaonascapXasdapYaseasfasgashasgasiaraaraaraardarcarcaaeaaeaaaaaaaaeareasjareaaeaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaaaaaaqdaqdatoaqdaqdaaaaaaaaaaaaaaeaaaanRaskanRaaeaaeaaeaabaslasmasnasnasnasnasnasnasnasoaspasnasnasnasnasnasnasqasranRaaeaaeaaeaaaaaaaaaakEakyakyatqameameazuaztaDzazxaDzaEPaDzaztaFSassameapvapvakyakyastakyakyamrasuasvaswakyasxasyaszasAasAasAasAasAasAasBarMasCahMahMasDajUasEahMaiCasFarMasGasHasHasHasHasHasHasIasJasKasHasLasHasHameamcameameameamcameazXasNaYOaonasOasPasQasRasSasTasUasVasWasXasYasZataatbatcarcaaeaaeaaeaaeareareaxPareareaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeanRanSanSanSanSanRanRanRanRanRanRanRanRatdateatfatgatdanRanRanRanRanRanRanRathatiatiatiatiatiatjatkatlatlatlatlatlatlatlatlatlatlatlatlatlanRanRatmatnanSaaaaaaaaeaaeaaaaaaakEakyamZaFTameatpamcaFUartamdamdamdartaFUamcameameapvattatuatvatwatwatxakyatyatzatAakyatBatCatDatEatEatEatEatEatFatGatHatIatIatIatJatKatLatIatIatIatMasGasHatNatOatPatQatRatSatTatUatVatWatXatYameatZatZatZatZatZamcazXasNaYOaonauaaubaucaudaueaufasgaugasgauharaaraaraauiarcarcaaeaaeaaaaaaaujaukaulaumaujaaaaaaaaaaaaaabaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaanRaunauoauoaupauqaurausautauuauvauwauxatdauyauzauAatdauBauqauqauCauDauEanRauFauGasnasnasnasnauHauIatlauJauKauLauMauNauOauPauQauRauSauTatlauUauVatmaqianSaaaaaaaaaaaeaaeaaaakEakyamZaFTamcamcamcaFUamdauXauYauZamdaFUamcamcamcapvavbavcaJcavdaveavfakyavgaqravhakyaviavjatEavkavlavmavnatEatEavoavpavqavqavravsavtavuavvarParParPavwasHavxavyavzavAatRavBavCavDavEavFavGavHavIavJavKavLavLatZameazZasNaYOaonaonaonaonavNavOaonaraaraaraaraaraafvarcauiavPaaeaaeaaaaaaaaaaujavQavRavSaujaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanRanRanRauqavTavUauqanRavVanRanRanRanRanRauvatdavWavXavYatdavZauqausawaawbawcauVawdaweauqauPauPawfauPauPatlawgawhawiawjawkawlauPawmawnawoawpatlanRanRatmaqianSaaaaaaapnaaaaaeaaeamrakyawqaFTameaJdaovaFUamdavaaJeauWamdaFUaovaJdameapvavbawrawsawtawuaJfawwawxawyawzawAawBawCawDawEawFawGawHawIatEawJawKakLajQahvawLajUawMasHasHasHasHasHasHawNavyavyawOatRawPawQawRawSawTawUawVamcatRawWavLawXatZameazZawYaCJawZaxaawZaxbaxbaxcaxdaxdaxdaxdaxdaxdaxdaxdaxeaaaaaaaaaaaaaaaaaeaujaxfaxgaxhaujaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeanRaxianRaxjaxkaxlaxmanRaxnaxlaxoauqaxpaxqaxratdatdaxsatdatdaxtauqaxuaxvaxuaxuanRaxwaxxauqaxyaxzaxAaxBaxCatlaxDaxEaxEaxFaxGaxHauPaxIaxJaxKaxIatlamcanSatmaqianSaaaaaaaxLaaeaaeaaaakEakyamZaFTamcamcamcaFUamdaxMatraxNamdaFUamcamcamcapvavbaxOatwatwatwatwakyaJgaxQaxRaxSaxTaxUaxVaxWaxXaxYaxZayaatEawJawKaybakKahvaycaydawMasHayeayfaygayhayiayjaykaylaymaynayoaypayqayraysaytayuayvaywayxavLayyatZameazZayzaYOayAayBaonaaeaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaeaaaaaaaaaaabaaeaaeaujaujayCaujaujaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaanRayEanRayFayGanRanRanRauqayHayIauqayJaxqayKayLayMayNayOayPayLayQayRaySayLayLayLayTayUarjayVayWayXayYayZatlazaazbawiazcazdazeazfazgazhaziazjazkazlazmaznazoazpazqazqazraaeaaaaaaakEakyamZaFTameameamcaFUartamdamdamdartaFUamcameameapvazvazwaJhatwatwazyakyazzazAazBakyatBatCatEazCazDazEazFazGatEawJawKazHazIahvazJajUazKasHazLayfaygayhayiazMazNazOazPazQazRazSazTazTazUazVazWameatZatZatZatZatZamcazZayzasMazXazXazXazXazXazXazXazXazXazXazXazYazZazZazZaAaaAaaAaaAaaAaaAaazYaAbaAcaAdazYazYazYazYazYazYazYazYazYazYazYazYazYaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanRanRanRanRanRaAeaqhanRaAfanRaAgaosaAhauqaAiaxqaAjaAkaAlaAlaAlaAlaAlaAlaAlaAmaAmaAmaAmaAnaAoaApaAqatlaAratlatlatlaAsaAtaAuaAvaAwaAxaAyaAzaAwaAAaABaACameanSatmaqianSaaaaaeamdaaaaaaaaaakEakyakyatqameameazuaJiaDzaJjaKIaKHaDzazxaFSameameapvapvakyakyaADakyakyamraAEasvaswakyaAFaAGatEaAHaAIaAJaAKaALatEaAMawKaANahvahvaAOaAPaAQaARaASaATaAUaAVayiaAWazNaAXavyavyaAYaAZaBaaBbaBcaBdaBeaBfaBgaBhaBiaBiatZameazZaBjaEdapRapRapRapRapRapRaBkapRapRapRaBlaBmapRapRapRaBmaBmaBmaBmaBmaBmaBmaBmaBnaBoaBpaBoaBoaBoaBqaBraBsaBtazYaBuaBvaBwazYaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanSaBxaxlaByanRaBzaBAauVaBBanRauqaxlaxlauqaBCaxqaAjaqiaBDaBEaBFaBDaBGaBHaBDaxlauqaBIauqaBJaBKaBLaBMaBNaBOaBPaBQaBRaxEaxEaxEaBSaBTaBUauPauPaBVaBWauPatlamcanSatmaqianSaaeaaeaBXamdamdaaeakEakyaBYatqameamcamcamcamcaKJaFUaKJamcamcamcamcameapvapwapxaBZaCaaCbaCcaCdaCeaqrapCakyaCfaAGatEaCgaChaCiaCjaCkatEawJawKaClahvaCmaCnaCoaCpaCqaCraCsaCtaCuaCvaCwaCxaCyaCzaCAaCBaCCaCDavyaCEaCFawVamcatRaCGaCHaCIatZameazZayzaFrazXaCKaCLazXaCMaCNazXazXapPaCOazXazYazZazZazZaAaaAaaAaaAaaAaaAaazYaCPaCQazYaCPaCRazYazYazYazYaCSaCTazYaCUaCVaCVazYaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanSaCWauqauqaCXaCYaCZarmarmarmarmarmarmarmarmarmaDaaDbaBDaDcaDdaDeaDdaDfaDgaDgaDgaDgaDgaDgaDgaDhaDiaDjaDkaDlaDmaDnaDoaAzaDpaDqaDraDsauPaDtaDuaDvaDwatlanRanRatmaqianSaaeamdamdaDxaaaaaaakEakyamZatqameaKKamcameameamcaFUamcameameamcameameapvapwaqlaDybugaDAaDAaDAaDBaDCaDDakyaDEaAGatEaDFaDGaDHaDIaDJatEawJaDKaDLahvaDMaDNaDOaDPaDQaDRaDSaDTaDUaDQaDVaDWaDXayiaDYaDZavyaEaavyaCEaEbayuayvaywaEcaBiaBiatZameazZayzaGyaEeaEeaEeaEeaEeaEeaEeazXapPaEfazXaaaaaeaaaaaeaaaaaaaaaaaeaaaaaeaaaazYaCQazYaEgaEhaEiaCVaEjazYaCSazYazYaCPaEkazYazYaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabanRanRanRanRanRaElaEmasnasnasnasnasnasnasnasnasnaEnaEoaBDaEpaEqaBDaEraEsaDgaEtaEuaEvaEwaExaEyaEzaEAatlaEBaECaEDatlaEEawkaEFaEGaEHaEIauPaEJaEKaELaEMatlaENanRatmaqianSaaeaaeaaaamdaaaaaaamrakyamZbuiamcameameameameamcaFUamcameameameameamcapvapwaruaEObysaoDaEQaERaESaETaEUakyaEVaAGatEaEWaEXaEYaEXaEZatEawJaFaaFbahvaFcaFdaFeaFfaFgaFhaFiaFjaFkaFgaFlaFmaFnaDYaFoaCDavyaCBaFpaCEaFqawVameatZatZatZatZatZamcazZayzaPnaEeaFsaFtaFuaFvaFwaEeaCKapPaFxazZaaaaaeaaaaaeaaaaaaaaaaaeaaaaaaaaaaAaaCQazYaFyazYazYazYazYazYaFzaBmaBmaBmaBsaFAaFBaFCaFBaFBaFBaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaeanRaqhaFDaFEaFEaFEaFEaFEaFEaFEaFEaFEaFFaFGaBDaFHaFIaBDaFJaFKaDgaFLaFMaFNaFOaFPaEyaEzaFQatlatlatlatlatlatlatlatlatlatlatlatlatlatlatlatlatlauVanRatmaFRanSaaaaaeaaeaaeaabaaaakEakyamZalNbytameameamebNLamcaFUamcbNLameameamebNMakyaFVaoyaFWcvvanXamyaFYaFZaFZaFZaGaaGbaGcaxVaxVaxVaxVaxVaGdatEaGeaFaaGfahvaGgaGhaGiawMasHaGjaGkaGlaGmaGnaGoazNaGpaDYaFoaGqaGraGsaFpaGtaGuaBeaBfaBgaGvaGwaGxatZameazZayzaPoaEeaGzaGAaGBaGCaGDaEeapPaFxapPazZaaeaaaaaaaaeaGEaGFamdaaeaaaaaeaaeaAaaCQazYaGGaGHaGIaGJaGKazYazYaCPazYaGLaCSaGMaFBaGNaCVaGOaFBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaeaaeanRaqhaFDaFEaGPaGQaGRaGSaGTaGUaGVaBDaGWaGXaGYaGZaHaaHbaHaaHcaHdaHeaHfaHgaHhaHiaHdaHjaHkaHlaHmaHnaHoaHoaHpaHqaHnaHraHsaHtaHsaHuaHvaHwaHxaHxaHxaHxaHyaHzanRaaaaaaaaeaaeaaaaaaakEakyakyalNanaaHAameamcanaamZcyFamZanaamcamecGLamZakyakyakyaHBcGMaHDamyaHEaFZaHFaHGaHHaGaaHIaHJaHKaHJaHJaHJaHLaHJaHMaHNajQahvaHOaHPaHQaHRasHasHaHSaHTatRasHaHUazNaHVaDYaFoaCDaHWaCBaFpaCEaHXawVamcatRaHYaHZaIaatZameazZayzaVlaEeaIcaIdaGAaIeaIfaIgaIhaIiapPazZaaaaaaaabamdamdaIjaIkamdaaaaaaaaaaAaaIlazYaImaCVaInaCVaCVazYaEhaIoazYaIpaCSaIqaFBaCVaIraIsaFBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaaanRaItaFDaFEaIuaIvaIwaIxaIxaIyaIzaIAaIBaICaIDaIEaIFaIGaIFaIHaIIaIJaIJaIKaILaIMaINaIOaIPaIQaHmaHnaHoaIRaIRaISaITaIUaIVaIWaIXaIYaHvaIZanRanRanSaslaJaanRaJbaJbaJbaJbaJbaJbaJbaJbalNakyakycQNanaaHAamZcQOamoammaXrbhEbhDbhFbhDbhDcQRcQTcQRcQVcQUcQXcQWaJkaJlaJmaJnaJoaGaakyakyakyakyakyakyaJpaJqaJraJsaJtatIaJuaJvaJwaJxaGnaJyaJzaJAaJBasHaJCazNaDYaJDaDYaJEavyaCBaJFaCEaJGayuayvaywaJHaGwaGwatZameazZayzaYOaEeaGDaJIaJJaJKaGDaEeaJLapPaJMazZaaeaaeaaaaaeaIkaDxamdaaeaaaaaeaaeaAaaCQazYaJNaJOaJPaJQaCVaJRaCVaJSazYaJTaCSaJUaJVaEiaJWaJXaFBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaanRaqhaFDaFEaJYaJZaKaaKbaKcaKdaKeaKfaKgaKdaKhaKiaKjaKdaKdaKkaKlaKmaKnaKoaKpaKqaKlaKraKsaKtaHmaHnaIRaHoaHoaKuaHnaKvaIWaIWaIWaKwaHvaKxaJbameamcaKyameaJbaKzaKAaKBaKCaKDaKEaKCaKFaKGakyakyakycQYcQZammcRaakyakyakyczDakEakEakEakyakyaKLalgaKMaFXaKNaKOaKPaKQaKRaKSaKTaKUaKVaKWaKXaKYaKZakyaLaaLbaLcaLdaLeaLfaLgaLhaLiaLjaLkaLlaLmaLnaLoaLpaLqaLraLsaLtaLuaLvaLwaLxaLyaCEaFqawVameatZatZatZatZatZamcazZayzaYOaEeaLzaLAaLBaLCaLDaEeaLEapPaLFazZaaaaaaaaaaaeaaaaaaaaaaaeaaaaaeaaaaAaaCQazYazYazYazYazYazYazYaLGazYazYaCVaCSaLHaFBaFCaFBaFBaFBaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaanRaqhaFDaFEaLIaLJaLKaLLaLMaLNaLOaBDaLPaLPaLPaLQaLRaBDaLPaLPaDgaEyaLSaDgaLSaEyaDgaLTaLUaLVaHnaHvaHnaHnaHnaHnaHvaLWaLXaIWaLYaLZaHvaKxaJbameamcaKyameaJbaKFaKFaMaaJbaMbaKFaJbaMcaMdaMeakyakyakyakyakyakyakyakyakyakyakyakyakyakyakyakyalNaMfaMgaMhamyaMiaFZaFZaFZaFZaFZaMjaMkaMlaMmaMnakyakyajQaAMaMoajQahvahvaMpaMqaMraCvaMsaMtaMuaMvasHaMwaMxaMyaMzaMzaMAavyavyavyaMBaMCaBeaBfaBgaMDaMEaMEatZameazZayzasMaEeaEeaEeaEeaEeaEeaEeazXapPaCLazXaaaaaeaaaaaeaaaaaaaaaaaeaaaaaaaaaazYaCQazYaEjaCVaEiaCVaMFaGLaCVaLHazYaCVaMGazYazYaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaanRaMHaMIaFEaBDaBDaMJaMKaMLaMKaMKaBDaMMaMNaLPaMOaHaaMPaMQaMRaBDaMSaMTaMUaMTaMVaBDaMWaMXaHnaMYaMZaNaaNbaNcaNdaHnaNeaNfaNgaNhaNiaHvaKxaKCaJbaNjaNkaJbaJbaJbaNlaJbaJbaJbaKCaJbaJbaJbaJbakyakyalgakyakyakyaNmaNnaNoakyakyakyalgakyaNpaNqakyapyaHCanlamyaFYaNranlanlanlaFYaNranVaNsaCaaNtaNuaxSaNvaNwaNxajQazHahvaNyaNzaNAayiaNBayiasHasHasHaNCaNDaNEaNFaNFaNGaNFaNFaNFaNHaNIaNJamcatRaNKaNLaNMatZameazZayzcCqazXazXazXazXazXazXazXazXapPaIbaCKazXazZazZazZazZazZazZazZazZazZazXazYaCQazYazYaGGaCPazYazYazYazYazYazYaCVaCSaCVazYaaaaabaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaabaaaanRaNNaNOaBDaNPaNQaNRaNSaNTaNUaNUaNVaNUaNWaNXaNYaNZaIxaIxaIxaOaaObaOcaOdaOeaOfaOgaOhaOiaOjaOkaOlaOmaOnaOoaOpaOqaOraOsaOtaOuaOvaOwaOxaOyaOzaOAaOBaOzaOzaOzaOzaOCaOzaOzaOzaODaOzaOzaOzaOzaOzaOEaOFaOGaOHaOIaOJaOHaOHaOKaODaOzaOzaOLaOzaOMaONaOOaOPaOQaOPaORaOSaOPaOPaOPaOTaOUaOVaOPaOWaOPaOXavqaOYaOZakLalSahvaPaajUawMahvaPbaPcaPdaPeaMzaMzaPfaPgaDSaDSaPhaDSaPiavyaPjaPkaPlayvaywaPmaMEaMEatZameazZcLtcIUaPpaPpaPpaPpaPpaPpaPpaPpaPqarVarVaPrarVarVaPsaPpaPtarVarVaPuaPvaPsaPwaPxaPyaPyaPzaPyaPyaPyaPAaPyaPyaPyaPyaPBaPCazYaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaanSaPDaPEaBDaPFaPGaPHaPIaPJaPKaPLaPMaPMaPNaPOaPPaPQaKbaKbaKbaPRaPSaPTaPUaPVaPSaPRaPWaPXaPYaPZaQaaQaaQbaQcaQdaQeaQfaQgaQhaQaaQaaQiaQjaQkaQlaQmaQnaQoaQpaQpaQpaQqaQraQpaQsaQtaQuaQvaQwaQlaQxaQyaQzaQzaQzaQzaQzaQzaQzaQAaQBaQlaQlaQCaQlaxSaQDaQEaQFaQGaQHaQIaQJaCaaCaaQKaQLaQMaQNaQOanlanlaQPaQPaQPaQPaQPaQPaQPaQQajUawMahvaPbaCLasHaQRaQSaQTaQUaQVaQWaQXaQYaDSaQZaRaaRbaRcatRameatZatZatZatZatZameazXayzasMazXazZazZazZazZazZazXazXaPbazXazXazXazXazXaRdazXaReaRfaRgaRhaRhaRiaCPaRjazYaMFaRkaCVaRlaRmaJUaCVaCVaCPazYaRnaRoazYazYazYazYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaaaaaaaaaaaaaaanRaRpaRqaBDaBDaDeaRraRsaBDaBDaBDaBDaBDaBDaBDaRtaRuaRvaMQaMRaBDaRwaRxaRyaRxaRzaBDaRAaRBaHnaRCaRDaREaRFaRGaRHaHvaRIaRJaRKaRLaRMaHvaRNaROaRPaRPaROaRQaRPaRRaRSaRTaRUaRVaRVaRVaRVaRVaRWaRWaRWaRWaRWaRWaRWaRWaRWaRWaRWaRXaRXaRXaRXaRYaRZakyaSaaSbaScakyakyakyakyaSdaSdaSdaSeaSfaSgaSdaSdaSdaShaSiaSjaSkaSlaSmaQPaSnaydaSoahvaPbaCKasHasHaSpaSqayuaSraSpaSqayuaPlayuaPlayuaSratRameamcameameameamcameazXayzasMameamcamcameamcamcameazXaSsazXaStapPaStapPaRdazXaSuaSvaSwaCLaSxaSyaSyaSyaSyaSyaSyaSyaSyaSyaSyaSyazYazYazYaRnaSzazYaSAaSBazYazYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaeaaeaaaaaaaaaaaaanRaqhaFDaBDaSCaSDaSEaSFaSGaLPaSHaSIaBDaSJaBDaLQaLRaBDaLPaLPaBDaBDaLPaLPaLPaBDaBDaSKaLUaLVaHnaHnaHnaHnaSLaSMaHvaHvaHvaHvaHvaHvaHvaKxaROaSNaSOaSPaSQaRPaRRaRSaSRaRUaRVaSSaSSaSSaRVaRWaSTaSUaSVaSTaSWaSTaSXaSYaSTaSZaTaaTbaTcaRXaRYaKFakyaTdaTeaTfakyaTgajDakyaThaTiaTjaTkaTlaTmaTnaToaQKaTpaTqaTraTsaTtaTuaTvaPaajUawMahvaPbazXameameaTwamcaTxameaTwamcaTxameaTxamcaTxameameameazXazXazZazZazXazXazXayzavMamcaTyaTzaTzaTzaTAamcazZaPbazZapPaTBapPapPaRdazXaTCaTCaTCaTCaTCaSyaTDaTEaTFaTGaTHaTIaTJaTKaTLaTMaTNaTOazYaTPaTQaTRaTSaTTaTUazYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaeanRanRanRanRanRaqhaFDaBDaTVaTWaTXaTYaTZaUaaUbaUcaUdaUeaUfaUgaUhaUiaUjaUjaUkaUlaUlaUmaUnaUjaUoaUpaUqaUraUsaUtaUuaUjaUvaUwaUxaUyaUzaQlaQxaQlaQlaUAaROaRPaRPaSPaUBaRPaRRaRSaSRaUCaRVaUDaUDaUEaRVaRWaSTaUFaUGaUHaUIaUHaUJaUKaSTaSZaULaUMaUNaRXaRYaUOakyaUPaUQaURakyakJaUSaOMaUTaUTaUUaUVaUWaUXaOPaUYaUZaVaaVbaVcaVdaVeaVfaTvaPaajUawMahvaPbazXamcatZaVgatRaVhatZaVgatRaVhatZaViatRaVjatZamcazXaCKaVkapQapRapRapRapRaVmavMamcaVnaVoaVpaVqaVramcazZaPbazXaStapPaStazXaRdaVsaTCaVtaVuaVvaVwaSyaVxaVxaVyaVzaVAaVBaVCaVDaVEaSyaTNaTNazYaRnaVFaCPaVGaCVaCVazYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaanRaVHaVIaVJanRaqhaFDaBDaVKaVLaVMaVNaVOaPOaVPaVQaVRaVSaVTaVUaVVaVWaVWaVXaVYaVZaWaaWbaWcaWdaWeaWfaWgaWhaWiaVWaWjaWkaWlaWmaWnaWoaWpaWqaWraWqaWsaWtaWuaWvaWwaWxaWyaRPaRRaRSaSRaRUaRVaWzaWAaWBaRVaRWaWCaSTaSTaWDaWEaWFaSTaSTaWGaSZaWHaWIaWJaRXaWKaWLakyaWMaWNaWOakyaWPatGakyaWQaWRaWSaWTaWUaWVaWWaWXaWYaWZaXaaXbaXcaXdaXeaTvaPaajUawMahvaXfazXameatZaXgaXhaXiatZaXjaXkaXlatZaXmaXnaXoatZameazXaSvaXpaXqaPpaPpaPpaPpcQMcQLameaVnaXsaXtaXuaVrameazXaPbazXazXapPaCKazXaRdapPaXvaXwaXxaXyaXwaXzaVxaVxaXAaVxaXBaXCaXDaVxaVxaSyaXEaXFazYaRnaSzazYaVGaCVaCVazYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaanRauqaXGaVJanRaXHaFDaBDaXIaXJaXKaXLaXMaLPaXNaXOaXPaXPaXQaXRaXSaXPaXPaXPaXTaXUaXVaXWaXXaXYaXTaXTaIQaXZaYaaIQaYbaYcaYdaYeaYcaYcaYcaYcaYcaYcaYcaKxaRPaRPaRPaSPaUBaRPaYfaYfaYgaYhaYiaYjaYkaYlaYmaRWaYnaWCaYoaYpaYqaYraYsaWGaSZaSZaSZaYtaYuaRXaYvaYwaYxaYyaYzaYAaYxaYwatGakyakyakyakyaYBaYBaYBakyakyakyaShaYCaYDaYEaYFaYGaQPaPaajUawMahvaPbazZameatZaYHaYIaYHatZaYJaYKaYJatZaYLaYMaYNatZameazZaSwaYOayzaYPaYPaYPaYPaYPaYPaYPaYQaYRaYSaYTaYUaYPazXaXfazXaYVaYWapPaFxaYXaYYaTCaYZaZaaZbaZcaSyaVxaZdaZeaVxaZfaXCaZgaZhaVxaSyaTNaZiazYaZjaSzazYaZkaTTaZlazYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaanRaoqauqaZmanRaqhaZnaBDaBDaFFaZoaBDaBDaBDaBDaBDaXPaZpaZqaZraZsaZtaZuaZvaZwaZxaZyaZzaZAaZBaZCaXTaZDaZEaZFaZGaZHaYcaZIaZJaZKaZLaZMaZNaZOaZNaYcaKxaRPaWvaZPaSPaZQaRPaZRaYlaZSaZTaZUaZVaZWaYlaZXaRWaZYaZZbaababbacbadbaebafbagbahbaibajbakaRXaYvaYwbalbambanbaobapaYwatGakybaqbaqbaqatwatwatwbarbasbatakybauaQPaQPaQPaQPaQPbavajUbawahvaPbazZameatZaYHbaxaYHatZaYJbayaYJatZaYNbazaYNatZameazZapPaYOayzaYPbaAbaBbaCbaBbaBbaDbaEbaFbaGbaHbaIaYPbaJbaKaRgaRhbaLaRhaRhaRiaTCaTCbaMbaNbaOaTCaSyaVxbaPbaQbaRbaSbaTbaUbaVaVxaSybaWbaXazYaRnbaYazYbaZbbaaCVazYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaanRaxmauqausbbbbbcbbdbbearjbbfbbgbbhbbibbjarjbbkbblbbmbbnbbobbpbbpbbqbbrbbsaUybbtbbubbvbbwbbxbbybbzbbAbbBbbyaYcaYcbbCbbDbbEaZNbbEaZNbbEaZNaYcaKxaRPaRPaRPaSPaUBaRPaZRaYlbbFbbGbbHbbIbbJaYlbbKaRWbbLbbMbbNbbObbPbbQbbRbbSaSZbbTaSZbbUbbVaRXaYvaYwbbWbbXbbYbbZbcaaYwatGakyatwatwatwatwatwatwatwatwatwakybcbbccajDbcdbcdahtaPaaJwbceahvaPbazXamcatZatZatZatZatZatZatZatZatZatZatZatZatZamcazXapPaYOayzaYPbcfbcgbchbcibcjbckbclbcmbckbcnbcoaYPbcpbcpbcpbcpaPbazXaCLazXaTCbcqbcraZaaZbbcsaSybctbctbctbctbcubcvbctbctbctaSyaTNaZiazYaRnaSzazYaZkaTTbcwazYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaabaaaaaaanRbcxbcyauqanRauqbczbcAaAmbcBbcCbcDbcEaAmaAmbcFbcGbcHbcIbcJbcKbcLbcMbcNbcObcPbbtbcQbcRbcSaIQbbzbcTbcUbcVbbybcWaYcbcXbcYbcZbcZbcZbcZbcZbcZbdabdbaRPaWvbdcbddbdeaRPbdfaYlbdgbdhbdibdjbdkaYlbdlaRWbdmaSTaSTbdnaUHbdoaSTaSTbbSbdpbdqbdrbdsaRXaYvaYwbdtbdubdvbdwbdxbdyatGakybdzbdzbdzbdzbdAbdBbdBbdBbdBakyajDaAGajDalSbdCahvaPaajUbdDahvaPbazXameamcameameameamcameameameamcameameameamcameazXapPaYOayzaYPbdEbaBbaBbdFbaBbdGbdHbdHbdIbaBbdJaYPbdKbdLbdMbcpaPbaCKapPbdNaTCbdObdPbdQbdRbdSaSybdTbdUbdUbdUbdVbdWbdUbdUbdTaSybdXbdYazYaRnaSzaCPaVGbdZaMFazYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeanRanSanRanRanRauqbeabebbecbedbeeauqbefauqauuauvaXPbegbehbcHbeibcHbejbekbelbemaKsbenbeobepaIQbbzbeqberbesbbybetaYcbeuaZNbbEaZNbbEaZNbbEaZNaYcaKxaRPaRPaRPaSPaUBaRPbevaYlaYlaRUbewbexbeyaYlbezaRWaSTbeAbeBaUHbeCaUHbeDbeEaSTbdpbeFbeGbeHaRXaYvaYwbeIbeJbeKbalbeLaYwatGakyakyakyakyakyakyakyakyakyakyakyajPbeMbeNbeObePbeQbeRbeSbeTbeUaPbazXazXazXbeVarZarZarZarZarZarZarZarZarZarZarXarXarXbeWbeXbeYaYPbeZbfabfbbfcbfdbfebffbfgbfgbfhbfiaYPbfjbfkbflbcpaPbazXapPbfmaXvaXwbfnbfobfpbfqaSybfrbdUbdUbdUbfsbftbfubfubfvaSybfwaZiazYaRnaSzazYbfxaMFaMFazYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaeanRauqbfybefbfzbfAaweauqbfBbfCbfDbfEaXPbfFbfGbfHbfIbfJbfKaZvbfLbfMbfNbfObfPbfQbfRbbzbfSbfTbfUbbybfVaYcbfWbfXbfYbfZbgaaZNbgbaZNaYcaKxaRPaWvbgcaSPaSQaRPaZRaYlbgdaRUaYkbgebgfaYlbggaRWaSTbghbgiaSTbgjaSTbgkbglaSTbgmbgnbeGbgoaRXaYvaYwbgpbgqbgrbgsbgtaYwatGbguajQajQajQakLakKbgvajQajQajQajQajQajQajDajGajSahvbgwbgxbgyahvaReaRhbgzaRhbgAbgBaqJaqJaqJaqJaqJbgCaqJaqJaqJaqJaqJaqJaqJbgDbgEaYPbgFbaBbgGbgHbdHbgIbgJbgKbgLbgMbgNaYPbgObgPbgQbcpaPbazXbgRbgSaTCbgTaXwbgUaZbbgVaSybgWbgXbgYbgZbhabhbbhcbdTbdTaSybfwbdYazYaRnaTQaTRbhdbhebhfazYaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaanRanRanRauqbfybefbhgbhhbhibhgbhgbhgbhgbhgaXPaXPaXPaXPaXPaXPaXPbhjbhkbhkbhlbhmbhnbhkbhkbhobbybbybbybbyaYcaYcaYcbhpaYcaYcaYcaYcaYcaYcaYcbhqaRPaRPaRPaRObhraRPaRVaRVaRVbhsbhtbhuaRVaRVaRVaRWaRWaRWaRWaRWaRWaRWaRWaRWaRWaRWaRXbhvbhwaRXaRQaYwbhxbhybhzbhybhAaYwbhBbhgbhgbhgbhgbhgbhgbhgbhgbhgbhgbhgbhgbhgbhgbhgbhgbhCbhDbhEbhFbhCbhGbhGbhGbhGbhHbhIbhGbhGbhGbhGbhGbhGbhGbhGbhGbhGbhGbhGbhGbhGbhGaYPaYPaYPbhJbhKaYPaYPaYPaYPaYPaYPaYPaYPbhLbhMbhNbcpbhOazXazXazXaTCbhPbhPbhQbhRbhPaSyaSyaSyaSybhSbhTbhUaSyaSyaSyaSybhVbhWazYaRnbhXazYbhYbhZazYazYaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaanRanRanRauqbfybefbhgbhhbhibhgbhgbhgbhgbhgaXPaXPaXPaXPaXPaXPaXPbhjbhkbhkbhlbhmbhnbhkbhkbhobbybbybbybbyaYcaYcaYcbhpaYcaYcaYcaYcaYcaYcaYcbhqaRPaRPaRPaRObhraRPaRVaRVaRVbhsbhtbhuaRVaRVaRVaRWaRWaRWaRWaRWaRWaRWaRWaRWaRWaRWaRXbhvbhwaRXaRQaYwbhxbhybhzbhybhAaYwbhBbhgbhgbhgbhgbhgbhgbhgbhgbhgbhgbhgbhgbhgbhgbhgbhgbhCcQPcQScQQbhCbhGbhGbhGbhGbhHbhIbhGbhGbhGbhGbhGbhGbhGbhGbhGbhGbhGbhGbhGbhGbhGaYPaYPaYPbhJbhKaYPaYPaYPaYPaYPaYPaYPaYPbhLbhMbhNbcpbhOazXazXazXaTCbhPbhPbhQbhRbhPaSyaSyaSyaSybhSbhTbhUaSyaSyaSyaSybhVbhWazYaRnbhXazYbhYbhZazYazYaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaabaaaaaaaaaaaeaaaaaaaaaaaaaaeaaaaaaaaeaaeaaeaaeanRbiaanRbibbfybicbhgbidbiebifbigbigbihbiibigbijbijbijbijbijbijbijbikbilbimbilbinbilbiobipbiobiqbiobiobirbiqbijbimbiobisbitbigbigbigbigbiubiibigbigbivbiwbixbiybigbizbiAbiBbiCbixbigbigbigbigbiDbiEbigbiFbigbigbigbiybiGbiGbiHbiIbiGbiJbiGbiJbiGbiKbiLbiMbiNbiObiLbiLbiLbiPbiLbigbigbigbiibigbihbigbigbigbigbiybiQbiRbiSbiTbiUbiVbiWbiWbiWbiXbiYbiWbiWbiZbjabjbbiWbiWbiWbiWbiWbjcbiWbiWbiWbjdbjebiWbjfbjgbjhbiWbiVbiWbiWbjdbiWbiWbiWbjibjjbjkbiWbjlbiWbjmbiWbjnbiWbjobjpbjqbiWbjrbjsbjtbjubjvbjwbjxbjybjzbjAahvbjBbjCaCPbjDbjEbjFbjFbjFbjFaaaaaaaaeaaeaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafvafvafvafvafvafvafvafvafvafvafvafvafvafvafvafvafvarhauqarhauqbfyaxmbhgbjGbjHbjIbjIbjIbjIbjJbjIbjKbjIbjIbjIbjIbjIbjIbjLbjIbjMbjIbjNbjIbjIbjObjIbjIbjIbjIbjJbjIbjKbjMbjIbjIbjIbjIbjIbjIbjIbjPbjQbjRbjRbjSbjRbjTbjUbjRbjRbjQbjVbjWbjXbjRbjRbjRbjRbjRbjYbjRbjRbjRbjRbjRbjUbjRbjRbjZbjSbjRbkabjXbjQbjRbkbbjIbjMbjIbkcbjIbjIbjIbjIbjIbjIbjIbjIbjLbjIbjIbjIbjIbjIbjIbkdbkebkfbkgbkhbkebkibkjbkjbkjbkkbkjbkjbklbkjbkmbknbkjbkjbkjbkjbkjbkjbkjbkjbkjbkobkjbkjbkjbkpbkqbkjbkrbkjbkmbknbkjbkjbkjbkqbklbkjbkjbkpbkjbkpbkjbkjbkjbkjbkjbkqbksbktbkubkobkjbkjbkjbkqbkjbkjbkvbkwbkxbkybkwbkzbkAbkBbkCbkDbjFaaaaabaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaeafvaaeaaeaaaanRanRanRauBbkEbkFbhgbkGbkHbkIbkJbkJbkKbkLbkMbkNbkJbkJbkJbkObkJbkJbkJbkJbkPbkQbkRbkSbkTbkUbkTbkTbkVbkTbkWbkTbkXbkYbkTbkTbkZbkTbkTbkTbkTblablbblcbldbkXbkTblebkUblfblgbkWblhblibljblfbkTblkbkTbkTbllbkTbkTbkTbkTblmbkUbkTblnbkTbkXbkTblobkXblpblqblrblsbkYbkTbkXbkTbkTbkTbkTbkTblhblhblhbkTbltblubkVbkTbkTbkTbkUblvblwblxblyblzblAblBblCblDblEblFblBblGblHblIblJblKblBblBblCblBblBblLblBblBblBblBblBblBblBblMblNblAblOblPblQblBblBblBblMblRblSblOblTblUblBblOblTblUblBblOblVblTblWblXblYblZbmabmbbmcblZbmabmbbmdbmebmfbmgbmhbmibmjbmkbmlbjFbjFbjFbjFbjFbjFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -7807,7 +7807,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpTbpRbyrbLZbLZbLZbMabwsbwsbwsbwubwvbnCbnCbnCbwwbnCbMbbwybnCbnDbMcbMdbqabMebMfbMgbmtbMhbMhbnKbnLbIMbIMbnSbnSbMibMjbnSbMkbmtbMlbwJbMmbMnbnXbEtbKubMobMpbMqbMpbMrbKubAFbAGbAGbAGbAGbAGbAGbAGbAGbAGbAGbAGbAGbAGbMsbAGborborboqborbosborborbMtbmHbMubmHbmHbmHbmIbMvbmIbmHbMwbmHbMxbMyboOboKboFbMzbMzbMzbMAbMzbMzbMzbMBbtnameamebxjbJwbJwbxlbJwbJwbxjameameamcameamcbxmbxnbxoboQbMCbJCbMDbMEbMFbMGbMHbJCbMIbMJbMKbMLbMMbMNbMObMPbMKbMQbMRbMSbMTbMUbMVbMWbMXbMYbMZbNabNbbNcbtCamebzYbNdbNebNfbNgbNhbNibNjbNkbNlbNmbDFbNnbNobNobNobNpbNqbNrbNsbNtbNtbLLbNubNvbNwbNxbNybLLbNzbNAbNBbNCbNDbNEbNFbyhbyibNGbykbykbykbykbykbypbwfaaeafvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpPbpRbyrbLZbAsbNHbpPbNIbNIbNJbNKcRibuhbuhcRjbNNbNObNPbNQbNObNRbnDbNSbqabMebNTbsmbsnbsobsobspbsqbNUbNUbNUbNVbNWbnSbNXbNYbmtbsBbNZbsCbsBbOabObbKtbOcbOdbOebOfbOgbKtbOhbOibOjbOkbOibOlbOmbnXbnXbOnbOobmHbOpbopbOqbOrborborboqborbosborborborbOsbOsbOtbOubOvbOwbOxbOybOwbmHbmHboKbOzboObOAbOBbMzbOCbODbODbOEbOFbMzbMBbtnameameamcameameameameameamcameamebtnbtnbtnbhCbhCboPboQbMCbJCbOGbMFbMFbOHbOIbJCbOJbOKbOLbOMbONbOObOPbOQbMJbORbJGbOSbOTbOUbOUbOUbOVbOWbOWbOXbOYbOZbtCbPabPbbPcbPdbPebPfbPfbPfbPfbDDbPgbPhbPfbPibNtbNtbPjbPkbPlbPmbPnbNtbPobLLbPpbPqbPrbPsbPtbPubPvbPwbPxbPybPzbPAbAkbPBbAmbwfbykbykbPCbPDbPEbPFbwoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpTbpRbyrbyrbyrbyrbPGbNJbNJbPHbpTbnCbnCbnCbnCbPIbPJbPKbPLbPMbPNbPObPPbqabuqbqcbPQbutbuubuubuvbPRbIMbIMbnSbPSbPTbPUbPVbPWbmtbnXbnWbnXbnXbnXbEtbKubPXbPYbPZbQabQbbKtbQcbnXbQdbsCbyIbqkbQebsCbsCbsCbsCbmHbQfbCFbOqbQgbsVbsVbQhbsVbHebsVbsVbsVbQibQibQibQjbQkbQlbQmbQnbQobmHbQpboKbQqbQrbQsbQtbMzbQubQvbQwbQxbQybMzbMBbtnbtnbtnbtnbtnbtnbtnbtnbtnbtnbtnbtnbtnboKbQzbQAbhCboPboQbQBbJCbQCbQDbQEbQFbQGbJCbQHbMLbMLbJGbQIbQJbQKbQLbQMbQNbJGbtCbQObQPbQObQObQObQObQQbQObtGbtCbtCbQRbQSbQTbQUbQVbQWbQWbQWbQWbQXbQYbQZbRabRbbRcbRdbRebRfbRgbNtbNtbNtbNtbLLbRhbRibRjbRkbRlbLLbNzbRmbRnbRobRpbRqbwfbwfbBNbwfbRrbRsbBNbwfbwfbwfbwfaaeaaeaaeaaeafvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpPbRtbpSbpRbyrbRubpPbRvbRvbRvbpTaaaaaeaaabnCbRwbRxbRybRzbRxbRAbnDbRBbRCbRDbqcbREbmtbRFbnSbnKbnLbqgbqgbqgbqgbqgbqgbqgbqgbRGbnXbnXbnXbnXbEsbEtbKtbOcbRHbRIbRJbOgbKubRKbRLbRLbRLbRLbRMbRNbRObRObRPbnXbmHbOpbopbOqbRQbqFbqFbqGbqFbqHcCqbqFbqFbRRbRRbRRbRRbRSbRTbRUbRUbRVbmHboKboKboKboObRWbRXbMzbRYbRZbODbSabSbbMzbScbSdbzebSebzebzebSfbzebzebzebSgbzebzebzebShbzebzebSibSjbSkbSlbSmbSnbSobSpbSqbSrbJDbSsbStbSubJGbSvbSwbSxbSybMQbSzbJGameamcameamcameameamcameamcameazYbSAbSBbSCbSDbSEbSFbSGbSHbSIbSJbSKbSLbSMbSNbJTbSObSObSPbSQbSRbSSbSTbSTbSTbLLbSUbSVbSWbPtbSXbLLbSYbSZbTabudbTbbTcbwfbTdbTebTfbTgbThbwfaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpPbRtbpSbpRbyrbRubpPbRvbRvbRvbpTaaaaaeaaabnCbRwbRxbRybRzbRxbRAbnDbRBbRCbRDbqcbREbmtbRFbnSbnKbnLbqgbqgbqgbqgbqgbqgbqgbqgbRGbnXbnXbnXbnXbEsbEtbKtbOcbRHbRIbRJbOgbKubRKbRLbRLbRLbRLbRMbRNbRObRObRPbnXbmHbOpbopbOqbRQbqFbqFbqGbqFbqHbqFbqFbqFbRRbRRbRRbRRbRSbRTbRUbRUbRVbmHboKboKboKboObRWbRXbMzbRYbRZbODbSabSbbMzbScbSdbzebSebzebzebSfbzebzebzebSgbzebzebzebShbzebzebSibSjbSkbSlbSmbSnbSobSpbSqbSrbJDbSsbStbSubJGbSvbSwbSxbSybMQbSzbJGameamcameamcameameamcameamcameazYbSAbSBbSCbSDbSEbSFbSGbSHbSIbSJbSKbSLbSMbSNbJTbSObSObSPbSQbSRbSSbSTbSTbSTbLLbSUbSVbSWbPtbSXbLLbSYbSZbTabudbTbbTcbwfbTdbTebTfbTgbThbwfaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaabTibTjbwsbTkbTlbwsbnAbwsbwsbTjbTmaaaaaeaaabnCbnCbnCbnDbnDbnDbnDbnDbnDbnDbnFbnGbnHbmtbTnbTobnKbTpbTqbTrbTsbTtbTubPVbTvbnNbmtbTwbTwbTxbnXbnXbEtbKubTybTzbTAbTBbTCbKtbqkbTDbnXbTEbTEbTEbTEbTEbTEbTFbOibTGbTHbTHbTIbTJborborboqborbTKbTHbTHbTLbTMbTNbTObTPbTQbTRbTSbTTbOwbTUboKboKbTVbTWboKboFbMzbMzbTXbTYbTZbMzbMzboMboKboKbUaboJbTEbTEbTEbTEbTEbUbboKboKboKbTVbUcboKbhCboPboQbUdbJCbUebUfbUgbUhbUibJCbJGbJGbJGbJGbMQbMQbUjbUkbUlbUmbJGbUnbUobUobUobUobUobUobUobUobUnbUnbUpbUqbzWbzWbzWbzWbzWbzWbzWbzWbzWbzWbzWbzWbJTbJTbJTbJTbJTbJTbJTbJTbJTbJTbLLbUrbUsbUtbUubUvbLLbwfbwfbwfbudbUwbUxbwfbBNbwfbwfbwfbwfbwfaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpTbUybUzbyrbUAbUBbUCbUDbpTaaaaaeaaeaaebUEbUFbUGbUHbUGbUHbUGbUIbUJbTEbUKbULbUMbmtbmubmtbmvbmwbmtbmubmtbmtbmtbmtbmtbmtbmtbTEbTEbTEbTEbTEbUNbKubUObUPbUQbURbUObKubUSbTEbTEbTEbUTbUUbUVbUWbTEbUXbTEbmHbmHbmHbmHbmHbmHbmIbmJbmIbUYbmIbmLbmHbmHbmHbmHbmHbmHbmHbmHbmHbmHbmHbTEbTEbTEbTEbTEbmNbTEbUZbVabVbbVcbVdbTEbTEbTEbTEbTEbTEbTEbVebVfbVgbTEbTEbhCbrdbhCbhCbhCbhCbhCbVhbVibVjbJCbJCbJCbJCbJCbVkbJCbVlbVmbVnbJGbJGbJGbJGbJGbJGbJGbJGbVobVpbVpbVpbVpbVpbVpbVpbVpbVqbUnbVrbVsbUnbUnaaaaaeaaaaaeaaaaaaaaaaaaaaaaaaaaeaaaaaeaaabVtbVubVtaaaaaeaaebLLbVvbVvbVvbVvbVvbLLafvbVwbVxbVwbVxbwfbVybVzbVzbVAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpTbVBbUzbyrbyrbyrbVCbVDbpTaaaaaaaaeaaabUEbVEbVFbVGbVFbVGbVHbUIbVIbTEbVJbVKbVLbVMbVMbVNbVObVPbVQbVMbVMbVMbVRbVMbVMbVSbVTbVMbVMbVMbVMbVUbVVbVWbVXbVYbVZbWabWbbWcbWdbVMbVMbVMbWebWebWebWebVSbWfbVMbWgbVMbVSbVMbVUbWhbWibVObWebWjbWkbVMbVMbVMbVMbVMbVSbVSbVMbVMbWlbVMbVUbWgbVMbVMbVMbVMbWmbVMbVMbVObVMbWnbVMbWobVMbWpbVMbVMbVMbWqbWebWebWebVMbVUbiQbWrbWsbWtbWsbWubWsbWvbCYbWwbWxbWybWzbWAbWBbWCbWDbWEbWFbWFbWGbWHbWIbWGbWGbWGbWGbWGbWJbWGbWGbWKbWKbWGbWGbWGbWGbWLbWMbWNbWObWPbUnbUnbUnbUnbUnbUnbUobUobUobUobUnbUnbUnbUnbUnbUnaaaaaeaaaaaaaaeaaeaaaaaaaaeaaaaaaaaeafvbwfbwfbwfbWQbUwbWRbWSbWTbWUbWVaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -7818,7 +7818,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaebUIbUIbUIccWccXccYccWccWccWccWccWccZbZIcdacdbcdacdccdacdccbgcddcbacdebUIcdfcbjcdgcdgcdgcdhcbjcdicdjcdkcdlcdmbKtcdncdocdpcdqcdrbKucbsbZWcdscdtcducdvcducducbzcdwbZWcdxcaacdycdzcdAcdBcdCcdDcdEcdFcdCcdGcdHcdIcdJcaacdKcdLcdMcdNcaecbScdOcbUcdPcdQcdRcdScdTcdUcbUcdVcdWcdXccacdYcdZceacebceccedceecefcegcehceicejcekcelcemamcamcameamecenceocepameameamcamcceqcercaEcescaEcetceucevcewcewcewcewcewcexceycezceAceAceBcczcewcewceCcaEceDceEceFceGceEceHceIceJceKccKceLceLceLceMccKceNcaSceOcePceOceOceQceRceSceTccVaaaaaaafvaaeaaeaaeafvaaeaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaccWceUceVceWceXceYceZcfaccZbZIcfbcfccfbcfccfbcfccbgcbhcfdcfebUIcdfcbjcffcfgcfhcficfjcfkcflcdxcfmcfnbKtcfocfpcfqcfrcfsbKucbscftcfucdtcducducfvcducbzcfwbZWcdxcaacaacaacaacaacfxcfycfzcfAcfBcaacaacaacaacaacfCcfDcfEcfFcaecbScfGcbUcfHcfIcfJcfKcfLcfMcbUcfNcfOcfPccacfQcfRcfRcfScfTcfUcfVcfWcfXcfYcfZcgaccfcelcemamcamcamcamecenceocepameamcamcamcceqcercaEcgbcaEcgccewcewcgdcgecgfcewcewcggcaHcghcewcgicgjcgkcglcgmcgncaEcgocgpccDccCccCcgqcgoccCccCccKcgrcgscgtcguccKcgvcaScgwcgxcgycgzcgAcgBcgCcgDccVaaaaaaaaaaaaaaeaaeafvaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeccWceUcgEcgFcgGcgHcgFcgIcgJcgKcgLcgLcgLcgLcgLcgLcgMcbhcgNcgNbUIcdfcbjcbjcbjcbjcbjcbjcgOcgPcgQcgRcgObKubKubKtbKubKubKtbKucbsbZWcgScgTcgUcducdvcgVcgWcgXbZWcdxcaacgYcgZchacbFchbchcchdchechfcbFchgchhcbNcaachicfDchjchkcaecbSchlcbUchmcfIchnchochpchqcbUcamchrcaoccachschtchuchuchvchwchxchychzchAchBchCccfcelcemameamcchDchDchEchFchGchDchDamcameceqcercaEchHchIcewcewcewcczcewchJchKchKchLchMchNchOchOchPchQchKchKchKchRchSchTchUchVchWchXchYchZciaccKccKccKccJccKccKcibciccidciecifcigcihccVccVccVciiaaaaaaaaaaaaaaaaaeafvaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccWccWccWcijcikcilcimcinccZciocgNcgNcgNcgNcgNcgNcbgcbhcQLcgNbUIcipciqcirciscisciscisciscitciucivcivcivcivciwcixciycizciAciBciCciDciEciFciGciHciIciJciKciLciMcaacdycdzcdAciNcdCciOciPciQcdCciRcdHcdIcdJcaaciSciTcagcaecaecbScdOcbUciUciVciWciWciWciWciXciYciZcjacjbcjccjdcjecjfcjgcjhcjicjjcjkcjlcjmcjnccfcelcemameamechDcjocjpcjqcjrcjschDameameceqcercaEchHcjtcewcewcjucjvcjwcjxcjxcjycjzcjAcjBcjCcjDcjxcjEcjxcjxcjFcjGcjHcjIcjJcjKcjLcjLcjLcjLcjLcjMcjNcjOcjNcjNcjNcjPcaScjQcjRcjScjTcjUcjVcjWcjXcjYaaaaaaaaaaaaaaaaaeaaeaaeaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccWccWccWcijcikcilcimcinccZciocgNcgNcgNcgNcgNcgNcbgcbhcgNcgNbUIcipciqcirciscisciscisciscitciucivcivcivcivciwcixciycizciAciBciCciDciEciFciGciHciIciJciKciLciMcaacdycdzcdAciNcdCciOciPciQcdCciRcdHcdIcdJcaaciSciTcagcaecaecbScdOcbUciUciVciWciWciWciWciXciYciZcjacjbcjccjdcjecjfcjgcjhcjicjjcjkcjlcjmcjnccfcelcemameamechDcjocjpcjqcjrcjschDameameceqcercaEchHcjtcewcewcjucjvcjwcjxcjxcjycjzcjAcjBcjCcjDcjxcjEcjxcjxcjFcjGcjHcjIcjJcjKcjLcjLcjLcjLcjLcjMcjNcjOcjNcjNcjNcjPcaScjQcjRcjScjTcjUcjVcjWcjXcjYaaaaaaaaaaaaaaaaaeaaeaaeaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeccWcjZckackbckcckdckeckfcbackgckhckgckhckgckhckickjcfdcfebUIcdfckkcklckmckncknckmckmckockpckqckrckscksckscktcksckuckvckwbZWbZWbZWbZWbZWbZWbZWbZWbZWbZWckxcaacaacaacaacaackyckzckAcfAckBcaacaacaacaacaackCckDckEcdOcdOcbScdOckFckGckHckIckJckKckLckMckNckOckPckQckRckSckTckUckVckWcjbckXckYckZclaclbccfclccldbztbztcleclfclgclhclicljclebztbztclkcercaEchHcllclmclncaEcaEcaEcaEclocaEclpcaHclqclrclscaHcltcltcltclucluclvclwclxclychXchXchXclzchXclAclBclBclCclBclDclEcaScaScaSclFcaSciiciicihciiciiaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeccWclGclHclIclJceZcinbZIclKcfbcfcclLcfccfbcfcclMclNclOclPbUIclQckxcgOamcamcameamcclRclSclRclRclTclRclSclRclRclUclVclWclXclYclYclZcmacmbcgOcmccmdcmecmfcmgcaacbCcmhcmicbFcmjcbHcbIcbJcmkcbFcmlcmmcmncaacmocmpcmqcmrcmrcmscdOcbUcmtcmucmvcmwcmxcmycmzcmAcmBcmCcmDcmEcmFcmGcmHcmIcmJccacmKcmKcmKcmKcmKcmKccgcmLamccmMchDcmNcmOcmPcmQcmRchDamcamccmScmTcaEcmUcmVcmVcmVcmWcmXcmYcmZcnacaEcnbcnccndcnecnfcngcltcnhcnicnjclucnkcnlcnmccCccCccCccCccCccCccCccCccCccCcnncnocgvclvcnpcnpchZciaccCcnqchZcnrcnsaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccWccWccWcntcnuccWcnvccWcnwbUIcbebZIbZIcnxcnybZIcbgcbhbZIcbebUIcdfckxcgOamcameamcamcclRcnzcnAcnBcnCcnDcnEcnFclRcnGcnHcnIcnJcnKcnKcnLcnMcnNcnOcnPcnQcnQcnRcnScaacdycdzcdAcnTcnUcdDcnVcdFcdCcnWcdAcnXcdycaacnYckDcnZcdOcdOcoacobcbUcoccodcoecofcogcohcoicojcokcolcomconcoocopcoqcorcoscotcoucovcowcoxcoycozcoAcoBbKWbKWcoCcoDcoEcoFcoGcoHcoCbKWbKWcoIcoJcaEcaEcaEcaEcaEcaEcaEcaEcoKcoLcoMcoNcoOcoPcoQcoRcoScoTcoUcoVcoWclucoXcoYcoZcoXaaaaaeaaaaaaaaaaaaaaaaaaccCchZcpacpbclBcpccpdcpecpecpfcpecpgchZcnsaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -7831,20 +7831,20 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaecyCcyDcdlcdlcyCaaeaaaaaaaaecgOcdlcdlcqVcgOaaaaaaaaacyEcyEcRlcyEcyEaaaaaaaaacgOcdlclRclRclRclSclRclRclRclRclRcnGcwhcyGcnGcnGcnGcpFcrrcdlcyHcwlcxCcxDcxDcxDcxDcxDcxCcyIcyJcyKcyLcyKcyMcyNcyOcyPcwlcdOcwrcpPccgcyQcpPcpPcpPcpQcpQcyRcyScpQcxUcxUcxUcxUcyTcyUcyVcyWcyXcyXcyYcyZcyXcrTcrUczaczbczcczdczecrVccgczfczgczgczgczgczgcpPcnscnscnscnscnsccCcclcqoczhcziczjczkcqoczlczmczncznczoczpczqczrczscztczuczuczvczwczxczyczvaaaaaaaaaaaaaaeaaaczzcqIczAcqIczBaaaafvafvafvaaeaaaaaaaaaaaaczCczCcRmczCczCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaecxncdlczEczFcxnaaeaaeaaaaaecgOczGczHczIcgOaaaaaaaaaaaecyEczJcyEaaeaaaaaaaaacgOcvLczKcdlczHcdlcyDcdlczLcdlczKcdlcdlczMczNczOczPczQczRcwlcwlcwlcxCcxDcxDcxDcxDcxDcxCcxFczSczTczUczUczVczWczXczYcwlcdOczZcpPccgcpPcAacqdcqdcAbcAccAdcAecAfcAgcAgcAgcAhcAicAjcAkcAlcAlcAmcAncAocAlcApcAqcArcAscAtcAucAvcAwcAxcAyameameamcamcamcamcamcamcamcameamecnscclcqocqocAzcAAcqocqocABczmczncznczncACcADcAEcAFcAFcAFcAFcAGcAHcAIcAJczvaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaafvaaeaaaaaaaaaaaaaaeczCcAKczCaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaecxncALcAMcANcxnaaaaaeaaeaaecgOcgOcpscgOcgOaaaaaaaaeaaecyEcRlcyEaaeaaeaaaaaecgOcgOcgOcpscpscpscgOcpscpscpscgOcgOcgOcAOcgOcgOcgOcAPcrrcwlcAQcARcAScxDcxDcxDcxDcxDcAScxFczScATcAUcAUcAVcAWcAXcAYcwlcdOcwrcpPccgcpPcAZcBacBbcBccBdcBecBfcBgcBecBecBecBhcBicBjcBkcBecBecBecBlcBmcBecBncBocBpcBqcBrcBscBtcBucBvcBwamcameameamcamdamdamdamccBxameamccnscclcqucBycBzcBAcBBcBCcBDcBDcAFcBEcBFcBGcBHcBIcBJcBKcBKcBKcBLcBMcBNcBOczvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafvaaeaaaaaaaaaaaeaaeczCcRmczCaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaecxncxncxncxncxnaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaeaaeaaaaaacBPaaaaaaaaeaaeaaeaaeaaaaaeaaaaaaaaaaaaaaaaaeaaeaaaaaacgOcBQcgOaaeaaacBRcBScBTcBUcBVcBWcxDcxDcxDcxDcxDcBXcBYcBZcATcAUcCacCbcCccCdcCecwlcCfcwrcpPcCgcpPcChcwrcCicCjcCjcCkcClcClcClcClcClcClcCmcCncCocxUcCpcQMcCrcCscCtcxUcrVcCucCvcCwcCxcCycrVcCzcAyamcameamdamdamdaDxamdamdamdameamccnscclcqucCAczncCBcCCcCDcCEcCFcCGcCHcCGcCGcCIcCJcCKcCLczncCMczvcCNcCOcCPczvaaeaaeaaeaaeaaeaaeafvaaaaaaaaaaaaaaaaaaaaaafvaaeaaaaaaaaeaaeaaaaaacCQaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaecxncxncxncxncxnaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaeaaeaaaaaacBPaaaaaaaaeaaeaaeaaeaaaaaeaaaaaaaaaaaaaaaaaeaaeaaaaaacgOcBQcgOaaeaaacBRcBScBTcBUcBVcBWcxDcxDcxDcxDcxDcBXcBYcBZcATcAUcCacCbcCccCdcCecwlcCfcwrcpPcCgcpPcChcwrcCicCjcCjcCkcClcClcClcClcClcClcCmcCncCocxUcCpcRbcCrcCscCtcxUcrVcCucCvcCwcCxcCycrVcCzcAyamcameamdamdamdaDxamdamdamdameamccnscclcqucCAczncCBcCCcCDcCEcCFcCGcCHcCGcCGcCIcCJcCKcCLczncCMczvcCNcCOcCPczvaaeaaeaaeaaeaaeaaeafvaaaaaaaaaaaaaaaaaaaaaafvaaeaaaaaaaaeaaeaaaaaacCQaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaeaaeaaaaaaaaacBPaaaaaaaaaaaeaaeaaaaaaaaeaaaaaaaaaaaaaaeaaeaaeaaeaaecgOcCRcgOaaeaaacgOcCScCTcCUcCVcCWcxDcxDcxDcxDcxDcCXcCYcCZcDacDbcDbcDccAWcDdcDecwlcdOcwrcyQcDfcDgcDhczfcpPcDicDjcCkcDkcDlcDmcDncDlcClcDocDpcDqcDrcDscDtcDucDvcDscDrcDwcrVcrVcrVcrVcrVcrVcDxcDycDwcDrcDrcDrcDrcDrcDwcnsccCccCccCccCcclcqucDzcCKcDAcDBcDCcDDcDEcDFcDGcDHcDHcDHcDIcDJcDKcDLcDMczvcDNcDOcDPczvaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafvaaeaaaaaeaaeaaaaaaaaacDQaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaeaaeaaaaaaaaaaaacBPaaaaabaaaaaaaaeaaeaaaaaeaaaaaaaaaaaeaaeaaaaaaaaaaaeaaaafvaaaaaeaaacgOcdxcwlcDRcDScDTcxDcxDcxDcxDcxDcDTcxFczScDUcDVcDVcDVcDWczXcDXcwlcDYcDZcEacEbcEccEdctjcEecDicEfcCkcEgcEhcEicEjcEkcElcEmcBjcEncDtcEocEpcEqcErcEscEtcEucEvcEwcExcDwcEycEzcEAcEBcECcEDcEEcEFcEGcEHcDwcsnchZchZcEIctUcclcqucqucqucqucEJcqucEKcELcEMcENcENcEOczncEPcENcENcEQcERcyvcyvczvcEScyvaaeaaeaaeafvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafvaaeaaeaaeaaaaaaaaaaaacETaaaaabaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaeaacaaeaaeaaaaaaaaaaaaaaacBPaaaaaaaaaaaaaaaaaeaaeafvafvafvafvafvafvafvafvafvafvafvafvafvafvaaacgOcdxcEUcwlcwlcEVcxDcxDcxDcxDcxDcEVcEWcEXcEYcEYcEYcEYcEYcEZcFacwlcFbcFccFdcFecpPcdOcFfcdOcDicyQcCkcFgcFhcFicFjcFkcFlcFmcFncFocDtcFpcFqcFrcFscFtcFtcFtcFucFvcFwcFxcFycFzcFAcFBcFCcFDcFEcFFcFGcFHcDwcFIcpecFJcFKcFLcFMcFNcFNcFOcFNcFPchZcqucFQcFQcFQcFRcFScFTcFUcFVcFVcFVcDMcFWaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafvaaeaaeaaaaaaaaaaaaaaacETaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaecFXcFXcFXcFXcFYaaecFZaaecFYcGacGacGacGaaaeafvaaaaaeaaeaaaaaaaaaaaaaaaaaaaaeaaeaaeaaaaaacgOcGbcdlcGccwlcEVcxDcxDcxDcxDcxDcEVcwlcGdcGecxFcGfcxFcxFcGgcwlcwlcGhcpPcGicGjcpPcGkcpPcpPcDicGlcCkcGmcGncGocGocGpcClcGqcokcFocDtcGrcGscGtcGucGvcGwcGxcGycGzcGAcDwcGBcDrcDrcDycDwcGCcGDcGEcGFcGGcDwcnsccCcGHccCccCccCcgpccCctUctUcGIcGJcqucFWcFWcFWcGKcRncFWcRocGNcFWcFWcFWcFWaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafvaaecGOcGOcGOcGOcGPaaecETaaecGPcGQcGQcGQcGQaaeaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaeaaecGRcGScGScGTcGUcGVcGWcGXcGYcGYcGZafvafvafvaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacgOcdxcdlcgOcwlcEVcxDcxDcxDcxDcxDcEVcwlcwlcwlcwlcwlcwlcwlcHacwlcdOcGhcpPcwrcCzcpPcHbcHccpPcHdcHecCkcGmcGncGocGocHfcClcHgcpUcHhcDrcDrcDwcDwcDwcDwcHicDwcHjcHkcHlcDwccgchlcdOcHmcDwcHncGDcHocDrcDrcDramdccCcGHcnsamccnscHpchZcHqchZchZchZccCaaaaaacFWcHrcHscFWcHtcHucFWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafvafvafvcHvcHwcHwcHxcHycETcHzcHAcHBcHBcHCaaeaaeaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaecHDcHDcHDcHDcHEaaecHFaaecHEcHGcHGcHGcHGaaeaacaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacgOcdxcdlcgOamccHHcHIcHIcHJcHIcHIcHKamccpPcHLcdOcHMcHNcHNcHOcHPcHPcHQcpPcwrcCzcpPcpPcpPcpPcpPcpPcCjcxUcxUcxUcxUcxUcxUcHRcpUcFocDtamccHScHTcHUcHVcHWcHVcHXcHYcHZcDwccgcfGcdOcIacDwcIbcIccIdcIecIfcDramdccCcIgcnsamecnscIhchZchZchZchZchZccCaaaaaacIicGKcRncFWcRocGNcIiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaecIjcIjcIjcIjcIkaaecETaaecIkcIlcIlcIlcIlaaeaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaeaaaaaaaaaaaaaaaaaacGVaaeaaaaaaaaaaaaaaaaaeaacaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaacgOcdxcvLcgOamcamcameameameameameamcamccpPcdOcpPcImcIncpPcIocpPcIncpPcyQcIpcIqcpPcHbcIrcpPcIscHbcCjcItcIucIvcIwcIxcIycIzcuPcEncDtamccHScIAcIAcIBcICcIDcIEcIFcIGcDwccgcdOcdOcIHcDwcIIcGCcIJcDtcIKcDramcccCcILcnsamecnscsrchZcIMcINchZchZcIOcIPcIQcIQcIRcIScIQcITcIUcIQcIVcIWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaacaaeaaaaaaaaaaaaaaaaaacETaaeaaaaaaaaaaaaaaaaaeaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaeaaaaaaaaaaaaaaaaaacGVaaeaaaaaaaaaaaaaaaaaeaacaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaacgOcdxcvLcgOamcamcameameameameameamcamccpPcdOcpPcImcIncpPcIocpPcIncpPcyQcIpcIqcpPcHbcIrcpPcIscHbcCjcItcIucIvcIwcIxcIycIzcuPcEncDtamccHScIAcIAcIBcICcIDcIEcIFcIGcDwccgcdOcdOcIHcDwcIIcGCcIJcDtcIKcDramcccCcILcnsamecnscsrchZcIMcINchZchZcIOcIPcIQcIQcIRcIScIQcITcRccIQcIVcIWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaacaaeaaaaaaaaaaaaaaaaaacETaaeaaaaaaaaaaaaaaaaaeaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaecFXcFXcFXcFXcFYaaecGVaaecFYcGacGacGacGaaaecIXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacgOcdxcIYcgOcgOcgOcpscpscpscpscpscgOcgOcpPcdOcpPcpPcIncFfcyQcIZcJacpPcpPcJbcBvcEccJccEccJdcJecGkcCjcJfcJgcJhcJicJjcJkcJlcJmcFocDtamccHScIAcJncHVcJocHVcJpcJqcJrcDwccgcdOcdOcJscDwcJtcJucJvcDtcJwcDramcccCcJxcnsamccnscsqchZchZchZccEchZcIOcJycJzcJzcJzcJzcJAcJzcJzcJzcJBcJCcJDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaecGOcGOcGOcGOcGPaaecETaaecGPcGQcGQcGQcGQaaecIXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaeaaecGRcGScGScJEcGUcGVcGWcGXcGYcGYcGZaaeaaecIXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacgOcdicmfcJFcmfcJGcdlcdlcvLcdlcdlcJHcdlcJIcdOcJJcdOcdOcdOcdOcdOcdOcdOcJKcJLcJMcJNcJOcJOcJOcJPcJQcJRcJhcJScJTcJUcJVcJWcJXcJYcJZcDwcDwcDwcDwcDwcDwcKacDwcDwcKbcDwcDwcKccKdcGkcKecDwcDrcDrcDtcDrcKfcDramcccCcKgccCccCccCccCccCcKhcKicGIcGJcIOcJycJzcJzcJzcJzcJzcJzcJzcJzcJzcKjcJDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaeaaecHvcHwcHwcKkcHycETcHzcHAcHBcHBcHCaaeaaecKlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaecHDcHDcHDcHDcHEaaecGVaaecHEcHGcHGcHGcHGaaecIXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacgOcgOcgOcgOcgOcgOcpscpscpscpscpscgOcgOcpPcdOcyQcDicDicDicDicDicDicDicKmcKncKncDicDicDicDiczfcCzcCjcCjcCjcCjcCjcCjcCjcCjcKocaocDicKpcqdcqdcqdcqdcKqcKrcqdcqdcqdcqdcKscdOcwtcwrczgamcamcamcavaamdauWamcccCcKtcKuchZchZcKvclvchZchZchZchZcIOcJycJzcJzcJzcJzcJzcJzcJzcJzcJzcKjcJDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaecIjcIjcIjcIjcIkaaecETaaecIkcIlcIlcIlcIlaaecIXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaeaaaaaaaaaaaaaaaaaacGVaaaaaaaaaaaeaaeaaaaaecIXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaabaaaaaaaaeaaacpPcdOcdOcDicdOcdOcKwcdOcGkcdOcdOcdOcdOcKxcpPcKycKzcKAcKBcKCcKCcKDcKCcKCcKCcKEcKFcKGcKHcKIcKJcKKcHPcHPcHPcKLcKMcKNcKNcKNcKNcKOcEdcEdcuEcpPcpPccCcnscnscKPcnscnsccCcKQccCcvyccCccCccCccCcgpcaQccCcIOcJycJzcJzcJzcJzcJzcJzcJzcJzcJzcKjcJDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaeaaaaaaaaaaaaaaaaaacETaaaaaaaaaaaeaaeaaaaaecIXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaecFXcFXcFXcFXcFYaaecGVaaecFYcGacGacGacGaaaecIXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacKRaaeaaeaaeaaeaaeaaeaaecpPcdOckCcKScdOcKTcKUcdOcKVcdOcdOcdOcdOcKWcpPcdOcdOcKXcKYcKZcqdcqdcqdcLacqdcLbcLccLdcLecLbcLfcpPcpPcpPcpPcLgcIncLhcLicLjcpPcLkcLlcLlcLmcLncLncLocLpcLqcLrcLscLtcLocLucgpcxgccCaaaaabccCcLvchZcLwcIOcJycJzcJzcJzcJzcJzcJzcJzcJzcLxcJCcJDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaecGOcGOcGOcGOcGPaaecETaaecGPcGQcGQcGQcGQaaecIXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaeaaecGRcGScGScGTcGUcGVcGWcGXcGYcGYcGZaaeaaeaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaeaaaaaaaaacpPcdOcdOcDicKwcLycKTcdOcpPcoacdOcdOcLzcLAcyQcKwcLBcpPcdOckDcHbcLCcoacobcLDcDicLEcLFcLGcDicdOcLHcLIcLJcpPcLgcpPcpPcpPcpPcpPcpPcyQcpPcpPcpPcpPccCcnscnscKPcnscnsccCccCccCcvyccCaaaaaaccCclvcqNcLKcIOcLLcIQcIQcIQcIQcIQcIQcIQcIQcLMcLNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaeaaecHvcHwcHwcHxcHycETcHzcHAcHBcHBcHCaaeaaeaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaeaaaaaaaaaaaaaaaaaacGVaaaaaaaaaaaeaaeaaaaaecIXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaabaaaaaaaaeaaacpPcdOcdOcDicdOcdOcKwcdOcGkcdOcdOcdOcdOcKxcpPcKycKzcKAcKBcKCcKCcKDcKCcKCcKCcKEcKFcKGcKHcKIcKJcKKcHPcHPcHPcKLcKMcKNcKNcKNcKNcKOcEdcEdcuEcpPcpPccCcnscnscKPcnsccCccCcKQccCcvyccCccCccCccCcgpcaQccCcIOcJycJzcJzcJzcJzcJzcJzcJzcJzcJzcKjcJDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaeaaaaaaaaaaaaaaaaaacETaaaaaaaaaaaeaaeaaaaaecIXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaecFXcFXcFXcFXcFYaaecGVaaecFYcGacGacGacGaaaecIXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacKRaaeaaeaaeaaeaaeaaeaaecpPcdOckCcKScdOcKTcKUcdOcKVcdOcdOcdOcdOcKWcpPcdOcdOcKXcKYcKZcqdcqdcqdcLacqdcLbcLccLdcLecLbcLfcpPcpPcpPcpPcLgcIncLhcLicLjcpPcLkcLlcLlcLmcLncLncLocLpcLqcLrcLscRdcLocLucgpcxgccCaaaaabccCcLvchZcLwcIOcJycJzcJzcJzcJzcJzcJzcJzcJzcLxcJCcJDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaecGOcGOcGOcGOcGPaaecETaaecGPcGQcGQcGQcGQaaecIXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaeaaecGRcGScGScGTcGUcGVcGWcGXcGYcGYcGZaaeaaeaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaeaaaaaaaaacpPcdOcdOcDicKwcLycKTcdOcpPcoacdOcdOcLzcLAcyQcKwcLBcpPcdOckDcHbcLCcoacobcLDcDicLEcLFcLGcDicdOcLHcLIcLJcpPcLgcpPcpPcpPcpPcpPcpPcyQcpPcpPcpPcpPccCcnscnscKPcnsccCccCccCccCcvyccCaaaaaaccCclvcqNcLKcIOcLLcIQcIQcIQcIQcIQcIQcIQcIQcLMcLNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaeaaecHvcHwcHwcHxcHycETcHzcHAcHBcHBcHCaaeaaeaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaacHDcHDcHDcHDcHEaaecLOaaecHEcHGcHGcHGcHGaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaeaaaaaaaaacpPchlcdOcKmcdOcLPcKwcdOcpPcobcdOcdOcdOcLQcDicDicDicDicfGckDcLRcLRcLRcLRcLRcLRcLScLTcLUcLRcLRcLRcLRcLRcLRcLgcpPcLVcpPcLWcKwcdOcLXcLYczgaaaaaaaaaaaeamdatramdaaeaaaaaaaaaafvaaeaaeaaeccCcLZcMacMbccCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaacIjcIjcIjcIjcIkaaecMcaaecIkcIlcIlcIlcIlaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaeaaaaaacBPaaaaaaaaeaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaeaaaaaaaaacpPcMdcMecDicDicDicGkcGkcDiczgczgczgczgcpPcpPcMfcMgcDicpPcMhcLRcMicMjcMjcMkcMlcMmcMncMocMpcMqcMrcMrcMrcLRcLgcyQcMscpPcMtcdOcMucdOckCczgaaaaaaaaeaaeaaeaaaaaeaaeaaeaaaaaaafvaaaaaaaaeccCcnscnscnsccCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaeaaaaaacCQaaaaaaaaeaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaacaacaacaaeaaeaaaaaacBPaaaaaaaaeaaeaacaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaacpPcdOcdOcdOcdOcyQcLHcwscpPaaaaaeaaaaaecMvcDicDicDicDicMwckDcLRcMxcMycMrcMzcMAcMBcMCcMDcMEcMFcMrcMycMGcLRcLgcpPcpPcpPcpPcpPcpPcMHcMHcpPaaaaaeaaeaabaaaaaaaaaaaaaaeaaeaaaafvaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaaeaaeaaaaaacCQaaaaaaaaeaaeaacaacaadaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/_maps/map_files/MetaStation/MetaStation.v41I.dmm b/_maps/map_files/MetaStation/MetaStation.v41I.dmm
index b7d883d9037..0ad7a19ac98 100644
--- a/_maps/map_files/MetaStation/MetaStation.v41I.dmm
+++ b/_maps/map_files/MetaStation/MetaStation.v41I.dmm
@@ -245,7 +245,7 @@
"aeK" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plating,/area/crew_quarters/fitness{name = "\improper Recreation Area"})
"aeL" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/structure/lattice/catwalk,/turf/space,/area/solar/auxstarboard)
"aeM" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/auxsolarport)
-"aeN" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 4},/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/plasteel{icon_state = "vault"},/area/prison/solitary{name = "Prisoner Education Chamber"})
+"aeN" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 4},/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/plasteel{icon_state = "vault"},/area/prison/solitary{name = "Prisoner Education Chamber"})
"aeO" = (/obj/item/weapon/tank/internals/oxygen/red{pixel_x = -4; pixel_y = -1},/obj/item/weapon/tank/internals/oxygen/red{pixel_x = 4; pixel_y = -1},/obj/item/weapon/tank/internals/anesthetic{pixel_x = 2},/obj/item/weapon/storage/toolbox/mechanical,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/structure/closet/crate{icon_state = "crateopen"; opened = 1},/obj/machinery/atmospherics/pipe/manifold/general/visible,/obj/item/weapon/wrench,/turf/simulated/floor/plasteel{icon_state = "vault"},/area/prison/solitary{name = "Prisoner Education Chamber"})
"aeP" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 9},/obj/machinery/space_heater,/turf/simulated/floor/plasteel{icon_state = "vault"},/area/prison/solitary{name = "Prisoner Education Chamber"})
"aeQ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "redcorner"},/area/security/prison)
@@ -613,7 +613,7 @@
"alO" = (/obj/item/weapon/grown/log,/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"})
"alP" = (/obj/machinery/light_construct/small{dir = 4},/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/storage/secure/briefcase,/obj/item/weapon/disk/data,/obj/item/weapon/grenade/flashbang,/obj/effect/spawner/lootdrop/maintenance,/obj/item/weapon/grenade/smokebomb,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"})
"alQ" = (/turf/simulated/wall,/area/maintenance/fpmaint2{name = "Port Maintenance"})
-"alR" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/maintenance/fore)
+"alR" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/maintenance/fore)
"alS" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/reagent_containers/glass/bottle/epinephrine,/obj/item/weapon/reagent_containers/glass/bottle/charcoal,/obj/item/weapon/reagent_containers/syringe,/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 10; icon_state = "whitered"},/area/security/brig)
"alT" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteredcorner"},/area/security/brig)
"alU" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/brig)
@@ -989,7 +989,7 @@
"ata" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/door/airlock/maintenance{name = "Storage Room"; req_access_txt = "12"},/turf/simulated/floor/plating,/area/maintenance/fore)
"atb" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating{dir = 8; icon_state = "warnplate"},/area/maintenance/fore)
"atc" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plating,/area/maintenance/fore)
-"atd" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/obj/machinery/light/small{dir = 1},/obj/structure/table/wood,/obj/machinery/newscaster{pixel_x = 0; pixel_y = 32},/obj/item/weapon/lighter,/turf/simulated/floor/wood,/area/crew_quarters/sleep)
+"atd" = (/obj/machinery/light/small{dir = 1},/obj/structure/table/wood,/obj/machinery/newscaster{pixel_x = 0; pixel_y = 32},/obj/item/weapon/lighter,/turf/simulated/floor/wood,/area/crew_quarters/sleep)
"ate" = (/obj/structure/closet/secure_closet/personal/cabinet,/obj/machinery/alarm{pixel_y = 23},/obj/item/clothing/under/assistantformal,/turf/simulated/floor/wood,/area/crew_quarters/sleep)
"atf" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/machinery/button/door{id = "Cabin3"; name = "Cabin Bolt Control"; normaldoorcontrol = 1; pixel_x = 25; pixel_y = 0; req_access_txt = "0"; specialfunctions = 4},/obj/effect/decal/cleanable/cobweb2,/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/wood,/area/crew_quarters/sleep)
"atg" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall,/area/crew_quarters/sleep)
@@ -1559,7 +1559,7 @@
"aDY" = (/obj/machinery/computer/secure_data,/obj/machinery/button/flasher{id = "secentranceflasher"; name = "Brig Entrance Flash Control"; pixel_x = -24; pixel_y = 24; req_access_txt = "1"},/obj/machinery/button/door{id = "Secure Gate"; name = "Cell Window Control"; normaldoorcontrol = 0; pixel_x = 5; pixel_y = 27; req_access_txt = "0"; specialfunctions = 4},/obj/machinery/button/door{id = "briglockdown"; name = "Brig Lockdown Control"; pixel_x = 5; pixel_y = 37; req_access_txt = "0"},/obj/machinery/light/small{dir = 1},/obj/machinery/button/door{desc = "A remote control switch for the medbay foyer."; id = "innerbrig"; name = "Brig Interior Doors Control"; normaldoorcontrol = 1; pixel_x = -5; pixel_y = 37; req_access_txt = "63"},/obj/machinery/button/door{desc = "A remote control switch for the medbay foyer."; id = "outerbrig"; name = "Brig Exterior Doors Control"; normaldoorcontrol = 1; pixel_x = -5; pixel_y = 27; req_access_txt = "63"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/brig)
"aDZ" = (/obj/structure/filingcabinet/chestdrawer{pixel_y = 3},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/brig)
"aEa" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/obj/machinery/button/flasher{id = "holdingflash"; name = "holding cell flasher button"; pixel_x = 23; pixel_y = 23; req_access_txt = "1"},/obj/machinery/camera{c_tag = "Brig - Desk"; dir = 8; network = list("SS13")},/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 29; pixel_y = -2},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/brig)
-"aEb" = (/obj/machinery/requests_console{department = "Detective's office"; pixel_x = -30; pixel_y = 0},/obj/structure/table/wood,/obj/machinery/light/small{dir = 8},/obj/item/weapon/book/manual/wiki/security_space_law,/obj/item/device/camera{desc = "A one use - polaroid camera. 30 photos left."; name = "detective's camera"; pictures_left = 30},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office)
+"aEb" = (/obj/machinery/requests_console{department = "Detective's office"; pixel_x = -30; pixel_y = 0},/obj/structure/table/wood,/obj/machinery/light/small{dir = 8},/obj/item/weapon/book/manual/wiki/security_space_law,/obj/item/device/camera/detective,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office)
"aEc" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office)
"aEd" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office)
"aEe" = (/obj/machinery/light/small,/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -26},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office)
@@ -4547,7 +4547,7 @@
"bJw" = (/obj/machinery/portable_atmospherics/canister/air,/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos)
"bJx" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos)
"bJy" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos)
-"bJz" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/obj/machinery/light/small{dir = 4},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 2},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos)
+"bJz" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/obj/machinery/light/small{dir = 4},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 2},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos)
"bJA" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{dir = 8; icon_state = "caution"},/area/atmos)
"bJB" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/atmos)
"bJC" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/atmos)
@@ -4619,7 +4619,7 @@
"bKQ" = (/obj/machinery/portable_atmospherics/canister/air,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos)
"bKR" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos)
"bKS" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 2; initialize_directions = 11},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos)
-"bKT" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos)
+"bKT" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos)
"bKU" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/wall/r_wall,/area/atmos)
"bKV" = (/obj/structure/table,/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/rods{amount = 50},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plasteel{icon_state = "bot"; dir = 1},/area/atmos)
"bKW" = (/obj/machinery/atmospherics/components/binary/pump{dir = 8; name = "Air to External Air Ports"; on = 1},/turf/simulated/floor/plasteel{dir = 8; icon_state = "caution"},/area/atmos)
@@ -4722,7 +4722,7 @@
"bMP" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "n2o_in"; name = "Nitrous Oxide Supply Control"; output_tag = "n2o_out"; sensors = list("n2o_sensor" = "Tank")},/obj/machinery/atmospherics/pipe/simple/green/visible,/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/turf/simulated/floor/plasteel{dir = 4; icon_state = "escape"},/area/atmos)
"bMQ" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/atmos)
"bMR" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "n2o_sensor"},/turf/simulated/floor/engine/n20,/area/atmos)
-"bMS" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent/roomfiller{valve_open = 1},/turf/simulated/floor/engine/n20,/area/atmos)
+"bMS" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide/roomfiller{valve_open = 1},/turf/simulated/floor/engine/n20,/area/atmos)
"bMT" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/engine/n20,/area/atmos)
"bMU" = (/obj/structure/grille,/obj/structure/lattice,/obj/structure/lattice,/turf/simulated/wall/r_wall,/area/space)
"bMV" = (/obj/machinery/telecomms/processor/preset_two,/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/server)
@@ -4804,7 +4804,7 @@
"bOt" = (/obj/machinery/atmospherics/pipe/manifold/general/visible,/obj/machinery/meter,/turf/simulated/floor/plasteel,/area/atmos)
"bOu" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 4; initialize_directions = 11},/turf/simulated/floor/plasteel,/area/atmos)
"bOv" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel,/area/atmos)
-"bOw" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = 4; on = 1},/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{icon_state = "escape"; dir = 6},/area/atmos)
+"bOw" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = "n2o"; on = 1},/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{icon_state = "escape"; dir = 6},/area/atmos)
"bOx" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/obj/machinery/atmospherics/pipe/simple/cyan/visible,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/atmos)
"bOy" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 8; frequency = 1441; id = "n2o_in"; pixel_y = 1},/turf/simulated/floor/engine/n20,/area/atmos)
"bOz" = (/obj/machinery/camera{c_tag = "Atmospherics Tank - N2O"; dir = 8; network = list("SS13"); pixel_x = 0; pixel_y = 0},/turf/simulated/floor/engine/n20,/area/atmos)
@@ -5115,7 +5115,7 @@
"bUs" = (/obj/structure/fireaxecabinet{pixel_x = -32; pixel_y = 0},/obj/machinery/camera{c_tag = "Atmospherics - Port"; dir = 4; network = list("SS13")},/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{dir = 8; icon_state = "caution"},/area/atmos)
"bUt" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 4},/obj/machinery/portable_atmospherics/canister,/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "bot"; dir = 1},/area/atmos)
"bUu" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 4; initialize_directions = 11},/obj/machinery/meter,/obj/item/weapon/wrench,/turf/simulated/floor/plasteel,/area/atmos)
-"bUv" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; on = 1},/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{icon_state = "purplefull"},/area/atmos)
+"bUv" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = "plasma"; on = 1},/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{icon_state = "purplefull"},/area/atmos)
"bUw" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 8; frequency = 1441; id = "tox_in"; pixel_y = 1},/turf/simulated/floor/engine{carbon_dioxide = 0; name = "plasma floor"; nitrogen = 0; oxygen = 0; toxins = 70000},/area/atmos)
"bUx" = (/obj/machinery/camera{c_tag = "Atmospherics Tank - Toxins"; dir = 8; network = list("SS13"); pixel_x = 0; pixel_y = 0},/turf/simulated/floor/engine{carbon_dioxide = 0; name = "plasma floor"; nitrogen = 0; oxygen = 0; toxins = 70000},/area/atmos)
"bUy" = (/obj/structure/table,/obj/machinery/microwave,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate)
@@ -5382,7 +5382,7 @@
"bZz" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{color = "#330000"},/obj/machinery/meter{color = ""},/turf/simulated/floor/plasteel,/area/atmos)
"bZA" = (/obj/machinery/atmospherics/components/binary/pump{dir = 8; name = "Pure to Fuel Pipe"; on = 0},/turf/simulated/floor/plasteel,/area/atmos)
"bZB" = (/obj/machinery/atmospherics/pipe/manifold/yellow/visible{dir = 4},/turf/simulated/floor/plasteel,/area/atmos)
-"bZC" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = 3; on = 1},/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{icon_state = "vault"},/area/atmos)
+"bZC" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = "co2"; on = 1},/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{icon_state = "vault"},/area/atmos)
"bZD" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 8; frequency = 1441; id = "co2_in"; pixel_y = 1},/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/atmos)
"bZE" = (/obj/machinery/camera{c_tag = "Atmospherics Tank - CO2"; dir = 8; network = list("SS13"); pixel_x = 0; pixel_y = 0},/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/atmos)
"bZF" = (/obj/machinery/power/solar_control{id = "aftport"; name = "Aft Port Solar Control"; track = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable,/turf/simulated/floor/plating,/area/maintenance/portsolar)
@@ -5577,11 +5577,11 @@
"cdm" = (/obj/machinery/power/smes{capacity = 9e+006; charge = 10000},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
"cdn" = (/obj/machinery/door/window/northleft{dir = 1; icon_state = "left"; name = "Inner Pipe Access"; req_access_txt = "24"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/atmos)
"cdo" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 5},/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/structure/window/reinforced{dir = 1; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/atmos)
-"cdp" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = 2; on = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{icon_state = "redfull"},/area/atmos)
+"cdp" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = "n2"; on = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{icon_state = "redfull"},/area/atmos)
"cdq" = (/obj/structure/window/reinforced,/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "n2_in"; name = "Nitrogen Supply Control"; output_tag = "n2_out"; sensors = list("n2_sensor" = "Tank")},/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/obj/machinery/atmospherics/pipe/simple/general/visible{color = "#330000"},/turf/simulated/floor/plasteel{icon_state = "redfull"},/area/atmos)
"cdr" = (/obj/structure/window/reinforced,/obj/machinery/atmospherics/components/binary/pump{dir = 1; name = "Nitrogen Outlet"; on = 1},/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/simulated/floor/plasteel{icon_state = "redfull"},/area/atmos)
"cds" = (/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window/northleft{dir = 1; icon_state = "left"; name = "Inner Pipe Access"; req_access_txt = "24"},/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/atmos)
-"cdt" = (/obj/structure/window/reinforced,/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = 1; on = 1},/turf/simulated/floor/plasteel{icon_state = "bluefull"},/area/atmos)
+"cdt" = (/obj/structure/window/reinforced,/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = "o2"; on = 1},/turf/simulated/floor/plasteel{icon_state = "bluefull"},/area/atmos)
"cdu" = (/obj/structure/window/reinforced,/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "o2_in"; name = "Oxygen Supply Control"; output_tag = "o2_out"; sensors = list("o2_sensor" = "Tank")},/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bluefull"},/area/atmos)
"cdv" = (/obj/structure/window/reinforced,/obj/machinery/atmospherics/components/binary/pump{dir = 1; name = "O2 to Airmix"; on = 1},/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bluefull"},/area/atmos)
"cdw" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/machinery/door/window/northleft{dir = 1; icon_state = "left"; name = "Inner Pipe Access"; req_access_txt = "24"},/obj/machinery/atmospherics/components/binary/pump{dir = 1; name = "O2 to Pure"},/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/atmos)
@@ -6661,7 +6661,7 @@
"cye" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/hor)
"cyf" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; on = 1; scrub_Toxins = 0},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/hor)
"cyg" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/hor)
-"cyh" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/toxins/storage)
+"cyh" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/toxins/storage)
"cyi" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/toxins/storage)
"cyj" = (/obj/machinery/portable_atmospherics/canister/toxins,/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/toxins/storage)
"cyk" = (/obj/machinery/portable_atmospherics/canister/toxins,/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 29},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/toxins/storage)
@@ -6713,7 +6713,7 @@
"cze" = (/obj/structure/closet/secure_closet/RD,/obj/machinery/keycard_auth{pixel_x = 0; pixel_y = -24},/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/hor)
"czf" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 0; pixel_y = -32},/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/hor)
"czg" = (/obj/structure/filingcabinet/chestdrawer,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/hor)
-"czh" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/toxins/storage)
+"czh" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/toxins/storage)
"czi" = (/obj/item/weapon/cigbutt,/obj/machinery/light_switch{pixel_y = -23},/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/toxins/storage)
"czj" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 6; icon_state = "warning"},/area/toxins/storage)
"czk" = (/obj/machinery/portable_atmospherics/canister/toxins,/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/machinery/light/small,/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/toxins/storage)
@@ -8395,6 +8395,8 @@
"dfw" = (/mob/living/simple_animal/cockroach,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/morgue)
"dfx" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"})
"dfy" = (/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"})
+"dfz" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/engine/vacuum{tag = "icon-bcircuit"; icon_state = "bcircuit"},/area/toxins/xenobiology)
+"dfA" = (/obj/machinery/camera{c_tag = "Xenobiology Lab - Kill Chamber"; dir = 1; network = list("SS13","RD","Xeno"); start_active = 1},/turf/simulated/floor/engine/vacuum{tag = "icon-bcircuit"; icon_state = "bcircuit"},/area/toxins/xenobiology)
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -8611,8 +8613,8 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadczdecdcIddYdedddWdcIdeedcFdcPdcPdcPdcPdebaaaaaaaaaaafaaacTCcXvcTCcTCcTCcTCcTCcTCcTCcTCcTCcXscTCaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadczdegdefdeidehdekdejdeldcFdendemdemdeodczaaaaaaaaaaaaaaacTCdeOdePdePdePdeQdeRcXscXscXscXscXscTCaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadepdcAdcAdcAdcAdcAdcAdcAdeqdcAdcAdcAdcAderaaaaaaaaaaafaaacTCcTCcTCcTCcTCcTydeScTycTCcTCcTCcTCcTCaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadetdesdesdesdeudesdesdeudesdesdesdevaaaaaaaaaaaaaafaafaafaaaaafcTCdeVdeVdeWdeVdeVcTCaafaafaafaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadewdewdewdeudewdewdeudewdewdewaaaaaaaaaaaaaaaaaiaaaaafaaaaaacTCdeVdeVdeWdeVdeVcTCaaaaafaaaaafaaaaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadetdesdesdesdeudesdesdeudesdesdesdevaaaaaaaaaaaaaafaafaafaaaaafcTCdfzdeVdeWdeVdfzcTCaafaafaafaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadewdewdewdeudewdewdeudewdewdewaaaaaaaaaaaaaaaaaiaaaaafaaaaaacTCdfAdeVdeWdeVdeVcTCaaaaafaaaaafaaaaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaagaaaaaaaaacTCcTCcTydeXcTycTCcTCaaaaaaaaaaagaaiaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaiaagaagaaaaafaaacXlaaaaaaaafaagaaiaagaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaiaagaaaaaaaafaagaagaagaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/_maps/map_files/MiniStation/MiniStation.dmm b/_maps/map_files/MiniStation/MiniStation.dmm
index f3d58e776ad..c9d21399648 100644
--- a/_maps/map_files/MiniStation/MiniStation.dmm
+++ b/_maps/map_files/MiniStation/MiniStation.dmm
@@ -347,7 +347,7 @@
"gI" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/storage/box/handcuffs,/obj/item/weapon/pen,/turf/simulated/floor/plasteel,/area/security/brig)
"gJ" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 2; on = 1},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/brig)
"gK" = (/obj/machinery/computer/security/wooden_tv,/obj/item/device/radio/intercom{broadcasting = 0; freerange = 0; listening = 1; name = "Common Channel"; pixel_y = 25},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/brig)
-"gL" = (/obj/structure/table/wood,/obj/item/device/camera{desc = "A one use - polaroid camera. 30 photos left."; name = "detectives camera"; pictures_left = 30},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/obj/item/device/taperecorder{pixel_y = 0},/obj/machinery/camera/autoname,/obj/item/weapon/folder/yellow,/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor/carpet,/area/security/brig)
+"gL" = (/obj/structure/table/wood,/obj/item/device/camera/detective,/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/obj/item/device/taperecorder{pixel_y = 0},/obj/machinery/camera/autoname,/obj/item/weapon/folder/yellow,/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor/carpet,/area/security/brig)
"gM" = (/obj/item/weapon/storage/secure/safe{pixel_x = 4; pixel_y = 26},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/carpet,/area/security/brig)
"gN" = (/obj/machinery/mineral/ore_redemption{input_dir = 4},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/hallway/primary/central)
"gO" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "loadingarea"},/area/hallway/primary/central)
@@ -508,7 +508,7 @@
"jN" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/wall,/area/quartermaster/storage)
"jO" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall,/area/hallway/primary/central)
"jP" = (/obj/machinery/door/window/eastleft,/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 1},/area/hallway/primary/central)
-"jQ" = (/obj/machinery/door/firedoor/heavy,/obj/machinery/door/airlock/research{name = "Toxins Lab"; req_access_txt = "7"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"})
+"jQ" = (/obj/machinery/door/firedoor/heavy,/obj/machinery/door/airlock/research{heat_proof = 1; name = "Toxins Lab"; req_access_txt = "7"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"})
"jR" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"})
"jS" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/effect/spawner/structure/window/reinforced,/turf/simulated/floor/plating,/area/ai_monitored/storage/eva)
"jT" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "loadingarea"},/area/janitor)
diff --git a/_maps/map_files/TgStation/tgstation.2.1.3.dmm b/_maps/map_files/TgStation/tgstation.2.1.3.dmm
index d2de8dd50bd..2b94c177afe 100644
--- a/_maps/map_files/TgStation/tgstation.2.1.3.dmm
+++ b/_maps/map_files/TgStation/tgstation.2.1.3.dmm
@@ -8,9 +8,9 @@
"aah" = (/obj/structure/sign/securearea{pixel_y = -32},/turf/space,/area/space)
"aai" = (/turf/simulated/wall/r_wall,/area/security/prison)
"aaj" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/wall/r_wall,/area/security/prison)
-"aak" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/prison)
-"aal" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/prison)
-"aam" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/prison)
+"aak" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/prison)
+"aal" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/prison)
+"aam" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/prison)
"aan" = (/obj/machinery/hydroponics/soil,/obj/item/seeds/ambrosiavulgarisseed,/turf/simulated/floor/plasteel{dir = 9; icon_state = "green"},/area/security/prison)
"aao" = (/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/plating,/area/security/prison)
"aap" = (/obj/machinery/hydroponics/soil,/obj/item/seeds/carrotseed,/turf/simulated/floor/plasteel{dir = 1; icon_state = "green"},/area/security/prison)
@@ -64,10 +64,10 @@
"abl" = (/obj/machinery/vending/security,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/main)
"abm" = (/obj/item/weapon/grenade/barrier,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 1},/area/ai_monitored/security/armory)
"abn" = (/obj/machinery/firealarm{pixel_y = 24},/obj/structure/closet/secure_closet{anchored = 1; name = "Contraband Locker"; req_access_txt = "3"},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 1},/area/ai_monitored/security/armory)
-"abo" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/main)
+"abo" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/main)
"abp" = (/turf/simulated/wall,/area/security/main)
"abq" = (/turf/simulated/wall,/area/security/hos)
-"abr" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/hos)
+"abr" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/hos)
"abs" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/tracker,/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/solar/auxport)
"abt" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "warndark"; dir = 9},/area/security/transfer)
"abu" = (/obj/machinery/door/poddoor{id = "executionspaceblast"; name = "blast door"},/turf/simulated/floor/plating,/area/security/transfer)
@@ -151,9 +151,9 @@
"acU" = (/obj/machinery/door/airlock/external{name = "Security External Airlock"; req_access_txt = "63"},/turf/simulated/floor/plating,/area/security/main)
"acV" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/solar{id = "auxsolareast"; name = "Port Auxiliary Solar Array"},/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/solar/auxport)
"acW" = (/obj/structure/cable,/obj/structure/lattice/catwalk,/turf/space,/area/solar/auxport)
-"acX" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/poddoor/preopen{id = "executionfireblast"; layer = 2.9; name = "blast door"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/transfer)
+"acX" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/poddoor/preopen{id = "executionfireblast"; layer = 2.9; name = "blast door"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/transfer)
"acY" = (/obj/structure/table,/obj/item/weapon/paper,/obj/item/weapon/pen,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison)
-"acZ" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/preopen{id = "executionfireblast"; layer = 2.9; name = "blast door"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/transfer)
+"acZ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "executionfireblast"; layer = 2.9; name = "blast door"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/transfer)
"ada" = (/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/obj/machinery/flasher{id = "PCell 3"; pixel_x = -28},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison)
"adb" = (/obj/structure/table,/obj/item/weapon/paper,/obj/item/weapon/pen,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison)
"adc" = (/obj/machinery/flasher{id = "PCell 1"; pixel_x = -28},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison)
@@ -166,7 +166,7 @@
"adj" = (/obj/structure/rack,/obj/item/clothing/suit/armor/laserproof,/obj/item/weapon/gun/energy/ionrifle,/turf/simulated/floor/plasteel{dir = 2; icon_state = "bot"},/area/ai_monitored/security/armory)
"adk" = (/obj/structure/rack,/obj/item/weapon/gun/projectile/shotgun/riot{pixel_x = -3; pixel_y = 3},/obj/item/weapon/gun/projectile/shotgun/riot,/obj/item/weapon/gun/projectile/shotgun/riot{pixel_x = 3; pixel_y = -3},/turf/simulated/floor/plasteel{dir = 2; icon_state = "bot"},/area/ai_monitored/security/armory)
"adl" = (/obj/machinery/door/poddoor/shutters{id = "armory"; name = "Armoury Shutter"},/obj/machinery/button/door{id = "armory"; name = "Armory Shutters"; pixel_x = 0; pixel_y = -26; req_access_txt = "3"},/turf/simulated/floor/plasteel,/area/ai_monitored/security/armory)
-"adm" = (/obj/structure/grille,/obj/structure/disposalpipe/segment,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/hos)
+"adm" = (/obj/structure/grille,/obj/structure/disposalpipe/segment,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/hos)
"adn" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/carpet,/area/security/hos)
"ado" = (/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/simulated/floor/carpet,/area/security/hos)
"adp" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/carpet,/area/security/hos)
@@ -206,7 +206,7 @@
"adX" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/lattice/catwalk,/turf/space,/area/solar/auxstarboard)
"adY" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/lattice/catwalk,/turf/space,/area/solar/auxstarboard)
"adZ" = (/obj/structure/cable,/obj/machinery/power/solar{id = "auxsolareast"; name = "Port Auxiliary Solar Array"},/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/solar/auxport)
-"aea" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/obj/machinery/atmospherics/components/unary/portables_connector/visible,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 9},/area/security/transfer)
+"aea" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/obj/machinery/atmospherics/components/unary/portables_connector/visible,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 9},/area/security/transfer)
"aeb" = (/obj/structure/table,/obj/item/device/flashlight/lamp,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/transfer)
"aec" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/obj/machinery/atmospherics/components/unary/portables_connector/visible,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/security/transfer)
"aed" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/button/ignition{id = "executionburn"; pixel_x = 24; pixel_y = 5},/obj/machinery/button/door{id = "executionfireblast"; name = "Transfer Area Lockdown"; pixel_x = 25; pixel_y = -5; req_access_txt = "2"},/obj/machinery/atmospherics/pipe/simple/general/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/transfer)
@@ -229,7 +229,7 @@
"aeu" = (/obj/structure/bed/chair/janicart/secway,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel{dir = 6; icon_state = "warning"},/area/ai_monitored/security/armory)
"aev" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/reagent_dispensers/peppertank{pixel_x = 30; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/main)
"aew" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/main)
-"aex" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/hos)
+"aex" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/hos)
"aey" = (/obj/machinery/door/airlock/glass_command{name = "Head of Security"; req_access_txt = "58"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/carpet,/area/security/hos)
"aez" = (/obj/machinery/flasher/portable,/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 1},/area/ai_monitored/security/armory)
"aeA" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk,/turf/simulated/floor/plasteel{dir = 5; icon_state = "warning"},/area/security/main)
@@ -278,7 +278,7 @@
"afr" = (/obj/structure/bed/chair{dir = 4},/obj/item/device/radio/intercom{pixel_y = 25},/obj/item/weapon/storage/pod{pixel_x = 6; pixel_y = -32},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/pod_3)
"afs" = (/obj/structure/grille,/obj/structure/window/shuttle,/turf/simulated/floor/plating,/area/shuttle/pod_3)
"aft" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 5},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 10},/area/security/transfer)
-"afu" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/transfer)
+"afu" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/transfer)
"afv" = (/obj/machinery/atmospherics/pipe/simple/general/hidden{icon_state = "intact"; dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/transfer)
"afw" = (/obj/machinery/atmospherics/components/binary/pump{dir = 4; layer = 2.4},/obj/machinery/door/window/southleft{base_state = "right"; dir = 4; icon_state = "right"; name = "Armory"; req_access_txt = "2"},/turf/simulated/floor/plating{icon_state = "warnplate"},/area/security/transfer)
"afx" = (/obj/machinery/light_switch{pixel_x = 25; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/general/hidden{dir = 9},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/transfer)
@@ -300,8 +300,8 @@
"afN" = (/obj/machinery/light,/turf/simulated/floor/plasteel,/area/security/brig)
"afO" = (/obj/machinery/door/airlock/command{name = "Command Tool Storage"; req_access = null; req_access_txt = "19"},/turf/simulated/floor/plasteel,/area/ai_monitored/storage/eva)
"afP" = (/obj/machinery/door/airlock/command{name = "Command Tool Storage"; req_access = null; req_access_txt = "19"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/eva)
-"afQ" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/sign/securearea{pixel_x = -32},/turf/simulated/floor/plating,/area/security/main)
-"afR" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/main)
+"afQ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/sign/securearea{pixel_x = -32},/turf/simulated/floor/plating,/area/security/main)
+"afR" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/main)
"afS" = (/obj/machinery/door/airlock/glass_security{name = "Equipment Room"; req_access_txt = "1"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/main)
"afT" = (/obj/effect/landmark/start{name = "Security Officer"},/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/main)
"afU" = (/turf/simulated/floor/plasteel,/area/security/main)
@@ -353,12 +353,12 @@
"agO" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/brig)
"agP" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/brig)
"agQ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/warden)
-"agR" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/warden)
+"agR" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/warden)
"agS" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/warden)
"agT" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/warden)
"agU" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/warden)
"agV" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/warden)
-"agW" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/warden)
+"agW" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/warden)
"agX" = (/obj/structure/table,/obj/machinery/recharger,/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/warden)
"agY" = (/obj/structure/table,/obj/item/weapon/storage/fancy/donut_box,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/main)
"agZ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/security/main)
@@ -422,7 +422,7 @@
"aif" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/fsmaint)
"aig" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/warden)
"aih" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/book/manual/wiki/security_space_law,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/warden)
-"aii" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/warden)
+"aii" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/warden)
"aij" = (/obj/machinery/light_switch{pixel_y = -23},/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/warden)
"aik" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 1},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/main)
"ail" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall,/area/security/brig)
@@ -440,7 +440,7 @@
"aix" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 6},/area/security/main)
"aiy" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 4},/area/security/brig)
"aiz" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 1},/area/security/brig)
-"aiA" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/fsmaint)
+"aiA" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/fsmaint)
"aiB" = (/obj/structure/table/glass,/obj/item/weapon/reagent_containers/glass/bottle/morphine,/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/prison)
"aiC" = (/obj/structure/table/glass,/obj/item/weapon/reagent_containers/syringe,/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/prison)
"aiD" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/brig)
@@ -448,21 +448,21 @@
"aiF" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/brig)
"aiG" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/brig)
"aiH" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/brig)
-"aiI" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_x = -32},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/warden)
+"aiI" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_x = -32},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/warden)
"aiJ" = (/obj/structure/table/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/window/brigdoor{dir = 1; name = "Armory Desk"; req_access_txt = "3"},/obj/machinery/door/window/southleft{name = "Reception Desk"; req_access_txt = "63"},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/warden)
-"aiK" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/warden)
-"aiL" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/warden)
+"aiK" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/warden)
+"aiL" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/warden)
"aiM" = (/obj/machinery/door/airlock/glass_security{name = "Brig Control"; req_access_txt = "3"},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/warden)
-"aiN" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/warden)
+"aiN" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/warden)
"aiO" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security{name = "Security Office"; req_access = null; req_access_txt = "63"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/security/main)
"aiP" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall/r_wall,/area/security/main)
"aiQ" = (/obj/machinery/camera{c_tag = "Brig East"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/brig)
"aiR" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/brig)
"aiS" = (/obj/item/stack/rods,/turf/space,/area/space)
"aiT" = (/turf/simulated/wall,/area/security/processing)
-"aiU" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/processing)
+"aiU" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/processing)
"aiV" = (/turf/simulated/wall/r_wall,/area/security/processing)
-"aiW" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/brig)
+"aiW" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/brig)
"aiX" = (/turf/simulated/wall/r_wall,/area/security/brig)
"aiY" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 2; on = 1},/turf/simulated/floor/plasteel,/area/crew_quarters/courtroom)
"aiZ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 1},/area/security/brig)
@@ -513,7 +513,7 @@
"ajS" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/crew_quarters/courtroom)
"ajT" = (/obj/structure/bed/chair{dir = 8; name = "Defense"},/turf/simulated/floor/plasteel{dir = 5; icon_state = "green"},/area/crew_quarters/courtroom)
"ajU" = (/obj/machinery/door/window/southleft{name = "Court Cell"; req_access_txt = "2"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/crew_quarters/courtroom)
-"ajV" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/auxsolarport)
+"ajV" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/auxsolarport)
"ajW" = (/obj/machinery/door/airlock/external{name = "Solar Maintenance"; req_access = null; req_access_txt = "10; 13"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/auxsolarport)
"ajX" = (/obj/structure/grille,/obj/structure/window/shuttle,/turf/simulated/floor/plating,/area/shuttle/labor)
"ajY" = (/turf/space,/turf/simulated/wall/shuttle{icon_state = "swall_f6"; dir = 2},/area/shuttle/labor)
@@ -550,26 +550,26 @@
"akD" = (/turf/simulated/wall/shuttle{icon_state = "swall3"; dir = 2},/area/shuttle/labor)
"akE" = (/obj/structure/table,/obj/item/weapon/folder/red,/obj/item/weapon/restraints/handcuffs,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/labor)
"akF" = (/obj/structure/bed/chair/office/dark{dir = 1},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/labor)
-"akG" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/processing)
+"akG" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/processing)
"akH" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel,/area/security/processing)
"akI" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/security/processing)
"akJ" = (/obj/machinery/light_switch{pixel_x = 27},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/security/processing)
"akK" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/security/processing)
"akL" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/meter,/turf/simulated/floor/plating,/area/maintenance/fpmaint)
-"akM" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/brig)
-"akN" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/brig)
+"akM" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/brig)
+"akN" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/brig)
"akO" = (/obj/machinery/door/window/brigdoor{id = "Cell 1"; name = "Cell 1"; req_access_txt = "2"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/brig)
-"akP" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/brig)
+"akP" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/brig)
"akQ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/wall,/area/security/brig)
"akR" = (/obj/machinery/door/window/brigdoor{id = "Cell 2"; name = "Cell 2"; req_access_txt = "2"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/brig)
-"akS" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/brig)
+"akS" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/brig)
"akT" = (/obj/machinery/door/window/brigdoor{id = "Cell 3"; name = "Cell 3"; req_access_txt = "2"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/brig)
"akU" = (/obj/machinery/door/airlock/glass_security{name = "Brig Desk"; req_access_txt = "1"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/brig)
-"akV" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/brig)
+"akV" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/brig)
"akW" = (/obj/machinery/door/airlock/glass_security{id_tag = "innerbrig"; name = "Brig"; req_access_txt = "63"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/brig)
"akX" = (/obj/machinery/door/airlock/glass_security{id_tag = "innerbrig"; name = "Brig"; req_access_txt = "63"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/brig)
-"akY" = (/obj/structure/grille,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/brig)
-"akZ" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/brig)
+"akY" = (/obj/structure/grille,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/brig)
+"akZ" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/brig)
"ala" = (/obj/machinery/door/window/brigdoor{id = "Cell 4"; name = "Cell 4"; req_access_txt = "2"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/brig)
"alb" = (/obj/structure/bed/chair{dir = 4; name = "Prosecution"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/crew_quarters/courtroom)
"alc" = (/obj/structure/table/wood,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 8},/area/crew_quarters/courtroom)
@@ -578,7 +578,7 @@
"alf" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/brig)
"alg" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/lattice/catwalk,/turf/space,/area/solar/auxstarboard)
"alh" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/external{name = "Solar Maintenance"; req_access = null; req_access_txt = "10; 13"},/turf/simulated/floor/plating,/area/maintenance/auxsolarport)
-"ali" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
+"ali" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
"alj" = (/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/labor)
"alk" = (/obj/structure/grille,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/window/shuttle,/turf/simulated/floor/plating,/area/shuttle/labor)
"all" = (/obj/machinery/mineral/labor_claim_console{machinedir = 2; pixel_x = 30; pixel_y = 30},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/labor)
@@ -599,7 +599,7 @@
"alA" = (/obj/structure/table/reinforced,/obj/machinery/door/poddoor/shutters/preopen{id = "briggate"; name = "security shutters"},/obj/machinery/door/window/eastleft{name = "Brig Desk"; req_access_txt = "1"},/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/brig)
"alB" = (/obj/machinery/computer/secure_data,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/brig)
"alC" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/brig)
-"alD" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/crew_quarters/courtroom)
+"alD" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/crew_quarters/courtroom)
"alE" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/obj/machinery/flasher{id = "Cell 4"; pixel_x = 28},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/brig)
"alF" = (/obj/machinery/atmospherics/components/unary/tank/air{dir = 2},/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
"alG" = (/obj/structure/bed/chair{dir = 4; name = "Prosecution"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/crew_quarters/courtroom)
@@ -610,7 +610,7 @@
"alL" = (/obj/structure/disposalpipe/segment,/obj/machinery/power/apc{dir = 8; name = "Courtroom APC"; pixel_x = -24; pixel_y = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/crew_quarters/courtroom)
"alM" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/fsmaint)
"alN" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/lattice/catwalk,/turf/space,/area/solar/auxstarboard)
-"alO" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
+"alO" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"alP" = (/turf/simulated/wall,/area/maintenance/fsmaint2)
"alQ" = (/obj/machinery/power/solar_control{id = "auxsolareast"; name = "Fore Port Solar Control"; track = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/auxsolarport)
"alR" = (/turf/simulated/wall/r_wall,/area/maintenance/auxsolarport)
@@ -639,12 +639,12 @@
"amo" = (/obj/machinery/flasher{id = "brigentry"; pixel_x = 28},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/brig)
"amp" = (/obj/structure/closet/secure_closet/brig{id = "Cell 4"; name = "Cell 4 Locker"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/brig)
"amq" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/item/device/radio/intercom{desc = "Talk through this. It looks like it has been modified to not broadcast."; dir = 2; name = "Prison Intercom (General)"; pixel_x = 25; pixel_y = -2; prison_radio = 1},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/brig)
-"amr" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/courtroom)
-"ams" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/courtroom)
+"amr" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/crew_quarters/courtroom)
+"ams" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/crew_quarters/courtroom)
"amt" = (/obj/machinery/door/airlock/glass{name = "Courtroom"; req_access_txt = "42"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/crew_quarters/courtroom)
"amu" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/crew_quarters/courtroom)
"amv" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/external{name = "Solar Maintenance"; req_access = null; req_access_txt = "10; 13"},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
-"amw" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
+"amw" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
"amx" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"amy" = (/obj/structure/bed/stool{pixel_y = 8},/turf/simulated/floor/plating,/area/maintenance/auxsolarport)
"amz" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/terminal,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/maintenance/auxsolarport)
@@ -659,16 +659,16 @@
"amI" = (/turf/simulated/floor/plasteel/shuttle,/area/shuttle/labor)
"amJ" = (/obj/machinery/mineral/labor_claim_console{machinedir = 1; pixel_x = 30; pixel_y = 0},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/labor)
"amK" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/turf/simulated/wall,/area/security/processing)
-"amL" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/processing)
+"amL" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/processing)
"amM" = (/obj/machinery/door/airlock/glass_security{name = "Prisoner Processing"; req_access_txt = "2"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/security/processing)
"amN" = (/obj/structure/table,/obj/item/clothing/glasses/sunglasses{pixel_x = 3; pixel_y = 3},/obj/item/clothing/glasses/sunglasses{pixel_x = 3; pixel_y = 3},/obj/item/clothing/ears/earmuffs{pixel_x = -3; pixel_y = -2},/obj/item/clothing/ears/earmuffs{pixel_x = -3; pixel_y = -2},/obj/item/weapon/storage/firstaid/regular,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/warden)
"amO" = (/turf/space,/obj/machinery/porta_turret/syndicate,/turf/simulated/wall/shuttle{dir = 8; icon_state = "diagonalWall3"},/area/shuttle/syndicate)
-"amP" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters{id = "syndieshutters"; name = "blast shutters"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/shuttle/syndicate)
-"amQ" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/grille,/obj/structure/cable,/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "brig shutters"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/brig)
-"amR" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "brig shutters"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/brig)
+"amP" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters{id = "syndieshutters"; name = "blast shutters"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/shuttle/syndicate)
+"amQ" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/grille,/obj/structure/cable,/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "brig shutters"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/brig)
+"amR" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "brig shutters"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/brig)
"amS" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/wall/r_wall,/area/security/brig)
"amT" = (/obj/structure/table/reinforced,/obj/machinery/door/poddoor/shutters/preopen{id = "briggate"; name = "security shutters"},/obj/machinery/door/window/southleft{name = "Brig Desk"; req_access_txt = "1"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/brig)
-"amU" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "briggate"; name = "security blast door"},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/brig)
+"amU" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "briggate"; name = "security blast door"},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/brig)
"amV" = (/obj/structure/table/reinforced,/obj/machinery/door/poddoor/shutters/preopen{id = "briggate"; name = "security shutters"},/obj/machinery/door/window/southleft{base_state = "right"; icon_state = "right"; name = "Brig Desk"; req_access_txt = "1"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/brig)
"amW" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{id_tag = "outerbrig"; name = "Brig"; req_access_txt = "63"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/brig)
"amX" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{id_tag = "outerbrig"; name = "Brig"; req_access_txt = "63"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/brig)
@@ -742,7 +742,7 @@
"aon" = (/obj/structure/bed/chair,/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
"aoo" = (/obj/structure/rack,/obj/item/weapon/circuitboard/monkey_recycler,/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
"aop" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1; layer = 2.9},/turf/simulated/floor/plating/airless,/area/shuttle/labor)
-"aoq" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = -32},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/processing)
+"aoq" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = -32},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/processing)
"aor" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 6},/area/security/processing)
"aos" = (/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/security/processing)
"aot" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 6},/area/security/processing)
@@ -783,7 +783,7 @@
"apc" = (/obj/machinery/door/airlock/maintenance{name = "Security Maintenance"; req_access_txt = "2"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/security/processing)
"apd" = (/turf/simulated/wall,/area/security/detectives_office)
"ape" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Detective"; req_access_txt = "4"},/turf/simulated/floor/plasteel,/area/security/detectives_office)
-"apf" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/detectives_office)
+"apf" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/detectives_office)
"apg" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/fpmaint)
"aph" = (/turf/simulated/wall,/area/lawoffice)
"api" = (/obj/machinery/door/airlock{name = "Law Office"; req_access_txt = "38"},/turf/simulated/floor/plasteel,/area/lawoffice)
@@ -821,7 +821,7 @@
"apO" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 1},/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
"apP" = (/obj/structure/grille,/obj/structure/window/fulltile{health = 35},/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
"apQ" = (/obj/structure/lattice,/turf/space,/area/space/nearstation)
-"apR" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/plating,/area/security/processing)
+"apR" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/plating,/area/security/processing)
"apS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/security/processing)
"apT" = (/turf/space,/obj/machinery/porta_turret/syndicate,/turf/simulated/wall/shuttle{dir = 1; icon_state = "diagonalWall3"},/area/shuttle/syndicate)
"apU" = (/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office)
@@ -847,10 +847,10 @@
"aqo" = (/obj/structure/bed/stool{pixel_y = 8},/turf/simulated/floor/wood,/area/crew_quarters/sleep)
"aqp" = (/obj/structure/rack{dir = 1},/obj/item/clothing/suit/fire/firefighter,/obj/item/weapon/tank/internals/oxygen,/obj/item/clothing/mask/gas,/obj/item/weapon/extinguisher,/obj/item/clothing/head/hardhat/red,/obj/item/clothing/glasses/meson,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 10},/area/maintenance/fsmaint)
"aqq" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 1},/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 6},/area/maintenance/fsmaint)
-"aqr" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/fitness)
-"aqs" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/fitness)
-"aqt" = (/obj/structure/grille,/obj/effect/landmark{name = "Syndicate Breach Area"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/fitness)
-"aqu" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/fitness)
+"aqr" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/crew_quarters/fitness)
+"aqs" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/crew_quarters/fitness)
+"aqt" = (/obj/structure/grille,/obj/effect/landmark{name = "Syndicate Breach Area"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/crew_quarters/fitness)
+"aqu" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/crew_quarters/fitness)
"aqv" = (/obj/machinery/door/airlock/external{name = "External Access"; req_access = null; req_access_txt = "13"},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"aqw" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/engineering{icon_state = "door_closed"; locked = 0; name = "Fore Starboard Solar Access"; req_access_txt = "10"},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
"aqx" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 0},/turf/simulated/wall/r_wall,/area/maintenance/auxsolarstarboard)
@@ -872,7 +872,7 @@
"aqN" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
"aqO" = (/obj/structure/closet,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
"aqP" = (/obj/machinery/power/apc{dir = 1; name = "Arrivals North Maintenance APC"; pixel_x = -1; pixel_y = 26},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
-"aqQ" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/fpmaint)
+"aqQ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/fpmaint)
"aqR" = (/turf/simulated/floor/plating,/area/maintenance/fpmaint)
"aqS" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/security/processing)
"aqT" = (/obj/machinery/power/apc{dir = 8; name = "Labor Shuttle Dock APC"; pixel_x = -24},/obj/structure/cable,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/security/processing)
@@ -885,7 +885,7 @@
"ara" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/requests_console{department = "Law office"; pixel_x = -32; pixel_y = 0},/obj/structure/closet/lawcloset,/turf/simulated/floor/wood,/area/lawoffice)
"arb" = (/obj/structure/table/wood,/obj/item/weapon/book/manual/wiki/security_space_law,/obj/item/weapon/book/manual/wiki/security_space_law,/obj/item/weapon/pen/red,/turf/simulated/floor/wood,/area/lawoffice)
"arc" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/wood,/area/lawoffice)
-"ard" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "lawyer_blast"; name = "privacy door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/lawoffice)
+"ard" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "lawyer_blast"; name = "privacy door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/lawoffice)
"are" = (/obj/structure/table/wood,/obj/item/device/flashlight/lamp/green{pixel_x = 1; pixel_y = 5},/turf/simulated/floor/wood,/area/lawoffice)
"arf" = (/turf/simulated/wall,/area/crew_quarters/sleep)
"arg" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall,/area/maintenance/fsmaint)
@@ -894,10 +894,10 @@
"arj" = (/turf/simulated/wall,/area/crew_quarters/fitness)
"ark" = (/obj/machinery/alarm{pixel_y = 23},/obj/structure/closet/secure_closet/personal/cabinet,/turf/simulated/floor/wood,/area/crew_quarters/sleep)
"arl" = (/obj/structure/disposalpipe/junction{icon_state = "pipe-j2"; dir = 2},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 9},/area/crew_quarters/fitness)
-"arm" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/fitness)
+"arm" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/crew_quarters/fitness)
"arn" = (/obj/structure/closet/athletic_mixed,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 1},/area/crew_quarters/fitness)
"aro" = (/turf/simulated/floor/engine{name = "Holodeck Projector Floor"},/area/holodeck/rec_center)
-"arp" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
+"arp" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"arq" = (/obj/structure/table,/obj/effect/decal/cleanable/cobweb,/obj/effect/spawner/lootdrop/maintenance{lootcount = 8; name = "8maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"arr" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"ars" = (/obj/machinery/power/apc{dir = 1; name = "Bar Maintenance APC"; pixel_y = 24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
@@ -912,7 +912,7 @@
"arB" = (/turf/simulated/wall/r_wall,/area/hallway/secondary/entry)
"arC" = (/obj/docking_port/stationary/random{id = "pod_asteroid2"; name = "asteroid"},/turf/space,/area/space)
"arD" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/status_display{density = 0; layer = 3; pixel_x = 32; pixel_y = 0},/obj/machinery/computer/shuttle/pod{pixel_x = -32; possible_destinations = "pod_asteroid1"; shuttleId = "pod1"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/pod_1)
-"arE" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
+"arE" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
"arF" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{icon_state = "intact"; dir = 5},/turf/simulated/wall,/area/maintenance/fpmaint2)
"arG" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{icon_state = "intact"; dir = 4},/turf/simulated/wall,/area/maintenance/fpmaint2)
"arH" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
@@ -980,11 +980,11 @@
"asR" = (/obj/effect/decal/cleanable/cobweb,/obj/structure/closet/secure_closet/chemical,/turf/simulated/floor/plating,/area/maintenance/fpmaint)
"asS" = (/obj/structure/closet/secure_closet/medical1,/turf/simulated/floor/plating,/area/maintenance/fpmaint)
"asT" = (/obj/structure/closet/secure_closet/chemical,/turf/simulated/floor/plating,/area/maintenance/fpmaint)
-"asU" = (/obj/machinery/requests_console{department = "Detective's office"; pixel_x = -30; pixel_y = 0},/obj/structure/table/wood,/obj/item/device/camera{desc = "A one use - polaroid camera. 30 photos left."; name = "detectives camera"; pictures_left = 30},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office)
+"asU" = (/obj/machinery/requests_console{department = "Detective's office"; pixel_x = -30; pixel_y = 0},/obj/structure/table/wood,/obj/item/device/camera/detective,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office)
"asV" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 1},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel,/area/crew_quarters/fitness)
"asW" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/carpet,/area/security/detectives_office)
"asX" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/crew_quarters/fitness)
-"asY" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plating,/area/crew_quarters/fitness)
+"asY" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plating,/area/crew_quarters/fitness)
"asZ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/crew_quarters/fitness)
"ata" = (/turf/simulated/floor/wood,/area/lawoffice)
"atb" = (/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
@@ -1065,7 +1065,7 @@
"auy" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass{name = "Holodeck Door"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/turf/simulated/floor/plasteel,/area/crew_quarters/fitness)
"auz" = (/obj/machinery/camera{c_tag = "Holodeck"},/obj/machinery/alarm{pixel_y = 24},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; on = 1; scrub_Toxins = 0},/turf/simulated/floor/plasteel,/area/crew_quarters/fitness)
"auA" = (/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/crew_quarters/fitness)
-"auB" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/fitness)
+"auB" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/crew_quarters/fitness)
"auC" = (/obj/machinery/light/small,/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"auD" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"auE" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
@@ -1140,7 +1140,7 @@
"avV" = (/obj/structure/table,/obj/machinery/cell_charger,/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
"avW" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
"avX" = (/obj/machinery/light/small{dir = 4},/obj/structure/bed/stool,/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
-"avY" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/fpmaint)
+"avY" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/fpmaint)
"avZ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall,/area/maintenance/fpmaint)
"awa" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 1},/turf/simulated/wall,/area/maintenance/fpmaint)
"awb" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fpmaint)
@@ -1190,7 +1190,7 @@
"awT" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/electrical)
"awU" = (/obj/structure/table,/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/item/wallframe/camera,/obj/item/wallframe/camera,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/electrical)
"awV" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/hallway/secondary/entry)
-"awW" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/secondary/entry)
+"awW" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/secondary/entry)
"awX" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel,/area/hallway/secondary/entry)
"awY" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{dir = 1; icon_state = "arrival"},/area/hallway/secondary/entry)
"awZ" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "arrival"},/area/hallway/secondary/entry)
@@ -1272,12 +1272,12 @@
"ayx" = (/obj/structure/closet/firecloset,/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
"ayy" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
"ayz" = (/turf/simulated/wall/r_wall,/area/maintenance/fpmaint2)
-"ayA" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/fpmaint)
-"ayB" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/fpmaint)
-"ayC" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/fpmaint)
-"ayD" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/fpmaint)
+"ayA" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/fpmaint)
+"ayB" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/fpmaint)
+"ayC" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/fpmaint)
+"ayD" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/fpmaint)
"ayE" = (/turf/simulated/wall/r_wall,/area/maintenance/fpmaint)
-"ayF" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/fpmaint)
+"ayF" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/fpmaint)
"ayG" = (/turf/simulated/wall/r_wall,/area/gateway)
"ayH" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/fpmaint)
"ayI" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/sign/securearea{pixel_x = 32; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/fpmaint)
@@ -1290,7 +1290,7 @@
"ayP" = (/obj/machinery/power/apc{dir = 1; name = "EVA Storage APC"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plasteel,/area/ai_monitored/storage/eva)
"ayQ" = (/obj/structure/table,/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = -7},/obj/machinery/cell_charger,/obj/item/weapon/stock_parts/cell/high/plus,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/eva)
"ayR" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/item/device/multitool,/turf/simulated/floor/plasteel,/area/ai_monitored/storage/eva)
-"ayS" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/sign/securearea{pixel_y = 32},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/ai_monitored/storage/eva)
+"ayS" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/sign/securearea{pixel_y = 32},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/ai_monitored/storage/eva)
"ayT" = (/obj/machinery/light{dir = 1},/obj/structure/table,/obj/item/device/assembly/signaler,/obj/item/device/assembly/signaler,/obj/item/weapon/stock_parts/cell/high/plus,/turf/simulated/floor/plasteel,/area/ai_monitored/storage/eva)
"ayU" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel,/area/ai_monitored/storage/eva)
"ayV" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/machinery/alarm{pixel_y = 23},/obj/machinery/button/door{id = "Dorm2"; name = "Dorm Bolt Control"; normaldoorcontrol = 1; pixel_x = 25; pixel_y = 0; req_access_txt = "0"; specialfunctions = 4},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/carpet,/area/crew_quarters/sleep)
@@ -1304,7 +1304,7 @@
"azd" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 6},/area/crew_quarters/sleep)
"aze" = (/turf/simulated/floor/plasteel{icon_state = "neutral"},/area/crew_quarters/sleep)
"azf" = (/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,/turf/simulated/floor/plasteel,/area/crew_quarters/fitness)
-"azg" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plating,/area/crew_quarters/fitness)
+"azg" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plating,/area/crew_quarters/fitness)
"azh" = (/obj/machinery/camera{c_tag = "Fitness Room South"; dir = 1},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "green"; dir = 4},/area/crew_quarters/fitness)
"azi" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
"azj" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor/plasteel{dir = 10; icon_state = "neutral"},/area/crew_quarters/fitness)
@@ -1313,7 +1313,7 @@
"azm" = (/obj/structure/bed/stool{pixel_y = 8},/turf/simulated/floor/plasteel,/area/crew_quarters/fitness)
"azn" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular,/turf/simulated/floor/plasteel,/area/crew_quarters/fitness)
"azo" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel,/area/crew_quarters/fitness)
-"azp" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/fitness)
+"azp" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/crew_quarters/fitness)
"azq" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall,/area/hallway/secondary/construction{name = "\improper Garden"})
"azr" = (/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"azs" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 1},/turf/simulated/floor/plasteel,/area/ai_monitored/storage/eva)
@@ -1379,7 +1379,7 @@
"aAA" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/wall,/area/maintenance/electrical)
"aAB" = (/obj/machinery/power/smes{charge = 0},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/electrical)
"aAC" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/turf/simulated/wall/r_wall,/area/hallway/secondary/entry)
-"aAD" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/secondary/entry)
+"aAD" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/secondary/entry)
"aAE" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel{icon_state = "warning"},/area/hallway/secondary/entry)
"aAF" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/hallway/secondary/entry)
"aAG" = (/obj/machinery/vending/coffee,/turf/simulated/floor/plasteel{dir = 6; icon_state = "warning"},/area/hallway/secondary/entry)
@@ -1420,8 +1420,8 @@
"aBp" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 5; icon_state = "warning"},/area/ai_monitored/storage/eva)
"aBq" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/ai_monitored/storage/eva)
"aBr" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel,/area/ai_monitored/storage/eva)
-"aBs" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/ai_monitored/storage/eva)
-"aBt" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/ai_monitored/storage/eva)
+"aBs" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/ai_monitored/storage/eva)
+"aBt" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/ai_monitored/storage/eva)
"aBu" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/plasteel{icon_state = "bluecorner"},/area/hallway/primary/fore)
"aBv" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/hallway/secondary/construction{name = "\improper Garden"})
"aBw" = (/obj/item/seeds/appleseed,/obj/item/seeds/bananaseed,/obj/item/seeds/cocoapodseed,/obj/item/seeds/grapeseed,/obj/item/seeds/orangeseed,/obj/item/seeds/sugarcaneseed,/obj/item/seeds/wheatseed,/obj/item/seeds/watermelonseed,/obj/structure/table/glass,/obj/item/seeds/towermycelium,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/secondary/construction{name = "\improper Garden"})
@@ -1462,7 +1462,7 @@
"aCf" = (/obj/machinery/camera{c_tag = "Theatre Storage"},/turf/simulated/floor/plasteel{icon_state = "whitehall"; dir = 4},/area/crew_quarters/theatre)
"aCg" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plasteel,/area/ai_monitored/storage/eva)
"aCh" = (/obj/machinery/vending/autodrobe,/turf/simulated/floor/plasteel{icon_state = "whitehall"; dir = 4},/area/crew_quarters/theatre)
-"aCi" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/ai_monitored/storage/eva)
+"aCi" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/ai_monitored/storage/eva)
"aCj" = (/obj/machinery/camera{c_tag = "EVA East"; dir = 1},/turf/simulated/floor/plasteel,/area/ai_monitored/storage/eva)
"aCk" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 1},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"aCl" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
@@ -1474,9 +1474,9 @@
"aCr" = (/turf/simulated/wall,/area/crew_quarters/theatre)
"aCs" = (/obj/structure/closet/wardrobe/red,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/checkpoint2)
"aCt" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
-"aCu" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/fitness)
-"aCv" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/fitness)
-"aCw" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/fitness)
+"aCu" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/crew_quarters/fitness)
+"aCv" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/crew_quarters/fitness)
+"aCw" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/crew_quarters/fitness)
"aCx" = (/obj/machinery/atmospherics/components/binary/valve,/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"aCy" = (/obj/effect/decal/cleanable/oil,/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"aCz" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
@@ -1606,9 +1606,9 @@
"aET" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/gateway)
"aEU" = (/obj/structure/table,/obj/machinery/recharger,/obj/structure/sign/biohazard{pixel_x = 32},/turf/simulated/floor/plasteel,/area/gateway)
"aEV" = (/obj/structure/reagent_dispensers/watertank,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/fpmaint)
-"aEW" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/ai_monitored/storage/eva)
+"aEW" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/ai_monitored/storage/eva)
"aEX" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_command{name = "EVA Storage"; req_access_txt = "18"},/turf/simulated/floor/plasteel,/area/ai_monitored/storage/eva)
-"aEY" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/ai_monitored/storage/eva)
+"aEY" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/ai_monitored/storage/eva)
"aEZ" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/eva)
"aFa" = (/obj/machinery/suit_storage_unit/cmo,/turf/simulated/floor/plasteel{icon_state = "barber"},/area/medical/cmo)
"aFb" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/eva)
@@ -1624,7 +1624,7 @@
"aFl" = (/obj/machinery/light/small{dir = 8},/obj/structure/dresser,/turf/simulated/floor/plasteel{icon_state = "redblue"},/area/crew_quarters/theatre)
"aFm" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"aFn" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
-"aFo" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
+"aFo" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"aFp" = (/obj/effect/spawner/lootdrop/maintenance,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"aFq" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/space,/area/space)
"aFr" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
@@ -1709,7 +1709,7 @@
"aGS" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"aGT" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"aGU" = (/obj/machinery/light/small{dir = 1},/obj/machinery/requests_console{department = "Chapel"; departmentType = 2; pixel_y = 30},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/chapel/office)
-"aGV" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
+"aGV" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"aGW" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"aGX" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/space,/area/space)
"aGY" = (/obj/machinery/alarm{pixel_y = 25},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/chapel/office)
@@ -1730,7 +1730,7 @@
"aHn" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main)
"aHo" = (/obj/structure/table/glass,/obj/item/weapon/reagent_containers/food/snacks/grown/poppy,/obj/item/weapon/reagent_containers/food/snacks/grown/harebell,/turf/simulated/floor/plasteel{dir = 4; icon_state = "chapel"},/area/chapel/main)
"aHp" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "chapel"},/area/chapel/main)
-"aHq" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/chapel/main)
+"aHq" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/chapel/main)
"aHr" = (/obj/effect/landmark{name = "Marauder Entry"},/turf/space,/area/space)
"aHs" = (/obj/machinery/door/airlock/shuttle{name = "Arrivals Shuttle Airlock"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/arrival)
"aHt" = (/obj/effect/landmark{name = "Observer-Start"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/arrival)
@@ -1738,7 +1738,7 @@
"aHv" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel,/area/gateway)
"aHw" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8},/turf/simulated/floor/plasteel,/area/gateway)
"aHx" = (/obj/structure/grille,/obj/structure/window/fulltile{health = 25},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/fpmaint)
-"aHy" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/checkpoint2)
+"aHy" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/checkpoint2)
"aHz" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plasteel{dir = 5; icon_state = "green"},/area/hallway/secondary/construction{name = "\improper Garden"})
"aHA" = (/obj/item/weapon/reagent_containers/spray/plantbgone,/obj/item/weapon/reagent_containers/spray/pestspray{pixel_x = 3; pixel_y = 4},/obj/item/weapon/reagent_containers/glass/bottle/nutrient/ez,/obj/item/weapon/reagent_containers/glass/bottle/nutrient/rh{pixel_x = 2; pixel_y = 1},/obj/structure/table/glass,/obj/machinery/light{dir = 4},/turf/simulated/floor/plasteel{dir = 9; icon_state = "green"},/area/hallway/secondary/construction{name = "\improper Garden"})
"aHB" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/eva)
@@ -1821,7 +1821,7 @@
"aJa" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/gateway)
"aJb" = (/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/storage/primary)
"aJc" = (/obj/structure/disposalpipe/trunk,/obj/machinery/disposal/bin,/turf/simulated/floor/plasteel,/area/storage/primary)
-"aJd" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/port)
+"aJd" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/port)
"aJe" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/hallway/primary/port)
"aJf" = (/obj/machinery/camera{c_tag = "EVA South"; dir = 1},/turf/simulated/floor/plasteel,/area/ai_monitored/storage/eva)
"aJg" = (/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 4},/area/hallway/primary/central)
@@ -1831,7 +1831,7 @@
"aJk" = (/obj/machinery/door/airlock{name = "Theatre Backstage"; req_access_txt = "46"},/turf/simulated/floor/plasteel,/area/crew_quarters/theatre)
"aJl" = (/obj/structure/dispenser/oxygen,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/ai_monitored/storage/eva)
"aJm" = (/obj/structure/sink/kitchen{pixel_y = 28},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/wood,/area/crew_quarters/bar)
-"aJn" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/central)
+"aJn" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/central)
"aJo" = (/obj/machinery/light{dir = 1},/obj/machinery/camera{c_tag = "Central Hallway North"; dir = 2},/turf/simulated/floor/plasteel{dir = 1; icon_state = "blue"},/area/hallway/primary/central)
"aJp" = (/turf/simulated/floor/plasteel{dir = 9; icon_state = "blue"},/area/hallway/primary/central)
"aJq" = (/turf/simulated/floor/plasteel,/area/hallway/primary/central)
@@ -1871,7 +1871,7 @@
"aJY" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "neutral"},/area/hallway/secondary/entry)
"aJZ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass{name = "Primary Tool Storage"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/storage/primary)
"aKa" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass{name = "Primary Tool Storage"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/storage/primary)
-"aKb" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/fulltile/reinforced,/obj/structure/cable,/turf/simulated/floor/plating,/area/hallway/primary/port)
+"aKb" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/reinforced/fulltile,/obj/structure/cable,/turf/simulated/floor/plating,/area/hallway/primary/port)
"aKc" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/command{icon_state = "door_closed"; lockdownbyai = 0; locked = 0; name = "Gateway Access"; req_access_txt = "62"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/gateway)
"aKd" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{id = "stationawaygate"; name = "Gateway Access Shutters"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/gateway)
"aKe" = (/obj/structure/table/glass,/turf/simulated/floor/plasteel{dir = 4; icon_state = "chapel"},/area/chapel/main)
@@ -1889,11 +1889,11 @@
"aKq" = (/obj/item/device/radio/intercom{pixel_y = 25},/obj/machinery/camera{c_tag = "Theatre Stage"; dir = 2},/turf/simulated/floor/wood,/area/crew_quarters/theatre)
"aKr" = (/obj/machinery/alarm{dir = 2; pixel_y = 24},/turf/simulated/floor/wood,/area/crew_quarters/theatre)
"aKs" = (/obj/structure/grille,/obj/structure/disposalpipe/segment,/obj/structure/window/fulltile,/turf/simulated/floor/plating,/area/storage/primary)
-"aKt" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/port)
-"aKu" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/port)
-"aKv" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/port)
+"aKt" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/port)
+"aKu" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/port)
+"aKv" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/port)
"aKw" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/hallway/primary/port)
-"aKx" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/port)
+"aKx" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/port)
"aKy" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/fpmaint)
"aKz" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/wood,/area/crew_quarters/bar)
"aKA" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{id = "stationawaygate"; name = "Gateway Access Shutters"},/turf/simulated/floor/plasteel,/area/gateway)
@@ -2026,7 +2026,7 @@
"aMX" = (/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/chapel/office)
"aMY" = (/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/hallway/primary/port)
"aMZ" = (/turf/simulated/wall,/area/hallway/secondary/exit)
-"aNa" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/secondary/exit)
+"aNa" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/secondary/exit)
"aNb" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel,/area/hallway/secondary/entry)
"aNc" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass{name = "Central Access"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/central)
"aNd" = (/obj/structure/table/wood,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/hallway/secondary/entry)
@@ -2144,7 +2144,7 @@
"aPl" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "chapel"},/area/chapel/main)
"aPm" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 4; icon_state = "chapel"},/area/chapel/main)
"aPn" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{dir = 1; icon_state = "chapel"},/area/chapel/main)
-"aPo" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced/tinted,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main)
+"aPo" = (/obj/structure/grille,/obj/structure/window/reinforced/tinted/fulltile,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main)
"aPp" = (/obj/machinery/camera{c_tag = "Escape Arm Holding Area"; dir = 4},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/hallway/secondary/exit)
"aPq" = (/turf/simulated/floor/plasteel,/area/hallway/secondary/exit)
"aPr" = (/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel,/area/hallway/secondary/exit)
@@ -2174,12 +2174,12 @@
"aPP" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/structure/table,/obj/machinery/chem_dispenser/drinks/beer,/obj/item/device/radio/intercom{pixel_y = 25},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar)
"aPQ" = (/turf/simulated/wall,/area/storage/tools)
"aPR" = (/turf/simulated/wall/r_wall,/area/bridge)
-"aPS" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/preopen{id = "bridge blast"; layer = 2.9; name = "bridge blast door"},/turf/simulated/floor/plating,/area/bridge)
-"aPT" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor/preopen{id = "bridge blast"; layer = 2.9; name = "bridge blast door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/bridge)
-"aPU" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/status_display{density = 0; layer = 4},/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/preopen{id = "bridge blast"; layer = 2.9; name = "bridge blast door"},/turf/simulated/floor/plating,/area/bridge)
-"aPV" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/preopen{id = "bridge blast"; layer = 2.9; name = "bridge blast door"},/turf/simulated/floor/plating,/area/bridge)
-"aPW" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/status_display{density = 0; layer = 4},/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/preopen{id = "bridge blast"; layer = 2.9; name = "bridge blast door"},/turf/simulated/floor/plating,/area/bridge)
-"aPX" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/preopen{id = "bridge blast"; layer = 2.9; name = "bridge blast door"},/turf/simulated/floor/plating,/area/bridge)
+"aPS" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "bridge blast"; layer = 2.9; name = "bridge blast door"},/turf/simulated/floor/plating,/area/bridge)
+"aPT" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor/preopen{id = "bridge blast"; layer = 2.9; name = "bridge blast door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/bridge)
+"aPU" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/status_display{density = 0; layer = 4},/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "bridge blast"; layer = 2.9; name = "bridge blast door"},/turf/simulated/floor/plating,/area/bridge)
+"aPV" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "bridge blast"; layer = 2.9; name = "bridge blast door"},/turf/simulated/floor/plating,/area/bridge)
+"aPW" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/status_display{density = 0; layer = 4},/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "bridge blast"; layer = 2.9; name = "bridge blast door"},/turf/simulated/floor/plating,/area/bridge)
+"aPX" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "bridge blast"; layer = 2.9; name = "bridge blast door"},/turf/simulated/floor/plating,/area/bridge)
"aPY" = (/obj/structure/bed/stool,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar)
"aPZ" = (/obj/structure/table,/obj/machinery/computer/security/telescreen/entertainment{pixel_x = -31},/obj/item/clothing/head/hardhat/cakehat,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar)
"aQa" = (/obj/structure/table,/obj/item/weapon/kitchen/fork,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar)
@@ -2238,7 +2238,7 @@
"aRb" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/port)
"aRc" = (/obj/machinery/door/airlock{name = "Port Emergency Storage"; req_access_txt = "0"},/turf/simulated/floor/plating,/area/storage/emergency2)
"aRd" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 1},/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 1},/area/hallway/secondary/entry)
-"aRe" = (/obj/structure/grille,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/storage/tools)
+"aRe" = (/obj/structure/grille,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/storage/tools)
"aRf" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass{name = "Auxiliary Tool Storage"; req_access_txt = "12"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/storage/tools)
"aRg" = (/obj/machinery/vending/boozeomat,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar)
"aRh" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel,/area/hallway/primary/central)
@@ -2280,9 +2280,9 @@
"aRR" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main)
"aRS" = (/turf/simulated/floor/carpet,/area/chapel/main)
"aRT" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel,/area/storage/tools)
-"aRU" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/secondary/exit)
+"aRU" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/secondary/exit)
"aRV" = (/obj/machinery/power/apc{dir = 1; name = "Auxiliary Tool Storage APC"; pixel_y = 24},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plasteel,/area/storage/tools)
-"aRW" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/secondary/exit)
+"aRW" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/secondary/exit)
"aRX" = (/obj/machinery/light,/turf/simulated/floor/plasteel{dir = 2; icon_state = "arrival"},/area/hallway/secondary/entry)
"aRY" = (/turf/simulated/floor/plasteel{dir = 2; icon_state = "arrival"},/area/hallway/secondary/entry)
"aRZ" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitecorner"},/area/hallway/secondary/entry)
@@ -2304,7 +2304,7 @@
"aSp" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar)
"aSq" = (/obj/structure/table/wood/poker,/obj/item/stack/spacecash/c100{amount = 5},/obj/item/stack/spacecash/c10{amount = 10},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar)
"aSr" = (/turf/simulated/floor/plasteel,/area/storage/tools)
-"aSs" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/storage/tools)
+"aSs" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/storage/tools)
"aSt" = (/obj/structure/table,/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/rods{amount = 50},/turf/simulated/floor/plasteel,/area/storage/tools)
"aSu" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "yellowcorner"},/area/bridge)
"aSv" = (/obj/structure/table/reinforced,/obj/item/device/assembly/flash/handheld,/obj/item/device/assembly/flash/handheld,/turf/simulated/floor/plasteel,/area/bridge)
@@ -2445,7 +2445,7 @@
"aVa" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/plasteel,/area/storage/tools)
"aVb" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 32},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{dir = 5; icon_state = "blue"},/area/hallway/primary/central)
"aVc" = (/obj/structure/sign/securearea{pixel_x = 32; pixel_y = 0},/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/preopen{id = "bridge blast"; name = "bridge blast door"},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/bridge)
-"aVd" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/bridge)
+"aVd" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/bridge)
"aVe" = (/obj/machinery/camera{c_tag = "Bridge West"; dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 1},/area/bridge)
"aVf" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 4},/area/bridge)
"aVg" = (/obj/structure/bed/chair{dir = 1; name = "Security Station"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/bridge)
@@ -2494,7 +2494,7 @@
"aVX" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plasteel,/area/hallway/secondary/exit)
"aVY" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/carpet,/area/library)
"aVZ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass{name = "Library"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/carpet,/area/library)
-"aWa" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hallway/secondary/entry)
+"aWa" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/secondary/entry)
"aWb" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/carpet,/area/library)
"aWc" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel,/area/hallway/secondary/entry)
"aWd" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; on = 1; scrub_Toxins = 0},/turf/simulated/floor/carpet,/area/library)
@@ -2613,7 +2613,7 @@
"aYm" = (/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 6},/area/hallway/primary/central)
"aYn" = (/obj/machinery/camera{c_tag = "Bridge West Entrance"; dir = 1},/turf/simulated/floor/plasteel{dir = 0; icon_state = "blue"},/area/hallway/primary/central)
"aYo" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/preopen{id = "bridge blast"; name = "bridge blast door"},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/bridge)
-"aYp" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/bridge)
+"aYp" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/bridge)
"aYq" = (/obj/structure/closet/emcloset,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{dir = 0; icon_state = "blue"},/area/bridge)
"aYr" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor/plasteel{dir = 0; icon_state = "blue"},/area/bridge)
"aYs" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 0; icon_state = "blue"},/area/bridge)
@@ -2714,7 +2714,7 @@
"baj" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/fancy/donut_box,/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters/preopen{id = "kitchen"; name = "kitchen shutters"},/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/kitchen)
"bak" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters/preopen{id = "kitchen"; name = "kitchen shutters"},/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/kitchen)
"bal" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plasteel,/area/hydroponics)
-"bam" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/hydroponics)
+"bam" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hydroponics)
"ban" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/window/northleft{name = "Hydroponics Desk"; req_access_txt = "35"},/turf/simulated/floor/plasteel,/area/hydroponics)
"bao" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/carpet,/area/crew_quarters/captain)
"bap" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/window/westright{dir = 1; name = "Hydroponics Desk"; req_access_txt = "35"},/turf/simulated/floor/plasteel,/area/hydroponics)
@@ -2802,7 +2802,7 @@
"bbT" = (/obj/item/weapon/storage/box,/obj/structure/table,/obj/item/weapon/storage/box,/obj/item/weapon/storage/box,/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_y = 20},/turf/simulated/floor/plasteel{icon_state = "arrival"; dir = 1},/area/quartermaster/office)
"bbU" = (/obj/structure/table,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/turf/simulated/floor/plasteel{icon_state = "arrival"; dir = 5},/area/quartermaster/office)
"bbV" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plasteel,/area/hallway/primary/central)
-"bbW" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "heads_meeting"; layer = 2.9; name = "privacy shutters"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/bridge/meeting_room)
+"bbW" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "heads_meeting"; layer = 2.9; name = "privacy shutters"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/bridge/meeting_room)
"bbX" = (/turf/simulated/floor/wood,/area/bridge/meeting_room)
"bbY" = (/obj/machinery/recharger{pixel_y = 4},/obj/structure/table,/turf/simulated/floor/wood,/area/bridge/meeting_room)
"bbZ" = (/obj/structure/table/wood,/turf/simulated/floor/carpet,/area/crew_quarters/captain)
@@ -2855,7 +2855,7 @@
"bcU" = (/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel,/area/quartermaster/office)
"bcV" = (/obj/structure/table,/obj/item/device/destTagger{pixel_x = 4; pixel_y = 3},/obj/item/device/destTagger{pixel_x = 4; pixel_y = 3},/obj/machinery/light{dir = 4},/turf/simulated/floor/plasteel{icon_state = "arrival"; dir = 4},/area/quartermaster/office)
"bcW" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel,/area/hallway/primary/central)
-"bcX" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/preopen{id = "heads_meeting"; layer = 2.9; name = "privacy shutters"},/turf/simulated/floor/plating,/area/bridge/meeting_room)
+"bcX" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "heads_meeting"; layer = 2.9; name = "privacy shutters"},/turf/simulated/floor/plating,/area/bridge/meeting_room)
"bcY" = (/obj/item/weapon/hand_labeler,/obj/item/device/assembly/timer,/obj/structure/table,/turf/simulated/floor/wood,/area/bridge/meeting_room)
"bcZ" = (/obj/structure/table/wood,/obj/item/device/radio/intercom{dir = 8; freerange = 1; name = "Station Intercom (Command)"; pixel_x = 0},/turf/simulated/floor/carpet,/area/bridge/meeting_room)
"bda" = (/obj/structure/bed/chair/comfy/black{dir = 4},/turf/simulated/floor/carpet,/area/bridge/meeting_room)
@@ -2974,7 +2974,7 @@
"bfj" = (/obj/structure/disposaloutlet{dir = 1},/obj/structure/disposalpipe/trunk,/turf/simulated/floor/plating,/area/quartermaster/office)
"bfk" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/plasteel{dir = 8; icon_state = "brown"},/area/quartermaster/office)
"bfl" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/quartermaster/office)
-"bfm" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/quartermaster/office)
+"bfm" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/quartermaster/office)
"bfn" = (/obj/machinery/conveyor_switch/oneway{convdir = -1; id = "packageExternal"},/turf/simulated/floor/plasteel{icon_state = "arrival"; dir = 4},/area/quartermaster/office)
"bfo" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "browncorner"},/area/hallway/primary/central)
"bfp" = (/obj/machinery/requests_console{announcementConsole = 1; department = "Bridge"; departmentType = 5; name = "Bridge RC"; pixel_y = -30},/obj/machinery/light,/turf/simulated/floor/wood,/area/bridge/meeting_room)
@@ -3004,7 +3004,7 @@
"bfN" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8},/turf/simulated/floor/plasteel{dir = 8; icon_state = "brown"},/area/quartermaster/office)
"bfO" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel,/area/hallway/primary/starboard)
"bfP" = (/obj/machinery/power/apc{dir = 2; name = "Starboard Primary Hallway APC"; pixel_y = -24},/obj/structure/cable,/turf/simulated/floor/plasteel,/area/hallway/primary/starboard)
-"bfQ" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/quartermaster/office)
+"bfQ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/quartermaster/office)
"bfR" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/folder/yellow,/obj/item/weapon/pen{pixel_x = 4; pixel_y = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "arrival"; dir = 4},/area/quartermaster/office)
"bfS" = (/turf/simulated/wall,/area/storage/emergency)
"bfT" = (/turf/simulated/wall,/area/assembly/chargebay)
@@ -3074,7 +3074,7 @@
"bhf" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 0; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay)
"bhg" = (/turf/simulated/floor/plasteel{dir = 2; icon_state = "whiteblue"},/area/medical/medbay)
"bhh" = (/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay)
-"bhi" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/checkpoint/medical)
+"bhi" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/checkpoint/medical)
"bhj" = (/obj/machinery/camera{c_tag = "Security Post - Medbay"; dir = 2; network = list("SS13")},/obj/machinery/requests_console{department = "Security"; departmentType = 5; pixel_y = 30},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/checkpoint/medical)
"bhk" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/obj/machinery/button/door{desc = "A remote control switch for the medbay foyer."; id = "MedbayFoyer"; name = "Medbay Doors Control"; normaldoorcontrol = 1; pixel_x = 0; pixel_y = 26; req_access_txt = "5"},/obj/item/weapon/book/manual/wiki/security_space_law,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/checkpoint/medical)
"bhl" = (/obj/structure/filingcabinet,/obj/machinery/newscaster{pixel_x = 32; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/checkpoint/medical)
@@ -3090,11 +3090,11 @@
"bhv" = (/obj/machinery/computer/rdconsole/robotics,/obj/machinery/alarm{pixel_y = 25},/turf/simulated/floor/plasteel{icon_state = "white"},/area/assembly/robotics)
"bhw" = (/obj/machinery/r_n_d/circuit_imprinter,/turf/simulated/floor/plasteel{icon_state = "white"},/area/assembly/robotics)
"bhx" = (/obj/structure/table,/obj/item/weapon/book/manual/robotics_cyborgs{pixel_x = 2; pixel_y = 5},/obj/item/weapon/storage/belt/utility,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/machinery/requests_console{department = "Robotics"; departmentType = 2; name = "Robotics RC"; pixel_y = 30},/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/assembly/robotics)
-"bhy" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters/preopen{id = "robotics"; name = "robotics lab shutters"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/assembly/robotics)
+"bhy" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters/preopen{id = "robotics"; name = "robotics lab shutters"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/assembly/robotics)
"bhz" = (/obj/structure/table/reinforced,/obj/machinery/door/window/eastright{base_state = "left"; dir = 2; icon_state = "left"; name = "Robotics Desk"; req_access_txt = "29"},/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/machinery/door/poddoor/shutters/preopen{id = "robotics"; name = "robotics lab shutters"},/turf/simulated/floor/plating,/area/assembly/robotics)
"bhA" = (/turf/simulated/wall,/area/medical/research{name = "Research Division"})
"bhB" = (/obj/machinery/door/airlock/research{name = "Research Division Access"; req_access_txt = "47"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"})
-"bhC" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters/preopen{id = "rnd"; name = "research lab shutters"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/toxins/lab)
+"bhC" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters/preopen{id = "rnd"; name = "research lab shutters"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/toxins/lab)
"bhD" = (/obj/structure/table/reinforced,/obj/machinery/door/window/southright{name = "Research and Development Desk"; req_access_txt = "7"},/obj/machinery/door/poddoor/shutters/preopen{id = "rnd"; name = "research lab shutters"},/turf/simulated/floor/plating,/area/toxins/lab)
"bhE" = (/obj/structure/table,/obj/item/stack/sheet/glass{amount = 50; pixel_x = 3; pixel_y = 3},/obj/item/stack/sheet/metal{amount = 50},/obj/item/clothing/glasses/welding,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/lab)
"bhF" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = 2; pixel_y = 3},/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/lab)
@@ -3170,7 +3170,7 @@
"biX" = (/obj/machinery/camera{c_tag = "Research and Development"; dir = 2; network = list("SS13","RD"); pixel_x = 22},/obj/machinery/button/door{dir = 2; id = "rnd"; name = "Shutters Control Button"; pixel_x = -6; pixel_y = 24; req_access_txt = "47"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitepurplecorner"},/area/toxins/lab)
"biY" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"biZ" = (/obj/machinery/computer/shuttle/syndicate,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate)
-"bja" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/disposal)
+"bja" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/disposal)
"bjb" = (/obj/machinery/conveyor{dir = 1; id = "garbage"},/obj/structure/sign/vacuum{pixel_x = -32},/turf/simulated/floor/plating,/area/maintenance/disposal)
"bjc" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/disposal)
"bjd" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/disposal)
@@ -3251,11 +3251,11 @@
"bkA" = (/turf/simulated/floor/plating,/area/maintenance/disposal)
"bkB" = (/obj/machinery/button/door{id = "Disposal Exit"; name = "Disposal Vent Control"; pixel_x = -25; pixel_y = 4; req_access_txt = "12"},/obj/machinery/button/massdriver{id = "trash"; pixel_x = -26; pixel_y = -6},/obj/structure/bed/stool,/turf/simulated/floor/plating,/area/maintenance/disposal)
"bkC" = (/obj/effect/decal/cleanable/oil,/obj/machinery/light_switch{pixel_x = 25; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/disposal)
-"bkD" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/port)
+"bkD" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/port)
"bkE" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/turf/simulated/wall/r_wall,/area/maintenance/port)
"bkF" = (/turf/simulated/wall/r_wall,/area/maintenance/port)
"bkG" = (/obj/machinery/door/airlock/maintenance{name = "Cargo Bay Maintenance"; req_access_txt = "31"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/quartermaster/storage)
-"bkH" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plating,/area/quartermaster/office)
+"bkH" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plating,/area/quartermaster/office)
"bkI" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/engine/gravity_generator)
"bkJ" = (/obj/structure/grille,/obj/structure/window/fulltile,/turf/simulated/floor/plating,/area/quartermaster/storage)
"bkK" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/chemistry)
@@ -3300,10 +3300,10 @@
"blx" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/assembly/chargebay)
"bly" = (/obj/structure/table,/obj/item/stack/sheet/plasteel{amount = 10},/obj/item/stack/cable_coil,/obj/item/device/assembly/flash/handheld,/obj/item/device/assembly/flash/handheld,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/assembly/robotics)
"blz" = (/obj/structure/table,/obj/item/stack/sheet/glass{amount = 20; pixel_x = -3; pixel_y = 6},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/device/multitool{pixel_x = 3},/obj/item/device/multitool{pixel_x = 3},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/assembly/robotics)
-"blA" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/assembly/robotics)
+"blA" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/assembly/robotics)
"blB" = (/obj/machinery/mecha_part_fabricator,/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/assembly/robotics)
"blC" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/assembly/robotics)
-"blD" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/assembly/robotics)
+"blD" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/assembly/robotics)
"blE" = (/obj/machinery/ai_status_display{pixel_x = 32; pixel_y = 0},/obj/structure/table,/obj/item/device/assembly/flash/handheld,/obj/item/device/assembly/flash/handheld,/obj/item/device/assembly/flash/handheld,/obj/item/device/assembly/flash/handheld,/obj/item/device/assembly/flash/handheld,/turf/simulated/floor/plasteel{icon_state = "white"},/area/assembly/robotics)
"blF" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/assembly/robotics)
"blG" = (/obj/structure/bed/stool,/obj/effect/landmark/start{name = "Roboticist"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/assembly/robotics)
@@ -3322,7 +3322,7 @@
"blT" = (/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"blU" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/mob/living/simple_animal/cockroach,/turf/simulated/floor/wood,/area/crew_quarters/sleep)
"blV" = (/obj/machinery/light/small,/turf/simulated/floor/plating,/area/maintenance/disposal)
-"blW" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/quartermaster/storage)
+"blW" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/quartermaster/storage)
"blX" = (/obj/machinery/door/airlock/research{name = "Research Division Access"; req_access_txt = "47"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"})
"blY" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/quartermaster/storage)
"blZ" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warnwhite"},/area/toxins/lab)
@@ -3372,7 +3372,7 @@
"bmR" = (/obj/structure/table,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/morgue)
"bmS" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/hallway/primary/central)
"bmT" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/chemistry)
-"bmU" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/security/checkpoint/medical)
+"bmU" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/security/checkpoint/medical)
"bmV" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/airlock/medical{name = "Morgue"; req_access_txt = "6;5"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/morgue)
"bmW" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/wall,/area/medical/morgue)
"bmX" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,/turf/simulated/wall/r_wall,/area/medical/genetics)
@@ -3423,10 +3423,10 @@
"bnQ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/bed/dogbed{anchored = 1; desc = "Ian's bed! Looks comfy."; name = "Ian's bed"},/mob/living/simple_animal/pet/dog/corgi/Ian{dir = 8},/turf/simulated/floor/plasteel,/area/crew_quarters/heads)
"bnR" = (/obj/machinery/computer/security/telescreen{desc = "Used for watching Prison Wing holding areas."; name = "Prison Monitor"; network = list("Prison"); pixel_x = 0; pixel_y = 30},/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk,/turf/simulated/floor/plasteel,/area/crew_quarters/heads)
"bnS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/crew_quarters/heads)
-"bnT" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_x = -32; pixel_y = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/gravity_generator)
+"bnT" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_x = -32; pixel_y = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/gravity_generator)
"bnU" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/glass_engineering{name = "Gravity Generator"; req_access_txt = "11"; req_one_access_txt = "0"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/engine/gravity_generator)
-"bnV" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/gravity_generator)
-"bnW" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_x = 32; pixel_y = 0},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/gravity_generator)
+"bnV" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/gravity_generator)
+"bnW" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_x = 32; pixel_y = 0},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/gravity_generator)
"bnX" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/carpet,/area/crew_quarters/captain)
"bnY" = (/obj/structure/bed,/obj/item/weapon/bedsheet/captain,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/carpet,/area/crew_quarters/captain)
"bnZ" = (/obj/structure/table/wood,/obj/item/device/flashlight/lamp/green,/turf/simulated/floor/carpet,/area/crew_quarters/captain)
@@ -3436,7 +3436,7 @@
"bod" = (/obj/structure/table,/obj/item/weapon/folder/white,/obj/item/device/radio/headset/headset_med,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/chemistry)
"boe" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{id_tag = "MedbayFoyer"; name = "Medbay"; req_access_txt = "5"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whiteblue"},/area/medical/medbay)
"bof" = (/turf/simulated/wall,/area/medical/medbay)
-"bog" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/medbay)
+"bog" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/medbay)
"boh" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{id_tag = "MedbayFoyer"; name = "Medbay"; req_access_txt = "5"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whiteblue"},/area/medical/medbay)
"boi" = (/obj/machinery/computer/med_data,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay)
"boj" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/machinery/requests_console{announcementConsole = 0; department = "Medbay"; departmentType = 1; name = "Medbay RC"; pixel_x = 30; pixel_y = 0; pixel_z = 0},/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay)
@@ -3449,7 +3449,7 @@
"boq" = (/obj/structure/bed/roller,/turf/simulated/floor/plasteel{dir = 4; icon_state = "whiteblue"},/area/medical/medbay)
"bor" = (/obj/structure/extinguisher_cabinet{pixel_x = -27},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/bluegrid,/area/assembly/chargebay)
"bos" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/plasteel,/area/assembly/robotics)
-"bot" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/assembly/robotics)
+"bot" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/assembly/robotics)
"bou" = (/turf/simulated/floor/plasteel,/area/assembly/robotics)
"bov" = (/obj/structure/table,/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/obj/item/weapon/stock_parts/cell/high/plus,/obj/item/weapon/stock_parts/cell/high/plus{pixel_x = 5; pixel_y = -5},/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/item/weapon/crowbar,/turf/simulated/floor/plasteel{icon_state = "white"},/area/assembly/robotics)
"bow" = (/obj/machinery/door/firedoor/heavy,/obj/machinery/door/poddoor/preopen{id = "Biohazard"; name = "biohazard containment door"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/medical/research{name = "Research Division"})
@@ -3464,7 +3464,7 @@
"boF" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"boG" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/assembly/chargebay)
"boH" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
-"boI" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/quartermaster/storage)
+"boI" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/quartermaster/storage)
"boJ" = (/obj/machinery/conveyor_switch/oneway{id = "QMLoad2"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/quartermaster/storage)
"boK" = (/turf/simulated/floor/plasteel{icon_state = "bot"},/area/quartermaster/storage)
"boL" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plasteel,/area/assembly/chargebay)
@@ -3512,7 +3512,7 @@
"bpB" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/quartermaster/office)
"bpC" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/hallway/primary/central)
"bpD" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Chemistry Lab"; req_access_txt = "5; 33"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/chemistry)
-"bpE" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/genetics)
+"bpE" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/genetics)
"bpF" = (/obj/structure/table/reinforced,/obj/machinery/door/window/southleft{dir = 1; name = "Chemistry Desk"; req_access_txt = "33"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/chemistry)
"bpG" = (/obj/machinery/power/apc{dir = 1; name = "Genetics APC"; pixel_y = 24},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics)
"bpH" = (/obj/structure/table/glass,/obj/item/weapon/folder/white,/obj/item/device/radio/headset/headset_medsci,/obj/machinery/requests_console{department = "Genetics"; departmentType = 0; name = "Genetics Requests Console"; pixel_x = 0; pixel_y = 30},/obj/item/weapon/storage/pill_bottle/mutadone,/obj/item/weapon/storage/pill_bottle/mannitol,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics)
@@ -3520,7 +3520,7 @@
"bpJ" = (/obj/machinery/light{dir = 1},/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics)
"bpK" = (/mob/living/carbon/monkey,/turf/simulated/floor/plasteel,/area/medical/genetics)
"bpL" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plasteel,/area/medical/genetics)
-"bpM" = (/obj/structure/grille,/obj/structure/disposalpipe/segment,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/medical/chemistry)
+"bpM" = (/obj/structure/grille,/obj/structure/disposalpipe/segment,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/medical/chemistry)
"bpN" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay)
"bpO" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay)
"bpP" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay)
@@ -3557,7 +3557,7 @@
"bqu" = (/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel,/area/quartermaster/office)
"bqv" = (/obj/structure/grille,/obj/structure/window/fulltile,/turf/simulated/floor/plating,/area/hallway/primary/central)
"bqw" = (/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 4},/area/hallway/primary/central)
-"bqx" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door/poddoor/shutters/preopen{id = "hop"; layer = 2.9; name = "Privacy Shutters"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/heads)
+"bqx" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door/poddoor/shutters/preopen{id = "hop"; layer = 2.9; name = "Privacy Shutters"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/crew_quarters/heads)
"bqy" = (/turf/simulated/floor/plasteel{icon_state = "bot"},/area/hallway/primary/central)
"bqz" = (/turf/simulated/floor/carpet,/area/crew_quarters/heads)
"bqA" = (/obj/machinery/computer/card,/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 10},/area/crew_quarters/heads)
@@ -3572,7 +3572,7 @@
"bqJ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall/r_wall,/area/teleporter)
"bqK" = (/obj/machinery/door/airlock/maintenance{name = "Teleporter Maintenance"; req_access_txt = "17"},/obj/structure/sign/securearea{pixel_x = -32; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/teleporter)
"bqL" = (/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/hallway/primary/central)
-"bqM" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/medical/medbay)
+"bqM" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/medical/medbay)
"bqN" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plasteel,/area/hallway/primary/central)
"bqO" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whiteyellow"},/area/medical/medbay)
"bqP" = (/obj/structure/bed/roller,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay)
@@ -3632,8 +3632,8 @@
"brR" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,/turf/simulated/floor/plasteel,/area/quartermaster/office)
"brS" = (/turf/simulated/floor/plasteel,/area/crew_quarters/heads)
"brT" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/hallway/primary/central)
-"brU" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = -32},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable,/obj/machinery/door/poddoor/shutters/preopen{id = "hop"; layer = 2.9; name = "Privacy Shutters"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/heads)
-"brV" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/medical/medbay)
+"brU" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = -32},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable,/obj/machinery/door/poddoor/shutters/preopen{id = "hop"; layer = 2.9; name = "Privacy Shutters"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/crew_quarters/heads)
+"brV" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/medical/medbay)
"brW" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/filingcabinet/chestdrawer,/turf/simulated/floor/plasteel,/area/crew_quarters/heads)
"brX" = (/obj/structure/table,/obj/item/weapon/storage/box/masks{pixel_x = 0; pixel_y = 0},/obj/item/weapon/storage/box/gloves{pixel_x = 3; pixel_y = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay)
"brY" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay)
@@ -3758,7 +3758,7 @@
"bun" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics)
"buo" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"})
"bup" = (/obj/machinery/light,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"})
-"buq" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/medical/genetics)
+"buq" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/medical/genetics)
"bur" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics)
"bus" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"})
"but" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics)
@@ -3822,14 +3822,14 @@
"bvz" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics)
"bvA" = (/obj/structure/sign/securearea,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/medical/genetics)
"bvB" = (/obj/machinery/camera{c_tag = "Genetics Access"; dir = 8; network = list("SS13"); pixel_x = 0; pixel_y = -22},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics)
-"bvC" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/security/checkpoint/science)
+"bvC" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/security/checkpoint/science)
"bvD" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"})
"bvE" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 6; icon_state = "whitehall"},/area/medical/research{name = "Research Division"})
"bvF" = (/obj/structure/table,/obj/item/weapon/cartridge/quartermaster{pixel_x = 6; pixel_y = 5},/obj/item/weapon/cartridge/quartermaster,/obj/item/weapon/cartridge/quartermaster{pixel_x = -4; pixel_y = 7},/obj/machinery/requests_console{department = "Cargo Bay"; departmentType = 2; pixel_x = -30; pixel_y = 0},/obj/item/weapon/coin/silver,/turf/simulated/floor/plasteel{dir = 9; icon_state = "brown"},/area/quartermaster/qm)
"bvG" = (/obj/machinery/light{dir = 1},/obj/machinery/light_switch{pixel_y = 28},/turf/simulated/floor/plasteel,/area/quartermaster/miningdock)
"bvH" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 9; icon_state = "whitehall"},/area/medical/research{name = "Research Division"})
"bvI" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/quartermaster/miningdock)
-"bvJ" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/hor)
+"bvJ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/crew_quarters/hor)
"bvK" = (/turf/simulated/wall,/area/crew_quarters/hor)
"bvL" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/checkpoint/supply)
"bvM" = (/obj/machinery/light_switch{pixel_x = -20; pixel_y = 0},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/explab)
@@ -3849,7 +3849,7 @@
"bwa" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/hallway/primary/central)
"bwb" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "warningcorner"; dir = 4},/area/hallway/primary/central)
"bwc" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/quartermaster/office)
-"bwd" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/checkpoint/supply)
+"bwd" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/checkpoint/supply)
"bwe" = (/turf/simulated/wall,/area/security/checkpoint/supply)
"bwf" = (/obj/machinery/camera{c_tag = "Cargo Bay Entrance"; dir = 4; network = list("SS13")},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 8; icon_state = "browncorner"},/area/hallway/primary/central)
"bwg" = (/obj/machinery/door/poddoor/shutters/preopen{id = "hopqueue"; name = "HoP Queue Shutters"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "loadingarea"},/area/hallway/primary/central)
@@ -3888,7 +3888,7 @@
"bwN" = (/obj/machinery/light_switch{pixel_x = 8; pixel_y = 28},/obj/machinery/button/door{id = "Biohazard"; name = "Biohazard Shutter Control"; pixel_x = -5; pixel_y = 28; req_access_txt = "47"},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/checkpoint/science)
"bwO" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/turf/simulated/floor/plasteel{dir = 9; icon_state = "whitehall"},/area/medical/research{name = "Research Division"})
"bwP" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate)
-"bwQ" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/crew_quarters/hor)
+"bwQ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/crew_quarters/hor)
"bwR" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; on = 1; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/hor)
"bwS" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel,/area/quartermaster/qm)
"bwT" = (/obj/machinery/door/airlock/glass_mining{name = "Quartermaster"; req_access_txt = "41"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/quartermaster/qm)
@@ -3907,7 +3907,7 @@
"bxg" = (/obj/structure/reagent_dispensers/watertank,/obj/effect/decal/cleanable/cobweb2,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint)
"bxh" = (/obj/structure/bed/chair/comfy/black{dir = 1; icon_state = "comfychair"; name = "pilot's chair"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate)
"bxi" = (/obj/machinery/computer/aifixer,/obj/machinery/requests_console{announcementConsole = 1; department = "Research Director's Desk"; departmentType = 5; name = "Research Director RC"; pixel_x = -2; pixel_y = 30},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/hor)
-"bxj" = (/obj/machinery/computer/security/telescreen{desc = "Used for watching the RD's goons from the safety of his office."; name = "Research Monitor"; network = list("RD"); pixel_x = 0; pixel_y = 2},/obj/structure/table,/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/hor)
+"bxj" = (/obj/machinery/computer/security/telescreen{desc = "Used for watching the RD's goons and the AI's satellite from the safety of his office."; name = "Research Monitor"; network = list("RD","MiniSat"); pixel_x = 0; pixel_y = 2},/obj/structure/table,/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/hor)
"bxk" = (/obj/machinery/ai_status_display{pixel_y = 32},/turf/simulated/floor/plasteel{icon_state = "warnwhite"; dir = 1},/area/crew_quarters/hor)
"bxl" = (/obj/structure/rack,/obj/item/weapon/circuitboard/aicore{pixel_x = -2; pixel_y = 4},/turf/simulated/floor/plasteel{dir = 9; icon_state = "warnwhite"},/area/crew_quarters/hor)
"bxm" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/flora/tree/pine/xmas,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main)
@@ -3921,7 +3921,7 @@
"bxu" = (/turf/simulated/wall,/area/quartermaster/qm)
"bxv" = (/obj/structure/bed/chair/office/dark{dir = 4},/obj/effect/landmark/start/depsec/science,/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel,/area/security/checkpoint/science)
"bxw" = (/obj/machinery/door/airlock/glass_mining{name = "Quartermaster"; req_access_txt = "41"},/turf/simulated/floor/plasteel,/area/quartermaster/qm)
-"bxx" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/quartermaster/qm)
+"bxx" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/quartermaster/qm)
"bxy" = (/turf/simulated/wall,/area/quartermaster/miningdock)
"bxz" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall,/area/quartermaster/miningdock)
"bxA" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/mining{req_access_txt = "48"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/quartermaster/miningdock)
@@ -3960,9 +3960,9 @@
"byh" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/command{name = "Server Room"; req_access = null; req_access_txt = "30"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/toxins/server)
"byi" = (/turf/simulated/wall,/area/security/checkpoint/science)
"byj" = (/obj/machinery/door/airlock/glass_security{name = "Security Office"; req_access_txt = "63"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/checkpoint/science)
-"byk" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/checkpoint/science)
+"byk" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/checkpoint/science)
"byl" = (/obj/structure/table,/obj/item/weapon/folder/yellow,/obj/item/weapon/pen{pixel_x = 4; pixel_y = 4},/obj/item/weapon/pen/red,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 2; icon_state = "brown"},/area/quartermaster/qm)
-"bym" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/quartermaster/qm)
+"bym" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/quartermaster/qm)
"byn" = (/obj/structure/filingcabinet,/obj/machinery/light_switch{pixel_y = -25},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 6; icon_state = "brown"},/area/quartermaster/qm)
"byo" = (/obj/structure/table,/obj/machinery/button/door{id = "Biohazard"; name = "Biohazard Shutter Control"; pixel_x = -5; pixel_y = 5; req_access_txt = "47"},/obj/machinery/button/door{id = "rnd2"; name = "Research Lab Shutter Control"; pixel_x = 5; pixel_y = 5; req_access_txt = "47"},/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/hor)
"byp" = (/obj/machinery/computer/robotics,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/hor)
@@ -3971,7 +3971,7 @@
"bys" = (/obj/structure/rack,/obj/item/device/aicard,/turf/simulated/floor/plasteel{dir = 8; icon_state = "warnwhite"},/area/crew_quarters/hor)
"byt" = (/turf/simulated/wall/r_wall,/area/crew_quarters/hor)
"byu" = (/obj/structure/displaycase/labcage,/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warnwhite"},/area/crew_quarters/hor)
-"byv" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "telelab"; name = "test chamber blast door"},/obj/structure/window/fulltile/reinforced,/obj/machinery/door/firedoor/heavy,/turf/simulated/floor/engine,/area/toxins/explab)
+"byv" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "telelab"; name = "test chamber blast door"},/obj/structure/window/reinforced/fulltile,/obj/machinery/door/firedoor/heavy,/turf/simulated/floor/engine,/area/toxins/explab)
"byw" = (/obj/machinery/door/poddoor/preopen{id = "telelab"; name = "test chamber blast door"},/obj/machinery/door/firedoor/heavy,/turf/simulated/floor/engine,/area/toxins/explab)
"byx" = (/obj/machinery/atmospherics/components/unary/heat_reservoir/heater{dir = 8},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"byy" = (/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/quartermaster/miningdock)
@@ -3985,7 +3985,7 @@
"byG" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/quartermaster/miningdock)
"byH" = (/obj/machinery/light_switch{pixel_y = -25},/obj/structure/closet,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/security/checkpoint/supply)
"byI" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/checkpoint/supply)
-"byJ" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/security/checkpoint/supply)
+"byJ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/security/checkpoint/supply)
"byK" = (/turf/simulated/floor/plasteel,/area/security/checkpoint/supply)
"byL" = (/obj/structure/bed/chair/office/dark{dir = 1},/obj/effect/landmark/start/depsec/supply,/turf/simulated/floor/plasteel,/area/security/checkpoint/supply)
"byM" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 27},/obj/machinery/computer/security/mining,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/checkpoint/supply)
@@ -4024,7 +4024,7 @@
"bzt" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; external_pressure_bound = 140; on = 1; pressure_checks = 0},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server)
"bzu" = (/obj/machinery/r_n_d/server/robotics,/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server)
"bzv" = (/obj/machinery/atmospherics/pipe/simple{dir = 10},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/toxins/server)
-"bzw" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/structure/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'."; name = "SERVER ROOM"; pixel_y = 32},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/toxins/server)
+"bzw" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/structure/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'."; name = "SERVER ROOM"; pixel_y = 32},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/toxins/server)
"bzx" = (/obj/machinery/atmospherics/components/unary/cold_sink/freezer{current_temperature = 80; dir = 2; on = 1},/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/toxins/server)
"bzy" = (/obj/machinery/camera{c_tag = "Server Room"; dir = 2; network = list("SS13","RD"); pixel_x = 22},/obj/machinery/power/apc{dir = 1; name = "Server Room APC"; pixel_x = 0; pixel_y = 25},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/toxins/server)
"bzz" = (/obj/structure/reagent_dispensers/peppertank{pixel_x = -30; pixel_y = 0},/obj/machinery/alarm{pixel_y = 25},/obj/structure/closet,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/checkpoint/science)
@@ -4153,7 +4153,7 @@
"bBS" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; external_pressure_bound = 120; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server)
"bBT" = (/obj/machinery/r_n_d/server/core,/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server)
"bBU" = (/obj/machinery/atmospherics/pipe/simple{dir = 9},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/toxins/server)
-"bBV" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'."; name = "SERVER ROOM"; pixel_y = -32},/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/toxins/server)
+"bBV" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'."; name = "SERVER ROOM"; pixel_y = -32},/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/toxins/server)
"bBW" = (/obj/structure/table,/obj/item/weapon/folder/white,/obj/item/weapon/pen,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/toxins/server)
"bBX" = (/obj/machinery/computer/rdservercontrol,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/toxins/server)
"bBY" = (/obj/item/device/radio/intercom{pixel_x = -25},/obj/structure/filingcabinet,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/security/checkpoint/science)
@@ -4200,7 +4200,7 @@
"bCN" = (/obj/structure/disposalpipe/trunk,/obj/machinery/disposal/bin,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper)
"bCO" = (/obj/structure/table,/obj/item/weapon/storage/box/bodybags{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/rxglasses,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper)
"bCP" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall,/area/medical/sleeper)
-"bCQ" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/sleeper)
+"bCQ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/sleeper)
"bCR" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay)
"bCS" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitebluecorner"},/area/medical/sleeper)
"bCT" = (/obj/structure/table,/obj/item/weapon/storage/belt/medical{pixel_x = 0; pixel_y = 2},/obj/item/weapon/storage/belt/medical{pixel_x = 0; pixel_y = 2},/obj/item/weapon/storage/belt/medical{pixel_x = 0; pixel_y = 2},/obj/item/clothing/tie/stethoscope,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper)
@@ -4270,7 +4270,7 @@
"bEf" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plasteel{dir = 5; icon_state = "whitehall"},/area/medical/research{name = "Research Division"})
"bEg" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/door/airlock/research{name = "Toxins Storage"; req_access_txt = "8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/toxins/storage)
"bEh" = (/obj/structure/table/glass,/obj/item/weapon/paper_bin{pixel_x = -2; pixel_y = 5},/turf/simulated/floor/plasteel{icon_state = "barber"},/area/medical/cmo)
-"bEi" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/cmo)
+"bEi" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/cmo)
"bEj" = (/obj/structure/table/glass,/obj/item/weapon/pen,/obj/item/clothing/tie/stethoscope,/mob/living/simple_animal/pet/cat/Runtime,/turf/simulated/floor/plasteel{icon_state = "barber"},/area/medical/cmo)
"bEk" = (/obj/structure/table/glass,/obj/item/weapon/folder/white,/obj/item/weapon/stamp/cmo,/obj/item/clothing/glasses/hud/health,/turf/simulated/floor/plasteel{icon_state = "barber"},/area/medical/cmo)
"bEl" = (/obj/structure/disposalpipe/segment,/obj/item/device/radio/intercom{pixel_x = 25},/obj/machinery/camera{c_tag = "Chief Medical Office"; dir = 8; network = list("SS13"); pixel_x = 0; pixel_y = -22},/turf/simulated/floor/plasteel{icon_state = "barber"},/area/medical/cmo)
@@ -4308,11 +4308,11 @@
"bER" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plating,/area/storage/tech)
"bES" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall,/area/maintenance/aft)
"bET" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/storage/tech)
-"bEU" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/storage/tech)
-"bEV" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/storage/tech)
-"bEW" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/storage/tech)
+"bEU" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/storage/tech)
+"bEV" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/storage/tech)
+"bEW" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/storage/tech)
"bEX" = (/obj/structure/table,/obj/item/device/aicard,/obj/item/weapon/aiModule/reset,/turf/simulated/floor/plating,/area/storage/tech)
-"bEY" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/storage/tech)
+"bEY" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/storage/tech)
"bEZ" = (/obj/structure/table,/obj/item/stack/cable_coil{pixel_x = -3; pixel_y = 3},/obj/item/stack/cable_coil,/obj/item/weapon/stock_parts/cell/high/plus,/turf/simulated/floor/plating,/area/storage/tech)
"bFa" = (/turf/simulated/floor/plating,/area/storage/tech)
"bFb" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/storage/tech)
@@ -4354,7 +4354,7 @@
"bFL" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay)
"bFM" = (/obj/structure/disposalpipe/junction{icon_state = "pipe-j2"; dir = 2},/obj/machinery/atmospherics/pipe/manifold4w/scrubbers,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay)
"bFN" = (/obj/structure/table,/obj/item/weapon/cartridge/medical{pixel_x = -2; pixel_y = 6},/obj/item/weapon/cartridge/medical{pixel_x = 6; pixel_y = 3},/obj/item/weapon/cartridge/medical,/obj/item/weapon/cartridge/chemistry{pixel_y = 2},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "barber"},/area/medical/cmo)
-"bFO" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/medical/cmo)
+"bFO" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/medical/cmo)
"bFP" = (/obj/machinery/computer/card/minor/cmo,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "barber"},/area/medical/cmo)
"bFQ" = (/obj/structure/sign/nosmoking_2{pixel_x = -32},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 5; icon_state = "whitehall"},/area/medical/research{name = "Research Division"})
"bFR" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"})
@@ -4368,22 +4368,22 @@
"bFZ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall,/area/toxins/mixing)
"bGa" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/wall,/area/maintenance/asmaint2)
"bGb" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/wall,/area/toxins/mixing)
-"bGc" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/toxins/mixing)
+"bGc" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/toxins/mixing)
"bGd" = (/obj/machinery/doppler_array{dir = 4},/turf/simulated/floor/plasteel{dir = 2; icon_state = "bot"},/area/toxins/mixing)
"bGe" = (/turf/simulated/wall,/area/toxins/test_area)
-"bGf" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating/airless,/area/toxins/test_area)
+"bGf" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating/airless,/area/toxins/test_area)
"bGg" = (/obj/structure/table,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/labor)
"bGh" = (/obj/machinery/computer/shuttle/mining,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/labor)
-"bGi" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/quartermaster/miningdock)
+"bGi" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/quartermaster/miningdock)
"bGj" = (/obj/machinery/computer/shuttle/mining,/turf/simulated/floor/plasteel{dir = 9; icon_state = "brown"},/area/quartermaster/miningdock)
"bGk" = (/obj/structure/bed/stool,/obj/effect/landmark/start{name = "Scientist"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/mixing)
"bGl" = (/obj/item/device/assembly/prox_sensor{pixel_x = -4; pixel_y = 1},/obj/item/device/assembly/prox_sensor{pixel_x = 8; pixel_y = 9},/obj/item/device/assembly/prox_sensor{pixel_x = 9; pixel_y = -2},/obj/item/device/assembly/prox_sensor{pixel_x = 0; pixel_y = 2},/obj/structure/table/reinforced,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/mixing)
"bGm" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/quartermaster/miningdock)
"bGn" = (/obj/structure/closet/secure_closet/miner,/turf/simulated/floor/plasteel,/area/quartermaster/miningdock)
"bGo" = (/obj/machinery/door/airlock/maintenance{name = "Firefighting equipment"; req_access_txt = "12"},/turf/simulated/floor/plating,/area/maintenance/aft)
-"bGp" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/aft)
+"bGp" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/aft)
"bGq" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/aft)
-"bGr" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable,/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/storage/tech)
+"bGr" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable,/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/storage/tech)
"bGs" = (/obj/machinery/camera{c_tag = "Secure Tech Storage"; dir = 2},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/storage/tech)
"bGt" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/borgupload{pixel_x = -1; pixel_y = 1},/obj/item/weapon/circuitboard/aiupload{pixel_x = 2; pixel_y = -2},/turf/simulated/floor/plasteel,/area/storage/tech)
"bGu" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"},/turf/simulated/wall/r_wall,/area/storage/tech)
@@ -4497,7 +4497,7 @@
"bIy" = (/obj/structure/disposaloutlet{dir = 1},/obj/structure/disposalpipe/trunk,/turf/simulated/floor/engine,/area/toxins/xenobiology)
"bIz" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/toxins/storage)
"bIA" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/toxins/storage)
-"bIB" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/toxins/storage)
+"bIB" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/toxins/storage)
"bIC" = (/obj/machinery/computer/area_atmos,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/toxins/storage)
"bID" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/turf/simulated/floor/plasteel{dir = 5; icon_state = "whitehall"},/area/medical/research{name = "Research Division"})
"bIE" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"})
@@ -4556,15 +4556,15 @@
"bJF" = (/obj/machinery/pipedispenser/disposal/transit_tube,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/atmos)
"bJG" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay)
"bJH" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/shieldwallgen{req_access = list(55)},/turf/simulated/floor/plating,/area/toxins/xenobiology)
-"bJI" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor/preopen{id = "misclab"; name = "test chamber blast door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/engine,/area/toxins/xenobiology)
-"bJJ" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor/preopen{id = "misclab"; name = "test chamber blast door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/engine,/area/toxins/xenobiology)
-"bJK" = (/obj/structure/grille,/obj/structure/disposalpipe/segment,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor/preopen{id = "misclab"; name = "test chamber blast door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/engine,/area/toxins/xenobiology)
+"bJI" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor/preopen{id = "misclab"; name = "test chamber blast door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/engine,/area/toxins/xenobiology)
+"bJJ" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor/preopen{id = "misclab"; name = "test chamber blast door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/engine,/area/toxins/xenobiology)
+"bJK" = (/obj/structure/grille,/obj/structure/disposalpipe/segment,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor/preopen{id = "misclab"; name = "test chamber blast door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/engine,/area/toxins/xenobiology)
"bJL" = (/obj/machinery/door/window/southleft{dir = 1; name = "Test Chamber"; req_access_txt = "55"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/door/poddoor/preopen{id = "misclab"; name = "test chamber blast door"},/turf/simulated/floor/engine,/area/toxins/xenobiology)
-"bJM" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor/preopen{id = "misclab"; name = "test chamber blast door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/engine,/area/toxins/xenobiology)
+"bJM" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor/preopen{id = "misclab"; name = "test chamber blast door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/engine,/area/toxins/xenobiology)
"bJN" = (/turf/simulated/wall,/area/toxins/xenobiology)
"bJO" = (/obj/machinery/door/airlock/research{name = "Testing Lab"; req_access_txt = "47"},/turf/simulated/floor/plasteel,/area/toxins/misc_lab)
"bJP" = (/obj/machinery/vending/boozeomat,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/maintenance/aft)
-"bJQ" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft)
+"bJQ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft)
"bJR" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall,/area/toxins/storage)
"bJS" = (/obj/structure/table,/obj/item/stack/rods{amount = 50},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate)
"bJT" = (/obj/machinery/vending/cigarette,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"})
@@ -4591,11 +4591,11 @@
"bKo" = (/obj/machinery/light,/turf/simulated/floor/plasteel,/area/quartermaster/miningdock)
"bKp" = (/obj/structure/closet/crate,/turf/simulated/floor/plasteel,/area/quartermaster/miningdock)
"bKq" = (/obj/machinery/mineral/equipment_vendor,/turf/simulated/floor/plasteel,/area/quartermaster/miningdock)
-"bKr" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable,/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/storage/tech)
-"bKs" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/grille,/obj/structure/cable,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/storage/tech)
+"bKr" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable,/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/storage/tech)
+"bKs" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/grille,/obj/structure/cable,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/storage/tech)
"bKt" = (/obj/structure/table,/obj/item/weapon/stock_parts/micro_laser,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/capacitor,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/turf/simulated/floor/plating,/area/storage/tech)
"bKu" = (/obj/structure/table,/obj/item/weapon/stock_parts/subspace/amplifier,/obj/item/weapon/stock_parts/subspace/amplifier,/obj/item/weapon/stock_parts/subspace/amplifier,/turf/simulated/floor/plating,/area/storage/tech)
-"bKv" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plating,/area/maintenance/aft)
+"bKv" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plating,/area/maintenance/aft)
"bKw" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall,/area/maintenance/asmaint)
"bKx" = (/obj/structure/closet/crate,/obj/effect/landmark{name = "blobstart"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/construction)
"bKy" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/maintenance/asmaint)
@@ -4647,13 +4647,13 @@
"bLs" = (/obj/structure/ore_box,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/labor)
"bLt" = (/obj/structure/shuttle/engine/heater,/turf/simulated/floor/plating,/area/shuttle/labor)
"bLu" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/aft)
-"bLv" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/aft)
+"bLv" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/aft)
"bLw" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/aft)
"bLx" = (/obj/structure/table,/obj/item/weapon/stock_parts/subspace/transmitter,/obj/item/weapon/stock_parts/subspace/transmitter,/obj/item/weapon/stock_parts/subspace/treatment,/obj/item/weapon/stock_parts/subspace/treatment,/obj/item/weapon/stock_parts/subspace/treatment,/turf/simulated/floor/plating,/area/storage/tech)
"bLy" = (/obj/structure/table,/obj/item/weapon/stock_parts/subspace/ansible,/obj/item/weapon/stock_parts/subspace/ansible,/obj/item/weapon/stock_parts/subspace/ansible,/obj/item/weapon/stock_parts/subspace/crystal,/obj/item/weapon/stock_parts/subspace/crystal,/obj/item/weapon/stock_parts/subspace/crystal,/turf/simulated/floor/plating,/area/storage/tech)
"bLz" = (/obj/structure/table,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/machinery/light/small,/turf/simulated/floor/plating,/area/storage/tech)
"bLA" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = -1},/obj/item/clothing/gloves/color/yellow,/obj/item/device/t_scanner,/obj/item/device/multitool,/turf/simulated/floor/plating,/area/storage/tech)
-"bLB" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/aft)
+"bLB" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/aft)
"bLC" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/construction)
"bLD" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall,/area/storage/tech)
"bLE" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/airlock/maintenance{name = "Construction Area Maintenance"; req_access_txt = "32"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/construction)
@@ -4665,7 +4665,7 @@
"bLK" = (/turf/simulated/wall/r_wall,/area/atmos)
"bLL" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos)
"bLM" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos)
-"bLN" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos)
+"bLN" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos)
"bLO" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/firedoor/heavy,/obj/machinery/door/airlock/maintenance{name = "Atmospherics Maintenance"; req_access_txt = "24"},/turf/simulated/floor/plating,/area/atmos)
"bLP" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall/r_wall,/area/atmos)
"bLQ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/turf/simulated/wall/r_wall,/area/atmos)
@@ -4696,7 +4696,7 @@
"bMp" = (/obj/structure/closet/l3closet/scientist,/obj/machinery/light_switch{pixel_x = 0; pixel_y = 28},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
"bMq" = (/obj/structure/closet/l3closet/scientist,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
"bMr" = (/obj/structure/grille,/obj/structure/window/fulltile,/turf/simulated/floor/plating,/area/toxins/xenobiology)
-"bMs" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/research{name = "Research Division"})
+"bMs" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/research{name = "Research Division"})
"bMt" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/engine/vacuum,/area/toxins/mixing)
"bMu" = (/obj/machinery/door/poddoor{id = "mixvent"; name = "Mixer Room Vent"},/turf/simulated/floor/engine/vacuum,/area/toxins/mixing)
"bMv" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 4},/turf/simulated/wall/r_wall,/area/toxins/mixing)
@@ -4720,7 +4720,7 @@
"bMN" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4},/turf/simulated/floor/plasteel,/area/atmos)
"bMO" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/atmos)
"bMP" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/atmos)
-"bMQ" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/atmos)
+"bMQ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/atmos)
"bMR" = (/obj/machinery/pipedispenser,/turf/simulated/floor/plasteel,/area/atmos)
"bMS" = (/obj/machinery/camera{c_tag = "Atmospherics North East"},/obj/machinery/atmospherics/components/binary/pump{dir = 8; name = "Distro to Waste"; on = 0},/turf/simulated/floor/plasteel,/area/atmos)
"bMT" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{dir = 8},/obj/machinery/light{dir = 1},/obj/machinery/meter{frequency = 1443; id = "wloop_atm_meter"; name = "Waste Loop"},/turf/simulated/floor/plasteel,/area/atmos)
@@ -4762,7 +4762,7 @@
"bND" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/plating/airless{dir = 10; icon_state = "warnplate"},/area/toxins/test_area)
"bNE" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/plating/airless{dir = 6; icon_state = "warnplate"},/area/toxins/test_area)
"bNF" = (/obj/item/device/flashlight/lamp,/turf/simulated/floor/plating/airless{dir = 2; icon_state = "warnplate"},/area/toxins/test_area)
-"bNG" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/toxins/test_area)
+"bNG" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/toxins/test_area)
"bNH" = (/obj/structure/closet/crate,/turf/simulated/floor/plating,/area/construction)
"bNI" = (/turf/simulated/wall,/area/construction)
"bNJ" = (/turf/simulated/floor/plating,/area/construction)
@@ -4780,14 +4780,14 @@
"bNV" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 1},/turf/simulated/floor/plasteel,/area/atmos)
"bNW" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology)
"bNX" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/toxins/misc_lab)
-"bNY" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/atmos)
+"bNY" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/atmos)
"bNZ" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel,/area/toxins/misc_lab)
"bOa" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel,/area/atmos)
"bOb" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/atmos)
"bOc" = (/obj/machinery/atmospherics/components/binary/pump{dir = 1; name = "Mix to Distro"; on = 0},/turf/simulated/floor/plasteel,/area/atmos)
"bOd" = (/turf/simulated/floor/plasteel,/area/atmos)
"bOe" = (/obj/machinery/atmospherics/pipe/manifold/cyan/visible{dir = 8; initialize_directions = 11},/obj/machinery/meter,/turf/simulated/floor/plasteel,/area/atmos)
-"bOf" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 10; initialize_directions = 10},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/atmos)
+"bOf" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 10; initialize_directions = 10},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/atmos)
"bOg" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/obj/machinery/atmospherics/components/binary/pump{dir = 1; name = "Mix to Incinerator"; on = 0},/turf/simulated/floor/plasteel,/area/atmos)
"bOh" = (/obj/structure/grille,/turf/simulated/wall/r_wall,/area/atmos)
"bOi" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged5"},/area/space/nearstation)
@@ -4834,20 +4834,20 @@
"bOX" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/atmos)
"bOY" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall,/area/atmos)
"bOZ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/atmos)
-"bPa" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/atmos)
+"bPa" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/atmos)
"bPb" = (/obj/machinery/door/airlock/glass_research{name = "Firing Range"; req_access_txt = "47"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/toxins/misc_lab)
"bPc" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel,/area/atmos)
"bPd" = (/obj/machinery/atmospherics/components/binary/pump{dir = 0; name = "Waste In"; on = 1},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/atmos)
"bPe" = (/obj/machinery/atmospherics/pipe/manifold/yellow/visible,/turf/simulated/floor/plasteel,/area/atmos)
"bPf" = (/obj/machinery/atmospherics/components/binary/pump{dir = 0; name = "Air to Mix"; on = 0},/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/turf/simulated/floor/plasteel,/area/atmos)
"bPg" = (/obj/machinery/atmospherics/components/binary/pump{dir = 8; name = "Mix Outlet Pump"; on = 0},/turf/simulated/floor/plasteel,/area/atmos)
-"bPh" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/cyan/visible,/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/atmos)
+"bPh" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/cyan/visible,/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/atmos)
"bPi" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/atmospherics/pipe/manifold/yellow/visible,/turf/simulated/floor/plasteel{dir = 5; icon_state = "green"},/area/atmos)
"bPj" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/structure/grille,/obj/machinery/meter,/turf/simulated/wall/r_wall,/area/atmos)
"bPk" = (/obj/machinery/camera{c_tag = "Atmospherics Waste Tank"},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/atmos)
"bPl" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; external_pressure_bound = 0; frequency = 1441; id_tag = "waste_out"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/atmos)
"bPm" = (/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/atmos)
-"bPn" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/asmaint)
+"bPn" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/asmaint)
"bPo" = (/obj/structure/table,/obj/machinery/microwave{pixel_x = -3; pixel_y = 6},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology)
"bPp" = (/obj/machinery/iv_drip,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology)
"bPq" = (/obj/machinery/shower{dir = 4},/obj/structure/sign/securearea{pixel_x = -32; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warnwhite"},/area/medical/virology)
@@ -4894,7 +4894,7 @@
"bQf" = (/turf/simulated/floor/plasteel{icon_state = "caution"; dir = 5},/area/hallway/primary/aft)
"bQg" = (/turf/simulated/floor/plasteel,/area/hallway/primary/aft)
"bQh" = (/obj/structure/dispenser{pixel_x = -1},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/atmos)
-"bQi" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "atmos"; layer = 2.9; name = "atmos blast door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/atmos)
+"bQi" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "atmos"; layer = 2.9; name = "atmos blast door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/atmos)
"bQj" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/atmos)
"bQk" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor/plasteel,/area/atmos)
"bQl" = (/obj/machinery/computer/general_air_control{frequency = 1443; level = 3; name = "Distribution and Waste Monitor"; sensors = list("mair_in_meter" = "Mixed Air In", "air_sensor" = "Mixed Air Supply Tank", "mair_out_meter" = "Mixed Air Out", "dloop_atm_meter" = "Distribution Loop", "wloop_atm_meter" = "Waste Loop")},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "caution"; dir = 4},/area/atmos)
@@ -4910,9 +4910,9 @@
"bQv" = (/obj/machinery/atmospherics/pipe/manifold/yellow/visible{dir = 4},/turf/simulated/floor/plasteel,/area/atmos)
"bQw" = (/obj/machinery/atmospherics/pipe/manifold/green/visible{dir = 4},/turf/simulated/floor/plasteel,/area/atmos)
"bQx" = (/obj/machinery/atmospherics/pipe/manifold/green/visible{dir = 1},/turf/simulated/floor/plasteel,/area/atmos)
-"bQy" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/cyan/visible,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/atmos)
+"bQy" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/cyan/visible,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/atmos)
"bQz" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "waste_in"; name = "Gas Mix Tank Control"; output_tag = "waste_out"; sensors = list("waste_sensor" = "Tank")},/turf/simulated/floor/plasteel{icon_state = "green"; dir = 4},/area/atmos)
-"bQA" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating/airless,/area/atmos)
+"bQA" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating/airless,/area/atmos)
"bQB" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "waste_sensor"; output = 63},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/atmos)
"bQC" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/atmos)
"bQD" = (/obj/structure/bed/stool,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology)
@@ -4927,7 +4927,7 @@
"bQM" = (/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "warnwhite"; dir = 1},/area/toxins/xenobiology)
"bQN" = (/obj/machinery/door/firedoor,/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/camera{c_tag = "Xenobiology North"; dir = 8; network = list("SS13","RD")},/turf/simulated/floor/plasteel{icon_state = "warnwhite"; dir = 1},/area/toxins/xenobiology)
"bQO" = (/obj/structure/closet/bombcloset,/obj/machinery/light_switch{pixel_x = -20; pixel_y = 0},/turf/simulated/floor/plasteel,/area/toxins/misc_lab)
-"bQP" = (/obj/structure/window/fulltile/reinforced,/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/tcommsat/computer)
+"bQP" = (/obj/structure/window/reinforced/fulltile,/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/tcommsat/computer)
"bQQ" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/hallway/primary/aft)
"bQR" = (/obj/structure/table,/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/storage/toolbox/mechanical,/obj/item/clothing/ears/earmuffs,/obj/machinery/camera{c_tag = "Testing Lab North"; dir = 2; network = list("SS13","RD")},/turf/simulated/floor/plasteel,/area/toxins/misc_lab)
"bQS" = (/obj/machinery/requests_console{department = "Science"; departmentType = 2; dir = 2; name = "Science Requests Console"; pixel_x = 0; pixel_y = 30},/turf/simulated/floor/plasteel,/area/toxins/misc_lab)
@@ -4972,7 +4972,7 @@
"bRF" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 9},/turf/simulated/floor/plasteel,/area/atmos)
"bRG" = (/obj/machinery/atmospherics/components/binary/pump{dir = 1; name = "Unfiltered to Mix"; on = 1},/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4; initialize_directions = 12},/turf/simulated/floor/plasteel,/area/atmos)
"bRH" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 5; initialize_directions = 12},/turf/simulated/floor/plasteel,/area/atmos)
-"bRI" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/cyan/visible,/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/atmos)
+"bRI" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/cyan/visible,/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/atmos)
"bRJ" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/simulated/floor/plasteel{icon_state = "green"; dir = 6},/area/atmos)
"bRK" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/turf/space,/area/space/nearstation)
"bRL" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 8; frequency = 1441; id = "waste_in"; pixel_y = 1},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/atmos)
@@ -4980,17 +4980,17 @@
"bRN" = (/turf/simulated/wall,/area/medical/virology)
"bRO" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology)
"bRP" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/virology{autoclose = 0; frequency = 1449; icon_state = "door_locked"; id_tag = "virology_airlock_interior"; locked = 1; name = "Virology Interior Airlock"; req_access_txt = "39"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology)
-"bRQ" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/medical/virology)
+"bRQ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/virology)
"bRR" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_virology{name = "Monkey Pen"; req_access_txt = "39"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology)
"bRS" = (/obj/structure/bed/chair/office/dark,/obj/effect/landmark/start/depsec/engineering,/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel,/area/security/checkpoint/engineering)
"bRT" = (/obj/structure/disposalpipe/trunk{dir = 4},/obj/structure/disposaloutlet,/turf/simulated/floor/engine,/area/toxins/xenobiology)
"bRU" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/engine,/area/toxins/xenobiology)
"bRV" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{dir = 6; icon_state = "warning"},/area/toxins/xenobiology)
-"bRW" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door/poddoor/preopen{id = "xenobio3"; name = "containment blast door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/engine,/area/toxins/xenobiology)
+"bRW" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door/poddoor/preopen{id = "xenobio3"; name = "containment blast door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/engine,/area/toxins/xenobiology)
"bRX" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
"bRY" = (/obj/structure/window/reinforced,/obj/structure/table/reinforced,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/button/door{id = "xenobio8"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access_txt = "55"},/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/toxins/xenobiology)
"bRZ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
-"bSa" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor/preopen{id = "xenobio8"; name = "containment blast door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/engine,/area/toxins/xenobiology)
+"bSa" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor/preopen{id = "xenobio8"; name = "containment blast door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/engine,/area/toxins/xenobiology)
"bSb" = (/obj/structure/closet/l3closet/scientist{pixel_x = -2},/turf/simulated/floor/plasteel,/area/toxins/misc_lab)
"bSc" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/toxins/misc_lab)
"bSd" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/tcommsat/computer)
@@ -5018,20 +5018,20 @@
"bSz" = (/obj/structure/table,/turf/simulated/floor/plating,/area/construction)
"bSA" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 8; icon_state = "cautioncorner"},/area/hallway/primary/aft)
"bSB" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/structure/table,/obj/item/weapon/tank/internals/emergency_oxygen{pixel_x = -8; pixel_y = 0},/obj/item/weapon/tank/internals/emergency_oxygen{pixel_x = -8; pixel_y = 0},/obj/item/clothing/mask/breath{pixel_x = 4; pixel_y = 0},/obj/item/clothing/mask/breath{pixel_x = 4; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/atmos)
-"bSC" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/door/poddoor/preopen{id = "atmos"; layer = 2.9; name = "atmos blast door"},/turf/simulated/floor/plating,/area/atmos)
+"bSC" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "atmos"; layer = 2.9; name = "atmos blast door"},/turf/simulated/floor/plating,/area/atmos)
"bSD" = (/obj/structure/sign/atmosplaque{pixel_x = 0; pixel_y = -32},/obj/structure/table,/obj/item/weapon/storage/box,/obj/item/weapon/storage/box,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/atmos)
"bSE" = (/obj/machinery/computer/station_alert,/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/button/door{id = "atmos"; name = "Atmospherics Lockdown"; pixel_x = 24; pixel_y = 4; req_access_txt = "24"},/turf/simulated/floor/plasteel{dir = 6; icon_state = "caution"},/area/atmos)
"bSF" = (/obj/structure/table,/obj/item/clothing/head/welding{pixel_x = -3; pixel_y = 7},/obj/item/clothing/head/welding{pixel_x = -5; pixel_y = 3},/obj/machinery/light{dir = 8},/obj/item/device/multitool,/turf/simulated/floor/plasteel,/area/atmos)
"bSG" = (/obj/structure/table,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50; pixel_x = 2; pixel_y = 2},/turf/simulated/floor/plasteel,/area/atmos)
"bSH" = (/obj/structure/table,/obj/item/stack/sheet/glass{amount = 50},/obj/item/weapon/storage/belt/utility,/obj/item/device/t_scanner,/obj/item/device/t_scanner,/obj/item/device/t_scanner,/turf/simulated/floor/plasteel,/area/atmos)
"bSI" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/atmos)
-"bSJ" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/obj/machinery/atmospherics/pipe/simple/yellow/visible,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/atmos)
-"bSK" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 6; initialize_directions = 6},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/atmos)
-"bSL" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/yellow/visible,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/atmos)
-"bSM" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/atmos)
-"bSN" = (/obj/machinery/atmospherics/pipe/simple/green/visible,/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/atmos)
-"bSO" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/atmos)
-"bSP" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/manifold/cyan/visible{dir = 4; initialize_directions = 11},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/atmos)
+"bSJ" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/obj/machinery/atmospherics/pipe/simple/yellow/visible,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/atmos)
+"bSK" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 6; initialize_directions = 6},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/atmos)
+"bSL" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/yellow/visible,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/atmos)
+"bSM" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/atmos)
+"bSN" = (/obj/machinery/atmospherics/pipe/simple/green/visible,/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/atmos)
+"bSO" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/atmos)
+"bSP" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/manifold/cyan/visible{dir = 4; initialize_directions = 11},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/atmos)
"bSQ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology)
"bSR" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 1},/turf/simulated/floor/plasteel{dir = 8; icon_state = "cautioncorner"},/area/hallway/primary/aft)
"bSS" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/virology{name = "Break Room"; req_access_txt = "39"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology)
@@ -5051,7 +5051,7 @@
"bTg" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plasteel,/area/engine/break_room)
"bTh" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/engine/break_room)
"bTi" = (/obj/structure/table,/obj/machinery/recharger{pixel_y = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/security/checkpoint/engineering)
-"bTj" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/security/checkpoint/engineering)
+"bTj" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/security/checkpoint/engineering)
"bTk" = (/obj/machinery/atmospherics/components/binary/valve,/turf/simulated/floor/engine,/area/toxins/misc_lab)
"bTl" = (/turf/simulated/floor/engine,/area/toxins/misc_lab)
"bTm" = (/obj/machinery/atmospherics/pipe/simple/general/visible,/turf/simulated/floor/engine,/area/toxins/misc_lab)
@@ -5098,10 +5098,10 @@
"bUb" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology)
"bUc" = (/obj/machinery/requests_console{announcementConsole = 1; department = "Telecoms Admin"; departmentType = 5; name = "Telecoms RC"; pixel_x = 30; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/tcommsat/computer)
"bUd" = (/obj/structure/table/reinforced,/obj/machinery/button/door{id = "xenobio3"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access_txt = "55"},/obj/structure/window/reinforced{dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plasteel{dir = 5; icon_state = "warning"},/area/toxins/xenobiology)
-"bUe" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable,/obj/machinery/door/poddoor/preopen{id = "xenobio3"; name = "containment blast door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/engine,/area/toxins/xenobiology)
+"bUe" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable,/obj/machinery/door/poddoor/preopen{id = "xenobio3"; name = "containment blast door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/engine,/area/toxins/xenobiology)
"bUf" = (/obj/structure/disposalpipe/segment,/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/plasteel{icon_state = "white"},/area/toxins/xenobiology)
"bUg" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/toxins/xenobiology)
-"bUh" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable,/obj/machinery/door/poddoor/preopen{id = "xenobio8"; name = "containment blast door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/engine,/area/toxins/xenobiology)
+"bUh" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable,/obj/machinery/door/poddoor/preopen{id = "xenobio8"; name = "containment blast door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/engine,/area/toxins/xenobiology)
"bUi" = (/obj/structure/disposalpipe/trunk{dir = 8},/obj/structure/disposaloutlet{dir = 1},/turf/simulated/floor/engine,/area/toxins/xenobiology)
"bUj" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 4},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/toxins/misc_lab)
"bUk" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 10; pixel_x = 0; initialize_directions = 10},/turf/simulated/floor/plasteel,/area/toxins/misc_lab)
@@ -5140,7 +5140,7 @@
"bUR" = (/obj/machinery/atmospherics/pipe/simple/green/visible,/turf/simulated/floor/plasteel,/area/atmos)
"bUS" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible,/turf/simulated/floor/plasteel,/area/atmos)
"bUT" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "n2o_in"; name = "Nitrous Oxide Supply Control"; output_tag = "n2o_out"; sensors = list("n2o_sensor" = "Tank")},/turf/simulated/floor/plasteel{icon_state = "escape"; dir = 4},/area/atmos)
-"bUU" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/engine/n20,/area/atmos)
+"bUU" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/engine/n20,/area/atmos)
"bUV" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "n2o_sensor"},/turf/simulated/floor/engine/n20,/area/atmos)
"bUW" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/engine/n20,/area/atmos)
"bUX" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint)
@@ -5160,7 +5160,7 @@
"bVl" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 4},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/toxins/misc_lab)
"bVm" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/engine/break_room)
"bVn" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 4; initialize_directions = 11},/obj/machinery/meter,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/toxins/misc_lab)
-"bVo" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/engine/break_room)
+"bVo" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/engine/break_room)
"bVp" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/engine/break_room)
"bVq" = (/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,/turf/simulated/floor/plasteel,/area/engine/break_room)
"bVr" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel,/area/engine/break_room)
@@ -5170,7 +5170,7 @@
"bVv" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/space,/area/space/nearstation)
"bVw" = (/obj/structure/lattice/catwalk,/turf/space,/area/space/nearstation)
"bVx" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 2},/turf/simulated/floor/plating/airless,/area/space/nearstation)
-"bVy" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/aft)
+"bVy" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/aft)
"bVz" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating/airless,/area/space/nearstation)
"bVA" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/reagent_dispensers/fueltank,/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{icon_state = "intact"; dir = 10},/turf/simulated/floor/plating,/area/maintenance/aft)
"bVB" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/closet/emcloset,/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft)
@@ -5199,7 +5199,7 @@
"bVY" = (/obj/machinery/atmospherics/pipe/manifold/general/visible,/obj/machinery/meter,/turf/simulated/floor/plasteel,/area/atmos)
"bVZ" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 8},/turf/simulated/floor/plasteel,/area/atmos)
"bWa" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 4; initialize_directions = 11},/turf/simulated/floor/plasteel,/area/atmos)
-"bWb" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = 4; on = 1},/turf/simulated/floor/plasteel,/area/atmos)
+"bWb" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = "n2o"; on = 1},/turf/simulated/floor/plasteel,/area/atmos)
"bWc" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/simulated/floor/plasteel{icon_state = "escape"; dir = 6},/area/atmos)
"bWd" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 8; frequency = 1441; id = "n2o_in"; pixel_y = 1},/turf/simulated/floor/engine/n20,/area/atmos)
"bWe" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/asmaint)
@@ -5209,9 +5209,9 @@
"bWi" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/fulltile,/turf/simulated/floor/plating,/area/medical/virology)
"bWj" = (/obj/structure/grille,/obj/structure/window/fulltile,/turf/simulated/floor/plating,/area/medical/virology)
"bWk" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/effect/landmark{name = "revenantspawn"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology)
-"bWl" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door/poddoor/preopen{id = "xenobio2"; name = "containment blast door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/engine,/area/toxins/xenobiology)
+"bWl" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door/poddoor/preopen{id = "xenobio2"; name = "containment blast door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/engine,/area/toxins/xenobiology)
"bWm" = (/obj/structure/window/reinforced,/obj/structure/table/reinforced,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/button/door{id = "xenobio7"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access_txt = "55"},/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/toxins/xenobiology)
-"bWn" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor/preopen{id = "xenobio7"; name = "containment blast door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/engine,/area/toxins/xenobiology)
+"bWn" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor/preopen{id = "xenobio7"; name = "containment blast door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/engine,/area/toxins/xenobiology)
"bWo" = (/obj/item/device/radio/intercom{pixel_x = -25},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/toxins/misc_lab)
"bWp" = (/obj/structure/bed/chair/office/light,/obj/effect/landmark/start{name = "Scientist"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/toxins/misc_lab)
"bWq" = (/obj/machinery/atmospherics/components/binary/pump{dir = 2},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/toxins/misc_lab)
@@ -5232,7 +5232,7 @@
"bWF" = (/obj/machinery/light{dir = 1},/obj/machinery/power/apc{cell_type = 5000; dir = 1; name = "Telecoms Server APC"; pixel_x = 0; pixel_y = 25},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/server)
"bWG" = (/obj/machinery/telecomms/server/presets/security,/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/server)
"bWH" = (/obj/structure/table,/turf/simulated/floor/plasteel{dir = 9; icon_state = "yellow"},/area/tcommsat/computer)
-"bWI" = (/obj/structure/window/fulltile/reinforced,/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/tcommsat/computer)
+"bWI" = (/obj/structure/window/reinforced/fulltile,/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/tcommsat/computer)
"bWJ" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 1},/turf/simulated/floor/plasteel,/area/hallway/primary/aft)
"bWK" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "yellow"},/area/hallway/primary/aft)
"bWL" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/structure/disposalpipe/segment,/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{dir = 8; icon_state = "cautioncorner"},/area/hallway/primary/aft)
@@ -5270,7 +5270,7 @@
"bXr" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/toxins/misc_lab)
"bXs" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/recharger{pixel_y = 4},/obj/item/weapon/paper/range,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 6},/area/toxins/misc_lab)
"bXt" = (/obj/structure/table/reinforced,/obj/machinery/magnetic_controller{autolink = 1},/obj/structure/window/reinforced{dir = 1},/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 29},/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 10},/area/toxins/misc_lab)
-"bXu" = (/obj/structure/grille,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/window/fulltile/reinforced/tinted,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
+"bXu" = (/obj/structure/grille,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/window/reinforced/tinted/fulltile,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"bXv" = (/obj/machinery/door/airlock/external{name = "External Access"; req_access = null; req_access_txt = "13"},/turf/simulated/floor/plating,/area/maintenance/aft)
"bXw" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/aft)
"bXx" = (/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/aft)
@@ -5281,7 +5281,7 @@
"bXC" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/server)
"bXD" = (/obj/machinery/telecomms/server/presets/command,/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/server)
"bXE" = (/obj/machinery/computer/message_monitor,/turf/simulated/floor/plasteel{dir = 8; icon_state = "yellow"},/area/tcommsat/computer)
-"bXF" = (/obj/structure/window/fulltile/reinforced,/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable,/turf/simulated/floor/plating,/area/tcommsat/computer)
+"bXF" = (/obj/structure/window/reinforced/fulltile,/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable,/turf/simulated/floor/plating,/area/tcommsat/computer)
"bXG" = (/turf/simulated/floor/plasteel,/area/tcommsat/computer)
"bXH" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/manifold4w/scrubbers,/turf/simulated/floor/plasteel,/area/engine/break_room)
"bXI" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/engine/break_room)
@@ -5308,10 +5308,10 @@
"bYd" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology)
"bYe" = (/obj/structure/closet/secure_closet/personal/patient,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology)
"bYf" = (/obj/structure/table/reinforced,/obj/machinery/button/door{id = "xenobio2"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access_txt = "55"},/obj/structure/window/reinforced{dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plasteel{dir = 5; icon_state = "warning"},/area/toxins/xenobiology)
-"bYg" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor/preopen{id = "xenobio2"; name = "containment blast door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/engine,/area/toxins/xenobiology)
-"bYh" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable,/obj/machinery/door/poddoor/preopen{id = "xenobio7"; name = "containment blast door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/engine,/area/toxins/xenobiology)
-"bYi" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "testlab"; name = "test chamber blast door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/engine,/area/toxins/misc_lab)
-"bYj" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "testlab"; name = "test chamber blast door"},/obj/machinery/atmospherics/pipe/simple/general/visible,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/engine,/area/toxins/misc_lab)
+"bYg" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor/preopen{id = "xenobio2"; name = "containment blast door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/engine,/area/toxins/xenobiology)
+"bYh" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable,/obj/machinery/door/poddoor/preopen{id = "xenobio7"; name = "containment blast door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/engine,/area/toxins/xenobiology)
+"bYi" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "testlab"; name = "test chamber blast door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/engine,/area/toxins/misc_lab)
+"bYj" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "testlab"; name = "test chamber blast door"},/obj/machinery/atmospherics/pipe/simple/general/visible,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/engine,/area/toxins/misc_lab)
"bYk" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plasteel{dir = 2; icon_state = "bot"},/area/toxins/misc_lab)
"bYl" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/toxins/misc_lab)
"bYm" = (/obj/structure/reagent_dispensers/watertank,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plasteel{dir = 2; icon_state = "bot"},/area/toxins/misc_lab)
@@ -5358,11 +5358,11 @@
"bZb" = (/obj/machinery/light{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
"bZc" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 1; unacidable = 1},/turf/simulated/floor/engine,/area/toxins/misc_lab)
"bZd" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/turf/simulated/floor/plasteel,/area/toxins/misc_lab)
-"bZe" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/break_room)
+"bZe" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/break_room)
"bZf" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/engine/break_room)
"bZg" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/engine/break_room)
"bZh" = (/obj/structure/rack,/obj/item/weapon/gun/energy/laser/practice,/obj/item/clothing/ears/earmuffs,/turf/simulated/floor/plasteel,/area/toxins/misc_lab)
-"bZi" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
+"bZi" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"bZj" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft)
"bZk" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 4},/obj/machinery/portable_atmospherics/canister,/turf/simulated/floor/plating,/area/maintenance/aft)
"bZl" = (/obj/machinery/atmospherics/components/binary/pump{dir = 8; name = "Mix to Port"; on = 0},/obj/machinery/light/small,/turf/simulated/floor/plating,/area/maintenance/aft)
@@ -5370,12 +5370,12 @@
"bZn" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/server)
"bZo" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/server)
"bZp" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/server)
-"bZq" = (/obj/structure/window/fulltile/reinforced,/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/tcommsat/computer)
+"bZq" = (/obj/structure/window/reinforced/fulltile,/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/tcommsat/computer)
"bZr" = (/obj/machinery/status_display,/turf/simulated/wall,/area/tcommsat/computer)
-"bZs" = (/obj/structure/window/fulltile/reinforced,/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable,/turf/simulated/floor/plating,/area/tcommsat/computer)
+"bZs" = (/obj/structure/window/reinforced/fulltile,/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable,/turf/simulated/floor/plating,/area/tcommsat/computer)
"bZt" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/engine/break_room)
"bZu" = (/obj/machinery/camera{c_tag = "Engineering Foyer"; dir = 1},/obj/structure/noticeboard{dir = 1; pixel_y = -27},/turf/simulated/floor/plasteel,/area/engine/break_room)
-"bZv" = (/obj/structure/window/fulltile/reinforced,/obj/structure/grille,/turf/simulated/floor/plating,/area/tcommsat/computer)
+"bZv" = (/obj/structure/window/reinforced/fulltile,/obj/structure/grille,/turf/simulated/floor/plating,/area/tcommsat/computer)
"bZw" = (/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/engine/break_room)
"bZx" = (/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 8; icon_state = "cautioncorner"},/area/hallway/primary/aft)
"bZy" = (/turf/simulated/floor/plasteel,/area/engine/break_room)
@@ -5383,13 +5383,13 @@
"bZA" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/turf/simulated/floor/plasteel,/area/engine/break_room)
"bZB" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/aft)
"bZC" = (/obj/machinery/door/poddoor/preopen{id = "Engineering"; name = "engineering security door"},/obj/machinery/door/airlock/glass_command{name = "Chief Engineer"; req_access_txt = "56"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/engine/chiefs_office)
-"bZD" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/disposalpipe/segment,/obj/machinery/door/poddoor/preopen{id = "Engineering"; name = "engineering security door"},/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/engine/chiefs_office)
+"bZD" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/disposalpipe/segment,/obj/machinery/door/poddoor/preopen{id = "Engineering"; name = "engineering security door"},/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/engine/chiefs_office)
"bZE" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "yellow"; dir = 10},/area/engine/break_room)
"bZF" = (/obj/machinery/power/apc{dir = 8; name = "Atmospherics APC"; pixel_x = -24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plasteel,/area/atmos)
"bZG" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel,/area/atmos)
"bZH" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 4; initialize_directions = 11},/obj/item/weapon/wrench,/turf/simulated/floor/plasteel,/area/atmos)
"bZI" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 8},/obj/machinery/meter,/turf/simulated/floor/plasteel,/area/atmos)
-"bZJ" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; on = 1},/turf/simulated/floor/plasteel,/area/atmos)
+"bZJ" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = "plasma"; on = 1},/turf/simulated/floor/plasteel,/area/atmos)
"bZK" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/simulated/floor/plasteel{dir = 6; icon_state = "warning"},/area/atmos)
"bZL" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 8; frequency = 1441; id = "tox_in"; pixel_y = 1},/turf/simulated/floor/engine{carbon_dioxide = 0; name = "plasma floor"; nitrogen = 0; oxygen = 0; toxins = 70000},/area/atmos)
"bZM" = (/turf/simulated/floor/plating{icon_state = "platingdmg3"},/area/maintenance/asmaint)
@@ -5401,11 +5401,11 @@
"bZS" = (/obj/machinery/atmospherics/components/unary/tank/air{dir = 8},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 5},/area/maintenance/asmaint)
"bZT" = (/obj/structure/rack{dir = 1},/obj/machinery/light/small{dir = 1},/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/asmaint)
"bZU" = (/obj/structure/closet/emcloset,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plating,/area/maintenance/asmaint)
-"bZV" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door/poddoor/preopen{id = "xenobio1"; name = "containment blast door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/engine,/area/toxins/xenobiology)
+"bZV" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door/poddoor/preopen{id = "xenobio1"; name = "containment blast door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/engine,/area/toxins/xenobiology)
"bZW" = (/obj/structure/window/reinforced,/obj/structure/table/reinforced,/obj/machinery/button/door{id = "xenobio6"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access_txt = "55"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/toxins/xenobiology)
-"bZX" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor/preopen{id = "xenobio6"; name = "containment blast door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/engine,/area/toxins/xenobiology)
+"bZX" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor/preopen{id = "xenobio6"; name = "containment blast door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/engine,/area/toxins/xenobiology)
"bZY" = (/obj/item/device/radio/intercom{pixel_x = -25},/turf/simulated/floor/engine,/area/toxins/misc_lab)
-"bZZ" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/toxins/misc_lab)
+"bZZ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/toxins/misc_lab)
"caa" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "warningcorner"; dir = 1},/area/toxins/misc_lab)
"cab" = (/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "warningcorner"; dir = 8},/area/toxins/misc_lab)
"cac" = (/obj/structure/bed/stool,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
@@ -5432,7 +5432,7 @@
"cax" = (/obj/structure/closet/wardrobe/black,/obj/effect/decal/cleanable/cobweb,/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 1},/turf/simulated/floor/plating,/area/maintenance/aft)
"cay" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft)
"caz" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft)
-"caA" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/security/checkpoint/engineering)
+"caA" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/checkpoint/engineering)
"caB" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft)
"caC" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plating,/area/maintenance/aft)
"caD" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/security/checkpoint/engineering)
@@ -5440,8 +5440,8 @@
"caF" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/camera{c_tag = "Atmospherics Central"; dir = 4; network = list("SS13")},/obj/machinery/atmospherics/components/binary/pump{dir = 0; name = "Port to Filter"; on = 0},/turf/simulated/floor/plasteel,/area/atmos)
"caG" = (/obj/machinery/atmospherics/components/unary/heat_reservoir/heater{dir = 8},/turf/simulated/floor/plasteel,/area/atmos)
"caH" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 8},/obj/structure/bed/stool,/turf/simulated/floor/plasteel,/area/atmos)
-"caI" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/asmaint)
-"caJ" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/asmaint)
+"caI" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint)
+"caJ" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/yellow/visible{icon_state = "intact"; dir = 5},/turf/space,/area/space/nearstation)
"caK" = (/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/asmaint)
"caL" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint)
"caM" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/turf/simulated/floor/plating,/area/maintenance/asmaint)
@@ -5457,7 +5457,7 @@
"caW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/door/window/northleft{dir = 4; name = "Containment Pen"; req_access_txt = "55"},/obj/machinery/door/poddoor/preopen{id = "xenobio6"; name = "containment blast door"},/turf/simulated/floor/engine,/area/toxins/xenobiology)
"caX" = (/obj/machinery/sparker{id = "testigniter"; pixel_x = -25},/turf/simulated/floor/engine,/area/toxins/misc_lab)
"caY" = (/obj/item/device/radio/beacon,/turf/simulated/floor/engine,/area/toxins/misc_lab)
-"caZ" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "testlab"; name = "test chamber blast door"},/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/engine,/area/toxins/misc_lab)
+"caZ" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "testlab"; name = "test chamber blast door"},/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/engine,/area/toxins/misc_lab)
"cba" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/engine,/area/toxins/misc_lab)
"cbb" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/engine,/area/toxins/misc_lab)
"cbc" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/engine,/area/toxins/misc_lab)
@@ -5470,9 +5470,9 @@
"cbj" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating/airless,/area/space/nearstation)
"cbk" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/components/binary/pump{dir = 8; name = "Mix to Space"; on = 1},/turf/simulated/floor/plating/airless,/area/space/nearstation)
"cbl" = (/obj/machinery/camera{c_tag = "Telecoms Server Room"; dir = 4; network = list("SS13")},/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/server)
-"cbm" = (/obj/structure/window/fulltile/reinforced,/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable,/turf/simulated/floor/plating,/area/tcommsat/computer)
+"cbm" = (/obj/structure/window/reinforced/fulltile,/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable,/turf/simulated/floor/plating,/area/tcommsat/computer)
"cbn" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'."; name = "SERVER ROOM"; pixel_y = 0},/turf/simulated/wall,/area/tcommsat/computer)
-"cbo" = (/obj/structure/window/fulltile/reinforced,/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/tcommsat/computer)
+"cbo" = (/obj/structure/window/reinforced/fulltile,/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/tcommsat/computer)
"cbp" = (/obj/machinery/power/apc{cell_type = 5000; dir = 4; name = "CE Office APC"; pixel_x = 24; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralfull"},/area/engine/chiefs_office)
"cbq" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralfull"},/area/engine/chiefs_office)
"cbr" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/hallway/primary/aft)
@@ -5493,7 +5493,7 @@
"cbG" = (/obj/machinery/atmospherics/components/binary/pump{dir = 8; name = "CO2 Outlet Pump"; on = 0},/turf/simulated/floor/plasteel{dir = 5; icon_state = "yellow"},/area/atmos)
"cbH" = (/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/atmos)
"cbI" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; external_pressure_bound = 0; frequency = 1441; id_tag = "co2_out"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/atmos)
-"cbJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/asmaint)
+"cbJ" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/yellow/visible{icon_state = "intact"; dir = 10},/turf/simulated/floor/plating,/area/maintenance/asmaint)
"cbK" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall,/area/maintenance/asmaint)
"cbL" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint)
"cbM" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint)
@@ -5502,9 +5502,9 @@
"cbP" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint)
"cbQ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint)
"cbR" = (/obj/structure/table/reinforced,/obj/machinery/button/door{id = "xenobio1"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access_txt = "55"},/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/light,/turf/simulated/floor/plasteel{dir = 5; icon_state = "warning"},/area/toxins/xenobiology)
-"cbS" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor/preopen{id = "xenobio1"; name = "containment blast door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/engine,/area/toxins/xenobiology)
+"cbS" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor/preopen{id = "xenobio1"; name = "containment blast door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/engine,/area/toxins/xenobiology)
"cbT" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
-"cbU" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable,/obj/machinery/door/poddoor/preopen{id = "xenobio6"; name = "containment blast door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/engine,/area/toxins/xenobiology)
+"cbU" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable,/obj/machinery/door/poddoor/preopen{id = "xenobio6"; name = "containment blast door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/engine,/area/toxins/xenobiology)
"cbV" = (/obj/machinery/camera{c_tag = "Testing Chamber"; dir = 1; network = list("Test","RD"); pixel_x = 0},/obj/machinery/light,/turf/simulated/floor/engine,/area/toxins/misc_lab)
"cbW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "warningcorner"; dir = 4},/area/toxins/misc_lab)
"cbX" = (/obj/machinery/camera{c_tag = "Testing Lab South"; dir = 8; network = list("SS13","RD"); pixel_y = -22},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/toxins/misc_lab)
@@ -5552,7 +5552,7 @@
"ccN" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plating,/area/maintenance/asmaint)
"ccO" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"ccP" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
-"ccQ" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/toxins/xenobiology)
+"ccQ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/toxins/xenobiology)
"ccR" = (/obj/machinery/portable_atmospherics/pump,/turf/simulated/floor/plasteel{dir = 2; icon_state = "bot"},/area/toxins/misc_lab)
"ccS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/toxins/misc_lab)
"ccT" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/toxins/misc_lab)
@@ -5578,7 +5578,7 @@
"cdn" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8},/turf/simulated/floor/plasteel,/area/engine/engineering)
"cdo" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/closet/radiation,/turf/simulated/floor/plasteel,/area/engine/engineering)
"cdp" = (/obj/effect/landmark{name = "lightsout"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel,/area/engine/engineering)
-"cdq" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced/tinted,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
+"cdq" = (/obj/structure/grille,/obj/structure/window/reinforced/tinted/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"cdr" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"cds" = (/obj/machinery/power/apc{dir = 8; name = "Science Maintenance APC"; pixel_x = -25},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/camera{c_tag = "Aft Starboard Solar Access"; dir = 1},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"cdt" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/engine/break_room)
@@ -5589,10 +5589,10 @@
"cdy" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/obj/machinery/meter,/turf/simulated/floor/plasteel,/area/atmos)
"cdz" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/obj/machinery/atmospherics/components/binary/pump{dir = 1; name = "O2 to Pure"; on = 0},/turf/simulated/floor/plasteel,/area/atmos)
"cdA" = (/obj/machinery/atmospherics/components/trinary/mixer{dir = 4; node1_concentration = 0.8; node2_concentration = 0.2; on = 1; pixel_x = 0; pixel_y = 0; target_pressure = 4500},/turf/simulated/floor/plasteel,/area/atmos)
-"cdB" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = 3; on = 1},/turf/simulated/floor/plasteel,/area/atmos)
+"cdB" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = "co2"; on = 1},/turf/simulated/floor/plasteel,/area/atmos)
"cdC" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/simulated/floor/plasteel{dir = 6; icon_state = "yellow"},/area/atmos)
"cdD" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 8; frequency = 1441; id = "co2_in"; pixel_y = 1},/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/atmos)
-"cdE" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/asmaint)
+"cdE" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint)
"cdF" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint)
"cdG" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor/plating,/area/maintenance/asmaint)
"cdH" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint)
@@ -5619,7 +5619,7 @@
"cec" = (/obj/structure/sign/nosmoking_2{pixel_y = -32},/obj/machinery/light,/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/server)
"ced" = (/obj/machinery/telecomms/server/presets/science,/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/server)
"cee" = (/obj/structure/table,/obj/item/device/radio/off,/turf/simulated/floor/plasteel{icon_state = "yellow"; dir = 10},/area/tcommsat/computer)
-"cef" = (/obj/structure/window/fulltile/reinforced,/obj/structure/grille,/obj/structure/cable,/turf/simulated/floor/plating,/area/tcommsat/computer)
+"cef" = (/obj/structure/window/reinforced/fulltile,/obj/structure/grille,/obj/structure/cable,/turf/simulated/floor/plating,/area/tcommsat/computer)
"ceg" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/machinery/light,/obj/structure/filingcabinet/chestdrawer,/turf/simulated/floor/plasteel,/area/tcommsat/computer)
"ceh" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -35},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel,/area/tcommsat/computer)
"cei" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/turf/simulated/floor/plasteel,/area/tcommsat/computer)
@@ -5630,7 +5630,7 @@
"cen" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel,/area/engine/engineering)
"ceo" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralfull"},/area/engine/chiefs_office)
"cep" = (/obj/structure/sign/securearea,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall/r_wall,/area/engine/engineering)
-"ceq" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/chiefs_office)
+"ceq" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/chiefs_office)
"cer" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/engine/break_room)
"ces" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{dir = 9; icon_state = "yellow"},/area/engine/engineering)
"cet" = (/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{dir = 5; icon_state = "yellow"},/area/engine/engineering)
@@ -5640,9 +5640,9 @@
"cex" = (/obj/machinery/camera{c_tag = "Atmospherics South West"; dir = 4; network = list("SS13")},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel,/area/atmos)
"cey" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/engine/engineering)
"cez" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible,/turf/simulated/floor/plasteel,/area/atmos)
-"ceA" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 9},/turf/simulated/floor/plating,/area/atmos)
+"ceA" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 9},/turf/simulated/floor/plating,/area/atmos)
"ceB" = (/obj/machinery/light{dir = 4},/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 6},/turf/simulated/floor/plasteel,/area/atmos)
-"ceC" = (/obj/machinery/power/apc{dir = 2; name = "Incinerator APC"; pixel_x = 0; pixel_y = -24},/obj/structure/cable,/turf/simulated/floor/plating,/area/maintenance/incinerator)
+"ceC" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/yellow/visible,/turf/simulated/floor/plating,/area/maintenance/asmaint)
"ceD" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plating{icon_state = "warnplate"},/area/maintenance/asmaint)
"ceE" = (/obj/structure/sign/fire{pixel_x = 0; pixel_y = -32},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint)
"ceF" = (/obj/structure/closet/emcloset,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plating,/area/maintenance/asmaint)
@@ -5668,13 +5668,13 @@
"ceZ" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_engineering{name = "Power Storage"; req_access_txt = "11"; req_one_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/engine/engineering)
"cfa" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/storage/belt/utility,/obj/item/weapon/wrench,/obj/item/weapon/weldingtool,/obj/item/clothing/head/welding{pixel_x = -3; pixel_y = 5},/turf/simulated/floor/plasteel{dir = 1; icon_state = "yellow"},/area/engine/engineering)
"cfb" = (/turf/simulated/wall/r_wall,/area/engine/chiefs_office)
-"cfc" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor/preopen{id = "Engineering"; name = "engineering security door"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/chiefs_office)
+"cfc" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor/preopen{id = "Engineering"; name = "engineering security door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/chiefs_office)
"cfd" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellow"},/area/engine/engineering)
"cfe" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_x = -32; pixel_y = 0},/obj/structure/disposalpipe/segment,/obj/structure/sign/securearea{pixel_x = 32; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/aft)
"cff" = (/obj/machinery/vending/tool,/turf/simulated/floor/plasteel{dir = 1; icon_state = "yellowcorner"},/area/engine/engineering)
"cfg" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellowcorner"},/area/engine/engineering)
"cfh" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "yellow"},/area/engine/break_room)
-"cfi" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 2; filter_type = 2; on = 1},/turf/simulated/floor/plasteel,/area/atmos)
+"cfi" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 2; filter_type = "n2"; on = 1},/turf/simulated/floor/plasteel,/area/atmos)
"cfj" = (/turf/simulated/wall,/area/maintenance/incinerator)
"cfk" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/airlock/atmos{name = "Turbine Access"; req_access_txt = "32"},/turf/simulated/floor/plating,/area/maintenance/incinerator)
"cfl" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall,/area/maintenance/incinerator)
@@ -5689,7 +5689,7 @@
"cfu" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall/r_wall,/area/toxins/misc_lab)
"cfv" = (/obj/machinery/door/airlock/maintenance{name = "Firefighting equipment"; req_access_txt = "12"},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"cfw" = (/turf/simulated/wall/r_wall,/area/maintenance/portsolar)
-"cfx" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating/airless,/area/maintenance/portsolar)
+"cfx" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating/airless,/area/maintenance/portsolar)
"cfy" = (/obj/structure/rack,/obj/item/clothing/shoes/winterboots,/obj/item/clothing/suit/hooded/wintercoat,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
"cfz" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plasteel{dir = 1; icon_state = "yellowcorner"},/area/engine/engineering)
"cfA" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/engine/engineering)
@@ -5709,13 +5709,13 @@
"cfO" = (/obj/machinery/atmospherics/pipe/simple/green/visible,/obj/machinery/portable_atmospherics/pump,/turf/simulated/floor/plasteel,/area/atmos)
"cfP" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/simulated/floor/plasteel,/area/atmos)
"cfQ" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/obj/machinery/atmospherics/pipe/simple/cyan/visible,/turf/simulated/floor/plasteel,/area/atmos)
-"cfR" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = 1; on = 1},/turf/simulated/floor/plasteel,/area/atmos)
+"cfR" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = "o2"; on = 1},/turf/simulated/floor/plasteel,/area/atmos)
"cfS" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4; initialize_directions = 12},/turf/simulated/floor/plasteel,/area/atmos)
"cfT" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 9},/turf/simulated/floor/plasteel,/area/atmos)
"cfU" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/turf/simulated/wall,/area/maintenance/incinerator)
-"cfV" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{icon_state = "intact"; dir = 5},/turf/simulated/wall,/area/maintenance/incinerator)
-"cfW" = (/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/pipe/simple/yellow/visible{icon_state = "intact"; dir = 10},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
-"cfX" = (/obj/machinery/atmospherics/components/binary/pump{dir = 4; name = "atmospherics mix pump"},/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"cfV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/yellow/visible,/turf/simulated/floor/plating,/area/maintenance/asmaint)
+"cfW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/yellow/visible,/turf/simulated/floor/plating,/area/maintenance/asmaint)
+"cfX" = (/obj/machinery/power/apc{dir = 2; name = "Incinerator APC"; pixel_x = 0; pixel_y = -24},/obj/structure/cable,/obj/machinery/atmospherics/pipe/simple/yellow/visible,/turf/simulated/floor/plating,/area/maintenance/incinerator)
"cfY" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/incinerator)
"cfZ" = (/obj/machinery/light_switch{pixel_x = 0; pixel_y = 26},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
"cga" = (/obj/machinery/power/smes{capacity = 9e+006; charge = 10000},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/effect/decal/cleanable/cobweb{icon_state = "cobweb2"},/turf/simulated/floor/plating,/area/maintenance/incinerator)
@@ -5728,7 +5728,7 @@
"cgh" = (/obj/structure/disposalpipe/segment,/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint)
"cgi" = (/turf/simulated/floor/bluegrid{name = "Killroom Floor"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/xenobiology)
"cgj" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/barricade/wooden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint)
-"cgk" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/sign/biohazard,/turf/simulated/floor/plating,/area/toxins/xenobiology)
+"cgk" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/sign/biohazard,/turf/simulated/floor/plating,/area/toxins/xenobiology)
"cgl" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 2; external_pressure_bound = 120; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/bluegrid{name = "Killroom Floor"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/xenobiology)
"cgm" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"cgn" = (/obj/machinery/atmospherics/components/unary/cold_sink/freezer{current_temperature = 80; dir = 2; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
@@ -5762,7 +5762,7 @@
"cgP" = (/obj/structure/table,/obj/item/device/flashlight{pixel_y = 5},/obj/item/clothing/ears/earmuffs{pixel_x = -5; pixel_y = 6},/obj/item/weapon/airlock_painter,/turf/simulated/floor/plasteel,/area/engine/engineering)
"cgQ" = (/obj/machinery/camera{c_tag = "Engineering East"; dir = 8; network = list("SS13"); pixel_x = 0; pixel_y = 0},/obj/structure/closet/wardrobe/engineering_yellow,/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellowcorner"},/area/engine/engineering)
"cgR" = (/turf/simulated/floor/plasteel,/area/engine/engineering)
-"cgS" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/chiefs_office)
+"cgS" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/chiefs_office)
"cgT" = (/obj/machinery/door/airlock/engineering{name = "SMES Room"; req_access_txt = "32"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/engine/engine_smes)
"cgU" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/engine/engineering)
"cgV" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "n2_in"; name = "Nitrogen Supply Control"; output_tag = "n2_out"; sensors = list("n2_sensor" = "Tank")},/turf/simulated/floor/plasteel{icon_state = "red"},/area/atmos)
@@ -5780,8 +5780,8 @@
"chh" = (/obj/machinery/atmospherics/components/unary/tank/toxins{dir = 4},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
"chi" = (/obj/machinery/atmospherics/pipe/manifold4w/general{level = 2},/obj/machinery/meter,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
"chj" = (/obj/machinery/atmospherics/components/binary/pump{dir = 4; name = "plasma tank pump"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
-"chk" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 10},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
-"chl" = (/obj/machinery/atmospherics/components/binary/pump{dir = 4; name = "Mix to Incinerator"; on = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"chk" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible,/turf/simulated/wall,/area/maintenance/incinerator)
+"chl" = (/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/components/binary/pump{dir = 2; name = "atmospherics mix pump"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
"chm" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/machinery/alarm{desc = "This particular atmos control unit appears to have no access restrictions."; dir = 8; icon_state = "alarm0"; locked = 0; name = "all-access air alarm"; pixel_x = 24; req_access = "0"; req_one_access = "0"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
"chn" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
"cho" = (/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 5},/turf/simulated/floor/bluegrid{name = "Killroom Floor"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/xenobiology)
@@ -5795,7 +5795,7 @@
"chw" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 1},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"chx" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"chy" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
-"chz" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
+"chz" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"chA" = (/obj/structure/reagent_dispensers/watertank,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"chB" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/engine/engineering)
"chC" = (/obj/structure/rack{dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/spawner/lootdrop/maintenance,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
@@ -5838,19 +5838,19 @@
"cin" = (/obj/structure/closet/secure_closet/engineering_chief{req_access_txt = "0"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralfull"},/area/engine/chiefs_office)
"cio" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralfull"},/area/engine/chiefs_office)
"cip" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel,/area/engine/engineering)
-"ciq" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/chiefs_office)
+"ciq" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/chiefs_office)
"cir" = (/obj/structure/table,/obj/item/weapon/book/manual/wiki/engineering_guide,/obj/item/weapon/book/manual/engineering_particle_accelerator{pixel_y = 6},/turf/simulated/floor/plasteel,/area/engine/engineering)
"cis" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plasteel,/area/engine/engineering)
"cit" = (/obj/machinery/atmospherics/pipe/simple/green/visible,/turf/simulated/wall/r_wall,/area/atmos)
-"ciu" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/yellow/visible,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/atmos)
-"civ" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/green/visible,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/atmos)
-"ciw" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible,/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/atmos)
+"ciu" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/yellow/visible,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/atmos)
+"civ" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/green/visible,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/atmos)
+"ciw" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible,/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/atmos)
"cix" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible,/turf/simulated/wall/r_wall,/area/atmos)
"ciy" = (/obj/structure/sign/nosmoking_2{pixel_x = -28},/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 4; name = "input gas connector port"},/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
"ciz" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 4; initialize_directions = 11},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
"ciA" = (/obj/machinery/atmospherics/components/binary/pump{dir = 4; name = "input port pump"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
-"ciB" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 2},/obj/item/weapon/cigbutt,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
-"ciC" = (/obj/effect/landmark{name = "blobstart"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/mob/living/simple_animal/mouse,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"ciB" = (/obj/effect/decal/cleanable/cobweb,/obj/structure/reagent_dispensers/watertank,/obj/item/weapon/extinguisher,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"ciC" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 6},/turf/space,/area/space/nearstation)
"ciD" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{name = "output gas connector port"},/obj/machinery/portable_atmospherics/canister,/obj/structure/sign/nosmoking_2{pixel_x = 28},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
"ciE" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
"ciF" = (/obj/structure/table,/obj/item/weapon/cartridge/medical,/turf/simulated/floor/plating,/area/maintenance/asmaint)
@@ -5859,7 +5859,7 @@
"ciI" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"ciJ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating{icon_state = "platingdmg3"},/area/maintenance/asmaint2)
"ciK" = (/obj/structure/rack,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
-"ciL" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced/tinted,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
+"ciL" = (/obj/structure/grille,/obj/structure/window/reinforced/tinted/fulltile,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"ciM" = (/obj/machinery/power/compressor{comp_id = "incineratorturbine"; dir = 1; luminosity = 2},/obj/structure/cable/yellow,/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/camera{c_tag = "Turbine Chamber"; dir = 4; network = list("Turbine")},/turf/simulated/floor/engine/vacuum,/area/maintenance/incinerator)
"ciN" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/engine/engineering)
"ciO" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel,/area/engine/engineering)
@@ -5889,7 +5889,7 @@
"cjm" = (/obj/machinery/door/airlock/command{name = "MiniSat Access"; req_access_txt = "65"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/engine/engineering)
"cjn" = (/obj/item/weapon/weldingtool,/turf/simulated/floor/plating/airless,/area/space/nearstation)
"cjo" = (/obj/item/stack/sheet/metal,/turf/simulated/floor/plating/airless,/area/space/nearstation)
-"cjp" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/turf/simulated/floor/plating,/area/maintenance/incinerator)
+"cjp" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/obj/structure/reagent_dispensers/fueltank,/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
"cjq" = (/obj/machinery/atmospherics/components/binary/valve{name = "Mix to Space"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
"cjr" = (/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
"cjs" = (/obj/machinery/atmospherics/pipe/simple/general/visible,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
@@ -5931,15 +5931,15 @@
"ckc" = (/obj/machinery/atmospherics/pipe/simple,/obj/structure/grille,/obj/machinery/meter{frequency = 1443; id = "mair_in_meter"; name = "Mixed Air Tank In"},/turf/simulated/wall/r_wall,/area/atmos)
"ckd" = (/obj/machinery/atmospherics/pipe/simple,/obj/structure/grille,/obj/machinery/meter{frequency = 1443; id = "mair_out_meter"; name = "Mixed Air Tank Out"},/turf/simulated/wall/r_wall,/area/atmos)
"cke" = (/obj/structure/bed/stool,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
-"ckf" = (/obj/structure/grille,/obj/structure/disposalpipe/segment,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/incinerator)
+"ckf" = (/obj/structure/grille,/obj/structure/disposalpipe/segment,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/incinerator)
"ckg" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 8},/obj/machinery/meter,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
-"ckh" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 2},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
-"cki" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
-"ckj" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 4; initialize_directions = 11},/obj/machinery/meter,/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"ckh" = (/obj/machinery/atmospherics/components/binary/pump{dir = 8; name = "Mix to MiniSat"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"cki" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"ckj" = (/obj/item/weapon/cigbutt,/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 10},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
"ckk" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/components/binary/valve{dir = 4; name = "Incinerator to Space"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
"ckl" = (/obj/machinery/portable_atmospherics/canister,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plating,/area/maintenance/asmaint)
"ckm" = (/obj/machinery/door/airlock/maintenance{name = "Biohazard Disposals"; req_access_txt = "12"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint)
-"ckn" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/toxins/xenobiology)
+"ckn" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/toxins/xenobiology)
"cko" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall,/area/maintenance/asmaint2)
"ckp" = (/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"ckq" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/mob/living/simple_animal/mouse,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
@@ -5963,10 +5963,10 @@
"ckI" = (/obj/structure/dispenser,/turf/simulated/floor/plasteel,/area/engine/engineering)
"ckJ" = (/obj/structure/closet/crate{name = "solar pack crate"},/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/weapon/circuitboard/solar_control,/obj/item/weapon/electronics/tracker,/obj/item/weapon/paper/solar,/turf/simulated/floor/plasteel,/area/engine/engineering)
"ckK" = (/obj/machinery/suit_storage_unit/engine,/turf/simulated/floor/plasteel,/area/engine/engineering)
-"ckL" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/chiefs_office)
+"ckL" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/chiefs_office)
"ckM" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/toxins/misc_lab)
"ckN" = (/obj/machinery/door/airlock/glass_research{name = "Test Chamber"; req_access_txt = "47"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/toxins/misc_lab)
-"ckO" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/chiefs_office)
+"ckO" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/chiefs_office)
"ckP" = (/obj/machinery/door/airlock/glass_command{name = "Chief Engineer"; req_access_txt = "56"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralfull"},/area/engine/chiefs_office)
"ckQ" = (/obj/structure/closet/cardboard,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/quartermaster/storage)
"ckR" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"},/turf/simulated/wall/r_wall,/area/engine/chiefs_office)
@@ -5981,12 +5981,12 @@
"cla" = (/obj/machinery/air_sensor{frequency = 1443; id_tag = "air_sensor"; output = 7},/turf/simulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/atmos)
"clb" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 1; frequency = 1443; id = "air_in"},/turf/simulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/atmos)
"clc" = (/obj/machinery/atmospherics/components/unary/vent_pump/high_volume{dir = 1; external_pressure_bound = 0; frequency = 1443; icon_state = "vent_map"; id_tag = "air_out"; internal_pressure_bound = 2000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/atmos)
-"cld" = (/obj/structure/reagent_dispensers/fueltank,/obj/item/weapon/storage/toolbox/emergency,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
-"cle" = (/obj/machinery/computer/turbine_computer{id = "incineratorturbine"},/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
-"clf" = (/obj/structure/reagent_dispensers/watertank,/obj/item/weapon/extinguisher,/obj/machinery/light/small,/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -31},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
-"clg" = (/obj/machinery/button/door{id = "auxincineratorvent"; name = "Auxiliary Vent Control"; pixel_x = 6; pixel_y = -24; req_access_txt = "32"},/obj/machinery/button/door{id = "turbinevent"; name = "Turbine Vent Control"; pixel_x = -6; pixel_y = -24; req_access_txt = "32"},/obj/machinery/atmospherics/pipe/simple/general/visible,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
-"clh" = (/obj/machinery/computer/security/telescreen{desc = "Used for watching the turbine vent."; dir = 1; name = "turbine vent monitor"; network = list("Turbine"); pixel_x = 0; pixel_y = -29},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
-"cli" = (/obj/machinery/atmospherics/pipe/simple/general/visible,/obj/machinery/doorButtons/airlock_controller{idExterior = "incinerator_airlock_exterior"; idSelf = "incinerator_access_control"; idInterior = "incinerator_airlock_interior"; name = "Incinerator Access Console"; pixel_x = 6; pixel_y = -26; req_access_txt = "12"},/obj/machinery/button/ignition{id = "Incinerator"; pixel_x = -6; pixel_y = -24},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"cld" = (/obj/effect/landmark{name = "blobstart"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/components/binary/pump{dir = 4; name = "Mix to Incinerator"; on = 0},/mob/living/simple_animal/mouse,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"cle" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 2},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"clf" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/atmospherics/pipe/simple/general/visible,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"clg" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/turf/simulated/floor/plating,/area/maintenance/incinerator)
+"clh" = (/obj/machinery/light/small,/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -31},/obj/machinery/computer/turbine_computer{id = "incineratorturbine"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"cli" = (/obj/machinery/button/door{id = "auxincineratorvent"; name = "Auxiliary Vent Control"; pixel_x = 6; pixel_y = -24; req_access_txt = "32"},/obj/machinery/button/door{id = "turbinevent"; name = "Turbine Vent Control"; pixel_x = -6; pixel_y = -24; req_access_txt = "32"},/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/obj/machinery/atmospherics/pipe/simple/general/visible,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
"clj" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
"clk" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint)
"cll" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/components/binary/pump{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint)
@@ -6031,7 +6031,7 @@
"clY" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/atmos)
"clZ" = (/turf/simulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/atmos)
"cma" = (/obj/machinery/door/window{name = "Cockpit"; req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate)
-"cmb" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/incinerator)
+"cmb" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/incinerator)
"cmc" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 2},/turf/simulated/wall/r_wall,/area/maintenance/incinerator)
"cmd" = (/turf/simulated/wall/r_wall,/area/maintenance/incinerator)
"cme" = (/obj/machinery/atmospherics/pipe/simple/general/visible,/turf/simulated/wall/r_wall,/area/maintenance/incinerator)
@@ -6049,7 +6049,7 @@
"cmq" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating{icon_state = "platingdmg3"},/area/maintenance/asmaint2)
"cmr" = (/obj/structure/closet/toolcloset,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"cms" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
-"cmt" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
+"cmt" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"cmu" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/wall,/area/maintenance/asmaint2)
"cmv" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
"cmw" = (/obj/machinery/power/solar_control{id = "starboardsolar"; name = "Aft Starboard Solar Control"; track = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
@@ -6091,7 +6091,7 @@
"cng" = (/obj/machinery/light/small,/obj/structure/table,/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/effect/spawner/lootdrop/maintenance,/obj/item/weapon/clipboard,/turf/simulated/floor/plating,/area/maintenance/asmaint)
"cnh" = (/obj/structure/bed/chair{dir = 8},/obj/effect/decal/cleanable/ash,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"cni" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/maintenance/asmaint2)
-"cnj" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
+"cnj" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
"cnk" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/door/airlock/external{name = "Solar Maintenance"; req_access = null; req_access_txt = "10; 13"},/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
"cnl" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/lattice/catwalk,/turf/space,/area/solar/port)
"cnm" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 2; on = 1},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/engine/engine_smes)
@@ -6141,7 +6141,7 @@
"coe" = (/obj/machinery/door/window{dir = 4; name = "EVA Storage"; req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate)
"cof" = (/obj/machinery/door/airlock/external{req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate)
"cog" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "EVA Storage"; req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate)
-"coh" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/shuttle/syndicate)
+"coh" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/shuttle/syndicate)
"coi" = (/obj/structure/rack,/obj/item/clothing/suit/space/syndicate/black/red,/obj/item/clothing/head/helmet/space/syndicate/black/red,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate)
"coj" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; freerange = 1; frequency = 1213; name = "Syndicate Intercom"; pixel_x = -32; subspace_transmission = 1; syndie = 1},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate)
"cok" = (/obj/machinery/recharge_station,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate)
@@ -6153,7 +6153,7 @@
"coq" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; external_pressure_bound = 0; initialize_directions = 1; internal_pressure_bound = 4000; on = 0; pressure_checks = 2; pump_direction = 0},/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/engine/vacuum,/area/maintenance/incinerator)
"cor" = (/obj/machinery/igniter{icon_state = "igniter0"; id = "Incinerator"; luminosity = 2; on = 0},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/engine/vacuum,/area/maintenance/incinerator)
"cos" = (/obj/machinery/door/poddoor{id = "auxincineratorvent"; name = "Auxiliary Incinerator Vent"},/turf/simulated/floor/engine/vacuum,/area/maintenance/incinerator)
-"cot" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/maintenance/asmaint)
+"cot" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/asmaint)
"cou" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"cov" = (/obj/machinery/power/port_gen/pacman,/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/engine/engine_smes)
"cow" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/engine/engine_smes)
@@ -6288,7 +6288,7 @@
"cqV" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/engine/engineering)
"cqW" = (/obj/machinery/power/rad_collector{anchored = 1},/obj/item/weapon/tank/internals/plasma,/obj/structure/cable/yellow,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/engine/engineering)
"cqX" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/engine/engineering)
-"cqY" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/engineering)
+"cqY" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/engineering)
"cqZ" = (/obj/structure/particle_accelerator/particle_emitter/center,/turf/simulated/floor/plating,/area/engine/engineering)
"cra" = (/obj/structure/particle_accelerator/particle_emitter/left,/turf/simulated/floor/plating,/area/engine/engineering)
"crb" = (/obj/structure/particle_accelerator/particle_emitter/right,/turf/simulated/floor/plating,/area/engine/engineering)
@@ -6303,11 +6303,11 @@
"crk" = (/obj/structure/lattice/catwalk,/turf/space,/area/solar/starboard)
"crl" = (/obj/structure/table,/obj/item/device/taperecorder{pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/aft)
"crm" = (/obj/structure/table,/obj/item/weapon/storage/box/matches,/obj/item/weapon/storage/fancy/cigarettes,/turf/simulated/floor/plating,/area/maintenance/aft)
-"crn" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating/airless,/area/engine/engineering)
-"cro" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/engineering)
+"crn" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating/airless,/area/engine/engineering)
+"cro" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/engineering)
"crp" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"},/turf/simulated/wall/r_wall,/area/engine/engineering)
-"crq" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "brig shutters"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/engineering)
-"crr" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/engineering)
+"crq" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "brig shutters"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/engineering)
+"crr" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/engineering)
"crs" = (/obj/structure/cable/yellow{icon_state = "1-4"; d1 = 1; d2 = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 10},/area/engine/engineering)
"crt" = (/obj/item/weapon/wirecutters,/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plating{icon_state = "warnplate"},/area/engine/engineering)
"cru" = (/turf/simulated/floor/plating{icon_state = "warnplate"},/area/engine/engineering)
@@ -6340,7 +6340,7 @@
"crV" = (/obj/item/weapon/wrench,/turf/simulated/floor/plating/airless,/area/engine/engineering)
"crW" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/engine/engineering)
"crX" = (/obj/structure/closet/emcloset,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 32},/turf/simulated/floor/plating,/area/engine/engineering)
-"crY" = (/obj/structure/transit_tube{icon_state = "N-S"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/engine/engineering)
+"crY" = (/obj/structure/transit_tube{icon_state = "N-S"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/engineering)
"crZ" = (/obj/structure/grille,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating/airless,/area/engine/engineering)
"csa" = (/turf/simulated/floor/plating/airless{dir = 8; icon_state = "warnplate"},/area/engine/engineering)
"csb" = (/obj/machinery/power/emitter{anchored = 1; dir = 4; state = 2},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating/airless,/area/engine/engineering)
@@ -6358,20 +6358,20 @@
"csn" = (/obj/structure/transit_tube,/turf/space,/area/space)
"cso" = (/obj/structure/transit_tube,/obj/structure/lattice,/turf/space,/area/space)
"csp" = (/obj/structure/transit_tube{icon_state = "E-W-Pass"},/turf/space,/area/space)
-"csq" = (/obj/structure/transit_tube{icon_state = "W-SE"},/turf/space,/area/space)
-"csr" = (/obj/structure/transit_tube{icon_state = "D-SW"},/obj/structure/lattice,/turf/space,/area/space)
+"csq" = (/obj/machinery/computer/security/telescreen{desc = "Used for watching the turbine vent."; dir = 1; name = "turbine vent monitor"; network = list("Turbine"); pixel_x = 0; pixel_y = -29},/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"csr" = (/obj/machinery/doorButtons/airlock_controller{idExterior = "incinerator_airlock_exterior"; idSelf = "incinerator_access_control"; idInterior = "incinerator_airlock_interior"; name = "Incinerator Access Console"; pixel_x = 6; pixel_y = -26; req_access_txt = "12"},/obj/machinery/button/ignition{id = "Incinerator"; pixel_x = -6; pixel_y = -24},/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 4; initialize_directions = 11},/obj/machinery/meter,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
"css" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering)
"cst" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering)
"csu" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering)
"csv" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering)
-"csw" = (/obj/structure/transit_tube{icon_state = "NW-SE"},/obj/structure/lattice,/turf/space,/area/space)
+"csw" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/yellow/visible,/turf/space,/area/space)
"csx" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering)
"csy" = (/obj/structure/disposaloutlet,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/plating/airless,/area/space/nearstation)
"csz" = (/obj/effect/landmark{name = "carpspawn"},/turf/space,/area/space/nearstation)
"csA" = (/obj/machinery/field/generator{anchored = 1; state = 2},/turf/simulated/floor/plating/airless,/area/space/nearstation)
"csB" = (/obj/item/weapon/wirecutters,/obj/structure/lattice,/turf/space,/area/space/nearstation)
"csC" = (/turf/simulated/floor/plating/airless{dir = 1; icon_state = "warnplate"},/area/space/nearstation)
-"csD" = (/turf/simulated/wall/r_wall,/area/aisat)
+"csD" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/turret_protected/aisat_interior)
"csE" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/lattice/catwalk,/turf/space,/area/solar/starboard)
"csF" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_x = 0; pixel_y = 0},/turf/simulated/wall/r_wall,/area/engine/engineering)
"csG" = (/obj/machinery/light{dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering)
@@ -6380,207 +6380,207 @@
"csJ" = (/obj/item/weapon/crowbar,/turf/space,/area/space/nearstation)
"csK" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering)
"csL" = (/obj/structure/transit_tube{icon_state = "D-NE"},/turf/space,/area/space)
-"csM" = (/obj/machinery/teleport/station,/turf/simulated/floor/plating,/area/aisat)
-"csN" = (/obj/machinery/computer/teleporter,/turf/simulated/floor/plating,/area/aisat)
-"csO" = (/obj/machinery/teleport/hub,/turf/simulated/floor/plating,/area/aisat)
+"csM" = (/obj/structure/transit_tube,/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/yellow/visible,/turf/space,/area/space)
+"csN" = (/obj/structure/transit_tube,/turf/simulated/floor/plating,/area/turret_protected/aisat_interior)
+"csO" = (/obj/structure/window/reinforced/fulltile,/obj/structure/transit_tube,/turf/simulated/floor/plating,/area/turret_protected/aisat_interior)
"csP" = (/obj/machinery/power/grounding_rod,/turf/simulated/floor/plating/airless,/area/space/nearstation)
"csQ" = (/obj/item/weapon/wrench,/turf/simulated/floor/plating/airless,/area/space/nearstation)
"csR" = (/obj/machinery/the_singularitygen,/turf/simulated/floor/plating/airless{dir = 8; icon_state = "warnplate"},/area/space/nearstation)
"csS" = (/obj/item/weapon/weldingtool,/turf/space,/area/space/nearstation)
-"csT" = (/obj/structure/transit_tube{icon_state = "NW-SE"},/turf/space,/area/space)
-"csU" = (/obj/structure/transit_tube{icon_state = "D-NE"},/obj/structure/lattice,/turf/space,/area/space)
-"csV" = (/obj/machinery/bluespace_beacon,/turf/simulated/floor/plasteel{icon_state = "warndark"; dir = 1},/area/aisat)
-"csW" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{icon_state = "warndark"; dir = 1},/area/aisat)
-"csX" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel{icon_state = "warndark"; dir = 1},/area/aisat)
+"csT" = (/obj/structure/transit_tube{dir = 8; icon_state = "Block"},/turf/simulated/floor/plating,/area/turret_protected/aisat_interior)
+"csU" = (/obj/structure/transit_tube/station{reverse_launch = 1},/turf/simulated/floor/plating,/area/turret_protected/aisat_interior)
+"csV" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/turret_protected/aisat_interior)
+"csW" = (/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/turret_protected/aisat_interior)
+"csX" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plating,/area/turret_protected/aisat_interior)
"csY" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable,/obj/structure/lattice/catwalk,/turf/space,/area/solar/starboard)
"csZ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/lattice/catwalk,/turf/space,/area/solar/starboard)
-"cta" = (/obj/structure/transit_tube{icon_state = "S-NW"},/obj/structure/lattice,/turf/space,/area/space)
-"ctb" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/aisat)
-"ctc" = (/obj/machinery/camera{c_tag = "MiniSat Teleporter"; dir = 1; network = list("MiniSat"); pixel_x = 0; pixel_y = 0},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = -28; pixel_y = 0},/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/aisat)
-"ctd" = (/obj/machinery/button/door{id = "teledoor"; name = "AI Satellite Teleport Shutters Control"; pixel_x = 25; pixel_y = 0; req_access_txt = "17;65"},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 2; on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/aisat)
+"cta" = (/obj/machinery/door/airlock/external{name = "MiniSat External Access"; req_access = null; req_access_txt = "65;13"},/turf/simulated/floor/plating,/area/turret_protected/aisat_interior)
+"ctb" = (/turf/simulated/floor/plating,/area/turret_protected/aisat_interior)
+"ctc" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/turret_protected/aisat_interior)
+"ctd" = (/obj/structure/lattice/catwalk,/obj/machinery/atmospherics/pipe/simple/yellow/visible,/turf/space,/area/space)
"cte" = (/obj/item/device/radio/off,/turf/simulated/floor/plating/airless,/area/engine/engineering)
"ctf" = (/turf/simulated/floor/plating/airless{dir = 2; icon_state = "warnplate"},/area/space/nearstation)
-"ctg" = (/turf/simulated/wall,/area/aisat)
-"cth" = (/obj/structure/transit_tube{icon_state = "N-S"},/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/aisat)
-"cti" = (/obj/machinery/door/airlock/hatch{name = "Teleporter Room"; req_access_txt = "17;65"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/aisat)
-"ctj" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall/r_wall,/area/aisat)
-"ctk" = (/obj/machinery/door/poddoor/shutters{id = "teledoor"; name = "AI Satellite Teleport Access"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/aisat)
+"ctg" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/turret_protected/aisat_interior)
+"cth" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -29},/obj/machinery/light/small,/turf/simulated/floor/plating,/area/turret_protected/aisat_interior)
+"cti" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/sign/securearea{pixel_y = -32},/turf/simulated/floor/plating,/area/turret_protected/aisat_interior)
+"ctj" = (/obj/machinery/camera{c_tag = "MiniSat Pod Access"; dir = 1; network = list("MiniSat"); pixel_x = 0; pixel_y = 0; start_active = 1},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 2; on = 1},/obj/machinery/light/small,/turf/simulated/floor/plating,/area/turret_protected/aisat_interior)
+"ctk" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8},/turf/simulated/wall,/area/turret_protected/aisat_interior)
"ctl" = (/obj/structure/grille,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating/airless,/area/engine/engineering)
"ctm" = (/turf/simulated/floor/plating/airless{dir = 10; icon_state = "warnplate"},/area/space/nearstation)
"ctn" = (/obj/structure/grille,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating/airless,/area/engine/engineering)
-"cto" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/aisat)
-"ctp" = (/obj/structure/transit_tube{icon_state = "N-S"},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/aisat)
-"ctq" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/aisat)
-"ctr" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = 0; pixel_y = 25},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"; dir = 8},/area/aisat)
-"cts" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/aisat)
-"ctt" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"},/area/aisat)
-"ctu" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/aisat)
+"cto" = (/obj/machinery/door/airlock/hatch{name = "MiniSat Foyer"; req_one_access_txt = "65"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior)
+"ctp" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 8},/turf/simulated/floor/plating/airless,/area/turret_protected/aisat_interior)
+"ctq" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall,/area/turret_protected/aisat_interior)
+"ctr" = (/obj/structure/table,/obj/machinery/light/small{dir = 1},/obj/item/weapon/folder{pixel_x = 3},/obj/item/weapon/phone{pixel_x = -3; pixel_y = 3},/obj/item/weapon/pen,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior)
+"cts" = (/obj/structure/rack{dir = 1},/obj/machinery/light/small{dir = 1},/obj/machinery/light_switch{pixel_y = 28},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/item/device/radio/off{pixel_y = 4},/obj/item/weapon/screwdriver{pixel_y = 10},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior)
+"ctt" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior)
+"ctu" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/turret_protected/aisat_interior)
"ctv" = (/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering)
-"ctw" = (/obj/structure/transit_tube/station{dir = 4; icon_state = "closed"; reverse_launch = 1},/turf/simulated/floor/plating,/area/aisat)
-"ctx" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"; dir = 8},/area/aisat)
-"cty" = (/obj/machinery/door/airlock/external{name = "MiniSat External Access"; req_access = null; req_access_txt = "65;13"},/turf/simulated/floor/plating,/area/aisat)
-"ctz" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"},/area/aisat)
-"ctA" = (/turf/simulated/floor/plating,/area/aisat)
+"ctw" = (/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/obj/machinery/computer/station_alert,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior)
+"ctx" = (/obj/machinery/atmospherics/pipe/manifold4w/scrubbers,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/turret_protected/aisat_interior)
+"cty" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/turret_protected/aisat_interior)
+"ctz" = (/obj/machinery/door/poddoor/shutters{id = "teledoor"; name = "MiniSat Teleport Access"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior)
+"ctA" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = 30},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior)
"ctB" = (/obj/structure/cable,/obj/machinery/power/tracker,/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/solar/starboard)
"ctC" = (/obj/machinery/camera/emp_proof{c_tag = "Singularity West"; dir = 1; network = list("Singularity")},/turf/simulated/floor/plating/airless,/area/engine/engineering)
"ctD" = (/obj/machinery/camera/emp_proof{c_tag = "Singularity East"; dir = 1; network = list("Singularity")},/turf/simulated/floor/plating/airless,/area/engine/engineering)
-"ctE" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/aisat)
-"ctF" = (/obj/structure/transit_tube{dir = 1; icon_state = "Block"},/turf/simulated/floor/plating,/area/aisat)
-"ctG" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/aisat)
-"ctH" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"; dir = 8},/area/aisat)
-"ctI" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/aisat)
-"ctJ" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"},/area/aisat)
-"ctK" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; on = 1; scrub_Toxins = 0},/obj/structure/closet/emcloset,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 32},/turf/simulated/floor/plating,/area/aisat)
-"ctL" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/aisat)
-"ctM" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/camera{c_tag = "MiniSat Entrance"; dir = 4; network = list("MiniSat"); pixel_x = 0; pixel_y = 0},/obj/machinery/power/apc{dir = 8; name = "MiniSat External Power APC"; pixel_x = -27; pixel_y = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"; dir = 8},/area/aisat)
-"ctN" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"},/area/aisat)
-"ctO" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/aisat)
-"ctP" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/aisat)
-"ctQ" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"},/area/aisat)
+"ctE" = (/obj/machinery/teleport/hub,/turf/simulated/floor/plating,/area/turret_protected/aisat_interior)
+"ctF" = (/obj/machinery/button/door{id = "teledoor"; name = "MiniSat Teleport Shutters Control"; pixel_x = 0; pixel_y = 25; req_access_txt = "17;65"},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; on = 1; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "warndark"; dir = 4},/area/turret_protected/aisat_interior)
+"ctG" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/turret_protected/aisat_interior)
+"ctH" = (/obj/machinery/computer/security/telescreen/entertainment{pixel_x = -31},/obj/machinery/computer/monitor,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior)
+"ctI" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/turret_protected/aisat_interior)
+"ctJ" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/effect/landmark/start{name = "Cyborg"},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/turret_protected/aisat_interior)
+"ctK" = (/obj/machinery/door/airlock/hatch{name = "MiniSat Teleporter"; req_access_txt = "17;65"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior)
+"ctL" = (/obj/machinery/teleport/station,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/turret_protected/aisat_interior)
+"ctM" = (/obj/machinery/bluespace_beacon,/turf/simulated/floor/plasteel{icon_state = "warndark"; dir = 4},/area/turret_protected/aisat_interior)
+"ctN" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{icon_state = "intact"; dir = 10},/obj/structure/lattice,/turf/space,/area/space)
+"ctO" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/yellow/visible{icon_state = "intact"; dir = 5},/turf/space,/area/space)
+"ctP" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/turret_protected/aisat_interior)
+"ctQ" = (/obj/structure/table,/obj/machinery/microwave{pixel_x = 0; pixel_y = 4},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior)
"ctR" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_x = 0; pixel_y = 0},/turf/simulated/wall,/area/engine/engineering)
-"ctS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/aisat)
-"ctT" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "darkblue"},/area/aisat)
-"ctU" = (/obj/machinery/computer/security/telescreen{dir = 1; name = "MiniSat Monitor"; network = list("MiniSat"); pixel_x = 0; pixel_y = -30},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "darkblue"},/area/aisat)
-"ctV" = (/obj/machinery/turretid{control_area = "AI Satellite Antechamber"; enabled = 1; icon_state = "control_standby"; name = "Antechamber Turret Control"; pixel_x = 0; pixel_y = -24; req_access = list(65)},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "darkblue"},/area/aisat)
-"ctW" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/aisat)
-"ctX" = (/obj/structure/window/reinforced{dir = 4},/turf/space,/area/space)
-"ctY" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/wall,/area/aisat)
-"ctZ" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/light/small{dir = 4},/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 32},/turf/simulated/floor/plating,/area/aisat)
+"ctS" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/turret_protected/aisat_interior)
+"ctT" = (/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/turret_protected/aisat_interior)
+"ctU" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall,/area/turret_protected/aisat_interior)
+"ctV" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 4; name = "MiniSat Foyer APC"; pixel_x = 27; pixel_y = 0},/obj/structure/bed/chair,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior)
+"ctW" = (/obj/machinery/computer/teleporter,/turf/simulated/floor/plating,/area/turret_protected/aisat_interior)
+"ctX" = (/obj/machinery/camera{c_tag = "MiniSat Teleporter"; dir = 1; network = list("MiniSat"); pixel_x = 0; pixel_y = 0; start_active = 1},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel{icon_state = "warndark"; dir = 4},/area/turret_protected/aisat_interior)
+"ctY" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible,/obj/machinery/meter,/turf/simulated/wall/r_wall,/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"})
+"ctZ" = (/turf/simulated/wall/r_wall,/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"})
"cua" = (/turf/simulated/wall,/area/turret_protected/aisat_interior)
-"cub" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/hatch{name = "MiniSat Antechamber"; req_one_access_txt = "65"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior)
-"cuc" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall,/area/turret_protected/aisat_interior)
-"cud" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall,/area/turret_protected/aisat_interior)
-"cue" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/wall,/area/aisat)
-"cuf" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/aisat)
-"cug" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/light/small{dir = 8},/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = -32; pixel_y = 0},/turf/simulated/floor/plating,/area/aisat)
-"cuh" = (/obj/structure/window/reinforced{dir = 8},/turf/space,/area/space)
-"cui" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/obj/structure/grille,/turf/space,/area/space)
-"cuj" = (/obj/structure/lattice,/obj/structure/window/reinforced,/obj/structure/grille,/turf/space,/area/space)
-"cuk" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/light/small{dir = 1},/obj/item/device/radio/intercom{broadcasting = 0; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior)
-"cul" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior)
-"cum" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior)
-"cun" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"; dir = 8},/area/turret_protected/aisat_interior)
-"cuo" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior)
-"cup" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"},/area/turret_protected/aisat_interior)
-"cuq" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior)
-"cur" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/lattice,/obj/structure/grille,/turf/space,/area/space)
-"cus" = (/obj/structure/lattice,/obj/structure/grille,/obj/structure/window/reinforced,/turf/space,/area/space)
+"cub" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -29},/obj/machinery/light/small,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior)
+"cuc" = (/obj/structure/rack{dir = 1},/obj/machinery/status_display{pixel_y = -32},/obj/item/weapon/storage/box/donkpockets,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior)
+"cud" = (/obj/machinery/turretid{control_area = null; enabled = 1; icon_state = "control_standby"; name = "Antechamber Turret Control"; pixel_x = 0; pixel_y = -24; req_access = list(65)},/obj/machinery/light/small,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/camera/motion{c_tag = "MiniSat Foyer"; dir = 1; network = list("MiniSat")},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior)
+"cue" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior)
+"cuf" = (/turf/simulated/wall/r_wall,/area/turret_protected/AIsatextFP{name = "AI Satellite Service"})
+"cug" = (/obj/machinery/ai_status_display{pixel_y = -32},/obj/structure/table,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior)
+"cuh" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible,/obj/structure/rack,/obj/item/weapon/wrench,/obj/item/weapon/crowbar/red,/obj/item/clothing/head/welding,/turf/simulated/floor/plating,/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"})
+"cui" = (/obj/machinery/atmospherics/components/unary/tank/air,/turf/simulated/floor/plating,/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"})
+"cuj" = (/turf/simulated/wall/r_wall,/area/turret_protected/aisat_interior)
+"cuk" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall/r_wall,/area/turret_protected/aisat_interior)
+"cul" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/hatch{name = "MiniSat Antechamber"; req_one_access_txt = "65"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior)
+"cum" = (/obj/machinery/recharge_station,/turf/simulated/floor/plating,/area/turret_protected/AIsatextFP{name = "AI Satellite Service"})
+"cun" = (/obj/machinery/atmospherics/components/binary/pump{dir = 2; name = "Mix to MiniSat"},/turf/simulated/floor/plating{icon_plating = "warnplate"; icon_state = "warnplate"},/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"})
+"cuo" = (/obj/machinery/portable_atmospherics/canister/air,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plating{tag = "icon-warnplatecorner"; icon_state = "warnplatecorner"; dir = 2},/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"})
+"cup" = (/obj/structure/showcase{density = 0; desc = "An old, deactivated cyborg. Whilst once actively used to guard against intruders, it now simply intimidates them with its cold, steely gaze."; dir = 8; icon = 'icons/mob/robots.dmi'; icon_state = "robot_old"; name = "Cyborg Statue"; pixel_x = 9; pixel_y = 2},/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = 30},/turf/simulated/floor/plating{icon_plating = "warnplate"; icon_state = "warnplate"},/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"})
+"cuq" = (/obj/machinery/atmospherics/components/binary/pump{dir = 0; name = "Air Out"; on = 0},/turf/simulated/floor/plating{icon_plating = "warnplate"; icon_state = "warnplate"},/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"})
+"cur" = (/obj/structure/showcase{density = 0; desc = "An old, deactivated cyborg. Whilst once actively used to guard against intruders, it now simply intimidates them with its cold, steely gaze."; dir = 4; icon = 'icons/mob/robots.dmi'; icon_state = "robot_old"; name = "Cyborg Statue"; pixel_x = -9; pixel_y = 2},/turf/simulated/floor/plasteel{dir = 1; icon_state = "darkbluecorners"},/area/turret_protected/aisat_interior)
+"cus" = (/obj/structure/showcase{density = 0; desc = "An old, deactivated cyborg. Whilst once actively used to guard against intruders, it now simply intimidates them with its cold, steely gaze."; dir = 8; icon = 'icons/mob/robots.dmi'; icon_state = "robot_old"; name = "Cyborg Statue"; pixel_x = 9; pixel_y = 2},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"; dir = 4},/area/turret_protected/aisat_interior)
"cut" = (/obj/docking_port/stationary{dheight = 9; dir = 2; dwidth = 5; height = 22; id = "syndicate_sw"; name = "southwest of station"; turf_type = /turf/space; width = 18},/turf/space,/area/space)
-"cuu" = (/obj/machinery/door/window{dir = 1; name = "MiniSat Walkway Access"; req_access_txt = "13;65"},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor/plating,/area/aisat)
-"cuv" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/aisat)
-"cuw" = (/obj/structure/window/reinforced,/obj/machinery/door/window{base_state = "right"; dir = 1; icon_state = "right"; name = "MiniSat Walkway Access"; req_access_txt = "13;65"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/aisat)
-"cux" = (/obj/machinery/door/airlock/maintenance_hatch{req_access_txt = "65"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior)
+"cuu" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior)
+"cuv" = (/obj/structure/showcase{density = 0; desc = "An old, deactivated cyborg. Whilst once actively used to guard against intruders, it now simply intimidates them with its cold, steely gaze."; dir = 4; icon = 'icons/mob/robots.dmi'; icon_state = "robot_old"; name = "Cyborg Statue"; pixel_x = -9; pixel_y = 2},/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = 30},/turf/simulated/floor/plating{icon_plating = "warnplate"; icon_state = "warnplate"},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"})
+"cuw" = (/turf/simulated/floor/plating{icon_plating = "warnplate"; icon_state = "warnplate"},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"})
+"cux" = (/obj/structure/table,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/clothing/head/welding,/obj/item/stack/sheet/mineral/plasma{amount = 35; layer = 3.1},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plating{dir = 1; icon_state = "warnplatecorner"},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"})
"cuy" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior)
-"cuz" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior)
-"cuA" = (/obj/machinery/hologram/holopad,/obj/effect/landmark/start{name = "Cyborg"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior)
-"cuB" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"; dir = 8},/area/turret_protected/aisat_interior)
-"cuC" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"},/area/turret_protected/aisat_interior)
-"cuD" = (/obj/machinery/door/airlock/maintenance_hatch{req_access_txt = "65"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior)
-"cuE" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior)
-"cuF" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/aisat)
-"cuG" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/window{base_state = "right"; dir = 1; icon_state = "right"; name = "MiniSat Walkway Access"; req_access_txt = "13;65"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor/plating,/area/aisat)
-"cuH" = (/obj/structure/window/reinforced,/obj/machinery/door/window{dir = 1; name = "MiniSat Walkway Access"; req_access_txt = "13;65"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/aisat)
-"cuI" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/aisat)
-"cuJ" = (/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior)
-"cuK" = (/mob/living/simple_animal/bot/secbot/pingsky,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior)
-"cuL" = (/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"; dir = 8},/area/turret_protected/aisat_interior)
-"cuM" = (/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"},/area/turret_protected/aisat_interior)
-"cuN" = (/obj/machinery/power/apc{aidisabled = 0; cell_type = 2500; dir = 4; name = "MiniSat Antechamber APC"; pixel_x = 29; pixel_y = 0},/obj/structure/cable,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior)
-"cuO" = (/obj/structure/window/reinforced{dir = 1},/turf/space,/area/space)
-"cuP" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/aisat)
-"cuQ" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/space,/area/space)
-"cuR" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/light/small{dir = 4},/obj/machinery/camera{c_tag = "MiniSat Exterior North West"; dir = 8; network = list("MiniSat"); pixel_x = 0; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/aisat)
-"cuS" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/lattice,/turf/space,/area/space)
-"cuT" = (/obj/machinery/porta_turret{ai = 1; dir = 1},/obj/machinery/light/small,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior)
-"cuU" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/mob/living/simple_animal/bot/floorbot{on = 0},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior)
-"cuV" = (/turf/simulated/floor/plasteel{icon_state = "darkblue"},/area/turret_protected/aisat_interior)
-"cuW" = (/obj/machinery/camera/motion{c_tag = "MiniSat Antechamber"; dir = 1; network = list("MiniSat")},/obj/item/device/radio/intercom{broadcasting = 1; frequency = 1447; listening = 0; name = "Station Intercom (AI Private)"; pixel_y = -29},/turf/simulated/floor/plasteel{icon_state = "darkblue"},/area/turret_protected/aisat_interior)
-"cuX" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/mob/living/simple_animal/bot/cleanbot{on = 0},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior)
-"cuY" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/light/small{dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/camera{c_tag = "MiniSat Exterior North East"; dir = 4; network = list("MiniSat"); pixel_x = 0; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/aisat)
-"cuZ" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/turf/space,/area/space)
+"cuz" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"})
+"cuA" = (/obj/machinery/light/small{dir = 8},/obj/machinery/camera{c_tag = "MiniSat Atmospherics"; dir = 4; network = list("MiniSat"); pixel_x = 0; pixel_y = 0; start_active = 1},/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/obj/machinery/space_heater,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"})
+"cuB" = (/obj/machinery/light/small{dir = 4},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = 28; pixel_y = 0},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"; dir = 4},/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"})
+"cuC" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"})
+"cuD" = (/obj/machinery/light/small{dir = 8},/obj/machinery/camera{c_tag = "MiniSat Antechamber"; dir = 4; network = list("MiniSat"); pixel_x = 0; pixel_y = 0; start_active = 1},/obj/machinery/turretid{control_area = "AI Satellite Atmospherics"; enabled = 1; icon_state = "control_standby"; name = "Atmospherics Turret Control"; pixel_x = -27; pixel_y = 0; req_access = list(65)},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "darkbluecorners"},/area/turret_protected/aisat_interior)
+"cuE" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/turret_protected/aisat_interior)
+"cuF" = (/obj/machinery/light/small{dir = 4},/obj/machinery/turretid{control_area = "AI Satellite Service"; enabled = 1; icon_state = "control_standby"; name = "Service Bay Turret Control"; pixel_x = 27; pixel_y = 0; req_access = list(65)},/obj/machinery/atmospherics/pipe/manifold4w/scrubbers,/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"; dir = 4},/area/turret_protected/aisat_interior)
+"cuG" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior)
+"cuH" = (/obj/machinery/light/small{dir = 8},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = -28; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "darkbluecorners"},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"})
+"cuI" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; on = 1; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"})
+"cuJ" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"})
+"cuK" = (/obj/machinery/light/small{dir = 4},/obj/machinery/camera{c_tag = "MiniSat Service Bay"; dir = 8; network = list("MiniSat"); pixel_x = 0; pixel_y = 0; start_active = 1},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/rack,/obj/item/weapon/storage/toolbox/electrical{pixel_x = -3; pixel_y = 3},/obj/item/weapon/storage/toolbox/mechanical,/obj/item/device/multitool,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"})
+"cuL" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"})
+"cuM" = (/obj/machinery/power/apc{dir = 8; name = "MiniSat Atmospherics APC"; pixel_x = -27; pixel_y = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"})
+"cuN" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"})
+"cuO" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/ai_slipper{icon_state = "motion0"; uses = 10},/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"})
+"cuP" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior)
+"cuQ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/hatch{name = "MiniSat Atmospherics"; req_one_access_txt = "65"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior)
+"cuR" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior)
+"cuS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/ai_slipper{icon_state = "motion0"; uses = 10},/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,/mob/living/simple_animal/bot/secbot/pingsky,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior)
+"cuT" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"})
+"cuU" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/hatch{name = "MiniSat Service Bay"; req_one_access_txt = "65"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior)
+"cuV" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"})
+"cuW" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/ai_slipper{icon_state = "motion0"; uses = 10},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"})
+"cuX" = (/obj/machinery/power/apc{dir = 4; name = "MiniSat Service Bay APC"; pixel_x = 27; pixel_y = 0},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/port_gen/pacman,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"})
+"cuY" = (/obj/machinery/porta_turret{ai = 1; dir = 4},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"})
+"cuZ" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/mob/living/simple_animal/bot/floorbot,/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"},/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"})
"cva" = (/turf/simulated/wall/r_wall,/area/turret_protected/ai)
"cvb" = (/obj/machinery/ai_status_display,/turf/simulated/wall/r_wall,/area/turret_protected/ai)
-"cvc" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall/r_wall,/area/turret_protected/ai)
-"cvd" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/highsecurity{icon_state = "door_locked"; locked = 1; name = "AI Chamber"; req_access_txt = "16"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
-"cve" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/turret_protected/ai)
+"cvc" = (/obj/structure/sign/securearea{pixel_x = -32; pixel_y = 0},/obj/machinery/porta_turret{ai = 1; dir = 4},/obj/item/device/radio/intercom{broadcasting = 1; frequency = 1447; listening = 0; name = "Station Intercom (AI Private)"; pixel_y = -29},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"; dir = 8},/area/turret_protected/aisat_interior)
+"cvd" = (/obj/machinery/porta_turret{ai = 1; dir = 4},/obj/structure/sign/securearea{pixel_x = 32; pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"},/area/turret_protected/aisat_interior)
+"cve" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/turretid{control_area = "AI Satellite Hallway"; enabled = 1; icon_state = "control_standby"; name = "Chamber Hallway Turret Control"; pixel_x = 32; pixel_y = -24; req_access = list(65)},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior)
"cvf" = (/obj/machinery/status_display,/turf/simulated/wall/r_wall,/area/turret_protected/ai)
-"cvg" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall/r_wall,/area/turret_protected/ai)
-"cvh" = (/obj/structure/bed/chair/office/dark{dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
-"cvi" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen{pixel_x = 4; pixel_y = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
-"cvj" = (/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/ai)
-"cvk" = (/obj/machinery/camera{c_tag = "AI Chamber North"; dir = 2; network = list("MiniSat","RD"); pixel_x = 0; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/ai)
+"cvg" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/mob/living/simple_animal/bot/cleanbot,/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"; dir = 8},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"})
+"cvh" = (/obj/machinery/porta_turret{ai = 1; dir = 4},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"})
+"cvi" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"})
+"cvj" = (/turf/simulated/wall,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
+"cvk" = (/turf/simulated/wall/r_wall,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
"cvl" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
-"cvm" = (/obj/machinery/light_switch{pixel_y = 28},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/ai)
-"cvn" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/table/reinforced,/obj/item/weapon/folder/white,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
-"cvo" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
+"cvm" = (/obj/machinery/door/airlock/maintenance_hatch{name = "MiniSat Maintenance"; req_access_txt = "65"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
+"cvn" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall/r_wall,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
+"cvo" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/hatch{name = "MiniSat Chamber Hallway"; req_one_access_txt = "65"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
"cvp" = (/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
-"cvq" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
+"cvq" = (/obj/machinery/door/airlock/maintenance_hatch{name = "MiniSat Maintenance"; req_access_txt = "65"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
"cvr" = (/obj/machinery/porta_turret{ai = 1; dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
-"cvs" = (/obj/machinery/flasher{id = "AI"; pixel_x = 0; pixel_y = -21},/obj/machinery/ai_slipper{icon_state = "motion0"; uses = 10},/obj/machinery/light,/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
-"cvt" = (/obj/machinery/porta_turret{ai = 1; dir = 8},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
-"cvu" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/light/small{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/aisat)
+"cvs" = (/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
+"cvt" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
+"cvu" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
"cvv" = (/turf/simulated/wall,/area/turret_protected/ai)
-"cvw" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/light/small{dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/aisat)
+"cvw" = (/turf/simulated/floor/bluegrid,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
"cvx" = (/obj/effect/landmark{name = "tripai"},/obj/item/device/radio/intercom{anyai = 1; freerange = 1; listening = 0; name = "Custom Channel"; pixel_x = 0; pixel_y = 28},/obj/item/device/radio/intercom{broadcasting = 0; freerange = 1; listening = 1; name = "Common Channel"; pixel_x = -27; pixel_y = 5},/obj/item/device/radio/intercom{anyai = 1; broadcasting = 0; freerange = 1; frequency = 1447; name = "Private Channel"; pixel_x = 0; pixel_y = -25},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
-"cvy" = (/obj/machinery/ai_slipper{icon_state = "motion0"; uses = 10},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
-"cvz" = (/obj/item/device/radio/intercom{broadcasting = 0; freerange = 1; listening = 1; name = "Common Channel"; pixel_x = -27; pixel_y = 5},/obj/item/device/radio/intercom{anyai = 1; freerange = 1; listening = 0; name = "Custom Channel"; pixel_x = 0; pixel_y = 27},/obj/item/device/radio/intercom{anyai = 1; broadcasting = 0; freerange = 1; frequency = 1447; name = "Private Channel"; pixel_x = 27; pixel_y = 5},/obj/effect/landmark/start{name = "AI"},/obj/machinery/requests_console{department = "AI"; departmentType = 5; pixel_x = 32; pixel_y = 32},/obj/machinery/newscaster/security_unit{pixel_x = -32; pixel_y = 32},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"cvy" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
+"cvz" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
"cvA" = (/obj/effect/landmark{name = "tripai"},/obj/item/device/radio/intercom{anyai = 1; freerange = 1; listening = 0; name = "Custom Channel"; pixel_x = 0; pixel_y = 28},/obj/item/device/radio/intercom{broadcasting = 0; freerange = 1; listening = 1; name = "Common Channel"; pixel_x = 27; pixel_y = 5},/obj/item/device/radio/intercom{anyai = 1; broadcasting = 0; freerange = 1; frequency = 1447; name = "Private Channel"; pixel_x = 0; pixel_y = -25},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
-"cvB" = (/obj/machinery/door/window{name = "AI Core Door"; req_access_txt = "16"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
-"cvC" = (/obj/machinery/power/apc{cell_type = 5000; dir = 1; name = "AI Chamber APC"; pixel_y = 24},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
-"cvD" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/turretid{name = "AI Chamber turret control"; pixel_x = 5; pixel_y = 24},/obj/machinery/flasher{id = "AI"; pixel_x = -6; pixel_y = 24},/obj/machinery/camera/motion{c_tag = "AI Chamber South"; dir = 2; network = list("RD","MiniSat")},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
-"cvE" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
-"cvF" = (/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
-"cvG" = (/obj/machinery/hologram/holopad,/obj/machinery/power/terminal,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
-"cvH" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
-"cvI" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
-"cvJ" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/light/small{dir = 4},/obj/machinery/camera{c_tag = "MiniSat Exterior South West"; dir = 8; network = list("MiniSat"); pixel_x = 0; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/aisat)
-"cvK" = (/obj/machinery/power/smes{charge = 5e+006},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
-"cvL" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/wall/r_wall,/area/turret_protected/ai)
-"cvM" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/wall/r_wall,/area/turret_protected/ai)
-"cvN" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/light/small{dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/camera{c_tag = "MiniSat Exterior South East"; dir = 4; network = list("MiniSat"); pixel_x = 0; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/aisat)
+"cvB" = (/obj/structure/rack,/obj/item/weapon/crowbar/red,/obj/item/weapon/wrench,/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
+"cvC" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
+"cvD" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
+"cvE" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
+"cvF" = (/obj/structure/lattice,/obj/machinery/camera{c_tag = "MiniSat External NorthWest"; dir = 8; network = list("MiniSat"); pixel_x = 0; pixel_y = 0; start_active = 1},/turf/space,/area/space)
+"cvG" = (/obj/machinery/porta_turret{ai = 1; dir = 4; installation = /obj/item/weapon/gun/energy/gun},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/bluegrid,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
+"cvH" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
+"cvI" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
+"cvJ" = (/obj/machinery/porta_turret{ai = 1; dir = 4; installation = /obj/item/weapon/gun/energy/gun},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
+"cvK" = (/obj/structure/lattice,/obj/machinery/camera{c_tag = "MiniSat External NorthEast"; dir = 4; network = list("MiniSat"); pixel_x = 0; pixel_y = 0; start_active = 1},/turf/space,/area/space)
+"cvL" = (/obj/structure/sign/securearea{pixel_x = 32; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
+"cvM" = (/obj/machinery/camera/motion{c_tag = "MiniSat Core Hallway"; dir = 4; network = list("MiniSat")},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/bluegrid,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
+"cvN" = (/obj/structure/sign/securearea{pixel_x = -32; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
"cvO" = (/obj/docking_port/stationary{dheight = 9; dir = 2; dwidth = 5; height = 22; id = "syndicate_se"; name = "southeast of station"; turf_type = /turf/space; width = 18},/turf/space,/area/space)
-"cvP" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/wall/r_wall,/area/turret_protected/ai)
-"cvQ" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/wall/r_wall,/area/turret_protected/ai)
-"cvR" = (/obj/structure/rack,/obj/item/weapon/storage/toolbox/electrical{pixel_x = -3; pixel_y = 3},/obj/item/weapon/storage/toolbox/mechanical,/obj/item/device/multitool,/turf/simulated/floor/plating,/area/ai_monitored/storage/secure)
-"cvS" = (/turf/simulated/wall,/area/ai_monitored/storage/secure)
-"cvT" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/wall/r_wall,/area/ai_monitored/storage/secure)
-"cvU" = (/obj/machinery/atmospherics/components/unary/tank/air,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/ai_monitored/storage/secure)
-"cvV" = (/obj/structure/rack,/obj/item/weapon/crowbar/red,/obj/item/weapon/wrench,/obj/item/clothing/head/welding,/turf/simulated/floor/plating,/area/ai_monitored/storage/secure)
-"cvW" = (/obj/machinery/recharge_station,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/ai_monitored/storage/secure)
-"cvX" = (/obj/structure/window/reinforced,/turf/space,/area/space)
-"cvY" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/space,/area/space)
-"cvZ" = (/obj/structure/window/reinforced,/obj/structure/lattice,/turf/space,/area/space)
-"cwa" = (/obj/machinery/power/apc{dir = 8; name = "MiniSat Maint APC"; pixel_x = -24},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plasteel{icon_state = "warndark"; dir = 1},/area/ai_monitored/storage/secure)
-"cwb" = (/obj/machinery/power/smes{charge = 5e+006},/obj/structure/cable,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating{icon_state = "warnplate"},/area/ai_monitored/storage/secure)
-"cwc" = (/obj/machinery/atmospherics/components/binary/pump{dir = 0; name = "Air Out"; on = 1},/turf/simulated/floor/plasteel{icon_state = "warndark"; dir = 5},/area/ai_monitored/storage/secure)
-"cwd" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = 28; pixel_y = 0},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel{icon_state = "warndark"; dir = 1},/area/ai_monitored/storage/secure)
-"cwe" = (/obj/machinery/power/terminal{dir = 8},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plasteel{icon_state = "warndark"; dir = 9},/area/ai_monitored/storage/secure)
-"cwf" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/space,/area/space)
-"cwg" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plating,/area/aisat)
-"cwh" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/aisat)
-"cwi" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 1},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure)
-"cwj" = (/obj/machinery/door/airlock/maintenance_hatch{req_access_txt = "65"},/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure)
-"cwk" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure)
-"cwl" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 4; initialize_directions = 11},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure)
-"cwm" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure)
-"cwn" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure)
-"cwo" = (/obj/machinery/door/airlock/maintenance_hatch{req_access_txt = "65"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure)
-"cwp" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plating,/area/aisat)
-"cwq" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/turf/space,/area/space)
-"cwr" = (/obj/machinery/atmospherics/pipe/simple/general/visible,/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/obj/machinery/camera/motion{c_tag = "MiniSat Maintenance"; dir = 4; network = list("MiniSat")},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure)
-"cws" = (/obj/structure/bed/chair,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure)
-"cwt" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure)
-"cwu" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure)
-"cwv" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure)
-"cww" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 8},/turf/simulated/floor/plating/airless,/area/space)
-"cwx" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall,/area/ai_monitored/storage/secure)
+"cvP" = (/obj/machinery/door/airlock/maintenance_hatch{name = "MiniSat Maintenance"; req_access_txt = "65"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
+"cvQ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
+"cvR" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
+"cvS" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
+"cvT" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
+"cvU" = (/obj/machinery/door/airlock/maintenance_hatch{name = "MiniSat Maintenance"; req_access_txt = "65"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
+"cvV" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/bluegrid,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
+"cvW" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
+"cvX" = (/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
+"cvY" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
+"cvZ" = (/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/turf/simulated/floor/bluegrid,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
+"cwa" = (/obj/structure/cable,/obj/machinery/power/apc{dir = 4; name = "MiniSat Chamber Hallway APC"; pixel_x = 27; pixel_y = 0},/turf/simulated/floor/bluegrid,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
+"cwb" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
+"cwc" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
+"cwd" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/item/device/radio/intercom{broadcasting = 1; frequency = 1447; listening = 0; name = "Station Intercom (AI Private)"; pixel_x = -28; pixel_y = -29},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
+"cwe" = (/obj/structure/sign/securearea,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall/r_wall,/area/turret_protected/ai)
+"cwf" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/hatch{name = "MiniSat Chamber Observation"; req_one_access_txt = "65"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
+"cwg" = (/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
+"cwh" = (/obj/machinery/light/small{dir = 1},/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen{pixel_x = 4; pixel_y = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
+"cwi" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
+"cwj" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
+"cwk" = (/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; on = 1; scrub_Toxins = 0},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
+"cwl" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
+"cwm" = (/obj/structure/table/reinforced,/obj/item/weapon/folder/white,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
+"cwn" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
+"cwo" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
+"cwp" = (/obj/structure/bed/chair/office/dark,/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
+"cwq" = (/obj/structure/grille,/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
+"cwr" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/turret_protected/ai)
+"cws" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/turret_protected/ai)
+"cwt" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_command{name = "AI Core"; req_access_txt = "65"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
+"cwu" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/ai_slipper{icon_state = "motion0"; uses = 10},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
+"cwv" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/status_display{pixel_x = -32},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"cww" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
+"cwx" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
"cwy" = (/obj/docking_port/stationary{dheight = 9; dir = 2; dwidth = 5; height = 22; id = "syndicate_s"; name = "south of station"; turf_type = /turf/space; width = 18},/turf/space,/area/space)
-"cwz" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 1; name = "Auxiliary MiniSat Distribution Port"},/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure)
-"cwA" = (/obj/machinery/computer/station_alert,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure)
-"cwB" = (/obj/structure/table,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure)
-"cwC" = (/obj/machinery/power/port_gen/pacman,/obj/structure/cable,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure)
-"cwD" = (/obj/structure/table,/obj/item/stack/sheet/mineral/plasma{layer = 2.9},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure)
-"cwE" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/ai_monitored/storage/secure)
+"cwz" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
+"cwA" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
+"cwB" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/ai_status_display{pixel_x = 32},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"cwC" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
+"cwD" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/turretid{name = "AI Chamber turret control"; pixel_x = 5; pixel_y = -24},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"cwE" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{cell_type = 5000; dir = 2; name = "AI Chamber APC"; pixel_y = -24},/obj/machinery/flasher{id = "AI"; pixel_x = -11; pixel_y = -24},/obj/machinery/camera/motion{c_tag = "MiniSat AI Chamber North"; dir = 1; network = list("MiniSat")},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
"cwF" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape)
"cwG" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 3},/obj/item/weapon/crowbar,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape)
"cwH" = (/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/turf/simulated/wall/shuttle/interior{icon_state = "swall_f5"},/area/shuttle/escape)
@@ -6691,16 +6691,15 @@
"cyI" = (/obj/item/weapon/stock_parts/cell{charge = 100; maxcharge = 15000},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/abandoned)
"cyJ" = (/obj/structure/rack,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/abandoned)
"cyK" = (/turf/simulated/wall/shuttle{icon_state = "swall_f14"},/area/shuttle/abandoned)
-"cyL" = (/obj/structure/cable,/obj/structure/computerframe{anchored = 1},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/abandoned)
"cyM" = (/turf/simulated/wall/shuttle{icon_state = "swall_f11"},/area/shuttle/abandoned)
"cyN" = (/obj/machinery/conveyor{dir = 4; id = "QMLoad2"},/obj/machinery/door/poddoor{id = "QMLoaddoor2"; name = "supply dock loading door"},/turf/simulated/floor/plating,/area/shuttle/supply)
"cyO" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/abandoned)
"cyP" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/abandoned)
"cyQ" = (/obj/machinery/door/airlock/shuttle{name = "Supply Shuttle Airlock"; req_access_txt = "31"},/turf/simulated/floor/plating,/area/shuttle/supply)
-"cyR" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plating,/area/shuttle/abandoned)
+"cyR" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/shuttle/abandoned)
"cyS" = (/obj/machinery/button/door{dir = 2; id = "QMLoaddoor2"; name = "Loading Doors"; pixel_x = 24; pixel_y = 8},/obj/machinery/button/door{id = "QMLoaddoor"; name = "Loading Doors"; pixel_x = 24; pixel_y = -8},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/supply)
"cyT" = (/obj/machinery/door/airlock/shuttle{name = "Supply Shuttle Airlock"; req_access_txt = "31"},/obj/docking_port/mobile/supply{dwidth = 5; width = 12},/obj/docking_port/stationary{dir = 8; dwidth = 5; height = 7; id = "supply_home"; name = "supply bay"; width = 12},/turf/simulated/floor/plating,/area/shuttle/supply)
-"cyU" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/abandoned)
+"cyU" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/abandoned)
"cyV" = (/obj/machinery/door/window,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor5"},/area/shuttle/abandoned)
"cyW" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor5"},/area/shuttle/abandoned)
"cyX" = (/obj/structure/table,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/abandoned)
@@ -6736,7 +6735,7 @@
"czB" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 6; pixel_y = -5},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/abandoned)
"czC" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 8},/obj/effect/decal/remains/human,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/abandoned)
"czD" = (/turf/simulated/floor/plating/airless{dir = 6; icon_state = "warnplate"},/area/space/nearstation)
-"czE" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/engine/engineering)
+"czE" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/engine/engineering)
"czF" = (/obj/machinery/camera/emp_proof{c_tag = "Singularity North East"; dir = 2; network = list("Singularity")},/obj/machinery/power/grounding_rod,/turf/simulated/floor/plating/airless,/area/engine/engineering)
"czG" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"czH" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
@@ -6748,7 +6747,7 @@
"czN" = (/obj/docking_port/stationary/random{dir = 4; id = "pod_asteroid4"; name = "asteroid"},/turf/space,/area/space)
"czO" = (/obj/structure/flora/tree/pine/xmas,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar)
"czP" = (/obj/structure/flora/tree/festivus,/turf/simulated/floor/plasteel{icon_state = "warnwhite"; dir = 5},/area/crew_quarters/hor)
-"czQ" = (/obj/structure/grille,/obj/structure/window/fulltile/reinforced,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
+"czQ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"czR" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"czS" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plating{icon_state = "platingdmg3"},/area/maintenance/asmaint2)
"czT" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/aft)
@@ -6801,6 +6800,21 @@
"cAO" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating,/area/engine/engineering)
"cAP" = (/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engine/engineering)
"cAQ" = (/obj/structure/bed/chair,/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating,/area/maintenance/aft)
+"cAR" = (/obj/machinery/door/window{dir = 1; name = "AI Core Door"; req_access_txt = "16"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"cAS" = (/obj/effect/landmark/start{name = "AI"},/obj/item/device/radio/intercom{broadcasting = 0; freerange = 1; listening = 1; name = "Common Channel"; pixel_x = -27; pixel_y = -9},/obj/item/device/radio/intercom{anyai = 1; freerange = 1; listening = 0; name = "Custom Channel"; pixel_x = 0; pixel_y = -31},/obj/item/device/radio/intercom{anyai = 1; broadcasting = 0; freerange = 1; frequency = 1447; name = "Private Channel"; pixel_x = 27; pixel_y = -9},/obj/machinery/newscaster/security_unit{pixel_x = -28; pixel_y = -28},/obj/machinery/requests_console{department = "AI"; departmentType = 5; pixel_x = 28; pixel_y = -28},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"cAT" = (/obj/machinery/ai_slipper{icon_state = "motion0"; uses = 10},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
+"cAU" = (/obj/structure/lattice,/obj/machinery/camera{c_tag = "MiniSat External SouthWest"; dir = 8; network = list("MiniSat"); pixel_x = 0; pixel_y = 0; start_active = 1},/turf/space,/area/space)
+"cAV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/showcase{density = 0; desc = "An old, deactivated cyborg. Whilst once actively used to guard against intruders, it now simply intimidates them with its cold, steely gaze."; dir = 8; icon = 'icons/mob/robots.dmi'; icon_state = "robot_old"; name = "Cyborg Statue"; pixel_x = 9; pixel_y = 2},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
+"cAW" = (/obj/structure/showcase{density = 0; desc = "An old, deactivated cyborg. Whilst once actively used to guard against intruders, it now simply intimidates them with its cold, steely gaze."; dir = 4; icon = 'icons/mob/robots.dmi'; icon_state = "robot_old"; name = "Cyborg Statue"; pixel_x = -9; pixel_y = 2},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
+"cAX" = (/obj/structure/lattice,/obj/machinery/camera{c_tag = "MiniSat External SouthEast"; dir = 4; network = list("MiniSat"); pixel_x = 0; pixel_y = 0; start_active = 1},/turf/space,/area/space)
+"cAY" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/wall,/area/turret_protected/ai)
+"cAZ" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
+"cBa" = (/obj/machinery/power/smes{charge = 5e+006},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"cBb" = (/obj/machinery/camera/motion{c_tag = "MiniSat AI Chamber South"; dir = 2; network = list("MiniSat")},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"cBc" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/machinery/ai_slipper{icon_state = "motion0"; uses = 10},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"cBd" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
+"cBe" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
+"cBf" = (/obj/machinery/camera{c_tag = "MiniSat External South"; dir = 2; network = list("MiniSat"); pixel_x = 0; pixel_y = 0; start_active = 1},/turf/space,/area/space)
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -6939,7 +6953,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacymcyocyncybaaaaafcyacypcyhcyicyicyicyicyicyicyicyqcyrcyccybaafaaabeOblSbjacAIbkAblVcAJbeOaaaaaaaaacytcyscyscyscyscyscyuaaaaaablWblYbkjbkpbknbktbjrbjrbjrbjrbjrbjrbkubmgbmfboUbkwbkxbfQbkHbfmbmkaZKbmlaZKbmnbmmaLYbjzbmpbmobmobmobmobmqbmsbmraafaaabgObkIbgNbgNbgNbmwbijaaaaafbmxbmzbmybmBbmAbmCbmxbmDbmxbmEaJqbAibfFbmFbkKbkLbmGbmIbfFbmJbliblkbmKbmLbhhbmMbfKbmObmNbkObfKbmRbkPbkRbkQblabkUblablgbKHblobKHbKHbKHblqbdPbnbbiIblsblxbltblDblyblGblFblFblMblNbnjbfVbvxblXbnmbgcbnnbnpbnoblZbiWbmabgcbmdbmcbmebnsbnsbnsbnsbnsbnsbnuaafaaaaafaaaaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacymcyocyvcyncybcyacypcywcylcyxcyicyicyicyicyicyicyicyzcyycyAaafaaabeObnvbjabjabjabeObeObeOaaaaaaaaacyCcyBcyBcyBcyBcyBcyCaaaaaablWbnwbqmbmjbmhbmhbmhbmhbmhbmhbmhbmhbmhbmHbmtbmPbnEbmQbnGbfmbnIbbRbnJbnLbnKbfobnMbnNbjzbjzbmrbnPbnObnRbnQbnSbmraaaaaabgObnTbnVbnUbnVbnWbijaaaaaabmxbnYbnXbnZbmxboabmxbmDbmxbmEaJqbmSbfFbobbkKbmTbipbodbfFbofboebohbogboibhhbojbfKbhibokbmUbfKbfLbmVbfLbmWbmYbmXbmZbmZbmZbmZbmZbmZbmZbnabncbopblwblvbnebndbotbosboubouboubnibiLbovboxbozbowboyboBboAbngbnfbnkbnhbnlbgcbnrbnqbnxboFboFboFboFboFboHbhGbkybkybkyaaaaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacymcyocyvcyvcyrcygcywcyicylcyxcyicyicyicyicyicyDcypcyccygcyEcybaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyCcyBcyBcyBcyBcyBcyCboIblWblWboJbqmbjrbjrboKboKboKboKbjrbjrbjrbjrbkJboNbuFbnybnAbnzboSboRboTbbRbbRbnKboWboVboYboXbpaboZbpcbpbbpebpdbpfbmraafaaabgObpgbphbphbphbpibijaaaaafbmxbpkbpjbplbmxbpmbmxbmDbmxbpnaJqbmSbfFbnBbkKbnDbnCbptbfFbpublibiubogbpwbpvbofbofbpybpxbnHbnFbolbocboobomboqbpEbpHbpGbpJbpIbpLbpKbonbPvboCborboEboDboLboGbfVbpRbouboubpTbnibiLbpUbpWboMboObpXboBbpZboQboPbpobiWbpqbppbprbgcbqebqebqebqebqebqebiYbhGbqhbqgbkybkyaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyFcyccyGcyvcyHcyicyIcyicyrcyKcyJcyicyicyicyDcypcywcyLcyLcyMcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyCcyBcyBcyBcyBcyBcyNbqibqjbqibqlbpsbmbbmbbpzbjrbjrbjrbjrbjrbqnaZEaZEbqobbRbtvbpBbpAbfmbqsbbRbqtbbRbqubmEbnMbqwbqvbqybqxbqAbqzbqBbpdbqCbmraaaaaabgObqDbqFbqEbqFbqGbijaaaaaabqHbqJbqIbqHbqHbqHbqHbqKbqHbqLaLYbpCbfFbfFbpDbpMbpFbfFbfFbqPbpNbpObhhbhhbhhbhhbhhbwzbpPbqQbqQbqQbqWbqQbIqboqbpEbrabqZbrcbrbbrebrdbonbpQbpVbpSbpYbpYbqbbqabfVbqcbiLbiLbqdbnibiLbrqbrsbzEbhUbrtboBboBbrxbqfbqkbrxboBbgcbgcbgcbrAbrzbrCbrBbrDbqebrFbrEbrHbrGbrIbkyaaaaafaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyFcyccyGcyvcyHcyicyIcyicyrcyKcyJcyicyicyicyDcypcywczyczycyMcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyCcyBcyBcyBcyBcyBcyNbqibqjbqibqlbpsbmbbmbbpzbjrbjrbjrbjrbjrbqnaZEaZEbqobbRbtvbpBbpAbfmbqsbbRbqtbbRbqubmEbnMbqwbqvbqybqxbqAbqzbqBbpdbqCbmraaaaaabgObqDbqFbqEbqFbqGbijaaaaaabqHbqJbqIbqHbqHbqHbqHbqKbqHbqLaLYbpCbfFbfFbpDbpMbpFbfFbfFbqPbpNbpObhhbhhbhhbhhbhhbwzbpPbqQbqQbqQbqWbqQbIqboqbpEbrabqZbrcbrbbrebrdbonbpQbpVbpSbpYbpYbqbbqabfVbqcbiLbiLbqdbnibiLbrqbrsbzEbhUbrtboBboBbrxbqfbqkbrxboBbgcbgcbgcbrAbrzbrCbrBbrDbqebrFbrEbrHbrGbrIbkyaaaaafaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacypcyccyhcyicyicyicyMcygcyccyccyecyEcypcywcyicyOcyOcyPcylaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyCcyBcyBcyBcyBcyBcyQbrJbrKbrJbrLbjrbjrbjrboKboKboKboKbjrbjrbrNbrMaZEbrObbRbtvbpBbqpbfmbqsbbRbbRbbRbqubmEbrTaJqbqvbqybrUbrWbqqbqqbqrbrZbmraafaafbsbbsabsdbscbsfbsebsgaafaafbshbsjbsibslbskbsnbsmbsobqHbspaJqbqNbqMbqRbqObqTbqSbqVbqUbsybqXbqYbsxbsxbsxbsxbsxbrgbrfbsxbsxbsxbrhbhgbribrjbpEbsKbrkbsLbsLbsNbpKbonbPvbdPbsObsQbsPbsRbsRbfVbsSbCIbsTboxbrlbiLbsWboxbsXbsZbrmbtbbtabrobrnbrpbtebthbrrbtjbrubrwbrvbrvbrvbrPbrybrQbhGbtqbtpcAKbkyaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyEcygcywcyicylcyicyicyicyicyicyicyicyicyMcyhcyicyicyicyicyicyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyCcyBcyBcyBcyBcyScyCboIblWblWbtrbjrbjrbjrbjrbjrbjrbjrbjrbjrbrNbtsaZEbttbtubjvbrRbkMbkNbkMbuIbbRbtybnKbtzbrTaJqbqvbqybmrbtBbrSbtDbtCbtEbmraaaaaaaafbgObtGbtFbtGbijaafaaaaaabshbtIbtHbtKbtJbtLbtLbtNbtMbtObAkaNrbrVbrXbLXbFDbrYbEebsqbEebEebssbsrbtXbtVbtVbtVbtZbhhbhhbhhbstbuabuabsubpEbpEbpEbsvbugbufbrebpKbonbdObdPbuhbuhbuhbuhbuhbfVboxboxboxboxbujbswbujboxbszcdXbsAbuobuobuobsCbsDbupbusbsEbuubsFbuwbuvbuvbsGbsIbsHbsMbsJbtqbtpbtpbkyaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyEcyccyccyccyccyccyccyccyEcybaaacyacypcywcyicyicyicylcyicyicyDcyccyccyecyKcyicyicylcyicyicyicyicyicyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyCcyBcyBcyBcyBcyBcyTbrJbrKbrJbnwbuBbjrbjrbuCbjrbuBbjrbjrbjrbrNbuDaZEbuEbbRbtvbsVbbRbfmbbRbbRbbRbuJbnKbtzbrTaYlbqvbuKbmrbuMbsYbuObuNbnSbmraaaaaaaafbuPbuQbphbuSbuRaafaaaaaabshbtdbtcbuWbuVbuYbuXbuZbqHbvaaJqaJqbofbofbtfbJGbwzbBLbvjbvhbtgbtgbvhbvjbvhbvjbvhbvjbvhbvjbfJbfJbuabvnbsLbtkbtibpEbsvbtlbvsbvvbvubonbtmbtobtnbtxbtwbuobuobtAbuobuobtPbtSbtQbtUbvEbuobtWceXbvHbvJbvJbvJbvKbvKbvKbvKbvKbvMbtYbvObvNbvObvPbvObqebuzbhGbvQbrGbvRbkyaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -6969,72 +6983,72 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoVapQbVwbVwbVwbVwbVwbXvbHEbXvbHEbXwbXxcAMbXybHEbCqbHEbLvaoVaoVapQaoVaoVapQaoVbESbVHbVIbWBbXAbXzbXCbXBbXDbWBbXFbXEbODbOCbOMbVJbVMbCqbSAbLZbQgbXJbXKbLKbXMbXLbWQbOObXPbXObWQbXQbSIbXRbMKbXSbWabOdbVZbXTbXUbTTbXVbPhbRKbPjbXXbXWbXYbOhbVubzsbWebzsbBRbXZbPvbNcbOPbYabYdbYcbWibYabYebWjbYebPubPwbLTbDbbEmbEmbEmbYgbYfbRZbUfbMibUgbYhbRUbRUbUibDbbQZbYjbYicaZbQZbQZbYkbYmbZdbPsbPbbPLbPFbPMbUpbUpbTqbTrbkybYrbkybYsbkyaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoVaoVaoVaoVaoVapQapQbLvbLvbLvbYubYtbYwbYvbYxbHEbYybHEbLvaoVaoVaoVaoVaoVaoVaoVbESbVHbVIbYzbYBbYAbXCbYCbYzbYzbXFbYDbQbbPQbQdbVJbVMbCqbSAbLZbYIbYHbYHbYJbYLbYKbYNbQebYPbQqbWQbOdbSIbYQbYRbXSbYSbOdbVZbXTbUSbURbYTbQyapQbQAbYVbYUbYWbOhbVubzsbWebzsbHZbHZbPvbNcbNdbYXbYYbNdbYZbNdbNdbNdbNdbNdbNcbLTbDbbJNbJNbJNbJNbVibZabTcbZbbVibJNbJNbJNbJNbDbbTlbZcbTlcbabTlbQZbYkbYmbYlbYobQGbQIbWrbZhbQZbUpbTqbTrbkybtpbtpbtpbZiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaafaafaafbLvbZkbZjbZjbZlbWzbLubCqbLvbLvaoVcceaoVaoVaoVaoVaoVbGpbVHbVIbYzbYzbZnbZpbZobYzbZqbZsbZrbZvbQKbQPbVJbVMbCqbZxbQQbDGbYHbZzbRicewbRjbRmbRkbRSbRobWQbZFbZGbXRbMKbXSbZHbOdbZIbXTbUSbZJbZKbRIbVvbPjbZLbXWbXWbOhbVubPnbWebZMbzsbZNbPvbZObTZbTZbZPbNdbZRbZQbZSbzsbZUbZTbLSbLTbDbbRTbRUbRUbZVbRVbMibRXbRZbZWbZXbEmbEmbEmbDbbZYbTlbTlbTlbTlbQZbZZbZZcaacabbPNbPNbWrbPNbQZbPNbTqbTrbkycadcaccaebZiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaSaaSaaSaaSaaSaaSaaSaaSabaaaSaaSaaSaaSaaSaaaaaabCqbCqbCqbCqbCqbCqbYybCqbCqbCqbCqapQaoVaoVapQaaHcjnaoVaoVaoVbGpbVHbVIcagcaicahcakcajcamcalcaocanbSdbYFbStbVJcatcasbSRbSwbHPbYHcawbZybThbTgbTjbTibTHbTGcaDbPccaEbMKbMKbMKcaFbOdcaHcaGbUSbURbOdbQyapQbOhbOhbOhbOhbOhbVubPncaJcaIbzscaKcaMcaLbUXcaNcaObzscaQcaPcaRbzscaSbMbcaUcaTbDbbEmbSZbEmcaVbTabMibTcbMibTdcaWbEmbSZbEmbDbcaXbTlcaYcbccbbckacjWckNckMcbdbPNbWrbWrcbebQZbDhcbfcbgbkycbicbhbtpbZiaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaafaaaaafaaaaafaaaacyaaaaafaaaaafaaaaaSaafaafbCqbHEbHEbHEbHEbHEbHEbHEbHEbLubLvaoVaoVaoVaaHcjocmXaaHaaHapQbGpbVHbVIcblbYzbWBbWBbWBbYzcbmcbocbnbXGbTIbUcbVJbCqbCqbUlcbrcbtbYHbYHcbucdtbUmcaAcaAcaAcaAbWQbOdcbAcbzcbCcbBbQtcbDcbFcbEbXUbTTcbGbPhbRKbPjcbIcbHcbHbOhbVubPnbAwcbJbzsbzscbLcbKbzscbMcbNbzsbzscbObzsbzscbNbFrcbQcbPbDbbEmbEmbEmcbScbRbRZcbTbMibUgcbUbRUbRUbUibDbbTlbTlcbVbTlbTlbQZbZZbZZcbWcbXbPNcbZcbYcbYbQZbqgcbfbTrbkybkybkybtpbkyaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaccacccccbaaaccacccccbaaaccacccccbaaaaaSaaaaaabLvccdbHEbCqbCqbCqbTzbCqbCqbCqbCqaoVaoVaoVcnBaaHaaHapQaoVaoVbGpbVHbVIbYzccgccfbWBcchbYzbYzbXFccibOCbUybVbbUCbVdbVcbVfbVebVhbVgbVobVmbVqbVpcerbVrbWhbVKccwccvccyccxbRAbRAbRDbTOcczbTUbRFbURccAbQyapQbQAccCccBccDbOhbVubzsbzsbWeccFccEcbLccGbzscbMccIccHccKccJccLccHccNccMbhGccObDbbDbbDbbDbbDbbDbbMiccPcfybDbbDbbDbbDbbDbbDbbQZbQZbQZbQZbQZbQZccRccRccSccTbQZbQZbQZbQZbQZbkyccUbTrbkyccWccVbtpbkyaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafccaccXccbaaaccaccXccbaaaccaccXccbaafaafaaaaaabLvccYccZbCqbSqbHEbHEcdabQacdbbCqaoVaoVaoVaoVapQaoVaoVaoVaoVbESbVHbVIbWBcddcdcbWBcdecdfbWBbXFcdgbWtbWsbWvbWubWKbWJbXmbXkbXobXnbXqbXpbXIbXHccsbXNcdtbYbccwcdwbOdcbAbTObTPcdycdxcdAcdzbMWcdBcdCbRIbVvbPjcdDcbHcbHbOhbVubzsbAwcdEcdGcdFcdIcdHbzscdJcdLcdKccMcdMccMbFrbHdcdNbhGcdObDbcfrcgicgicglcgkbMiccPcgnbDbaafaafaafaafbkycdQbNBblQcdRcdRbQZcdScdSccSbScbQZcmobtpcAKbtpbDhccUbXubkycdVbtpbtpbkybkybkyaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaccaccXccbaafccaccXccbaafccaccXccbaaaaafaafaafbCqbLvbCqbCqbCqcdWcdYcgFcpYbSsbCqaoVaoVaoVaoVapQaoVaoVapQaoVbESbVHbVIbWBceacdZceccebcedbWBcefceecehcegceibVJbYpbYnbYEbYqbYMbYGbZebYObZgbZfbZubZtbZAbZwceycexbOdcbAcezbOdbOdbOdcezcezcezbURceBceAapQbOhbOhbOhbOhbOhbVubzscaKceCceEceDceGceFbzsbzsceIceHceJbLSceLceKbzsbzsbhGcdObDbchochqchqchschrchuchtcjBbDbaafaaaaaaaafbkybtpceMbrGceOceNbQZcePcePceQbScbQZbkybkyceSceRbDhccUbTrbtpbtpbtpceTblPceUblPaagaagaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafccaccXccbaaaccaccXccbaaaccaccXccbaafaafaaaaaaaafaafbCqceVbCqceWceYbCqbTzbCqbCqaoVapQaoVaoVapQaoVaoVapQaoVbESbVHbVIbVIbVIbVIbVIbVIbVIbVIbVJbVJbVJbVJbVJbVJbCqbZBbCqccwcfbcfbcfbcfcbZDbZCcfbbZEcfhcapccwbOdbQucficezbOdbOdbOdbOebULcezbURcezbLKapQapQapQapQapQapQbVucfjcfjcfjcflcfkcfjcfjcfjcfmcfocfnceJcfpceJceJbzscfqcbKcdObDbbDbccQccQbDbbDbccQcknccQbDbaaaaaaaaaaaabkybkyccUcfsbkybkybQZbQZbQZcftcfubQZbDhbkycaebtpckSccUcbgbkybkycfvbkybkybkybkyaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaSaaSaafaaaccaccXccbaaaccaccXccbaaaccaccXccbaaaaafaaaaaacfxcfwcfwcfwcfwbCqbCqcqncqybCqbLvbLvbLvbLvbLvbLvbLvbLvbLvbCqcarcaqbTAcaxcazcaycaycaycaycaycaycaycaycaycaBcaBcaycaCceWccwcfFcfEcfHcgOcbqcbpcfbcbscfMctRccwcfNcfObRHcfQcfPcfRcfPcfQcfScfQcfTcezbLKbLKbLKaoVaoVapQaoVcfVcfUcfXcfWcfZcfYcgbcgacfjcgcbAwcgdcgfcgecghcggbKTbKTcgjcnHbkyaaaaaaaaaaaaaaaaafcskaafaaaaaaaaaaaaaaabkyczGcgocgmcgmcgpcgrcgqcgtcgscgubkybkybkybkycbvbkyccUbTrbkycgybtpbtpbkyaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaafaaaaaaaaacgzaaaaaaaaacgzaaaaaaaaacgzaaaaaaaafcfxcfxcfxcgAcgCcgBcgEcgDbHEcAhcAicgGcgHcgHcgHcgHcgHcgHcgHcgHcgHcgHcgHcbwbEPcbxcbyccwccwccwccwccwccwccwccwccwccwccwccwccwccwccwcfbcgMcgOccjcclcckcgSccmccoccnccwcfNcgWcgVcgYcgXchacgZchbbOdchdchcchfchechgcheaoVaoVapQaoVcfjchhchjchichlchkchnchmcfjbAwbAwceJceJcbKceJccMbAwbAwcbKczHbkybkybZibZibkybkybZiczQbZibkybkybZibZibZibkyczRczSbnschwchvchxchxchxchychAchzchCccpccqccqccqccrcctbkyccVbtpchHbkyaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafchJchIchIchKchLchLchLchLchLchLchLchLchLchLchLchMchOchNchOchPchRchQchScgHchUchTbQabCqbLvbLvbLvbLvbLvbLvbLvbLvbLvbCqbCqccucdicdhcdjccwchYchYchZccwcibciacidciccifciecihcigcijcdkcfbcikcimcdlcdmcinciqcdncdpcdoccwbLKcitbMQciubMQcivbMQciubMQciwbMQcixbLKbLKbLKapQapQapQaoVcfjciyciAcizciCciBciEciDcfjciFbAwccMccMciGceJccMbAwciHcbKczTbUwbUwbUwbUwbUwbUwbUwczUcANczVczVczVczVczVczXczWblObkyciKciJbkybkybZibZibkybkyciLcbfcdqbnscdscdrcdubkybkybkybkybkyaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaafaaaaaaaaaciPaaaaaaaaaciPaaaaaaaaaciPaaaaaaaafcfxcfxcfxciQciSciRcfwbHEbHEbHEbHEbCqaaaaaaaafaaaaaaaafaaaaaaaafaaabCqciTbCqciUcdvccwciXciWciZciYcjbcjacgRcgRcgRcdTcjecjdcjfcjacfbcjgcgOcdUciocjjcfbcejcelcekccwapQcphapQbVuapQcphapQbVuapQcpPapQcpPapQapQaoVaoVaoVapQapQcfjcjpcjrcjqcjtcjscjvcjucjxcjwcjzcjyccMbLSccMcjAbFrbHdchpczYczYczYczYczYczYczYcAaczZczYczYczYczYczYczYcAccAbcAdbkycjCcbfbkyaaaaaaaaaaaabkybtpcbfcjEcjDcjDcjFcjGcjDaaaaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaSaaSaafaaaccacjHccbaaaccacjHccbaaaccacjHccbaaaaafaaaaaacfxcfwcfwcfwcfwcjIbLubHEbHEbCqbCqbLvcAjcjJcjJcjJcjJcjJcjJaafbCqbCqbCqcjKcemccwcjMciZciZciYckHcgRcencjNcjPcnAcgRcgRcgRcgRcfbcjUceoceocjYcjXcfbcepcfMcsFccwbOhckbbQAckbbOhckbbQAckbbOhckcbQAckdbOhaoVaoVaoVaoVaoVapQckfckecjrckgckickhckkckjcfjcklceJceJceJckmceJceJceJbzsbCqbCqbCqbLvbLvbLvbCqbCqbLvbLvbLvbCqbCqbLvbLvbLvbCqckobkybkyckpcbfbkybkybZibZibkybkybtpckqckrcjDcktcksckucjDaaaaaaaafaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafccacjHccbaaaccacjHccbaaaccacjHccbaafaafaafaaaaaaaaaaaaaagbCqbCqbCqckvbHEbCqckvbJfcjJckwckyckxckyckzcjJaaabCqbSsbHEckAcemccwckBckBckCccwckEckDckGcgRckFcnAckJckIckKckKcfbckLceqceqckPckOckRcesckTcetccwbOhckVckUckWbOhckYckXckZbOhclbclaclcbOhaoVaoVaoVaoVaoVaoVcfjcldclfcleclhclgcljclicfjclkclmcllcloclncAeccMccMbAwclpbHEbLvaaaaaaaaaaafaaaaafaaaaafaaaaaaaaaaaaaaabkyclqbDhbkyclsclrcltcgrcltcltcltcltclvcluclwcjDclyclxclzcjDaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHraaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaccacjHccbaafccacjHccbaafccacjHccbaaaaafaafaafaaaaaaaaaaagclBclAclBbHEbHEbTzbHEccdcjJclCclEclDclGclFcjJaaabCqceYbHEckAcemccwckBckBckCccwclHcigclJceuceZcevclJcigclJclJcigclMcfaclQckHclPclRclNcgUcfdccwbOhclUclTclUbOhclWclVclWbOhclYclXclZbOhapQapQapQapQapQapQcfjcfjcfjcmbcmdcmccmfcmecmdclkcmgccMcmicmhcmjcdNccMcmkbCqbHEbLvaafaafaafaafaaaaafaaaaafaaaaaaaaaaaaaaabkycmqbtpbkycmrbntbntcmsbntbnsbnsbnscmtcmtcmucjDcmwcmvcmxcjDaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafccacjHccbaaaccacjHccbaaaccacjHccbaafaafaaaaafaafaaaaaaaagbCqbCqbCqbCqbHEbCqbCqbCqcjJcmycmAcmzcmBcmycjJaafbCqccwcmDcmCcfeccwckBckCckCccwcmGcmFcmIcffckFcfgcmLcmKcmLcmLcmNcfzcmQcmQcmRcmQcmQcfAcfCcfBccwbOhclUcmUclUbOhclWcmVclWbOhclZcmWclZbOhaoVaoVapQapQaoVaoVaoVaoVaoVcpOcmdcmYcnacmZcmdbAwcnccnbcbQcndcnebFrcngcnfbCqclpbLvaaaaaaaaaaafaaabZibZibZibkybkybkybkybkybkyciIbtpbkybkybkybkybkybtpbkyaafaaaaaaaaaaafcnjcnjcnkcnjcnjaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaccacnlccbaaaccacnlccbaaaccacnlccbaaaaaSaaaaaaaafaafaaaaaaaaaaaaaaabLvbHEbLvaaaaaacjJcnmcnocnncnqcnpcjJcjJcjJccwcnrcmCcfDccwccwccwccwccwcntcfGcgRcgRckFcgUcgRcgRcnwcnvcnxcgRcgRcgRcgRcnycgRckFcnAcfIccwbOhbOhbOhbOhbOhbOhbOhbOhbOhbOhbOhbOhbOhaoVapQapQaoVaoVaoVaoVaoVaoVcpQcmdcmccnCcmecmdbzscnDbHdcnFcnEbHdcnGbzsbzsbCqaagaagaaaaaaaaaaafaaabZicmlcmmbkycmpcmocnibtpbYrcnJbtpcAKbtpbtpbtpbtpbtpbkyaafaaaaaaaaaaafaaacnjcnKcnjaaaaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaafaaaaafaaaaafaaaaafaaaaafaaaaafaaaaaSaaaaaaaaaaafaafaaaaaaaaaaaabLvbHEbLvaaaaaacjJcnLcnNcnMcnPcnOcnRcnQcnScnRcnUcfJcgvcfLcnYcnXcoacnZcobcgwcgIcgxcgKcgJcsFccwcgLccwcgLccwcsFcgNcgRcgRcgPckFcnAcgQccwccwccwccwccwcigcigcigcigccwaafaafaafaafapQapQaoVaoVaoVaoVaoVaoVaoVcpQcmdcopcorcoqcosapQbzsceIcotbPnbPnbzsbzsaaaaafaaaaaaaaaaaaaaaaafaaabZicnhcnibYrbtpceRcnibkybkyckobkycnIcmocoubMBbNAbkybkyaafaaaaaaaaaaafaaacnjcnkcnjaaaaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaSaaSaaSaaSabaaaSaaSaaSaaSaaSaaSaaSaaSaaSaaaaaaaaaaaaaafaafaaaaaaaafbLvbHEbLvaafaafcjJcovcoxcowcozcoycoBcoAcoCcgTchDchBchEcoHcoHcoHcoJcoHcoLcoKchFcoMcjSchGccwchVchXchWchXciiccwcilcgRcipcirckFciscjScjScjScoZcpaccwcpbcigcpccpdcpdcpeaaaaaaaaaaoVaoVaoVaoVaoVaoVaoVaoVaoVcpQcmdcmdciMcmdcmdaaaapQaaacscaoVaaaaaaaaaaaaaafaafaaaaaaaaaaaaaafaaabLvcAfcAgbCqbVLbtpcnicpgbkycskbkybkybkybZibZibkybkyaaaaafaaaaaaaaaaafaaaaaacpiaaaaaaaafaaaaafaaaaaaaafaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaabLvbHEbLvaaaaaacjJcpjcplcpkcpncpmcjJcpocppcjJcpqcpWciNcgRcgRcpsclJcptckHcpuciOcpvcpvcpvcpycpxcAOcpzcpCcpBcpycpDcpDcnxcencocciVcjNcjNcjPcgUcjccpIciZcpIcpJczMczLcpMczNaaaaaaaoVaoVaoVaoVaoVaoVaoVaoVaoVcpQbVwcmdcpNcmdczIapQapQaaacsmaoVaaaaaaaaaaaaaaaaafaafaaaaaaaaaaafaaabLvbLvbLvbCqbCqbkycnicmnbkycsyaafaaaaafaaaaaaaafaaaaaaaafaaaaaaaaaaafaaaaaacpiaaaaaaaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbCqbCqcpRbCqbCqaaacjJcpScpUcpTcjJcjJcjJcjJcjJccwcpVcgRciNcgRcgRcpXclJcpZckHcqacqccqbcqecqdccwcqfcqhcqgcqjcqiccwcqkcqlcqlcqccqackHcqmcjhckFcgUcqoccwcqpcigcqqcpdcpdcqraaaaaaaaaaoVaoVaoVaoVcszaoVaoVaoVaoVczJbVwcqscqtcqsbVwapQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaafaaaaaaaaaaafaaaaaabZicqubZibZiaafaafaaaaafaaaaaaaafaaaaaSaaSaaSabaaafaafaafaafcpiaafaafaafaafaafabaaaSaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbCqciTbHEcqvbCqaafcjJcjJcjJcjJcjJaafaaaaaaaafccwcqwcgRcjicqxcqxcqzcigcigcqAccwcqCcqBcqBcqBccwcqDcqFcqEcqHcAPccwcqBcqBcqBcqCccwcqAcigcigckFcgUccwccwcigcigcigcigccwaafaafaafaafapQapQaoVaoVaoVaoVaoVaoVaoVapQbVwaaaaaaaaabVwapQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaafaaaaaaaaaaafaaaaaabZibtpbZiaaaaaaaaaaaaaafaaaaaaaafaaaaaSaaaaaaaafaaaaafaaaaaacqJaaaaaaaafaaaaafaaaaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabLvcqKcAQcqLbCqaafaaaaaaaafaaaaaaaafaaaaaaaafccwcqOcqNckHcqPcqRcqQcigcqScqTccwcqVcqUcqWcqUcqYcqXcracqZcrbcqGcqYcqUcqUcqUcrcccwcrecrdccwckFcrwcjkcjlcjTcrhcqYaaaaaaaaaaaaaaaaaaaoVaoVaoVaoVaoVaoVaoVaoVaoVaoVbVwbVwbVwbVwbVwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaabZicribZiaaaaaaaaaaaaaafaaaaaaaafaaaaaSaafcrjcrjcrjcrjcrjaaacrkaaacrjcrjcrjcrjcrjaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabLvcrlcrmbJebCqcigcrncrncrncrncrncrncrncrncigccwcrpcrocrrcrqcrpccwccwccwcqAccwccwcqYcqYcqYcqYcrscrIcrtcrucrvcqYcqYcqYcqYccwccwcqAccwccwcpEcjOcjmcjQcgRcrAcqYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaagaagaagaaaaaaaaaaaaaaaaaaaaaaafaaaaaSaaacrBcrCcrCcrCcrCcrDcrkcrFcrEcrEcrEcrEcrGaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabLvbLvbLvbLvbCqaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwcrHcrJcrKaoVaaHcsPcqYcqYcqYcqYczEcqYcqYcqYcqYcsPaaHaoVczFcrMcrLccwcjRccwccwcjVcrPcrRcqYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaSacycrScrScrScrScrSaaacrkaaacrScrScrScrScrSaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwcrTcrUcrUaoVcAkcAlcAlcAlcAlcAlcAmcAlcAlcAlcAlcAlcAnaoVcrUcrVcrTccwcrWcrXccwcigcigcrYcigaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafaaaaaSaaaaaaaaaaafaaaaaaaaacrkaaaaaaaaaaafaaaaaaaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwcrZcsbcsaapQcAoaaHcsAaoVaoVaoVaoVcsAaoVaoVcsAaaHcAoaoVcsdcsfcseccwcsgcfKcigaafaaacsicshaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafcrjcrjcrjcrjcrjaaacrkaaacrjcrjcrjcrjcrjaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwcrTcrUcsjaoVcApcAqaoVaoVaoVaoVaoVcsBaoVaoVaoVcAscAraoVcrUcrUcrTccwaagaagaagaafaaacsLcslcsocsncspcsncsocsncspcsncsocsncspcsncsocsncspcsqcsraaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaacrBcrCcrCcrCcrCcrDcrkcrFcrEcrEcrEcrEcrGaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwcsscstcrUaoVcAoaaHaoVaoVapQapQapQapQapQaoVaoVaaHcAoaoVcrUcsvcsuccwaaaaaaaagaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaafaaaaaacsLcswcshaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafcrScrScrScrScrSaaacrkaaacrScrScrScrScrSaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwccwcsxcrUaoVcAoaaHcsAapQapQcsHcsCcsIapQcsJaoVaaHcAoaoVcrUcsxccwccwaaaaaaaagaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafcsUcswcsraafaafcsDcsDcsDcsDcsDaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaafaaaaaaaaacsEaaaaaaaaaaafaaaaaaaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcsFccwcsGcrUaoVcApcAqaoVaoVapQcsRcsQcAtapQaoVaoVcAscAraoVcrUcsKccwcsFaaaaaaaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaafaaaaaacsLcswcshaaacsDcsNcsMcsOcsDaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafcrjcrjcrjcrjcrjaaacpiaaacrjcrjcrjcrjcrjaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwccwcsxcrUaoVcAoaaHaoVcsSapQctmctfczDapQapQcsAaaHcAoaoVcrUcsxccwccwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaaaaaaaaacsUcsTcshcsDcsWcsVcsXcsDaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaacrBcrCcrCcrCcrCcsZcsYcsZcrEcrEcrEcrEcrGaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwcsvcsucrUaoVcAoaaHaoVaoVapQapQapQapQapQaoVaoVaaHcAoaoVcrUcsscstccwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaaaaaaaaaaafcsUctacsDctcctbctdcsDaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafcrScrScrScrScrSaaacpiaaacrScrScrScrScrSaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwcrTcrUcteaoVcApcAqaoVaoVaoVapQaoVaoVaoVaoVaoVcAscAraoVcrUcrUcrTccwaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaaaaaaaaaaafctgcthcsDctjctictkcsDctgctgaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaaaaafaaaaafaaaaaacpiaaaaaaaafaaaaafaaaaaaaaSaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaccwctlcsbcsaapQcAoaaHcsAaoVaoVcsAaoVaoVaoVaoVcsAaaHcAoaoVcsdcsfctnccwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaafaafaafaafctgctpctoctrctqcttctsctuctgaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaSaaSaaSaaSaaSaafaafaaacpiaaaaafaafaaSaaSaaSabaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwctvcrUcrUaoVcAoaaHaaHcAuaaHaaHcAuaaHaaHcAuaaHaaHcAoaoVcrUcrUctvccwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaaaaaaaaaaafctgctwctoctxctbctzctyctActyaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafctBaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwctvcrUctCaoVcAvcAlcAlcAwcAlcAlcAwcAlcAlcAwcAlcAlcAxaoVctDcrUctvccwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaaaaaaaaaaafctgctFctEctHctGctJctIctKctgaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaafaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacjZccwccwccwcrUapQapQapQapQaoVaoVaoVaoVaoVapQapQapQapQcrUccwccwccwcjZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaaaaaaaaaaafctgctgctgctMctLctNctgctgctgaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaSaaSaaSaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaactvccwccwcigcigcigcigcigcigcigcigcigcigcigcigcigccwccwctvaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaafaafaafaafaaaaaactOctxctPctQctOaaaaaaaagaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaactvctvctvctvctRctvctvctvctvctvctvctvctRctvctvctvctvaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaagaagaagaagaafaaaaaactOctxctSctzctOaaaaaaaagaagaagaagaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaaaaaaaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaafaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaSctyctyaaSaafaafaafctgctUctTctVctgaafaafaafaaSctyctyaaSaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSctXctWctZctYaaacuacuacuacuccubcudcuacuacuaaaacuecugcufcuhaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSctXctWcufcuicujcuaculcukcuncumcupcuocuqcuacuscurctWcufcuhaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacutaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSctXcuucuwcuvcuvcuxcuzcuycuBcuAcuCcuycuEcuDcuFcuFcuHcuGcuhaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSctXcuIcuhaaaaaacuacuJcuycuLcuKcuMcuycuNcuacuOcuOcuQcuPcuhaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaScuScuRctgctgctgcuacuUcuTcuVcuVcuWcuTcuXcuactgctgctgcuYcuZaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSctXcuIcuhaaaaaacvacvccvbcvecvdcvacvfcvgcvaaaaaaactXcuPcuhaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSctXcuIcuhaaaaaacvacvicvhcvkcvjcvmcvlcvncvaaaaaaactXcuPcuhaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSctXcuIcuhaaacvacvacvocvlcvpcvpcvpcvlcvqcvacvaaaactXcuPcuhaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSctXcuIcuhaaacvacvacvrcvpcvpcvscvpcvpcvtcvacvaaaactXcuPcuhaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaScuScvuctgctgcvacvacvlcvpcvvcvvcvvcvpcvlcvacvactgctgcvwcuZaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSctXcuIcuhcsDcvacvxcvlcvycvvcvzcvvcvycvlcvAcvacsDctXcuPcuhaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSctXcuIcuhaaacvacvacvlcvpcvCcvBcvDcvpcvlcvacvaaaactXcuPcuhaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSctXcuIcuhaaacvacvacvrcvpcvEcvycvpcvpcvtcvacvaaaactXcuPcuhaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSctXcuIcuhaaacvacvacvFcvpcvHcvGcvIcvpcvFcvacvaaaactXcuPcuhaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaScuScvJctgctgcvvcvacvacvfcvLcvKcvMcvbcvacvacvvctgctgcvNcuZaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSctXcuIcuhaaaaafaaacvacvacvacvPcvQcvacvaaaaaafaaactXcuPcuhaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSctXcuIcuhaaaaafaaacvScvRcvUcvTcvWcvVcvSaaaaafaaactXcuPcuhaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSctXcuIcvYcvXcvZcvZcvScwacwccwbcwecwdcvScvXcvZcvXcwfcuPcuhaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSctXcwgcwhcuvcuvcuvcwjcwicwlcwkcwncwmcwocuFcuFcuFcuFcwpcuhaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaacuOcuOcuOcwqcuOcvScwrcwtcwscwvcwucwxcwwcwqcuOcwqcwqaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacwyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaSaaSaaSaaSaaSaaScvScwzcwBcwAcwDcwCcvSaaSaaSaaSaaSaaSaaSaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcvScvScwEcwEcwEcvScvSaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaSaaSaaSaaSaaSaaSaaSaaSabaaaSaaSaaSaaSaaSaaaaaabCqbCqbCqbCqbCqbCqbYybCqbCqbCqbCqapQaoVaoVapQaaHcjnaoVaoVaoVbGpbVHbVIcagcaicahcakcajcamcalcaocanbSdbYFbStbVJcatcasbSRbSwbHPbYHcawbZybThbTgbTjbTibTHbTGcaDbPccaEbMKbMKbMKcaFbOdcaHcaGbUSbURbOdbQyapQbOhbOhbOhbOhbOhcaJcaIcdEcbJbzscaKcaMcaLbUXcaNcaObzscaQcaPcaRbzscaSbMbcaUcaTbDbbEmbSZbEmcaVbTabMibTcbMibTdcaWbEmbSZbEmbDbcaXbTlcaYcbccbbckacjWckNckMcbdbPNbWrbWrcbebQZbDhcbfcbgbkycbicbhbtpbZiaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaafaaaaafaaaaafaaaacyaaaaafaaaaafaaaaaSaafaafbCqbHEbHEbHEbHEbHEbHEbHEbHEbLubLvaoVaoVaoVaaHcjocmXaaHaaHapQbGpbVHbVIcblbYzbWBbWBbWBbYzcbmcbocbnbXGbTIbUcbVJbCqbCqbUlcbrcbtbYHbYHcbucdtbUmcaAcaAcaAcaAbWQbOdcbAcbzcbCcbBbQtcbDcbFcbEbXUbTTcbGbPhbRKbPjcbIcbHcbHbOhapQbPnbAwceCbzsbzscbLcbKbzscbMcbNbzsbzscbObzsbzscbNbFrcbQcbPbDbbEmbEmbEmcbScbRbRZcbTbMibUgcbUbRUbRUbUibDbbTlbTlcbVbTlbTlbQZbZZbZZcbWcbXbPNcbZcbYcbYbQZbqgcbfbTrbkybkybkybtpbkyaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaccacccccbaaaccacccccbaaaccacccccbaaaaaSaaaaaabLvccdbHEbCqbCqbCqbTzbCqbCqbCqbCqaoVaoVaoVcnBaaHaaHapQaoVaoVbGpbVHbVIbYzccgccfbWBcchbYzbYzbXFccibOCbUybVbbUCbVdbVcbVfbVebVhbVgbVobVmbVqbVpcerbVrbWhbVKccwccvccyccxbRAbRAbRDbTOcczbTUbRFbURccAbQyapQbQAccCccBccDbOhapQbzsbzscfVccFccEcbLccGbzscbMccIccHccKccJccLccHccNccMbhGccObDbbDbbDbbDbbDbbDbbMiccPcfybDbbDbbDbbDbbDbbDbbQZbQZbQZbQZbQZbQZccRccRccSccTbQZbQZbQZbQZbQZbkyccUbTrbkyccWccVbtpbkyaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafccaccXccbaaaccaccXccbaaaccaccXccbaafaafaaaaaabLvccYccZbCqbSqbHEbHEcdabQacdbbCqaoVaoVaoVaoVapQaoVaoVaoVaoVbESbVHbVIbWBcddcdcbWBcdecdfbWBbXFcdgbWtbWsbWvbWubWKbWJbXmbXkbXobXnbXqbXpbXIbXHccsbXNcdtbYbccwcdwbOdcbAbTObTPcdycdxcdAcdzbMWcdBcdCbRIbVvbPjcdDcbHcbHbOhapQbzsbAwcfWcdGcdFcdIcdHbzscdJcdLcdKccMcdMccMbFrbHdcdNbhGcdObDbcfrcgicgicglcgkbMiccPcgnbDbaafaafaafaafbkycdQbNBblQcdRcdRbQZcdScdSccSbScbQZcmobtpcAKbtpbDhccUbXubkycdVbtpbtpbkybkybkyaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaccaccXccbaafccaccXccbaafccaccXccbaaaaafaafaafbCqbLvbCqbCqbCqcdWcdYcgFcpYbSsbCqaoVaoVaoVaoVapQaoVaoVapQaoVbESbVHbVIbWBceacdZceccebcedbWBcefceecehcegceibVJbYpbYnbYEbYqbYMbYGbZebYObZgbZfbZubZtbZAbZwceycexbOdcbAcezbOdbOdbOdcezcezcezbURceBceAapQbOhbOhbOhbOhbOhapQbzscaKcfXceEceDceGceFbzsbzsceIceHceJbLSceLceKbzsbzsbhGcdObDbchochqchqchschrchuchtcjBbDbaafaaaaaaaafbkybtpceMbrGceOceNbQZcePcePceQbScbQZbkybkyceSceRbDhccUbTrbtpbtpbtpceTblPceUblPaagaagaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafccaccXccbaaaccaccXccbaaaccaccXccbaafaafaaaaaaaafaafbCqceVbCqceWceYbCqbTzbCqbCqaoVapQaoVaoVapQaoVaoVapQaoVbESbVHbVIbVIbVIbVIbVIbVIbVIbVIbVJbVJbVJbVJbVJbVJbCqbZBbCqccwcfbcfbcfbcfcbZDbZCcfbbZEcfhcapccwbOdbQucficezbOdbOdbOdbOebULcezbURcezbLKapQapQapQapQapQapQapQcfjcfjchkcflcfkcfjcfjcfjcfmcfocfnceJcfpceJceJbzscfqcbKcdObDbbDbccQccQbDbbDbccQcknccQbDbaaaaaaaaaaaabkybkyccUcfsbkybkybQZbQZbQZcftcfubQZbDhbkycaebtpckSccUcbgbkybkycfvbkybkybkybkyaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaSaaSaafaaaccaccXccbaaaccaccXccbaaaccaccXccbaaaaafaaaaaacfxcfwcfwcfwcfwbCqbCqcqncqybCqbLvbLvbLvbLvbLvbLvbLvbLvbLvbCqcarcaqbTAcaxcazcaycaycaycaycaycaycaycaycaycaBcaBcaycaCceWccwcfFcfEcfHcgOcbqcbpcfbcbscfMctRccwcfNcfObRHcfQcfPcfRcfPcfQcfScfQcfTcezbLKbLKbLKaoVaoVapQapQcfjcfjciBchlcfZcfYcgbcgacfjcgcbAwcgdcgfcgecghcggbKTbKTcgjcnHbkyaaaaaaaaaaaaaaaaafcskaafaaaaaaaaaaaaaaabkyczGcgocgmcgmcgpcgrcgqcgtcgscgubkybkybkybkycbvbkyccUbTrbkycgybtpbtpbkyaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaafaaaaaaaaacgzaaaaaaaaacgzaaaaaaaaacgzaaaaaaaafcfxcfxcfxcgAcgCcgBcgEcgDbHEcAhcAicgGcgHcgHcgHcgHcgHcgHcgHcgHcgHcgHcgHcbwbEPcbxcbyccwccwccwccwccwccwccwccwccwccwccwccwccwccwccwcfbcgMcgOccjcclcckcgSccmccoccnccwcfNcgWcgVcgYcgXchacgZchbbOdchdchcchfchechgcheaoVaoVapQciCcfUcjpckhcizckicjrchnchmcfjbAwbAwceJceJcbKceJccMbAwbAwcbKczHbkybkybZibZibkybkybZiczQbZibkybkybZibZibZibkyczRczSbnschwchvchxchxchxchychAchzchCccpccqccqccqccrcctbkyccVbtpchHbkyaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafchJchIchIchKchLchLchLchLchLchLchLchLchLchLchLchMchOchNchOchPchRchQchScgHchUchTbQabCqbLvbLvbLvbLvbLvbLvbLvbLvbLvbCqbCqccucdicdhcdjccwchYchYchZccwcibciacidciccifciecihcigcijcdkcfbcikcimcdlcdmcinciqcdncdpcdoccwbLKcitbMQciubMQcivbMQciubMQciwbMQcixbLKbLKbLKapQapQapQbVucfjchhchjchicldckjciEciDcfjciFbAwccMccMciGceJccMbAwciHcbKczTbUwbUwbUwbUwbUwbUwbUwczUcANczVczVczVczVczVczXczWblObkyciKciJbkybkybZibZibkybkyciLcbfcdqbnscdscdrcdubkybkybkybkybkyaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaafaaaaaaaaaciPaaaaaaaaaciPaaaaaaaaaciPaaaaaaaafcfxcfxcfxciQciSciRcfwbHEbHEbHEbHEbCqaaaaaaaafaaaaaaaafaaaaaaaafaaabCqciTbCqciUcdvccwciXciWciZciYcjbcjacgRcgRcgRcdTcjecjdcjfcjacfbcjgcgOcdUciocjjcfbcejcelcekccwapQcphapQbVuapQcphapQbVuapQcpPapQcpPapQapQaoVaoVaoVapQbVucfjciyciAcizcjtcjscjvcjucjxcjwcjzcjyccMbLSccMcjAbFrbHdchpczYczYczYczYczYczYczYcAaczZczYczYczYczYczYczYcAccAbcAdbkycjCcbfbkyaaaaaaaaaaaabkybtpcbfcjEcjDcjDcjFcjGcjDaaaaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaSaaSaafaaaccacjHccbaaaccacjHccbaaaccacjHccbaaaaafaaaaaacfxcfwcfwcfwcfwcjIbLubHEbHEbCqbCqbLvcAjcjJcjJcjJcjJcjJcjJaafbCqbCqbCqcjKcemccwcjMciZciZciYckHcgRcencjNcjPcnAcgRcgRcgRcgRcfbcjUceoceocjYcjXcfbcepcfMcsFccwbOhckbbQAckbbOhckbbQAckbbOhckcbQAckdbOhaoVaoVaoVaoVaoVbVuckfckecjrcjqcjrclecljclfcfjcklceJceJceJckmceJceJceJbzsbCqbCqbCqbLvbLvbLvbCqbCqbLvbLvbLvbCqbCqbLvbLvbLvbCqckobkybkyckpcbfbkybkybZibZibkybkybtpckqckrcjDcktcksckucjDaaaaaaaafaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafccacjHccbaaaccacjHccbaaaccacjHccbaafaafaafaaaaaaaaaaaaaagbCqbCqbCqckvbHEbCqckvbJfcjJckwckyckxckyckzcjJaaabCqbSsbHEckAcemccwckBckBckCccwckEckDckGcgRckFcnAckJckIckKckKcfbckLceqceqckPckOckRcesckTcetccwbOhckVckUckWbOhckYckXckZbOhclbclaclcbOhaoVaoVaoVaoVaoVbVucfjclgclhckgcsqclickkcsrcfjclkclmcllcloclncAeccMccMbAwclpbHEbLvaaaaaaaaaaafaaaaafaaaaafaaaaaaaaaaaaaaabkyclqbDhbkyclsclrcltcgrcltcltcltcltclvcluclwcjDclyclxclzcjDaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHraaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaccacjHccbaafccacjHccbaafccacjHccbaaaaafaafaafaaaaaaaaaaagclBclAclBbHEbHEbTzbHEccdcjJclCclEclDclGclFcjJaaabCqceYbHEckAcemccwckBckBckCccwclHcigclJceuceZcevclJcigclJclJcigclMcfaclQckHclPclRclNcgUcfdccwbOhclUclTclUbOhclWclVclWbOhclYclXclZbOhapQapQapQapQapQbVucfjcfjcfjcmbcmdcmccmfcmecmdclkcmgccMcmicmhcmjcdNccMcmkbCqbHEbLvaafaafaafaafaaaaafaaaaafaaaaaaaaaaaaaaabkycmqbtpbkycmrbntbntcmsbntbnsbnsbnscmtcmtcmucjDcmwcmvcmxcjDaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafccacjHccbaaaccacjHccbaaaccacjHccbaafaafaaaaafaafaaaaaaaagbCqbCqbCqbCqbHEbCqbCqbCqcjJcmycmAcmzcmBcmycjJaafbCqccwcmDcmCcfeccwckBckCckCccwcmGcmFcmIcffckFcfgcmLcmKcmLcmLcmNcfzcmQcmQcmRcmQcmQcfAcfCcfBccwbOhclUcmUclUbOhclWcmVclWbOhclZcmWclZbOhaoVaoVapQapQaoVcaJbUraoVaoVcpOcmdcmYcnacmZcmdbAwcnccnbcbQcndcnebFrcngcnfbCqclpbLvaaaaaaaaaaafaaabZibZibZibkybkybkybkybkybkyciIbtpbkybkybkybkybkybtpbkyaafaaaaaaaaaaafcnjcnjcnkcnjcnjaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaccacnlccbaaaccacnlccbaaaccacnlccbaaaaaSaaaaaaaafaafaaaaaaaaaaaaaaabLvbHEbLvaaaaaacjJcnmcnocnncnqcnpcjJcjJcjJccwcnrcmCcfDccwccwccwccwccwcntcfGcgRcgRckFcgUcgRcgRcnwcnvcnxcgRcgRcgRcgRcnycgRckFcnAcfIccwbOhbOhbOhbOhbOhbOhbOhbOhbOhbOhbOhbOhbOhaoVapQapQaoVaoVaoVbVuaoVaoVcpQcmdcmccnCcmecmdbzscnDbHdcnFcnEbHdcnGbzsbzsbCqaagaagaaaaaaaaaaafaaabZicmlcmmbkycmpcmocnibtpbYrcnJbtpcAKbtpbtpbtpbtpbtpbkyaafaaaaaaaaaaafaaacnjcnKcnjaaaaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaafaaaaafaaaaafaaaaafaaaaafaaaaafaaaaaSaaaaaaaaaaafaafaaaaaaaaaaaabLvbHEbLvaaaaaacjJcnLcnNcnMcnPcnOcnRcnQcnScnRcnUcfJcgvcfLcnYcnXcoacnZcobcgwcgIcgxcgKcgJcsFccwcgLccwcgLccwcsFcgNcgRcgRcgPckFcnAcgQccwccwccwccwccwcigcigcigcigccwaafaafaafaafapQapQaoVaoVaoVaoVbVuaoVaoVcpQcmdcopcorcoqcosapQbzsceIcotbPnbPnbzsbzsaaaaafaaaaaaaaaaaaaaaaafaaabZicnhcnibYrbtpceRcnibkybkyckobkycnIcmocoubMBbNAbkybkyaafaaaaaaaaaaafaaacnjcnkcnjaaaaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaSaaSaaSaaSabaaaSaaSaaSaaSaaSaaSaaSaaSaaSaaaaaaaaaaaaaafaafaaaaaaaafbLvbHEbLvaafaafcjJcovcoxcowcozcoycoBcoAcoCcgTchDchBchEcoHcoHcoHcoJcoHcoLcoKchFcoMcjSchGccwchVchXchWchXciiccwcilcgRcipcirckFciscjScjScjScoZcpaccwcpbcigcpccpdcpdcpeaaaaaaaaaaoVaoVaoVaoVaoVaoVbVuaoVaoVcpQcmdcmdciMcmdcmdaaaapQaaacscaoVaaaaaaaaaaaaaafaafaaaaaaaaaaaaaafaaabLvcAfcAgbCqbVLbtpcnicpgbkycskbkybkybkybZibZibkybkyaaaaafaaaaaaaaaaafaaaaaacpiaaaaaaaafaaaaafaaaaaaaafaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaabLvbHEbLvaaaaaacjJcpjcplcpkcpncpmcjJcpocppcjJcpqcpWciNcgRcgRcpsclJcptckHcpuciOcpvcpvcpvcpycpxcAOcpzcpCcpBcpycpDcpDcnxcencocciVcjNcjNcjPcgUcjccpIciZcpIcpJczMczLcpMczNaaaaaaaoVaoVaoVaoVaoVaoVbVuaoVaoVcpQbVwcmdcpNcmdczIapQapQaaacsmaoVaaaaaaaaaaaaaaaaafaafaaaaaaaaaaafaaabLvbLvbLvbCqbCqbkycnicmnbkycsyaafaaaaafaaaaaaaafaaaaaaaafaaaaaaaaaaafaaaaaacpiaaaaaaaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbCqbCqcpRbCqbCqaaacjJcpScpUcpTcjJcjJcjJcjJcjJccwcpVcgRciNcgRcgRcpXclJcpZckHcqacqccqbcqecqdccwcqfcqhcqgcqjcqiccwcqkcqlcqlcqccqackHcqmcjhckFcgUcqoccwcqpcigcqqcpdcpdcqraaaaaaaaaaoVaoVaoVaoVcszaoVbVuaoVaoVczJbVwcqscqtcqsbVwapQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaafaaaaaaaaaaafaaaaaabZicqubZibZiaafaafaaaaafaaaaaaaafaaaaaSaaSaaSabaaafaafaafaafcpiaafaafaafaafaafabaaaSaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbCqciTbHEcqvbCqaafcjJcjJcjJcjJcjJaafaaaaaaaafccwcqwcgRcjicqxcqxcqzcigcigcqAccwcqCcqBcqBcqBccwcqDcqFcqEcqHcAPccwcqBcqBcqBcqCccwcqAcigcigckFcgUccwccwcigcigcigcigccwaafaafaafaafapQapQaoVaoVaoVaoVbVuaoVaoVapQbVwaaaaaaaaabVwapQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaafaaaaaaaaaaafaaaaaabZibtpbZiaaaaaaaaaaaaaafaaaaaaaafaaaaaSaaaaaaaafaaaaafaaaaaacqJaaaaaaaafaaaaafaaaaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabLvcqKcAQcqLbCqaafaaaaaaaafaaaaaaaafaaaaaaaafccwcqOcqNckHcqPcqRcqQcigcqScqTccwcqVcqUcqWcqUcqYcqXcracqZcrbcqGcqYcqUcqUcqUcrcccwcrecrdccwckFcrwcjkcjlcjTcrhcqYaaaaaaaaaaaaaaaaaaaoVaoVaoVaoVaoVaoVbVuaoVaoVaoVbVwbVwbVwbVwbVwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaabZicribZiaaaaaaaaaaaaaafaaaaaaaafaaaaaSaafcrjcrjcrjcrjcrjaaacrkaaacrjcrjcrjcrjcrjaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabLvcrlcrmbJebCqcigcrncrncrncrncrncrncrncrncigccwcrpcrocrrcrqcrpccwccwccwcqAccwccwcqYcqYcqYcqYcrscrIcrtcrucrvcqYcqYcqYcqYccwccwcqAccwccwcpEcjOcjmcjQcgRcrAcqYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacswaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaagaagaagaaaaaaaaaaaaaaaaaaaaaaafaaaaaSaaacrBcrCcrCcrCcrCcrDcrkcrFcrEcrEcrEcrEcrGaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabLvbLvbLvbLvbCqaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwcrHcrJcrKaoVaaHcsPcqYcqYcqYcqYczEcqYcqYcqYcqYcsPaaHaoVczFcrMcrLccwcjRccwccwcjVcrPcrRcqYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacswaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaSacycrScrScrScrScrSaaacrkaaacrScrScrScrScrSaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwcrTcrUcrUaoVcAkcAlcAlcAlcAlcAlcAmcAlcAlcAlcAlcAlcAnaoVcrUcrVcrTccwcrWcrXccwcigcigcrYcigaafaafaafaafaafaafaafaafaafaafaafaafcswaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafaaaaaSaaaaaaaaaaafaaaaaaaaacrkaaaaaaaaaaafaaaaaaaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwcrZcsbcsaapQcAoaaHcsAaoVaoVaoVaoVcsAaoVaoVcsAaaHcAoaoVcsdcsfcseccwcsgcfKcigaafaaacsicshaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaacswaaaaaaaaacsDcsDcsDcsDcsDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafcrjcrjcrjcrjcrjaaacrkaaacrjcrjcrjcrjcrjaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwcrTcrUcsjaoVcApcAqaoVaoVaoVaoVaoVcsBaoVaoVaoVcAscAraoVcrUcrUcrTccwaagaagaagaafaaacsLcslcsocsncspcsncsocsncspcsncsocsncspcsncsMcsncsncsncsOcsNcsUcsTcsDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaacrBcrCcrCcrCcrCcrDcrkcrFcrEcrEcrEcrEcrGaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwcsscstcrUaoVcAoaaHaoVaoVapQapQapQapQapQaoVaoVaaHcAoaoVcrUcsvcsuccwaaaaaaaagaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaacswaagcsDcsDcsDcsVcsWcsVcsDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafcrScrScrScrScrSaaacrkaaacrScrScrScrScrSaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwccwcsxcrUaoVcAoaaHcsAapQapQcsHcsCcsIapQcsJaoVaaHcAoaoVcrUcsxccwccwaaaaaaaagaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafcswaagctacsXctactbctcctbcsDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaafaaaaaaaaacsEaaaaaaaaaaafaaaaaaaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcsFccwcsGcrUaoVcApcAqaoVaoVapQcsRcsQcAtapQaoVaoVcAscAraoVcrUcsKccwcsFaaaaaaaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagctdaagcsDctgcticthctcctjctiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafcrjcrjcrjcrjcrjaaacpiaaacrjcrjcrjcrjcrjaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwccwcsxcrUaoVcAoaaHaoVcsSapQctmctfczDapQapQcsAaaHcAoaoVcrUcsxccwccwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacswaagcuacuacuacuactoctkctqctpaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaacrBcrCcrCcrCcrCcsZcsYcsZcrEcrEcrEcrEcrGaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwcsvcsucrUaoVcAoaaHaoVaoVapQapQapQapQapQaoVaoVaaHcAoaoVcrUcsscstccwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacswaaaaaacuacuactrcttctscuacuacuacuacuaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafcrScrScrScrScrSaaacpiaaacrScrScrScrScrSaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwcrTcrUcteaoVcApcAqaoVaoVaoVapQaoVaoVaoVaoVaoVcAscAraoVcrUcrUcrTccwaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacswaaaaaacuactwctuctyctxctActzctFctEcuaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaaaaafaaaaafaaaaaacpiaaaaaaaafaaaaafaaaaaaaaSaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaccwctlcsbcsaapQcAoaaHcsAaoVaoVcsAaoVaoVaoVaoVcsAaaHcAoaoVcsdcsfctnccwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacswaaaaaacuactHctGctJctIcuyctKctMctLcuaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaSaaSaaSaaSaaSaafaafaaacpiaaaaafaafaaSaaSaaSabaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwctvcrUcrUaoVcAoaaHaaHcAuaaHaaHcAuaaHaaHcAuaaHaaHcAoaoVcrUcrUctvccwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafctOctNaafcuactQctPctTctSctVctUctXctWcuaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafctBaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwctvcrUctCaoVcAvcAlcAlcAwcAlcAlcAwcAlcAlcAwcAlcAlcAxaoVctDcrUctvccwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafctZctYctZctZcuccubcuecudcugcufcufcufcufaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaafaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacjZccwccwccwcrUapQapQapQapQaoVaoVaoVaoVaoVapQapQapQapQcrUccwccwccwcjZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactZctZcuhcuictZcujcujculcukcujcufcumcumcufcufaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaSaaSaaSaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaactvccwccwcigcigcigcigcigcigcigcigcigcigcigcigcigccwccwctvaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactZcuocuncuqcupcujcurcuucuscujcuvcuwcuwcuxcufaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaactvctvctvctvctRctvctvctvctvctvctvctvctRctvctvctvctvaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactZcuAcuzcuCcuBcuEcuDcuGcuFcuEcuHcuJcuIcuKcufaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaaaaaaaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaafaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactZcuMcuLcuOcuNcuQcuPcuScuRcuUcuTcuWcuVcuXcufaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactZctZcuYcuzcuZcujcvccvecvdcujcvgcvicvhcufcufaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcvkcvjcvmcvjcvkcvkcvocvncvkcvjcvqcvjcvkaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacutaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvkcvscvtcvjcvwcvucvzcvycvwcvjcvCcvBcvkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcvkcvDcvtcvjcvwcvucvzcvycvwcvjcvCcvEcvkaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvFcvkcvkcvtcvjcvGcvucvIcvHcvJcvjcvCcvkcvkcvKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcvkcvLcvjcvMcvucvzcvycvwcvjcvNcvkaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcvkcvQcvPcvScvRcvTcvycvVcvUcvWcvkaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcvkcvXcvjcvZcvYcvzcvycwacvjcvXcvkaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcvkcvXcvjcvGcwbcwccvycvJcvjcvXcvkaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcvkcvkcvXcvjcvwcvucvzcvycvwcvjcvXcvkcvkaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcvkcvXcvXcvjcvwcvucwdcvycvwcvjcvXcvXcvkaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvkcvXcvacvacvfcvacwfcwecvbcvacvacvXcvkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvkcvXcvacvacwhcwgcwjcwicwkcvacvacvXcvkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvkcvXcvacvacwmcwlcwocwncwpcvacvacvXcvkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvkcwqcvacvacwrcwrcwtcwscwrcvacvacwqcvkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvkcwqcvacvpcvpcvlcwucwncvpcvpcvacwqcvkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvacvacvacwvcwxcwwcwAcwzcwCcwBcvacvacvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvacvacvacvpcwjcwDcARcwEcwncvpcvacvacvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcvacvacvacvrcwucvvcAScvvcATcvrcvacvacvaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAUcvacvacvxcvlcAVcvvcvvcvvcAWcvlcvAcvacvacAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacwyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcvacvacvacvrcAZcAYcBacvvcvlcvrcvacvacvaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvacvacvacwvcvlcBbcBccvpcvlcwBcvacvacvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvacvacvacvpcvlcBdcBecvlcvlcvpcvacvacvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvacvacvacvacvacvacvacvacvacvacvacvacvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvacvacvacvacvacvacvacvacvacvacvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcvacvacvacvacvacvacvacvacvaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaacBfaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/cfg/admin.txt b/cfg/admin.txt
index 1f4c89d373b..236e1dee367 100644
--- a/cfg/admin.txt
+++ b/cfg/admin.txt
@@ -13,3 +13,4 @@ giacomand
rockdtben
MrStonedOne
Jordie0608
+Dunc
\ No newline at end of file
diff --git a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm
index 207c7d435cb..e54ac17b67b 100644
--- a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm
+++ b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm
@@ -97,10 +97,11 @@ Passive gate is similar to the regular pump except:
if(stat & (BROKEN|NOPOWER)) return
ui_interact(user)
-/obj/machinery/atmospherics/components/binary/passive_gate/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0)
- ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open)
+/obj/machinery/atmospherics/components/binary/passive_gate/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
+ datum/tgui/master_ui = null, datum/ui_state/state = default_state)
+ ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if (!ui)
- ui = new(user, src, ui_key, "atmos_pump", name, 335, 115)
+ ui = new(user, src, ui_key, "atmos_pump", name, 335, 115, master_ui, state)
ui.open()
/obj/machinery/atmospherics/components/binary/passive_gate/get_ui_data()
diff --git a/code/ATMOSPHERICS/components/binary_devices/pump.dm b/code/ATMOSPHERICS/components/binary_devices/pump.dm
index 90d7fff5d92..e29156be018 100644
--- a/code/ATMOSPHERICS/components/binary_devices/pump.dm
+++ b/code/ATMOSPHERICS/components/binary_devices/pump.dm
@@ -105,10 +105,11 @@ Thus, the two variables affect pump operation are set in New():
return
ui_interact(user)
-/obj/machinery/atmospherics/components/binary/pump/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0)
- ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open)
+/obj/machinery/atmospherics/components/binary/pump/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
+ datum/tgui/master_ui = null, datum/ui_state/state = default_state)
+ ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if (!ui)
- ui = new(user, src, ui_key, "atmos_pump", name, 335, 115)
+ ui = new(user, src, ui_key, "atmos_pump", name, 335, 115, master_ui, state)
ui.open()
/obj/machinery/atmospherics/components/binary/pump/get_ui_data()
diff --git a/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm b/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm
index 0d5dfd6d139..aa55bc1ce68 100644
--- a/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm
+++ b/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm
@@ -102,10 +102,11 @@ Thus, the two variables affect pump operation are set in New():
return
ui_interact(user)
-/obj/machinery/atmospherics/components/binary/volume_pump/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0)
- ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open)
+/obj/machinery/atmospherics/components/binary/volume_pump/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
+ datum/tgui/master_ui = null, datum/ui_state/state = default_state)
+ ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if (!ui)
- ui = new(user, src, ui_key, "atmos_pump", name, 310, 115)
+ ui = new(user, src, ui_key, "atmos_pump", name, 310, 115, master_ui, state)
ui.open()
/obj/machinery/atmospherics/components/binary/volume_pump/get_ui_data()
diff --git a/code/ATMOSPHERICS/components/trinary_devices/filter.dm b/code/ATMOSPHERICS/components/trinary_devices/filter.dm
index db33cde75e0..41b3cd295df 100644
--- a/code/ATMOSPHERICS/components/trinary_devices/filter.dm
+++ b/code/ATMOSPHERICS/components/trinary_devices/filter.dm
@@ -1,33 +1,19 @@
-#define FILTER_NOTHING -1
-#define FILTER_PLASMA 0
-#define FILTER_OXYGEN 1
-#define FILTER_NITROGEN 2
-#define FILTER_CARBONDIOXIDE 3
-#define FILTER_NITROUSOXIDE 4
+#define FILTER_NOTHING ""
+//very cleverly using the gas IDs so as to simplify a bunch of logic
+#define FILTER_PLASMA "plasma"
+#define FILTER_OXYGEN "o2"
+#define FILTER_NITROGEN "n2"
+#define FILTER_CARBONDIOXIDE "co2"
+#define FILTER_NITROUSOXIDE "n2o"
/obj/machinery/atmospherics/components/trinary/filter
+ name = "gas filter"
icon_state = "filter_off"
density = 0
-
- name = "gas filter"
-
can_unwrench = 1
-
var/on = 0
-
var/target_pressure = ONE_ATMOSPHERE
-
- var/filter_type = 0
-/*
-Filter types:
--1: Nothing
- 0: Plasma: Plasma Toxin, Oxygen Agent B
- 1: Oxygen: Oxygen ONLY
- 2: Nitrogen: Nitrogen ONLY
- 3: Carbon Dioxide: Carbon Dioxide ONLY
- 4: Sleeping Agent (N2O)
-*/
-
+ var/filter_type = FILTER_PLASMA
var/frequency = 0
var/datum/radio_frequency/radio_connection
@@ -108,39 +94,17 @@ Filter types:
var/datum/gas_mixture/filtered_out = new
filtered_out.temperature = removed.temperature
- switch(filter_type)
- if(FILTER_PLASMA)
- filtered_out.toxins = removed.toxins
- removed.toxins = 0
-
- if(removed.trace_gases.len>0)
- for(var/datum/gas/trace_gas in removed.trace_gases)
- if(istype(trace_gas, /datum/gas/oxygen_agent_b))
- removed.trace_gases -= trace_gas
- filtered_out.trace_gases += trace_gas
-
- if(FILTER_OXYGEN)
- filtered_out.oxygen = removed.oxygen
- removed.oxygen = 0
-
- if(FILTER_NITROGEN)
- filtered_out.nitrogen = removed.nitrogen
- removed.nitrogen = 0
-
- if(FILTER_CARBONDIOXIDE)
- filtered_out.carbon_dioxide = removed.carbon_dioxide
- removed.carbon_dioxide = 0
-
- if(FILTER_NITROUSOXIDE)
- if(removed.trace_gases.len>0)
- for(var/datum/gas/trace_gas in removed.trace_gases)
- if(istype(trace_gas, /datum/gas/sleeping_agent))
- removed.trace_gases -= trace_gas
- filtered_out.trace_gases += trace_gas
-
- else
- filtered_out = null
-
+ if(filter_type && removed.gases[filter_type])
+ filtered_out.assert_gas(filter_type)
+ filtered_out.gases[filter_type][MOLES] = removed.gases[filter_type][MOLES]
+ removed.gases[filter_type][MOLES] = 0
+ if(filter_type == FILTER_PLASMA && removed.gases["agent_b"])
+ filtered_out.assert_gas("agent_b")
+ filtered_out.gases["agent_b"][MOLES] = removed.gases["agent_b"][MOLES]
+ removed.gases["agent_b"][MOLES] = 0
+ removed.garbage_collect()
+ else
+ filtered_out = null
air2.merge(filtered_out)
air3.merge(removed)
@@ -166,10 +130,11 @@ Filter types:
return
ui_interact(user)
-/obj/machinery/atmospherics/components/trinary/filter/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0)
- ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open)
+/obj/machinery/atmospherics/components/trinary/filter/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
+ datum/tgui/master_ui = null, datum/ui_state/state = default_state)
+ ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if (!ui)
- ui = new(user, src, ui_key, "atmos_filter", name, 430, 140)
+ ui = new(user, src, ui_key, "atmos_filter", name, 430, 140, master_ui, state)
ui.open()
/obj/machinery/atmospherics/components/trinary/filter/get_ui_data()
@@ -186,7 +151,7 @@ Filter types:
switch(action)
if("power")
- on=!on
+ on = !on
investigate_log("was turned [on ? "on" : "off"] by [key_name(usr)]", "atmos")
if("pressure")
switch(params["pressure"])
@@ -196,7 +161,7 @@ Filter types:
target_pressure = max(0, min(MAX_OUTPUT_PRESSURE, safe_input("Pressure control", "Enter new output pressure (0-[MAX_OUTPUT_PRESSURE] kPa):", target_pressure)))
investigate_log("was set to [target_pressure] kPa by [key_name(usr)]", "atmos")
if("filter")
- src.filter_type = text2num(params["mode"])
+ filter_type = params["mode"]
var/filtering_name = "nothing"
switch(filter_type)
if(FILTER_PLASMA)
diff --git a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm
index d20cd9c2109..5e416123295 100644
--- a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm
+++ b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm
@@ -129,10 +129,11 @@
return
ui_interact(user)
-/obj/machinery/atmospherics/components/trinary/mixer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0)
- ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open)
+/obj/machinery/atmospherics/components/trinary/mixer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
+ datum/tgui/master_ui = null, datum/ui_state/state = default_state)
+ ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if (!ui)
- ui = new(user, src, ui_key, "atmos_mixer", name, 330, 165)
+ ui = new(user, src, ui_key, "atmos_mixer", name, 330, 165, master_ui, state)
ui.open()
/obj/machinery/atmospherics/components/trinary/mixer/get_ui_data()
diff --git a/code/ATMOSPHERICS/components/unary_devices/Freezer.dm b/code/ATMOSPHERICS/components/unary_devices/Freezer.dm
index a44d0221f63..c4feb4fc6eb 100644
--- a/code/ATMOSPHERICS/components/unary_devices/Freezer.dm
+++ b/code/ATMOSPHERICS/components/unary_devices/Freezer.dm
@@ -107,7 +107,7 @@
src.current_temperature = min(T20C, src.current_temperature+amount)
else
src.current_temperature = max(min_temperature, src.current_temperature+amount)
- active_power_usage = (current_heat_capacity * (T20C - current_temperature) / 100) + idle_power_usage
+
src.updateUsrDialog()
/obj/machinery/atmospherics/components/unary/cold_sink/freezer/process()
@@ -236,7 +236,7 @@
src.current_temperature = min((max_temperature), src.current_temperature+amount)
else
src.current_temperature = max(T20C, src.current_temperature+amount)
- active_power_usage = (current_heat_capacity * (current_temperature - T20C) / 100) + idle_power_usage
+
src.updateUsrDialog()
src.add_fingerprint(usr)
return
diff --git a/code/ATMOSPHERICS/components/unary_devices/cold_sink.dm b/code/ATMOSPHERICS/components/unary_devices/cold_sink.dm
index 65419798bfd..2fa1d39d472 100644
--- a/code/ATMOSPHERICS/components/unary_devices/cold_sink.dm
+++ b/code/ATMOSPHERICS/components/unary_devices/cold_sink.dm
@@ -23,6 +23,7 @@
else
icon_state = "cold_on"
+//Nearly Identical Proc: /obj/machinery/atmospherics/components/unary/heat_reservoir/process_atmos()
/obj/machinery/atmospherics/components/unary/cold_sink/process_atmos()
..()
if(!on)
@@ -34,10 +35,20 @@
var/old_temperature = air_contents.temperature
if(combined_heat_capacity > 0)
- var/combined_energy = current_temperature*current_heat_capacity + air_heat_capacity*air_contents.temperature
+ //current_tempature is target tempature
+ var/combined_energy = current_heat_capacity*current_temperature + air_heat_capacity*air_contents.temperature
air_contents.temperature = combined_energy/combined_heat_capacity
- //todo: have current temperature affected. require power to bring down current temperature again
- if(abs(old_temperature-air_contents.temperature) > 1)
+
+ var/temperatureChange=abs(old_temperature-air_contents.temperature)
+ if(temperatureChange > 1)
+ //The new formula is based on change from current temp, instead of change from T20C
+ // The 10 const is not scaled yet.
+ active_power_usage = (current_heat_capacity * temperatureChange ) / 10 + idle_power_usage
+ //Note: Powerusage won't be subtracted off till next tick but one tick of not being accurate before machine turns off is fine
update_parents()
+ else
+ //No change in temp, use idle power
+ active_power_usage= idle_power_usage
+
return 1
diff --git a/code/ATMOSPHERICS/components/unary_devices/cryo.dm b/code/ATMOSPHERICS/components/unary_devices/cryo.dm
index a3697d2ac3c..4bb78933cc6 100644
--- a/code/ATMOSPHERICS/components/unary_devices/cryo.dm
+++ b/code/ATMOSPHERICS/components/unary_devices/cryo.dm
@@ -110,10 +110,11 @@
return
ui_interact(user)
-/obj/machinery/atmospherics/components/unary/cryo_cell/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0)
- ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open)
+/obj/machinery/atmospherics/components/unary/cryo_cell/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
+ datum/tgui/master_ui = null, datum/ui_state/state = notcontained_state)
+ ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if (!ui)
- ui = new(user, src, ui_key, "cryo", name, 400, 550, state = notcontained_state)
+ ui = new(user, src, ui_key, "cryo", name, 400, 550, master_ui, state)
ui.open()
/obj/machinery/atmospherics/components/unary/cryo_cell/get_ui_data()
@@ -265,7 +266,7 @@
if(occupant.bodytemperature < T0C)
occupant.sleeping = max(5 / efficiency, (1 / occupant.bodytemperature) * 2000 / efficiency)
occupant.Paralyse(max(5 / efficiency, (1 / occupant.bodytemperature) * 3000 / efficiency))
- if(air_contents.oxygen > 2)
+ if(air_contents.gases["o2"] && air_contents.gases["o2"][MOLES] > 2)
if(occupant.getOxyLoss()) occupant.adjustOxyLoss(-1)
else
occupant.adjustOxyLoss(-1)
diff --git a/code/ATMOSPHERICS/components/unary_devices/heat_source.dm b/code/ATMOSPHERICS/components/unary_devices/heat_source.dm
index b08a4a214a7..b5fc8164279 100644
--- a/code/ATMOSPHERICS/components/unary_devices/heat_source.dm
+++ b/code/ATMOSPHERICS/components/unary_devices/heat_source.dm
@@ -24,6 +24,7 @@
else
icon_state = "cold_on"
+//Nearly Identical Proc: /obj/machinery/atmospherics/components/unary/cold_sink/process_atmos()
/obj/machinery/atmospherics/components/unary/heat_reservoir/process_atmos()
..()
if(!on)
@@ -39,8 +40,15 @@
var/combined_energy = current_temperature*current_heat_capacity + air_heat_capacity*air_contents.temperature
air_contents.temperature = combined_energy/combined_heat_capacity
- //todo: have current temperature affected. require power to bring up current temperature again
- if(abs(old_temperature-air_contents.temperature) > 1)
+
+ var/temperatureChange=abs(old_temperature-air_contents.temperature)
+
+ if(temperatureChange > 1)
+ active_power_usage = (current_heat_capacity * temperatureChange ) / 10 + idle_power_usage
update_parents()
+ else
+ //No change in temp, use idle power
+ active_power_usage= idle_power_usage
+
return 1
diff --git a/code/ATMOSPHERICS/components/unary_devices/oxygen_generator.dm b/code/ATMOSPHERICS/components/unary_devices/oxygen_generator.dm
index 0c0bee0b275..55215da0753 100644
--- a/code/ATMOSPHERICS/components/unary_devices/oxygen_generator.dm
+++ b/code/ATMOSPHERICS/components/unary_devices/oxygen_generator.dm
@@ -46,7 +46,8 @@
var/added_oxygen = oxygen_content - total_moles
air_contents.temperature = (current_heat_capacity*air_contents.temperature + 20*added_oxygen*T0C)/(current_heat_capacity+20*added_oxygen)
- air_contents.oxygen += added_oxygen
+ air_contents.assert_gas("o2")
+ air_contents.gases["o2"][MOLES] += added_oxygen
update_parents()
diff --git a/code/ATMOSPHERICS/components/unary_devices/portables_connector.dm b/code/ATMOSPHERICS/components/unary_devices/portables_connector.dm
index d9e649c7a13..e4b9622b481 100644
--- a/code/ATMOSPHERICS/components/unary_devices/portables_connector.dm
+++ b/code/ATMOSPHERICS/components/unary_devices/portables_connector.dm
@@ -8,6 +8,12 @@
use_power = 0
level = 0
+/obj/machinery/atmospherics/components/unary/portables_connector/New()
+ ..()
+ var/datum/gas_mixture/air_contents = AIR1
+
+ air_contents.volume = 0
+
/obj/machinery/atmospherics/components/unary/portables_connector/visible
level = 2
diff --git a/code/ATMOSPHERICS/components/unary_devices/tank.dm b/code/ATMOSPHERICS/components/unary_devices/tank.dm
index 44ab5048460..dfff3ced12f 100644
--- a/code/ATMOSPHERICS/components/unary_devices/tank.dm
+++ b/code/ATMOSPHERICS/components/unary_devices/tank.dm
@@ -6,58 +6,36 @@
desc = "A large vessel containing pressurized gas."
var/volume = 10000 //in liters, 1 meters by 1 meters by 2 meters
density = 1
+ var/gas_type = 0
/obj/machinery/atmospherics/components/unary/tank/New()
..()
var/datum/gas_mixture/air_contents = AIR1
air_contents.volume = volume
air_contents.temperature = T20C
+ if(gas_type)
+ air_contents.assert_gas(gas_type)
+ air_contents.gases[gas_type][MOLES] = AIR_CONTENTS
+ name = "[name] ([air_contents.gases[gas_type][GAS_NAME]])"
/obj/machinery/atmospherics/components/unary/tank/carbon_dioxide
- name = "pressure tank (Carbon Dioxide)"
-
-/obj/machinery/atmospherics/components/unary/tank/carbon_dioxide/New()
- ..()
- var/datum/gas_mixture/air_contents = AIR1
- air_contents.carbon_dioxide = AIR_CONTENTS
+ gas_type = "co2"
/obj/machinery/atmospherics/components/unary/tank/toxins
icon_state = "orange"
- name = "pressure tank (Plasma)"
-
-/obj/machinery/atmospherics/components/unary/tank/toxins/New()
- ..()
- var/datum/gas_mixture/air_contents = AIR1
- air_contents.toxins = AIR_CONTENTS
+ gas_type = "plasma"
/obj/machinery/atmospherics/components/unary/tank/oxygen_agent_b
icon_state = "orange_2"
- name = "pressure tank (Oxygen + Plasma)"
-
-/obj/machinery/atmospherics/components/unary/tank/oxygen_agent_b/New()
- ..()
- var/datum/gas_mixture/air_contents = AIR1
- var/datum/gas/oxygen_agent_b/trace_gas = new
- trace_gas.moles = AIR_CONTENTS
- air_contents.trace_gases += trace_gas
+ gas_type = "agent_b"
/obj/machinery/atmospherics/components/unary/tank/oxygen
icon_state = "blue"
- name = "pressure tank (Oxygen)"
-
-/obj/machinery/atmospherics/components/unary/tank/oxygen/New()
- ..()
- var/datum/gas_mixture/air_contents = AIR1
- air_contents.oxygen = AIR_CONTENTS
+ gas_type = "o2"
/obj/machinery/atmospherics/components/unary/tank/nitrogen
icon_state = "red"
- name = "pressure tank (Nitrogen)"
-
-/obj/machinery/atmospherics/components/unary/tank/nitrogen/New()
- ..()
- var/datum/gas_mixture/air_contents = AIR1
- air_contents.nitrogen = AIR_CONTENTS
+ gas_type = "n2"
/obj/machinery/atmospherics/components/unary/tank/air
icon_state = "grey"
@@ -66,5 +44,6 @@
/obj/machinery/atmospherics/components/unary/tank/air/New()
..()
var/datum/gas_mixture/air_contents = AIR1
- air_contents.oxygen = AIR_CONTENTS * 0.2
- air_contents.nitrogen = AIR_CONTENTS * 0.8
\ No newline at end of file
+ air_contents.assert_gases("o2", "n2")
+ air_contents.gases["o2"][MOLES] = AIR_CONTENTS * 0.2
+ air_contents.gases["n2"][MOLES] = AIR_CONTENTS * 0.8
\ No newline at end of file
diff --git a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm
index 2aa4dc062fd..809f9da7a0f 100644
--- a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm
+++ b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm
@@ -277,7 +277,7 @@
welded = 0
update_icon()
pipe_vision_img = image(src, loc, layer = 20, dir = dir)
- return 1
+ return 0
else
return ..()
diff --git a/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm
index 65bdcf2c5e8..548db3f41d6 100644
--- a/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm
+++ b/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm
@@ -162,40 +162,56 @@
/obj/machinery/atmospherics/components/unary/vent_scrubber/proc/scrub(var/turf/simulated/tile)
- if (!tile || !istype(tile))
+ if (!istype(tile))
return 0
var/datum/gas_mixture/environment = tile.return_air()
var/datum/gas_mixture/air_contents = AIR1
+ var/list/env_gases = environment.gases
if(scrubbing & SCRUBBING)
- if((environment.toxins>0) || (environment.carbon_dioxide>0) || (environment.trace_gases.len>0))
+ var/should_we_scrub = FALSE
+ for(var/id in env_gases)
+ if(id == "n2" || id == "o2")
+ continue
+ if(env_gases[id][MOLES])
+ should_we_scrub = TRUE
+ break
+ if(should_we_scrub)
var/transfer_moles = min(1, volume_rate/environment.volume)*environment.total_moles()
//Take a gas sample
var/datum/gas_mixture/removed = tile.remove_air(transfer_moles)
+ var/list/removed_gases = removed.gases
if (isnull(removed)) //in space
return
//Filter it
var/datum/gas_mixture/filtered_out = new
+ var/list/filtered_gases = filtered_out.gases
filtered_out.temperature = removed.temperature
- if(scrub_Toxins)
- filtered_out.toxins = removed.toxins
- removed.toxins = 0
- if(scrub_CO2)
- filtered_out.carbon_dioxide = removed.carbon_dioxide
- removed.carbon_dioxide = 0
- if(removed.trace_gases.len>0)
- for(var/datum/gas/trace_gas in removed.trace_gases)
- if(istype(trace_gas, /datum/gas/oxygen_agent_b))
- removed.trace_gases -= trace_gas
- filtered_out.trace_gases += trace_gas
- else if(istype(trace_gas, /datum/gas/sleeping_agent) && scrub_N2O)
- removed.trace_gases -= trace_gas
- filtered_out.trace_gases += trace_gas
+ if(scrub_Toxins && removed_gases["plasma"])
+ filtered_out.assert_gas("plasma")
+ filtered_gases["plasma"][MOLES] = removed_gases["plasma"][MOLES]
+ removed.gases["plasma"][MOLES] = 0
+ if(scrub_CO2 && removed_gases["co2"])
+ filtered_out.assert_gas("co2")
+ filtered_out.gases["co2"][MOLES] = removed_gases["co2"][MOLES]
+ removed.gases["co2"][MOLES] = 0
+
+ if(removed_gases["agent_b"])
+ filtered_out.assert_gas("agent_b")
+ filtered_out.gases["agent_b"][MOLES] = removed_gases["agent_b"][MOLES]
+ removed.gases["agent_b"][MOLES] = 0
+
+ if(scrub_N2O && removed_gases["n2o"])
+ filtered_out.assert_gas("n2o")
+ filtered_out.gases["n2o"][MOLES] = removed_gases["n2o"][MOLES]
+ removed.gases["n2o"][MOLES] = 0
+
+ removed.garbage_collect()
//Remix the resulting gases
air_contents.merge(filtered_out)
@@ -309,7 +325,7 @@
welded = 0
update_icon()
pipe_vision_img = image(src, loc, layer = 20, dir = dir)
- return 1
+ return 0
if (!istype(W, /obj/item/weapon/wrench))
return ..()
if (!(stat & NOPOWER) && on)
@@ -321,4 +337,4 @@
return !welded
#undef SIPHONING
-#undef SCRUBBING
\ No newline at end of file
+#undef SCRUBBING
diff --git a/code/ATMOSPHERICS/datum_pipeline.dm b/code/ATMOSPHERICS/datum_pipeline.dm
index b4547824db6..6c765cd1c11 100644
--- a/code/ATMOSPHERICS/datum_pipeline.dm
+++ b/code/ATMOSPHERICS/datum_pipeline.dm
@@ -24,8 +24,7 @@
if(update)
update = 0
reconcile_air()
-
- return
+ update = air.react()
var/pipenetwarnings = 10
@@ -130,21 +129,14 @@ var/pipenetwarnings = 10
for(var/obj/machinery/atmospherics/pipe/member in members)
member.air_temporary = new
member.air_temporary.volume = member.volume
+ member.air_temporary.copy_from(air)
+ var/member_gases = member.air_temporary.gases
- member.air_temporary.oxygen = air.oxygen*member.volume/air.volume
- member.air_temporary.nitrogen = air.nitrogen*member.volume/air.volume
- member.air_temporary.toxins = air.toxins*member.volume/air.volume
- member.air_temporary.carbon_dioxide = air.carbon_dioxide*member.volume/air.volume
+ for(var/id in member_gases)
+ member_gases[id][MOLES] *= member.volume/air.volume
member.air_temporary.temperature = air.temperature
- if(air.trace_gases.len)
- for(var/datum/gas/trace_gas in air.trace_gases)
- var/datum/gas/corresponding = new trace_gas.type()
- member.air_temporary.trace_gases += corresponding
-
- corresponding.moles = trace_gas.moles*member.volume/air.volume
-
/datum/pipeline/proc/temperature_interact(turf/target, share_volume, thermal_conductivity)
var/total_heat_capacity = air.heat_capacity()
var/partial_heat_capacity = total_heat_capacity*(share_volume/air.volume)
@@ -203,8 +195,8 @@ var/pipenetwarnings = 10
var/list/datum/pipeline/PL = list()
PL += src
- for(var/i=1;i<=PL.len;i++)
- var/datum/pipeline/P = PL[i]
+ for(var/i in PL)
+ var/datum/pipeline/P = i
GL += P.air
GL += P.other_airs
for(var/obj/machinery/atmospherics/components/binary/valve/V in P.other_atmosmch)
@@ -215,56 +207,26 @@ var/pipenetwarnings = 10
if(C.connected_device)
GL += C.portableConnectorReturnAir()
- var/total_volume = 0
var/total_thermal_energy = 0
var/total_heat_capacity = 0
- var/total_oxygen = 0
- var/total_nitrogen = 0
- var/total_toxins = 0
- var/total_carbon_dioxide = 0
- var/list/total_trace_gases = list()
+ var/datum/gas_mixture/total_gas_mixture = new(0)
+
+ for(var/i in GL)
+ var/datum/gas_mixture/G = i
+ total_gas_mixture.volume += G.volume
+
+ total_gas_mixture.merge(G)
- for(var/datum/gas_mixture/G in GL)
- total_volume += G.volume
total_thermal_energy += G.thermal_energy()
total_heat_capacity += G.heat_capacity()
- total_oxygen += G.oxygen
- total_nitrogen += G.nitrogen
- total_toxins += G.toxins
- total_carbon_dioxide += G.carbon_dioxide
-
- if(G.trace_gases.len)
- for(var/datum/gas/trace_gas in G.trace_gases)
- var/datum/gas/corresponding = locate(trace_gas.type) in total_trace_gases
- if(!corresponding)
- corresponding = new trace_gas.type()
- total_trace_gases += corresponding
-
- corresponding.moles += trace_gas.moles
-
- if(total_volume > 0)
-
- //Calculate temperature
- var/temperature = 0
-
- if(total_heat_capacity > 0)
- temperature = total_thermal_energy/total_heat_capacity
+ total_gas_mixture.temperature = total_heat_capacity ? total_thermal_energy/total_heat_capacity : 0
+ if(total_gas_mixture.volume > 0)
//Update individual gas_mixtures by volume ratio
for(var/datum/gas_mixture/G in GL)
- G.oxygen = total_oxygen*G.volume/total_volume
- G.nitrogen = total_nitrogen*G.volume/total_volume
- G.toxins = total_toxins*G.volume/total_volume
- G.carbon_dioxide = total_carbon_dioxide*G.volume/total_volume
+ G.copy_from(total_gas_mixture)
+ var/list/G_gases = G.gases
+ for(var/id in G_gases)
+ G_gases[id][MOLES] *= G.volume/total_gas_mixture.volume
- G.temperature = temperature
-
- if(total_trace_gases.len)
- for(var/datum/gas/trace_gas in total_trace_gases)
- var/datum/gas/corresponding = locate(trace_gas.type) in G.trace_gases
- if(!corresponding)
- corresponding = new trace_gas.type()
- G.trace_gases += corresponding
-
- corresponding.moles = trace_gas.moles*G.volume/total_volume
\ No newline at end of file
diff --git a/code/ATMOSPHERICS/gas_types.dm b/code/ATMOSPHERICS/gas_types.dm
new file mode 100644
index 00000000000..0fd17097415
--- /dev/null
+++ b/code/ATMOSPHERICS/gas_types.dm
@@ -0,0 +1,81 @@
+var/list/hardcoded_gases = list("o2","n2","co2","plasma") //the main four gases, which were at one time hardcoded
+
+/proc/meta_gas_list()
+ var/meta_list = new /list
+ for(var/gas_path in subtypesof(/datum/gas))
+ var/list/gas_info = new(4)
+ var/datum/gas/g = gas_path
+
+ gas_info[1] = initial(g.specific_heat)
+ gas_info[2] = initial(g.name)
+ gas_info[3] = initial(g.moles_visible)
+ if(gas_info[3] != null)
+ gas_info[4] = new /obj/effect/overlay/gas(initial(g.gas_overlay))
+
+ meta_list[initial(g.id)] = gas_info
+ . = meta_list
+
+/*||||||||||||||/----------\||||||||||||||*\
+||||||||||||||||[GAS DATUMS]||||||||||||||||
+||||||||||||||||\__________/||||||||||||||||
+||||These should never be instantiated. ||||
+||||They exist only to make it easier ||||
+||||to add a new gas. They are accessed ||||
+||||only by meta_gas_list(). ||||
+\*||||||||||||||||||||||||||||||||||||||||*/
+
+/datum/gas
+ var/id = ""
+ var/specific_heat = 0
+ var/name = ""
+ var/gas_overlay = "" //icon_state in icons/effects/tile_effects.dmi
+ var/moles_visible = null
+
+/datum/gas/oxygen
+ id = "o2"
+ specific_heat = 20
+ name = "Oxygen"
+
+/datum/gas/nitrogen
+ id = "n2"
+ specific_heat = 20
+ name = "Nitrogen"
+
+/datum/gas/carbon_dioxide //what the fuck is this?
+ id = "co2"
+ specific_heat = 30
+ name = "Carbon Dioxide"
+
+/datum/gas/plasma
+ id = "plasma"
+ specific_heat = 200
+ name = "Plasma"
+ gas_overlay = "plasma"
+ moles_visible = MOLES_PLASMA_VISIBLE
+
+/datum/gas/nitrous_oxide
+ id = "n2o"
+ specific_heat = 40
+ name = "Nitrous Oxide"
+ gas_overlay = "nitrous_oxide"
+ moles_visible = 1
+
+/datum/gas/oxygen_agent_b
+ id = "agent_b"
+ specific_heat = 300
+ name = "Oxygen Agent B"
+
+/datum/gas/volatile_fuel
+ id = "v_fuel"
+ specific_heat = 30
+ name = "Volatile Fuel"
+
+/obj/effect/overlay/gas/
+ icon = 'icons/effects/tile_effects.dmi'
+ mouse_opacity = 0
+ layer = 5
+ appearance_flags = RESET_COLOR
+
+/obj/effect/overlay/gas/New(state)
+ . = ..()
+ icon_state = state
\ No newline at end of file
diff --git a/code/LINDA/LINDA_fire.dm b/code/LINDA/LINDA_fire.dm
index 00d16589414..52ea8059ee0 100644
--- a/code/LINDA/LINDA_fire.dm
+++ b/code/LINDA/LINDA_fire.dm
@@ -11,9 +11,13 @@
var/datum/gas_mixture/air_contents = return_air()
if(!air_contents)
return 0
+
+ var/oxy = air_contents.gases["o2"] ? air_contents.gases["o2"][MOLES] : 0
+ var/tox = air_contents.gases["plasma"] ? air_contents.gases["plasma"][MOLES] : 0
+
if(active_hotspot)
if(soh)
- if(air_contents.toxins > 0.5 && air_contents.oxygen > 0.5)
+ if(tox > 0.5 && oxy > 0.5)
if(active_hotspot.temperature < exposed_temperature)
active_hotspot.temperature = exposed_temperature
if(active_hotspot.volume < exposed_volume)
@@ -22,11 +26,11 @@
var/igniting = 0
- if((exposed_temperature > PLASMA_MINIMUM_BURN_TEMPERATURE) && air_contents.toxins > 0.5)
+ if((exposed_temperature > PLASMA_MINIMUM_BURN_TEMPERATURE) && tox > 0.5)
igniting = 1
if(igniting)
- if(air_contents.oxygen < 0.5 || air_contents.toxins < 0.5)
+ if(oxy < 0.5 || tox < 0.5)
return 0
active_hotspot = PoolOrNew(/obj/effect/hotspot, src)
@@ -104,7 +108,7 @@
qdel(src)
return
- if(!(location.air) || location.air.toxins < 0.5 || location.air.oxygen < 0.5)
+ if(!(location.air) || !location.air.gases["plasma"] || !location.air.gases["o2"] || location.air.gases["plasma"][MOLES] < 0.5 || location.air.gases["o2"][MOLES] < 0.5)
qdel(src)
return
diff --git a/code/LINDA/LINDA_system.dm b/code/LINDA/LINDA_system.dm
index e1904d8973b..a3a972aba68 100644
--- a/code/LINDA/LINDA_system.dm
+++ b/code/LINDA/LINDA_system.dm
@@ -155,6 +155,7 @@ var/const/SPAWN_AIR = 256
return
var/datum/gas_mixture/G = new
+ var/list/new_gases = G.gases
if(flag & SPAWN_20C)
G.temperature = T20C
@@ -163,22 +164,29 @@ var/const/SPAWN_AIR = 256
G.temperature += 1000
if(flag & SPAWN_TOXINS)
- G.toxins += amount
+ G.assert_gas("plasma")
+ new_gases["plasma"][MOLES] += amount
+
if(flag & SPAWN_OXYGEN)
- G.oxygen += amount
+ G.assert_gas("o2")
+ new_gases["o2"][MOLES] += amount
+
if(flag & SPAWN_CO2)
- G.carbon_dioxide += amount
+ G.assert_gas("co2")
+ new_gases["co2"][MOLES] += amount
+
if(flag & SPAWN_NITROGEN)
- G.nitrogen += amount
+ G.assert_gas("n2")
+ new_gases["n2"][MOLES] += amount
if(flag & SPAWN_N2O)
- var/datum/gas/sleeping_agent/T = new
- T.moles += amount
- G.trace_gases += T
+ G.assert_gas("n2o")
+ new_gases["n2o"][MOLES] += amount
if(flag & SPAWN_AIR)
- G.oxygen += MOLES_O2STANDARD * amount
- G.nitrogen += MOLES_N2STANDARD * amount
+ G.assert_gases("o2","n2")
+ new_gases["o2"][MOLES] += MOLES_O2STANDARD * amount
+ new_gases["n2"][MOLES] += MOLES_N2STANDARD * amount
air.merge(G)
SSair.add_to_active(src, 0)
\ No newline at end of file
diff --git a/code/LINDA/LINDA_turf_tile.dm b/code/LINDA/LINDA_turf_tile.dm
index 2ad06711b10..fdada2d153d 100644
--- a/code/LINDA/LINDA_turf_tile.dm
+++ b/code/LINDA/LINDA_turf_tile.dm
@@ -15,26 +15,14 @@
//Create gas mixture to hold data for passing
var/datum/gas_mixture/GM = new
- GM.oxygen = oxygen
- GM.carbon_dioxide = carbon_dioxide
- GM.nitrogen = nitrogen
- GM.toxins = toxins
-
- GM.temperature = temperature
+ GM.copy_from_turf(src)
return GM
-/turf/remove_air(amount as num)
- var/datum/gas_mixture/GM = new
+/turf/remove_air(amount)
+ var/datum/gas_mixture/GM = return_air()
- var/sum = oxygen + carbon_dioxide + nitrogen + toxins
- if(sum>0)
- GM.oxygen = (oxygen/sum)*amount
- GM.carbon_dioxide = (carbon_dioxide/sum)*amount
- GM.nitrogen = (nitrogen/sum)*amount
- GM.toxins = (toxins/sum)*amount
-
- GM.temperature = temperature
+ GM.remove(amount)
return GM
@@ -51,7 +39,7 @@
var/temperature_archived //USED ONLY FOR SOLIDS
- var/atmos_overlay_type = "" //current active overlay
+ var/atmos_overlay_types = list() //gas IDs of current active overlays
/turf/simulated/New()
..()
@@ -61,11 +49,7 @@
visibilityChanged()
if(!blocks_air)
air = new
- air.oxygen = oxygen
- air.carbon_dioxide = carbon_dioxide
- air.nitrogen = nitrogen
- air.toxins = toxins
- air.temperature = temperature
+ air.copy_from_turf(src)
/turf/simulated/Destroy()
visibilityChanged()
@@ -168,22 +152,22 @@
excited_group.merge_groups(enemy_simulated.excited_group) //combine groups
share_air(enemy_simulated) //share
else
- if((recently_active == 1 && enemy_simulated.recently_active == 1) || !air.compare(enemy_simulated.air))
+ if((recently_active == 1 && enemy_simulated.recently_active == 1) || air.compare(enemy_simulated.air))
excited_group.add_turf(enemy_simulated) //add enemy to our group
share_air(enemy_simulated) //share
else
if(enemy_simulated.excited_group)
- if((recently_active == 1 && enemy_simulated.recently_active == 1) || !air.compare(enemy_simulated.air))
+ if((recently_active == 1 && enemy_simulated.recently_active == 1) || air.compare(enemy_simulated.air))
enemy_simulated.excited_group.add_turf(src) //join self to enemy group
share_air(enemy_simulated) //share
else
- if((recently_active == 1 && enemy_simulated.recently_active == 1) || !air.compare(enemy_simulated.air))
+ if((recently_active == 1 && enemy_simulated.recently_active == 1) || air.compare(enemy_simulated.air))
var/datum/excited_group/EG = new //generate new group
EG.add_turf(src)
EG.add_turf(enemy_simulated)
share_air(enemy_simulated) //share
else
- if(!air.compare(enemy_simulated.air)) //compare if
+ if(air.compare(enemy_simulated.air)) //compare if
SSair.add_to_active(enemy_simulated) //excite enemy
if(excited_group)
excited_group.add_turf(enemy_simulated) //add enemy to group
@@ -233,34 +217,24 @@
archived_cycle = SSair.times_fired
/turf/simulated/proc/update_visuals()
- var/new_overlay_type = tile_graphic()
- if (new_overlay_type == atmos_overlay_type)
- return
- var/atmos_overlay = get_atmos_overlay_by_name(atmos_overlay_type)
- if (atmos_overlay)
- overlays -= atmos_overlay
+ var/list/new_overlay_types = tile_graphic()
- atmos_overlay = get_atmos_overlay_by_name(new_overlay_type)
- if (atmos_overlay)
- overlays += atmos_overlay
- atmos_overlay_type = new_overlay_type
+ for(var/overlay in atmos_overlay_types-new_overlay_types) //doesn't remove overlays that would only be added
+ overlays -= overlay
+ atmos_overlay_types -= overlay
-/turf/simulated/proc/get_atmos_overlay_by_name(var/name)
- switch(name)
- if("plasma")
- return SSair.plasma_overlay
- if("sleeping_agent")
- return SSair.sleeptoxin_overlay
- return null
+ for(var/overlay in new_overlay_types-atmos_overlay_types) //doesn't add overlays that already exist
+ overlays += overlay
+
+ atmos_overlay_types = new_overlay_types
/turf/simulated/proc/tile_graphic()
- if(air.toxins > MOLES_PLASMA_VISIBLE)
- return "plasma"
-
- var/datum/gas/sleeping_agent = locate(/datum/gas/sleeping_agent) in air.trace_gases
- if(sleeping_agent && (sleeping_agent.moles > 1))
- return "sleeping_agent"
- return null
+ . = new /list
+ var/list/gases = air.gases
+ for(var/id in gases)
+ var/gas = gases[id]
+ if(gas[GAS_OVERLAY] && gas[MOLES] > gas[MOLES_VISIBLE])
+ . += gas[GAS_OVERLAY]
/turf/simulated/proc/share_air(turf/simulated/T)
if(T.current_cycle < current_cycle)
@@ -290,12 +264,16 @@
/atom/movable/var/pressure_resistance = 5
-
+/atom/movable/var/last_high_pressure_movement_air_cycle = 0
/atom/movable/proc/experience_pressure_difference(pressure_difference, direction)
+ set waitfor = 0
+ . = 0
if(!anchored && !pulledby)
- if(pressure_difference > pressure_resistance)
- spawn step(src, direction)
- return 1
+ . = 1
+ if(pressure_difference > pressure_resistance && last_high_pressure_movement_air_cycle < SSair.times_fired)
+ last_high_pressure_movement_air_cycle = SSair.times_fired
+ step(src, direction)
+
@@ -331,36 +309,17 @@
/datum/excited_group/proc/self_breakdown()
var/datum/gas_mixture/A = new
- var/datum/gas/sleeping_agent/S = new
- A.trace_gases += S
+ var/list/A_gases = A.gases
for(var/turf/simulated/T in turf_list)
- A.oxygen += T.air.oxygen
- A.carbon_dioxide+= T.air.carbon_dioxide
- A.nitrogen += T.air.nitrogen
- A.toxins += T.air.toxins
-
- if(T.air.trace_gases.len)
- for(var/datum/gas/N in T.air.trace_gases)
- S.moles += N.moles
+ A.merge(T.air)
for(var/turf/simulated/T in turf_list)
- T.air.oxygen = A.oxygen/turf_list.len
- T.air.carbon_dioxide= A.carbon_dioxide/turf_list.len
- T.air.nitrogen = A.nitrogen/turf_list.len
- T.air.toxins = A.toxins/turf_list.len
-
- if(S.moles > 0)
- if(T.air.trace_gases.len)
- for(var/datum/gas/G in T.air.trace_gases)
- G.moles = S.moles/turf_list.len
- else
- var/datum/gas/sleeping_agent/G = new
- G.moles = S.moles/turf_list.len
- T.air.trace_gases += G
+ var/T_gases = T.air.gases
+ for(var/id in T_gases)
+ T_gases[id][MOLES] = A_gases[id][MOLES]/turf_list.len
T.update_visuals()
-
/datum/excited_group/proc/dismantle()
for(var/turf/simulated/T in turf_list)
T.excited = 0
@@ -473,4 +432,4 @@
var/heat = thermal_conductivity*delta_temperature* \
(heat_capacity*700000/(heat_capacity+700000)) //700000 is the heat_capacity from a space turf, hardcoded here
- temperature -= heat/heat_capacity
\ No newline at end of file
+ temperature -= heat/heat_capacity
diff --git a/code/__DEFINES/atmospherics.dm b/code/__DEFINES/atmospherics.dm
index 2701a64da59..8d410ef0764 100644
--- a/code/__DEFINES/atmospherics.dm
+++ b/code/__DEFINES/atmospherics.dm
@@ -8,11 +8,15 @@
#define MOLES_O2STANDARD (MOLES_CELLSTANDARD*O2STANDARD) // O2 standard value (21%)
#define MOLES_N2STANDARD (MOLES_CELLSTANDARD*N2STANDARD) // N2 standard value (79%)
-#define GAS_O2 (1 << 0)
-#define GAS_N2 (1 << 1)
-#define GAS_PL (1 << 2)
-#define GAS_CO2 (1 << 3)
-#define GAS_N2O (1 << 4)
+//indices of values in gas lists. used by listmos.
+#define MOLES 1
+#define ARCHIVE 2
+#define GAS_META 3
+//this is kinda hacky... but it means I don't have to change every single time they're called.
+#define SPECIFIC_HEAT GAS_META][1
+#define GAS_NAME GAS_META][2
+#define GAS_OVERLAY GAS_META][4
+#define MOLES_VISIBLE GAS_META][3
//stuff you should probably leave well alone!
//ATMOS
@@ -152,3 +156,8 @@
#define PARENT2 parents[2]
#define PARENT3 parents[3]
#define PARENT_I parents[I]
+
+//Tanks
+#define TANK_MAX_RELEASE_PRESSURE (ONE_ATMOSPHERE*3)
+#define TANK_MIN_RELEASE_PRESSURE 0
+#define TANK_DEFAULT_RELEASE_PRESSURE 16
diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm
index 0116232841a..7959272566d 100644
--- a/code/__HELPERS/mobs.dm
+++ b/code/__HELPERS/mobs.dm
@@ -127,15 +127,21 @@ Proc for attack log creation, because really why not
/proc/add_logs(mob/user, mob/target, what_done, object=null, addition=null)
var/newhealthtxt = ""
+ var/coordinates = ""
var/turf/attack_location = get_turf(target)
- var/coordinates = "([attack_location.x],[attack_location.y],[attack_location.z])"
- if (target && isliving(target))
+ if(attack_location)
+ coordinates = "([attack_location.x],[attack_location.y],[attack_location.z])"
+ if(target && isliving(target))
var/mob/living/L = target
newhealthtxt = " (NEWHP: [L.health])"
if(user && ismob(user))
user.attack_log += text("\[[time_stamp()]\] Has [what_done] [target ? "[target.name][(ismob(target) && target.ckey) ? "([target.ckey])" : ""]" : "NON-EXISTANT SUBJECT"][object ? " with [object]" : " "][addition][newhealthtxt][coordinates]")
+ if(user.mind)
+ user.mind.attack_log += text("\[[time_stamp()]\] [user ? "[user.name][(ismob(user) && user.ckey) ? "([user.ckey])" : ""]" : "NON-EXISTANT SUBJECT"] has [what_done] [target ? "[target.name][(ismob(target) && target.ckey) ? "([target.ckey])" : ""]" : "NON-EXISTANT SUBJECT"][object ? " with [object]" : " "][addition][newhealthtxt][coordinates]")
if(target && ismob(target))
target.attack_log += text("\[[time_stamp()]\] Has been [what_done] by [user ? "[user.name][(ismob(user) && user.ckey) ? "([user.ckey])" : ""]" : "NON-EXISTANT SUBJECT"][object ? " with [object]" : " "][addition][newhealthtxt][coordinates]")
+ if(target.mind)
+ target.mind.attack_log += text("\[[time_stamp()]\] [target ? "[target.name][(ismob(target) && target.ckey) ? "([target.ckey])" : ""]" : "NON-EXISTANT SUBJECT"] has been [what_done] by [user ? "[user.name][(ismob(user) && user.ckey) ? "([user.ckey])" : ""]" : "NON-EXISTANT SUBJECT"][object ? " with [object]" : " "][addition][newhealthtxt][coordinates]")
log_attack("[user ? "[user.name][(ismob(user) && user.ckey) ? "([user.ckey])" : ""]" : "NON-EXISTANT SUBJECT"] [what_done] [target ? "[target.name][(ismob(target) && target.ckey)? "([target.ckey])" : ""]" : "NON-EXISTANT SUBJECT"][object ? " with [object]" : " "][addition][newhealthtxt][coordinates]")
@@ -144,10 +150,10 @@ Proc for attack log creation, because really why not
if(!user || !target)
return 0
var/user_loc = user.loc
-
+
var/drifting = 0
if(!user.Process_Spacemove(0) && user.inertia_dir)
- drifting = 1
+ drifting = 1
var/target_loc = target.loc
@@ -168,11 +174,11 @@ Proc for attack log creation, because really why not
break
if(uninterruptible)
continue
-
+
if(drifting && !user.inertia_dir)
drifting = 0
user_loc = user.loc
-
+
if((!drifting && user.loc != user_loc) || target.loc != target_loc || user.get_active_hand() != holding || user.incapacitated() || user.lying )
. = 0
break
@@ -188,11 +194,11 @@ Proc for attack log creation, because really why not
Tloc = target.loc
var/atom/Uloc = user.loc
-
+
var/drifting = 0
if(!user.Process_Spacemove(0) && user.inertia_dir)
- drifting = 1
-
+ drifting = 1
+
var/holding = user.get_active_hand()
var/holdingnull = 1 //User's hand started out empty, check for an empty hand
@@ -210,11 +216,11 @@ Proc for attack log creation, because really why not
sleep(1)
if (progress)
progbar.update(world.time - starttime)
-
+
if(drifting && !user.inertia_dir)
drifting = 0
Uloc = user.loc
-
+
if(!user || user.stat || user.weakened || user.stunned || (!drifting && user.loc != Uloc))
. = 0
break
diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm
index 75afaff8d07..a9c35aee9b4 100644
--- a/code/__HELPERS/type2type.dm
+++ b/code/__HELPERS/type2type.dm
@@ -304,6 +304,8 @@
switch(ui_style)
if("Retro") return 'icons/mob/screen_retro.dmi'
if("Plasmafire") return 'icons/mob/screen_plasmafire.dmi'
+ if("Slimecore") return 'icons/mob/screen_slimecore.dmi'
+ if("Operative") return 'icons/mob/screen_operative.dmi'
else return 'icons/mob/screen_midnight.dmi'
//colour formats
diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm
index 76623d41e30..fef8563b618 100644
--- a/code/__HELPERS/unsorted.dm
+++ b/code/__HELPERS/unsorted.dm
@@ -620,15 +620,16 @@ Turf and target are seperate in case you want to teleport some distance from a t
/proc/can_see(atom/source, atom/target, length=5) // I couldnt be arsed to do actual raycasting :I This is horribly inaccurate.
var/turf/current = get_turf(source)
var/turf/target_turf = get_turf(target)
- var/steps = 0
-
- while(current != target_turf)
- if(steps > length) return 0
- if(current.opacity) return 0
- for(var/atom/A in current)
- if(A.opacity) return 0
+ var/steps = 1
+ if(current != target_turf)
current = get_step_towards(current, target_turf)
- steps++
+ while(current != target_turf)
+ if(steps > length) return 0
+ if(current.opacity) return 0
+ for(var/atom/A in current)
+ if(A.opacity) return 0
+ current = get_step_towards(current, target_turf)
+ steps++
return 1
@@ -674,9 +675,10 @@ Turf and target are seperate in case you want to teleport some distance from a t
if(A.vars.Find(lowertext(varname))) return 1
else return 0
-//Returns sortedAreas list if populated
-//else populates the list first before returning it
+//Repopulates sortedAreas list
/proc/SortAreas()
+ sortedAreas = list()
+
for(var/area/A in world)
sortedAreas.Add(A)
@@ -947,20 +949,15 @@ var/list/WALLITEMS_INVERSE = list(
user << "Results of analysis of \icon[icon] [target]."
if(total_moles>0)
- var/o2_concentration = air_contents.oxygen/total_moles
- var/n2_concentration = air_contents.nitrogen/total_moles
- var/co2_concentration = air_contents.carbon_dioxide/total_moles
- var/plasma_concentration = air_contents.toxins/total_moles
-
- var/unknown_concentration = 1-(o2_concentration+n2_concentration+co2_concentration+plasma_concentration)
-
user << "Pressure: [round(pressure,0.1)] kPa"
- user << "Nitrogen: [round(n2_concentration*100)] %"
- user << "Oxygen: [round(o2_concentration*100)] %"
- user << "CO2: [round(co2_concentration*100)] %"
- user << "Plasma: [round(plasma_concentration*100)] %"
- if(unknown_concentration>0.01)
- user << "Unknown: [round(unknown_concentration*100)] %"
+
+ var/list/cached_gases = air_contents.gases
+
+ for(var/id in cached_gases)
+ var/gas_concentration = cached_gases[id][MOLES]/total_moles
+ if(id in hardcoded_gases || gas_concentration > 0.01) //ensures the four primary gases are always shown.
+ user << "[cached_gases[id][GAS_NAME]]: [round(gas_concentration*100)] %"
+
user << "Temperature: [round(air_contents.temperature-T0C)] °C"
else
user << "[target] is empty!"
@@ -1232,10 +1229,10 @@ B --><-- A
return L
-/atom/proc/contains(var/atom/location)
- if(!location)
+
+/atom/proc/contains(var/atom/A)
+ if(!A)
return 0
- for(location, location && location != src, location=location.loc); //semicolon is for the empty statement
+ for(var/atom/location = A.loc, location, location = location.loc)
if(location == src)
return 1
- return 0
diff --git a/code/_compile_options.dm b/code/_compile_options.dm
index 4f4fef2c952..70ed708c3e4 100644
--- a/code/_compile_options.dm
+++ b/code/_compile_options.dm
@@ -1,5 +1,6 @@
#define DEBUG //Enables byond profiling and full runtime logs - note, this may also be defined in your .dme file
-//#define TESTING //Enables in-depth debug messages to runtime log (used for debugging) //By using the testing("message") proc you can create debug-feedback for people with this
+ //Enables in-depth debug messages to runtime log (used for debugging)
+//#define TESTING //By using the testing("message") proc you can create debug-feedback for people with this
//uncommented, but not visible in the release version)
#define PRELOAD_RSC 1 /*set to:
diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm
index 647c2274bf3..258cb4f0847 100644
--- a/code/_globalvars/lists/objects.dm
+++ b/code/_globalvars/lists/objects.dm
@@ -16,4 +16,5 @@ var/global/list/table_recipes = list() //list of all table craft recipes
var/global/list/rcd_list = list() //list of Rapid Construction Devices.
var/global/list/apcs_list = list() //list of all Area Power Controller machines, seperate from machines for powernet speeeeeeed.
var/global/list/tracked_implants = list() //list of all current implants that are tracked to work out what sort of trek everyone is on. Sadly not on lavaworld not implemented...
-var/global/list/poi_list = list() //list of points of interest for observe/follow
\ No newline at end of file
+var/global/list/poi_list = list() //list of points of interest for observe/follow
+var/global/list/pinpointer_list = list() //list of all pinpointers. Used to change stuff they are pointing to all at once.
\ No newline at end of file
diff --git a/code/_globalvars/station.dm b/code/_globalvars/station.dm
index e8512549c1c..0385439f831 100644
--- a/code/_globalvars/station.dm
+++ b/code/_globalvars/station.dm
@@ -7,8 +7,4 @@ var/CHARGELEVEL = 0.001 // Cap for how fast cells charge, as a percentage-per-ti
var/list/powernets = list()
-// this is not strictly unused although the whole modules datum thing is unused
-// To remove this you need to remove that
-var/datum/moduletypes/mods = new()
-
var/map_name = "Unknown" //The name of the map that is loaded. Assigned in world/New()
\ No newline at end of file
diff --git a/code/_onclick/hud/alien.dm b/code/_onclick/hud/alien.dm
index 07f15152850..94b3efb66c5 100644
--- a/code/_onclick/hud/alien.dm
+++ b/code/_onclick/hud/alien.dm
@@ -81,9 +81,10 @@
action_intent = using
if(istype(mymob, /mob/living/carbon/alien/humanoid/hunter))
- mymob.leap_icon = new /obj/screen/alien/leap()
- mymob.leap_icon.screen_loc = ui_alien_storage_r
- adding += mymob.leap_icon
+ var/mob/living/carbon/alien/humanoid/hunter/H = mymob
+ H.leap_icon = new /obj/screen/alien/leap()
+ H.leap_icon.screen_loc = ui_alien_storage_r
+ adding += H.leap_icon
using = new /obj/screen/drop()
using.icon = 'icons/mob/screen_alien.dmi'
diff --git a/code/controllers/master.dm b/code/controllers/master.dm
index 1632b5f318f..db25833d75f 100644
--- a/code/controllers/master.dm
+++ b/code/controllers/master.dm
@@ -149,7 +149,7 @@ var/global/datum/controller/master/Master = new()
// If we caused BYOND to miss a tick, stop processing for a bit...
if(startingtick < world.time || start_time + 1 < world.timeofday)
break
- sleep(-1)
+ sleep(0)
cost = MC_AVERAGE(cost, world.timeofday - start_time)
if(ran_subsystems)
diff --git a/code/controllers/subsystem/air.dm b/code/controllers/subsystem/air.dm
index 21bb4ef7d24..619a38e999f 100644
--- a/code/controllers/subsystem/air.dm
+++ b/code/controllers/subsystem/air.dm
@@ -18,9 +18,6 @@ var/datum/subsystem/air/SSair
var/cost_pipenets = 0
var/cost_atmos_machinery = 0
- var/obj/effect/overlay/plasma_overlay //overlay for plasma
- var/obj/effect/overlay/sleeptoxin_overlay //overlay for sleeptoxin
-
var/list/excited_groups = list()
var/list/active_turfs = list()
var/list/hotspots = list()
@@ -36,9 +33,6 @@ var/datum/subsystem/air/SSair
/datum/subsystem/air/New()
NEW_SS_GLOBAL(SSair)
- plasma_overlay = new /obj/effect/overlay{icon='icons/effects/tile_effects.dmi';mouse_opacity=0;layer=5;icon_state="plasma"}()
- sleeptoxin_overlay = new /obj/effect/overlay{icon='icons/effects/tile_effects.dmi';mouse_opacity=0;layer=5;icon_state="sleeping_agent"}()
-
/datum/subsystem/air/stat_entry(msg)
msg += "C:{"
msg += "AT:[round(cost_turfs,0.01)]|"
@@ -169,32 +163,39 @@ var/datum/subsystem/air/SSair
/datum/subsystem/air/proc/setup_allturfs(z_level)
var/z_start = 1
var/z_finish = world.maxz
+
if(1 <= z_level && z_level <= world.maxz)
z_level = round(z_level)
z_start = z_level
z_finish = z_level
+
var/list/turfs_to_init = block(locate(1, 1, z_start), locate(world.maxx, world.maxy, z_finish))
+
for(var/turf/simulated/T in turfs_to_init)
T.CalculateAdjacentTurfs()
T.excited = 0
active_turfs -= T
- if(!T.blocks_air)
- T.update_visuals()
- for(var/direction in cardinal)
- if(!(T.atmos_adjacent_turfs & direction))
- continue
- var/turf/enemy_tile = get_step(T, direction)
- if(istype(enemy_tile,/turf/simulated/))
- var/turf/simulated/enemy_simulated = enemy_tile
- if(!T.air.compare(enemy_simulated.air))
- T.excited = 1
- active_turfs |= T
- break
- else
- if(!T.air.check_turf_total(enemy_tile))
- T.excited = 1
- active_turfs |= T
- break
+
+ if(T.blocks_air)
+ continue
+
+ T.update_visuals()
+
+ for(var/direction in cardinal)
+ if(!(T.atmos_adjacent_turfs & direction))
+ continue
+
+ var/turf/enemy_tile = get_step(T, direction)
+ var/datum/gas_mixture/enemy_air = enemy_tile.return_air()
+
+ var/is_active = T.air.compare(enemy_air)
+
+ if(is_active)
+ testing("Active turf found. Return value of compare(): [is_active]")
+ T.excited = 1
+ active_turfs |= T
+ break
+
if(active_turfs.len)
warning("There are [active_turfs.len] active turfs at roundstart, this is a mapping error caused by a difference of the air between the adjacent turfs. You can see its coordinates using \"Mapping -> Show roundstart AT list\" verb (debug verbs required)")
for(var/turf/simulated/T in active_turfs)
diff --git a/code/controllers/subsystem/minimap.dm b/code/controllers/subsystem/minimap.dm
index 05a3bc43131..cb3ae7d0a2b 100644
--- a/code/controllers/subsystem/minimap.dm
+++ b/code/controllers/subsystem/minimap.dm
@@ -12,6 +12,8 @@ var/datum/subsystem/minimap/SSminimap
var/const/MAX_ICON_DIMENSION = 1024
var/const/ICON_SIZE = 4
+
+ var/max_initalized_zlevel = 0
/datum/subsystem/minimap/New()
NEW_SS_GLOBAL(SSminimap)
@@ -23,6 +25,7 @@ var/datum/subsystem/minimap/SSminimap
generate(z)
for (var/z = 1 to ZLEVEL_SPACEMAX)
register_asset("minimap_[z].png", file("[getMinimapFile(z)].png"))
+ max_initalized_zlevel = ZLEVEL_SPACEMAX
..()
/datum/subsystem/minimap/proc/generate(z, x1 = 1, y1 = 1, x2 = world.maxx, y2 = world.maxy)
@@ -173,9 +176,9 @@ var/datum/subsystem/minimap/SSminimap
return "data/minimaps/[MAP_NAME]_[zlevel]"
/datum/subsystem/minimap/proc/sendMinimaps(client/client)
- for (var/z = 1 to world.maxz)
+ for (var/z = 1 to max_initalized_zlevel)
send_asset(client, "minimap_[z].png")
#ifdef MINIMAP_DEBUG
#undef MINIMAP_DEBUG
-#endif
\ No newline at end of file
+#endif
diff --git a/code/controllers/subsystem/shuttles/emergency.dm b/code/controllers/subsystem/shuttles/emergency.dm
index ed73d3bfdd9..2c9b47983f7 100644
--- a/code/controllers/subsystem/shuttles/emergency.dm
+++ b/code/controllers/subsystem/shuttles/emergency.dm
@@ -1,3 +1,7 @@
+#define UNLAUNCHED 0
+#define ENDGAME_LAUNCHED 1
+#define EARLY_LAUNCHED 2
+
/obj/docking_port/mobile/emergency
name = "emergency shuttle"
id = "emergency"
@@ -102,18 +106,22 @@
G.dom_attempts = min(1,G.dom_attempts)
if(SHUTTLE_DOCKED)
- if(time_left <= 0 && SSshuttle.emergencyNoEscape)
- priority_announce("Hostile environment detected. Departure has been postponed indefinitely pending conflict resolution.", null, 'sound/misc/notice1.ogg', "Priority")
- sound_played = 0
- mode = SHUTTLE_STRANDED
- if(time_left <= 50 && !sound_played) //4 seconds left - should sync up with the launch
- sound_played = 1
+
+ if(time_left <= 50 && !sound_played) //4 seconds left:REV UP THOSE ENGINES BOYS. - should sync up with the launch
+ sound_played = 1 //Only rev them up once.
for(var/area/shuttle/escape/E in world)
E << 'sound/effects/hyperspace_begin.ogg'
+
+ if(time_left <= 0 && SSshuttle.emergencyNoEscape)
+ priority_announce("Hostile environment detected. Departure has been postponed indefinitely pending conflict resolution.", null, 'sound/misc/notice1.ogg', "Priority")
+ sound_played = 0 //Since we didn't launch, we will need to rev up the engines again next pass.
+ mode = SHUTTLE_STRANDED
+
if(time_left <= 0 && !SSshuttle.emergencyNoEscape)
//move each escape pod to its corresponding transit dock
for(var/obj/docking_port/mobile/pod/M in SSshuttle.mobile)
- if(M.z == ZLEVEL_STATION) //Will not launch from the mine/planet
+ if(M.launch_status == UNLAUNCHED) //Will not launch from the mine/planet
+ M.launch_status = ENDGAME_LAUNCHED
M.enterTransit()
//now move the actual emergency shuttle to its transit dock
for(var/area/shuttle/escape/E in world)
@@ -126,7 +134,8 @@
if(time_left <= 0)
//move each escape pod to its corresponding escape dock
for(var/obj/docking_port/mobile/pod/M in SSshuttle.mobile)
- M.dock(SSshuttle.getDock("[M.id]_away"))
+ if(M.launch_status == ENDGAME_LAUNCHED)
+ M.dock(SSshuttle.getDock("[M.id]_away"))
//now move the actual emergency shuttle to centcomm
for(var/area/shuttle/escape/E in world)
E << 'sound/effects/hyperspace_end.ogg'
@@ -148,9 +157,11 @@
dwidth = 1
width = 3
height = 4
+ var/launch_status = UNLAUNCHED
/obj/docking_port/mobile/pod/request()
- if(security_level == SEC_LEVEL_RED || security_level == SEC_LEVEL_DELTA && z == ZLEVEL_STATION)
+ if((security_level == SEC_LEVEL_RED || security_level == SEC_LEVEL_DELTA) && launch_status == UNLAUNCHED)
+ launch_status = EARLY_LAUNCHED
return ..()
/obj/docking_port/mobile/pod/New()
@@ -238,3 +249,9 @@
/obj/item/weapon/storage/pod/attack_hand(mob/user)
return
+
+
+
+#undef UNLAUNCHED
+#undef LAUNCHED
+#undef EARLY_LAUNCHED
diff --git a/code/controllers/subsystem/shuttles/supply.dm b/code/controllers/subsystem/shuttles/supply.dm
index 8c76c882de6..d3c96f216d2 100644
--- a/code/controllers/subsystem/shuttles/supply.dm
+++ b/code/controllers/subsystem/shuttles/supply.dm
@@ -211,6 +211,7 @@
var/list/blacklist = list(
/mob/living,
/obj/effect/blob,
+ /obj/effect/rune,
/obj/effect/spider/spiderling,
/obj/item/weapon/disk/nuclear,
/obj/machinery/nuclearbomb,
diff --git a/code/controllers/subsystem/tgui.dm b/code/controllers/subsystem/tgui.dm
index e9aca112ca8..22604f811db 100644
--- a/code/controllers/subsystem/tgui.dm
+++ b/code/controllers/subsystem/tgui.dm
@@ -9,19 +9,19 @@ var/datum/subsystem/tgui/SStgui
can_fire = 1 // This needs to fire before round start.
var/list/open_uis = list() // A list of open UIs, grouped by src_object and ui_key.
- var/list/processing_uis = list() // A list of processing UIs, not grouped.
- var/html // The HTML template used by new UIs; minus initial data.
+ var/list/processing_uis = list() // A list of processing UIs, ungrouped.
+ var/basehtml // The HTML base used for all UIs.
/datum/subsystem/tgui/New()
- html = file2text('tgui/tgui.html') // Read the HTML from disk.
+ basehtml = file2text('tgui/tgui.html') // Read the HTML from disk.
NEW_SS_GLOBAL(SStgui)
/datum/subsystem/tgui/stat_entry()
- ..("O:[open_uis.len]|P:[processing_uis.len]") // Show how many interfaces we have open/are processing.
+ ..("P:[processing_uis.len]")
-/datum/subsystem/tgui/fire() // Process UIs.
+/datum/subsystem/tgui/fire()
for(var/thing in processing_uis)
var/datum/tgui/ui = thing
if(ui && ui.user && ui.src_object)
diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm
index 6951d554dec..56cdf29535f 100644
--- a/code/controllers/subsystem/ticker.dm
+++ b/code/controllers/subsystem/ticker.dm
@@ -485,5 +485,5 @@ var/datum/subsystem/ticker/ticker
//map rotate chance defaults to 75% of the length of the round (in minutes)
if (!prob((world.time/600)*config.maprotatechancedelta))
return
- spawn(-1) //compiling a map can lock up the mc for 30 to 60 seconds if we don't spawn
+ spawn(0) //compiling a map can lock up the mc for 30 to 60 seconds if we don't spawn
maprotate()
diff --git a/code/controllers/subsystem/timer.dm b/code/controllers/subsystem/timer.dm
index 15c92b07b88..461169cf4b4 100644
--- a/code/controllers/subsystem/timer.dm
+++ b/code/controllers/subsystem/timer.dm
@@ -26,10 +26,13 @@ var/datum/subsystem/timer/SStimer
if (!event.thingToCall || qdeleted(event.thingToCall))
qdel(event)
if (event.timeToRun <= world.time)
- spawn(-1)
- call(event.thingToCall, event.procToCall)(arglist(event.argList))
+ runevent(event)
qdel(event)
+/datum/subsystem/timer/proc/runevent(datum/timedevent/event)
+ set waitfor = 0
+ call(event.thingToCall, event.procToCall)(arglist(event.argList))
+
/datum/timedevent
var/thingToCall
var/procToCall
diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm
index 413764f7345..3f582156347 100644
--- a/code/datums/datumvars.dm
+++ b/code/datums/datumvars.dm
@@ -348,7 +348,7 @@ body
html += "[name] = null"
else if (istext(value))
- html += "[name] = \"[value]\""
+ html += "[name] = \"[html_encode(value)]\""
else if (isicon(value))
#ifdef VARSICON
@@ -405,7 +405,7 @@ body
html += ""
else
- html += "[name] = [value]"
+ html += "[name] = [html_encode(value)]"
html += ""
diff --git a/code/datums/gas_mixture.dm b/code/datums/gas_mixture.dm
index 794c8f6fe4c..69293a78bf9 100644
--- a/code/datums/gas_mixture.dm
+++ b/code/datums/gas_mixture.dm
@@ -3,90 +3,108 @@ What are the archived variables for?
Calculations are done using the archived variables with the results merged into the regular variables.
This prevents race conditions that arise based on the order of tile processing.
*/
-
-#define SPECIFIC_HEAT_TOXIN 200
-#define SPECIFIC_HEAT_AIR 20
-#define SPECIFIC_HEAT_CDO 30
-#define HEAT_CAPACITY_CALCULATION(oxygen,carbon_dioxide,nitrogen,toxins) \
- (carbon_dioxide*SPECIFIC_HEAT_CDO + (oxygen+nitrogen)*SPECIFIC_HEAT_AIR + toxins*SPECIFIC_HEAT_TOXIN)
-
#define MINIMUM_HEAT_CAPACITY 0.0003
#define QUANTIZE(variable) (round(variable,0.0000001))/*I feel the need to document what happens here. Basically this is used to catch most rounding errors, however it's previous value made it so that
once gases got hot enough, most procedures wouldnt occur due to the fact that the mole counts would get rounded away. Thus, we lowered it a few orders of magnititude */
-/datum/gas
- var/moles = 0
- var/specific_heat = 0
- var/moles_archived = 0
+var/list/meta_gas_info = meta_gas_list() //see ATMOSPHERICS/gas_types.dm
+var/list/cached_gases_list = null
-/datum/gas/sleeping_agent
- specific_heat = 40
+/proc/gaslist(gasid)
+ if(!cached_gases_list)
+ cached_gases_list = new /list(meta_gas_info.len)
-/datum/gas/oxygen_agent_b
- specific_heat = 300
+ if(!cached_gases_list[gasid])
+ if(!meta_gas_info[gasid])
+ CRASH("Error: no such gas type! Type : [gasid]")
-/datum/gas/volatile_fuel
- specific_heat = 30
+ var/list/new_gas_list = new(3)
+ new_gas_list[MOLES] = 0
+ new_gas_list[ARCHIVE] = 0
+ new_gas_list[GAS_META] = meta_gas_info[gasid]
+ cached_gases_list[gasid] = new_gas_list
+ var/list/gas = cached_gases_list[gasid]
+ . = gas.Copy()
/datum/gas_mixture
- var/oxygen = 0
- var/carbon_dioxide = 0
- var/nitrogen = 0
- var/toxins = 0
-
- var/volume = CELL_VOLUME
-
- var/temperature = 0 //in Kelvin
-
- var/last_share
-
- var/list/datum/gas/trace_gases = list()
-
-
- var/tmp/oxygen_archived
- var/tmp/carbon_dioxide_archived
- var/tmp/nitrogen_archived
- var/tmp/toxins_archived
-
+ var/list/gases
+ var/temperature //in Kelvin
var/tmp/temperature_archived
+ var/volume
+ var/last_share
+ var/tmp/fuel_burnt
- var/tmp/fuel_burnt = 0
+/datum/gas_mixture/New(Volume = CELL_VOLUME)
+ . = ..()
+ gases = new
+ temperature = 0
+ temperature_archived = 0
+ volume = Volume
+ last_share = 0
+ fuel_burnt = 0
+
+ //listmos procs
+
+ //assert_gas(gas_id) - used to guarantee that the gas list for this id exists.
+ //Must be used before adding to a gas. May be used before reading from a gas.
+/datum/gas_mixture/proc/assert_gas(gas_id)
+ var/cached_gases = gases
+ if(cached_gases[gas_id])
+ return
+ cached_gases[gas_id] = gaslist(gas_id) //see ATMOSPHERICS/gas_types.dm
+
+ //assert_gases(args) - shorthand for calling assert_gas() once for each gas type.
+/datum/gas_mixture/proc/assert_gases()
+ for(var/id in args)
+ assert_gas(id)
+
+ //add_gas(gas_id) - similar to assert_gas(), but does not check for an existing
+ //gas list for this id.
+ //Used instead of assert_gas() when you know the gas does not exist. Faster than assert_gas().
+/datum/gas_mixture/proc/add_gas(gas_id)
+ gases[gas_id] = gaslist(gas_id)
+
+ //add_gases(args) - shorthand for calling add_gas() once for each gas_type.
+/datum/gas_mixture/proc/add_gases()
+ for(var/id in args)
+ add_gas(id)
+
+ //garbage_collect() - removes any gas list which is empty.
+ //Must be used after subtracting from a gas. Must be used after assert_gas()
+ //if assert_gas() was called only to read from the gas.
+ //By removing empty gases, processing speed is increased.
+/datum/gas_mixture/proc/garbage_collect()
+ var/list/cached_gases = gases
+ for(var/id in cached_gases)
+ var/gas = cached_gases[id]
+ if(QUANTIZE(gas[MOLES]) <= 0 && QUANTIZE(gas[ARCHIVE]) <= 0)
+ cached_gases -= id
//PV=nRT - related procedures
/datum/gas_mixture/proc/heat_capacity()
- var/heat_capacity = HEAT_CAPACITY_CALCULATION(oxygen,carbon_dioxide,nitrogen,toxins)
-
- for(var/gas in trace_gases)
- var/datum/gas/trace_gas = gas
- heat_capacity += trace_gas.moles*trace_gas.specific_heat
- return heat_capacity
-
+ var/list/cached_gases = gases
+ . = 0
+ for(var/id in cached_gases)
+ . += cached_gases[id][MOLES]*cached_gases[id][SPECIFIC_HEAT]
/datum/gas_mixture/proc/heat_capacity_archived()
- var/heat_capacity_archived = HEAT_CAPACITY_CALCULATION(oxygen_archived,carbon_dioxide_archived,nitrogen_archived,toxins_archived)
-
- for(var/gas in trace_gases)
- var/datum/gas/trace_gas = gas
- heat_capacity_archived += trace_gas.moles_archived*trace_gas.specific_heat
- return heat_capacity_archived
-
+ var/list/cached_gases = gases
+ . = 0
+ for(var/id in cached_gases)
+ . += cached_gases[id][ARCHIVE]*cached_gases[id][SPECIFIC_HEAT]
/datum/gas_mixture/proc/total_moles()
- var/moles = oxygen + carbon_dioxide + nitrogen + toxins
-
- for(var/gas in trace_gases)
- var/datum/gas/trace_gas = gas
- moles += trace_gas.moles
- return moles
-
+ var/list/cached_gases = gases
+ . = 0
+ for(var/id in cached_gases)
+ . += cached_gases[id][MOLES]
/datum/gas_mixture/proc/return_pressure()
if(volume>0)
return total_moles()*R_IDEAL_GAS_EQUATION*temperature/volume
return 0
-
/datum/gas_mixture/proc/return_temperature()
return temperature
@@ -103,84 +121,96 @@ What are the archived variables for?
/datum/gas_mixture/proc/react(atom/dump_location)
+ var/list/procgases = gases //this speeds things up because >byond
var/reacting = 0 //set to 1 if a notable reaction occured (used by pipe_network)
if(temperature < TCMB)
temperature = TCMB
- if(trace_gases.len > 0)
- if(temperature > 900)
- if(toxins > MINIMUM_HEAT_CAPACITY && carbon_dioxide > MINIMUM_HEAT_CAPACITY)
- var/datum/gas/oxygen_agent_b/trace_gas = locate(/datum/gas/oxygen_agent_b/) in trace_gases
- if(trace_gas)
- var/reaction_rate = min(carbon_dioxide*0.75, toxins*0.25, trace_gas.moles*0.05)
+ if(procgases["agent_b"] && temperature > 900 && procgases["plasma"] && procgases["co2"])
+ if(procgases["plasma"][MOLES] > MINIMUM_HEAT_CAPACITY && procgases["co2"][MOLES] > MINIMUM_HEAT_CAPACITY)
+ var/reaction_rate = min(procgases["co2"][MOLES]*0.75, procgases["plasma"][MOLES]*0.25, procgases["agent_b"][MOLES]*0.05)
- carbon_dioxide -= reaction_rate
- oxygen += reaction_rate
+ procgases["co2"][MOLES] -= reaction_rate
- trace_gas.moles -= reaction_rate*0.05
+ assert_gas("o2") //only need to assert oxygen, as this reaction doesn't occur without the other gases existing
+ procgases["o2"][MOLES] += reaction_rate
- temperature -= (reaction_rate*20000)/heat_capacity()
+ procgases["agent_b"][MOLES] -= reaction_rate*0.05
- reacting = 1
+ temperature -= (reaction_rate*20000)/heat_capacity()
+
+ garbage_collect()
+
+ reacting = 1
+ /*
if(thermal_energy() > (PLASMA_BINDING_ENERGY*10))
- if(toxins > MINIMUM_HEAT_CAPACITY && carbon_dioxide > MINIMUM_HEAT_CAPACITY && (toxins+carbon_dioxide)/total_moles() >= FUSION_PURITY_THRESHOLD)//Fusion wont occur if the level of impurities is too high.
- //world << "pre [temperature, [toxins], [carbon_dioxide]
+ if(procgases["plasma"] && procgases["co2"] && procgases["plasma"][MOLES] > MINIMUM_HEAT_CAPACITY && procgases["co2"][MOLES] > MINIMUM_HEAT_CAPACITY && (procgases["plasma"][MOLES]+procgases["co2"][MOLES])/total_moles() >= FUSION_PURITY_THRESHOLD)//Fusion wont occur if the level of impurities is too high.
+ //world << "pre [temperature, [procgases["plasma"][MOLES]], [procgases["co2"][MOLES]]
var/old_heat_capacity = heat_capacity()
- var/carbon_efficency = min(toxins/carbon_dioxide,MAX_CARBON_EFFICENCY)
+ var/carbon_efficency = min(procgases["plasma"][MOLES]/procgases["co2"][MOLES],MAX_CARBON_EFFICENCY)
var/reaction_energy = thermal_energy()
- var/moles_impurities = total_moles()-(toxins+carbon_dioxide)
+ var/moles_impurities = total_moles()-(procgases["plasma"][MOLES]+procgases["co2"][MOLES])
+
var/plasma_fused = (PLASMA_FUSED_COEFFICENT*carbon_efficency)*(temperature/PLASMA_BINDING_ENERGY)
var/carbon_catalyzed = (CARBON_CATALYST_COEFFICENT*carbon_efficency)*(temperature/PLASMA_BINDING_ENERGY)
var/oxygen_added = carbon_catalyzed
var/nitrogen_added = (plasma_fused-oxygen_added)-(thermal_energy()/PLASMA_BINDING_ENERGY)
- reaction_energy = max(reaction_energy+((carbon_efficency*toxins)/((moles_impurities/carbon_efficency)+2)*10)+((plasma_fused/(moles_impurities/carbon_efficency))*PLASMA_BINDING_ENERGY),0)
- toxins = max(toxins-plasma_fused,0)
- carbon_dioxide = max(carbon_dioxide-carbon_catalyzed,0)
- oxygen = max(oxygen+oxygen_added,0)
- nitrogen = max(nitrogen+nitrogen_added,0)
+ reaction_energy = max(reaction_energy+((carbon_efficency*procgases["plasma"][MOLES])/((moles_impurities/carbon_efficency)+2)*10)+((plasma_fused/(moles_impurities/carbon_efficency))*PLASMA_BINDING_ENERGY),0)
+
+ assert_gases("o2", "n2")
+
+ procgases["plasma"][MOLES] -= plasma_fused
+ procgases["co2"][MOLES] -= carbon_catalyzed
+ procgases["o2"][MOLES] += oxygen_added
+ procgases["n2"][MOLES] += nitrogen_added
+
+ garbage_collect()
+
if(reaction_energy > 0)
reacting = 1
var/new_heat_capacity = heat_capacity()
if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
temperature = max(((temperature*old_heat_capacity + reaction_energy)/new_heat_capacity),TCMB)
//Prevents whatever mechanism is causing it to hit negative temperatures.
- //world << "post [temperature], [toxins], [carbon_dioxide]
-
-
-
+ //world << "post [temperature], [procgases["plasma"][MOLES]], [procgases["co2"][MOLES]]
+ */
fuel_burnt = 0
if(temperature > FIRE_MINIMUM_TEMPERATURE_TO_EXIST)
- //world << "pre [temperature], [oxygen], [toxins]"
- if(fire() > 0)
+ //world << "pre [temperature], [procgases["o2"][MOLES]], [procgases["plasma"][MOLES]]"
+ if(fire())
reacting = 1
- //world << "post [temperature], [oxygen], [toxins]"
+ //world << "post [temperature], [procgases["o2"][MOLES]], [procgases["plasma"][MOLES]]"
return reacting
/datum/gas_mixture/proc/fire()
var/energy_released = 0
var/old_heat_capacity = heat_capacity()
+ var/list/procgases = gases //this speeds things up because accessing datum vars is slow
- var/datum/gas/volatile_fuel/fuel_store = locate(/datum/gas/volatile_fuel/) in trace_gases
- if(fuel_store) //General volatile gas burn
- var/burned_fuel = 0
+ if(procgases["v_fuel"] && procgases["v_fuel"][MOLES]) //General volatile gas burn
+ var/burned_fuel
- if(oxygen < fuel_store.moles)
- burned_fuel = oxygen
- fuel_store.moles -= burned_fuel
- oxygen = 0
+ if(!procgases["o2"])
+ burned_fuel = 0
+ else if(procgases["o2"][MOLES] < procgases["v_fuel"][MOLES])
+ burned_fuel = procgases["o2"][MOLES]
+ procgases["v_fuel"][MOLES] -= burned_fuel
+ procgases["o2"][MOLES] = 0
else
- burned_fuel = fuel_store.moles
- oxygen -= fuel_store.moles
- trace_gases -= fuel_store
- fuel_store = null
+ burned_fuel = procgases["v_fuel"][MOLES]
+ procgases["o2"][MOLES] -= procgases["v_fuel"][MOLES]
- energy_released += FIRE_CARBON_ENERGY_RELEASED * burned_fuel
- carbon_dioxide += burned_fuel
- fuel_burnt += burned_fuel
+ if(burned_fuel)
+ energy_released += FIRE_CARBON_ENERGY_RELEASED * burned_fuel
+
+ assert_gas("co2")
+ procgases["co2"][MOLES] += burned_fuel
+
+ fuel_burnt += burned_fuel
//Handle plasma burning
- if(toxins > MINIMUM_HEAT_CAPACITY)
+ if(procgases["plasma"] && procgases["plasma"][MOLES] > MINIMUM_HEAT_CAPACITY)
var/plasma_burn_rate = 0
var/oxygen_burn_rate = 0
//more plasma released at higher temperatures
@@ -190,19 +220,22 @@ What are the archived variables for?
else
temperature_scale = (temperature-PLASMA_MINIMUM_BURN_TEMPERATURE)/(PLASMA_UPPER_TEMPERATURE-PLASMA_MINIMUM_BURN_TEMPERATURE)
if(temperature_scale > 0)
+ assert_gas("o2")
+ assert_gas("co2")
oxygen_burn_rate = OXYGEN_BURN_RATE_BASE - temperature_scale
- if(oxygen > toxins*PLASMA_OXYGEN_FULLBURN)
- plasma_burn_rate = (toxins*temperature_scale)/PLASMA_BURN_RATE_DELTA
+ if(procgases["o2"][MOLES] > procgases["plasma"][MOLES]*PLASMA_OXYGEN_FULLBURN)
+ plasma_burn_rate = (procgases["plasma"][MOLES]*temperature_scale)/PLASMA_BURN_RATE_DELTA
else
- plasma_burn_rate = (temperature_scale*(oxygen/PLASMA_OXYGEN_FULLBURN))/PLASMA_BURN_RATE_DELTA
+ plasma_burn_rate = (temperature_scale*(procgases["o2"][MOLES]/PLASMA_OXYGEN_FULLBURN))/PLASMA_BURN_RATE_DELTA
if(plasma_burn_rate > MINIMUM_HEAT_CAPACITY)
- toxins -= plasma_burn_rate
- oxygen -= plasma_burn_rate*oxygen_burn_rate
- carbon_dioxide += plasma_burn_rate
+ procgases["plasma"][MOLES] -= plasma_burn_rate
+ procgases["o2"][MOLES] -= plasma_burn_rate*oxygen_burn_rate
+ procgases["co2"][MOLES] += plasma_burn_rate
energy_released += FIRE_PLASMA_ENERGY_RELEASED * (plasma_burn_rate)
fuel_burnt += (plasma_burn_rate)*(1+oxygen_burn_rate)
+ garbage_collect()
if(energy_released > 0)
var/new_heat_capacity = heat_capacity()
@@ -217,7 +250,7 @@ What are the archived variables for?
/datum/gas_mixture/proc/merge(datum/gas_mixture/giver)
//Merges all air from giver into self. Deletes giver.
- //Returns: 1 on success (no failure cases yet)
+ //Returns: 1 in all cases
/datum/gas_mixture/proc/remove(amount)
//Proportionally removes amount of gas from the gas_mixture
@@ -233,11 +266,11 @@ What are the archived variables for?
/datum/gas_mixture/proc/share(datum/gas_mixture/sharer)
//Performs air sharing calculations between two gas_mixtures assuming only 1 boundary length
//Return: amount of gas exchanged (+ if sharer received)
-/datum/gas_mixture/proc/mimic(turf/model) //I want this proc to die a painful death
+/datum/gas_mixture/proc/mimic(turf/model)
//Similar to share(...), except the model is not modified
//Return: amount of gas exchanged
-/datum/gas_mixture/proc/check_turf(turf/model) //I want this proc to die a painful death
+/datum/gas_mixture/proc/check_turf(turf/model)
//Returns: 0 if self-check failed or 1 if check passes
/datum/gas_mixture/proc/temperature_mimic(turf/model, conduction_coefficient) //I want this proc to die a painful death
@@ -248,20 +281,17 @@ What are the archived variables for?
/datum/gas_mixture/proc/compare(datum/gas_mixture/sample)
//Compares sample to self to see if within acceptable ranges that group processing may be enabled
+ //returns: a string indicating what check failed, or "" if check passes
+
+/datum/gas_mixture/proc/copy_from_turf(turf/model)
+ //Copies all gas info from the turf into the gas list along with copying temperature, then archives
/datum/gas_mixture/archive()
- oxygen_archived = oxygen
- carbon_dioxide_archived = carbon_dioxide
- nitrogen_archived = nitrogen
- toxins_archived = toxins
-
- for(var/gas in trace_gases)
- var/datum/gas/trace_gas = gas
- trace_gas.moles_archived = trace_gas.moles
-
+ var/list/cached_gases = gases
+ for(var/id in cached_gases)
+ cached_gases[id][ARCHIVE] = cached_gases[id][MOLES]
temperature_archived = temperature
-
- return 1
+ . = 1
/datum/gas_mixture/merge(datum/gas_mixture/giver)
if(!giver)
@@ -271,268 +301,145 @@ What are the archived variables for?
var/self_heat_capacity = heat_capacity()
var/giver_heat_capacity = giver.heat_capacity()
var/combined_heat_capacity = giver_heat_capacity + self_heat_capacity
- if(combined_heat_capacity != 0)
+ if(combined_heat_capacity)
temperature = (giver.temperature*giver_heat_capacity + temperature*self_heat_capacity)/combined_heat_capacity
+ var/list/cached_gases = gases //accessing datum vars is slower than proc vars
+ var/list/giver_gases = giver.gases
+ for(var/giver_id in giver_gases)
+ assert_gas(giver_id)
+ cached_gases[giver_id][MOLES] += giver_gases[giver_id][MOLES]
- oxygen += giver.oxygen
- carbon_dioxide += giver.carbon_dioxide
- nitrogen += giver.nitrogen
- toxins += giver.toxins
-
- for(var/gas in giver.trace_gases)
- var/datum/gas/trace_gas = gas
- var/datum/gas/corresponding = locate(trace_gas.type) in trace_gases
- if(!corresponding)
- corresponding = new trace_gas.type()
- trace_gases += corresponding
- corresponding.moles += trace_gas.moles
-
- return 1
+ . = 1
/datum/gas_mixture/remove(amount)
var/sum = total_moles()
amount = min(amount,sum) //Can not take more air than tile has!
+
if(amount <= 0)
return null
var/datum/gas_mixture/removed = new
+ var/list/removed_gases = removed.gases //accessing datum vars is slower than proc vars
+ var/list/cached_gases = gases
-
- removed.oxygen = QUANTIZE((oxygen/sum)*amount)
- removed.nitrogen = QUANTIZE((nitrogen/sum)*amount)
- removed.carbon_dioxide = QUANTIZE((carbon_dioxide/sum)*amount)
- removed.toxins = QUANTIZE((toxins/sum)*amount)
-
- oxygen -= removed.oxygen
- nitrogen -= removed.nitrogen
- carbon_dioxide -= removed.carbon_dioxide
- toxins -= removed.toxins
-
- for(var/gas in trace_gases)
- var/datum/gas/trace_gas = gas
- var/datum/gas/corresponding = new trace_gas.type()
- removed.trace_gases += corresponding
-
- corresponding.moles = (trace_gas.moles/sum)*amount
- trace_gas.moles -= corresponding.moles
+ for(var/id in cached_gases)
+ removed.assert_gas(id)
+ removed_gases[id][MOLES] = QUANTIZE((cached_gases[id][MOLES]/sum)*amount)
+ cached_gases[id][MOLES] -= removed_gases[id][MOLES]
removed.temperature = temperature
- return removed
+ garbage_collect()
+
+ . = removed
/datum/gas_mixture/remove_ratio(ratio)
-
if(ratio <= 0)
return null
ratio = min(ratio, 1)
var/datum/gas_mixture/removed = new
+ var/list/removed_gases = removed.gases //accessing datum vars is slower than proc vars
+ var/list/cached_gases = gases
- removed.oxygen = QUANTIZE(oxygen*ratio)
- removed.nitrogen = QUANTIZE(nitrogen*ratio)
- removed.carbon_dioxide = QUANTIZE(carbon_dioxide*ratio)
- removed.toxins = QUANTIZE(toxins*ratio)
-
- oxygen -= removed.oxygen
- nitrogen -= removed.nitrogen
- carbon_dioxide -= removed.carbon_dioxide
- toxins -= removed.toxins
-
- for(var/gas in trace_gases)
- var/datum/gas/trace_gas = gas
- var/datum/gas/corresponding = new trace_gas.type()
- removed.trace_gases += corresponding
-
- corresponding.moles = trace_gas.moles*ratio
- trace_gas.moles -= corresponding.moles
+ for(var/id in cached_gases)
+ removed.assert_gas(id)
+ removed_gases[id][MOLES] = QUANTIZE(cached_gases[id][MOLES]*ratio)
+ cached_gases[id][MOLES] -= removed_gases[id][MOLES]
removed.temperature = temperature
- return removed
+ garbage_collect()
+
+ . = removed
/datum/gas_mixture/copy_from(datum/gas_mixture/sample)
- oxygen = sample.oxygen
- carbon_dioxide = sample.carbon_dioxide
- nitrogen = sample.nitrogen
- toxins = sample.toxins
+ var/list/cached_gases = gases //accessing datum vars is slower than proc vars
+ var/list/sample_gases = sample.gases
+ var/list/copied_gases = list()
+ for(var/sample_id in sample_gases)
+ assert_gas(sample_id)
+ cached_gases[sample_id][MOLES] = sample_gases[sample_id][MOLES]
+ copied_gases += sample_id
+ for(var/id in cached_gases-copied_gases)
+ assert_gas(id)
+ cached_gases[id][MOLES] = 0
- trace_gases.len=null
- for(var/gas in sample.trace_gases)
- var/datum/gas/trace_gas = gas
- var/datum/gas/corresponding = new trace_gas.type()
- trace_gases += corresponding
-
- corresponding.moles = trace_gas.moles
+ garbage_collect()
temperature = sample.temperature
return 1
/datum/gas_mixture/check_turf(turf/model, atmos_adjacent_turfs = 4)
- var/delta_oxygen = (oxygen_archived - model.oxygen)/(atmos_adjacent_turfs+1)
- var/delta_carbon_dioxide = (carbon_dioxide_archived - model.carbon_dioxide)/(atmos_adjacent_turfs+1)
- var/delta_nitrogen = (nitrogen_archived - model.nitrogen)/(atmos_adjacent_turfs+1)
- var/delta_toxins = (toxins_archived - model.toxins)/(atmos_adjacent_turfs+1)
-
- var/delta_temperature = (temperature_archived - model.temperature)
-
- if(((abs(delta_oxygen) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_oxygen) >= oxygen_archived*MINIMUM_AIR_RATIO_TO_SUSPEND)) \
- || ((abs(delta_carbon_dioxide) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_carbon_dioxide) >= carbon_dioxide_archived*MINIMUM_AIR_RATIO_TO_SUSPEND)) \
- || ((abs(delta_nitrogen) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_nitrogen) >= nitrogen_archived*MINIMUM_AIR_RATIO_TO_SUSPEND)) \
- || ((abs(delta_toxins) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_toxins) >= toxins_archived*MINIMUM_AIR_RATIO_TO_SUSPEND)))
- return 0
- if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND)
- return 0
-
- for(var/gas in trace_gases)
- var/datum/gas/trace_gas = gas
- if(trace_gas.moles_archived > MINIMUM_AIR_TO_SUSPEND*4)
- return 0
-
- return 1
-
-/datum/gas_mixture/proc/check_turf_total(turf/model) //I want this proc to die a painful death
- var/delta_oxygen = (oxygen - model.oxygen)
- var/delta_carbon_dioxide = (carbon_dioxide - model.carbon_dioxide)
- var/delta_nitrogen = (nitrogen - model.nitrogen)
- var/delta_toxins = (toxins - model.toxins)
-
- var/delta_temperature = (temperature - model.temperature)
-
- if(((abs(delta_oxygen) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_oxygen) >= oxygen*MINIMUM_AIR_RATIO_TO_SUSPEND)) \
- || ((abs(delta_carbon_dioxide) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_carbon_dioxide) >= carbon_dioxide*MINIMUM_AIR_RATIO_TO_SUSPEND)) \
- || ((abs(delta_nitrogen) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_nitrogen) >= nitrogen*MINIMUM_AIR_RATIO_TO_SUSPEND)) \
- || ((abs(delta_toxins) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_toxins) >= toxins*MINIMUM_AIR_RATIO_TO_SUSPEND)))
- return 0
- if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND)
- return 0
-
- for(var/gas in trace_gases)
- var/datum/gas/trace_gas = gas
- if(trace_gas.moles > MINIMUM_AIR_TO_SUSPEND*4)
- return 0
-
- return 1
+ var/datum/gas_mixture/copied = new
+ copied.copy_from_turf(model)
+ . = compare(copied, datatype = ARCHIVE, adjacents = atmos_adjacent_turfs)
/datum/gas_mixture/share(datum/gas_mixture/sharer, atmos_adjacent_turfs = 4)
- if(!sharer) return 0
- var/delta_oxygen = QUANTIZE(oxygen_archived - sharer.oxygen_archived)/(atmos_adjacent_turfs+1)
- var/delta_carbon_dioxide = QUANTIZE(carbon_dioxide_archived - sharer.carbon_dioxide_archived)/(atmos_adjacent_turfs+1)
- var/delta_nitrogen = QUANTIZE(nitrogen_archived - sharer.nitrogen_archived)/(atmos_adjacent_turfs+1)
- var/delta_toxins = QUANTIZE(toxins_archived - sharer.toxins_archived)/(atmos_adjacent_turfs+1)
+ . = 0
+ if(!sharer)
+ return
+
+ var/moved_moles = 0
+ var/abs_moved_moles = 0
+ //make this local to the proc for sanic speed
+ var/list/sharercache = sharer.gases
+ var/list/selfcache = gases
var/delta_temperature = (temperature_archived - sharer.temperature_archived)
var/old_self_heat_capacity = 0
var/old_sharer_heat_capacity = 0
- var/heat_capacity_self_to_sharer = 0
- var/heat_capacity_sharer_to_self = 0
-
if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER)
-
- var/delta_air = delta_oxygen+delta_nitrogen
- if(delta_air)
- var/air_heat_capacity = SPECIFIC_HEAT_AIR*delta_air
- if(delta_air > 0)
- heat_capacity_self_to_sharer += air_heat_capacity
- else
- heat_capacity_sharer_to_self -= air_heat_capacity
-
- if(delta_carbon_dioxide)
- var/carbon_dioxide_heat_capacity = SPECIFIC_HEAT_CDO*delta_carbon_dioxide
- if(delta_carbon_dioxide > 0)
- heat_capacity_self_to_sharer += carbon_dioxide_heat_capacity
- else
- heat_capacity_sharer_to_self -= carbon_dioxide_heat_capacity
-
- if(delta_toxins)
- var/toxins_heat_capacity = SPECIFIC_HEAT_TOXIN*delta_toxins
- if(delta_toxins > 0)
- heat_capacity_self_to_sharer += toxins_heat_capacity
- else
- heat_capacity_sharer_to_self -= toxins_heat_capacity
-
old_self_heat_capacity = heat_capacity()
old_sharer_heat_capacity = sharer.heat_capacity()
- oxygen -= delta_oxygen
- sharer.oxygen += delta_oxygen
+ var/heat_capacity_self_to_sharer = 0 //heat capacity of the moles transferred from us to the sharer
+ var/heat_capacity_sharer_to_self = 0 //heat capacity of the moles transferred from the sharer to us
- carbon_dioxide -= delta_carbon_dioxide
- sharer.carbon_dioxide += delta_carbon_dioxide
+ for(var/sharer_id in sharercache-selfcache)
+ add_gas(sharer_id) //we can use add_gas() because we're looping only through the IDs not in our cache
- nitrogen -= delta_nitrogen
- sharer.nitrogen += delta_nitrogen
+ //GAS TRANSFER
+ for(var/id in selfcache)
+ if(!sharercache[id]) //checking here prevents an uneeded proc call if the check fails.
+ sharer.add_gas(id)
- toxins -= delta_toxins
- sharer.toxins += delta_toxins
+ var/gas = selfcache[id]
+ var/sharergas = sharercache[id]
- var/moved_moles = (delta_oxygen + delta_carbon_dioxide + delta_nitrogen + delta_toxins)
- last_share = abs(delta_oxygen) + abs(delta_carbon_dioxide) + abs(delta_nitrogen) + abs(delta_toxins)
+ var/delta = QUANTIZE(gas[ARCHIVE] - sharergas[ARCHIVE])/(atmos_adjacent_turfs+1) //the amount of gas that gets moved between the mixtures
- var/list/trace_types_considered = list()
-
- for(var/gas in trace_gases)
- var/datum/gas/trace_gas = gas
- var/datum/gas/corresponding = locate(trace_gas.type) in sharer.trace_gases
- var/delta = 0
-
- if(corresponding)
- delta = QUANTIZE(trace_gas.moles_archived - corresponding.moles_archived)/(atmos_adjacent_turfs+1)
- else
- corresponding = new trace_gas.type()
- sharer.trace_gases += corresponding
-
- delta = trace_gas.moles_archived/(atmos_adjacent_turfs+1)
-
- trace_gas.moles -= delta
- corresponding.moles += delta
-
- if(delta)
- var/individual_heat_capacity = trace_gas.specific_heat*delta
+ if(delta && abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER)
+ var/gas_heat_capacity = delta * gas[SPECIFIC_HEAT]
if(delta > 0)
- heat_capacity_self_to_sharer += individual_heat_capacity
+ heat_capacity_self_to_sharer += gas_heat_capacity
else
- heat_capacity_sharer_to_self -= individual_heat_capacity
+ heat_capacity_sharer_to_self -= gas_heat_capacity //subtract here instead of adding the absolute value because we know that delta is negative. saves a proc call.
- moved_moles += delta
- last_share += abs(delta)
+ gas[MOLES] -= delta
+ sharergas[MOLES] += delta
+ moved_moles += delta
+ abs_moved_moles += abs(delta)
- trace_types_considered += trace_gas.type
-
- for(var/gas in sharer.trace_gases)
- var/datum/gas/trace_gas = gas
- if(trace_gas.type in trace_types_considered)
- continue
- var/datum/gas/corresponding
- var/delta = 0
- corresponding = new trace_gas.type()
- trace_gases += corresponding
-
- delta = trace_gas.moles_archived/5
-
- trace_gas.moles -= delta
- corresponding.moles += delta
-
- //Guaranteed transfer from sharer to self
- var/individual_heat_capacity = trace_gas.specific_heat*delta
- heat_capacity_sharer_to_self += individual_heat_capacity
-
- moved_moles += -delta
- last_share += abs(delta)
+ last_share = abs_moved_moles
+ //THERMAL ENERGY TRANSFER
if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER)
var/new_self_heat_capacity = old_self_heat_capacity + heat_capacity_sharer_to_self - heat_capacity_self_to_sharer
var/new_sharer_heat_capacity = old_sharer_heat_capacity + heat_capacity_self_to_sharer - heat_capacity_sharer_to_self
+ //transfer of thermal energy (via changed heat capacity) between self and sharer
if(new_self_heat_capacity > MINIMUM_HEAT_CAPACITY)
temperature = (old_self_heat_capacity*temperature - heat_capacity_self_to_sharer*temperature_archived + heat_capacity_sharer_to_self*sharer.temperature_archived)/new_self_heat_capacity
if(new_sharer_heat_capacity > MINIMUM_HEAT_CAPACITY)
sharer.temperature = (old_sharer_heat_capacity*sharer.temperature-heat_capacity_sharer_to_self*sharer.temperature_archived + heat_capacity_self_to_sharer*temperature_archived)/new_sharer_heat_capacity
+ //thermal energy of the system (self and sharer) is unchanged
if(abs(old_sharer_heat_capacity) > MINIMUM_HEAT_CAPACITY)
if(abs(new_sharer_heat_capacity/old_sharer_heat_capacity - 1) < 0.10) // <10% change in sharer heat capacity
@@ -540,78 +447,18 @@ What are the archived variables for?
if((delta_temperature > MINIMUM_TEMPERATURE_TO_MOVE) || abs(moved_moles) > MINIMUM_MOLES_DELTA_TO_MOVE)
var/delta_pressure = temperature_archived*(total_moles() + moved_moles) - sharer.temperature_archived*(sharer.total_moles() - moved_moles)
- return delta_pressure*R_IDEAL_GAS_EQUATION/volume
+ . = delta_pressure*R_IDEAL_GAS_EQUATION/volume
+
+ garbage_collect()
+ sharer.garbage_collect()
/datum/gas_mixture/mimic(turf/model, atmos_adjacent_turfs = 4)
- var/delta_oxygen = QUANTIZE(oxygen_archived - model.oxygen)/(atmos_adjacent_turfs+1)
- var/delta_carbon_dioxide = QUANTIZE(carbon_dioxide_archived - model.carbon_dioxide)/(atmos_adjacent_turfs+1)
- var/delta_nitrogen = QUANTIZE(nitrogen_archived - model.nitrogen)/(atmos_adjacent_turfs+1)
- var/delta_toxins = QUANTIZE(toxins_archived - model.toxins)/(atmos_adjacent_turfs+1)
-
- var/delta_temperature = (temperature_archived - model.temperature)
-
- var/heat_transferred = 0
- var/old_self_heat_capacity = 0
- var/heat_capacity_transferred = 0
-
- if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER)
-
- var/delta_air = delta_oxygen+delta_nitrogen
- if(delta_air)
- var/air_heat_capacity = SPECIFIC_HEAT_AIR*delta_air
- heat_transferred -= air_heat_capacity*model.temperature
- heat_capacity_transferred -= air_heat_capacity
-
- if(delta_carbon_dioxide)
- var/carbon_dioxide_heat_capacity = SPECIFIC_HEAT_CDO*delta_carbon_dioxide
- heat_transferred -= carbon_dioxide_heat_capacity*model.temperature
- heat_capacity_transferred -= carbon_dioxide_heat_capacity
-
- if(delta_toxins)
- var/toxins_heat_capacity = SPECIFIC_HEAT_TOXIN*delta_toxins
- heat_transferred -= toxins_heat_capacity*model.temperature
- heat_capacity_transferred -= toxins_heat_capacity
-
- old_self_heat_capacity = heat_capacity()
-
- oxygen -= delta_oxygen
- carbon_dioxide -= delta_carbon_dioxide
- nitrogen -= delta_nitrogen
- toxins -= delta_toxins
-
- var/moved_moles = (delta_oxygen + delta_carbon_dioxide + delta_nitrogen + delta_toxins)
- last_share = abs(delta_oxygen) + abs(delta_carbon_dioxide) + abs(delta_nitrogen) + abs(delta_toxins)
-
- if(trace_gases.len)
- for(var/gas in trace_gases)
- var/datum/gas/trace_gas = gas
- var/delta = 0
-
- delta = trace_gas.moles_archived/(atmos_adjacent_turfs+1)
-
- trace_gas.moles -= delta
-
- var/heat_cap_transferred = delta*trace_gas.specific_heat
- heat_transferred += heat_cap_transferred*temperature_archived
- heat_capacity_transferred += heat_cap_transferred
- moved_moles += delta
- moved_moles += abs(delta)
-
- if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER)
- var/new_self_heat_capacity = old_self_heat_capacity - heat_capacity_transferred
- if(new_self_heat_capacity > MINIMUM_HEAT_CAPACITY)
- temperature = (old_self_heat_capacity*temperature - heat_capacity_transferred*temperature_archived)/new_self_heat_capacity
-
- temperature_mimic(model, model.thermal_conductivity)
-
- if((delta_temperature > MINIMUM_TEMPERATURE_TO_MOVE) || abs(moved_moles) > MINIMUM_MOLES_DELTA_TO_MOVE)
- var/delta_pressure = temperature_archived*(total_moles() + moved_moles) - model.temperature*(model.oxygen+model.carbon_dioxide+model.nitrogen+model.toxins)
- return delta_pressure*R_IDEAL_GAS_EQUATION/volume
- else
- return 0
+ var/datum/gas_mixture/copied = new
+ copied.copy_from_turf(model)
+ . = share(copied, atmos_adjacent_turfs)
/datum/gas_mixture/temperature_share(datum/gas_mixture/sharer, conduction_coefficient)
-
+ //transfer of thermal energy (via conduction) between self and sharer
var/delta_temperature = (temperature_archived - sharer.temperature_archived)
if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER)
var/self_heat_capacity = heat_capacity_archived()
@@ -621,8 +468,9 @@ What are the archived variables for?
var/heat = conduction_coefficient*delta_temperature* \
(self_heat_capacity*sharer_heat_capacity/(self_heat_capacity+sharer_heat_capacity))
- temperature -= heat/self_heat_capacity
- sharer.temperature += heat/sharer_heat_capacity
+ temperature = max(temperature - heat/self_heat_capacity, TCMB)
+ sharer.temperature = max(sharer.temperature + heat/sharer_heat_capacity, TCMB)
+ //thermal energy of the system (self and sharer) is unchanged
/datum/gas_mixture/temperature_mimic(turf/model, conduction_coefficient)
var/delta_temperature = (temperature - model.temperature)
@@ -633,7 +481,7 @@ What are the archived variables for?
var/heat = conduction_coefficient*delta_temperature* \
(self_heat_capacity*model.heat_capacity/(self_heat_capacity+model.heat_capacity))
- temperature -= heat/self_heat_capacity
+ temperature = max(temperature - heat/self_heat_capacity, TCMB)
/datum/gas_mixture/temperature_turf_share(turf/simulated/sharer, conduction_coefficient)
var/delta_temperature = (temperature_archived - sharer.temperature)
@@ -644,53 +492,54 @@ What are the archived variables for?
var/heat = conduction_coefficient*delta_temperature* \
(self_heat_capacity*sharer.heat_capacity/(self_heat_capacity+sharer.heat_capacity))
- temperature -= heat/self_heat_capacity
- sharer.temperature += heat/sharer.heat_capacity
+ temperature = max(temperature - heat/self_heat_capacity, TCMB)
+ sharer.temperature = max(sharer.temperature + heat/sharer.heat_capacity, TCMB)
-/datum/gas_mixture/compare(datum/gas_mixture/sample)
- if((abs(oxygen-sample.oxygen) > MINIMUM_AIR_TO_SUSPEND) && \
- ((oxygen < (1-MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.oxygen) || (oxygen > (1+MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.oxygen)))
- return 0
- if((abs(nitrogen-sample.nitrogen) > MINIMUM_AIR_TO_SUSPEND) && \
- ((nitrogen < (1-MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.nitrogen) || (nitrogen > (1+MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.nitrogen)))
- return 0
- if((abs(carbon_dioxide-sample.carbon_dioxide) > MINIMUM_AIR_TO_SUSPEND) && \
- ((carbon_dioxide < (1-MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.carbon_dioxide) || (oxygen > (1+MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.carbon_dioxide)))
- return 0
- if((abs(toxins-sample.toxins) > MINIMUM_AIR_TO_SUSPEND) && \
- ((toxins < (1-MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.toxins) || (toxins > (1+MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.toxins)))
- return 0
+/datum/gas_mixture/compare(datum/gas_mixture/sample, datatype = MOLES, adjacents = 0)
+ . = ""
+ var/list/sample_gases = sample.gases //accessing datum vars is slower than proc vars
+ var/list/cached_gases = gases
+
+ for(var/id in cached_gases|sample_gases)
+ var/gas_moles = cached_gases[id] ? cached_gases[id][datatype] : 0
+ var/sample_moles = sample_gases[id] ? sample_gases[id][datatype] : 0
+ var/delta = abs(gas_moles - sample_moles)/(adjacents+1)
+ if(delta > MINIMUM_AIR_TO_SUSPEND && \
+ delta > gas_moles*MINIMUM_AIR_RATIO_TO_SUSPEND)
+ return id
if(total_moles() > MINIMUM_AIR_TO_SUSPEND)
- if((abs(temperature-sample.temperature) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) && \
- ((temperature < (1-MINIMUM_TEMPERATURE_RATIO_TO_SUSPEND)*sample.temperature) || (temperature > (1+MINIMUM_TEMPERATURE_RATIO_TO_SUSPEND)*sample.temperature)))
- return 0
+ var/temp
+ var/sample_temp
- for(var/gas in sample.trace_gases)
- var/datum/gas/trace_gas = gas
- if(trace_gas.moles_archived > MINIMUM_AIR_TO_SUSPEND)
- var/datum/gas/corresponding = locate(trace_gas.type) in trace_gases
- if(corresponding)
- if((abs(trace_gas.moles - corresponding.moles) > MINIMUM_AIR_TO_SUSPEND) && \
- ((corresponding.moles < (1-MINIMUM_AIR_RATIO_TO_SUSPEND)*trace_gas.moles) || (corresponding.moles > (1+MINIMUM_AIR_RATIO_TO_SUSPEND)*trace_gas.moles)))
- return 0
- else
- return 0
+ switch(datatype)
+ if(MOLES)
+ temp = temperature
+ sample_temp = sample.temperature
+ if(ARCHIVE)
+ temp = temperature_archived
+ sample_temp = sample.temperature_archived
- for(var/gas in trace_gases)
- var/datum/gas/trace_gas = gas
- if(trace_gas.moles > MINIMUM_AIR_TO_SUSPEND)
- var/datum/gas/corresponding = locate(trace_gas.type) in sample.trace_gases
- if(corresponding)
- if((abs(trace_gas.moles - corresponding.moles) > MINIMUM_AIR_TO_SUSPEND) && \
- ((trace_gas.moles < (1-MINIMUM_AIR_RATIO_TO_SUSPEND)*corresponding.moles) || (trace_gas.moles > (1+MINIMUM_AIR_RATIO_TO_SUSPEND)*corresponding.moles)))
- return 0
- else
- return 0
- return 1
+ var/delta_temperature = abs(temp-sample_temp)
+ if((delta_temperature > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) && \
+ delta_temperature > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND*temp)
+ return "temp"
+/datum/gas_mixture/copy_from_turf(turf/model)
+ assert_gases(arglist(hardcoded_gases))
+ var/list/cached_gases = gases
+ cached_gases["o2"][MOLES] = model.oxygen
+ cached_gases["n2"][MOLES] = model.nitrogen
+ cached_gases["plasma"][MOLES] = model.toxins
+ cached_gases["co2"][MOLES] = model.carbon_dioxide
+ for(var/id in cached_gases-hardcoded_gases)
+ cached_gases[id][MOLES] = 0 //turfs don't account for anything other than the four old hardcoded gases
+
+ temperature = model.temperature
+
+ garbage_collect()
//Takes the amount of the gas you want to PP as an argument
//So I don't have to do some hacky switches/defines/magic strings
diff --git a/code/datums/helper_datums/events.dm b/code/datums/helper_datums/events.dm
index f5e60ee7b0c..fa0dccd2a15 100644
--- a/code/datums/helper_datums/events.dm
+++ b/code/datums/helper_datums/events.dm
@@ -34,7 +34,7 @@
//world << "Events in [args[1]] called"
var/list/event = listgetindex(events,args[1])
if(istype(event))
- spawn(-1)
+ spawn(0)
for(var/datum/event/E in event)
if(!E.Fire(arglist(args.Copy(2))))
clearEvent(args[1],E)
diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm
index 6c22a9c08db..ef73781c1e6 100644
--- a/code/datums/helper_datums/teleport.dm
+++ b/code/datums/helper_datums/teleport.dm
@@ -82,12 +82,12 @@
/datum/teleport/proc/playSpecials(atom/location,datum/effect_system/effect,sound)
if(location)
if(effect)
- spawn(-1)
+ spawn(0)
src = null
effect.attach(location)
effect.start()
if(sound)
- spawn(-1)
+ spawn(0)
src = null
playsound(location,sound,60,1)
return
diff --git a/code/datums/mind.dm b/code/datums/mind.dm
index 1ee1a3d01ea..22b7df55380 100644
--- a/code/datums/mind.dm
+++ b/code/datums/mind.dm
@@ -1,1579 +1,1687 @@
-/* Note from Carnie:
- The way datum/mind stuff works has been changed a lot.
- Minds now represent IC characters rather than following a client around constantly.
-
- Guidelines for using minds properly:
-
- - Never mind.transfer_to(ghost). The var/current and var/original of a mind must always be of type mob/living!
- ghost.mind is however used as a reference to the ghost's corpse
-
- - When creating a new mob for an existing IC character (e.g. cloning a dead guy or borging a brain of a human)
- the existing mind of the old mob should be transfered to the new mob like so:
-
- mind.transfer_to(new_mob)
-
- - You must not assign key= or ckey= after transfer_to() since the transfer_to transfers the client for you.
- By setting key or ckey explicitly after transfering the mind with transfer_to you will cause bugs like DCing
- the player.
-
- - IMPORTANT NOTE 2, if you want a player to become a ghost, use mob.ghostize() It does all the hard work for you.
-
- - When creating a new mob which will be a new IC character (e.g. putting a shade in a construct or randomly selecting
- a ghost to become a xeno during an event). Simply assign the key or ckey like you've always done.
-
- new_mob.key = key
-
- The Login proc will handle making a new mob for that mobtype (including setting up stuff like mind.name). Simple!
- However if you want that mind to have any special properties like being a traitor etc you will have to do that
- yourself.
-
-*/
-
-/datum/mind
- var/key
- var/name //replaces mob/var/original_name
- var/mob/living/current
- var/active = 0
-
- var/memory
-
- var/assigned_role
- var/special_role
- var/list/restricted_roles = list()
-
- var/datum/job/assigned_job
-
- var/list/datum/objective/objectives = list()
- var/list/datum/objective/special_verbs = list()
-
- var/list/spell_list = list() // Wizard mode & "Give Spell" badmin button.
-
- var/datum/faction/faction //associated faction
- var/datum/changeling/changeling //changeling holder
-
- var/miming = 0 // Mime's vow of silence
- var/antag_hud_icon_state = null //this mind's ANTAG_HUD should have this icon_state
- var/datum/atom_hud/antag/antag_hud = null //this mind's antag HUD
- var/datum/gang/gang_datum //Which gang this mind belongs to, if any
-
-/datum/mind/New(var/key)
- src.key = key
-
-
-/datum/mind/proc/transfer_to(mob/new_character)
- if(current) // remove ourself from our old body's mind variable
- current.mind = null
- SStgui.on_transfer(current, new_character)
-
- if(key)
- if(new_character.key != key) //if we're transfering into a body with a key associated which is not ours
- new_character.ghostize(1) //we'll need to ghostize so that key isn't mobless.
- else
- key = new_character.key
-
- if(new_character.mind) //disassociate any mind currently in our new body's mind variable
- new_character.mind.current = null
-
- var/datum/atom_hud/antag/hud_to_transfer = antag_hud//we need this because leave_hud() will clear this list
- leave_all_huds() //leave all the huds in the old body, so it won't get huds if somebody else enters it
- current = new_character //associate ourself with our new body
- new_character.mind = src //and associate our new body with ourself
- transfer_antag_huds(hud_to_transfer) //inherit the antag HUD
- transfer_actions(new_character)
-
- if(active)
- new_character.key = key //now transfer the key to link the client to our new body
-
-/datum/mind/proc/store_memory(new_text)
- memory += "[new_text]
"
-
-/datum/mind/proc/wipe_memory()
- memory = null
-
-
-/*
- Removes antag type's references from a mind.
- objectives, uplinks, powers etc are all handled.
-*/
-
-/datum/mind/proc/remove_objectives()
- if(objectives.len)
- for(var/datum/objective/O in objectives)
- objectives -= O
- qdel(O)
-
-/datum/mind/proc/remove_changeling()
- if(src in ticker.mode.changelings)
- ticker.mode.changelings -= src
- current.remove_changeling_powers()
- if(changeling)
- qdel(changeling)
- changeling = null
- special_role = null
- remove_antag_equip()
-
-/datum/mind/proc/remove_traitor()
- if(src in ticker.mode.traitors)
- ticker.mode.traitors -= src
- if(isAI(current))
- var/mob/living/silicon/ai/A = current
- A.set_zeroth_law("")
- A.show_laws()
- A.verbs -= /mob/living/silicon/ai/proc/choose_modules
- A.malf_picker.remove_verbs(A)
- qdel(A.malf_picker)
- special_role = null
- remove_antag_equip()
-
-/datum/mind/proc/remove_nukeop()
- if(src in ticker.mode.syndicates)
- ticker.mode.syndicates -= src
- ticker.mode.update_synd_icons_removed(src)
- special_role = null
- remove_objectives()
- remove_antag_equip()
-
-/datum/mind/proc/remove_wizard()
- if(src in ticker.mode.wizards)
- ticker.mode.wizards -= src
- current.spellremove(current)
- special_role = null
- remove_antag_equip()
-
-/datum/mind/proc/remove_cultist()
- if(src in ticker.mode.cult)
- ticker.mode.cult -= src
- ticker.mode.update_cult_icons_removed(src)
- special_role = null
-
-/datum/mind/proc/remove_rev()
- if(src in ticker.mode.revolutionaries)
- ticker.mode.revolutionaries -= src
- ticker.mode.update_rev_icons_removed(src)
- if(src in ticker.mode.head_revolutionaries)
- ticker.mode.head_revolutionaries -= src
- ticker.mode.update_rev_icons_removed(src)
- special_role = null
- remove_objectives()
- remove_antag_equip()
-
-
-/datum/mind/proc/remove_gang()
- ticker.mode.remove_gangster(src,0,1,1)
- remove_objectives()
-
-/datum/mind/proc/remove_hog_follower_prophet()
- ticker.mode.red_deity_followers -= src
- ticker.mode.red_deity_prophets -= src
- ticker.mode.blue_deity_prophets -= src
- ticker.mode.blue_deity_followers -= src
- ticker.mode.update_hog_icons_removed(src, "red")
- ticker.mode.update_hog_icons_removed(src, "blue")
-
-
-
-/datum/mind/proc/remove_antag_equip()
- var/list/Mob_Contents = current.get_contents()
- for(var/obj/item/I in Mob_Contents)
- if(istype(I, /obj/item/device/pda))
- var/obj/item/device/pda/P = I
- P.lock_code = ""
-
- else if(istype(I, /obj/item/device/radio))
- var/obj/item/device/radio/R = I
- R.traitor_frequency = 0
-
-/datum/mind/proc/remove_all_antag() //For the Lazy amongst us.
- remove_changeling()
- remove_traitor()
- remove_nukeop()
- remove_wizard()
- remove_cultist()
- remove_rev()
- remove_gang()
-
-/datum/mind/proc/show_memory(mob/recipient, window=1)
- if(!recipient)
- recipient = current
- var/output = "[current.real_name]'s Memories:
"
- output += memory
-
- if(objectives.len)
- output += "Objectives:"
- var/obj_count = 1
- for(var/datum/objective/objective in objectives)
- output += "
Objective #[obj_count++]: [objective.explanation_text]"
-
- if(window) recipient << browse(output,"window=memory")
- else recipient << "[output]"
-
-/datum/mind/proc/edit_memory()
- if(!ticker || !ticker.mode)
- alert("Not before round-start!", "Alert")
- return
-
- var/out = "[name][(current&&(current.real_name!=name))?" (as [current.real_name])":""]
"
- out += "Mind currently owned by key: [key] [active?"(synced)":"(not synced)"]
"
- out += "Assigned role: [assigned_role]. Edit
"
- out += "Faction and special role: [special_role]
"
-
- var/list/sections = list(
- "revolution",
- "gang",
- "cult",
- "wizard",
- "changeling",
- "nuclear",
- "traitor", // "traitorchan",
- "monkey",
- )
- var/text = ""
-
- if (istype(current, /mob/living/carbon/human) || istype(current, /mob/living/carbon/monkey))
- /** REVOLUTION ***/
- text = "revolution"
- if (ticker.mode.config_tag=="revolution")
- text = uppertext(text)
- text = "[text]: "
- if (assigned_role in command_positions)
- text += "HEAD|loyal|employee|headrev|rev"
- else if (src in ticker.mode.head_revolutionaries)
- text += "head|loyal|employee|HEADREV|rev"
- text += "
Flash: give"
-
- var/list/L = current.get_contents()
- var/obj/item/device/assembly/flash/flash = locate() in L
- if (flash)
- if(!flash.crit_fail)
- text += "|take."
- else
- text += "|take|repair."
- else
- text += "."
-
- text += " Reequip (gives traitor uplink)."
- if (objectives.len==0)
- text += "
Objectives are empty! Set to kill all heads."
- else if(isloyal(current))
- text += "head|LOYAL|employee|headrev|rev"
- else if (src in ticker.mode.revolutionaries)
- text += "head|loyal|employee|headrev|REV"
- else
- text += "head|loyal|EMPLOYEE|headrev|rev"
-
- if(current && current.client && (ROLE_REV in current.client.prefs.be_special))
- text += "|Enabled in Prefs"
- else
- text += "|Disabled in Prefs"
-
- sections["revolution"] = text
-
- /** GANG ***/
- text = "gang"
- if (ticker.mode.config_tag=="gang")
- text = uppertext(text)
- text = "[text]: "
- text += "[isloyal(current) ? "LOYAL" : "loyal"]|"
- if(src in ticker.mode.get_all_gangsters())
- text += "none"
- else
- text += "NONE"
-
- if(current && current.client && (ROLE_GANG in current.client.prefs.be_special))
- text += "|Enabled in Prefs
"
- else
- text += "|Disabled in Prefs
"
-
- for(var/datum/gang/G in ticker.mode.gangs)
- text += "[G.name]: "
- if(src in (G.gangsters))
- text += "GANGSTER"
- else
- text += "gangster"
- text += "|"
- if(src in (G.bosses))
- text += "GANG LEADER"
- text += "|Equipment: give"
- var/list/L = current.get_contents()
- var/obj/item/device/gangtool/gangtool = locate() in L
- if (gangtool)
- text += "|take"
-
- else
- text += "gang leader"
- text += "
"
-
- if(gang_colors_pool.len)
- text += "Create New Gang"
-
- sections["gang"] = text
-
-
- /** CULT ***/
- text = "cult"
- if (ticker.mode.config_tag=="cult")
- text = uppertext(text)
- text = "[text]: "
- if (src in ticker.mode.cult)
- text += "loyal|employee|CULTIST"
- text += "
Equip"
-
- else if(isloyal(current))
- text += "LOYAL|employee|cultist"
- else
- text += "loyal|EMPLOYEE|cultist"
-
- if(current && current.client && (ROLE_CULTIST in current.client.prefs.be_special))
- text += "|Enabled in Prefs"
- else
- text += "|Disabled in Prefs"
-
- sections["cult"] = text
-
- /** WIZARD ***/
- text = "wizard"
- if (ticker.mode.config_tag=="wizard")
- text = uppertext(text)
- text = "[text]: "
- if ((src in ticker.mode.wizards) || (src in ticker.mode.apprentices))
- text += "YES|no"
- text += "
To lair, undress, dress up, let choose name."
- if (objectives.len==0)
- text += "
Objectives are empty! Randomize!"
- else
- text += "yes|NO"
-
- if(current && current.client && (ROLE_WIZARD in current.client.prefs.be_special))
- text += "|Enabled in Prefs"
- else
- text += "|Disabled in Prefs"
-
- sections["wizard"] = text
-
- /** CHANGELING ***/
- text = "changeling"
- if (ticker.mode.config_tag=="changeling" || ticker.mode.config_tag=="traitorchan")
- text = uppertext(text)
- text = "[text]: "
- if ((src in ticker.mode.changelings) && special_role)
- text += "YES|no"
- if (objectives.len==0)
- text += "
Objectives are empty! Randomize!"
- if(changeling && changeling.stored_profiles.len && (current.real_name != changeling.first_prof.name) )
- text += "
Transform to initial appearance."
- else if(src in ticker.mode.changelings) //Station Aligned Changeling
- text += "YES (but not an antag)|no"
- if (objectives.len==0)
- text += "
Objectives are empty! Randomize!"
- if(changeling && changeling.stored_profiles.len && (current.real_name != changeling.first_prof.name) )
- text += "
Transform to initial appearance."
- else
- text += "yes|NO"
-// var/datum/game_mode/changeling/changeling = ticker.mode
-// if (istype(changeling) && changeling.changelingdeath)
-// text += "
All the changelings are dead! Restart in [round((changeling.TIME_TO_GET_REVIVED-(world.time-changeling.changelingdeathtime))/10)] seconds."
-
- if(current && current.client && (ROLE_CHANGELING in current.client.prefs.be_special))
- text += "|Enabled in Prefs"
- else
- text += "|Disabled in Prefs"
-
- sections["changeling"] = text
-
- /** NUCLEAR ***/
- text = "nuclear"
- if (ticker.mode.config_tag=="nuclear")
- text = uppertext(text)
- text = "[text]: "
- if (src in ticker.mode.syndicates)
- text += "OPERATIVE|nanotrasen"
- text += "
To shuttle, undress, dress up."
- var/code
- for (var/obj/machinery/nuclearbomb/bombue in machines)
- if (length(bombue.r_code) <= 5 && bombue.r_code != "LOLNO" && bombue.r_code != "ADMIN")
- code = bombue.r_code
- break
- if (code)
- text += " Code is [code]. tell the code."
- else
- text += "operative|NANOTRASEN"
-
- if(current && current.client && (ROLE_OPERATIVE in current.client.prefs.be_special))
- text += "|Enabled in Prefs"
- else
- text += "|Disabled in Prefs"
-
- sections["nuclear"] = text
-
- /** TRAITOR ***/
- text = "traitor"
- if (ticker.mode.config_tag=="traitor" || ticker.mode.config_tag=="traitorchan")
- text = uppertext(text)
- text = "[text]: "
- if (src in ticker.mode.traitors)
- text += "TRAITOR|loyal"
- if (objectives.len==0)
- text += "
Objectives are empty! Randomize!"
- else
- text += "traitor|LOYAL"
-
- if(current && current.client && (ROLE_TRAITOR in current.client.prefs.be_special))
- text += "|Enabled in Prefs"
- else
- text += "|Disabled in Prefs"
-
- sections["traitor"] = text
-
- /** SHADOWLING **/
- text = "shadowling"
- if(ticker.mode.config_tag == "shadowling")
- text = uppertext(text)
- text = "[text]: "
- if(src in ticker.mode.shadows)
- text += "SHADOWLING|thrall|human"
- else if(src in ticker.mode.thralls)
- text += "shadowling|THRALL|human"
- else
- text += "shadowling|thrall|HUMAN"
-
- if(current && current.client && (ROLE_SHADOWLING in current.client.prefs.be_special))
- text += "|Enabled in Prefs"
- else
- text += "|Disabled in Prefs"
-
- sections["shadowling"] = text
-
- /** Abductors **/
-
- text = "Abductor"
- if(ticker.mode.config_tag == "abductor")
- text = uppertext(text)
- text = "[text]: "
- if(src in ticker.mode.abductors)
- text += "Abductor|human"
- text += "|undress|equip"
- else
- text += "Abductor|human"
-
- if(current && current.client && (ROLE_ABDUCTOR in current.client.prefs.be_special))
- text += "|Enabled in Prefs"
- else
- text += "|Disabled in Prefs"
-
- sections["abductor"] = text
-
- /** HAND OF GOD **/
- text = "hand of god"
- if(ticker.mode.config_tag == "handofgod")
- text = uppertext(text)
- text = "[text]: "
- if(src in ticker.mode.red_deity_prophets)
- text += "RED PROPHET|red follower|employee|blue follower|blue prophet|red god|blue god"
- else if (src in ticker.mode.red_deity_followers)
- text += "red prophet|RED FOLLOWER|employee|blue follower|blue prophet|red god|blue god"
- else if (src in ticker.mode.blue_deity_followers)
- text += "red prophet|red follower|employee|BLUE FOLLOWER|blue prophet|red god|blue god"
- else if (src in ticker.mode.blue_deity_prophets)
- text += "red prophet|red follower|employee|blue follower|BLUE PROPHET|red god|blue god"
- else if (src in ticker.mode.red_deities)
- text += "red prophet|red follower|employee|blue follower|blue prophet|RED GOD|blue god"
- else if (src in ticker.mode.blue_deities)
- text += "red prophet|red follower|employee|blue follower|blue prophet|red god|BLUE GOD"
- else
- text += "red prophet|red follower|EMPLOYEE|blue follower|blue prophet|red god|blue god"
-
- if(current && current.client && (ROLE_HOG_GOD in current.client.prefs.be_special))
- text += "|HOG God Enabled in Prefs"
- else
- text += "|HOG God Disabled in Prefs"
-
- if(current && current.client && (ROLE_HOG_CULTIST in current.client.prefs.be_special))
- text += "|HOG Cultist Enabled in Prefs"
- else
- text += "|HOG Disabled in Prefs"
-
- sections["follower"] = text
-
- /** MONKEY ***/
- if (istype(current, /mob/living/carbon))
- text = "monkey"
- if (ticker.mode.config_tag=="monkey")
- text = uppertext(text)
- text = "[text]: "
- if (istype(current, /mob/living/carbon/human))
- text += "healthy|infected|HUMAN|other"
- else if (istype(current, /mob/living/carbon/monkey))
- var/found = 0
- for(var/datum/disease/D in current.viruses)
- if(istype(D, /datum/disease/transformation/jungle_fever)) found = 1
-
- if(found)
- text += "healthy|INFECTED|human|other"
- else
- text += "HEALTHY|infected|human|other"
-
- else
- text += "healthy|infected|human|OTHER"
-
- if(current && current.client && (ROLE_MONKEY in current.client.prefs.be_special))
- text += "|Enabled in Prefs"
- else
- text += "|Disabled in Prefs"
-
- sections["monkey"] = text
-
-
- /** SILICON ***/
-
- if (istype(current, /mob/living/silicon))
- text = "silicon"
- var/mob/living/silicon/robot/robot = current
- if (istype(robot) && robot.emagged)
- text += "
Cyborg: Is emagged! Unemag!
0th law: [robot.laws.zeroth]"
- var/mob/living/silicon/ai/ai = current
- if (istype(ai) && ai.connected_robots.len)
- var/n_e_robots = 0
- for (var/mob/living/silicon/robot/R in ai.connected_robots)
- if (R.emagged)
- n_e_robots++
- text += "
[n_e_robots] of [ai.connected_robots.len] slaved cyborgs are emagged. Unemag"
- if (ticker.mode.config_tag == "traitorchan")
- if (sections["traitor"])
- out += sections["traitor"]+"
"
- if (sections["changeling"])
- out += sections["changeling"]+"
"
- sections -= "traitor"
- sections -= "changeling"
- else
- if (sections[ticker.mode.config_tag])
- out += sections[ticker.mode.config_tag]+"
"
- sections -= ticker.mode.config_tag
- for (var/i in sections)
- if (sections[i])
- out += sections[i]+"
"
-
-
- if (((src in ticker.mode.head_revolutionaries) || \
- (src in ticker.mode.traitors) || \
- (src in ticker.mode.syndicates)) && \
- istype(current,/mob/living/carbon/human) )
-
- text = "Uplink: give"
- var/obj/item/device/uplink/hidden/suplink = find_syndicate_uplink()
- var/crystals
- if (suplink)
- crystals = suplink.uses
- if (suplink)
- text += "|take"
- if (check_rights(R_FUN, 0))
- text += ", [crystals] crystals"
- else
- text += ", [crystals] crystals"
- text += "." //hiel grammar
- out += text
-
- out += "
"
-
- out += "Memory:
"
- out += memory
- out += "
Edit memory
"
- out += "Objectives:
"
- if (objectives.len == 0)
- out += "EMPTY
"
- else
- var/obj_count = 1
- for(var/datum/objective/objective in objectives)
- out += "[obj_count]: [objective.explanation_text] Edit Delete Toggle Completion
"
- obj_count++
- out += "Add objective
"
-
- out += "Announce objectives
"
-
- usr << browse(out, "window=edit_memory[src];size=500x600")
-
-
-
-/datum/mind/Topic(href, href_list)
- if(!check_rights(R_ADMIN))
- return
-
- if (href_list["role_edit"])
- var/new_role = input("Select new role", "Assigned role", assigned_role) as null|anything in get_all_jobs()
- if (!new_role)
- return
- assigned_role = new_role
-
- else if (href_list["memory_edit"])
- var/new_memo = copytext(sanitize(input("Write new memory", "Memory", memory) as null|message),1,MAX_MESSAGE_LEN)
- if (isnull(new_memo))
- return
- memory = new_memo
-
- else if (href_list["obj_edit"] || href_list["obj_add"])
- var/datum/objective/objective
- var/objective_pos
- var/def_value
-
- if (href_list["obj_edit"])
- objective = locate(href_list["obj_edit"])
- if (!objective)
- return //sanity
- def_value = objective.type
-
- var/datum/objective/new_obj_type = input("Select objective type:", "Objective type", def_value) as null|anything in (typesof(/datum/objective) - list(/datum/objective, /datum/objective/default, /datum/objective/escape_obj, /datum/objective/changeling_team_objective)) //keep out the abstract ones
- if (!new_obj_type)
- return
- if (initial(new_obj_type.required_role) != special_role && initial(new_obj_type.required_role) != null)
- if(alert("The objective requires a special_role that this mind does not have. The player may not be able to complete the objective. Are you sure you want to continue?","uh oh" ,"Yes", "No") == "No")
- return
-
- var/datum/objective/new_objective = add_objective(src, new_obj_type)
-
- if (istype(new_objective, /datum/objective/custom)) //it's lame I know but this type is snowflaky by its very nature
- var/expl = stripped_input(usr, "Custom objective:", "Objective", objective ? objective.explanation_text : "")
- if (!expl)
- expl = "Free objective"
- new_objective.explanation_text = expl
-
- if (!new_objective)
- usr << initial(new_obj_type.error_text)
- return
-
- if (objective)
- objectives -= objective
- objectives.Insert(objective_pos, new_objective)
- message_admins("[key_name_admin(usr)] edited [current]'s objective to [new_objective.explanation_text]")
- log_admin("[key_name(usr)] edited [current]'s objective to [new_objective.explanation_text]")
- else
- message_admins("[key_name_admin(usr)] added a new objective for [current]: [new_objective.explanation_text]")
- log_admin("[key_name(usr)] added a new objective for [current]: [new_objective.explanation_text]")
-
- else if (href_list["obj_delete"])
- var/datum/objective/objective = locate(href_list["obj_delete"])
- if(!istype(objective))
- return
- objectives -= objective
- message_admins("[key_name_admin(usr)] removed an objective for [current]: [objective.explanation_text]")
- log_admin("[key_name(usr)] removed an objective for [current]: [objective.explanation_text]")
-
- else if(href_list["obj_completed"])
- var/datum/objective/objective = locate(href_list["obj_completed"])
- if(!istype(objective))
- return
- objective.completed = !objective.completed
- log_admin("[key_name(usr)] toggled the win state for [current]'s objective: [objective.explanation_text]")
- else if (href_list["handofgod"])
- switch(href_list["handofgod"])
- if("clear") //wipe handofgod status
- if((src in ticker.mode.red_deity_followers) || (src in ticker.mode.blue_deity_followers) || (src in ticker.mode.red_deity_prophets) || (src in ticker.mode.blue_deity_prophets))
- remove_hog_follower_prophet()
- current << "You have been brainwashed... again! Your faith is no more!"
- message_admins("[key_name_admin(usr)] has de-hand of god'ed [current].")
- log_admin("[key_name(usr)] has de-hand of god'ed [current].")
-
- if("red follower")
- make_Handofgod_follower("red")
- message_admins("[key_name_admin(usr)] has red follower'ed [current].")
- log_admin("[key_name(usr)] has red follower'ed [current].")
-
- if("red prophet")
- make_Handofgod_prophet("red")
- message_admins("[key_name_admin(usr)] has red prophet'ed [current].")
- log_admin("[key_name(usr)] has red prophet'ed [current].")
-
- if("blue follower")
- make_Handofgod_follower("blue")
- message_admins("[key_name_admin(usr)] has blue follower'ed [current].")
- log_admin("[key_name(usr)] has blue follower'ed [current].")
-
- if("blue prophet")
- make_Handofgod_prophet("blue")
- message_admins("[key_name_admin(usr)] has blue prophet'ed [current].")
- log_admin("[key_name(usr)] has blue prophet'ed [current].")
-
- if("red god")
- make_Handofgod_god("red")
- message_admins("[key_name_admin(usr)] has red god'ed [current].")
- log_admin("[key_name(usr)] has red god'ed [current].")
-
- if("blue god")
- make_Handofgod_god("blue")
- message_admins("[key_name_admin(usr)] has blue god'ed [current].")
- log_admin("[key_name(usr)] has blue god'ed [current].")
-
- else if (href_list["revolution"])
- switch(href_list["revolution"])
- if("clear")
- remove_rev()
- current << "You have been brainwashed! You are no longer a revolutionary!"
- message_admins("[key_name_admin(usr)] has de-rev'ed [current].")
- log_admin("[key_name(usr)] has de-rev'ed [current].")
- if("rev")
- if(src in ticker.mode.head_revolutionaries)
- ticker.mode.head_revolutionaries -= src
- ticker.mode.update_rev_icons_removed(src)
- current << "Revolution has been disappointed of your leader traits! You are a regular revolutionary now!"
- else if(!(src in ticker.mode.revolutionaries))
- current << " You are now a revolutionary! Help your cause. Do not harm your fellow freedom fighters. You can identify your comrades by the red \"R\" icons, and your leaders by the blue \"R\" icons. Help them kill the heads to win the revolution!"
- else
- return
- ticker.mode.revolutionaries += src
- ticker.mode.update_rev_icons_added(src)
- special_role = "Revolutionary"
- message_admins("[key_name_admin(usr)] has rev'ed [current].")
- log_admin("[key_name(usr)] has rev'ed [current].")
-
- if("headrev")
- if(src in ticker.mode.revolutionaries)
- ticker.mode.revolutionaries -= src
- ticker.mode.update_rev_icons_removed(src)
- current << "You have proved your devotion to revoltion! Yea are a head revolutionary now!"
- else if(!(src in ticker.mode.head_revolutionaries))
- current << "You are a member of the revolutionaries' leadership now!"
- else
- return
- if (ticker.mode.head_revolutionaries.len>0)
- // copy targets
- var/datum/mind/valid_head = locate() in ticker.mode.head_revolutionaries
- if (valid_head)
- for (var/datum/objective/mutiny/O in valid_head.objectives)
- var/datum/objective/mutiny/rev_obj = new
- rev_obj.owner = src
- rev_obj.target = O.target
- rev_obj.explanation_text = "Assassinate [O.target.name], the [O.target.assigned_role]."
- objectives += rev_obj
- ticker.mode.greet_revolutionary(src,0)
- ticker.mode.head_revolutionaries += src
- ticker.mode.update_rev_icons_added(src)
- special_role = "Head Revolutionary"
- message_admins("[key_name_admin(usr)] has head-rev'ed [current].")
- log_admin("[key_name(usr)] has head-rev'ed [current].")
-
- if("autoobjectives")
- ticker.mode.forge_revolutionary_objectives(src)
- ticker.mode.greet_revolutionary(src,0)
- usr << "The objectives for revolution have been generated and shown to [key]"
-
- if("flash")
- if (!ticker.mode.equip_revolutionary(current))
- usr << "Spawning flash failed!"
-
- if("takeflash")
- var/list/L = current.get_contents()
- var/obj/item/device/assembly/flash/flash = locate() in L
- if (!flash)
- usr << "Deleting flash failed!"
- qdel(flash)
-
- if("repairflash")
- var/list/L = current.get_contents()
- var/obj/item/device/assembly/flash/flash = locate() in L
- if (!flash)
- usr << "Repairing flash failed!"
- else
- flash.crit_fail = 0
- flash.update_icon()
-
-
-
-//////////////////// GANG MODE
-
- else if (href_list["gang"])
- switch(href_list["gang"])
- if("clear")
- remove_gang()
- message_admins("[key_name_admin(usr)] has de-gang'ed [current].")
- log_admin("[key_name(usr)] has de-gang'ed [current].")
-
- if("equip")
- switch(ticker.mode.equip_gang(current,gang_datum))
- if(1)
- usr << "Unable to equip territory spraycan!"
- if(2)
- usr << "Unable to equip recruitment pen and spraycan!"
- if(3)
- usr << "Unable to equip gangtool, pen, and spraycan!"
-
- if("takeequip")
- var/list/L = current.get_contents()
- for(var/obj/item/weapon/pen/gang/pen in L)
- qdel(pen)
- for(var/obj/item/device/gangtool/gangtool in L)
- qdel(gangtool)
- for(var/obj/item/toy/crayon/spraycan/gang/SC in L)
- qdel(SC)
-
- if("new")
- if(gang_colors_pool.len)
- var/list/names = list("Random") + gang_name_pool
- var/gangname = input("Pick a gang name.","Select Name") as null|anything in names
- if(gangname && gang_colors_pool.len) //Check again just in case another admin made max gangs at the same time
- if(!(gangname in gang_name_pool))
- gangname = null
- var/datum/gang/newgang = new(null,gangname)
- ticker.mode.gangs += newgang
- message_admins("[key_name_admin(usr)] has created the [newgang.name] Gang.")
- log_admin("[key_name(usr)] has created the [newgang.name] Gang.")
-
- else if (href_list["gangboss"])
- var/datum/gang/G = locate(href_list["gangboss"]) in ticker.mode.gangs
- if(!G || (src in G.bosses))
- return
- ticker.mode.remove_gangster(src,0,2,1)
- G.bosses += src
- gang_datum = G
- special_role = "[G.name] Gang Boss"
- G.add_gang_hud(src)
- current << "You are a [G.name] Gang Boss!"
- message_admins("[key_name_admin(usr)] has added [current] to the [G.name] Gang leadership.")
- log_admin("[key_name(usr)] has added [current] to the [G.name] Gang leadership.")
- ticker.mode.forge_gang_objectives(src)
- ticker.mode.greet_gang(src,0)
-
- else if (href_list["gangster"])
- var/datum/gang/G = locate(href_list["gangster"]) in ticker.mode.gangs
- if(!G || (src in G.gangsters))
- return
- ticker.mode.remove_gangster(src,0,2,1)
- ticker.mode.add_gangster(src,G,0)
- message_admins("[key_name_admin(usr)] has added [current] to the [G.name] Gang (A).")
- log_admin("[key_name(usr)] has added [current] to the [G.name] Gang (A).")
-
-/////////////////////////////////
-
-
-
- else if (href_list["cult"])
- switch(href_list["cult"])
- if("clear")
- remove_cultist()
- current << "You have been brainwashed! You are no longer a cultist!"
- message_admins("[key_name_admin(usr)] has de-cult'ed [current].")
- log_admin("[key_name(usr)] has de-cult'ed [current].")
- if("cultist")
- if(!(src in ticker.mode.cult))
- ticker.mode.add_cultist(src)
- message_admins("[key_name_admin(usr)] has cult'ed [current].")
- log_admin("[key_name(usr)] has cult'ed [current].")
-
- if("equip")
- if (!ticker.mode.equip_cultist(current))
- usr << "equip_cultist() failed! [current]'s starting equipment will be incomplete."
-
- else if (href_list["wizard"])
- switch(href_list["wizard"])
- if("clear")
- remove_wizard()
- current << "You have been brainwashed! You are no longer a wizard!"
- log_admin("[key_name(usr)] has de-wizard'ed [current].")
- if("wizard")
- if(!(src in ticker.mode.wizards))
- ticker.mode.wizards += src
- special_role = "Wizard"
- //ticker.mode.learn_basic_spells(current)
- current << "You are the Space Wizard!"
- message_admins("[key_name_admin(usr)] has wizard'ed [current].")
- log_admin("[key_name(usr)] has wizard'ed [current].")
- if("lair")
- current.loc = pick(wizardstart)
- if("dressup")
- ticker.mode.equip_wizard(current)
- if("name")
- ticker.mode.name_wizard(current)
- if("autoobjectives")
- ticker.mode.forge_wizard_objectives(src)
- usr << "The objectives for wizard [key] have been generated. You can edit them and anounce manually."
-
- else if (href_list["changeling"])
- switch(href_list["changeling"])
- if("clear")
- remove_changeling()
- current << "You grow weak and lose your powers! You are no longer a changeling and are stuck in your current form!"
- message_admins("[key_name_admin(usr)] has de-changeling'ed [current].")
- log_admin("[key_name(usr)] has de-changeling'ed [current].")
- if("changeling")
- if(!(src in ticker.mode.changelings))
- ticker.mode.changelings += src
- current.make_changeling()
- special_role = "Changeling"
- current << "Your powers are awoken. A flash of memory returns to us...we are [changeling.changelingID], a changeling!"
- message_admins("[key_name_admin(usr)] has changeling'ed [current].")
- log_admin("[key_name(usr)] has changeling'ed [current].")
- if("autoobjectives")
- ticker.mode.forge_changeling_objectives(src)
- usr << "The objectives for changeling [key] have been generated. You can edit them and anounce manually."
-
- if("initialdna")
- if( !changeling || !changeling.stored_profiles.len || !istype(current, /mob/living/carbon))
- usr << "Resetting DNA failed!"
- else
- var/mob/living/carbon/C = current
- changeling.first_prof.dna.transfer_identity(C, transfer_SE=1)
- C.real_name = changeling.first_prof.name
- C.updateappearance(mutcolor_update=1)
- C.domutcheck()
-
- else if (href_list["nuclear"])
- switch(href_list["nuclear"])
- if("clear")
- remove_nukeop()
- current << "You have been brainwashed! You are no longer a syndicate operative!"
- message_admins("[key_name_admin(usr)] has de-nuke op'ed [current].")
- log_admin("[key_name(usr)] has de-nuke op'ed [current].")
- if("nuclear")
- if(!(src in ticker.mode.syndicates))
- ticker.mode.syndicates += src
- ticker.mode.update_synd_icons_added(src)
- if (ticker.mode.syndicates.len==1)
- ticker.mode.prepare_syndicate_leader(src)
- else
- current.real_name = "[syndicate_name()] Operative #[ticker.mode.syndicates.len-1]"
- special_role = "Syndicate"
- assigned_role = "Syndicate"
- current << "You are a [syndicate_name()] agent!"
- ticker.mode.forge_syndicate_objectives(src)
- ticker.mode.greet_syndicate(src)
- message_admins("[key_name_admin(usr)] has nuke op'ed [current].")
- log_admin("[key_name(usr)] has nuke op'ed [current].")
- if("lair")
- current.loc = get_turf(locate("landmark*Syndicate-Spawn"))
- if("dressup")
- var/mob/living/carbon/human/H = current
- qdel(H.belt)
- qdel(H.back)
- qdel(H.ears)
- qdel(H.gloves)
- qdel(H.head)
- qdel(H.shoes)
- qdel(H.wear_id)
- qdel(H.wear_suit)
- qdel(H.w_uniform)
-
- if (!ticker.mode.equip_syndicate(current))
- usr << "Equipping a syndicate failed!"
- if("tellcode")
- var/code
- for (var/obj/machinery/nuclearbomb/bombue in machines)
- if (length(bombue.r_code) <= 5 && bombue.r_code != "LOLNO" && bombue.r_code != "ADMIN")
- code = bombue.r_code
- break
- if (code)
- store_memory("Syndicate Nuclear Bomb Code: [code]", 0, 0)
- current << "The nuclear authorization code is: [code]"
- else
- usr << "No valid nuke found!"
-
- else if (href_list["traitor"])
- switch(href_list["traitor"])
- if("clear")
- remove_traitor()
- current << "You have been brainwashed! You are no longer a traitor!"
- message_admins("[key_name_admin(usr)] has de-traitor'ed [current].")
- log_admin("[key_name(usr)] has de-traitor'ed [current].")
-
- if("traitor")
- if(!(src in ticker.mode.traitors))
- ticker.mode.traitors += src
- special_role = "traitor"
- current << "You are a traitor!"
- message_admins("[key_name_admin(usr)] has traitor'ed [current].")
- log_admin("[key_name(usr)] has traitor'ed [current].")
- if(isAI(current))
- var/mob/living/silicon/ai/A = current
- ticker.mode.add_law_zero(A)
- A.show_laws()
-
- if("autoobjectives")
- ticker.mode.forge_traitor_objectives(src)
- usr << "The objectives for traitor [key] have been generated. You can edit them and anounce manually."
-
- else if(href_list["shadowling"])
- switch(href_list["shadowling"])
- if("clear")
- ticker.mode.update_shadow_icons_removed(src)
- if(src in ticker.mode.shadows)
- ticker.mode.shadows -= src
- special_role = null
- current << "Your powers have been quenched! You are no longer a shadowling!"
- remove_spell(/obj/effect/proc_holder/spell/self/shadowling_hatch)
- remove_spell(/obj/effect/proc_holder/spell/self/shadowling_ascend)
- remove_spell(/obj/effect/proc_holder/spell/targeted/enthrall)
- remove_spell(/obj/effect/proc_holder/spell/self/shadowling_hivemind)
- message_admins("[key_name_admin(usr)] has de-shadowling'ed [current].")
- log_admin("[key_name(usr)] has de-shadowling'ed [current].")
- else if(src in ticker.mode.thralls)
- ticker.mode.remove_thrall(src,0)
- message_admins("[key_name_admin(usr)] has de-thrall'ed [current].")
- log_admin("[key_name(usr)] has de-thrall'ed [current].")
- if("shadowling")
- if(!ishuman(current))
- usr << "This only works on humans!"
- return
- ticker.mode.shadows += src
- special_role = "shadowling"
- current << "Something stirs deep in your mind. A red light floods your vision, and slowly you remember. Though your human disguise has served you well, the \
- time is nigh to cast it off and enter your true form. You have disguised yourself amongst the humans, but you are not one of them. You are a shadowling, and you are to ascend at all costs.\
- "
- ticker.mode.finalize_shadowling(src)
- ticker.mode.update_shadow_icons_added(src)
- if("thrall")
- if(!ishuman(current))
- usr << "This only works on humans!"
- return
- ticker.mode.add_thrall(src)
- message_admins("[key_name_admin(usr)] has thrall'ed [current].")
- log_admin("[key_name(usr)] has thrall'ed [current].")
-
- else if(href_list["abductor"])
- switch(href_list["abductor"])
- if("clear")
- usr << "Not implemented yet. Sorry!"
- if("abductor")
- if(!ishuman(current))
- usr << "This only works on humans!"
- return
- make_Abductor()
- log_admin("[key_name(usr)] turned [current] into abductor.")
- if("equip")
- var/gear = alert("Agent or Scientist Gear","Gear","Agent","Scientist")
- if(gear)
- var/datum/game_mode/abduction/temp = new
- temp.equip_common(current)
- if(gear=="Agent")
- temp.equip_agent(current)
- else
- temp.equip_scientist(current)
-
- else if (href_list["monkey"])
- var/mob/living/L = current
- if (L.notransform)
- return
- switch(href_list["monkey"])
- if("healthy")
- if (check_rights(R_ADMIN))
- var/mob/living/carbon/human/H = current
- var/mob/living/carbon/monkey/M = current
- if (istype(H))
- log_admin("[key_name(usr)] attempting to monkeyize [key_name(current)]")
- message_admins("[key_name_admin(usr)] attempting to monkeyize [key_name_admin(current)]")
- src = null
- M = H.monkeyize()
- src = M.mind
- //world << "DEBUG: \"healthy\": M=[M], M.mind=[M.mind], src=[src]!"
- else if (istype(M) && length(M.viruses))
- for(var/datum/disease/D in M.viruses)
- D.cure(0)
- sleep(0) //because deleting of virus is done through spawn(0)
- if("infected")
- if (check_rights(R_ADMIN, 0))
- var/mob/living/carbon/human/H = current
- var/mob/living/carbon/monkey/M = current
- if (istype(H))
- log_admin("[key_name(usr)] attempting to monkeyize and infect [key_name(current)]")
- message_admins("[key_name_admin(usr)] attempting to monkeyize and infect [key_name_admin(current)]")
- src = null
- M = H.monkeyize()
- src = M.mind
- current.ForceContractDisease(new /datum/disease/transformation/jungle_fever)
- else if (istype(M))
- current.ForceContractDisease(new /datum/disease/transformation/jungle_fever)
- if("human")
- if (check_rights(R_ADMIN, 0))
- var/mob/living/carbon/human/H = current
- var/mob/living/carbon/monkey/M = current
- if (istype(M))
- for(var/datum/disease/D in M.viruses)
- if (istype(D,/datum/disease/transformation/jungle_fever))
- D.cure(0)
- sleep(0) //because deleting of virus is doing throught spawn(0)
- log_admin("[key_name(usr)] attempting to humanize [key_name(current)]")
- message_admins("[key_name_admin(usr)] attempting to humanize [key_name_admin(current)]")
- H = M.humanize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_DEFAULTMSG)
- if(H)
- src = H.mind
-
- else if (href_list["silicon"])
- switch(href_list["silicon"])
-
- if("unemag")
- var/mob/living/silicon/robot/R = current
- if (istype(R))
- R.SetEmagged(0)
- message_admins("[key_name_admin(usr)] has unemag'ed [R].")
- log_admin("[key_name(usr)] has unemag'ed [R].")
-
- if("unemagcyborgs")
- if (istype(current, /mob/living/silicon/ai))
- var/mob/living/silicon/ai/ai = current
- for (var/mob/living/silicon/robot/R in ai.connected_robots)
- R.SetEmagged(0)
- message_admins("[key_name_admin(usr)] has unemag'ed [ai]'s Cyborgs.")
- log_admin("[key_name(usr)] has unemag'ed [ai]'s Cyborgs.")
-
- else if (href_list["common"])
- switch(href_list["common"])
- if("undress")
- for(var/obj/item/W in current)
- current.unEquip(W, 1) //The 1 forces all items to drop, since this is an admin undress.
- if("takeuplink")
- take_uplink()
- memory = null//Remove any memory they may have had.
- log_admin("[key_name(usr)] removed [current]'s uplink.")
- if("crystals")
- if (check_rights(R_FUN, 0))
- var/obj/item/device/uplink/hidden/suplink = find_syndicate_uplink()
- var/crystals
- if (suplink)
- crystals = suplink.uses
- crystals = input("Amount of telecrystals for [key]","Syndicate uplink", crystals) as null|num
- if (!isnull(crystals))
- if (suplink)
- suplink.uses = crystals
- message_admins("[key_name_admin(usr)] changed [current]'s telecrystal count to [crystals].")
- log_admin("[key_name(usr)] changed [current]'s telecrystal count to [crystals].")
- if("uplink")
- if (!ticker.mode.equip_traitor(current, !(src in ticker.mode.traitors)))
- usr << "Equipping a syndicate failed!"
- log_admin("[key_name(usr)] attempted to give [current] an uplink.")
-
- else if (href_list["obj_announce"])
- var/obj_count = 1
- current << "Your current objectives:"
- for(var/datum/objective/objective in objectives)
- current << "Objective #[obj_count]: [objective.explanation_text]"
- obj_count++
-
- edit_memory()
-
-/datum/mind/proc/find_syndicate_uplink()
- var/list/L = current.get_contents()
- for (var/obj/item/I in L)
- if (I.hidden_uplink)
- return I.hidden_uplink
- return null
-
-/datum/mind/proc/take_uplink()
- var/obj/item/device/uplink/hidden/H = find_syndicate_uplink()
- if(H)
- qdel(H)
-
-/datum/mind/proc/make_Traitor()
- if(!(src in ticker.mode.traitors))
- ticker.mode.traitors += src
- special_role = "traitor"
- ticker.mode.forge_traitor_objectives(src)
- ticker.mode.finalize_traitor(src)
- ticker.mode.greet_traitor(src)
-
-/datum/mind/proc/make_Nuke(turf/spawnloc,nuke_code,leader=0, telecrystals = TRUE)
- if(!(src in ticker.mode.syndicates))
- ticker.mode.syndicates += src
- ticker.mode.update_synd_icons_added(src)
- special_role = "Syndicate"
- ticker.mode.forge_syndicate_objectives(src)
- ticker.mode.greet_syndicate(src)
-
- current.loc = spawnloc
-
- var/mob/living/carbon/human/H = current
- qdel(H.belt)
- qdel(H.back)
- qdel(H.ears)
- qdel(H.gloves)
- qdel(H.head)
- qdel(H.shoes)
- qdel(H.wear_id)
- qdel(H.wear_suit)
- qdel(H.w_uniform)
-
- ticker.mode.equip_syndicate(current, telecrystals)
-
- if (nuke_code)
- store_memory("Syndicate Nuclear Bomb Code: [nuke_code]", 0, 0)
- current << "The nuclear authorization code is: [nuke_code]"
-
- if (leader)
- ticker.mode.prepare_syndicate_leader(src,nuke_code)
- else
- current.real_name = "[syndicate_name()] Operative #[ticker.mode.syndicates.len-1]"
-
-/datum/mind/proc/make_Changling()
- if(!(src in ticker.mode.changelings))
- ticker.mode.changelings += src
- current.make_changeling()
- special_role = "Changeling"
- ticker.mode.forge_changeling_objectives(src)
- ticker.mode.greet_changeling(src)
-
-/datum/mind/proc/make_Wizard()
- if(!(src in ticker.mode.wizards))
- ticker.mode.wizards += src
- special_role = "Wizard"
- assigned_role = "Wizard"
- //ticker.mode.learn_basic_spells(current)
- if(!wizardstart.len)
- current.loc = pick(latejoin)
- current << "HOT INSERTION, GO GO GO"
- else
- current.loc = pick(wizardstart)
-
- ticker.mode.equip_wizard(current)
- for(var/obj/item/weapon/spellbook/S in current.contents)
- S.op = 0
- ticker.mode.name_wizard(current)
- ticker.mode.forge_wizard_objectives(src)
- ticker.mode.greet_wizard(src)
-
-
-/datum/mind/proc/make_Cultist()
- if(!(src in ticker.mode.cult))
- ticker.mode.cult += src
- ticker.mode.update_cult_icons_added(src)
- special_role = "Cultist"
- current << "You catch a glimpse of the Realm of Nar-Sie, The Geometer of Blood. You now see how flimsy the world is, you see that it should be open to the knowledge of Nar-Sie."
- current << "Assist your new compatriots in their dark dealings. Their goal is yours, and yours is theirs. You serve the Dark One above all else. Bring It back."
- current << "Your objective is to summon Nar-Sie by building and defending a suitable shell for the Geometer. Adequate supplies can be procured through human sacrifices."
- ticker.mode.equip_cultist(current)
-
-/datum/mind/proc/make_Rev()
- if (ticker.mode.head_revolutionaries.len>0)
- // copy targets
- var/datum/mind/valid_head = locate() in ticker.mode.head_revolutionaries
- if (valid_head)
- for (var/datum/objective/mutiny/O in valid_head.objectives)
- var/datum/objective/mutiny/rev_obj = new
- rev_obj.owner = src
- rev_obj.target = O.target
- rev_obj.explanation_text = "Assassinate [O.target.current.real_name], the [O.target.assigned_role]."
- objectives += rev_obj
- ticker.mode.greet_revolutionary(src,0)
- ticker.mode.head_revolutionaries += src
- ticker.mode.update_rev_icons_added(src)
- special_role = "Head Revolutionary"
-
- ticker.mode.forge_revolutionary_objectives(src)
- ticker.mode.greet_revolutionary(src,0)
-
- var/list/L = current.get_contents()
- var/obj/item/device/assembly/flash/flash = locate() in L
- qdel(flash)
- take_uplink()
- var/fail = 0
-// fail |= !ticker.mode.equip_traitor(current, 1)
- fail |= !ticker.mode.equip_revolutionary(current)
-
-
-/datum/mind/proc/make_Gang(datum/gang/G)
- special_role = "[G.name] Gang Boss"
- G.bosses += src
- gang_datum = G
- G.add_gang_hud(src)
- ticker.mode.forge_gang_objectives(src)
- ticker.mode.greet_gang(src)
- ticker.mode.equip_gang(current,G)
-
-/datum/mind/proc/make_Abductor()
- var/role = alert("Abductor Role ?","Role","Agent","Scientist")
- var/team = input("Abductor Team ?","Team ?") in list(1,2,3,4)
- var/teleport = alert("Teleport to ship ?","Teleport","Yes","No")
-
- if(!role || !team || !teleport)
- return
-
- if(!ishuman(current))
- return
-
- ticker.mode.abductors |= src
-
- var/datum/objective/experiment/O = new
- O.owner = src
- objectives += O
-
- var/mob/living/carbon/human/H = current
-
- H.set_species(/datum/species/abductor)
- var/datum/species/abductor/S = H.dna.species
-
- switch(role)
- if("Agent")
- S.agent = 1
- if("Scientist")
- S.scientist = 1
- S.team = team
-
- var/list/obj/effect/landmark/abductor/agent_landmarks = new
- var/list/obj/effect/landmark/abductor/scientist_landmarks = new
- agent_landmarks.len = 4
- scientist_landmarks.len = 4
- for(var/obj/effect/landmark/abductor/A in landmarks_list)
- if(istype(A,/obj/effect/landmark/abductor/agent))
- agent_landmarks[text2num(A.team)] = A
- else if(istype(A,/obj/effect/landmark/abductor/scientist))
- scientist_landmarks[text2num(A.team)] = A
-
- var/obj/effect/landmark/L
- if(teleport=="Yes")
- switch(role)
- if("Agent")
- S.agent = 1
- L = agent_landmarks[team]
- H.loc = L.loc
- if("Scientist")
- S.scientist = 1
- L = agent_landmarks[team]
- H.loc = L.loc
-
-
-/datum/mind/proc/make_Handofgod_follower(colour)
- . = 0
- switch(colour)
- if("red")
- //Remove old allegiances
- if(src in ticker.mode.blue_deity_followers || src in ticker.mode.blue_deity_prophets)
- current << "You are no longer a member of the Blue cult!"
-
- ticker.mode.blue_deity_followers -= src
- ticker.mode.blue_deity_prophets -= src
- current.faction |= "red god"
- current.faction -= "blue god"
-
- if(src in ticker.mode.red_deity_prophets)
- current << "You have lost the connection with your deity, but you still believe in their grand design, You are no longer a prophet!"
- ticker.mode.red_deity_prophets -= src
-
- ticker.mode.red_deity_followers |= src
- current << "You are now a follower of the red cult's god!"
-
- special_role = "Hand of God: Red Follower"
- . = 1
- if("blue")
- //Remove old allegiances
- if(src in ticker.mode.red_deity_followers || src in ticker.mode.red_deity_prophets)
- current << "You are no longer a member of the Red cult!"
-
- ticker.mode.red_deity_followers -= src
- ticker.mode.red_deity_prophets -= src
- current.faction -= "red god"
- current.faction |= "blue god"
-
- if(src in ticker.mode.blue_deity_prophets)
- current << "You have lost the connection with your deity, but you still believe in their grand design, You are no longer a prophet!"
- ticker.mode.blue_deity_prophets -= src
-
- ticker.mode.blue_deity_followers |= src
- current << "You are now a follower of the blue cult's god!"
-
- special_role = "Hand of God: Blue Follower"
- . = 1
- else
- return 0
-
- ticker.mode.update_hog_icons_removed(src,"red")
- ticker.mode.update_hog_icons_removed(src,"blue")
- //ticker.mode.greet_hog_follower(src,colour)
- ticker.mode.update_hog_icons_added(src, colour)
-
-/datum/mind/proc/make_Handofgod_prophet(colour)
- . = 0
- switch(colour)
- if("red")
- //Remove old allegiances
-
- if(src in ticker.mode.blue_deity_followers || src in ticker.mode.blue_deity_prophets)
- current << "You are no longer a member of the Blue cult!"
- current.faction -= "blue god"
- current.faction |= "red god"
-
- ticker.mode.blue_deity_followers -= src
- ticker.mode.blue_deity_prophets -= src
- ticker.mode.red_deity_followers -= src
-
- ticker.mode.red_deity_prophets |= src
- current << "You are now a prophet of the red cult's god!"
-
- special_role = "Hand of God: Red Prophet"
- . = 1
- if("blue")
- //Remove old allegiances
-
- if(src in ticker.mode.red_deity_followers || src in ticker.mode.red_deity_prophets)
- current << "You are no longer a member of the Red cult!"
- current.faction -= "red god"
- current.faction |= "blue god"
-
- ticker.mode.red_deity_followers -= src
- ticker.mode.red_deity_prophets -= src
- ticker.mode.blue_deity_followers -= src
-
- ticker.mode.blue_deity_prophets |= src
- current << "You are now a prophet of the blue cult's god!"
-
- special_role = "Hand of God: Blue Prophet"
- . = 1
-
- else
- return 0
-
- ticker.mode.update_hog_icons_removed(src,"red")
- ticker.mode.update_hog_icons_removed(src,"blue")
- ticker.mode.greet_hog_follower(src,colour)
- ticker.mode.update_hog_icons_added(src, colour)
-
-
-/datum/mind/proc/make_Handofgod_god(colour)
- switch(colour)
- if("red")
- current.become_god("red")
- ticker.mode.add_god(src,"red")
- if("blue")
- current.become_god("blue")
- ticker.mode.add_god(src,"blue")
- else
- return 0
- ticker.mode.forge_deity_objectives(src)
- ticker.mode.remove_hog_follower(src,0)
- ticker.mode.update_hog_icons_added(src, colour)
-// ticker.mode.greet_hog_follower(src,colour)
- return 1
-
-
-/datum/mind/proc/AddSpell(obj/effect/proc_holder/spell/spell)
- spell_list += spell
- if(!spell.action)
- spell.action = new/datum/action/spell_action
- spell.action.target = spell
- spell.action.name = spell.name
- spell.action.button_icon = spell.action_icon
- spell.action.button_icon_state = spell.action_icon_state
- spell.action.background_icon_state = spell.action_background_icon_state
- spell.action.Grant(current)
- return
-/datum/mind/proc/transfer_actions(mob/living/new_character)
- if(current && current.actions)
- for(var/datum/action/A in current.actions)
- A.Grant(new_character)
- transfer_mindbound_actions(new_character)
-
-/datum/mind/proc/transfer_mindbound_actions(var/mob/living/new_character)
- for(var/obj/effect/proc_holder/spell/spell in spell_list)
- if(!spell.action) // Unlikely but whatever
- spell.action = new/datum/action/spell_action
- spell.action.target = spell
- spell.action.name = spell.name
- spell.action.button_icon = spell.action_icon
- spell.action.button_icon_state = spell.action_icon_state
- spell.action.background_icon_state = spell.action_background_icon_state
- spell.action.Grant(new_character)
- return
-
-/mob/proc/sync_mind()
- mind_initialize() //updates the mind (or creates and initializes one if one doesn't exist)
- mind.active = 1 //indicates that the mind is currently synced with a client
-
-/mob/new_player/sync_mind()
- return
-
-/mob/dead/observer/sync_mind()
- return
-
-//Initialisation procs
-/mob/proc/mind_initialize()
- if(mind)
- mind.key = key
-
- else
- mind = new /datum/mind(key)
- if(ticker)
- ticker.minds += mind
- else
- spawn(0)
- throw EXCEPTION("mind_initialize(): No ticker ready")
- if(!mind.name) mind.name = real_name
- mind.current = src
-
-//HUMAN
-/mob/living/carbon/human/mind_initialize()
- ..()
- if(!mind.assigned_role) mind.assigned_role = "Assistant" //defualt
-
-//MONKEY
-/mob/living/carbon/monkey/mind_initialize()
- ..()
-
-//slime
-/mob/living/simple_animal/slime/mind_initialize()
- ..()
- mind.special_role = "slime"
- mind.assigned_role = "slime"
-
-//XENO
-/mob/living/carbon/alien/mind_initialize()
- ..()
- mind.special_role = "Alien"
- mind.assigned_role = "Alien"
- //XENO HUMANOID
-/mob/living/carbon/alien/humanoid/royal/queen/mind_initialize()
- ..()
- mind.special_role = "Queen"
-
-/mob/living/carbon/alien/humanoid/royal/praetorian/mind_initialize()
- ..()
- mind.special_role = "Praetorian"
-
-/mob/living/carbon/alien/humanoid/hunter/mind_initialize()
- ..()
- mind.special_role = "Hunter"
-
-/mob/living/carbon/alien/humanoid/drone/mind_initialize()
- ..()
- mind.special_role = "Drone"
-
-/mob/living/carbon/alien/humanoid/sentinel/mind_initialize()
- ..()
- mind.special_role = "Sentinel"
- //XENO LARVA
-/mob/living/carbon/alien/larva/mind_initialize()
- ..()
- mind.special_role = "Larva"
-
-//AI
-/mob/living/silicon/ai/mind_initialize()
- ..()
- mind.assigned_role = "AI"
-
-//BORG
-/mob/living/silicon/robot/mind_initialize()
- ..()
- mind.assigned_role = "Cyborg"
-
-//PAI
-/mob/living/silicon/pai/mind_initialize()
- ..()
- mind.assigned_role = "pAI"
- mind.special_role = ""
-
-//BLOB
-/mob/camera/blob/mind_initialize()
- ..()
- mind.special_role = "Blob"
-
-//Animals
-/mob/living/simple_animal/mind_initialize()
- ..()
- mind.assigned_role = "Animal"
- mind.special_role = "Animal"
-
-/mob/living/simple_animal/pet/dog/corgi/mind_initialize()
- ..()
- mind.assigned_role = "Corgi"
- mind.special_role = "Corgi"
-
-/mob/living/simple_animal/shade/mind_initialize()
- ..()
- mind.assigned_role = "Shade"
- mind.special_role = "Shade"
-
-/mob/living/simple_animal/hostile/construct/mind_initialize()
- ..()
- mind.assigned_role = "[initial(name)]"
+/* Note from Carnie:
+ The way datum/mind stuff works has been changed a lot.
+ Minds now represent IC characters rather than following a client around constantly.
+
+ Guidelines for using minds properly:
+
+ - Never mind.transfer_to(ghost). The var/current and var/original of a mind must always be of type mob/living!
+ ghost.mind is however used as a reference to the ghost's corpse
+
+ - When creating a new mob for an existing IC character (e.g. cloning a dead guy or borging a brain of a human)
+ the existing mind of the old mob should be transfered to the new mob like so:
+
+ mind.transfer_to(new_mob)
+
+ - You must not assign key= or ckey= after transfer_to() since the transfer_to transfers the client for you.
+ By setting key or ckey explicitly after transfering the mind with transfer_to you will cause bugs like DCing
+ the player.
+
+ - IMPORTANT NOTE 2, if you want a player to become a ghost, use mob.ghostize() It does all the hard work for you.
+
+ - When creating a new mob which will be a new IC character (e.g. putting a shade in a construct or randomly selecting
+ a ghost to become a xeno during an event). Simply assign the key or ckey like you've always done.
+
+ new_mob.key = key
+
+ The Login proc will handle making a new mob for that mobtype (including setting up stuff like mind.name). Simple!
+ However if you want that mind to have any special properties like being a traitor etc you will have to do that
+ yourself.
+
+*/
+
+/datum/mind
+ var/key
+ var/name //replaces mob/var/original_name
+ var/mob/living/current
+ var/active = 0
+
+ var/memory
+ var/attack_log
+
+ var/assigned_role
+ var/special_role
+ var/list/restricted_roles = list()
+
+ var/datum/job/assigned_job
+
+ var/list/datum/objective/objectives = list()
+ var/list/datum/objective/special_verbs = list()
+
+ var/list/spell_list = list() // Wizard mode & "Give Spell" badmin button.
+
+ var/datum/faction/faction //associated faction
+ var/datum/changeling/changeling //changeling holder
+
+ var/miming = 0 // Mime's vow of silence
+ var/antag_hud_icon_state = null //this mind's ANTAG_HUD should have this icon_state
+ var/datum/atom_hud/antag/antag_hud = null //this mind's antag HUD
+ var/datum/gang/gang_datum //Which gang this mind belongs to, if any
+
+/datum/mind/New(var/key)
+ src.key = key
+
+
+/datum/mind/proc/transfer_to(mob/new_character)
+ if(current) // remove ourself from our old body's mind variable
+ current.mind = null
+ SStgui.on_transfer(current, new_character)
+
+ if(key)
+ if(new_character.key != key) //if we're transfering into a body with a key associated which is not ours
+ new_character.ghostize(1) //we'll need to ghostize so that key isn't mobless.
+ else
+ key = new_character.key
+
+ if(new_character.mind) //disassociate any mind currently in our new body's mind variable
+ new_character.mind.current = null
+
+ var/datum/atom_hud/antag/hud_to_transfer = antag_hud//we need this because leave_hud() will clear this list
+ leave_all_huds() //leave all the huds in the old body, so it won't get huds if somebody else enters it
+ current = new_character //associate ourself with our new body
+ new_character.mind = src //and associate our new body with ourself
+ transfer_antag_huds(hud_to_transfer) //inherit the antag HUD
+ transfer_actions(new_character)
+
+ if(active)
+ new_character.key = key //now transfer the key to link the client to our new body
+
+/datum/mind/proc/store_memory(new_text)
+ memory += "[new_text]
"
+
+/datum/mind/proc/wipe_memory()
+ memory = null
+
+
+/*
+ Removes antag type's references from a mind.
+ objectives, uplinks, powers etc are all handled.
+*/
+
+/datum/mind/proc/remove_objectives()
+ if(objectives.len)
+ for(var/datum/objective/O in objectives)
+ objectives -= O
+ qdel(O)
+
+/datum/mind/proc/remove_changeling()
+ if(src in ticker.mode.changelings)
+ ticker.mode.changelings -= src
+ current.remove_changeling_powers()
+ if(changeling)
+ qdel(changeling)
+ changeling = null
+ special_role = null
+ remove_antag_equip()
+
+/datum/mind/proc/remove_traitor()
+ if(src in ticker.mode.traitors)
+ ticker.mode.traitors -= src
+ if(isAI(current))
+ var/mob/living/silicon/ai/A = current
+ A.set_zeroth_law("")
+ A.show_laws()
+ A.verbs -= /mob/living/silicon/ai/proc/choose_modules
+ A.malf_picker.remove_verbs(A)
+ qdel(A.malf_picker)
+ special_role = null
+ remove_antag_equip()
+
+/datum/mind/proc/remove_nukeop()
+ if(src in ticker.mode.syndicates)
+ ticker.mode.syndicates -= src
+ ticker.mode.update_synd_icons_removed(src)
+ special_role = null
+ remove_objectives()
+ remove_antag_equip()
+
+/datum/mind/proc/remove_wizard()
+ if(src in ticker.mode.wizards)
+ ticker.mode.wizards -= src
+ current.spellremove(current)
+ special_role = null
+ remove_antag_equip()
+
+/datum/mind/proc/remove_cultist()
+ if(src in ticker.mode.cult)
+ ticker.mode.cult -= src
+ ticker.mode.update_cult_icons_removed(src)
+ special_role = null
+
+/datum/mind/proc/remove_rev()
+ if(src in ticker.mode.revolutionaries)
+ ticker.mode.revolutionaries -= src
+ ticker.mode.update_rev_icons_removed(src)
+ if(src in ticker.mode.head_revolutionaries)
+ ticker.mode.head_revolutionaries -= src
+ ticker.mode.update_rev_icons_removed(src)
+ special_role = null
+ remove_objectives()
+ remove_antag_equip()
+
+
+/datum/mind/proc/remove_gang()
+ ticker.mode.remove_gangster(src,0,1,1)
+ remove_objectives()
+
+/datum/mind/proc/remove_hog_follower_prophet()
+ ticker.mode.red_deity_followers -= src
+ ticker.mode.red_deity_prophets -= src
+ ticker.mode.blue_deity_prophets -= src
+ ticker.mode.blue_deity_followers -= src
+ ticker.mode.update_hog_icons_removed(src, "red")
+ ticker.mode.update_hog_icons_removed(src, "blue")
+
+
+
+/datum/mind/proc/remove_antag_equip()
+ var/list/Mob_Contents = current.get_contents()
+ for(var/obj/item/I in Mob_Contents)
+ if(istype(I, /obj/item/device/pda))
+ var/obj/item/device/pda/P = I
+ P.lock_code = ""
+
+ else if(istype(I, /obj/item/device/radio))
+ var/obj/item/device/radio/R = I
+ R.traitor_frequency = 0
+
+/datum/mind/proc/remove_all_antag() //For the Lazy amongst us.
+ remove_changeling()
+ remove_traitor()
+ remove_nukeop()
+ remove_wizard()
+ remove_cultist()
+ remove_rev()
+ remove_gang()
+
+/datum/mind/proc/show_memory(mob/recipient, window=1)
+ if(!recipient)
+ recipient = current
+ var/output = "[current.real_name]'s Memories:
"
+ output += memory
+
+ if(objectives.len)
+ output += "Objectives:"
+ var/obj_count = 1
+ for(var/datum/objective/objective in objectives)
+ output += "
Objective #[obj_count++]: [objective.explanation_text]"
+
+ if(window) recipient << browse(output,"window=memory")
+ else recipient << "[output]"
+
+/datum/mind/proc/edit_memory()
+ if(!ticker || !ticker.mode)
+ alert("Not before round-start!", "Alert")
+ return
+
+ var/out = "[name][(current&&(current.real_name!=name))?" (as [current.real_name])":""]
"
+ out += "Mind currently owned by key: [key] [active?"(synced)":"(not synced)"]
"
+ out += "Assigned role: [assigned_role]. Edit
"
+ out += "Faction and special role: [special_role]
"
+
+ var/list/sections = list(
+ "revolution",
+ "gang",
+ "cult",
+ "wizard",
+ "changeling",
+ "nuclear",
+ "traitor", // "traitorchan",
+ "monkey",
+ )
+ var/text = ""
+
+ if (istype(current, /mob/living/carbon/human) || istype(current, /mob/living/carbon/monkey))
+ /** REVOLUTION ***/
+ text = "revolution"
+ if (ticker.mode.config_tag=="revolution")
+ text = uppertext(text)
+ text = "[text]: "
+ if (assigned_role in command_positions)
+ text += "HEAD|loyal|employee|headrev|rev"
+ else if (src in ticker.mode.head_revolutionaries)
+ text += "head|loyal|employee|HEADREV|rev"
+ text += "
Flash: give"
+
+ var/list/L = current.get_contents()
+ var/obj/item/device/assembly/flash/flash = locate() in L
+ if (flash)
+ if(!flash.crit_fail)
+ text += "|take."
+ else
+ text += "|take|repair."
+ else
+ text += "."
+
+ text += " Reequip (gives traitor uplink)."
+ if (objectives.len==0)
+ text += "
Objectives are empty! Set to kill all heads."
+ else if(isloyal(current))
+ text += "head|LOYAL|employee|headrev|rev"
+ else if (src in ticker.mode.revolutionaries)
+ text += "head|loyal|employee|headrev|REV"
+ else
+ text += "head|loyal|EMPLOYEE|headrev|rev"
+
+ if(current && current.client && (ROLE_REV in current.client.prefs.be_special))
+ text += "|Enabled in Prefs"
+ else
+ text += "|Disabled in Prefs"
+
+ sections["revolution"] = text
+
+ /** GANG ***/
+ text = "gang"
+ if (ticker.mode.config_tag=="gang")
+ text = uppertext(text)
+ text = "[text]: "
+ text += "[isloyal(current) ? "LOYAL" : "loyal"]|"
+ if(src in ticker.mode.get_all_gangsters())
+ text += "none"
+ else
+ text += "NONE"
+
+ if(current && current.client && (ROLE_GANG in current.client.prefs.be_special))
+ text += "|Enabled in Prefs
"
+ else
+ text += "|Disabled in Prefs
"
+
+ for(var/datum/gang/G in ticker.mode.gangs)
+ text += "[G.name]: "
+ if(src in (G.gangsters))
+ text += "GANGSTER"
+ else
+ text += "gangster"
+ text += "|"
+ if(src in (G.bosses))
+ text += "GANG LEADER"
+ text += "|Equipment: give"
+ var/list/L = current.get_contents()
+ var/obj/item/device/gangtool/gangtool = locate() in L
+ if (gangtool)
+ text += "|take"
+
+ else
+ text += "gang leader"
+ text += "
"
+
+ if(gang_colors_pool.len)
+ text += "Create New Gang"
+
+ sections["gang"] = text
+
+
+ /** CULT ***/
+ text = "cult"
+ if (ticker.mode.config_tag=="cult")
+ text = uppertext(text)
+ text = "[text]: "
+ if (src in ticker.mode.cult)
+ text += "loyal|employee|CULTIST"
+ text += "
Equip"
+
+ else if(isloyal(current))
+ text += "LOYAL|employee|cultist"
+ else
+ text += "loyal|EMPLOYEE|cultist"
+
+ if(current && current.client && (ROLE_CULTIST in current.client.prefs.be_special))
+ text += "|Enabled in Prefs"
+ else
+ text += "|Disabled in Prefs"
+
+ sections["cult"] = text
+
+ /** WIZARD ***/
+ text = "wizard"
+ if (ticker.mode.config_tag=="wizard")
+ text = uppertext(text)
+ text = "[text]: "
+ if ((src in ticker.mode.wizards) || (src in ticker.mode.apprentices))
+ text += "YES|no"
+ text += "
To lair, undress, dress up, let choose name."
+ if (objectives.len==0)
+ text += "
Objectives are empty! Randomize!"
+ else
+ text += "yes|NO"
+
+ if(current && current.client && (ROLE_WIZARD in current.client.prefs.be_special))
+ text += "|Enabled in Prefs"
+ else
+ text += "|Disabled in Prefs"
+
+ sections["wizard"] = text
+
+ /** CHANGELING ***/
+ text = "changeling"
+ if (ticker.mode.config_tag=="changeling" || ticker.mode.config_tag=="traitorchan")
+ text = uppertext(text)
+ text = "[text]: "
+ if ((src in ticker.mode.changelings) && special_role)
+ text += "YES|no"
+ if (objectives.len==0)
+ text += "
Objectives are empty! Randomize!"
+ if(changeling && changeling.stored_profiles.len && (current.real_name != changeling.first_prof.name) )
+ text += "
Transform to initial appearance."
+ else if(src in ticker.mode.changelings) //Station Aligned Changeling
+ text += "YES (but not an antag)|no"
+ if (objectives.len==0)
+ text += "
Objectives are empty! Randomize!"
+ if(changeling && changeling.stored_profiles.len && (current.real_name != changeling.first_prof.name) )
+ text += "
Transform to initial appearance."
+ else
+ text += "yes|NO"
+// var/datum/game_mode/changeling/changeling = ticker.mode
+// if (istype(changeling) && changeling.changelingdeath)
+// text += "
All the changelings are dead! Restart in [round((changeling.TIME_TO_GET_REVIVED-(world.time-changeling.changelingdeathtime))/10)] seconds."
+
+ if(current && current.client && (ROLE_CHANGELING in current.client.prefs.be_special))
+ text += "|Enabled in Prefs"
+ else
+ text += "|Disabled in Prefs"
+
+ sections["changeling"] = text
+
+ /** NUCLEAR ***/
+ text = "nuclear"
+ if (ticker.mode.config_tag=="nuclear")
+ text = uppertext(text)
+ text = "[text]: "
+ if (src in ticker.mode.syndicates)
+ text += "OPERATIVE|nanotrasen"
+ text += "
To shuttle, undress, dress up."
+ var/code
+ for (var/obj/machinery/nuclearbomb/bombue in machines)
+ if (length(bombue.r_code) <= 5 && bombue.r_code != "LOLNO" && bombue.r_code != "ADMIN")
+ code = bombue.r_code
+ break
+ if (code)
+ text += " Code is [code]. tell the code."
+ else
+ text += "operative|NANOTRASEN"
+
+ if(current && current.client && (ROLE_OPERATIVE in current.client.prefs.be_special))
+ text += "|Enabled in Prefs"
+ else
+ text += "|Disabled in Prefs"
+
+ sections["nuclear"] = text
+
+ /** TRAITOR ***/
+ text = "traitor"
+ if (ticker.mode.config_tag=="traitor" || ticker.mode.config_tag=="traitorchan")
+ text = uppertext(text)
+ text = "[text]: "
+ if (src in ticker.mode.traitors)
+ text += "TRAITOR|loyal"
+ if (objectives.len==0)
+ text += "
Objectives are empty! Randomize!"
+ else
+ text += "traitor|LOYAL"
+
+ if(current && current.client && (ROLE_TRAITOR in current.client.prefs.be_special))
+ text += "|Enabled in Prefs"
+ else
+ text += "|Disabled in Prefs"
+
+ sections["traitor"] = text
+
+ /** SHADOWLING **/
+ text = "shadowling"
+ if(ticker.mode.config_tag == "shadowling")
+ text = uppertext(text)
+ text = "[text]: "
+ if(src in ticker.mode.shadows)
+ text += "SHADOWLING|thrall|human"
+ else if(src in ticker.mode.thralls)
+ text += "shadowling|THRALL|human"
+ else
+ text += "shadowling|thrall|HUMAN"
+
+ if(current && current.client && (ROLE_SHADOWLING in current.client.prefs.be_special))
+ text += "|Enabled in Prefs"
+ else
+ text += "|Disabled in Prefs"
+
+ sections["shadowling"] = text
+
+ /** Abductors **/
+
+ text = "Abductor"
+ if(ticker.mode.config_tag == "abductor")
+ text = uppertext(text)
+ text = "[text]: "
+ if(src in ticker.mode.abductors)
+ text += "Abductor|human"
+ text += "|undress|equip"
+ else
+ text += "Abductor|human"
+
+ if(current && current.client && (ROLE_ABDUCTOR in current.client.prefs.be_special))
+ text += "|Enabled in Prefs"
+ else
+ text += "|Disabled in Prefs"
+
+ sections["abductor"] = text
+
+ /** HAND OF GOD **/
+ text = "hand of god"
+ if(ticker.mode.config_tag == "handofgod")
+ text = uppertext(text)
+ text = "[text]: "
+ if(src in ticker.mode.red_deity_prophets)
+ text += "RED PROPHET|red follower|employee|blue follower|blue prophet|red god|blue god"
+ else if (src in ticker.mode.red_deity_followers)
+ text += "red prophet|RED FOLLOWER|employee|blue follower|blue prophet|red god|blue god"
+ else if (src in ticker.mode.blue_deity_followers)
+ text += "red prophet|red follower|employee|BLUE FOLLOWER|blue prophet|red god|blue god"
+ else if (src in ticker.mode.blue_deity_prophets)
+ text += "red prophet|red follower|employee|blue follower|BLUE PROPHET|red god|blue god"
+ else if (src in ticker.mode.red_deities)
+ text += "red prophet|red follower|employee|blue follower|blue prophet|RED GOD|blue god"
+ else if (src in ticker.mode.blue_deities)
+ text += "red prophet|red follower|employee|blue follower|blue prophet|red god|BLUE GOD"
+ else
+ text += "red prophet|red follower|EMPLOYEE|blue follower|blue prophet|red god|blue god"
+
+ if(current && current.client && (ROLE_HOG_GOD in current.client.prefs.be_special))
+ text += "|HOG God Enabled in Prefs"
+ else
+ text += "|HOG God Disabled in Prefs"
+
+ if(current && current.client && (ROLE_HOG_CULTIST in current.client.prefs.be_special))
+ text += "|HOG Cultist Enabled in Prefs"
+ else
+ text += "|HOG Disabled in Prefs"
+
+ sections["follower"] = text
+
+ /** MONKEY ***/
+ if (istype(current, /mob/living/carbon))
+ text = "monkey"
+ if (ticker.mode.config_tag=="monkey")
+ text = uppertext(text)
+ text = "[text]: "
+ if (istype(current, /mob/living/carbon/human))
+ text += "healthy|infected|HUMAN|other"
+ else if (istype(current, /mob/living/carbon/monkey))
+ var/found = 0
+ for(var/datum/disease/D in current.viruses)
+ if(istype(D, /datum/disease/transformation/jungle_fever)) found = 1
+
+ if(found)
+ text += "healthy|INFECTED|human|other"
+ else
+ text += "HEALTHY|infected|human|other"
+
+ else
+ text += "healthy|infected|human|OTHER"
+
+ if(current && current.client && (ROLE_MONKEY in current.client.prefs.be_special))
+ text += "|Enabled in Prefs"
+ else
+ text += "|Disabled in Prefs"
+
+ sections["monkey"] = text
+
+
+ /** SILICON ***/
+
+ if (istype(current, /mob/living/silicon))
+ text = "silicon"
+ var/mob/living/silicon/robot/robot = current
+ if (istype(robot) && robot.emagged)
+ text += "
Cyborg: Is emagged! Unemag!
0th law: [robot.laws.zeroth]"
+ var/mob/living/silicon/ai/ai = current
+ if (istype(ai) && ai.connected_robots.len)
+ var/n_e_robots = 0
+ for (var/mob/living/silicon/robot/R in ai.connected_robots)
+ if (R.emagged)
+ n_e_robots++
+ text += "
[n_e_robots] of [ai.connected_robots.len] slaved cyborgs are emagged. Unemag"
+ if (ticker.mode.config_tag == "traitorchan")
+ if (sections["traitor"])
+ out += sections["traitor"]+"
"
+ if (sections["changeling"])
+ out += sections["changeling"]+"
"
+ sections -= "traitor"
+ sections -= "changeling"
+ else
+ if (sections[ticker.mode.config_tag])
+ out += sections[ticker.mode.config_tag]+"
"
+ sections -= ticker.mode.config_tag
+ for (var/i in sections)
+ if (sections[i])
+ out += sections[i]+"
"
+
+
+ if (((src in ticker.mode.head_revolutionaries) || \
+ (src in ticker.mode.traitors) || \
+ (src in ticker.mode.syndicates)) && \
+ istype(current,/mob/living/carbon/human) )
+
+ text = "Uplink: give"
+ var/obj/item/device/uplink/hidden/suplink = find_syndicate_uplink()
+ var/crystals
+ if (suplink)
+ crystals = suplink.uses
+ if (suplink)
+ text += "|take"
+ if (check_rights(R_FUN, 0))
+ text += ", [crystals] crystals"
+ else
+ text += ", [crystals] crystals"
+ text += "." //hiel grammar
+ out += text
+
+ out += "
"
+
+ out += "Memory:
"
+ out += memory
+ out += "
Edit memory
"
+ out += "Objectives:
"
+ if (objectives.len == 0)
+ out += "EMPTY
"
+ else
+ var/obj_count = 1
+ for(var/datum/objective/objective in objectives)
+ out += "[obj_count]: [objective.explanation_text] Edit Delete Toggle Completion
"
+ obj_count++
+ out += "Add objective
"
+
+ out += "Announce objectives
"
+
+ usr << browse(out, "window=edit_memory[src];size=500x600")
+
+
+/datum/mind/Topic(href, href_list)
+ if(!check_rights(R_ADMIN)) return
+
+ if (href_list["role_edit"])
+ var/new_role = input("Select new role", "Assigned role", assigned_role) as null|anything in get_all_jobs()
+ if (!new_role) return
+ assigned_role = new_role
+
+ else if (href_list["memory_edit"])
+ var/new_memo = copytext(sanitize(input("Write new memory", "Memory", memory) as null|message),1,MAX_MESSAGE_LEN)
+ if (isnull(new_memo)) return
+ memory = new_memo
+
+ else if (href_list["obj_edit"] || href_list["obj_add"])
+ var/datum/objective/objective
+ var/objective_pos
+ var/def_value
+
+ if (href_list["obj_edit"])
+ objective = locate(href_list["obj_edit"])
+ if (!objective) return
+ objective_pos = objectives.Find(objective)
+
+ //Text strings are easy to manipulate. Revised for simplicity.
+ var/temp_obj_type = "[objective.type]"//Convert path into a text string.
+ def_value = copytext(temp_obj_type, 19)//Convert last part of path into an objective keyword.
+ if(!def_value)//If it's a custom objective, it will be an empty string.
+ def_value = "custom"
+
+ var/new_obj_type = input("Select objective type:", "Objective type", def_value) as null|anything in list("assassinate", "maroon", "debrain", "protect", "destroy", "prevent", "hijack", "escape", "survive", "martyr", "steal", "download", "nuclear", "capture", "absorb", "custom","follower block (HOG)","build (HOG)","deicide (HOG)", "follower escape (HOG)", "sacrifice prophet (HOG)")
+ if (!new_obj_type) return
+
+ var/datum/objective/new_objective = null
+
+ switch (new_obj_type)
+ if ("assassinate","protect","debrain","maroon")
+ var/list/possible_targets = list("Free objective")
+ for(var/datum/mind/possible_target in ticker.minds)
+ if ((possible_target != src) && istype(possible_target.current, /mob/living/carbon/human))
+ possible_targets += possible_target.current
+
+ var/mob/def_target = null
+ var/objective_list[] = list(/datum/objective/assassinate, /datum/objective/protect, /datum/objective/debrain, /datum/objective/maroon)
+ if (objective&&(objective.type in objective_list) && objective:target)
+ def_target = objective:target.current
+
+ var/new_target = input("Select target:", "Objective target", def_target) as null|anything in possible_targets
+ if (!new_target) return
+
+ var/objective_path = text2path("/datum/objective/[new_obj_type]")
+ if (new_target == "Free objective")
+ new_objective = new objective_path
+ new_objective.owner = src
+ new_objective:target = null
+ new_objective.explanation_text = "Free objective"
+ else
+ new_objective = new objective_path
+ new_objective.owner = src
+ new_objective:target = new_target:mind
+ //Will display as special role if the target is set as MODE. Ninjas/commandos/nuke ops.
+ new_objective.update_explanation_text()
+
+ if ("destroy")
+ var/list/possible_targets = active_ais(1)
+ if(possible_targets.len)
+ var/mob/new_target = input("Select target:", "Objective target") as null|anything in possible_targets
+ new_objective = new /datum/objective/destroy
+ new_objective.target = new_target.mind
+ new_objective.owner = src
+ new_objective.update_explanation_text()
+ else
+ usr << "No active AIs with minds"
+
+ if ("prevent")
+ new_objective = new /datum/objective/block
+ new_objective.owner = src
+
+ if ("hijack")
+ new_objective = new /datum/objective/hijack
+ new_objective.owner = src
+
+ if ("escape")
+ new_objective = new /datum/objective/escape
+ new_objective.owner = src
+
+ if ("survive")
+ new_objective = new /datum/objective/survive
+ new_objective.owner = src
+
+ if("martyr")
+ new_objective = new /datum/objective/martyr
+ new_objective.owner = src
+
+ if ("nuclear")
+ new_objective = new /datum/objective/nuclear
+ new_objective.owner = src
+
+ if ("steal")
+ if (!istype(objective, /datum/objective/steal))
+ new_objective = new /datum/objective/steal
+ new_objective.owner = src
+ else
+ new_objective = objective
+ var/datum/objective/steal/steal = new_objective
+ if (!steal.select_target())
+ return
+
+ if("download","capture","absorb")
+ var/def_num
+ if(objective&&objective.type==text2path("/datum/objective/[new_obj_type]"))
+ def_num = objective.target_amount
+
+ var/target_number = input("Input target number:", "Objective", def_num) as num|null
+ if (isnull(target_number))//Ordinarily, you wouldn't need isnull. In this case, the value may already exist.
+ return
+
+ switch(new_obj_type)
+ if("download")
+ new_objective = new /datum/objective/download
+ new_objective.explanation_text = "Download [target_number] research levels."
+ if("capture")
+ new_objective = new /datum/objective/capture
+ new_objective.explanation_text = "Capture [target_number] lifeforms with an energy net. Live, rare specimens are worth more."
+ if("absorb")
+ new_objective = new /datum/objective/absorb
+ new_objective.explanation_text = "Absorb [target_number] compatible genomes."
+ new_objective.owner = src
+ new_objective.target_amount = target_number
+
+ if("follower block (HOG)")
+ new_objective = new /datum/objective/follower_block
+ new_objective.owner = src
+ if("build (HOG)")
+ new_objective = new /datum/objective/build
+ new_objective.owner = src
+ if("deicide (HOG)")
+ new_objective = new /datum/objective/deicide
+ new_objective.owner = src
+ if("follower escape (HOG)")
+ new_objective = new /datum/objective/escape_followers
+ new_objective.owner = src
+ if("sacrifice prophet (HOG)")
+ new_objective = new /datum/objective/sacrifice_prophet
+ new_objective.owner = src
+
+ if ("custom")
+ var/expl = stripped_input(usr, "Custom objective:", "Objective", objective ? objective.explanation_text : "")
+ if (!expl) return
+ new_objective = new /datum/objective
+ new_objective.owner = src
+ new_objective.explanation_text = expl
+
+ if (!new_objective) return
+
+ if (objective)
+ objectives -= objective
+ objectives.Insert(objective_pos, new_objective)
+ message_admins("[key_name_admin(usr)] edited [current]'s objective to [new_objective.explanation_text]")
+ log_admin("[key_name(usr)] edited [current]'s objective to [new_objective.explanation_text]")
+ else
+ objectives += new_objective
+ message_admins("[key_name_admin(usr)] added a new objective for [current]: [new_objective.explanation_text]")
+ log_admin("[key_name(usr)] added a new objective for [current]: [new_objective.explanation_text]")
+
+ else if (href_list["obj_delete"])
+ var/datum/objective/objective = locate(href_list["obj_delete"])
+ if(!istype(objective)) return
+ objectives -= objective
+ message_admins("[key_name_admin(usr)] removed an objective for [current]: [objective.explanation_text]")
+ log_admin("[key_name(usr)] removed an objective for [current]: [objective.explanation_text]")
+
+ else if(href_list["obj_completed"])
+ var/datum/objective/objective = locate(href_list["obj_completed"])
+ if(!istype(objective)) return
+ objective.completed = !objective.completed
+ log_admin("[key_name(usr)] toggled the win state for [current]'s objective: [objective.explanation_text]")
+
+ else if (href_list["handofgod"])
+ switch(href_list["handofgod"])
+ if("clear") //wipe handofgod status
+ if((src in ticker.mode.red_deity_followers) || (src in ticker.mode.blue_deity_followers) || (src in ticker.mode.red_deity_prophets) || (src in ticker.mode.blue_deity_prophets))
+ remove_hog_follower_prophet()
+ current << "You have been brainwashed... again! Your faith is no more!"
+ message_admins("[key_name_admin(usr)] has de-hand of god'ed [current].")
+ log_admin("[key_name(usr)] has de-hand of god'ed [current].")
+
+ if("red follower")
+ make_Handofgod_follower("red")
+ message_admins("[key_name_admin(usr)] has red follower'ed [current].")
+ log_admin("[key_name(usr)] has red follower'ed [current].")
+
+ if("red prophet")
+ make_Handofgod_prophet("red")
+ message_admins("[key_name_admin(usr)] has red prophet'ed [current].")
+ log_admin("[key_name(usr)] has red prophet'ed [current].")
+
+ if("blue follower")
+ make_Handofgod_follower("blue")
+ message_admins("[key_name_admin(usr)] has blue follower'ed [current].")
+ log_admin("[key_name(usr)] has blue follower'ed [current].")
+
+ if("blue prophet")
+ make_Handofgod_prophet("blue")
+ message_admins("[key_name_admin(usr)] has blue prophet'ed [current].")
+ log_admin("[key_name(usr)] has blue prophet'ed [current].")
+
+ if("red god")
+ make_Handofgod_god("red")
+ message_admins("[key_name_admin(usr)] has red god'ed [current].")
+ log_admin("[key_name(usr)] has red god'ed [current].")
+
+ if("blue god")
+ make_Handofgod_god("blue")
+ message_admins("[key_name_admin(usr)] has blue god'ed [current].")
+ log_admin("[key_name(usr)] has blue god'ed [current].")
+
+
+ else if (href_list["revolution"])
+ switch(href_list["revolution"])
+ if("clear")
+ remove_rev()
+ current << "You have been brainwashed! You are no longer a revolutionary!"
+ message_admins("[key_name_admin(usr)] has de-rev'ed [current].")
+ log_admin("[key_name(usr)] has de-rev'ed [current].")
+ if("rev")
+ if(src in ticker.mode.head_revolutionaries)
+ ticker.mode.head_revolutionaries -= src
+ ticker.mode.update_rev_icons_removed(src)
+ current << "Revolution has been disappointed of your leader traits! You are a regular revolutionary now!"
+ else if(!(src in ticker.mode.revolutionaries))
+ current << " You are now a revolutionary! Help your cause. Do not harm your fellow freedom fighters. You can identify your comrades by the red \"R\" icons, and your leaders by the blue \"R\" icons. Help them kill the heads to win the revolution!"
+ else
+ return
+ ticker.mode.revolutionaries += src
+ ticker.mode.update_rev_icons_added(src)
+ special_role = "Revolutionary"
+ message_admins("[key_name_admin(usr)] has rev'ed [current].")
+ log_admin("[key_name(usr)] has rev'ed [current].")
+
+ if("headrev")
+ if(src in ticker.mode.revolutionaries)
+ ticker.mode.revolutionaries -= src
+ ticker.mode.update_rev_icons_removed(src)
+ current << "You have proved your devotion to revoltion! Yea are a head revolutionary now!"
+ else if(!(src in ticker.mode.head_revolutionaries))
+ current << "You are a member of the revolutionaries' leadership now!"
+ else
+ return
+ if (ticker.mode.head_revolutionaries.len>0)
+ // copy targets
+ var/datum/mind/valid_head = locate() in ticker.mode.head_revolutionaries
+ if (valid_head)
+ for (var/datum/objective/mutiny/O in valid_head.objectives)
+ var/datum/objective/mutiny/rev_obj = new
+ rev_obj.owner = src
+ rev_obj.target = O.target
+ rev_obj.explanation_text = "Assassinate [O.target.name], the [O.target.assigned_role]."
+ objectives += rev_obj
+ ticker.mode.greet_revolutionary(src,0)
+ ticker.mode.head_revolutionaries += src
+ ticker.mode.update_rev_icons_added(src)
+ special_role = "Head Revolutionary"
+ message_admins("[key_name_admin(usr)] has head-rev'ed [current].")
+ log_admin("[key_name(usr)] has head-rev'ed [current].")
+
+ if("autoobjectives")
+ ticker.mode.forge_revolutionary_objectives(src)
+ ticker.mode.greet_revolutionary(src,0)
+ usr << "The objectives for revolution have been generated and shown to [key]"
+
+ if("flash")
+ if (!ticker.mode.equip_revolutionary(current))
+ usr << "Spawning flash failed!"
+
+ if("takeflash")
+ var/list/L = current.get_contents()
+ var/obj/item/device/assembly/flash/flash = locate() in L
+ if (!flash)
+ usr << "Deleting flash failed!"
+ qdel(flash)
+
+ if("repairflash")
+ var/list/L = current.get_contents()
+ var/obj/item/device/assembly/flash/flash = locate() in L
+ if (!flash)
+ usr << "Repairing flash failed!"
+ else
+ flash.crit_fail = 0
+ flash.update_icon()
+
+
+
+//////////////////// GANG MODE
+
+ else if (href_list["gang"])
+ switch(href_list["gang"])
+ if("clear")
+ remove_gang()
+ message_admins("[key_name_admin(usr)] has de-gang'ed [current].")
+ log_admin("[key_name(usr)] has de-gang'ed [current].")
+
+ if("equip")
+ switch(ticker.mode.equip_gang(current,gang_datum))
+ if(1)
+ usr << "Unable to equip territory spraycan!"
+ if(2)
+ usr << "Unable to equip recruitment pen and spraycan!"
+ if(3)
+ usr << "Unable to equip gangtool, pen, and spraycan!"
+
+ if("takeequip")
+ var/list/L = current.get_contents()
+ for(var/obj/item/weapon/pen/gang/pen in L)
+ qdel(pen)
+ for(var/obj/item/device/gangtool/gangtool in L)
+ qdel(gangtool)
+ for(var/obj/item/toy/crayon/spraycan/gang/SC in L)
+ qdel(SC)
+
+ if("new")
+ if(gang_colors_pool.len)
+ var/list/names = list("Random") + gang_name_pool
+ var/gangname = input("Pick a gang name.","Select Name") as null|anything in names
+ if(gangname && gang_colors_pool.len) //Check again just in case another admin made max gangs at the same time
+ if(!(gangname in gang_name_pool))
+ gangname = null
+ var/datum/gang/newgang = new(null,gangname)
+ ticker.mode.gangs += newgang
+ message_admins("[key_name_admin(usr)] has created the [newgang.name] Gang.")
+ log_admin("[key_name(usr)] has created the [newgang.name] Gang.")
+
+ else if (href_list["gangboss"])
+ var/datum/gang/G = locate(href_list["gangboss"]) in ticker.mode.gangs
+ if(!G || (src in G.bosses))
+ return
+ ticker.mode.remove_gangster(src,0,2,1)
+ G.bosses += src
+ gang_datum = G
+ special_role = "[G.name] Gang Boss"
+ G.add_gang_hud(src)
+ current << "You are a [G.name] Gang Boss!"
+ message_admins("[key_name_admin(usr)] has added [current] to the [G.name] Gang leadership.")
+ log_admin("[key_name(usr)] has added [current] to the [G.name] Gang leadership.")
+ ticker.mode.forge_gang_objectives(src)
+ ticker.mode.greet_gang(src,0)
+
+ else if (href_list["gangster"])
+ var/datum/gang/G = locate(href_list["gangster"]) in ticker.mode.gangs
+ if(!G || (src in G.gangsters))
+ return
+ ticker.mode.remove_gangster(src,0,2,1)
+ ticker.mode.add_gangster(src,G,0)
+ message_admins("[key_name_admin(usr)] has added [current] to the [G.name] Gang (A).")
+ log_admin("[key_name(usr)] has added [current] to the [G.name] Gang (A).")
+
+/////////////////////////////////
+
+
+
+ else if (href_list["cult"])
+ switch(href_list["cult"])
+ if("clear")
+ remove_cultist()
+ current << "You have been brainwashed! You are no longer a cultist!"
+ message_admins("[key_name_admin(usr)] has de-cult'ed [current].")
+ log_admin("[key_name(usr)] has de-cult'ed [current].")
+ if("cultist")
+ if(!(src in ticker.mode.cult))
+ ticker.mode.add_cultist(src)
+ message_admins("[key_name_admin(usr)] has cult'ed [current].")
+ log_admin("[key_name(usr)] has cult'ed [current].")
+ if("equip")
+ if (!ticker.mode.equip_cultist(current))
+ usr << "equip_cultist() failed! [current]'s starting equipment will be incomplete."
+
+ else if (href_list["wizard"])
+ switch(href_list["wizard"])
+ if("clear")
+ remove_wizard()
+ current << "You have been brainwashed! You are no longer a wizard!"
+ log_admin("[key_name(usr)] has de-wizard'ed [current].")
+ if("wizard")
+ if(!(src in ticker.mode.wizards))
+ ticker.mode.wizards += src
+ special_role = "Wizard"
+ //ticker.mode.learn_basic_spells(current)
+ current << "You are the Space Wizard!"
+ message_admins("[key_name_admin(usr)] has wizard'ed [current].")
+ log_admin("[key_name(usr)] has wizard'ed [current].")
+ if("lair")
+ current.loc = pick(wizardstart)
+ if("dressup")
+ ticker.mode.equip_wizard(current)
+ if("name")
+ ticker.mode.name_wizard(current)
+ if("autoobjectives")
+ ticker.mode.forge_wizard_objectives(src)
+ usr << "The objectives for wizard [key] have been generated. You can edit them and anounce manually."
+
+ else if (href_list["changeling"])
+ switch(href_list["changeling"])
+ if("clear")
+ remove_changeling()
+ current << "You grow weak and lose your powers! You are no longer a changeling and are stuck in your current form!"
+ message_admins("[key_name_admin(usr)] has de-changeling'ed [current].")
+ log_admin("[key_name(usr)] has de-changeling'ed [current].")
+ if("changeling")
+ if(!(src in ticker.mode.changelings))
+ ticker.mode.changelings += src
+ current.make_changeling()
+ special_role = "Changeling"
+ current << "Your powers are awoken. A flash of memory returns to us...we are [changeling.changelingID], a changeling!"
+ message_admins("[key_name_admin(usr)] has changeling'ed [current].")
+ log_admin("[key_name(usr)] has changeling'ed [current].")
+ if("autoobjectives")
+ ticker.mode.forge_changeling_objectives(src)
+ usr << "The objectives for changeling [key] have been generated. You can edit them and anounce manually."
+
+ if("initialdna")
+ if( !changeling || !changeling.stored_profiles.len || !istype(current, /mob/living/carbon))
+ usr << "Resetting DNA failed!"
+ else
+ var/mob/living/carbon/C = current
+ changeling.first_prof.dna.transfer_identity(C, transfer_SE=1)
+ C.real_name = changeling.first_prof.name
+ C.updateappearance(mutcolor_update=1)
+ C.domutcheck()
+
+ else if (href_list["nuclear"])
+ switch(href_list["nuclear"])
+ if("clear")
+ remove_nukeop()
+ current << "You have been brainwashed! You are no longer a syndicate operative!"
+ message_admins("[key_name_admin(usr)] has de-nuke op'ed [current].")
+ log_admin("[key_name(usr)] has de-nuke op'ed [current].")
+ if("nuclear")
+ if(!(src in ticker.mode.syndicates))
+ ticker.mode.syndicates += src
+ ticker.mode.update_synd_icons_added(src)
+ if (ticker.mode.syndicates.len==1)
+ ticker.mode.prepare_syndicate_leader(src)
+ else
+ current.real_name = "[syndicate_name()] Operative #[ticker.mode.syndicates.len-1]"
+ special_role = "Syndicate"
+ assigned_role = "Syndicate"
+ current << "You are a [syndicate_name()] agent!"
+ ticker.mode.forge_syndicate_objectives(src)
+ ticker.mode.greet_syndicate(src)
+ message_admins("[key_name_admin(usr)] has nuke op'ed [current].")
+ log_admin("[key_name(usr)] has nuke op'ed [current].")
+ if("lair")
+ current.loc = get_turf(locate("landmark*Syndicate-Spawn"))
+ if("dressup")
+ var/mob/living/carbon/human/H = current
+ qdel(H.belt)
+ qdel(H.back)
+ qdel(H.ears)
+ qdel(H.gloves)
+ qdel(H.head)
+ qdel(H.shoes)
+ qdel(H.wear_id)
+ qdel(H.wear_suit)
+ qdel(H.w_uniform)
+
+ if (!ticker.mode.equip_syndicate(current))
+ usr << "Equipping a syndicate failed!"
+ if("tellcode")
+ var/code
+ for (var/obj/machinery/nuclearbomb/bombue in machines)
+ if (length(bombue.r_code) <= 5 && bombue.r_code != "LOLNO" && bombue.r_code != "ADMIN")
+ code = bombue.r_code
+ break
+ if (code)
+ store_memory("Syndicate Nuclear Bomb Code: [code]", 0, 0)
+ current << "The nuclear authorization code is: [code]"
+ else
+ usr << "No valid nuke found!"
+
+ else if (href_list["traitor"])
+ switch(href_list["traitor"])
+ if("clear")
+ remove_traitor()
+ current << "You have been brainwashed! You are no longer a traitor!"
+ message_admins("[key_name_admin(usr)] has de-traitor'ed [current].")
+ log_admin("[key_name(usr)] has de-traitor'ed [current].")
+
+ if("traitor")
+ if(!(src in ticker.mode.traitors))
+ ticker.mode.traitors += src
+ special_role = "traitor"
+ current << "You are a traitor!"
+ message_admins("[key_name_admin(usr)] has traitor'ed [current].")
+ log_admin("[key_name(usr)] has traitor'ed [current].")
+ if(isAI(current))
+ var/mob/living/silicon/ai/A = current
+ ticker.mode.add_law_zero(A)
+ A.show_laws()
+
+ if("autoobjectives")
+ ticker.mode.forge_traitor_objectives(src)
+ usr << "The objectives for traitor [key] have been generated. You can edit them and anounce manually."
+
+ else if(href_list["shadowling"])
+ switch(href_list["shadowling"])
+ if("clear")
+ ticker.mode.update_shadow_icons_removed(src)
+ if(src in ticker.mode.shadows)
+ ticker.mode.shadows -= src
+ special_role = null
+ current << "Your powers have been quenched! You are no longer a shadowling!"
+ remove_spell(/obj/effect/proc_holder/spell/self/shadowling_hatch)
+ remove_spell(/obj/effect/proc_holder/spell/self/shadowling_ascend)
+ remove_spell(/obj/effect/proc_holder/spell/targeted/enthrall)
+ remove_spell(/obj/effect/proc_holder/spell/self/shadowling_hivemind)
+ message_admins("[key_name_admin(usr)] has de-shadowling'ed [current].")
+ log_admin("[key_name(usr)] has de-shadowling'ed [current].")
+ else if(src in ticker.mode.thralls)
+ ticker.mode.remove_thrall(src,0)
+ message_admins("[key_name_admin(usr)] has de-thrall'ed [current].")
+ log_admin("[key_name(usr)] has de-thrall'ed [current].")
+ if("shadowling")
+ if(!ishuman(current))
+ usr << "This only works on humans!"
+ return
+ ticker.mode.shadows += src
+ special_role = "shadowling"
+ current << "Something stirs deep in your mind. A red light floods your vision, and slowly you remember. Though your human disguise has served you well, the \
+ time is nigh to cast it off and enter your true form. You have disguised yourself amongst the humans, but you are not one of them. You are a shadowling, and you are to ascend at all costs.\
+ "
+ ticker.mode.finalize_shadowling(src)
+ ticker.mode.update_shadow_icons_added(src)
+ if("thrall")
+ if(!ishuman(current))
+ usr << "This only works on humans!"
+ return
+ ticker.mode.add_thrall(src)
+ message_admins("[key_name_admin(usr)] has thrall'ed [current].")
+ log_admin("[key_name(usr)] has thrall'ed [current].")
+
+ else if(href_list["abductor"])
+ switch(href_list["abductor"])
+ if("clear")
+ usr << "Not implemented yet. Sorry!"
+ if("abductor")
+ if(!ishuman(current))
+ usr << "This only works on humans!"
+ return
+ make_Abductor()
+ log_admin("[key_name(usr)] turned [current] into abductor.")
+ if("equip")
+ var/gear = alert("Agent or Scientist Gear","Gear","Agent","Scientist")
+ if(gear)
+ var/datum/game_mode/abduction/temp = new
+ temp.equip_common(current)
+ if(gear=="Agent")
+ temp.equip_agent(current)
+ else
+ temp.equip_scientist(current)
+
+ else if (href_list["monkey"])
+ var/mob/living/L = current
+ if (L.notransform)
+ return
+ switch(href_list["monkey"])
+ if("healthy")
+ if (check_rights(R_ADMIN))
+ var/mob/living/carbon/human/H = current
+ var/mob/living/carbon/monkey/M = current
+ if (istype(H))
+ log_admin("[key_name(usr)] attempting to monkeyize [key_name(current)]")
+ message_admins("[key_name_admin(usr)] attempting to monkeyize [key_name_admin(current)]")
+ src = null
+ M = H.monkeyize()
+ src = M.mind
+ //world << "DEBUG: \"healthy\": M=[M], M.mind=[M.mind], src=[src]!"
+ else if (istype(M) && length(M.viruses))
+ for(var/datum/disease/D in M.viruses)
+ D.cure(0)
+ sleep(0) //because deleting of virus is done through spawn(0)
+ if("infected")
+ if (check_rights(R_ADMIN, 0))
+ var/mob/living/carbon/human/H = current
+ var/mob/living/carbon/monkey/M = current
+ if (istype(H))
+ log_admin("[key_name(usr)] attempting to monkeyize and infect [key_name(current)]")
+ message_admins("[key_name_admin(usr)] attempting to monkeyize and infect [key_name_admin(current)]")
+ src = null
+ M = H.monkeyize()
+ src = M.mind
+ current.ForceContractDisease(new /datum/disease/transformation/jungle_fever)
+ else if (istype(M))
+ current.ForceContractDisease(new /datum/disease/transformation/jungle_fever)
+ if("human")
+ if (check_rights(R_ADMIN, 0))
+ var/mob/living/carbon/human/H = current
+ var/mob/living/carbon/monkey/M = current
+ if (istype(M))
+ for(var/datum/disease/D in M.viruses)
+ if (istype(D,/datum/disease/transformation/jungle_fever))
+ D.cure(0)
+ sleep(0) //because deleting of virus is doing throught spawn(0)
+ log_admin("[key_name(usr)] attempting to humanize [key_name(current)]")
+ message_admins("[key_name_admin(usr)] attempting to humanize [key_name_admin(current)]")
+ H = M.humanize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_DEFAULTMSG)
+ if(H)
+ src = H.mind
+
+ else if (href_list["silicon"])
+ switch(href_list["silicon"])
+ if("unemag")
+ var/mob/living/silicon/robot/R = current
+ if (istype(R))
+ R.SetEmagged(0)
+ message_admins("[key_name_admin(usr)] has unemag'ed [R].")
+ log_admin("[key_name(usr)] has unemag'ed [R].")
+
+ if("unemagcyborgs")
+ if (istype(current, /mob/living/silicon/ai))
+ var/mob/living/silicon/ai/ai = current
+ for (var/mob/living/silicon/robot/R in ai.connected_robots)
+ R.SetEmagged(0)
+ message_admins("[key_name_admin(usr)] has unemag'ed [ai]'s Cyborgs.")
+ log_admin("[key_name(usr)] has unemag'ed [ai]'s Cyborgs.")
+
+ else if (href_list["common"])
+ switch(href_list["common"])
+ if("undress")
+ for(var/obj/item/W in current)
+ current.unEquip(W, 1) //The 1 forces all items to drop, since this is an admin undress.
+ if("takeuplink")
+ take_uplink()
+ memory = null//Remove any memory they may have had.
+ log_admin("[key_name(usr)] removed [current]'s uplink.")
+ if("crystals")
+ if (check_rights(R_FUN, 0))
+ var/obj/item/device/uplink/hidden/suplink = find_syndicate_uplink()
+ var/crystals
+ if (suplink)
+ crystals = suplink.uses
+ crystals = input("Amount of telecrystals for [key]","Syndicate uplink", crystals) as null|num
+ if (!isnull(crystals))
+ if (suplink)
+ suplink.uses = crystals
+ message_admins("[key_name_admin(usr)] changed [current]'s telecrystal count to [crystals].")
+ log_admin("[key_name(usr)] changed [current]'s telecrystal count to [crystals].")
+ if("uplink")
+ if (!ticker.mode.equip_traitor(current, !(src in ticker.mode.traitors)))
+ usr << "Equipping a syndicate failed!"
+ log_admin("[key_name(usr)] attempted to give [current] an uplink.")
+
+ else if (href_list["obj_announce"])
+ var/obj_count = 1
+ current << "Your current objectives:"
+ for(var/datum/objective/objective in objectives)
+ current << "Objective #[obj_count]: [objective.explanation_text]"
+ obj_count++
+
+ edit_memory()
+
+/datum/mind/proc/find_syndicate_uplink()
+ var/list/L = current.get_contents()
+ for (var/obj/item/I in L)
+ if (I.hidden_uplink)
+ return I.hidden_uplink
+ return null
+
+/datum/mind/proc/take_uplink()
+ var/obj/item/device/uplink/hidden/H = find_syndicate_uplink()
+ if(H)
+ qdel(H)
+
+/datum/mind/proc/make_Traitor()
+ if(!(src in ticker.mode.traitors))
+ ticker.mode.traitors += src
+ special_role = "traitor"
+ ticker.mode.forge_traitor_objectives(src)
+ ticker.mode.finalize_traitor(src)
+ ticker.mode.greet_traitor(src)
+
+/datum/mind/proc/make_Nuke(turf/spawnloc,nuke_code,leader=0, telecrystals = TRUE)
+ if(!(src in ticker.mode.syndicates))
+ ticker.mode.syndicates += src
+ ticker.mode.update_synd_icons_added(src)
+ special_role = "Syndicate"
+ ticker.mode.forge_syndicate_objectives(src)
+ ticker.mode.greet_syndicate(src)
+
+ current.loc = spawnloc
+
+ var/mob/living/carbon/human/H = current
+ qdel(H.belt)
+ qdel(H.back)
+ qdel(H.ears)
+ qdel(H.gloves)
+ qdel(H.head)
+ qdel(H.shoes)
+ qdel(H.wear_id)
+ qdel(H.wear_suit)
+ qdel(H.w_uniform)
+
+ ticker.mode.equip_syndicate(current, telecrystals)
+
+ if (nuke_code)
+ store_memory("Syndicate Nuclear Bomb Code: [nuke_code]", 0, 0)
+ current << "The nuclear authorization code is: [nuke_code]"
+
+ if (leader)
+ ticker.mode.prepare_syndicate_leader(src,nuke_code)
+ else
+ current.real_name = "[syndicate_name()] Operative #[ticker.mode.syndicates.len-1]"
+
+/datum/mind/proc/make_Changling()
+ if(!(src in ticker.mode.changelings))
+ ticker.mode.changelings += src
+ current.make_changeling()
+ special_role = "Changeling"
+ ticker.mode.forge_changeling_objectives(src)
+ ticker.mode.greet_changeling(src)
+
+/datum/mind/proc/make_Wizard()
+ if(!(src in ticker.mode.wizards))
+ ticker.mode.wizards += src
+ special_role = "Wizard"
+ assigned_role = "Wizard"
+ //ticker.mode.learn_basic_spells(current)
+ if(!wizardstart.len)
+ current.loc = pick(latejoin)
+ current << "HOT INSERTION, GO GO GO"
+ else
+ current.loc = pick(wizardstart)
+
+ ticker.mode.equip_wizard(current)
+ for(var/obj/item/weapon/spellbook/S in current.contents)
+ S.op = 0
+ ticker.mode.name_wizard(current)
+ ticker.mode.forge_wizard_objectives(src)
+ ticker.mode.greet_wizard(src)
+
+
+/datum/mind/proc/make_Cultist()
+ if(!(src in ticker.mode.cult))
+ ticker.mode.cult += src
+ ticker.mode.update_cult_icons_added(src)
+ special_role = "Cultist"
+ current << "You catch a glimpse of the Realm of Nar-Sie, The Geometer of Blood. You now see how flimsy the world is, you see that it should be open to the knowledge of Nar-Sie."
+ current << "Assist your new compatriots in their dark dealings. Their goal is yours, and yours is theirs. You serve the Dark One above all else. Bring It back."
+ current << "Your objective is to summon Nar-Sie by building and defending a suitable shell for the Geometer. Adequate supplies can be procured through human sacrifices."
+ ticker.mode.equip_cultist(current)
+
+/datum/mind/proc/make_Rev()
+ if (ticker.mode.head_revolutionaries.len>0)
+ // copy targets
+ var/datum/mind/valid_head = locate() in ticker.mode.head_revolutionaries
+ if (valid_head)
+ for (var/datum/objective/mutiny/O in valid_head.objectives)
+ var/datum/objective/mutiny/rev_obj = new
+ rev_obj.owner = src
+ rev_obj.target = O.target
+ rev_obj.explanation_text = "Assassinate [O.target.current.real_name], the [O.target.assigned_role]."
+ objectives += rev_obj
+ ticker.mode.greet_revolutionary(src,0)
+ ticker.mode.head_revolutionaries += src
+ ticker.mode.update_rev_icons_added(src)
+ special_role = "Head Revolutionary"
+
+ ticker.mode.forge_revolutionary_objectives(src)
+ ticker.mode.greet_revolutionary(src,0)
+
+ var/list/L = current.get_contents()
+ var/obj/item/device/assembly/flash/flash = locate() in L
+ qdel(flash)
+ take_uplink()
+ var/fail = 0
+// fail |= !ticker.mode.equip_traitor(current, 1)
+ fail |= !ticker.mode.equip_revolutionary(current)
+
+
+/datum/mind/proc/make_Gang(datum/gang/G)
+ special_role = "[G.name] Gang Boss"
+ G.bosses += src
+ gang_datum = G
+ G.add_gang_hud(src)
+ ticker.mode.forge_gang_objectives(src)
+ ticker.mode.greet_gang(src)
+ ticker.mode.equip_gang(current,G)
+
+/datum/mind/proc/make_Abductor()
+ var/role = alert("Abductor Role ?","Role","Agent","Scientist")
+ var/team = input("Abductor Team ?","Team ?") in list(1,2,3,4)
+ var/teleport = alert("Teleport to ship ?","Teleport","Yes","No")
+
+ if(!role || !team || !teleport)
+ return
+
+ if(!ishuman(current))
+ return
+
+ ticker.mode.abductors |= src
+
+ var/datum/objective/experiment/O = new
+ O.owner = src
+ objectives += O
+
+ var/mob/living/carbon/human/H = current
+
+ H.set_species(/datum/species/abductor)
+ var/datum/species/abductor/S = H.dna.species
+
+ switch(role)
+ if("Agent")
+ S.agent = 1
+ if("Scientist")
+ S.scientist = 1
+ S.team = team
+
+ var/list/obj/effect/landmark/abductor/agent_landmarks = new
+ var/list/obj/effect/landmark/abductor/scientist_landmarks = new
+ agent_landmarks.len = 4
+ scientist_landmarks.len = 4
+ for(var/obj/effect/landmark/abductor/A in landmarks_list)
+ if(istype(A,/obj/effect/landmark/abductor/agent))
+ agent_landmarks[text2num(A.team)] = A
+ else if(istype(A,/obj/effect/landmark/abductor/scientist))
+ scientist_landmarks[text2num(A.team)] = A
+
+ var/obj/effect/landmark/L
+ if(teleport=="Yes")
+ switch(role)
+ if("Agent")
+ S.agent = 1
+ L = agent_landmarks[team]
+ H.loc = L.loc
+ if("Scientist")
+ S.scientist = 1
+ L = agent_landmarks[team]
+ H.loc = L.loc
+
+
+/datum/mind/proc/make_Handofgod_follower(colour)
+ . = 0
+ switch(colour)
+ if("red")
+ //Remove old allegiances
+ if(src in ticker.mode.blue_deity_followers || src in ticker.mode.blue_deity_prophets)
+ current << "You are no longer a member of the Blue cult!"
+
+ ticker.mode.blue_deity_followers -= src
+ ticker.mode.blue_deity_prophets -= src
+ current.faction |= "red god"
+ current.faction -= "blue god"
+
+ if(src in ticker.mode.red_deity_prophets)
+ current << "You have lost the connection with your deity, but you still believe in their grand design, You are no longer a prophet!"
+ ticker.mode.red_deity_prophets -= src
+
+ ticker.mode.red_deity_followers |= src
+ current << "You are now a follower of the red cult's god!"
+
+ special_role = "Hand of God: Red Follower"
+ . = 1
+ if("blue")
+ //Remove old allegiances
+ if(src in ticker.mode.red_deity_followers || src in ticker.mode.red_deity_prophets)
+ current << "You are no longer a member of the Red cult!"
+
+ ticker.mode.red_deity_followers -= src
+ ticker.mode.red_deity_prophets -= src
+ current.faction -= "red god"
+ current.faction |= "blue god"
+
+ if(src in ticker.mode.blue_deity_prophets)
+ current << "You have lost the connection with your deity, but you still believe in their grand design, You are no longer a prophet!"
+ ticker.mode.blue_deity_prophets -= src
+
+ ticker.mode.blue_deity_followers |= src
+ current << "You are now a follower of the blue cult's god!"
+
+ special_role = "Hand of God: Blue Follower"
+ . = 1
+ else
+ return 0
+
+ ticker.mode.update_hog_icons_removed(src,"red")
+ ticker.mode.update_hog_icons_removed(src,"blue")
+ //ticker.mode.greet_hog_follower(src,colour)
+ ticker.mode.update_hog_icons_added(src, colour)
+
+/datum/mind/proc/make_Handofgod_prophet(colour)
+ . = 0
+ switch(colour)
+ if("red")
+ //Remove old allegiances
+
+ if(src in ticker.mode.blue_deity_followers || src in ticker.mode.blue_deity_prophets)
+ current << "You are no longer a member of the Blue cult!"
+ current.faction -= "blue god"
+ current.faction |= "red god"
+
+ ticker.mode.blue_deity_followers -= src
+ ticker.mode.blue_deity_prophets -= src
+ ticker.mode.red_deity_followers -= src
+
+ ticker.mode.red_deity_prophets |= src
+ current << "You are now a prophet of the red cult's god!"
+
+ special_role = "Hand of God: Red Prophet"
+ . = 1
+ if("blue")
+ //Remove old allegiances
+
+ if(src in ticker.mode.red_deity_followers || src in ticker.mode.red_deity_prophets)
+ current << "You are no longer a member of the Red cult!"
+ current.faction -= "red god"
+ current.faction |= "blue god"
+
+ ticker.mode.red_deity_followers -= src
+ ticker.mode.red_deity_prophets -= src
+ ticker.mode.blue_deity_followers -= src
+
+ ticker.mode.blue_deity_prophets |= src
+ current << "You are now a prophet of the blue cult's god!"
+
+ special_role = "Hand of God: Blue Prophet"
+ . = 1
+
+ else
+ return 0
+
+ ticker.mode.update_hog_icons_removed(src,"red")
+ ticker.mode.update_hog_icons_removed(src,"blue")
+ ticker.mode.greet_hog_follower(src,colour)
+ ticker.mode.update_hog_icons_added(src, colour)
+
+
+/datum/mind/proc/make_Handofgod_god(colour)
+ switch(colour)
+ if("red")
+ current.become_god("red")
+ ticker.mode.add_god(src,"red")
+ if("blue")
+ current.become_god("blue")
+ ticker.mode.add_god(src,"blue")
+ else
+ return 0
+ ticker.mode.forge_deity_objectives(src)
+ ticker.mode.remove_hog_follower(src,0)
+ ticker.mode.update_hog_icons_added(src, colour)
+// ticker.mode.greet_hog_follower(src,colour)
+ return 1
+
+
+/datum/mind/proc/AddSpell(obj/effect/proc_holder/spell/spell)
+ spell_list += spell
+ if(!spell.action)
+ spell.action = new/datum/action/spell_action
+ spell.action.target = spell
+ spell.action.name = spell.name
+ spell.action.button_icon = spell.action_icon
+ spell.action.button_icon_state = spell.action_icon_state
+ spell.action.background_icon_state = spell.action_background_icon_state
+ spell.action.Grant(current)
+ return
+/datum/mind/proc/transfer_actions(mob/living/new_character)
+ if(current && current.actions)
+ for(var/datum/action/A in current.actions)
+ A.Grant(new_character)
+ transfer_mindbound_actions(new_character)
+
+/datum/mind/proc/transfer_mindbound_actions(var/mob/living/new_character)
+ for(var/obj/effect/proc_holder/spell/spell in spell_list)
+ if(!spell.action) // Unlikely but whatever
+ spell.action = new/datum/action/spell_action
+ spell.action.target = spell
+ spell.action.name = spell.name
+ spell.action.button_icon = spell.action_icon
+ spell.action.button_icon_state = spell.action_icon_state
+ spell.action.background_icon_state = spell.action_background_icon_state
+ spell.action.Grant(new_character)
+ return
+
+/mob/proc/sync_mind()
+ mind_initialize() //updates the mind (or creates and initializes one if one doesn't exist)
+ mind.active = 1 //indicates that the mind is currently synced with a client
+
+/mob/new_player/sync_mind()
+ return
+
+/mob/dead/observer/sync_mind()
+ return
+
+//Initialisation procs
+/mob/proc/mind_initialize()
+ if(mind)
+ mind.key = key
+
+ else
+ mind = new /datum/mind(key)
+ if(ticker)
+ ticker.minds += mind
+ else
+ spawn(0)
+ throw EXCEPTION("mind_initialize(): No ticker ready")
+ if(!mind.name) mind.name = real_name
+ mind.current = src
+
+//HUMAN
+/mob/living/carbon/human/mind_initialize()
+ ..()
+ if(!mind.assigned_role) mind.assigned_role = "Assistant" //defualt
+
+//MONKEY
+/mob/living/carbon/monkey/mind_initialize()
+ ..()
+
+//slime
+/mob/living/simple_animal/slime/mind_initialize()
+ ..()
+ mind.special_role = "slime"
+ mind.assigned_role = "slime"
+
+//XENO
+/mob/living/carbon/alien/mind_initialize()
+ ..()
+ mind.special_role = "Alien"
+ mind.assigned_role = "Alien"
+ //XENO HUMANOID
+/mob/living/carbon/alien/humanoid/royal/queen/mind_initialize()
+ ..()
+ mind.special_role = "Queen"
+
+/mob/living/carbon/alien/humanoid/royal/praetorian/mind_initialize()
+ ..()
+ mind.special_role = "Praetorian"
+
+/mob/living/carbon/alien/humanoid/hunter/mind_initialize()
+ ..()
+ mind.special_role = "Hunter"
+
+/mob/living/carbon/alien/humanoid/drone/mind_initialize()
+ ..()
+ mind.special_role = "Drone"
+
+/mob/living/carbon/alien/humanoid/sentinel/mind_initialize()
+ ..()
+ mind.special_role = "Sentinel"
+ //XENO LARVA
+/mob/living/carbon/alien/larva/mind_initialize()
+ ..()
+ mind.special_role = "Larva"
+
+//AI
+/mob/living/silicon/ai/mind_initialize()
+ ..()
+ mind.assigned_role = "AI"
+
+//BORG
+/mob/living/silicon/robot/mind_initialize()
+ ..()
+ mind.assigned_role = "Cyborg"
+
+//PAI
+/mob/living/silicon/pai/mind_initialize()
+ ..()
+ mind.assigned_role = "pAI"
+ mind.special_role = ""
+
+//BLOB
+/mob/camera/blob/mind_initialize()
+ ..()
+ mind.special_role = "Blob"
+
+//Animals
+/mob/living/simple_animal/mind_initialize()
+ ..()
+ mind.assigned_role = "Animal"
+ mind.special_role = "Animal"
+
+/mob/living/simple_animal/pet/dog/corgi/mind_initialize()
+ ..()
+ mind.assigned_role = "Corgi"
+ mind.special_role = "Corgi"
+
+/mob/living/simple_animal/shade/mind_initialize()
+ ..()
+ mind.assigned_role = "Shade"
+ mind.special_role = "Shade"
+
+/mob/living/simple_animal/hostile/construct/mind_initialize()
+ ..()
+ mind.assigned_role = "[initial(name)]"
mind.special_role = "Cultist"
+
diff --git a/code/datums/modules.dm b/code/datums/modules.dm
deleted file mode 100644
index af693456543..00000000000
--- a/code/datums/modules.dm
+++ /dev/null
@@ -1,62 +0,0 @@
-// module datum.
-// this is per-object instance, and shows the condition of the modules in the object
-// actual modules needed is referenced through modulestypes and the object type
-
-/datum/module
- var/status // bits set if working, 0 if broken
- var/installed // bits set if installed, 0 if missing
-
-// moduletypes datum
-// this is per-object type, and shows the modules needed for a type of object
-
-/datum/moduletypes
- var/list/modcount = list() // assoc list of the count of modules for a type
-
-
-var/list/modules = list( // global associative list
-"/obj/machinery/power/apc" = "card_reader,power_control,id_auth,cell_power,cell_charge")
-
-
-/datum/module/New(var/obj/O)
-
- var/type = O.type // the type of the creating object
-
- var/mneed = mods.inmodlist(type) // find if this type has modules defined
-
- if(!mneed) // not found in module list?
- qdel(src) // delete self, thus ending proc
-
- var/needed = mods.getbitmask(type) // get a bitmask for the number of modules in this object
- status = needed
- installed = needed
-
-/datum/moduletypes/proc/addmod(type, modtextlist)
- modules += type // index by type text
- modules[type] = modtextlist
-
-/datum/moduletypes/proc/inmodlist(type)
- return ("[type]" in modules)
-
-/datum/moduletypes/proc/getbitmask(type)
- var/count = modcount["[type]"]
- if(count)
- return 2**count-1
-
- var/modtext = modules["[type]"]
- var/num = 1
- var/pos = 1
-
- while(1)
- pos = findtext(modtext, ",", pos, 0)
- if(!pos)
- break
- else
- pos++
- num++
-
- modcount += "[type]"
- modcount["[type]"] = num
-
- return 2**num-1
-
-
diff --git a/code/datums/spells/construct_spells.dm b/code/datums/spells/construct_spells.dm
index e471cf084a8..3ca60856192 100644
--- a/code/datums/spells/construct_spells.dm
+++ b/code/datums/spells/construct_spells.dm
@@ -70,6 +70,10 @@
cult_req = 1
charge_max = 4000
+/obj/effect/proc_holder/spell/aoe_turf/conjure/soulstone/noncult
+ summon_type = list(/obj/item/device/soulstone/anybody)
+
+
/obj/effect/proc_holder/spell/aoe_turf/conjure/lesserforcewall
name = "Shield"
diff --git a/code/datums/spells/infinite_guns.dm b/code/datums/spells/infinite_guns.dm
index e74ac7af043..10b8612c858 100644
--- a/code/datums/spells/infinite_guns.dm
+++ b/code/datums/spells/infinite_guns.dm
@@ -6,7 +6,7 @@
range = -1
school = "conjuration"
- charge_max = 300
+ charge_max = 750
clothes_req = 1
cooldown_min = 10 //Gun wizard
action_icon_state = "bolt_action"
diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm
index b79afa72ee4..9f1e620b033 100644
--- a/code/datums/uplink_item.dm
+++ b/code/datums/uplink_item.dm
@@ -63,6 +63,7 @@ var/list/uplink_items = list()
var/list/gamemodes = list() // Empty list means it is in all the gamemodes. Otherwise place the gamemode name here.
var/list/excludefrom = list() //Empty list does nothing. Place the name of gamemode you don't want this item to be available in here. This is so you dont have to list EVERY mode to exclude something.
var/surplus = 100 //Chance of being included in the surplus crate (when pick() selects it)
+ var/refundable = FALSE
/datum/uplink_item/proc/spawn_item(turf/loc, obj/item/device/uplink/U)
if(item)
@@ -332,12 +333,7 @@ var/list/uplink_items = list()
cost = 25
gamemodes = list(/datum/game_mode/nuclear)
surplus = 0
-
-/datum/uplink_item/dangerous/reinforcement/spawn_item()
- var/obj/item/weapon/antag_spawner/nuke_ops/T = ..()
- if(istype(T))
- T.TC_cost = cost
-
+ refundable = TRUE
/datum/uplink_item/dangerous/guardian
name = "Holoparasites"
@@ -1049,7 +1045,7 @@ var/list/uplink_items = list()
buyable_items += temp_uplink_list[category]
var/list/bought_items = list()
U.uses -= cost
- U.used_TC = 20
+ U.used_TC += 20
var/remaining_TC = 50
var/datum/uplink_item/I
diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm
index 2d979f712bf..1846247a260 100644
--- a/code/game/area/Space Station 13 areas.dm
+++ b/code/game/area/Space Station 13 areas.dm
@@ -740,7 +740,7 @@ var/list/teleportlocs = list()
music = 'sound/ambience/signal.ogg'
/area/medical/patients_rooms
- name = "Patient's Rooms"
+ name = "Patients' Rooms"
icon_state = "patients"
/area/medical/cmo
@@ -1142,7 +1142,7 @@ var/list/teleportlocs = list()
icon_state = "yellow"
/area/construction/quarters
- name = "Engineer's Quarters"
+ name = "Engineers' Quarters"
icon_state = "yellow"
/area/construction/qmaint
diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm
index a3c326abfa1..fe2a2e34cbc 100644
--- a/code/game/atoms_movable.dm
+++ b/code/game/atoms_movable.dm
@@ -295,3 +295,23 @@
if(buckled_mob == mover)
return 1
return ..()
+
+
+/atom/movable/proc/get_spacemove_backup()
+ var/atom/movable/dense_object_backup
+ for(var/A in orange(1, get_turf(src)))
+ if(isarea(A))
+ continue
+ else if(isturf(A))
+ var/turf/turf = A
+ if(!turf.density)
+ continue
+ return turf
+ else
+ var/atom/movable/AM = A
+ if(!AM.CanPass(src) || AM.density)
+ if(AM.anchored)
+ return AM
+ dense_object_backup = AM
+ break
+ . = dense_object_backup
\ No newline at end of file
diff --git a/code/game/communications.dm b/code/game/communications.dm
index d9c1595ec2e..2052b793936 100644
--- a/code/game/communications.dm
+++ b/code/game/communications.dm
@@ -40,7 +40,7 @@
obj/proc/receive_signal(datum/signal/signal, var/receive_method as num, var/receive_param)
Handler from received signals. By default does nothing. Define your own for your object.
- Avoid of sending signals directly from this proc, use spawn(-1). Do not use sleep() here please.
+ Avoid of sending signals directly from this proc, use spawn(0). Do not use sleep() here please.
parameters:
signal - see description below. Extract all needed data from the signal before doing sleep(), spawn() or return!
receive_method - may be TRANSMISSION_WIRE or TRANSMISSION_RADIO.
diff --git a/code/game/gamemodes/antag_spawner.dm b/code/game/gamemodes/antag_spawner.dm
index d61bb3607e1..1fb027a8844 100644
--- a/code/game/gamemodes/antag_spawner.dm
+++ b/code/game/gamemodes/antag_spawner.dm
@@ -92,13 +92,14 @@
M << "Your service has not gone unrewarded, however. Studying under [usr.real_name], you have learned stealthy, robeless spells. You are able to cast knock and mindswap."
equip_antag(M)
- var/mob/living/carbon/human/H = usr
var/wizard_name_first = pick(wizard_first)
var/wizard_name_second = pick(wizard_second)
var/randomname = "[wizard_name_first] [wizard_name_second]"
- var/datum/objective/default/protect/new_objective = add_objective(M.mind, /datum/objective/default/protect)
- new_objective.target = H.mind
- new_objective.explanation_text = "Protect [H.real_name], the wizard."
+ var/datum/objective/protect/new_objective = new /datum/objective/protect
+ new_objective.owner = M:mind
+ new_objective:target = usr:mind
+ new_objective.explanation_text = "Protect [usr.real_name], the wizard."
+ M.mind.objectives += new_objective
ticker.mode.apprentices += M.mind
M.mind.special_role = "apprentice"
ticker.mode.update_wiz_icons_added(M.mind)
@@ -134,7 +135,6 @@
desc = "A single-use teleporter designed to quickly reinforce operatives in the field."
icon = 'icons/obj/device.dmi'
icon_state = "locator"
- var/TC_cost = 0
var/borg_to_spawn
var/list/possible_types = list("Assault", "Medical")
@@ -163,6 +163,7 @@
var/datum/effect_system/spark_spread/S = new /datum/effect_system/spark_spread
S.set_up(4, 1, src)
S.start()
+ qdel(src)
else
user << "Unable to connect to Syndicate command. Please wait and try again later or use the teleporter on your uplink to get your points refunded."
@@ -251,9 +252,11 @@
S.mind.assigned_role = "Slaughter Demon"
S.mind.special_role = "Slaughter Demon"
ticker.mode.traitors += S.mind
- var/datum/objective/default/assassinate/new_objective = add_objective(S.mind, /datum/objective/default/assassinate)
+ var/datum/objective/assassinate/new_objective = new /datum/objective/assassinate
+ new_objective.owner = S.mind
new_objective.target = usr.mind
new_objective.explanation_text = "Kill [usr.real_name], the one who summoned you."
+ S.mind.objectives += new_objective
var/datum/objective/new_objective2 = new /datum/objective
new_objective2.owner = S.mind
new_objective2.explanation_text = "Kill everyone else while you're at it."
@@ -261,4 +264,4 @@
S << S.playstyle_string
S << "You are currently not currently in the same plane of existence as the station. Ctrl+Click a blood pool to manifest."
S << "Objective #[1]: [new_objective.explanation_text]"
- S << "Objective #[2]: [new_objective2.explanation_text]"
\ No newline at end of file
+ S << "Objective #[2]: [new_objective2.explanation_text]"
diff --git a/code/game/gamemodes/blob/blobs/blob_mobs.dm b/code/game/gamemodes/blob/blobs/blob_mobs.dm
index 5d0e61a3b11..24abe73e2b8 100644
--- a/code/game/gamemodes/blob/blobs/blob_mobs.dm
+++ b/code/game/gamemodes/blob/blobs/blob_mobs.dm
@@ -8,6 +8,7 @@
icon = 'icons/mob/blob.dmi'
pass_flags = PASSBLOB
faction = list("blob")
+ bubble_icon = "blob"
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
maxbodytemp = 360
diff --git a/code/game/gamemodes/blob/blobs/core.dm b/code/game/gamemodes/blob/blobs/core.dm
index 7771469a545..4a6d5c55481 100644
--- a/code/game/gamemodes/blob/blobs/core.dm
+++ b/code/game/gamemodes/blob/blobs/core.dm
@@ -8,6 +8,8 @@
explosion_block = 6
point_return = -1
atmosblock = 1
+ health_regen = 0 //we regen in Life() instead of when pulsed
+ var/core_regen = 2
var/overmind_get_delay = 0 //we don't want to constantly try to find an overmind, this var tracks when we'll try to get an overmind again
var/resource_delay = 0
var/point_rate = 2
@@ -34,9 +36,6 @@
var/image/C = new('icons/mob/blob.dmi', "blob_core_overlay")
overlays += C
-/obj/effect/blob/core/PulseAnimation()
- return
-
/obj/effect/blob/core/Destroy()
blob_cores -= src
if(overmind)
@@ -56,9 +55,6 @@
if(overmind) //we should have an overmind, but...
overmind.update_health()
-/obj/effect/blob/core/RegenHealth()
- return // Don't regen, we handle it in Life()
-
/obj/effect/blob/core/Life()
if(!overmind)
create_overmind()
@@ -66,7 +62,7 @@
if(resource_delay <= world.time)
resource_delay = world.time + 10 // 1 second
overmind.add_points(point_rate)
- health = min(maxhealth, health+health_regen)
+ health = min(maxhealth, health+core_regen)
if(overmind)
overmind.update_health()
Pulse_Area(overmind, 12, 4, 3)
diff --git a/code/game/gamemodes/blob/blobs/factory.dm b/code/game/gamemodes/blob/blobs/factory.dm
index a70842aa7c4..b6c3c879b15 100644
--- a/code/game/gamemodes/blob/blobs/factory.dm
+++ b/code/game/gamemodes/blob/blobs/factory.dm
@@ -18,22 +18,16 @@
spores = null
return ..()
-/obj/effect/blob/factory/PulseAnimation(activate = 0)
- if(activate)
- ..()
- return
-
-/obj/effect/blob/factory/run_action()
+/obj/effect/blob/factory/Be_Pulsed()
+ . = ..()
if(spores.len >= max_spores)
- return 0
+ return
if(spore_delay > world.time)
- return 0
+ return
+ flick("factory_glow", src)
spore_delay = world.time + 100 // 10 seconds
- PulseAnimation(1)
var/mob/living/simple_animal/hostile/blob/blobspore/BS = new/mob/living/simple_animal/hostile/blob/blobspore(src.loc, src)
if(overmind) //if we don't have an overmind, we don't need to do anything but make a spore
BS.overmind = overmind
BS.update_icons()
overmind.blob_mobs.Add(BS)
- return 0
-
diff --git a/code/game/gamemodes/blob/blobs/node.dm b/code/game/gamemodes/blob/blobs/node.dm
index 3141e98930b..0fa21158e26 100644
--- a/code/game/gamemodes/blob/blobs/node.dm
+++ b/code/game/gamemodes/blob/blobs/node.dm
@@ -25,9 +25,6 @@
var/image/C = new('icons/mob/blob.dmi', "blob_node_overlay")
src.overlays += C
-/obj/effect/blob/node/PulseAnimation()
- return
-
/obj/effect/blob/node/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
return
diff --git a/code/game/gamemodes/blob/blobs/resource.dm b/code/game/gamemodes/blob/blobs/resource.dm
index 03bb6164280..a435685eeb7 100644
--- a/code/game/gamemodes/blob/blobs/resource.dm
+++ b/code/game/gamemodes/blob/blobs/resource.dm
@@ -8,22 +8,11 @@
point_return = 15
var/resource_delay = 0
-
-/obj/effect/blob/resource/PulseAnimation(activate = 0)
- if(activate)
- ..()
- return
-
-/obj/effect/blob/resource/run_action()
-
+/obj/effect/blob/resource/Be_Pulsed()
+ . = ..()
if(resource_delay > world.time)
- return 0
-
- PulseAnimation(1)
-
+ return
+ flick("factory_glow", src)
resource_delay = world.time + 45 // 4 and a half seconds
-
if(overmind)
overmind.add_points(1)
- return 0
-
diff --git a/code/game/gamemodes/blob/overmind.dm b/code/game/gamemodes/blob/overmind.dm
index 2a0b8ea8575..dcf6c5747a9 100644
--- a/code/game/gamemodes/blob/overmind.dm
+++ b/code/game/gamemodes/blob/overmind.dm
@@ -90,11 +90,13 @@
return
var/message_a = say_quote(message, get_spans())
- var/rendered = "Blob Telepathy, [name]([blob_reagent_datum.name]) [message_a]"
+ var/rendered = "\[Blob Telepathy\] [name]([blob_reagent_datum.name]) [message_a]"
for(var/mob/M in mob_list)
- if(isovermind(M) || isobserver(M) || istype(M, /mob/living/simple_animal/hostile/blob))
- M.show_message(rendered, 2)
+ if(isovermind(M) || istype(M, /mob/living/simple_animal/hostile/blob))
+ M << rendered
+ if(isobserver(M))
+ M << "(F) [rendered]"
/mob/camera/blob/emote(act,m_type=1,message = null)
return
diff --git a/code/game/gamemodes/blob/theblob.dm b/code/game/gamemodes/blob/theblob.dm
index 5f92432b457..1b845d570c8 100644
--- a/code/game/gamemodes/blob/theblob.dm
+++ b/code/game/gamemodes/blob/theblob.dm
@@ -12,8 +12,7 @@
var/health = 30
var/maxhealth = 30
var/health_regen = 2 //how much health this blob regens when pulsed
- var/health_timestamp = 0 //we got healed when?
- var/pulse_timestamp = 0 //we got pulsed when?
+ var/pulse_timestamp = 0 //we got pulsed/healed when?
var/brute_resist = 0.5 //multiplies brute damage by this
var/fire_resist = 1 //multiplies burn damage by this
var/atmosblock = 0 //if the blob blocks atmos and heat spread
@@ -90,7 +89,6 @@
src.Be_Pulsed()
if(claim_range)
for(var/obj/effect/blob/B in ultra_range(claim_range, src, 1))
- B.update_icon()
if(!B.overmind && !istype(B, /obj/effect/blob/core) && prob(30))
B.overmind = pulsing_overmind //reclaim unclaimed, non-core blobs.
B.update_icon()
@@ -106,10 +104,9 @@
/obj/effect/blob/proc/Be_Pulsed()
if(pulse_timestamp <= world.time)
- PulseAnimation()
ConsumeTile()
- RegenHealth()
- run_action()
+ health = min(maxhealth, health+health_regen)
+ update_icon()
pulse_timestamp = world.time + 10
return 1 //we did it, we were pulsed!
return 0 //oh no we failed
@@ -118,21 +115,6 @@
for(var/atom/A in loc)
A.blob_act()
-/obj/effect/blob/proc/PulseAnimation()
- flick("[icon_state]_glow", src)
- return
-
-/obj/effect/blob/proc/RegenHealth() //when pulsed, heal!
- if(health_timestamp <= world.time)
- health = min(maxhealth, health+health_regen)
- update_icon()
- health_timestamp = world.time + 10 //1 second between heals
- return 1
- return 0
-
-/obj/effect/blob/proc/run_action()
- return 0
-
/obj/effect/blob/proc/expand(turf/T = null, prob = 1, controller = null)
if(prob && !prob(health))
diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm
index 2506052b8f2..bd417180b6d 100644
--- a/code/game/gamemodes/changeling/changeling.dm
+++ b/code/game/gamemodes/changeling/changeling.dm
@@ -113,6 +113,9 @@ var/list/slot2type = list("head" = /obj/item/clothing/head/changeling, "wear_mas
/datum/game_mode/proc/forge_changeling_objectives(datum/mind/changeling, var/team_mode = 0)
//OBJECTIVES - random traitor objectives. Unique objectives "steal brain" and "identity theft".
+ //No escape alone because changelings aren't suited for it and it'd probably just lead to rampant robusting
+ //If it seems like they'd be able to do it in play, add a 10% chance to have to escape alone
+
var/escape_objective_possible = TRUE
//if there's a team objective, check if it's compatible with escape objectives
@@ -121,7 +124,63 @@ var/list/slot2type = list("head" = /obj/item/clothing/head/changeling, "wear_mas
escape_objective_possible = FALSE
break
- generate_objectives(changeling, 4, escape_objective_possible)
+ var/datum/objective/absorb/absorb_objective = new
+ absorb_objective.owner = changeling
+ absorb_objective.gen_amount_goal(6, 8)
+ changeling.objectives += absorb_objective
+
+ if(prob(60))
+ var/datum/objective/steal/steal_objective = new
+ steal_objective.owner = changeling
+ steal_objective.find_target()
+ changeling.objectives += steal_objective
+
+ var/list/active_ais = active_ais()
+ if(active_ais.len && prob(100/joined_player_list.len))
+ var/datum/objective/destroy/destroy_objective = new
+ destroy_objective.owner = changeling
+ destroy_objective.find_target()
+ changeling.objectives += destroy_objective
+ else
+ if(prob(70))
+ var/datum/objective/assassinate/kill_objective = new
+ kill_objective.owner = changeling
+ if(team_mode) //No backstabbing while in a team
+ kill_objective.find_target_by_role(role = "Changeling", role_type = 1, invert = 1)
+ else
+ kill_objective.find_target()
+ changeling.objectives += kill_objective
+ else
+ var/datum/objective/maroon/maroon_objective = new
+ maroon_objective.owner = changeling
+ if(team_mode)
+ maroon_objective.find_target_by_role(role = "Changeling", role_type = 1, invert = 1)
+ else
+ maroon_objective.find_target()
+ changeling.objectives += maroon_objective
+
+ if (!(locate(/datum/objective/escape) in changeling.objectives) && escape_objective_possible)
+ var/datum/objective/escape/escape_with_identity/identity_theft = new
+ identity_theft.owner = changeling
+ identity_theft.target = maroon_objective.target
+ identity_theft.update_explanation_text()
+ changeling.objectives += identity_theft
+ escape_objective_possible = FALSE
+
+ if (!(locate(/datum/objective/escape) in changeling.objectives) && escape_objective_possible)
+ if(prob(50))
+ var/datum/objective/escape/escape_objective = new
+ escape_objective.owner = changeling
+ changeling.objectives += escape_objective
+ else
+ var/datum/objective/escape/escape_with_identity/identity_theft = new
+ identity_theft.owner = changeling
+ if(team_mode)
+ identity_theft.find_target_by_role(role = "Changeling", role_type = 1, invert = 1)
+ else
+ identity_theft.find_target()
+ changeling.objectives += identity_theft
+ escape_objective_possible = FALSE
diff --git a/code/game/gamemodes/changeling/powers/absorb.dm b/code/game/gamemodes/changeling/powers/absorb.dm
index 97aa442b108..da36d8f6d96 100644
--- a/code/game/gamemodes/changeling/powers/absorb.dm
+++ b/code/game/gamemodes/changeling/powers/absorb.dm
@@ -157,10 +157,10 @@
var/mob/dead/observer/ghost = target.ghostize(0)
user.mind.transfer_to(target)
- if(ghost && ghost.mind)
+ if(ghost)
ghost.mind.transfer_to(user)
- else
- user.key = ghost.key
+ if(ghost.key)
+ user.key = ghost.key
user.Paralyse(2)
target << "Our genes cry out as we swap our [user] form for [target]."
diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm
index 10e43124d7f..7166ef3eea8 100644
--- a/code/game/gamemodes/cult/cult.dm
+++ b/code/game/gamemodes/cult/cult.dm
@@ -20,9 +20,12 @@
user.say(message)
else
user.whisper(message)
+ var/my_message = "[(ishuman(user) ? "Acolyte" : "Construct")] [user]: [message]"
for(var/mob/M in mob_list)
- if(iscultist(M) || (M in dead_mob_list))
- M << "[(ishuman(user) ? "Acolyte" : "Construct")] [user]: [message]"
+ if(iscultist(M))
+ M << my_message
+ if(M in dead_mob_list)
+ M << "(F) [my_message]"
log_say("[user.real_name]/[user.key] : [message]")
diff --git a/code/game/gamemodes/cult/cult_structures.dm b/code/game/gamemodes/cult/cult_structures.dm
index bb84c466b3c..a1c9e0b5373 100644
--- a/code/game/gamemodes/cult/cult_structures.dm
+++ b/code/game/gamemodes/cult/cult_structures.dm
@@ -37,16 +37,17 @@
cult.large_shell_reference = null
if(cult.eldergod)
go_to_red = 0
- if(go_to_red)
- priority_announce("The extra-dimensional flow has ceased. All personnel should return to their routine activities.","Central Command Higher Dimensions Affairs")
- if(get_security_level() == "delta")
- set_security_level("red")
black_overlay = null
if(timer_id)
deltimer(timer_id)
+ if(go_to_red)
+ priority_announce("The extra-dimensional flow has ceased. All personnel should return to their routine activities.","Central Command Higher Dimensions Affairs")
+ if(get_security_level() == "delta")
+ set_security_level("red")
SSshuttle.emergencyNoEscape = 0
- SSshuttle.emergency.mode = SHUTTLE_DOCKED
- SSshuttle.emergency.timer = world.time
+ if(SSshuttle.emergency.mode == SHUTTLE_STRANDED)
+ SSshuttle.emergency.mode = SHUTTLE_DOCKED
+ SSshuttle.emergency.timer = world.time
..()
/obj/structure/constructshell/large/examine(mob/user)
diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm
index 425a946adf8..a62e1726d33 100644
--- a/code/game/gamemodes/game_mode.dm
+++ b/code/game/gamemodes/game_mode.dm
@@ -461,8 +461,7 @@
continue //Dead mob, ghost abandoned
else
if(D.can_reenter_corpse)
- msg += "[L.name] ([ckey(D.mind.key)]), the [L.job] (This shouldn't appear.)\n"
- continue //Lolwhat
+ continue //Adminghost, or cult/wizard ghost
else
msg += "[L.name] ([ckey(D.mind.key)]), the [L.job] (Ghosted)\n"
continue //Ghosted while alive
diff --git a/code/game/gamemodes/gang/gang_pen.dm b/code/game/gamemodes/gang/gang_pen.dm
index 4ef55716810..bf856cce812 100644
--- a/code/game/gamemodes/gang/gang_pen.dm
+++ b/code/game/gamemodes/gang/gang_pen.dm
@@ -92,17 +92,16 @@
if(I != src)
qdel(I)
- var/success
- if(target.stat != DEAD)
- if(target.mind in ticker.mode.get_gangsters())
- if(ticker.mode.remove_gangster(target.mind,0,1))
- success = 1 //Was not a gang boss, convert as usual
- else
- success = 1
-
- if(!target.mind)
+ if(!target.mind || target.stat == DEAD)
return 0
+ var/success
+ if(target.mind in ticker.mode.get_gangsters())
+ if(ticker.mode.remove_gangster(target.mind,0,1))
+ success = 1 //Was not a gang boss, convert as usual
+ else
+ success = 1
+
if(ishuman(target))
if(!success)
target.visible_message("[target] seems to resist the implant!", "You feel the influence of your enemies try to invade your mind!")
diff --git a/code/game/gamemodes/gang/recaller.dm b/code/game/gamemodes/gang/recaller.dm
index 6dbe8cb927c..f5631779f09 100644
--- a/code/game/gamemodes/gang/recaller.dm
+++ b/code/game/gamemodes/gang/recaller.dm
@@ -358,7 +358,7 @@
if(ganger.current && (ganger.current.z <= 2) && (ganger.current.stat == CONSCIOUS))
ganger.current << ping
for(var/mob/M in dead_mob_list)
- M << ping
+ M << "(F) [ping]"
log_game("[key_name(user)] Messaged [gang.name] Gang: [message].")
diff --git a/code/game/gamemodes/malfunction/Malf_Modules.dm b/code/game/gamemodes/malfunction/Malf_Modules.dm
index 6b1041d2d2e..70cc7008be2 100644
--- a/code/game/gamemodes/malfunction/Malf_Modules.dm
+++ b/code/game/gamemodes/malfunction/Malf_Modules.dm
@@ -43,6 +43,10 @@
var/obj/machinery/doomsday_device/DOOM = new /obj/machinery/doomsday_device(src)
doomsday_device = DOOM
verbs -= /mob/living/silicon/ai/proc/nuke_station
+ for(var/obj/item/weapon/pinpointer/point in pinpointer_list)
+ for(var/mob/living/silicon/ai/A in ai_list)
+ if((A.stat != DEAD) && A.nuking)
+ point.the_disk = A //The pinpointer now tracks the AI core
/obj/machinery/doomsday_device
icon = 'icons/obj/machines/nuke_terminal.dmi'
diff --git a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm
index a14280395e6..3d20fde2911 100644
--- a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm
+++ b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm
@@ -339,9 +339,9 @@
2.Put the specimen on operating table
3.Apply surgical drapes preparing for dissection
4.Apply scalpel to specimen torso
- 5.Stop the bleeders and retract skin
- 6.Cut out organs you find with a scalpel
- 7.Use your hands to remove the remaining organs
+ 5.Retract skin from specimen's torso
+ 6.Apply scalpel to specimen's torso
+ 7.Search through the specimen's torso with your hands to remove any organs
8.Insert replacement gland (Retrieve one from gland storage)
9.Consider dressing the specimen back to not disturb the habitat
10.Put the specimen in the experiment machinery
diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm
index da0a9add2ce..d317e8f25c9 100644
--- a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm
+++ b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm
@@ -34,6 +34,7 @@
icon = 'icons/mob/swarmer.dmi'
desc = "A robot of unknown design, they seek only to consume materials and replicate themselves indefinitely."
speak_emote = list("tones")
+ bubble_icon = "swarmer"
health = 40
maxHealth = 40
status_flags = CANPUSH
@@ -59,7 +60,6 @@
speed = 0
faction = list("swarmer")
AIStatus = AI_OFF
- projectiletype = /obj/item/projectile/beam/disabler
pass_flags = PASSTABLE
ventcrawler = 2
ranged = 1
@@ -290,7 +290,14 @@
var/turf/simulated/floor/F = random_location
if(F.air)
var/datum/gas_mixture/A = F.air
- if(A.oxygen >= 16 && !A.toxins && A.carbon_dioxide < 10 && !A.trace_gases.len)//Can most things breathe in this location?
+ var/list/A_gases = A.gases
+ var/trace_gases
+ for(var/id in A_gases)
+ if(id in hardcoded_gases)
+ continue
+ trace_gases = TRUE
+ break
+ if((A_gases["o2"] && A_gases["o2"][MOLES] >= 16) && !A_gases["plasma"] && (!A_gases["co2"] || A_gases["co2"][MOLES] < 10) && !trace_gases)//Can most things breathe in this location?
if((A.temperature > 270) && (A.temperature < 360))//Not too hot, not too cold
var/pressure = A.return_pressure()
if((pressure > 20) && (pressure < 550))//Account for crushing pressure or vaccuums
@@ -486,7 +493,7 @@
return
src << "Attempting to repair damage to our body, stand by..."
if(do_mob(src, src, 100))
- adjustBruteLoss(-100)
+ adjustHealth(-100)
src << "We successfully repaired ourselves."
/mob/living/simple_animal/hostile/swarmer/proc/ToggleLight()
@@ -497,10 +504,13 @@
/mob/living/simple_animal/hostile/swarmer/proc/ContactSwarmers()
var/message = input(src, "Announce to other swarmers", "Swarmer contact")
+ var/rendered = "Swarm communication - [src] states: [message]"
if(message)
for(var/mob/M in mob_list)
- if(isswarmer(M) || (M in dead_mob_list))
- M << "Swarm communication - [src] states: [message]"
+ if(isswarmer(M))
+ M << rendered
+ if(M in dead_mob_list)
+ M << "(F) [rendered]"
diff --git a/code/game/gamemodes/miniantags/morph/morph.dm b/code/game/gamemodes/miniantags/morph/morph.dm
index be09a38c2c1..f90b2b78bba 100644
--- a/code/game/gamemodes/miniantags/morph/morph.dm
+++ b/code/game/gamemodes/miniantags/morph/morph.dm
@@ -61,6 +61,13 @@
return 0
return 1
+/mob/living/simple_animal/hostile/morph/proc/eat(atom/movable/A)
+ if(A && A.loc != src)
+ visible_message("[src] swallows [A] whole!")
+ A.loc = src
+ return 1
+ return 0
+
/mob/living/simple_animal/hostile/morph/ShiftClickOn(atom/movable/A)
if(morph_time <= world.time && !stat)
if(A == src)
@@ -151,16 +158,14 @@
var/mob/living/L = target
if(L.stat == DEAD)
if(do_after(src, 30, target = L))
- visible_message("[src] swallows [target] whole!")
- L.loc = src
- adjustBruteLoss(-50)
+ if(eat(L))
+ adjustHealth(-50)
return
else if(istype(target,/obj/item)) // Eat items just to be annoying
var/obj/item/I = target
if(!I.anchored)
if(do_after(src,20, target = I))
- visible_message("[src] swallows [target] whole!")
- I.loc = src
+ eat(I)
return
target.attack_animal(src)
diff --git a/code/game/gamemodes/miniantags/revenant/revenant.dm b/code/game/gamemodes/miniantags/revenant/revenant.dm
index ed153281399..45b53e3f6f2 100644
--- a/code/game/gamemodes/miniantags/revenant/revenant.dm
+++ b/code/game/gamemodes/miniantags/revenant/revenant.dm
@@ -139,7 +139,7 @@
/mob/living/simple_animal/revenant/narsie_act()
return //most humans will now be either bones or harvesters, but we're still un-alive.
-/mob/living/simple_animal/revenant/adjustBruteLoss(amount)
+/mob/living/simple_animal/revenant/adjustHealth(amount)
if(!revealed)
return
essence = max(0, essence-amount)
@@ -238,11 +238,12 @@
if(!message)
return
log_say("[key_name(src)] : [message]")
+ var/rendered = "[src] says, \"[message]\""
for(var/mob/M in mob_list)
- if (istype(M, /mob/new_player))
- continue
- if(istype(M, /mob/living/simple_animal/revenant) || M.stat == DEAD)
- M << "[src] says, \"[message]\"" //Can commune with the dead
+ if(istype(M, /mob/living/simple_animal/revenant))
+ M << rendered
+ if(isobserver(M))
+ M << "(F) [rendered]"
return
diff --git a/code/game/gamemodes/nuclear/nuclear_challenge.dm b/code/game/gamemodes/nuclear/nuclear_challenge.dm
index 6049556edc0..e5675f6b183 100644
--- a/code/game/gamemodes/nuclear/nuclear_challenge.dm
+++ b/code/game/gamemodes/nuclear/nuclear_challenge.dm
@@ -40,7 +40,7 @@
U.hidden_uplink.uplink_owner= "[user.key]"
U.hidden_uplink.uses = 280
U.hidden_uplink.mode_override = /datum/game_mode/nuclear //Maybe we can have a special set of items for the challenge uplink eventually
- config.shuttle_refuel_delay = min(config.shuttle_refuel_delay, CHALLENGE_SHUTTLE_DELAY)
+ config.shuttle_refuel_delay = max(config.shuttle_refuel_delay, CHALLENGE_SHUTTLE_DELAY)
qdel(src)
diff --git a/code/game/gamemodes/nuclear/pinpointer.dm b/code/game/gamemodes/nuclear/pinpointer.dm
index efafaf9b75b..ec3a854a258 100644
--- a/code/game/gamemodes/nuclear/pinpointer.dm
+++ b/code/game/gamemodes/nuclear/pinpointer.dm
@@ -12,8 +12,13 @@
var/obj/item/weapon/disk/nuclear/the_disk = null
var/active = 0
+/obj/item/weapon/pinpointer/New()
+ ..()
+ pinpointer_list += src
+
/obj/item/weapon/pinpointer/Destroy()
active = 0
+ pinpointer_list -= src
return ..()
/obj/item/weapon/pinpointer/attack_self()
diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm
index 073d828dc81..3490b4c750b 100644
--- a/code/game/gamemodes/objective.dm
+++ b/code/game/gamemodes/objective.dm
@@ -1,927 +1,838 @@
-/datum/objective
- var/datum/mind/owner = null //Who owns the objective.
- var/explanation_text = "Nothing" //What that person is supposed to do.
- var/datum/mind/target = null //If they are focused on a particular person.
- var/target_amount = 0 //If they are focused on a particular number. Steal objectives have their own counter.
- var/completed = 0 //currently only used for custom objectives.
- var/dangerrating = 0 //How hard the objective is, essentially. Used for dishing out objectives and checking overall victory.
- var/martyr_compatible = 0 //If the objective is compatible with martyr objective, i.e. if you can still do it while dead.
- var/required_role = null //If the objective can only be done by a certain role, such as absorb for changelings.
- var/randomgen = 1 //Whether the objective can be generated randomly.
- var/error_text = "" //Displayed to admins if the objective fails to initialize properly when editing or adding
-
-/proc/generate_objectives(var/datum/mind/M, var/objectives_made = 2, var/has_escape = TRUE)
- var/list/objective_types = (typesof(/datum/objective/default) - /datum/objective/default)
- var/list/escape_objective_types = (typesof(/datum/objective/escape_obj) - /datum/objective/escape_obj)
- for(var/O in objective_types) // this is fucking hacky as shit but
- var/datum/objective/obj = new O
- if(M.special_role != obj.required_role && obj.required_role != null)
- objective_types -= O
- if(!obj.randomgen)
- objective_types -= O
- for(var/E in escape_objective_types)
- var/datum/objective/obj = new E
- if(M.special_role != obj.required_role && obj.required_role != null)
- objective_types -= E
- if(!obj.randomgen)
- objective_types -= E
- for(var/i = 1, i <= objectives_made, i++)
- if(i == objectives_made && has_escape)
- var/datum/objective/holder_obj = pick(escape_objective_types)
- add_objective(M, holder_obj)
- return
- else
- var/datum/objective/holder_obj = pick(objective_types)
- objective_types -= holder_obj
- var/datum/objective/O = new holder_obj
- if(!O.martyr_compatible)
- escape_objective_types -= list(/datum/objective/escape_obj/martyr)
- add_objective(M, holder_obj)
-
-
-/proc/add_objective(var/datum/mind/M, var/obj_path, var/announce_new_objectives = 0, var/replace_if_impossible = 1, var/admin=0)
- var/datum/objective/objective = new obj_path()
- objective.owner = M
- M.objectives += objective
- if(admin && check_rights(R_ADMIN))
- objective.find_target_admin()
- else
- objective.find_target()
-
- if(!objective.extra_prep())
- if(replace_if_impossible)
- generate_objectives(objective.owner, 1, FALSE) // Generate another objective to replace this one.
- objective.owner.objectives -= src
- qdel(src)
- return null
-
- objective.update_explanation_text()
- if(announce_new_objectives)
- if(M.special_role)
- M.current << "You are the [M.special_role]."
- var/obj_count = 1
- for(var/datum/objective/OBJ in M.objectives)
- M.current << "Objective #[obj_count]: [OBJ.explanation_text]"
- obj_count++
- return objective
-
-/datum/objective/New(var/text)
- if(text)
- explanation_text = text
-
-/datum/objective/proc/check_completion()
- return completed
-
-/datum/objective/proc/extra_prep()
- return 1
-
-/datum/objective/proc/is_unique_objective(possible_target)
- for(var/datum/objective/O in owner.objectives)
- if(istype(O, type) && O.get_target() == possible_target)
- return 0
- return 1
-
-/datum/objective/proc/get_target()
- return target
-
-/datum/objective/proc/find_possible_targets()
- var/list/possible_targets = list()
- for(var/datum/mind/possible_target in ticker.minds)
- if(possible_target != owner && ishuman(possible_target.current) && (possible_target.current.stat != 2) && is_unique_objective(possible_target))
- possible_targets += possible_target
- return possible_targets
-
-/datum/objective/proc/find_target()
- var/list/possible_targets = find_possible_targets()
- if(possible_targets.len > 0)
- target = pick(possible_targets)
- update_explanation_text()
- return target
-
-/datum/objective/proc/find_target_admin()
- target = input("Select target:", "Objective target") as null|anything in find_possible_targets()
- return target
-
-/datum/objective/proc/find_target_by_role(role, role_type=0, invert=0)//Option sets either to check assigned role or special role. Default to assigned., invert inverts the check, eg: "Don't choose a Ling"
- for(var/datum/mind/possible_target in ticker.minds)
- if((possible_target != owner) && ishuman(possible_target.current))
- var/is_role = 0
- if(role_type)
- if(possible_target.special_role == role)
- is_role++
- else
- if(possible_target.assigned_role == role)
- is_role++
-
- if(invert)
- if(is_role)
- continue
- target = possible_target
- break
- else if(is_role)
- target = possible_target
- break
-
- update_explanation_text()
-
-/datum/objective/proc/update_explanation_text()
- //Default does nothing, override where needed
-
-/datum/objective/proc/give_special_equipment()
-
-// Default objectives are ones you can put on any antag type and they should be able to complete it.
-
-/datum/objective/default/assassinate
- var/target_role_type=0
- dangerrating = 10
- martyr_compatible = 1
-
-/datum/objective/default/assassinate/find_target_by_role(role, role_type=0, invert=0)
- if(!invert)
- target_role_type = role_type
- ..()
- return target
-
-/datum/objective/default/assassinate/check_completion()
- if(target && target.current)
- if(target.current.stat == DEAD || issilicon(target.current) || isbrain(target.current) || target.current.z > 6 || !target.current.ckey) //Borgs/brains/AIs count as dead for traitor objectives. --NeoFite
- return 1
- return 0
- return 1
-
-/datum/objective/default/assassinate/update_explanation_text()
- ..()
- if(target && target.current)
- explanation_text = "Assassinate [target.name], the [!target_role_type ? target.assigned_role : target.special_role]."
- else
- explanation_text = "Free Objective"
-
-
-/datum/objective/mutiny
- var/target_role_type=0
- martyr_compatible = 1
-
-/datum/objective/mutiny/find_target_by_role(role, role_type=0,invert=0)
- if(!invert)
- target_role_type = role_type
- ..()
- return target
-
-/datum/objective/mutiny/check_completion()
- if(target && target.current)
- if(target.current.stat == DEAD || !ishuman(target.current) || !target.current.ckey || !target.current.client)
- return 1
- var/turf/T = get_turf(target.current)
- if(T && (T.z > ZLEVEL_STATION) || target.current.client.is_afk()) //If they leave the station or go afk they count as dead for this
- return 2
- return 0
- return 1
-
-/datum/objective/mutiny/update_explanation_text()
- ..()
- if(target && target.current)
- explanation_text = "Assassinate or exile [target.name], the [!target_role_type ? target.assigned_role : target.special_role]."
- else
- explanation_text = "Free Objective"
-
-
-
-/datum/objective/default/maroon
- var/target_role_type=0
- dangerrating = 5
- martyr_compatible = 1
-
-/datum/objective/default/maroon/find_target_by_role(role, role_type=0, invert=0)
- if(!invert)
- target_role_type = role_type
- ..()
- return target
-
-/datum/objective/default/maroon/check_completion()
- if(target && target.current)
- if(target.current.stat == DEAD || issilicon(target.current) || isbrain(target.current) || target.current.z > 6 || !target.current.ckey) //Borgs/brains/AIs count as dead for traitor objectives. --NeoFite
- return 1
- if(target.current.onCentcom() || target.current.onSyndieBase())
- return 0
- return 1
-
-/datum/objective/default/maroon/update_explanation_text()
- if(target && target.current)
- explanation_text = "Prevent [target.name], the [!target_role_type ? target.assigned_role : target.special_role], from escaping alive."
- else
- explanation_text = "Free Objective"
-
-
-
-/datum/objective/default/debrain//I want braaaainssss
- var/target_role_type=0
- dangerrating = 20
- randomgen = 0
-
-/datum/objective/default/debrain/find_target_by_role(role, role_type=0, invert=0)
- if(!invert)
- target_role_type = role_type
- ..()
- return target
-
-/datum/objective/default/debrain/check_completion()
- if(!target)//If it's a free objective.
- return 1
- if( !owner.current || owner.current.stat==DEAD )//If you're otherwise dead.
- return 0
- if( !target.current || !isbrain(target.current) )
- return 0
- var/atom/A = target.current
- while(A.loc) //check to see if the brainmob is on our person
- A = A.loc
- if(A == owner.current)
- return 1
- return 0
-
-/datum/objective/default/debrain/update_explanation_text()
- ..()
- if(target && target.current)
- explanation_text = "Steal the brain of [target.name], the [!target_role_type ? target.assigned_role : target.special_role]."
- else
- explanation_text = "Free Objective"
-
-
-
-/datum/objective/default/protect//The opposite of killing a dude.
- var/target_role_type=0
- dangerrating = 10
- martyr_compatible = 1
-
-/datum/objective/default/protect/find_target_by_role(role, role_type=0, invert=0)
- if(!invert)
- target_role_type = role_type
- ..()
- return target
-
-/datum/objective/default/protect/check_completion()
- if(!target) //If it's a free objective.
- return 1
- if(target.current)
- if(target.current.stat == DEAD || issilicon(target.current) || isbrain(target.current))
- return 0
- return 1
- return 0
-
-/datum/objective/default/protect/update_explanation_text()
- ..()
- if(target && target.current)
- explanation_text = "Protect [target.name], the [!target_role_type ? target.assigned_role : target.special_role]."
- else
- explanation_text = "Free Objective"
-
-
-
-/datum/objective/escape_obj/hijack
- explanation_text = "Hijack the shuttle to ensure no loyalist Nanotrasen crew escape alive and out of custody."
- dangerrating = 25
- martyr_compatible = 0 //Technically you won't get both anyway.
-
-/datum/objective/escape_obj/hijack/check_completion()
- if(!owner.current || owner.current.stat)
- return 0
- if(SSshuttle.emergency.mode < SHUTTLE_ENDGAME)
- return 0
- if(issilicon(owner.current))
- return 0
-
- var/area/A = get_area(owner.current)
- if(SSshuttle.emergency.areaInstance != A)
- return 0
-
- for(var/mob/living/player in player_list)
- if(player.mind && player.mind != owner)
- if(player.stat != DEAD)
- if(istype(player, /mob/living/silicon)) //Borgs are technically dead anyways
- continue
- if(get_area(player) == A)
- if(!player.mind.special_role && !istype(get_turf(player.mind.current), /turf/simulated/floor/plasteel/shuttle/red))
- return 0
- return 1
-
-/datum/objective/hijackclone
- explanation_text = "Hijack the emergency shuttle by ensuring only you (or your copies) escape."
- dangerrating = 25
- martyr_compatible = 0
-
-/datum/objective/hijackclone/check_completion()
- if(!owner.current)
- return 0
- if(SSshuttle.emergency.mode < SHUTTLE_ENDGAME)
- return 0
-
- var/area/A = SSshuttle.emergency.areaInstance
-
- for(var/mob/living/player in player_list) //Make sure nobody else is onboard
- if(player.mind && player.mind != owner)
- if(player.stat != DEAD)
- if(istype(player, /mob/living/silicon))
- continue
- if(get_area(player) == A)
- if(player.real_name != owner.current.real_name && !istype(get_turf(player.mind.current), /turf/simulated/floor/plasteel/shuttle/red))
- return 0
-
- for(var/mob/living/player in player_list) //Make sure at least one of you is onboard
- if(player.mind && player.mind != owner)
- if(player.stat != DEAD)
- if(istype(player, /mob/living/silicon))
- continue
- if(get_area(player) == A)
- if(player.real_name == owner.current.real_name && !istype(get_turf(player.mind.current), /turf/simulated/floor/plasteel/shuttle/red))
- return 1
- return 0
-
-/datum/objective/escape_obj/block
- explanation_text = "Do not allow any organic lifeforms to escape on the shuttle alive."
- dangerrating = 25
- martyr_compatible = 1
- randomgen = 0
-
-/datum/objective/escape_obj/block/check_completion()
- if(!istype(owner.current, /mob/living/silicon))
- return 0
- if(SSshuttle.emergency.mode < SHUTTLE_ENDGAME)
- return 1
-
- var/area/A = SSshuttle.emergency.areaInstance
-
- for(var/mob/living/player in player_list)
- if(istype(player, /mob/living/silicon))
- continue
- if(player.mind)
- if(player.stat != DEAD)
- if(get_area(player) == A)
- return 0
-
- return 1
-
-
-/datum/objective/escape_obj/escape
- explanation_text = "Escape on the shuttle or an escape pod alive and without being in custody."
- dangerrating = 5
-
-/datum/objective/escape_obj/escape/check_completion()
- if(issilicon(owner.current))
- return 0
- if(isbrain(owner.current))
- return 0
- if(!owner.current || owner.current.stat == DEAD)
- return 0
- if(ticker.force_ending) //This one isn't their fault, so lets just assume good faith
- return 1
- if(ticker.mode.station_was_nuked) //If they escaped the blast somehow, let them win
- return 1
- if(SSshuttle.emergency.mode < SHUTTLE_ENDGAME)
- return 0
- var/turf/location = get_turf(owner.current)
- if(!location)
- return 0
-
- if(istype(location, /turf/simulated/floor/plasteel/shuttle/red)) // Fails traitors if they are in the shuttle brig -- Polymorph
- return 0
-
- if(location.onCentcom() || location.onSyndieBase())
- return 1
-
- return 0
-
-/datum/objective/escape_obj/escape/escape_with_identity
- dangerrating = 10
- var/target_real_name // Has to be stored because the target's real_name can change over the course of the round
- var/target_missing_id
- required_role = "changeling"
-
-/datum/objective/escape_obj/escape/escape_with_identity/find_target()
- target = ..()
- update_explanation_text()
-
-/datum/objective/escape_obj/escape/escape_with_identity/update_explanation_text()
- if(target && target.current)
- target_real_name = target.current.real_name
- explanation_text = "Escape on the shuttle or an escape pod with the identity of [target_real_name], the [target.assigned_role]"
- var/mob/living/carbon/human/H
- if(ishuman(target.current))
- H = target.current
- if(H && H.get_id_name() != target_real_name)
- target_missing_id = 1
- else
- explanation_text += " while wearing their identification card"
- explanation_text += "." //Proper punctuation is important!
-
- else
- explanation_text = "Free Objective."
-
-/datum/objective/escape_obj/escape/escape_with_identity/check_completion()
- if(!target_real_name)
- return 1
- if(!ishuman(owner.current))
- return 0
- var/mob/living/carbon/human/H = owner.current
- if(..())
- if(H.dna.real_name == target_real_name)
- if(H.get_id_name()== target_real_name || target_missing_id)
- return 1
- return 0
-
-
-/datum/objective/escape_obj/survive
- explanation_text = "Stay alive until the end."
- dangerrating = 3
-
-/datum/objective/survive/check_completion()
- if(!owner.current || owner.current.stat == DEAD || isbrain(owner.current))
- return 0 //Brains no longer win survive objectives. --NEO
- if(!is_special_character(owner.current)) //This fails borg'd traitors
- return 0
- return 1
-
-
-/datum/objective/escape_obj/martyr
- explanation_text = "Die a glorious death."
- dangerrating = 1
-
-/datum/objective/escape_obj/martyr/check_completion()
- if(!owner.current) //Gibbed, etc.
- return 1
- if(owner.current && owner.current.stat == DEAD) //You're dead! Yay!
- return 1
- return 0
-
-
-/datum/objective/nuclear
- explanation_text = "Destroy the station with a nuclear device."
- martyr_compatible = 1
-
-/datum/objective/nuclear/check_completion()
- if(ticker && ticker.mode && ticker.mode.station_was_nuked)
- return 1
- return 0
-
-var/global/list/possible_items = list()
-/datum/objective/default/steal
- var/datum/objective_item/targetinfo = null //Save the chosen item datum so we can access it later.
- var/obj/item/steal_target = null //Needed for custom objectives (they're just items, not datums).
- dangerrating = 5 //Overridden by the individual item's difficulty, but defaults to 5 for custom objectives.
- martyr_compatible = 0
-
-/datum/objective/default/steal/get_target()
- return steal_target
-
-/datum/objective/default/steal/New()
- ..()
- if(!possible_items.len)//Only need to fill the list when it's needed.
- init_subtypes(/datum/objective_item/steal,possible_items)
-
-/datum/objective/default/steal/find_possible_targets()
- var/list/approved_targets = list()
- if(check_rights(R_ADMIN))
- approved_targets += select_target()
- else
- for(var/datum/objective_item/possible_item in possible_items)
- if(is_unique_objective(possible_item.targetitem) && !(owner.current.mind.assigned_role in possible_item.excludefromjob))
- approved_targets += possible_item
- return approved_targets
-
-/datum/objective/default/steal/find_target()
- return set_target(safepick(find_possible_targets()))
-
-/datum/objective/default/steal/proc/set_target(datum/objective_item/item)
- if(item)
- targetinfo = item
-
- steal_target = targetinfo.targetitem
- explanation_text = "Steal [targetinfo.name]."
- dangerrating = targetinfo.difficulty
- give_special_equipment()
- return steal_target
- else
- explanation_text = "Free objective"
- return
-
-/datum/objective/default/steal/proc/select_target() //For admins setting objectives manually.
- var/list/possible_items_all = possible_items+"custom"
- var/new_target = input("Select target:", "Objective target", steal_target) as null|anything in possible_items_all
- if (!new_target)
- return
-
- if (new_target == "custom") //Can set custom items.
- var/obj/item/custom_target = input("Select type:","Type") as null|anything in typesof(/obj/item)
- if (!custom_target)
- return
- var/custom_name = initial(custom_target.name)
- custom_name = stripped_input("Enter target name:", "Objective target", custom_name)
- if (!custom_name)
- return
- steal_target = custom_target
- explanation_text = "Steal [custom_name]."
-
- return steal_target
-
-/datum/objective/default/steal/check_completion()
- if(!steal_target)
- return 1
- if(!isliving(owner.current))
- return 0
- var/list/all_items = owner.current.GetAllContents() //this should get things in cheesewheels, books, etc.
-
- for(var/obj/I in all_items) //Check for items
- if(istype(I, steal_target))
- if(!targetinfo) //If there's no targetinfo, then that means it was a custom objective. At this point, we know you have the item, so return 1.
- return 1
- else if(targetinfo.check_special_completion(I))//Returns 1 by default. Items with special checks will return 1 if the conditions are fulfilled.
- return 1
-
- if(targetinfo && I.type in targetinfo.altitems) //Ok, so you don't have the item. Do you have an alternative, at least?
- if(targetinfo.check_special_completion(I))//Yeah, we do! Don't return 0 if we don't though - then you could fail if you had 1 item that didn't pass and got checked first!
- return 1
- return 0
-
-/datum/objective/default/steal/give_special_equipment()
- if(owner && owner.current && targetinfo)
- if(istype(owner.current, /mob/living/carbon/human))
- var/mob/living/carbon/human/H = owner.current
- var/list/slots = list ("backpack" = slot_in_backpack)
- for(var/eq_path in targetinfo.special_equipment)
- var/obj/O = new eq_path
- H.equip_in_one_of_slots(O, slots)
- H.update_icons()
-
-var/global/list/possible_items_special = list()
-/datum/objective/default/steal/special //ninjas are so special they get their own subtype good for them
- randomgen = 0
-/datum/objective/default/steal/special/New()
- ..()
- if(!possible_items_special.len)
- init_subtypes(/datum/objective_item/special,possible_items)
- init_subtypes(/datum/objective_item/stack,possible_items)
-
-/datum/objective/default/steal/special/find_target()
- return set_target(pick(possible_items_special))
-
-
-
-/datum/objective/default/steal/exchange
- dangerrating = 10
- martyr_compatible = 0
- randomgen = 0
-
-/datum/objective/default/steal/exchange/proc/set_faction(faction,otheragent)
- target = otheragent
- if(faction == "red")
- targetinfo = new/datum/objective_item/unique/docs_blue
- else if(faction == "blue")
- targetinfo = new/datum/objective_item/unique/docs_red
- explanation_text = "Acquire [targetinfo.name] held by [target.current.real_name], the [target.assigned_role] and syndicate agent"
- steal_target = targetinfo.targetitem
-
-
-/datum/objective/default/steal/exchange/update_explanation_text()
- ..()
- if(target && target.current)
- explanation_text = "Acquire [targetinfo.name] held by [target.name], the [target.assigned_role] and syndicate agent"
- else
- explanation_text = "Free Objective"
-
-
-/datum/objective/default/steal/exchange/backstab
- dangerrating = 3
- randomgen = 0
-
-/datum/objective/default/steal/exchange/backstab/set_faction(faction)
- if(faction == "red")
- targetinfo = new/datum/objective_item/unique/docs_red
- else if(faction == "blue")
- targetinfo = new/datum/objective_item/unique/docs_blue
- explanation_text = "Do not give up or lose [targetinfo.name]."
- steal_target = targetinfo.targetitem
-
-
-/datum/objective/download
- dangerrating = 10
-
-/datum/objective/download/proc/gen_amount_goal()
- target_amount = rand(10,20)
- explanation_text = "Download [target_amount] research level\s."
- return target_amount
-
-/datum/objective/download/check_completion()//NINJACODE
- if(!ishuman(owner.current))
- return 0
-
- var/mob/living/carbon/human/H = owner.current
- if(!H || H.stat == DEAD)
- return 0
-
- if(!istype(H.wear_suit, /obj/item/clothing/suit/space/space_ninja))
- return 0
-
- var/obj/item/clothing/suit/space/space_ninja/SN = H.wear_suit
- if(!SN.s_initialized)
- return 0
-
- var/current_amount
- if(!SN.stored_research.len)
- return 0
- else
- for(var/datum/tech/current_data in SN.stored_research)
- if(current_data.level)
- current_amount += (current_data.level-1)
- if(current_amount= target_amount))
- return 1
- else
- return 0
-
-
-
-/datum/objective/default/destroy
- dangerrating = 10
- martyr_compatible = 1
- error_text = "No active AIs with minds."
-
-/datum/objective/default/destroy/find_target()
- var/list/possible_targets = active_ais(1)
- var/mob/living/silicon/ai/target_ai = pick(possible_targets)
- target = target_ai.mind
- update_explanation_text()
- return target
-
-/datum/objective/default/destroy/check_completion()
- if(target && target.current)
- if(target.current.stat == DEAD || target.current.z > 6 || !target.current.ckey) //Borgs/brains/AIs count as dead for traitor objectives. --NeoFite
- return 1
- return 0
- return 1
-
-/datum/objective/default/destroy/update_explanation_text()
- ..()
- if(target && target.current)
- explanation_text = "Destroy [target.name], the experimental AI."
- else
- explanation_text = "Free Objective"
-
-/datum/objective/default/destroy/extra_prep()
- if(!target)
- return 0
- return 1
-
-/datum/objective/summon_guns
- explanation_text = "Steal at least five guns!"
-
-/datum/objective/summon_guns/check_completion()
- if(!isliving(owner.current)) return 0
- var/guncount = 0
- var/list/all_items = owner.current.GetAllContents() //this should get things in cheesewheels, books, etc.
- for(var/obj/I in all_items) //Check for guns
- if(istype(I, /obj/item/weapon/gun))
- guncount++
- if(guncount >= 5)
- return 1
- else
- return 0
- return 0
-
-
-
-////////////////////////////////
-// Changeling team objectives //
-////////////////////////////////
-
-/datum/objective/changeling_team_objective //Abstract type
- martyr_compatible = 0 //Suicide is not teamwork!
- explanation_text = "Changeling Friendship!"
- var/min_lings = 3 //Minimum amount of lings for this team objective to be possible
- var/escape_objective_compatible = FALSE
-
-
-//Impersonate department
-//Picks as many people as it can from a department (Security,Engineer,Medical,Science)
-//and tasks the lings with killing and replacing them
-/datum/objective/changeling_team_objective/impersonate_department
- explanation_text = "Ensure X derpartment are killed, impersonated, and replaced by Changelings"
- var/command_staff_only = FALSE //if this is true, it picks command staff instead
- var/list/department_minds = list()
- var/list/department_real_names = list()
- var/department_string = ""
-
-
-/datum/objective/changeling_team_objective/impersonate_department/proc/get_department_staff()
- department_minds = list()
- department_real_names = list()
-
- var/list/departments = list("Head of Security","Research Director","Chief Engineer","Chief Medical Officer")
- var/department_head = pick(departments)
- switch(department_head)
- if("Head of Security")
- department_string = "security"
- if("Research Director")
- department_string = "science"
- if("Chief Engineer")
- department_string = "engineering"
- if("Chief Medical Officer")
- department_string = "medical"
-
- var/ling_count = ticker.mode.changelings
-
- for(var/datum/mind/M in ticker.minds)
- if(M in ticker.mode.changelings)
- continue
- if(department_head in get_department_heads(M.assigned_role))
- if(ling_count)
- ling_count--
- department_minds += M
- department_real_names += M.current.real_name
- else
- break
-
- if(!department_minds.len)
- log_game("[type] has failed to find department staff, and has removed itself. the round will continue normally")
- owner.objectives -= src
- qdel(src)
- return
-
-
-/datum/objective/changeling_team_objective/impersonate_department/proc/get_heads()
- department_minds = list()
- department_real_names = list()
-
- //Needed heads is between min_lings and the maximum possible amount of command roles
- //So at the time of writing, rand(3,6), it's also capped by the amount of lings there are
- //Because you can't fill 6 head roles with 3 lings
-
- var/needed_heads = rand(min_lings,command_positions.len)
- needed_heads = min(ticker.mode.changelings.len,needed_heads)
-
- var/list/heads = ticker.mode.get_living_heads()
- for(var/datum/mind/head in heads)
- if(head in ticker.mode.changelings) //Looking at you HoP.
- continue
- if(needed_heads)
- department_minds += head
- department_real_names += head.current.real_name
- needed_heads--
- else
- break
-
- if(!department_minds.len)
- log_game("[type] has failed to find department heads, and has removed itself. the round will continue normally")
- owner.objectives -= src
- qdel(src)
- return
-
-
-/datum/objective/changeling_team_objective/impersonate_department/New(var/text)
- ..()
- if(command_staff_only)
- get_heads()
- else
- get_department_staff()
-
- update_explanation_text()
-
-
-/datum/objective/changeling_team_objective/impersonate_department/update_explanation_text()
- ..()
- if(!department_real_names.len || !department_minds.len)
- explanation_text = "Free Objective"
- return //Something fucked up, give them a win
-
- if(command_staff_only)
- explanation_text = "Ensure changelings impersonate and escape as the following heads of staff: "
- else
- explanation_text = "Ensure changelings impersonate and escape as the following members of \the [department_string] department: "
-
- var/first = 1
- for(var/datum/mind/M in department_minds)
- var/string = "[M.name] the [M.assigned_role]"
- if(!first)
- string = ", [M.name] the [M.assigned_role]"
- else
- first--
- explanation_text += string
-
- if(command_staff_only)
- explanation_text += ", while the real heads are dead. This is a team objective."
- else
- explanation_text += ", while the real members are dead. This is a team objective."
-
-
-/datum/objective/changeling_team_objective/impersonate_department/check_completion()
- if(!department_real_names.len || !department_minds.len)
- return 1 //Something fucked up, give them a win
-
- var/list/check_names = department_real_names.Copy()
-
- //Check each department member's mind to see if any of them made it to centcomm alive, if they did it's an automatic fail
- for(var/datum/mind/M in department_minds)
- if(M in ticker.mode.changelings) //Lings aren't picked for this, but let's be safe
- continue
-
- if(M.current)
- var/turf/mloc = get_turf(M.current)
- if(mloc.onCentcom() && (M.current.stat != DEAD))
- return 0 //A Non-ling living target got to centcomm, fail
-
- //Check each staff member has been replaced, by cross referencing changeling minds, changeling current dna, the staff minds and their original DNA names
- var/success = 0
- changelings:
- for(var/datum/mind/changeling in ticker.mode.changelings)
- if(success >= department_minds.len) //We did it, stop here!
- return 1
- if(ishuman(changeling.current))
- var/mob/living/carbon/human/H = changeling.current
- var/turf/cloc = get_turf(changeling.current)
- if(cloc && cloc.onCentcom() && (changeling.current.stat != DEAD)) //Living changeling on centcomm....
- for(var/name in check_names) //Is he (disguised as) one of the staff?
- if(H.dna.real_name == name)
- check_names -= name //This staff member is accounted for, remove them, so the team don't succeed by escape as 7 of the same engineer
- success++ //A living changeling staff member made it to centcomm
- continue changelings
-
- if(success >= department_minds.len)
- return 1
- return 0
-
-
-
-
-//A subtype of impersonate_derpartment
-//This subtype always picks as many command staff as it can (HoS,HoP,Cap,CE,CMO,RD)
-//and tasks the lings with killing and replacing them
-/datum/objective/changeling_team_objective/impersonate_department/impersonate_heads
- explanation_text = "Have X or more heads of staff escape on the shuttle disguised as heads, while the real heads are dead"
- command_staff_only = TRUE
-
-/datum/objective/custom
- explanation_text = "Free Objective"
\ No newline at end of file
+/datum/objective
+ var/datum/mind/owner = null //Who owns the objective.
+ var/explanation_text = "Nothing" //What that person is supposed to do.
+ var/datum/mind/target = null //If they are focused on a particular person.
+ var/target_amount = 0 //If they are focused on a particular number. Steal objectives have their own counter.
+ var/completed = 0 //currently only used for custom objectives.
+ var/dangerrating = 0 //How hard the objective is, essentially. Used for dishing out objectives and checking overall victory.
+ var/martyr_compatible = 0 //If the objective is compatible with martyr objective, i.e. if you can still do it while dead.
+
+/datum/objective/New(var/text)
+ if(text)
+ explanation_text = text
+
+/datum/objective/proc/check_completion()
+ return completed
+
+/datum/objective/proc/is_unique_objective(possible_target)
+ for(var/datum/objective/O in owner.objectives)
+ if(istype(O, type) && O.get_target() == possible_target)
+ return 0
+ return 1
+
+/datum/objective/proc/get_target()
+ return target
+
+/datum/objective/proc/find_target()
+ var/list/possible_targets = list()
+ for(var/datum/mind/possible_target in ticker.minds)
+ if(possible_target != owner && ishuman(possible_target.current) && (possible_target.current.stat != 2) && is_unique_objective(possible_target))
+ possible_targets += possible_target
+ if(possible_targets.len > 0)
+ target = pick(possible_targets)
+ update_explanation_text()
+ return target
+
+/datum/objective/proc/find_target_by_role(role, role_type=0, invert=0)//Option sets either to check assigned role or special role. Default to assigned., invert inverts the check, eg: "Don't choose a Ling"
+ for(var/datum/mind/possible_target in ticker.minds)
+ if((possible_target != owner) && ishuman(possible_target.current))
+ var/is_role = 0
+ if(role_type)
+ if(possible_target.special_role == role)
+ is_role++
+ else
+ if(possible_target.assigned_role == role)
+ is_role++
+
+ if(invert)
+ if(is_role)
+ continue
+ target = possible_target
+ break
+ else if(is_role)
+ target = possible_target
+ break
+
+ update_explanation_text()
+
+/datum/objective/proc/update_explanation_text()
+ //Default does nothing, override where needed
+
+/datum/objective/proc/give_special_equipment()
+
+/datum/objective/assassinate
+ var/target_role_type=0
+ dangerrating = 10
+ martyr_compatible = 1
+
+/datum/objective/assassinate/find_target_by_role(role, role_type=0, invert=0)
+ if(!invert)
+ target_role_type = role_type
+ ..()
+ return target
+
+/datum/objective/assassinate/check_completion()
+ if(target && target.current)
+ if(target.current.stat == DEAD || issilicon(target.current) || isbrain(target.current) || target.current.z > 6 || !target.current.ckey) //Borgs/brains/AIs count as dead for traitor objectives. --NeoFite
+ return 1
+ return 0
+ return 1
+
+/datum/objective/assassinate/update_explanation_text()
+ ..()
+ if(target && target.current)
+ explanation_text = "Assassinate [target.name], the [!target_role_type ? target.assigned_role : target.special_role]."
+ else
+ explanation_text = "Free Objective"
+
+
+/datum/objective/mutiny
+ var/target_role_type=0
+ martyr_compatible = 1
+
+/datum/objective/mutiny/find_target_by_role(role, role_type=0,invert=0)
+ if(!invert)
+ target_role_type = role_type
+ ..()
+ return target
+
+/datum/objective/mutiny/check_completion()
+ if(target && target.current)
+ if(target.current.stat == DEAD || !ishuman(target.current) || !target.current.ckey || !target.current.client)
+ return 1
+ var/turf/T = get_turf(target.current)
+ if(T && (T.z > ZLEVEL_STATION) || target.current.client.is_afk()) //If they leave the station or go afk they count as dead for this
+ return 2
+ return 0
+ return 1
+
+/datum/objective/mutiny/update_explanation_text()
+ ..()
+ if(target && target.current)
+ explanation_text = "Assassinate or exile [target.name], the [!target_role_type ? target.assigned_role : target.special_role]."
+ else
+ explanation_text = "Free Objective"
+
+
+
+/datum/objective/maroon
+ var/target_role_type=0
+ dangerrating = 5
+ martyr_compatible = 1
+
+/datum/objective/maroon/find_target_by_role(role, role_type=0, invert=0)
+ if(!invert)
+ target_role_type = role_type
+ ..()
+ return target
+
+/datum/objective/maroon/check_completion()
+ if(target && target.current)
+ if(target.current.stat == DEAD || issilicon(target.current) || isbrain(target.current) || target.current.z > 6 || !target.current.ckey) //Borgs/brains/AIs count as dead for traitor objectives. --NeoFite
+ return 1
+ if(target.current.onCentcom() || target.current.onSyndieBase())
+ return 0
+ return 1
+
+/datum/objective/maroon/update_explanation_text()
+ if(target && target.current)
+ explanation_text = "Prevent [target.name], the [!target_role_type ? target.assigned_role : target.special_role], from escaping alive."
+ else
+ explanation_text = "Free Objective"
+
+
+
+/datum/objective/debrain//I want braaaainssss
+ var/target_role_type=0
+ dangerrating = 20
+
+/datum/objective/debrain/find_target_by_role(role, role_type=0, invert=0)
+ if(!invert)
+ target_role_type = role_type
+ ..()
+ return target
+
+/datum/objective/debrain/check_completion()
+ if(!target)//If it's a free objective.
+ return 1
+ if( !owner.current || owner.current.stat==DEAD )//If you're otherwise dead.
+ return 0
+ if( !target.current || !isbrain(target.current) )
+ return 0
+ var/atom/A = target.current
+ while(A.loc) //check to see if the brainmob is on our person
+ A = A.loc
+ if(A == owner.current)
+ return 1
+ return 0
+
+/datum/objective/debrain/update_explanation_text()
+ ..()
+ if(target && target.current)
+ explanation_text = "Steal the brain of [target.name], the [!target_role_type ? target.assigned_role : target.special_role]."
+ else
+ explanation_text = "Free Objective"
+
+
+
+/datum/objective/protect//The opposite of killing a dude.
+ var/target_role_type=0
+ dangerrating = 10
+ martyr_compatible = 1
+
+/datum/objective/protect/find_target_by_role(role, role_type=0, invert=0)
+ if(!invert)
+ target_role_type = role_type
+ ..()
+ return target
+
+/datum/objective/protect/check_completion()
+ if(!target) //If it's a free objective.
+ return 1
+ if(target.current)
+ if(target.current.stat == DEAD || issilicon(target.current) || isbrain(target.current))
+ return 0
+ return 1
+ return 0
+
+/datum/objective/protect/update_explanation_text()
+ ..()
+ if(target && target.current)
+ explanation_text = "Protect [target.name], the [!target_role_type ? target.assigned_role : target.special_role]."
+ else
+ explanation_text = "Free Objective"
+
+
+
+/datum/objective/hijack
+ explanation_text = "Hijack the shuttle to ensure no loyalist Nanotrasen crew escape alive and out of custody."
+ dangerrating = 25
+ martyr_compatible = 0 //Technically you won't get both anyway.
+
+/datum/objective/hijack/check_completion()
+ if(!owner.current || owner.current.stat)
+ return 0
+ if(SSshuttle.emergency.mode < SHUTTLE_ENDGAME)
+ return 0
+ if(issilicon(owner.current))
+ return 0
+
+ var/area/A = get_area(owner.current)
+ if(SSshuttle.emergency.areaInstance != A)
+ return 0
+
+ for(var/mob/living/player in player_list)
+ if(player.mind && player.mind != owner)
+ if(player.stat != DEAD)
+ if(istype(player, /mob/living/silicon)) //Borgs are technically dead anyways
+ continue
+ if(get_area(player) == A)
+ if(!player.mind.special_role && !istype(get_turf(player.mind.current), /turf/simulated/floor/plasteel/shuttle/red))
+ return 0
+ return 1
+
+/datum/objective/hijackclone
+ explanation_text = "Hijack the emergency shuttle by ensuring only you (or your copies) escape."
+ dangerrating = 25
+ martyr_compatible = 0
+
+/datum/objective/hijackclone/check_completion()
+ if(!owner.current)
+ return 0
+ if(SSshuttle.emergency.mode < SHUTTLE_ENDGAME)
+ return 0
+
+ var/area/A = SSshuttle.emergency.areaInstance
+
+ for(var/mob/living/player in player_list) //Make sure nobody else is onboard
+ if(player.mind && player.mind != owner)
+ if(player.stat != DEAD)
+ if(istype(player, /mob/living/silicon))
+ continue
+ if(get_area(player) == A)
+ if(player.real_name != owner.current.real_name && !istype(get_turf(player.mind.current), /turf/simulated/floor/plasteel/shuttle/red))
+ return 0
+
+ for(var/mob/living/player in player_list) //Make sure at least one of you is onboard
+ if(player.mind && player.mind != owner)
+ if(player.stat != DEAD)
+ if(istype(player, /mob/living/silicon))
+ continue
+ if(get_area(player) == A)
+ if(player.real_name == owner.current.real_name && !istype(get_turf(player.mind.current), /turf/simulated/floor/plasteel/shuttle/red))
+ return 1
+ return 0
+
+/datum/objective/block
+ explanation_text = "Do not allow any organic lifeforms to escape on the shuttle alive."
+ dangerrating = 25
+ martyr_compatible = 1
+
+/datum/objective/block/check_completion()
+ if(!istype(owner.current, /mob/living/silicon))
+ return 0
+ if(SSshuttle.emergency.mode < SHUTTLE_ENDGAME)
+ return 1
+
+ var/area/A = SSshuttle.emergency.areaInstance
+
+ for(var/mob/living/player in player_list)
+ if(istype(player, /mob/living/silicon))
+ continue
+ if(player.mind)
+ if(player.stat != DEAD)
+ if(get_area(player) == A)
+ return 0
+
+ return 1
+
+
+/datum/objective/escape
+ explanation_text = "Escape on the shuttle or an escape pod alive and without being in custody."
+ dangerrating = 5
+
+/datum/objective/escape/check_completion()
+ if(issilicon(owner.current))
+ return 0
+ if(isbrain(owner.current))
+ return 0
+ if(!owner.current || owner.current.stat == DEAD)
+ return 0
+ if(ticker.force_ending) //This one isn't their fault, so lets just assume good faith
+ return 1
+ if(ticker.mode.station_was_nuked) //If they escaped the blast somehow, let them win
+ return 1
+ if(SSshuttle.emergency.mode < SHUTTLE_ENDGAME)
+ return 0
+ var/turf/location = get_turf(owner.current)
+ if(!location)
+ return 0
+
+ if(istype(location, /turf/simulated/floor/plasteel/shuttle/red)) // Fails traitors if they are in the shuttle brig -- Polymorph
+ return 0
+
+ if(location.onCentcom() || location.onSyndieBase())
+ return 1
+
+ return 0
+
+/datum/objective/escape/escape_with_identity
+ dangerrating = 10
+ var/target_real_name // Has to be stored because the target's real_name can change over the course of the round
+ var/target_missing_id
+
+/datum/objective/escape/escape_with_identity/find_target()
+ target = ..()
+ update_explanation_text()
+
+/datum/objective/escape/escape_with_identity/update_explanation_text()
+ if(target && target.current)
+ target_real_name = target.current.real_name
+ explanation_text = "Escape on the shuttle or an escape pod with the identity of [target_real_name], the [target.assigned_role]"
+ var/mob/living/carbon/human/H
+ if(ishuman(target.current))
+ H = target.current
+ if(H && H.get_id_name() != target_real_name)
+ target_missing_id = 1
+ else
+ explanation_text += " while wearing their identification card"
+ explanation_text += "." //Proper punctuation is important!
+
+ else
+ explanation_text = "Free Objective."
+
+/datum/objective/escape/escape_with_identity/check_completion()
+ if(!target_real_name)
+ return 1
+ if(!ishuman(owner.current))
+ return 0
+ var/mob/living/carbon/human/H = owner.current
+ if(..())
+ if(H.dna.real_name == target_real_name)
+ if(H.get_id_name()== target_real_name || target_missing_id)
+ return 1
+ return 0
+
+
+/datum/objective/survive
+ explanation_text = "Stay alive until the end."
+ dangerrating = 3
+
+/datum/objective/survive/check_completion()
+ if(!owner.current || owner.current.stat == DEAD || isbrain(owner.current))
+ return 0 //Brains no longer win survive objectives. --NEO
+ if(!is_special_character(owner.current)) //This fails borg'd traitors
+ return 0
+ return 1
+
+
+/datum/objective/martyr
+ explanation_text = "Die a glorious death."
+ dangerrating = 1
+
+/datum/objective/martyr/check_completion()
+ if(!owner.current) //Gibbed, etc.
+ return 1
+ if(owner.current && owner.current.stat == DEAD) //You're dead! Yay!
+ return 1
+ return 0
+
+
+/datum/objective/nuclear
+ explanation_text = "Destroy the station with a nuclear device."
+ martyr_compatible = 1
+
+/datum/objective/nuclear/check_completion()
+ if(ticker && ticker.mode && ticker.mode.station_was_nuked)
+ return 1
+ return 0
+
+
+var/global/list/possible_items = list()
+/datum/objective/steal
+ var/datum/objective_item/targetinfo = null //Save the chosen item datum so we can access it later.
+ var/obj/item/steal_target = null //Needed for custom objectives (they're just items, not datums).
+ dangerrating = 5 //Overridden by the individual item's difficulty, but defaults to 5 for custom objectives.
+ martyr_compatible = 0
+
+/datum/objective/steal/get_target()
+ return steal_target
+
+/datum/objective/steal/New()
+ ..()
+ if(!possible_items.len)//Only need to fill the list when it's needed.
+ init_subtypes(/datum/objective_item/steal,possible_items)
+
+/datum/objective/steal/find_target()
+ var/approved_targets = list()
+ for(var/datum/objective_item/possible_item in possible_items)
+ if(is_unique_objective(possible_item.targetitem) && !(owner.current.mind.assigned_role in possible_item.excludefromjob))
+ approved_targets += possible_item
+ return set_target(safepick(approved_targets))
+
+/datum/objective/steal/proc/set_target(datum/objective_item/item)
+ if(item)
+ targetinfo = item
+
+ steal_target = targetinfo.targetitem
+ explanation_text = "Steal [targetinfo.name]."
+ dangerrating = targetinfo.difficulty
+ give_special_equipment()
+ return steal_target
+ else
+ explanation_text = "Free objective"
+ return
+
+/datum/objective/steal/proc/select_target() //For admins setting objectives manually.
+ var/list/possible_items_all = possible_items+"custom"
+ var/new_target = input("Select target:", "Objective target", steal_target) as null|anything in possible_items_all
+ if (!new_target) return
+
+ if (new_target == "custom") //Can set custom items.
+ var/obj/item/custom_target = input("Select type:","Type") as null|anything in typesof(/obj/item)
+ if (!custom_target) return
+ var/tmp_obj = new custom_target
+ var/custom_name = tmp_obj:name
+ qdel(tmp_obj)
+ custom_name = stripped_input("Enter target name:", "Objective target", custom_name)
+ if (!custom_name) return
+ steal_target = custom_target
+ explanation_text = "Steal [custom_name]."
+
+ else
+ set_target(new_target)
+ return steal_target
+
+/datum/objective/steal/check_completion()
+ if(!steal_target) return 1
+ if(!isliving(owner.current)) return 0
+ var/list/all_items = owner.current.GetAllContents() //this should get things in cheesewheels, books, etc.
+
+ for(var/obj/I in all_items) //Check for items
+ if(istype(I, steal_target))
+ if(!targetinfo) //If there's no targetinfo, then that means it was a custom objective. At this point, we know you have the item, so return 1.
+ return 1
+ else if(targetinfo.check_special_completion(I))//Returns 1 by default. Items with special checks will return 1 if the conditions are fulfilled.
+ return 1
+
+ if(targetinfo && I.type in targetinfo.altitems) //Ok, so you don't have the item. Do you have an alternative, at least?
+ if(targetinfo.check_special_completion(I))//Yeah, we do! Don't return 0 if we don't though - then you could fail if you had 1 item that didn't pass and got checked first!
+ return 1
+ return 0
+
+/datum/objective/steal/give_special_equipment()
+ if(owner && owner.current && targetinfo)
+ if(istype(owner.current, /mob/living/carbon/human))
+ var/mob/living/carbon/human/H = owner.current
+ var/list/slots = list ("backpack" = slot_in_backpack)
+ for(var/eq_path in targetinfo.special_equipment)
+ var/obj/O = new eq_path
+ H.equip_in_one_of_slots(O, slots)
+ H.update_icons()
+
+var/global/list/possible_items_special = list()
+/datum/objective/steal/special //ninjas are so special they get their own subtype good for them
+
+/datum/objective/steal/special/New()
+ ..()
+ if(!possible_items_special.len)
+ init_subtypes(/datum/objective_item/special,possible_items)
+ init_subtypes(/datum/objective_item/stack,possible_items)
+
+/datum/objective/steal/special/find_target()
+ return set_target(pick(possible_items_special))
+
+
+
+/datum/objective/steal/exchange
+ dangerrating = 10
+ martyr_compatible = 0
+
+/datum/objective/steal/exchange/proc/set_faction(faction,otheragent)
+ target = otheragent
+ if(faction == "red")
+ targetinfo = new/datum/objective_item/unique/docs_blue
+ else if(faction == "blue")
+ targetinfo = new/datum/objective_item/unique/docs_red
+ explanation_text = "Acquire [targetinfo.name] held by [target.current.real_name], the [target.assigned_role] and syndicate agent"
+ steal_target = targetinfo.targetitem
+
+
+/datum/objective/steal/exchange/update_explanation_text()
+ ..()
+ if(target && target.current)
+ explanation_text = "Acquire [targetinfo.name] held by [target.name], the [target.assigned_role] and syndicate agent"
+ else
+ explanation_text = "Free Objective"
+
+
+/datum/objective/steal/exchange/backstab
+ dangerrating = 3
+
+/datum/objective/steal/exchange/backstab/set_faction(faction)
+ if(faction == "red")
+ targetinfo = new/datum/objective_item/unique/docs_red
+ else if(faction == "blue")
+ targetinfo = new/datum/objective_item/unique/docs_blue
+ explanation_text = "Do not give up or lose [targetinfo.name]."
+ steal_target = targetinfo.targetitem
+
+
+/datum/objective/download
+ dangerrating = 10
+
+/datum/objective/download/proc/gen_amount_goal()
+ target_amount = rand(10,20)
+ explanation_text = "Download [target_amount] research level\s."
+ return target_amount
+
+/datum/objective/download/check_completion()//NINJACODE
+ if(!ishuman(owner.current))
+ return 0
+
+ var/mob/living/carbon/human/H = owner.current
+ if(!H || H.stat == DEAD)
+ return 0
+
+ if(!istype(H.wear_suit, /obj/item/clothing/suit/space/space_ninja))
+ return 0
+
+ var/obj/item/clothing/suit/space/space_ninja/SN = H.wear_suit
+ if(!SN.s_initialized)
+ return 0
+
+ var/current_amount
+ if(!SN.stored_research.len)
+ return 0
+ else
+ for(var/datum/tech/current_data in SN.stored_research)
+ if(current_data.level)
+ current_amount += (current_data.level-1)
+ if(current_amount= target_amount))
+ return 1
+ else
+ return 0
+
+
+
+/datum/objective/destroy
+ dangerrating = 10
+ martyr_compatible = 1
+
+/datum/objective/destroy/find_target()
+ var/list/possible_targets = active_ais(1)
+ var/mob/living/silicon/ai/target_ai = pick(possible_targets)
+ target = target_ai.mind
+ update_explanation_text()
+ return target
+
+/datum/objective/destroy/check_completion()
+ if(target && target.current)
+ if(target.current.stat == DEAD || target.current.z > 6 || !target.current.ckey) //Borgs/brains/AIs count as dead for traitor objectives. --NeoFite
+ return 1
+ return 0
+ return 1
+
+/datum/objective/destroy/update_explanation_text()
+ ..()
+ if(target && target.current)
+ explanation_text = "Destroy [target.name], the experimental AI."
+ else
+ explanation_text = "Free Objective"
+
+/datum/objective/summon_guns
+ explanation_text = "Steal at least five guns!"
+
+/datum/objective/summon_guns/check_completion()
+ if(!isliving(owner.current)) return 0
+ var/guncount = 0
+ var/list/all_items = owner.current.GetAllContents() //this should get things in cheesewheels, books, etc.
+ for(var/obj/I in all_items) //Check for guns
+ if(istype(I, /obj/item/weapon/gun))
+ guncount++
+ if(guncount >= 5)
+ return 1
+ else
+ return 0
+ return 0
+
+
+
+////////////////////////////////
+// Changeling team objectives //
+////////////////////////////////
+
+/datum/objective/changeling_team_objective //Abstract type
+ martyr_compatible = 0 //Suicide is not teamwork!
+ explanation_text = "Changeling Friendship!"
+ var/min_lings = 3 //Minimum amount of lings for this team objective to be possible
+ var/escape_objective_compatible = FALSE
+
+
+//Impersonate department
+//Picks as many people as it can from a department (Security,Engineer,Medical,Science)
+//and tasks the lings with killing and replacing them
+/datum/objective/changeling_team_objective/impersonate_department
+ explanation_text = "Ensure X derpartment are killed, impersonated, and replaced by Changelings"
+ var/command_staff_only = FALSE //if this is true, it picks command staff instead
+ var/list/department_minds = list()
+ var/list/department_real_names = list()
+ var/department_string = ""
+
+
+/datum/objective/changeling_team_objective/impersonate_department/proc/get_department_staff()
+ department_minds = list()
+ department_real_names = list()
+
+ var/list/departments = list("Head of Security","Research Director","Chief Engineer","Chief Medical Officer")
+ var/department_head = pick(departments)
+ switch(department_head)
+ if("Head of Security")
+ department_string = "security"
+ if("Research Director")
+ department_string = "science"
+ if("Chief Engineer")
+ department_string = "engineering"
+ if("Chief Medical Officer")
+ department_string = "medical"
+
+ var/ling_count = ticker.mode.changelings
+
+ for(var/datum/mind/M in ticker.minds)
+ if(M in ticker.mode.changelings)
+ continue
+ if(department_head in get_department_heads(M.assigned_role))
+ if(ling_count)
+ ling_count--
+ department_minds += M
+ department_real_names += M.current.real_name
+ else
+ break
+
+ if(!department_minds.len)
+ log_game("[type] has failed to find department staff, and has removed itself. the round will continue normally")
+ owner.objectives -= src
+ qdel(src)
+ return
+
+
+/datum/objective/changeling_team_objective/impersonate_department/proc/get_heads()
+ department_minds = list()
+ department_real_names = list()
+
+ //Needed heads is between min_lings and the maximum possible amount of command roles
+ //So at the time of writing, rand(3,6), it's also capped by the amount of lings there are
+ //Because you can't fill 6 head roles with 3 lings
+
+ var/needed_heads = rand(min_lings,command_positions.len)
+ needed_heads = min(ticker.mode.changelings.len,needed_heads)
+
+ var/list/heads = ticker.mode.get_living_heads()
+ for(var/datum/mind/head in heads)
+ if(head in ticker.mode.changelings) //Looking at you HoP.
+ continue
+ if(needed_heads)
+ department_minds += head
+ department_real_names += head.current.real_name
+ needed_heads--
+ else
+ break
+
+ if(!department_minds.len)
+ log_game("[type] has failed to find department heads, and has removed itself. the round will continue normally")
+ owner.objectives -= src
+ qdel(src)
+ return
+
+
+/datum/objective/changeling_team_objective/impersonate_department/New(var/text)
+ ..()
+ if(command_staff_only)
+ get_heads()
+ else
+ get_department_staff()
+
+ update_explanation_text()
+
+
+/datum/objective/changeling_team_objective/impersonate_department/update_explanation_text()
+ ..()
+ if(!department_real_names.len || !department_minds.len)
+ explanation_text = "Free Objective"
+ return //Something fucked up, give them a win
+
+ if(command_staff_only)
+ explanation_text = "Ensure changelings impersonate and escape as the following heads of staff: "
+ else
+ explanation_text = "Ensure changelings impersonate and escape as the following members of \the [department_string] department: "
+
+ var/first = 1
+ for(var/datum/mind/M in department_minds)
+ var/string = "[M.name] the [M.assigned_role]"
+ if(!first)
+ string = ", [M.name] the [M.assigned_role]"
+ else
+ first--
+ explanation_text += string
+
+ if(command_staff_only)
+ explanation_text += ", while the real heads are dead. This is a team objective."
+ else
+ explanation_text += ", while the real members are dead. This is a team objective."
+
+
+/datum/objective/changeling_team_objective/impersonate_department/check_completion()
+ if(!department_real_names.len || !department_minds.len)
+ return 1 //Something fucked up, give them a win
+
+ var/list/check_names = department_real_names.Copy()
+
+ //Check each department member's mind to see if any of them made it to centcomm alive, if they did it's an automatic fail
+ for(var/datum/mind/M in department_minds)
+ if(M in ticker.mode.changelings) //Lings aren't picked for this, but let's be safe
+ continue
+
+ if(M.current)
+ var/turf/mloc = get_turf(M.current)
+ if(mloc.onCentcom() && (M.current.stat != DEAD))
+ return 0 //A Non-ling living target got to centcomm, fail
+
+ //Check each staff member has been replaced, by cross referencing changeling minds, changeling current dna, the staff minds and their original DNA names
+ var/success = 0
+ changelings:
+ for(var/datum/mind/changeling in ticker.mode.changelings)
+ if(success >= department_minds.len) //We did it, stop here!
+ return 1
+ if(ishuman(changeling.current))
+ var/mob/living/carbon/human/H = changeling.current
+ var/turf/cloc = get_turf(changeling.current)
+ if(cloc && cloc.onCentcom() && (changeling.current.stat != DEAD)) //Living changeling on centcomm....
+ for(var/name in check_names) //Is he (disguised as) one of the staff?
+ if(H.dna.real_name == name)
+ check_names -= name //This staff member is accounted for, remove them, so the team don't succeed by escape as 7 of the same engineer
+ success++ //A living changeling staff member made it to centcomm
+ continue changelings
+
+ if(success >= department_minds.len)
+ return 1
+ return 0
+
+
+
+
+//A subtype of impersonate_derpartment
+//This subtype always picks as many command staff as it can (HoS,HoP,Cap,CE,CMO,RD)
+//and tasks the lings with killing and replacing them
+/datum/objective/changeling_team_objective/impersonate_department/impersonate_heads
+ explanation_text = "Have X or more heads of staff escape on the shuttle disguised as heads, while the real heads are dead"
+ command_staff_only = TRUE
+
+
+
diff --git a/code/game/gamemodes/objective_items.dm b/code/game/gamemodes/objective_items.dm
index 9f1c99cea84..c3121978a60 100644
--- a/code/game/gamemodes/objective_items.dm
+++ b/code/game/gamemodes/objective_items.dm
@@ -94,7 +94,7 @@
/datum/objective_item/steal/plasma/check_special_completion(obj/item/weapon/tank/T)
var/target_amount = text2num(name)
var/found_amount = 0
- found_amount += T.air_contents.toxins
+ found_amount += T.air_contents.gases["plasma"][MOLES]
return found_amount>=target_amount
diff --git a/code/game/gamemodes/sandbox/h_sandbox.dm b/code/game/gamemodes/sandbox/h_sandbox.dm
index 73ab2b3423c..4cd032c07fd 100644
--- a/code/game/gamemodes/sandbox/h_sandbox.dm
+++ b/code/game/gamemodes/sandbox/h_sandbox.dm
@@ -84,7 +84,7 @@ var/hsboxspawn = 1
hsbinfo += "- Spawn Plasma Canister
"
hsbinfo += "- Spawn CO2 Canister
"
hsbinfo += "- Spawn Nitrogen Canister
"
- hsbinfo += "- Spawn N2O Canister
"
+ hsbinfo += "- Spawn N2O Canister
"
else
hsbinfo += "Some item spawning may be disabled by the administrators.
"
hsbinfo += "Only administrators may spawn dangerous canisters.
"
diff --git a/code/game/gamemodes/shadowling/shadowling_abilities.dm b/code/game/gamemodes/shadowling/shadowling_abilities.dm
index 9d9457f7d7b..10ccb88d386 100644
--- a/code/game/gamemodes/shadowling/shadowling_abilities.dm
+++ b/code/game/gamemodes/shadowling/shadowling_abilities.dm
@@ -270,9 +270,13 @@
var/text = stripped_input(user, "What do you want to say your thralls and fellow shadowlings?.", "Hive Chat", "")
if(!text)
return
+ var/my_message = "\[Shadowling\] [user.real_name]: [text]"
for(var/mob/M in mob_list)
- if(is_shadow_or_thrall(M) || (M in dead_mob_list))
- M << "\[Shadowling\] [user.real_name]: [text]"
+ if(is_shadow_or_thrall(M))
+ M << my_message
+ if(M in dead_mob_list)
+ M << "(F) [my_message]"
+
/obj/effect/proc_holder/spell/self/shadowling_regenarmor //Resets a shadowling's species to normal, removes genetic defects, and re-equips their armor
@@ -746,9 +750,12 @@ datum/reagent/shadowling_blindness_smoke //Reagent used for above spell
var/text = stripped_input(user, "What do you want to say your masters and fellow thralls?.", "Lesser Commune", "")
if(!text)
return
+ text = "\[Thrall\] [user.real_name]: [text]"
for(var/mob/M in mob_list)
- if(is_shadow_or_thrall(M) || (M in dead_mob_list))
- M << "\[Thrall\] [user.real_name]: [text]"
+ if(is_shadow_or_thrall(M))
+ M << text
+ if(isobserver(M))
+ M << "(F) [text]"
log_say("[user.real_name]/[user.key] : [text]")
@@ -887,8 +894,10 @@ datum/reagent/shadowling_blindness_smoke //Reagent used for above spell
var/text = stripped_input(user, "What do you want to say to fellow thralls and shadowlings?.", "Hive Chat", "")
if(!text)
return
- text = "[text]"
+ text = "\[Ascendant\] [user.real_name]: [text]"
for(var/mob/M in mob_list)
- if(is_shadow_or_thrall(M) || (M in dead_mob_list))
- M << "\[Ascendant\] [user.real_name]: [text]" //Bigger text for ascendants.
+ if(is_shadow_or_thrall(M))
+ M << text
+ if(isobserver(M))
+ M << "(F) [text]"
log_say("[user.real_name]/[user.key] : [text]")
diff --git a/code/game/gamemodes/traitor/double_agents.dm b/code/game/gamemodes/traitor/double_agents.dm
index 76bcc67c856..af284603f6a 100644
--- a/code/game/gamemodes/traitor/double_agents.dm
+++ b/code/game/gamemodes/traitor/double_agents.dm
@@ -32,19 +32,27 @@
// Assassinate
var/datum/mind/target_mind = target_list[traitor]
if(issilicon(target_mind.current))
- var/datum/objective/default/destroy/destroy_objective = add_objective(traitor, /datum/objective/default/destroy)
+ var/datum/objective/destroy/destroy_objective = new
+ destroy_objective.owner = traitor
destroy_objective.target = target_mind
destroy_objective.update_explanation_text()
+ traitor.objectives += destroy_objective
else
- var/datum/objective/default/assassinate/kill_objective = add_objective(traitor, /datum/objective/default/assassinate)
+ var/datum/objective/assassinate/kill_objective = new
+ kill_objective.owner = traitor
kill_objective.target = target_mind
kill_objective.update_explanation_text()
+ traitor.objectives += kill_objective
// Escape
if(issilicon(traitor.current))
- add_objective(traitor, /datum/objective/escape_obj/survive)
+ var/datum/objective/survive/survive_objective = new
+ survive_objective.owner = traitor
+ traitor.objectives += survive_objective
else
- add_objective(traitor, /datum/objective/escape_obj/escape)
+ var/datum/objective/escape/escape_objective = new
+ escape_objective.owner = traitor
+ traitor.objectives += escape_objective
else
..() // Give them standard objectives.
diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm
index 1efb4626f09..1fb01bba993 100644
--- a/code/game/gamemodes/traitor/traitor.dm
+++ b/code/game/gamemodes/traitor/traitor.dm
@@ -89,14 +89,25 @@
var/objective_count = 0
if(prob(10))
- add_objective(traitor, /datum/objective/escape_obj/block)
+ var/datum/objective/block/block_objective = new
+ block_objective.owner = traitor
+ traitor.objectives += block_objective
+ objective_count++
for(var/i = objective_count, i < config.traitor_objectives_amount, i++)
- add_objective(traitor, /datum/objective/default/assassinate)
+ var/datum/objective/assassinate/kill_objective = new
+ kill_objective.owner = traitor
+ kill_objective.find_target()
+ traitor.objectives += kill_objective
+
+ var/datum/objective/survive/survive_objective = new
+ survive_objective.owner = traitor
+ traitor.objectives += survive_objective
- add_objective(traitor, /datum/objective/escape_obj/survive)
else
- var/objective_count = 0
+ var/is_hijacker = prob(10)
+ var/martyr_chance = prob(20)
+ var/objective_count = is_hijacker //Hijacking counts towards number of objectives
if(!exchange_blue && traitors.len >= 8) //Set up an exchange if there are enough traitors
if(!exchange_red)
exchange_red = traitor
@@ -105,7 +116,56 @@
assign_exchange_role(exchange_red)
assign_exchange_role(exchange_blue)
objective_count += 1 //Exchange counts towards number of objectives
- generate_objectives(traitor, config.traitor_objectives_amount - objective_count, TRUE)
+ var/list/active_ais = active_ais()
+ for(var/i = objective_count, i < config.traitor_objectives_amount, i++)
+ if(prob(50))
+ if(active_ais.len && prob(100/joined_player_list.len))
+ var/datum/objective/destroy/destroy_objective = new
+ destroy_objective.owner = traitor
+ destroy_objective.find_target()
+ traitor.objectives += destroy_objective
+ else if(prob(30))
+ var/datum/objective/maroon/maroon_objective = new
+ maroon_objective.owner = traitor
+ maroon_objective.find_target()
+ traitor.objectives += maroon_objective
+ else
+ var/datum/objective/assassinate/kill_objective = new
+ kill_objective.owner = traitor
+ kill_objective.find_target()
+ traitor.objectives += kill_objective
+ else
+ var/datum/objective/steal/steal_objective = new
+ steal_objective.owner = traitor
+ steal_objective.find_target()
+ traitor.objectives += steal_objective
+
+ if(is_hijacker && objective_count <= config.traitor_objectives_amount) //Don't assign hijack if it would exceed the number of objectives set in config.traitor_objectives_amount
+ if (!(locate(/datum/objective/hijack) in traitor.objectives))
+ var/datum/objective/hijack/hijack_objective = new
+ hijack_objective.owner = traitor
+ traitor.objectives += hijack_objective
+ return
+
+
+ var/martyr_compatibility = 1 //You can't succeed in stealing if you're dead.
+ for(var/datum/objective/O in traitor.objectives)
+ if(!O.martyr_compatible)
+ martyr_compatibility = 0
+ break
+
+ if(martyr_compatibility && martyr_chance)
+ var/datum/objective/martyr/martyr_objective = new
+ martyr_objective.owner = traitor
+ traitor.objectives += martyr_objective
+ return
+
+ else
+ if(!(locate(/datum/objective/escape) in traitor.objectives))
+ var/datum/objective/escape/escape_objective = new
+ escape_objective.owner = traitor
+ traitor.objectives += escape_objective
+ return
@@ -150,6 +210,8 @@
give_codewords(killer)
killer.set_syndie_radio()
killer << "Your radio has been upgraded! Use :t to speak on an encrypted channel with Syndicate Agents!"
+ killer << "In the top right corner of the screen you will find the Malfunctions tab, where you can purchase various abilities, from upgraded surveillance to station ending doomsday devices."
+ killer << "You are also capable of hacking APCs, which grants you more points to spend on your Malfunction powers. The drawback is that a hacked APC will give you away if spotted by the crew. Hacking an APC takes 60 seconds."
killer.verbs += /mob/living/silicon/ai/proc/choose_modules
killer.malf_picker = new /datum/module_picker
@@ -273,13 +335,13 @@
faction = "blue"
//Assign objectives
- var/datum/objective/default/steal/exchange/exchange_objective = new
+ var/datum/objective/steal/exchange/exchange_objective = new
exchange_objective.set_faction(faction,((faction == "red") ? exchange_blue : exchange_red))
exchange_objective.owner = owner
owner.objectives += exchange_objective
if(prob(20))
- var/datum/objective/default/steal/exchange/backstab/backstab_objective = new
+ var/datum/objective/steal/exchange/backstab/backstab_objective = new
backstab_objective.set_faction(faction)
backstab_objective.owner = owner
owner.objectives += backstab_objective
diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm
index 9ba6d74ce4a..e8a862d7aa4 100644
--- a/code/game/gamemodes/wizard/artefact.dm
+++ b/code/game/gamemodes/wizard/artefact.dm
@@ -254,7 +254,7 @@ var/global/list/multiverse = list()
evil = TRUE
else
user << "With your new found power you could easily defend the station!"
- var/datum/objective/escape_obj/survive/new_objective = new /datum/objective/escape_obj/survive
+ var/datum/objective/survive/new_objective = new /datum/objective/survive
new_objective.owner = usr.mind
new_objective.explanation_text = "Survive, and help defend the innocent from the mobs of multiverse clones."
usr << "Objective #[1]: [new_objective.explanation_text]"
@@ -302,15 +302,15 @@ var/global/list/multiverse = list()
equip_copy(M)
if(evil)
- var/datum/objective/hijackclone/new_objective = add_objective(M.mind, /datum/objective/hijackclone)
- new_objective.owner = M.mind
- M.mind.objectives += new_objective
- new_objective.explanation_text = "Ensure only [usr.real_name] and their copies are on the shuttle!"
- M << "Objective #[1]: [new_objective.explanation_text]"
+ var/datum/objective/hijackclone/hijack_objective = new /datum/objective/hijackclone
+ hijack_objective.owner = M.mind
+ M.mind.objectives += hijack_objective
+ hijack_objective.explanation_text = "Ensure only [usr.real_name] and their copies are on the shuttle!"
+ M << "Objective #[1]: [hijack_objective.explanation_text]"
M.mind.special_role = "multiverse traveller"
log_game("[M.key] was made a multiverse traveller with the objective to help [usr.real_name] hijack.")
else
- var/datum/objective/default/protect/new_objective = add_objective(M.mind, /datum/objective/default/protect)
+ var/datum/objective/protect/new_objective = new /datum/objective/protect
new_objective.owner = M.mind
new_objective.target = usr.mind
new_objective.explanation_text = "Protect [usr.real_name], your copy, and help them defend the innocent from the mobs of multiverse clones."
diff --git a/code/game/gamemodes/wizard/soulstone.dm b/code/game/gamemodes/wizard/soulstone.dm
index 84b9e6da663..8ad4bf1e03f 100644
--- a/code/game/gamemodes/wizard/soulstone.dm
+++ b/code/game/gamemodes/wizard/soulstone.dm
@@ -177,7 +177,11 @@
makeNewConstruct(/mob/living/simple_animal/hostile/construct/wraith, A, user, 0, T.loc)
if("Artificer")
- makeNewConstruct(/mob/living/simple_animal/hostile/construct/builder, A, user, 0, T.loc)
+ if(iscultist(user) || iswizard(user))
+ makeNewConstruct(/mob/living/simple_animal/hostile/construct/builder, A, user, 0, T.loc)
+
+ else
+ makeNewConstruct(/mob/living/simple_animal/hostile/construct/builder/noncult, A, user, 0, T.loc)
qdel(T)
qdel(src)
@@ -238,24 +242,27 @@
/obj/item/device/soulstone/proc/getCultGhost(obj/item/device/soulstone/C, mob/living/carbon/human/T, mob/U)
+ var/mob/dead/observer/chosen_ghost
- var/list/consenting_candidates = pollCandidates("Would you like to play as a Shade?", be_special_flag = ROLE_CULTIST, poll_time = 100)
+ for(var/mob/dead/observer/ghost in player_list) //We put them back in their body
+ if(ghost.mind && ghost.mind.current == T && ghost.client)
+ chosen_ghost = ghost
+ break
- if(!T) //target mob got soulstoned or gibbed during sleep(50)
+ if(!chosen_ghost) //Failing that, we grab a ghost
+ var/list/consenting_candidates = pollCandidates("Would you like to play as a Shade?", be_special_flag = ROLE_CULTIST, poll_time = 100)
+ if(consenting_candidates.len)
+ chosen_ghost = pick(consenting_candidates)
+ if(!T)
return 0
-
- if(consenting_candidates.len)
- var/client/ghost = null
- ghost = pick(consenting_candidates)
- if(C.contents.len) //If they used the soulstone on someone else in the meantime
- return 0
- if(!T.client) //If the original returns in the alloted time
- T.client = ghost
- for(var/obj/item/W in T)
- T.unEquip(W)
- init_shade(C, T, U)
- qdel(T)
- return 1
- else
+ if(!chosen_ghost)
U << "The ghost has fled beyond your grasp."
return 0
+ if(C.contents.len) //If they used the soulstone on someone else in the meantime
+ return 0
+ T.ckey = chosen_ghost.ckey
+ for(var/obj/item/W in T)
+ T.unEquip(W)
+ init_shade(C, T, U)
+ qdel(T)
+ return 1
diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm
index 9d09dbdd948..752694f86ab 100644
--- a/code/game/gamemodes/wizard/spellbook.dm
+++ b/code/game/gamemodes/wizard/spellbook.dm
@@ -211,6 +211,7 @@
name = "Lesser Summon Guns"
spell_type = /obj/effect/proc_holder/spell/targeted/infinite_guns
log_name = "IG"
+ cost = 4
/datum/spellbook_entry/barnyard
name = "Barnyard Curse"
diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm
index e8aa52cf4a4..1dac752b967 100644
--- a/code/game/gamemodes/wizard/wizard.dm
+++ b/code/game/gamemodes/wizard/wizard.dm
@@ -48,7 +48,51 @@
/datum/game_mode/proc/forge_wizard_objectives(datum/mind/wizard)
- generate_objectives(wizard, 2)
+ switch(rand(1,100))
+ if(1 to 30)
+
+ var/datum/objective/assassinate/kill_objective = new
+ kill_objective.owner = wizard
+ kill_objective.find_target()
+ wizard.objectives += kill_objective
+
+ if (!(locate(/datum/objective/escape) in wizard.objectives))
+ var/datum/objective/escape/escape_objective = new
+ escape_objective.owner = wizard
+ wizard.objectives += escape_objective
+ if(31 to 60)
+ var/datum/objective/steal/steal_objective = new
+ steal_objective.owner = wizard
+ steal_objective.find_target()
+ wizard.objectives += steal_objective
+
+ if (!(locate(/datum/objective/escape) in wizard.objectives))
+ var/datum/objective/escape/escape_objective = new
+ escape_objective.owner = wizard
+ wizard.objectives += escape_objective
+
+ if(61 to 85)
+ var/datum/objective/assassinate/kill_objective = new
+ kill_objective.owner = wizard
+ kill_objective.find_target()
+ wizard.objectives += kill_objective
+
+ var/datum/objective/steal/steal_objective = new
+ steal_objective.owner = wizard
+ steal_objective.find_target()
+ wizard.objectives += steal_objective
+
+ if (!(locate(/datum/objective/survive) in wizard.objectives))
+ var/datum/objective/survive/survive_objective = new
+ survive_objective.owner = wizard
+ wizard.objectives += survive_objective
+
+ else
+ if (!(locate(/datum/objective/hijack) in wizard.objectives))
+ var/datum/objective/hijack/hijack_objective = new
+ hijack_objective.owner = wizard
+ wizard.objectives += hijack_objective
+ return
/datum/game_mode/proc/name_wizard(mob/living/carbon/human/wizard_mob)
diff --git a/code/game/jobs/job/cargo_service.dm b/code/game/jobs/job/cargo_service.dm
index cd512286c10..f22bd2daed4 100644
--- a/code/game/jobs/job/cargo_service.dm
+++ b/code/game/jobs/job/cargo_service.dm
@@ -116,9 +116,9 @@ Bartender
ears = /obj/item/device/radio/headset/headset_srv
uniform = /obj/item/clothing/under/rank/bartender
suit = /obj/item/clothing/suit/armor/vest
- backpack_contents = list(/obj/item/ammo_casing/shotgun/beanbag=4)
+ backpack_contents = list(/obj/item/weapon/storage/box/beanbag=1)
shoes = /obj/item/clothing/shoes/laceup
-
+
/*
Cook
*/
diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm
index 922c0a71cd5..47e13d501e7 100644
--- a/code/game/machinery/Sleeper.dm
+++ b/code/game/machinery/Sleeper.dm
@@ -36,6 +36,10 @@
component_parts += new /obj/item/stack/cable_coil(null, 1)
RefreshParts()
+/obj/machinery/sleeper/Destroy()
+ go_out()
+ . = ..()
+
/obj/machinery/sleeper/RefreshParts()
var/E
var/I
@@ -83,10 +87,6 @@
default_deconstruction_crowbar(I)
-/obj/machinery/sleeper/ex_act(severity, target)
- go_out()
- ..()
-
/obj/machinery/sleeper/emp_act(severity)
if(stat & (BROKEN|NOPOWER))
..(severity)
diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm
index 9bcf2624df8..1ba91162918 100644
--- a/code/game/machinery/alarm.dm
+++ b/code/game/machinery/alarm.dm
@@ -187,10 +187,11 @@
else if (!shorted)
ui_interact(user)
-/obj/machinery/alarm/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0)
- ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open)
+/obj/machinery/alarm/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
+ datum/tgui/master_ui = null, datum/ui_state/state = default_state)
+ ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if (!ui)
- ui = new(user, src, ui_key, "air_alarm", name, 480, 660)
+ ui = new(user, src, ui_key, "air_alarm", name, 440, 650, master_ui, state)
ui.open()
/obj/machinery/alarm/get_ui_data(mob/user)
@@ -257,7 +258,8 @@
if(!location)
return
var/datum/gas_mixture/environment = location.return_air()
- var/total = environment.oxygen + environment.nitrogen + environment.carbon_dioxide + environment.toxins
+ var/list/env_gases = environment.gases
+ var/total = environment.total_moles()
var/list/environment_data = list()
data["atmos_alarm"] = alarm_area.atmosalm
@@ -272,26 +274,32 @@
var/pressure_danger = cur_tlv.get_danger_level(pressure)
environment_data += list(list("name" = "Pressure", "value" = pressure, "unit" = "kPa", "danger_level" = pressure_danger))
+ environment.assert_gases(arglist(hardcoded_gases))
+
cur_tlv = TLV["oxygen"]
- var/oxygen_danger = cur_tlv.get_danger_level(environment.oxygen*partial_pressure)
- environment_data += list(list("name" = "Oxygen", "value" = environment.oxygen / total * 100, "unit" = "%", "danger_level" = oxygen_danger))
+ var/oxygen_danger = cur_tlv.get_danger_level(env_gases["o2"][MOLES]*partial_pressure)
+ environment_data += list(list("name" = "Oxygen", "value" = env_gases["o2"][MOLES] / total * 100, "unit" = "%", "danger_level" = oxygen_danger))
cur_tlv = TLV["nitrogen"]
- var/nitrogen_danger = cur_tlv.get_danger_level(environment.nitrogen*partial_pressure)
- environment_data += list(list("name" = "Nitrogen", "value" = environment.nitrogen / total * 100, "unit" = "%", "danger_level" = nitrogen_danger))
+ var/nitrogen_danger = cur_tlv.get_danger_level(env_gases["n2"][MOLES]*partial_pressure)
+ environment_data += list(list("name" = "Nitrogen", "value" = env_gases["n2"][MOLES] / total * 100, "unit" = "%", "danger_level" = nitrogen_danger))
cur_tlv = TLV["carbon dioxide"]
- var/carbon_dioxide_danger = cur_tlv.get_danger_level(environment.carbon_dioxide*partial_pressure)
- environment_data += list(list("name" = "Carbon Dioxide", "value" = environment.carbon_dioxide / total * 100, "unit" = "%", "danger_level" = carbon_dioxide_danger))
+ var/carbon_dioxide_danger = cur_tlv.get_danger_level(env_gases["co2"][MOLES]*partial_pressure)
+ environment_data += list(list("name" = "Carbon Dioxide", "value" = env_gases["co2"][MOLES] / total * 100, "unit" = "%", "danger_level" = carbon_dioxide_danger))
cur_tlv = TLV["plasma"]
- var/plasma_danger = cur_tlv.get_danger_level(environment.toxins*partial_pressure)
- environment_data += list(list("name" = "Toxins", "value" = environment.toxins / total * 100, "unit" = "%", "danger_level" = plasma_danger))
+ var/plasma_danger = cur_tlv.get_danger_level(env_gases["plasma"][MOLES]*partial_pressure)
+ environment_data += list(list("name" = "Toxins", "value" = env_gases["plasma"][MOLES] / total * 100, "unit" = "%", "danger_level" = plasma_danger))
+
+ environment.garbage_collect()
cur_tlv = TLV["other"]
var/other_moles = 0
- for(var/datum/gas/G in environment.trace_gases)
- other_moles+=G.moles
+ for(var/id in env_gases)
+ if(id in hardcoded_gases)
+ continue
+ other_moles += env_gases[id][MOLES]
var/other_danger = cur_tlv.get_danger_level(other_moles*partial_pressure)
environment_data += list(list("name" = "Other", "value" = other_moles / total * 100, "unit" = "%", "danger_level" = other_danger))
@@ -602,6 +610,7 @@
return 0
var/datum/gas_mixture/environment = location.return_air()
+ var/list/env_gases = environment.gases
var/datum/tlv/cur_tlv
var/GET_PP = R_IDEAL_GAS_EQUATION*environment.temperature/environment.volume
@@ -610,19 +619,25 @@
var/environment_pressure = environment.return_pressure()
var/pressure_dangerlevel = cur_tlv.get_danger_level(environment_pressure)
+ environment.assert_gases(arglist(hardcoded_gases))
+
cur_tlv = TLV["oxygen"]
- var/oxygen_dangerlevel = cur_tlv.get_danger_level(environment.oxygen*GET_PP)
+ var/oxygen_dangerlevel = cur_tlv.get_danger_level(env_gases["o2"][MOLES]*GET_PP)
cur_tlv = TLV["carbon dioxide"]
- var/co2_dangerlevel = cur_tlv.get_danger_level(environment.carbon_dioxide*GET_PP)
+ var/co2_dangerlevel = cur_tlv.get_danger_level(env_gases["co2"][MOLES]*GET_PP)
cur_tlv = TLV["plasma"]
- var/plasma_dangerlevel = cur_tlv.get_danger_level(environment.toxins*GET_PP)
+ var/plasma_dangerlevel = cur_tlv.get_danger_level(env_gases["plasma"][MOLES]*GET_PP)
+
+ environment.garbage_collect()
cur_tlv = TLV["other"]
var/other_moles = 0
- for(var/datum/gas/G in environment.trace_gases)
- other_moles+=G.moles
+ for(var/id in env_gases)
+ if(id in hardcoded_gases)
+ continue
+ other_moles += env_gases[id][MOLES]
var/other_dangerlevel = cur_tlv.get_danger_level(other_moles*GET_PP)
cur_tlv = TLV["temperature"]
diff --git a/code/game/machinery/atmo_control.dm b/code/game/machinery/atmo_control.dm
index 89c4d084ced..0b9f6633758 100644
--- a/code/game/machinery/atmo_control.dm
+++ b/code/game/machinery/atmo_control.dm
@@ -37,6 +37,7 @@
signal.data["timestamp"] = world.time
var/datum/gas_mixture/air_sample = return_air()
+ var/list/sample_gases = air_sample.gases
if(output&1)
signal.data["pressure"] = num2text(round(air_sample.return_pressure(),0.1))
@@ -46,14 +47,16 @@
if(output>4)
var/total_moles = air_sample.total_moles()
if(total_moles > 0)
+ air_sample.assert_gases(arglist(hardcoded_gases))
if(output&4)
- signal.data["oxygen"] = round(100*air_sample.oxygen/total_moles,0.1)
+ signal.data["oxygen"] = round(100*sample_gases["o2"][MOLES]/total_moles,0.1)
if(output&8)
- signal.data["toxins"] = round(100*air_sample.toxins/total_moles,0.1)
+ signal.data["toxins"] = round(100*sample_gases["plasma"][MOLES]/total_moles,0.1)
if(output&16)
- signal.data["nitrogen"] = round(100*air_sample.nitrogen/total_moles,0.1)
+ signal.data["nitrogen"] = round(100*sample_gases["n2"][MOLES]/total_moles,0.1)
if(output&32)
- signal.data["carbon_dioxide"] = round(100*air_sample.carbon_dioxide/total_moles,0.1)
+ signal.data["carbon_dioxide"] = round(100*sample_gases["co2"][MOLES]/total_moles,0.1)
+ air_sample.garbage_collect()
else
signal.data["oxygen"] = 0
signal.data["toxins"] = 0
diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm
index 20eac90dae2..1318d338a08 100644
--- a/code/game/machinery/atmoalter/canister.dm
+++ b/code/game/machinery/atmoalter/canister.dm
@@ -9,10 +9,8 @@
icon_state = "yellow"
density = 1
var/health = 100
-
var/valve_open = 0
var/release_pressure = ONE_ATMOSPHERE
-
var/canister_color = "yellow"
var/can_label = 1
var/filled = 0.5
@@ -22,40 +20,55 @@
use_power = 0
var/release_log = ""
var/update_flag = 0
+ var/gas_type = ""
+ var/static/list/label2types = list(
+ "caution" = /obj/machinery/portable_atmospherics/canister,
+ "n2o" = /obj/machinery/portable_atmospherics/canister/nitrous_oxide,
+ "n2" = /obj/machinery/portable_atmospherics/canister/nitrogen,
+ "o2" = /obj/machinery/portable_atmospherics/canister/oxygen,
+ "plasma" = /obj/machinery/portable_atmospherics/canister/toxins,
+ "co2" = /obj/machinery/portable_atmospherics/canister/carbon_dioxide,
+ "air" = /obj/machinery/portable_atmospherics/canister/air
+ )
-/obj/machinery/portable_atmospherics/canister/sleeping_agent
- name = "canister: \[N2O\]"
+/obj/machinery/portable_atmospherics/canister/nitrous_oxide
+ name = "n2o canister"
desc = "Nitrous oxide gas. Known to cause drowsiness."
icon_state = "redws"
canister_color = "redws"
can_label = 0
+ gas_type = "n2o"
/obj/machinery/portable_atmospherics/canister/nitrogen
- name = "canister: \[N2\]"
+ name = "n2 canister"
desc = "Nitrogen gas. Reportedly useful for something."
icon_state = "red"
canister_color = "red"
can_label = 0
+ gas_type = "n2"
/obj/machinery/portable_atmospherics/canister/oxygen
- name = "canister: \[O2\]"
+ name = "o2 canister"
desc = "Oxygen. Necessary for human life."
icon_state = "blue"
canister_color = "blue"
can_label = 0
+ gas_type = "o2"
/obj/machinery/portable_atmospherics/canister/toxins
- name = "canister \[Plasma\]"
+ name = "plasma canister"
desc = "Plasma gas. The reason YOU are here. Highly toxic."
icon_state = "orange"
canister_color = "orange"
can_label = 0
+ gas_type = "plasma"
/obj/machinery/portable_atmospherics/canister/carbon_dioxide
- name = "canister \[CO2\]"
+ name = "co2 canister"
desc = "Carbon dioxide. What the fuck is carbon dioxide?"
icon_state = "black"
canister_color = "black"
can_label = 0
+ gas_type = "co2"
/obj/machinery/portable_atmospherics/canister/air
- name = "canister \[Air\]"
+ name = "air canister"
desc = "Pre-mixed air."
icon_state = "grey"
canister_color = "grey"
@@ -273,10 +286,11 @@ update_flag
return
ui_interact(user)
-/obj/machinery/portable_atmospherics/canister/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0)
- ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open)
+/obj/machinery/portable_atmospherics/canister/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
+ datum/tgui/master_ui = null, datum/ui_state/state = physical_state)
+ ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if (!ui)
- ui = new(user, src, ui_key, "canister", name, 405, 405, state = physical_state)
+ ui = new(user, src, ui_key, "canister", name, 405, 405, master_ui, state)
ui.open()
/obj/machinery/portable_atmospherics/canister/get_ui_data()
@@ -305,20 +319,11 @@ update_flag
switch(action)
if("relabel")
if(can_label)
- var/list/colors = list(\
- "\[N2O\]" = "redws", \
- "\[N2\]" = "red", \
- "\[O2\]" = "blue", \
- "\[Plasma\]" = "orange", \
- "\[CO2\]" = "black", \
- "\[Air\]" = "grey", \
- "\[CAUTION\]" = "yellow", \
- )
- var/label = input("Label canister:", "Gas Canister") as null|anything in colors
- if(label)
- src.canister_color = colors[label]
- src.icon_state = colors[label]
- src.name = "canister: [label]"
+ var/label = input("Label canister:", "Gas Canister") as null|anything in label2types
+ var/newtype = label2types[label]
+ if(newtype)
+ new newtype (loc, 0)
+ qdel(src)
if("pressure")
switch(params["pressure"])
if("custom")
@@ -344,11 +349,10 @@ update_flag
logmsg = "Valve was opened by [key_name(usr)], starting the transfer into the [holding]
"
else
logmsg = "Valve was opened by [key_name(usr)], starting the transfer into the air
"
- if(air_contents.toxins > 0)
+ if(air_contents.gases["plasma"])
message_admins("[key_name_admin(usr)] (?) (FLW) opened a canister that contains plasma! (JMP)")
log_admin("[key_name(usr)] opened a canister that contains plasma at [x], [y], [z]")
- var/datum/gas/sleeping_agent = locate(/datum/gas/sleeping_agent) in air_contents.trace_gases
- if(sleeping_agent && (sleeping_agent.moles > 1))
+ if(air_contents.gases["n2o"])
message_admins("[key_name_admin(usr)] (?) (FLW) opened a canister that contains N2O! (JMP)")
log_admin("[key_name(usr)] opened a canister that contains N2O at [x], [y], [z]")
investigate_log(logmsg, "atmos")
@@ -364,38 +368,25 @@ update_flag
update_icon()
return 1
-/obj/machinery/portable_atmospherics/canister/toxins/New()
+/obj/machinery/portable_atmospherics/canister/New(loc, fill = 1)
..()
- src.air_contents.toxins = (src.maximum_pressure*filled)*air_contents.volume/(R_IDEAL_GAS_EQUATION*air_contents.temperature)
+ if(fill)
+ create_gas()
- src.update_icon()
+ update_icon()
return 1
-/obj/machinery/portable_atmospherics/canister/oxygen/New()
- ..()
-
- src.air_contents.oxygen = (src.maximum_pressure*filled)*air_contents.volume/(R_IDEAL_GAS_EQUATION*air_contents.temperature)
-
- src.update_icon()
- return 1
-
-/obj/machinery/portable_atmospherics/canister/sleeping_agent/New()
- ..()
-
- var/datum/gas/sleeping_agent/trace_gas = new
- air_contents.trace_gases += trace_gas
- trace_gas.moles = (src.maximum_pressure*filled)*air_contents.volume/(R_IDEAL_GAS_EQUATION*air_contents.temperature)
-
- src.update_icon()
- return 1
+/obj/machinery/portable_atmospherics/canister/proc/create_gas()
+ if(gas_type)
+ air_contents.assert_gas(gas_type)
+ air_contents.gases[gas_type][MOLES] = (src.maximum_pressure*filled)*air_contents.volume/(R_IDEAL_GAS_EQUATION*air_contents.temperature)
//Dirty way to fill room with gas. However it is a bit easier to do than creating some floor/engine/n2o -rastaf0
-/obj/machinery/portable_atmospherics/canister/sleeping_agent/roomfiller/New()
+/obj/machinery/portable_atmospherics/canister/nitrous_oxide/roomfiller/New()
..()
- var/datum/gas/sleeping_agent/trace_gas = air_contents.trace_gases[1]
- trace_gas.moles = 9*4000
+ air_contents.gases["n2o"][MOLES] = 9*4000
spawn(10)
var/turf/simulated/location = src.loc
if (istype(src.loc))
@@ -405,29 +396,7 @@ update_flag
air_contents = new
return 1
-/obj/machinery/portable_atmospherics/canister/nitrogen/New()
-
- ..()
-
- src.air_contents.nitrogen = (src.maximum_pressure*filled)*air_contents.volume/(R_IDEAL_GAS_EQUATION*air_contents.temperature)
-
- src.update_icon()
- return 1
-
-/obj/machinery/portable_atmospherics/canister/carbon_dioxide/New()
-
- ..()
- src.air_contents.carbon_dioxide = (src.maximum_pressure*filled)*air_contents.volume/(R_IDEAL_GAS_EQUATION*air_contents.temperature)
-
- src.update_icon()
- return 1
-
-
-/obj/machinery/portable_atmospherics/canister/air/New()
-
- ..()
- src.air_contents.oxygen = (O2STANDARD*src.maximum_pressure*filled)*air_contents.volume/(R_IDEAL_GAS_EQUATION*air_contents.temperature)
- src.air_contents.nitrogen = (N2STANDARD*src.maximum_pressure*filled)*air_contents.volume/(R_IDEAL_GAS_EQUATION*air_contents.temperature)
-
- src.update_icon()
- return 1
+/obj/machinery/portable_atmospherics/canister/air/create_gas()
+ air_contents.assert_gases("o2","n2")
+ air_contents.gases["o2"][MOLES] = (O2STANDARD*src.maximum_pressure*filled)*air_contents.volume/(R_IDEAL_GAS_EQUATION*air_contents.temperature)
+ air_contents.gases["n2"][MOLES] = (N2STANDARD*src.maximum_pressure*filled)*air_contents.volume/(R_IDEAL_GAS_EQUATION*air_contents.temperature)
diff --git a/code/game/machinery/atmoalter/scrubber.dm b/code/game/machinery/atmoalter/scrubber.dm
index 5b8100857c1..2bd2649d799 100644
--- a/code/game/machinery/atmoalter/scrubber.dm
+++ b/code/game/machinery/atmoalter/scrubber.dm
@@ -72,27 +72,29 @@
//Filter it
if (removed)
var/datum/gas_mixture/filtered_out = new
+ var/list/filtered_gases = filtered_out.gases
+ var/list/removed_gases = removed.gases
+
+ filtered_out.assert_gases(arglist(hardcoded_gases))
+ removed.assert_gases(arglist(hardcoded_gases))
filtered_out.temperature = removed.temperature
- filtered_out.toxins = removed.toxins
- removed.toxins = 0
+ filtered_gases["plasma"][MOLES] = removed_gases["plasma"][MOLES]
+ removed_gases["plasma"][MOLES] = 0
- filtered_out.carbon_dioxide = removed.carbon_dioxide
- removed.carbon_dioxide = 0
+ filtered_gases["co2"][MOLES] = removed_gases["co2"][MOLES]
+ removed_gases["co2"][MOLES] = 0
- if(removed.trace_gases.len>0)
- for(var/datum/gas/trace_gas in removed.trace_gases)
- if(istype(trace_gas, /datum/gas/sleeping_agent))
- removed.trace_gases -= trace_gas
- filtered_out.trace_gases += trace_gas
+ filtered_gases["agent_b"][MOLES] = removed_gases["agent_b"][MOLES]
+ removed_gases["agent_b"][MOLES] = 0
- if(removed.trace_gases.len>0)
- for(var/datum/gas/trace_gas in removed.trace_gases)
- if(istype(trace_gas, /datum/gas/oxygen_agent_b))
- removed.trace_gases -= trace_gas
- filtered_out.trace_gases += trace_gas
+ filtered_gases["n2o"][MOLES] = removed_gases["n2o"][MOLES]
+ removed_gases["n2o"][MOLES] = 0
+
+ filtered_out.garbage_collect()
+ removed.garbage_collect()
//Remix the resulting gases
air_contents.merge(filtered_out)
diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm
index b1253d425dd..1a62efe579e 100644
--- a/code/game/machinery/buttons.dm
+++ b/code/game/machinery/buttons.dm
@@ -174,16 +174,15 @@
var/normaldoorcontrol = 0
var/specialfunctions = OPEN // Bitflag, see assembly file
-/obj/machinery/button/door/New(loc, ndir = 0, built = 0)
- ..()
- if(id && !built && !device)
+/obj/machinery/button/door/setup_device()
+ if(!device)
if(normaldoorcontrol)
var/obj/item/device/assembly/control/airlock/A = new(src)
device = A
A.specialfunctions = specialfunctions
else
device = new /obj/item/device/assembly/control(src)
-
+ ..()
/obj/machinery/button/massdriver
name = "mass driver button"
diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm
index 58fa41b44d9..6cd7d3e221c 100644
--- a/code/game/machinery/camera/camera.dm
+++ b/code/game/machinery/camera/camera.dm
@@ -28,7 +28,6 @@
var/view_range = 7
var/short_range = 2
- var/light_disabled = 0
var/alarm_on = 0
var/busy = 0
var/emped = 0 //Number of consecutive EMP's on this camera
@@ -358,6 +357,16 @@
busy = 0
return 0
+/obj/machinery/camera/proc/Togglelight(on=0)
+ for(var/mob/living/silicon/ai/A in ai_list)
+ for(var/obj/machinery/camera/cam in A.lit_cameras)
+ if(cam == src)
+ return
+ if(on)
+ src.SetLuminosity(AI_CAMERA_LUMINOSITY)
+ else
+ src.SetLuminosity(0)
+
/obj/machinery/camera/bullet_act(obj/item/projectile/proj)
if(proj.damage_type == BRUTE)
health = max(0, health - proj.damage)
diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm
index 627f5727480..8c30cfc0c41 100644
--- a/code/game/machinery/cloning.dm
+++ b/code/game/machinery/cloning.dm
@@ -186,11 +186,12 @@
H << "Consciousness slowly creeps over you as your body regenerates.
So this is what cloning feels like?"
H.hardset_dna(ui, se, H.real_name, null, mrace, features)
- H.faction |= factions
+ if(H)
+ H.faction |= factions
- H.set_cloned_appearance()
+ H.set_cloned_appearance()
- H.suiciding = 0
+ H.suiciding = 0
src.attempting = 0
return 1
diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm
index 8cfd51a294f..d706a89a1bf 100644
--- a/code/game/machinery/computer/cloning.dm
+++ b/code/game/machinery/computer/cloning.dm
@@ -297,7 +297,8 @@
src.updateUsrDialog()
return
- src.active_record.fields = diskette.fields.Copy()
+ for(var/key in diskette.fields)
+ src.active_record.fields[key] = diskette.fields[key]
src.temp = "Load successful."
if("eject")
diff --git a/code/game/machinery/dna_scanner.dm b/code/game/machinery/dna_scanner.dm
index 97339c1bd53..2651ed274ed 100644
--- a/code/game/machinery/dna_scanner.dm
+++ b/code/game/machinery/dna_scanner.dm
@@ -108,8 +108,8 @@
|| locate(/obj/machinery/computer/cloning, get_step(src, SOUTH)) \
|| locate(/obj/machinery/computer/cloning, get_step(src, EAST)) \
|| locate(/obj/machinery/computer/cloning, get_step(src, WEST)))
-
- occupant.notify_ghost_cloning("Your corpse has been placed into a cloning scanner. Re-enter your corpse if you want to be cloned!", source = src)
+ if(!occupant.suiciding && !(occupant.disabilities & NOCLONE))
+ occupant.notify_ghost_cloning("Your corpse has been placed into a cloning scanner. Re-enter your corpse if you want to be cloned!", source = src)
var/obj/machinery/computer/scan_consolenew/console
for(dir in list(NORTH,EAST,SOUTH,WEST))
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index 74869fafb76..178af87a6d3 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -54,6 +54,7 @@ var/list/airlock_overlays = list()
var/autoclose = 1
var/obj/item/device/doorCharge/charge = null //If applied, causes an explosion upon opening the door
var/detonated = 0
+ var/doorsound = 'sound/machines/airlock.ogg'
var/airlock_material = null //material of inner filling; if its an airlock with glass, this should be set to "glass"
var/overlays_file = 'icons/obj/doors/airlocks/station/overlays.dmi'
@@ -507,7 +508,7 @@ About the new airlock wires panel:
src.aiHacking=0
return
else if(!src.canAIHack())
- user << "We've lost our connection! Unable to hack airlock."
+ user << "Connection lost! Unable to hack airlock."
src.aiHacking=0
return
user << "Fault confirmed: airlock control wire disabled or cut."
@@ -519,7 +520,7 @@ About the new airlock wires panel:
src.aiHacking=0
return
else if(!src.canAIHack())
- user << "We've lost our connection! Unable to hack airlock."
+ user << "Connection lost! Unable to hack airlock."
src.aiHacking=0
return
user << "Upload access confirmed. Loading control program into airlock software."
@@ -529,7 +530,7 @@ About the new airlock wires panel:
src.aiHacking=0
return
else if(!src.canAIHack())
- user << "We've lost our connection! Unable to hack airlock."
+ user << "Connection lost! Unable to hack airlock."
src.aiHacking=0
return
user << "Transfer complete. Forcing airlock to execute program."
@@ -657,7 +658,7 @@ About the new airlock wires panel:
else if (src.normalspeed)
normalspeed = 0
else
- usr << text("Door timing circurity already accellerated.")
+ usr << text("Door timing circuitry already accelerated.")
if(7)
//close door
@@ -762,7 +763,7 @@ About the new airlock wires panel:
normalspeed = 1
src.updateUsrDialog()
else
- usr << text("Door timing circurity currently operating normally.")
+ usr << text("Door timing circuitry currently operating normally.")
if(7)
//open door
@@ -981,12 +982,7 @@ About the new airlock wires panel:
if(emagged)
return 0
use_power(50)
- if(istype(src, /obj/machinery/door/airlock/glass))
- playsound(src.loc, 'sound/machines/windowdoor.ogg', 100, 1)
- if(istype(src, /obj/machinery/door/airlock/clown))
- playsound(src.loc, 'sound/items/bikehorn.ogg', 30, 1)
- else
- playsound(src.loc, 'sound/machines/airlock.ogg', 30, 1)
+ playsound(src.loc, doorsound, 30, 1)
if(src.closeOther != null && istype(src.closeOther, /obj/machinery/door/airlock/) && !src.closeOther.density)
src.closeOther.close()
else
@@ -1035,12 +1031,7 @@ About the new airlock wires panel:
if(emagged)
return
use_power(50)
- if(istype(src, /obj/machinery/door/airlock/glass))
- playsound(src.loc, 'sound/machines/windowdoor.ogg', 30, 1)
- if(istype(src, /obj/machinery/door/airlock/clown))
- playsound(src.loc, 'sound/items/bikehorn.ogg', 30, 1)
- else
- playsound(src.loc, 'sound/machines/airlock.ogg', 30, 1)
+ playsound(src.loc, doorsound, 30, 1)
else
playsound(src.loc, 'sound/machines/airlockforced.ogg', 30, 1)
@@ -1065,9 +1056,7 @@ About the new airlock wires panel:
air_update_turf(1)
update_freelook_sight()
if(safe)
- if(locate(/mob/living) in get_turf(src))
- sleep(1)
- open()
+ CheckForMobs()
return 1
/obj/machinery/door/airlock/proc/prison_open()
@@ -1176,4 +1165,4 @@ About the new airlock wires panel:
lights = 0
locked = 1
loseMainPower()
- loseBackupPower()
+ loseBackupPower()
\ No newline at end of file
diff --git a/code/game/machinery/doors/airlock_electronics.dm b/code/game/machinery/doors/airlock_electronics.dm
index 55bfc93bc04..49f7f636eb9 100644
--- a/code/game/machinery/doors/airlock_electronics.dm
+++ b/code/game/machinery/doors/airlock_electronics.dm
@@ -13,10 +13,11 @@
add_fingerprint(user)
ui_interact(user)
-/obj/item/weapon/electronics/airlock/ui_interact(mob/user, ui_key = "main", var/datum/tgui/ui = null, force_open = 0)
- SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open)
+/obj/item/weapon/electronics/airlock/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
+ datum/tgui/master_ui = null, datum/ui_state/state = hands_state)
+ SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if (!ui)
- ui = new(user, src, ui_key, "airlock_electronics", name, 975, 420, state = hands_state)
+ ui = new(user, src, ui_key, "airlock_electronics", name, 975, 420, master_ui, state)
ui.open()
/obj/item/weapon/electronics/airlock/get_ui_data()
diff --git a/code/game/machinery/doors/airlock_types.dm b/code/game/machinery/doors/airlock_types.dm
index 852f62ffeca..4c7a47d8488 100644
--- a/code/game/machinery/doors/airlock_types.dm
+++ b/code/game/machinery/doors/airlock_types.dm
@@ -183,6 +183,7 @@
desc = "Honkhonkhonk"
icon = 'icons/obj/doors/airlocks/station/bananium.dmi'
var/mineral = "bananium"
+ doorsound = 'sound/items/bikehorn.ogg'
doortype = /obj/structure/door_assembly/door_assembly_clown
/obj/machinery/door/airlock/sandstone
@@ -209,6 +210,7 @@
overlays_file = 'icons/obj/doors/airlocks/station2/overlays.dmi'
opacity = 0
doortype = /obj/structure/door_assembly/door_assembly_glass
+ doorsound = 'sound/machines/windowdoor.ogg'
glass = 1
//////////////////////////////////
@@ -309,4 +311,4 @@
opacity = 0
doortype = null
glass = 1
- bound_width = 64 // 2x1
+ bound_width = 64 // 2x1
\ No newline at end of file
diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm
index bf8f66cb6fa..3a67b933959 100644
--- a/code/game/machinery/doors/door.dm
+++ b/code/game/machinery/doors/door.dm
@@ -79,6 +79,11 @@
/obj/machinery/door/proc/CanAStarPass(var/obj/item/weapon/card/id/ID)
return !density
+/obj/machinery/door/proc/CheckForMobs()
+ if(locate(/mob/living) in get_turf(src))
+ sleep(1)
+ open()
+
/obj/machinery/door/proc/bumpopen(mob/user)
if(operating)
return
@@ -221,6 +226,7 @@
update_icon()
if(visible && !glass)
SetOpacity(1)
+ CheckForMobs()
operating = 0
air_update_turf(1)
update_freelook_sight()
diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm
index 236b15157c7..91c04b36e2e 100644
--- a/code/game/machinery/doors/poddoor.dm
+++ b/code/game/machinery/doors/poddoor.dm
@@ -93,6 +93,9 @@
//"BLAST" doors are obviously stronger than regular doors when it comes to BLASTS.
/obj/machinery/door/poddoor/ex_act(severity, target)
+ if(target == src)
+ qdel(src)
+ return
switch(severity)
if(1)
if(prob(80))
diff --git a/code/game/machinery/droneDispenser.dm b/code/game/machinery/droneDispenser.dm
index 1917c75065f..baa872a15f0 100644
--- a/code/game/machinery/droneDispenser.dm
+++ b/code/game/machinery/droneDispenser.dm
@@ -135,32 +135,32 @@
if(work_sound)
playsound(src, work_sound, 50, 1)
icon_state = icon_creating
- spawn(30)
+ sleep(30)
+ icon_state = icon_on
+ metal -= metal_cost
+ glass -= glass_cost
+ if(metal < 0)
+ metal = 0
+ if(glass < 0)
+ glass = 0
+ if(power_used)
+ use_power(power_used)
+ new dispense_type(loc)
+ if(create_sound)
+ playsound(src, create_sound, 50, 1)
+ if(end_create_message)
+ visible_message("[src] [end_create_message]")
+ icon_state = icon_recharging
+ sleep(cooldownTime)
+ if(stat != BROKEN)
icon_state = icon_on
- metal -= metal_cost
- glass -= glass_cost
- if(metal < 0)
- metal = 0
- if(glass < 0)
- glass = 0
- if(power_used)
- use_power(power_used)
- new dispense_type(loc)
- if(create_sound)
- playsound(src, create_sound, 50, 1)
- if(end_create_message)
- visible_message("[src] [end_create_message]")
- icon_state = icon_recharging
- spawn(cooldownTime)
- if(stat != BROKEN)
- icon_state = icon_on
- else
- icon_state = icon_off
- droneMadeRecently = 0
- if(recharge_sound)
- playsound(src, recharge_sound, 50, 1)
- if(recharge_message)
- visible_message("[src] [recharge_message]")
+ else
+ icon_state = icon_off
+ droneMadeRecently = 0
+ if(recharge_sound)
+ playsound(src, recharge_sound, 50, 1)
+ if(recharge_message)
+ visible_message("[src] [recharge_message]")
/obj/machinery/droneDispenser/attackby(obj/item/O, mob/living/user)
if(istype(O, /obj/item/stack))
diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm
index 62162225baf..d2cdf0153f1 100644
--- a/code/game/machinery/portable_turret.dm
+++ b/code/game/machinery/portable_turret.dm
@@ -504,8 +504,7 @@
if(!tryToShootAt(targets))
if(!always_up)
- spawn()
- popDown() // no valid targets, close the cover
+ popDown() // no valid targets, close the cover
/obj/machinery/porta_turret/proc/tryToShootAt(list/atom/movable/targets)
diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm
index c8471e64002..8242bd0a562 100644
--- a/code/game/machinery/spaceheater.dm
+++ b/code/game/machinery/spaceheater.dm
@@ -153,10 +153,11 @@
/obj/machinery/space_heater/interact(mob/user)
ui_interact(user)
-/obj/machinery/space_heater/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0)
- ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open)
+/obj/machinery/space_heater/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
+ datum/tgui/master_ui = null, datum/ui_state/state = physical_state)
+ ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if (!ui)
- ui = new(user, src, ui_key, "space_heater", name, 400, 305, state = physical_state)
+ ui = new(user, src, ui_key, "space_heater", name, 400, 305, master_ui, state)
ui.open()
/obj/machinery/space_heater/ui_act(action, params)
diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm
index 77fd9702487..3da70a1c3e2 100644
--- a/code/game/machinery/status_display.dm
+++ b/code/game/machinery/status_display.dm
@@ -44,9 +44,12 @@
/obj/machinery/status_display/New()
..()
- spawn(5) // must wait for map loading to finish
- if(SSradio)
- SSradio.add_object(src, frequency)
+ if(SSradio)
+ SSradio.add_object(src, frequency)
+
+/obj/machinery/status_display/initialize()
+ if(SSradio)
+ SSradio.add_object(src, frequency)
/obj/machinery/status_display/Destroy()
if(SSradio)
diff --git a/code/game/machinery/syndicatebeacon.dm b/code/game/machinery/syndicatebeacon.dm
index a97f4cc6bc0..d8fce89f1ea 100644
--- a/code/game/machinery/syndicatebeacon.dm
+++ b/code/game/machinery/syndicatebeacon.dm
@@ -80,11 +80,18 @@
custom_objective.owner = N.mind
N.mind.objectives += custom_objective
- add_objective(N.mind, /datum/objective/escape_obj/escape, 1)
+ var/datum/objective/escape/escape_objective = new
+ escape_objective.owner = N.mind
+ N.mind.objectives += escape_objective
M << "You have joined the ranks of the Syndicate and become a traitor to the station!"
+ var/obj_count = 1
+ for(var/datum/objective/OBJ in M.mind.objectives)
+ M << "Objective #[obj_count]: [OBJ.explanation_text]"
+ obj_count++
+
src.updateUsrDialog()
return
diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm
index 6f6950527ab..883013d04f0 100644
--- a/code/game/machinery/syndicatebomb.dm
+++ b/code/game/machinery/syndicatebomb.dm
@@ -114,9 +114,8 @@
wires.Interact(user)
if(!open_panel)
if(!active)
- spawn()
- settings(user)
- return
+ settings(user)
+ return
else if(anchored)
user << "The bomb is bolted to the floor!"
return
diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm
index f73c58acdd7..5b30ada2d0e 100644
--- a/code/game/machinery/washing_machine.dm
+++ b/code/game/machinery/washing_machine.dm
@@ -14,21 +14,11 @@
//6 = blood, open door
//7 = blood, closed door
//8 = blood, running
- var/panel = 0
- //0 = closed
- //1 = open
- var/hacked = 1 //Bleh, screw hacking, let's have it hacked by default.
- //0 = not hacked
- //1 = hacked
var/gibs_ready = 0
var/obj/crayon
-/obj/machinery/washing_machine/verb/start()
- set name = "Start Washing"
- set category = "Object"
- set src in oview(1)
-
- if(usr.stat || usr.restrained() || !usr.canmove)
+/obj/machinery/washing_machine/AltClick(mob/user)
+ if(!user.canUseTopic(src))
return
if( state != 4 )
@@ -183,12 +173,9 @@
/obj/machinery/washing_machine/update_icon()
- icon_state = "wm_[state][panel]"
+ icon_state = "wm_[state]0"
/obj/machinery/washing_machine/attackby(obj/item/weapon/W, mob/user, params)
- /*if(istype(W,/obj/item/weapon/screwdriver))
- panel = !panel
- user << "\blue you [panel ? "open" : "close"] the [src]'s maintenance panel"*/
if(istype(W,/obj/item/toy/crayon) ||istype(W,/obj/item/weapon/stamp))
if( state in list( 1, 3, 6 ) )
if(!crayon)
@@ -201,7 +188,7 @@
else
..()
else if(istype(W,/obj/item/weapon/grab))
- if( (state == 1) && hacked)
+ if(state == 1)
var/obj/item/weapon/grab/G = W
if(iscorgi(G.affecting))
G.affecting.loc = src
@@ -249,9 +236,6 @@
if ( istype(W,/obj/item/clothing/head/syndicatefake ) )
user << "This item does not fit."
return
-// if ( istype(W,/obj/item/clothing/head/powered ) )
-// user << "This item does not fit."
-// return
if ( istype(W,/obj/item/clothing/head/helmet ) )
user << "This item does not fit."
return
@@ -305,4 +289,4 @@
state = 1
- update_icon()
\ No newline at end of file
+ update_icon()
diff --git a/code/game/machinery/wishgranter.dm b/code/game/machinery/wishgranter.dm
index 4748c08ad48..ef9962cf0b4 100644
--- a/code/game/machinery/wishgranter.dm
+++ b/code/game/machinery/wishgranter.dm
@@ -45,7 +45,14 @@
ticker.mode.traitors += user.mind
user.mind.special_role = "Avatar of the Wish Granter"
- add_objective(user.mind, /datum/objective/escape_obj/hijack, 1)
+ var/datum/objective/hijack/hijack = new
+ hijack.owner = user.mind
+ user.mind.objectives += hijack
+
+ var/obj_count = 1
+ for(var/datum/objective/OBJ in user.mind.objectives)
+ user << "Objective #[obj_count]: [OBJ.explanation_text]"
+ obj_count++
user << "You have a very bad feeling about this."
diff --git a/code/game/mecha/equipment/tools/other_tools.dm b/code/game/mecha/equipment/tools/other_tools.dm
index 0f53b062e7f..a1ce789e73a 100644
--- a/code/game/mecha/equipment/tools/other_tools.dm
+++ b/code/game/mecha/equipment/tools/other_tools.dm
@@ -436,13 +436,14 @@
if(!T)
return
var/datum/gas_mixture/GM = new
+ GM.assert_gas("plasma")
if(prob(10))
- GM.toxins += 100
+ GM.gases["plasma"][MOLES] += 100
GM.temperature = 1500+T0C //should be enough to start a fire
T.visible_message("The [src] suddenly disgorges a cloud of heated plasma.")
qdel(src)
else
- GM.toxins += 5
+ GM.gases["plasma"][MOLES] += 5
GM.temperature = istype(T) ? T.air.return_temperature() : T20C
T.visible_message("The [src] suddenly disgorges a cloud of plasma.")
T.assume_air(GM)
diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm
index 622686e70ec..0beb82c3cdc 100644
--- a/code/game/mecha/mech_fabricator.dm
+++ b/code/game/mecha/mech_fabricator.dm
@@ -396,7 +396,7 @@
add_part_set_to_queue(filter.get("partset_to_queue"))
return update_queue_on_page()
if(href_list["process_queue"])
- spawn(-1)
+ spawn(0)
if(processing_queue || being_built)
return 0
processing_queue = 1
diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm
index 2c892b128a9..c1ab8a6a7e6 100644
--- a/code/game/mecha/mecha.dm
+++ b/code/game/mecha/mecha.dm
@@ -177,8 +177,9 @@
cabin_air = new
cabin_air.temperature = T20C
cabin_air.volume = 200
- cabin_air.oxygen = O2STANDARD*cabin_air.volume/(R_IDEAL_GAS_EQUATION*cabin_air.temperature)
- cabin_air.nitrogen = N2STANDARD*cabin_air.volume/(R_IDEAL_GAS_EQUATION*cabin_air.temperature)
+ cabin_air.assert_gases("o2","n2")
+ cabin_air.gases["o2"][MOLES] = O2STANDARD*cabin_air.volume/(R_IDEAL_GAS_EQUATION*cabin_air.temperature)
+ cabin_air.gases["n2"][MOLES] = N2STANDARD*cabin_air.volume/(R_IDEAL_GAS_EQUATION*cabin_air.temperature)
return cabin_air
/obj/mecha/proc/add_radio()
@@ -344,7 +345,7 @@
if(M.client)
speech_bubble_recipients.Add(M.client)
spawn(0)
- flick_overlay(image('icons/mob/talk.dmi', src, "hR[say_test(raw_message)]",MOB_LAYER+1), speech_bubble_recipients, 30)
+ flick_overlay(image('icons/mob/talk.dmi', src, "machine[say_test(raw_message)]",MOB_LAYER+1), speech_bubble_recipients, 30)
return
////////////////////////////
@@ -406,9 +407,17 @@
events.fireEvent("onMove",get_turf(src))
/obj/mecha/Process_Spacemove(var/movement_dir = 0)
- if(occupant)
- return occupant.Process_Spacemove(movement_dir) //We'll just say you used the clamp to grab the wall
- return ..()
+ . = ..()
+ if(.)
+ return 1
+
+ var/atom/movable/backup = get_spacemove_backup()
+ if(backup)
+ if(istype(backup) && movement_dir && !backup.anchored)
+ if(backup.newtonian_move(turn(movement_dir, 180)))
+ if(occupant)
+ occupant << "You push off of [backup] to propel yourself."
+ return 1
/obj/mecha/relaymove(mob/user,direction)
if(!direction)
diff --git a/code/game/objects/effects/decals/contraband.dm b/code/game/objects/effects/contraband.dm
similarity index 100%
rename from code/game/objects/effects/decals/contraband.dm
rename to code/game/objects/effects/contraband.dm
diff --git a/code/game/objects/effects/decals/Cleanable/aliens.dm b/code/game/objects/effects/decals/Cleanable/aliens.dm
index 1326a890d7d..7e358f18fb4 100644
--- a/code/game/objects/effects/decals/Cleanable/aliens.dm
+++ b/code/game/objects/effects/decals/Cleanable/aliens.dm
@@ -5,7 +5,6 @@
desc = "It's green and acidic. It looks like... blood?"
gender = PLURAL
density = 0
- anchored = 1
layer = 2
icon = 'icons/effects/blood.dmi'
icon_state = "xfloor1"
diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm
index 30d74ba6970..20c32cca078 100644
--- a/code/game/objects/effects/decals/Cleanable/humans.dm
+++ b/code/game/objects/effects/decals/Cleanable/humans.dm
@@ -3,7 +3,6 @@
desc = "It's red and gooey. Perhaps it's the chef's cooking?"
gender = PLURAL
density = 0
- anchored = 1
layer = 2
icon = 'icons/effects/blood.dmi'
icon_state = "floor1"
@@ -39,7 +38,6 @@
desc = "Your instincts say you shouldn't be following these."
gender = PLURAL
density = 0
- anchored = 1
layer = 2
random_icon_states = null
var/list/existing_dirs = list()
@@ -55,7 +53,6 @@
desc = "They look bloody and gruesome."
gender = PLURAL
density = 0
- anchored = 1
layer = 2
icon = 'icons/effects/blood.dmi'
icon_state = "gibbl5"
@@ -88,18 +85,18 @@
/obj/effect/decal/cleanable/blood/gibs/proc/streak(list/directions)
- spawn (0)
- var/direction = pick(directions)
- for (var/i = 0, i < pick(1, 200; 2, 150; 3, 50; 4), i++)
- sleep(3)
- if (i > 0)
- var/obj/effect/decal/cleanable/blood/b = new /obj/effect/decal/cleanable/blood/splatter(src.loc)
- for(var/datum/disease/D in src.viruses)
- var/datum/disease/ND = D.Copy(1)
- b.viruses += ND
- ND.holder = b
- if (step_to(src, get_step(src, direction), 0))
- break
+ set waitfor = 0
+ var/direction = pick(directions)
+ for (var/i = 0, i < pick(1, 200; 2, 150; 3, 50; 4), i++)
+ sleep(3)
+ if (i > 0)
+ var/obj/effect/decal/cleanable/blood/b = new /obj/effect/decal/cleanable/blood/splatter(src.loc)
+ for(var/datum/disease/D in src.viruses)
+ var/datum/disease/ND = D.Copy(1)
+ b.viruses += ND
+ ND.holder = b
+ if (step_to(src, get_step(src, direction), 0))
+ break
/obj/effect/decal/cleanable/blood/drip
name = "drips of blood"
diff --git a/code/game/objects/effects/decals/Cleanable/misc.dm b/code/game/objects/effects/decals/Cleanable/misc.dm
index 21ded000917..008a0ab9084 100644
--- a/code/game/objects/effects/decals/Cleanable/misc.dm
+++ b/code/game/objects/effects/decals/Cleanable/misc.dm
@@ -3,7 +3,6 @@
desc = "Someone should clean that up."
gender = PLURAL
density = 0
- anchored = 1
layer = 2
icon = 'icons/obj/objects.dmi'
icon_state = "shards"
@@ -14,7 +13,6 @@
gender = PLURAL
icon = 'icons/obj/objects.dmi'
icon_state = "ash"
- anchored = 1
/obj/effect/decal/cleanable/ash/New()
..()
@@ -29,7 +27,6 @@
icon_state = "dirt"
gender = PLURAL
density = 0
- anchored = 1
layer = 2
mouse_opacity = 0
@@ -38,7 +35,6 @@
desc = "It's still good. Four second rule!"
gender = PLURAL
density = 0
- anchored = 1
layer = 2
icon = 'icons/effects/effects.dmi'
icon_state = "flour"
@@ -48,7 +44,6 @@
desc = "Jeez. I hope that's not for lunch."
gender = PLURAL
density = 0
- anchored = 1
layer = 2
luminosity = 1
icon = 'icons/effects/effects.dmi'
@@ -61,7 +56,6 @@
name = "cobweb"
desc = "Somebody should remove that."
density = 0
- anchored = 1
layer = 3
icon = 'icons/effects/effects.dmi'
icon_state = "cobweb1"
@@ -74,7 +68,6 @@
name = "gooey grey mass"
desc = "It looks like a melted... something."
density = 0
- anchored = 1
layer = 3
icon = 'icons/obj/chemical.dmi'
icon_state = "molten"
@@ -83,7 +76,6 @@
name = "cobweb"
desc = "Somebody should remove that."
density = 0
- anchored = 1
layer = 3
icon = 'icons/effects/effects.dmi'
icon_state = "cobweb2"
@@ -94,7 +86,6 @@
desc = "Gosh, how unpleasant."
gender = PLURAL
density = 0
- anchored = 1
layer = 2
icon = 'icons/effects/blood.dmi'
icon_state = "vomit_1"
@@ -111,7 +102,6 @@
name = "tomato smudge"
desc = "It's red."
density = 0
- anchored = 1
layer = 2
icon = 'icons/effects/tomatodecal.dmi'
random_icon_states = list("tomato_floor1", "tomato_floor2", "tomato_floor3")
@@ -120,7 +110,6 @@
name = "smashed egg"
desc = "Seems like this one won't hatch."
density = 0
- anchored = 1
layer = 2
icon = 'icons/effects/tomatodecal.dmi'
random_icon_states = list("smashed_egg1", "smashed_egg2", "smashed_egg3")
@@ -129,7 +118,6 @@
name = "smashed pie"
desc = "It's pie cream from a cream pie."
density = 0
- anchored = 1
layer = 2
icon = 'icons/effects/tomatodecal.dmi'
random_icon_states = list("smashed_pie")
@@ -140,7 +128,6 @@
gender = PLURAL
icon = 'icons/obj/objects.dmi'
icon_state = "ash"
- anchored = 1
/obj/effect/decal/cleanable/shreds
name = "shreds"
@@ -149,7 +136,6 @@
icon_state = "shreds"
gender = PLURAL
density = 0
- anchored = 1
layer = 2
/obj/effect/decal/cleanable/shreds/New()
diff --git a/code/game/objects/effects/decals/Cleanable/robots.dm b/code/game/objects/effects/decals/Cleanable/robots.dm
index becacd4d2ea..af2ff562590 100644
--- a/code/game/objects/effects/decals/Cleanable/robots.dm
+++ b/code/game/objects/effects/decals/Cleanable/robots.dm
@@ -5,7 +5,6 @@
desc = "It's a useless heap of junk... or is it?"
gender = PLURAL
density = 0
- anchored = 1
layer = 2
icon = 'icons/mob/robots.dmi'
icon_state = "gib1"
@@ -14,19 +13,19 @@
bloodiness = MAX_SHOE_BLOODINESS
/obj/effect/decal/cleanable/robot_debris/proc/streak(list/directions)
- spawn (0)
- var/direction = pick(directions)
- for (var/i = 0, i < pick(1, 200; 2, 150; 3, 50; 4), i++)
- sleep(3)
- if (i > 0)
- if (prob(40))
- new /obj/effect/decal/cleanable/oil/streak(src.loc)
- else if (prob(10))
- var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
- s.set_up(3, 1, src)
- s.start()
- if (step_to(src, get_step(src, direction), 0))
- break
+ set waitfor = 0
+ var/direction = pick(directions)
+ for (var/i = 0, i < pick(1, 200; 2, 150; 3, 50; 4), i++)
+ sleep(3)
+ if (i > 0)
+ if (prob(40))
+ new /obj/effect/decal/cleanable/oil/streak(src.loc)
+ else if (prob(10))
+ var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
+ s.set_up(3, 1, src)
+ s.start()
+ if (step_to(src, get_step(src, direction), 0))
+ break
/obj/effect/decal/cleanable/robot_debris/ex_act()
return
@@ -45,7 +44,6 @@
desc = "It's black and greasy. Looks like Beepsky made another mess."
gender = PLURAL
density = 0
- anchored = 1
layer = 2
icon = 'icons/mob/robots.dmi'
icon_state = "floor1"
diff --git a/code/game/objects/effects/decals/crayon.dm b/code/game/objects/effects/decals/crayon.dm
index 488a41be821..2f5bd9ea000 100644
--- a/code/game/objects/effects/decals/crayon.dm
+++ b/code/game/objects/effects/decals/crayon.dm
@@ -1,10 +1,9 @@
/obj/effect/decal/cleanable/crayon
name = "rune"
- desc = "A rune drawn in crayon."
+ desc = "Graffiti. Damn kids."
icon = 'icons/effects/crayondecal.dmi'
icon_state = "rune1"
layer = 2.1
- anchored = 1
var/do_icon_rotate = TRUE
/obj/effect/decal/cleanable/crayon/examine()
@@ -18,7 +17,7 @@
loc = location
name = e_name
- desc = "A [name] drawn in crayon."
+ desc = "A [name] vandalizing the station."
if(type == "poseur tag")
type = pick(gang_name_pool)
icon_state = type
@@ -30,6 +29,7 @@
color = main
+
/obj/effect/decal/cleanable/crayon/gang
layer = 3.6 //Harder to hide
do_icon_rotate = FALSE //These are designed to always face south, so no rotation please.
@@ -56,4 +56,4 @@
gang.territory -= territory.type
gang.territory_new -= territory.type
gang.territory_lost |= list(territory.type = territory.name)
- return ..()
\ No newline at end of file
+ return ..()
diff --git a/code/game/objects/effects/decals/decal.dm b/code/game/objects/effects/decals/decal.dm
index b9ffd568347..d9f8cde905d 100644
--- a/code/game/objects/effects/decals/decal.dm
+++ b/code/game/objects/effects/decals/decal.dm
@@ -1,6 +1,7 @@
/obj/effect/decal
name = "decal"
icon = 'icons/effects/effects.dmi'
+ anchored = 1
/obj/effect/decal/ex_act(severity, target)
qdel(src)
\ No newline at end of file
diff --git a/code/game/objects/effects/decals/misc.dm b/code/game/objects/effects/decals/misc.dm
index c8cb4754943..c65f5f494a0 100644
--- a/code/game/objects/effects/decals/misc.dm
+++ b/code/game/objects/effects/decals/misc.dm
@@ -3,13 +3,11 @@
icon = 'icons/mob/screen_gen.dmi'
icon_state = "arrow"
layer = 16
- anchored = 1
mouse_opacity = 0
// Used for spray that you spray at walls, tables, hydrovats etc
/obj/effect/decal/spraystill
density = 0
- anchored = 1
layer = 50
//Used by spraybottles.
diff --git a/code/game/objects/effects/decals/remains.dm b/code/game/objects/effects/decals/remains.dm
index f98e5922f82..834c3b4c7dc 100644
--- a/code/game/objects/effects/decals/remains.dm
+++ b/code/game/objects/effects/decals/remains.dm
@@ -2,7 +2,6 @@
name = "remains"
gender = PLURAL
icon = 'icons/effects/blood.dmi'
- anchored = 1
/obj/effect/decal/remains/human
desc = "They look like human remains. They have a strange aura about them."
diff --git a/code/game/objects/effects/effect_system/effects_smoke.dm b/code/game/objects/effects/effect_system/effects_smoke.dm
index cb5f4de5cdd..a3b42392f70 100644
--- a/code/game/objects/effects/effect_system/effects_smoke.dm
+++ b/code/game/objects/effects/effect_system/effects_smoke.dm
@@ -163,9 +163,12 @@
T.air_update_turf()
for(var/obj/effect/hotspot/H in T)
qdel(H)
- if(G.toxins)
- G.nitrogen += (G.toxins)
- G.toxins = 0
+ var/list/G_gases = G.gases
+ if(G_gases["plasma"])
+ G.assert_gas("n2")
+ G_gases["n2"][MOLES] += (G_gases["plasma"][MOLES])
+ G_gases["plasma"][MOLES] = 0
+ G.garbage_collect()
for(var/obj/machinery/atmospherics/components/unary/U in T)
if(!isnull(U.welded) && !U.welded) //must be an unwelded vent pump or vent scrubber.
U.welded = 1
diff --git a/code/game/objects/effects/overlays.dm b/code/game/objects/effects/overlays.dm
index 5b9f2917d15..3e5c5a29f55 100644
--- a/code/game/objects/effects/overlays.dm
+++ b/code/game/objects/effects/overlays.dm
@@ -39,6 +39,16 @@
spawn(duration)
qdel(src)
+/obj/effect/overlay/temp/guardian
+ randomdir = 0
+
+/obj/effect/overlay/temp/guardian/phase
+ duration = 5
+ icon_state = "phasein"
+
+/obj/effect/overlay/temp/guardian/phase/out
+ icon_state = "phaseout"
+
/obj/effect/overlay/temp/cult
randomdir = 0
duration = 10
@@ -50,7 +60,7 @@
/obj/effect/overlay/temp/cult/turf
name = "unholy glow"
icon_state = "wallglow"
- layer = 2.01
+ layer = TURF_LAYER + 0.07
/obj/effect/overlay/temp/cult/turf/floor
icon_state = "floorglow"
diff --git a/code/game/objects/explosion.dm b/code/game/objects/explosion.dm
index 6efa75f3e21..e1a4efa2a72 100644
--- a/code/game/objects/explosion.dm
+++ b/code/game/objects/explosion.dm
@@ -14,9 +14,19 @@
/proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog = 1, ignorecap = 0, flame_range = 0 ,silent = 0)
+ set waitfor = 0
src = null //so we don't abort once src is deleted
epicenter = get_turf(epicenter)
+ //DO NOT REMOVE THIS SLEEP, IT BREAKS THINGS
+ //not sleeping causes us to ex_act() the thing that triggered the explosion
+ //doing that might cause it to trigger another explosion
+ //this is bad
+ //I would make this not ex_act the thing that triggered the explosion,
+ //but everything that explodes gives us their loc or a get_turf()
+ //and somethings expect us to ex_act them so they can qdel()
+ sleep(1) //tldr, let the calling proc call qdel(src) before we explode
+
// Archive the uncapped explosion for the doppler array
var/orig_dev_range = devastation_range
var/orig_heavy_range = heavy_impact_range
@@ -30,126 +40,125 @@
flash_range = min (MAX_EX_FLASH_RANGE, flash_range)
flame_range = min (MAX_EX_FLAME_RANGE, flame_range)
- spawn(0)
- var/start = world.timeofday
- if(!epicenter) return
+ var/start = world.timeofday
+ if(!epicenter) return
- var/max_range = max(devastation_range, heavy_impact_range, light_impact_range, flame_range)
- var/list/cached_exp_block = list()
+ var/max_range = max(devastation_range, heavy_impact_range, light_impact_range, flame_range)
+ var/list/cached_exp_block = list()
- if(adminlog)
- message_admins("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range], [flame_range]) in area [epicenter.loc.name] ([epicenter.x],[epicenter.y],[epicenter.z])")
- log_game("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range], [flame_range]) in area [epicenter.loc.name] ([epicenter.x],[epicenter.y],[epicenter.z])")
+ if(adminlog)
+ message_admins("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range], [flame_range]) in area [epicenter.loc.name] ([epicenter.x],[epicenter.y],[epicenter.z])")
+ log_game("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range], [flame_range]) in area [epicenter.loc.name] ([epicenter.x],[epicenter.y],[epicenter.z])")
- // Play sounds; we want sounds to be different depending on distance so we will manually do it ourselves.
- // Stereo users will also hear the direction of the explosion!
+ // Play sounds; we want sounds to be different depending on distance so we will manually do it ourselves.
+ // Stereo users will also hear the direction of the explosion!
- // Calculate far explosion sound range. Only allow the sound effect for heavy/devastating explosions.
- // 3/7/14 will calculate to 80 + 35
+ // Calculate far explosion sound range. Only allow the sound effect for heavy/devastating explosions.
+ // 3/7/14 will calculate to 80 + 35
- var/far_dist = 0
- far_dist += heavy_impact_range * 5
- far_dist += devastation_range * 20
+ var/far_dist = 0
+ far_dist += heavy_impact_range * 5
+ far_dist += devastation_range * 20
- if(!silent)
- var/frequency = get_rand_frequency()
- for(var/mob/M in player_list)
- // Double check for client
- if(M && M.client)
- var/turf/M_turf = get_turf(M)
- if(M_turf && M_turf.z == epicenter.z)
- var/dist = get_dist(M_turf, epicenter)
- // If inside the blast radius + world.view - 2
- if(dist <= round(max_range + world.view - 2, 1))
- M.playsound_local(epicenter, get_sfx("explosion"), 100, 1, frequency, falloff = 5) // get_sfx() is so that everyone gets the same sound
- // You hear a far explosion if you're outside the blast radius. Small bombs shouldn't be heard all over the station.
- else if(dist <= far_dist)
- var/far_volume = Clamp(far_dist, 30, 50) // Volume is based on explosion size and dist
- far_volume += (dist <= far_dist * 0.5 ? 50 : 0) // add 50 volume if the mob is pretty close to the explosion
- M.playsound_local(epicenter, 'sound/effects/explosionfar.ogg', far_volume, 1, frequency, falloff = 5)
+ if(!silent)
+ var/frequency = get_rand_frequency()
+ for(var/mob/M in player_list)
+ // Double check for client
+ if(M && M.client)
+ var/turf/M_turf = get_turf(M)
+ if(M_turf && M_turf.z == epicenter.z)
+ var/dist = get_dist(M_turf, epicenter)
+ // If inside the blast radius + world.view - 2
+ if(dist <= round(max_range + world.view - 2, 1))
+ M.playsound_local(epicenter, get_sfx("explosion"), 100, 1, frequency, falloff = 5) // get_sfx() is so that everyone gets the same sound
+ // You hear a far explosion if you're outside the blast radius. Small bombs shouldn't be heard all over the station.
+ else if(dist <= far_dist)
+ var/far_volume = Clamp(far_dist, 30, 50) // Volume is based on explosion size and dist
+ far_volume += (dist <= far_dist * 0.5 ? 50 : 0) // add 50 volume if the mob is pretty close to the explosion
+ M.playsound_local(epicenter, 'sound/effects/explosionfar.ogg', far_volume, 1, frequency, falloff = 5)
- //postpone processing for a bit
- var/postponeCycles = max(round(devastation_range/8),1)
- SSlighting.postpone(postponeCycles)
- SSmachine.postpone(postponeCycles)
+ //postpone processing for a bit
+ var/postponeCycles = max(round(devastation_range/8),1)
+ SSlighting.postpone(postponeCycles)
+ SSmachine.postpone(postponeCycles)
- if(heavy_impact_range > 1)
- var/datum/effect_system/explosion/E = new/datum/effect_system/explosion()
- E.set_up(epicenter)
- E.start()
+ if(heavy_impact_range > 1)
+ var/datum/effect_system/explosion/E = new/datum/effect_system/explosion()
+ E.set_up(epicenter)
+ E.start()
- var/x0 = epicenter.x
- var/y0 = epicenter.y
- var/z0 = epicenter.z
+ var/x0 = epicenter.x
+ var/y0 = epicenter.y
+ var/z0 = epicenter.z
- var/list/affected_turfs = trange(max_range, epicenter)
+ var/list/affected_turfs = trange(max_range, epicenter)
+
+ if(config.reactionary_explosions)
+ for(var/turf/T in affected_turfs) // we cache the explosion block rating of every turf in the explosion area
+ cached_exp_block[T] = 0
+ if(T.density && T.explosion_block)
+ cached_exp_block[T] += T.explosion_block
+
+ for(var/obj/machinery/door/D in T)
+ if(D.density && D.explosion_block)
+ cached_exp_block[T] += D.explosion_block
+
+ for(var/obj/structure/window/W in T)
+ if(W.reinf && W.fulltile)
+ cached_exp_block[T] += W.explosion_block
+
+ for(var/obj/effect/blob/B in T)
+ cached_exp_block[T] += B.explosion_block
+
+ for(var/turf/T in affected_turfs)
+
+ var/dist = cheap_hypotenuse(T.x, T.y, x0, y0)
if(config.reactionary_explosions)
- for(var/turf/T in affected_turfs) // we cache the explosion block rating of every turf in the explosion area
- cached_exp_block[T] = 0
- if(T.density && T.explosion_block)
- cached_exp_block[T] += T.explosion_block
+ var/turf/Trajectory = T
+ while(Trajectory != epicenter)
+ Trajectory = get_step_towards(Trajectory, epicenter)
+ dist += cached_exp_block[Trajectory]
- for(var/obj/machinery/door/D in T)
- if(D.density && D.explosion_block)
- cached_exp_block[T] += D.explosion_block
+ var/flame_dist = 0
+ var/throw_dist = dist
- for(var/obj/structure/window/W in T)
- if(W.reinf && W.fulltile)
- cached_exp_block[T] += W.explosion_block
+ if(dist < flame_range)
+ flame_dist = 1
- for(var/obj/effect/blob/B in T)
- cached_exp_block[T] += B.explosion_block
+ if(dist < devastation_range) dist = 1
+ else if(dist < heavy_impact_range) dist = 2
+ else if(dist < light_impact_range) dist = 3
+ else dist = 0
- for(var/turf/T in affected_turfs)
+ //------- TURF FIRES -------
- var/dist = cheap_hypotenuse(T.x, T.y, x0, y0)
+ if(T)
+ if(flame_dist && prob(40) && !istype(T, /turf/space) && !T.density)
+ PoolOrNew(/obj/effect/hotspot, T) //Mostly for ambience!
+ if(dist > 0)
+ T.ex_act(dist)
- if(config.reactionary_explosions)
- var/turf/Trajectory = T
- while(Trajectory != epicenter)
- Trajectory = get_step_towards(Trajectory, epicenter)
- dist += cached_exp_block[Trajectory]
+ //--- THROW ITEMS AROUND ---
- var/flame_dist = 0
- var/throw_dist = dist
-
- if(dist < flame_range)
- flame_dist = 1
-
- if(dist < devastation_range) dist = 1
- else if(dist < heavy_impact_range) dist = 2
- else if(dist < light_impact_range) dist = 3
- else dist = 0
-
- //------- TURF FIRES -------
-
- if(T)
- if(flame_dist && prob(40) && !istype(T, /turf/space) && !T.density)
- PoolOrNew(/obj/effect/hotspot, T) //Mostly for ambience!
- if(dist > 0)
- T.ex_act(dist)
-
- //--- THROW ITEMS AROUND ---
-
- var/throw_dir = get_dir(epicenter,T)
- for(var/obj/item/I in T)
- if(I && !I.anchored)
- var/throw_range = rand(throw_dist, max_range)
- var/turf/throw_at = get_ranged_target_turf(I, throw_dir, throw_range)
- I.throw_speed = 4 //Temporarily change their throw_speed for embedding purposes (Reset when it finishes throwing, regardless of hitting anything)
- I.throw_at_fast(throw_at, throw_range, 2)//Throw it at 2 speed, this is purely visual anyway.
+ var/throw_dir = get_dir(epicenter,T)
+ for(var/obj/item/I in T)
+ if(I && !I.anchored)
+ var/throw_range = rand(throw_dist, max_range)
+ var/turf/throw_at = get_ranged_target_turf(I, throw_dir, throw_range)
+ I.throw_speed = 4 //Temporarily change their throw_speed for embedding purposes (Reset when it finishes throwing, regardless of hitting anything)
+ I.throw_at_fast(throw_at, throw_range, 2)//Throw it at 2 speed, this is purely visual anyway.
- var/took = (world.timeofday-start)/10
- //You need to press the DebugGame verb to see these now....they were getting annoying and we've collected a fair bit of data. Just -test- changes to explosion code using this please so we can compare
- if(Debug2) world.log << "## DEBUG: Explosion([x0],[y0],[z0])(d[devastation_range],h[heavy_impact_range],l[light_impact_range]): Took [took] seconds."
+ var/took = (world.timeofday-start)/10
+ //You need to press the DebugGame verb to see these now....they were getting annoying and we've collected a fair bit of data. Just -test- changes to explosion code using this please so we can compare
+ if(Debug2) world.log << "## DEBUG: Explosion([x0],[y0],[z0])(d[devastation_range],h[heavy_impact_range],l[light_impact_range]): Took [took] seconds."
+
+ //Machines which report explosions.
+ for(var/array in doppler_arrays)
+ var/obj/machinery/doppler_array/A = array
+ A.sense_explosion(epicenter,devastation_range,heavy_impact_range,light_impact_range,took,orig_dev_range,orig_heavy_range,orig_light_range)
- //Machines which report explosions.
- for(var/array in doppler_arrays)
- var/obj/machinery/doppler_array/A = array
- A.sense_explosion(epicenter,devastation_range,heavy_impact_range,light_impact_range,took,orig_dev_range,orig_heavy_range,orig_light_range)
-
return 1
diff --git a/code/game/objects/items/candle.dm b/code/game/objects/items/candle.dm
index 1171c646104..0d26ff0d940 100644
--- a/code/game/objects/items/candle.dm
+++ b/code/game/objects/items/candle.dm
@@ -59,8 +59,7 @@
if(!src.lit)
src.lit = 1
//src.damtype = "fire"
- for(var/mob/O in viewers(usr, null))
- O.show_message(flavor_text, 1)
+ usr.visible_message(flavor_text)
SetLuminosity(CANDLE_LUMINOSITY)
if(!infinite)
SSobj.processing |= src
diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm
index e49f4b19ace..34d8002ea9b 100644
--- a/code/game/objects/items/devices/PDA/PDA.dm
+++ b/code/game/objects/items/devices/PDA/PDA.dm
@@ -414,6 +414,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
dat += "Unable to obtain a reading.
"
else
var/datum/gas_mixture/environment = T.return_air()
+ var/list/env_gases = environment.gases
var/pressure = environment.return_pressure()
var/total_moles = environment.total_moles()
@@ -421,17 +422,11 @@ var/global/list/obj/item/device/pda/PDAs = list()
dat += "Air Pressure: [round(pressure,0.1)] kPa
"
if (total_moles)
- var/o2_level = environment.oxygen/total_moles
- var/n2_level = environment.nitrogen/total_moles
- var/co2_level = environment.carbon_dioxide/total_moles
- var/plasma_level = environment.toxins/total_moles
- var/unknown_level = 1-(o2_level+n2_level+co2_level+plasma_level)
- dat += "Nitrogen: [round(n2_level*100)]%
"
- dat += "Oxygen: [round(o2_level*100)]%
"
- dat += "Carbon Dioxide: [round(co2_level*100)]%
"
- dat += "Plasma: [round(plasma_level*100)]%
"
- if(unknown_level > 0.01)
- dat += "OTHER: [round(unknown_level)]%
"
+ for(var/id in env_gases)
+ var/gas_level = env_gases[id][MOLES]/total_moles
+ if(id in hardcoded_gases || gas_level > 0.01)
+ dat += "[env_gases[id][GAS_NAME]]: [round(gas_level*100)]%
"
+
dat += "Temperature: [round(environment.temperature-T0C)]°C
"
dat += "
"
@@ -778,7 +773,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
/obj/item/device/pda/proc/show_to_ghosts(mob/living/user, datum/data_pda_msg/msg,multiple = 0)
for(var/mob/M in player_list)
if(isobserver(M) && M.client && (M.client.prefs.chat_toggles & CHAT_GHOSTPDA))
- M.show_message("(F) [msg.sender] PDA Message --> [multiple ? "Everyone" : msg.recipient]: [msg.message][msg.get_photo_ref()]")
+ M << "(F) [msg.sender] PDA Message --> [multiple ? "Everyone" : msg.recipient]: [msg.message][msg.get_photo_ref()]"
/obj/item/device/pda/proc/can_send(obj/item/device/pda/P)
if(!P || qdeleted(P) || P.toff)
@@ -944,9 +939,9 @@ var/global/list/obj/item/device/pda/PDAs = list()
switch(scanmode)
if(1)
- user.visible_message(text("[] has analyzed []'s vitals!", user, C))
+ C.visible_message("[user] has analyzed [C]'s vitals!")
healthscan(user, C, 1)
- src.add_fingerprint(user)
+ add_fingerprint(user)
if(2)
// Unused
diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm
index b6401056796..ff8428ffb48 100644
--- a/code/game/objects/items/devices/PDA/cart.dm
+++ b/code/game/objects/items/devices/PDA/cart.dm
@@ -241,11 +241,12 @@
/obj/item/weapon/cartridge/proc/print_to_host(text)
if (!istype(loc, /obj/item/device/pda))
return
- loc:cart = text
+ var/obj/item/device/pda/P = loc
+ P.cart = text
for (var/mob/M in viewers(1, loc.loc))
if (M.client && M.machine == loc)
- loc:attack_self(M)
+ P.attack_self(M)
return
@@ -273,6 +274,7 @@
/obj/item/weapon/cartridge/proc/generate_menu(mob/user)
switch(mode)
if(40) //signaller
+ var/obj/item/radio/integrated/signal/S = radio
menu = "
Remote Signaling System
"
menu += {"
@@ -280,14 +282,14 @@
Frequency:
-
-
-[format_frequency(radio:frequency)]
+[format_frequency(S.frequency)]
+
+
Code:
-
-
-[radio:code]
+[S.code]
+
+
"}
if (41) //crew manifest
@@ -611,7 +613,7 @@ Code:
active1 = find_record("id", href_list["target"], data_core.general)
if(active1)
active2 = find_record("id", href_list["target"], data_core.medical)
- loc:mode = 441
+ pda.mode = 441
mode = 441
if(!active2)
active1 = null
@@ -620,25 +622,28 @@ Code:
active1 = find_record("id", href_list["target"], data_core.general)
if(active1)
active3 = find_record("id", href_list["target"], data_core.security)
- loc:mode = 451
+ pda.mode = 451
mode = 451
if(!active3)
active1 = null
if("Send Signal")
spawn( 0 )
- radio:send_signal("ACTIVATE")
+ var/obj/item/radio/integrated/signal/S = radio
+ S.send_signal("ACTIVATE")
return
if("Signal Frequency")
- var/new_frequency = sanitize_frequency(radio:frequency + text2num(href_list["sfreq"]))
- radio:set_frequency(new_frequency)
+ var/obj/item/radio/integrated/signal/S = radio
+ var/new_frequency = sanitize_frequency(S.frequency + text2num(href_list["sfreq"]))
+ S.set_frequency(new_frequency)
if("Signal Code")
- radio:code += text2num(href_list["scode"])
- radio:code = round(radio:code)
- radio:code = min(100, radio:code)
- radio:code = max(1, radio:code)
+ var/obj/item/radio/integrated/signal/S = radio
+ S.code += text2num(href_list["scode"])
+ S.code = round(S.code)
+ S.code = min(100, S.code)
+ S.code = max(1, S.code)
if("Status")
switch(href_list["statdisp"])
@@ -657,7 +662,7 @@ Code:
if("Power Select")
var/pnum = text2num(href_list["target"])
powmonitor = powermonitors[pnum]
- loc:mode = 433
+ pda.mode = 433
mode = 433
if("Supply Orders")
@@ -762,4 +767,4 @@ Code:
menu += "No bots found.
"
return
- return menu
\ No newline at end of file
+ return menu
diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm
index 5e6a85914ed..a7b4d29e2e1 100644
--- a/code/game/objects/items/devices/chameleonproj.dm
+++ b/code/game/objects/items/devices/chameleonproj.dm
@@ -11,11 +11,12 @@
origin_tech = "syndicate=4;magnets=4"
var/can_use = 1
var/obj/effect/dummy/chameleon/active_dummy = null
- var/saved_item = /obj/item/weapon/cigbutt
- var/saved_icon = 'icons/obj/clothing/masks.dmi'
- var/saved_icon_state = "cigbutt"
- var/saved_overlays = null
- var/saved_underlays = null
+ var/saved_appearance = null
+
+/obj/item/device/chameleon/New()
+ ..()
+ var/obj/item/weapon/cigbutt/butt = /obj/item/weapon/cigbutt
+ saved_appearance = initial(butt.appearance)
/obj/item/device/chameleon/dropped()
disrupt()
@@ -32,14 +33,13 @@
if(istype(target,/obj/item) && !istype(target, /obj/item/weapon/disk/nuclear))
playsound(get_turf(src), 'sound/weapons/flash.ogg', 100, 1, -6)
user << "Scanned [target]."
- saved_item = target.type
- saved_icon = target.icon
- saved_icon_state = target.icon_state
- saved_overlays = target.overlays
- saved_underlays = target.underlays
+ var/obj/temp = new/obj()
+ temp.appearance = target.appearance
+ temp.layer = initial(target.layer) // scanning things in your inventory
+ saved_appearance = temp.appearance
/obj/item/device/chameleon/proc/toggle()
- if(!can_use || !saved_item) return
+ if(!can_use || !saved_appearance) return
if(active_dummy)
eject_all()
playsound(get_turf(src), 'sound/effects/pop.ogg', 100, 1, -6)
@@ -53,11 +53,8 @@
qdel(T)
else
playsound(get_turf(src), 'sound/effects/pop.ogg', 100, 1, -6)
- var/obj/O = new saved_item(src)
- if(!O) return
var/obj/effect/dummy/chameleon/C = new/obj/effect/dummy/chameleon(usr.loc)
- C.activate(O, usr, saved_icon, saved_icon_state, saved_overlays, saved_underlays, src)
- qdel(O)
+ C.activate(usr, saved_appearance, src)
usr << "You activate \the [src]."
var/obj/effect/overlay/T = new/obj/effect/overlay(get_turf(src))
T.icon = 'icons/effects/effects.dmi'
@@ -89,18 +86,11 @@
name = ""
desc = ""
density = 0
- anchored = 1
var/can_move = 1
var/obj/item/device/chameleon/master = null
-/obj/effect/dummy/chameleon/proc/activate(obj/O, mob/M, new_icon, new_iconstate, new_overlays, new_underlays, obj/item/device/chameleon/C)
- name = O.name
- desc = O.desc
- icon = new_icon
- icon_state = new_iconstate
- overlays = new_overlays
- underlays = new_underlays
- dir = O.dir
+/obj/effect/dummy/chameleon/proc/activate(mob/M, saved_appearance, obj/item/device/chameleon/C)
+ appearance = saved_appearance
M.loc = src
master = C
master.active_dummy = src
diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm
index 55c4ae39336..076c4385658 100644
--- a/code/game/objects/items/devices/radio/intercom.dm
+++ b/code/game/objects/items/devices/radio/intercom.dm
@@ -20,8 +20,7 @@
/obj/item/device/radio/intercom/attack_ai(mob/user)
src.add_fingerprint(user)
- spawn (0)
- attack_self(user)
+ attack_self(user)
/obj/item/device/radio/intercom/attack_paw(mob/user)
return src.attack_hand(user)
@@ -29,8 +28,7 @@
/obj/item/device/radio/intercom/attack_hand(mob/user)
src.add_fingerprint(user)
- spawn (0)
- attack_self(user)
+ attack_self(user)
/obj/item/device/radio/intercom/receive_range(freq, level)
if (!on)
diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm
index 954302bf055..639e59c9008 100644
--- a/code/game/objects/items/devices/radio/radio.dm
+++ b/code/game/objects/items/devices/radio/radio.dm
@@ -543,10 +543,10 @@
return
b_stat = !( b_stat )
if(!istype(src, /obj/item/device/radio/beacon))
- if (b_stat)
- user.show_message("The radio can now be attached and modified!")
+ if(b_stat)
+ user << "The radio can now be attached and modified!"
else
- user.show_message("The radio can no longer be modified or attached!")
+ user << "The radio can no longer be modified or attached!"
updateDialog()
//Foreach goto(83)
add_fingerprint(user)
diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm
index 32fdb40f65b..6a76998e260 100644
--- a/code/game/objects/items/devices/scanners.dm
+++ b/code/game/objects/items/devices/scanners.dm
@@ -114,7 +114,8 @@ MASS SPECTROMETER
// Used by the PDA medical scanner too
/proc/healthscan(mob/living/user, mob/living/M, mode = 1)
-
+ if(user.stat || user.eye_blind)
+ return
//Damage specifics
var/oxy_loss = M.getOxyLoss()
var/tox_loss = M.getToxLoss()
@@ -199,8 +200,8 @@ MASS SPECTROMETER
if(CI.status == ORGAN_ROBOTIC)
implant_detect += "[H.name] is modified with a [CI.name].
"
if(implant_detect)
- user.show_message("Detected cybernetic modifications:")
- user.show_message("[implant_detect]")
+ user << "Detected cybernetic modifications:"
+ user << "[implant_detect]"
/proc/chemscan(mob/living/user, mob/living/M)
if(ishuman(M))
@@ -250,11 +251,13 @@ MASS SPECTROMETER
/obj/item/device/analyzer/attack_self(mob/user)
- if (user.stat)
+ add_fingerprint(user)
+
+ if (user.stat || user.eye_blind)
return
var/turf/location = user.loc
- if (!( istype(location, /turf) ))
+ if(!istype(location))
return
var/datum/gas_mixture/environment = location.return_air()
@@ -262,43 +265,46 @@ MASS SPECTROMETER
var/pressure = environment.return_pressure()
var/total_moles = environment.total_moles()
- user.show_message("Results:", 1)
+ user << "Results:"
if(abs(pressure - ONE_ATMOSPHERE) < 10)
- user.show_message("Pressure: [round(pressure,0.1)] kPa", 1)
+ user << "Pressure: [round(pressure,0.1)] kPa"
else
- user.show_message("Pressure: [round(pressure,0.1)] kPa", 1)
+ user << "Pressure: [round(pressure,0.1)] kPa"
if(total_moles)
- var/o2_concentration = environment.oxygen/total_moles
- var/n2_concentration = environment.nitrogen/total_moles
- var/co2_concentration = environment.carbon_dioxide/total_moles
- var/plasma_concentration = environment.toxins/total_moles
+ var/list/env_gases = environment.gases
+
+ environment.assert_gases(arglist(hardcoded_gases))
+ var/o2_concentration = env_gases["o2"][MOLES]/total_moles
+ var/n2_concentration = env_gases["n2"][MOLES]/total_moles
+ var/co2_concentration = env_gases["co2"][MOLES]/total_moles
+ var/plasma_concentration = env_gases["plasma"][MOLES]/total_moles
+ environment.garbage_collect()
- var/unknown_concentration = 1-(o2_concentration+n2_concentration+co2_concentration+plasma_concentration)
if(abs(n2_concentration - N2STANDARD) < 20)
- user.show_message("Nitrogen: [round(n2_concentration*100)] %", 1)
+ user << "Nitrogen: [round(n2_concentration*100)] %"
else
- user.show_message("Nitrogen: [round(n2_concentration*100)] %", 1)
+ user << "Nitrogen: [round(n2_concentration*100)] %"
if(abs(o2_concentration - O2STANDARD) < 2)
- user.show_message("Oxygen: [round(o2_concentration*100)] %", 1)
+ user << "Oxygen: [round(o2_concentration*100)] %"
else
- user.show_message("Oxygen: [round(o2_concentration*100)] %", 1)
+ user << "Oxygen: [round(o2_concentration*100)] %"
if(co2_concentration > 0.01)
- user.show_message("CO2: [round(co2_concentration*100)] %", 1)
+ user << "CO2: [round(co2_concentration*100)] %"
else
- user.show_message("CO2: [round(co2_concentration*100)] %", 1)
+ user << "CO2: [round(co2_concentration*100)] %"
if(plasma_concentration > 0.01)
- user.show_message("Plasma: [round(plasma_concentration*100)] %", 1)
+ user << "Plasma: [round(plasma_concentration*100)] %"
- if(unknown_concentration > 0.01)
- user.show_message("Unknown: [round(unknown_concentration*100)] %", 1)
+ for(var/id in env_gases)
+ if(id in hardcoded_gases)
+ continue
+ var/gas_concentration = env_gases[id][MOLES]/total_moles
+ user << "[env_gases[id][GAS_NAME]]: [round(gas_concentration*100)] %"
+ user << "Temperature: [round(environment.temperature-T0C)] °C"
- user.show_message("Temperature: [round(environment.temperature-T0C)] °C", 1)
-
- src.add_fingerprint(user)
- return
/obj/item/device/mass_spectrometer
desc = "A hand-held mass spectrometer which identifies trace chemicals in a blood sample."
@@ -327,7 +333,7 @@ MASS SPECTROMETER
icon_state = initial(icon_state)
/obj/item/device/mass_spectrometer/attack_self(mob/user)
- if (user.stat)
+ if (user.stat || user.eye_blind)
return
if (crit_fail)
user << "This device has critically failed and is no longer functional!"
@@ -340,7 +346,7 @@ MASS SPECTROMETER
for(var/datum/reagent/R in reagents.reagent_list)
if(R.id != "blood")
reagents.clear_reagents()
- user.show_message("The sample was contaminated! Please insert another sample.", 1)
+ user << "The sample was contaminated! Please insert another sample."
return
else
blood_traces = params2list(R.data["trace_chem"])
@@ -367,7 +373,7 @@ MASS SPECTROMETER
dat += ""
user << dat
reagents.clear_reagents()
- return
+
/obj/item/device/mass_spectrometer/adv
name = "advanced mass-spectrometer"
@@ -389,32 +395,34 @@ MASS SPECTROMETER
materials = list(MAT_METAL=30, MAT_GLASS=20)
/obj/item/device/slime_scanner/attack(mob/living/M, mob/living/user)
+ if(user.stat || user.eye_blind)
+ return
if (!isslime(M))
- user.show_message("This device can only scan slimes!", 1)
+ user << "This device can only scan slimes!"
return
var/mob/living/simple_animal/slime/T = M
- user.show_message("Slime scan results:", 1)
- user.show_message(text("[T.colour] [] slime", T.is_adult ? "adult" : "baby"), 1)
- user.show_message(text("Nutrition: [T.nutrition]/[]", T.get_max_nutrition()), 1)
+ user << "Slime scan results:"
+ user << "[T.colour] [T.is_adult ? "adult" : "baby"] slime"
+ user << "Nutrition: [T.nutrition]/[T.get_max_nutrition()]"
if (T.nutrition < T.get_starve_nutrition())
- user.show_message("Warning: slime is starving!", 1)
+ user << "Warning: slime is starving!"
else if (T.nutrition < T.get_hunger_nutrition())
- user.show_message("Warning: slime is hungry", 1)
- user.show_message("Electric change strength: [T.powerlevel]", 1)
- user.show_message("Health: [T.health]", 1)
+ user << "Warning: slime is hungry"
+ user << "Electric change strength: [T.powerlevel]"
+ user << "Health: [T.health]"
if (T.slime_mutation[4] == T.colour)
- user.show_message("This slime does not evolve any further.", 1)
+ user << "This slime does not evolve any further."
else
if (T.slime_mutation[3] == T.slime_mutation[4])
if (T.slime_mutation[2] == T.slime_mutation[1])
- user.show_message("Possible mutation: [T.slime_mutation[3]]", 1)
- user.show_message("Genetic destability: [T.mutation_chance/2] % chance of mutation on splitting", 1)
+ user << "Possible mutation: [T.slime_mutation[3]]"
+ user << "Genetic destability: [T.mutation_chance/2] % chance of mutation on splitting"
else
- user.show_message("Possible mutations: [T.slime_mutation[1]], [T.slime_mutation[2]], [T.slime_mutation[3]] (x2)", 1)
- user.show_message("Genetic destability: [T.mutation_chance] % chance of mutation on splitting", 1)
+ user << "Possible mutations: [T.slime_mutation[1]], [T.slime_mutation[2]], [T.slime_mutation[3]] (x2)"
+ user << "Genetic destability: [T.mutation_chance] % chance of mutation on splitting"
else
- user.show_message("Possible mutations: [T.slime_mutation[1]], [T.slime_mutation[2]], [T.slime_mutation[3]], [T.slime_mutation[4]]", 1)
- user.show_message("Genetic destability: [T.mutation_chance] % chance of mutation on splitting", 1)
+ user << "Possible mutations: [T.slime_mutation[1]], [T.slime_mutation[2]], [T.slime_mutation[3]], [T.slime_mutation[4]]"
+ user << "Genetic destability: [T.mutation_chance] % chance of mutation on splitting"
if (T.cores > 1)
- user.show_message("Anomalious slime core amount detected", 1)
- user.show_message("Growth progress: [T.amount_grown]/[SLIME_EVOLUTION_THRESHOLD]", 1)
+ user << "Anomalious slime core amount detected"
+ user << "Growth progress: [T.amount_grown]/[SLIME_EVOLUTION_THRESHOLD]"
diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm
index f217989a655..af8237a5e70 100644
--- a/code/game/objects/items/devices/traitordevices.dm
+++ b/code/game/objects/items/devices/traitordevices.dm
@@ -40,16 +40,15 @@ effective or pretty fucking useless.
add_logs(user, null, "knocked down people in the area", src)
for(var/mob/living/carbon/human/M in ultra_range(10, user, 1))
- spawn()
- if(prob(50))
+ if(prob(50))
- M.Weaken(rand(10,20))
- if(prob(25))
- M.Stun(rand(5,10))
- M << "You feel a tremendous, paralyzing wave flood your mind."
+ M.Weaken(rand(10,20))
+ if(prob(25))
+ M.Stun(rand(5,10))
+ M << "You feel a tremendous, paralyzing wave flood your mind."
- else
- M << "You feel a sudden, electric jolt travel through your head."
+ else
+ M << "You feel a sudden, electric jolt travel through your head."
playsound(src.loc, 'sound/misc/interference.ogg', 50, 1)
user << "You trigger [src]."
diff --git a/code/game/objects/items/devices/uplinks.dm b/code/game/objects/items/devices/uplinks.dm
index 968ac08cf1d..218c7c72213 100644
--- a/code/game/objects/items/devices/uplinks.dm
+++ b/code/game/objects/items/devices/uplinks.dm
@@ -175,14 +175,15 @@ var/list/world_uplinks = list()
return 0
//Refund proc for the borg teleporter (later I'll make a general refund proc if there is demand for it)
/obj/item/device/radio/uplink/attackby(obj/item/weapon/W, mob/user, params)
- if(istype(W, /obj/item/weapon/antag_spawner/nuke_ops))
- var/obj/item/weapon/antag_spawner/nuke_ops/S = W
- if(!S.used)
- hidden_uplink.uses += S.TC_cost
- qdel(S)
- user << "Teleporter refunded."
- else
- user << "This teleporter is already used!"
+ if(istype(W))
+ for(var/path in subtypesof(/datum/uplink_item))
+ var/datum/uplink_item/D = path
+ if(initial(D.item) == W.type && initial(D.refundable))
+ hidden_uplink.uses += (D.cost)
+ hidden_uplink.used_TC -= initial(D.cost)
+ user << "[W] refunded."
+ qdel(W)
+ return
// PRESET UPLINKS
// A collection of preset uplinks.
diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm
index 46aebec6018..c1c8fef41a7 100644
--- a/code/game/objects/items/stacks/stack.dm
+++ b/code/game/objects/items/stacks/stack.dm
@@ -17,11 +17,14 @@
var/is_cyborg = 0 // It's 1 if module is used by a cyborg, and uses its storage
var/datum/robot_energy_storage/source
var/cost = 1 // How much energy from storage it costs
+ var/merge_type = null // This path and its children should merge with this stack, defaults to src.type
/obj/item/stack/New(var/loc, var/amount=null)
..()
if (amount)
src.amount = amount
+ if(!merge_type)
+ merge_type = src.type
return
/obj/item/stack/Destroy()
@@ -208,19 +211,19 @@
S.add(transfer)
/obj/item/stack/Crossed(obj/o)
- if(istype(o, src.type) && !o.throwing)
+ if(istype(o, merge_type) && !o.throwing)
merge(o)
return ..()
/obj/item/stack/hitby(atom/movable/AM, skip, hitpush)
- if(istype(AM, src.type))
+ if(istype(AM, merge_type))
merge(AM)
return ..()
/obj/item/stack/attack_hand(mob/user)
if (user.get_inactive_hand() == src)
if(zero_amount()) return
- var/obj/item/stack/F = new src.type( user, 1)
+ var/obj/item/stack/F = new src.type(user, 1)
. = F
F.copy_evidences(src)
user.put_in_hands(F)
@@ -234,7 +237,7 @@
return
/obj/item/stack/attackby(obj/item/W, mob/user, params)
- if(istype(W, src.type))
+ if(istype(W, merge_type))
var/obj/item/stack/S = W
merge(S)
user << "Your [S.name] stack now contains [S.get_amount()] [S.singular_name]\s."
@@ -268,4 +271,4 @@
src.max_res_amount = max_res_amount
src.time = time
src.one_per_turf = one_per_turf
- src.on_floor = on_floor
\ No newline at end of file
+ src.on_floor = on_floor
diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm
index 309bea1a0de..7fce1577be4 100755
--- a/code/game/objects/items/toys.dm
+++ b/code/game/objects/items/toys.dm
@@ -422,7 +422,7 @@
if(istype(target, /obj/effect/decal/cleanable))
target = target.loc
if(is_type_in_list(target,validSurfaces))
-
+
var/temp = "rune"
if(letters.Find(drawtype))
temp = "letter"
@@ -1106,13 +1106,13 @@
if (cooldown < world.time)
cooldown = world.time + 1800 //3 minutes
user.visible_message("[user] presses a button on [src].", "You activate [src], it plays a loud noise!", "You hear the click of a button.")
- spawn(5) //gia said so
- icon_state = "nuketoy"
- playsound(src, 'sound/machines/Alarm.ogg', 100, 0, surround = 0)
- sleep(135)
- icon_state = "nuketoycool"
- sleep(cooldown - world.time)
- icon_state = "nuketoyidle"
+ sleep(5)
+ icon_state = "nuketoy"
+ playsound(src, 'sound/machines/Alarm.ogg', 100, 0, surround = 0)
+ sleep(135)
+ icon_state = "nuketoycool"
+ sleep(cooldown - world.time)
+ icon_state = "nuketoyidle"
else
var/timeleft = (cooldown - world.time)
user << "Nothing happens, and '[round(timeleft/10)]' appears on a small display."
diff --git a/code/game/objects/items/weapons/AI_modules.dm b/code/game/objects/items/weapons/AI_modules.dm
index 125ba5e8d48..3eb2d6aa3b7 100644
--- a/code/game/objects/items/weapons/AI_modules.dm
+++ b/code/game/objects/items/weapons/AI_modules.dm
@@ -60,13 +60,6 @@ AI MODULES
user << "Upload complete. [reciever]'s laws have been modified."
reciever.show_laws()
reciever.law_change_counter++
- if(isAI(reciever))
- var/mob/living/silicon/ai/A = reciever
- for(var/mob/living/silicon/robot/R in A.connected_robots)
- if(R.lawupdate)
- R << "From now on, these are your laws:"
- R.show_laws()
- R.law_change_counter++
var/time = time2text(world.realtime,"hh:mm:ss")
lawchanges.Add("[time] : [user.name]([user.key]) used [src.name] on [reciever.name]([reciever.key]).[law2log ? " The law specified [law2log]" : ""]")
diff --git a/code/game/objects/items/weapons/chrono_eraser.dm b/code/game/objects/items/weapons/chrono_eraser.dm
index 96c48aab975..2695041736a 100644
--- a/code/game/objects/items/weapons/chrono_eraser.dm
+++ b/code/game/objects/items/weapons/chrono_eraser.dm
@@ -239,8 +239,9 @@
/obj/effect/chrono_field/return_air() //we always have nominal air and temperature
var/datum/gas_mixture/GM = new
- GM.oxygen = MOLES_O2STANDARD
- GM.nitrogen = MOLES_N2STANDARD
+ GM.assert_gases("o2","n2")
+ GM.gases["o2"][MOLES] = MOLES_O2STANDARD
+ GM.gases["n2"][MOLES] = MOLES_N2STANDARD
GM.temperature = T20C
return GM
diff --git a/code/game/objects/items/weapons/defib.dm b/code/game/objects/items/weapons/defib.dm
index f81fc5dd559..40f851772f4 100644
--- a/code/game/objects/items/weapons/defib.dm
+++ b/code/game/objects/items/weapons/defib.dm
@@ -450,7 +450,8 @@
busy = 0
update_icon()
return
- H.notify_ghost_cloning("Your heart is being defibrillated. Re-enter your corpse if you want to be revived!", source = src)
+ if(!H.suiciding && !(H.disabilities & NOCLONE))
+ H.notify_ghost_cloning("Your heart is being defibrillated. Re-enter your corpse if you want to be revived!", source = src)
user.visible_message("[user] begins to place [src] on [M.name]'s chest.", "You begin to place [src] on [M.name]'s chest...")
busy = 1
diff --git a/code/game/objects/items/weapons/dna_injector.dm b/code/game/objects/items/weapons/dna_injector.dm
index 636145d7452..047aa449f2c 100644
--- a/code/game/objects/items/weapons/dna_injector.dm
+++ b/code/game/objects/items/weapons/dna_injector.dm
@@ -12,13 +12,24 @@
var/list/fields
var/list/add_mutations = list()
var/list/remove_mutations = list()
+
+ var/list/add_mutations_static = list()
+ var/list/remove_mutations_static = list()
+
var/used = 0
/obj/item/weapon/dnainjector/attack_paw(mob/user)
return attack_hand(user)
+/obj/item/weapon/dnainjector/proc/prepare()
+ for(var/mut_key in add_mutations_static)
+ add_mutations.Add(mutations_list[mut_key])
+ for(var/mut_key in remove_mutations_static)
+ remove_mutations.Add(mutations_list[mut_key])
/obj/item/weapon/dnainjector/proc/inject(mob/living/carbon/M, mob/user)
+ prepare()
+
if(M.has_dna() && !(M.disabilities & NOCLONE))
M.radiation += rand(20/(damage_coeff ** 2),50/(damage_coeff ** 2))
var/log_msg = "[key_name(user)] injected [key_name(M)] with the [name]"
@@ -76,170 +87,123 @@
/obj/item/weapon/dnainjector/antihulk
name = "\improper DNA injector (Anti-Hulk)"
desc = "Cures green skin."
- New()
- ..()
- remove_mutations.Add(mutations_list[HULK])
+ remove_mutations_static = list(HULK)
/obj/item/weapon/dnainjector/hulkmut
name = "\improper DNA injector (Hulk)"
desc = "This will make you big and strong, but give you a bad skin condition."
- New()
- ..()
- add_mutations.Add(mutations_list[HULK])
+ add_mutations_static = list(HULK)
+
/obj/item/weapon/dnainjector/xraymut
name = "\improper DNA injector (Xray)"
desc = "Finally you can see what the Captain does."
- New()
- ..()
- add_mutations.Add(mutations_list[XRAY])
+ add_mutations_static = list(XRAY)
/obj/item/weapon/dnainjector/antixray
name = "\improper DNA injector (Anti-Xray)"
desc = "It will make you see harder."
- New()
- ..()
- remove_mutations.Add(mutations_list[XRAY])
+ remove_mutations_static = list(XRAY)
/////////////////////////////////////
/obj/item/weapon/dnainjector/antiglasses
name = "\improper DNA injector (Anti-Glasses)"
desc = "Toss away those glasses!"
- New()
- ..()
- remove_mutations.Add(mutations_list[BADSIGHT])
+ remove_mutations_static = list(BADSIGHT)
/obj/item/weapon/dnainjector/glassesmut
name = "\improper DNA injector (Glasses)"
desc = "Will make you need dorkish glasses."
- New()
- ..()
- add_mutations.Add(mutations_list[BADSIGHT])
+ add_mutations_static = list(BADSIGHT)
/obj/item/weapon/dnainjector/epimut
name = "\improper DNA injector (Epi.)"
desc = "Shake shake shake the room!"
- New()
- ..()
- add_mutations.Add(mutations_list[EPILEPSY])
+ add_mutations_static = list(EPILEPSY)
/obj/item/weapon/dnainjector/antiepi
name = "\improper DNA injector (Anti-Epi.)"
desc = "Will fix you up from shaking the room."
- New()
- ..()
- remove_mutations.Add(mutations_list[EPILEPSY])
+ remove_mutations_static = list(EPILEPSY)
////////////////////////////////////
/obj/item/weapon/dnainjector/anticough
name = "\improper DNA injector (Anti-Cough)"
desc = "Will stop that aweful noise."
- New()
- ..()
- remove_mutations.Add(mutations_list[COUGH])
+ remove_mutations_static = list(COUGH)
/obj/item/weapon/dnainjector/coughmut
name = "\improper DNA injector (Cough)"
desc = "Will bring forth a sound of horror from your throat."
- New()
- ..()
- add_mutations.Add(mutations_list[COUGH])
+ add_mutations_static = list(COUGH)
/obj/item/weapon/dnainjector/antidwarf
name = "\improper DNA injector (Anti-Dwarfism)"
desc = "Helps you grow big and strong."
- New()
- ..()
- remove_mutations.Add(mutations_list[DWARFISM])
+ remove_mutations_static = list(DWARFISM)
/obj/item/weapon/dnainjector/dwarf
name = "\improper DNA injector (Dwarfism)"
desc = "Its a small world after all."
- New()
- ..()
- add_mutations.Add(mutations_list[DWARFISM])
+ add_mutations_static = list(DWARFISM)
/obj/item/weapon/dnainjector/clumsymut
name = "\improper DNA injector (Clumsy)"
desc = "Makes clown minions."
- New()
- ..()
- add_mutations.Add(mutations_list[CLOWNMUT])
+ add_mutations_static = list(CLOWNMUT)
/obj/item/weapon/dnainjector/anticlumsy
name = "\improper DNA injector (Anti-Clumy)"
desc = "Apply this for Security Clown."
- New()
- ..()
- remove_mutations.Add(mutations_list[CLOWNMUT])
+ remove_mutations_static = list(CLOWNMUT)
/obj/item/weapon/dnainjector/antitour
name = "\improper DNA injector (Anti-Tour.)"
desc = "Will cure tourrets."
- New()
- ..()
- remove_mutations.Add(mutations_list[TOURETTES])
+ remove_mutations_static = list(TOURETTES)
/obj/item/weapon/dnainjector/tourmut
name = "\improper DNA injector (Tour.)"
desc = "Gives you a nasty case off tourrets."
- New()
- ..()
- add_mutations.Add(mutations_list[TOURETTES])
+ add_mutations_static = list(TOURETTES)
/obj/item/weapon/dnainjector/stuttmut
name = "\improper DNA injector (Stutt.)"
desc = "Makes you s-s-stuttterrr"
- New()
- ..()
- add_mutations.Add(mutations_list[NERVOUS])
+ add_mutations_static = list(NERVOUS)
/obj/item/weapon/dnainjector/antistutt
name = "\improper DNA injector (Anti-Stutt.)"
desc = "Fixes that speaking impairment."
- New()
- ..()
- remove_mutations.Add(mutations_list[NERVOUS])
+ remove_mutations_static = list(NERVOUS)
/obj/item/weapon/dnainjector/antifire
name = "\improper DNA injector (Anti-Fire)"
desc = "Cures fire."
- New()
- ..()
- remove_mutations.Add(mutations_list[COLDRES])
+ remove_mutations_static = list(COLDRES)
/obj/item/weapon/dnainjector/firemut
name = "\improper DNA injector (Fire)"
desc = "Gives you fire."
- New()
- ..()
- add_mutations.Add(mutations_list[COLDRES])
+ add_mutations_static = list(COLDRES)
/obj/item/weapon/dnainjector/blindmut
name = "\improper DNA injector (Blind)"
desc = "Makes you not see anything."
- New()
- ..()
- add_mutations.Add(mutations_list[BLINDMUT])
+ add_mutations_static = list(BLINDMUT)
/obj/item/weapon/dnainjector/antiblind
name = "\improper DNA injector (Anti-Blind)"
desc = "ITS A MIRACLE!!!"
- New()
- ..()
- remove_mutations.Add(mutations_list[BLINDMUT])
+ remove_mutations_static = list(BLINDMUT)
/obj/item/weapon/dnainjector/antitele
name = "\improper DNA injector (Anti-Tele.)"
desc = "Will make you not able to control your mind."
- New()
- ..()
- remove_mutations.Add(mutations_list[TK])
+ remove_mutations_static = list(TK)
/obj/item/weapon/dnainjector/telemut
name = "\improper DNA injector (Tele.)"
desc = "Super brain man!"
- New()
- ..()
- add_mutations.Add(mutations_list[TK])
+ add_mutations_static = list(TK)
/obj/item/weapon/dnainjector/telemut/darkbundle
name = "\improper DNA injector"
@@ -248,143 +212,101 @@
/obj/item/weapon/dnainjector/deafmut
name = "\improper DNA injector (Deaf)"
desc = "Sorry, what did you say?"
- New()
- ..()
- add_mutations.Add(mutations_list[DEAFMUT])
+ add_mutations_static = list(DEAFMUT)
/obj/item/weapon/dnainjector/antideaf
name = "\improper DNA injector (Anti-Deaf)"
desc = "Will make you hear once more."
- New()
- ..()
- remove_mutations.Add(mutations_list[DEAFMUT])
+ remove_mutations_static = list(DEAFMUT)
/obj/item/weapon/dnainjector/h2m
name = "\improper DNA injector (Human > Monkey)"
desc = "Will make you a flea bag."
- New()
- ..()
- add_mutations.Add(mutations_list[RACEMUT])
+ add_mutations_static = list(RACEMUT)
/obj/item/weapon/dnainjector/m2h
name = "\improper DNA injector (Monkey > Human)"
desc = "Will make you...less hairy."
- New()
- ..()
- remove_mutations.Add(mutations_list[RACEMUT])
+ remove_mutations_static = list(RACEMUT)
/obj/item/weapon/dnainjector/antichameleon
name = "\improper DNA injector (Anti-Chameleon)"
- New()
- ..()
- remove_mutations.Add(mutations_list[CHAMELEON])
+ remove_mutations_static = list(CHAMELEON)
/obj/item/weapon/dnainjector/chameleonmut
name = "\improper DNA injector (Chameleon)"
- New()
- ..()
- add_mutations.Add(mutations_list[CHAMELEON])
+ add_mutations_static = list(CHAMELEON)
/obj/item/weapon/dnainjector/antiwacky
name = "\improper DNA injector (Anti-Wacky)"
- New()
- ..()
- remove_mutations.Add(mutations_list[WACKY])
+ remove_mutations_static = list(WACKY)
/obj/item/weapon/dnainjector/wackymut
name = "\improper DNA injector (Wacky)"
- New()
- ..()
- add_mutations.Add(mutations_list[WACKY])
+ add_mutations_static = list(WACKY)
/obj/item/weapon/dnainjector/antimute
name = "\improper DNA injector (Anti-Mute)"
- New()
- ..()
- remove_mutations.Add(mutations_list[MUT_MUTE])
+ remove_mutations_static = list(MUT_MUTE)
/obj/item/weapon/dnainjector/mutemut
name = "\improper DNA injector (Mute)"
- New()
- ..()
- add_mutations.Add(mutations_list[MUT_MUTE])
+ add_mutations_static = list(MUT_MUTE)
/obj/item/weapon/dnainjector/antismile
name = "\improper DNA injector (Anti-Smile)"
- New()
- ..()
- remove_mutations.Add(mutations_list[SMILE])
+ remove_mutations_static = list(SMILE)
/obj/item/weapon/dnainjector/smilemut
name = "\improper DNA injector (Smile)"
- New()
- ..()
- add_mutations.Add(mutations_list[SMILE])
+ add_mutations_static = list(SMILE)
/obj/item/weapon/dnainjector/unintelligablemut
name = "\improper DNA injector (Unintelligable)"
- New()
- ..()
- add_mutations.Add(mutations_list[UNINTELLIGABLE])
+ add_mutations_static = list(UNINTELLIGABLE)
/obj/item/weapon/dnainjector/antiunintelligable
name = "\improper DNA injector (Anti-Unintelligable)"
- New()
- ..()
- remove_mutations.Add(mutations_list[UNINTELLIGABLE])
+ remove_mutations_static = list(UNINTELLIGABLE)
/obj/item/weapon/dnainjector/swedishmut
name = "\improper DNA injector (Swedish)"
- New()
- ..()
- add_mutations.Add(mutations_list[SWEDISH])
+ add_mutations_static = list(SWEDISH)
/obj/item/weapon/dnainjector/antiswedish
name = "\improper DNA injector (Anti-Swedish)"
- New()
- ..()
- remove_mutations.Add(mutations_list[SWEDISH])
+ remove_mutations_static = list(SWEDISH)
/obj/item/weapon/dnainjector/chavmut
name = "\improper DNA injector (Chav)"
- New()
- ..()
- add_mutations.Add(mutations_list[CHAV])
+ add_mutations_static = list(CHAV)
/obj/item/weapon/dnainjector/antichav
name = "\improper DNA injector (Anti-Chav)"
- New()
- ..()
- remove_mutations.Add(mutations_list[CHAV])
+ remove_mutations_static = list(CHAV)
/obj/item/weapon/dnainjector/elvismut
name = "\improper DNA injector (Elvis)"
- New()
- ..()
- add_mutations.Add(mutations_list[ELVIS])
+ add_mutations_static = list(ELVIS)
/obj/item/weapon/dnainjector/antielvis
name = "\improper DNA injector (Anti-Elvis)"
- New()
- ..()
- remove_mutations.Add(mutations_list[ELVIS])
+ remove_mutations_static = list(ELVIS)
/obj/item/weapon/dnainjector/lasereyesmut
name = "\improper DNA injector (Laser Eyes)"
- New()
- ..()
- add_mutations.Add(mutations_list[LASEREYES])
+ add_mutations_static = list(LASEREYES)
/obj/item/weapon/dnainjector/antilasereyes
name = "\improper DNA injector (Anti-Laser Eyes)"
- New()
- ..()
- remove_mutations.Add(mutations_list[LASEREYES])
+ remove_mutations_static = list(LASEREYES)
/obj/item/weapon/dnainjector/timed
var/duration = 600
/obj/item/weapon/dnainjector/timed/inject(mob/living/carbon/M, mob/user)
+ prepare()
+
if(M.has_dna() && !(M.disabilities & NOCLONE))
if(M.stat == DEAD) //prevents dead people from having their DNA changed
user << "You can't modify [M]'s DNA while \he's dead."
@@ -436,13 +358,9 @@
/obj/item/weapon/dnainjector/timed/hulk
name = "\improper DNA injector (Hulk)"
desc = "This will make you big and strong, but give you a bad skin condition."
- New()
- ..()
- add_mutations.Add(mutations_list[HULK])
+ add_mutations_static = list(HULK)
/obj/item/weapon/dnainjector/timed/h2m
name = "\improper DNA injector (Human > Monkey)"
desc = "Will make you a flea bag."
- New()
- ..()
- add_mutations.Add(mutations_list[RACEMUT])
+ add_mutations_static = list(RACEMUT)
diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm
index 723725e46f5..44f29a96e7a 100644
--- a/code/game/objects/items/weapons/flamethrower.dm
+++ b/code/game/objects/items/weapons/flamethrower.dm
@@ -198,7 +198,8 @@
//TODO: DEFERRED Consider checking to make sure tank pressure is high enough before doing this...
//Transfer 5% of current tank air contents to turf
var/datum/gas_mixture/air_transfer = ptank.air_contents.remove_ratio(release_amount)
- air_transfer.toxins = air_transfer.toxins * 5
+ if(air_transfer.gases["plasma"])
+ air_transfer.gases["plasma"][MOLES] *= 5
target.assume_air(air_transfer)
//Burn it based on transfered gas
target.hotspot_expose((ptank.air_contents.temperature*2) + 380,500)
diff --git a/code/game/objects/items/weapons/grenades/ghettobomb.dm b/code/game/objects/items/weapons/grenades/ghettobomb.dm
index 0d1c1723f68..8339ed98c7c 100644
--- a/code/game/objects/items/weapons/grenades/ghettobomb.dm
+++ b/code/game/objects/items/weapons/grenades/ghettobomb.dm
@@ -59,7 +59,7 @@
/obj/item/weapon/grenade/iedcasing/prime() //Blowing that can up
update_mob()
- explosion(src.loc,-1,-1,-1, flame_range = range) // no explosive damage, only a large fireball.
+ explosion(src.loc,-1,-1,2, flame_range = 4) // small explosion, plus a very large fireball.
qdel(src)
/obj/item/weapon/grenade/iedcasing/examine(mob/user)
diff --git a/code/game/objects/items/weapons/pneumaticCannon.dm b/code/game/objects/items/weapons/pneumaticCannon.dm
index 5d73339b164..7c4e0dcce55 100644
--- a/code/game/objects/items/weapons/pneumaticCannon.dm
+++ b/code/game/objects/items/weapons/pneumaticCannon.dm
@@ -23,8 +23,7 @@
user << "You'll need to get closer to see any more."
return
for(var/obj/item/I in loadedItems)
- spawn(0)
- user << "\icon [I] It has \the [I] loaded."
+ user << "\icon [I] It has \the [I] loaded."
if(tank)
user << "\icon [tank] It has \the [tank] mounted onto it."
diff --git a/code/game/objects/items/weapons/singularityhammer.dm b/code/game/objects/items/weapons/singularityhammer.dm
index e8a99f1a441..e4781e32d2b 100644
--- a/code/game/objects/items/weapons/singularityhammer.dm
+++ b/code/game/objects/items/weapons/singularityhammer.dm
@@ -93,13 +93,12 @@
"You feel a powerful shock course through your body sending you flying!", \
"You hear a heavy electrical crack!")
var/atom/throw_target = get_edge_target_turf(target, get_dir(src, get_step_away(target, src)))
- target.throw_at(throw_target, 200, 4)
+ target.throw_at_fast(throw_target, 200, 4)
return
/obj/item/weapon/twohanded/mjollnir/attack(mob/M, mob/user)
..()
- spawn(0)
if(wielded)
//if(charged == 5)
//charged = 0
diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm
index deabe13233d..dacc3514ec2 100644
--- a/code/game/objects/items/weapons/storage/backpack.dm
+++ b/code/game/objects/items/weapons/storage/backpack.dm
@@ -328,12 +328,8 @@
/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo/loaded/New()
..()
contents = list()
- new /obj/item/ammo_box/magazine/m12g(src)
- new /obj/item/ammo_box/magazine/m12g(src)
- new /obj/item/ammo_box/magazine/m12g(src)
- new /obj/item/ammo_box/magazine/m12g(src)
- new /obj/item/ammo_box/magazine/m12g(src)
- new /obj/item/ammo_box/magazine/m12g(src)
+ for(var/i in 1 to 6)
+ new /obj/item/ammo_box/magazine/m12g(src)
new /obj/item/ammo_box/magazine/m12g/buckshot(src)
new /obj/item/ammo_box/magazine/m12g/stun(src)
new /obj/item/ammo_box/magazine/m12g/dragon(src)
@@ -398,15 +394,8 @@
/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo/smg/New()
..()
contents = list()
- new /obj/item/ammo_box/magazine/smgm45(src)
- new /obj/item/ammo_box/magazine/smgm45(src)
- new /obj/item/ammo_box/magazine/smgm45(src)
- new /obj/item/ammo_box/magazine/smgm45(src)
- new /obj/item/ammo_box/magazine/smgm45(src)
- new /obj/item/ammo_box/magazine/smgm45(src)
- new /obj/item/ammo_box/magazine/smgm45(src)
- new /obj/item/ammo_box/magazine/smgm45(src)
- new /obj/item/ammo_box/magazine/smgm45(src)
+ for(var/i in 1 to 9)
+ new /obj/item/ammo_box/magazine/smgm45(src)
return
@@ -416,10 +405,8 @@
/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo/fireteam/New()
..()
contents = list()
- new /obj/item/ammo_box/magazine/smgm45(src)
- new /obj/item/ammo_box/magazine/smgm45(src)
- new /obj/item/ammo_box/magazine/smgm45(src)
- new /obj/item/ammo_box/magazine/smgm45(src)
+ for(var/i in 1 to 4)
+ new /obj/item/ammo_box/magazine/smgm45(src)
new /obj/item/ammo_box/magazine/m556(src)
new /obj/item/ammo_box/magazine/m556(src)
new /obj/item/ammo_box/a40mm(src)
@@ -439,7 +426,7 @@
return
/obj/item/weapon/storage/backpack/dufflebag/syndie/m90glbundle
- desc = "A large dufflebag containing a M90gl, a magazine, and a stimpack."
+ desc = "A large dufflebag containing an M90gl, a magazine, four additional grenades, and a pack of Syndicate cigarettes."
/obj/item/weapon/storage/backpack/dufflebag/syndie/m90glbundle/New()
..()
diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm
index 7e53d4a443d..db6b4701830 100644
--- a/code/game/objects/items/weapons/storage/belt.dm
+++ b/code/game/objects/items/weapons/storage/belt.dm
@@ -121,13 +121,8 @@
/obj/item/weapon/storage/belt/soulstone/full/New()
..()
- new /obj/item/device/soulstone(src)
- new /obj/item/device/soulstone(src)
- new /obj/item/device/soulstone(src)
- new /obj/item/device/soulstone(src)
- new /obj/item/device/soulstone(src)
- new /obj/item/device/soulstone(src)
-
+ for(var/i in 1 to 6)
+ new /obj/item/device/soulstone(src)
/obj/item/weapon/storage/belt/champion
name = "championship belt"
diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm
index c08715a561e..aa0679e89b1 100644
--- a/code/game/objects/items/weapons/storage/boxes.dm
+++ b/code/game/objects/items/weapons/storage/boxes.dm
@@ -93,14 +93,9 @@
/obj/item/weapon/storage/box/gloves/New()
..()
- new /obj/item/clothing/gloves/color/latex(src)
- new /obj/item/clothing/gloves/color/latex(src)
- new /obj/item/clothing/gloves/color/latex(src)
- new /obj/item/clothing/gloves/color/latex(src)
- new /obj/item/clothing/gloves/color/latex(src)
- new /obj/item/clothing/gloves/color/latex(src)
- new /obj/item/clothing/gloves/color/latex(src)
-
+ for(var/i in 1 to 7)
+ new /obj/item/clothing/gloves/color/latex(src)
+
/obj/item/weapon/storage/box/masks
name = "box of sterile masks"
desc = "This box contains sterile medical masks."
@@ -108,14 +103,9 @@
/obj/item/weapon/storage/box/masks/New()
..()
- new /obj/item/clothing/mask/surgical(src)
- new /obj/item/clothing/mask/surgical(src)
- new /obj/item/clothing/mask/surgical(src)
- new /obj/item/clothing/mask/surgical(src)
- new /obj/item/clothing/mask/surgical(src)
- new /obj/item/clothing/mask/surgical(src)
- new /obj/item/clothing/mask/surgical(src)
-
+ for(var/i in 1 to 7)
+ new /obj/item/clothing/mask/surgical(src)
+
/obj/item/weapon/storage/box/syringes
name = "box of syringes"
desc = "A box full of syringes."
@@ -124,14 +114,9 @@
/obj/item/weapon/storage/box/syringes/New()
..()
- new /obj/item/weapon/reagent_containers/syringe( src )
- new /obj/item/weapon/reagent_containers/syringe( src )
- new /obj/item/weapon/reagent_containers/syringe( src )
- new /obj/item/weapon/reagent_containers/syringe( src )
- new /obj/item/weapon/reagent_containers/syringe( src )
- new /obj/item/weapon/reagent_containers/syringe( src )
- new /obj/item/weapon/reagent_containers/syringe( src )
-
+ for(var/i in 1 to 7)
+ new /obj/item/weapon/reagent_containers/syringe( src )
+
/obj/item/weapon/storage/box/medipens
name = "box of medipens"
desc = "A box full of epinephrine MediPens."
@@ -139,14 +124,9 @@
/obj/item/weapon/storage/box/medipens/New()
..()
- new /obj/item/weapon/reagent_containers/hypospray/medipen( src )
- new /obj/item/weapon/reagent_containers/hypospray/medipen( src )
- new /obj/item/weapon/reagent_containers/hypospray/medipen( src )
- new /obj/item/weapon/reagent_containers/hypospray/medipen( src )
- new /obj/item/weapon/reagent_containers/hypospray/medipen( src )
- new /obj/item/weapon/reagent_containers/hypospray/medipen( src )
- new /obj/item/weapon/reagent_containers/hypospray/medipen( src )
-
+ for(var/i in 1 to 7)
+ new /obj/item/weapon/reagent_containers/hypospray/medipen( src )
+
/obj/item/weapon/storage/box/medipens/utility
name = "stimpack value kit"
desc = "A box with several stimpack medipens for the economical miner."
@@ -154,39 +134,29 @@
/obj/item/weapon/storage/box/medipens/utility/New()
..()
- new /obj/item/weapon/reagent_containers/hypospray/medipen/stimpack(src)
- new /obj/item/weapon/reagent_containers/hypospray/medipen/stimpack(src)
- new /obj/item/weapon/reagent_containers/hypospray/medipen/stimpack(src)
- new /obj/item/weapon/reagent_containers/hypospray/medipen/stimpack(src)
- new /obj/item/weapon/reagent_containers/hypospray/medipen/stimpack(src)
-
+ for(var/i in 1 to 5)
+ new /obj/item/weapon/reagent_containers/hypospray/medipen/stimpack(src)
+
/obj/item/weapon/storage/box/beakers
name = "box of beakers"
icon_state = "beaker"
/obj/item/weapon/storage/box/beakers/New()
..()
- new /obj/item/weapon/reagent_containers/glass/beaker( src )
- new /obj/item/weapon/reagent_containers/glass/beaker( src )
- new /obj/item/weapon/reagent_containers/glass/beaker( src )
- new /obj/item/weapon/reagent_containers/glass/beaker( src )
- new /obj/item/weapon/reagent_containers/glass/beaker( src )
- new /obj/item/weapon/reagent_containers/glass/beaker( src )
- new /obj/item/weapon/reagent_containers/glass/beaker( src )
-
+ for(var/i in 1 to 7)
+ new /obj/item/weapon/reagent_containers/glass/beaker( src )
+
/obj/item/weapon/storage/box/injectors
name = "box of DNA injectors"
desc = "This box contains injectors it seems."
/obj/item/weapon/storage/box/injectors/New()
..()
- new /obj/item/weapon/dnainjector/h2m(src)
- new /obj/item/weapon/dnainjector/h2m(src)
- new /obj/item/weapon/dnainjector/h2m(src)
- new /obj/item/weapon/dnainjector/m2h(src)
- new /obj/item/weapon/dnainjector/m2h(src)
- new /obj/item/weapon/dnainjector/m2h(src)
-
+ for(var/i in 1 to 3)
+ new /obj/item/weapon/dnainjector/h2m(src)
+ for(var/i in 1 to 3)
+ new /obj/item/weapon/dnainjector/m2h(src)
+
/obj/item/weapon/storage/box/flashbangs
name = "box of flashbangs (WARNING)"
desc = "WARNING: These devices are extremely dangerous and can cause blindness or deafness in repeated use."
@@ -194,14 +164,9 @@
/obj/item/weapon/storage/box/flashbangs/New()
..()
- new /obj/item/weapon/grenade/flashbang(src)
- new /obj/item/weapon/grenade/flashbang(src)
- new /obj/item/weapon/grenade/flashbang(src)
- new /obj/item/weapon/grenade/flashbang(src)
- new /obj/item/weapon/grenade/flashbang(src)
- new /obj/item/weapon/grenade/flashbang(src)
- new /obj/item/weapon/grenade/flashbang(src)
-
+ for(var/i in 1 to 7)
+ new /obj/item/weapon/grenade/flashbang(src)
+
/obj/item/weapon/storage/box/flashes
name = "box of flashbulbs"
desc = "WARNING: Flashes can cause serious eye damage, protective eyewear is required."
@@ -209,13 +174,9 @@
/obj/item/weapon/storage/box/flashes/New()
..()
- new /obj/item/device/assembly/flash/handheld(src)
- new /obj/item/device/assembly/flash/handheld(src)
- new /obj/item/device/assembly/flash/handheld(src)
- new /obj/item/device/assembly/flash/handheld(src)
- new /obj/item/device/assembly/flash/handheld(src)
- new /obj/item/device/assembly/flash/handheld(src)
-
+ for(var/i in 1 to 6)
+ new /obj/item/device/assembly/flash/handheld(src)
+
/obj/item/weapon/storage/box/teargas
name = "box of tear gas grenades (WARNING)"
desc = "WARNING: These devices are extremely dangerous and can cause blindness and skin irritation."
@@ -223,14 +184,9 @@
/obj/item/weapon/storage/box/teargas/New()
..()
- new /obj/item/weapon/grenade/chem_grenade/teargas(src)
- new /obj/item/weapon/grenade/chem_grenade/teargas(src)
- new /obj/item/weapon/grenade/chem_grenade/teargas(src)
- new /obj/item/weapon/grenade/chem_grenade/teargas(src)
- new /obj/item/weapon/grenade/chem_grenade/teargas(src)
- new /obj/item/weapon/grenade/chem_grenade/teargas(src)
- new /obj/item/weapon/grenade/chem_grenade/teargas(src)
-
+ for(var/i in 1 to 7)
+ new /obj/item/weapon/grenade/chem_grenade/teargas(src)
+
/obj/item/weapon/storage/box/emps
name = "box of emp grenades"
desc = "A box with 5 emp grenades."
@@ -238,12 +194,9 @@
/obj/item/weapon/storage/box/emps/New()
..()
- new /obj/item/weapon/grenade/empgrenade(src)
- new /obj/item/weapon/grenade/empgrenade(src)
- new /obj/item/weapon/grenade/empgrenade(src)
- new /obj/item/weapon/grenade/empgrenade(src)
- new /obj/item/weapon/grenade/empgrenade(src)
-
+ for(var/i in 1 to 5)
+ new /obj/item/weapon/grenade/empgrenade(src)
+
/obj/item/weapon/storage/box/trackimp
name = "boxed tracking implant kit"
desc = "Box full of scum-bag tracking utensils."
@@ -251,10 +204,8 @@
/obj/item/weapon/storage/box/trackimp/New()
..()
- new /obj/item/weapon/implantcase/tracking(src)
- new /obj/item/weapon/implantcase/tracking(src)
- new /obj/item/weapon/implantcase/tracking(src)
- new /obj/item/weapon/implantcase/tracking(src)
+ for(var/i in 1 to 4)
+ new /obj/item/weapon/implantcase/tracking(src)
new /obj/item/weapon/implanter(src)
new /obj/item/weapon/implantpad(src)
new /obj/item/weapon/locator(src)
@@ -266,11 +217,8 @@
/obj/item/weapon/storage/box/chemimp/New()
..()
- new /obj/item/weapon/implantcase/chem(src)
- new /obj/item/weapon/implantcase/chem(src)
- new /obj/item/weapon/implantcase/chem(src)
- new /obj/item/weapon/implantcase/chem(src)
- new /obj/item/weapon/implantcase/chem(src)
+ for(var/i in 1 to 5)
+ new /obj/item/weapon/implantcase/chem(src)
new /obj/item/weapon/implanter(src)
new /obj/item/weapon/implantpad(src)
@@ -281,11 +229,8 @@
/obj/item/weapon/storage/box/exileimp/New()
..()
- new /obj/item/weapon/implantcase/exile(src)
- new /obj/item/weapon/implantcase/exile(src)
- new /obj/item/weapon/implantcase/exile(src)
- new /obj/item/weapon/implantcase/exile(src)
- new /obj/item/weapon/implantcase/exile(src)
+ for(var/i in 1 to 5)
+ new /obj/item/weapon/implantcase/exile(src)
new /obj/item/weapon/implanter(src)
/obj/item/weapon/storage/box/rxglasses
@@ -295,39 +240,26 @@
/obj/item/weapon/storage/box/rxglasses/New()
..()
- new /obj/item/clothing/glasses/regular(src)
- new /obj/item/clothing/glasses/regular(src)
- new /obj/item/clothing/glasses/regular(src)
- new /obj/item/clothing/glasses/regular(src)
- new /obj/item/clothing/glasses/regular(src)
- new /obj/item/clothing/glasses/regular(src)
- new /obj/item/clothing/glasses/regular(src)
-
+ for(var/i in 1 to 7)
+ new /obj/item/clothing/glasses/regular(src)
+
/obj/item/weapon/storage/box/drinkingglasses
name = "box of drinking glasses"
desc = "It has a picture of drinking glasses on it."
/obj/item/weapon/storage/box/drinkingglasses/New()
..()
- new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass(src)
- new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass(src)
- new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass(src)
- new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass(src)
- new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass(src)
- new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass(src)
-
+ for(var/i in 1 to 6)
+ new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass(src)
+
/obj/item/weapon/storage/box/condimentbottles
name = "box of condiment bottles"
desc = "It has a large ketchup smear on it."
/obj/item/weapon/storage/box/condimentbottles/New()
..()
- new /obj/item/weapon/reagent_containers/food/condiment(src)
- new /obj/item/weapon/reagent_containers/food/condiment(src)
- new /obj/item/weapon/reagent_containers/food/condiment(src)
- new /obj/item/weapon/reagent_containers/food/condiment(src)
- new /obj/item/weapon/reagent_containers/food/condiment(src)
- new /obj/item/weapon/reagent_containers/food/condiment(src)
+ for(var/i in 1 to 6)
+ new /obj/item/weapon/reagent_containers/food/condiment(src)
/obj/item/weapon/storage/box/cups
name = "box of paper cups"
@@ -335,14 +267,9 @@
/obj/item/weapon/storage/box/cups/New()
..()
- new /obj/item/weapon/reagent_containers/food/drinks/sillycup( src )
- new /obj/item/weapon/reagent_containers/food/drinks/sillycup( src )
- new /obj/item/weapon/reagent_containers/food/drinks/sillycup( src )
- new /obj/item/weapon/reagent_containers/food/drinks/sillycup( src )
- new /obj/item/weapon/reagent_containers/food/drinks/sillycup( src )
- new /obj/item/weapon/reagent_containers/food/drinks/sillycup( src )
- new /obj/item/weapon/reagent_containers/food/drinks/sillycup( src )
-
+ for(var/i in 1 to 7)
+ new /obj/item/weapon/reagent_containers/food/drinks/sillycup( src )
+
/obj/item/weapon/storage/box/donkpockets
name = "box of donk-pockets"
desc = "Instructions: Heat in microwave. Product will cool if not eaten within seven minutes."
@@ -350,12 +277,8 @@
/obj/item/weapon/storage/box/donkpockets/New()
..()
- new /obj/item/weapon/reagent_containers/food/snacks/donkpocket(src)
- new /obj/item/weapon/reagent_containers/food/snacks/donkpocket(src)
- new /obj/item/weapon/reagent_containers/food/snacks/donkpocket(src)
- new /obj/item/weapon/reagent_containers/food/snacks/donkpocket(src)
- new /obj/item/weapon/reagent_containers/food/snacks/donkpocket(src)
- new /obj/item/weapon/reagent_containers/food/snacks/donkpocket(src)
+ for(var/i in 1 to 6)
+ new /obj/item/weapon/reagent_containers/food/snacks/donkpocket(src)
/obj/item/weapon/storage/box/monkeycubes
name = "monkey cube box"
@@ -378,9 +301,8 @@
/obj/item/weapon/storage/box/permits/New() //There's only a few, so blueprints are still useful beyond setting every room's name to PRIMARY FART STORAGE
..()
- new /obj/item/areaeditor/permit(src)
- new /obj/item/areaeditor/permit(src)
- new /obj/item/areaeditor/permit(src)
+ for(var/i in 1 to 3)
+ new /obj/item/areaeditor/permit(src)
/obj/item/weapon/storage/box/ids
@@ -390,14 +312,9 @@
/obj/item/weapon/storage/box/ids/New()
..()
- new /obj/item/weapon/card/id(src)
- new /obj/item/weapon/card/id(src)
- new /obj/item/weapon/card/id(src)
- new /obj/item/weapon/card/id(src)
- new /obj/item/weapon/card/id(src)
- new /obj/item/weapon/card/id(src)
- new /obj/item/weapon/card/id(src)
-
+ for(var/i in 1 to 7)
+ new /obj/item/weapon/card/id(src)
+
/obj/item/weapon/storage/box/silver_ids
name = "box of spare silver IDs"
desc = "Shiny IDs for important people."
@@ -405,13 +322,8 @@
/obj/item/weapon/storage/box/silver_ids/New()
..()
- new /obj/item/weapon/card/id/silver(src)
- new /obj/item/weapon/card/id/silver(src)
- new /obj/item/weapon/card/id/silver(src)
- new /obj/item/weapon/card/id/silver(src)
- new /obj/item/weapon/card/id/silver(src)
- new /obj/item/weapon/card/id/silver(src)
- new /obj/item/weapon/card/id/silver(src)
+ for(var/i in 1 to 7)
+ new /obj/item/weapon/card/id/silver(src)
/obj/item/weapon/storage/box/prisoner
name = "box of prisoner IDs"
@@ -436,12 +348,8 @@
/obj/item/weapon/storage/box/seccarts/New()
..()
new /obj/item/weapon/cartridge/detective(src)
- new /obj/item/weapon/cartridge/security(src)
- new /obj/item/weapon/cartridge/security(src)
- new /obj/item/weapon/cartridge/security(src)
- new /obj/item/weapon/cartridge/security(src)
- new /obj/item/weapon/cartridge/security(src)
- new /obj/item/weapon/cartridge/security(src)
+ for(var/i in 1 to 6)
+ new /obj/item/weapon/cartridge/security(src)
/obj/item/weapon/storage/box/firingpins
name = "box of standard firing pins"
@@ -450,14 +358,9 @@
/obj/item/weapon/storage/box/firingpins/New()
..()
- new /obj/item/device/firing_pin(src)
- new /obj/item/device/firing_pin(src)
- new /obj/item/device/firing_pin(src)
- new /obj/item/device/firing_pin(src)
- new /obj/item/device/firing_pin(src)
- new /obj/item/device/firing_pin(src)
- new /obj/item/device/firing_pin(src)
-
+ for(var/i in 1 to 7)
+ new /obj/item/device/firing_pin(src)
+
/obj/item/weapon/storage/box/handcuffs
name = "box of spare handcuffs"
desc = "A box full of handcuffs."
@@ -465,14 +368,9 @@
/obj/item/weapon/storage/box/handcuffs/New()
..()
- new /obj/item/weapon/restraints/handcuffs(src)
- new /obj/item/weapon/restraints/handcuffs(src)
- new /obj/item/weapon/restraints/handcuffs(src)
- new /obj/item/weapon/restraints/handcuffs(src)
- new /obj/item/weapon/restraints/handcuffs(src)
- new /obj/item/weapon/restraints/handcuffs(src)
- new /obj/item/weapon/restraints/handcuffs(src)
-
+ for(var/i in 1 to 7)
+ new /obj/item/weapon/restraints/handcuffs(src)
+
/obj/item/weapon/storage/box/zipties
name = "box of spare zipties"
desc = "A box full of zipties."
@@ -480,14 +378,9 @@
/obj/item/weapon/storage/box/zipties/New()
..()
- new /obj/item/weapon/restraints/handcuffs/cable/zipties(src)
- new /obj/item/weapon/restraints/handcuffs/cable/zipties(src)
- new /obj/item/weapon/restraints/handcuffs/cable/zipties(src)
- new /obj/item/weapon/restraints/handcuffs/cable/zipties(src)
- new /obj/item/weapon/restraints/handcuffs/cable/zipties(src)
- new /obj/item/weapon/restraints/handcuffs/cable/zipties(src)
- new /obj/item/weapon/restraints/handcuffs/cable/zipties(src)
-
+ for(var/i in 1 to 7)
+ new /obj/item/weapon/restraints/handcuffs/cable/zipties(src)
+
/obj/item/weapon/storage/box/alienhandcuffs
name = "box of spare handcuffs"
desc = "A box full of handcuffs."
@@ -495,14 +388,9 @@
/obj/item/weapon/storage/box/alienhandcuffs/New()
..()
- new /obj/item/weapon/restraints/handcuffs/alien(src)
- new /obj/item/weapon/restraints/handcuffs/alien(src)
- new /obj/item/weapon/restraints/handcuffs/alien(src)
- new /obj/item/weapon/restraints/handcuffs/alien(src)
- new /obj/item/weapon/restraints/handcuffs/alien(src)
- new /obj/item/weapon/restraints/handcuffs/alien(src)
- new /obj/item/weapon/restraints/handcuffs/alien(src)
-
+ for(var/i in 1 to 7)
+ new /obj/item/weapon/restraints/handcuffs/alien(src)
+
/obj/item/weapon/storage/box/fakesyndiesuit
name = "boxed space suit and helmet"
desc = "A sleek, sturdy box used to hold replica spacesuits."
@@ -520,13 +408,9 @@
/obj/item/weapon/storage/box/mousetraps/New()
..()
- new /obj/item/device/assembly/mousetrap( src )
- new /obj/item/device/assembly/mousetrap( src )
- new /obj/item/device/assembly/mousetrap( src )
- new /obj/item/device/assembly/mousetrap( src )
- new /obj/item/device/assembly/mousetrap( src )
- new /obj/item/device/assembly/mousetrap( src )
-
+ for(var/i in 1 to 6)
+ new /obj/item/device/assembly/mousetrap( src )
+
/obj/item/weapon/storage/box/pillbottles
name = "box of pill bottles"
desc = "It has pictures of pill bottles on its front."
@@ -534,14 +418,9 @@
/obj/item/weapon/storage/box/pillbottles/New()
..()
- new /obj/item/weapon/storage/pill_bottle( src )
- new /obj/item/weapon/storage/pill_bottle( src )
- new /obj/item/weapon/storage/pill_bottle( src )
- new /obj/item/weapon/storage/pill_bottle( src )
- new /obj/item/weapon/storage/pill_bottle( src )
- new /obj/item/weapon/storage/pill_bottle( src )
- new /obj/item/weapon/storage/pill_bottle( src )
-
+ for(var/i in 1 to 7)
+ new /obj/item/weapon/storage/pill_bottle( src )
+
/obj/item/weapon/storage/box/snappops
name = "snap pop box"
desc = "Eight wrappers of fun! Ages 8 and up. Not suitable for children."
@@ -620,14 +499,9 @@
/obj/item/weapon/storage/box/deputy/New()
..()
- new /obj/item/clothing/tie/armband/deputy(src)
- new /obj/item/clothing/tie/armband/deputy(src)
- new /obj/item/clothing/tie/armband/deputy(src)
- new /obj/item/clothing/tie/armband/deputy(src)
- new /obj/item/clothing/tie/armband/deputy(src)
- new /obj/item/clothing/tie/armband/deputy(src)
- new /obj/item/clothing/tie/armband/deputy(src)
-
+ for(var/i in 1 to 7)
+ new /obj/item/clothing/tie/armband/deputy(src)
+
/obj/item/weapon/storage/box/metalfoam
name = "box of metal foam grenades"
desc = "To be used to rapidly seal hull breaches"
@@ -635,15 +509,9 @@
/obj/item/weapon/storage/box/metalfoam/New()
..()
- new /obj/item/weapon/grenade/chem_grenade/metalfoam(src)
- new /obj/item/weapon/grenade/chem_grenade/metalfoam(src)
- new /obj/item/weapon/grenade/chem_grenade/metalfoam(src)
- new /obj/item/weapon/grenade/chem_grenade/metalfoam(src)
- new /obj/item/weapon/grenade/chem_grenade/metalfoam(src)
- new /obj/item/weapon/grenade/chem_grenade/metalfoam(src)
- new /obj/item/weapon/grenade/chem_grenade/metalfoam(src)
-
-
+ for(var/i in 1 to 7)
+ new /obj/item/weapon/grenade/chem_grenade/metalfoam(src)
+
/obj/item/weapon/storage/box/hug
name = "box of hugs"
desc = "A special box for sensitive people."
@@ -676,14 +544,9 @@
/obj/item/weapon/storage/box/rubbershot/New()
..()
- new /obj/item/ammo_casing/shotgun/rubbershot(src)
- new /obj/item/ammo_casing/shotgun/rubbershot(src)
- new /obj/item/ammo_casing/shotgun/rubbershot(src)
- new /obj/item/ammo_casing/shotgun/rubbershot(src)
- new /obj/item/ammo_casing/shotgun/rubbershot(src)
- new /obj/item/ammo_casing/shotgun/rubbershot(src)
- new /obj/item/ammo_casing/shotgun/rubbershot(src)
-
+ for(var/i in 1 to 7)
+ new /obj/item/ammo_casing/shotgun/rubbershot(src)
+
/obj/item/weapon/storage/box/lethalshot
name = "box of lethal shotgun shots"
desc = "A box full of lethal shots, designed for riot shotguns."
@@ -698,3 +561,12 @@
new /obj/item/ammo_casing/shotgun/buckshot(src)
new /obj/item/ammo_casing/shotgun/buckshot(src)
new /obj/item/ammo_casing/shotgun/buckshot(src)
+
+/obj/item/weapon/storage/box/beanbag/New()
+ ..()
+ new /obj/item/ammo_casing/shotgun/beanbag(src)
+ new /obj/item/ammo_casing/shotgun/beanbag(src)
+ new /obj/item/ammo_casing/shotgun/beanbag(src)
+ new /obj/item/ammo_casing/shotgun/beanbag(src)
+ new /obj/item/ammo_casing/shotgun/beanbag(src)
+ new /obj/item/ammo_casing/shotgun/beanbag(src)
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm
index 67c4170031c..9183ffc92e5 100644
--- a/code/game/objects/items/weapons/storage/firstaid.dm
+++ b/code/game/objects/items/weapons/storage/firstaid.dm
@@ -42,9 +42,8 @@
..()
if(empty) return
icon_state = pick("ointment","firefirstaid")
- new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src)
- new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src)
- new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src)
+ for(var/i in 1 to 3)
+ new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src)
new /obj/item/weapon/reagent_containers/pill/oxandrolone(src)
new /obj/item/weapon/reagent_containers/pill/oxandrolone(src)
new /obj/item/weapon/reagent_containers/hypospray/medipen(src)
@@ -61,12 +60,10 @@
..()
if(empty) return
icon_state = pick("antitoxin","antitoxfirstaid","antitoxfirstaid2","antitoxfirstaid3")
- new /obj/item/weapon/reagent_containers/syringe/charcoal(src)
- new /obj/item/weapon/reagent_containers/syringe/charcoal(src)
- new /obj/item/weapon/reagent_containers/syringe/charcoal(src)
- new /obj/item/weapon/reagent_containers/pill/charcoal(src)
- new /obj/item/weapon/reagent_containers/pill/charcoal(src)
- new /obj/item/weapon/reagent_containers/pill/charcoal(src)
+ for(var/i in 1 to 3)
+ new /obj/item/weapon/reagent_containers/syringe/charcoal(src)
+ for(var/i in 1 to 3)
+ new /obj/item/weapon/reagent_containers/pill/charcoal(src)
new /obj/item/device/healthanalyzer(src)
return
@@ -79,10 +76,8 @@
/obj/item/weapon/storage/firstaid/o2/New()
..()
if(empty) return
- new /obj/item/weapon/reagent_containers/pill/salbutamol(src)
- new /obj/item/weapon/reagent_containers/pill/salbutamol(src)
- new /obj/item/weapon/reagent_containers/pill/salbutamol(src)
- new /obj/item/weapon/reagent_containers/pill/salbutamol(src)
+ for(var/i in 1 to 4)
+ new /obj/item/weapon/reagent_containers/pill/salbutamol(src)
new /obj/item/weapon/reagent_containers/hypospray/medipen(src)
new /obj/item/weapon/reagent_containers/hypospray/medipen(src)
new /obj/item/device/healthanalyzer(src)
@@ -97,10 +92,8 @@
/obj/item/weapon/storage/firstaid/brute/New()
..()
if(empty) return
- new /obj/item/weapon/reagent_containers/pill/patch/styptic(src)
- new /obj/item/weapon/reagent_containers/pill/patch/styptic(src)
- new /obj/item/weapon/reagent_containers/pill/patch/styptic(src)
- new /obj/item/weapon/reagent_containers/pill/patch/styptic(src)
+ for(var/i in 1 to 4)
+ new /obj/item/weapon/reagent_containers/pill/patch/styptic(src)
new /obj/item/stack/medical/gauze(src)
new /obj/item/stack/medical/gauze(src)
new /obj/item/device/healthanalyzer(src)
@@ -168,79 +161,50 @@
/obj/item/weapon/storage/box/silver_sulf/New()
..()
- new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src)
- new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src)
- new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src)
- new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src)
- new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src)
- new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src)
- new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src)
-
-
+ for(var/i in 1 to 7)
+ new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src)
+
/obj/item/weapon/storage/pill_bottle/charcoal
name = "bottle of charcoal pills"
desc = "Contains pills used to counter toxins."
/obj/item/weapon/storage/pill_bottle/charcoal/New()
..()
- new /obj/item/weapon/reagent_containers/pill/charcoal(src)
- new /obj/item/weapon/reagent_containers/pill/charcoal(src)
- new /obj/item/weapon/reagent_containers/pill/charcoal(src)
- new /obj/item/weapon/reagent_containers/pill/charcoal(src)
- new /obj/item/weapon/reagent_containers/pill/charcoal(src)
- new /obj/item/weapon/reagent_containers/pill/charcoal(src)
- new /obj/item/weapon/reagent_containers/pill/charcoal(src)
-
+ for(var/i in 1 to 7)
+ new /obj/item/weapon/reagent_containers/pill/charcoal(src)
+
/obj/item/weapon/storage/pill_bottle/epinephrine
name = "bottle of epinephrine pills"
desc = "Contains pills used to stabilize patients."
/obj/item/weapon/storage/pill_bottle/epinephrine/New()
..()
- new /obj/item/weapon/reagent_containers/pill/epinephrine(src)
- new /obj/item/weapon/reagent_containers/pill/epinephrine(src)
- new /obj/item/weapon/reagent_containers/pill/epinephrine(src)
- new /obj/item/weapon/reagent_containers/pill/epinephrine(src)
- new /obj/item/weapon/reagent_containers/pill/epinephrine(src)
- new /obj/item/weapon/reagent_containers/pill/epinephrine(src)
- new /obj/item/weapon/reagent_containers/pill/epinephrine(src)
-
+ for(var/i in 1 to 7)
+ new /obj/item/weapon/reagent_containers/pill/epinephrine(src)
+
/obj/item/weapon/storage/pill_bottle/mutadone
name = "bottle of mutadone pills"
desc = "Contains pills used to treat genetic abnormalities."
/obj/item/weapon/storage/pill_bottle/mutadone/New()
..()
- new /obj/item/weapon/reagent_containers/pill/mutadone(src)
- new /obj/item/weapon/reagent_containers/pill/mutadone(src)
- new /obj/item/weapon/reagent_containers/pill/mutadone(src)
- new /obj/item/weapon/reagent_containers/pill/mutadone(src)
- new /obj/item/weapon/reagent_containers/pill/mutadone(src)
- new /obj/item/weapon/reagent_containers/pill/mutadone(src)
- new /obj/item/weapon/reagent_containers/pill/mutadone(src)
-
+ for(var/i in 1 to 7)
+ new /obj/item/weapon/reagent_containers/pill/mutadone(src)
+
/obj/item/weapon/storage/pill_bottle/mannitol
name = "bottle of mannitol pills"
desc = "Contains pills used to treat brain damage."
/obj/item/weapon/storage/pill_bottle/mannitol/New()
..()
- new /obj/item/weapon/reagent_containers/pill/mannitol(src)
- new /obj/item/weapon/reagent_containers/pill/mannitol(src)
- new /obj/item/weapon/reagent_containers/pill/mannitol(src)
- new /obj/item/weapon/reagent_containers/pill/mannitol(src)
- new /obj/item/weapon/reagent_containers/pill/mannitol(src)
- new /obj/item/weapon/reagent_containers/pill/mannitol(src)
- new /obj/item/weapon/reagent_containers/pill/mannitol(src)
-
+ for(var/i in 1 to 7)
+ new /obj/item/weapon/reagent_containers/pill/mannitol(src)
+
/obj/item/weapon/storage/pill_bottle/stimulant
name = "bottle of stimulant pills"
desc = "Guaranteed to give you that extra burst of energy during a long shift!"
/obj/item/weapon/storage/pill_bottle/stimulant/New()
..()
- new /obj/item/weapon/reagent_containers/pill/stimulant(src)
- new /obj/item/weapon/reagent_containers/pill/stimulant(src)
- new /obj/item/weapon/reagent_containers/pill/stimulant(src)
- new /obj/item/weapon/reagent_containers/pill/stimulant(src)
- new /obj/item/weapon/reagent_containers/pill/stimulant(src)
\ No newline at end of file
+ for(var/i in 1 to 5)
+ new /obj/item/weapon/reagent_containers/pill/stimulant(src)
diff --git a/code/game/objects/items/weapons/storage/lockbox.dm b/code/game/objects/items/weapons/storage/lockbox.dm
index bab0a4e07e4..d740a80af20 100644
--- a/code/game/objects/items/weapons/storage/lockbox.dm
+++ b/code/game/objects/items/weapons/storage/lockbox.dm
@@ -82,9 +82,8 @@
/obj/item/weapon/storage/lockbox/loyalty/New()
..()
- new /obj/item/weapon/implantcase/loyalty(src)
- new /obj/item/weapon/implantcase/loyalty(src)
- new /obj/item/weapon/implantcase/loyalty(src)
+ for(var/i in 1 to 3)
+ new /obj/item/weapon/implantcase/loyalty(src)
new /obj/item/weapon/implanter/loyalty(src)
@@ -114,7 +113,6 @@
..()
new /obj/item/clothing/tie/medal/silver/valor(src)
new /obj/item/clothing/tie/medal/bronze_heart(src)
- new /obj/item/clothing/tie/medal/conduct(src)
- new /obj/item/clothing/tie/medal/conduct(src)
- new /obj/item/clothing/tie/medal/conduct(src)
- new /obj/item/clothing/tie/medal/gold/captain(src)
\ No newline at end of file
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/tie/medal/conduct(src)
+ new /obj/item/clothing/tie/medal/gold/captain(src)
diff --git a/code/game/objects/items/weapons/storage/secure.dm b/code/game/objects/items/weapons/storage/secure.dm
index a91ba35482c..a80a611d619 100644
--- a/code/game/objects/items/weapons/storage/secure.dm
+++ b/code/game/objects/items/weapons/storage/secure.dm
@@ -36,21 +36,21 @@
if (istype(W, /obj/item/weapon/screwdriver))
if (do_after(user, 20/W.toolspeed, target = src))
src.open =! src.open
- user.show_message(text("You [] the service panel.", (src.open ? "open" : "close")))
+ user.show_message("You [open ? "open" : "close"] the service panel.", 1)
return
if ((istype(W, /obj/item/device/multitool)) && (src.open == 1)&& (!src.l_hacking))
- user.show_message(text("Now attempting to reset internal memory, please hold."), 1)
+ user.show_message("Now attempting to reset internal memory, please hold.", 1)
src.l_hacking = 1
if (do_after(usr, 100/W.toolspeed, target = src))
if (prob(40))
src.l_setshort = 1
src.l_set = 0
- user.show_message(text("Internal memory reset. Please give it a few seconds to reinitialize."), 1)
+ user.show_message("Internal memory reset. Please give it a few seconds to reinitialize.", 1)
sleep(80)
src.l_setshort = 0
src.l_hacking = 0
else
- user.show_message(text("Unable to reset internal memory."), 1)
+ user.show_message("Unable to reset internal memory.", 1)
src.l_hacking = 0
else src.l_hacking = 0
return
diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm
index 6b2d688e5dd..6dc851cd335 100644
--- a/code/game/objects/items/weapons/storage/uplink_kits.dm
+++ b/code/game/objects/items/weapons/storage/uplink_kits.dm
@@ -158,16 +158,10 @@
/obj/item/weapon/storage/box/syndie_kit/bioterror/New()
..()
- new /obj/item/weapon/reagent_containers/syringe/bioterror(src)
- new /obj/item/weapon/reagent_containers/syringe/bioterror(src)
- new /obj/item/weapon/reagent_containers/syringe/bioterror(src)
- new /obj/item/weapon/reagent_containers/syringe/bioterror(src)
- new /obj/item/weapon/reagent_containers/syringe/bioterror(src)
- new /obj/item/weapon/reagent_containers/syringe/bioterror(src)
- new /obj/item/weapon/reagent_containers/syringe/bioterror(src)
+ for(var/i in 1 to 7)
+ new /obj/item/weapon/reagent_containers/syringe/bioterror(src)
return
-
/obj/item/weapon/storage/box/syndie_kit/imp_adrenal
name = "boxed adrenal implant (with injector)"
@@ -178,7 +172,6 @@
O.update_icon()
return
-
/obj/item/weapon/storage/box/syndie_kit/imp_storage
name = "boxed storage implant (with injector)"
@@ -187,7 +180,6 @@
new /obj/item/weapon/implanter/storage(src)
return
-
/obj/item/weapon/storage/box/syndie_kit/space
name = "boxed space suit and helmet"
can_hold = list(/obj/item/clothing/suit/space/syndicate, /obj/item/clothing/head/helmet/space/syndicate)
@@ -199,7 +191,6 @@
new /obj/item/clothing/head/helmet/space/syndicate/black/red(src)
return
-
/obj/item/weapon/storage/box/syndie_kit/emp
name = "boxed EMP kit"
@@ -241,30 +232,25 @@
new /obj/item/nuke_core_container(src)
new /obj/item/weapon/paper/nuke_instructions(src)
-
/obj/item/weapon/storage/box/syndie_kit/tuberculosisgrenade
- name = "boxed virus grenade kit"
+ name = "boxed virus grenade kit"
-/obj/item/weapon/storage/box/virus_kit/tuberculosisgrenade/New()
- ..()
- new /obj/item/weapon/grenade/chem_grenade/tuberculosis(src)
- new /obj/item/weapon/reagent_containers/hypospray/medipen/tuberculosiscure(src)
- new /obj/item/weapon/reagent_containers/hypospray/medipen/tuberculosiscure(src)
- new /obj/item/weapon/reagent_containers/hypospray/medipen/tuberculosiscure(src)
- new /obj/item/weapon/reagent_containers/hypospray/medipen/tuberculosiscure(src)
- new /obj/item/weapon/reagent_containers/hypospray/medipen/tuberculosiscure(src)
- new /obj/item/weapon/reagent_containers/syringe(src)
- new /obj/item/weapon/reagent_containers/glass/bottle/tuberculosiscure(src)
- return
+/obj/item/weapon/storage/box/syndie_kit/tuberculosisgrenade/New()
+ ..()
+ new /obj/item/weapon/grenade/chem_grenade/tuberculosis(src)
+ for(var/i in 1 to 5)
+ new /obj/item/weapon/reagent_containers/hypospray/medipen/tuberculosiscure(src)
+ new /obj/item/weapon/reagent_containers/syringe(src)
+ new /obj/item/weapon/reagent_containers/glass/bottle/tuberculosiscure(src)
+ return
/obj/item/weapon/storage/box/syndie_kit/tuberculosiskit
- name = "boxed virus kit"
-
-/obj/item/weapon/storage/box/virus_kit/tuberculosiskit/New()
- ..()
- new /obj/item/weapon/reagent_containers/glass/bottle/tuberculosis(src)
- new /obj/item/weapon/reagent_containers/hypospray/medipen/tuberculosiscure(src)
- new /obj/item/weapon/reagent_containers/syringe(src)
- new /obj/item/weapon/reagent_containers/glass/bottle/tuberculosiscure(src)
- return
+ name = "boxed virus kit"
+/obj/item/weapon/storage/box/syndie_kit/tuberculosiskit/New()
+ ..()
+ new /obj/item/weapon/reagent_containers/glass/bottle/tuberculosis(src)
+ new /obj/item/weapon/reagent_containers/hypospray/medipen/tuberculosiscure(src)
+ new /obj/item/weapon/reagent_containers/syringe(src)
+ new /obj/item/weapon/reagent_containers/glass/bottle/tuberculosiscure(src)
+ return
diff --git a/code/game/objects/items/weapons/tanks/jetpack.dm b/code/game/objects/items/weapons/tanks/jetpack.dm
index 6d7db63e8a8..fea4e6db9fc 100644
--- a/code/game/objects/items/weapons/tanks/jetpack.dm
+++ b/code/game/objects/items/weapons/tanks/jetpack.dm
@@ -54,7 +54,7 @@
var/datum/gas_mixture/G = src.air_contents.remove(num)
- var/allgases = G.carbon_dioxide + G.nitrogen + G.oxygen + G.toxins //fuck trace gases -Pete
+ var/allgases = G.total_moles()
if(allgases >= 0.005)
return 1
@@ -73,7 +73,8 @@
/obj/item/weapon/tank/jetpack/void/New()
..()
- air_contents.oxygen = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
+ air_contents.assert_gas("o2")
+ air_contents.gases["o2"][MOLES] = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
/obj/item/weapon/tank/jetpack/oxygen
@@ -84,7 +85,8 @@
/obj/item/weapon/tank/jetpack/oxygen/New()
..()
- air_contents.oxygen = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
+ air_contents.assert_gas("o2")
+ air_contents.gases["o2"][MOLES] = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
/obj/item/weapon/tank/jetpack/oxygen/harness
name = "jet harness (oxygen)"
@@ -114,7 +116,8 @@
..()
ion_trail = new /datum/effect_system/trail_follow/ion()
ion_trail.set_up(src)
- air_contents.carbon_dioxide = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
+ air_contents.assert_gas("co2")
+ air_contents.gases["co2"][MOLES] = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
/obj/item/weapon/tank/jetpack/suit
diff --git a/code/game/objects/items/weapons/tanks/tank_types.dm b/code/game/objects/items/weapons/tanks/tank_types.dm
index 586e3a47ddc..0bc932047d5 100644
--- a/code/game/objects/items/weapons/tanks/tank_types.dm
+++ b/code/game/objects/items/weapons/tanks/tank_types.dm
@@ -14,13 +14,14 @@
name = "oxygen tank"
desc = "A tank of oxygen."
icon_state = "oxygen"
- distribute_pressure = 16
+ distribute_pressure = TANK_DEFAULT_RELEASE_PRESSURE
force = 10
/obj/item/weapon/tank/internals/oxygen/New()
..()
- src.air_contents.oxygen = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
+ air_contents.assert_gas("o2")
+ air_contents.gases["o2"][MOLES] = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
return
@@ -45,13 +46,9 @@
/obj/item/weapon/tank/internals/anesthetic/New()
..()
-
- src.air_contents.oxygen = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * O2STANDARD
-
- var/datum/gas/sleeping_agent/trace_gas = new()
- trace_gas.moles = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * N2STANDARD
-
- src.air_contents.trace_gases += trace_gas
+ air_contents.assert_gases("o2", "n2o")
+ air_contents.gases["o2"][MOLES] = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * O2STANDARD
+ air_contents.gases["n2o"][MOLES] = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * N2STANDARD
return
/*
@@ -66,9 +63,9 @@
/obj/item/weapon/tank/internals/air/New()
..()
-
- src.air_contents.oxygen = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * O2STANDARD
- src.air_contents.nitrogen = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * N2STANDARD
+ air_contents.assert_gases("o2","n2")
+ air_contents.gases["o2"][MOLES] = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * O2STANDARD
+ air_contents.gases["n2"][MOLES] = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * N2STANDARD
return
@@ -86,8 +83,8 @@
/obj/item/weapon/tank/internals/plasma/New()
..()
-
- src.air_contents.toxins = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
+ air_contents.assert_gas("plasma")
+ air_contents.gases["plasma"][MOLES] = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
return
/obj/item/weapon/tank/internals/plasma/attackby(obj/item/weapon/W, mob/user, params)
@@ -105,7 +102,8 @@
/obj/item/weapon/tank/internals/plasma/full/New()
..()
- src.air_contents.toxins = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
+ air_contents.assert_gas("plasma")
+ air_contents.gases["plasma"][MOLES] = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
return
@@ -120,14 +118,14 @@
/obj/item/weapon/tank/internals/plasmaman/New()
..()
-
- src.air_contents.toxins = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
+ air_contents.assert_gas("plasma")
+ air_contents.gases["plasma"][MOLES] = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
return
/obj/item/weapon/tank/internals/plasmaman/full/New()
..()
-
- src.air_contents.toxins = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
+ air_contents.assert_gas("plasma")
+ air_contents.gases["plasma"][MOLES] = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
return
@@ -139,8 +137,8 @@
/obj/item/weapon/tank/internals/plasmaman/belt/full/New()
..()
-
- src.air_contents.toxins = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
+ air_contents.assert_gas("plasma")
+ air_contents.gases["plasma"][MOLES] = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
return
@@ -156,13 +154,14 @@
slot_flags = SLOT_BELT
w_class = 2
force = 4
- distribute_pressure = ONE_ATMOSPHERE*O2STANDARD
+ distribute_pressure = TANK_DEFAULT_RELEASE_PRESSURE
volume = 3 //Tiny. Real life equivalents only have 21 breaths of oxygen in them. They're EMERGENCY tanks anyway -errorage (dangercon 2011)
/obj/item/weapon/tank/internals/emergency_oxygen/New()
..()
- src.air_contents.oxygen = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
+ air_contents.assert_gas("o2")
+ air_contents.gases["o2"][MOLES] = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
return
/obj/item/weapon/tank/internals/emergency_oxygen/engi
diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm
index eff1d524c21..57054c54afa 100644
--- a/code/game/objects/items/weapons/tanks/tanks.dm
+++ b/code/game/objects/items/weapons/tanks/tanks.dm
@@ -1,7 +1,3 @@
-#define TANK_MAX_RELEASE_PRESSURE (ONE_ATMOSPHERE*3)
-#define TANK_MIN_RELEASE_PRESSURE 0
-#define TANK_DEFAULT_RELEASE_PRESSURE (ONE_ATMOSPHERE*O2STANDARD)
-
/obj/item/weapon/tank
name = "tank"
icon = 'icons/obj/tank.dmi'
@@ -119,10 +115,11 @@
add_fingerprint(user)
ui_interact(user)
-/obj/item/weapon/tank/ui_interact(mob/user, ui_key = "main", var/datum/tgui/ui = null, force_open = 0)
- ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open)
+/obj/item/weapon/tank/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
+ datum/tgui/master_ui = null, datum/ui_state/state = hands_state)
+ ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if (!ui)
- ui = new(user, src, ui_key, "tanks", name, 400, 200, state = inventory_state)
+ ui = new(user, src, ui_key, "tanks", name, 400, 200, master_ui, state)
ui.open()
/obj/item/weapon/tank/get_ui_data()
diff --git a/code/game/objects/items/weapons/teleportation.dm b/code/game/objects/items/weapons/teleportation.dm
index 029c0fd0238..2406d7b9d7b 100644
--- a/code/game/objects/items/weapons/teleportation.dm
+++ b/code/game/objects/items/weapons/teleportation.dm
@@ -156,7 +156,7 @@ Frequency:
if(turfs.len)
L["None (Dangerous)"] = pick(turfs)
var/t1 = input(user, "Please select a teleporter to lock in on.", "Hand Teleporter") in L
- if ((user.get_active_hand() != src || user.stat || user.restrained()))
+ if (user.get_active_hand() != src || user.incapacitated())
return
if(active_portals >= 3)
user.show_message("\The [src] is recharging!")
@@ -166,7 +166,6 @@ Frequency:
var/obj/effect/portal/P = new /obj/effect/portal(get_turf(src), T, src)
try_move_adjacent(P)
active_portals++
- src.add_fingerprint(user)
- return
+ add_fingerprint(user)
diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm
index 3e716979df8..2cd7a772f8c 100644
--- a/code/game/objects/objs.dm
+++ b/code/game/objects/objs.dm
@@ -17,6 +17,7 @@
/obj/Destroy()
if(!istype(src, /obj/machinery))
SSobj.processing.Remove(src) // TODO: Have a processing bitflag to reduce on unnecessary loops through the processing lists
+ SStgui.close_uis(src)
return ..()
/obj/assume_air(datum/gas_mixture/giver)
@@ -194,7 +195,7 @@
/obj/proc/tesla_act(var/power)
being_shocked = 1
- var/power_bounced = power / 1.3
- tesla_zap(src, 5, power_bounced)
+ var/power_bounced = power / 2
+ tesla_zap(src, 3, power_bounced)
spawn(10)
being_shocked = 0
diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm
index 38a348bbfcb..cbddbfeaff7 100644
--- a/code/game/objects/structures/crates_lockers/closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets.dm
@@ -33,6 +33,10 @@
if(!opened) // if closed, any item at the crate's loc is put in the contents
take_contents()
+/obj/structure/closet/Destroy()
+ dump_contents()
+ return ..()
+
/obj/structure/closet/update_icon()
overlays.Cut()
if(!opened)
@@ -167,7 +171,6 @@
contents_explosion(severity, target)
if(loc && ispath(material_drop) && !(flags & NODECONSTRUCT))
new material_drop(loc)
- dump_contents()
qdel(src)
..()
@@ -176,7 +179,6 @@
if((Proj.damage_type == BRUTE || Proj.damage_type == BURN))
health -= Proj.damage
if(health <= 0)
- dump_contents()
qdel(src)
return
@@ -184,12 +186,10 @@
if(user.environment_smash)
user.do_attack_animation(src)
visible_message("[user] destroys \the [src].")
- dump_contents()
qdel(src)
/obj/structure/closet/blob_act()
if(prob(75))
- dump_contents()
qdel(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/fitness.dm b/code/game/objects/structures/crates_lockers/closets/fitness.dm
index 46dc772b5fe..d3e7f0156ea 100644
--- a/code/game/objects/structures/crates_lockers/closets/fitness.dm
+++ b/code/game/objects/structures/crates_lockers/closets/fitness.dm
@@ -43,12 +43,10 @@
/obj/structure/closet/lasertag/red/New()
..()
- new /obj/item/weapon/gun/energy/laser/redtag(src)
- new /obj/item/weapon/gun/energy/laser/redtag(src)
- new /obj/item/weapon/gun/energy/laser/redtag(src)
- new /obj/item/clothing/suit/redtag(src)
- new /obj/item/clothing/suit/redtag(src)
- new /obj/item/clothing/suit/redtag(src)
+ for(var/i in 1 to 3)
+ new /obj/item/weapon/gun/energy/laser/redtag(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/suit/redtag(src)
new /obj/item/clothing/head/helmet/redtaghelm(src)
@@ -59,10 +57,8 @@
/obj/structure/closet/lasertag/blue/New()
..()
- new /obj/item/weapon/gun/energy/laser/bluetag(src)
- new /obj/item/weapon/gun/energy/laser/bluetag(src)
- new /obj/item/weapon/gun/energy/laser/bluetag(src)
- new /obj/item/clothing/suit/bluetag(src)
- new /obj/item/clothing/suit/bluetag(src)
- new /obj/item/clothing/suit/bluetag(src)
+ for(var/i in 1 to 3)
+ new /obj/item/weapon/gun/energy/laser/bluetag(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/suit/bluetag(src)
new /obj/item/clothing/head/helmet/bluetaghelm(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/gimmick.dm b/code/game/objects/structures/crates_lockers/closets/gimmick.dm
index 1b5cdee6d7e..e2d7f9c2ac1 100644
--- a/code/game/objects/structures/crates_lockers/closets/gimmick.dm
+++ b/code/game/objects/structures/crates_lockers/closets/gimmick.dm
@@ -22,17 +22,10 @@
/obj/structure/closet/gimmick/russian/New()
..()
- new /obj/item/clothing/head/ushanka(src)
- new /obj/item/clothing/head/ushanka(src)
- new /obj/item/clothing/head/ushanka(src)
- new /obj/item/clothing/head/ushanka(src)
- new /obj/item/clothing/head/ushanka(src)
- new /obj/item/clothing/under/soviet(src)
- new /obj/item/clothing/under/soviet(src)
- new /obj/item/clothing/under/soviet(src)
- new /obj/item/clothing/under/soviet(src)
- new /obj/item/clothing/under/soviet(src)
-
+ for(var/i in 1 to 5)
+ new /obj/item/clothing/head/ushanka(src)
+ for(var/i in 1 to 5)
+ new /obj/item/clothing/under/soviet(src)
/obj/structure/closet/gimmick/tacticool
name = "tacticool gear closet"
@@ -67,50 +60,38 @@
/obj/structure/closet/thunderdome/tdred/New()
..()
- new /obj/item/clothing/suit/armor/tdome/red(src)
- new /obj/item/clothing/suit/armor/tdome/red(src)
- new /obj/item/clothing/suit/armor/tdome/red(src)
- new /obj/item/weapon/melee/energy/sword/saber(src)
- new /obj/item/weapon/melee/energy/sword/saber(src)
- new /obj/item/weapon/melee/energy/sword/saber(src)
- new /obj/item/weapon/gun/energy/laser(src)
- new /obj/item/weapon/gun/energy/laser(src)
- new /obj/item/weapon/gun/energy/laser(src)
- new /obj/item/weapon/melee/baton/loaded(src)
- new /obj/item/weapon/melee/baton/loaded(src)
- new /obj/item/weapon/melee/baton/loaded(src)
- new /obj/item/weapon/storage/box/flashbangs(src)
- new /obj/item/weapon/storage/box/flashbangs(src)
- new /obj/item/weapon/storage/box/flashbangs(src)
- new /obj/item/clothing/head/helmet/thunderdome(src)
- new /obj/item/clothing/head/helmet/thunderdome(src)
- new /obj/item/clothing/head/helmet/thunderdome(src)
-
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/suit/armor/tdome/red(src)
+ for(var/i in 1 to 3)
+ new /obj/item/weapon/melee/energy/sword/saber(src)
+ for(var/i in 1 to 3)
+ new /obj/item/weapon/gun/energy/laser(src)
+ for(var/i in 1 to 3)
+ new /obj/item/weapon/melee/baton/loaded(src)
+ for(var/i in 1 to 3)
+ new /obj/item/weapon/storage/box/flashbangs(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/head/helmet/thunderdome(src)
+
/obj/structure/closet/thunderdome/tdgreen
name = "green-team Thunderdome closet"
icon_door = "green"
/obj/structure/closet/thunderdome/tdgreen/New()
..()
- new /obj/item/clothing/suit/armor/tdome/green(src)
- new /obj/item/clothing/suit/armor/tdome/green(src)
- new /obj/item/clothing/suit/armor/tdome/green(src)
- new /obj/item/weapon/melee/energy/sword/saber(src)
- new /obj/item/weapon/melee/energy/sword/saber(src)
- new /obj/item/weapon/melee/energy/sword/saber(src)
- new /obj/item/weapon/gun/energy/laser(src)
- new /obj/item/weapon/gun/energy/laser(src)
- new /obj/item/weapon/gun/energy/laser(src)
- new /obj/item/weapon/melee/baton/loaded(src)
- new /obj/item/weapon/melee/baton/loaded(src)
- new /obj/item/weapon/melee/baton/loaded(src)
- new /obj/item/weapon/storage/box/flashbangs(src)
- new /obj/item/weapon/storage/box/flashbangs(src)
- new /obj/item/weapon/storage/box/flashbangs(src)
- new /obj/item/clothing/head/helmet/thunderdome(src)
- new /obj/item/clothing/head/helmet/thunderdome(src)
- new /obj/item/clothing/head/helmet/thunderdome(src)
-
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/suit/armor/tdome/green(src)
+ for(var/i in 1 to 3)
+ new /obj/item/weapon/melee/energy/sword/saber(src)
+ for(var/i in 1 to 3)
+ new /obj/item/weapon/gun/energy/laser(src)
+ for(var/i in 1 to 3)
+ new /obj/item/weapon/melee/baton/loaded(src)
+ for(var/i in 1 to 3)
+ new /obj/item/weapon/storage/box/flashbangs(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/head/helmet/thunderdome(src)
+
/obj/structure/closet/malf/suits
desc = "It's a storage unit for operational gear."
icon_state = "syndicate"
diff --git a/code/game/objects/structures/crates_lockers/closets/job_closets.dm b/code/game/objects/structures/crates_lockers/closets/job_closets.dm
index 0f2d6345066..56ca7d875d0 100644
--- a/code/game/objects/structures/crates_lockers/closets/job_closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets/job_closets.dm
@@ -23,6 +23,10 @@
new /obj/item/clothing/shoes/sneakers/black(src)
new /obj/item/weapon/reagent_containers/glass/rag(src)
new /obj/item/weapon/reagent_containers/glass/rag(src)
+ new /obj/item/weapon/storage/box/beanbag(src)
+ new /obj/item/clothing/suit/armor/vest(src)
+ new /obj/item/clothing/glasses/sunglasses/reagent(src)
+ new /obj/item/weapon/storage/belt/bandolier(src)
/obj/structure/closet/chefcloset
name = "\proper chef's closet"
@@ -37,9 +41,8 @@
new /obj/item/device/radio/headset/headset_srv(src)
new /obj/item/clothing/tie/waistcoat(src)
new /obj/item/clothing/tie/waistcoat(src)
- new /obj/item/clothing/suit/apron/chef(src)
- new /obj/item/clothing/suit/apron/chef(src)
- new /obj/item/clothing/suit/apron/chef(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/suit/apron/chef(src)
new /obj/item/clothing/head/soft/mime(src)
new /obj/item/clothing/head/soft/mime(src)
new /obj/item/weapon/storage/box/mousetraps(src)
@@ -61,9 +64,8 @@
new /obj/item/clothing/gloves/color/black(src)
new /obj/item/clothing/head/soft/purple(src)
new /obj/item/device/flashlight(src)
- new /obj/item/weapon/caution(src)
- new /obj/item/weapon/caution(src)
- new /obj/item/weapon/caution(src)
+ for(var/i in 1 to 3)
+ new /obj/item/weapon/caution(src)
new /obj/item/weapon/holosign_creator(src)
new /obj/item/device/lightreplacer(src)
new /obj/item/weapon/soap(src)
@@ -132,18 +134,14 @@
new /obj/item/weapon/storage/backpack/satchel_sec(src)
new /obj/item/weapon/storage/backpack/dufflebag/sec(src)
new /obj/item/weapon/storage/backpack/dufflebag/sec(src)
- new /obj/item/clothing/under/rank/security(src)
- new /obj/item/clothing/under/rank/security(src)
- new /obj/item/clothing/under/rank/security(src)
- new /obj/item/clothing/shoes/jackboots(src)
- new /obj/item/clothing/shoes/jackboots(src)
- new /obj/item/clothing/shoes/jackboots(src)
- new /obj/item/clothing/head/beret/sec(src)
- new /obj/item/clothing/head/beret/sec(src)
- new /obj/item/clothing/head/beret/sec(src)
- new /obj/item/clothing/head/soft/sec(src)
- new /obj/item/clothing/head/soft/sec(src)
- new /obj/item/clothing/head/soft/sec(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/under/rank/security(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/shoes/jackboots(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/head/beret/sec(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/head/soft/sec(src)
new /obj/item/clothing/mask/bandana/red(src)
new /obj/item/clothing/mask/bandana/red(src)
return
@@ -157,18 +155,14 @@
..()
contents = list()
new /obj/item/clothing/suit/hooded/wintercoat/cargo(src)
- new /obj/item/clothing/under/rank/cargotech(src)
- new /obj/item/clothing/under/rank/cargotech(src)
- new /obj/item/clothing/under/rank/cargotech(src)
- new /obj/item/clothing/shoes/sneakers/black(src)
- new /obj/item/clothing/shoes/sneakers/black(src)
- new /obj/item/clothing/shoes/sneakers/black(src)
- new /obj/item/clothing/gloves/fingerless(src)
- new /obj/item/clothing/gloves/fingerless(src)
- new /obj/item/clothing/gloves/fingerless(src)
- new /obj/item/clothing/head/soft(src)
- new /obj/item/clothing/head/soft(src)
- new /obj/item/clothing/head/soft(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/under/rank/cargotech(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/shoes/sneakers/black(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/gloves/fingerless(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/head/soft(src)
new /obj/item/device/radio/headset/headset_cargo(src)
/obj/structure/closet/wardrobe/atmospherics_yellow
@@ -181,15 +175,12 @@
new /obj/item/weapon/storage/backpack/dufflebag(src)
new /obj/item/weapon/storage/backpack/satchel_norm(src)
new /obj/item/weapon/storage/backpack(src)
- new /obj/item/clothing/suit/hooded/wintercoat/engineering/atmos(src)
- new /obj/item/clothing/suit/hooded/wintercoat/engineering/atmos(src)
- new /obj/item/clothing/suit/hooded/wintercoat/engineering/atmos(src)
- new /obj/item/clothing/under/rank/atmospheric_technician(src)
- new /obj/item/clothing/under/rank/atmospheric_technician(src)
- new /obj/item/clothing/under/rank/atmospheric_technician(src)
- new /obj/item/clothing/shoes/sneakers/black(src)
- new /obj/item/clothing/shoes/sneakers/black(src)
- new /obj/item/clothing/shoes/sneakers/black(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/suit/hooded/wintercoat/engineering/atmos(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/under/rank/atmospheric_technician(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/shoes/sneakers/black(src)
return
/obj/structure/closet/wardrobe/engineering_yellow
@@ -203,18 +194,14 @@
new /obj/item/weapon/storage/backpack/industrial(src)
new /obj/item/weapon/storage/backpack/satchel_eng(src)
new /obj/item/clothing/suit/hooded/wintercoat/engineering(src)
- new /obj/item/clothing/under/rank/engineer(src)
- new /obj/item/clothing/under/rank/engineer(src)
- new /obj/item/clothing/under/rank/engineer(src)
- new /obj/item/clothing/suit/hazardvest(src)
- new /obj/item/clothing/suit/hazardvest(src)
- new /obj/item/clothing/suit/hazardvest(src)
- new /obj/item/clothing/shoes/workboots(src)
- new /obj/item/clothing/shoes/workboots(src)
- new /obj/item/clothing/shoes/workboots(src)
- new /obj/item/clothing/head/hardhat(src)
- new /obj/item/clothing/head/hardhat(src)
- new /obj/item/clothing/head/hardhat(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/under/rank/engineer(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/suit/hazardvest(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/shoes/workboots(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/head/hardhat(src)
return
/obj/structure/closet/wardrobe/white/medical
@@ -232,19 +219,16 @@
new /obj/item/clothing/under/rank/medical/blue(src)
new /obj/item/clothing/under/rank/medical/green(src)
new /obj/item/clothing/under/rank/medical/purple(src)
- new /obj/item/clothing/under/rank/medical(src)
- new /obj/item/clothing/under/rank/medical(src)
- new /obj/item/clothing/under/rank/medical(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/under/rank/medical(src)
new /obj/item/clothing/suit/toggle/labcoat(src)
new /obj/item/clothing/suit/toggle/labcoat(src)
new /obj/item/clothing/suit/toggle/labcoat/emt(src)
new /obj/item/clothing/suit/toggle/labcoat/emt(src)
- new /obj/item/clothing/shoes/sneakers/white(src)
- new /obj/item/clothing/shoes/sneakers/white(src)
- new /obj/item/clothing/shoes/sneakers/white(src)
- new /obj/item/clothing/head/soft/emt(src)
- new /obj/item/clothing/head/soft/emt(src)
- new /obj/item/clothing/head/soft/emt(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/shoes/sneakers/white(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/head/soft/emt(src)
return
/obj/structure/closet/wardrobe/robotics_black
@@ -348,20 +332,16 @@
new /obj/item/weapon/storage/backpack/satchel_tox(src)
new /obj/item/weapon/storage/backpack/satchel_tox(src)
new /obj/item/clothing/suit/hooded/wintercoat/science(src)
- new /obj/item/clothing/under/rank/scientist(src)
- new /obj/item/clothing/under/rank/scientist(src)
- new /obj/item/clothing/under/rank/scientist(src)
- new /obj/item/clothing/suit/toggle/labcoat/science(src)
- new /obj/item/clothing/suit/toggle/labcoat/science(src)
- new /obj/item/clothing/suit/toggle/labcoat/science(src)
- new /obj/item/clothing/shoes/sneakers/white(src)
- new /obj/item/clothing/shoes/sneakers/white(src)
- new /obj/item/clothing/shoes/sneakers/white(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/under/rank/scientist(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/suit/toggle/labcoat/science(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/shoes/sneakers/white(src)
new /obj/item/device/radio/headset/headset_sci(src)
new /obj/item/device/radio/headset/headset_sci(src)
- new /obj/item/clothing/mask/gas(src)
- new /obj/item/clothing/mask/gas(src)
- new /obj/item/clothing/mask/gas(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/mask/gas(src)
return
/obj/structure/closet/wardrobe/botanist
@@ -380,9 +360,7 @@
new /obj/item/clothing/suit/apron(src)
new /obj/item/clothing/suit/apron/overalls(src)
new /obj/item/clothing/suit/apron/overalls(src)
- new /obj/item/clothing/under/rank/hydroponics(src)
- new /obj/item/clothing/under/rank/hydroponics(src)
- new /obj/item/clothing/under/rank/hydroponics(src)
- new /obj/item/clothing/mask/bandana(src)
- new /obj/item/clothing/mask/bandana(src)
- new /obj/item/clothing/mask/bandana(src)
\ No newline at end of file
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/under/rank/hydroponics(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/mask/bandana(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/bar.dm b/code/game/objects/structures/crates_lockers/closets/secure/bar.dm
index 7d04a6bfee6..72fc2ad7bb8 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/bar.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/bar.dm
@@ -7,13 +7,5 @@
/obj/structure/closet/secure_closet/bar/New()
..()
- new /obj/item/weapon/reagent_containers/food/drinks/beer( src )
- new /obj/item/weapon/reagent_containers/food/drinks/beer( src )
- new /obj/item/weapon/reagent_containers/food/drinks/beer( src )
- new /obj/item/weapon/reagent_containers/food/drinks/beer( src )
- new /obj/item/weapon/reagent_containers/food/drinks/beer( src )
- new /obj/item/weapon/reagent_containers/food/drinks/beer( src )
- new /obj/item/weapon/reagent_containers/food/drinks/beer( src )
- new /obj/item/weapon/reagent_containers/food/drinks/beer( src )
- new /obj/item/weapon/reagent_containers/food/drinks/beer( src )
- new /obj/item/weapon/reagent_containers/food/drinks/beer( src )
+ for(var/i in 1 to 10)
+ new /obj/item/weapon/reagent_containers/food/drinks/beer( src )
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
index 1c9ebd16da9..3f6c5c5a31c 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
@@ -34,16 +34,13 @@
..()
new /obj/item/clothing/gloves/color/yellow(src)
new /obj/item/clothing/gloves/color/yellow(src)
- new /obj/item/weapon/storage/toolbox/electrical(src)
- new /obj/item/weapon/storage/toolbox/electrical(src)
- new /obj/item/weapon/storage/toolbox/electrical(src)
- new /obj/item/weapon/electronics/apc(src)
- new /obj/item/weapon/electronics/apc(src)
- new /obj/item/weapon/electronics/apc(src)
- new /obj/item/device/multitool(src)
- new /obj/item/device/multitool(src)
- new /obj/item/device/multitool(src)
-
+ for(var/i in 1 to 3)
+ new /obj/item/weapon/storage/toolbox/electrical(src)
+ for(var/i in 1 to 3)
+ new /obj/item/weapon/electronics/apc(src)
+ for(var/i in 1 to 3)
+ new /obj/item/device/multitool(src)
+
/obj/structure/closet/secure_closet/engineering_welding
name = "welding supplies locker"
req_access = list(access_engine_equip)
@@ -52,13 +49,11 @@
/obj/structure/closet/secure_closet/engineering_welding/New()
..()
- new /obj/item/clothing/head/welding(src)
- new /obj/item/clothing/head/welding(src)
- new /obj/item/clothing/head/welding(src)
- new /obj/item/weapon/weldingtool/largetank(src)
- new /obj/item/weapon/weldingtool/largetank(src)
- new /obj/item/weapon/weldingtool/largetank(src)
-
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/head/welding(src)
+ for(var/i in 1 to 3)
+ new /obj/item/weapon/weldingtool/largetank(src)
+
/obj/structure/closet/secure_closet/engineering_personal
name = "engineer's locker"
req_access = list(access_engine_equip)
@@ -90,4 +85,4 @@
new /obj/item/weapon/watertank/atmos(src)
new /obj/item/clothing/suit/fire/atmos(src)
new /obj/item/clothing/head/hardhat/atmos(src)
- new /obj/item/clothing/glasses/meson/engine/tray(src)
\ No newline at end of file
+ new /obj/item/clothing/glasses/meson/engine/tray(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm
index 980f7fd6c37..92eac22ab65 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm
@@ -15,12 +15,10 @@
new /obj/item/weapon/reagent_containers/glass/bottle/toxin(src)
new /obj/item/weapon/reagent_containers/glass/bottle/morphine(src)
new /obj/item/weapon/reagent_containers/glass/bottle/morphine(src)
- new /obj/item/weapon/reagent_containers/glass/bottle/epinephrine(src)
- new /obj/item/weapon/reagent_containers/glass/bottle/epinephrine(src)
- new /obj/item/weapon/reagent_containers/glass/bottle/epinephrine(src)
- new /obj/item/weapon/reagent_containers/glass/bottle/charcoal(src)
- new /obj/item/weapon/reagent_containers/glass/bottle/charcoal(src)
- new /obj/item/weapon/reagent_containers/glass/bottle/charcoal(src)
+ for(var/i in 1 to 3)
+ new /obj/item/weapon/reagent_containers/glass/bottle/epinephrine(src)
+ for(var/i in 1 to 3)
+ new /obj/item/weapon/reagent_containers/glass/bottle/charcoal(src)
new /obj/item/weapon/storage/box/rxglasses(src)
/obj/structure/closet/secure_closet/medical2
@@ -30,13 +28,11 @@
/obj/structure/closet/secure_closet/medical2/New()
..()
- new /obj/item/weapon/tank/internals/anesthetic(src)
- new /obj/item/weapon/tank/internals/anesthetic(src)
- new /obj/item/weapon/tank/internals/anesthetic(src)
- new /obj/item/clothing/mask/breath/medical(src)
- new /obj/item/clothing/mask/breath/medical(src)
- new /obj/item/clothing/mask/breath/medical(src)
-
+ for(var/i in 1 to 3)
+ new /obj/item/weapon/tank/internals/anesthetic(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/mask/breath/medical(src)
+
/obj/structure/closet/secure_closet/medical3
name = "medical doctor's locker"
req_access = list(access_surgery)
@@ -81,10 +77,9 @@
/obj/structure/closet/secure_closet/animal/New()
..()
new /obj/item/device/assembly/signaler(src)
- new /obj/item/device/electropack(src)
- new /obj/item/device/electropack(src)
- new /obj/item/device/electropack(src)
-
+ for(var/i in 1 to 3)
+ new /obj/item/device/electropack(src)
+
/obj/structure/closet/secure_closet/chemical
name = "chemical closet"
desc = "Store dangerous chemicals in here."
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/misc.dm b/code/game/objects/structures/crates_lockers/closets/secure/misc.dm
index 5ba9f4e5d5b..f75526e5790 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/misc.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/misc.dm
@@ -62,6 +62,5 @@
new /obj/item/stack/sheet/glass(src, 50)
new /obj/item/clothing/shoes/magboots(src)
new /obj/item/weapon/storage/box/metalfoam(src)
- new /obj/item/weapon/rcd_ammo/large(src)
- new /obj/item/weapon/rcd_ammo/large(src)
- new /obj/item/weapon/rcd_ammo/large(src)
+ for(var/i in 1 to 3)
+ new /obj/item/weapon/rcd_ammo/large(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
index 1bcd35a11b1..e161caf3ce2 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
@@ -186,12 +186,9 @@
/obj/structure/closet/secure_closet/injection/New()
..()
- new /obj/item/weapon/reagent_containers/syringe/lethal/choral(src)
- new /obj/item/weapon/reagent_containers/syringe/lethal/choral(src)
- new /obj/item/weapon/reagent_containers/syringe/lethal/choral(src)
- new /obj/item/weapon/reagent_containers/syringe/lethal/choral(src)
- new /obj/item/weapon/reagent_containers/syringe/lethal/choral(src)
-
+ for(var/i in 1 to 5)
+ new /obj/item/weapon/reagent_containers/syringe/lethal/choral(src)
+
/obj/structure/closet/secure_closet/brig
name = "brig locker"
req_access = list(access_brig)
@@ -210,9 +207,8 @@
/obj/structure/closet/secure_closet/courtroom/New()
..()
new /obj/item/clothing/shoes/sneakers/brown(src)
- new /obj/item/weapon/paper/Court (src)
- new /obj/item/weapon/paper/Court (src)
- new /obj/item/weapon/paper/Court (src)
+ for(var/i in 1 to 3)
+ new /obj/item/weapon/paper/Court (src)
new /obj/item/weapon/pen (src)
new /obj/item/clothing/suit/judgerobe (src)
new /obj/item/clothing/head/powdered_wig (src)
@@ -226,16 +222,13 @@
/obj/structure/closet/secure_closet/armory1/New()
..()
new /obj/item/clothing/suit/armor/laserproof(src)
- new /obj/item/clothing/suit/armor/riot(src)
- new /obj/item/clothing/suit/armor/riot(src)
- new /obj/item/clothing/suit/armor/riot(src)
- new /obj/item/clothing/head/helmet/riot(src)
- new /obj/item/clothing/head/helmet/riot(src)
- new /obj/item/clothing/head/helmet/riot(src)
- new /obj/item/weapon/shield/riot(src)
- new /obj/item/weapon/shield/riot(src)
- new /obj/item/weapon/shield/riot(src)
-
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/suit/armor/riot(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/head/helmet/riot(src)
+ for(var/i in 1 to 3)
+ new /obj/item/weapon/shield/riot(src)
+
/obj/structure/closet/secure_closet/armory2
name = "armory ballistics locker"
req_access = list(access_armory)
@@ -244,13 +237,11 @@
/obj/structure/closet/secure_closet/armory2/New()
..()
new /obj/item/weapon/storage/box/firingpins(src)
- new /obj/item/weapon/storage/box/rubbershot(src)
- new /obj/item/weapon/storage/box/rubbershot(src)
- new /obj/item/weapon/storage/box/rubbershot(src)
- new /obj/item/weapon/gun/projectile/shotgun/riot(src)
- new /obj/item/weapon/gun/projectile/shotgun/riot(src)
- new /obj/item/weapon/gun/projectile/shotgun/riot(src)
-
+ for(var/i in 1 to 3)
+ new /obj/item/weapon/storage/box/rubbershot(src)
+ for(var/i in 1 to 3)
+ new /obj/item/weapon/gun/projectile/shotgun/riot(src)
+
/obj/structure/closet/secure_closet/armory3
name = "armory energy gun locker"
req_access = list(access_armory)
@@ -260,13 +251,11 @@
..()
new /obj/item/weapon/storage/box/firingpins(src)
new /obj/item/weapon/gun/energy/ionrifle(src)
- new /obj/item/weapon/gun/energy/gun(src)
- new /obj/item/weapon/gun/energy/gun(src)
- new /obj/item/weapon/gun/energy/gun(src)
- new /obj/item/weapon/gun/energy/laser(src)
- new /obj/item/weapon/gun/energy/laser(src)
- new /obj/item/weapon/gun/energy/laser(src)
-
+ for(var/i in 1 to 3)
+ new /obj/item/weapon/gun/energy/gun(src)
+ for(var/i in 1 to 3)
+ new /obj/item/weapon/gun/energy/laser(src)
+
/obj/structure/closet/secure_closet/tac
name = "armory tac locker"
req_access = list(access_armory)
@@ -286,6 +275,5 @@
/obj/structure/closet/secure_closet/lethalshots/New()
..()
- new /obj/item/weapon/storage/box/lethalshot(src)
- new /obj/item/weapon/storage/box/lethalshot(src)
- new /obj/item/weapon/storage/box/lethalshot(src)
+ for(var/i in 1 to 3)
+ new /obj/item/weapon/storage/box/lethalshot(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/syndicate.dm b/code/game/objects/structures/crates_lockers/closets/syndicate.dm
index 792d5b167b3..55ea7578571 100644
--- a/code/game/objects/structures/crates_lockers/closets/syndicate.dm
+++ b/code/game/objects/structures/crates_lockers/closets/syndicate.dm
@@ -23,19 +23,13 @@
/obj/structure/closet/syndicate/nuclear/New()
..()
contents = list()
- new /obj/item/ammo_box/magazine/m10mm(src)
- new /obj/item/ammo_box/magazine/m10mm(src)
- new /obj/item/ammo_box/magazine/m10mm(src)
- new /obj/item/ammo_box/magazine/m10mm(src)
- new /obj/item/ammo_box/magazine/m10mm(src)
+ for(var/i in 1 to 5)
+ new /obj/item/ammo_box/magazine/m10mm(src)
new /obj/item/weapon/storage/box/flashbangs(src)
new /obj/item/weapon/storage/box/teargas(src)
new /obj/item/weapon/storage/backpack/dufflebag/syndie/med(src)
- new /obj/item/weapon/pinpointer/nukeop(src)
- new /obj/item/weapon/pinpointer/nukeop(src)
- new /obj/item/weapon/pinpointer/nukeop(src)
- new /obj/item/weapon/pinpointer/nukeop(src)
- new /obj/item/weapon/pinpointer/nukeop(src)
+ for(var/i in 1 to 5)
+ new /obj/item/weapon/pinpointer/nukeop(src)
new /obj/item/device/pda/syndicate(src)
return
diff --git a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm
index 064256f8f10..edc5b8d1dca 100644
--- a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm
@@ -174,11 +174,5 @@
/obj/structure/closet/ammunitionlocker/New()
..()
- new /obj/item/ammo_casing/shotgun/beanbag(src)
- new /obj/item/ammo_casing/shotgun/beanbag(src)
- new /obj/item/ammo_casing/shotgun/beanbag(src)
- new /obj/item/ammo_casing/shotgun/beanbag(src)
- new /obj/item/ammo_casing/shotgun/beanbag(src)
- new /obj/item/ammo_casing/shotgun/beanbag(src)
- new /obj/item/ammo_casing/shotgun/beanbag(src)
- new /obj/item/ammo_casing/shotgun/beanbag(src)
+ for(var/i in 1 to 8)
+ new /obj/item/ammo_casing/shotgun/beanbag(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
index 68c5a8c32d7..489defcdf07 100644
--- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
+++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
@@ -5,12 +5,10 @@
/obj/structure/closet/wardrobe/New()
..()
- new /obj/item/clothing/under/color/blue(src)
- new /obj/item/clothing/under/color/blue(src)
- new /obj/item/clothing/under/color/blue(src)
- new /obj/item/clothing/shoes/sneakers/brown(src)
- new /obj/item/clothing/shoes/sneakers/brown(src)
- new /obj/item/clothing/shoes/sneakers/brown(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/under/color/blue(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/shoes/sneakers/brown(src)
return
/obj/structure/closet/wardrobe/pink
@@ -20,12 +18,10 @@
/obj/structure/closet/wardrobe/pink/New()
..()
contents = list()
- new /obj/item/clothing/under/color/pink(src)
- new /obj/item/clothing/under/color/pink(src)
- new /obj/item/clothing/under/color/pink(src)
- new /obj/item/clothing/shoes/sneakers/brown(src)
- new /obj/item/clothing/shoes/sneakers/brown(src)
- new /obj/item/clothing/shoes/sneakers/brown(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/under/color/pink(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/shoes/sneakers/brown(src)
return
/obj/structure/closet/wardrobe/black
@@ -35,22 +31,18 @@
/obj/structure/closet/wardrobe/black/New()
..()
contents = list()
- new /obj/item/clothing/under/color/black(src)
- new /obj/item/clothing/under/color/black(src)
- new /obj/item/clothing/under/color/black(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/under/color/black(src)
if(prob(25))
new /obj/item/clothing/suit/jacket/leather(src)
if(prob(20))
new /obj/item/clothing/suit/jacket/leather/overcoat(src)
- new /obj/item/clothing/shoes/sneakers/black(src)
- new /obj/item/clothing/shoes/sneakers/black(src)
- new /obj/item/clothing/shoes/sneakers/black(src)
- new /obj/item/clothing/head/that(src)
- new /obj/item/clothing/head/that(src)
- new /obj/item/clothing/head/that(src)
- new /obj/item/clothing/head/soft/black(src)
- new /obj/item/clothing/head/soft/black(src)
- new /obj/item/clothing/head/soft/black(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/shoes/sneakers/black(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/head/that(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/head/soft/black(src)
new /obj/item/clothing/mask/bandana/black(src)
new /obj/item/clothing/mask/bandana/black(src)
if(prob(40))
@@ -65,12 +57,10 @@
/obj/structure/closet/wardrobe/green/New()
..()
contents = list()
- new /obj/item/clothing/under/color/green(src)
- new /obj/item/clothing/under/color/green(src)
- new /obj/item/clothing/under/color/green(src)
- new /obj/item/clothing/shoes/sneakers/black(src)
- new /obj/item/clothing/shoes/sneakers/black(src)
- new /obj/item/clothing/shoes/sneakers/black(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/under/color/green(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/shoes/sneakers/black(src)
new /obj/item/clothing/mask/bandana/green(src)
new /obj/item/clothing/mask/bandana/green(src)
return
@@ -84,12 +74,10 @@
/obj/structure/closet/wardrobe/orange/New()
..()
contents = list()
- new /obj/item/clothing/under/rank/prisoner(src)
- new /obj/item/clothing/under/rank/prisoner(src)
- new /obj/item/clothing/under/rank/prisoner(src)
- new /obj/item/clothing/shoes/sneakers/orange(src)
- new /obj/item/clothing/shoes/sneakers/orange(src)
- new /obj/item/clothing/shoes/sneakers/orange(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/under/rank/prisoner(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/shoes/sneakers/orange(src)
return
@@ -100,12 +88,10 @@
/obj/structure/closet/wardrobe/yellow/New()
..()
contents = list()
- new /obj/item/clothing/under/color/yellow(src)
- new /obj/item/clothing/under/color/yellow(src)
- new /obj/item/clothing/under/color/yellow(src)
- new /obj/item/clothing/shoes/sneakers/orange(src)
- new /obj/item/clothing/shoes/sneakers/orange(src)
- new /obj/item/clothing/shoes/sneakers/orange(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/under/color/yellow(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/shoes/sneakers/orange(src)
new /obj/item/clothing/mask/bandana/gold(src)
new /obj/item/clothing/mask/bandana/gold(src)
return
@@ -118,15 +104,12 @@
/obj/structure/closet/wardrobe/white/New()
..()
contents = list()
- new /obj/item/clothing/under/color/white(src)
- new /obj/item/clothing/under/color/white(src)
- new /obj/item/clothing/under/color/white(src)
- new /obj/item/clothing/shoes/sneakers/white(src)
- new /obj/item/clothing/shoes/sneakers/white(src)
- new /obj/item/clothing/shoes/sneakers/white(src)
- new /obj/item/clothing/head/soft/mime(src)
- new /obj/item/clothing/head/soft/mime(src)
- new /obj/item/clothing/head/soft/mime(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/under/color/white(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/shoes/sneakers/white(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/head/soft/mime(src)
return
/obj/structure/closet/wardrobe/pjs
@@ -140,10 +123,8 @@
new /obj/item/clothing/under/pj/red(src)
new /obj/item/clothing/under/pj/blue(src)
new /obj/item/clothing/under/pj/blue(src)
- new /obj/item/clothing/shoes/sneakers/white(src)
- new /obj/item/clothing/shoes/sneakers/white(src)
- new /obj/item/clothing/shoes/sneakers/white(src)
- new /obj/item/clothing/shoes/sneakers/white(src)
+ for(var/i in 1 to 4)
+ new /obj/item/clothing/shoes/sneakers/white(src)
return
@@ -154,15 +135,12 @@
/obj/structure/closet/wardrobe/grey/New()
..()
contents = list()
- new /obj/item/clothing/under/color/grey(src)
- new /obj/item/clothing/under/color/grey(src)
- new /obj/item/clothing/under/color/grey(src)
- new /obj/item/clothing/shoes/sneakers/black(src)
- new /obj/item/clothing/shoes/sneakers/black(src)
- new /obj/item/clothing/shoes/sneakers/black(src)
- new /obj/item/clothing/head/soft/grey(src)
- new /obj/item/clothing/head/soft/grey(src)
- new /obj/item/clothing/head/soft/grey(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/under/color/grey(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/shoes/sneakers/black(src)
+ for(var/i in 1 to 3)
+ new /obj/item/clothing/head/soft/grey(src)
if(prob(50))
new /obj/item/weapon/storage/backpack/dufflebag(src)
if(prob(40))
diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm
index 44edb4a6f24..90c267d2a2a 100644
--- a/code/game/objects/structures/crates_lockers/crates.dm
+++ b/code/game/objects/structures/crates_lockers/crates.dm
@@ -50,10 +50,8 @@
/obj/structure/closet/crate/rcd/New()
..()
- new /obj/item/weapon/rcd_ammo(src)
- new /obj/item/weapon/rcd_ammo(src)
- new /obj/item/weapon/rcd_ammo(src)
- new /obj/item/weapon/rcd_ammo(src)
+ for(var/i in 1 to 4)
+ new /obj/item/weapon/rcd_ammo(src)
new /obj/item/weapon/rcd(src)
/obj/structure/closet/crate/freezer
@@ -66,15 +64,14 @@
/obj/structure/closet/crate/freezer/return_air()
var/datum/gas_mixture/gas = (..())
- if(!gas) return null
+ if(!gas)
+ return null
+
var/datum/gas_mixture/newgas = new/datum/gas_mixture()
- newgas.oxygen = gas.oxygen
- newgas.carbon_dioxide = gas.carbon_dioxide
- newgas.nitrogen = gas.nitrogen
- newgas.toxins = gas.toxins
- newgas.volume = gas.volume
- newgas.temperature = gas.temperature
- if(newgas.temperature <= target_temp) return
+ newgas.copy_from(gas)
+
+ if(newgas.temperature <= target_temp)
+ return
if((newgas.temperature - cooling_power) > target_temp)
newgas.temperature -= cooling_power
@@ -91,15 +88,10 @@
/obj/structure/closet/crate/radiation/New()
..()
- new /obj/item/clothing/suit/radiation(src)
- new /obj/item/clothing/head/radiation(src)
- new /obj/item/clothing/suit/radiation(src)
- new /obj/item/clothing/head/radiation(src)
- new /obj/item/clothing/suit/radiation(src)
- new /obj/item/clothing/head/radiation(src)
- new /obj/item/clothing/suit/radiation(src)
- new /obj/item/clothing/head/radiation(src)
-
+ for(var/i in 1 to 4)
+ new /obj/item/clothing/suit/radiation(src)
+ new /obj/item/clothing/head/radiation(src)
+
/obj/structure/closet/crate/hydroponics
name = "hydroponics crate"
desc = "All you need to destroy those pesky weeds and pests."
diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm
index 521d01bfbec..175971ef2c6 100644
--- a/code/game/objects/structures/janicart.dm
+++ b/code/game/objects/structures/janicart.dm
@@ -23,10 +23,12 @@
/obj/structure/janitorialcart/proc/wet_mop(obj/item/weapon/mop, mob/user)
if(reagents.total_volume < 1)
user << "[src] is out of water!"
+ return 0
else
- reagents.trans_to(mop, 5) //
+ reagents.trans_to(mop, 5)
user << "You wet [mop] in [src]."
playsound(loc, 'sound/effects/slosh.ogg', 25, 1)
+ return 1
/obj/structure/janitorialcart/proc/put_in_cart(obj/item/I, mob/user)
if(!user.drop_item())
@@ -43,8 +45,8 @@
if(istype(I, /obj/item/weapon/mop))
var/obj/item/weapon/mop/m=I
if(m.reagents.total_volume < m.reagents.maximum_volume)
- wet_mop(m, user)
- return
+ if (wet_mop(m, user))
+ return
if(!mymop)
m.janicart_insert(user, src)
else
diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm
index b1b3d9994bf..343cfb5d940 100644
--- a/code/game/objects/structures/mirror.dm
+++ b/code/game/objects/structures/mirror.dm
@@ -61,6 +61,7 @@
/obj/structure/mirror/attackby(obj/item/I, mob/living/user, params)
+ user.changeNext_move(CLICK_CD_MELEE)
user.do_attack_animation(src)
if(I.damtype == STAMINA)
return
@@ -90,6 +91,7 @@
/obj/structure/mirror/attack_alien(mob/living/user)
+ user.changeNext_move(CLICK_CD_MELEE)
user.do_attack_animation(src)
if(islarva(user))
return
@@ -106,6 +108,7 @@
var/mob/living/simple_animal/M = user
if(M.melee_damage_upper <= 0)
return
+ user.changeNext_move(CLICK_CD_MELEE)
M.do_attack_animation(src)
if(shattered)
playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1)
@@ -115,6 +118,7 @@
/obj/structure/mirror/attack_slime(mob/living/user)
+ user.changeNext_move(CLICK_CD_MELEE)
user.do_attack_animation(src)
if(shattered)
playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1)
@@ -246,4 +250,4 @@
if(new_eye_color)
H.eye_color = sanitize_hexcolor(new_eye_color)
H.dna.update_ui_block(DNA_EYE_COLOR_BLOCK)
- H.update_body()
\ No newline at end of file
+ H.update_body()
diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm
index 97687c2fa1f..cd8c190569e 100644
--- a/code/game/objects/structures/morgue.dm
+++ b/code/game/objects/structures/morgue.dm
@@ -180,7 +180,7 @@ var/global/list/crematoriums = new/list()
update_icon()
for(var/mob/living/M in contents)
- if (M.stat!=2)
+ if (M.stat != DEAD)
M.emote("scream")
if(user)
user.attack_log +="\[[time_stamp()]\] Cremated [M]/[M.ckey]"
@@ -188,8 +188,9 @@ var/global/list/crematoriums = new/list()
else
log_attack("\[[time_stamp()]\] UNKNOWN cremated [M]/[M.ckey]")
M.death(1)
- M.ghostize()
- qdel(M)
+ if(M) //some animals get automatically deleted on death.
+ M.ghostize()
+ qdel(M)
for(var/obj/O in contents) //obj instead of obj/item so that bodybags and ashes get destroyed. We dont want tons and tons of ash piling up
if(O != connected) //Creamtorium does not burn hot enough to destroy the tray
diff --git a/code/game/objects/structures/transit_tubes/station.dm b/code/game/objects/structures/transit_tubes/station.dm
index aaa115bbd1b..475383d8b2b 100644
--- a/code/game/objects/structures/transit_tubes/station.dm
+++ b/code/game/objects/structures/transit_tubes/station.dm
@@ -128,13 +128,12 @@
return
for(var/obj/structure/transit_tube_pod/pod in loc)
if(!pod.moving && turn(pod.dir, (reverse_launch ? 180 : 0)) in directions())
- spawn(0)
- pod_moving = 1
- close_animation()
- sleep(CLOSE_DURATION + 2)
- if(icon_state == "closed" && pod)
- pod.follow_tube(reverse_launch)
- pod_moving = 0
+ pod_moving = 1
+ close_animation()
+ sleep(CLOSE_DURATION + 2)
+ if(icon_state == "closed" && pod)
+ pod.follow_tube(reverse_launch)
+ pod_moving = 0
return 1
return 0
diff --git a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm
index a4bd81856e7..f2cd240656f 100644
--- a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm
+++ b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm
@@ -11,8 +11,9 @@
/obj/structure/transit_tube_pod/New(loc)
..(loc)
- air_contents.oxygen = MOLES_O2STANDARD * 2
- air_contents.nitrogen = MOLES_N2STANDARD
+ air_contents.assert_gases("o2", "n2")
+ air_contents.gases["o2"][MOLES] = MOLES_O2STANDARD * 2
+ air_contents.gases["n2"][MOLES] = MOLES_N2STANDARD
air_contents.temperature = T20C
// Give auto tubes time to align before trying to start moving
@@ -61,73 +62,70 @@
else return ..()
/obj/structure/transit_tube_pod/proc/follow_tube(reverse_launch)
+ set waitfor = 0
if(moving)
return
moving = 1
- spawn()
- var/obj/structure/transit_tube/current_tube = null
- var/next_dir
- var/next_loc
- var/last_delay = 0
- var/exit_delay
- if(reverse_launch)
- dir = turn(dir, 180) // Back it up
+ var/obj/structure/transit_tube/current_tube = null
+ var/next_dir
+ var/next_loc
+ var/last_delay = 0
+ var/exit_delay
- for(var/obj/structure/transit_tube/tube in loc)
- if(tube.has_exit(dir))
+ if(reverse_launch)
+ dir = turn(dir, 180) // Back it up
+
+ for(var/obj/structure/transit_tube/tube in loc)
+ if(tube.has_exit(dir))
+ current_tube = tube
+ break
+
+ while(current_tube)
+ next_dir = current_tube.get_exit(dir)
+
+ if(!next_dir)
+ break
+
+ exit_delay = current_tube.exit_delay(src, dir)
+ last_delay += exit_delay
+
+ sleep(exit_delay)
+
+ next_loc = get_step(loc, next_dir)
+
+ current_tube = null
+ for(var/obj/structure/transit_tube/tube in next_loc)
+ if(tube.has_entrance(next_dir))
current_tube = tube
break
- while(current_tube)
- next_dir = current_tube.get_exit(dir)
-
- if(!next_dir)
- break
-
- exit_delay = current_tube.exit_delay(src, dir)
- last_delay += exit_delay
-
- sleep(exit_delay)
-
- next_loc = get_step(loc, next_dir)
-
- current_tube = null
- for(var/obj/structure/transit_tube/tube in next_loc)
- if(tube.has_entrance(next_dir))
- current_tube = tube
- break
-
- if(current_tube == null)
- dir = next_dir
- Move(get_step(loc, dir), dir) // Allow collisions when leaving the tubes.
- break
-
- last_delay = current_tube.enter_delay(src, next_dir)
- sleep(last_delay)
+ if(current_tube == null)
dir = next_dir
- loc = next_loc // When moving from one tube to another, skip collision and such.
- density = current_tube.density
+ Move(get_step(loc, dir), dir) // Allow collisions when leaving the tubes.
+ break
- if(current_tube && current_tube.should_stop_pod(src, next_dir))
- current_tube.pod_stopped(src, dir)
- break
+ last_delay = current_tube.enter_delay(src, next_dir)
+ sleep(last_delay)
+ dir = next_dir
+ loc = next_loc // When moving from one tube to another, skip collision and such.
+ density = current_tube.density
- density = 1
- moving = 0
+ if(current_tube && current_tube.should_stop_pod(src, next_dir))
+ current_tube.pod_stopped(src, dir)
+ break
+
+ density = 1
+ moving = 0
// Should I return a copy here? If the caller edits or del()s the returned
// datum, there might be problems if I don't...
/obj/structure/transit_tube_pod/return_air()
var/datum/gas_mixture/GM = new()
- GM.oxygen = air_contents.oxygen
- GM.carbon_dioxide = air_contents.carbon_dioxide
- GM.nitrogen = air_contents.nitrogen
- GM.toxins = air_contents.toxins
- GM.temperature = air_contents.temperature
+ GM.copy_from(air_contents)
return GM
// For now, copying what I found in an unused FEA file (and almost identical in a
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index d6d2dca1ef3..58913c501ec 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -196,6 +196,7 @@
health = maxhealth
playsound(loc, 'sound/items/Welder2.ogg', 50, 1)
update_nearby_icons()
+ user << "You repair [src]."
else
user << "[src] is already in good condition!"
return
diff --git a/code/game/turfs/simulated/floor/plating.dm b/code/game/turfs/simulated/floor/plating.dm
index 4aa16f11ec1..1373a0501de 100644
--- a/code/game/turfs/simulated/floor/plating.dm
+++ b/code/game/turfs/simulated/floor/plating.dm
@@ -134,10 +134,9 @@
/turf/simulated/floor/engine/n20/New()
..()
var/datum/gas_mixture/adding = new
- var/datum/gas/sleeping_agent/trace_gas = new
- trace_gas.moles = 6000
- adding.trace_gases += trace_gas
+ adding.assert_gas("n2o")
+ adding.gases["n2o"][MOLES] = 6000
adding.temperature = T20C
assume_air(adding)
@@ -193,30 +192,34 @@
SSobj.processing |= src
/turf/simulated/floor/plating/lava/process()
- if(!contents)
+ if(!burn_stuff())
processing = 0
SSobj.processing.Remove(src)
- return
- burn_stuff()
+
/turf/simulated/floor/plating/lava/proc/burn_stuff()
- for(var/atom/movable/AM in contents)
- if(!istype(AM))
- return
- if(istype(AM, /obj))
- var/obj/O = AM
+ . = 0
+ for(var/thing in contents)
+ if(istype(thing, /obj))
+ var/obj/O = thing
if(istype(O, /obj/effect/decal/cleanable/ash)) //So we don't get stuck burning the same ash pile forever
qdel(O)
- return
+ continue
+ . = 1
if(O.burn_state == FIRE_PROOF)
O.burn_state = FLAMMABLE //Even fireproof things burn up in lava
+
O.fire_act()
- else if (istype(AM, /mob/living))
- var/mob/living/L = AM
+
+
+ else if (istype(thing, /mob/living))
+ . = 1
+ var/mob/living/L = thing
L.adjustFireLoss(20)
if(L) //mobs turning into object corpses could get deleted here.
L.adjust_fire_stacks(20)
L.IgniteMob()
+
/turf/simulated/floor/plating/lava/attackby(obj/item/C, mob/user, params) //Lava isn't a good foundation to build on
return
@@ -241,4 +244,4 @@
/turf/simulated/floor/plating/lava/smooth/airless
oxygen = 0
nitrogen = 0
- temperature = TCMB
\ No newline at end of file
+ temperature = TCMB
diff --git a/code/game/turfs/simulated/river.dm b/code/game/turfs/simulated/river.dm
new file mode 100644
index 00000000000..b602319fba6
--- /dev/null
+++ b/code/game/turfs/simulated/river.dm
@@ -0,0 +1,85 @@
+#define RANDOM_UPPER_X 200
+#define RANDOM_UPPER_Y 200
+
+#define RANDOM_LOWER_X 50
+#define RANDOM_LOWER_Y 50
+
+/proc/spawn_rivers(target_z = 5, nodes = 4, turf_type = /turf/simulated/floor/plating/lava/smooth)
+ var/list/river_nodes = list()
+ var/num_spawned = 0
+ while(num_spawned < nodes)
+ var/turf/simulated/F = locate(rand(RANDOM_LOWER_X, RANDOM_UPPER_X), rand(RANDOM_LOWER_Y, RANDOM_UPPER_Y), target_z)
+
+ river_nodes += new /obj/effect/landmark/river_waypoint(F)
+ num_spawned++
+
+ //make some randomly pathing rivers
+ for(var/A in river_nodes)
+ var/obj/effect/landmark/river_waypoint/W = A
+ if (W.z != target_z || W.connected)
+ continue
+ W.connected = 1
+ var/turf/cur_turf = get_turf(W)
+ cur_turf.ChangeTurf(turf_type)
+ var/turf/target_turf = get_turf(pick(river_nodes - W))
+ if(!target_turf)
+ break
+ var/detouring = 0
+ var/cur_dir = get_dir(cur_turf, target_turf)
+ while(cur_turf != target_turf)
+
+ if(detouring) //randomly snake around a bit
+ if(prob(20))
+ detouring = 0
+ cur_dir = get_dir(cur_turf, target_turf)
+ else if(prob(20))
+ detouring = 1
+ if(prob(50))
+ cur_dir = turn(cur_dir, 45)
+ else
+ cur_dir = turn(cur_dir, -45)
+ else
+ cur_dir = get_dir(cur_turf, target_turf)
+
+ cur_turf = get_step(cur_turf, cur_dir)
+
+ if(!istype(cur_turf, /turf/simulated/wall)) //Rivers will flow around walls
+ var/turf/simulated/river_turf = cur_turf
+ river_turf.ChangeTurf(turf_type)
+ river_turf.Spread(30, 25)
+ else
+ detouring = 0
+ cur_dir = get_dir(cur_turf, target_turf)
+ cur_turf = get_step(cur_turf, cur_dir)
+ continue
+
+
+ for(var/WP in river_nodes)
+ qdel(WP)
+
+
+/obj/effect/landmark/river_waypoint
+ name = "river waypoint"
+ var/connected = 0
+ invisibility = 101
+
+
+/turf/proc/Spread(probability = 30, prob_loss = 25)
+ if(probability <= 0)
+ return
+
+ for(var/turf/simulated/F in orange(1, src))
+
+ var/turf/L = F
+
+ L.ChangeTurf(src.type)
+
+ if(L && prob(probability))
+ L.Spread(probability - prob_loss)
+
+
+#undef RANDOM_UPPER_X
+#undef RANDOM_UPPER_Y
+
+#undef RANDOM_LOWER_X
+#undef RANDOM_LOWER_Y
diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm
index 074a31dabc3..ccb24864770 100644
--- a/code/game/turfs/simulated/walls.dm
+++ b/code/game/turfs/simulated/walls.dm
@@ -8,6 +8,7 @@
density = 1
blocks_air = 1
explosion_block = 1
+ layer = TURF_LAYER + 0.05
thermal_conductivity = WALL_HEAT_TRANSFER_COEFFICIENT
heat_capacity = 312500 //a little over 5 cm thick , 312500 for 1 m by 2.5 m by 0.25 m plasteel wall
diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index af2e3206eac..85a846c8767 100644
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -140,32 +140,32 @@
//////Assimilate Air//////
/turf/simulated/proc/Assimilate_Air()
if(air)
- var/aoxy = 0//Holders to assimilate air from nearby turfs
- var/anitro = 0
- var/aco = 0
- var/atox = 0
- var/atemp = 0
+ var/datum/gas_mixture/a_gas_mixture = new//Holders to assimilate air from nearby turfs
+ var/list/a_gases = a_gas_mixture.gases
var/turf_count = 0
for(var/direction in cardinal)//Only use cardinals to cut down on lag
var/turf/T = get_step(src,direction)
+
if(istype(T,/turf/space))//Counted as no air
turf_count++//Considered a valid turf for air calcs
continue
+
else if(istype(T,/turf/simulated/floor))
var/turf/simulated/S = T
if(S.air)//Add the air's contents to the holders
- aoxy += S.air.oxygen
- anitro += S.air.nitrogen
- aco += S.air.carbon_dioxide
- atox += S.air.toxins
- atemp += S.air.temperature
- turf_count ++
- air.oxygen = (aoxy/max(turf_count,1))//Averages contents of the turfs, ignoring walls and the like
- air.nitrogen = (anitro/max(turf_count,1))
- air.carbon_dioxide = (aco/max(turf_count,1))
- air.toxins = (atox/max(turf_count,1))
- air.temperature = (atemp/max(turf_count,1))//Trace gases can get bant
+ var/list/S_gases = S.air.gases
+ for(var/id in a_gases)
+ a_gases[id][MOLES] += S_gases[id][MOLES]
+ a_gas_mixture.temperature += S.air.temperature
+ turf_count++
+
+ air.copy_from(a_gas_mixture)
+ var/list/air_gases = air.gases
+ for(var/id in air_gases)
+ air_gases[id][MOLES] /= max(turf_count,1)//Averages contents of the turfs, ignoring walls and the like
+
+ air.temperature /= max(turf_count,1)
SSair.add_to_active(src)
/turf/proc/ReplaceWithLattice()
@@ -290,6 +290,7 @@
blocks_air = 1
opacity = 1
explosion_block = 50
+ layer = TURF_LAYER + 0.05
/turf/indestructible/splashscreen
name = "Space Station 13"
diff --git a/code/modules/admin/admin_ranks.dm b/code/modules/admin/admin_ranks.dm
index 735b00c6aac..a2612b46ee2 100644
--- a/code/modules/admin/admin_ranks.dm
+++ b/code/modules/admin/admin_ranks.dm
@@ -10,7 +10,7 @@ var/list/admin_ranks = list() //list of all admin_rank datums
name = init_name
switch(name)
if("Removed",null,"")
- spawn(-1)
+ spawn(0)
qdel(src)
throw EXCEPTION("invalid admin-rank name")
return
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index 7c9dbc23474..d0dc7652b51 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -322,10 +322,12 @@ var/list/admin_verbs_hideable = list(
if(istype(mob,/mob/dead/observer))
//re-enter
var/mob/dead/observer/ghost = mob
- if (!ghost.can_reenter_corpse)
+ if(!ghost.mind || !ghost.mind.current) //won't do anything if there is no body
+ return
+ if(!ghost.can_reenter_corpse)
log_admin("[key_name(usr)] re-entered corpse")
message_admins("[key_name_admin(usr)] re-entered corpse")
- ghost.can_reenter_corpse = 1 //just in-case.
+ ghost.can_reenter_corpse = 1 //force re-entering even when otherwise not possible
ghost.reenter_corpse()
feedback_add_details("admin_verb","P") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
else if(istype(mob,/mob/new_player))
diff --git a/code/modules/admin/holder2.dm b/code/modules/admin/holder2.dm
index abe7abcd91a..e7a0550b862 100644
--- a/code/modules/admin/holder2.dm
+++ b/code/modules/admin/holder2.dm
@@ -16,12 +16,12 @@ var/list/admin_datums = list()
/datum/admins/New(datum/admin_rank/R, ckey)
if(!ckey)
- spawn(-1)
+ spawn(0)
del(src)
throw EXCEPTION("Admin datum created without a ckey")
return
if(!istype(R))
- spawn(-1)
+ spawn(0)
del(src)
throw EXCEPTION("Admin datum created without a rank")
return
diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm
index ff02ba635d7..a2e264f8c88 100644
--- a/code/modules/admin/player_panel.dm
+++ b/code/modules/admin/player_panel.dm
@@ -349,7 +349,8 @@
dat += "| [M.real_name][M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""] | "
dat += "PM |
"
else
- dat += "| Nuclear Operative not found! |
"
+ dat += "| [N.name]([N.key]) Nuclear Operative Body destroyed! | "
+ dat += "PM |
"
dat += "
| Nuclear Disk(s) |
"
for(var/obj/item/weapon/disk/nuclear/N in poi_list)
dat += "| [N.name], "
@@ -370,7 +371,8 @@
for(var/datum/mind/N in ticker.mode.head_revolutionaries)
var/mob/M = N.current
if(!M)
- dat += " |
| Head Revolutionary not found! |
"
+ dat += "| [N.name]([N.key])Head Revolutionary body destroyed! | "
+ dat += "PM |
"
else
dat += "| [M.real_name] (Leader)[M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""] | "
dat += "PM |
"
@@ -388,7 +390,8 @@
var/turf/mob_loc = get_turf(M)
dat += "[mob_loc.loc] | "
else
- dat += "| Head not found! |
"
+ dat += "| [N.name]([N.key])Head body destroyed! | "
+ dat += "PM |
"
dat += "
"
for(var/datum/gang/G in ticker.mode.gangs)
@@ -396,7 +399,8 @@
for(var/datum/mind/N in G.bosses)
var/mob/M = N.current
if(!M)
- dat += "| Gang Boss not found! |
"
+ dat += "| [N.name]([N.key])Gang Boss body destroyed! | "
+ dat += "PM |
"
else
dat += "| [M.real_name] (Boss)[M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""] | "
dat += "PM |
"
@@ -416,7 +420,8 @@
dat += "
PM | "
dat += "Show Objective | "
else
- dat += "| Changeling not found! |
"
+ dat += "| [changeling.name]([changeling.key])Changeling body destroyed! | "
+ dat += "PM |
"
dat += ""
if(ticker.mode.wizards.len > 0)
@@ -428,7 +433,8 @@
dat += "PM | "
dat += "Show Objective | "
else
- dat += "| Wizard not found! |
"
+ dat += "| [wizard.name]([wizard.key])Wizard body destroyed! |
"
+ dat += "PM | "
dat += ""
if(ticker.mode.apprentices.len > 0)
@@ -440,7 +446,8 @@
dat += "PM | "
dat += "Show Objective | "
else
- dat += "| Apprentice not found! |
"
+ dat += "| [apprentice.name]([apprentice.key])Apprentice body destroyed!! |
"
+ dat += "PM | "
dat += ""
if(ticker.mode.cult.len)
@@ -509,7 +516,8 @@
dat += "PM | "
dat += "Show Objective | "
else
- dat += "| Traitor not found! |
"
+ dat += "| [traitor.name]([traitor.key])Traitor body destroyed! | "
+ dat += "PM |
"
dat += ""
if(ticker.mode.shadows.len)
@@ -519,6 +527,9 @@
if(M)
dat += "| [M.real_name][M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""] | "
dat += "PM |
"
+ else
+ dat += "| [N.name]([N.key])Shadowling body destroyed! | "
+ dat += "PM |
"
dat += ""
if(ticker.mode.thralls.len)
@@ -539,7 +550,8 @@
dat += "PM | "
dat += "Show Objective | "
else
- dat += "| Abductor not found! |
"
+ dat += "| [abductor.name]([abductor.key])Abductor body destroyed! |
"
+ dat += "PM | "
dat += ""
dat += "
| Abductees | | |
"
for(var/obj/machinery/abductor/experiment/E in machines)
@@ -550,7 +562,8 @@
dat += "PM | "
dat += "Show Objective | "
else
- dat += "| Abductee not found! |
"
+ dat += "| [abductee.name]([abductee.key])Abductee body destroyed! | "
+ dat += "PM |
"
dat += "
"
var/list/blob_minds = list()
@@ -568,9 +581,10 @@
var/mob/M = blob.current
if(M)
dat += "| [M.real_name][M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""] | "
- dat += "PM | "
+ dat += "PM |
"
else
- dat += "| Blob not found! |
"
+ dat += "| [blob.name]([blob.key])Blob not found! | "
+ dat += "PM |
"
dat += ""
@@ -584,7 +598,8 @@
dat += "| [M.real_name][M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""] | "
dat += "PM | "
else
- dat += "
| Monkey not found! |
"
+ dat += "| [eek.name]([eek.key])Monkey not found! | "
+ dat += "PM |
"
dat += ""
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index 8c42eb8261b..1bb4ef16a40 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -2039,7 +2039,7 @@
else if(href_list["check_antagonist"])
if(!check_rights(R_ADMIN))
return
- check_antagonists()
+ usr.client.check_antagonists()
else if(href_list["kick_all_from_lobby"])
if(!check_rights(R_ADMIN))
diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2.dm b/code/modules/admin/verbs/SDQL2/SDQL_2.dm
index 991ebb36886..5ab2eb7e142 100644
--- a/code/modules/admin/verbs/SDQL2/SDQL_2.dm
+++ b/code/modules/admin/verbs/SDQL2/SDQL_2.dm
@@ -93,14 +93,11 @@
for(var/datum/d in objs)
for(var/v in call_list)
- // To stop any procs which sleep from executing slowly.
- if(d)
- if(hascall(d, v))
- spawn() call(d, v)(arglist(args_list)) // Spawn in case the function sleeps.
+ SDQL_callproc(d, v, args_list)
if("delete")
for(var/datum/d in objs)
- del d
+ qdel(d)
if("select")
var/text = ""
@@ -147,6 +144,10 @@
+/proc/SDQL_callproc(thing, procname, args_list)
+ set waitfor = 0
+ if(hascall(thing, procname))
+ call(thing, procname)(arglist(args_list))
/proc/SDQL_parse(list/query_list)
var/datum/SDQL_parser/parser = new()
diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm
index 93d8d3a830f..1e99c5a4ea0 100644
--- a/code/modules/admin/verbs/debug.dm
+++ b/code/modules/admin/verbs/debug.dm
@@ -28,72 +28,78 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
/client/proc/callproc()
set category = "Debug"
set name = "Advanced ProcCall"
+ set waitfor = 0
if(!check_rights(R_DEBUG)) return
- spawn(0)
- var/target = null
- var/targetselected = 0
- var/returnval = null
- var/class = null
+ var/target = null
+ var/targetselected = 0
+ var/returnval = null
+ var/class = null
- switch(alert("Proc owned by something?",,"Yes","No"))
- if("Yes")
- targetselected = 1
- if(src.holder && src.holder.marked_datum)
- class = input("Proc owned by...","Owner",null) as null|anything in list("Obj","Mob","Area or Turf","Client","Marked datum ([holder.marked_datum.type])")
- if(class == "Marked datum ([holder.marked_datum.type])")
- class = "Marked datum"
+ switch(alert("Proc owned by something?",,"Yes","No"))
+ if("Yes")
+ targetselected = 1
+ if(src.holder && src.holder.marked_datum)
+ class = input("Proc owned by...","Owner",null) as null|anything in list("Obj","Mob","Area or Turf","Client","Marked datum ([holder.marked_datum.type])")
+ if(class == "Marked datum ([holder.marked_datum.type])")
+ class = "Marked datum"
+ else
+ class = input("Proc owned by...","Owner",null) as null|anything in list("Obj","Mob","Area or Turf","Client")
+ switch(class)
+ if("Obj")
+ target = input("Enter target:","Target",usr) as obj in world
+ if("Mob")
+ target = input("Enter target:","Target",usr) as mob in world
+ if("Area or Turf")
+ target = input("Enter target:","Target",usr.loc) as area|turf in world
+ if("Client")
+ var/list/keys = list()
+ for(var/client/C)
+ keys += C
+ target = input("Please, select a player!", "Selection", null, null) as null|anything in keys
+ if("Marked datum")
+ target = holder.marked_datum
else
- class = input("Proc owned by...","Owner",null) as null|anything in list("Obj","Mob","Area or Turf","Client")
- switch(class)
- if("Obj")
- target = input("Enter target:","Target",usr) as obj in world
- if("Mob")
- target = input("Enter target:","Target",usr) as mob in world
- if("Area or Turf")
- target = input("Enter target:","Target",usr.loc) as area|turf in world
- if("Client")
- var/list/keys = list()
- for(var/client/C)
- keys += C
- target = input("Please, select a player!", "Selection", null, null) as null|anything in keys
- if("Marked datum")
- target = holder.marked_datum
- else
- return
- if("No")
- target = null
- targetselected = 0
+ return
+ if("No")
+ target = null
+ targetselected = 0
- var/procname = input("Proc path, eg: /proc/fake_blood","Path:", null) as text|null
- if(!procname) return
- if(targetselected && !hascall(target,procname))
- usr << "Error: callproc(): target has no such call [procname]."
+ var/procname = input("Proc path, eg: /proc/fake_blood","Path:", null) as text|null
+ if(!procname) return
+ if(targetselected && !hascall(target,procname))
+ usr << "Error: callproc(): target has no such call [procname]."
+ return
+ else
+ var/procpath = text2path(procname)
+ if (!procpath)
+ usr << "Error: callproc(): proc [procname] does not exist. (Did you forget the /proc/ part?)"
return
- var/list/lst = get_callproc_args()
- if(!lst)
+ var/list/lst = get_callproc_args()
+ if(!lst)
+ return
+
+ if(targetselected)
+ if(!target)
+ usr << "Error: callproc(): owner of proc no longer exists."
return
+ log_admin("[key_name(src)] called [target]'s [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"].")
+ message_admins("[key_name(src)] called [target]'s [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"].")
+ returnval = call(target,procname)(arglist(lst)) // Pass the lst as an argument list to the proc
+ else
+ //this currently has no hascall protection. wasn't able to get it working.
+ log_admin("[key_name(src)] called [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"].")
+ message_admins("[key_name(src)] called [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"].")
+ returnval = call(procname)(arglist(lst)) // Pass the lst as an argument list to the proc
- if(targetselected)
- if(!target)
- usr << "Error: callproc(): owner of proc no longer exists."
- return
- log_admin("[key_name(src)] called [target]'s [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"].")
- message_admins("[key_name(src)] called [target]'s [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"].")
- returnval = call(target,procname)(arglist(lst)) // Pass the lst as an argument list to the proc
- else
- //this currently has no hascall protection. wasn't able to get it working.
- log_admin("[key_name(src)] called [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"].")
- message_admins("[key_name(src)] called [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"].")
- returnval = call(procname)(arglist(lst)) // Pass the lst as an argument list to the proc
-
- usr << "[procname] returned: [returnval ? returnval : "null"]"
- feedback_add_details("admin_verb","APC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+ usr << "[procname] returned: [returnval ? returnval : "null"]"
+ feedback_add_details("admin_verb","APC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/callproc_datum(A as null|area|mob|obj|turf)
set category = "Debug"
set name = "Atom ProcCall"
+ set waitfor = 0
if(!check_rights(R_DEBUG))
return
@@ -113,12 +119,13 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
return
log_admin("[key_name(src)] called [A]'s [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"].")
message_admins("[key_name(src)] called [A]'s [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"].")
- spawn()
- var/returnval = call(A,procname)(arglist(lst)) // Pass the lst as an argument list to the proc
- usr << "[procname] returned: [returnval ? returnval : "null"]"
-
feedback_add_details("admin_verb","DPC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+ var/returnval = call(A,procname)(arglist(lst)) // Pass the lst as an argument list to the proc
+ usr << "[procname] returned: [returnval ? returnval : "null"]"
+
+
+
/client/proc/get_callproc_args()
var/argnum = input("Number of arguments","Number:",0) as num|null
if(!argnum && (argnum!=0)) return
@@ -187,14 +194,14 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
return
var/datum/gas_mixture/env = T.return_air()
+ var/list/env_gases = env.gases
var/t = ""
- t+= "Nitrogen : [env.nitrogen]\n"
- t+= "Oxygen : [env.oxygen]\n"
- t+= "Plasma : [env.toxins]\n"
- t+= "CO2: [env.carbon_dioxide]\n"
+ for(var/id in env_gases)
+ if(id in hardcoded_gases || env_gases[id][MOLES])
+ t+= "[env_gases[id][GAS_NAME]] : [env_gases[id][MOLES]]\n"
- usr.show_message(t, 1)
+ usr << t
feedback_add_details("admin_verb","ASL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_admin_robotize(mob/M in mob_list)
@@ -207,7 +214,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
if(istype(M, /mob/living/carbon/human))
log_admin("[key_name(src)] has robotized [M.key].")
var/mob/living/carbon/human/H = M
- spawn(10)
+ spawn(0)
H.Robotize()
else
@@ -223,7 +230,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
if(istype(M, /mob/living/carbon/human))
log_admin("[key_name(src)] has blobized [M.key].")
var/mob/living/carbon/human/H = M
- spawn(10)
+ spawn(0)
H.Blobize()
else
@@ -247,7 +254,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
return
log_admin("[key_name(src)] has animalized [M.key].")
- spawn(10)
+ spawn(0)
M.Animalize()
@@ -287,7 +294,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
return
if(ishuman(M))
log_admin("[key_name(src)] has alienized [M.key].")
- spawn(10)
+ spawn(0)
M:Alienize()
feedback_add_details("admin_verb","MKAL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
log_admin("[key_name(usr)] made [key_name(M)] into an alien.")
@@ -304,7 +311,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
return
if(ishuman(M))
log_admin("[key_name(src)] has slimeized [M.key].")
- spawn(10)
+ spawn(0)
M:slimeize()
feedback_add_details("admin_verb","MKMET") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
log_admin("[key_name(usr)] made [key_name(M)] into a slime.")
@@ -631,7 +638,8 @@ var/global/list/g_fancy_list_of_types = null
if(Rad.anchored)
if(!Rad.P)
var/obj/item/weapon/tank/internals/plasma/Plasma = new/obj/item/weapon/tank/internals/plasma(Rad)
- Plasma.air_contents.toxins = 70
+ Plasma.air_contents.assert_gas("plasma")
+ Plasma.air_contents.gases["plasma"][MOLES] = 70
Rad.drainratio = 0
Rad.P = Plasma
Plasma.loc = Rad
diff --git a/code/modules/admin/verbs/diagnostics.dm b/code/modules/admin/verbs/diagnostics.dm
index c1284154c64..7811b0bc3c0 100644
--- a/code/modules/admin/verbs/diagnostics.dm
+++ b/code/modules/admin/verbs/diagnostics.dm
@@ -6,15 +6,17 @@
return
var/datum/gas_mixture/GM = target.return_air()
+ var/list/GM_gases
var/burning = 0
if(istype(target, /turf/simulated))
var/turf/simulated/T = target
if(T.active_hotspot)
burning = 1
- usr << "@[target.x],[target.y]: O:[GM.oxygen] T:[GM.toxins] N:[GM.nitrogen] C:[GM.carbon_dioxide] w [GM.temperature] Kelvin, [GM.return_pressure()] kPa [(burning)?("\red BURNING"):(null)]"
- for(var/datum/gas/trace_gas in GM.trace_gases)
- usr << "[trace_gas.type]: [trace_gas.moles]"
+ usr << "@[target.x],[target.y]: [GM.temperature] Kelvin, [GM.return_pressure()] kPa [(burning)?("\red BURNING"):(null)]"
+ for(var/id in GM_gases)
+ if(id in hardcoded_gases || GM_gases[id][MOLES])
+ usr << "[GM_gases[id][GAS_NAME]]: [GM_gases[id][MOLES]]"
feedback_add_details("admin_verb","DAST") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/fix_next_move()
diff --git a/code/modules/admin/verbs/onlyone.dm b/code/modules/admin/verbs/onlyone.dm
index 88cd7f16394..d856e5b8577 100644
--- a/code/modules/admin/verbs/onlyone.dm
+++ b/code/modules/admin/verbs/onlyone.dm
@@ -10,8 +10,20 @@
ticker.mode.traitors += H.mind
H.mind.special_role = "traitor"
- add_objective(H.mind, /datum/objective/default/steal)
- add_objective(H.mind, /datum/objective/escape_obj/hijack, 1)
+ var/datum/objective/steal/steal_objective = new
+ steal_objective.owner = H.mind
+ steal_objective.set_target(new /datum/objective_item/steal/nukedisc)
+ H.mind.objectives += steal_objective
+
+ var/datum/objective/hijack/hijack_objective = new
+ hijack_objective.owner = H.mind
+ H.mind.objectives += hijack_objective
+
+ H << "You are the traitor."
+ var/obj_count = 1
+ for(var/datum/objective/OBJ in H.mind.objectives)
+ H << "Objective #[obj_count]: [OBJ.explanation_text]"
+ obj_count++
for (var/obj/item/I in H)
if (istype(I, /obj/item/weapon/implant))
diff --git a/code/modules/assembly/bomb.dm b/code/modules/assembly/bomb.dm
index 9e5cc53faf9..3a446749607 100644
--- a/code/modules/assembly/bomb.dm
+++ b/code/modules/assembly/bomb.dm
@@ -108,7 +108,10 @@
return
/obj/item/weapon/tank/proc/ignite() //This happens when a bomb is told to explode
- var/fuel_moles = air_contents.toxins + air_contents.oxygen/6
+ air_contents.assert_gases("plasma", "o2")
+ var/fuel_moles = air_contents.gases["plasma"][MOLES] + air_contents.gases["o2"][MOLES]/6
+ air_contents.garbage_collect()
+
var/strength = 1
var/turf/ground_zero = get_turf(loc)
diff --git a/code/modules/assembly/doorcontrol.dm b/code/modules/assembly/doorcontrol.dm
index 9e654648c2d..805acc631b1 100644
--- a/code/modules/assembly/doorcontrol.dm
+++ b/code/modules/assembly/doorcontrol.dm
@@ -76,7 +76,6 @@
if (M.id == src.id)
spawn( 0 )
M.open()
- return
sleep(10)
@@ -90,7 +89,6 @@
if (M.id == src.id)
spawn( 0 )
M.close()
- return
sleep(10)
cooldown = 0
diff --git a/code/modules/assembly/health.dm b/code/modules/assembly/health.dm
index febe545a30e..34c82ac8c6b 100644
--- a/code/modules/assembly/health.dm
+++ b/code/modules/assembly/health.dm
@@ -74,7 +74,7 @@
if(!secured)
user.show_message("The [name] is unsecured!")
return 0
- var/dat = text("Health Sensor [scanning?"On":"Off"]")
+ var/dat = "Health Sensor [scanning?"On":"Off"]"
if(scanning && health_scan)
dat += "
Health: [health_scan]"
user << browse(dat, "window=hscan")
diff --git a/code/modules/assembly/proximity.dm b/code/modules/assembly/proximity.dm
index 53990197caa..bb355b97e67 100644
--- a/code/modules/assembly/proximity.dm
+++ b/code/modules/assembly/proximity.dm
@@ -56,7 +56,6 @@
cooldown = 2
spawn(10)
process_cooldown()
- return
/obj/item/device/assembly/prox_sensor/process()
@@ -71,15 +70,13 @@
/obj/item/device/assembly/prox_sensor/dropped()
spawn(0)
sense()
- return
- return
/obj/item/device/assembly/prox_sensor/toggle_scan()
if(!secured) return 0
scanning = !scanning
update_icon()
- return
+
/obj/item/device/assembly/prox_sensor/update_icon()
diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm
index 463abc6c5e4..ff0396423bc 100644
--- a/code/modules/assembly/signaler.dm
+++ b/code/modules/assembly/signaler.dm
@@ -17,7 +17,7 @@
..()
spawn(40)
set_frequency(frequency)
- return
+
/obj/item/device/assembly/signaler/Destroy()
if(SSradio)
diff --git a/code/modules/awaymissions/gateway.dm b/code/modules/awaymissions/gateway.dm
index d6f2136eebc..a761abd4909 100644
--- a/code/modules/awaymissions/gateway.dm
+++ b/code/modules/awaymissions/gateway.dm
@@ -132,15 +132,15 @@ var/obj/machinery/gateway/centerstation/the_gateway = null
//okay, here's the good teleporting stuff
/obj/machinery/gateway/centerstation/Bumped(atom/movable/AM)
- if(!ready)
+ if(!ready)
return
- if(!active)
+ if(!active)
return
- if(!awaygate || qdeleted(awaygate))
+ if(!awaygate || qdeleted(awaygate))
return
if(awaygate.calibrated)
- AM.loc = get_step(awaygate.loc, SOUTH)
+ AM.forceMove(get_step(awaygate.loc, SOUTH))
AM.dir = SOUTH
if (ismob(AM))
var/mob/M = AM
@@ -150,7 +150,7 @@ var/obj/machinery/gateway/centerstation/the_gateway = null
else
var/obj/effect/landmark/dest = pick(awaydestinations)
if(dest)
- AM.loc = dest.loc
+ AM.forceMove(get_turf(dest))
AM.dir = SOUTH
use_power(5000)
return
@@ -240,18 +240,18 @@ var/obj/machinery/gateway/centerstation/the_gateway = null
/obj/machinery/gateway/centeraway/Bumped(atom/movable/AM)
- if(!ready)
+ if(!ready)
return
- if(!active)
+ if(!active)
return
- if(!stationgate || qdeleted(stationgate))
+ if(!stationgate || qdeleted(stationgate))
return
if(istype(AM, /mob/living/carbon))
for(var/obj/item/weapon/implant/exile/E in AM)//Checking that there is an exile implant in the contents
if(E.imp_in == AM)//Checking that it's actually implanted vs just in their pocket
AM << "\black The station gate has detected your exile implant and is blocking your entry."
return
- AM.loc = get_step(stationgate.loc, SOUTH)
+ AM.forceMove(get_step(stationgate.loc, SOUTH))
AM.dir = SOUTH
if (ismob(AM))
var/mob/M = AM
diff --git a/code/modules/awaymissions/maploader/reader.dm b/code/modules/awaymissions/maploader/reader.dm
index 49948de8598..a33123bbd7a 100644
--- a/code/modules/awaymissions/maploader/reader.dm
+++ b/code/modules/awaymissions/maploader/reader.dm
@@ -298,6 +298,10 @@ var/global/dmm_suite/preloader/_preloader = null
else if(copytext(trim_right,1,2) == "'")
trim_right = file(copytext(trim_right,2,length(trim_right)))
+ //Check for path
+ else if(ispath(text2path(trim_right)))
+ trim_right = text2path(trim_right)
+
to_return[trim_left] = trim_right
else//simple var
diff --git a/code/modules/awaymissions/mission_code/Academy.dm b/code/modules/awaymissions/mission_code/Academy.dm
index 5b43288d109..d6d72ba061f 100644
--- a/code/modules/awaymissions/mission_code/Academy.dm
+++ b/code/modules/awaymissions/mission_code/Academy.dm
@@ -1,31 +1,31 @@
//Academy Areas
/area/awaymission/academy
- name = "\improper Academy Asteroids"
+ name = "Academy Asteroids"
icon_state = "away"
/area/awaymission/academy/headmaster
- name = "\improper Academy Fore Block"
+ name = "Academy Fore Block"
icon_state = "away1"
/area/awaymission/academy/classrooms
- name = "\improper Academy Classroom Block"
+ name = "Academy Classroom Block"
icon_state = "away2"
/area/awaymission/academy/academyaft
- name = "\improper Academy Ship Aft Block"
+ name = "Academy Ship Aft Block"
icon_state = "away3"
/area/awaymission/academy/academygate
- name = "\improper Academy Gateway"
+ name = "Academy Gateway"
icon_state = "away4"
/area/awaymission/academy/academycellar
- name = "\improper Academy Cellar"
+ name = "Academy Cellar"
icon_state = "away4"
/area/awaymission/academy/academyengine
- name = "\improper Academy Engine"
+ name = "Academy Engine"
icon_state = "away4"
//Academy Items
@@ -102,7 +102,7 @@
/obj/structure/academy_wizard_spawner/proc/summon_wizard()
var/turf/T = src.loc
-
+
var/mob/living/carbon/human/wizbody = new(T)
wizbody.equipOutfit(/datum/outfit/wizard/academy)
var/obj/item/weapon/implant/exile/Implant = new/obj/item/weapon/implant/exile(wizbody)
@@ -110,7 +110,7 @@
wizbody.faction |= "wizard"
wizbody.real_name = "Academy Teacher"
wizbody.name = "Academy Teacher"
-
+
var/datum/mind/wizmind = new /datum/mind()
wizmind.name = "Wizard Defender"
wizmind.special_role = "Academy Defender"
@@ -118,13 +118,13 @@
wizmind.objectives += O
wizmind.transfer_to(wizbody)
ticker.mode.wizards |= wizmind
-
+
wizmind.AddSpell(new /obj/effect/proc_holder/spell/targeted/ethereal_jaunt)
wizmind.AddSpell(new /obj/effect/proc_holder/spell/targeted/projectile/magic_missile)
wizmind.AddSpell(new /obj/effect/proc_holder/spell/dumbfire/fireball)
current_wizard = wizbody
-
+
give_control()
/obj/structure/academy_wizard_spawner/proc/update_status()
diff --git a/code/modules/awaymissions/mission_code/blackmarketpackers.dm b/code/modules/awaymissions/mission_code/blackmarketpackers.dm
index b6496fe4718..1b6ffd1d0bf 100644
--- a/code/modules/awaymissions/mission_code/blackmarketpackers.dm
+++ b/code/modules/awaymissions/mission_code/blackmarketpackers.dm
@@ -1,22 +1,22 @@
//Packer Ship Areas
/area/awaymission/BMPship
- name = "\improper BMP Asteroids"
+ name = "BMP Asteroids"
icon_state = "away"
luminosity = 0
/area/awaymission/BMPship/Aft
- name = "\improper Aft Block"
+ name = "Aft Block"
icon_state = "away1"
requires_power = 1
/area/awaymission/BMPship/Midship
- name = "\improper Midship Block"
+ name = "Midship Block"
icon_state = "away2"
requires_power = 1
/area/awaymission/BMPship/Fore
- name = "\improper Fore Block"
+ name = "Fore Block"
icon_state = "away3"
requires_power = 1
\ No newline at end of file
diff --git a/code/modules/awaymissions/mission_code/challenge.dm b/code/modules/awaymissions/mission_code/challenge.dm
index 1625b3da847..724dcf434e3 100644
--- a/code/modules/awaymissions/mission_code/challenge.dm
+++ b/code/modules/awaymissions/mission_code/challenge.dm
@@ -5,7 +5,7 @@
icon_state = "away"
/area/awaymission/challenge/main
- name = "\improper Danger Room"
+ name = "Danger Room"
icon_state = "away1"
requires_power = 0
diff --git a/code/modules/awaymissions/mission_code/snowdin.dm b/code/modules/awaymissions/mission_code/snowdin.dm
index cb9dcad479f..f93f77882fd 100644
--- a/code/modules/awaymissions/mission_code/snowdin.dm
+++ b/code/modules/awaymissions/mission_code/snowdin.dm
@@ -1,37 +1,37 @@
//Snow Valley Areas//--
/area/awaymission/snowdin
- name = "\improper Snowdin Tundra Plains"
+ name = "Snowdin Tundra Plains"
icon_state = "away"
requires_power = 0
luminosity = 1
lighting_use_dynamic = DYNAMIC_LIGHTING_ENABLED
/area/awaymission/snowdin/post
- name = "\improper Snowdin Outpost"
+ name = "Snowdin Outpost"
requires_power = 1
/area/awaymission/snowdin/igloo
- name = "\improper Snowdin Igloos"
+ name = "Snowdin Igloos"
icon_state = "away2"
/area/awaymission/snowdin/cave
- name = "\improper Snowdin Caves"
+ name = "Snowdin Caves"
icon_state = "away2"
luminosity = 0
/area/awaymission/snowdin/base
- name = "\improper Snowdin Main Base"
+ name = "Snowdin Main Base"
icon_state = "away3"
requires_power = 1
/area/awaymission/snowdin/dungeon1
- name = "\improper Snowdin Depths"
+ name = "Snowdin Depths"
icon_state = "away2"
luminosity = 0
/area/awaymission/snowdin/sekret
- name = "\improper Snowdin Operations"
+ name = "Snowdin Operations"
icon_state = "away3"
requires_power = 1
@@ -168,7 +168,6 @@ obj/item/weapon/paper/crumpled/snowdin/shovel
/obj/item/weapon/twohanded/dualsaber = 15,
/obj/item/organ/internal/heart/demon = 7,
/obj/item/weapon/gun/projectile/automatic/c20r/unrestricted = 16,
- /obj/item/weapon/teleportation_scroll = 5,
/obj/item/weapon/dice/d20/fate = 4,
/obj/item/weapon/gun/magic/wand/resurrection/inert = 15,
/obj/item/weapon/gun/magic/wand/resurrection = 10,
diff --git a/code/modules/awaymissions/mission_code/spacebattle.dm b/code/modules/awaymissions/mission_code/spacebattle.dm
index 9b9a70d220a..b8906c8011d 100644
--- a/code/modules/awaymissions/mission_code/spacebattle.dm
+++ b/code/modules/awaymissions/mission_code/spacebattle.dm
@@ -1,33 +1,33 @@
//Spacebattle Areas
/area/awaymission/spacebattle
- name = "\improper Space Battle"
+ name = "Space Battle"
icon_state = "away"
requires_power = 0
/area/awaymission/spacebattle/cruiser
- name = "\improper Nanotrasen Cruiser"
+ name = "Nanotrasen Cruiser"
/area/awaymission/spacebattle/syndicate1
- name = "\improper Syndicate Assault Ship 1"
+ name = "Syndicate Assault Ship 1"
/area/awaymission/spacebattle/syndicate2
- name = "\improper Syndicate Assault Ship 2"
+ name = "Syndicate Assault Ship 2"
/area/awaymission/spacebattle/syndicate3
- name = "\improper Syndicate Assault Ship 3"
+ name = "Syndicate Assault Ship 3"
/area/awaymission/spacebattle/syndicate4
- name = "\improper Syndicate War Sphere 1"
+ name = "Syndicate War Sphere 1"
/area/awaymission/spacebattle/syndicate5
- name = "\improper Syndicate War Sphere 2"
+ name = "Syndicate War Sphere 2"
/area/awaymission/spacebattle/syndicate6
- name = "\improper Syndicate War Sphere 3"
+ name = "Syndicate War Sphere 3"
/area/awaymission/spacebattle/syndicate7
- name = "\improper Syndicate Fighter"
+ name = "Syndicate Fighter"
/area/awaymission/spacebattle/secret
- name = "\improper Hidden Chamber"
\ No newline at end of file
+ name = "Hidden Chamber"
\ No newline at end of file
diff --git a/code/modules/awaymissions/mission_code/wildwest.dm b/code/modules/awaymissions/mission_code/wildwest.dm
index dc2cdd22470..5b9153cbd2c 100644
--- a/code/modules/awaymissions/mission_code/wildwest.dm
+++ b/code/modules/awaymissions/mission_code/wildwest.dm
@@ -7,30 +7,30 @@
//Wild West Areas
/area/awaymission/wwmines
- name = "\improper Wild West Mines"
+ name = "Wild West Mines"
icon_state = "away1"
luminosity = 1
requires_power = 0
/area/awaymission/wwgov
- name = "\improper Wild West Mansion"
+ name = "Wild West Mansion"
icon_state = "away2"
luminosity = 1
requires_power = 0
/area/awaymission/wwrefine
- name = "\improper Wild West Refinery"
+ name = "Wild West Refinery"
icon_state = "away3"
luminosity = 1
requires_power = 0
/area/awaymission/wwvault
- name = "\improper Wild West Vault"
+ name = "Wild West Vault"
icon_state = "away3"
luminosity = 0
/area/awaymission/wwvaultdoors
- name = "\improper Wild West Vault Doors" // this is to keep the vault area being entirely lit because of requires_power
+ name = "Wild West Vault Doors" // this is to keep the vault area being entirely lit because of requires_power
icon_state = "away2"
requires_power = 0
luminosity = 0
@@ -96,8 +96,14 @@
user << "The Wish Granter punishes you for your wickedness, claiming your soul and warping your body to match the darkness in your heart."
ticker.mode.traitors += user.mind
user.mind.special_role = "traitor"
- add_objective(user.mind, /datum/objective/escape_obj/hijack, 1)
+ var/datum/objective/hijack/hijack = new
+ hijack.owner = user.mind
+ user.mind.objectives += hijack
user << "Your inhibitions are swept away, the bonds of loyalty broken, you are free to murder as you please!"
+ var/obj_count = 1
+ for(var/datum/objective/OBJ in user.mind.objectives)
+ user << "Objective #[obj_count]: [OBJ.explanation_text]"
+ obj_count++
user.set_species(/datum/species/shadow)
if("Peace")
user << "Whatever alien sentience that the Wish Granter possesses is satisfied with your wish. There is a distant wailing as the last of the Faithless begin to die, then silence."
diff --git a/code/modules/awaymissions/zlevel.dm b/code/modules/awaymissions/zlevel.dm
index ca6cd9bca4a..eb284af8c41 100644
--- a/code/modules/awaymissions/zlevel.dm
+++ b/code/modules/awaymissions/zlevel.dm
@@ -22,6 +22,7 @@ var/global/list/potentialSpaceRuins = generateMapList(filename = "config/spaceRu
var/file = file(map)
if(isfile(file))
maploader.load_map(file)
+ smooth_zlevel(world.maxz)
world.log << "away mission loaded: [map]"
map_transition_config.Add(AWAY_MISSION_LIST)
@@ -33,6 +34,7 @@ var/global/list/potentialSpaceRuins = generateMapList(filename = "config/spaceRu
world << "Away mission loaded."
+ SortAreas() //To add recently loaded areas
else
world << "No away missions found."
return
diff --git a/code/modules/client/asset_cache.dm b/code/modules/client/asset_cache.dm
index 6e73a0bfd97..9928eea9eda 100644
--- a/code/modules/client/asset_cache.dm
+++ b/code/modules/client/asset_cache.dm
@@ -131,7 +131,7 @@ You can set verify to TRUE if you want send() to sleep until the client has the
if (register_asset)
register_asset(file,files[file])
send_asset(client,file)
- sleep(-1) //queuing calls like this too quickly can cause issues in some client versions
+ sleep(0) //queuing calls like this too quickly can cause issues in some client versions
//This proc "registers" an asset, it adds it to the cache for further use, you cannot touch it from this point on or you'll fuck things up.
//if it's an icon or something be careful, you'll have to copy it before further use.
diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm
index 73b99c574ad..6fd6d507597 100644
--- a/code/modules/client/client procs.dm
+++ b/code/modules/client/client procs.dm
@@ -35,10 +35,6 @@
return
cmd_admin_pm(href_list["priv_msg"],null)
return
- // NanoUI
- if(href_list["nano_error"])
- src << href_list["nano_error"]
- throw EXCEPTION("NanoUI: [href_list["nano_error"]]")
//Logs all hrefs
if(config && config.log_hrefs && href_logfile)
@@ -334,6 +330,6 @@ var/next_external_rsc = 0
'html/browser/scannernew.css',
'html/browser/playeroptions.css',
)
- spawn (10)
+ spawn (10) //removing this spawn causes all clients to not get verbs.
//Precache the client with all other assets slowly, so as to not block other browse() calls
getFilesSlow(src, SSasset.cache, register_asset = FALSE)
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 2fdb79069e3..ef4359a5861 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -28,6 +28,7 @@ var/list/preferences_datums = list()
var/UI_style = "Midnight"
var/tgui_fancy = TRUE
+ var/tgui_lock = TRUE
var/toggles = TOGGLES_DEFAULT
var/chat_toggles = TOGGLES_DEFAULT_CHAT
var/ghost_form = "ghost"
@@ -326,6 +327,7 @@ var/list/preferences_datums = list()
dat += "General Settings
"
dat += "UI Style: [UI_style]
"
dat += "tgui Style: [(tgui_fancy) ? "Fancy" : "No Frills"]
"
+ dat += "tgui Monitors: [(tgui_lock) ? "Primary" : "All"]
"
dat += "Play admin midis: [(toggles & SOUND_MIDI) ? "Yes" : "No"]
"
dat += "Play lobby music: [(toggles & SOUND_LOBBY) ? "Yes" : "No"]
"
dat += "Ghost ears: [(chat_toggles & CHAT_GHOSTEARS) ? "All Speech" : "Nearest Creatures"]
"
@@ -1008,11 +1010,17 @@ var/list/preferences_datums = list()
UI_style = "Plasmafire"
if("Plasmafire")
UI_style = "Retro"
+ if("Retro")
+ UI_style = "Slimecore"
+ if("Slimecore")
+ UI_style = "Operative"
else
UI_style = "Midnight"
if("tgui_fancy")
tgui_fancy = !tgui_fancy
+ if("tgui_lock")
+ tgui_lock = !tgui_lock
if("hear_adminhelps")
toggles ^= SOUND_ADMINHELP
diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm
index 4971819a84e..0b0245f4a41 100644
--- a/code/modules/client/preferences_savefile.dm
+++ b/code/modules/client/preferences_savefile.dm
@@ -165,6 +165,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["lastchangelog"] >> lastchangelog
S["UI_style"] >> UI_style
S["tgui_fancy"] >> tgui_fancy
+ S["tgui_lock"] >> tgui_lock
if(islist(S["be_special"]))
S["be_special"] >> be_special
@@ -190,8 +191,9 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
//Sanitize
ooccolor = sanitize_ooccolor(sanitize_hexcolor(ooccolor, 6, 1, initial(ooccolor)))
lastchangelog = sanitize_text(lastchangelog, initial(lastchangelog))
- UI_style = sanitize_inlist(UI_style, list("Midnight", "Plasmafire", "Retro"), initial(UI_style))
+ UI_style = sanitize_inlist(UI_style, list("Midnight", "Plasmafire", "Retro", "Slimecore", "Operative"), initial(UI_style))
tgui_fancy = sanitize_integer(tgui_fancy, 0, 1, initial(tgui_fancy))
+ tgui_lock = sanitize_integer(tgui_lock, 0, 1, initial(tgui_lock))
default_slot = sanitize_integer(default_slot, 1, max_save_slots, initial(default_slot))
toggles = sanitize_integer(toggles, 0, 65535, initial(toggles))
ghost_form = sanitize_inlist(ghost_form, ghost_forms, initial(ghost_form))
@@ -212,6 +214,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["lastchangelog"] << lastchangelog
S["UI_style"] << UI_style
S["tgui_fancy"] << tgui_fancy
+ S["tgui_lock"] << tgui_lock
S["be_special"] << be_special
S["default_slot"] << default_slot
S["toggles"] << toggles
diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm
index 139f4812fec..88dd4e7d113 100644
--- a/code/modules/clothing/spacesuits/hardsuit.dm
+++ b/code/modules/clothing/spacesuits/hardsuit.dm
@@ -13,7 +13,7 @@
var/obj/item/clothing/suit/space/hardsuit/suit
item_color = "engineering" //Determines used sprites: hardsuit[on]-[color] and hardsuit[on]-[color]2 (lying down sprite)
action_button_name = "Toggle Helmet Light"
- flags = BLOCKHAIR | STOPSPRESSUREDMAGE | THICKMATERIAL | NODROP
+ flags = BLOCKHAIR | STOPSPRESSUREDMAGE | THICKMATERIAL
flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH
@@ -38,6 +38,15 @@
if(on)
user.AddLuminosity(-brightness_on)
SetLuminosity(brightness_on)
+ if(suit)
+ suit.RemoveHelmet()
+
+/obj/item/clothing/head/helmet/space/hardsuit/equipped(mob/user, slot)
+ if(slot != slot_head)
+ if(suit)
+ suit.RemoveHelmet()
+ else
+ qdel(src)
/obj/item/clothing/head/helmet/space/hardsuit/proc/display_visor_message(var/msg)
var/mob/wearer = loc
@@ -178,7 +187,7 @@
on = 0
var/obj/item/clothing/suit/space/hardsuit/syndi/linkedsuit = null
action_button_name = "Toggle Helmet Mode"
- flags = BLOCKHAIR | STOPSPRESSUREDMAGE | THICKMATERIAL | NODROP
+ flags = BLOCKHAIR | STOPSPRESSUREDMAGE | THICKMATERIAL
flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH
/obj/item/clothing/head/helmet/space/hardsuit/syndi/update_icon()
@@ -457,7 +466,7 @@
var/datum/effect_system/spark_spread/s = new
s.set_up(2, 1, src)
s.start()
- owner.visible_message("The [attack_text] sparks harmlessly off [owner]'s shields!")
+ owner.visible_message("[owner]'s shields deflect [attack_text] in a shower of sparks!")
current_charges--
recharge_cooldown = world.time + recharge_delay
SSobj.processing |= src
diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm
index 89c27f94d13..caccd580ebc 100644
--- a/code/modules/clothing/suits/armor.dm
+++ b/code/modules/clothing/suits/armor.dm
@@ -228,7 +228,7 @@
for(var/mob/living/M in view(6, owner))
if(M == owner)
continue
- owner.Beam(M,icon_state="purple_lightning",icon='icons/effects/effects.dmi',time=5)
+ owner.Beam(M,icon_state="lightning[rand(1, 12)]",icon='icons/effects/effects.dmi',time=5)
M.adjustFireLoss(25)
playsound(M, 'sound/machines/defib_zap.ogg', 50, 1, -1)
return 1
diff --git a/code/modules/clothing/suits/toggles.dm b/code/modules/clothing/suits/toggles.dm
index 3ad99150f75..a50f174c9bc 100644
--- a/code/modules/clothing/suits/toggles.dm
+++ b/code/modules/clothing/suits/toggles.dm
@@ -137,6 +137,8 @@
helmet.attack_self(H)
H.unEquip(helmet, 1)
H.update_inv_wear_suit()
+ H << "The helmet on the hardsuit disengages."
+ playsound(src.loc, 'sound/mecha/mechmove03.ogg', 50, 1)
helmet.loc = src
/obj/item/clothing/suit/space/hardsuit/dropped()
@@ -163,6 +165,4 @@
H.update_inv_wear_suit()
playsound(src.loc, 'sound/mecha/mechmove03.ogg', 50, 1)
else
- H << "You disengage the helmet on the hardsuit."
- playsound(src.loc, 'sound/mecha/mechmove03.ogg', 50, 1)
RemoveHelmet()
diff --git a/code/modules/events/spacevine.dm b/code/modules/events/spacevine.dm
index ba20754944b..72517dce58b 100644
--- a/code/modules/events/spacevine.dm
+++ b/code/modules/events/spacevine.dm
@@ -18,7 +18,7 @@
if(turfs.len) //Pick a turf to spawn at if we can
var/turf/simulated/T = pick(turfs)
- spawn(0) new/obj/effect/spacevine_controller(T) //spawn a controller at turf
+ new/obj/effect/spacevine_controller(T) //spawn a controller at turf
/datum/spacevine_mutation
@@ -228,7 +228,10 @@
var/turf/simulated/floor/T = holder.loc
if(istype(T))
var/datum/gas_mixture/GM = T.air
- GM.oxygen = max(0, GM.oxygen - severity * holder.energy)
+ if(!GM.gases["o2"])
+ return
+ GM.gases["o2"][MOLES] -= severity * holder.energy
+ GM.garbage_collect()
/datum/spacevine_mutation/nitro_eater
name = "nitrogen consuming"
@@ -240,7 +243,10 @@
var/turf/simulated/floor/T = holder.loc
if(istype(T))
var/datum/gas_mixture/GM = T.air
- GM.nitrogen = max(0, GM.nitrogen - severity * holder.energy)
+ if(!GM.gases["n2"])
+ return
+ GM.gases["n2"][MOLES] -= severity * holder.energy
+ GM.garbage_collect()
/datum/spacevine_mutation/carbondioxide_eater
name = "CO2 consuming"
@@ -252,7 +258,10 @@
var/turf/simulated/floor/T = holder.loc
if(istype(T))
var/datum/gas_mixture/GM = T.air
- GM.carbon_dioxide = max(0, GM.carbon_dioxide - severity * holder.energy)
+ if(!GM.gases["co2"])
+ return
+ GM.gases["co2"][MOLES] -= severity * holder.energy
+ GM.garbage_collect()
/datum/spacevine_mutation/plasma_eater
name = "toxins consuming"
@@ -264,7 +273,10 @@
var/turf/simulated/floor/T = holder.loc
if(istype(T))
var/datum/gas_mixture/GM = T.air
- GM.toxins = max(0, GM.toxins - severity * holder.energy)
+ if(!GM.gases["plasma"])
+ return
+ GM.gases["plasma"][MOLES] -= severity * holder.energy
+ GM.garbage_collect()
/datum/spacevine_mutation/thorns
name = "thorny"
@@ -425,6 +437,7 @@
/obj/effect/spacevine_controller
+ invisibility = 101
var/list/obj/effect/spacevine/vines = list()
var/list/growth_queue = list()
var/spread_multiplier = 5
diff --git a/code/modules/events/wizard/fakeexplosion.dm b/code/modules/events/wizard/fakeexplosion.dm
index 955fd7fd390..3b2dfe80a06 100644
--- a/code/modules/events/wizard/fakeexplosion.dm
+++ b/code/modules/events/wizard/fakeexplosion.dm
@@ -8,5 +8,5 @@
/datum/round_event/wizard/fake_explosion/start()
for(var/mob/M in player_list)
M << 'sound/machines/Alarm.ogg'
- sleep(100)
- ticker.station_explosion_cinematic(1,"fake") //:o)
\ No newline at end of file
+ spawn(100)
+ ticker.station_explosion_cinematic(1,"fake") //:o)
\ No newline at end of file
diff --git a/code/modules/events/wizard/imposter.dm b/code/modules/events/wizard/imposter.dm
index c260a51251c..ec6f4fa06c5 100644
--- a/code/modules/events/wizard/imposter.dm
+++ b/code/modules/events/wizard/imposter.dm
@@ -38,9 +38,11 @@
ticker.mode.apprentices += I.mind
I.mind.special_role = "imposter"
- var/datum/objective/protect_objective = add_objective(I.mind, /datum/objective/default/protect)
+ var/datum/objective/protect/protect_objective = new /datum/objective/protect
+ protect_objective.owner = I.mind
protect_objective.target = W.mind
protect_objective.explanation_text = "Protect [W.real_name], the wizard."
+ I.mind.objectives += protect_objective
ticker.mode.update_wiz_icons_added(I.mind)
I.attack_log += "\[[time_stamp()]\] Is an imposter!"
diff --git a/code/modules/flufftext/Dreaming.dm b/code/modules/flufftext/Dreaming.dm
index eb933f8ce7a..08fb9940f8d 100644
--- a/code/modules/flufftext/Dreaming.dm
+++ b/code/modules/flufftext/Dreaming.dm
@@ -1,4 +1,5 @@
/mob/living/carbon/proc/dream()
+ set waitfor = 0
dreaming = 1
var/list/dreams = list(
"an ID card","a bottle","a familiar face","a crewmember","a toolbox","a security officer","the captain",
@@ -8,17 +9,16 @@
"a blue light","an abandoned laboratory","Nanotrasen","The Syndicate","blood","healing","power","respect",
"riches","space","a crash","happiness","pride","a fall","water","flames","ice","melons","flying"
)
- spawn(0)
- for(var/i = rand(1,4),i > 0, i--)
- var/dream_image = pick(dreams)
- dreams -= dream_image
- src << "... [dream_image] ..."
- sleep(rand(40,70))
- if(paralysis <= 0)
- dreaming = 0
- return 0
- dreaming = 0
- return 1
+ for(var/i = rand(1,4),i > 0, i--)
+ var/dream_image = pick(dreams)
+ dreams -= dream_image
+ src << "... [dream_image] ..."
+ sleep(rand(40,70))
+ if(paralysis <= 0)
+ dreaming = 0
+ return 0
+ dreaming = 0
+ return 1
/mob/living/carbon/proc/handle_dreams()
if(prob(5) && !dreaming) dream()
diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm
index 1c3365cd59a..03648956916 100644
--- a/code/modules/flufftext/Hallucination.dm
+++ b/code/modules/flufftext/Hallucination.dm
@@ -128,7 +128,7 @@ Gunshots/explosions/opening doors/less rare audio (done)
if(!U.welded)
src.loc = U.loc
break
- image_state = pick("plasma","sleeping_agent")
+ image_state = pick("plasma","nitrous_oxide")
flood_images += image(image_icon,src,image_state,MOB_LAYER)
flood_turfs += get_turf(src.loc)
if(target.client) target.client.images |= flood_images
diff --git a/code/modules/food&drinks/drinks/drinks/bottle.dm b/code/modules/food&drinks/drinks/drinks/bottle.dm
index e97d65fdea7..c41e3682c35 100644
--- a/code/modules/food&drinks/drinks/drinks/bottle.dm
+++ b/code/modules/food&drinks/drinks/drinks/bottle.dm
@@ -7,6 +7,7 @@
/obj/item/weapon/reagent_containers/food/drinks/bottle
amount_per_transfer_from_this = 10
volume = 100
+ throwforce = 15
item_state = "broken_beer" //Generic held-item sprite until unique ones are made.
var/const/duration = 13 //Directly relates to the 'weaken' duration. Lowered by armor (i.e. helmets)
var/isGlass = 1 //Whether the 'bottle' is made of glass or not so that milk cartons dont shatter when someone gets hit by it
@@ -124,8 +125,7 @@
/obj/item/weapon/reagent_containers/food/drinks/bottle/proc/SplashReagents(var/mob/M)
if(src.reagents.total_volume)
- for(var/mob/O in viewers(M, null))
- O.show_message(text("The contents of \the [src] splashes all over [M]!"), 1)
+ M.visible_message("The contents of \the [src] splashes all over [M]!")
reagents.reaction(M, TOUCH)
reagents.clear_reagents()
return
diff --git a/code/modules/games/cards.dm b/code/modules/games/cards.dm
index 0efe72640e1..baec9c92ea7 100644
--- a/code/modules/games/cards.dm
+++ b/code/modules/games/cards.dm
@@ -87,7 +87,7 @@
else return ..()
/obj/item/weapon/deck/proc/dealTo(mob/living/target, mob/living/source)
- if (!src.cards.len)
+ if (!cards.len)
source.show_message("There are no cards in the deck.")
return
@@ -185,10 +185,10 @@
. = ..()
if((!concealed || src.loc == usr) && cards.len)
- usr.show_message("It contains: ")
+ usr.show_message("It contains: ", 1)
for (var/datum/playingcard/card in cards)
- usr.show_message("The [card.name].")
+ usr.show_message("The [card.name].", 1)
/obj/item/weapon/hand/proc/update_conceal()
if (src.concealed) src.hi.updateContent("headbar", "You are currently concealing your hand. Reveal your hand.")
diff --git a/code/modules/holiday/halloween.dm b/code/modules/holiday/halloween.dm
index 6f187ea2ae9..ea41f4f1807 100644
--- a/code/modules/holiday/halloween.dm
+++ b/code/modules/holiday/halloween.dm
@@ -212,7 +212,7 @@
step(I,direction)
return
-/mob/living/simple_animal/shade/howling_ghost/adjustBruteLoss()
+/mob/living/simple_animal/shade/howling_ghost/adjustHealth()
return
/mob/living/simple_animal/shade/howling_ghost/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
@@ -272,7 +272,7 @@
/mob/living/simple_animal/hostile/retaliate/clown/insane/AttackTarget()
return
-/mob/living/simple_animal/hostile/retaliate/clown/insane/adjustBruteLoss()
+/mob/living/simple_animal/hostile/retaliate/clown/insane/adjustHealth()
if(prob(5))
playsound(loc, 'sound/spookoween/insane_low_laugh.ogg', 300, 1)
diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm
index 13c40680a50..cd6ed978b57 100644
--- a/code/modules/hydroponics/hydroponics.dm
+++ b/code/modules/hydroponics/hydroponics.dm
@@ -377,7 +377,7 @@
harvest = 0
weedlevel = 0 // Reset
- spawn(5) // Wait a while
+ sleep(5) // Wait a while
update_icon()
visible_message("[oldPlantName] suddenly mutated into [myseed.plantname]!")
@@ -397,7 +397,7 @@
harvest = 0
weedlevel = 0 // Reset
- spawn(5) // Wait a while
+ sleep(5) // Wait a while
update_icon()
visible_message("The mutated weeds in [src] spawned a [myseed.plantname]!")
else
@@ -798,8 +798,7 @@
user << "You reconnect \the [src]'s hoses."
for(var/obj/machinery/hydroponics/h in range(1,src))
- spawn()
- h.update_icon()
+ h.update_icon()
return
diff --git a/code/modules/mining/abandoned_crates.dm b/code/modules/mining/abandoned_crates.dm
index 044ce578d40..638ac5d5a7c 100644
--- a/code/modules/mining/abandoned_crates.dm
+++ b/code/modules/mining/abandoned_crates.dm
@@ -13,8 +13,7 @@
/obj/structure/closet/crate/secure/loot/New()
..()
- var/list/digits = list("1", "2", "3", "4", "5", "6", "7", "8", "9", "0")
-
+ var/list/digits = list("1", "2", "3", "4", "5", "6", "7", "8", "9", "z")
code = ""
for(var/i = 0, i < codelen, i++)
var/dig = pick(digits)
@@ -169,7 +168,7 @@
user << "You leave the crate alone."
else
user << "A red light flashes."
- lastattempt = input
+ lastattempt = replacetext(input, 0, "z")
attempts--
if (attempts == 0)
user << "The crate's anti-tamper system activates!"
diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm
index de1b8269ad9..7d0e9756caf 100644
--- a/code/modules/mining/equipment_locker.dm
+++ b/code/modules/mining/equipment_locker.dm
@@ -655,18 +655,19 @@
wanted_objects = list(/obj/item/weapon/ore/diamond, /obj/item/weapon/ore/gold, /obj/item/weapon/ore/silver,
/obj/item/weapon/ore/plasma, /obj/item/weapon/ore/uranium, /obj/item/weapon/ore/iron,
/obj/item/weapon/ore/bananium)
+ healable = 0
/mob/living/simple_animal/hostile/mining_drone/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/W = I
if(W.welding && !stat)
- if(AIStatus == AI_ON)
+ if(AIStatus != AI_OFF && AIStatus != AI_IDLE)
user << "[src] is moving around too much to repair!"
return
if(maxHealth == health)
user << "[src] is at full integrity."
else
- health += 10
+ adjustBruteLoss(-10)
user << "You repair some of the armor on [src]."
return
if(istype(I, /obj/item/device/mining_scanner) || istype(I, /obj/item/device/t_scanner/adv_mining_scanner))
@@ -741,7 +742,7 @@
O.loc = src.loc
return
-/mob/living/simple_animal/hostile/mining_drone/adjustBruteLoss()
+/mob/living/simple_animal/hostile/mining_drone/adjustHealth()
if(search_objects)
SetOffenseBehavior()
..()
diff --git a/code/modules/mining/lavaland/weather.dm b/code/modules/mining/lavaland/weather.dm
index 35eb9a821ff..2d24616df50 100644
--- a/code/modules/mining/lavaland/weather.dm
+++ b/code/modules/mining/lavaland/weather.dm
@@ -36,9 +36,9 @@
if(M.z == target_z)
M << start_up_message
- sleep(start_up_time)
- stage = MAIN_STAGE
- weather_main()
+ spawn(start_up_time)
+ stage = MAIN_STAGE
+ weather_main()
/datum/weather/proc/weather_main()
diff --git a/code/modules/mining/lavaland/weather_types.dm b/code/modules/mining/lavaland/weather_types.dm
index e32fbf4dc7a..89308d4437c 100644
--- a/code/modules/mining/lavaland/weather_types.dm
+++ b/code/modules/mining/lavaland/weather_types.dm
@@ -47,12 +47,13 @@
duration_overlay = ""
overlay_layer = 10
-/datum/weather/advanced_darkness/advanced_darkness/update_areas()
- ..()
+/datum/weather/advanced_darkness/update_areas()
for(var/area/A in impacted_areas)
if(stage == MAIN_STAGE)
+ A.invisibility = 0
A.opacity = 1
else
+ A.invisibility = 100
A.opacity = 0
//Ash storms
diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm
index f15c5a5c37e..40c0ea1d568 100644
--- a/code/modules/mining/mine_items.dm
+++ b/code/modules/mining/mine_items.dm
@@ -52,6 +52,7 @@
circuit = /obj/item/weapon/circuitboard/mining_shuttle
shuttleId = "mining"
possible_destinations = "mining_home;mining_away"
+ no_destination_swap = 1
/*********************Pickaxe & Drills**************************/
@@ -257,11 +258,7 @@
A.nitrogen = 82
A.carbon_dioxide = 0
A.toxins = 0
- A.air.oxygen = 21
- A.air.carbon_dioxide = 0
- A.air.nitrogen = 82
- A.air.toxins = 0
- A.air.temperature = 293.15
+ A.air.copy_from_turf(A)
SSair.add_to_active(A)
A.overlays.Cut()
var/area/Z = get_area(A)
diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm
index ad4f5ca3d08..e8eb3462876 100644
--- a/code/modules/mining/mine_turfs.dm
+++ b/code/modules/mining/mine_turfs.dm
@@ -16,6 +16,7 @@ var/global/list/rockTurfEdgeCache
opacity = 1
density = 1
blocks_air = 1
+ layer = TURF_LAYER + 0.05
temperature = TCMB
var/environment_type = "asteroid"
var/turf/simulated/floor/plating/asteroid/turf_type = /turf/simulated/floor/plating/asteroid //For basalt vs normal asteroid
@@ -89,7 +90,7 @@ var/global/list/rockTurfEdgeCache
icon_state = "rock"
return
-/turf/simulated/mineral/proc/Spread(turf/T)
+/turf/simulated/mineral/Spread(turf/T)
new src.type(T)
/turf/simulated/mineral/random
@@ -284,16 +285,14 @@ var/global/list/rockTurfEdgeCache
countdown(notify_admins)
/turf/simulated/mineral/gibtonite/proc/countdown(notify_admins = 0)
- spawn(0)
- while(stage == 1 && det_time > 0 && mineralAmt >= 1)
- det_time--
- sleep(5)
- if(stage == 1 && det_time <= 0 && mineralAmt >= 1)
- var/turf/bombturf = get_turf(src)
- mineralAmt = 0
- explosion(bombturf,1,3,5, adminlog = notify_admins)
- if(stage == 0 || stage == 2)
- return
+ set waitfor = 0
+ while(stage == 1 && det_time > 0 && mineralAmt >= 1)
+ det_time--
+ sleep(5)
+ if(stage == 1 && det_time <= 0 && mineralAmt >= 1)
+ var/turf/bombturf = get_turf(src)
+ mineralAmt = 0
+ explosion(bombturf,1,3,5, adminlog = notify_admins)
/turf/simulated/mineral/gibtonite/proc/defuse()
if(stage == 1)
@@ -685,7 +684,7 @@ var/global/list/rockTurfEdgeCache
/turf/simulated/chasm/proc/drop(atom/movable/AM)
visible_message("[AM] falls into [src]!")
- AM.Move(locate(drop_x, drop_y, drop_z))
+ AM.forceMove(locate(drop_x, drop_y, drop_z))
AM.visible_message("[AM] falls from above!")
if(istype(AM, /mob/living))
var/mob/living/L = AM
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index 641fa9446f5..65643040b5c 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -182,9 +182,6 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
if(!istype(usr, /mob/dead/observer))
usr << "Not when you're not dead!"
return
- usr.verbs -= /mob/dead/observer/proc/dead_tele
- spawn(30)
- usr.verbs += /mob/dead/observer/proc/dead_tele
var/A
A = input("Area to jump to", "BOOYEA", A) as null|anything in sortedAreas
var/area/thearea = A
diff --git a/code/modules/mob/interactive.dm b/code/modules/mob/interactive.dm
index 1bbb0e3ee55..44ecafca878 100644
--- a/code/modules/mob/interactive.dm
+++ b/code/modules/mob/interactive.dm
@@ -324,8 +324,8 @@
//proc functions
for(var/Proc in functions)
if(!isnotfunc())
- spawn(1)
- call(src,Proc)(src)
+ callfunction(Proc)
+
//target interaction stays hardcoded
@@ -411,6 +411,9 @@
tryWalk(TARGET)
LAST_TARGET = TARGET
+/mob/living/carbon/human/interactive/proc/callfunction(Proc)
+ set waitfor = 0
+ call(src,Proc)(src)
/mob/living/carbon/human/interactive/proc/tryWalk(turf/TARGET)
if(!isnotfunc())
if(!walk2derpless(TARGET))
diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm
index ccb3d3f8695..1d78e69955a 100644
--- a/code/modules/mob/living/carbon/alien/alien.dm
+++ b/code/modules/mob/living/carbon/alien/alien.dm
@@ -12,6 +12,7 @@
ventcrawler = 2
languages = ALIEN
verb_say = "hisses"
+ bubble_icon = "alien"
type_of_meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/xeno
var/nightvision = 1
@@ -177,6 +178,12 @@ Des: Removes all infected images from the alien.
/mob/living/carbon/alien/get_standard_pixel_y_offset(lying = 0)
return initial(pixel_y)
+/mob/living/carbon/alien/proc/alien_evolve(mob/living/carbon/alien/new_xeno)
+ src << "You begin to evolve!"
+ visible_message("[src] begins to twist and contort!")
+ if(mind)
+ mind.transfer_to(new_xeno)
+ qdel(src)
#undef HEAT_DAMAGE_LEVEL_1
#undef HEAT_DAMAGE_LEVEL_2
diff --git a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm
index 05bc607668b..4f01f0ca45d 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm
@@ -90,8 +90,7 @@ Doesn't work on other aliens/AI.*/
if(locate(/obj/structure/alien/weeds/node) in get_turf(user))
src << "There's already a weed node here."
return 0
- for(var/mob/O in viewers(user, null))
- O.show_message(text("[user] has planted some alien weeds!"), 1)
+ user.visible_message("[user] has planted some alien weeds!")
new/obj/structure/alien/weeds/node(user.loc)
return 1
@@ -241,7 +240,7 @@ Doesn't work on other aliens/AI.*/
user << "There is already a resin structure there."
return 0
var/choice = input("Choose what you wish to shape.","Resin building") as null|anything in structures
- if(!choice)
+ if(!choice)
return 0
if (!cost_check(check_turf,user))
return 0
diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm
index 8f12f2b593b..1b98f34f670 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm
@@ -26,12 +26,12 @@
action_icon_state = "alien_evolve_drone"
/obj/effect/proc_holder/alien/evolve/fire(mob/living/carbon/alien/user)
- if(!alien_type_present(/mob/living/carbon/alien/humanoid/royal/))
- user << "You begin to evolve!"
- user.visible_message("[user] begins to twist and contort!")
+ if(!isturf(user.loc))
+ user << "You can't evolve here!"
+ return 0
+ if(!alien_type_present(/mob/living/carbon/alien/humanoid/royal))
var/mob/living/carbon/alien/humanoid/royal/praetorian/new_xeno = new (user.loc)
- user.mind.transfer_to(new_xeno)
- qdel(user)
+ user.alien_evolve(new_xeno)
return 1
else
user << "We already have a living royal!"
diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm
index b1b7efece80..b99f7eb5e88 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm
@@ -4,6 +4,7 @@
maxHealth = 125
health = 125
icon_state = "alienh_s"
+ var/obj/screen/leap_icon = null
/mob/living/carbon/alien/humanoid/hunter/New()
internal_organs += new /obj/item/organ/internal/alien/plasmavessel/small
@@ -37,7 +38,6 @@
//Hunter verbs
-
/mob/living/carbon/alien/humanoid/hunter/proc/toggle_leap(message = 1)
leap_on_click = !leap_on_click
leap_icon.icon_state = "leap_[leap_on_click ? "on":"off"]"
diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/praetorian.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/praetorian.dm
index a493926e129..c7ce06b06b6 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/caste/praetorian.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/caste/praetorian.dm
@@ -54,11 +54,8 @@
/obj/effect/proc_holder/alien/royal/praetorian/evolve/fire(mob/living/carbon/alien/user)
if(!alien_type_present(/mob/living/carbon/alien/humanoid/royal/queen))
- user << "You begin to evolve!"
- user.visible_message("[user] begins to twist and contort!")
var/mob/living/carbon/alien/humanoid/royal/queen/new_xeno = new (user.loc)
- user.mind.transfer_to(new_xeno)
- qdel(user)
+ user.alien_evolve(new_xeno)
return 1
else
user << "We already have an alive queen."
diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
index 6ed3532f9fd..2c9d6b5b156 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
@@ -149,6 +149,15 @@
/mob/living/carbon/alien/humanoid/get_permeability_protection()
return 0.8
+/mob/living/carbon/alien/humanoid/alien_evolve(mob/living/carbon/alien/humanoid/new_xeno)
+ drop_l_hand()
+ drop_r_hand()
+ for(var/atom/movable/A in stomach_contents)
+ stomach_contents.Remove(A)
+ new_xeno.stomach_contents.Add(A)
+ A.loc = new_xeno
+ ..()
+
//For alien evolution/promotion procs. Checks for
proc/alien_type_present(var/alienpath)
for(var/mob/living/carbon/alien/humanoid/A in living_mob_list)
diff --git a/code/modules/mob/living/carbon/alien/humanoid/queen.dm b/code/modules/mob/living/carbon/alien/humanoid/queen.dm
index 25f8bf1f9bd..e8e94b0f044 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/queen.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/queen.dm
@@ -5,8 +5,9 @@
ventcrawler = 0 //pull over that ass too fat
unique_name = 0
pixel_x = -16
+ bubble_icon = "alienroyal"
mob_size = MOB_SIZE_LARGE
- layer = 6
+ layer = MOB_LAYER + 0.5 //above most mobs, but below speechbubbles
pressure_resistance = 200 //Because big, stompy xenos should not be blown around like paper.
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab/xeno = 20, /obj/item/stack/sheet/animalhide/xeno = 3)
diff --git a/code/modules/mob/living/carbon/alien/larva/powers.dm b/code/modules/mob/living/carbon/alien/larva/powers.dm
index 3f9cb657498..d575ba5f4f8 100644
--- a/code/modules/mob/living/carbon/alien/larva/powers.dm
+++ b/code/modules/mob/living/carbon/alien/larva/powers.dm
@@ -32,8 +32,6 @@
return
var/mob/living/carbon/alien/larva/L = user
- if(L.stat != CONSCIOUS)
- return
if(L.handcuffed || L.legcuffed) // Cuffing larvas ? Eh ?
user << "You cannot evolve when you are cuffed."
@@ -45,6 +43,9 @@
L << "Drones are the weakest and slowest of the castes, but can grow into the queen if there is none, and are vital to maintaining a hive with their resin secretion abilities."
var/alien_caste = alert(L, "Please choose which alien caste you shall belong to.",,"Hunter","Sentinel","Drone")
+ if(user.incapacitated()) //something happened to us while we were choosing.
+ return
+
var/mob/living/carbon/alien/humanoid/new_xeno
switch(alien_caste)
if("Hunter")
@@ -53,8 +54,8 @@
new_xeno = new /mob/living/carbon/alien/humanoid/sentinel(L.loc)
if("Drone")
new_xeno = new /mob/living/carbon/alien/humanoid/drone(L.loc)
- if(L.mind) L.mind.transfer_to(new_xeno)
- qdel(L)
+
+ L.alien_evolve(new_xeno)
return 0
else
user << "You are not fully grown."
diff --git a/code/modules/mob/living/carbon/alien/life.dm b/code/modules/mob/living/carbon/alien/life.dm
index 4162a583675..ac23410cc38 100644
--- a/code/modules/mob/living/carbon/alien/life.dm
+++ b/code/modules/mob/living/carbon/alien/life.dm
@@ -9,22 +9,27 @@
var/toxins_used = 0
var/breath_pressure = (breath.total_moles()*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME
+ var/list/breath_gases = breath.gases
+
+ breath.assert_gases("plasma", "o2")
//Partial pressure of the toxins in our breath
- var/Toxins_pp = (breath.toxins/breath.total_moles())*breath_pressure
+ var/Toxins_pp = (breath_gases["plasma"][MOLES]/breath.total_moles())*breath_pressure
if(Toxins_pp) // Detect toxins in air
- adjustPlasma(breath.toxins*250)
+ adjustPlasma(breath_gases["plasma"][MOLES]*250)
throw_alert("alien_tox", /obj/screen/alert/alien_tox)
- toxins_used = breath.toxins
+ toxins_used = breath_gases["plasma"][MOLES]
else
clear_alert("alien_tox")
//Breathe in toxins and out oxygen
- breath.toxins -= toxins_used
- breath.oxygen += toxins_used
+ breath_gases["plasma"][MOLES] -= toxins_used
+ breath_gases["o2"][MOLES] += toxins_used
+
+ breath.garbage_collect()
//BREATH TEMPERATURE
handle_breath_temperature(breath)
diff --git a/code/modules/mob/living/carbon/alien/say.dm b/code/modules/mob/living/carbon/alien/say.dm
index 5a1746e5ed2..dec01676dd5 100644
--- a/code/modules/mob/living/carbon/alien/say.dm
+++ b/code/modules/mob/living/carbon/alien/say.dm
@@ -1,5 +1,5 @@
/mob/living/carbon/alien/say(message)
- . = ..(message, "A")
+ . = ..()
if(.)
playsound(loc, "hiss", 25, 1, 1) //erp just isn't the same without sound feedback
@@ -11,8 +11,10 @@
var/message_a = say_quote(message, get_spans())
var/rendered = "Hivemind, [shown_name] [message_a]"
for(var/mob/S in player_list)
- if((!S.stat && S.hivecheck()) || (S in dead_mob_list))
+ if(!S.stat && S.hivecheck())
S << rendered
+ if(S in dead_mob_list)
+ S << "(F) [rendered]"
/mob/living/carbon/alien/humanoid/royal/queen/alien_talk(message, shown_name = name)
shown_name = "[shown_name]"
diff --git a/code/modules/mob/living/carbon/brain/posibrain.dm b/code/modules/mob/living/carbon/brain/posibrain.dm
index 27d29ef4e50..40727647cd7 100644
--- a/code/modules/mob/living/carbon/brain/posibrain.dm
+++ b/code/modules/mob/living/carbon/brain/posibrain.dm
@@ -39,7 +39,10 @@ var/global/posibrain_notif_cooldown = 0
spawn(askDelay) //Seperate from the global cooldown.
notified = 0
update_icon()
- visible_message("The positronic brain buzzes quietly, and the golden lights fade away. Perhaps you could try again?")
+ if(brainmob.stat == CONSCIOUS && brainmob.client)
+ visible_message("The positronic brain pings, and its lights start flashing. Success!")
+ else
+ visible_message("The positronic brain buzzes quietly, and the golden lights fade away. Perhaps you could try again?")
return //Code for deleting personalities recommended here.
@@ -127,7 +130,6 @@ var/global/posibrain_notif_cooldown = 0
return
/obj/item/device/mmi/posibrain/New()
-
brainmob = new(src)
brainmob.name = "[pick(list("PBU","HIU","SINA","ARMA","OSI","HBL","MSO","RR","CHRI","CDB","HG","XSI","ORNG","GUN","KOR","MET","FRE","XIS","SLI","PKP","HOG","RZH","GOOF","MRPR","JJR","FIRC","INC","PHL","BGB","ANTR","MIW","WJ","JRD","CHOC","ANCL","JLLO","ANNS","KOS","TKRG","XAL","STLP","CBOS","DNCN","FXMC","DRSD"))]-[rand(100, 999)]"
brainmob.real_name = brainmob.name
@@ -137,7 +139,6 @@ var/global/posibrain_notif_cooldown = 0
brainmob.silent = 0
dead_mob_list -= brainmob
ping_ghosts("created")
-
..()
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 36184591213..c7d8d287697 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -364,22 +364,21 @@ var/const/GALOSHES_DONT_HELP = 4
adjustBruteLoss(10)
/mob/living/carbon/proc/spin(spintime, speed)
- spawn()
- var/D = dir
- while(spintime >= speed)
- sleep(speed)
- switch(D)
- if(NORTH)
- D = EAST
- if(SOUTH)
- D = WEST
- if(EAST)
- D = SOUTH
- if(WEST)
- D = NORTH
- dir = D
- spintime -= speed
- return
+ set waitfor = 0
+ var/D = dir
+ while(spintime >= speed)
+ sleep(speed)
+ switch(D)
+ if(NORTH)
+ D = EAST
+ if(SOUTH)
+ D = WEST
+ if(EAST)
+ D = SOUTH
+ if(WEST)
+ D = NORTH
+ dir = D
+ spintime -= speed
/mob/living/carbon/resist_buckle()
if(restrained())
diff --git a/code/modules/mob/living/carbon/human/blood.dm b/code/modules/mob/living/carbon/human/blood.dm
index ae8d90f7985..d9d330e3a7a 100644
--- a/code/modules/mob/living/carbon/human/blood.dm
+++ b/code/modules/mob/living/carbon/human/blood.dm
@@ -46,6 +46,7 @@ var/const/BLOOD_VOLUME_SURVIVE = 122
/mob/living/carbon/human/handle_blood()
if(NOBLOOD in dna.species.specflags)
+ blood_max = 0
return
if(stat != DEAD && bodytemperature >= 170) //Dead or cryosleep people do not pump the blood.
@@ -82,15 +83,12 @@ var/const/BLOOD_VOLUME_SURVIVE = 122
update_body()
var/word = pick("dizzy","woozy","faint")
src << "You feel [word]."
- if(oxyloss < 20)
- oxyloss += 3
+ oxyloss += max(0, (20-oxyloss)*0.2)
if(BLOOD_VOLUME_BAD to BLOOD_VOLUME_OKAY)
if(!pale)
pale = 1
update_body()
- if(oxyloss < 50)
- oxyloss += 10
- oxyloss += 1
+ oxyloss += max(1, (50-oxyloss)*0.2)
if(prob(5))
eye_blurry += 6
var/word = pick("dizzy","woozy","faint")
@@ -309,4 +307,4 @@ var/const/BLOOD_VOLUME_SURVIVE = 122
else
B.blood_DNA[source.data["blood_DNA"]] = "O+"
- return B
\ No newline at end of file
+ return B
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index d578bb03c28..891331c3cc1 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -37,8 +37,6 @@
make_blood()
..()
- var/mob/M = src
- faction |= "\ref[M]"
/mob/living/carbon/human/prepare_data_huds()
//Update med hud images...
diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm
index e3c6d588a28..d4f4e91e080 100644
--- a/code/modules/mob/living/carbon/human/human_attackhand.dm
+++ b/code/modules/mob/living/carbon/human/human_attackhand.dm
@@ -1,7 +1,12 @@
/mob/living/carbon/human/attack_hulk(mob/living/carbon/human/user)
if(user.a_intent == "harm")
..(user, 1)
+ playsound(loc, user.dna.species.attack_sound, 25, 1, -1)
+ var/hulk_verb = pick("smash","pummel")
+ visible_message("[user] has [hulk_verb]ed [src]!", \
+ "[user] has [hulk_verb]ed [src]!")
adjustBruteLoss(15)
+ return 1
/mob/living/carbon/human/attack_hand(mob/living/carbon/human/M)
if(..()) //to allow surgery to return properly.
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 88a4581e713..27a76f7eec2 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -306,6 +306,8 @@
if(head)
if(head.flags & BLOCK_GAS_SMOKE_EFFECT)
. = 1
+ if(NOBREATH in dna.species.specflags)
+ . = 1
return .
/mob/living/carbon/human/proc/handle_embedded_objects()
for(var/obj/item/organ/limb/L in organs)
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index bd834169e4e..2f00d7f0024 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -38,6 +38,7 @@
var/meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human //What the species drops on gibbing
var/list/no_equip = list() // slots the race can't equip stuff to
var/nojumpsuit = 0 // this is sorta... weird. it basically lets you equip stuff that usually needs jumpsuits without one, like belts and pockets and ids
+ var/blacklisted = 0 //Flag to exclude from green slime core species.
var/dangerous_existence = null //A flag for transformation spells that tells them "hey if you turn a person into one of these without preperation, they'll probably die!"
var/say_mod = "says" // affects the speech message
var/list/default_features = list() // Default mutant bodyparts for this species. Don't forget to set one for every mutant bodypart you allow this species to have.
@@ -1167,10 +1168,14 @@
var/gas_breathed = 0
+ var/list/breath_gases = breath.gases
+
+ breath.assert_gases("o2", "plasma", "co2", "n2o")
+
//Partial pressures in our breath
- var/O2_pp = breath.get_breath_partial_pressure(breath.oxygen)
- var/Toxins_pp = breath.get_breath_partial_pressure(breath.toxins)
- var/CO2_pp = breath.get_breath_partial_pressure(breath.carbon_dioxide)
+ var/O2_pp = breath.get_breath_partial_pressure(breath_gases["o2"][MOLES])
+ var/Toxins_pp = breath.get_breath_partial_pressure(breath_gases["plasma"][MOLES])
+ var/CO2_pp = breath.get_breath_partial_pressure(breath_gases["co2"][MOLES])
//-- OXY --//
@@ -1178,7 +1183,7 @@
//Too much oxygen! //Yes, some species may not like it.
if(safe_oxygen_max)
if(O2_pp > safe_oxygen_max && !(NOBREATH in specflags))
- var/ratio = (breath.oxygen/safe_oxygen_max) * 10
+ var/ratio = (breath_gases["o2"][MOLES]/safe_oxygen_max) * 10
H.adjustOxyLoss(Clamp(ratio,oxy_breath_dam_min,oxy_breath_dam_max))
H.throw_alert("too_much_oxy", /obj/screen/alert/too_much_oxy)
else
@@ -1187,17 +1192,17 @@
//Too little oxygen!
if(safe_oxygen_min)
if(O2_pp < safe_oxygen_min)
- gas_breathed = handle_too_little_breath(H,O2_pp,safe_oxygen_min,breath.oxygen)
+ gas_breathed = handle_too_little_breath(H,O2_pp,safe_oxygen_min,breath_gases["o2"][MOLES])
H.throw_alert("oxy", /obj/screen/alert/oxy)
else
H.failed_last_breath = 0
H.adjustOxyLoss(-5)
- gas_breathed = breath.oxygen/6
+ gas_breathed = breath_gases["o2"][MOLES]/6
H.clear_alert("oxy")
//Exhale
- breath.oxygen -= gas_breathed
- breath.carbon_dioxide += gas_breathed
+ breath_gases["o2"][MOLES] -= gas_breathed
+ breath_gases["co2"][MOLES] += gas_breathed
gas_breathed = 0
@@ -1215,7 +1220,7 @@
H.adjustOxyLoss(8)
H.throw_alert("too_much_co2", /obj/screen/alert/too_much_co2)
if(prob(20)) // Lets give them some chance to know somethings not right though I guess.
- spawn(0) H.emote("cough")
+ H.emote("cough")
else
H.co2overloadtime = 0
@@ -1224,17 +1229,17 @@
//Too little CO2!
if(safe_co2_min)
if(CO2_pp < safe_co2_min)
- gas_breathed = handle_too_little_breath(H,CO2_pp, safe_co2_min,breath.carbon_dioxide)
+ gas_breathed = handle_too_little_breath(H,CO2_pp, safe_co2_min,breath_gases["co2"][MOLES])
H.throw_alert("not_enough_co2", /obj/screen/alert/not_enough_co2)
else
H.failed_last_breath = 0
H.adjustOxyLoss(-5)
- gas_breathed = breath.carbon_dioxide/6
+ gas_breathed = breath_gases["co2"][MOLES]/6
H.clear_alert("not_enough_co2")
//Exhale
- breath.carbon_dioxide -= gas_breathed
- breath.oxygen += gas_breathed
+ breath_gases["co2"][MOLES] -= gas_breathed
+ breath_gases["o2"][MOLES] += gas_breathed
gas_breathed = 0
@@ -1243,7 +1248,7 @@
//Too much toxins!
if(safe_toxins_max)
if(Toxins_pp > safe_toxins_max && !(NOBREATH in specflags))
- var/ratio = (breath.toxins/safe_toxins_max) * 10
+ var/ratio = (breath_gases["plasma"][MOLES]/safe_toxins_max) * 10
if(H.reagents)
H.reagents.add_reagent("plasma", Clamp(ratio, tox_breath_dam_min, tox_breath_dam_max))
H.throw_alert("tox_in_air", /obj/screen/alert/tox_in_air)
@@ -1254,34 +1259,33 @@
//Too little toxins!
if(safe_toxins_min)
if(Toxins_pp < safe_toxins_min && !(NOBREATH in specflags))
- gas_breathed = handle_too_little_breath(H,Toxins_pp, safe_toxins_min, breath.toxins)
+ gas_breathed = handle_too_little_breath(H,Toxins_pp, safe_toxins_min, breath_gases["plasma"][MOLES])
H.throw_alert("not_enough_tox", /obj/screen/alert/not_enough_tox)
else
H.failed_last_breath = 0
H.adjustOxyLoss(-5)
- gas_breathed = breath.toxins/6
+ gas_breathed = breath_gases["plasma"][MOLES]/6
H.clear_alert("not_enough_tox")
//Exhale
- breath.toxins -= gas_breathed
- breath.carbon_dioxide += gas_breathed
+ breath_gases["plasma"][MOLES] -= gas_breathed
+ breath_gases["co2"][MOLES] += gas_breathed
gas_breathed = 0
//-- TRACES --//
- if(breath.trace_gases.len && !(NOBREATH in specflags)) // If there's some other shit in the air lets deal with it here.
- for(var/datum/gas/sleeping_agent/SA in breath.trace_gases)
- var/SA_pp = breath.get_breath_partial_pressure(SA.moles)
- if(SA_pp > SA_para_min) // Enough to make us paralysed for a bit
- H.Paralyse(3) // 3 gives them one second to wake up and run away a bit!
- if(SA_pp > SA_sleep_min) // Enough to make us sleep as well
- H.sleeping = max(H.sleeping+2, 10)
- else if(SA_pp > 0.01) // There is sleeping gas in their lungs, but only a little, so give them a bit of a warning
- if(prob(20))
- spawn(0) H.emote(pick("giggle", "laugh"))
-
- handle_breath_temperature(breath, H)
+ if(breath && !(NOBREATH in specflags)) // If there's some other shit in the air lets deal with it here.
+ var/SA_pp = breath.get_breath_partial_pressure(breath_gases["n2o"][MOLES])
+ if(SA_pp > SA_para_min) // Enough to make us paralysed for a bit
+ H.Paralyse(3) // 3 gives them one second to wake up and run away a bit!
+ if(SA_pp > SA_sleep_min) // Enough to make us sleep as well
+ H.sleeping = max(H.sleeping+2, 10)
+ else if(SA_pp > 0.01) // There is sleeping gas in their lungs, but only a little, so give them a bit of a warning
+ if(prob(20))
+ H.emote(pick("giggle", "laugh"))
+ handle_breath_temperature(breath, H)
+ breath.garbage_collect()
return 1
@@ -1294,8 +1298,7 @@
if(!(NOBREATH in specflags) || (H.health <= config.health_threshold_crit))
if(prob(20))
- spawn(0)
- H.emote("gasp")
+ H.emote("gasp")
if(breath_pp > 0)
var/ratio = safe_breath_min/breath_pp
H.adjustOxyLoss(min(5*ratio, HUMAN_MAX_OXYLOSS)) // Don't fuck them up too fast (space only does HUMAN_MAX_OXYLOSS after all!
diff --git a/code/modules/mob/living/carbon/human/species_types.dm b/code/modules/mob/living/carbon/human/species_types.dm
index c8ae6d2343f..4b819853b4e 100644
--- a/code/modules/mob/living/carbon/human/species_types.dm
+++ b/code/modules/mob/living/carbon/human/species_types.dm
@@ -168,6 +168,7 @@ datum/species/human/spec_death(gibbed, mob/living/carbon/human/H)
darksight = 8
invis_sight = SEE_INVISIBLE_MINIMUM
sexes = 0
+ blacklisted = 1
ignored_by = list(/mob/living/simple_animal/hostile/faithless)
meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/shadow
specflags = list(NOBREATH,NOBLOOD,RADIMMUNE)
@@ -343,6 +344,7 @@ datum/species/human/spec_death(gibbed, mob/living/carbon/human/H)
armor = 55
siemens_coeff = 0
punchmod = 5
+ blacklisted = 1
no_equip = list(slot_wear_mask, slot_wear_suit, slot_gloves, slot_shoes, slot_w_uniform)
nojumpsuit = 1
meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/golem
@@ -387,6 +389,7 @@ datum/species/human/spec_death(gibbed, mob/living/carbon/human/H)
id = "skeleton"
say_mod = "rattles"
need_nutrition = 0
+ blacklisted = 1
sexes = 0
meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/skeleton
specflags = list(NOBREATH,HEATRES,COLDRES,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE)
@@ -412,6 +415,7 @@ datum/species/human/spec_death(gibbed, mob/living/carbon/human/H)
id = "zombie"
say_mod = "moans"
sexes = 0
+ blacklisted = 1
meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/zombie
specflags = list(NOBREATH,HEATRES,COLDRES,NOBLOOD,RADIMMUNE)
@@ -453,16 +457,16 @@ datum/species/human/spec_death(gibbed, mob/living/carbon/human/H)
/datum/species/abductor/handle_speech(message)
//Hacks
var/mob/living/carbon/human/user = usr
+ var/rendered = "[user.name]: [message]"
for(var/mob/living/carbon/human/H in mob_list)
if(H.dna.species.id != "abductor")
continue
else
var/datum/species/abductor/target_spec = H.dna.species
if(target_spec.team == team)
- H << "[user.name]: [message]"
- //return - technically you can add more aliens to a team
+ H << rendered
for(var/mob/M in dead_mob_list)
- M << "[user.name]: [message]"
+ M << "(F) [rendered]"
return ""
@@ -479,6 +483,7 @@ var/global/image/plasmaman_on_fire = image("icon"='icons/mob/OnFire.dmi', "icon_
safe_toxins_min = 16 //We breath THIS!
safe_toxins_max = 0
dangerous_existence = 1 //So so much
+ blacklisted = 1 //See above
need_nutrition = 0 //Hard to eat through a helmet
burnmod = 2
heatmod = 2
@@ -505,7 +510,7 @@ var/global/image/plasmaman_on_fire = image("icon"='icons/mob/OnFire.dmi', "icon_
if(environment)
var/total_moles = environment.total_moles()
if(total_moles)
- if((environment.oxygen /total_moles) >= 0.01)
+ if(environment.gases["o2"] && (environment.gases["o2"][MOLES] /total_moles) >= 0.01)
H.adjust_fire_stacks(0.5)
if(!H.on_fire && H.fire_stacks > 0)
H.visible_message("[H]'s body reacts with the atmosphere and bursts into flames!","Your body reacts with the atmosphere and bursts into flame!")
@@ -549,6 +554,7 @@ var/global/list/synth_flesh_disguises = list()
SA_para_min = 0
SA_sleep_min = 0
dangerous_existence = 1
+ blacklisted = 1
need_nutrition = 0 //beep boop robots do not need sustinance
meat = null
var/list/initial_specflags = list(NOTRANSSTING,NOBREATH,VIRUSIMMUNE) //for getting these values back for assume_disguise()
diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm
index cf61c41cdab..00fbd98a442 100644
--- a/code/modules/mob/living/carbon/life.dm
+++ b/code/modules/mob/living/carbon/life.dm
@@ -48,7 +48,7 @@
if(losebreath > 0)
losebreath--
if(prob(10))
- spawn emote("gasp")
+ emote("gasp")
if(istype(loc, /obj/))
var/obj/loc_as_obj = loc
loc_as_obj.handle_internal_lifeform(src,0)
@@ -105,21 +105,23 @@
var/oxygen_used = 0
var/breath_pressure = (breath.total_moles()*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME
- var/O2_partialpressure = (breath.oxygen/breath.total_moles())*breath_pressure
- var/Toxins_partialpressure = (breath.toxins/breath.total_moles())*breath_pressure
- var/CO2_partialpressure = (breath.carbon_dioxide/breath.total_moles())*breath_pressure
+ var/list/breath_gases = breath.gases
+ breath.assert_gases("o2","plasma","co2","n2o")
+
+ var/O2_partialpressure = (breath_gases["o2"][MOLES]/breath.total_moles())*breath_pressure
+ var/Toxins_partialpressure = (breath_gases["plasma"][MOLES]/breath.total_moles())*breath_pressure
+ var/CO2_partialpressure = (breath_gases["co2"][MOLES]/breath.total_moles())*breath_pressure
//OXYGEN
if(O2_partialpressure < safe_oxy_min) //Not enough oxygen
if(prob(20))
- spawn(0)
- emote("gasp")
+ emote("gasp")
if(O2_partialpressure > 0)
var/ratio = safe_oxy_min/O2_partialpressure
adjustOxyLoss(min(5*ratio, 3))
failed_last_breath = 1
- oxygen_used = breath.oxygen*ratio/6
+ oxygen_used = breath_gases["o2"][MOLES]*ratio/6
else
adjustOxyLoss(3)
failed_last_breath = 1
@@ -128,11 +130,11 @@
else //Enough oxygen
failed_last_breath = 0
adjustOxyLoss(-5)
- oxygen_used = breath.oxygen/6
+ oxygen_used = breath_gases["o2"][MOLES]/6
clear_alert("oxy")
- breath.oxygen -= oxygen_used
- breath.carbon_dioxide += oxygen_used
+ breath_gases["o2"][MOLES] -= oxygen_used
+ breath_gases["co2"][MOLES] += oxygen_used
//CARBON DIOXIDE
if(CO2_partialpressure > safe_co2_max)
@@ -144,31 +146,31 @@
if(world.time - co2overloadtime > 300)
adjustOxyLoss(8)
if(prob(20))
- spawn(0) emote("cough")
+ emote("cough")
else
co2overloadtime = 0
//TOXINS/PLASMA
if(Toxins_partialpressure > safe_tox_max)
- var/ratio = (breath.toxins/safe_tox_max) * 10
+ var/ratio = (breath_gases["plasma"][MOLES]/safe_tox_max) * 10
if(reagents)
reagents.add_reagent("plasma", Clamp(ratio, MIN_PLASMA_DAMAGE, MAX_PLASMA_DAMAGE))
throw_alert("tox_in_air", /obj/screen/alert/tox_in_air)
else
clear_alert("tox_in_air")
- //TRACE GASES
- if(breath.trace_gases.len)
- for(var/datum/gas/sleeping_agent/SA in breath.trace_gases)
- var/SA_partialpressure = (SA.moles/breath.total_moles())*breath_pressure
- if(SA_partialpressure > SA_para_min)
- Paralyse(3)
- if(SA_partialpressure > SA_sleep_min)
- sleeping = max(sleeping+2, 10)
- else if(SA_partialpressure > 0.01)
- if(prob(20))
- spawn(0) emote(pick("giggle","laugh"))
+ //NITROUS OXIDE
+ if(breath_gases["n2o"])
+ var/SA_partialpressure = (breath_gases["n2o"][MOLES]/breath.total_moles())*breath_pressure
+ if(SA_partialpressure > SA_para_min)
+ Paralyse(3)
+ if(SA_partialpressure > SA_sleep_min)
+ sleeping = max(sleeping+2, 10)
+ else if(SA_partialpressure > 0.01)
+ if(prob(20))
+ emote(pick("giggle","laugh"))
+ breath.garbage_collect()
//BREATH TEMPERATURE
handle_breath_temperature(breath)
@@ -264,21 +266,21 @@
/mob/living/carbon/handle_stomach()
- spawn(0)
- for(var/mob/living/M in stomach_contents)
- if(M.loc != src)
+ set waitfor = 0
+ for(var/mob/living/M in stomach_contents)
+ if(M.loc != src)
+ stomach_contents.Remove(M)
+ continue
+ if(istype(M, /mob/living/carbon) && stat != 2)
+ if(M.stat == 2)
+ M.death(1)
stomach_contents.Remove(M)
+ qdel(M)
continue
- if(istype(M, /mob/living/carbon) && stat != 2)
- if(M.stat == 2)
- M.death(1)
- stomach_contents.Remove(M)
- qdel(M)
- continue
- if(SSmob.times_fired%3==1)
- if(!(M.status_flags & GODMODE))
- M.adjustBruteLoss(5)
- nutrition += 10
+ if(SSmob.times_fired%3==1)
+ if(!(M.status_flags & GODMODE))
+ M.adjustBruteLoss(5)
+ nutrition += 10
//This updates the health and status of the mob (conscious, unconscious, dead)
/mob/living/carbon/handle_regular_status_updates()
@@ -320,8 +322,7 @@
adjustStaminaLoss(-10)
sleeping = max(sleeping-1, 0)
if( prob(10) && health && !hal_crit )
- spawn(0)
- emote("snore")
+ emote("snore")
else
clear_alert("asleep")
diff --git a/code/modules/mob/living/carbon/monkey/life.dm b/code/modules/mob/living/carbon/monkey/life.dm
index db7a3cf58d7..43ab7159124 100644
--- a/code/modules/mob/living/carbon/monkey/life.dm
+++ b/code/modules/mob/living/carbon/monkey/life.dm
@@ -139,9 +139,7 @@
/mob/living/carbon/monkey/handle_random_events()
if (prob(1) && prob(2))
- spawn(0)
- emote("scratch")
- return
+ emote("scratch")
/mob/living/carbon/monkey/has_smoke_protection()
if(wear_mask)
diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm
index 85216f02e9a..b1e60e3e517 100644
--- a/code/modules/mob/living/carbon/monkey/monkey.dm
+++ b/code/modules/mob/living/carbon/monkey/monkey.dm
@@ -96,10 +96,8 @@
damage = rand(10, 15)
if ( (paralysis < 5) && (health > 0) )
Paralyse(rand(10, 15))
- spawn( 0 )
- visible_message("[M] has knocked out [name]!", \
+ visible_message("[M] has knocked out [name]!", \
"[M] has knocked out [name]!")
- return
adjustBruteLoss(damage)
add_logs(M, src, "attacked")
updatehealth()
@@ -107,7 +105,6 @@
playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
visible_message("[M] has attempted to punch [name]!", \
"[M] has attempted to punch [name]!")
-
if("disarm")
if (!( paralysis ))
M.do_attack_animation(src)
@@ -122,7 +119,6 @@
playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
visible_message("[M] has disarmed [src]!", \
"[M] has disarmed [src]!")
- return
/mob/living/carbon/monkey/attack_alien(mob/living/carbon/alien/humanoid/M)
if(..()) //if harm or disarm intent.
diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm
index af5c3b5e4bb..86e7256edce 100644
--- a/code/modules/mob/living/life.dm
+++ b/code/modules/mob/living/life.dm
@@ -167,7 +167,7 @@
if(recursive)
for(var/obj/item/T in I)
- give_action_button(I, recursive - 1)
+ give_action_button(T, recursive - 1)
//this handles hud updates. Calls update_vision() and handle_hud_icons()
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index c46d0f1cfde..6af067cc65c 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -23,6 +23,8 @@ Sorry Giacom. Please don't be mad :(
if(unique_name)
name = "[name] ([rand(1, 1000)])"
real_name = name
+
+ faction |= "\ref[src]"
/mob/living/Destroy()
@@ -160,10 +162,10 @@ Sorry Giacom. Please don't be mad :(
set name = "Pull"
set category = "Object"
- if(pulling == AM)
+ if(AM.Adjacent(src))
+ start_pulling(AM)
+ else
stop_pulling()
- else if(AM.Adjacent(src))
- src.start_pulling(AM)
//same as above
/mob/living/pointed(atom/A as mob|obj|turf in view())
@@ -235,7 +237,7 @@ Sorry Giacom. Please don't be mad :(
/mob/living/proc/adjustBruteLoss(amount)
if(status_flags & GODMODE) return 0
- bruteloss = min(max(bruteloss + amount, 0),(maxHealth*2))
+ bruteloss = Clamp(bruteloss + amount, 0, maxHealth*2)
handle_regular_status_updates() //we update our health right away.
/mob/living/proc/getOxyLoss()
@@ -243,7 +245,7 @@ Sorry Giacom. Please don't be mad :(
/mob/living/proc/adjustOxyLoss(amount)
if(status_flags & GODMODE) return 0
- oxyloss = min(max(oxyloss + amount, 0),(maxHealth*2))
+ oxyloss = Clamp(oxyloss + amount, 0, maxHealth*2)
handle_regular_status_updates()
/mob/living/proc/setOxyLoss(amount)
@@ -256,7 +258,7 @@ Sorry Giacom. Please don't be mad :(
/mob/living/proc/adjustToxLoss(amount)
if(status_flags & GODMODE) return 0
- toxloss = min(max(toxloss + amount, 0),(maxHealth*2))
+ toxloss = Clamp(toxloss + amount, 0, maxHealth*2)
handle_regular_status_updates()
/mob/living/proc/setToxLoss(amount)
@@ -269,7 +271,7 @@ Sorry Giacom. Please don't be mad :(
/mob/living/proc/adjustFireLoss(amount)
if(status_flags & GODMODE) return 0
- fireloss = min(max(fireloss + amount, 0),(maxHealth*2))
+ fireloss = Clamp(fireloss + amount, 0, maxHealth*2)
handle_regular_status_updates() //we update our health right away.
/mob/living/proc/getCloneLoss()
@@ -277,7 +279,7 @@ Sorry Giacom. Please don't be mad :(
/mob/living/proc/adjustCloneLoss(amount)
if(status_flags & GODMODE) return 0
- cloneloss = min(max(cloneloss + amount, 0),(maxHealth*2))
+ cloneloss = Clamp(cloneloss + amount, 0, maxHealth*2)
handle_regular_status_updates()
/mob/living/proc/setCloneLoss(amount)
@@ -290,7 +292,7 @@ Sorry Giacom. Please don't be mad :(
/mob/living/proc/adjustBrainLoss(amount)
if(status_flags & GODMODE) return 0
- brainloss = min(max(brainloss + amount, 0),(maxHealth*2))
+ brainloss = Clamp(brainloss + amount, 0, maxHealth*2)
handle_regular_status_updates()
/mob/living/proc/setBrainLoss(amount)
@@ -303,7 +305,7 @@ Sorry Giacom. Please don't be mad :(
/mob/living/proc/adjustStaminaLoss(amount)
if(status_flags & GODMODE) return 0
- staminaloss = min(max(staminaloss + amount, 0),(maxHealth*2))
+ staminaloss = Clamp(staminaloss + amount, 0, maxHealth*2)
/mob/living/proc/setStaminaLoss(amount)
if(status_flags & GODMODE) return 0
@@ -438,6 +440,7 @@ Sorry Giacom. Please don't be mad :(
eye_blurry = 0
ear_deaf = 0
ear_damage = 0
+ hallucination = 0
heal_overall_damage(1000, 1000)
ExtinguishMob()
fire_stacks = 0
diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm
index 1af50b500f1..a41f907d439 100644
--- a/code/modules/mob/living/living_defense.dm
+++ b/code/modules/mob/living/living_defense.dm
@@ -142,7 +142,7 @@
ExtinguishMob()
return
var/datum/gas_mixture/G = loc.return_air() // Check if we're standing in an oxygenless environment
- if(G.oxygen < 1)
+ if(!G.gases["o2"] || G.gases["o2"][MOLES] < 1)
ExtinguishMob() //If there's no oxygen in the tile we're on, put out the fire
return
var/turf/location = get_turf(src)
diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm
index 27bd2ccb751..4d70e5f0a6a 100644
--- a/code/modules/mob/living/living_defines.dm
+++ b/code/modules/mob/living/living_defines.dm
@@ -50,6 +50,8 @@
var/list/say_log = list() //a log of what we've said, plain text, no spans or junk, essentially just each individual "message"
+ var/bubble_icon = "default" //what icon the mob uses for speechbubbles
+
var/last_bumped = 0
var/unique_name = 0 //if a mob's name should be appended with an id when created e.g. Mob (666)
diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm
index a95d8be0c5d..c273cf9371f 100644
--- a/code/modules/mob/living/say.dm
+++ b/code/modules/mob/living/say.dm
@@ -142,7 +142,7 @@ var/list/crit_allowed_modes = list(MODE_WHISPER,MODE_CHANGELING,MODE_ALIEN)
show_message(message, 2, deaf_message, deaf_type)
return message
-/mob/living/send_speech(message, message_range = 7, obj/source = src, bubble_type, list/spans)
+/mob/living/send_speech(message, message_range = 7, obj/source = src, bubble_type = bubble_icon, list/spans)
var/list/listening = get_hearers_in_view(message_range, source)
for(var/mob/M in player_list)
if(M.stat == DEAD && M.client && ((M.client.prefs.chat_toggles & CHAT_GHOSTEARS) || (get_dist(M, src) <= 7)) && client) // client is so that ghosts don't have to listen to mice
@@ -158,7 +158,7 @@ var/list/crit_allowed_modes = list(MODE_WHISPER,MODE_CHANGELING,MODE_ALIEN)
if(M.client)
speech_bubble_recipients.Add(M.client)
spawn(0)
- flick_overlay(image('icons/mob/talk.dmi', src, "h[bubble_type][say_test(message)]",MOB_LAYER+1), speech_bubble_recipients, 30)
+ flick_overlay(image('icons/mob/talk.dmi', src, "[bubble_type][say_test(message)]",MOB_LAYER+1), speech_bubble_recipients, 30)
/mob/proc/binarycheck()
return 0
@@ -208,7 +208,7 @@ var/list/crit_allowed_modes = list(MODE_WHISPER,MODE_CHANGELING,MODE_ALIEN)
log_say("[mind.changeling.changelingID]/[src.key] : [message]")
for(var/mob/M in mob_list)
if(M in dead_mob_list)
- M << msg
+ M << "(F) [msg]"
else
switch(M.lingcheck())
if(2)
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index 9a4875bfe9a..3be94e46b2f 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -764,7 +764,7 @@ var/list/ai_list = list()
var/list/obj/machinery/camera/visible = list()
for (var/datum/camerachunk/CC in eyeobj.visibleCameraChunks)
for (var/obj/machinery/camera/C in CC.cameras)
- if (!C.can_use() || C.light_disabled || get_dist(C, eyeobj) > 7)
+ if (!C.can_use() || get_dist(C, eyeobj) > 7)
continue
visible |= C
@@ -772,10 +772,10 @@ var/list/ai_list = list()
remove = lit_cameras - visible
for (var/obj/machinery/camera/C in remove)
- C.SetLuminosity(0)
- lit_cameras -= C
+ lit_cameras -= C //Removed from list before turning off the light so that it doesn't check the AI looking away.
+ C.Togglelight(0)
for (var/obj/machinery/camera/C in add)
- C.SetLuminosity(AI_CAMERA_LUMINOSITY)
+ C.Togglelight(1)
lit_cameras |= C
/mob/living/silicon/ai/proc/control_integrated_radio()
diff --git a/code/modules/mob/living/silicon/ai/death.dm b/code/modules/mob/living/silicon/ai/death.dm
index af6786025bc..df7fe9f149c 100644
--- a/code/modules/mob/living/silicon/ai/death.dm
+++ b/code/modules/mob/living/silicon/ai/death.dm
@@ -31,6 +31,8 @@
SSshuttle.emergency.mode = SHUTTLE_DOCKED
SSshuttle.emergency.timer = world.time
priority_announce("Hostile enviroment resolved. You have 3 minutes to board the Emergency Shuttle.", null, 'sound/AI/shuttledock.ogg', "Priority")
+ for(var/obj/item/weapon/pinpointer/point in pinpointer_list)
+ point.the_disk = null //Point back to the disk.
if(doomsday_device)
doomsday_device.timing = 0
@@ -41,7 +43,6 @@
for(var/obj/machinery/ai_status_display/O in world) //change status
if(src.key)
- spawn( 0 )
O.mode = 2
if (istype(loc, /obj/item/device/aicard))
loc.icon_state = "aicard-404"
diff --git a/code/modules/mob/living/silicon/ai/laws.dm b/code/modules/mob/living/silicon/ai/laws.dm
index 50c188ca629..9f11d34359b 100644
--- a/code/modules/mob/living/silicon/ai/laws.dm
+++ b/code/modules/mob/living/silicon/ai/laws.dm
@@ -17,3 +17,10 @@
src.laws_sanity_check()
src.laws.show_laws(who)
+ if(!everyone)
+ for(var/mob/living/silicon/robot/R in connected_robots)
+ if(R.lawupdate)
+ R.lawsync()
+ R.show_laws()
+ R.law_change_counter++
+
diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm
index 93e1147d746..baeed877e6f 100644
--- a/code/modules/mob/living/silicon/ai/life.dm
+++ b/code/modules/mob/living/silicon/ai/life.dm
@@ -161,7 +161,7 @@
sleep(2)
//bring up APC dialog
apc_override = 1
- theAPC.attack_ai(src)
+ theAPC.ui_interact(src, state = conscious_state)
apc_override = 0
src:aiRestorePowerRoutine = 3
src << "Here are your current laws:"
diff --git a/code/modules/mob/living/silicon/ai/say.dm b/code/modules/mob/living/silicon/ai/say.dm
index 014dd45b84c..b43ef3552f4 100644
--- a/code/modules/mob/living/silicon/ai/say.dm
+++ b/code/modules/mob/living/silicon/ai/say.dm
@@ -49,7 +49,7 @@
var/obj/machinery/hologram/holopad/T = current
if(istype(T) && T.masters[src])//If there is a hologram and its master is the user.
- send_speech(message, 7, T, "R", get_spans())
+ send_speech(message, 7, T, "robot", get_spans())
src << "Holopad transmitted, [real_name] \"[message]\""//The AI can "hear" its own message.
else
src << "No holopad connected."
diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm
index c1ea89972d6..3c11b2851a8 100644
--- a/code/modules/mob/living/silicon/pai/pai.dm
+++ b/code/modules/mob/living/silicon/pai/pai.dm
@@ -190,6 +190,10 @@
CRASH("pAI without card")
loc = card
+/mob/living/silicon/pai/canUseTopic(atom/movable/M)
+ return 1
+
+
//Addition by Mord_Sith to define AI's network change ability
/*
/mob/living/silicon/pai/proc/pai_network_change()
diff --git a/code/modules/mob/living/silicon/pai/software.dm b/code/modules/mob/living/silicon/pai/software.dm
index 4aea4929e76..c10a41e6a78 100644
--- a/code/modules/mob/living/silicon/pai/software.dm
+++ b/code/modules/mob/living/silicon/pai/software.dm
@@ -260,8 +260,7 @@
if(href_list["cable"])
var/turf/T = get_turf(src.loc)
src.cable = new /obj/item/weapon/pai_cable(T)
- for (var/mob/M in viewers(T))
- M.show_message("A port on [src] opens to reveal [src.cable], which promptly falls to the floor.", 3, "You hear the soft click of something light and hard falling to the ground.", 2)
+ T.visible_message("A port on [src] opens to reveal [src.cable], which promptly falls to the floor.", "You hear the soft click of something light and hard falling to the ground.")
//src.updateUsrDialog() We only need to account for the single mob this is intended for, and he will *always* be able to call this window
src.paiInterface() // So we'll just call the update directly rather than doing some default checks
return
@@ -527,6 +526,7 @@
dat += "Unable to obtain a reading.
"
else
var/datum/gas_mixture/environment = T.return_air()
+ var/list/env_gases = environment.gases
var/pressure = environment.return_pressure()
var/total_moles = environment.total_moles()
@@ -534,17 +534,10 @@
dat += "Air Pressure: [round(pressure,0.1)] kPa
"
if (total_moles)
- var/o2_level = environment.oxygen/total_moles
- var/n2_level = environment.nitrogen/total_moles
- var/co2_level = environment.carbon_dioxide/total_moles
- var/plasma_level = environment.toxins/total_moles
- var/unknown_level = 1-(o2_level+n2_level+co2_level+plasma_level)
- dat += "Nitrogen: [round(n2_level*100)]%
"
- dat += "Oxygen: [round(o2_level*100)]%
"
- dat += "Carbon Dioxide: [round(co2_level*100)]%
"
- dat += "Plasma: [round(plasma_level*100)]%
"
- if(unknown_level > 0.01)
- dat += "OTHER: [round(unknown_level)]%
"
+ for(var/id in env_gases)
+ var/gas_level = env_gases[id][MOLES]/total_moles
+ if(id in hardcoded_gases || gas_level > 0.01)
+ dat += "[env_gases[id][GAS_NAME]]: [round(gas_level*100)]%
"
dat += "Temperature: [round(environment.temperature-T0C)]°C
"
dat += "Refresh Reading
"
dat += "
"
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 51ffa99333c..bfcebcb0ce5 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -1,10 +1,11 @@
/mob/living/silicon/robot
name = "Cyborg"
real_name = "Cyborg"
- icon = 'icons/mob/robots.dmi'//
+ icon = 'icons/mob/robots.dmi'
icon_state = "robot"
maxHealth = 100
health = 100
+ bubble_icon = "robot"
var/sight_mode = 0
var/custom_name = ""
designation = "Default" //used for displaying the prefix & getting the current module of cyborg
@@ -1109,6 +1110,7 @@
scrambledcodes = 1
modtype = "Synd"
faction = list("syndicate")
+ bubble_icon = "syndibot"
designation = "Syndicate Assault"
req_access = list(access_syndicate)
var/playstyle_string = "You are a Syndicate assault cyborg!
\
diff --git a/code/modules/mob/living/silicon/say.dm b/code/modules/mob/living/silicon/say.dm
index 90ba92dd0f6..2d8e31e3c97 100644
--- a/code/modules/mob/living/silicon/say.dm
+++ b/code/modules/mob/living/silicon/say.dm
@@ -1,5 +1,3 @@
-/mob/living/silicon/say(message)
- return ..(message, "R")
/mob/living/silicon/get_spans()
return ..() | SPAN_ROBOT
@@ -13,12 +11,14 @@
var/message_a = say_quote(message, get_spans())
var/rendered = "Robotic Talk, [name] [message_a]"
for(var/mob/M in player_list)
- if(M.binarycheck() || (M in dead_mob_list))
+ if(M.binarycheck())
if(istype(M, /mob/living/silicon/ai))
var/renderedAI = "Robotic Talk, [name] ([desig]) [message_a]"
M << renderedAI
else
M << rendered
+ if(M in dead_mob_list)
+ M << "(F) [rendered]"
/mob/living/silicon/binarycheck()
return 1
diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm
index b4604dbc0b9..fb71eca98c0 100644
--- a/code/modules/mob/living/silicon/silicon.dm
+++ b/code/modules/mob/living/silicon/silicon.dm
@@ -7,6 +7,7 @@
verb_ask = "queries"
verb_exclaim = "declares"
verb_yell = "alarms"
+ bubble_icon = "machine"
var/syndicate = 0
var/datum/ai_laws/laws = null//Now... THEY ALL CAN ALL HAVE LAWS
var/list/alarms_to_show = list()
diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm
index d03ed22c237..8e18387a10a 100644
--- a/code/modules/mob/living/simple_animal/bot/bot.dm
+++ b/code/modules/mob/living/simple_animal/bot/bot.dm
@@ -15,6 +15,9 @@
sentience_type = SENTIENCE_ARTIFICIAL
status_flags = NONE //no default canpush
+ speak_emote = list("states")
+ bubble_icon = "machine"
+
var/obj/machinery/bot_core/bot_core = null
var/bot_core_type = /obj/machinery/bot_core
var/list/users = list() //for dialog updates
@@ -105,7 +108,7 @@
Radio = new/obj/item/device/radio(src)
if(radio_key)
Radio.keyslot = new radio_key
- Radio.canhear_range = 1 // 0 ?
+ Radio.canhear_range = 0 // anything greater will have the bot broadcast the channel as if it were saying it out loud.
Radio.recalculateChannels()
bot_core = new bot_core_type(src)
@@ -163,12 +166,7 @@
else
user << "[src] is in pristine condition."
-/mob/living/simple_animal/bot/adjustBruteLoss(amount)
- if(amount>0 && prob(10))
- new /obj/effect/decal/cleanable/oil(loc)
- return ..(amount)
-
-/mob/living/simple_animal/bot/adjustFireLoss(amount)
+/mob/living/simple_animal/bot/adjustHealth(amount)
if(amount>0 && prob(10))
new /obj/effect/decal/cleanable/oil(loc)
return ..(amount)
@@ -293,9 +291,6 @@
say(message)
return
-/mob/living/simple_animal/bot/say(message)
- return ..(message, "R")
-
/mob/living/simple_animal/bot/get_spans()
return ..() | SPAN_ROBOT
@@ -332,7 +327,7 @@ Pass the desired type path itself, declaring a temporary var beforehand is not r
*/
/mob/living/simple_animal/bot/proc/scan(scan_type, old_target, scan_range = DEFAULT_SCAN_RANGE)
var/final_result
- for (var/scan in view (scan_range, src) ) //Search for something in range!
+ for (var/scan in shuffle(view(scan_range, src))) //Search for something in range!
if(!istype(scan, scan_type)) //Check that the thing we found is the type we want!
continue //If not, keep searching!
if( (scan in ignore_list) || (scan == old_target) ) //Filter for blacklisted elements, usually unreachable or previously processed oness
@@ -710,12 +705,12 @@ Pass a positive integer as an argument to override a bot's default speed.
if(usr in users)
users.Remove(usr)
return 1
-
+
if(topic_denied(usr))
usr << "[src]'s interface is not responding!"
return 1
add_fingerprint(usr)
-
+
if((href_list["power"]) && (bot_core.allowed(usr) || !locked))
if (on)
turn_off()
@@ -786,3 +781,7 @@ Pass a positive integer as an argument to override a bot's default speed.
/mob/living/simple_animal/bot/Logout()
. = ..()
bot_reset()
+
+/mob/living/simple_animal/bot/revive()
+ ..()
+ update_icon()
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/bot/medbot.dm b/code/modules/mob/living/simple_animal/bot/medbot.dm
index 9e5386a65d9..bf77108174d 100644
--- a/code/modules/mob/living/simple_animal/bot/medbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/medbot.dm
@@ -153,7 +153,7 @@
dat += "Critical Patient Alerts: [declare_crit ? "Yes" : "No"]
"
dat += "Patrol Station: [auto_patrol ? "Yes" : "No"]
"
dat += "Stationary Mode: [stationary_mode ? "Yes" : "No"]
"
-
+
return dat
/mob/living/simple_animal/bot/medbot/Topic(href, href_list)
@@ -229,8 +229,7 @@
declare_crit = 0
if(user)
user << "You short out [src]'s reagent synthesis circuits."
- spawn(0)
- audible_message("[src] buzzes oddly!")
+ audible_message("[src] buzzes oddly!")
flick("medibot_spark", src)
if(user)
oldpatient = user
diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm
index fc0d4bab71c..46d8832ddd8 100644
--- a/code/modules/mob/living/simple_animal/bot/mulebot.dm
+++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm
@@ -43,7 +43,6 @@ var/global/mulebot_count = 0
var/reached_target = 1 //true if already reached the target
- var/refresh = 1 // true to refresh dialogue
var/auto_return = 1 // true if auto return to home beacon after unload
var/auto_pickup = 1 // true if auto-pickup at beacon
var/report_delivery = 1 // true if bot will announce an arrival to a location.
@@ -214,8 +213,6 @@ mob/living/simple_animal/bot/mulebot/bot_reset()
dat += "Toggle Auto Return Home ([auto_return ? "On":"Off"])
"
dat += "Toggle Auto Pickup Crate ([auto_pickup ? "On":"Off"])
"
dat += "Toggle Delivery Reporting ([report_delivery ? "On" : "Off"])
"
- dat += "Toggle Interface Refreshing ([refresh ? "On" : "Off"])
"
-
if(load)
dat += "Unload Now
"
dat += "The maintenance hatch is closed.
"
@@ -297,11 +294,6 @@ mob/living/simple_animal/bot/mulebot/bot_reset()
return
switch(command)
-
- if("autorefresh")
- refresh = !refresh
- update_controls()
-
if("stop")
if(mode >= BOT_DELIVER)
bot_reset()
@@ -318,26 +310,21 @@ mob/living/simple_animal/bot/mulebot/bot_reset()
update_controls()
if("destination")
- refresh=0
var/new_dest = input(user, "Select M.U.L.E. Destination", "Mulebot [suffix ? "([suffix])" : ""]", destination) as null|anything in deliverybeacontags
- refresh=1
if(new_dest)
set_destination(new_dest)
+ update_controls()
if("setid")
- refresh=0
var/new_id = stripped_input(user, "Enter new bot ID", "Mulebot [suffix ? "([suffix])" : ""]", suffix, MAX_NAME_LEN)
- refresh=1
if(new_id)
suffix = new_id
name = "\improper Mulebot ([suffix])"
update_controls()
if("sethome")
- refresh=0
var/new_home = stripped_input(user, "Enter new home tag", "Mulebot [suffix ? "([suffix])" : ""]", home_destination)
- refresh=1
if(new_home)
home_destination = new_home
update_controls()
@@ -512,8 +499,6 @@ mob/living/simple_animal/bot/mulebot/bot_reset()
sleep(2)
process_bot()
- if(refresh) update_controls()
-
/mob/living/simple_animal/bot/mulebot/proc/process_bot()
if(!on)
return
diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm
index a0d0ef6b331..eec5a954e23 100644
--- a/code/modules/mob/living/simple_animal/bot/secbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/secbot.dm
@@ -184,6 +184,16 @@ Auto Patrol: []"},
else
..()
+
+/mob/living/simple_animal/bot/secbot/hitby(atom/movable/AM, skipcatch = 0, hitpush = 1, blocked = 0)
+ if(istype(AM, /obj/item))
+ var/obj/item/I = AM
+ if(I.throwforce < src.health && I.thrownby && (istype(I.thrownby, /mob/living/carbon/human)))
+ var/mob/living/carbon/human/H = I.thrownby
+ retaliate(H)
+ ..()
+
+
/mob/living/simple_animal/bot/secbot/proc/cuff(mob/living/carbon/C)
mode = BOT_ARREST
playsound(loc, 'sound/weapons/cablecuff.ogg', 30, 1, -2)
diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm
index ee584f7cbbe..c7ed281b154 100644
--- a/code/modules/mob/living/simple_animal/constructs.dm
+++ b/code/modules/mob/living/simple_animal/constructs.dm
@@ -57,7 +57,7 @@
/mob/living/simple_animal/hostile/construct/attack_animal(mob/living/simple_animal/M)
if(istype(M, /mob/living/simple_animal/hostile/construct/builder))
if(health < maxHealth)
- adjustBruteLoss(-5)
+ adjustHealth(-5)
if(src != M)
Beam(M,icon_state="sendbeam",icon='icons/effects/effects.dmi',time=4)
M.visible_message("[M] repairs some of \the [src]'s dents.", \
@@ -231,6 +231,18 @@
+
+
+
+/////////////////////////////Non-cult Artificer/////////////////////////
+/mob/living/simple_animal/hostile/construct/builder/noncult
+ construct_spells = list(/obj/effect/proc_holder/spell/aoe_turf/conjure/wall,
+ /obj/effect/proc_holder/spell/aoe_turf/conjure/floor,
+ /obj/effect/proc_holder/spell/aoe_turf/conjure/soulstone/noncult,
+ /obj/effect/proc_holder/spell/aoe_turf/conjure/construct/lesser,
+ /obj/effect/proc_holder/spell/targeted/projectile/magic_missile/lesser)
+
+
/////////////////////////////Harvester/////////////////////////
/mob/living/simple_animal/hostile/construct/harvester
name = "Harvester"
diff --git a/code/modules/mob/living/simple_animal/friendly/cockroach.dm b/code/modules/mob/living/simple_animal/friendly/cockroach.dm
index 940d574b346..0deb6c4289a 100644
--- a/code/modules/mob/living/simple_animal/friendly/cockroach.dm
+++ b/code/modules/mob/living/simple_animal/friendly/cockroach.dm
@@ -52,4 +52,4 @@
desc = "One bug squashed. Four more will rise in its place."
icon = 'icons/effects/blood.dmi'
icon_state = "xfloor1"
- random_icon_states = list("xfloor1", "xfloor2", "xfloor3", "xfloor4", "xfloor5", "xfloor6", "xfloor7")
+ random_icon_states = list("xfloor1", "xfloor2", "xfloor3", "xfloor4", "xfloor5", "xfloor6", "xfloor7")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm
index a040346808d..9fcc023c4b2 100644
--- a/code/modules/mob/living/simple_animal/friendly/dog.dm
+++ b/code/modules/mob/living/simple_animal/friendly/dog.dm
@@ -119,16 +119,9 @@
switch(remove_from)
if("head")
if(inventory_head)
- name = real_name
- desc = initial(desc)
- speak = list("YAP", "Woof!", "Bark!", "AUUUUUU")
- speak_emote = list("barks", "woofs")
- emote_hear = list("barks", "woofs", "yaps","pants")
- emote_see = list("shakes its head", "shivers")
- desc = "It's a corgi."
- SetLuminosity(0)
inventory_head.loc = src.loc
inventory_head = null
+ update_corgi_fluff()
regenerate_icons()
else
usr << "There is nothing to remove from its [remove_from]."
@@ -137,6 +130,7 @@
if(inventory_back)
inventory_back.loc = src.loc
inventory_back = null
+ update_corgi_fluff()
regenerate_icons()
else
usr << "There is nothing to remove from its [remove_from]."
@@ -198,6 +192,7 @@
usr.drop_item()
item_to_add.loc = src
src.inventory_back = item_to_add
+ update_corgi_fluff()
regenerate_icons()
show_inv(usr)
@@ -239,7 +234,7 @@
/obj/item/clothing/head/wizard/fake, /obj/item/clothing/head/wizard, /obj/item/clothing/head/collectable/wizard,
/obj/item/clothing/head/cardborg, /obj/item/weapon/bedsheet, /obj/item/clothing/head/helmet/space/santahat,
/obj/item/clothing/head/soft, /obj/item/clothing/head/hardhat/reindeer, /obj/item/clothing/head/sombrero,
- /obj/item/clothing/head/hopcap, /obj/item/clothing/head/helmet/space/hardsuit/deathsquad, /obj/item/clothing/mask/gas/clown_hat)
+ /obj/item/clothing/head/hopcap, /obj/item/clothing/mask/gas/clown_hat)
valid = 1
if(valid)
@@ -271,115 +266,139 @@
return valid
/mob/living/simple_animal/pet/dog/corgi/proc/update_corgi_fluff()
- if(!inventory_head)
- return
- switch(inventory_head.type)
- if(/obj/item/clothing/head/helmet)
- name = "Sergeant [real_name]"
- desc = "The ever-loyal, the ever-vigilant."
+ var/special_hat = 0
+ if(inventory_head)
+ special_hat = 1
+ switch(inventory_head.type)
+ if(/obj/item/clothing/head/helmet)
+ name = "Sergeant [real_name]"
+ desc = "The ever-loyal, the ever-vigilant."
- if(/obj/item/clothing/head/chefhat, /obj/item/clothing/head/collectable/chef)
- name = "Sous chef [real_name]"
- desc = "Your food will be taste-tested. All of it."
+ if(/obj/item/clothing/head/chefhat, /obj/item/clothing/head/collectable/chef)
+ name = "Sous chef [real_name]"
+ desc = "Your food will be taste-tested. All of it."
- if(/obj/item/clothing/head/caphat, /obj/item/clothing/head/collectable/captain)
- name = "Captain [real_name]"
- desc = "Probably better than the last captain."
+ if(/obj/item/clothing/head/caphat, /obj/item/clothing/head/collectable/captain)
+ name = "Captain [real_name]"
+ desc = "Probably better than the last captain."
- if(/obj/item/clothing/head/kitty, /obj/item/clothing/head/collectable/kitty)
- name = "Runtime"
- emote_see = list("coughs up a furball", "stretches")
- emote_hear = list("purrs")
- speak = list("Purrr", "Meow!", "MAOOOOOW!", "HISSSSS", "MEEEEEEW")
- desc = "It's a cute little kitty-cat! ... wait ... what the hell?"
+ if(/obj/item/clothing/head/kitty, /obj/item/clothing/head/collectable/kitty)
+ name = "Runtime"
+ emote_see = list("coughs up a furball", "stretches")
+ emote_hear = list("purrs")
+ speak = list("Purrr", "Meow!", "MAOOOOOW!", "HISSSSS", "MEEEEEEW")
+ desc = "It's a cute little kitty-cat! ... wait ... what the hell?"
- if(/obj/item/clothing/head/rabbitears, /obj/item/clothing/head/collectable/rabbitears)
- name = "Hoppy"
- emote_see = list("twitches its nose", "hops around a bit")
- desc = "This is Hoppy. It's a corgi-...urmm... bunny rabbit"
+ if(/obj/item/clothing/head/rabbitears, /obj/item/clothing/head/collectable/rabbitears)
+ name = "Hoppy"
+ emote_see = list("twitches its nose", "hops around a bit")
+ desc = "This is Hoppy. It's a corgi-...urmm... bunny rabbit"
- if(/obj/item/clothing/head/beret, /obj/item/clothing/head/collectable/beret)
- name = "Yann"
- desc = "Mon dieu! C'est un chien!"
- speak = list("le woof!", "le bark!", "JAPPE!!")
- emote_see = list("cowers in fear.", "surrenders.", "plays dead.","looks as though there is a wall in front of him.")
+ if(/obj/item/clothing/head/beret, /obj/item/clothing/head/collectable/beret)
+ name = "Yann"
+ desc = "Mon dieu! C'est un chien!"
+ speak = list("le woof!", "le bark!", "JAPPE!!")
+ emote_see = list("cowers in fear.", "surrenders.", "plays dead.","looks as though there is a wall in front of him.")
- if(/obj/item/clothing/head/det_hat)
- name = "Detective [real_name]"
- desc = "[name] sees through your lies..."
- emote_see = list("investigates the area.","sniffs around for clues.","searches for scooby snacks.")
+ if(/obj/item/clothing/head/det_hat)
+ name = "Detective [real_name]"
+ desc = "[name] sees through your lies..."
+ emote_see = list("investigates the area.","sniffs around for clues.","searches for scooby snacks.")
- if(/obj/item/clothing/head/nursehat)
- name = "Nurse [real_name]"
- desc = "[name] needs 100cc of beef jerky... STAT!"
+ if(/obj/item/clothing/head/nursehat)
+ name = "Nurse [real_name]"
+ desc = "[name] needs 100cc of beef jerky... STAT!"
- if(/obj/item/clothing/head/pirate, /obj/item/clothing/head/collectable/pirate)
- name = "[pick("Ol'","Scurvy","Black","Rum","Gammy","Bloody","Gangrene","Death","Long-John")] [pick("kibble","leg","beard","tooth","poop-deck","Threepwood","Le Chuck","corsair","Silver","Crusoe")]"
- desc = "Yaarghh!! Thar' be a scurvy dog!"
- emote_see = list("hunts for treasure.","stares coldly...","gnashes his tiny corgi teeth!")
- emote_hear = list("growls ferociously!", "snarls.")
- speak = list("Arrrrgh!!","Grrrrrr!")
+ if(/obj/item/clothing/head/pirate, /obj/item/clothing/head/collectable/pirate)
+ name = "[pick("Ol'","Scurvy","Black","Rum","Gammy","Bloody","Gangrene","Death","Long-John")] [pick("kibble","leg","beard","tooth","poop-deck","Threepwood","Le Chuck","corsair","Silver","Crusoe")]"
+ desc = "Yaarghh!! Thar' be a scurvy dog!"
+ emote_see = list("hunts for treasure.","stares coldly...","gnashes his tiny corgi teeth!")
+ emote_hear = list("growls ferociously!", "snarls.")
+ speak = list("Arrrrgh!!","Grrrrrr!")
- if(/obj/item/clothing/head/ushanka)
- name = "[pick("Comrade","Commissar","Glorious Leader")] [real_name]"
- desc = "A follower of Karl Barx."
- emote_see = list("contemplates the failings of the capitalist economic model.", "ponders the pros and cons of vanguardism.")
+ if(/obj/item/clothing/head/ushanka)
+ name = "[pick("Comrade","Commissar","Glorious Leader")] [real_name]"
+ desc = "A follower of Karl Barx."
+ emote_see = list("contemplates the failings of the capitalist economic model.", "ponders the pros and cons of vanguardism.")
- if(/obj/item/clothing/head/warden, /obj/item/clothing/head/collectable/police)
- name = "Officer [real_name]"
- emote_see = list("drools.","looks for donuts.")
- desc = "Stop right there criminal scum!"
+ if(/obj/item/clothing/head/warden, /obj/item/clothing/head/collectable/police)
+ name = "Officer [real_name]"
+ emote_see = list("drools.","looks for donuts.")
+ desc = "Stop right there criminal scum!"
- if(/obj/item/clothing/head/wizard/fake, /obj/item/clothing/head/wizard, /obj/item/clothing/head/collectable/wizard)
- name = "Grandwizard [real_name]"
- speak = list("YAP", "Woof!", "Bark!", "AUUUUUU", "EI NATH!")
+ if(/obj/item/clothing/head/wizard/fake, /obj/item/clothing/head/wizard, /obj/item/clothing/head/collectable/wizard)
+ name = "Grandwizard [real_name]"
+ speak = list("YAP", "Woof!", "Bark!", "AUUUUUU", "EI NATH!")
- if(/obj/item/clothing/head/cardborg)
- name = "Borgi"
- speak = list("Ping!","Beep!","Woof!")
- emote_see = list("goes rogue.", "sniffs out non-humans.")
- desc = "Result of robotics budget cuts."
+ if(/obj/item/clothing/head/cardborg)
+ name = "Borgi"
+ speak = list("Ping!","Beep!","Woof!")
+ emote_see = list("goes rogue.", "sniffs out non-humans.")
+ desc = "Result of robotics budget cuts."
- if(/obj/item/weapon/bedsheet)
- name = "\improper Ghost"
- speak = list("WoooOOOooo~","AUUUUUUUUUUUUUUUUUU")
- emote_see = list("stumbles around.", "shivers.")
- emote_hear = list("howls!","groans.")
- desc = "Spooky!"
+ if(/obj/item/weapon/bedsheet)
+ name = "\improper Ghost"
+ speak = list("WoooOOOooo~","AUUUUUUUUUUUUUUUUUU")
+ emote_see = list("stumbles around.", "shivers.")
+ emote_hear = list("howls!","groans.")
+ desc = "Spooky!"
- if(/obj/item/clothing/head/helmet/space/santahat)
- name = "Santa's Corgi Helper"
- emote_hear = list("barks Christmas songs.", "yaps merrily!")
- emote_see = list("looks for presents.", "checks his list.")
- desc = "He's very fond of milk and cookies."
+ if(/obj/item/clothing/head/helmet/space/santahat)
+ name = "Santa's Corgi Helper"
+ emote_hear = list("barks Christmas songs.", "yaps merrily!")
+ emote_see = list("looks for presents.", "checks his list.")
+ desc = "He's very fond of milk and cookies."
- if(/obj/item/clothing/head/soft)
- name = "Corgi Tech [real_name]"
- desc = "The reason your yellow gloves have chew-marks."
+ if(/obj/item/clothing/head/soft)
+ name = "Corgi Tech [real_name]"
+ desc = "The reason your yellow gloves have chew-marks."
- if(/obj/item/clothing/head/hardhat/reindeer)
- name = "[real_name] the red-nosed Corgi"
- emote_hear = list("lights the way!", "illuminates.", "yaps!")
- desc = "He has a very shiny nose."
+ if(/obj/item/clothing/head/hardhat/reindeer)
+ name = "[real_name] the red-nosed Corgi"
+ emote_hear = list("lights the way!", "illuminates.", "yaps!")
+ desc = "He has a very shiny nose."
- if(/obj/item/clothing/head/sombrero)
- name = "Segnor [real_name]"
- desc = "You must respect elder [real_name]"
+ if(/obj/item/clothing/head/sombrero)
+ name = "Segnor [real_name]"
+ desc = "You must respect elder [real_name]"
- if(/obj/item/clothing/head/hopcap)
- name = "Lieutenant [real_name]"
- desc = "Can actually be trusted to not run off on his own."
+ if(/obj/item/clothing/head/hopcap)
+ name = "Lieutenant [real_name]"
+ desc = "Can actually be trusted to not run off on his own."
- if(/obj/item/clothing/head/helmet/space/hardsuit/deathsquad)
- name = "Trooper [real_name]"
- desc = "That's not red paint. That's real corgi blood."
+ if(/obj/item/clothing/head/helmet/space/hardsuit/deathsquad)
+ name = "Trooper [real_name]"
+ desc = "That's not red paint. That's real corgi blood."
- if(/obj/item/clothing/mask/gas/clown_hat)
- name = "[real_name] the Clown"
- desc = "Honkman's best friend."
- speak = list("HONK!", "Honk!")
- emote_see = list("plays tricks.", "slips.")
+ if(/obj/item/clothing/mask/gas/clown_hat)
+ name = "[real_name] the Clown"
+ desc = "Honkman's best friend."
+ speak = list("HONK!", "Honk!")
+ emote_see = list("plays tricks.", "slips.")
+ else
+ special_hat = 0
+
+ var/special_back = 0
+ if(inventory_back)
+ special_back = 1
+ switch(inventory_back.type)
+ if(/obj/item/clothing/suit/space/hardsuit/deathsquad)
+ name = "Trooper [real_name]"
+ desc = "That's not red paint. That's real corgi blood."
+ else
+ special_back = 0
+
+ if(!special_hat && !special_back)
+ name = real_name
+ desc = initial(desc)
+ speak = list("YAP", "Woof!", "Bark!", "AUUUUUU")
+ speak_emote = list("barks", "woofs")
+ emote_hear = list("barks", "woofs", "yaps","pants")
+ emote_see = list("shakes its head", "shivers")
+ desc = "It's a corgi."
+ SetLuminosity(0)
+ return
//IAN! SQUEEEEEEEEE~
/mob/living/simple_animal/pet/dog/corgi/Ian
diff --git a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm
index 54a6b86c314..ebc51360660 100644
--- a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm
+++ b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm
@@ -35,6 +35,8 @@
status_flags = (CANPUSH | CANSTUN | CANWEAKEN)
gender = NEUTER
voice_name = "synthesized chirp"
+ speak_emote = list("chirps")
+ bubble_icon = "machine"
languages = DRONE
mob_size = MOB_SIZE_SMALL
has_unlimited_silicon_privilege = 1
diff --git a/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm b/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm
index e17a9a0dcb0..597b528ea9f 100644
--- a/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm
+++ b/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm
@@ -17,6 +17,8 @@
health = 30
maxHealth = 120 //If you murder other drones and cannibalize them you can get much stronger
faction = list("syndicate")
+ speak_emote = list("hisses")
+ bubble_icon = "syndibot"
heavy_emp_damage = 10
laws = \
"1. Interfere.\n"+\
diff --git a/code/modules/mob/living/simple_animal/friendly/drone/say.dm b/code/modules/mob/living/simple_animal/friendly/drone/say.dm
index def3ad69d53..5bd5dbb8eb7 100644
--- a/code/modules/mob/living/simple_animal/friendly/drone/say.dm
+++ b/code/modules/mob/living/simple_animal/friendly/drone/say.dm
@@ -5,11 +5,6 @@
//Drone speach
//Drone hearing
-
-/mob/living/simple_animal/drone/say(message)
- return ..(message, "R")
-
-
/mob/living/simple_animal/drone/lang_treat(atom/movable/speaker, message_langs, raw_message) //This is so drones can understand humans without being able to speak human
. = ..()
var/hear_override_langs = HUMAN
@@ -26,21 +21,16 @@
/mob/living/simple_animal/drone/proc/alert_drones(msg, dead_can_hear = 0)
- for(var/mob/M in player_list)
- var/send_msg = 0
-
+ for(var/W in mob_list)
+ var/mob/M = W
if(istype(M, /mob/living/simple_animal/drone) && M.stat != DEAD)
for(var/F in src.faction)
if(F in M.faction)
- send_msg = 1
- break
- else if(dead_can_hear && (M in dead_mob_list))
- send_msg = 1
-
- if(send_msg)
- M << msg
+ M << msg
+ if(dead_can_hear && (M in dead_mob_list))
+ M << "(F) [msg]"
/mob/living/simple_animal/drone/proc/drone_chat(msg)
- var/rendered = "DRONE CHAT: [name]: [msg]"
+ var/rendered = "DRONE CHAT: [name]: [msg]"
alert_drones(rendered, 1)
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm
index 9fabb8f858a..be62cfce185 100644
--- a/code/modules/mob/living/simple_animal/guardian/guardian.dm
+++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm
@@ -1,15 +1,16 @@
/mob/living/simple_animal/hostile/guardian
name = "Guardian Spirit"
real_name = "Guardian Spirit"
- desc = "A mysterious being that stands by it's charge, ever vigilant."
+ desc = "A mysterious being that stands by its charge, ever vigilant."
speak_emote = list("hisses")
+ bubble_icon = "guardian"
response_help = "passes through"
response_disarm = "flails at"
response_harm = "punches"
icon = 'icons/mob/guardian.dmi'
- icon_state = "guardianorange"
- icon_living = "guardianorange"
- icon_dead = "stand"
+ icon_state = "magicOrange"
+ icon_living = "magicOrange"
+ icon_dead = "magicOrange"
speed = 0
a_intent = "harm"
stop_automated_movement = 1
@@ -21,13 +22,13 @@
attacktext = "punches"
maxHealth = INFINITY //The spirit itself is invincible
health = INFINITY
+ damage_coeff = list(BRUTE = 0.5, BURN = 0.5, TOX = 0.5, CLONE = 0.5, STAMINA = 0, OXY = 0.5) //how much damage from each damage type we transfer to the owner
environment_smash = 0
melee_damage_lower = 15
melee_damage_upper = 15
butcher_results = list(/obj/item/weapon/ectoplasm = 1)
AIStatus = AI_OFF
var/cooldown = 0
- var/damage_transfer = 1 //how much damage from each attack we transfer to the owner
var/mob/living/summoner
var/range = 10 //how far from the user the spirit can be
var/playstyle_string = "You are a standard Guardian. You shouldn't exist!"
@@ -53,11 +54,12 @@
ghostize()
qdel(src)
if(summoner)
- if (get_dist(get_turf(summoner),get_turf(src)) <= range)
+ if(get_dist(get_turf(summoner),get_turf(src)) <= range)
return
else
src << "You moved out of range, and were pulled back! You can only move [range] meters from [summoner.real_name]"
visible_message("The [src] jumps back to its user.")
+ PoolOrNew(/obj/effect/overlay/temp/guardian/phase/out, get_turf(src))
loc = get_turf(summoner)
/mob/living/simple_animal/hostile/guardian/Move() //Returns to summoner if they move out of range
@@ -68,37 +70,44 @@
else
src << "You moved out of range, and were pulled back! You can only move [range] meters from [summoner.real_name]"
visible_message("The [src] jumps back to its user.")
+ PoolOrNew(/obj/effect/overlay/temp/guardian/phase/out, get_turf(src))
loc = get_turf(summoner)
-/mob/living/mob/living/simple_animal/hostile/guardian/canSuicide()
+/mob/living/simple_animal/hostile/guardian/canSuicide()
return 0
+/mob/living/simple_animal/hostile/guardian/AttackingTarget()
+ if(src.loc == summoner)
+ src << "You must be manifested to attack!"
+ return 0
+ else
+ ..()
+ return 1
+
/mob/living/simple_animal/hostile/guardian/death()
..()
summoner << "Your [name] died somehow!"
summoner.death()
-/mob/living/simple_animal/hostile/guardian/adjustBruteLoss(amount) //The spirit is invincible, but passes on damage to the summoner
- var/damage = amount * damage_transfer
- if (summoner)
+/mob/living/simple_animal/hostile/guardian/adjustHealth(amount) //The spirit is invincible, but passes on damage to the summoner
+ if(summoner)
if(loc == summoner)
return
- summoner.adjustBruteLoss(damage)
- if(damage)
+ summoner.adjustBruteLoss(amount)
+ if(amount)
summoner << "Your [name] is under attack! You take damage!"
summoner.visible_message("Blood sprays from [summoner] as [src] takes damage!")
if(summoner.stat == UNCONSCIOUS)
summoner << "Your body can't take the strain of sustaining [src] in this condition, it begins to fall apart!"
- summoner.adjustCloneLoss(damage/2)
+ summoner.adjustCloneLoss(amount*0.5) //dying hosts take 50% bonus damage as cloneloss
/mob/living/simple_animal/hostile/guardian/ex_act(severity, target)
- switch (severity)
- if (1)
+ switch(severity)
+ if(1)
gib()
return
- if (2)
+ if(2)
adjustBruteLoss(60)
-
if(3)
adjustBruteLoss(30)
@@ -121,6 +130,7 @@
/mob/living/simple_animal/hostile/guardian/proc/Recall()
if(cooldown > world.time)
return
+ PoolOrNew(/obj/effect/overlay/temp/guardian/phase/out, get_turf(src))
loc = summoner
buckled = null
cooldown = world.time + 30
@@ -129,14 +139,17 @@
var/input = stripped_input(src, "Please enter a message to tell your summoner.", "Guardian", "")
if(!input) return
+ var/my_message = "[src]: [input]"
for(var/mob/M in mob_list)
- if(M == summoner || (M in dead_mob_list))
- M << "[src]: [input]"
- src << "[src]: [input]"
+ if(M == summoner)
+ M << my_message
+ if(M in dead_mob_list)
+ M << "(F) [my_message]"
+ src << "[my_message]"
log_say("[src.real_name]/[src.key] : [input]")
/mob/living/simple_animal/hostile/guardian/proc/ToggleMode()
- src << "You dont have another mode!"
+ src << "You don't have another mode!"
/mob/living/proc/guardian_comm()
@@ -146,13 +159,14 @@
var/input = stripped_input(src, "Please enter a message to tell your guardian.", "Message", "")
if(!input) return
+ var/my_message = "[src]: [input]"
for(var/mob/M in mob_list)
if(istype (M, /mob/living/simple_animal/hostile/guardian))
var/mob/living/simple_animal/hostile/guardian/G = M
if(G.summoner == src)
- G << "[src]: [input]"
+ G << "[my_message]"
else if (M in dead_mob_list)
- M << "[src]: [input]"
+ M << "(F) [my_message]"
src << "[src]: [input]"
log_say("[src.real_name]/[src.key] : [text]")
@@ -188,8 +202,10 @@
/mob/living/simple_animal/hostile/guardian/proc/ToggleLight()
if(!luminosity)
+ src << "You activate your light."
SetLuminosity(3)
else
+ src << "You deactivate your light."
SetLuminosity(0)
@@ -197,14 +213,13 @@
//Fire. Low damage, low resistance, sets mobs on fire when bumping
-
/mob/living/simple_animal/hostile/guardian/fire
a_intent = "help"
melee_damage_lower = 10
melee_damage_upper = 10
attack_sound = 'sound/items/Welder.ogg'
attacktext = "sears"
- damage_transfer = 0.8
+ damage_coeff = list(BRUTE = 0.8, BURN = 0.8, TOX = 0.8, CLONE = 0.8, STAMINA = 0, OXY = 0.8)
range = 10
playstyle_string = "As a Chaos type, you have only light damage resistance, but will ignite any enemy you bump into. In addition, your melee attacks will randomly teleport enemies."
environment_smash = 1
@@ -218,12 +233,14 @@
summoner.adjust_fire_stacks(-20)
/mob/living/simple_animal/hostile/guardian/fire/AttackingTarget()
- ..()
- if(prob(45))
- if(istype(target, /atom/movable))
- var/atom/movable/M = target
- if(!M.anchored && M != summoner)
- do_teleport(M, M, 10)
+ if(..())
+ if(prob(45))
+ if(istype(target, /atom/movable))
+ var/atom/movable/M = target
+ if(!M.anchored && M != summoner)
+ PoolOrNew(/obj/effect/overlay/temp/guardian/phase/out, get_turf(M))
+ do_teleport(M, M, 10)
+ PoolOrNew(/obj/effect/overlay/temp/guardian/phase, get_turf(M))
/mob/living/simple_animal/hostile/guardian/fire/Crossed(AM as mob|obj)
..()
@@ -247,12 +264,11 @@
/mob/living/simple_animal/hostile/guardian/fire/Bump(AM as mob|obj)
..()
collision_ignite(AM)
-//Standard
+//Standard
/mob/living/simple_animal/hostile/guardian/punch
melee_damage_lower = 20
melee_damage_upper = 20
- damage_transfer = 0.5
playstyle_string = "As a standard type you have no special abilities, but have a high damage resistance and a powerful attack capable of smashing through walls."
environment_smash = 2
magic_fluff_string = "..And draw the Assistant, faceless and generic, but never to be underestimated."
@@ -280,11 +296,11 @@
playsound(loc, src.attack_sound, 50, 1, 1)
//Healer
-
/mob/living/simple_animal/hostile/guardian/healer
a_intent = "harm"
friendly = "heals"
speed = 0
+ damage_coeff = list(BRUTE = 0.7, BURN = 0.7, TOX = 0.7, CLONE = 0.7, STAMINA = 0, OXY = 0.7)
melee_damage_lower = 15
melee_damage_upper = 15
playstyle_string = "As a Support type, you may toggle your basic attacks to a healing mode. In addition, Alt-Clicking on an adjacent mob will warp them to your bluespace beacon after a short delay."
@@ -300,24 +316,21 @@
medsensor.add_hud_to(src)
/mob/living/simple_animal/hostile/guardian/healer/AttackingTarget()
- ..()
- if(toggle == TRUE)
- if(src.loc == summoner)
- src << "You must be manifested to heal!"
- return
- if(iscarbon(target))
- var/mob/living/carbon/C = target
- C.adjustBruteLoss(-5)
- C.adjustFireLoss(-5)
- C.adjustOxyLoss(-5)
- C.adjustToxLoss(-5)
+ if(..())
+ if(toggle == TRUE)
+ if(iscarbon(target))
+ var/mob/living/carbon/C = target
+ C.adjustBruteLoss(-5)
+ C.adjustFireLoss(-5)
+ C.adjustOxyLoss(-5)
+ C.adjustToxLoss(-5)
/mob/living/simple_animal/hostile/guardian/healer/ToggleMode()
if(src.loc == summoner)
if(toggle)
a_intent = "harm"
speed = 0
- damage_transfer = 0.7
+ damage_coeff = list(BRUTE = 0.7, BURN = 0.7, TOX = 0.7, CLONE = 0.7, STAMINA = 0, OXY = 0.7)
melee_damage_lower = 15
melee_damage_upper = 15
src << "You switch to combat mode."
@@ -325,7 +338,7 @@
else
a_intent = "help"
speed = 1
- damage_transfer = 1
+ damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1)
melee_damage_lower = 0
melee_damage_upper = 0
src << "You switch to healing mode."
@@ -335,7 +348,7 @@
/mob/living/simple_animal/hostile/guardian/healer/verb/Beacon()
- set name = "Place Bluespsace Beacon"
+ set name = "Place Bluespace Beacon"
set category = "Guardian"
set desc = "Mark a floor as your beacon point, allowing you to warp targets to it. Your beacon will not work in unfavorable atmospheric conditions."
if(beacon_cooldownYou must be adjacent to your target!"
return
if((A.anchored))
- src << "Your target can not be anchored!"
+ src << "Your target cannot be anchored!"
return
src << "You begin to warp [A]"
if(do_mob(src, A, 50))
@@ -376,11 +389,21 @@
if(src.beacon) //Check that the beacon still exists and is in a safe place. No instant kills.
if(beacon.air)
var/datum/gas_mixture/Z = beacon.air
- if(Z.oxygen >= 16 && !Z.toxins && Z.carbon_dioxide < 10 && !Z.trace_gases.len)
+ var/list/Z_gases = Z.gases
+ var/trace_gases = FALSE
+
+ for(var/id in Z_gases)
+ if(id in hardcoded_gases)
+ continue
+ trace_gases = TRUE
+ break
+ if((Z_gases["o2"] && Z_gases["o2"][MOLES] >= 16) && !Z_gases["plasma"] && (!Z_gases["co2"] || Z_gases["co2"][MOLES] < 10) && !trace_gases)
if((Z.temperature > 270) && (Z.temperature < 360))
var/pressure = Z.return_pressure()
if((pressure > 20) && (pressure < 550))
+ PoolOrNew(/obj/effect/overlay/temp/guardian/phase/out, get_turf(A))
do_teleport(A, beacon, 0)
+ PoolOrNew(/obj/effect/overlay/temp/guardian/phase, get_turf(A))
else
src << "The beacon isn't in a safe location!"
else
@@ -392,7 +415,6 @@
///////////////////Ranged
-
/obj/item/projectile/guardian
name = "crystal spray"
icon_state = "guardian"
@@ -405,7 +427,7 @@
friendly = "quietly assesses"
melee_damage_lower = 10
melee_damage_upper = 10
- damage_transfer = 0.9
+ damage_coeff = list(BRUTE = 0.9, BURN = 0.9, TOX = 0.9, CLONE = 0.9, STAMINA = 0, OXY = 0.9)
projectiletype = /obj/item/projectile/guardian
ranged_cooldown_cap = 0
projectilesound = 'sound/effects/hit_on_shattered_glass.ogg'
@@ -482,11 +504,10 @@
G.summoner << "[AM] has crossed your surveillance trap at [get_area(snare_loc)]."
////Bomb
-
/mob/living/simple_animal/hostile/guardian/bomb
melee_damage_lower = 15
melee_damage_upper = 15
- damage_transfer = 0.6
+ damage_coeff = list(BRUTE = 0.6, BURN = 0.6, TOX = 0.6, CLONE = 0.6, STAMINA = 0, OXY = 0.6)
range = 13
playstyle_string = "As an explosive type, you have only moderate close combat abilities, but are capable of converting any adjacent item into a disguised bomb via alt click."
magic_fluff_string = "..And draw the Scientist, master of explosive death."
@@ -618,7 +639,7 @@
G.summoner = user
G.key = key
G << "You are a [mob_name] bound to serve [user.real_name]."
- G << "You are capable of manifesting or recalling to your master with verbs in the Guardian tab. You will also find a verb to communicate with them privately there."
+ G << "You are capable of manifesting or recalling to your master with the buttons on your HUD. You will also find a button to communicate with them privately there."
G << "While personally invincible, you will die if [user.real_name] does, and any damage dealt to you will have a portion passed on to them as you feed upon them to sustain yourself."
G << "[G.playstyle_string]"
G.faction = user.faction
@@ -626,19 +647,25 @@
user.verbs += /mob/living/proc/guardian_recall
user.verbs += /mob/living/proc/guardian_reset
- var/picked_name = pick("Aries", "Leo", "Sagittarius", "Taurus", "Virgo", "Capricorn", "Gemini", "Libra", "Aquarius", "Cancer", "Scorpio", "Pisces")
- var/colour = pick("orange", "pink", "red", "blue", "green")
- G.name = "[picked_name] [capitalize(colour)]"
- G.real_name = "[picked_name] [capitalize(colour)]"
- G.icon_living = "guardian[colour]"
- G.icon_state = "guardian[colour]"
- G.icon_dead = "guardian[colour]"
-
- switch (theme)
+ var/colour
+ var/picked_name
+ switch(theme)
if("magic")
user << "[G.magic_fluff_string]."
+ colour = pick("Pink", "Red", "Orange", "Green", "Blue")
+ picked_name = pick("Aries", "Leo", "Sagittarius", "Taurus", "Virgo", "Capricorn", "Gemini", "Libra", "Aquarius", "Cancer", "Scorpio", "Pisces")
if("tech")
user << "[G.tech_fluff_string]."
+ G.bubble_icon = "holo"
+ colour = pick("Rose", "Peony", "Lily", "Daisy", "Zinnia", "Ivy", "Iris", "Petunia", "Violet", "Lilac", "Orchid") //technically not colors, just flowers that can be specific colors
+ picked_name = pick("Gallium", "Indium", "Thallium", "Bismuth", "Aluminium", "Mercury", "Iron", "Silver", "Zinc", "Titanium", "Chromium", "Nickel", "Platinum", "Tellurium", "Palladium", "Rhodium", "Cobalt", "Osmium", "Tungsten", "Iridium")
+
+ G.name = "[picked_name] [colour]"
+ G.real_name = "[picked_name] [colour]"
+ G.icon_living = "[theme][colour]"
+ G.icon_state = "[theme][colour]"
+ G.icon_dead = "[theme][colour]"
+
G.mind.name = "[G.real_name]"
/obj/item/weapon/guardiancreator/choose
@@ -646,7 +673,7 @@
/obj/item/weapon/guardiancreator/tech
name = "holoparasite injector"
- desc = "It contains alien nanoswarm of unknown origin. Though capable of near sorcerous feats via use of hardlight holograms and nanomachines, it requires an organic host as a home base and source of fuel."
+ desc = "It contains an alien nanoswarm of unknown origin. Though capable of near sorcerous feats via use of hardlight holograms and nanomachines, it requires an organic host as a home base and source of fuel."
icon = 'icons/obj/syringe.dmi'
icon_state = "combat_hypo"
theme = "tech"
@@ -661,19 +688,19 @@
/obj/item/weapon/paper/guardian
name = "Holoparasite Guide"
- icon_state = "alienpaper_words"
+ icon_state = "paper_words"
info = {"A list of Holoparasite Types
- Chaos: Ignites mobs on touch. teleports them at random on attack. Automatically extinguishes the user if they catch fire.
+ Chaos: Ignites enemies on touch and teleports them at random on attack. Automatically extinguishes the user if they catch on fire.
- Standard:Devestating close combat attacks and high damage resist. No special powers.
+ Standard:Devastating close combat attacks and high damage resist. Can smash through weak walls.
- Ranged: Has two modes. Ranged: Extremely weak, highly spammable projectile attack. Scout: Can not attack, but can move through walls. Can lay surveillance snares in either mode.
+ Ranged: Has two modes. Ranged; which fires a constant stream of weak, armor-ignoring projectiles. Scout; Cannot attack, but can move through walls and is quite hard to see. Can lay surveillance snares, which alert it when crossed, in either mode.
- Support:Has two modes. Combat: Medium power attacks and damage resist. Healer: Attacks heal damage, but low damage resist and slow movemen. Can deploy a bluespace beacon and warp targets to it (including you) in either mode.
+ Support:Has two modes. Combat; Medium power attacks and damage resist. Healer; Heals instead of attack, but has low damage resist and slow movement. Can deploy a bluespace beacon and warp targets to it (including you) in either mode.
- Explosive: High damage resist and medium power attack. Can turn any object into a bomb, dealing explosive damage to the next person to touch it. The object will return to normal after the trap is triggered.
+ Explosive: High damage resist and medium power attack. Can turn any object, including objects too large to pick up, into a bomb, dealing explosive damage to the next person to touch it. The object will return to normal after the trap is triggered or after a delay.
"}
/obj/item/weapon/paper/guardian/update_icon()
diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm
index c7f49bf27a2..8bd71dd3313 100644
--- a/code/modules/mob/living/simple_animal/hostile/alien.dm
+++ b/code/modules/mob/living/simple_animal/hostile/alien.dm
@@ -19,6 +19,7 @@
melee_damage_upper = 25
attacktext = "slashes"
speak_emote = list("hisses")
+ bubble_icon = "alien"
a_intent = "harm"
attack_sound = 'sound/weapons/bladeslice.ogg'
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
@@ -125,6 +126,7 @@
icon_state = "alienq"
icon_living = "alienq"
icon_dead = "alienq_dead"
+ bubble_icon = "alienroyal"
move_to_delay = 4
maxHealth = 400
health = 400
diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
index c7328140dd9..7bf00a90da5 100644
--- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
+++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
@@ -116,13 +116,11 @@
//second, spin a sticky spiderweb on this tile
var/obj/effect/spider/stickyweb/W = locate() in get_turf(src)
if(!W)
- spawn()
- Web()
+ Web()
else
//third, lay an egg cluster there
if(fed)
- spawn()
- LayEggs()
+ LayEggs()
else
//fourthly, cocoon any nearby items so those pesky pinkskins can't use them
for(var/obj/O in can_see)
@@ -140,8 +138,7 @@
else if(busy == MOVING_TO_TARGET && cocoon_target)
if(get_dist(src, cocoon_target) <= 1)
- spawn()
- Wrap()
+ Wrap()
else
busy = 0
diff --git a/code/modules/mob/living/simple_animal/hostile/headcrab.dm b/code/modules/mob/living/simple_animal/hostile/headcrab.dm
index 9f4c0d7d686..d1a829a5483 100644
--- a/code/modules/mob/living/simple_animal/hostile/headcrab.dm
+++ b/code/modules/mob/living/simple_animal/hostile/headcrab.dm
@@ -43,6 +43,9 @@
// Changeling egg can survive in aliens!
var/mob/living/carbon/C = target
if(C.stat == DEAD)
+ if(C.status_flags & XENO_HOST)
+ src << "A foreign presence repels us from this body. Perhaps we should try to infest another?"
+ return
Infect(target)
src << "With our egg laid, our death approaches rapidly..."
spawn(100)
diff --git a/code/modules/mob/living/simple_animal/hostile/hivebot.dm b/code/modules/mob/living/simple_animal/hostile/hivebot.dm
index 65a603ddb9e..a7c6dff1d42 100644
--- a/code/modules/mob/living/simple_animal/hostile/hivebot.dm
+++ b/code/modules/mob/living/simple_animal/hostile/hivebot.dm
@@ -24,7 +24,7 @@
speak_emote = list("states")
gold_core_spawnable = 1
del_on_death = 1
- loot = (/obj/effect/decal/cleanable/robot_debris)
+ loot = list(/obj/effect/decal/cleanable/robot_debris)
/mob/living/simple_animal/hostile/hivebot/New()
..()
diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm
index f1774d355f4..06d620caa4c 100644
--- a/code/modules/mob/living/simple_animal/hostile/hostile.dm
+++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm
@@ -116,11 +116,7 @@
return 1
if(isliving(the_target))
var/mob/living/L = the_target
- var/faction_check = 0
- for(var/F in faction)
- if(F in L.faction)
- faction_check = 1
- break
+ var/faction_check = faction_check(L)
if(robust_searching)
if(L.stat > stat_attack || L.stat != stat_attack && stat_exclusive == 1)
return 0
@@ -183,7 +179,7 @@
/mob/living/simple_animal/hostile/proc/Goto(target, delay, minimum_distance)
walk_to(src, target, minimum_distance, delay)
-/mob/living/simple_animal/hostile/adjustBruteLoss(damage)
+/mob/living/simple_animal/hostile/adjustHealth(damage)
..(damage)
if(!ckey && !stat && search_objects < 3 && damage > 0)//Not unconscious, and we don't ignore mobs
if(search_objects)//Turn off item searching and ignore whatever item we were looking at, we're more concerned with fight or flight
diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm
index 3db6b3e76f8..8058ef8717c 100644
--- a/code/modules/mob/living/simple_animal/hostile/mimic.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm
@@ -70,7 +70,7 @@
visible_message("[src] starts to move!")
attempt_open = 1
-/mob/living/simple_animal/hostile/mimic/crate/adjustBruteLoss(damage)
+/mob/living/simple_animal/hostile/mimic/crate/adjustHealth(damage)
trigger()
..(damage)
@@ -139,7 +139,7 @@ var/global/list/protected_objects = list(/obj/structure/table, /obj/structure/ca
return 1
return 0
-/mob/living/simple_animal/hostile/mimic/copy/proc/CopyObject(obj/O, mob/living/creator, destroy_original = 0)
+/mob/living/simple_animal/hostile/mimic/copy/proc/CopyObject(obj/O, mob/living/user, destroy_original = 0)
if(destroy_original || CheckObject(O))
O.loc = src
name = O.name
@@ -164,8 +164,8 @@ var/global/list/protected_objects = list(/obj/structure/table, /obj/structure/ca
melee_damage_upper = 2 + I.force
move_to_delay = 2 * I.w_class + 1
maxHealth = health
- if(creator)
- creator = creator
+ if(user)
+ creator = user
faction += "\ref[creator]" // very unique
if(destroy_original)
qdel(O)
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm
index 0842a2062af..29ae2bad90d 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm
@@ -181,7 +181,7 @@
visible_message("The [P.name] was repelled by [src.name]'s girth!")
return
-/mob/living/simple_animal/hostile/asteroid/goldgrub/adjustBruteLoss(damage)
+/mob/living/simple_animal/hostile/asteroid/goldgrub/adjustHealth(damage)
idle_vision_range = 9
..()
@@ -374,6 +374,8 @@
/mob/living/simple_animal/hostile/asteroid/goliath/OpenFire()
var/tturf = get_turf(target)
+ if(!(istype(tturf, /turf/simulated)))
+ return
if(get_dist(src, target) <= 7)//Screen range check, so you can't get tentacle'd offscreen
visible_message("The [src.name] digs its tentacles under [target.name]!")
new /obj/effect/goliath_tentacle/original(tturf)
@@ -382,7 +384,7 @@
pre_attack = 0
return
-/mob/living/simple_animal/hostile/asteroid/goliath/adjustBruteLoss(damage)
+/mob/living/simple_animal/hostile/asteroid/goliath/adjustHealth(damage)
ranged_cooldown--
handle_preattack()
..()
@@ -522,7 +524,7 @@
Inflate()
..()
-/mob/living/simple_animal/hostile/asteroid/fugu/adjustBruteLoss(var/damage)
+/mob/living/simple_animal/hostile/asteroid/fugu/adjustHealth(var/damage)
if(wumbo)
return
..()
diff --git a/code/modules/mob/living/simple_animal/hostile/mushroom.dm b/code/modules/mob/living/simple_animal/hostile/mushroom.dm
index fe593390418..03dbb7e29b6 100644
--- a/code/modules/mob/living/simple_animal/hostile/mushroom.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mushroom.dm
@@ -61,7 +61,7 @@
deathmessage = "[src] fainted."
..()
-/mob/living/simple_animal/hostile/mushroom/adjustBruteLoss(damage)//Possibility to flee from a fight just to make it more visually interesting
+/mob/living/simple_animal/hostile/mushroom/adjustHealth(damage)//Possibility to flee from a fight just to make it more visually interesting
if(!retreat_distance && prob(33))
retreat_distance = 5
spawn(30)
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm
index 5c4a4621da0..f2c009f2c3b 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm
@@ -51,7 +51,7 @@
H.enemies |= enemies
return 0
-/mob/living/simple_animal/hostile/retaliate/adjustBruteLoss(damage)
+/mob/living/simple_animal/hostile/retaliate/adjustHealth(damage)
..(damage)
if(stat == CONSCIOUS)
Retaliate()
diff --git a/code/modules/mob/living/simple_animal/hostile/skeleton.dm b/code/modules/mob/living/simple_animal/hostile/skeleton.dm
index 074a40e85ed..79fa9969b17 100644
--- a/code/modules/mob/living/simple_animal/hostile/skeleton.dm
+++ b/code/modules/mob/living/simple_animal/hostile/skeleton.dm
@@ -60,8 +60,8 @@
icon_state = "templar"
icon_living = "templar"
icon_dead = "templar_dead"
- maxHealth = 125
- health = 125
+ maxHealth = 150
+ health = 150
speed = 2
gold_core_spawnable = 0
speak_chance = 1
@@ -75,16 +75,6 @@
/obj/item/clothing/head/helmet/knight/templar,
/obj/item/weapon/claymore/hog{name = "holy sword"})
-/mob/living/simple_animal/hostile/skeleton/templar/bullet_act(obj/item/projectile/Proj)
- if(!Proj)
- return
- if(prob(50))
- if((Proj.damage_type == BRUTE || Proj.damage_type == BURN))
- src.health -= Proj.damage
- else
- visible_message("[src] blocks [Proj] with its sword!")
- return 0
-
/mob/living/simple_animal/hostile/skeleton/ice
name = "ice skeleton"
desc = "A reanimated skeleton protected by a thick sheet of natural ice armor. Looks slow, though."
diff --git a/code/modules/mob/living/simple_animal/hostile/statue.dm b/code/modules/mob/living/simple_animal/hostile/statue.dm
index 2d04aee5fdc..8b07a7caa40 100644
--- a/code/modules/mob/living/simple_animal/hostile/statue.dm
+++ b/code/modules/mob/living/simple_animal/hostile/statue.dm
@@ -117,7 +117,7 @@
// This loop will, at most, loop twice.
for(var/atom/check in check_list)
for(var/mob/living/M in viewers(world.view + 1, check) - src)
- if(M.client && CanAttack(M) && !issilicon(M))
+ if(M.client && CanAttack(M) && !M.has_unlimited_silicon_privilege)
if(!M.eye_blind)
return M
for(var/obj/mecha/M in view(world.view + 1, check)) //assuming if you can see them they can see you
diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm
index 7e037b9b5f5..27719e385dc 100644
--- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm
+++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm
@@ -126,6 +126,7 @@
mob_size = MOB_SIZE_TINY
flying = 1
speak_emote = list("states")
+ bubble_icon = "syndibot"
gold_core_spawnable = 1
del_on_death = 1
diff --git a/code/modules/mob/living/simple_animal/hostile/tree.dm b/code/modules/mob/living/simple_animal/hostile/tree.dm
index 885a188ac4c..26817a3f3c9 100644
--- a/code/modules/mob/living/simple_animal/hostile/tree.dm
+++ b/code/modules/mob/living/simple_animal/hostile/tree.dm
@@ -41,12 +41,12 @@
..()
if(istype(src.loc, /turf/simulated))
var/turf/simulated/T = src.loc
- if(T.air)
- var/co2 = T.air.carbon_dioxide
+ if(T.air && T.air.gases["co2"])
+ var/co2 = T.air.gases["co2"][MOLES]
if(co2 > 0)
if(prob(25))
var/amt = min(co2, 9)
- T.air.carbon_dioxide -= amt
+ T.air.gases["co2"][MOLES] -= amt
T.atmos_spawn_air(SPAWN_OXYGEN, amt)
/mob/living/simple_animal/hostile/tree/AttackingTarget()
diff --git a/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm b/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm
index 6a5397ad05c..b80dc417ad7 100644
--- a/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm
+++ b/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm
@@ -87,7 +87,7 @@
if(grasping.len < max_grasps)
for(var/mob/living/L in range(grasp_range,src))
- if(L == src)
+ if(L == src || faction_check(L))
continue
if(!(L in grasping) && L != target && prob(grasp_chance))
L << "\the [src] has you entangled!"
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index f0c670e6d9a..805156d5c13 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -196,10 +196,15 @@
if(istype(T,/turf/simulated))
var/turf/simulated/ST = T
if(ST.air)
- var/tox = ST.air.toxins
- var/oxy = ST.air.oxygen
- var/n2 = ST.air.nitrogen
- var/co2 = ST.air.carbon_dioxide
+ var/ST_gases = ST.air.gases
+ ST.air.assert_gases(arglist(hardcoded_gases))
+
+ var/tox = ST_gases["plasma"][MOLES]
+ var/oxy = ST_gases["o2"][MOLES]
+ var/n2 = ST_gases["n2"][MOLES]
+ var/co2 = ST_gases["co2"][MOLES]
+
+ ST.air.garbage_collect()
if(atmos_requirements["min_oxy"] && oxy < atmos_requirements["min_oxy"])
atmos_suitable = 0
@@ -276,25 +281,31 @@
Proj.on_hit(src)
return 0
+/mob/living/simple_animal/proc/adjustHealth(amount)
+ if(status_flags & GODMODE)
+ return 0
+ bruteloss = Clamp(bruteloss + amount, 0, maxHealth)
+ handle_regular_status_updates()
+
/mob/living/simple_animal/adjustBruteLoss(amount)
if(damage_coeff[BRUTE])
- ..(amount*damage_coeff[BRUTE])
+ adjustHealth(amount*damage_coeff[BRUTE])
/mob/living/simple_animal/adjustFireLoss(amount)
if(damage_coeff[BURN])
- adjustBruteLoss(amount*damage_coeff[BURN])
+ adjustHealth(amount*damage_coeff[BURN])
/mob/living/simple_animal/adjustOxyLoss(amount)
if(damage_coeff[OXY])
- adjustBruteLoss(amount*damage_coeff[OXY])
+ adjustHealth(amount*damage_coeff[OXY])
/mob/living/simple_animal/adjustToxLoss(amount)
if(damage_coeff[TOX])
- ..(amount*damage_coeff[TOX])
+ adjustHealth(amount*damage_coeff[TOX])
/mob/living/simple_animal/adjustCloneLoss(amount)
if(damage_coeff[CLONE])
- ..(amount*damage_coeff[CLONE])
+ adjustHealth(amount*damage_coeff[CLONE])
/mob/living/simple_animal/adjustStaminaLoss(amount)
return
diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm
index 12243cf713a..af6de1b80bc 100644
--- a/code/modules/mob/living/simple_animal/slime/slime.dm
+++ b/code/modules/mob/living/simple_animal/slime/slime.dm
@@ -17,6 +17,7 @@
response_harm = "stomps on"
emote_see = list("jiggles", "bounces in place")
speak_emote = list("chirps")
+ bubble_icon = "slime"
layer = 5
diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm
index 082296dcaf2..ed176d9aa3c 100644
--- a/code/modules/mob/login.dm
+++ b/code/modules/mob/login.dm
@@ -27,7 +27,7 @@
player_list |= src
update_Login_details()
world.update_status()
-
+
client.images = null //remove the images such as AIs being unable to see runes
client.screen = list() //remove hud items just in case
if(hud_used) qdel(hud_used) //remove the hud objects
@@ -37,7 +37,8 @@
sight |= SEE_SELF
..()
-
+ if (key != client.key)
+ key = client.key
if(loc && !isturf(loc))
client.eye = loc
client.perspective = EYE_PERSPECTIVE
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 82362afc3c1..377ddabf388 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -33,117 +33,101 @@ var/next_mob_id = 0
var/datum/gas_mixture/environment = loc.return_air()
- var/t = "Coordinates: [x],[y] \n"
- t+= "Temperature: [environment.temperature] \n"
- t+= "Nitrogen: [environment.nitrogen] \n"
- t+= "Oxygen: [environment.oxygen] \n"
- t+= "Plasma : [environment.toxins] \n"
- t+= "Carbon Dioxide: [environment.carbon_dioxide] \n"
- for(var/datum/gas/trace_gas in environment.trace_gases)
- t+= "[trace_gas.type]: [trace_gas.moles] \n"
+ var/t = "Coordinates: [x],[y] \n"
+ t += "Temperature: [environment.temperature] \n"
+ for(var/id in environment.gases)
+ var/gas = environment.gases[id]
+ if(gas[MOLES])
+ t+="[gas[GAS_NAME]]: [gas[MOLES]] \n"
- usr.show_message(t, 1)
+ usr << t
-/mob/proc/show_message(msg, type, alt, alt_type)//Message, type of message (1 or 2), alternative message, alt message type (1 or 2)
+/mob/proc/show_message(msg, type, alt_msg, alt_type)//Message, type of message (1 or 2), alternative message, alt message type (1 or 2)
- if(!client) return
+ if(!client)
+ return
msg = copytext(msg, 1, MAX_MESSAGE_LEN)
- if (type)
- if(type & 1 && (disabilities & BLIND || paralysis) )//Vision related
- if (!( alt ))
+ if(type)
+ if(type & 1 && eye_blind )//Vision related
+ if(!alt_msg)
return
else
- msg = alt
+ msg = alt_msg
type = alt_type
- if (type & 2 && ear_deaf)//Hearing related
- if (!( alt ))
+
+ if(type & 2 && ear_deaf)//Hearing related
+ if(!alt_msg)
return
else
- msg = alt
+ msg = alt_msg
type = alt_type
- if ((type & 1 && disabilities & BLIND))
+ if(type & 1 && eye_blind)
return
- // Added voice muffling for Issue 41.
- if(stat == UNCONSCIOUS || sleeping > 0)
- src << "... You can almost hear someone talking ..."
+ // voice muffling
+ if(stat == UNCONSCIOUS)
+ if(type & 2) //audio
+ src << "... You can almost hear something ..."
else
src << msg
- return
-// Show a message to all mobs who sees the src mob and the src mob itself
+// Show a message the src mob and to all player mobs who sees the src mob
// This would be for visible actions by the src mob
// message is the message output to anyone who can see e.g. "[src] does something!"
// self_message (optional) is what the src mob sees e.g. "You do something!"
// blind_message (optional) is what blind people will hear e.g. "You hear something!"
/mob/visible_message(message, self_message, blind_message)
- var/list/mob_viewers = list()
- var/list/possible_viewers = list()
- mob_viewers |= src
- mob_viewers |= viewers(src)
- var/heard = get_hear(7, src)
- for(var/atom/movable/A in heard)
- possible_viewers |= recursive_hear_check(A)
- for(var/mob/B in possible_viewers)
- if(B in mob_viewers)
+ var/turf/T = get_turf(src)
+ if(!T)
+ return
+ for(var/mob/M in get_hearers_in_view(7, src))
+ if(!M.client)
continue
- if(isturf(B.loc))
- continue
- var/turf/T = get_turf(B)
- if(src in view(T))
- mob_viewers |= B
-
- for(var/mob/M in mob_viewers)
- if(M.see_invisible < invisibility)
- continue //can't view the invisible
var/msg = message
- if(self_message && M==src)
- msg = self_message
- M.show_message(msg, 1)
+ if(M == src) //the src always see the main message or self message
+ if(self_message)
+ msg = self_message
+ else
+ if(M.see_invisible 1 || diag))
- step(M, get_dir(M.loc, mob.loc))
+ if(M)//Mob may get deleted during parent call
+ if (isturf(M.loc))
+ var/diag = get_dir(mob, M)
+ if ((diag - 1) & diag)
+ else
+ diag = null
+ if ((get_dist(mob, M) > 1 || diag))
+ step(M, get_dir(M.loc, mob.loc))
else
for(var/mob/M in L)
M.other_mobs = 1
@@ -275,13 +276,12 @@
else
return
L.loc = locate(locx,locy,mobloc.z)
- spawn(0)
- var/limit = 2//For only two trailing shadows.
- for(var/turf/T in getline(mobloc, L.loc))
- spawn(0)
- anim(T,L,'icons/mob/mob.dmi',,"shadow",,L.dir)
- limit--
- if(limit<=0) break
+ var/limit = 2//For only two trailing shadows.
+ for(var/turf/T in getline(mobloc, L.loc))
+ spawn(0)
+ anim(T,L,'icons/mob/mob.dmi',,"shadow",,L.dir)
+ limit--
+ if(limit<=0) break
else
spawn(0)
anim(mobloc,mob,'icons/mob/mob.dmi',,"shadow",,L.dir)
@@ -305,43 +305,40 @@
///For moving in space
///Return 1 for movement 0 for none
/mob/Process_Spacemove(movement_dir = 0)
-
if(..())
return 1
+ var/atom/movable/backup = get_spacemove_backup()
+ if(backup)
+ if(istype(backup) && movement_dir && !backup.anchored)
+ if(backup.newtonian_move(turn(movement_dir, 180))) //You're pushing off something movable, so it moves
+ src << "You push off of [backup] to propel yourself."
+ return 1
+ return 0
+/mob/get_spacemove_backup()
var/atom/movable/dense_object_backup
- for(var/atom/A in orange(1, get_turf(src)))
+ for(var/A in orange(1, get_turf(src)))
if(isarea(A))
continue
-
else if(isturf(A))
var/turf/turf = A
if(istype(turf,/turf/space))
continue
-
if(!turf.density && !mob_negates_gravity())
continue
-
- return 1
-
+ return A
else
var/atom/movable/AM = A
if(AM == buckled) //Kind of unnecessary but let's just be sure
continue
if(!AM.CanPass(src) || AM.density)
if(AM.anchored)
- return 1
+ return AM
if(pulling == AM)
continue
dense_object_backup = AM
-
- if(movement_dir && dense_object_backup)
- if(dense_object_backup.newtonian_move(turn(movement_dir, 180))) //You're pushing off something movable, so it moves
- src << "You push off of [dense_object_backup] to propel yourself."
-
-
- return 1
- return 0
+ break
+ . = dense_object_backup
/mob/proc/mob_has_gravity(turf/T)
return has_gravity(src, T)
diff --git a/code/modules/ninja/ninja_event.dm b/code/modules/ninja/ninja_event.dm
index e4b60e7d420..fda579af7ef 100644
--- a/code/modules/ninja/ninja_event.dm
+++ b/code/modules/ninja/ninja_event.dm
@@ -76,37 +76,64 @@ Contents:
else if(M.assigned_role in command_positions)
possible_targets[M] = 1 //good-guy
-/*
- Alright, so, if I had my way I'd axe all this retarded bullshit entirely, but I know some people would complain because
- porting ninja specifics to the random gen system would go horribly. I can at the very least axe 99% of the autism
- and make ninja code slightly more bearable.
- - Iamgoofball
-*/
var/list/objectives = list(1,2,3,4)
- while(Mind.objectives.len < 6) //still not enough objectives! // WHY DOES THIS CALL FOR 6 OBJECTIVES
- switch(pick_n_take(objectives)) // BUT THEN PREVENT YOU FROM GETTING 4 IN THE END
+ while(Mind.objectives.len < 6) //still not enough objectives!
+ switch(pick_n_take(objectives))
if(1) //research
- add_objective(Mind, /datum/objective/download)
+ var/datum/objective/download/O = new /datum/objective/download()
+ O.owner = Mind
+ O.gen_amount_goal()
+ Mind.objectives += O
if(2) //steal
- add_objective(Mind, /datum/objective/default/steal/special)
+ var/datum/objective/steal/special/O = new /datum/objective/steal/special()
+ O.owner = Mind
+ Mind.objectives += O
if(3) //protect/kill
- if(prob(50))
- add_objective(Mind, /datum/objective/default/assassinate)
- else
- add_objective(Mind, /datum/objective/default/protect)
+ if(!possible_targets.len) continue
+ var/selected = rand(1,possible_targets.len)
+ var/datum/mind/M = possible_targets[selected]
+ var/is_bad_guy = possible_targets[M]
+ possible_targets.Cut(selected,selected+1)
+
+ if(is_bad_guy ^ helping_station) //kill (good-ninja + bad-guy or bad-ninja + good-guy)
+ var/datum/objective/assassinate/O = new /datum/objective/assassinate()
+ O.owner = Mind
+ O.target = M
+ O.explanation_text = "Slay \the [M.current.real_name], the [M.assigned_role]."
+ Mind.objectives += O
+ else //protect
+ var/datum/objective/protect/O = new /datum/objective/protect()
+ O.owner = Mind
+ O.target = M
+ O.explanation_text = "Protect \the [M.current.real_name], the [M.assigned_role], from harm."
+ Mind.objectives += O
if(4) //debrain/capture
- if(prob(50))
- add_objective(Mind, /datum/objective/default/debrain)
- else
- add_objective(Mind, /datum/objective/capture)
+ if(!possible_targets.len) continue
+ var/selected = rand(1,possible_targets.len)
+ var/datum/mind/M = possible_targets[selected]
+ var/is_bad_guy = possible_targets[M]
+ possible_targets.Cut(selected,selected+1)
+
+ if(is_bad_guy ^ helping_station) //debrain (good-ninja + bad-guy or bad-ninja + good-guy)
+ var/datum/objective/debrain/O = new /datum/objective/debrain()
+ O.owner = Mind
+ O.target = M
+ O.explanation_text = "Steal the brain of [M.current.real_name]."
+ Mind.objectives += O
+ else //capture
+ var/datum/objective/capture/O = new /datum/objective/capture()
+ O.owner = Mind
+ O.gen_amount_goal()
+ Mind.objectives += O
else
break
//Add a survival objective since it's usually broad enough for any round type.
- add_objective(Mind, /datum/objective/escape_obj/survive)
-
+ var/datum/objective/O = new /datum/objective/survive()
+ O.owner = Mind
+ Mind.objectives += O
//add some RP-fluff
Mind.store_memory("I am an elite mercenary assassin of the mighty Spider Clan. A SPACE NINJA!")
diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm
index 3d3e32b5b10..3edf26b56e8 100644
--- a/code/modules/paperwork/photography.dm
+++ b/code/modules/paperwork/photography.dm
@@ -131,6 +131,12 @@
desc = "A polaroid camera, some say it can see ghosts!"
see_ghosts = 1
+/obj/item/device/camera/detective
+ name = "Detective's camera"
+ desc = "A polaroid camera with extra capacity for crime investigations."
+ pictures_max = 30
+ pictures_left = 30
+
/obj/item/device/camera/siliconcam //camera AI can take pictures with
name = "silicon photo camera"
diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm
index a53171e4621..7b0384dc30d 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -597,7 +597,9 @@
interact(user)
/obj/machinery/power/apc/attack_alien(mob/living/carbon/alien/humanoid/user)
- if(!user) return
+ if(!user)
+ return
+ user.changeNext_move(CLICK_CD_MELEE)
user.do_attack_animation(src)
user.visible_message("[user.name] slashes at the [src.name]!", "You slash at the [src.name]!")
playsound(src.loc, 'sound/weapons/slash.ogg', 100, 1)
@@ -626,10 +628,11 @@
else
ui_interact(user)
-/obj/machinery/power/apc/ui_interact(mob/user, ui_key = "main", var/datum/tgui/ui = null, force_open = 0)
- ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open)
+/obj/machinery/power/apc/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
+ datum/tgui/master_ui = null, datum/ui_state/state = default_state)
+ ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if (!ui)
- ui = new(user, src, ui_key, "apc", name, 460, 515)
+ ui = new(user, src, ui_key, "apc", name, 535, 515, master_ui, state)
ui.open()
/obj/machinery/power/apc/get_ui_data(mob/user)
@@ -848,8 +851,8 @@
qdel(malf)
src.occupier.verbs += /mob/living/silicon/ai/proc/corereturn
src.occupier.cancel_camera()
- if (seclevel2num(get_security_level()) == SEC_LEVEL_DELTA)
- for(var/obj/item/weapon/pinpointer/point in world)
+ if ((seclevel2num(get_security_level()) == SEC_LEVEL_DELTA) && malf.nuking)
+ for(var/obj/item/weapon/pinpointer/point in pinpointer_list)
point.the_disk = src //the pinpointer will detect the shunted AI
@@ -863,9 +866,9 @@
src.occupier.parent.cancel_camera()
qdel(src.occupier)
if (seclevel2num(get_security_level()) == SEC_LEVEL_DELTA)
- for(var/obj/item/weapon/pinpointer/point in world)
- for(var/mob/living/silicon/ai/A in living_mob_list)
- if(A.stat != DEAD)
+ for(var/obj/item/weapon/pinpointer/point in pinpointer_list)
+ for(var/mob/living/silicon/ai/A in ai_list)
+ if((A.stat != DEAD) && A.nuking)
point.the_disk = A //The pinpointer tracks the AI back into its core.
else
@@ -874,32 +877,10 @@
src.occupier.loc = src.loc
src.occupier.death()
src.occupier.gib()
- for(var/obj/item/weapon/pinpointer/point in world)
+ for(var/obj/item/weapon/pinpointer/point in pinpointer_list)
point.the_disk = null //the pinpointer will go back to pointing at the nuke disc.
-/obj/machinery/power/apc/proc/ion_act()
- //intended to be exactly the same as an AI malf attack
- if(!src.malfhack && src.z == ZLEVEL_STATION)
- if(prob(3))
- src.locked = 1
- if (src.cell.charge > 0)
-// world << "\red blew APC in [src.loc.loc]"
- src.cell.charge = 0
- cell.corrupt()
- src.malfhack = 1
- update_icon()
- var/datum/effect_system/smoke_spread/smoke = new
- smoke.set_up(1, src.loc)
- smoke.attach(src)
- smoke.start()
- var/datum/effect_system/spark_spread/s = new
- s.set_up(3, 1, src)
- s.start()
- visible_message("The [src.name] suddenly lets out a blast of smoke and some sparks!", \
- "You hear sizzling electronics.")
-
-
/obj/machinery/power/apc/surplus()
if(terminal)
return terminal.surplus()
diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm
index b2ca9ae4a1b..9a021cd1b4e 100644
--- a/code/modules/power/cable.dm
+++ b/code/modules/power/cable.dm
@@ -468,6 +468,7 @@ var/global/list/datum/stack_recipe/cable_coil_recipes = list ( \
item_state = "coil_red"
max_amount = MAXCOIL
amount = MAXCOIL
+ merge_type = /obj/item/stack/cable_coil // This is here to let its children merge between themselves
item_color = "red"
desc = "A coil of power cable."
throwforce = 0
diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm
index a3c1db86c33..34f3a6de8eb 100644
--- a/code/modules/power/lighting.dm
+++ b/code/modules/power/lighting.dm
@@ -365,18 +365,18 @@
return A.master.lightswitch && A.master.power_light
/obj/machinery/light/proc/flicker(var/amount = rand(10, 20))
+ set waitfor = 0
if(flickering) return
flickering = 1
- spawn(0)
- if(on && status == LIGHT_OK)
- for(var/i = 0; i < amount; i++)
- if(status != LIGHT_OK) break
- on = !on
- update(0)
- sleep(rand(5, 15))
- on = (status == LIGHT_OK)
+ if(on && status == LIGHT_OK)
+ for(var/i = 0; i < amount; i++)
+ if(status != LIGHT_OK) break
+ on = !on
update(0)
- flickering = 0
+ sleep(rand(5, 15))
+ on = (status == LIGHT_OK)
+ update(0)
+ flickering = 0
// ai attack - make lights flicker, because why not
@@ -539,13 +539,13 @@
// explode the light
/obj/machinery/light/proc/explode()
+ set waitfor = 0
var/turf/T = get_turf(src.loc)
- spawn(0)
- broken() // break it first to give a warning
- sleep(2)
- explosion(T, 0, 0, 2, 2)
- sleep(1)
- qdel(src)
+ broken() // break it first to give a warning
+ sleep(2)
+ explosion(T, 0, 0, 2, 2)
+ sleep(1)
+ qdel(src)
// the light item
// can be tube or bulb subtypes
diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm
index aab80c9e97f..304e5a37a1f 100644
--- a/code/modules/power/singularity/collector.dm
+++ b/code/modules/power/singularity/collector.dm
@@ -26,12 +26,12 @@ var/global/list/rad_collectors = list()
/obj/machinery/power/rad_collector/process()
if(P)
- if(P.air_contents.toxins <= 0)
+ if(!P.air_contents.gases["plasma"])
investigate_log("out of fuel.","singulo")
- P.air_contents.toxins = 0
eject()
else
- P.air_contents.toxins -= 0.001*drainratio
+ P.air_contents.gases["plasma"][MOLES] -= 0.001*drainratio
+ P.air_contents.garbage_collect()
return
@@ -43,7 +43,7 @@ var/global/list/rad_collectors = list()
toggle_power()
user.visible_message("[user.name] turns the [src.name] [active? "on":"off"].", \
"You turn the [src.name] [active? "on":"off"].")
- investigate_log("turned [active?"on":"off"] by [user.key]. [P?"Fuel: [round(P.air_contents.toxins/0.29)]%":"It is empty"].","singulo")
+ investigate_log("turned [active?"on":"off"] by [user.key]. [P?"Fuel: [round(P.air_contents.gases["plasma"][MOLES]/0.29)]%":"It is empty"].","singulo")
return
else
user << "The controls are locked!"
@@ -129,8 +129,8 @@ var/global/list/rad_collectors = list()
/obj/machinery/power/rad_collector/proc/receive_pulse(pulse_strength)
if(P && active)
- var/power_produced = 0
- power_produced = P.air_contents.toxins*pulse_strength*20
+ var/power_produced = P.air_contents.gases["plasma"] ? P.air_contents.gases["plasma"][MOLES] : 0
+ power_produced *= pulse_strength*20
add_avail(power_produced)
last_power = power_produced
return
diff --git a/code/modules/power/singularity/containment_field.dm b/code/modules/power/singularity/containment_field.dm
index aa748fbbf03..7aaebff4269 100644
--- a/code/modules/power/singularity/containment_field.dm
+++ b/code/modules/power/singularity/containment_field.dm
@@ -93,9 +93,6 @@
user.Stun(stun)
user.Weaken(10)
user.electrocute_act(shock_damage, src, 1)
- user.visible_message("[user.name] was shocked by the [src.name]!", \
- "You feel a powerful shock course through your body, sending you flying!", \
- "You hear a heavy electrical crack.")
else if(issilicon(user))
if(prob(20))
diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm
index 9d0238fba71..86419280ba7 100644
--- a/code/modules/power/smes.dm
+++ b/code/modules/power/smes.dm
@@ -158,8 +158,9 @@
terminal.dismantle(user)
//crowbarring it !
+ var/turf/T = get_turf(src)
if(default_deconstruction_crowbar(I))
- message_admins("[src] has been deconstructed by [key_name_admin(user)](?) (FLW) in ([x],[y],[z] - JMP)",0,1)
+ message_admins("[src] has been deconstructed by [key_name_admin(user)](?) (FLW) in ([T.x],[T.y],[T.z] - JMP)",0,1)
log_game("[src] has been deconstructed by [key_name(user)]")
investigate_log("SMES deconstructed by [key_name(user)]","singulo")
@@ -329,10 +330,11 @@
return
ui_interact(user)
-/obj/machinery/power/smes/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0)
- ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open)
+/obj/machinery/power/smes/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
+ datum/tgui/master_ui = null, datum/ui_state/state = default_state)
+ ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if (!ui)
- ui = new(user, src, ui_key, "smes", name, 340, 440)
+ ui = new(user, src, ui_key, "smes", name, 340, 440, master_ui, state)
ui.open()
/obj/machinery/power/smes/get_ui_data()
@@ -442,4 +444,4 @@
#undef SMES_OUTPUTTING
#undef SMES_NOT_OUTPUTTING
#undef SMES_INPUTTING
-#undef SMES_INPUT_ATTEMPT
\ No newline at end of file
+#undef SMES_INPUT_ATTEMPT
diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm
index f138b106657..f18c4aeb26c 100644
--- a/code/modules/power/solar.dm
+++ b/code/modules/power/solar.dm
@@ -369,10 +369,11 @@
return
ui_interact(user)
-/obj/machinery/power/solar_control/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0)
- ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open)
+/obj/machinery/power/solar_control/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
+ datum/tgui/master_ui = null, datum/ui_state/state = default_state)
+ ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if (!ui)
- ui = new(user, src, ui_key, "solar_control", name, 465, 400)
+ ui = new(user, src, ui_key, "solar_control", name, 465, 400, master_ui, state)
ui.open()
/obj/machinery/power/solar_control/get_ui_data()
diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm
index 18a05a582a4..4cc508f6f37 100644
--- a/code/modules/power/supermatter/supermatter.dm
+++ b/code/modules/power/supermatter/supermatter.dm
@@ -138,7 +138,13 @@
damage = max( damage + ( (removed.temperature - 800) / 150 ) , 0 )
//Ok, 100% oxygen atmosphere = best reaction
//Maxes out at 100% oxygen pressure
- oxygen = max(min((removed.oxygen - (removed.nitrogen * NITROGEN_RETARDATION_FACTOR)) / MOLES_CELLSTANDARD, 1), 0)
+ var/removed_nitrogen = 0
+ if(removed.gases["n2"])
+ removed_nitrogen = (removed.gases["n2"][MOLES] * NITROGEN_RETARDATION_FACTOR)
+
+ removed.assert_gases("o2", "plasma")
+
+ oxygen = max(min((removed.gases["o2"][MOLES] - removed_nitrogen) / MOLES_CELLSTANDARD, 1), 0)
var/temp_factor = 50
@@ -169,9 +175,9 @@
removed.temperature = max(0, min(removed.temperature, 2500))
//Calculate how much gas to release
- removed.toxins += max(device_energy / PLASMA_RELEASE_MODIFIER, 0)
+ removed.gases["plasma"][MOLES] += max(device_energy / PLASMA_RELEASE_MODIFIER, 0)
- removed.oxygen += max((device_energy + removed.temperature - T0C) / OXYGEN_RELEASE_MODIFIER, 0)
+ removed.gases["o2"][MOLES] += max((device_energy + removed.temperature - T0C) / OXYGEN_RELEASE_MODIFIER, 0)
env.merge(removed)
diff --git a/code/modules/power/tesla/energy_ball.dm b/code/modules/power/tesla/energy_ball.dm
index e1e2018779e..8c32c860c1e 100644
--- a/code/modules/power/tesla/energy_ball.dm
+++ b/code/modules/power/tesla/energy_ball.dm
@@ -13,7 +13,8 @@ var/list/blacklisted_tesla_types = list(/obj/machinery/atmospherics,
/obj/structure/particle_accelerator/power_box,
/obj/structure/particle_accelerator/end_cap,
/obj/machinery/field/containment,
- /obj/structure/disposalpipe)
+ /obj/structure/disposalpipe,
+ /obj/machinery/gateway)
/obj/singularity/energy_ball
name = "energy ball"
@@ -44,7 +45,7 @@ var/list/blacklisted_tesla_types = list(/obj/machinery/atmospherics,
move_the_basket_ball(amount_to_move)
pixel_x = 0
pixel_y = 0
- playsound(src.loc, 'sound/magic/lightningbolt.ogg', 100, 1, extrarange = 5)
+ playsound(src.loc, 'sound/magic/lightningbolt.ogg', 100, 1, extrarange = 15)
tesla_zap(src, 7, what_does_the_scouter_say_about_the_balls_power_level)
pixel_x = -32
pixel_y = -32
@@ -69,7 +70,7 @@ var/list/blacklisted_tesla_types = list(/obj/machinery/atmospherics,
/obj/singularity/energy_ball/proc/handle_energy()
if(energy >= 300)
energy -= 300
- playsound(src.loc, 'sound/magic/lightning_chargeup.ogg', 100, 1, extrarange = 5)
+ playsound(src.loc, 'sound/magic/lightning_chargeup.ogg', 100, 1, extrarange = 15)
spawn(100)
var/obj/singularity/energy_ball/EB = new(loc)
orbiting_balls.Add(EB)
@@ -80,8 +81,7 @@ var/list/blacklisted_tesla_types = list(/obj/machinery/atmospherics,
var/orbitsize = (I.Width()+I.Height())*pick(0.5,0.6,0.7)
orbitsize -= (orbitsize/world.icon_size)*(world.icon_size*0.25)
- spawn(1)
- EB.orbit(src,orbitsize, pick(FALSE,TRUE), rand(10,25), pick(3,4,5,6,36))
+ EB.orbit(src,orbitsize, pick(FALSE,TRUE), rand(10,25), pick(3,4,5,6,36))
@@ -114,7 +114,7 @@ var/list/blacklisted_tesla_types = list(/obj/machinery/atmospherics,
return closest_atom
/proc/tesla_zap(var/atom/source, zap_range = 3, power)
- if(power < 500)
+ if(power < 1000)
return
var/list/tesla_coils = list()
var/list/grounding_rods = list()
diff --git a/code/modules/procedural mapping/mapGenerator.dm b/code/modules/procedural mapping/mapGenerator.dm
index f421b1db0ee..ce6b5a18c89 100644
--- a/code/modules/procedural mapping/mapGenerator.dm
+++ b/code/modules/procedural mapping/mapGenerator.dm
@@ -38,7 +38,6 @@
if(replace)
undefineRegion()
-
map |= block(Start,End)
return map
diff --git a/code/modules/procedural mapping/mapGeneratorModules/helpers.dm b/code/modules/procedural mapping/mapGeneratorModules/helpers.dm
index 2c76915504b..ff7ea4fc8f7 100644
--- a/code/modules/procedural mapping/mapGeneratorModules/helpers.dm
+++ b/code/modules/procedural mapping/mapGeneratorModules/helpers.dm
@@ -14,11 +14,7 @@
SSair.remove_from_active(T)
for(var/turf/simulated/T in map)
if(T.air)
- T.air.oxygen = T.oxygen
- T.air.nitrogen = T.nitrogen
- T.air.carbon_dioxide = T.carbon_dioxide
- T.air.toxins = T.toxins
- T.air.temperature = T.temperature
+ T.air.copy_from_turf(T)
SSair.add_to_active(T)
//Only places atoms/turfs on area borders
diff --git a/code/modules/procedural mapping/mapGenerators/lava_river.dm b/code/modules/procedural mapping/mapGenerators/lava_river.dm
new file mode 100644
index 00000000000..124868557d9
--- /dev/null
+++ b/code/modules/procedural mapping/mapGenerators/lava_river.dm
@@ -0,0 +1,18 @@
+/datum/mapGenerator/lavaland
+ var/start_z = 5
+ modules = list(/datum/mapGeneratorModule/river)
+
+/datum/mapGenerator/lavaland/defineRegion(turf/Start, turf/End, replace = 0)
+ start_z = Start.z
+ ..()
+
+/datum/mapGeneratorModule/river
+ var/river_type = /turf/simulated/floor/plating/lava/smooth
+ var/river_nodes = 4
+ var/start_z = 5
+
+/datum/mapGeneratorModule/river/generate()
+ if(istype(mother, /datum/mapGenerator/lavaland))
+ var/datum/mapGenerator/lavaland/L = mother
+ start_z = L.start_z
+ spawn_rivers(start_z, river_nodes, river_type)
diff --git a/code/modules/projectiles/ammunition/boxes.dm b/code/modules/projectiles/ammunition/boxes.dm
index a7d14066c38..0430ef12f13 100644
--- a/code/modules/projectiles/ammunition/boxes.dm
+++ b/code/modules/projectiles/ammunition/boxes.dm
@@ -1,5 +1,6 @@
/obj/item/ammo_box/a357
name = "speed loader (.357)"
+ desc = "Designed to quickly reload revolvers."
icon_state = "357"
ammo_type = /obj/item/ammo_casing/a357
max_ammo = 7
@@ -7,6 +8,7 @@
/obj/item/ammo_box/c38
name = "speed loader (.38)"
+ desc = "Designed to quickly reload revolvers."
icon_state = "38"
ammo_type = /obj/item/ammo_casing/c38
max_ammo = 6
diff --git a/code/modules/projectiles/ammunition/magazines.dm b/code/modules/projectiles/ammunition/magazines.dm
index ea35c457cb9..a5ff5364b5e 100644
--- a/code/modules/projectiles/ammunition/magazines.dm
+++ b/code/modules/projectiles/ammunition/magazines.dm
@@ -154,6 +154,7 @@
/obj/item/ammo_box/magazine/m10mm
name = "pistol magazine (10mm)"
+ desc = "A gun magazine."
icon_state = "9x19p"
origin_tech = "combat=2"
ammo_type = /obj/item/ammo_casing/c10mm
@@ -272,6 +273,7 @@ obj/item/ammo_box/magazine/tommygunm45
/obj/item/ammo_box/magazine/m12g
name = "shotgun magazine (12g slugs)"
+ desc = "A drum magazine."
icon_state = "m12gb"
ammo_type = /obj/item/ammo_casing/shotgun
origin_tech = "combat=3;syndicate=1"
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index 51e0a7822be..6d6a36df584 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -105,8 +105,7 @@
/obj/item/weapon/gun/proc/shoot_live_shot(mob/living/user as mob|obj, pointblank = 0, mob/pbtarget = null, message = 1)
if(recoil)
- spawn()
- shake_camera(user, recoil + 1, recoil)
+ shake_camera(user, recoil + 1, recoil)
if(suppressed)
playsound(user, fire_sound, 10, 1)
diff --git a/code/modules/projectiles/guns/grenade_launcher.dm b/code/modules/projectiles/guns/grenade_launcher.dm
index 2c38f1b8c85..3c4657947d6 100644
--- a/code/modules/projectiles/guns/grenade_launcher.dm
+++ b/code/modules/projectiles/guns/grenade_launcher.dm
@@ -41,7 +41,7 @@
return
if(grenades.len)
- spawn(0) fire_grenade(target,user)
+ fire_grenade(target,user)
else
usr << "The grenade launcher is empty."
@@ -51,7 +51,7 @@
var/obj/item/weapon/grenade/chem_grenade/F = grenades[1] //Now with less copypasta!
grenades -= F
F.loc = user.loc
- F.throw_at(target, 30, 2,user)
+ F.throw_at_fast(target, 30, 2,user)
message_admins("[key_name_admin(user)] fired a grenade ([F.name]) from a grenade launcher ([src.name]).")
log_game("[key_name(user)] fired a grenade ([F.name]) from a grenade launcher ([src.name]).")
F.active = 1
diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm
index 80f135be1ba..681db297fc3 100644
--- a/code/modules/projectiles/guns/projectile/automatic.dm
+++ b/code/modules/projectiles/guns/projectile/automatic.dm
@@ -37,7 +37,6 @@
if(istype(AM, mag_type))
if(magazine)
user << "You perform a tactical reload on \the [src], replacing the magazine."
- user.say(pick("I'M RELOADING!!!", "NEW MAG IN!!!", "CHANGING MAG!!!", "COVER ME! I'M RELOADING!!!", "RELOADING!!!"))
magazine.loc = get_turf(src.loc)
magazine.update_icon()
magazine = null
@@ -233,4 +232,4 @@
fire_sound = 'sound/weapons/Gunshot_smg.ogg'
can_suppress = 0
burst_size = 3
- fire_delay = 1
+ fire_delay = 1
\ No newline at end of file
diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm
index ee8f3198a85..5d5bd451982 100644
--- a/code/modules/projectiles/guns/projectile/shotgun.dm
+++ b/code/modules/projectiles/guns/projectile/shotgun.dm
@@ -217,6 +217,7 @@
sawn_desc = "I'm just here for the gasoline."
unique_rename = 0
unique_reskin = 0
+ var/slung = 0
/obj/item/weapon/gun/projectile/revolver/doublebarrel/improvised/attackby(obj/item/A, mob/user, params)
..()
@@ -226,11 +227,18 @@
slot_flags = SLOT_BACK
icon_state = "ishotgunsling"
user << "You tie the lengths of cable to the shotgun, making a sling."
+ slung = 1
update_icon()
else
user << "You need at least ten lengths of cable if you want to make a sling!"
return
+/obj/item/weapon/gun/projectile/revolver/doublebarrel/improvised/update_icon()
+ ..()
+ if (slung && (slot_flags & SLOT_BELT) )
+ slung = 0
+ icon_state = "ishotgun-sawn"
+
// Sawing guns related procs //
/obj/item/weapon/gun/projectile/proc/blow_up(mob/user)
diff --git a/code/modules/projectiles/guns/projectile/sniper.dm b/code/modules/projectiles/guns/projectile/sniper.dm
index f1690cbbfc0..33694ceb8d6 100644
--- a/code/modules/projectiles/guns/projectile/sniper.dm
+++ b/code/modules/projectiles/guns/projectile/sniper.dm
@@ -148,6 +148,7 @@
icon_state = ".50"
/obj/item/projectile/bullet/sniper/penetrator
+ icon_state = "gauss"
name = "penetrator round"
damage = 60
forcedodge = 1
@@ -172,7 +173,7 @@
icon_state = ".50"
/obj/item/projectile/bullet/sniper/accelerator
- icon_state = "red_laser"
+ icon_state = "gaussweak"
name = "accelerator round"
damage = 5
stun = 0
@@ -183,7 +184,7 @@
..()
damage += 5
if(damage > 40)
- icon_state = "heavylaser"
+ icon_state = "gaussstrong"
breakthings = TRUE
else if(damage > 25)
- icon_state = "laser"
+ icon_state = "gauss"
diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm
index 7cf1c1ba5b2..c3a3cedada1 100644
--- a/code/modules/projectiles/projectile.dm
+++ b/code/modules/projectiles/projectile.dm
@@ -122,18 +122,18 @@
/obj/item/projectile/proc/fire()
- spawn(1)
- while(loc)
- if(!paused)
- if((!( current ) || loc == current))
- current = locate(Clamp(x+xo,1,world.maxx),Clamp(y+yo,1,world.maxy),z)
- step_towards(src, current)
- if(original && (original.layer>=2.75) || ismob(original))
- if(loc == get_turf(original))
- if(!(original in permutated))
- Bump(original, 1)
- Range()
- sleep(1)
+ set waitfor = 0
+ while(loc)
+ if(!paused)
+ if((!( current ) || loc == current))
+ current = locate(Clamp(x+xo,1,world.maxx),Clamp(y+yo,1,world.maxy),z)
+ step_towards(src, current)
+ if(original && (original.layer>=2.75) || ismob(original))
+ if(loc == get_turf(original))
+ if(!(original in permutated))
+ Bump(original, 1)
+ Range()
+ sleep(1)
/obj/item/projectile/Crossed(atom/movable/AM) //A mob moving on a tile with a projectile is hit by it.
diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm
index e26987c1e31..5a30450ea97 100644
--- a/code/modules/reagents/chemistry/holder.dm
+++ b/code/modules/reagents/chemistry/holder.dm
@@ -77,24 +77,25 @@ var/const/INJECT = 5 //injection
if(current_list_element > reagent_list.len) current_list_element = 1
var/datum/reagent/current_reagent = reagent_list[current_list_element]
- src.remove_reagent(current_reagent.id, 1)
+ remove_reagent(current_reagent.id, 1)
current_list_element++
total_transfered++
- src.update_total()
+ update_total()
handle_reactions()
return total_transfered
/datum/reagents/proc/remove_all(amount = 1)
- var/part = amount / src.total_volume
- for (var/datum/reagent/current_reagent in src.reagent_list)
- var/current_reagent_transfer = current_reagent.volume * part
- src.remove_reagent(current_reagent.id, current_reagent_transfer)
+ if(total_volume > 0)
+ var/part = amount / total_volume
+ for(var/datum/reagent/current_reagent in reagent_list)
+ var/current_reagent_transfer = current_reagent.volume * part
+ remove_reagent(current_reagent.id, current_reagent_transfer)
- src.update_total()
- src.handle_reactions()
- return amount
+ update_total()
+ handle_reactions()
+ return amount
/datum/reagents/proc/get_master_reagent_name()
var/the_name = null
diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
index cb9f8e0894e..d5784519bed 100644
--- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
@@ -85,10 +85,11 @@
return
ui_interact(user)
-/obj/machinery/chem_dispenser/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0)
- ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open)
+/obj/machinery/chem_dispenser/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
+ datum/tgui/master_ui = null, datum/ui_state/state = default_state)
+ ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if (!ui)
- ui = new(user, src, ui_key, "chem_dispenser", name, 412, 600)
+ ui = new(user, src, ui_key, "chem_dispenser", name, 550, 550, master_ui, state)
ui.open()
/obj/machinery/chem_dispenser/get_ui_data()
@@ -129,11 +130,9 @@
switch(action)
if("amount")
- amount = round(text2num(params["amount"]), 5) // round to nearest 5
- if (amount < 0) // Since the user can actually type the commands himself, some sanity checking
- amount = 0
- if (amount > 100)
- amount = 100
+ var/amount = text2num(params["amount"])
+ if(amount in beaker.possible_transfer_amounts)
+ src.amount = amount
if("dispense")
if(beaker && dispensable_reagents.Find(params["reagent"]))
var/datum/reagents/R = beaker.reagents
diff --git a/code/modules/reagents/chemistry/machinery/chem_heater.dm b/code/modules/reagents/chemistry/machinery/chem_heater.dm
index eacd2fba7e9..c44489ff699 100644
--- a/code/modules/reagents/chemistry/machinery/chem_heater.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_heater.dm
@@ -96,10 +96,11 @@
return
ui_interact(user)
-/obj/machinery/chem_heater/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0)
- ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open)
+/obj/machinery/chem_heater/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
+ datum/tgui/master_ui = null, datum/ui_state/state = default_state)
+ ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if (!ui)
- ui = new(user, src, ui_key, "chem_heater", name, 275, 400)
+ ui = new(user, src, ui_key, "chem_heater", name, 275, 400, master_ui, state)
ui.open()
/obj/machinery/chem_heater/get_ui_data()
diff --git a/code/modules/reagents/chemistry/reagents/blob_reagents.dm b/code/modules/reagents/chemistry/reagents/blob_reagents.dm
index 4704c01e251..ebb389a9482 100644
--- a/code/modules/reagents/chemistry/reagents/blob_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/blob_reagents.dm
@@ -334,15 +334,15 @@
if(!X.anchored)
var/distance = get_dist(X, pull)
var/moving_power = max(range_power - distance, 1)
- spawn(0)
- if(moving_power > 2) //if the vortex is powerful and we're close, we get thrown
- if(setting_type)
- var/atom/throw_target = get_edge_target_turf(X, get_dir(X, get_step_away(X, pull)))
- var/throw_range = 5 - distance
- X.throw_at(throw_target, throw_range, 1)
- else
- X.throw_at(pull, distance, 1)
+ if(moving_power > 2) //if the vortex is powerful and we're close, we get thrown
+ if(setting_type)
+ var/atom/throw_target = get_edge_target_turf(X, get_dir(X, get_step_away(X, pull)))
+ var/throw_range = 5 - distance
+ X.throw_at_fast(throw_target, throw_range, 1)
else
+ X.throw_at_fast(pull, distance, 1)
+ else
+ spawn(0)
if(setting_type)
for(var/i in 0 to moving_power-1)
sleep(2)
diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm
index 39986a13f8f..2f624d883d2 100644
--- a/code/modules/reagents/chemistry/reagents/other_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm
@@ -362,8 +362,14 @@
H.visible_message("[H] falls to the ground and screams as their skin bubbles and froths!") //'froths' sounds painful when used with SKIN.
H.Weaken(3)
sleep(30)
- var/list/blacklisted_species = list(/datum/species/zombie, /datum/species/skeleton, /datum/species/human, /datum/species/golem, /datum/species/golem/adamantine, /datum/species/shadow, /datum/species/shadow/ling, /datum/species/plasmaman)
- var/list/possible_morphs = subtypesof(/datum/species/) - blacklisted_species
+ //var/list/blacklisted_species = list(
+
+ var/list/possible_morphs = list()
+ for(var/type in subtypesof(/datum/species))
+ var/datum/species/S = type
+ if(initial(S.blacklisted))
+ continue
+ possible_morphs += S
var/datum/species/mutation = pick(possible_morphs)
if(prob(90) && mutation && H.dna.species != /datum/species/golem && H.dna.species != /datum/species/golem/adamantine)
H << "The pain subsides. You feel... different."
diff --git a/code/modules/reagents/chemistry/recipes.dm b/code/modules/reagents/chemistry/recipes.dm
index 366ca9e7403..c03e3cf066f 100644
--- a/code/modules/reagents/chemistry/recipes.dm
+++ b/code/modules/reagents/chemistry/recipes.dm
@@ -70,14 +70,14 @@ var/list/chemical_mob_spawn_nicecritters = list() // and possible friendly mobs
if(!X.anchored)
var/distance = get_dist(X, T)
var/moving_power = max(range - distance, 1)
- spawn(0) //so everything moves at the same time.
- if(moving_power > 2) //if the vortex is powerful and we're close, we get thrown
- if(setting_type)
- var/atom/throw_target = get_edge_target_turf(X, get_dir(X, get_step_away(X, T)))
- X.throw_at(throw_target, moving_power, 1)
- else
- X.throw_at(T, moving_power, 1)
+ if(moving_power > 2) //if the vortex is powerful and we're close, we get thrown
+ if(setting_type)
+ var/atom/throw_target = get_edge_target_turf(X, get_dir(X, get_step_away(X, T)))
+ X.throw_at_fast(throw_target, moving_power, 1)
else
+ X.throw_at_fast(T, moving_power, 1)
+ else
+ spawn(0) //so everything moves at the same time.
if(setting_type)
for(var/i = 0, i < moving_power, i++)
sleep(2)
diff --git a/code/modules/reagents/chemistry/recipes/slime_extracts.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm
index aa84460deb4..cbc3d93db26 100644
--- a/code/modules/reagents/chemistry/recipes/slime_extracts.dm
+++ b/code/modules/reagents/chemistry/recipes/slime_extracts.dm
@@ -100,10 +100,9 @@
/datum/chemical_reaction/slimecrit/on_reaction(datum/reagents/holder)
feedback_add_details("slime_cores_used","[type]")
- for(var/mob/O in viewers(get_turf(holder.my_atom), null))
- O.show_message(text("The slime extract begins to vibrate violently !"), 1)
+ var/turf/T = get_turf(holder.my_atom)
+ T.visible_message("The slime extract begins to vibrate violently !")
spawn(50)
-
chemical_mob_spawn(holder, 5, "Gold Slime")
/datum/chemical_reaction/slimecritlesser
@@ -117,10 +116,9 @@
/datum/chemical_reaction/slimecritlesser/on_reaction(datum/reagents/holder)
feedback_add_details("slime_cores_used","[type]")
- for(var/mob/O in viewers(get_turf(holder.my_atom), null))
- O.show_message(text("The slime extract begins to vibrate violently !"), 1)
+ var/turf/T = get_turf(holder.my_atom)
+ T.visible_message("The slime extract begins to vibrate violently !")
spawn(50)
-
chemical_mob_spawn(holder, 3, "Lesser Gold Slime", "neutral")
/datum/chemical_reaction/slimecritfriendly
@@ -134,10 +132,9 @@
/datum/chemical_reaction/slimecritfriendly/on_reaction(datum/reagents/holder)
feedback_add_details("slime_cores_used","[type]")
- for(var/mob/O in viewers(get_turf(holder.my_atom), null))
- O.show_message(text("The slime extract begins to vibrate adorably !"), 1)
+ var/turf/T = get_turf(holder.my_atom)
+ T.visible_message("The slime extract begins to vibrate adorably !")
spawn(50)
-
chemical_mob_spawn(holder, 1, "Friendly Gold Slime", "neutral")
//Silver
@@ -262,8 +259,8 @@
/datum/chemical_reaction/slimefreeze/on_reaction(datum/reagents/holder)
feedback_add_details("slime_cores_used","[type]")
- for(var/mob/O in viewers(get_turf(holder.my_atom), null))
- O.show_message(text("The slime extract begins to vibrate violently !"), 1)
+ var/turf/T = get_turf(holder.my_atom)
+ T.visible_message("The slime extract begins to vibrate adorably !")
spawn(50)
if(holder && holder.my_atom)
playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
@@ -310,8 +307,8 @@
/datum/chemical_reaction/slimefire/on_reaction(datum/reagents/holder)
feedback_add_details("slime_cores_used","[type]")
- for(var/mob/O in viewers(get_turf(holder.my_atom), null))
- O.show_message(text("The slime extract begins to vibrate violently !"), 1)
+ var/turf/TU = get_turf(holder.my_atom)
+ TU.visible_message("The slime extract begins to vibrate adorably !")
spawn(50)
if(holder && holder.my_atom)
var/turf/simulated/T = get_turf(holder.my_atom)
@@ -359,8 +356,8 @@
/datum/chemical_reaction/slimeglow/on_reaction(datum/reagents/holder)
feedback_add_details("slime_cores_used","[type]")
- for(var/mob/O in viewers(get_turf(holder.my_atom), null))
- O.show_message(text("The slime begins to emit a soft light. Squeezing it will cause it to grow brightly."), 1)
+ var/turf/T = get_turf(holder.my_atom)
+ T.visible_message("The slime begins to emit a soft light. Squeezing it will cause it to grow brightly.")
var/obj/item/device/flashlight/slime/F = new /obj/item/device/flashlight/slime
F.loc = get_turf(holder.my_atom)
@@ -438,8 +435,7 @@
feedback_add_details("slime_cores_used","[type]")
for(var/mob/living/simple_animal/slime/slime in viewers(get_turf(holder.my_atom), null))
slime.rabid = 1
- for(var/mob/O in viewers(get_turf(holder.my_atom), null))
- O.show_message(text("The [slime] is driven into a frenzy!"), 1)
+ slime.visible_message("The [slime] is driven into a frenzy!")
/datum/chemical_reaction/slimespeed
@@ -498,8 +494,8 @@
/datum/chemical_reaction/slimeexplosion/on_reaction(datum/reagents/holder)
feedback_add_details("slime_cores_used","[type]")
- for(var/mob/O in viewers(get_turf(holder.my_atom), null))
- O.show_message(text("The slime extract begins to vibrate violently !"), 1)
+ var/turf/T = get_turf(holder.my_atom)
+ T.visible_message("The slime extract begins to vibrate violently !")
spawn(50)
if(holder && holder.my_atom)
explosion(get_turf(holder.my_atom), 1 ,3, 6)
diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm
index eb72b18724f..524348b117c 100644
--- a/code/modules/recycling/conveyor2.dm
+++ b/code/modules/recycling/conveyor2.dm
@@ -104,15 +104,15 @@
use_power(100)
affecting = loc.contents - src // moved items will be all in loc
- spawn(1) // slight delay to prevent infinite propagation due to map order //TODO: please no spawn() in process(). It's a very bad idea
- var/items_moved = 0
- for(var/atom/movable/A in affecting)
- if(!A.anchored)
- if(A.loc == src.loc) // prevents the object from being affected if it's not currently here.
- step(A,movedir)
- items_moved++
- if(items_moved >= 10)
- break
+ sleep(1) // slight delay to prevent infinite propagation due to map order
+ var/items_moved = 0
+ for(var/atom/movable/A in affecting)
+ if(!A.anchored)
+ if(A.loc == src.loc) // prevents the object from being affected if it's not currently here.
+ step(A,movedir)
+ items_moved++
+ if(items_moved >= 10)
+ break
// attack with item, place item on conveyor
/obj/machinery/conveyor/attackby(obj/item/I, mob/user, params)
diff --git a/code/modules/recycling/disposal-structures.dm b/code/modules/recycling/disposal-structures.dm
index 24e12478be0..d818c88567c 100644
--- a/code/modules/recycling/disposal-structures.dm
+++ b/code/modules/recycling/disposal-structures.dm
@@ -62,13 +62,13 @@
loc = D.trunk
active = 1
dir = DOWN
- spawn(1)
- move() // spawn off the movement process
+ move()
return
// movement process, persists while holder is moving through pipes
/obj/structure/disposalholder/proc/move()
+ set waitfor = 0
var/obj/structure/disposalpipe/last
while(active)
var/obj/structure/disposalpipe/curr = loc
diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm
index 346264b7354..eac5a5259e0 100644
--- a/code/modules/research/experimentor.dm
+++ b/code/modules/research/experimentor.dm
@@ -170,28 +170,25 @@
if(!linked_console)
dat += "Scan for R&D Console
"
if(loaded_item)
- if(recentlyExperimented)
- dat += "The [src] is still resetting!"
- else
- dat += "Loaded Item: [loaded_item]
"
- dat += "Technology:
"
- var/list/D = ConvertReqString2List(loaded_item.origin_tech)
- for(var/T in D)
- dat += "[T]
"
- dat += "
Available tests:"
- dat += "
Poke"
- dat += "
Irradiate"
- dat += "
Gas"
- dat += "
Burn"
- dat += "
Freeze"
- dat += "
Destroy
"
- if(istype(loaded_item,/obj/item/weapon/relic))
- dat += "
Discover
"
- dat += "
Eject"
+ dat += "Loaded Item: [loaded_item]
"
+ dat += "Technology:
"
+ var/list/D = ConvertReqString2List(loaded_item.origin_tech)
+ for(var/T in D)
+ dat += "[T]
"
+ dat += "
Available tests:"
+ dat += "
Poke"
+ dat += "
Irradiate"
+ dat += "
Gas"
+ dat += "
Burn"
+ dat += "
Freeze"
+ dat += "
Destroy
"
+ if(istype(loaded_item,/obj/item/weapon/relic))
+ dat += "
Discover
"
+ dat += "
Eject"
else
dat += "Nothing loaded."
dat += "
Refresh
"
- dat += "
Close
"
+ dat += "
Close
"
var/datum/browser/popup = new(user, "experimentor","Experimentor", 700, 400, src)
popup.set_content(dat)
popup.open()
@@ -340,7 +337,7 @@
warn_admins(usr, "[chosenchem] smoke")
investigate_log("Experimentor has released [chosenchem] smoke!", "experimentor")
if(prob(EFFECT_PROB_LOW-badThingCoeff))
- visible_message("[src] malfunctions, spewing harmless gas.>")
+ visible_message("[src] malfunctions, spewing harmless gas.")
throwSmoke(src.loc)
if(prob(EFFECT_PROB_MEDIUM-badThingCoeff))
visible_message("[src] melts [exp_on], ionizing the air around it!")
@@ -544,8 +541,9 @@
var/scantype = href_list["function"]
var/obj/item/process = locate(href_list["item"]) in src
- if(scantype == "close")
+ if(href_list["close"])
usr << browse(null, "window=experimentor")
+ return
else if(scantype == "search")
var/obj/machinery/computer/rdconsole/D = locate(/obj/machinery/computer/rdconsole) in oview(3,src)
if(D)
@@ -558,6 +556,14 @@
if(recentlyExperimented)
usr << "[src] has been used too recently!"
return
+ else if(!loaded_item)
+ updateUsrDialog() //Set the interface to unloaded mode
+ usr << "[src] is not currently loaded!"
+ return
+ else if(!process || process != loaded_item) //Interface exploit protection (such as hrefs or swapping items with interface set to old item)
+ updateUsrDialog() //Refresh interface to update interface hrefs
+ usr << "Interface failure detected in [src]. Please try again."
+ return
var/dotype
if(text2num(scantype) == SCANTYPE_DISCOVER)
dotype = SCANTYPE_DISCOVER
@@ -571,8 +577,7 @@
for(var/T in temp_tech)
linked_console.files.UpdateTech(T, temp_tech[T])
linked_console.files.UpdateDesigns(process,process.type)
- if(scantype != "close")
- src.updateUsrDialog()
+ src.updateUsrDialog()
return
//~~~~~~~~Admin logging proc, aka the Powergamer Alarm~~~~~~~~
diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm
index 8c3330b9045..4b8839d20e1 100644
--- a/code/modules/shuttle/shuttle.dm
+++ b/code/modules/shuttle/shuttle.dm
@@ -374,7 +374,7 @@
//close open doors
if(istype(O, /obj/machinery/door))
var/obj/machinery/door/Door = O
- spawn(-1)
+ spawn(0)
if(Door)
Door.close()
else if (istype(AM,/mob))
@@ -385,11 +385,10 @@
//docking turbulence
if(M.client)
- spawn(0)
- if(M.buckled)
- shake_camera(M, 2, 1) // turn it down a bit come on
- else
- shake_camera(M, 7, 1)
+ if(M.buckled)
+ shake_camera(M, 2, 1) // turn it down a bit come on
+ else
+ shake_camera(M, 7, 1)
if(istype(M, /mob/living/carbon))
if(!M.buckled)
M.Weaken(3)
@@ -444,7 +443,7 @@
if(T)
var/obj/machinery/door/Door = locate() in T
if(Door)
- spawn(-1)
+ spawn(0)
Door.close()
/obj/docking_port/mobile/proc/roadkill(list/L, dir, x, y)
@@ -532,6 +531,7 @@
var/shuttleId
var/possible_destinations = ""
var/admin_controlled
+ var/no_destination_swap = 0
/obj/machinery/computer/shuttle/New(location, obj/item/weapon/circuitboard/shuttle/C)
..()
@@ -578,6 +578,11 @@
return
if(href_list["move"])
+ if(no_destination_swap)
+ var/obj/docking_port/mobile/M = SSshuttle.getShuttle(shuttleId)
+ if(M.mode != SHUTTLE_IDLE)
+ usr << "Shuttle already in transit."
+ return
switch(SSshuttle.moveShuttle(shuttleId, href_list["move"], 1))
if(0) usr << "Shuttle received message and will be sent shortly."
if(1) usr << "Invalid shuttle requested."
diff --git a/code/modules/tgui/external.dm b/code/modules/tgui/external.dm
index 1efa5cee8fe..bb447fa8847 100644
--- a/code/modules/tgui/external.dm
+++ b/code/modules/tgui/external.dm
@@ -17,9 +17,7 @@
* optional master_ui datum/tgui The parent UI.
* optional state datum/ui_state The state used to determine status.
**/
-/atom/movable/proc/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, \
- force_open = 0, datum/tgui/master_ui = null, \
- datum/ui_state/state = default_state)
+/datum/proc/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = default_state)
return -1 // Sorta implemented.
/**
@@ -32,7 +30,7 @@
*
* return list Data to be sent to the UI.
**/
-/atom/movable/proc/get_ui_data(mob/user)
+/datum/proc/get_ui_data(mob/user)
return list() // Not implemented.
@@ -47,7 +45,7 @@
*
* return bool If the UI should be updated or not.
**/
-/atom/movable/proc/ui_act(action, list/params)
+/datum/proc/ui_act(action, list/params)
return // Not implemented.
@@ -55,9 +53,10 @@
* private
*
* The UI's host object (usually src_object).
- * Used internally by ui_state(s).
+ * This allows modules/datums to have the UI attached to them,
+ * and be a part of another object.
**/
-/atom/proc/ui_host()
+/datum/proc/ui_host()
return src
/**
@@ -75,21 +74,17 @@
*
* required uiref ref The UI that was closed.
**/
-/client/verb/uiclose(uiref as text)
+/client/verb/uiclose(ref as text)
// Name the verb, and hide it from the user panel.
set name = "uiclose"
set hidden = 1
// Get the UI based on the ref.
- var/datum/tgui/ui = locate(uiref)
+ var/datum/tgui/ui = locate(ref)
// If we found the UI, close it.
if(istype(ui))
ui.close()
- // If there is a custom ref, call that atom's Topic().
- if(ui.ref)
- var/href = "close=1"
- src.Topic(href, params2list(href), ui.ref)
- // Otherwise, if we use the legacy logic, unset the mob's machine.
- else if(src && src.mob)
+ // Unset machine just to be sure.
+ if(src && src.mob)
src.mob.unset_machine()
\ No newline at end of file
diff --git a/code/modules/tgui/states/admin.dm b/code/modules/tgui/states/admin.dm
index c9a3bb467c4..62e18bb6b96 100644
--- a/code/modules/tgui/states/admin.dm
+++ b/code/modules/tgui/states/admin.dm
@@ -6,7 +6,7 @@
/var/global/datum/ui_state/admin_state/admin_state = new()
-/datum/ui_state/admin_state/can_use_topic(atom/movable/src_object, mob/user)
+/datum/ui_state/admin_state/can_use_topic(src_object, mob/user)
if(check_rights_for(user.client, R_ADMIN))
return UI_INTERACTIVE
return UI_CLOSE
diff --git a/code/modules/tgui/states/conscious.dm b/code/modules/tgui/states/conscious.dm
index 1b781a458d7..9a5c1a5e54f 100644
--- a/code/modules/tgui/states/conscious.dm
+++ b/code/modules/tgui/states/conscious.dm
@@ -6,7 +6,7 @@
/var/global/datum/ui_state/conscious_state/conscious_state = new()
-/datum/ui_state/conscious_state/can_use_topic(atom/movable/src_object, mob/user)
+/datum/ui_state/conscious_state/can_use_topic(src_object, mob/user)
if(user.stat == CONSCIOUS)
return UI_INTERACTIVE
return UI_CLOSE
diff --git a/code/modules/tgui/states/contained.dm b/code/modules/tgui/states/contained.dm
index 20cda3241e0..6cb88abea28 100644
--- a/code/modules/tgui/states/contained.dm
+++ b/code/modules/tgui/states/contained.dm
@@ -6,7 +6,7 @@
/var/global/datum/ui_state/contained_state/contained_state = new()
-/datum/ui_state/contained_state/can_use_topic(atom/movable/src_object, mob/user)
+/datum/ui_state/contained_state/can_use_topic(atom/src_object, mob/user)
if(!src_object.contains(user))
return UI_CLOSE
return user.shared_ui_interaction(src_object)
diff --git a/code/modules/tgui/states/deep_inventory.dm b/code/modules/tgui/states/deep_inventory.dm
index 4fef9ad5b3c..70f2a59992e 100644
--- a/code/modules/tgui/states/deep_inventory.dm
+++ b/code/modules/tgui/states/deep_inventory.dm
@@ -1,12 +1,12 @@
/**
* tgui state: deep_inventory_state
*
- * Checks that the src_object is in the user's fist-level (backpack, webbing, etc) inventory.
+ * Checks that the src_object is in the user's deep (backpack, box, toolbox, etc) inventory.
**/
/var/global/datum/ui_state/deep_inventory_state/deep_inventory_state = new()
-/datum/ui_state/deep_inventory_state/can_use_topic(atom/movable/src_object, mob/user)
+/datum/ui_state/deep_inventory_state/can_use_topic(src_object, mob/user)
if(!user.contains(src_object))
return UI_CLOSE
return user.shared_ui_interaction(src_object)
diff --git a/code/modules/tgui/states/default.dm b/code/modules/tgui/states/default.dm
index 8e1c3e8dec9..56ec71b7cc8 100644
--- a/code/modules/tgui/states/default.dm
+++ b/code/modules/tgui/states/default.dm
@@ -6,20 +6,20 @@
/var/global/datum/ui_state/default/default_state = new()
-/datum/ui_state/default/can_use_topic(atom/movable/src_object, mob/user)
+/datum/ui_state/default/can_use_topic(src_object, mob/user)
return user.default_can_use_topic(src_object) // Call the individual mob-overriden procs.
-/mob/proc/default_can_use_topic(atom/movable/src_object)
+/mob/proc/default_can_use_topic(src_object)
return UI_CLOSE // Don't allow interaction by default.
-/mob/living/default_can_use_topic(atom/movable/src_object)
+/mob/living/default_can_use_topic(src_object)
. = shared_ui_interaction(src_object)
- if(. > UI_CLOSE)
- . = min(., shared_living_ui_distance(src_object)) // Check the distance...
+ if(. > UI_CLOSE && loc)
+ . = min(., loc.contents_ui_distance(src_object, src)) // Check the distance...
if(. == UI_INTERACTIVE) // Non-human living mobs can only look, not touch.
return UI_UPDATE
-/mob/living/carbon/human/default_can_use_topic(atom/movable/src_object)
+/mob/living/carbon/human/default_can_use_topic(src_object)
. = shared_ui_interaction(src_object)
if(. > UI_CLOSE)
. = min(., shared_living_ui_distance(src_object)) // Check the distance...
@@ -27,7 +27,7 @@
if(prob(getBrainLoss()))
return UI_UPDATE
-/mob/living/silicon/robot/default_can_use_topic(atom/movable/src_object)
+/mob/living/silicon/robot/default_can_use_topic(src_object)
. = shared_ui_interaction(src_object)
if(. <= UI_DISABLED)
return
@@ -37,7 +37,7 @@
return UI_INTERACTIVE
return UI_DISABLED // Otherwise they can keep the UI open.
-/mob/living/silicon/ai/default_can_use_topic(atom/movable/src_object)
+/mob/living/silicon/ai/default_can_use_topic(src_object)
. = shared_ui_interaction(src_object)
if(. < UI_INTERACTIVE)
return
@@ -47,12 +47,12 @@
return UI_INTERACTIVE
return UI_CLOSE
-/mob/living/simple_animal/drone/default_can_use_topic(atom/movable/src_object)
+/mob/living/simple_animal/drone/default_can_use_topic(src_object)
. = shared_ui_interaction(src_object)
if(. > UI_CLOSE)
. = min(., shared_living_ui_distance(src_object)) // Drones can only use things they're near.
-/mob/living/silicon/pai/default_can_use_topic(atom/movable/src_object)
+/mob/living/silicon/pai/default_can_use_topic(src_object)
// pAIs can only use themselves and the owner's radio.
if((src_object == src || src_object == radio) && !stat)
return UI_INTERACTIVE
diff --git a/code/modules/tgui/states/hands.dm b/code/modules/tgui/states/hands.dm
index 536a90597e4..11b1c021cc2 100644
--- a/code/modules/tgui/states/hands.dm
+++ b/code/modules/tgui/states/hands.dm
@@ -6,15 +6,15 @@
/var/global/datum/ui_state/hands_state/hands_state = new()
-/datum/ui_state/hands_state/can_use_topic(atom/movable/src_object, mob/user)
+/datum/ui_state/hands_state/can_use_topic(src_object, mob/user)
. = user.shared_ui_interaction(src_object)
if(. > UI_CLOSE)
return min(., user.hands_can_use_topic(src_object))
-/mob/proc/hands_can_use_topic(atom/movable/src_object)
+/mob/proc/hands_can_use_topic(src_object)
return UI_CLOSE
-/mob/living/hands_can_use_topic(atom/movable/src_object)
+/mob/living/hands_can_use_topic(src_object)
if(src_object in get_both_hands(src))
return UI_INTERACTIVE
return UI_CLOSE
\ No newline at end of file
diff --git a/code/modules/tgui/states/inventory.dm b/code/modules/tgui/states/inventory.dm
index a5f7233f00d..02870296338 100644
--- a/code/modules/tgui/states/inventory.dm
+++ b/code/modules/tgui/states/inventory.dm
@@ -6,7 +6,7 @@
/var/global/datum/ui_state/inventory_state/inventory_state = new()
-/datum/ui_state/inventory_state/can_use_topic(atom/movable/src_object, mob/user)
+/datum/ui_state/inventory_state/can_use_topic(src_object, mob/user)
if(!(src_object in user))
return UI_CLOSE
return user.shared_ui_interaction(src_object)
diff --git a/code/modules/tgui/states/notcontained.dm b/code/modules/tgui/states/notcontained.dm
index 8df75b57626..0b6462fe331 100644
--- a/code/modules/tgui/states/notcontained.dm
+++ b/code/modules/tgui/states/notcontained.dm
@@ -6,21 +6,21 @@
/var/global/datum/ui_state/notcontained_state/notcontained_state = new()
-/datum/ui_state/notcontained_state/can_use_topic(atom/movable/src_object, mob/user)
+/datum/ui_state/notcontained_state/can_use_topic(atom/src_object, mob/user)
. = user.shared_ui_interaction(src_object)
if(. > UI_CLOSE)
return min(., user.notcontained_can_use_topic(src_object))
-/mob/proc/notcontained_can_use_topic(atom/movable/src_object)
+/mob/proc/notcontained_can_use_topic(src_object)
return UI_CLOSE
-/mob/living/notcontained_can_use_topic(atom/movable/src_object)
+/mob/living/notcontained_can_use_topic(atom/src_object)
if(src_object.contains(src))
return UI_CLOSE // Close if we're inside it.
return default_can_use_topic(src_object)
-/mob/living/silicon/notcontained_can_use_topic(atom/movable/src_object)
+/mob/living/silicon/notcontained_can_use_topic(src_object)
return default_can_use_topic(src_object) // Silicons use default bevhavior.
-/mob/living/simple_animal/drone/notcontained_can_use_topic(atom/movable/src_object)
+/mob/living/simple_animal/drone/notcontained_can_use_topic(src_object)
return default_can_use_topic(src_object) // Drones use default bevhavior.
diff --git a/code/modules/tgui/states/physical.dm b/code/modules/tgui/states/physical.dm
index a3fae3b276e..5cbcae97f7c 100644
--- a/code/modules/tgui/states/physical.dm
+++ b/code/modules/tgui/states/physical.dm
@@ -6,16 +6,16 @@
/var/global/datum/ui_state/physical/physical_state = new()
-/datum/ui_state/physical/can_use_topic(atom/movable/src_object, mob/user)
+/datum/ui_state/physical/can_use_topic(src_object, mob/user)
. = user.shared_ui_interaction(src_object)
if(. > UI_CLOSE)
return min(., user.physical_can_use_topic(src_object))
-/mob/proc/physical_can_use_topic(atom/movable/src_object)
+/mob/proc/physical_can_use_topic(src_object)
return UI_CLOSE
-/mob/living/physical_can_use_topic(atom/movable/src_object)
+/mob/living/physical_can_use_topic(src_object)
return shared_living_ui_distance(src_object)
-/mob/living/silicon/physical_can_use_topic(atom/movable/src_object)
+/mob/living/silicon/physical_can_use_topic(src_object)
return max(UI_UPDATE, shared_living_ui_distance(src_object)) // Silicons can always see.
diff --git a/code/modules/tgui/states/self.dm b/code/modules/tgui/states/self.dm
index edb7c3ef300..b08fe373c6a 100644
--- a/code/modules/tgui/states/self.dm
+++ b/code/modules/tgui/states/self.dm
@@ -6,7 +6,7 @@
/var/global/datum/ui_state/self_state/self_state = new()
-/datum/ui_state/self_state/can_use_topic(atom/movable/src_object, mob/user)
+/datum/ui_state/self_state/can_use_topic(src_object, mob/user)
if(src_object != user)
return UI_CLOSE
return user.shared_ui_interaction(src_object)
diff --git a/code/modules/tgui/states/states.dm b/code/modules/tgui/states/states.dm
index 195d9394e3e..799ae542d81 100644
--- a/code/modules/tgui/states/states.dm
+++ b/code/modules/tgui/states/states.dm
@@ -7,22 +7,22 @@
/**
* public
*
- * Checks if a user can use src_object's UI, under the given state.
+ * Checks the UI state for a mob.
*
* required user mob The mob who opened/is using the UI.
* required state datum/ui_state The state to check.
*
* return UI_state The state of the UI.
**/
-/atom/proc/ui_state(mob/user, datum/ui_state/state)
+/datum/proc/ui_status(mob/user, datum/ui_state/state)
var/src_object = ui_host()
if(istype(user, /mob/dead/observer)) // Special-case ghosts.
- if(check_rights_for(user.client, R_ADMIN))
+ if(IsAdminGhost(user))
return UI_INTERACTIVE // Admins can interact anyway.
- if(get_dist(src_object, src) > user.client.view)
- return UI_CLOSE // Keep ghosts from opening too many UIs.
- return UI_UPDATE // Ghosts can only view.
+ if(get_dist(src_object, src) < user.client.view)
+ return UI_UPDATE // Keep ghosts from opening too many UIs.
+ return UI_CLOSE // Ghosts can only view.
return state.can_use_topic(src_object, user) // Check if the state allows interaction.
/**
@@ -31,12 +31,12 @@
* Checks if a user can use src_object's UI, and returns the state.
* Can call a mob proc, which allows overrides for each mob.
*
- * required src_object atom/movable The object which owns the UI.
+ * required src_object datum The object/datum which owns the UI.
* required user mob The mob who opened/is using the UI.
*
* return UI_state The state of the UI.
**/
-/datum/ui_state/proc/can_use_topic(atom/movable/src_object, mob/user)
+/datum/ui_state/proc/can_use_topic(src_object, mob/user)
return UI_CLOSE // Don't allow interaction by default.
@@ -47,7 +47,7 @@
*
* return UI_state The state of the UI.
**/
-/mob/proc/shared_ui_interaction(atom/movable/src_object)
+/mob/proc/shared_ui_interaction(src_object)
if(!client || stat) // Close UIs if mindless or dead/unconcious.
return UI_CLOSE
// Update UIs if incapicitated but concious.
@@ -55,19 +55,19 @@
return UI_UPDATE
return UI_INTERACTIVE
-/mob/living/carbon/human/shared_ui_interaction(atom/movable/src_object)
+/mob/living/carbon/human/shared_ui_interaction(src_object)
// If we have telekinesis and remain close enough, allow interaction.
if(dna.check_mutation(TK))
if(tkMaxRangeCheck(src, src_object))
return UI_INTERACTIVE
return ..()
-/mob/living/silicon/ai/shared_ui_interaction(atom/movable/src_object)
+/mob/living/silicon/ai/shared_ui_interaction(src_object)
if(lacks_power()) // Close UIs if the AI is unpowered.
return UI_CLOSE
return ..()
-/mob/living/silicon/robot/shared_ui_interaction(atom/movable/src_object)
+/mob/living/silicon/robot/shared_ui_interaction(src_object)
if(cell.charge <= 0) // Close UIs if the Borg is unpowered.
return UI_CLOSE
if(lockcharge) // Disable UIs if the Borg is locked.
@@ -81,12 +81,12 @@
* Really only used for checks outside the context of a mob.
* Otherwise, use shared_living_ui_distance().
*
- * required src_object atom/movable The object which owns the UI.
+ * required src_object The object which owns the UI.
* required user mob The mob who opened/is using the UI.
*
* return UI_state The state of the UI.
**/
-/atom/proc/contents_ui_distance(atom/movable/src_object, mob/living/user)
+/atom/proc/contents_ui_distance(src_object, mob/living/user)
return user.shared_living_ui_distance(src_object) // Just call this mob's check.
/**
diff --git a/code/modules/tgui/states/zlevel.dm b/code/modules/tgui/states/zlevel.dm
index 2f06f36c8f8..1871980a82a 100644
--- a/code/modules/tgui/states/zlevel.dm
+++ b/code/modules/tgui/states/zlevel.dm
@@ -6,7 +6,7 @@
/var/global/datum/ui_state/z_state/z_state = new()
-/datum/ui_state/z_state/can_use_topic(atom/movable/src_object, mob/user)
+/datum/ui_state/z_state/can_use_topic(src_object, mob/user)
var/turf/turf_obj = get_turf(src_object)
var/turf/turf_usr = get_turf(user)
if(!turf_obj || !turf_usr || !(turf_obj.z == turf_usr.z))
diff --git a/code/modules/tgui/subsystem.dm b/code/modules/tgui/subsystem.dm
index 14b4dd5f7e5..ffa7082bcf7 100644
--- a/code/modules/tgui/subsystem.dm
+++ b/code/modules/tgui/subsystem.dm
@@ -10,23 +10,19 @@
* Get a open UI given a user, src_object, and ui_key and try to update it with data.
*
* required user mob The mob who opened/is using the UI.
- * required src_object atom/movable The object which owns the UI.
+ * required src_object datum The object/datum which owns the UI.
* required ui_key string The ui_key of the UI.
* optional ui datum/tgui The UI to be updated, if it exists.
- * optional data list The data to update the UI with, if it exists.
* optional force_open bool If the UI should be re-opened instead of updated.
*
* return datum/tgui The found UI.
**/
-/datum/subsystem/tgui/proc/try_update_ui(mob/user, atom/movable/src_object, ui_key, datum/tgui/ui, \
- list/data = null, force_open = 0)
- if(!data)
- data = src_object.get_ui_data(user)
-
+/datum/subsystem/tgui/proc/try_update_ui(mob/user, datum/src_object, ui_key, datum/tgui/ui, force_open = 0)
if(isnull(ui)) // No UI was passed, so look for one.
ui = get_open_ui(user, src_object, ui_key)
if(!isnull(ui))
+ var/data = src_object.get_ui_data(user) // Get data from the src_object.
if(!force_open) // UI is already open; update it.
ui.push_data(data)
else // Re-open it anyways.
@@ -41,12 +37,12 @@
* Get a open UI given a user, src_object, and ui_key.
*
* required user mob The mob who opened/is using the UI.
- * required src_object atom/movable The object which owns the UI.
+ * required src_object datum The object/datum which owns the UI.
* required ui_key string The ui_key of the UI.
*
* return datum/tgui The found UI.
**/
-/datum/subsystem/tgui/proc/get_open_ui(mob/user, atom/movable/src_object, ui_key)
+/datum/subsystem/tgui/proc/get_open_ui(mob/user, datum/src_object, ui_key)
var/src_object_key = "\ref[src_object]"
if(isnull(open_uis[src_object_key]) || !istype(open_uis[src_object_key], /list))
return null // No UIs open.
@@ -64,11 +60,11 @@
*
* Update all UIs attached to src_object.
*
- * required src_object atom/movable The object which owns the UIs.
+ * required src_object datum The object/datum which owns the UIs.
*
* return int The number of UIs updated.
**/
-/datum/subsystem/tgui/proc/update_uis(atom/movable/src_object)
+/datum/subsystem/tgui/proc/update_uis(datum/src_object)
var/src_object_key = "\ref[src_object]"
if(isnull(open_uis[src_object_key]) || !istype(open_uis[src_object_key], /list))
return 0 // Couldn't find any UIs for this object.
@@ -86,11 +82,11 @@
*
* Close all UIs attached to src_object.
*
- * required src_object atom/movable The object which owns the UIs.
+ * required src_object datum The object/datum which owns the UIs.
*
* return int The number of UIs closed.
**/
-/datum/subsystem/tgui/proc/close_uis(atom/movable/src_object)
+/datum/subsystem/tgui/proc/close_uis(datum/src_object)
var/src_object_key = "\ref[src_object]"
if(isnull(open_uis[src_object_key]) || !istype(open_uis[src_object_key], /list))
return 0 // Couldn't find any UIs for this object.
@@ -109,12 +105,12 @@
* Update all UIs belonging to a user.
*
* required user mob The mob who opened/is using the UI.
- * optional src_object atom/movable If provided, only update UIs belonging this atom.
+ * optional src_object datum If provided, only update UIs belonging this src_object.
* optional ui_key string If provided, only update UIs with this UI key.
*
* return int The number of UIs updated.
**/
-/datum/subsystem/tgui/proc/update_user_uis(mob/user, atom/movable/src_object = null, ui_key = null)
+/datum/subsystem/tgui/proc/update_user_uis(mob/user, datum/src_object = null, ui_key = null)
if(isnull(user.open_uis) || !istype(user.open_uis, /list) || open_uis.len == 0)
return 0 // Couldn't find any UIs for this user.
@@ -131,12 +127,12 @@
* Close all UIs belonging to a user.
*
* required user mob The mob who opened/is using the UI.
- * optional src_object atom/movable If provided, only update UIs belonging this atom.
- * optional ui_key string If provided, only update UIs with this UI key.
+ * optional src_object datum If provided, only close UIs belonging this src_object.
+ * optional ui_key string If provided, only close UIs with this UI key.
*
* return int The number of UIs closed.
**/
-/datum/subsystem/tgui/proc/close_user_uis(mob/user, atom/movable/src_object = null, ui_key = null)
+/datum/subsystem/tgui/proc/close_user_uis(mob/user, datum/src_object = null, ui_key = null)
if(isnull(user.open_uis) || !istype(user.open_uis, /list) || open_uis.len == 0)
return 0 // Couldn't find any UIs for this user.
diff --git a/code/modules/tgui/tgui.dm b/code/modules/tgui/tgui.dm
index 8cc69f3145e..e7ef928b975 100644
--- a/code/modules/tgui/tgui.dm
+++ b/code/modules/tgui/tgui.dm
@@ -9,7 +9,7 @@
**/
/datum/tgui
var/mob/user // The mob who opened/is using the UI.
- var/atom/movable/src_object // The object which owns the UI.
+ var/datum/src_object // The object which owns the UI.
var/title // The title of te UI.
var/ui_key // The ui_key of the UI. This allows multiple UIs for one src_object.
var/window_id // The window_id for browse() and onclose().
@@ -24,7 +24,6 @@
"can_close" = 1,
"auto_format" = 0
)
- var/atom/ref = null // An extra ref to call when the window is closed.
var/style = "nanotrasen" // The style to be used for this UI.
var/interface // The interface (template) to be used for this UI.
var/auto_update = 1 // Update the UI every MC tick.
@@ -40,22 +39,18 @@
* Create a new UI.
*
* required user mob The mob who opened/is using the UI.
- * required src_object atom/movable The object which owns the UI.
+ * required src_object datum The object or datum which owns the UI.
* required ui_key string The ui_key of the UI.
* required interface string The interface used to render the UI.
* optional title string The title of the UI.
* optional width int The window width.
* optional height int The window height.
- * optional ref atom An extra ref to use when the window is closed.
* optional master_ui datum/tgui The parent UI.
* optional state datum/ui_state The state used to determine status.
*
* return datum/tgui The requested UI.
**/
-/datum/tgui/New(mob/user, atom/movable/src_object, ui_key, interface, \
- title, width = 0, height = 0, \
- atom/ref = null, datum/tgui/master_ui = null, \
- datum/ui_state/state = default_state)
+/datum/tgui/New(mob/user, datum/src_object, ui_key, interface, title, width = 0, height = 0, datum/tgui/master_ui = null, datum/ui_state/state = default_state)
src.user = user
src.src_object = src_object
src.ui_key = ui_key
@@ -70,9 +65,6 @@
if(height)
src.height = height
- if(ref)
- src.ref = ref
-
src.master_ui = master_ui
if(master_ui)
master_ui.children += src
@@ -85,27 +77,25 @@
* public
*
* Open this UI (and initialize it with data).
- *
- * optional data list The data to intialize the UI with.
**/
-/datum/tgui/proc/open(list/data = null)
+/datum/tgui/proc/open()
+ set waitfor = 0 // Don't wait on sleep()s.
if(!user.client)
return // Bail if there is no client.
update_status(push = 0) // Update the window status.
if(status == UI_CLOSE)
- return // Bail if we should close.
+ return // Bail if we're not supposed to open.
if(!initial_data)
- if(!data) // If we don't have initial_data and data was not passed, get data from the src_object.
- data = src_object.get_ui_data(user)
- set_initial_data(data) // Otherwise use the passed data.
+ set_initial_data(src_object.get_ui_data(user)) // Get the UI data.
var/window_size = ""
if(width && height) // If we have a width and height, use them.
window_size = "size=[width]x[height];"
- user << browse(get_html(), "window=[window_id];[window_size][list2params(window_options)]") // Open the window.
+ var/debugable = check_rights_for(user.client, R_DEBUG)
+ user << browse(get_html(debugable), "window=[window_id];[window_size][list2params(window_options)]") // Open the window.
winset(user, window_id, "on-close=\"uiclose \ref[src]\"") // Instruct the client to signal UI when the window is closed.
SStgui.on_open(src)
@@ -135,6 +125,9 @@
SStgui.on_close(src)
for(var/datum/tgui/child in children) // Loop through and close all children.
child.close()
+ children.Cut()
+ state = null
+ master_ui = null
/**
* public
@@ -192,11 +185,20 @@
*
* Generate HTML for this UI.
*
+ * optional bool inline If the JSON should be inlined into the HTML (for debugging).
+ *
* return string UI HTML output.
**/
-/datum/tgui/proc/get_html()
- // Poplate HTML with JSON.
- return replacetextEx(SStgui.html, "{}", get_json(initial_data))
+/datum/tgui/proc/get_html(var/inline)
+ var/html
+ // Poplate HTML with JSON if we're supposed to inline.
+ if(inline)
+ html = replacetextEx(SStgui.basehtml, "{}", get_json(initial_data))
+ else
+ html = SStgui.basehtml
+ html = replacetextEx(html, "\[ref]", "\ref[src]")
+ html = replacetextEx(html, "\[style]", style)
+ return html
/**
* private
@@ -207,19 +209,20 @@
**/
/datum/tgui/proc/get_config_data()
var/list/config_data = list(
- "title" = title,
- "status" = status,
- "style" = style,
- "interface" = interface,
- "fancy" = user.client.prefs.tgui_fancy,
- "window" = window_id,
- "ref" = "\ref[src]",
- "user" = list(
- "name" = user.name,
- "ref" = "\ref[user]"
+ "title" = title,
+ "status" = status,
+ "style" = style,
+ "interface" = interface,
+ "fancy" = user.client.prefs.tgui_fancy,
+ "locked" = user.client.prefs.tgui_lock,
+ "window" = window_id,
+ "ref" = "\ref[src]",
+ "user" = list(
+ "name" = user.name,
+ "ref" = "\ref[user]"
),
- "srcObject" = list(
- "name" = src_object.name,
+ "srcObject" = list(
+ "name" = "[src_object]",
"ref" = "\ref[src_object]"
)
)
@@ -239,6 +242,7 @@
json_data["config"] = get_config_data()
if(!isnull(data))
json_data["data"] = data
+ json_data["adata"] = data
// Generate the JSON; replace bad characters.
var/json = JSON.stringify(json_data)
@@ -254,14 +258,29 @@
* If the src_object's ui_act() returns 1, update all UIs attacked to it.
**/
/datum/tgui/Topic(href, href_list)
+ var/action = href_list["action"]
+ var/params = href_list; params -= "action"
+
+ // Handle any special actions.
+ switch(action)
+ if("tgui:initialize")
+ user << output(url_encode(get_json(initial_data)), "[window_id].browser:initialize")
+ return
+ if("tgui:link")
+ user << link(params["url"])
+ return
+ if("tgui:fancy")
+ user.client.prefs.tgui_fancy = TRUE
+ return
+ if("tgui:nofrills")
+ user.client.prefs.tgui_fancy = FALSE
+ return
+
update_status(push = 0) // Update the window state.
if(status != UI_INTERACTIVE || user != usr)
return // If UI is not interactive or usr calling Topic is not the UI user.
- var/action = href_list["action"] // Pull the action out.
- href_list -= "action"
-
- var/update = src_object.ui_act(action, href_list, state) // Call ui_act() on the src_object.
+ var/update = src_object.ui_act(action, params, state) // Call ui_act() on the src_object.
if(src_object && update)
SStgui.update_uis(src_object) // If we have a src_object and its ui_act() told us to update.
@@ -296,8 +315,8 @@
if(status <= UI_DISABLED && !force)
return // Cannot update UI, we have no visibility.
- // Send the new JSON to the recieveUpdate() Javascript function.
- user << output(url_encode(get_json(data)), "[window_id].browser:receiveUpdate")
+ // Send the new JSON to the update() Javascript function.
+ user << output(url_encode(get_json(data)), "[window_id].browser:update")
/**
@@ -319,14 +338,14 @@
* optional push bool Push an update to the UI (an update is always sent for UI_DISABLED).
**/
/datum/tgui/proc/update_status(push = 0)
- var/new_status = src_object.ui_state(user, state)
+ var/obj/host = src_object.ui_host()
+ var/status = host.ui_status(user, state)
if(master_ui)
- new_status = min(new_status, master_ui.status)
+ status = min(status, master_ui.status)
- if(new_status == UI_CLOSE)
+ set_status(status, push)
+ if(status == UI_CLOSE)
close()
- else
- set_status(new_status, push)
/**
* private
diff --git a/code/modules/tooltip/tooltip.dm b/code/modules/tooltip/tooltip.dm
index eb306655402..1ef38cf1383 100644
--- a/code/modules/tooltip/tooltip.dm
+++ b/code/modules/tooltip/tooltip.dm
@@ -96,7 +96,7 @@ Notes:
//Open a tooltip for user, at a location based on params
-//Theme is a CSS class in tooltip.html, by default this wrapper chooses a CSS class based on the user's UI_style (Midnight, Plasmafire, Retro)
+//Theme is a CSS class in tooltip.html, by default this wrapper chooses a CSS class based on the user's UI_style (Midnight, Plasmafire, Retro, etc)
//Includes sanity.checks
/proc/openToolTip(mob/user = null, atom/movable/tip_src = null, params = null,title = "",content = "",theme = "")
if(istype(user))
diff --git a/code/modules/tooltip/tooltip.html b/code/modules/tooltip/tooltip.html
index 04a471d4559..78eb9cdd880 100644
--- a/code/modules/tooltip/tooltip.html
+++ b/code/modules/tooltip/tooltip.html
@@ -61,6 +61,12 @@
.retro .wrap {border-color: #005E00;}
.retro .content {color: #003366; border-color: #005E00; background-color: #00BD00;}
+
+ .slimecore .wrap {border-color: #18640E;}
+ .slimecore .content {color: #6EA161; border-color: #11450B; background-color: #354E35;}
+
+ .operative .wrap {border-color: #A10000;}
+ .operative .content {color: #0F0B0C; border-color: #610002; background-color: #382626;}
@@ -220,4 +226,4 @@
};