diff --git a/.gitignore b/.gitignore index 7daab15618..8a1fc47c9d 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ *.rsc *.dmb *.lk +data/ diff --git a/README.md b/README.md index 2c1859126c..01fec91ca6 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,13 @@ The more complicated and easier to update method is using git. You'll need to d This will take a while to download, but it provides an easier method for updating. +Once the repository is in place, run this command: +```bash +cd Baystation12 +git update-index --assume-unchanged baystation12.int +``` +Now git will ignore changes to the file baystation12.int. + ### INSTALLATION First-time installation should be fairly straightforward. First, you'll need BYOND installed. You can get it from [here](http://www.byond.com/). diff --git a/baystation12.dme b/baystation12.dme index 57711d68ba..9ac1078324 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -581,6 +581,7 @@ #include "code\game\objects\structures\flora.dm" #include "code\game\objects\structures\girders.dm" #include "code\game\objects\structures\grille.dm" +#include "code\game\objects\structures\inflatable.dm" #include "code\game\objects\structures\janicart.dm" #include "code\game\objects\structures\kitchen_spike.dm" #include "code\game\objects\structures\ladders.dm" @@ -847,6 +848,7 @@ #include "code\modules\mob\abilities.dm" #include "code\modules\mob\death.dm" #include "code\modules\mob\emote.dm" +#include "code\modules\mob\hear_say.dm" #include "code\modules\mob\inventory.dm" #include "code\modules\mob\language.dm" #include "code\modules\mob\login.dm" @@ -1047,6 +1049,7 @@ #include "code\modules\organs\organ_internal.dm" #include "code\modules\organs\pain.dm" #include "code\modules\organs\wound.dm" +#include "code\modules\paperwork\carbonpaper.dm" #include "code\modules\paperwork\clipboard.dm" #include "code\modules\paperwork\filingcabinet.dm" #include "code\modules\paperwork\folders.dm" diff --git a/code/WorkInProgress/Ported/policetape.dm b/code/WorkInProgress/Ported/policetape.dm index 58ad2f8eb6..cdd547d7c0 100644 --- a/code/WorkInProgress/Ported/policetape.dm +++ b/code/WorkInProgress/Ported/policetape.dm @@ -4,7 +4,7 @@ icon = 'icons/policetape.dmi' icon_state = "rollstart" flags = FPRINT - w_class = 1.0 + w_class = 2.0 var/turf/start var/turf/end var/tape_type = /obj/item/tape diff --git a/code/WorkInProgress/autopsy.dm b/code/WorkInProgress/autopsy.dm index 280c40d807..9c812ef7ae 100644 --- a/code/WorkInProgress/autopsy.dm +++ b/code/WorkInProgress/autopsy.dm @@ -8,7 +8,7 @@ icon = 'icons/obj/autopsy_scanner.dmi' icon_state = "" flags = FPRINT | TABLEPASS | CONDUCT - w_class = 1.0 + w_class = 2.0 origin_tech = "materials=1;biotech=1" var/list/datum/autopsy_data_scanner/wdata = list() var/list/datum/autopsy_data_scanner/chemtraces = list() diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index 531dbeb0db..76d15e1a6a 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -39,6 +39,8 @@ var/global/list/skin_styles_female_list = list() //unused //Underwear var/global/list/underwear_m = list("White", "Grey", "Green", "Blue", "Black", "Mankini", "None") //Curse whoever made male/female underwear diffrent colours var/global/list/underwear_f = list("Red", "White", "Yellow", "Blue", "Black", "Thong", "None") + //undershirt +var/global/list/undershirt_t = list("Black Tank top", "White Tank top", "Black shirt", "White shirt", "None") //Backpacks var/global/list/backbaglist = list("Nothing", "Backpack", "Satchel", "Satchel Alt") diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm index 6a9edcc36a..28b875d0b7 100644 --- a/code/controllers/master_controller.dm +++ b/code/controllers/master_controller.dm @@ -31,10 +31,12 @@ datum/controller/game_controller var/last_thing_processed var/mob/list/expensive_mobs = list() + var/rebuild_active_areas = 0 datum/controller/game_controller/New() //There can be only one master_controller. Out with the old and in with the new. if(master_controller != src) + log_debug("Rebuilding Master Controller") if(istype(master_controller)) Recover() del(master_controller) @@ -259,27 +261,37 @@ datum/controller/game_controller/proc/process_machines() last_thing_processed = Machine.type if(Machine.process() != PROCESS_KILL) if(Machine) - -// if(Machine.use_power) -// Machine.auto_use_power() - i++ continue machines.Cut(i,i+1) + i=1 while(i<=active_areas.len) var/area/A = active_areas[i] - if(A.powerupdate) + if(A.powerupdate && A.master == A) A.powerupdate -= 1 - for(var/obj/machinery/M in A) - if(M) - if(M.use_power) - M.auto_use_power() + for(var/area/SubArea in A.related) + for(var/obj/machinery/M in SubArea) + if(M) + if(M.use_power) + M.auto_use_power() - if(A.apc.len) + if(A.apc.len && A.master == A) i++ continue + + A.powerupdate = 0 active_areas.Cut(i,i+1) + + + if(controller_iteration % 150 == 0 || rebuild_active_areas) //Every 300 seconds we retest every area/machine + for(var/area/A in all_areas) + if(A == A.master) + A.powerupdate += 1 + active_areas |= A + rebuild_active_areas = 0 + + datum/controller/game_controller/proc/process_objects() diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index 71b7bab041..ee2f220d9f 100755 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -52,6 +52,10 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /obj/item/weapon/reagent_containers/food/drinks/milk, /obj/item/weapon/reagent_containers/food/drinks/milk, /obj/item/weapon/storage/fancy/egg_box, + /obj/item/weapon/reagent_containers/food/snacks/tofu, + /obj/item/weapon/reagent_containers/food/snacks/tofu, + /obj/item/weapon/reagent_containers/food/snacks/meat, + /obj/item/weapon/reagent_containers/food/snacks/meat, /obj/item/weapon/reagent_containers/food/snacks/grown/banana, /obj/item/weapon/reagent_containers/food/snacks/grown/banana) cost = 10 @@ -125,6 +129,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee name = "Party equipment" contains = list(/obj/item/weapon/storage/box/drinkingglasses, /obj/item/weapon/reagent_containers/food/drinks/shaker, + /obj/item/weapon/reagent_containers/food/drinks/flask/barflask, /obj/item/weapon/reagent_containers/food/drinks/bottle/patron, /obj/item/weapon/reagent_containers/food/drinks/bottle/goldschlager, /obj/item/weapon/storage/fancy/cigarettes/dromedaryco, @@ -174,6 +179,16 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee containername = "Emergency Crate" group = "Engineering" +/datum/supply_packs/evacuation + name = "Inflatable barriers" + contains = list(/obj/item/weapon/storage/briefcase/inflatable, + /obj/item/weapon/storage/briefcase/inflatable, + /obj/item/weapon/storage/briefcase/inflatable) + cost = 20 + containertype = /obj/structure/closet/crate + containername = "Inflatable Barrier Crate" + group = "Engineering" + /datum/supply_packs/janitor name = "Janitorial supplies" contains = list(/obj/item/weapon/reagent_containers/glass/bucket, @@ -288,9 +303,14 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /obj/item/seeds/cornseed, /obj/item/seeds/eggplantseed, /obj/item/seeds/tomatoseed, + /obj/item/seeds/appleseed, /obj/item/seeds/soyaseed, /obj/item/seeds/wheatseed, /obj/item/seeds/carrotseed, + /obj/item/seeds/harebell, + /obj/item/seeds/lemonseed, + /obj/item/seeds/orangeseed, + /obj/item/seeds/grassseed, /obj/item/seeds/sunflowerseed, /obj/item/seeds/chantermycelium, /obj/item/seeds/potatoseed, @@ -324,6 +344,10 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /obj/item/seeds/amanitamycelium, /obj/item/seeds/reishimycelium, /obj/item/seeds/bananaseed, + /obj/item/seeds/riceseed, + /obj/item/seeds/eggplantseed, + /obj/item/seeds/limeseed, + /obj/item/seeds/grapeseed, /obj/item/seeds/eggyseed) cost = 15 containertype = /obj/structure/closet/crate/hydroponics @@ -763,7 +787,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee group = "Security" /datum/supply_packs/randomised - var/num_contained = 3 //number of items picked to be contained in a randomised crate + var/num_contained = 4 //number of items picked to be contained in a randomised crate contains = list(/obj/item/clothing/head/collectable/chef, /obj/item/clothing/head/collectable/paper, /obj/item/clothing/head/collectable/tophat, @@ -895,22 +919,36 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /datum/supply_packs/randomised/costume num_contained = 2 contains = list(/obj/item/clothing/suit/pirate, - /obj/item/clothing/suit/johnny_coat, /obj/item/clothing/suit/judgerobe, /obj/item/clothing/suit/wcoat, /obj/item/clothing/suit/hastur, + /obj/item/clothing/suit/holidaypriest, + /obj/item/clothing/suit/nun, /obj/item/clothing/suit/imperium_monk, /obj/item/clothing/suit/ianshirt, /obj/item/clothing/under/gimmick/rank/captain/suit, /obj/item/clothing/under/gimmick/rank/head_of_personnel/suit, /obj/item/clothing/under/lawyer/purpsuit, + /obj/item/clothing/under/rank/mailman, + /obj/item/clothing/under/dress/dress_saloon, /obj/item/clothing/suit/suspenders, /obj/item/clothing/suit/storage/labcoat/mad, - /obj/item/clothing/suit/bio_suit/plaguedoctorsuit) - name = "Standard Costume crate" + /obj/item/clothing/suit/bio_suit/plaguedoctorsuit, + /obj/item/clothing/under/schoolgirl, + /obj/item/clothing/under/owl, + /obj/item/clothing/under/waiter, + /obj/item/clothing/under/gladiator, + /obj/item/clothing/under/soviet, + /obj/item/clothing/under/scratch, + /obj/item/clothing/under/wedding/bride_white, + /obj/item/clothing/suit/chef, + /obj/item/clothing/suit/apron/overalls, + /obj/item/clothing/under/redcoat, + /obj/item/clothing/under/kilt) + name = "Costumes crate" cost = 10 containertype = /obj/structure/closet/crate/secure - containername = "Standard Costumes" + containername = "Actor Costumes" access = access_theatre group = "Operations" @@ -923,8 +961,11 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /obj/item/clothing/under/suit_jacket/female, /obj/item/clothing/under/suit_jacket/really_black, /obj/item/clothing/under/suit_jacket/red, + /obj/item/clothing/under/lawyer/bluesuit, + /obj/item/clothing/under/lawyer/purpsuit, /obj/item/clothing/shoes/black, /obj/item/clothing/shoes/black, + /obj/item/clothing/shoes/leather, /obj/item/clothing/suit/wcoat) name = "Formalwear closet" cost = 30 @@ -1052,13 +1093,11 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /datum/supply_packs/bee_keeper name = "Beekeeping Crate" contains = list(/obj/item/beezeez, - /obj/item/beezeez, /obj/item/weapon/bee_net, /obj/item/apiary, - /obj/item/queen_bee, - /obj/item/queen_bee, /obj/item/queen_bee) - cost = 20 + cost = 40 + contraband = 1 containertype = /obj/structure/closet/crate/hydroponics containername = "Beekeeping crate" access = access_hydroponics diff --git a/code/defines/obj.dm b/code/defines/obj.dm index 197e3433d7..25a5242c07 100644 --- a/code/defines/obj.dm +++ b/code/defines/obj.dm @@ -297,7 +297,7 @@ var/global/list/PDA_Manifest = list() item_state = "beachball" density = 0 anchored = 0 - w_class = 1.0 + w_class = 2.0 force = 0.0 throwforce = 0.0 throw_speed = 1 diff --git a/code/defines/obj/hydro.dm b/code/defines/obj/hydro.dm index 2b57dbeffa..9357b7f308 100644 --- a/code/defines/obj/hydro.dm +++ b/code/defines/obj/hydro.dm @@ -18,7 +18,7 @@ icon = 'icons/obj/seeds.dmi' icon_state = "seed" // unknown plant seed - these shouldn't exist in-game flags = FPRINT | TABLEPASS - w_class = 1.0 // Makes them pocketable + w_class = 2.0 // Makes them pocketable var/mypath = "/obj/item/seeds" var/plantname = "Plants" var/productname = "" @@ -1205,7 +1205,7 @@ force = 0 flags = TABLEPASS throwforce = 1 - w_class = 1.0 + w_class = 2.0 throw_speed = 1 throw_range = 3 plant_type = 1 @@ -1229,7 +1229,7 @@ force = 15 flags = TABLEPASS throwforce = 1 - w_class = 1.0 + w_class = 2.0 throw_speed = 1 throw_range = 3 plant_type = 1 @@ -1251,7 +1251,7 @@ force = 30 flags = TABLEPASS throwforce = 1 - w_class = 1.0 + w_class = 2.0 throw_speed = 1 throw_range = 3 plant_type = 1 @@ -1417,7 +1417,7 @@ icon = 'icons/obj/chemical.dmi' icon_state = "bottle16" flags = FPRINT | TABLEPASS - w_class = 1.0 + w_class = 2.0 var/mutmod = 0 var/yieldmod = 0 New() diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index 4e7beba1dd..7ca5bdbe80 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -31,7 +31,7 @@ icon = 'icons/obj/items.dmi' icon_state = "banana_peel" item_state = "banana_peel" - w_class = 1.0 + w_class = 2.0 throwforce = 0 throw_speed = 4 throw_range = 20 @@ -42,7 +42,7 @@ icon = 'icons/obj/harvest.dmi' icon_state = "corncob" item_state = "corncob" - w_class = 1.0 + w_class = 2.0 throwforce = 0 throw_speed = 4 throw_range = 20 @@ -53,7 +53,7 @@ gender = PLURAL icon = 'icons/obj/items.dmi' icon_state = "soap" - w_class = 1.0 + w_class = 2.0 throwforce = 0 throw_speed = 4 throw_range = 20 @@ -90,7 +90,7 @@ icon = 'icons/obj/items.dmi' icon_state = "c_tube" throwforce = 1 - w_class = 1.0 + w_class = 2.0 throw_speed = 4 throw_range = 5 @@ -117,7 +117,7 @@ desc = "Better keep this safe." icon_state = "nucleardisk" item_state = "card-id" - w_class = 1.0 + w_class = 2.0 /* /obj/item/weapon/game_kit @@ -229,7 +229,7 @@ icon_state = "large" sharp = 1 desc = "Could probably be used as ... a throwing weapon?" - w_class = 1.0 + w_class = 2.0 force = 5.0 throwforce = 8.0 item_state = "shard-glass" @@ -400,8 +400,8 @@ /obj/item/weapon/module/power_control name = "power control module" icon_state = "power_mod" - desc = "Heavy-duty switching circuits for power control." - m_amt = 50 + desc = "Heavy-duty switching circuits for power control." + m_amt = 50 g_amt = 50 /obj/item/weapon/module/id_auth @@ -461,7 +461,7 @@ icon = 'icons/obj/food.dmi' icon_state = "meat" flags = FPRINT | TABLEPASS | CONDUCT - w_class = 1.0 + w_class = 2.0 origin_tech = "biotech=2" /obj/item/weapon/hatchet diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index fdd840589d..bfe3393359 100755 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -977,6 +977,10 @@ var/list/ghostteleportlocs = list() name = "\improper Engineering Hallway" icon_state = "engine_hallway" + engine_eva + name = "\improper Engine EVA" + icon_state = "engine_eva" + workshop name = "\improper Engineering Workshop" icon_state = "engine_storage" @@ -1238,6 +1242,11 @@ var/list/ghostteleportlocs = list() name = "\improper Firing Range" icon_state = "firingrange" +/area/security/tactical + name = "\improper Tactical Equipment" + icon_state = "Tactical" + + /* New() ..() diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index f4ce267bd9..21b86f5bcc 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -244,7 +244,6 @@ return used /area/proc/clear_usage() - master.used_equip = 0 master.used_light = 0 master.used_environ = 0 diff --git a/code/game/gamemodes/changeling/modularchangling.dm b/code/game/gamemodes/changeling/modularchangling.dm index 2395e63b27..8c65605cbc 100644 --- a/code/game/gamemodes/changeling/modularchangling.dm +++ b/code/game/gamemodes/changeling/modularchangling.dm @@ -53,7 +53,7 @@ var/list/datum/power/changeling/powerinstances = list() /datum/power/changeling/lesser_form name = "Lesser Form" desc = "We debase ourselves and become lesser. We become a monkey." - genomecost = 1 + genomecost = 4 verbpath = /mob/proc/changeling_lesser_form /datum/power/changeling/deaf_sting @@ -74,7 +74,7 @@ var/list/datum/power/changeling/powerinstances = list() name = "Silence Sting" desc = "We silently sting a human, completely silencing them for a short time." helptext = "Does not provide a warning to a victim that they have been stung, until they try to speak and cannot." - genomecost = 2 + genomecost = 3 allowduringlesserform = 1 verbpath = /mob/proc/changeling_silence_sting @@ -82,14 +82,14 @@ var/list/datum/power/changeling/powerinstances = list() name = "Mimic Voice" desc = "We shape our vocal glands to sound like a desired voice." helptext = "Will turn your voice into the name that you enter. We must constantly expend chemicals to maintain our form like this" - genomecost = 3 + genomecost = 1 verbpath = /mob/proc/changeling_mimicvoice /datum/power/changeling/extractdna name = "Extract DNA" desc = "We stealthily sting a target and extract the DNA from them." helptext = "Will give you the DNA of your target, allowing you to transform into them. Does not count towards absorb objectives." - genomecost = 4 + genomecost = 2 allowduringlesserform = 1 verbpath = /mob/proc/changeling_extract_dna_sting @@ -103,7 +103,7 @@ var/list/datum/power/changeling/powerinstances = list() /datum/power/changeling/paralysis_sting name = "Paralysis Sting" desc = "We silently sting a human, paralyzing them for a short time." - genomecost = 3 + genomecost = 8 verbpath = /mob/proc/changeling_paralysis_sting /datum/power/changeling/LSDSting @@ -136,7 +136,7 @@ var/list/datum/power/changeling/powerinstances = list() name = "Epinephrine sacs" desc = "We evolve additional sacs of adrenaline throughout our body." helptext = "Gives the ability to instantly recover from stuns. High chemical cost." - genomecost = 4 + genomecost = 3 verbpath = /mob/proc/changeling_unstun /datum/power/changeling/ChemicalSynth @@ -167,7 +167,7 @@ var/list/datum/power/changeling/powerinstances = list() name = "Digital Camoflauge" desc = "We evolve the ability to distort our form and proprtions, defeating common altgorthms used to detect lifeforms on cameras." helptext = "We cannot be tracked by camera while using this skill. However, humans looking at us will find us.. uncanny. We must constantly expend chemicals to maintain our form like this." - genomecost = 3 + genomecost = 1 allowduringlesserform = 1 verbpath = /mob/proc/changeling_digitalcamo @@ -175,7 +175,7 @@ var/list/datum/power/changeling/powerinstances = list() name = "Rapid Regeneration" desc = "We evolve the ability to rapidly regenerate, negating the need for stasis." helptext = "Heals a moderate amount of damage every tick." - genomecost = 8 + genomecost = 7 verbpath = /mob/proc/changeling_rapidregen diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 26497410fa..22bdac77a9 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -44,7 +44,7 @@ Stealthy and Inconspicuous Weapons; /obj/item/weapon/cartridge/syndicate:3:Detomatix PDA Cartridge; Whitespace:Seperator; Stealth and Camouflage Items; -/obj/item/clothing/under/chameleon:3:Chameleon Jumpsuit; +/obj/item/weapon/storage/box/syndie_kit/chameleon:3:Chameleon Kit; /obj/item/clothing/shoes/syndigaloshes:2:No-Slip Syndicate Shoes; /obj/item/weapon/card/id/syndicate:2:Agent ID card; /obj/item/clothing/mask/gas/voice:4:Voice Changer; diff --git a/code/game/gamemodes/malfunction/malfunction.dm b/code/game/gamemodes/malfunction/malfunction.dm index 1fb1aff61a..eccf013fff 100644 --- a/code/game/gamemodes/malfunction/malfunction.dm +++ b/code/game/gamemodes/malfunction/malfunction.dm @@ -30,7 +30,7 @@ /datum/game_mode/malfunction/pre_setup() for(var/mob/new_player/player in player_list) - if(player.mind && player.mind.assigned_role == "AI") + if(player.mind && player.mind.assigned_role == "AI" && (player.client.prefs.be_special & BE_MALF)) malf_ai+=player.mind if(malf_ai.len) return 1 diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index ff19ce7764..cd70a392de 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -5,7 +5,7 @@ icon_state ="book" throw_speed = 1 throw_range = 5 - w_class = 1.0 + w_class = 2.0 flags = FPRINT | TABLEPASS var/uses = 5 var/temp = null diff --git a/code/game/jobs/job/medical.dm b/code/game/jobs/job/medical.dm index 4f2f659663..f28dbb6459 100644 --- a/code/game/jobs/job/medical.dm +++ b/code/game/jobs/job/medical.dm @@ -133,8 +133,8 @@ flag = GENETICIST department_flag = MEDSCI faction = "Station" - total_positions = 2 - spawn_positions = 2 + total_positions = 0 + spawn_positions = 0 supervisors = "the chief medical officer and research director" selection_color = "#ffeef0" access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics, access_research) diff --git a/code/game/machinery/bots/ed209bot.dm b/code/game/machinery/bots/ed209bot.dm index 8de8e20fb5..49c491b16e 100644 --- a/code/game/machinery/bots/ed209bot.dm +++ b/code/game/machinery/bots/ed209bot.dm @@ -231,8 +231,6 @@ Auto Patrol: []"}, continue if (istype(C, /mob/living/carbon/human)) threatlevel = src.assess_perp(C) - else if ((istype(C, /mob/living/carbon/monkey)) && (C.client) && (ticker.mode.name == "monkey")) - threatlevel = 4 //src.speak(C.real_name + text(": threat: []", threatlevel)) if (threatlevel < 4 ) continue @@ -637,8 +635,6 @@ Auto Patrol: []"}, if (istype(C, /mob/living/carbon/human)) src.threatlevel = src.assess_perp(C) - else if ((istype(C, /mob/living/carbon/monkey)) && (C.client) && (ticker.mode.name == "monkey")) - src.threatlevel = 4 if (!src.threatlevel) continue @@ -821,7 +817,7 @@ Auto Patrol: []"}, if (src.emagged == 2) projectile = /obj/item/projectile/beam else - projectile = /obj/item/projectile/energy/electrode + projectile = /obj/item/projectile/beam/stun else if(lasercolor == "b") if (src.emagged == 2) projectile = /obj/item/projectile/beam/lastertag/omni diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 6bd2fb6a6f..15d0b2d61c 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -29,7 +29,7 @@ icon = 'icons/obj/cloning.dmi' icon_state = "datadisk0" //Gosh I hope syndies don't mistake them for the nuke disk. item_state = "card-id" - w_class = 1.0 + w_class = 2.0 var/datum/dna2/record/buf=null var/read_only = 0 //Well,it's still a floppy disk diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm index 817a3603e8..7f108d8d86 100755 --- a/code/game/machinery/igniter.dm +++ b/code/game/machinery/igniter.dm @@ -14,8 +14,6 @@ return src.attack_hand(user) /obj/machinery/igniter/attack_paw(mob/user as mob) - if ((ticker && ticker.mode.name == "monkey")) - return src.attack_hand(user) return /obj/machinery/igniter/attack_hand(mob/user as mob) @@ -156,4 +154,4 @@ icon_state = "launcherbtt" active = 0 - return \ No newline at end of file + return diff --git a/code/game/machinery/kitchen/processor.dm b/code/game/machinery/kitchen/processor.dm index 92f01384aa..161dfc01ce 100644 --- a/code/game/machinery/kitchen/processor.dm +++ b/code/game/machinery/kitchen/processor.dm @@ -1,4 +1,3 @@ - /obj/machinery/processor name = "Food Processor" icon = 'icons/obj/kitchen.dmi' @@ -43,7 +42,7 @@ */ potato input = /obj/item/weapon/reagent_containers/food/snacks/grown/potato - output = /obj/item/weapon/reagent_containers/food/snacks/fries + output = /obj/item/weapon/reagent_containers/food/snacks/rawsticks carrot input = /obj/item/weapon/reagent_containers/food/snacks/grown/carrot @@ -159,4 +158,3 @@ src.visible_message("\blue \the [src] finished processing.", \ "You hear the food processor stopping/") - diff --git a/code/game/machinery/kitchen/smartfridge.dm b/code/game/machinery/kitchen/smartfridge.dm index 86bcf6e9ab..841ac36d9b 100644 --- a/code/game/machinery/kitchen/smartfridge.dm +++ b/code/game/machinery/kitchen/smartfridge.dm @@ -130,12 +130,25 @@ if(!isbroken) icon_state = icon_off - /******************* * Item Adding ********************/ /obj/machinery/smartfridge/attackby(var/obj/item/O as obj, var/mob/user as mob) + if(istype(O, /obj/item/weapon/screwdriver)) + panel_open = !panel_open + user << "You [panel_open ? "open" : "close"] the maintenance panel." + overlays.Cut() + if(panel_open) + overlays += image(icon, icon_panel) + nanomanager.update_uis(src) + return + + if(istype(O, /obj/item/device/multitool)||istype(O, /obj/item/weapon/wirecutters)) + if(panel_open) + attack_hand(user) + return + if(!src.ispowered) user << "\The [src] is unpowered and useless." return @@ -154,6 +167,8 @@ user.visible_message("[user] has added \the [O] to \the [src].", \ "You add \the [O] to \the [src].") + nanomanager.update_uis(src) + else if(istype(O, /obj/item/weapon/storage/bag/plants)) var/obj/item/weapon/storage/bag/plants/P = O var/plants_loaded = 0 @@ -171,147 +186,155 @@ plants_loaded++ if(plants_loaded) - user.visible_message("[user] loads \the [src] with \the [P].", \ - "You load \the [src] with \the [P].") + user.visible_message( \ + "[user] loads \the [src] with \the [P].", \ + "You load \the [src] with \the [P].") if(P.contents.len > 0) user << "Some items are refused." + nanomanager.update_uis(src) + else user << "\The [src] smartly refuses [O]." return 1 - updateUsrDialog() - /obj/machinery/smartfridge/secure/attackby(var/obj/item/O as obj, var/mob/user as mob) if (istype(O, /obj/item/weapon/card/emag)) - src.emagged = 1 - user << "You short out the product lock on [src]" - return - else if(istype(O, /obj/item/weapon/screwdriver)) - src.panel_open = !src.panel_open - user << "You [src.panel_open ? "open" : "close"] the maintenance panel." - src.overlays.Cut() - if(src.panel_open) - src.overlays += image(src.icon, src.icon_panel) - src.updateUsrDialog() - return - else if(istype(O, /obj/item/device/multitool)||istype(O, /obj/item/weapon/wirecutters)) - if(src.panel_open) - attack_hand(user) + emagged = 1 + locked = -1 + user << "You short out the product lock on [src]." return + ..() - return /obj/machinery/smartfridge/attack_paw(mob/user as mob) - return src.attack_hand(user) + return attack_hand(user) /obj/machinery/smartfridge/attack_ai(mob/user as mob) return 0 /obj/machinery/smartfridge/attack_hand(mob/user as mob) - user.set_machine(src) - if(src.seconds_electrified != 0) - if(src.shock(user, 100)) + if(!ispowered) return + if(seconds_electrified != 0) + if(shock(user, 100)) return - interact(user) + + ui_interact(user) /******************* * SmartFridge Menu ********************/ -/obj/machinery/smartfridge/interact(mob/user as mob) - if(!src.ispowered) - return +/obj/machinery/smartfridge/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) + user.set_machine(src) - var/dat = "Select an item:
" + var/is_secure = istype(src,/obj/machinery/smartfridge/secure) - if (contents.len == 0) - dat += "No product loaded!" + var/data[0] + data["contents"] = null + data["wires"] = null + data["panel_open"] = panel_open + data["electrified"] = seconds_electrified > 0 + data["shoot_inventory"] = shoot_inventory + data["locked"] = locked + data["secure"] = is_secure + + var/list/items[0] + for (var/i=1 to length(item_quants)) + var/K = item_quants[i] + var/count = item_quants[K] + if (count > 0) + items.Add(list(list("display_name" = html_encode(capitalize(K)), "vend" = i, "quantity" = count))) + + if (items.len > 0) + data["contents"] = items + + var/list/vendwires = null + if (is_secure) + vendwires = list( + "Violet" = 1, + "Orange" = 2, + "Green" = 3) else - for (var/O in item_quants) - if(item_quants[O] > 0) - var/N = item_quants[O] - dat += "[capitalize(O)]:" - dat += " [N] " - dat += "Vend " - if(N > 5) - dat += "(x5)" - if(N > 10) - dat += "(x10)" - if(N > 25) - dat += "(x25)" - if(N > 1) - dat += "(All)" - dat += "
" - - dat += "
" - if(panel_open) - //One of the wires does absolutely nothing. - var/list/vendwires = list( + vendwires = list( "Blue" = 1, "Red" = 2, - "Black" = 3 - ) - dat += "


Access Panel
" - for(var/wiredesc in vendwires) - var/is_uncut = src.wires & APCWireColorToFlag[vendwires[wiredesc]] - dat += "[wiredesc] wire: " - if(!is_uncut) - dat += "Mend" - else - dat += "Cut " - dat += "Pulse " - dat += "
" + "Black" = 3) - dat += "
" - dat += "The orange light is [(src.seconds_electrified == 0) ? "off" : "on"].
" - dat += "The red light is [src.shoot_inventory ? "off" : "blinking"].
" - user << browse("[src] Supplies[dat]", "window=smartfridge") - return + var/list/vendor_wires[0] + for (var/wire in vendwires) + var is_uncut = wires & APCWireColorToFlag[vendwires[wire]] + vendor_wires.Add(list(list("wire" = wire, "cut" = !is_uncut, "index" = vendwires[wire]))) + + if (vendor_wires.len > 0) + data["wires"] = vendor_wires + + ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) + if (!ui) + ui = new(user, src, ui_key, "smartfridge.tmpl", src.name, 400, 500) + ui.set_initial_data(data) + ui.open() /obj/machinery/smartfridge/Topic(href, href_list) - if(..()) - return - usr.set_machine(src) + if (..()) return 0 - if ((href_list["cutwire"]) && (src.panel_open)) - var/twire = text2num(href_list["cutwire"]) - if (!( istype(usr.get_active_hand(), /obj/item/weapon/wirecutters) )) - usr << "You need wirecutters!" - return - if (src.isWireColorCut(twire)) - src.mend(twire) - else - src.cut(twire) - else if ((href_list["pulsewire"]) && (src.panel_open)) - var/twire = text2num(href_list["pulsewire"]) - if (!istype(usr.get_active_hand(), /obj/item/device/multitool)) - usr << "You need a multitool!" - return - if (src.isWireColorCut(twire)) - usr << "You can't pulse a cut wire." - return - else - src.pulse(twire) - else if (href_list["vend"]) - var/N = href_list["vend"] + var/mob/user = usr + var/datum/nanoui/ui = nanomanager.get_open_ui(user, src, "main") + + src.add_fingerprint(user) + + if (href_list["close"]) + user.unset_machine() + ui.close() + return 0 + + if (href_list["vend"]) + var/index = text2num(href_list["vend"]) var/amount = text2num(href_list["amount"]) + var/K = item_quants[index] + var/count = item_quants[K] - if(item_quants[N] <= 0) // Sanity check, there are probably ways to press the button when it shouldn't be possible. - return + // Sanity check, there are probably ways to press the button when it shouldn't be possible. + if(count > 0) + item_quants[K] = max(count - amount, 0) - item_quants[N] = max(item_quants[N] - amount, 0) + var/i = amount + for(var/obj/O in contents) + if (O.name == K) + O.loc = loc + i-- + if (i <= 0) + return 1 - var/i = amount - for(var/obj/O in contents) - if(O.name == N) - O.loc = src.loc - i-- - if(i <= 0) - break - src.add_fingerprint(usr) - src.updateUsrDialog() - return + return 1 + + if (panel_open) + if (href_list["cutwire"]) + if (!( istype(usr.get_active_hand(), /obj/item/weapon/wirecutters) )) + user << "You need wirecutters!" + return 1 + + var/wire_index = text2num(href_list["cutwire"]) + if (isWireColorCut(wire_index)) + mend(wire_index) + else + cut(wire_index) + return 1 + + if (href_list["pulsewire"]) + if (!istype(usr.get_active_hand(), /obj/item/device/multitool)) + usr << "You need a multitool!" + return 1 + + var/wire_index = text2num(href_list["pulsewire"]) + if (isWireColorCut(wire_index)) + usr << "You can't pulse a cut wire." + return 1 + + pulse(wire_index) + return 1 + + return 0 /************* * Hacking @@ -332,7 +355,7 @@ /obj/machinery/smartfridge/proc/mend(var/wireColor) var/wireFlag = APCWireColorToFlag[wireColor] - var/wireIndex = APCWireColorToIndex[wireColor] //not used in this function + var/wireIndex = APCWireColorToIndex[wireColor] src.wires |= wireFlag switch(wireIndex) if(WIRE_SHOCK) @@ -347,7 +370,7 @@ switch(wireIndex) if(WIRE_SHOCK) src.seconds_electrified = 30 - if (WIRE_SHOOTINV) + if(WIRE_SHOOTINV) src.shoot_inventory = !src.shoot_inventory if(WIRE_SCANID) src.locked = -1 @@ -385,80 +408,23 @@ return 1 /obj/machinery/smartfridge/proc/shock(mob/user, prb) - if(!src.ispowered) // unpowered, no shock - return 0 - if(!prob(prb)) - return 0 + if(!ispowered) return 0 + if(!prob(prb)) return 0 + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread s.set_up(5, 1, src) s.start() - if (electrocute_mob(user, get_area(src), src, 0.7)) - return 1 - else - return 0 + + return electrocute_mob(user, get_area(src), src, 0.7) /************************ * Secure SmartFridges *************************/ /obj/machinery/smartfridge/secure/Topic(href, href_list) - usr.set_machine(src) - if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf)))) - if ((!src.allowed(usr)) && (!src.emagged) && (src.locked != -1) && href_list["vend"]) //For SECURE VENDING MACHINES YEAH - usr << "\red Access denied." //Unless emagged of course - return - ..() - return - -/obj/machinery/smartfridge/secure/interact(mob/user as mob) - - if(!src.ispowered) - return - - var/dat = "Select an item:
" - - if (contents.len == 0) - dat += "No product loaded!" - else - for (var/O in item_quants) - if(item_quants[O] > 0) - var/N = item_quants[O] - dat += "[capitalize(O)]:" - dat += " [N] " - dat += "Vend " - if(N > 5) - dat += "(x5)" - if(N > 10) - dat += "(x10)" - if(N > 25) - dat += "(x25)" - if(N > 1) - dat += "(All)" - dat += "
" - - dat += "
" - if(panel_open) - var/list/vendwires = list( - "Violet" = 1, - "Orange" = 2, - "Green" = 3 - ) - dat += "


Access Panel
" - for(var/wiredesc in vendwires) - var/is_uncut = src.wires & APCWireColorToFlag[vendwires[wiredesc]] - dat += "[wiredesc] wire: " - if(!is_uncut) - dat += "Mend" - else - dat += "Cut " - dat += "Pulse " - dat += "
" - - dat += "
" - dat += "The orange light is [(src.seconds_electrified == 0) ? "off" : "on"].
" - //dat += "The red light is [src.shoot_inventory ? "off" : "blinking"].
" - dat += "The green light is [src.locked == 1 ? "off" : "[src.locked == -1 ? "blinking" : "on"]"].
" - user << browse("[src] Supplies[dat]", "window=smartfridge") - return - -//TODO: Make smartfridges hackable. - JoeyJo0 + if(!ispowered) return 0 + if (usr.contents.Find(src) || (in_range(src, usr) && istype(loc, /turf))) + if (!allowed(usr) && !emagged && locked != -1 && href_list["vend"]) + usr << "\red Access denied." + return 0 + return ..() diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index d92df433bf..0b16a5aee2 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -174,7 +174,7 @@ Class Procs: return 1 if ( ! (istype(usr, /mob/living/carbon/human) || \ istype(usr, /mob/living/silicon) || \ - istype(usr, /mob/living/carbon/monkey) && ticker && ticker.mode.name == "monkey") ) + istype(usr, /mob/living/carbon/monkey)) ) usr << "\red You don't have the dexterity to do this!" return 1 @@ -193,7 +193,7 @@ Class Procs: src.add_fingerprint(usr) var/area/A = get_area(src) - A.powerupdate = 1 + A.master.powerupdate = 1 return 0 @@ -216,7 +216,7 @@ Class Procs: return 1 if ( ! (istype(usr, /mob/living/carbon/human) || \ istype(usr, /mob/living/silicon) || \ - istype(usr, /mob/living/carbon/monkey) && ticker && ticker.mode.name == "monkey") ) + istype(usr, /mob/living/carbon/monkey)) ) usr << "\red You don't have the dexterity to do this!" return 1 /* @@ -236,7 +236,7 @@ Class Procs: src.add_fingerprint(user) var/area/A = get_area(src) - A.powerupdate = 1 + A.master.powerupdate = 1 return 0 @@ -248,3 +248,13 @@ Class Procs: uid = gl_uid gl_uid++ +/obj/machinery/proc/state(var/msg) + for(var/mob/O in hearers(src, null)) + O.show_message("\icon[src] [msg]", 2) + +/obj/machinery/proc/ping(text=null) + if (!text) + text = "\The [src] pings." + + state(text, "blue") + playsound(src.loc, 'sound/machines/ping.ogg', 50, 0) diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index 59e5ce13e3..8107e23cc5 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -66,7 +66,7 @@ spark_system.attach(src) sleep(10) if(!installation)// if for some reason the turret has no gun (ie, admin spawned) it resorts to basic taser shots - projectile = /obj/item/projectile/energy/electrode//holder for the projectile, here it is being set + projectile = /obj/item/projectile/beam/stun//holder for the projectile, here it is being set eprojectile = /obj/item/projectile/beam//holder for the projectile when emagged, if it is different reqpower = 200 sound = 1 @@ -128,7 +128,7 @@ reqpower = 700 if(/obj/item/weapon/gun/energy/taser) - projectile = /obj/item/projectile/energy/electrode + projectile = /obj/item/projectile/beam/stun eprojectile = projectile iconholder = 1 reqpower = 200 @@ -170,7 +170,7 @@ reqpower = 500 else // Energy gun shots - projectile = /obj/item/projectile/energy/electrode// if it hasn't been emagged, it uses normal taser shots + projectile = /obj/item/projectile/beam/stun// if it hasn't been emagged, it uses normal taser shots eprojectile = /obj/item/projectile/beam//If it has, going to kill mode iconholder = 1 egun = 1 diff --git a/code/game/machinery/telecomms/broadcaster.dm b/code/game/machinery/telecomms/broadcaster.dm index 7775e3aa20..16f421dab0 100644 --- a/code/game/machinery/telecomms/broadcaster.dm +++ b/code/game/machinery/telecomms/broadcaster.dm @@ -59,7 +59,9 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept signal.data["vmask"], signal.data["vmessage"], signal.data["radio"], signal.data["message"], signal.data["name"], signal.data["job"], - signal.data["realname"], signal.data["vname"],, signal.data["compression"], signal.data["level"], signal.frequency) + signal.data["realname"], signal.data["vname"],, + signal.data["compression"], signal.data["level"], signal.frequency, + signal.data["verb"], signal.data["language"] ) /** #### - Simple Broadcast - #### **/ @@ -84,7 +86,8 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept signal.data["vmask"], signal.data["vmessage"], signal.data["radio"], signal.data["message"], signal.data["name"], signal.data["job"], - signal.data["realname"], signal.data["vname"], 4, signal.data["compression"], signal.data["level"], signal.frequency) + signal.data["realname"], signal.data["vname"], 4, signal.data["compression"], signal.data["level"], signal.frequency, + signal.data["verb"], signal.data["language"]) if(!message_delay) message_delay = 1 @@ -147,14 +150,16 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept signal.data["vmask"], signal.data["vmessage"], signal.data["radio"], signal.data["message"], signal.data["name"], signal.data["job"], - signal.data["realname"], signal.data["vname"],, signal.data["compression"], list(0), connection.frequency) + signal.data["realname"], signal.data["vname"],, signal.data["compression"], list(0), connection.frequency, + signal.data["verb"], signal.data["language"]) else if(intercept) Broadcast_Message(signal.data["connection"], signal.data["mob"], signal.data["vmask"], signal.data["vmessage"], signal.data["radio"], signal.data["message"], signal.data["name"], signal.data["job"], - signal.data["realname"], signal.data["vname"], 3, signal.data["compression"], list(0), connection.frequency) + signal.data["realname"], signal.data["vname"], 3, signal.data["compression"], list(0), connection.frequency, + signal.data["verb"], signal.data["language"]) @@ -218,7 +223,8 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept /proc/Broadcast_Message(var/datum/radio_frequency/connection, var/mob/M, var/vmask, var/vmessage, var/obj/item/device/radio/radio, var/message, var/name, var/job, var/realname, var/vname, - var/data, var/compression, var/list/level, var/freq) + var/data, var/compression, var/list/level, var/freq, var/verbage = "says", var/datum/language/speaking = null) + /* ###### Prepare the radio connection ###### */ @@ -350,6 +356,8 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept freq_text = "Special Ops" if(1345) freq_text = "Response Team" + if(1447) + freq_text = "AI Private" //There's probably a way to use the list var of channels in code\game\communications.dm to make the dept channels non-hardcoded, but I wasn't in an experimentive mood. --NEO @@ -369,7 +377,6 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept // syndies! if (display_freq == SYND_FREQ) part_a = "" - // centcomm channels (deathsquid and ert) else if (display_freq in CENT_FREQS) part_a = "" @@ -378,6 +385,10 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept else if (display_freq == COMM_FREQ) part_a = "" + // AI private channel + else if (display_freq == 1447) + part_a = "" + // department radio formatting (poorly optimized, ugh) else if (display_freq == SEC_FREQ) part_a = "" @@ -439,102 +450,40 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept //End of research and feedback code. - var/aitrack = "" - /* ###### Send the message ###### */ /* --- Process all the mobs that heard a masked voice (understood) --- */ if (length(heard_masked)) - var/N = name - var/J = job - var/rendered = "[part_a][N][part_b][quotedmsg][part_c]" for (var/mob/R in heard_masked) - aitrack = "" - if(data == 4) - aitrack = "" - - if(istype(R, /mob/living/silicon/ai)) - R.show_message("[part_a][aitrack][N] ([J]) [part_b][quotedmsg][part_c]", 2) - else - R.show_message(rendered, 2) + R.hear_radio(message,verbage, speaking, part_a, part_b, M) /* --- Process all the mobs that heard the voice normally (understood) --- */ if (length(heard_normal)) - var/rendered = "[part_a][realname][part_b][quotedmsg][part_c]" - for (var/mob/R in heard_normal) - aitrack = "" - if(data == 4) - aitrack = "" - - if(istype(R, /mob/living/silicon/ai)) - R.show_message("[part_a][aitrack][realname] ([job]) [part_b][quotedmsg][part_c]", 2) - else - R.show_message(rendered, 2) + R.hear_radio(message, verbage, speaking, part_a, part_b, M) /* --- Process all the mobs that heard the voice normally (did not understand) --- */ if (length(heard_voice)) - var/rendered = "[part_a][vname][part_b][vmessage][part_c]" - for (var/mob/R in heard_voice) - aitrack = "" - if(data == 4) - aitrack = "" - - - if(istype(R, /mob/living/silicon/ai)) - R.show_message("[part_a][aitrack][vname] ([job]) [part_b][vmessage]][part_c]", 2) - else - R.show_message(rendered, 2) + R.hear_radio(message,verbage, speaking, part_a, part_b, M) /* --- Process all the mobs that heard a garbled voice (did not understand) --- */ // Displays garbled message (ie "f*c* **u, **i*er!") if (length(heard_garbled)) - if(M) - quotedmsg = M.say_quote(stars(message)) - else - quotedmsg = stars(quotedmsg) - - var/rendered = "[part_a][vname][part_b][quotedmsg][part_c]" - for (var/mob/R in heard_garbled) - aitrack = "" - if(data == 4) - aitrack = "" - - - if(istype(R, /mob/living/silicon/ai)) - R.show_message("[part_a][aitrack][vname][part_b][quotedmsg][part_c]", 2) - else - R.show_message(rendered, 2) + R.hear_radio(message, verbage, speaking, part_a, part_b, M, 1) /* --- Complete gibberish. Usually happens when there's a compressed message --- */ if (length(heard_gibberish)) - if(M) - quotedmsg = M.say_quote(Gibberish(message, compression + 50)) - else - quotedmsg = Gibberish(quotedmsg, compression + 50) - - var/rendered = "[part_a][Gibberish(name, compression + 50)][part_b][quotedmsg][part_c]" - for (var/mob/R in heard_gibberish) - aitrack = "" - if(data == 4) - aitrack = "" - - - if(istype(R, /mob/living/silicon/ai)) - R.show_message("[part_a][aitrack][Gibberish(realname, compression + 50)] ([Gibberish(job, compression + 50)]) [part_b][quotedmsg][part_c]", 2) - else - R.show_message(rendered, 2) - + R.hear_radio(message, verbage, speaking, part_a, part_b, M, 1) /proc/Broadcast_SimpleMessage(var/source, var/frequency, var/text, var/data, var/mob/M, var/compression, var/level) diff --git a/code/game/machinery/telecomms/telecomunications.dm b/code/game/machinery/telecomms/telecomunications.dm index f3d8372353..95995fa2b9 100644 --- a/code/game/machinery/telecomms/telecomunications.dm +++ b/code/game/machinery/telecomms/telecomunications.dm @@ -91,7 +91,9 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list() "type" = signal.data["type"], "server" = signal.data["server"], "reject" = signal.data["reject"], - "level" = signal.data["level"] + "level" = signal.data["level"], + "verb" = signal.data["verb"], + "language" = signal.data["language"] ) // Keep the "original" signal constant diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index fe8ac9c751..5eb4601be8 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -766,7 +766,7 @@ product_ads = "We like plants!;Don't you want some?;The greenest thumbs ever.;We like big plants.;Soft soil..." icon_state = "nutri" icon_deny = "nutri-deny" - products = list(/obj/item/beezeez = 45,/obj/item/nutrient/ez = 35,/obj/item/nutrient/l4z = 25,/obj/item/nutrient/rh = 15,/obj/item/weapon/pestspray = 20, + products = list(/obj/item/nutrient/ez = 35,/obj/item/nutrient/l4z = 25,/obj/item/nutrient/rh = 15,/obj/item/weapon/pestspray = 20, /obj/item/weapon/reagent_containers/syringe = 5,/obj/item/weapon/storage/bag/plants = 5) premium = list(/obj/item/weapon/reagent_containers/glass/bottle/ammonia = 10,/obj/item/weapon/reagent_containers/glass/bottle/diethylamine = 5) diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm index 192599073a..41628f279e 100644 --- a/code/game/mecha/equipment/weapons/weapons.dm +++ b/code/game/mecha/equipment/weapons/weapons.dm @@ -117,7 +117,7 @@ icon_state = "mecha_taser" energy_drain = 20 equip_cooldown = 8 - projectile = /obj/item/projectile/energy/electrode + projectile = /obj/item/projectile/beam/stun fire_sound = 'sound/weapons/Taser.ogg' diff --git a/code/game/objects/effects/decals/posters/bs12.dm b/code/game/objects/effects/decals/posters/bs12.dm index 8629c4fb73..3d6261fb9a 100644 --- a/code/game/objects/effects/decals/posters/bs12.dm +++ b/code/game/objects/effects/decals/posters/bs12.dm @@ -91,8 +91,8 @@ /datum/poster/bay_19 icon_state="bsposter19" - name = "Respect a Soghun" - desc = "This poster depicts a well dressed looking Soghun receiving a prestigious award. It appears to espouse greater co-operation and harmony between the two races." + name = "Respect a Unathi" + desc = "This poster depicts a well dressed looking Unathi receiving a prestigious award. It appears to espouse greater co-operation and harmony between the two races." /datum/poster/bay_20 icon_state="bsposter20" @@ -142,4 +142,4 @@ /datum/poster/bay_29 icon_state="bsposter29" name = "Winter Is Coming" - desc = "On the poster is a frighteningly large wolf, he warns: \"Only YOU can keep the station from freezing during planetary occultation!\"" \ No newline at end of file + desc = "On the poster is a frighteningly large wolf, he warns: \"Only YOU can keep the station from freezing during planetary occultation!\"" diff --git a/code/game/objects/explosion.dm b/code/game/objects/explosion.dm index c024b49831..c48d062e9e 100644 --- a/code/game/objects/explosion.dm +++ b/code/game/objects/explosion.dm @@ -26,9 +26,37 @@ proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impa epicenter = get_turf(epicenter) if(!epicenter) return + var/max_range = max(devastation_range, heavy_impact_range, light_impact_range, flash_range) + //playsound(epicenter, 'sound/effects/explosionfar.ogg', 100, 1, round(devastation_range*2,1) ) + //playsound(epicenter, "explosion", 100, 1, round(devastation_range,1) ) - playsound(epicenter, 'sound/effects/explosionfar.ogg', 100, 1, round(devastation_range*2,1) ) - playsound(epicenter, "explosion", 100, 1, round(devastation_range,1) ) +// 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 + var/far_dist = 0 + far_dist += heavy_impact_range * 5 + far_dist += devastation_range * 20 + 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) var/close = range(world.view+round(devastation_range,1), epicenter) // to all distanced mobs play a different sound @@ -55,7 +83,7 @@ proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impa var/y0 = epicenter.y var/z0 = epicenter.z - for(var/turf/T in range(epicenter, max(devastation_range, heavy_impact_range, light_impact_range))) + for(var/turf/T in range(epicenter, max_range)) var/dist = cheap_pythag(T.x - x0,T.y - y0) if(dist < devastation_range) dist = 1 diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 7f954721d4..3a10e94f3c 100755 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -10,7 +10,7 @@ var/global/list/obj/item/device/pda/PDAs = list() icon = 'icons/obj/pda.dmi' icon_state = "pda" item_state = "electronic" - w_class = 1.0 + w_class = 2.0 flags = FPRINT | TABLEPASS slot_flags = SLOT_ID | SLOT_BELT @@ -338,7 +338,7 @@ var/global/list/obj/item/device/pda/PDAs = list() return lastmode = mode - + var/title = "Personal Data Assistant" var/data[0] // This is the data that will be sent to the PDA @@ -367,7 +367,7 @@ var/global/list/obj/item/device/pda/PDAs = list() if(mode in cartmodes) data["records"] = cartridge.create_NanoUI_values() - if(mode == 0) + if(mode == 0) cartdata["name"] = cartridge.name cartdata["access"] = list(\ "access_security" = cartridge.access_security,\ diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm index 2adadfd94b..152aa2fa34 100644 --- a/code/game/objects/items/devices/flash.dm +++ b/code/game/objects/items/devices/flash.dm @@ -4,7 +4,7 @@ icon_state = "flash" item_state = "flashbang" //looks exactly like a flash (and nothing like a flashbang) throwforce = 5 - w_class = 1.0 + w_class = 2.0 throw_speed = 4 throw_range = 10 flags = FPRINT | TABLEPASS| CONDUCT diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index a89a4573ea..bb8132744f 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -107,6 +107,7 @@ item_state = "" flags = FPRINT | TABLEPASS | CONDUCT brightness_on = 2 + w_class = 1 // the desk lamps are a bit special diff --git a/code/game/objects/items/devices/megaphone.dm b/code/game/objects/items/devices/megaphone.dm index ec8075e85b..371fe3b8c4 100644 --- a/code/game/objects/items/devices/megaphone.dm +++ b/code/game/objects/items/devices/megaphone.dm @@ -3,7 +3,7 @@ desc = "A device used to project your voice. Loudly." icon_state = "megaphone" item_state = "radio" - w_class = 1.0 + w_class = 2.0 flags = FPRINT | TABLEPASS | CONDUCT var/spamcheck = 0 diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index ea3a216878..569aad1c84 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -218,7 +218,7 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use del(A) return -/obj/item/device/radio/talk_into(mob/living/M as mob, message, channel) +/obj/item/device/radio/talk_into(mob/living/M as mob, message, channel, var/verb = "says", var/datum/language/speaking = null) if(!on) return // the device has to be on // Fix for permacell radios, but kinda eh about actually fixing them. if(!M || !message) return @@ -348,7 +348,9 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use "type" = 0, // determines what type of radio input it is: normal broadcast "server" = null, // the last server to log this signal "reject" = 0, // if nonzero, the signal will not be accepted by any broadcasting machinery - "level" = position.z // The source's z level + "level" = position.z, // The source's z level + "language" = speaking, + "verb" = verb ) signal.frequency = connection.frequency // Quick frequency set @@ -401,7 +403,9 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use "type" = 0, "server" = null, "reject" = 0, - "level" = position.z + "level" = position.z, + "language" = speaking, + "verb" = verb ) signal.frequency = connection.frequency // Quick frequency set @@ -423,7 +427,7 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use Broadcast_Message(connection, M, voicemask, pick(M.speak_emote), src, message, displayname, jobname, real_name, M.voice_name, - filter_type, signal.data["compression"], list(position.z), connection.frequency) + filter_type, signal.data["compression"], list(position.z), connection.frequency,verb,speaking) @@ -596,11 +600,13 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use else R.show_message(rendered, 2) -/obj/item/device/radio/hear_talk(mob/M as mob, msg) +/obj/item/device/radio/hear_talk(mob/M as mob, msg, var/verb = "says", var/datum/language/speaking = null) if (broadcasting) if(get_dist(src, M) <= canhear_range) - talk_into(M, msg) + talk_into(M, msg,null,verb,speaking) + + /* /obj/item/device/radio/proc/accept_rad(obj/item/device/radio/R as obj, message) diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 7e616a8f35..d3f7523988 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -68,7 +68,7 @@ REAGENT SCANNER flags = FPRINT | TABLEPASS | CONDUCT slot_flags = SLOT_BELT throwforce = 3 - w_class = 1.0 + w_class = 2.0 throw_speed = 5 throw_range = 10 m_amt = 200 diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm index 555dbe1cae..188787f83b 100644 --- a/code/game/objects/items/devices/taperecorder.dm +++ b/code/game/objects/items/devices/taperecorder.dm @@ -3,7 +3,7 @@ name = "universal recorder" icon_state = "taperecorderidle" item_state = "analyzer" - w_class = 1.0 + w_class = 2.0 m_amt = 60 g_amt = 30 var/emagged = 0.0 diff --git a/code/game/objects/items/latexballoon.dm b/code/game/objects/items/latexballoon.dm index 6e1c608cb2..5ad758015e 100644 --- a/code/game/objects/items/latexballoon.dm +++ b/code/game/objects/items/latexballoon.dm @@ -5,7 +5,7 @@ item_state = "lgloves" force = 0 throwforce = 0 - w_class = 1.0 + w_class = 2.0 throw_speed = 1 throw_range = 15 var/state diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index 47175e20d1..c53bd3f99b 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -4,7 +4,7 @@ icon = 'icons/obj/items.dmi' amount = 5 max_amount = 5 - w_class = 1 + w_class = 2 throw_speed = 4 throw_range = 20 var/heal_brute = 0 @@ -17,7 +17,7 @@ if ( ! (istype(user, /mob/living/carbon/human) || \ istype(user, /mob/living/silicon) || \ - istype(user, /mob/living/carbon/monkey) && ticker && ticker.mode.name == "monkey") ) + istype(user, /mob/living/carbon/monkey)) ) user << "\red You don't have the dexterity to do this!" return 1 diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 3a157aa618..14bad64262 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -131,7 +131,7 @@ var/global/list/datum/stack_recipe/wood_recipes = list ( \ new/datum/stack_recipe("wooden barricade", /obj/structure/barricade/wooden, 5, time = 50, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("wooden door", /obj/structure/mineral_door/wood, 10, time = 20, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("coffin", /obj/structure/closet/coffin, 5, time = 15, one_per_turf = 1, on_floor = 1), \ - new/datum/stack_recipe("apiary", /obj/item/apiary, 10, time = 25, one_per_turf = 0, on_floor = 0), \ +// new/datum/stack_recipe("apiary", /obj/item/apiary, 10, time = 25, one_per_turf = 0, on_floor = 0) ) /obj/item/stack/sheet/wood diff --git a/code/game/objects/items/trash.dm b/code/game/objects/items/trash.dm index 9b955195db..756812ccb1 100644 --- a/code/game/objects/items/trash.dm +++ b/code/game/objects/items/trash.dm @@ -4,7 +4,7 @@ //Added by Jack Rost /obj/item/trash icon = 'icons/obj/trash.dmi' - w_class = 1.0 + w_class = 2.0 desc = "This is rubbish." raisins name = "4no raisins" diff --git a/code/game/objects/items/weapons/shields.dm b/code/game/objects/items/weapons/shields.dm index 30d199cf97..21a4650f35 100644 --- a/code/game/objects/items/weapons/shields.dm +++ b/code/game/objects/items/weapons/shields.dm @@ -41,7 +41,7 @@ throwforce = 5.0 throw_speed = 1 throw_range = 4 - w_class = 1 + w_class = 2 origin_tech = "materials=4;magnets=3;syndicate=4" attack_verb = list("shoved", "bashed") var/active = 0 diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm index 2219619720..f7da60688e 100644 --- a/code/game/objects/items/weapons/storage/bags.dm +++ b/code/game/objects/items/weapons/storage/bags.dm @@ -94,7 +94,7 @@ storage_slots = 50; //the number of plant pieces it can carry. max_combined_w_class = 200 //Doesn't matter what this is, so long as it's more or equal to storage_slots * plants.w_class max_w_class = 3 - w_class = 1 + w_class = 2 can_hold = list("/obj/item/weapon/reagent_containers/food/snacks/grown","/obj/item/seeds","/obj/item/weapon/grown") @@ -252,5 +252,5 @@ storage_slots = 50; //the number of cash pieces it can carry. max_combined_w_class = 200 //Doesn't matter what this is, so long as it's more or equal to storage_slots * cash.w_class max_w_class = 3 - w_class = 1 + w_class = 2 can_hold = list("/obj/item/weapon/coin","/obj/item/weapon/spacecash") diff --git a/code/game/objects/items/weapons/storage/briefcase.dm b/code/game/objects/items/weapons/storage/briefcase.dm index 6fa791782d..126d60e1e4 100644 --- a/code/game/objects/items/weapons/storage/briefcase.dm +++ b/code/game/objects/items/weapons/storage/briefcase.dm @@ -2,6 +2,7 @@ name = "briefcase" desc = "It's made of AUTHENTIC faux-leather and has a price-tag still attached. Its owner must be a real professional." icon_state = "briefcase" + item_state = "briefcase" flags = FPRINT | TABLEPASS| CONDUCT force = 8.0 throw_speed = 1 diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index ea7c9bdd90..776062c1b9 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -117,3 +117,20 @@ new /obj/item/clothing/suit/space/syndicate(src) new /obj/item/clothing/head/helmet/space/syndicate(src) return +/obj/item/weapon/storage/box/syndie_kit/chameleon + name = "Chameleon Kit" + desc = "Comes with all the clothes you need to impersonate most people. Acting lessons sold seperately." + storage_slots = 10 + +/obj/item/weapon/storage/box/syndie_kit/chameleon/New() + ..() + new /obj/item/clothing/under/chameleon(src) + new /obj/item/clothing/head/chameleon(src) + new /obj/item/clothing/suit/chameleon(src) + new /obj/item/clothing/shoes/chameleon(src) + new /obj/item/weapon/storage/backpack/chameleon(src) + new /obj/item/clothing/gloves/chameleon(src) + new /obj/item/clothing/mask/chameleon(src) + new /obj/item/clothing/glasses/chameleon(src) + new /obj/item/weapon/gun/projectile/chameleon(src) + new /obj/item/ammo_magazine/chameleon(src) \ No newline at end of file diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index 922d926376..77a9d1267b 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -6,7 +6,7 @@ flags = FPRINT | TABLEPASS slot_flags = SLOT_BELT throwforce = 0 - w_class = 1.0 + w_class = 2.0 throw_speed = 7 throw_range = 15 attack_verb = list("banned") @@ -26,7 +26,7 @@ throw_speed = 1 throw_range = 4 throwforce = 10 - w_class = 1 + w_class = 2 suicide_act(mob/user) viewers(user) << "\red [user] is impaling \himself with the [src.name]! It looks like \he's trying to commit suicide." diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm index 4ea23ec085..8e47b6479c 100644 --- a/code/game/objects/structures/bedsheet_bin.dm +++ b/code/game/objects/structures/bedsheet_bin.dm @@ -14,7 +14,7 @@ LINEN BINS throwforce = 1 throw_speed = 1 throw_range = 2 - w_class = 1.0 + w_class = 2.0 item_color = "white" diff --git a/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm b/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm index a8024b0cd5..6a6a1eee09 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm @@ -23,5 +23,5 @@ new /obj/item/clothing/head/greenbandana(src) new /obj/item/weapon/minihoe(src) new /obj/item/weapon/hatchet(src) - new /obj/item/weapon/bee_net(src) +// new /obj/item/weapon/bee_net(src) //No more bees, March 2014 return \ No newline at end of file diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm index 9713c7c9eb..cfcc3c1176 100644 --- a/code/game/objects/structures/extinguisher.dm +++ b/code/game/objects/structures/extinguisher.dm @@ -28,6 +28,13 @@ /obj/structure/extinguisher_cabinet/attack_hand(mob/user) if(isrobot(user) || isalien(user)) return + if (hasorgans(user)) + var/datum/organ/external/temp = user:organs_by_name["r_hand"] + if (user.hand) + temp = user:organs_by_name["l_hand"] + if(temp && !temp.is_usable()) + user << "You try to move your [temp.display_name], but cannot!" + return if(has_extinguisher) user.put_in_hands(has_extinguisher) user << "You take [has_extinguisher] from [src]." @@ -62,4 +69,4 @@ else icon_state = "extinguisher_full" else - icon_state = "extinguisher_empty" \ No newline at end of file + icon_state = "extinguisher_empty" diff --git a/code/game/objects/structures/inflatable.dm b/code/game/objects/structures/inflatable.dm new file mode 100644 index 0000000000..bc0f907a58 --- /dev/null +++ b/code/game/objects/structures/inflatable.dm @@ -0,0 +1,304 @@ +/obj/item/inflatable + name = "inflatable wall" + desc = "A folded membrane which rapidly expands into a large cubical shape on activation." + icon = 'icons/obj/inflatable.dmi' + icon_state = "folded_wall" + w_class = 3.0 + + attack_self(mob/user) + playsound(loc, 'sound/items/zip.ogg', 75, 1) + user << "\blue You inflate [src]." + var/obj/structure/inflatable/R = new /obj/structure/inflatable(user.loc) + src.transfer_fingerprints_to(R) + R.add_fingerprint(user) + del(src) + +/obj/structure/inflatable + name = "inflatable wall" + desc = "An inflated membrane. Do not puncture." + density = 1 + anchored = 1 + opacity = 0 + + icon = 'icons/obj/inflatable.dmi' + icon_state = "wall" + + var/health = 50.0 + + + New(location) + ..() + update_nearby_tiles(need_rebuild=1) + + Del() + update_nearby_tiles() + ..() + + proc/update_nearby_tiles(need_rebuild) //Copypasta from airlock code + if(!air_master) + return 0 + air_master.mark_for_update(get_turf(src)) + return 1 + + + + CanPass(atom/movable/mover, turf/target, height=0, air_group=0) + return 0 + + bullet_act(var/obj/item/projectile/Proj) + health -= Proj.damage + ..() + if(health <= 0) + deflate(1) + return + + + ex_act(severity) + switch(severity) + if(1.0) + del(src) + return + if(2.0) + deflate(1) + return + if(3.0) + if(prob(50)) + deflate(1) + return + + + blob_act() + deflate(1) + + + meteorhit() + //world << "glass at [x],[y],[z] Mhit" + deflate(1) + + attack_paw(mob/user as mob) + return attack_generic(user, 15) + + attack_hand(mob/user as mob) + add_fingerprint(user) + return + + + proc/attack_generic(mob/user as mob, damage = 0) //used by attack_alien, attack_animal, and attack_slime + health -= damage + if(health <= 0) + user.visible_message("[user] tears open [src]!") + deflate(1) + else //for nicer text~ + user.visible_message("[user] tears at [src]!") + + attack_alien(mob/user as mob) + if(islarva(user)) return + attack_generic(user, 15) + + attack_animal(mob/user as mob) + if(!isanimal(user)) return + var/mob/living/simple_animal/M = user + if(M.melee_damage_upper <= 0) return + attack_generic(M, M.melee_damage_upper) + + + attack_slime(mob/user as mob) + if(!isslimeadult(user)) return + attack_generic(user, rand(10, 15)) + + + attackby(obj/item/weapon/W as obj, mob/user as mob) + if(!istype(W)) return + + if (is_sharp(W)) + visible_message("\red [user] pierces [src] with [W]!") + deflate(1) + if(W.damtype == BRUTE || W.damtype == BURN) + hit(W.force) + ..() + return + + proc/hit(var/damage, var/sound_effect = 1) + health = max(0, health - damage) + if(sound_effect) + playsound(loc, 'sound/effects/Glasshit.ogg', 75, 1) + if(health <= 0) + deflate(1) + + + proc/deflate(var/violent=0) + playsound(loc, 'sound/machines/hiss.ogg', 75, 1) + if(violent) + visible_message("[src] rapidly deflates!") + var/obj/item/inflatable/torn/R = new /obj/item/inflatable/torn(loc) + src.transfer_fingerprints_to(R) + del(src) + else + //user << "\blue You slowly deflate the inflatable wall." + visible_message("[src] slowly deflates.") + spawn(50) + var/obj/item/inflatable/R = new /obj/item/inflatable(loc) + src.transfer_fingerprints_to(R) + del(src) + + verb/hand_deflate() + set name = "Deflate" + set category = "Object" + set src in oview(1) + + deflate() + +/obj/item/inflatable/door/ + name = "inflatable door" + desc = "A folded membrane which rapidly expands into a simple door on activation." + icon = 'icons/obj/inflatable.dmi' + icon_state = "folded_door" + + attack_self(mob/user) + playsound(loc, 'sound/items/zip.ogg', 75, 1) + user << "\blue You inflate [src]." + var/obj/structure/inflatable/door/R = new /obj/structure/inflatable/door(user.loc) + src.transfer_fingerprints_to(R) + R.add_fingerprint(user) + del(src) + +/obj/structure/inflatable/door //Based on mineral door code + name = "inflatable door" + density = 1 + anchored = 1 + opacity = 0 + + icon = 'icons/obj/inflatable.dmi' + icon_state = "door_closed" + + var/state = 0 //closed, 1 == open + var/isSwitchingStates = 0 + + //Bumped(atom/user) + // ..() + // if(!state) + // return TryToSwitchState(user) + // return + + attack_ai(mob/user as mob) //those aren't machinery, they're just big fucking slabs of a mineral + if(isAI(user)) //so the AI can't open it + return + else if(isrobot(user)) //but cyborgs can + if(get_dist(user,src) <= 1) //not remotely though + return TryToSwitchState(user) + + attack_paw(mob/user as mob) + return TryToSwitchState(user) + + attack_hand(mob/user as mob) + return TryToSwitchState(user) + + CanPass(atom/movable/mover, turf/target, height=0, air_group=0) + if(air_group) + return state + if(istype(mover, /obj/effect/beam)) + return !opacity + return !density + + proc/TryToSwitchState(atom/user) + if(isSwitchingStates) return + if(ismob(user)) + var/mob/M = user + if(world.time - user.last_bumped <= 60) return //NOTE do we really need that? + if(M.client) + if(iscarbon(M)) + var/mob/living/carbon/C = M + if(!C.handcuffed) + SwitchState() + else + SwitchState() + else if(istype(user, /obj/mecha)) + SwitchState() + + proc/SwitchState() + if(state) + Close() + else + Open() + update_nearby_tiles() + + proc/Open() + isSwitchingStates = 1 + //playsound(loc, 'sound/effects/stonedoor_openclose.ogg', 100, 1) + flick("door_opening",src) + sleep(10) + density = 0 + opacity = 0 + state = 1 + update_icon() + isSwitchingStates = 0 + + proc/Close() + isSwitchingStates = 1 + //playsound(loc, 'sound/effects/stonedoor_openclose.ogg', 100, 1) + flick("door_closing",src) + sleep(10) + density = 1 + opacity = 0 + state = 0 + update_icon() + isSwitchingStates = 0 + + update_icon() + if(state) + icon_state = "door_open" + else + icon_state = "door_closed" + + deflate(var/violent=0) + playsound(loc, 'sound/machines/hiss.ogg', 75, 1) + if(violent) + visible_message("[src] rapidly deflates!") + var/obj/item/inflatable/door/torn/R = new /obj/item/inflatable/door/torn(loc) + src.transfer_fingerprints_to(R) + del(src) + else + //user << "\blue You slowly deflate the inflatable wall." + visible_message("[src] slowly deflates.") + spawn(50) + var/obj/item/inflatable/door/R = new /obj/item/inflatable/door(loc) + src.transfer_fingerprints_to(R) + del(src) + + +/obj/item/inflatable/torn + name = "torn inflatable wall" + desc = "A folded membrane which rapidly expands into a large cubical shape on activation. It is too torn to be usable." + icon = 'icons/obj/inflatable.dmi' + icon_state = "folded_wall_torn" + + attack_self(mob/user) + user << "\blue The inflatable wall is too torn to be inflated!" + add_fingerprint(user) + +/obj/item/inflatable/door/torn + name = "torn inflatable door" + desc = "A folded membrane which rapidly expands into a simple door on activation. It is too torn to be usable." + icon = 'icons/obj/inflatable.dmi' + icon_state = "folded_door_torn" + + attack_self(mob/user) + user << "\blue The inflatable door is too torn to be inflated!" + add_fingerprint(user) + +/obj/item/weapon/storage/briefcase/inflatable + name = "inflatable barrier box" + desc = "Contains inflatable walls and doors." + icon_state = "inf_box" + item_state = "syringe_kit" + max_combined_w_class = 21 + + New() + ..() + new /obj/item/inflatable/door(src) + new /obj/item/inflatable/door(src) + new /obj/item/inflatable/door(src) + new /obj/item/inflatable(src) + new /obj/item/inflatable(src) + new /obj/item/inflatable(src) + new /obj/item/inflatable(src) \ No newline at end of file diff --git a/code/game/objects/structures/musician.dm b/code/game/objects/structures/musician.dm index c9bcbda3e5..425c03ad8c 100644 --- a/code/game/objects/structures/musician.dm +++ b/code/game/objects/structures/musician.dm @@ -204,7 +204,11 @@ if("Cn9") soundfile = 'sound/piano/Cn9.ogg' else return - hearers(15, src) << sound(soundfile) + //hearers(15, src) << sound(soundfile) + var/turf/source = get_turf(src) + for(var/mob/M in hearers(15, source)) + M.playsound_local(source, file(soundfile), 100, falloff = 5) + /obj/structure/device/piano/proc/playsong() do diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 237ee6c92f..60b7d200a9 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -323,15 +323,23 @@ anchored = 1 var/busy = 0 //Something's being washed at the moment -/obj/structure/sink/attack_hand(mob/M as mob) - if(isrobot(M) || isAI(M)) +/obj/structure/sink/attack_hand(mob/user as mob) + if (hasorgans(user)) + var/datum/organ/external/temp = user:organs_by_name["r_hand"] + if (user.hand) + temp = user:organs_by_name["l_hand"] + if(temp && !temp.is_usable()) + user << "You try to move your [temp.display_name], but cannot!" + return + + if(isrobot(user) || isAI(user)) return - if(!Adjacent(M)) + if(!Adjacent(user)) return if(busy) - M << "\red Someone's already washing here." + user << "\red Someone's already washing here." return usr << "\blue You start washing your hands." @@ -340,13 +348,14 @@ sleep(40) busy = 0 - if(!Adjacent(M)) return //Person has moved away from the sink + if(!Adjacent(user)) return //Person has moved away from the sink - M.clean_blood() - if(ishuman(M)) - M:update_inv_gloves() + user.clean_blood() + if(ishuman(user)) + user:update_inv_gloves() for(var/mob/V in viewers(src, null)) - V.show_message("\blue [M] washes their hands using \the [src].") + V.show_message("\blue [user] washes their hands using \the [src].") + /obj/structure/sink/attackby(obj/item/O as obj, mob/user as mob) if(busy) @@ -415,4 +424,4 @@ /obj/structure/sink/puddle/attackby(obj/item/O as obj, mob/user as mob) icon_state = "puddle-splash" ..() - icon_state = "puddle" \ No newline at end of file + icon_state = "puddle" diff --git a/code/game/sound.dm b/code/game/sound.dm index 67062e64f3..b79504bf1d 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -1,79 +1,41 @@ -/proc/playsound(var/atom/source, soundin, vol as num, vary, extrarange as num) - //Frequency stuff only works with 45kbps oggs. +var/list/shatter_sound = list('sound/effects/Glassbr1.ogg','sound/effects/Glassbr2.ogg','sound/effects/Glassbr3.ogg') +var/list/explosion_sound = list('sound/effects/Explosion1.ogg','sound/effects/Explosion2.ogg') +var/list/spark_sound = list('sound/effects/sparks1.ogg','sound/effects/sparks2.ogg','sound/effects/sparks3.ogg','sound/effects/sparks4.ogg') +var/list/rustle_sound = list('sound/effects/rustle1.ogg','sound/effects/rustle2.ogg','sound/effects/rustle3.ogg','sound/effects/rustle4.ogg','sound/effects/rustle5.ogg') +var/list/punch_sound = list('sound/weapons/punch1.ogg','sound/weapons/punch2.ogg','sound/weapons/punch3.ogg','sound/weapons/punch4.ogg') +var/list/clown_sound = list('sound/effects/clownstep1.ogg','sound/effects/clownstep2.ogg') +var/list/swing_hit_sound = list('sound/weapons/genhit1.ogg', 'sound/weapons/genhit2.ogg', 'sound/weapons/genhit3.ogg') +var/list/hiss_sound = list('sound/voice/hiss1.ogg','sound/voice/hiss2.ogg','sound/voice/hiss3.ogg','sound/voice/hiss4.ogg') +var/list/page_sound = list('sound/effects/pageturn1.ogg', 'sound/effects/pageturn2.ogg','sound/effects/pageturn3.ogg') +//var/list/gun_sound = list('sound/weapons/Gunshot.ogg', 'sound/weapons/Gunshot2.ogg','sound/weapons/Gunshot3.ogg','sound/weapons/Gunshot4.ogg') - switch(soundin) - if ("shatter") soundin = pick('sound/effects/Glassbr1.ogg','sound/effects/Glassbr2.ogg','sound/effects/Glassbr3.ogg') - if ("explosion") soundin = pick('sound/effects/Explosion1.ogg','sound/effects/Explosion2.ogg') - if ("sparks") soundin = pick('sound/effects/sparks1.ogg','sound/effects/sparks2.ogg','sound/effects/sparks3.ogg','sound/effects/sparks4.ogg') - if ("rustle") soundin = pick('sound/effects/rustle1.ogg','sound/effects/rustle2.ogg','sound/effects/rustle3.ogg','sound/effects/rustle4.ogg','sound/effects/rustle5.ogg') - if ("punch") soundin = pick('sound/weapons/punch1.ogg','sound/weapons/punch2.ogg','sound/weapons/punch3.ogg','sound/weapons/punch4.ogg') - if ("clownstep") soundin = pick('sound/effects/clownstep1.ogg','sound/effects/clownstep2.ogg') - if ("swing_hit") soundin = pick('sound/weapons/genhit1.ogg', 'sound/weapons/genhit2.ogg', 'sound/weapons/genhit3.ogg') - if ("hiss") soundin = pick('sound/voice/hiss1.ogg','sound/voice/hiss2.ogg','sound/voice/hiss3.ogg','sound/voice/hiss4.ogg') - if ("pageturn") soundin = pick('sound/effects/pageturn1.ogg', 'sound/effects/pageturn2.ogg','sound/effects/pageturn3.ogg') +/proc/playsound(var/atom/source, soundin, vol as num, vary, extrarange as num, falloff) - var/sound/S = sound(soundin) - S.wait = 0 //No queue - S.channel = 0 //Any channel - S.volume = vol + soundin = get_sfx(soundin) // same sound for everyone - if (vary) - S.frequency = rand(32000, 55000) + if(isarea(source)) + error("[source] is an area and is trying to make the sound: [soundin]") + return - for (var/A in range(world.view+extrarange, source)) // Plays for people in range. + var/frequency = get_rand_frequency() // Same frequency for everybody + var/turf/turf_source = get_turf(source) - if(ismob(A)) - var/mob/M = A - var/mob/M2 = locate(/mob/, M) - if (M2 && M2.client) - if(M2.ear_deaf <= 0 || !M.ear_deaf) - if(isturf(source)) - var/dx = source.x - M2.x - S.pan = max(-100, min(100, dx/8.0 * 100)) + // Looping through the player list has the added bonus of working for mobs inside containers + for (var/P in player_list) + var/mob/M = P + if(!M || !M.client) + continue + if(get_dist(M, turf_source) <= world.view + extrarange) + var/turf/T = get_turf(M) + if(T && T.z == turf_source.z) + M.playsound_local(turf_source, soundin, vol, vary, frequency, falloff) - M2 << S +var/const/FALLOFF_SOUNDS = 1 +var/const/SURROUND_CAP = 7 - if (M.client) - if(M.ear_deaf <= 0 || !M.ear_deaf) - if(isturf(source)) - var/dx = source.x - M.x - S.pan = max(-100, min(100, dx/8.0 * 100)) - - M << S - - if(istype(A, /obj/structure/closet)) - var/obj/O = A - for(var/mob/M in O) - if (M.client) - if(M.ear_deaf <= 0 || !M.ear_deaf) - if(isturf(source)) - var/dx = source.x - M.x - S.pan = max(-100, min(100, dx/8.0 * 100)) - - M << S - - for(var/obj/mecha/mech in range(world.view+extrarange, source)) - var/mob/M = mech.occupant - if (M && M.client) - if(M.ear_deaf <= 0 || !M.ear_deaf) - if(isturf(source)) - var/dx = source.x - M.x - S.pan = max(-100, min(100, dx/8.0 * 100)) - - M << S - // Now plays for people in lockers! -- Polymorph - -/mob/proc/playsound_local(var/atom/source, soundin, vol as num, vary, extrarange as num) +/mob/proc/playsound_local(var/turf/turf_source, soundin, vol as num, vary, frequency, falloff) if(!src.client || ear_deaf > 0) return - switch(soundin) - if ("shatter") soundin = pick('sound/effects/Glassbr1.ogg','sound/effects/Glassbr2.ogg','sound/effects/Glassbr3.ogg') - if ("explosion") soundin = pick('sound/effects/Explosion1.ogg','sound/effects/Explosion2.ogg') - if ("sparks") soundin = pick('sound/effects/sparks1.ogg','sound/effects/sparks2.ogg','sound/effects/sparks3.ogg','sound/effects/sparks4.ogg') - if ("rustle") soundin = pick('sound/effects/rustle1.ogg','sound/effects/rustle2.ogg','sound/effects/rustle3.ogg','sound/effects/rustle4.ogg','sound/effects/rustle5.ogg') - if ("punch") soundin = pick('sound/weapons/punch1.ogg','sound/weapons/punch2.ogg','sound/weapons/punch3.ogg','sound/weapons/punch4.ogg') - if ("clownstep") soundin = pick('sound/effects/clownstep1.ogg','sound/effects/clownstep2.ogg') - if ("swing_hit") soundin = pick('sound/weapons/genhit1.ogg', 'sound/weapons/genhit2.ogg', 'sound/weapons/genhit3.ogg') - if ("hiss") soundin = pick('sound/voice/hiss1.ogg','sound/voice/hiss2.ogg','sound/voice/hiss3.ogg','sound/voice/hiss4.ogg') + soundin = get_sfx(soundin) var/sound/S = sound(soundin) S.wait = 0 //No queue @@ -81,14 +43,46 @@ S.volume = vol if (vary) - S.frequency = rand(32000, 55000) - if(isturf(source)) - var/dx = source.x - src.x - S.pan = max(-100, min(100, dx/8.0 * 100)) + if(frequency) + S.frequency = frequency + else + S.frequency = get_rand_frequency() + + if(isturf(turf_source)) + // 3D sounds, the technology is here! + var/turf/T = get_turf(src) + var/dx = turf_source.x - T.x // Hearing from the right/left + + S.x = round(max(-SURROUND_CAP, min(SURROUND_CAP, dx)), 1) + + var/dz = turf_source.y - T.y // Hearing from infront/behind + S.z = round(max(-SURROUND_CAP, min(SURROUND_CAP, dz)), 1) + + // The y value is for above your head, but there is no ceiling in 2d spessmens. + S.y = 1 + S.falloff = (falloff ? falloff : FALLOFF_SOUNDS) src << S /client/proc/playtitlemusic() if(!ticker || !ticker.login_music) return if(prefs.toggles & SOUND_LOBBY) - src << sound(ticker.login_music, repeat = 0, wait = 0, volume = 85, channel = 1) // MAD JAMS \ No newline at end of file + src << sound(ticker.login_music, repeat = 0, wait = 0, volume = 85, channel = 1) // MAD JAMS + +/proc/get_rand_frequency() + return rand(32000, 55000) //Frequency stuff only works with 45kbps oggs. + +/proc/get_sfx(soundin) + if(istext(soundin)) + switch(soundin) + if ("shatter") soundin = pick(shatter_sound) + if ("explosion") soundin = pick(explosion_sound) + if ("sparks") soundin = pick(spark_sound) + if ("rustle") soundin = pick(rustle_sound) + if ("punch") soundin = pick(punch_sound) + if ("clownstep") soundin = pick(clown_sound) + if ("swing_hit") soundin = pick(swing_hit_sound) + if ("hiss") soundin = pick(hiss_sound) + if ("pageturn") soundin = pick(page_sound) + //if ("gunshot") soundin = pick(gun_sound) + return soundin \ No newline at end of file diff --git a/code/global.dm b/code/global.dm index 3c6704b456..b7f6e3e4c0 100644 --- a/code/global.dm +++ b/code/global.dm @@ -115,8 +115,8 @@ var/list/reg_dna = list( ) var/mouse_respawn_time = 5 //Amount of time that must pass between a player dying as a mouse and repawning as a mouse. In minutes. -var/CELLRATE = 0.002 // multiplier for watts per tick <> cell storage (eg: .002 means if there is a load of 1000 watts, 20 units will be taken from a cell per second) -var/CHARGELEVEL = 0.0005 // Cap for how fast cells charge, as a percentage-per-tick (.001 means cellcharge is capped to 1% per second) +var/CELLRATE = 0.002 // multiplier for watts per tick <> cell storage (eg: 0.02 means if there is a load of 1000 watts, 20 units will be taken from a cell per second) +var/CHARGELEVEL = 0.0005 // Cap for how fast cells charge, as a percentage-per-tick (0.01 means cellcharge is capped to 1% per second) var/shuttle_z = 2 //default var/airtunnel_start = 68 // default diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 33e2788bc3..462f825400 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -54,6 +54,7 @@ datum/preferences var/age = 30 //age of character var/b_type = "A+" //blood type (not-chooseable) var/underwear = 1 //underwear type + var/undershirt = 1 //undershirt type var/backbag = 2 //backpack type var/h_style = "Bald" //Hair type var/r_hair = 0 //Hair color @@ -338,6 +339,8 @@ datum/preferences else dat += "Underwear: [underwear_f[underwear]]
" + dat += "Undershirt: [undershirt_t[undershirt]]
" + dat += "Backpack Type:
[backbaglist[backbag]]
" dat += "Nanotrasen Relation:
[nanotrasen_relation]
" @@ -843,6 +846,9 @@ datum/preferences if("underwear") underwear = rand(1,underwear_m.len) ShowChoices(user) + if("undershirt") + undershirt = rand(1,undershirt_t.len) + ShowChoices(user) if("eyes") r_eyes = rand(0,255) g_eyes = rand(0,255) @@ -1019,6 +1025,15 @@ datum/preferences underwear = underwear_options.Find(new_underwear) ShowChoices(user) + if("undershirt") + var/list/undershirt_options + undershirt_options = undershirt_t + + var/new_undershirt = input(user, "Choose your character's undershirt:", "Character Preference") as null|anything in undershirt_options + if (new_undershirt) + undershirt = undershirt_options.Find(new_undershirt) + ShowChoices(user) + if("eyes") var/new_eyes = input(user, "Choose your character's eye colour:", "Character Preference") as color|null if(new_eyes) @@ -1295,6 +1310,10 @@ datum/preferences underwear = 0 //I'm sure this is 100% unnecessary, but I'm paranoid... sue me. //HAH NOW NO MORE MAGIC CLONING UNDIES character.underwear = underwear + if(undershirt > undershirt_t.len || undershirt < 1) + undershirt = 0 + character.undershirt = undershirt + if(backbag > 4 || backbag < 1) backbag = 1 //Same as above character.backbag = backbag diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index a1a928f591..86adc65265 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -84,8 +84,6 @@ S["be_special"] << be_special S["default_slot"] << default_slot S["toggles"] << toggles - S["UI_style_color"] << UI_style_color - S["UI_style_alpha"] << UI_style_alpha return 1 @@ -125,6 +123,7 @@ S["eyes_green"] >> g_eyes S["eyes_blue"] >> b_eyes S["underwear"] >> underwear + S["undershirt"] >> undershirt S["backbag"] >> backbag S["b_type"] >> b_type @@ -158,6 +157,9 @@ S["uplinklocation"] >> uplinklocation + S["UI_style_color"] << UI_style_color + S["UI_style_alpha"] << UI_style_alpha + //Sanitize metadata = sanitize_text(metadata, initial(metadata)) real_name = reject_bad_name(real_name) @@ -181,6 +183,7 @@ g_eyes = sanitize_integer(g_eyes, 0, 255, initial(g_eyes)) b_eyes = sanitize_integer(b_eyes, 0, 255, initial(b_eyes)) underwear = sanitize_integer(underwear, 1, underwear_m.len, initial(underwear)) + undershirt = sanitize_integer(undershirt, 1, undershirt_t.len, initial(undershirt)) backbag = sanitize_integer(backbag, 1, backbaglist.len, initial(backbag)) b_type = sanitize_text(b_type, initial(b_type)) @@ -231,6 +234,7 @@ S["eyes_green"] << g_eyes S["eyes_blue"] << b_eyes S["underwear"] << underwear + S["undershirt"] << undershirt S["backbag"] << backbag S["b_type"] << b_type @@ -264,6 +268,9 @@ S["uplinklocation"] << uplinklocation + S["UI_style_color"] << UI_style_color + S["UI_style_alpha"] << UI_style_alpha + return 1 diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 10ca3a2c73..8dfa25d0a6 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -241,6 +241,9 @@ BLIND // can't see anything */ var/obj/item/clothing/tie/hastie = null var/displays_id = 1 + var/rolled_down = 0 + var/basecolor + /obj/item/clothing/under/attackby(obj/item/I, mob/user) if(!hastie && istype(I, /obj/item/clothing/tie)) @@ -307,6 +310,21 @@ BLIND // can't see anything usr << "Your suit will now report your vital lifesigns as well as your coordinate position." ..() +/obj/item/clothing/under/verb/rollsuit() + set name = "Roll Down Jumpsuit" + set category = "Object" + set src in usr + if(!istype(usr, /mob/living)) return + if(usr.stat) return + + if(copytext(item_color,-2) != "_d") + basecolor = item_color + if(basecolor + "_d_s" in icon_states('icons/mob/uniform.dmi')) + item_color = item_color == "[basecolor]" ? "[basecolor]_d" : "[basecolor]" + usr.update_inv_w_uniform() + else + usr << "You cannot roll down the uniform!" + /obj/item/clothing/under/verb/removetie() set name = "Remove Accessory" set category = "Object" diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm index 385249e925..57420bbfe0 100644 --- a/code/modules/clothing/masks/miscellaneous.dm +++ b/code/modules/clothing/masks/miscellaneous.dm @@ -21,7 +21,7 @@ desc = "A sterile mask designed to help prevent the spread of diseases." icon_state = "sterile" item_state = "sterile" - w_class = 1 + w_class = 2 flags = FPRINT|TABLEPASS|MASKCOVERSMOUTH gas_transfer_coefficient = 0.90 permeability_coefficient = 0.01 diff --git a/code/modules/clothing/under/chameleon.dm b/code/modules/clothing/under/chameleon.dm index 46dbba3838..fe9da8744d 100644 --- a/code/modules/clothing/under/chameleon.dm +++ b/code/modules/clothing/under/chameleon.dm @@ -1,3 +1,7 @@ +//***************** +//**Cham Jumpsuit** +//***************** + /obj/item/clothing/under/chameleon //starts off as black name = "black jumpsuit" @@ -6,60 +10,35 @@ item_color = "black" desc = "It's a plain jumpsuit. It seems to have a small dial on the wrist." origin_tech = "syndicate=3" - siemens_coefficient = 0.8 var/list/clothing_choices = list() New() ..() - for(var/U in typesof(/obj/item/clothing/under/color)-(/obj/item/clothing/under/color)) + var/blocked = list(/obj/item/clothing/under/chameleon, /obj/item/clothing/under/cloud, + /obj/item/clothing/under/golem, /obj/item/clothing/under/gimmick)//Prevent infinite loops and bad jumpsuits. + for(var/U in typesof(/obj/item/clothing/under)-blocked) var/obj/item/clothing/under/V = new U - src.clothing_choices += V - - for(var/U in typesof(/obj/item/clothing/under/rank)-(/obj/item/clothing/under/rank)) - var/obj/item/clothing/under/V = new U - src.clothing_choices += V + src.clothing_choices[V.name] = U return - - attackby(obj/item/clothing/under/U as obj, mob/user as mob) - ..() - if(istype(U, /obj/item/clothing/under/chameleon)) - user << "\red Nothing happens." - return - if(istype(U, /obj/item/clothing/under)) - if(src.clothing_choices.Find(U)) - user << "\red Pattern is already recognised by the suit." - return - src.clothing_choices += U - user << "\red Pattern absorbed by the suit." - - emp_act(severity) name = "psychedelic" desc = "Groovy!" icon_state = "psyche" item_color = "psyche" - spawn(200) - name = "Black Jumpsuit" - icon_state = "bl_suit" - item_color = "black" - desc = null - ..() - + update_icon() + usr.update_inv_w_uniform() verb/change() - set name = "Change Color" + set name = "Change Jumpsuit Appearance" set category = "Object" set src in usr - if(icon_state == "psyche") - usr << "\red Your suit is malfunctioning" - return - - var/obj/item/clothing/under/A - A = input("Select Colour to change it to", "BOOYEA", A) in clothing_choices - if(!A) + var/picked = input("Select jumpsuit to change it to", "Chameleon Jumpsuit")as null|anything in clothing_choices + if(!picked || !clothing_choices[picked]) return + var/newtype = clothing_choices[picked] + var/obj/item/clothing/A = new newtype desc = null permeability_coefficient = 0.90 @@ -69,14 +48,415 @@ icon_state = A.icon_state item_state = A.item_state item_color = A.item_color - usr.update_inv_w_uniform() //so our overlays update. + if(usr) + usr.update_inv_w_uniform() //so our overlays update. +//***************** +//**Chameleon Hat** +//***************** +/obj/item/clothing/head/chameleon + name = "grey cap" + icon_state = "greysoft" + item_state = "greysoft" + item_color = "grey" + desc = "It looks like a plain hat, but upon closer inspection, there's an advanced holographic array installed inside. It seems to have a small dial inside." + origin_tech = "syndicate=3" + var/list/clothing_choices = list() -/obj/item/clothing/under/chameleon/all/New() - ..() - var/blocked = list(/obj/item/clothing/under/chameleon, /obj/item/clothing/under/chameleon/all) - //to prevent an infinite loop - for(var/U in typesof(/obj/item/clothing/under)-blocked) - var/obj/item/clothing/under/V = new U - src.clothing_choices += V + New() + ..() + var/blocked = list(/obj/item/clothing/head/chameleon, + /obj/item/clothing/head/space/golem, /obj/item/clothing/head/justice,)//Prevent infinite loops and bad hats. + for(var/U in typesof(/obj/item/clothing/head)-blocked) + var/obj/item/clothing/head/V = new U + src.clothing_choices[V.name] = U + return + + emp_act(severity) //Because we don't have psych for all slots right now but still want a downside to EMP. In this case your cover's blown. + name = "grey cap" + desc = "It's a baseball hat in a tasteful grey colour." + icon_state = "greysoft" + item_color = "grey" + update_icon() + usr.update_inv_head() + + verb/change() + set name = "Change Hat/Helmet Appearance" + set category = "Object" + set src in usr + + var/picked = input("Select headwear to change it to", "Chameleon Hat")as null|anything in clothing_choices + if(!picked || !clothing_choices[picked]) + return + var/newtype = clothing_choices[picked] + var/obj/item/clothing/A = new newtype + + desc = null + permeability_coefficient = 0.90 + + desc = A.desc + name = A.name + icon_state = A.icon_state + item_state = A.item_state + item_color = A.item_color + flags_inv = A.flags_inv + if(usr) + usr.update_inv_head() //so our overlays update. + +//****************** +//**Chameleon Suit** +//****************** + +/obj/item/clothing/suit/chameleon + name = "armor" + icon_state = "armor" + item_state = "armor" + desc = "It appears to be a vest of standard armor, except this is embedded with a hidden holographic cloaker, allowing it to change it's appearance, but offering no protection.. It seems to have a small dial inside." + origin_tech = "syndicate=3" + var/list/clothing_choices = list() + + New() + ..() + var/blocked = list(/obj/item/clothing/suit/chameleon, /obj/item/clothing/suit/space/space_ninja, + /obj/item/clothing/suit/golem, /obj/item/clothing/suit/suit, /obj/item/clothing/suit/cyborg_suit, /obj/item/clothing/suit/justice, + /obj/item/clothing/suit/greatcoat)//Prevent infinite loops and bad suits. + for(var/U in typesof(/obj/item/clothing/suit)-blocked) + var/obj/item/clothing/suit/V = new U + src.clothing_choices[V.name] = U + return + + emp_act(severity) //Because we don't have psych for all slots right now but still want a downside to EMP. In this case your cover's blown. + name = "armor" + desc = "An armored vest that protects against some damage." + icon_state = "armor" + item_color = "armor" + update_icon() + usr.update_inv_wear_suit() + + verb/change() + set name = "Change Exosuit Appearance" + set category = "Object" + set src in usr + + var/picked = input("Select exosuit to change it to", "Chameleon Exosuit")as null|anything in clothing_choices + if(!picked || !clothing_choices[picked]) + return + var/newtype = clothing_choices[picked] + var/obj/item/clothing/A = new newtype + + desc = null + permeability_coefficient = 0.90 + + desc = A.desc + name = A.name + icon_state = A.icon_state + item_state = A.item_state + item_color = A.item_color + flags_inv = A.flags_inv + if(usr) + usr.update_inv_wear_suit() //so our overlays update. + +//******************* +//**Chameleon Shoes** +//******************* +/obj/item/clothing/shoes/chameleon + name = "black shoes" + icon_state = "black" + item_state = "black" + item_color = "black" + desc = "They're comfy black shoes, with clever cloaking technology built in. It seems to have a small dial on the back of each shoe." + origin_tech = "syndicate=3" + var/list/clothing_choices = list() + + New() + ..() + var/blocked = list(/obj/item/clothing/shoes/chameleon, + /obj/item/clothing/shoes/golem, /obj/item/clothing/shoes/syndigaloshes, /obj/item/clothing/shoes/cyborg)//prevent infinite loops and bad shoes. + for(var/U in typesof(/obj/item/clothing/shoes)-blocked) + var/obj/item/clothing/shoes/V = new U + src.clothing_choices[V.name] = U + return + + emp_act(severity) //Because we don't have psych for all slots right now but still want a downside to EMP. In this case your cover's blown. + name = "black shoes" + desc = "A pair of black shoes." + icon_state = "black" + item_state = "black" + item_color = "black" + update_icon() + usr.update_inv_shoes() + + verb/change() + set name = "Change Footwear Appearance" + set category = "Object" + set src in usr + + var/picked = input("Select shoes to change it to", "Chameleon Shoes")as null|anything in clothing_choices + if(!picked || !clothing_choices[picked]) + return + var/newtype = clothing_choices[picked] + var/obj/item/clothing/A = new newtype + + desc = null + permeability_coefficient = 0.90 + + desc = A.desc + name = A.name + icon_state = A.icon_state + item_state = A.item_state + item_color = A.item_color + if(usr) + usr.update_inv_shoes() //so our overlays update. + +//********************** +//**Chameleon Backpack** +//********************** +/obj/item/weapon/storage/backpack/chameleon + name = "backpack" + icon_state = "backpack" + item_state = "backpack" + desc = "A backpack outfitted with cloaking tech. It seems to have a small dial inside, kept away from the storage." + origin_tech = "syndicate=3" + var/list/clothing_choices = list() + + New() + ..() + var/blocked = list(/obj/item/weapon/storage/backpack/chameleon, /obj/item/weapon/storage/backpack/satchel/withwallet) + for(var/U in typesof(/obj/item/weapon/storage/backpack)-blocked)//Prevent infinite loops and bad backpacks. + var/obj/item/weapon/storage/backpack/V = new U + src.clothing_choices[V.name] = U + return + + emp_act(severity) //Because we don't have psych for all slots right now but still want a downside to EMP. In this case your cover's blown. + name = "backpack" + desc = "You wear this on your back and put items into it." + icon_state = "backpack" + item_state = "backpack" + update_icon() + usr.update_inv_back() + + verb/change() + set name = "Change Backpack Appearance" + set category = "Object" + set src in usr + + var/picked = input("Select backpack to change it to", "Chameleon Backpack")as null|anything in clothing_choices + if(!picked || !clothing_choices[picked]) + return + var/newtype = clothing_choices[picked] + var/obj/item/weapon/storage/backpack/A = new newtype + + desc = null + permeability_coefficient = 0.90 + + desc = A.desc + name = A.name + icon_state = A.icon_state + item_state = A.item_state + item_color = A.item_color + if(usr) + usr.update_inv_back() //so our overlays update. + +//******************** +//**Chameleon Gloves** +//******************** + +/obj/item/clothing/gloves/chameleon + name = "black gloves" + icon_state = "black" + item_state = "bgloves" + item_color = "brown" + desc = "It looks like a pair of gloves, but it seems to have a small dial inside." + origin_tech = "syndicate=3" + var/list/clothing_choices = list() + + New() + ..() + var/blocked = list(/obj/item/clothing/gloves/chameleon)//Prevent infinite loops and bad hats. + for(var/U in typesof(/obj/item/clothing/gloves)-blocked) + var/obj/item/clothing/gloves/V = new U + src.clothing_choices[V.name] = U + return + + emp_act(severity) //Because we don't have psych for all slots right now but still want a downside to EMP. In this case your cover's blown. + name = "black gloves" + desc = "It looks like a pair of gloves, but it seems to have a small dial inside." + icon_state = "black" + item_color = "brown" + update_icon() + usr.update_inv_gloves() + + verb/change() + set name = "Change Gloves Appearance" + set category = "Object" + set src in usr + + var/picked = input("Select gloves to change it to", "Chameleon Gloves")as null|anything in clothing_choices + if(!picked || !clothing_choices[picked]) + return + var/newtype = clothing_choices[picked] + var/obj/item/clothing/A = new newtype + + desc = null + permeability_coefficient = 0.90 + + desc = A.desc + name = A.name + icon_state = A.icon_state + item_state = A.item_state + item_color = A.item_color + flags_inv = A.flags_inv + if(usr) + usr.update_inv_gloves() //so our overlays update. + +//****************** +//**Chameleon Mask** +//****************** + +/obj/item/clothing/mask/chameleon + name = "gas mask" + icon_state = "gas_alt" + item_state = "gas_alt" + desc = "It looks like a plain gask mask, but on closer inspection, it seems to have a small dial inside." + origin_tech = "syndicate=3" + var/list/clothing_choices = list() + + New() + ..() + var/blocked = list(/obj/item/clothing/mask/chameleon)//Prevent infinite loops and bad hats. + for(var/U in typesof(/obj/item/clothing/mask)-blocked) + var/obj/item/clothing/mask/V = new U + if(V) + src.clothing_choices[V.name] = U + return + + emp_act(severity) //Because we don't have psych for all slots right now but still want a downside to EMP. In this case your cover's blown. + name = "gas mask" + desc = "It's a gas mask." + icon_state = "gas_alt" + update_icon() + usr.update_inv_wear_mask() + verb/change() + set name = "Change Mask Appearance" + set category = "Object" + set src in usr + + var/picked = input("Select mask to change it to", "Chameleon Mask")as null|anything in clothing_choices + if(!picked || !clothing_choices[picked]) + return + var/newtype = clothing_choices[picked] + var/obj/item/clothing/A = new newtype + + desc = null + permeability_coefficient = 0.90 + + desc = A.desc + name = A.name + icon_state = A.icon_state + item_state = A.item_state + flags_inv = A.flags_inv + if(usr) + usr.update_inv_wear_mask() //so our overlays update. + +//********************* +//**Chameleon Glasses** +//********************* + +/obj/item/clothing/glasses/chameleon + name = "Optical Meson Scanner" + icon_state = "meson" + item_state = "glasses" + desc = "It looks like a plain set of mesons, but on closer inspection, it seems to have a small dial inside." + origin_tech = "syndicate=3" + var/list/clothing_choices = list() + + New() + ..() + var/blocked = list(/obj/item/clothing/glasses/chameleon)//Prevent infinite loops and bad hats. + for(var/U in typesof(/obj/item/clothing/glasses)-blocked) + var/obj/item/clothing/glasses/V = new U + src.clothing_choices[V.name] = U + return + + emp_act(severity) //Because we don't have psych for all slots right now but still want a downside to EMP. In this case your cover's blown. + name = "Optical Meson Scanner" + desc = "It's a set of mesons." + icon_state = "meson" + update_icon() + usr.update_inv_glasses() + + verb/change() + set name = "Change Glasses Appearance" + set category = "Object" + set src in usr + + var/picked = input("Select glasses to change it to", "Chameleon Glasses")as null|anything in clothing_choices + if(!picked || !clothing_choices[picked]) + return + var/newtype = clothing_choices[picked] + var/obj/item/clothing/A = new newtype + + desc = null + permeability_coefficient = 0.90 + + desc = A.desc + name = A.name + icon_state = A.icon_state + item_state = A.item_state + flags_inv = A.flags_inv + if(usr) + usr.update_inv_glasses() //so our overlays update. + +//***************** +//**Chameleon Gun** +//***************** +/obj/item/weapon/gun/projectile/chameleon + name = "desert eagle" + desc = "A fake Desert Eagle with a dial on the side to change the gun's disguise." + icon_state = "deagle" + w_class = 3.0 + max_shells = 7 + caliber = ".45" + origin_tech = "combat=2;materials=2;syndicate=8" + ammo_type = "/obj/item/ammo_casing/chameleon" + var/list/gun_choices = list() + + New() + ..() + var/blocked = list(/obj/item/weapon/gun/projectile/chameleon) + for(var/U in typesof(/obj/item/weapon/gun/)-blocked) + var/obj/item/weapon/gun/V = new U + src.gun_choices[V.name] = U + return + + emp_act(severity) + name = "desert eagle" + desc = "It's a desert eagle." + icon_state = "deagle" + update_icon() + usr.update_inv_r_hand() + usr.update_inv_l_hand() + + verb/change() + set name = "Change Gun Appearance" + set category = "Object" + set src in usr + + var/picked = input("Select gun to change it to", "Chameleon Gun")as null|anything in gun_choices + if(!picked || !gun_choices[picked]) + return + var/newtype = gun_choices[picked] + var/obj/item/weapon/gun/A = new newtype + + desc = null + permeability_coefficient = 0.90 + + desc = A.desc + name = A.name + icon_state = A.icon_state + item_state = A.item_state + flags_inv = A.flags_inv + if(usr) + usr.update_inv_r_hand() + usr.update_inv_l_hand() //so our overlays update. \ No newline at end of file diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm index 7b18520f3a..f5de6d76f6 100644 --- a/code/modules/customitems/item_defines.dm +++ b/code/modules/customitems/item_defines.dm @@ -762,7 +762,7 @@ icon = 'icons/obj/custom_items.dmi' icon_state = "mara_kilpatrick_1" flags = FPRINT|TABLEPASS - w_class = 1 + w_class = 2 ////// Small locket - Altair An-Nasaqan - Serithi @@ -775,7 +775,7 @@ item_color = "altair_locket" slot_flags = 0 flags = FPRINT|TABLEPASS - w_class = 1 + w_class = 2 slot_flags = SLOT_MASK ////// Silver locket - Konaa Hirano - Konaa_Hirano @@ -789,7 +789,7 @@ item_color = "konaahirano" slot_flags = 0 flags = FPRINT|TABLEPASS - w_class = 1 + w_class = 2 slot_flags = SLOT_MASK var/obj/item/held //Item inside locket. @@ -819,7 +819,7 @@ icon = 'icons/obj/custom_items.dmi' icon_state = "nasir_khayyam_1" flags = FPRINT|TABLEPASS - w_class = 1 + w_class = 2 slot_flags = SLOT_MASK ////// Emerald necklace - Ty Foster - Nega @@ -830,7 +830,7 @@ icon = 'icons/obj/custom_items.dmi' icon_state = "ty_foster" flags = FPRINT|TABLEPASS - w_class = 1 + w_class = 2 ////// Apollon Pendant - Michael Guess - Dragor23 /obj/item/clothing/mask/michael_guess_1 @@ -839,7 +839,7 @@ icon = 'icons/obj/custom_items.dmi' icon_state = "michael_guess_1" flags = FPRINT|TABLEPASS - w_class = 1 + w_class = 2 slot_flags = SLOT_MASK //////////// Shoes //////////// diff --git a/code/modules/detectivework/evidence.dm b/code/modules/detectivework/evidence.dm index 0c41441781..7148a5afed 100644 --- a/code/modules/detectivework/evidence.dm +++ b/code/modules/detectivework/evidence.dm @@ -6,7 +6,7 @@ icon = 'icons/obj/storage.dmi' icon_state = "evidenceobj" item_state = "" - w_class = 1 + w_class = 2 /obj/item/weapon/evidencebag/afterattack(obj/item/I, mob/user as mob, proximity) if(!proximity) return diff --git a/code/modules/economy/cash.dm b/code/modules/economy/cash.dm index 356015c6c0..481f9f8b42 100644 --- a/code/modules/economy/cash.dm +++ b/code/modules/economy/cash.dm @@ -11,7 +11,7 @@ throwforce = 1.0 throw_speed = 1 throw_range = 2 - w_class = 1.0 + w_class = 2.0 var/access = list() access = access_crate_cash var/worth = 0 diff --git a/code/modules/food/recipes_microwave.dm b/code/modules/food/recipes_microwave.dm index 3e51d03225..36cd914f27 100644 --- a/code/modules/food/recipes_microwave.dm +++ b/code/modules/food/recipes_microwave.dm @@ -1215,6 +1215,12 @@ I said no! ) result = /obj/item/weapon/reagent_containers/food/snacks/tofurkey +// Fuck Science! +/datum/recipe/ruinedvirusdish + items = list( + /obj/item/weapon/virusdish + ) + result = /obj/item/weapon/ruinedvirusdish ////////////////////////////////////////// // bs12 food port stuff diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm index 3c045350aa..26de93122b 100644 --- a/code/modules/library/lib_items.dm +++ b/code/modules/library/lib_items.dm @@ -247,7 +247,7 @@ icon_state ="scanner" throw_speed = 1 throw_range = 5 - w_class = 1.0 + w_class = 2.0 flags = FPRINT | TABLEPASS var/obj/machinery/librarycomp/computer // Associated computer - Modes 1 to 3 use this var/obj/item/weapon/book/book // Currently scanned book diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index ec85aaeaa4..dcd7e6a261 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -69,6 +69,15 @@ ..() + +/mob/dead/observer/Topic(href, href_list) + if (href_list["track"]) + var/mob/target = locate(href_list["track"]) in mob_list + if(target) + ManualFollow(target) + + + /mob/dead/attackby(obj/item/W, mob/user) if(istype(W,/obj/item/weapon/tome)) var/mob/dead/M = src diff --git a/code/modules/mob/hear_say.dm b/code/modules/mob/hear_say.dm new file mode 100644 index 0000000000..a175009a03 --- /dev/null +++ b/code/modules/mob/hear_say.dm @@ -0,0 +1,92 @@ +// At minimum every mob has a hear_say proc. + +/mob/proc/hear_say(var/message, var/verb = "says", var/datum/language/language = null, var/alt_name = "",var/italics = 0, var/mob/speaker = null) + if(!client) + return + + var/style = "body" + if(language) + if(!say_understands(speaker,language)) + message = stars(message) + verb = language.speech_verb + style = language.colour + + var/speaker_name = speaker.name + if(istype(speaker, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = speaker + speaker_name = H.GetVoice() + + if(italics) + message = "[message]" + + var/track = null + if(istype(src, /mob/dead/observer)) + if(speaker_name != speaker.real_name) + speaker_name = "[speaker.real_name] ([speaker_name])" + track = "(follow) " + if(client.prefs.toggles & CHAT_GHOSTEARS && speaker in view(src)) + message = "[message]" + + if(sdisabilities & DEAF || ear_deaf) + if(speaker == src) + src << "You cannot hear yourself speak!" + else + src << "[speaker_name][alt_name] talks but you cannot hear them." + else + src << "[speaker_name][alt_name] [track][verb], \"[message]\"" + + +/mob/proc/hear_radio(var/message, var/verb="says", var/datum/language/language=null, var/part_a, var/part_b, var/mob/speaker = null, var/hard_to_hear = 0) + if(!client) + return + var/track = null + + var/style = "body" + if(language) + if(!say_understands(speaker,language)) + message = stars(message) + verb = language.speech_verb + style = language.colour + + if(hard_to_hear) + message = stars(message) + + var/speaker_name = speaker.name + if(istype(speaker, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = speaker + if(H.voice) + speaker_name = H.voice + + if(hard_to_hear) + speaker_name = "unknown" + + if(istype(src, /mob/living/silicon/ai) && !hard_to_hear) + var/jobname // the mob's "job" + if (ishuman(speaker)) + var/mob/living/carbon/human/H = speaker + jobname = H.get_assignment() + else if (iscarbon(speaker)) // Nonhuman carbon mob + jobname = "No id" + else if (isAI(speaker)) + jobname = "AI" + else if (isrobot(speaker)) + jobname = "Cyborg" + else if (istype(speaker, /mob/living/silicon/pai)) + jobname = "Personal AI" + else + jobname = "Unknown" + + track = "[speaker_name] ([jobname])" + + if(istype(src, /mob/dead/observer)) + if(speaker_name != speaker.real_name) + speaker_name = "[speaker.real_name] ([speaker_name])" + track = "[speaker_name] (follow)" + + if(sdisabilities & DEAF || ear_deaf) + if(prob(20)) + src << "You feel your headset vibrate but can hear nothing from it!" + else if(track) + src << "[part_a][track][part_b] [verb], \"[message]\"
" + else + src << "[part_a][speaker_name][part_b] [verb], \"[message]\"
" diff --git a/code/modules/mob/living/carbon/brain/brain_item.dm b/code/modules/mob/living/carbon/brain/brain_item.dm index 93f56618a0..5e94ea9bc9 100644 --- a/code/modules/mob/living/carbon/brain/brain_item.dm +++ b/code/modules/mob/living/carbon/brain/brain_item.dm @@ -5,7 +5,7 @@ icon_state = "brain2" flags = TABLEPASS force = 1.0 - w_class = 1.0 + w_class = 2.0 throwforce = 1.0 throw_speed = 3 throw_range = 5 diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index feacbe4a98..0e6d130a56 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -195,17 +195,22 @@ if (istype(src,/mob/living/carbon/human) && src:w_uniform) var/mob/living/carbon/human/H = src H.w_uniform.add_fingerprint(M) - src.sleeping = max(0,src.sleeping-5) - if(src.sleeping == 0) - src.resting = 0 + + if(lying) + src.sleeping = max(0,src.sleeping-5) + if(src.sleeping == 0) + src.resting = 0 + M.visible_message("[M] shakes [src] trying to wake [t_him] up!", \ + "You shake [src] trying to wake [t_him] up!") + else + M.visible_message("[M] hugs [src] to make [t_him] feel better!", \ + "You hug [src] to make [t_him] feel better!") + AdjustParalysis(-3) AdjustStunned(-3) AdjustWeakened(-3) + playsound(src.loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) - M.visible_message( \ - "\blue [M] shakes [src] trying to wake [t_him] up!", \ - "\blue You shake [src] trying to wake [t_him] up!", \ - ) /mob/living/carbon/proc/eyecheck() return 0 diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index 623ea112b4..a8a8648476 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -142,6 +142,7 @@ UpdateDamageIcon() hud_updateflag |= 1 << HEALTH_HUD updatehealth() + speech_problem_flag = 1 //Heal MANY external organs, in random order @@ -163,6 +164,7 @@ parts -= picked updatehealth() hud_updateflag |= 1 << HEALTH_HUD + speech_problem_flag = 1 if(update) UpdateDamageIcon() // damage MANY external organs, in random order diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 654538194c..c3e6cb4397 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -56,7 +56,7 @@ emp_act return 2 //BEGIN BOOK'S TASER NERF. - if(istype(P, /obj/item/projectile/energy/electrode)) + if(istype(P, /obj/item/projectile/beam/stun)) var/datum/organ/external/select_area = get_organ(def_zone) // We're checking the outside, buddy! var/list/body_parts = list(head, wear_mask, wear_suit, w_uniform, gloves, shoes) // What all are we checking? // var/deflectchance=90 //Is it a CRITICAL HIT with that taser? diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 6926adde9b..f22eb0db41 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -24,6 +24,7 @@ var/b_type = "A+" //Player's bloodtype var/underwear = 1 //Which underwear the player wants + var/undershirt = 1 //Which undershirt the player wants. var/backbag = 2 //Which backpack type the player has chosen. Nothing, Satchel or Backpack. //Equipment slots @@ -47,6 +48,10 @@ var/icon/stand_icon = null var/icon/lying_icon = null + + var/voice = "" //Instead of new say code calling GetVoice() over and over and over, we're just going to ask this variable, which gets updated in Life() + + var/speech_problem_flag = 0 var/miming = null //Toggle for the mime's abilities. var/special_voice = "" // For changing our voice. Used by a symptom. diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 867ccc72bc..b6909bc0dd 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -66,6 +66,8 @@ if(life_tick%30==15) hud_updateflag = 1022 + voice = GetVoice() + //No need to update all of these procs if the guy is dead. if(stat != DEAD && !in_stasis) if(air_master.current_cycle%4==2 || failed_last_breath) //First, resolve location and get a breath @@ -143,7 +145,6 @@ return ONE_ATMOSPHERE - pressure_difference /mob/living/carbon/human - proc/handle_disabilities() if (disabilities & EPILEPSY) if ((prob(1) && paralysis < 1)) @@ -161,6 +162,7 @@ emote("cough") return if (disabilities & TOURETTES) + speech_problem_flag = 1 if ((prob(10) && paralysis <= 1)) Stun(10) spawn( 0 ) @@ -178,6 +180,7 @@ pixel_y = old_y return if (disabilities & NERVOUS) + speech_problem_flag = 1 if (prob(10)) stuttering = max(10, stuttering) // No. -- cib @@ -232,6 +235,7 @@ if(!gene.block) continue if(gene.is_active(src)) + speech_problem_flag = 1 gene.OnMobLife(src) if (radiation) @@ -1052,6 +1056,7 @@ if(halloss > 0) adjustHalLoss(-3) else if(sleeping) + speech_problem_flag = 1 handle_dreams() adjustHalLoss(-3) if (mind) @@ -1103,16 +1108,19 @@ //Other if(stunned) + speech_problem_flag = 1 AdjustStunned(-1) if(weakened) weakened = max(weakened-1,0) //before you get mad Rockdtben: I done this so update_canmove isn't called multiple times if(stuttering) + speech_problem_flag = 1 stuttering = max(stuttering-1, 0) if (slurring) slurring = max(slurring-1, 0) if(silent) + speech_problem_flag = 1 silent = max(silent-1, 0) if(druggy) diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm index f284a5fda8..3f3aa32c79 100644 --- a/code/modules/mob/living/carbon/human/say.dm +++ b/code/modules/mob/living/carbon/human/say.dm @@ -1,39 +1,132 @@ /mob/living/carbon/human/say(var/message) + var/verb = "says" + var/alt_name = "" + var/message_range = world.view + var/italics = 0 - if(wear_mask) - if(istype(wear_mask, /obj/item/clothing/mask/gas/voice/space_ninja) && wear_mask:voice == "Unknown") - if(copytext(message, 1, 2) != "*") - var/list/temp_message = text2list(message, " ") - var/list/pick_list = list() - for(var/i = 1, i <= temp_message.len, i++) - pick_list += i - for(var/i=1, i <= abs(temp_message.len/3), i++) - var/H = pick(pick_list) - if(findtext(temp_message[H], "*") || findtext(temp_message[H], ";") || findtext(temp_message[H], ":")) continue - temp_message[H] = ninjaspeak(temp_message[H]) - pick_list -= H - message = list2text(temp_message, " ") - message = replacetext(message, "o", "¤") - message = replacetext(message, "p", "þ") - message = replacetext(message, "l", "£") - message = replacetext(message, "s", "§") - message = replacetext(message, "u", "µ") - message = replacetext(message, "b", "ß") + if(client) + if(client.prefs.muted & MUTE_IC) + src << "\red You cannot speak in IC (Muted)." + return + + if(stat == 2) + return say_dead(message) - else if(istype(wear_mask, /obj/item/clothing/mask/horsehead)) - var/obj/item/clothing/mask/horsehead/hoers = wear_mask - if(hoers.voicechange) - if(!(copytext(message, 1, 2) == "*" || (mind && mind.changeling && department_radio_keys[copytext(message, 1, 3)] != "changeling"))) - message = pick("NEEIIGGGHHHH!", "NEEEIIIIGHH!", "NEIIIGGHH!", "HAAWWWWW!", "HAAAWWW!") + if(copytext(message,1,2) == "*") + return emote(copytext(message,2)) - if ((HULK in mutations) && health >= 25 && length(message)) - if(copytext(message, 1, 2) != "*") - message = "[uppertext(message)]!!" //because I don't know how to code properly in getting vars from other files -Bro + if(name != GetVoice()) + alt_name = "(as [get_id_name("Unknown")])" + + var/message_mode = null + var/datum/language/speaking = null + + if(copytext(message,1,2) == ";") + message_mode = "headset" + message = copytext(message,2) - if (src.slurring) - if(copytext(message, 1, 2) != "*") - message = slur(message) - ..(message) + if(length(message) >= 2) + var/channel_prefix = copytext(message, 1 ,3) + var/check_language_and_radio = copytext(message,3,5) + if(languages.len) + for(var/datum/language/L in languages) + if(lowertext(channel_prefix) == ":[L.key]" || lowertext(check_language_and_radio) == ":[L.key]") + verb = L.speech_verb + speaking = L + break + if(!message_mode) + message_mode = department_radio_keys[channel_prefix] + + if(speaking || copytext(message,1,2) == ":") + var/positioncut = 3 + if(speaking && (message_mode && copytext(message,3,4)==":")) + positioncut += 2 + message = trim(copytext(message,positioncut)) + + + message = capitalize(trim_left(message)) + + if(speech_problem_flag) + var/list/handle_r = handle_speech_problems(message) + message = handle_r[1] + verb = handle_r[2] + speech_problem_flag = handle_r[3] + + if(!message || stat) + return + + var/ending = copytext(message, length(message)) + if(ending=="!") + verb=pick("exclaims","shouts","yells") + if(ending=="?") + verb="asks" + + var/list/obj/item/used_radios = new + + switch (message_mode) + if("headset") + if(l_ear && istype(l_ear,/obj/item/device/radio)) + var/obj/item/device/radio/R = l_ear + R.talk_into(src,message,null,verb,speaking) + used_radios += l_ear + else if(r_ear && istype(r_ear,/obj/item/device/radio)) + var/obj/item/device/radio/R = r_ear + R.talk_into(src,message,null,verb,speaking) + used_radios += r_ear + + if("right_ear") + if(r_ear && istype(r_ear,/obj/item/device/radio)) + var/obj/item/device/radio/R = r_ear + R.talk_into(src,message,verb,speaking) + used_radios += r_ear + + + if("left_ear") + if(l_ear && istype(l_ear,/obj/item/device/radio)) + var/obj/item/device/radio/R = l_ear + R.talk_into(src,message,verb,speaking) + used_radios += l_ear + + if("intercom") + for(var/obj/item/device/radio/intercom/I in view(1, null)) + I.talk_into(src, message, verb, speaking) + used_radios += I + if("whisper") + whisper(message) + return + if("binary") + if(robot_talk_understand || binarycheck()) + robot_talk(message) + return + if("changeling") + if(mind && mind.changeling) + for(var/mob/Changeling in mob_list) + if((Changeling.mind && Changeling.mind.changeling) || istype(Changeling, /mob/dead/observer)) + Changeling << "[mind.changeling.changelingID]: [message]" + return + else + if(message_mode) + if(message_mode in radiochannels) + if(l_ear && istype(l_ear,/obj/item/device/radio)) + l_ear.talk_into(src,message, message_mode, verb, speaking) + used_radios += l_ear + else if(r_ear && istype(r_ear,/obj/item/device/radio)) + r_ear.talk_into(src,message, message_mode, verb, speaking) + used_radios += r_ear + + + if(used_radios.len) + italics = 1 + message_range = 3 + + var/datum/gas_mixture/environment = loc.return_air() + if(environment) + var/pressure = environment.return_pressure() + if(pressure < SAY_MINIMUM_PRESSURE) + italics = 1 + message_range =1 + + ..(message, speaking, verb, alt_name, italics, message_range, used_radios) /mob/living/carbon/human/say_understands(var/other,var/datum/language/speaking = null) @@ -71,3 +164,47 @@ /mob/living/carbon/human/proc/GetSpecialVoice() return special_voice + +/mob/living/carbon/human/proc/handle_speech_problems(var/message) + var/list/returns[3] + var/verb = "says" + var/handled = 0 + if(silent) + message = "" + handled = 1 + if(sdisabilities & MUTE) + message = "" + handled = 1 + if(wear_mask) + if(istype(wear_mask, /obj/item/clothing/mask/horsehead)) + var/obj/item/clothing/mask/horsehead/hoers = wear_mask + if(hoers.voicechange) + if(mind && mind.changeling && department_radio_keys[copytext(message, 1, 3)] != "changeling") + message = pick("NEEIIGGGHHHH!", "NEEEIIIIGHH!", "NEIIIGGHH!", "HAAWWWWW!", "HAAAWWW!") + verb = pick("whinnies","neighs", "says") + handled = 1 + + if((HULK in mutations) && health >= 25 && length(message)) + message = "[uppertext(message)]!!!" + verb = pick("yells","roars","hollers") + handled = 1 + if(slurring) + message = slur(message) + verb = pick("stammers","stutters") + handled = 1 + + var/braindam = getBrainLoss() + if(braindam >= 60) + handled = 1 + if(prob(braindam/4)) + message = stutter(message) + verb = pick("stammers", "stutters") + if(prob(braindam)) + message = uppertext(message) + verb = pick("yells like an idiot","says rather loudly") + + returns[1] = message + returns[2] = verb + returns[3] = handled + + return returns diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 38ad9cc0d0..0c7d03781c 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -310,6 +310,9 @@ proc/get_damage_icon_part(damage_state, body_part) if(!fat && !skeleton) stand_icon.Blend(new /icon('icons/mob/human.dmi', "underwear[underwear]_[g]_s"), ICON_OVERLAY) + if(undershirt>0 && undershirt < 5 && species.flags & HAS_UNDERWEAR) + stand_icon.Blend(new /icon('icons/mob/human.dmi', "undershirt[undershirt]_s"), ICON_OVERLAY) + if(update_icons) update_icons() diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index 92edb9aacd..b42f51c9ec 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -513,7 +513,4 @@ /mob/living/carbon/monkey/IsAdvancedToolUser()//Unless its monkey mode monkeys cant use advanced tools - if(!ticker) return 0 - if(!ticker.mode.name == "monkey") return 0 - return 1 - + return 0 diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 3f7bd7c02d..586441efe3 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -81,366 +81,52 @@ var/list/department_radio_keys = list( if(!istype(dongle)) return if(dongle.translate_binary) return 1 -/mob/living/say(var/message) - - /* - Formatting and sanitizing. - */ - - message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN)) - - /* - Sanity checking and speech failure. - */ - - if (!message) - return - - if(silent) - return - - if (stat == 2) // Dead. - return say_dead(message) - else if (stat) // Unconcious. - return - - if (src.client) - if(client.prefs.muted & MUTE_IC) - src << "\red You cannot speak in IC (muted)." - return - if (src.client.handle_spam_prevention(message, MUTE_IC)) - return - - // Mute disability - if (sdisabilities & MUTE) - return - - // Muzzled. - if (istype(wear_mask, /obj/item/clothing/mask/muzzle)) - return - - // Emotes. - if (copytext(message, 1, 2) == "*" && !stat) - return emote(copytext(message, 2)) - - /* - Identity hiding. - */ - var/alt_name = "" - if (istype(src, /mob/living/carbon/human) && name != GetVoice()) - var/mob/living/carbon/human/H = src - alt_name = " (as [H.get_id_name("Unknown")])" - - /* - Now we get into the real meat of the say processing. Determining the message mode. - */ - - var/italics = 0 - var/message_range = null - var/message_mode = null - var/datum/language/speaking = null //For use if a specific language is being spoken. - - var/braindam = getBrainLoss() - if (braindam >= 60) - if(prob(braindam/4)) - message = stutter(message) - if(prob(braindam)) - message = uppertext(message) - - // General public key. Special message handling - else if (copytext(message, 1, 2) == ";" || prob(braindam/2)) - if (ishuman(src)) - message_mode = "headset" - else if(ispAI(src) || isrobot(src)) - message_mode = "pAI" - message = copytext(message, 2) - // Begin checking for either a message mode or a language to speak. - else if (length(message) >= 2) - var/channel_prefix = copytext(message, 1, 3) - - //Check if the person is speaking a language that they know. - if(languages.len) - for(var/datum/language/L in languages) - if(lowertext(channel_prefix) == ":[L.key]") - speaking = L - break - message_mode = department_radio_keys[channel_prefix] - if (message_mode || speaking || copytext(message,1,2) == ":") - message = trim(copytext(message, 3)) - if (!(istype(src,/mob/living/carbon/human) || istype(src,/mob/living/carbon/monkey) || istype(src, /mob/living/simple_animal/parrot) || isrobot(src) && (message_mode=="department" || (message_mode in radiochannels)))) - message_mode = null //only humans can use headsets - - if(src.stunned > 2 || (traumatic_shock > 61 && prob(50))) - message_mode = null //Stunned people shouldn't be able to physically turn on their radio/hold down the button to speak into it - - message = capitalize(trim_left(message)) - - if (!message) - return - - if (stuttering) - message = stutter(message) - - var/list/obj/item/used_radios = new - var/is_speaking_radio = 0 - - switch (message_mode) - if ("headset") - if (src:l_ear && istype(src:l_ear,/obj/item/device/radio)) - src:l_ear.talk_into(src, message) - used_radios += src:l_ear - is_speaking_radio = 1 - else if (src:r_ear) - src:r_ear.talk_into(src, message) - used_radios += src:r_ear - is_speaking_radio = 1 - - message_range = 1 - italics = 1 - - if ("right ear") - if (src:r_ear) - src:r_ear.talk_into(src, message) - used_radios += src:r_ear - is_speaking_radio = 1 - - message_range = 1 - italics = 1 - - if ("left ear") - if (src:l_ear) - src:l_ear.talk_into(src, message) - used_radios += src:l_ear - is_speaking_radio = 1 - - message_range = 1 - italics = 1 - - if ("intercom") - for (var/obj/item/device/radio/intercom/I in view(1, null)) - I.talk_into(src, message) - used_radios += I - is_speaking_radio = 1 - - message_range = 1 - italics = 1 - - //I see no reason to restrict such way of whispering - if ("whisper") - whisper(message) - return - - if ("binary") - if(robot_talk_understand || binarycheck()) - //message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN)) //seems redundant - robot_talk(message) - return - - if ("alientalk") - if(alien_talk_understand || hivecheck()) - //message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN)) //seems redundant - alien_talk(message) - return - - if ("department") - if(istype(src, /mob/living/carbon)) - if (src:l_ear && istype(src:l_ear,/obj/item/device/radio)) - src:l_ear.talk_into(src, message, message_mode) - used_radios += src:l_ear - is_speaking_radio = 1 - if (src:r_ear) - src:r_ear.talk_into(src, message, message_mode) - used_radios += src:r_ear - is_speaking_radio = 1 - else if(istype(src, /mob/living/silicon/robot)) - if (src:radio) - src:radio.talk_into(src, message, message_mode) - used_radios += src:radio - message_range = 1 - italics = 1 - - if ("pAI") - if (src:radio) - src:radio.talk_into(src, message) - used_radios += src:radio - message_range = 1 - italics = 1 - - if("changeling") - if(mind && mind.changeling) - for(var/mob/Changeling in mob_list) - if((Changeling.mind && Changeling.mind.changeling) || istype(Changeling, /mob/dead/observer)) - Changeling << "[mind.changeling.changelingID]: [message]" - return -////SPECIAL HEADSETS START - else - //world << "SPECIAL HEADSETS" - if (message_mode in radiochannels) - if(isrobot(src))//Seperates robots to prevent runtimes from the ear stuff - var/mob/living/silicon/robot/R = src - if(R.radio)//Sanityyyy - R.radio.talk_into(src, message, message_mode) - used_radios += R.radio - else - if (src:l_ear && istype(src:l_ear,/obj/item/device/radio)) - src:l_ear.talk_into(src, message, message_mode) - used_radios += src:l_ear - else if (src:r_ear) - src:r_ear.talk_into(src, message, message_mode) - used_radios += src:r_ear - message_range = 1 - italics = 1 -/////SPECIAL HEADSETS END - - var/datum/gas_mixture/environment = loc.return_air() - if(environment) - var/pressure = environment.return_pressure() - if (pressure < SAY_MINIMUM_PRESSURE) //in space no one can hear you scream - italics = 1 - message_range = 1 - - var/list/listening - - listening = get_mobs_in_view(message_range, src) - var/list/onscreen = viewers() - for(var/mob/M in player_list) - if (!M.client) - continue //skip monkeys and leavers - if (istype(M, /mob/new_player)) - continue - if(M.stat == DEAD && (M.client.prefs.toggles & CHAT_GHOSTEARS) && src.client) // src.client is so that ghosts don't have to listen to mice - listening|=M +/mob/living/say(var/message, var/datum/language/speaking = null, var/verb="says", var/alt_name="", var/italics=0, var/message_range = world.view, var/list/used_radios = list()) var/turf/T = get_turf(src) - var/list/W = hear(message_range, T) - for (var/obj/O in ((W | contents)-used_radios)) - W |= O + var/list/listening = list() + if(T) - for (var/mob/M in W) - W |= M.contents + var/list/hear = hear(message_range, T) + var/list/hearturfs = list() - for (var/atom/A in W) - if(istype(A, /mob/living/simple_animal/parrot)) //Parrot speech mimickry - if(A == src) - continue //Dont imitate ourselves - - var/mob/living/simple_animal/parrot/P = A - if(P.speech_buffer.len >= 10) - P.speech_buffer.Remove(pick(P.speech_buffer)) - P.speech_buffer.Add(message) - - if(istype(A, /obj/)) //radio in pocket could work, radio in backpack wouldn't --rastaf0 - var/obj/O = A - spawn (0) - if(O && !istype(O.loc, /obj/item/weapon/storage)) - O.hear_talk(src, message) - - -/* Commented out as replaced by code above from BS12 - for (var/obj/O in ((V | contents)-used_radios)) //radio in pocket could work, radio in backpack wouldn't --rastaf0 - spawn (0) - if (O) - O.hear_talk(src, message) -*/ - -/* if(isbrain(src))//For brains to properly talk if they are in an MMI..or in a brain. Could be extended to other mobs I guess. - for(var/obj/O in loc)//Kinda ugly but whatever. - if(O) - spawn(0) - O.hear_talk(src, message) -*/ - - - var/list/heard_a = list() // understood us - var/list/heard_b = list() // didn't understand us - - for (var/M in listening) - if(hascall(M,"say_understands")) - if (M:say_understands(src,speaking)) - heard_a += M - else - heard_b += M - else - heard_a += M + for(var/I in hear) + if(istype(I, /mob/)) + var/mob/M = I + listening += M + hearturfs += M.locs[1] + for(var/obj/item/device/radio/R in contents) + spawn(0) + R.hear_talk(src, message, verb, speaking) + else if(istype(I, /obj/)) + var/obj/O = I + hearturfs += O.locs[1] + if(istype(O, /obj/item/device/radio)) + spawn(0) + O.hear_talk(src, message, verb, speaking) + for(var/mob/M in player_list) + if(M.stat == DEAD && client && (M.client.prefs.toggles & CHAT_GHOSTEARS)) + listening |= M + continue + if(M.locs[1] in hearturfs) + listening |= M var/speech_bubble_test = say_test(message) var/image/speech_bubble = image('icons/mob/talk.dmi',src,"h[speech_bubble_test]") spawn(30) del(speech_bubble) - for(var/mob/M in hearers(5, src)) - if(M != src && is_speaking_radio) - M:show_message("[src] talks into [used_radios.len ? used_radios[1] : "radio"]") - - var/rendered = null - - if (length(heard_a)) - var/message_a = say_quote(message,speaking) - - if (italics) - message_a = "[message_a]" - - var/message_ghost = "[message_a]" // bold so ghosts know the person is in view. - rendered = "[GetVoice()][alt_name] [message_a]" - var/rendered_ghost = "[GetVoice()][alt_name] [message_ghost]" - for (var/mob/M in heard_a) - if(M.client) - if(hascall(M,"show_message")) - var/deaf_message = "" - var/deaf_type = 1 - if(M != src) - deaf_message = "[name][alt_name] talks but you cannot hear them." - else - deaf_message = "You cannot hear yourself!" - deaf_type = 2 // Since you should be able to hear yourself without looking - if (M.stat == DEAD && (M.client.prefs.toggles & CHAT_GHOSTEARS) && M in onscreen) - M:show_message(rendered_ghost, 2, deaf_message, deaf_type) - else - M:show_message(rendered, 2, deaf_message, deaf_type) - M << speech_bubble - - if (length(heard_b)) - - var/message_b - message_b = stars(message) - message_b = say_quote(message_b,speaking) - - if (italics) - message_b = "[message_b]" - - rendered = "[name][alt_name] [message_b]" //Voice_name isn't too useful. You'd be able to tell who was talking presumably. + if(used_radios.len) + for(var/mob/living/M in hearers(5, src)) + if(M != src) + M.show_message("[src] talks into [used_radios.len ? used_radios[1] : "radio"]") - for (var/M in heard_b) - if(hascall(M,"show_message")) - M:show_message(rendered, 2) - M << speech_bubble + for(var/mob/M in listening) + if(M.client) + M << speech_bubble + M.hear_say(message,verb,speaking,alt_name, italics, src) - /* - if(M.client) - - if(!M.client.bubbles || M == src) - var/image/I = image('icons/effects/speechbubble.dmi', B, "override") - I.override = 1 - M << I - */ /* - - flick("[presay]say", B) - - if(istype(loc, /turf)) - B.loc = loc - else - B.loc = loc.loc - - spawn() - sleep(11) - del(B) - */ - - //talking items - for(var/obj/item/weapon/O in view(3,src)) - if(O.listening_to_players) - O.catchMessage(message, src) log_say("[name]/[key] : [message]") @@ -449,5 +135,3 @@ var/list/department_radio_keys = list( /mob/living/proc/GetVoice() return name - - diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 8fd90aa571..62331233a8 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -405,9 +405,13 @@ var/list/ai_list = list() if (href_list["track"]) var/mob/target = locate(href_list["track"]) in mob_list +/* var/mob/living/silicon/ai/A = locate(href_list["track2"]) in mob_list if(A && target) A.ai_actual_track(target) +*/ + if(target) + ai_actual_track(target) return else if (href_list["faketrack"]) diff --git a/code/modules/mob/living/silicon/robot/component.dm b/code/modules/mob/living/silicon/robot/component.dm index 1e23637b56..60096d0330 100644 --- a/code/modules/mob/living/silicon/robot/component.dm +++ b/code/modules/mob/living/silicon/robot/component.dm @@ -164,7 +164,7 @@ flags = FPRINT | TABLEPASS | CONDUCT slot_flags = SLOT_BELT throwforce = 3 - w_class = 1.0 + w_class = 2.0 throw_speed = 5 throw_range = 10 m_amt = 200 diff --git a/code/modules/mob/living/silicon/say.dm b/code/modules/mob/living/silicon/say.dm index 7c63628ced..520ff0a0f3 100644 --- a/code/modules/mob/living/silicon/say.dm +++ b/code/modules/mob/living/silicon/say.dm @@ -2,11 +2,15 @@ var/ending = copytext(text, length(text)) if (ending == "?") - return "queries, \"[text]\""; + return "queries" else if (ending == "!") - return "declares, \"[text]\""; + return "declares" - return "states, \"[text]\""; + return "states" + +#define IS_AI 1 +#define IS_ROBOT 2 +#define IS_PAI 3 /mob/living/silicon/say(var/message) if (!message) @@ -23,39 +27,98 @@ message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN)) return say_dead(message) + var/bot_type = 0 //Let's not do a fuck ton of type checks, thanks. + if(istype(src, /mob/living/silicon/ai)) + bot_type = IS_AI + else if(istype(src, /mob/living/silicon/robot)) + bot_type = IS_ROBOT + else if(istype(src, /mob/living/silicon/pai)) + bot_type = IS_PAI + + var/mob/living/silicon/ai/AI = src //and let's not declare vars over and over and over for these guys. + var/mob/living/silicon/robot/R = src + var/mob/living/silicon/pai/P = src + + //Must be concious to speak if (stat) return - if (length(message) >= 2) - var/prefix = copytext(message, 1, 3) - if (department_radio_keys[prefix] == "binary") - if(istype(src, /mob/living/silicon/pai)) - return ..(message) - message = copytext(message, 3) - message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN)) + var/verb = say_quote(message) + var/message_mode = null - // TODO: move the component system up to silicon so we don't have to use this ugly hack.. - if(istype(src, /mob/living/silicon/robot)) - var/mob/living/silicon/robot/R = src - if(!R.is_component_functioning("comms")) - src << "\red Your binary communications component isn't functional." + + if(copytext(message,1,2) == ";") + message_mode = "general" // I don't know why but regular radio = fuck you we ain't broadcasting, pAI mode was what was in old say code. + message = trim(copytext(message,2)) + + else if(length(message) >= 2) + var/channel_prefix = copytext(message, 1 ,3) + if(!message_mode) + message_mode = department_radio_keys[channel_prefix] + + if(message_mode && bot_type == IS_ROBOT) + if(message_mode != "binary" && !R.is_component_functioning("radio")) + src << "\red Your radio isn't functional at this time." + return + + + if(message_mode && message_mode != "general") + message = trim(copytext(message,3)) + + switch(message_mode) + if("department") + switch(bot_type) + if(IS_AI) + AI.holopad_talk(message) + if(IS_ROBOT) + log_say("[key_name(src)] : [message]") + R.radio.talk_into(src,message,message_mode,verb) + if(IS_PAI) + log_say("[key_name(src)] : [message]") + P.radio.talk_into(src,message,message_mode,verb) + return + + if("binary") + switch(bot_type) + if(IS_ROBOT) + if(!R.is_component_functioning("comms")) + src << "\red Your binary communications component isn't functional." + return + if(IS_PAI) + src << "You do not appear to have that function" return robot_talk(message) - else if (department_radio_keys[prefix] == "department") - if(isAI(src)&&client)//For patching directly into AI holopads. - var/mob/living/silicon/ai/U = src - message = copytext(message, 3) - message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN)) - U.holopad_talk(message) - else//Will not allow anyone by an active AI to use this function. - src << "This function is not available to you." - return + return + if("general") + switch(bot_type) + if(IS_AI) + src << "Yeah, not yet, sorry" + if(IS_ROBOT) + log_say("[key_name(src)] : [message]") + R.radio.talk_into(src,message,null,verb) + if(IS_PAI) + log_say("[key_name(src)] : [message]") + P.radio.talk_into(src,message,null,verb) + return + else - return ..(message) - else - return ..(message) + if(message_mode && message_mode in radiochannels) + switch(bot_type) + if(IS_AI) + src << "You don't have this function yet, I'm working on it" + return + if(IS_ROBOT) + log_say("[key_name(src)] : [message]") + R.radio.talk_into(src,message,message_mode,verb) + if(IS_PAI) + log_say("[key_name(src)] : [message]") + P.radio.talk_into(src,message,message_mode,verb) + return + + + return ..(message,null,verb) //For holopads only. Usable by AI. /mob/living/silicon/ai/proc/holopad_talk(var/message) @@ -146,4 +209,8 @@ for (var/mob/M in dead_mob_list) if(!istype(M,/mob/new_player) && !istype(M,/mob/living/carbon/brain)) //No meta-evesdropping - M.show_message(rendered, 2) \ No newline at end of file + M.show_message(rendered, 2) + +#undef IS_AI +#undef IS_ROBOT +#undef IS_PAI diff --git a/code/modules/mob/living/simple_animal/bees.dm b/code/modules/mob/living/simple_animal/bees.dm index 1fa531070c..76e1de9457 100644 --- a/code/modules/mob/living/simple_animal/bees.dm +++ b/code/modules/mob/living/simple_animal/bees.dm @@ -31,7 +31,7 @@ if(stat == CONSCIOUS) //if we're strong enough, sting some people var/mob/living/carbon/human/M = target_mob - var/sting_prob = 100 // Bees will always try to sting. + var/sting_prob = 40 // Bees will always try to sting. if(M in view(src,1)) // Can I see my target? if(prob(max(feral * 10, 0))) // Am I mad enough to want to sting? And yes, when I initially appear, I AM mad enough var/obj/item/clothing/worn_suit = M.wear_suit @@ -42,17 +42,17 @@ sting_prob -= min(worn_helmet.armor["bio"],30) // Is your helmet sealed? I can't get to 30% of your body. if( prob(sting_prob) && (M.stat == CONSCIOUS || (M.stat == UNCONSCIOUS && prob(25))) ) // Try to sting! If you're not moving, think about stinging. M.apply_damage(min(strength,2)+mut, BRUTE) // Stinging. The more mutated I am, the harder I sting. - M.apply_damage((round(feral/5,1)*(max((round(strength/10,1)),1)))+toxic, TOX) // Bee venom based on how angry I am and how many there are of me! + M.apply_damage((round(feral/10,1)*(max((round(strength/20,1)),1)))+toxic, TOX) // Bee venom based on how angry I am and how many there are of me! M << "\red You have been stung!" M.flash_pain() //if we're chasing someone, get a little bit angry - if(target_mob && prob(10)) + if(target_mob && prob(5)) feral++ //calm down a little bit if(feral > 0) - if(prob(feral * 10)) + if(prob(feral * 20)) feral -= 1 else //if feral is less than 0, we're becalmed by smoke or steam diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm index ee9a4d463c..1f11dec9ca 100644 --- a/code/modules/mob/new_player/preferences_setup.dm +++ b/code/modules/mob/new_player/preferences_setup.dm @@ -13,6 +13,7 @@ datum/preferences randomize_hair_color("facial") randomize_eyes_color() underwear = rand(1,underwear_m.len) + undershirt = rand(1,undershirt_t.len) backbag = 2 age = rand(AGE_MIN,AGE_MAX) if(H) @@ -188,6 +189,10 @@ datum/preferences if(underwear > 0 && underwear < 7 && current_species.flags & HAS_UNDERWEAR) underwear_s = new/icon("icon" = 'icons/mob/human.dmi', "icon_state" = "underwear[underwear]_[g]_s") + var/icon/undershirt_s = null + if(undershirt > 0 && undershirt < 5 && current_species.flags & HAS_UNDERWEAR) + undershirt_s = new/icon("icon" = 'icons/mob/human.dmi', "icon_state" = "undershirt[undershirt]_s") + var/icon/clothes_s = null if(job_civilian_low & ASSISTANT)//This gives the preview icon clothes depending on which job(if any) is set to 'high' clothes_s = new /icon('icons/mob/uniform.dmi', "grey_s") @@ -610,6 +615,8 @@ datum/preferences preview_icon.Blend(eyes_s, ICON_OVERLAY) if(underwear_s) preview_icon.Blend(underwear_s, ICON_OVERLAY) + if(undershirt_s) + preview_icon.Blend(undershirt_s, ICON_OVERLAY) if(clothes_s) preview_icon.Blend(clothes_s, ICON_OVERLAY) preview_icon_front = new(preview_icon, dir = SOUTH) @@ -617,4 +624,5 @@ datum/preferences del(eyes_s) del(underwear_s) + del(undershirt_s) del(clothes_s) diff --git a/code/modules/paperwork/carbonpaper.dm b/code/modules/paperwork/carbonpaper.dm new file mode 100644 index 0000000000..ae8357a558 --- /dev/null +++ b/code/modules/paperwork/carbonpaper.dm @@ -0,0 +1,50 @@ +/obj/item/weapon/paper/carbon + name = "paper" + icon_state = "paper_stack" + item_state = "paper" + var copied = 0 + var iscopy = 0 + + +/obj/item/weapon/paper/carbon/update_icon() + if(iscopy) + if(info) + icon_state = "cpaper_words" + return + icon_state = "cpaper" + else if (copied) + if(info) + icon_state = "paper_words" + return + icon_state = "paper" + else + if(info) + icon_state = "paper_stack_words" + return + icon_state = "paper_stack" + + + +/obj/item/weapon/paper/carbon/verb/removecopy() + set name = "Remove carbon-copy" + set category = "Object" + set src in usr + + if (copied == 0) + var/obj/item/weapon/paper/carbon/c = src + var/copycontents = html_decode(c.info) + var/obj/item/weapon/paper/carbon/copy = new /obj/item/weapon/paper/carbon (usr.loc) + copycontents = replacetext(copycontents, "" + copy.name = "Copy - " + c.name + copy.fields = c.fields + copy.updateinfolinks() + usr << "You tear off the carbon-copy!" + c.copied = 1 + copy.iscopy = 1 + copy.update_icon() + c.update_icon() + else + usr << "There are no more carbon copies attached to this paper!" \ No newline at end of file diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 1c546c01d0..81670fb259 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -76,7 +76,7 @@ return var/n_name = copytext(sanitize(input(usr, "What would you like to label the paper?", "Paper Labelling", null) as text), 1, MAX_NAME_LEN) if((loc == usr && usr.stat == 0)) - name = "paper[(n_name ? text("- '[n_name]'") : null)]" + name = "[(n_name ? text("[n_name]") : "paper")]" add_fingerprint(usr) return @@ -347,23 +347,23 @@ * Premade paper */ /obj/item/weapon/paper/Court - name = "paper- 'Judgement'" + name = "Judgement" info = "For crimes against the station, the offender is sentenced to:
\n
\n" /obj/item/weapon/paper/Toxin - name = "paper- 'Chemical Information'" + name = "Chemical Information" info = "Known Onboard Toxins:
\n\tGrade A Semi-Liquid Plasma:
\n\t\tHighly poisonous. You cannot sustain concentrations above 15 units.
\n\t\tA gas mask fails to filter plasma after 50 units.
\n\t\tWill attempt to diffuse like a gas.
\n\t\tFiltered by scrubbers.
\n\t\tThere is a bottled version which is very different
\n\t\t\tfrom the version found in canisters!
\n
\n\t\tWARNING: Highly Flammable. Keep away from heat sources
\n\t\texcept in a enclosed fire area!
\n\t\tWARNING: It is a crime to use this without authorization.
\nKnown Onboard Anti-Toxin:
\n\tAnti-Toxin Type 01P: Works against Grade A Plasma.
\n\t\tBest if injected directly into bloodstream.
\n\t\tA full injection is in every regular Med-Kit.
\n\t\tSpecial toxin Kits hold around 7.
\n
\nKnown Onboard Chemicals (other):
\n\tRejuvenation T#001:
\n\t\tEven 1 unit injected directly into the bloodstream
\n\t\t\twill cure paralysis and sleep toxins.
\n\t\tIf administered to a dying patient it will prevent
\n\t\t\tfurther damage for about units*3 seconds.
\n\t\t\tit will not cure them or allow them to be cured.
\n\t\tIt can be administeredd to a non-dying patient
\n\t\t\tbut the chemicals disappear just as fast.
\n\tSleep Toxin T#054:
\n\t\t5 units wilkl induce precisely 1 minute of sleep.
\n\t\t\tThe effect are cumulative.
\n\t\tWARNING: It is a crime to use this without authorization" /obj/item/weapon/paper/courtroom - name = "paper- 'A Crash Course in Legal SOP on SS13'" + name = "A Crash Course in Legal SOP on SS13" info = "Roles:
\nThe Detective is basically the investigator and prosecutor.
\nThe Staff Assistant can perform these functions with written authority from the Detective.
\nThe Captain/HoP/Warden is ct as the judicial authority.
\nThe Security Officers are responsible for executing warrants, security during trial, and prisoner transport.
\n
\nInvestigative Phase:
\nAfter the crime has been committed the Detective's job is to gather evidence and try to ascertain not only who did it but what happened. He must take special care to catalogue everything and don't leave anything out. Write out all the evidence on paper. Make sure you take an appropriate number of fingerprints. IF he must ask someone questions he has permission to confront them. If the person refuses he can ask a judicial authority to write a subpoena for questioning. If again he fails to respond then that person is to be jailed as insubordinate and obstructing justice. Said person will be released after he cooperates.
\n
\nONCE the FT has a clear idea as to who the criminal is he is to write an arrest warrant on the piece of paper. IT MUST LIST THE CHARGES. The FT is to then go to the judicial authority and explain a small version of his case. If the case is moderately acceptable the authority should sign it. Security must then execute said warrant.
\n
\nPre-Pre-Trial Phase:
\nNow a legal representative must be presented to the defendant if said defendant requests one. That person and the defendant are then to be given time to meet (in the jail IS ACCEPTABLE). The defendant and his lawyer are then to be given a copy of all the evidence that will be presented at trial (rewriting it all on paper is fine). THIS IS CALLED THE DISCOVERY PACK. With a few exceptions, THIS IS THE ONLY EVIDENCE BOTH SIDES MAY USE AT TRIAL. IF the prosecution will be seeking the death penalty it MUST be stated at this time. ALSO if the defense will be seeking not guilty by mental defect it must state this at this time to allow ample time for examination.
\nNow at this time each side is to compile a list of witnesses. By default, the defendant is on both lists regardless of anything else. Also the defense and prosecution can compile more evidence beforehand BUT in order for it to be used the evidence MUST also be given to the other side.\nThe defense has time to compile motions against some evidence here.
\nPossible Motions:
\n1. Invalidate Evidence- Something with the evidence is wrong and the evidence is to be thrown out. This includes irrelevance or corrupt security.
\n2. Free Movement- Basically the defendant is to be kept uncuffed before and during the trial.
\n3. Subpoena Witness- If the defense presents god reasons for needing a witness but said person fails to cooperate then a subpoena is issued.
\n4. Drop the Charges- Not enough evidence is there for a trial so the charges are to be dropped. The FT CAN RETRY but the judicial authority must carefully reexamine the new evidence.
\n5. Declare Incompetent- Basically the defendant is insane. Once this is granted a medical official is to examine the patient. If he is indeed insane he is to be placed under care of the medical staff until he is deemed competent to stand trial.
\n
\nALL SIDES MOVE TO A COURTROOM
\nPre-Trial Hearings:
\nA judicial authority and the 2 sides are to meet in the trial room. NO ONE ELSE BESIDES A SECURITY DETAIL IS TO BE PRESENT. The defense submits a plea. If the plea is guilty then proceed directly to sentencing phase. Now the sides each present their motions to the judicial authority. He rules on them. Each side can debate each motion. Then the judicial authority gets a list of crew members. He first gets a chance to look at them all and pick out acceptable and available jurors. Those jurors are then called over. Each side can ask a few questions and dismiss jurors they find too biased. HOWEVER before dismissal the judicial authority MUST agree to the reasoning.
\n
\nThe Trial:
\nThe trial has three phases.
\n1. Opening Arguments- Each side can give a short speech. They may not present ANY evidence.
\n2. Witness Calling/Evidence Presentation- The prosecution goes first and is able to call the witnesses on his approved list in any order. He can recall them if necessary. During the questioning the lawyer may use the evidence in the questions to help prove a point. After every witness the other side has a chance to cross-examine. After both sides are done questioning a witness the prosecution can present another or recall one (even the EXACT same one again!). After prosecution is done the defense can call witnesses. After the initial cases are presented both sides are free to call witnesses on either list.
\nFINALLY once both sides are done calling witnesses we move onto the next phase.
\n3. Closing Arguments- Same as opening.
\nThe jury then deliberates IN PRIVATE. THEY MUST ALL AGREE on a verdict. REMEMBER: They mix between some charges being guilty and others not guilty (IE if you supposedly killed someone with a gun and you unfortunately picked up a gun without authorization then you CAN be found not guilty of murder BUT guilty of possession of illegal weaponry.). Once they have agreed they present their verdict. If unable to reach a verdict and feel they will never they call a deadlocked jury and we restart at Pre-Trial phase with an entirely new set of jurors.
\n
\nSentencing Phase:
\nIf the death penalty was sought (you MUST have gone through a trial for death penalty) then skip to the second part.
\nI. Each side can present more evidence/witnesses in any order. There is NO ban on emotional aspects or anything. The prosecution is to submit a suggested penalty. After all the sides are done then the judicial authority is to give a sentence.
\nII. The jury stays and does the same thing as I. Their sole job is to determine if the death penalty is applicable. If NOT then the judge selects a sentence.
\n
\nTADA you're done. Security then executes the sentence and adds the applicable convictions to the person's record.
\n" /obj/item/weapon/paper/hydroponics - name = "paper- 'Greetings from Billy Bob'" + name = "Greetings from Billy Bob" info = "Hey fellow botanist!
\n
\nI didn't trust the station folk so I left
\na couple of weeks ago. But here's some
\ninstructions on how to operate things here.
\nYou can grow plants and each iteration they become
\nstronger, more potent and have better yield, if you
\nknow which ones to pick. Use your botanist's analyzer
\nfor that. You can turn harvested plants into seeds
\nat the seed extractor, and replant them for better stuff!
\nSometimes if the weed level gets high in the tray
\nmutations into different mushroom or weed species have
\nbeen witnessed. On the rare occassion even weeds mutate!
\n
\nEither way, have fun!
\n
\nBest regards,
\nBilly Bob Johnson.
\n
\nPS.
\nHere's a few tips:
\nIn nettles, potency = damage
\nIn amanitas, potency = deadliness + side effect
\nIn Liberty caps, potency = drug power + effect
\nIn chilis, potency = heat
\nNutrients keep mushrooms alive!
\nWater keeps weeds such as nettles alive!
\nAll other plants need both." /obj/item/weapon/paper/djstation - name = "paper - 'DJ Listening Outpost'" + name = "DJ Listening Outpost" info = "Welcome new owner!

You have purchased the latest in listening equipment. The telecommunication setup we created is the best in listening to common and private radio fequencies. Here is a step by step guide to start listening in on those saucy radio channels:
  1. Equip yourself with a multi-tool
  2. Use the multitool on each machine, that is the broadcaster, receiver and the relay.
  3. Turn all the machines on, it has already been configured for you to listen on.
Simple as that. Now to listen to the private channels, you'll have to configure the intercoms, located on the front desk. Here is a list of frequencies for you to listen on.
  • 145.7 - Common Channel
  • 144.7 - Private AI Channel
  • 135.9 - Security Channel
  • 135.7 - Engineering Channel
  • 135.5 - Medical Channel
  • 135.3 - Command Channel
  • 135.1 - Science Channel
  • 134.9 - Mining Channel
  • 134.7 - Cargo Channel
  • " /obj/item/weapon/paper/flag @@ -372,7 +372,7 @@ anchored = 1.0 /obj/item/weapon/paper/jobs - name = "paper- 'Job Information'" + name = "Job Information" info = "Information on all formal jobs that can be assigned on Space Station 13 can be found on this document.
    \nThe data will be in the following form.
    \nGenerally lower ranking positions come first in this list.
    \n
    \nJob Name general access>lab access-engine access-systems access (atmosphere control)
    \n\tJob Description
    \nJob Duties (in no particular order)
    \nTips (where applicable)
    \n
    \nResearch Assistant 1>1-0-0
    \n\tThis is probably the lowest level position. Anyone who enters the space station after the initial job\nassignment will automatically receive this position. Access with this is restricted. Head of Personnel should\nappropriate the correct level of assistance.
    \n1. Assist the researchers.
    \n2. Clean up the labs.
    \n3. Prepare materials.
    \n
    \nStaff Assistant 2>0-0-0
    \n\tThis position assists the security officer in his duties. The staff assisstants should primarily br\npatrolling the ship waiting until they are needed to maintain ship safety.\n(Addendum: Updated/Elevated Security Protocols admit issuing of low level weapons to security personnel)
    \n1. Patrol ship/Guard key areas
    \n2. Assist security officer
    \n3. Perform other security duties.
    \n
    \nTechnical Assistant 1>0-0-1
    \n\tThis is yet another low level position. The technical assistant helps the engineer and the statian\ntechnician with the upkeep and maintenance of the station. This job is very important because it usually\ngets to be a heavy workload on station technician and these helpers will alleviate that.
    \n1. Assist Station technician and Engineers.
    \n2. Perform general maintenance of station.
    \n3. Prepare materials.
    \n
    \nMedical Assistant 1>1-0-0
    \n\tThis is the fourth position yet it is slightly less common. This position doesn't have much power\noutside of the med bay. Consider this position like a nurse who helps to upkeep medical records and the\nmaterials (filling syringes and checking vitals)
    \n1. Assist the medical personnel.
    \n2. Update medical files.
    \n3. Prepare materials for medical operations.
    \n
    \nResearch Technician 2>3-0-0
    \n\tThis job is primarily a step up from research assistant. These people generally do not get their own lab\nbut are more hands on in the experimentation process. At this level they are permitted to work as consultants to\nthe others formally.
    \n1. Inform superiors of research.
    \n2. Perform research alongside of official researchers.
    \n
    \nDetective 3>2-0-0
    \n\tThis job is in most cases slightly boring at best. Their sole duty is to\nperform investigations of crine scenes and analysis of the crime scene. This\nalleviates SOME of the burden from the security officer. This person's duty\nis to draw conclusions as to what happened and testify in court. Said person\nalso should stroe the evidence ly.
    \n1. Perform crime-scene investigations/draw conclusions.
    \n2. Store and catalogue evidence properly.
    \n3. Testify to superiors/inquieries on findings.
    \n
    \nStation Technician 2>0-2-3
    \n\tPeople assigned to this position must work to make sure all the systems aboard Space Station 13 are operable.\nThey should primarily work in the computer lab and repairing faulty equipment. They should work with the\natmospheric technician.
    \n1. Maintain SS13 systems.
    \n2. Repair equipment.
    \n
    \nAtmospheric Technician 3>0-0-4
    \n\tThese people should primarily work in the atmospheric control center and lab. They have the very important\njob of maintaining the delicate atmosphere on SS13.
    \n1. Maintain atmosphere on SS13
    \n2. Research atmospheres on the space station. (safely please!)
    \n
    \nEngineer 2>1-3-0
    \n\tPeople working as this should generally have detailed knowledge as to how the propulsion systems on SS13\nwork. They are one of the few classes that have unrestricted access to the engine area.
    \n1. Upkeep the engine.
    \n2. Prevent fires in the engine.
    \n3. Maintain a safe orbit.
    \n
    \nMedical Researcher 2>5-0-0
    \n\tThis position may need a little clarification. Their duty is to make sure that all experiments are safe and\nto conduct experiments that may help to improve the station. They will be generally idle until a new laboratory\nis constructed.
    \n1. Make sure the station is kept safe.
    \n2. Research medical properties of materials studied of Space Station 13.
    \n
    \nScientist 2>5-0-0
    \n\tThese people study the properties, particularly the toxic properties, of materials handled on SS13.\nTechnically they can also be called Plasma Technicians as plasma is the material they routinly handle.
    \n1. Research plasma
    \n2. Make sure all plasma is properly handled.
    \n
    \nMedical Doctor (Officer) 2>0-0-0
    \n\tPeople working this job should primarily stay in the medical area. They should make sure everyone goes to\nthe medical bay for treatment and examination. Also they should make sure that medical supplies are kept in\norder.
    \n1. Heal wounded people.
    \n2. Perform examinations of all personnel.
    \n3. Moniter usage of medical equipment.
    \n
    \nSecurity Officer 3>0-0-0
    \n\tThese people should attempt to keep the peace inside the station and make sure the station is kept safe. One\nside duty is to assist in repairing the station. They also work like general maintenance personnel. They are not\ngiven a weapon and must use their own resources.
    \n(Addendum: Updated/Elevated Security Protocols admit issuing of weapons to security personnel)
    \n1. Maintain order.
    \n2. Assist others.
    \n3. Repair structural problems.
    \n
    \nHead of Security 4>5-2-2
    \n\tPeople assigned as Head of Security should issue orders to the security staff. They should\nalso carefully moderate the usage of all security equipment. All security matters should be reported to this person.
    \n1. Oversee security.
    \n2. Assign patrol duties.
    \n3. Protect the station and staff.
    \n
    \nHead of Personnel 4>4-2-2
    \n\tPeople assigned as head of personnel will find themselves moderating all actions done by personnel. \nAlso they have the ability to assign jobs and access levels.
    \n1. Assign duties.
    \n2. Moderate personnel.
    \n3. Moderate research.
    \n
    \nCaptain 5>5-5-5 (unrestricted station wide access)
    \n\tThis is the highest position youi can aquire on Space Station 13. They are allowed anywhere inside the\nspace station and therefore should protect their ID card. They also have the ability to assign positions\nand access levels. They should not abuse their power.
    \n1. Assign all positions on SS13
    \n2. Inspect the station for any problems.
    \n3. Perform administrative duties.
    \n" /obj/item/weapon/paper/photograph @@ -382,7 +382,7 @@ item_state = "paper" /obj/item/weapon/paper/sop - name = "paper- 'Standard Operating Procedure'" + name = "Standard Operating Procedure" info = "Alert Levels:
    \nBlue- Emergency
    \n\t1. Caused by fire
    \n\t2. Caused by manual interaction
    \n\tAction:
    \n\t\tClose all fire doors. These can only be opened by reseting the alarm
    \nRed- Ejection/Self Destruct
    \n\t1. Caused by module operating computer.
    \n\tAction:
    \n\t\tAfter the specified time the module will eject completely.
    \n
    \nEngine Maintenance Instructions:
    \n\tShut off ignition systems:
    \n\tActivate internal power
    \n\tActivate orbital balance matrix
    \n\tRemove volatile liquids from area
    \n\tWear a fire suit
    \n
    \n\tAfter
    \n\t\tDecontaminate
    \n\t\tVisit medical examiner
    \n
    \nToxin Laboratory Procedure:
    \n\tWear a gas mask regardless
    \n\tGet an oxygen tank.
    \n\tActivate internal atmosphere
    \n
    \n\tAfter
    \n\t\tDecontaminate
    \n\t\tVisit medical examiner
    \n
    \nDisaster Procedure:
    \n\tFire:
    \n\t\tActivate sector fire alarm.
    \n\t\tMove to a safe area.
    \n\t\tGet a fire suit
    \n\t\tAfter:
    \n\t\t\tAssess Damage
    \n\t\t\tRepair damages
    \n\t\t\tIf needed, Evacuate
    \n\tMeteor Shower:
    \n\t\tActivate fire alarm
    \n\t\tMove to the back of ship
    \n\t\tAfter
    \n\t\t\tRepair damage
    \n\t\t\tIf needed, Evacuate
    \n\tAccidental Reentry:
    \n\t\tActivate fire alrms in front of ship.
    \n\t\tMove volatile matter to a fire proof area!
    \n\t\tGet a fire suit.
    \n\t\tStay secure until an emergency ship arrives.
    \n
    \n\t\tIf ship does not arrive-
    \n\t\t\tEvacuate to a nearby safe area!" /obj/item/weapon/paper/crumpled diff --git a/code/modules/paperwork/paperbin.dm b/code/modules/paperwork/paperbin.dm index ec6a3a9190..4b6a9b3327 100644 --- a/code/modules/paperwork/paperbin.dm +++ b/code/modules/paperwork/paperbin.dm @@ -26,6 +26,13 @@ /obj/item/weapon/paper_bin/attack_hand(mob/user as mob) + if (hasorgans(user)) + var/datum/organ/external/temp = user:organs_by_name["r_hand"] + if (user.hand) + temp = user:organs_by_name["l_hand"] + if(temp && !temp.is_usable()) + user << "You try to move your [temp.display_name], but cannot!" + return if(amount >= 1) amount-- if(amount==0) @@ -79,3 +86,29 @@ icon_state = "paper_bin0" else icon_state = "paper_bin1" + + +/obj/item/weapon/paper_bin/carbon + name = "carbonless paper bin" + icon_state = "paper_bin2" + +/obj/item/weapon/paper_bin/carbon/attack_hand(mob/user as mob) + if(amount >= 1) + amount-- + if(amount==0) + update_icon() + + var/obj/item/weapon/paper/carbon/P + if(papers.len > 0) //If there's any custom paper on the stack, use that instead of creating a new paper. + P = papers[papers.len] + papers.Remove(P) + else + P = new /obj/item/weapon/paper/carbon + P.loc = user.loc + user.put_in_hands(P) + user << "You take [P] out of the [src]." + else + user << "[src] is empty!" + + add_fingerprint(user) + return diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index 2695556c71..04cf6f629c 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -66,7 +66,7 @@ else if(photocopy) for(var/i = 0, i < copies, i++) if(toner > 0) - var/obj/item/weapon/photo/p = new /obj/item/weapon/photo (loc) + var/obj/item/weapon/photo/p = new /obj/item/weapon/photo (src.loc) var/icon/I = icon(photocopy.icon, photocopy.icon_state) var/icon/img = icon(photocopy.img) if(toner > 10) //plenty of toner, go straight greyscale diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index f050a42822..fc71edff2a 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -26,7 +26,7 @@ icon = 'icons/obj/items.dmi' icon_state = "photo" item_state = "paper" - w_class = 1.0 + w_class = 2.0 var/icon/img //Big photo image var/scribble //Scribble on the back. @@ -84,7 +84,7 @@ /obj/item/weapon/storage/photo_album/MouseDrop(obj/over_object as obj) - if((istype(usr, /mob/living/carbon/human) || (ticker && ticker.mode.name == "monkey"))) + if((istype(usr, /mob/living/carbon/human))) var/mob/M = usr if(!( istype(over_object, /obj/screen) )) return ..() diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 818bf6fdc4..8959bd1734 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -144,7 +144,7 @@ init() else area = src.loc.loc:master - area.apc |= src + area.apc |= src opened = 1 operating = 0 name = "[area.name] APC" @@ -171,7 +171,7 @@ cell.charge = start_charge * cell.maxcharge / 100.0 // (convert percentage to actual value) var/area/A = src.loc.loc - + //if area isn't specified use current if(isarea(A) && src.areastring == null) @@ -913,7 +913,7 @@ return 0 if ( ! (istype(user, /mob/living/carbon/human) || \ istype(user, /mob/living/silicon) || \ - istype(user, /mob/living/carbon/monkey) /*&& ticker && ticker.mode.name == "monkey"*/) ) + istype(user, /mob/living/carbon/monkey)) ) user << "\red You don't have the dexterity to use this [src]!" nanomanager.close_user_uis(user, src) @@ -1164,6 +1164,7 @@ lastused_equip = area.usage(EQUIP) lastused_environ = area.usage(ENVIRON) if(area.powerupdate) + if(debug) log_debug("power update in [area.name] / [name]") area.clear_usage() lastused_total = lastused_light + lastused_equip + lastused_environ @@ -1187,16 +1188,16 @@ if(terminal && terminal.powernet) perapc = terminal.powernet.perapc - //if(debug) - //world << "Status: [main_status] - Excess: [excess] - Last Equip: [lastused_equip] - Last Light: [lastused_light]" + if(debug) + log_debug( "Status: [main_status] - Excess: [excess] - Last Equip: [lastused_equip] - Last Light: [lastused_light]") if(cell && !shorted) - var/cell_charge = cell.charge + //var/cell_charge = cell.charge var/cell_maxcharge = cell.maxcharge // draw power from cell as before - var/cellused = min(cell_charge, CELLRATE * lastused_total) // clamp deduction to a max, amount left in cell + var/cellused = min(cell.charge, CELLRATE * lastused_total) // clamp deduction to a max, amount left in cell cell.use(cellused) if(excess > 0 || perapc > lastused_total) // if power excess, or enough anyway, recharge the cell @@ -1207,10 +1208,9 @@ else // no excess, and not enough per-apc - if( (cell_charge/CELLRATE+perapc) >= lastused_total) // can we draw enough from cell+grid to cover last usage? + if( (cell.charge/CELLRATE+perapc) >= lastused_total) // can we draw enough from cell+grid to cover last usage? - cell_charge = min(cell_maxcharge, cell_charge + CELLRATE * perapc) //recharge with what we can - cell.charge = cell_charge + cell.give(CELLRATE * perapc) //recharge with what we can add_load(perapc) // so draw what we can from the grid charging = 0 @@ -1233,30 +1233,30 @@ longtermpower -= 2 - if(cell_charge >= 1250 || longtermpower > 0) // Put most likely at the top so we don't check it last, effeciency 101 + if(cell.charge >= 1250 || longtermpower > 0) // Put most likely at the top so we don't check it last, effeciency 101 if(autoflag != 3) equipment = autoset(equipment, 1) lighting = autoset(lighting, 1) environ = autoset(environ, 1) autoflag = 3 area.poweralert(1, src) - if(cell_charge >= 4000) - area.poweralert(1, src) - else if(cell_charge < 1250 && cell_charge > 750 && longtermpower < 0) // <30%, turn off equipment + if(cell.charge >= 4000) + area.poweralert(1, src) + else if(cell.charge < 1250 && cell.charge > 750 && longtermpower < 0) // <30%, turn off equipment if(autoflag != 2) equipment = autoset(equipment, 2) lighting = autoset(lighting, 1) environ = autoset(environ, 1) area.poweralert(0, src) autoflag = 2 - else if(cell_charge < 750 && cell_charge > 10 && longtermpower < 0) // <15%, turn off lighting & equipment + else if(cell.charge < 750 && cell.charge > 10 && longtermpower < 0) // <15%, turn off lighting & equipment if(autoflag != 1) equipment = autoset(equipment, 2) lighting = autoset(lighting, 2) environ = autoset(environ, 1) area.poweralert(0, src) autoflag = 1 - else if(cell_charge <= 0) // zero charge, turn all off + else if(cell.charge <= 0) // zero charge, turn all off if(autoflag != 0) equipment = autoset(equipment, 0) lighting = autoset(lighting, 0) @@ -1269,7 +1269,7 @@ if(chargemode && charging == 1 && operating) if(excess > 0) // check to make sure we have enough to charge // Max charge is perapc share, capped to cell capacity, or % per second constant (Whichever is smallest) - var/ch = min(perapc*CELLRATE, (cell_maxcharge - cell_charge), (cell_maxcharge*CHARGELEVEL)) + var/ch = min(perapc*CELLRATE, (cell_maxcharge - cell.charge), (cell_maxcharge*CHARGELEVEL)) add_load(ch/CELLRATE) // Removes the power we're taking from the grid cell.give(ch) // actually recharge the cell @@ -1307,7 +1307,7 @@ environ = autoset(environ, 0) area.poweralert(0, src) autoflag = 0 - + // update icon & area power if anything changed diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 42cb730713..7456e54915 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -233,6 +233,7 @@ pixel_x = rand(-2,2) pixel_y = rand(-2,2) updateicon() + update_wclass() /obj/item/weapon/cable_coil/proc/updateicon() if (!item_color) @@ -248,6 +249,12 @@ icon_state = "coil" name = "cable coil" +/obj/item/weapon/cable_coil/proc/update_wclass() + if(amount == 1) + w_class = 1.0 + else + w_class = 2.0 + /obj/item/weapon/cable_coil/examine() set src in view(1) @@ -283,6 +290,7 @@ new/obj/item/weapon/cable_coil(user.loc, 1,item_color) user << "You cut a piece off the cable coil." src.updateicon() + src.update_wclass() return else if( istype(W, /obj/item/weapon/cable_coil) ) @@ -295,6 +303,7 @@ C.amount += src.amount user << "You join the cable coils together." C.updateicon() + C.update_wclass() del(src) return @@ -302,8 +311,10 @@ user << "You transfer [MAXCOIL - src.amount ] length\s of cable from one coil to the other." src.amount -= (MAXCOIL-C.amount) src.updateicon() + src.update_wclass() C.amount = MAXCOIL C.updateicon() + C.update_wclass() return /obj/item/weapon/cable_coil/proc/use(var/used) @@ -314,6 +325,7 @@ else amount -= used updateicon() + update_wclass() return 1 // called when cable_coil is clicked on a turf/simulated/floor @@ -597,6 +609,7 @@ obj/structure/cable/proc/cableColor(var/colorC) pixel_x = rand(-2,2) pixel_y = rand(-2,2) updateicon() + update_wclass() /obj/item/weapon/cable_coil/yellow item_color = COLOR_YELLOW diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index f1fa25234a..dd6d971dc4 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -642,7 +642,7 @@ flags = FPRINT | TABLEPASS force = 2 throwforce = 5 - w_class = 1 + w_class = 2 var/status = 0 // LIGHT_OK, LIGHT_BURNED or LIGHT_BROKEN var/base_state var/switchcount = 0 // number of times switched diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index 83abddb76b..900d0c2b17 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -460,6 +460,7 @@ var/global/list/uneatable = list( move_self = 1 //Do we move on our own? grav_pull = 10 //How many tiles out do we pull? consume_range = 3 //How many tiles out do we eat + var/last_boom = 0 /obj/machinery/singularity/narsie/large name = "Nar-Sie" @@ -490,9 +491,11 @@ var/global/list/uneatable = list( return 0 if (istype(A,/mob/living))//Mobs get gibbed A:gib() - else if(istype(A,/obj/)) - A:ex_act(1.0) - if(A) del(A) + else if(istype(A,/obj)) + var/obj/O = A + machines -= O + processing_objects -= O + O.loc = null else if(isturf(A)) var/turf/T = A if(T.intact) @@ -502,6 +505,9 @@ var/global/list/uneatable = list( if(O.invisibility == 101) src.consume(O) A:ChangeTurf(/turf/space) + if(last_boom + 100 < world.time && prob(5)) + explosion(loc, -1, -1, -1, 1, 0) //Since we're not exploding everything in consume() toss out an explosion effect every now and again + last_boom = world.time return /obj/machinery/singularity/narsie/ex_act() //No throwing bombs at it either. --NEO diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index 3c0ec85ce8..e5fe56c9f0 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -218,6 +218,10 @@ if (!istype(src.loc, /turf) && !istype(usr, /mob/living/silicon/)) return 0 // Do not update ui + for(var/area/A in active_areas) + A.master.powerupdate = 3 + + if( href_list["cmode"] ) chargemode = !chargemode if(!chargemode) diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm index ecb7df50cc..7368735b49 100644 --- a/code/modules/projectiles/ammunition.dm +++ b/code/modules/projectiles/ammunition.dm @@ -53,7 +53,7 @@ item_state = "syringe_kit" m_amt = 50000 throwforce = 2 - w_class = 1.0 + w_class = 2.0 throw_speed = 4 throw_range = 10 var/list/stored_ammo = list() diff --git a/code/modules/projectiles/ammunition/boxes.dm b/code/modules/projectiles/ammunition/boxes.dm index ecbea58fc2..14622ebb29 100644 --- a/code/modules/projectiles/ammunition/boxes.dm +++ b/code/modules/projectiles/ammunition/boxes.dm @@ -135,4 +135,18 @@ icon_state = "a762" ammo_type = "/obj/item/ammo_casing/a762" max_ammo = 0 + multiple_sprites = 1 + +/obj/item/ammo_magazine/chameleon + name = "magazine (.45)" + icon_state = "45" + ammo_type = "/obj/item/ammo_casing/chameleon" + max_ammo = 7 + multiple_sprites = 1 + +/obj/item/ammo_magazine/chameleon/empty + name = "magazine (.45)" + icon_state = "45" + ammo_type = "/obj/item/ammo_casing/chameleon" + max_ammo = 0 multiple_sprites = 1 \ No newline at end of file diff --git a/code/modules/projectiles/ammunition/bullets.dm b/code/modules/projectiles/ammunition/bullets.dm index 49efd840e6..c600199d43 100644 --- a/code/modules/projectiles/ammunition/bullets.dm +++ b/code/modules/projectiles/ammunition/bullets.dm @@ -105,3 +105,9 @@ icon_state = "rocketshell" projectile_type = "/obj/item/missile" caliber = "rocket" + +/obj/item/ammo_casing/chameleon + name = "chameleon bullets" + desc = "A set of bullets for the Chameleon Gun." + projectile_type = "/obj/item/projectile/bullet/chameleon" + caliber = ".45" diff --git a/code/modules/projectiles/guns/energy/nuclear.dm b/code/modules/projectiles/guns/energy/nuclear.dm index 488376b88f..7a0dd8545a 100644 --- a/code/modules/projectiles/guns/energy/nuclear.dm +++ b/code/modules/projectiles/guns/energy/nuclear.dm @@ -6,7 +6,7 @@ fire_sound = 'sound/weapons/Taser.ogg' charge_cost = 100 //How much energy is needed to fire. - projectile_type = "/obj/item/projectile/energy/electrode" + projectile_type = "/obj/item/projectile/beam/stun" origin_tech = "combat=3;magnets=2" modifystate = "energystun" @@ -27,7 +27,7 @@ charge_cost = 100 fire_sound = 'sound/weapons/Taser.ogg' user << "\red [src.name] is now set to stun." - projectile_type = "/obj/item/projectile/energy/electrode" + projectile_type = "/obj/item/projectile/beam/stun" modifystate = "energystun" update_icon() diff --git a/code/modules/projectiles/guns/energy/pulse.dm b/code/modules/projectiles/guns/energy/pulse.dm index cd990a66a7..b4ba69a5a0 100644 --- a/code/modules/projectiles/guns/energy/pulse.dm +++ b/code/modules/projectiles/guns/energy/pulse.dm @@ -18,7 +18,7 @@ charge_cost = 100 fire_sound = 'sound/weapons/Taser.ogg' user << "\red [src.name] is now set to stun." - projectile_type = "/obj/item/projectile/energy/electrode" + projectile_type = "/obj/item/projectile/beam/stun" if(0) mode = 1 charge_cost = 100 diff --git a/code/modules/projectiles/guns/energy/stun.dm b/code/modules/projectiles/guns/energy/stun.dm index ffa49d8122..8f752b68ff 100644 --- a/code/modules/projectiles/guns/energy/stun.dm +++ b/code/modules/projectiles/guns/energy/stun.dm @@ -6,7 +6,7 @@ item_state = null //so the human update icon uses the icon_state instead. fire_sound = 'sound/weapons/Taser.ogg' charge_cost = 100 - projectile_type = "/obj/item/projectile/energy/electrode" + projectile_type = "/obj/item/projectile/beam/stun" cell_type = "/obj/item/weapon/cell/crap" /obj/item/weapon/gun/energy/taser/cyborg @@ -15,7 +15,7 @@ icon_state = "taser" fire_sound = 'sound/weapons/Taser.ogg' charge_cost = 100 - projectile_type = "/obj/item/projectile/energy/electrode" + projectile_type = "/obj/item/projectile/beam/stun" cell_type = "/obj/item/weapon/cell/secborg" var/charge_tick = 0 var/recharge_time = 10 //Time it takes for shots to recharge (in ticks) @@ -33,16 +33,16 @@ charge_tick++ if(charge_tick < recharge_time) return 0 charge_tick = 0 - + if(!power_supply) return 0 //sanity if(power_supply.charge >= power_supply.maxcharge) return 0 // check if we actually need to recharge - + if(isrobot(src.loc)) var/mob/living/silicon/robot/R = src.loc if(R && R.cell) R.cell.use(charge_cost) //Take power from the borg... power_supply.give(charge_cost) //... to recharge the shot - + update_icon() return 1 @@ -51,10 +51,10 @@ name = "stun revolver" desc = "A high-tech revolver that fires stun cartridges. The stun cartridges can be recharged using a conventional energy weapon recharger." icon_state = "stunrevolver" - fire_sound = 'sound/weapons/Gunshot.ogg' + fire_sound = 'sound/weapons/Taser.ogg' origin_tech = "combat=3;materials=3;powerstorage=2" charge_cost = 125 - projectile_type = "/obj/item/projectile/energy/electrode" + projectile_type = "/obj/item/projectile/beam/stun" cell_type = "/obj/item/weapon/cell" diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index f9d2ea73f1..9b1df5c30a 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -168,4 +168,11 @@ var/list/beam_master = list() damage = 60 stun = 5 weaken = 5 - stutter = 5 \ No newline at end of file + stutter = 5 + +/obj/item/projectile/beam/stun + name = "stun beam" + icon_state = "stun" + nodamage = 1 + agony = 40 + damage_type = HALLOSS \ No newline at end of file diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 43cb24d39a..3e92faf4ef 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -58,4 +58,7 @@ embed = 0 /obj/item/projectile/bullet/a762 - damage = 25 \ No newline at end of file + damage = 25 + +/obj/item/projectile/bullet/chameleon + damage = 1 // stop trying to murderbone with a fake gun dumbass!!! \ No newline at end of file diff --git a/code/modules/reagents/Chemistry-Holder.dm b/code/modules/reagents/Chemistry-Holder.dm index 42c2e11f19..5439a92fc6 100644 --- a/code/modules/reagents/Chemistry-Holder.dm +++ b/code/modules/reagents/Chemistry-Holder.dm @@ -110,7 +110,7 @@ datum continue var/current_reagent_transfer = current_reagent.volume * part if(preserve_data) - trans_data = current_reagent.data + trans_data = copy_data(current_reagent) R.add_reagent(current_reagent.id, (current_reagent_transfer * multiplier), trans_data, safety = 1) //safety checks on these so all chemicals are transferred src.remove_reagent(current_reagent.id, current_reagent_transfer, safety = 1) // to the target container before handling reactions @@ -183,7 +183,7 @@ datum for (var/datum/reagent/current_reagent in src.reagent_list) var/current_reagent_transfer = current_reagent.volume * part if(preserve_data) - trans_data = current_reagent.data + trans_data = copy_data(current_reagent) R.add_reagent(current_reagent.id, (current_reagent_transfer * multiplier), trans_data, safety = 1) //safety check so all chemicals are transferred before reacting src.update_total() @@ -207,7 +207,7 @@ datum for (var/datum/reagent/current_reagent in src.reagent_list) if(current_reagent.id == reagent) if(preserve_data) - trans_data = current_reagent.data + trans_data = copy_data(current_reagent) R.add_reagent(current_reagent.id, amount, trans_data) src.remove_reagent(current_reagent.id, amount, 1) break @@ -600,6 +600,24 @@ datum if(my_atom) my_atom.reagents = null + copy_data(var/datum/reagent/current_reagent) + if (!current_reagent || !current_reagent.data) return null + if (!istype(current_reagent.data, /list)) return current_reagent.data + + var/list/trans_data = current_reagent.data.Copy() + + // We do this so that introducing a virus to a blood sample + // doesn't automagically infect all other blood samples from + // the same donor. + // + // Technically we should probably copy all data lists, but + // that could possibly eat up a lot of memory needlessly + // if most data lists are read-only. + if (trans_data["virus2"]) + var/list/v = trans_data["virus2"] + trans_data["virus2"] = v.Copy() + + return trans_data /////////////////////////////////////////////////////////////////////////////////// diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index 9518823cec..3f735c9f03 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -949,7 +949,7 @@ datum for(var/mob/living/carbon/slime/M in T) M.adjustToxLoss(rand(5,10)) - + reaction_mob(var/mob/M, var/method=TOUCH, var/volume) if(iscarbon(M)) var/mob/living/carbon/C = M @@ -1835,7 +1835,7 @@ datum toxin/beer2 //disguised as normal beer for use by emagged brobots name = "Beer" id = "beer2" - description = "An alcoholic beverage made from malted grains, hops, yeast, and water. The fermentation appears to be imcomplete." //If the players manage to analyze this, they deserve to know something is wrong. + description = "An alcoholic beverage made from malted grains, hops, yeast, and water. The fermentation appears to be incomplete." //If the players manage to analyze this, they deserve to know something is wrong. reagent_state = LIQUID color = "#664300" // rgb: 102, 67, 0 custom_metabolism = 0.15 // Sleep toxins should always be consumed pretty fast @@ -3706,4 +3706,4 @@ datum return // Undefine the alias for REAGENTS_EFFECT_MULTIPLER -#undef REM +#undef REM diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm index 0828e545fc..401d98b7ef 100644 --- a/code/modules/reagents/reagent_containers.dm +++ b/code/modules/reagents/reagent_containers.dm @@ -3,7 +3,7 @@ desc = "..." icon = 'icons/obj/chemical.dmi' icon_state = null - w_class = 1 + w_class = 2 var/amount_per_transfer_from_this = 5 var/possible_transfer_amounts = list(5,10,15,25,30) var/volume = 30 diff --git a/code/modules/reagents/reagent_containers/dropper.dm b/code/modules/reagents/reagent_containers/dropper.dm index 17f8d1ce11..11fd71e620 100644 --- a/code/modules/reagents/reagent_containers/dropper.dm +++ b/code/modules/reagents/reagent_containers/dropper.dm @@ -8,6 +8,7 @@ icon_state = "dropper0" amount_per_transfer_from_this = 5 possible_transfer_amounts = list(1,2,3,4,5) + w_class = 1 volume = 5 var/filled = 0 diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm index 0500a5d79b..fa9149f3ff 100644 --- a/code/modules/reagents/reagent_containers/pill.dm +++ b/code/modules/reagents/reagent_containers/pill.dm @@ -8,6 +8,7 @@ icon_state = null item_state = "pill" possible_transfer_amounts = null + w_class = 1 volume = 50 New() diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index 2f345463e8..72275227e3 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -15,6 +15,7 @@ amount_per_transfer_from_this = 5 possible_transfer_amounts = null //list(5,10,15) volume = 15 + w_class = 1 var/mode = SYRINGE_DRAW on_reagent_change() diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index 28dad70da2..eecba616fb 100755 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -165,7 +165,7 @@ //If you don't want to fuck up disposals, add to this list, and don't change the order. //If you insist on changing the order, you'll have to change every sort junction to reflect the new order. --Pete - w_class = 1 + w_class = 2 item_state = "electronic" flags = FPRINT | TABLEPASS | CONDUCT slot_flags = SLOT_BELT diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index 53b45fcbe5..de35439332 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -1369,13 +1369,13 @@ datum/design/implant_free build_path = "/obj/item/weapon/implant/freedom" datum/design/chameleon - name = "Chameleon Jumpsuit" - desc = "It's a plain jumpsuit. It seems to have a small dial on the wrist." + name = "Chameleon Kit" + desc = "It's a set of clothes with dials on them." id = "chameleon" req_tech = list("syndicate" = 2) build_type = PROTOLATHE materials = list("$metal" = 500) - build_path = "/obj/item/clothing/under/chameleon" + build_path = "/obj/item/weapon/storage/box/syndie_kit/chameleon" datum/design/bluespacebeaker @@ -1712,7 +1712,7 @@ datum/design/security_hud icon = 'icons/obj/cloning.dmi' icon_state = "datadisk2" item_state = "card-id" - w_class = 1.0 + w_class = 2.0 m_amt = 30 g_amt = 10 var/datum/design/blueprint diff --git a/code/modules/research/research.dm b/code/modules/research/research.dm index 40b534bf0e..1ec9093cfc 100644 --- a/code/modules/research/research.dm +++ b/code/modules/research/research.dm @@ -262,7 +262,7 @@ datum/tech/robotics icon = 'icons/obj/cloning.dmi' icon_state = "datadisk2" item_state = "card-id" - w_class = 1.0 + w_class = 2.0 m_amt = 30 g_amt = 10 var/datum/tech/stored diff --git a/code/modules/research/xenoarchaeology/artifact/artifact.dm b/code/modules/research/xenoarchaeology/artifact/artifact.dm index 6300a6d71a..ad79451794 100644 --- a/code/modules/research/xenoarchaeology/artifact/artifact.dm +++ b/code/modules/research/xenoarchaeology/artifact/artifact.dm @@ -39,6 +39,7 @@ var/excavation_level = 0 var/datum/geosample/geological_data var/datum/artifact_find/artifact_find + var/last_act = 0 /obj/structure/boulder/New() icon_state = "boulder[rand(1,4)]" @@ -68,8 +69,14 @@ if (istype(W, /obj/item/weapon/pickaxe)) var/obj/item/weapon/pickaxe/P = W + if(last_act + P.digspeed > world.time)//prevents message spam + return + last_act = world.time + user << "\red You start [P.drill_verb] [src]." + + if(!do_after(user,P.digspeed)) return @@ -97,3 +104,22 @@ user.visible_message("[src] suddenly crumbles away.",\ "\blue [src] has been whittled away under your careful excavation, but there was nothing of interest inside.") del(src) + +/obj/structure/boulder/Bumped(AM) + . = ..() + if(istype(AM,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = AM + if((istype(H.l_hand,/obj/item/weapon/pickaxe)) && (!H.hand)) + attackby(H.l_hand,H) + else if((istype(H.r_hand,/obj/item/weapon/pickaxe)) && H.hand) + attackby(H.r_hand,H) + + else if(istype(AM,/mob/living/silicon/robot)) + var/mob/living/silicon/robot/R = AM + if(istype(R.module_active,/obj/item/weapon/pickaxe)) + attackby(R.module_active,R) + + else if(istype(AM,/obj/mecha)) + var/obj/mecha/M = AM + if(istype(M.selected,/obj/item/mecha_parts/mecha_equipment/tool/drill)) + M.selected.action(src) diff --git a/code/modules/research/xenoarchaeology/chemistry.dm b/code/modules/research/xenoarchaeology/chemistry.dm index 9e0e646234..13a8367b96 100644 --- a/code/modules/research/xenoarchaeology/chemistry.dm +++ b/code/modules/research/xenoarchaeology/chemistry.dm @@ -77,7 +77,7 @@ datum icon_state = "solution_tray" m_amt = 0 g_amt = 5 - w_class = 1.0 + w_class = 2.0 amount_per_transfer_from_this = 1 possible_transfer_amounts = list(1, 2) volume = 2 diff --git a/code/modules/research/xenoarchaeology/tools/tools_anoscanner.dm b/code/modules/research/xenoarchaeology/tools/tools_anoscanner.dm index f3b1f9583e..257c7389cc 100644 --- a/code/modules/research/xenoarchaeology/tools/tools_anoscanner.dm +++ b/code/modules/research/xenoarchaeology/tools/tools_anoscanner.dm @@ -5,7 +5,7 @@ icon = 'icons/obj/xenoarchaeology.dmi' icon_state = "flashgun" item_state = "lampgreen" - w_class = 1.0 + w_class = 2.0 flags = FPRINT | TABLEPASS slot_flags = SLOT_BELT var/nearest_artifact_id = "unknown" diff --git a/code/modules/research/xenoarchaeology/tools/tools_depthscanner.dm b/code/modules/research/xenoarchaeology/tools/tools_depthscanner.dm index ad9a525b71..9f48c7d6a7 100644 --- a/code/modules/research/xenoarchaeology/tools/tools_depthscanner.dm +++ b/code/modules/research/xenoarchaeology/tools/tools_depthscanner.dm @@ -9,7 +9,7 @@ icon = 'icons/obj/pda.dmi' icon_state = "crap" item_state = "analyzer" - w_class = 1.0 + w_class = 2.0 flags = FPRINT | TABLEPASS slot_flags = SLOT_BELT var/list/positive_locations = list() diff --git a/code/modules/telesci/bscrystal.dm b/code/modules/telesci/bscrystal.dm index d9e968f4da..1b3f88cf08 100644 --- a/code/modules/telesci/bscrystal.dm +++ b/code/modules/telesci/bscrystal.dm @@ -5,7 +5,7 @@ desc = "A glowing bluespace crystal, not much is known about how they work. It looks very delicate." icon = 'icons/obj/telescience.dmi' icon_state = "bluespace_crystal" - w_class = 1 + w_class = 2 origin_tech = "bluespace=4;materials=3" var/blink_range = 8 // The teleport range when crushed/thrown at someone. diff --git a/code/modules/virus2/analyser.dm b/code/modules/virus2/analyser.dm index adec9dd186..8046c48af0 100644 --- a/code/modules/virus2/analyser.dm +++ b/code/modules/virus2/analyser.dm @@ -10,43 +10,46 @@ var/obj/item/weapon/virusdish/dish = null -/obj/machinery/disease2/diseaseanalyser/attackby(var/obj/I as obj, var/mob/user as mob) - if(istype(I,/obj/item/weapon/virusdish)) - var/mob/living/carbon/c = user - if(!dish) - dish = I - c.drop_item() - I.loc = src - for(var/mob/M in viewers(src)) - if(M == user) continue - M.show_message("\blue [user.name] inserts the [dish.name] in the [src.name]", 3) - else - user << "There is already a dish inserted" - return +/obj/machinery/disease2/diseaseanalyser/attackby(var/obj/O as obj, var/mob/user as mob) + if(!istype(O,/obj/item/weapon/virusdish)) return + if(dish) + user << "\The [src] is already loaded." + return + + dish = O + user.drop_item() + O.loc = src + + user.visible_message("[user] adds \a [O] to \the [src]!", "You add \a [O] to \the [src]!") /obj/machinery/disease2/diseaseanalyser/process() if(stat & (NOPOWER|BROKEN)) return - //use_power(500) - if(scanning) scanning -= 1 if(scanning == 0) - var/r = dish.virus2.get_info() + if (dish.virus2.addToDB()) + ping("\The [src] pings, \"New pathogen added to data bank.\"") var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(src.loc) - P.info = r + P.name = "paper - [dish.virus2.name()]" + + var/r = dish.virus2.get_info() + P.info = {" + [virology_letterhead("Post-Analysis Memo")] + [r] +
    + Additional Notes:  +"} dish.info = r dish.analysed = 1 - if (dish.virus2.addToDB()) - src.state("\The [src.name] states, \"Added new pathogen to database.\"") dish.loc = src.loc dish = null - icon_state = "analyser" - src.state("\The [src.name] prints a sheet of paper") + icon_state = "analyser" + src.state("\The [src] prints a sheet of paper.") else if(dish && !scanning && !pause) if(dish.virus2 && dish.growth > 50) @@ -58,6 +61,7 @@ spawn(25) dish.loc = src.loc dish = null - src.state("\The [src.name] buzzes") + + src.state("\The [src] buzzes, \"Insufficient growth density to complete analysis.\"") pause = 0 return diff --git a/code/modules/virus2/centrifuge.dm b/code/modules/virus2/centrifuge.dm index d0dc99ddf9..0a239f82df 100644 --- a/code/modules/virus2/centrifuge.dm +++ b/code/modules/virus2/centrifuge.dm @@ -9,19 +9,23 @@ var/obj/item/weapon/reagent_containers/glass/beaker/vial/sample = null var/datum/disease2/disease/virus2 = null -/obj/machinery/computer/centrifuge/attackby(var/obj/I as obj, var/mob/user as mob) - if(istype(I, /obj/item/weapon/screwdriver)) - return ..(I,user) +/obj/machinery/computer/centrifuge/attackby(var/obj/O as obj, var/mob/user as mob) + if(istype(O, /obj/item/weapon/screwdriver)) + return ..(O,user) - if(istype(I,/obj/item/weapon/reagent_containers/glass/beaker/vial)) - var/mob/living/carbon/C = user - if(!sample) - sample = I - C.drop_item() - I.loc = src + if(istype(O,/obj/item/weapon/reagent_containers/glass/beaker/vial)) + if(sample) + user << "\The [src] is already loaded." + return + + sample = O + user.drop_item() + O.loc = src + + user.visible_message("[user] adds \a [O] to \the [src]!", "You add \a [O] to \the [src]!") + nanomanager.update_uis(src) src.attack_hand(user) - return /obj/machinery/computer/centrifuge/update_icon() ..() @@ -29,126 +33,181 @@ icon_state = "centrifuge_moving" /obj/machinery/computer/centrifuge/attack_hand(var/mob/user as mob) - if(..()) - return - user.set_machine(src) - var/dat= "" - if(curing) - dat = "Antibody isolation in progress" - else if(isolating) - dat = "Pathogen isolation in progress" - else - dat += "
    Blood sample:" - dat += "
    " - if(sample) - var/datum/reagent/blood/B = locate(/datum/reagent/blood) in sample.reagents.reagent_list - if(B) - dat += "Sample inserted." - if (B.data["antibodies"]) - dat += "
    " - dat += "Antibodies: [antigens2string(B.data["antibodies"])]" - dat += "Isolate" + if(..()) return + ui_interact(user) +/obj/machinery/computer/centrifuge/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) + user.set_machine(src) + + var/data[0] + data["antibodies"] = null + data["pathogens"] = null + data["is_antibody_sample"] = null + + if (curing) + data["busy"] = "Isolating antibodies..." + else if (isolating) + data["busy"] = "Isolating pathogens..." + else + data["sample_inserted"] = !!sample + + if (sample) + var/datum/reagent/blood/B = locate(/datum/reagent/blood) in sample.reagents.reagent_list + if (B) + data["antibodies"] = B.data["antibodies"] ? antigens2string(B.data["antibodies"]) : null + + var/list/pathogens[0] var/list/virus = B.data["virus2"] for (var/ID in virus) var/datum/disease2/disease/V = virus[ID] - dat += "
    pathogen [V.name()]" - dat += "Isolate" + pathogens.Add(list(list("name" = V.name(), "spread_type" = V.spreadtype, "reference" = "\ref[V]"))) + + if (pathogens.len > 0) + data["pathogens"] = pathogens + else - dat += "Please check container contents." - dat += "
    Eject container" - else - dat = "Please insert a container." - dat += "

    " + var/datum/reagent/antibodies/A = locate(/datum/reagent/antibodies) in sample.reagents.reagent_list + data["antibodies"] = A && A.data["antibodies"] ? antigens2string(A.data["antibodies"]) : null + data["is_antibody_sample"] = 1 - dat += "
    " - - user << browse(dat, "window=computer;size=400x500") - onclose(user, "computer") - return + ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) + if (!ui) + ui = new(user, src, ui_key, "isolation_centrifuge.tmpl", src.name, 400, 500) + ui.set_initial_data(data) + ui.open() /obj/machinery/computer/centrifuge/process() ..() + if (stat & (NOPOWER|BROKEN)) return - if(stat & (NOPOWER|BROKEN)) - return - //use_power(500) - - if(curing) + if (curing) curing -= 1 - if(curing == 0) - if(sample) - cure() - update_icon() - if(isolating) + if (curing == 0) + cure() + + if (isolating) isolating -= 1 if(isolating == 0) - if(sample) - isolate() - update_icon() - - src.updateUsrDialog() - return + isolate() /obj/machinery/computer/centrifuge/Topic(href, href_list) - if(..()) - return + if (..()) return 0 - if(usr) usr.set_machine(src) + var/mob/user = usr + var/datum/nanoui/ui = nanomanager.get_open_ui(user, src, "main") + + src.add_fingerprint(user) + + if (href_list["close"]) + user.unset_machine() + ui.close() + return 0 + + if (href_list["print"]) + print(user) + return 1 + + if(href_list["isolate"]) + var/datum/reagent/blood/B = locate(/datum/reagent/blood) in sample.reagents.reagent_list + if (B) + var/datum/disease2/disease/virus = locate(href_list["isolate"]) + virus2 = virus.getcopy() + isolating = 40 + update_icon() + return 1 switch(href_list["action"]) - if("antibody") + if ("antibody") var/delay = 20 var/datum/reagent/blood/B = locate(/datum/reagent/blood) in sample.reagents.reagent_list if (!B) - state("\The [src.name] buzzes, \"No antibody carrier detected.\"", "blue") + state("\The [src] buzzes, \"No antibody carrier detected.\"", "blue") + return 1 - else if(sample.reagents.has_reagent("toxins")) - state("\The [src.name] beeps, \"Pathogen purging speed above nominal.\"", "blue") - delay = delay/2 + var/has_toxins = locate(/datum/reagent/toxin) in sample.reagents.reagent_list + var/has_radium = sample.reagents.has_reagent("radium") + if (has_toxins || has_radium) + state("\The [src] beeps, \"Pathogen purging speed above nominal.\"", "blue") + if (has_toxins) + delay = delay/2 + if (has_radium) + delay = delay/2 - else - curing = delay - playsound(src.loc, 'sound/machines/juicer.ogg', 50, 1) - update_icon() - - if("isolate") - var/datum/reagent/blood/B = locate(/datum/reagent/blood) in sample.reagents.reagent_list - if (B) - var/list/virus = virus_copylist(B.data["virus2"]) - var/choice = href_list["isolate"] - if (choice in virus) - virus2 = virus[choice] - isolating = 40 - update_icon() - else - state("\The [src.name] buzzes, \"No such pathogen detected.\"", "blue") + curing = round(delay) + playsound(src.loc, 'sound/machines/juicer.ogg', 50, 1) + update_icon() + return 1 if("sample") if(sample) sample.loc = src.loc sample = null + return 1 - src.add_fingerprint(usr) - src.updateUsrDialog() - attack_hand(usr) - return - + return 0 /obj/machinery/computer/centrifuge/proc/cure() + if (!sample) return var/datum/reagent/blood/B = locate(/datum/reagent/blood) in sample.reagents.reagent_list - if (!B) - return + if (!B) return var/list/data = list("antibodies" = B.data["antibodies"]) var/amt= sample.reagents.get_reagent_amount("blood") - sample.reagents.remove_reagent("blood",amt) - sample.reagents.add_reagent("antibodies",amt,data) + sample.reagents.remove_reagent("blood", amt) + sample.reagents.add_reagent("antibodies", amt, data) - state("\The [src.name] pings", "blue") + nanomanager.update_uis(src) + update_icon() + ping("\The [src] pings, \"Antibody isolated.\"") /obj/machinery/computer/centrifuge/proc/isolate() - var/obj/item/weapon/virusdish/dish = new/obj/item/weapon/virusdish(src.loc) + if (!sample) return + var/obj/item/weapon/virusdish/dish = new/obj/item/weapon/virusdish(loc) dish.virus2 = virus2 + virus2 = null - state("\The [src.name] pings", "blue") + nanomanager.update_uis(src) + update_icon() + ping("\The [src] pings, \"Pathogen isolated.\"") + +/obj/machinery/computer/centrifuge/proc/print(var/mob/user) + var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(loc) + P.name = "paper - Pathology Report" + P.info = {" + [virology_letterhead("Pathology Report")] + Sample: [sample.name]
    +"} + + if (user) + P.info += "Generated By: [user.name]
    " + + P.info += "
    " + + var/datum/reagent/blood/B = locate(/datum/reagent/blood) in sample.reagents.reagent_list + if (B) + P.info += "Antibodies: " + P.info += B.data["antibodies"] ? antigens2string(B.data["antibodies"]) : "None" + P.info += "
    " + + var/list/virus = B.data["virus2"] + P.info += "Pathogens:
    " + if (virus.len > 0) + for (var/ID in virus) + var/datum/disease2/disease/V = virus[ID] + P.info += "[V.name()]
    " + else + P.info += "None
    " + + else + var/datum/reagent/antibodies/A = locate(/datum/reagent/antibodies) in sample.reagents.reagent_list + if (A) + P.info += "The following antibodies have been isolated from the blood sample: " + P.info += A.data["antibodies"] ? antigens2string(A.data["antibodies"]) : "None" + P.info += "
    " + + P.info += {" +
    + Additional Notes: +"} + + state("The nearby computer prints out a pathology report.") diff --git a/code/modules/virus2/disease2.dm b/code/modules/virus2/disease2.dm index f4bb28d046..422ca221f6 100644 --- a/code/modules/virus2/disease2.dm +++ b/code/modules/virus2/disease2.dm @@ -172,17 +172,21 @@ var/global/list/virusDB = list() .= V.fields["name"] /datum/disease2/disease/proc/get_info() - var/r = "GNAv2 based virus lifeform - [name()], #[add_zero("[uniqueID]", 4)]" - r += "
    Infection rate : [infectionchance * 10]" - r += "
    Spread form : [spreadtype]" - r += "
    Progress Speed : [stageprob * 10]" - r += "
    Affected species:" - for(var/S in affected_species) - r += "
    [S]" - for(var/datum/disease2/effectholder/E in effects) - r += "
    Effect:[E.effect.name]. Strength : [E.multiplier * 8]. Verosity : [E.chance * 15]. Type : [5-E.stage]." + var/r = {" + Analysis determined the existence of a GNAv2-based viral lifeform.
    + Designation: [name()]
    + Antigen: [antigens2string(antigen)]
    + Transmitted By: [spreadtype]
    + Rate of Progression: [stageprob * 10]
    + Species Affected: [list2text(affected_species, ", ")]
    +"} + + r += "Symptoms:
    " + for(var/datum/disease2/effectholder/E in effects) + r += "([E.stage]) [E.effect.name] " + r += "Strength: [E.multiplier >= 3 ? "Severe" : E.multiplier > 1 ? "Above Average" : "Average"] " + r += "Verosity: [E.chance * 15]
    " - r += "
    Antigen pattern: [antigens2string(antigen)]" return r /datum/disease2/disease/proc/addToDB() @@ -221,3 +225,10 @@ proc/virus2_greater_infection() candidates = shuffle(candidates) infect_mob_random_greater(candidates[1]) + +proc/virology_letterhead(var/report_name) + return {" +

    [report_name]

    +
    [station_name()] Virology Lab
    +
    +"} diff --git a/code/modules/virus2/diseasesplicer.dm b/code/modules/virus2/diseasesplicer.dm index 82faf4d2f1..a8ba0af399 100644 --- a/code/modules/virus2/diseasesplicer.dm +++ b/code/modules/virus2/diseasesplicer.dm @@ -4,145 +4,179 @@ icon_state = "crew" var/datum/disease2/effectholder/memorybank = null + var/list/species_buffer = null var/analysed = 0 var/obj/item/weapon/virusdish/dish = null var/burning = 0 - var/splicing = 0 var/scanning = 0 /obj/machinery/computer/diseasesplicer/attackby(var/obj/I as obj, var/mob/user as mob) if(istype(I, /obj/item/weapon/screwdriver)) return ..(I,user) + if(istype(I,/obj/item/weapon/virusdish)) var/mob/living/carbon/c = user - if(!dish) + if (dish) + user << "\The [src] is already loaded." + return + + dish = I + c.drop_item() + I.loc = src - dish = I - c.drop_item() - I.loc = src if(istype(I,/obj/item/weapon/diseasedisk)) - user << "You upload the contents of the disk into the buffer" + user << "You upload the contents of the disk onto the buffer." memorybank = I:effect + species_buffer = I:species + analysed = I:analysed src.attack_hand(user) - return /obj/machinery/computer/diseasesplicer/attack_ai(var/mob/user as mob) return src.attack_hand(user) /obj/machinery/computer/diseasesplicer/attack_paw(var/mob/user as mob) - return src.attack_hand(user) - return /obj/machinery/computer/diseasesplicer/attack_hand(var/mob/user as mob) - if(..()) - return + if(..()) return + ui_interact(user) + +/obj/machinery/computer/diseasesplicer/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) user.set_machine(src) - var/dat - if(splicing) - dat = "Splicing in progress." - else if(scanning) - dat = "Splicing in progress." - else if(burning) - dat = "Data disk burning in progress." + + var/data[0] + data["dish_inserted"] = !!dish + data["growth"] = 0 + data["affected_species"] = null + + if (memorybank) + data["buffer"] = list("name" = (analysed ? memorybank.effect.name : "Unknown Symptom"), "stage" = memorybank.stage) + if (species_buffer) + data["species_buffer"] = analysed ? list2text(species_buffer, ", ") : "Unknown Species" + + if (splicing) + data["busy"] = "Splicing..." + else if (scanning) + data["busy"] = "Scanning..." + else if (burning) + data["busy"] = "Copying data to disk..." + else if (dish) + data["growth"] = min(dish.growth, 100) + + if (dish.virus2) + if (dish.virus2.affected_species) + data["affected_species"] = dish.analysed ? list2text(dish.virus2.affected_species, ", ") : "Unknown" + + if (dish.growth >= 50) + var/list/effects[0] + for (var/datum/disease2/effectholder/e in dish.virus2.effects) + effects.Add(list(list("name" = (dish.analysed ? e.effect.name : "Unknown"), "stage" = (e.stage), "reference" = "\ref[e]"))) + data["effects"] = effects + else + data["info"] = "Insufficient cell growth for gene splicing." + else + data["info"] = "No virus detected." else - if(dish) - dat = "Virus dish inserted." + data["info"] = "No dish loaded." - dat += "
    Current DNA strand : " - if(memorybank) - dat += "" - if(analysed) - dat += "[memorybank.effect.name] ([5-memorybank.effect.stage])" - else - dat += "Unknown DNA strand ([5-memorybank.effect.stage])" - dat += "" - - dat += "
    Burn DNA Sequence to data storage disk" - else - dat += "Empty." - - dat += "

    " - - if(dish) - if(dish.virus2) - if(dish.growth >= 50) - for(var/datum/disease2/effectholder/e in dish.virus2.effects) - dat += "
    DNA strand" - if(dish.analysed) - dat += ": [e.effect.name]" - dat += " (5-[e.effect.stage])" - else - dat += "
    Insufficent cells to attempt gene splicing." - else - dat += "
    No virus found in dish." - - dat += "

    Eject disk" - else - dat += "
    Please insert dish." - - user << browse(dat, "window=computer;size=400x500") - onclose(user, "computer") - return + ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) + if (!ui) + ui = new(user, src, ui_key, "disease_splicer.tmpl", src.name, 400, 600) + ui.set_initial_data(data) + ui.open() /obj/machinery/computer/diseasesplicer/process() if(stat & (NOPOWER|BROKEN)) return - //use_power(500) if(scanning) scanning -= 1 if(!scanning) - state("The [src.name] beeps", "blue") + ping("\The [src] pings, \"Analysis complete.\"") + nanomanager.update_uis(src) if(splicing) splicing -= 1 if(!splicing) - state("The [src.name] pings", "blue") + ping("\The [src] pings, \"Splicing operation complete.\"") + nanomanager.update_uis(src) if(burning) burning -= 1 if(!burning) var/obj/item/weapon/diseasedisk/d = new /obj/item/weapon/diseasedisk(src.loc) + d.analysed = analysed if(analysed) - d.name = "[memorybank.effect.name] GNA disk (Stage: [5-memorybank.effect.stage])" + if (memorybank) + d.name = "[memorybank.effect.name] GNA disk (Stage: [memorybank.effect.stage])" + d.effect = memorybank + else if (species_buffer) + d.name = "[list2text(species_buffer, ", ")] GNA disk" + d.species = species_buffer else - d.name = "Unknown GNA disk (Stage: [5-memorybank.effect.stage])" - d.effect = memorybank - state("The [src.name] zings", "blue") + if (memorybank) + d.name = "Unknown GNA disk (Stage: [memorybank.effect.stage])" + d.effect = memorybank + else if (species_buffer) + d.name = "Unknown Species GNA disk" + d.species = species_buffer - src.updateUsrDialog() - return + ping("\The [src] pings, \"Backup disk saved.\"") + nanomanager.update_uis(src) /obj/machinery/computer/diseasesplicer/Topic(href, href_list) - if(..()) - return + if(..()) return 0 - if(usr) usr.set_machine(src) + var/mob/user = usr + var/datum/nanoui/ui = nanomanager.get_open_ui(user, src, "main") + + src.add_fingerprint(user) + + if (href_list["close"]) + user.unset_machine() + ui.close() + return 0 if (href_list["grab"]) - memorybank = locate(href_list["grab"]) - analysed = dish.analysed - del(dish) - dish = null - scanning = 10 + if (dish) + memorybank = locate(href_list["grab"]) + species_buffer = null + analysed = dish.analysed + dish = null + scanning = 10 + return 1 - else if(href_list["eject"]) - dish.loc = src.loc - dish = null + if (href_list["affected_species"]) + if (dish) + memorybank = null + species_buffer = dish.virus2.affected_species + analysed = dish.analysed + dish = null + scanning = 10 + return 1 - else if(href_list["splice"]) + if(href_list["eject"]) + if (dish) + dish.loc = src.loc + dish = null + return 1 + + if(href_list["splice"]) if(dish) - for(var/datum/disease2/effectholder/e in dish.virus2.effects) - if(e.stage == memorybank.stage) - e.effect = memorybank.effect + if (memorybank) + for(var/datum/disease2/effectholder/e in dish.virus2.effects) + if(e.stage == memorybank.stage) + e.effect = memorybank.effect + + if (species_buffer) + dish.virus2.affected_species = species_buffer + splicing = 10 dish.virus2.uniqueID = rand(0,10000) -// dish.virus2.spreadtype = "Blood" + return 1 - else if(href_list["disk"]) + if(href_list["disk"]) burning = 10 + return 1 - src.add_fingerprint(usr) - src.updateUsrDialog() - return + return 0 diff --git a/code/modules/virus2/dishincubator.dm b/code/modules/virus2/dishincubator.dm index 74d5470ec1..53f6688ef8 100644 --- a/code/modules/virus2/dishincubator.dm +++ b/code/modules/virus2/dishincubator.dm @@ -14,120 +14,79 @@ var/foodsupply = 0 var/toxins = 0 - var/virusing +/obj/machinery/disease2/incubator/attackby(var/obj/O as obj, var/mob/user as mob) + if(istype(O, /obj/item/weapon/reagent_containers/glass) || istype(O,/obj/item/weapon/reagent_containers/syringe)) -/obj/machinery/disease2/incubator/attackby(var/obj/B as obj, var/mob/user as mob) - if(istype(B, /obj/item/weapon/reagent_containers/glass) || istype(B,/obj/item/weapon/reagent_containers/syringe)) - - if(src.beaker) - if(istype(beaker,/obj/item/weapon/reagent_containers/syringe)) - user << "A syringe is already loaded into the machine." - else - user << "A beaker is already loaded into the machine." + if(beaker) + user << "\The [src] is already loaded." return - src.beaker = B + beaker = O user.drop_item() - B.loc = src - if(istype(B,/obj/item/weapon/reagent_containers/syringe)) - user << "You add the syringe to the machine!" - src.updateUsrDialog() - else - user << "You add the beaker to the machine!" - src.updateUsrDialog() - else - if(istype(B,/obj/item/weapon/virusdish)) - if(src.dish) - user << "A dish is already loaded into the machine." - return + O.loc = src - src.dish = B - user.drop_item() - B.loc = src - if(istype(B,/obj/item/weapon/virusdish)) - user << "You add the dish to the machine!" - src.updateUsrDialog() + user.visible_message("[user] adds \a [O] to \the [src]!", "You add \a [O] to \the [src]!") + nanomanager.update_uis(src) -/obj/machinery/disease2/incubator/Topic(href, href_list) - if(..()) return - - if(usr) usr.set_machine(src) - - if (href_list["ejectchem"]) - if(beaker) - beaker.loc = src.loc - beaker = null - if(!dish) + src.attack_hand(user) return - if (href_list["power"]) - on = !on - if(on) - icon_state = "incubator_on" - else - icon_state = "incubator" - if (href_list["ejectdish"]) + + if(istype(O, /obj/item/weapon/virusdish)) + if(dish) - dish.loc = src.loc - dish = null - if (href_list["rad"]) - radiation += 10 - if (href_list["flush"]) - radiation = 0 - toxins = 0 - foodsupply = 0 + user << "The dish tray is aleady full!" + return - if(href_list["virus"]) - if (!dish) - state("\The [src.name] buzzes, \"No viral culture sample detected.\"", "blue") - else - var/datum/reagent/blood/B = locate(/datum/reagent/blood) in beaker.reagents.reagent_list - if (!B) - state("\The [src.name] buzzes, \"No suitable breeding enviroment detected.\"", "blue") - else - if (!B.data["virus2"]) - B.data["virus2"] = list() - var/list/virus = list("[dish.virus2.uniqueID]" = dish.virus2.getcopy()) - B.data["virus2"] = virus + dish = O + user.drop_item() + O.loc = src - state("\The [src.name] pings, \"Injection complete.\"", "blue") + user.visible_message("[user] adds \a [O] to \the [src]!", "You add \a [O] to \the [src]!") + nanomanager.update_uis(src) - - src.add_fingerprint(usr) - src.updateUsrDialog() + src.attack_hand(user) /obj/machinery/disease2/incubator/attack_hand(mob/user as mob) - if(stat & BROKEN) - return + if(stat & (NOPOWER|BROKEN)) return + ui_interact(user) + +/obj/machinery/disease2/incubator/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) user.set_machine(src) - var/dat = "" - if(!dish) - dat = "Please insert dish into the incubator.
    " - var/string = "Off" - if(on) - string = "On" - dat += "Power status : [string]" - dat += "
    " - dat += "Food supply : [foodsupply]" - dat += "
    " - dat += "Radiation Levels : [radiation] RADS : Radiate" - dat += "
    " - dat += "Toxins : [toxins]" - dat += "

    " - if(beaker) - dat += "Eject chemicals : Eject" - dat += "
    " - if(dish) - dat += "Eject Virus dish : Eject" - dat += "
    " - if(beaker) - dat += "Breed viral culture in beaker : Start" - dat += "
    " - dat += "

    " - dat += "Flush system
    " - dat += "Close
    " - user << browse("Pathogenic incubatorincubator menu:

    [dat]", "window=incubator;size=575x400") - onclose(user, "incubator") - return + + var/data[0] + data["chemicals_inserted"] = !!beaker + data["dish_inserted"] = !!dish + data["food_supply"] = foodsupply + data["radiation"] = radiation + data["toxins"] = min(toxins, 100) + data["on"] = on + data["system_in_use"] = foodsupply > 0 || radiation > 0 || toxins > 0 + data["chemical_volume"] = beaker ? beaker.reagents.total_volume : 0 + data["max_chemical_volume"] = beaker ? beaker.volume : 1 + data["virus"] = dish ? dish.virus2 : null + data["growth"] = dish ? min(dish.growth, 100) : 0 + data["infection_rate"] = dish && dish.virus2 ? dish.virus2.infectionchance * 10 : 0 + data["analysed"] = dish && dish.analysed ? 1 : 0 + data["can_breed_virus"] = null + data["blood_already_infected"] = null + + if (beaker) + var/datum/reagent/blood/B = locate(/datum/reagent/blood) in beaker.reagents.reagent_list + data["can_breed_virus"] = dish && dish.virus2 && B + + if (B) + if (!B.data["virus2"]) + B.data["virus2"] = list() + + var/list/virus = B.data["virus2"] + for (var/ID in virus) + data["blood_already_infected"] = virus[ID] + + ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) + if (!ui) + ui = new(user, src, ui_key, "dish_incubator.tmpl", src.name, 400, 600) + ui.set_initial_data(data) + ui.open() /obj/machinery/disease2/incubator/process() if(dish && on && dish.virus2) @@ -135,34 +94,105 @@ if(!powered(EQUIP)) on = 0 icon_state = "incubator" + if(foodsupply) + if(dish.growth + 3 >= 100 && dish.growth < 100) + ping("\The [src] pings, \"Sufficient viral growth density achieved.\"") + foodsupply -= 1 dish.growth += 3 - if(dish.growth >= 100) - state("The [src.name] pings", "blue") + nanomanager.update_uis(src) + if(radiation) if(radiation > 50 & prob(5)) dish.virus2.majormutate() if(dish.info) dish.info = "OUTDATED : [dish.info]" dish.analysed = 0 - state("The [src.name] beeps", "blue") - + ping("\The [src] pings, \"Mutant viral strain detected.\"") else if(prob(5)) dish.virus2.minormutate() radiation -= 1 + nanomanager.update_uis(src) if(toxins && prob(5)) dish.virus2.infectionchance -= 1 + nanomanager.update_uis(src) if(toxins > 50) + dish.growth = 0 dish.virus2 = null + nanomanager.update_uis(src) else if(!dish) on = 0 icon_state = "incubator" + nanomanager.update_uis(src) if(beaker) if(!beaker.reagents.remove_reagent("virusfood",5)) foodsupply += 10 - if(!beaker.reagents.remove_reagent("toxin",1)) - toxins += 1 + nanomanager.update_uis(src) - src.updateUsrDialog() \ No newline at end of file + if (locate(/datum/reagent/toxin) in beaker.reagents.reagent_list) + for(var/datum/reagent/toxin/T in beaker.reagents.reagent_list) + toxins += max(T.toxpwr,1) + beaker.reagents.remove_reagent(T.id,1) + nanomanager.update_uis(src) + +/obj/machinery/disease2/incubator/Topic(href, href_list) + if (..()) return 0 + + var/mob/user = usr + var/datum/nanoui/ui = nanomanager.get_open_ui(user, src, "main") + + src.add_fingerprint(user) + + if (href_list["close"]) + user.unset_machine() + ui.close() + return 0 + + if (href_list["ejectchem"]) + if(beaker) + beaker.loc = src.loc + beaker = null + return 1 + + if (href_list["power"]) + if (dish) + on = !on + icon_state = on ? "incubator_on" : "incubator" + return 1 + + if (href_list["ejectdish"]) + if(dish) + dish.loc = src.loc + dish = null + return 1 + + if (href_list["rad"]) + radiation += 10 + return 1 + + if (href_list["flush"]) + radiation = 0 + toxins = 0 + foodsupply = 0 + return 1 + + if(href_list["virus"]) + if (!dish) + return 1 + + var/datum/reagent/blood/B = locate(/datum/reagent/blood) in beaker.reagents.reagent_list + if (!B) + return 1 + + if (!B.data["virus2"]) + B.data["virus2"] = list() + + var/list/virus = list("[dish.virus2.uniqueID]" = dish.virus2.getcopy()) + B.data["virus2"] += virus + + ping("\The [src] pings, \"Injection complete.\"") + return 1 + + return 0 diff --git a/code/modules/virus2/isolator.dm b/code/modules/virus2/isolator.dm index 53b47b95e1..e3a68c9949 100644 --- a/code/modules/virus2/isolator.dm +++ b/code/modules/virus2/isolator.dm @@ -1,97 +1,233 @@ +// UI menu navigation +#define HOME "home" +#define LIST "list" +#define ENTRY "entry" + /obj/machinery/disease2/isolator/ name = "Pathogenic Isolator" density = 1 anchored = 1 icon = 'icons/obj/virology.dmi' icon_state = "isolator" - var/datum/disease2/disease/virus2 = null var/isolating = 0 - var/beaker = null + var/state = HOME + var/datum/disease2/disease/virus2 = null + var/datum/data/record/entry = null + var/obj/item/weapon/reagent_containers/syringe/sample = null -/obj/machinery/disease2/isolator/attackby(var/W as obj, var/mob/user) - if(!istype(W,/obj/item/weapon/reagent_containers/syringe)) - return - - var/obj/item/weapon/reagent_containers/syringe/B = W - - if(src.beaker) - user << "A syringe is already loaded into the machine." - return - - src.beaker = B - user.drop_item() - B.loc = src - if(istype(B,/obj/item/weapon/reagent_containers/syringe)) - user << "You add the syringe to the machine!" - src.updateUsrDialog() - icon_state = "isolator_in" - -/obj/machinery/disease2/isolator/Topic(href, href_list) - if(..()) return - - usr.machine = src - if(!beaker) return - var/datum/reagents/R = beaker:reagents - - if (href_list["isolate"]) - var/datum/reagent/blood/Blood - for(var/datum/reagent/blood/B in R.reagent_list) - if(B) - Blood = B - break - var/list/virus = virus_copylist(Blood.data["virus2"]) - var/choice = text2num(href_list["isolate"]); - for (var/datum/disease2/disease/V in virus) - if (V.uniqueID == choice) - virus2 = virus - isolating = 40 - icon_state = "isolator_processing" - src.updateUsrDialog() - return - - else if (href_list["main"]) - attack_hand(usr) - return - else if (href_list["eject"]) - beaker:loc = src.loc - beaker = null +/obj/machinery/disease2/isolator/update_icon() + if (stat & (BROKEN|NOPOWER)) icon_state = "isolator" - src.updateUsrDialog() return + if (isolating) + icon_state = "isolator_processing" + else if (sample) + icon_state = "isolator_in" + else + icon_state = "isolator" + +/obj/machinery/disease2/isolator/attackby(var/obj/O as obj, var/mob/user) + if(!istype(O,/obj/item/weapon/reagent_containers/syringe)) return + var/obj/item/weapon/reagent_containers/syringe/S = O + + if(sample) + user << "\The [src] is already loaded." + return + + sample = S + user.drop_item() + S.loc = src + + user.visible_message("[user] adds \a [O] to \the [src]!", "You add \a [O] to \the [src]!") + nanomanager.update_uis(src) + update_icon() + + src.attack_hand(user) + /obj/machinery/disease2/isolator/attack_hand(mob/user as mob) - if(stat & BROKEN) - return - user.machine = src - var/dat = "" - if(!beaker) - dat = "Please insert sample into the isolator.
    " - dat += "Close" - else if(isolating) - dat = "Isolating" - else - var/datum/reagents/R = beaker:reagents - dat += "Eject

    " - if(!R.total_volume) - dat += "[beaker] is empty." - else - dat += "Contained reagents:
    " - for(var/datum/reagent/blood/G in R.reagent_list) - if(G.data["virus2"]) - var/list/virus = G.data["virus2"] - for (var/datum/disease2/disease/V in virus) - dat += "
    [G.name]: Isolate pathogen #[V.uniqueID]" - else - dat += " No pathogen" - user << browse("Pathogenic IsolatorIsolator menu:

    [dat]", "window=isolator;size=575x400") - onclose(user, "isolator") - return + if(stat & (NOPOWER|BROKEN)) return + ui_interact(user) + +/obj/machinery/disease2/isolator/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) + user.set_machine(src) + + var/data[0] + data["syringe_inserted"] = !!sample + data["isolating"] = isolating + data["pathogen_pool"] = null + data["state"] = state + data["entry"] = entry + data["can_print"] = (state != HOME || sample) && !isolating + + switch (state) + if (HOME) + if (sample) + var/list/pathogen_pool[0] + for(var/datum/reagent/blood/B in sample.reagents.reagent_list) + var/list/virus = B.data["virus2"] + for (var/ID in virus) + var/datum/disease2/disease/V = virus[ID] + var/datum/data/record/R = null + if (ID in virusDB) + R = virusDB[ID] + + var/mob/living/carbon/human/D = B.data["donor"] + pathogen_pool.Add(list(list(\ + "name" = "[D.get_species()] [B.name]", \ + "dna" = B.data["blood_DNA"], \ + "unique_id" = V.uniqueID, \ + "reference" = "\ref[V]", \ + "is_in_database" = !!R, \ + "record" = "\ref[R]"))) + + if (pathogen_pool.len > 0) + data["pathogen_pool"] = pathogen_pool + + if (LIST) + var/list/db[0] + for (var/ID in virusDB) + var/datum/data/record/r = virusDB[ID] + db.Add(list(list("name" = r.fields["name"], "record" = "\ref[r]"))) + + if (db.len > 0) + data["database"] = db + + if (ENTRY) + if (entry) + var/desc = entry.fields["description"] + data["entry"] = list(\ + "name" = entry.fields["name"], \ + "description" = replacetext(desc, "\n", "")) + + ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) + if (!ui) + ui = new(user, src, ui_key, "pathogenic_isolator.tmpl", src.name, 400, 500) + ui.set_initial_data(data) + ui.open() /obj/machinery/disease2/isolator/process() - if(isolating > 0) + if (isolating > 0) isolating -= 1 - if(isolating == 0) - var/obj/item/weapon/virusdish/d = new /obj/item/weapon/virusdish(src.loc) - d.virus2 = virus2.getcopy() - virus2 = null - icon_state = "isolator_in" + if (isolating == 0) + if (virus2) + var/obj/item/weapon/virusdish/d = new /obj/item/weapon/virusdish(src.loc) + d.virus2 = virus2.getcopy() + virus2 = null + ping("\The [src] pings, \"Viral strain isolated.\"") + + nanomanager.update_uis(src) + update_icon() + +/obj/machinery/disease2/isolator/Topic(href, href_list) + if (..()) return 0 + + var/mob/user = usr + var/datum/nanoui/ui = nanomanager.get_open_ui(user, src, "main") + + src.add_fingerprint(user) + + if (href_list["close"]) + user.unset_machine() + ui.close() + return 0 + + if (href_list[HOME]) + state = HOME + return 1 + + if (href_list[LIST]) + state = LIST + return 1 + + if (href_list[ENTRY]) + if (istype(locate(href_list["view"]), /datum/data/record)) + entry = locate(href_list["view"]) + + state = ENTRY + return 1 + + if (href_list["print"]) + print(user) + return 1 + + if(!sample) return 1 + + if (href_list["isolate"]) + var/datum/disease2/disease/V = locate(href_list["isolate"]) + if (V) + virus2 = V + isolating = 20 + update_icon() + return 1 + + if (href_list["eject"]) + sample.loc = src.loc + sample = null + update_icon() + return 1 + +/obj/machinery/disease2/isolator/proc/print(var/mob/user) + var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(loc) + + switch (state) + if (HOME) + if (!sample) return + P.name = "paper - Patient Diagnostic Report" + P.info = {" + [virology_letterhead("Patient Diagnostic Report")] +
    CONFIDENTIAL MEDICAL REPORT

    + Sample: [sample.name]
    +"} + + if (user) + P.info += "Generated By: [user.name]
    " + + P.info += "
    " + + for(var/datum/reagent/blood/B in sample.reagents.reagent_list) + var/mob/living/carbon/human/D = B.data["donor"] + P.info += "[D.get_species()] [B.name]:
    [B.data["blood_DNA"]]
    " + + var/list/virus = B.data["virus2"] + P.info += "Pathogens:
    " + if (virus.len > 0) + for (var/ID in virus) + var/datum/disease2/disease/V = virus[ID] + P.info += "[V.name()]
    " + else + P.info += "None
    " + + P.info += {" +
    + Additional Notes:  +"} + + if (LIST) + P.name = "paper - Virus List" + P.info = {" + [virology_letterhead("Virus List")] +"} + + var/i = 0 + for (var/ID in virusDB) + i++ + var/datum/data/record/r = virusDB[ID] + P.info += "[i]. " + r.fields["name"] + P.info += "
    " + + P.info += {" +
    + Additional Notes:  +"} + + if (ENTRY) + P.name = "paper - Viral Profile" + P.info = {" + [virology_letterhead("Viral Profile")] + [entry.fields["description"]] +
    + Additional Notes:  +"} + + state("The nearby computer prints out a report.") diff --git a/code/modules/virus2/items_devices.dm b/code/modules/virus2/items_devices.dm index 98e0dab2a1..f8c8596141 100644 --- a/code/modules/virus2/items_devices.dm +++ b/code/modules/virus2/items_devices.dm @@ -1,33 +1,42 @@ -/obj/machinery/proc/state(var/msg) - for(var/mob/O in hearers(src, null)) - O.show_message("\icon[src] [msg]", 2) - ///////////////ANTIBODY SCANNER/////////////// /obj/item/device/antibody_scanner - name = "Antibody Scanner" - desc = "Used to scan living beings for antibodies in their blood." + name = "\improper Antibody Scanner" + desc = "Scans living beings for antibodies in their blood." icon_state = "health" w_class = 2.0 item_state = "electronic" flags = FPRINT | TABLEPASS | CONDUCT +/obj/item/device/antibody_scanner/attack(mob/M as mob, mob/user as mob) + if(!istype(M,/mob/living/carbon/)) + report("Scan aborted: Incompatible target.", user) + return -/obj/item/device/antibody_scanner/attack(mob/living/carbon/M as mob, mob/user as mob) - if(!istype(M)) - user << "Incompatible object, scan aborted." - return var/mob/living/carbon/C = M + if (istype(C,/mob/living/carbon/human/)) + var/mob/living/carbon/human/H = C + if(H.species && H.species.flags & NO_BLOOD) + report("Scan aborted: The target does not have blood.", user) + return + if(!C.antibodies) - user << "Unable to detect antibodies." + report("Scan Complete: No antibodies detected.", user) return - var/code = antigens2string(M.antibodies) - user << "[src] The antibody scanner displays a cryptic set of data: [code]" + + if (CLUMSY in user.mutations && prob(50)) + // I was tempted to be really evil and rot13 the output. + report("Antibodies detected: [reverse_text(antigens2string(C.antibodies))]", user) + else + report("Antibodies detected: [antigens2string(C.antibodies)]", user) + +/obj/item/device/antibody_scanner/proc/report(var/text, mob/user as mob) + user << "\blue \icon[src] \The [src] beeps, \"[text]\"" ///////////////VIRUS DISH/////////////// /obj/item/weapon/virusdish - name = "Virus containment/growth dish" + name = "virus containment/growth dish" icon = 'icons/obj/items.dmi' icon_state = "implantcase-b" var/datum/disease2/disease/virus2 = null @@ -35,10 +44,8 @@ var/info = 0 var/analysed = 0 - reagents = list() - /obj/item/weapon/virusdish/random - name = "Virus Sample" + name = "virus sample" /obj/item/weapon/virusdish/random/New() ..() @@ -51,7 +58,7 @@ return ..() if(prob(50)) - user << "The dish shatters" + user << "\The [src] shatters!" if(virus2.infectionchance > 0) for(var/mob/living/carbon/target in view(1, get_turf(src))) if(airborne_can_reach(get_turf(src), get_turf(target))) @@ -60,22 +67,38 @@ del src /obj/item/weapon/virusdish/examine() - usr << "This is a virus containment dish" + usr << "This is a virus containment dish." if(src.info) - usr << "It has the following information about its contents" + usr << "It has the following information about its contents:" usr << src.info +/obj/item/weapon/ruinedvirusdish + name = "ruined virus sample" + icon = 'icons/obj/items.dmi' + icon_state = "implantcase-b" + desc = "The bacteria in the dish are completely dead." + +/obj/item/weapon/ruinedvirusdish/attackby(var/obj/item/weapon/W as obj,var/mob/living/carbon/user as mob) + if(istype(W,/obj/item/weapon/hand_labeler) || istype(W,/obj/item/weapon/reagent_containers/syringe)) + return ..() + + if(prob(50)) + user << "\The [src] shatters!" + del src + ///////////////GNA DISK/////////////// /obj/item/weapon/diseasedisk - name = "Blank GNA disk" + name = "blank GNA disk" icon = 'icons/obj/cloning.dmi' icon_state = "datadisk0" var/datum/disease2/effectholder/effect = null + var/list/species = null var/stage = 1 + var/analysed = 1 /obj/item/weapon/diseasedisk/premade/New() - name = "Blank GNA disk (stage: [5-stage])" + name = "blank GNA disk (stage: [stage])" effect = new /datum/disease2/effectholder effect.effect = new /datum/disease2/effect/invisible - effect.stage = stage \ No newline at end of file + effect.stage = stage diff --git a/code/stylesheet.dm b/code/stylesheet.dm index f6bdc0057e..cb03607e8f 100644 --- a/code/stylesheet.dm +++ b/code/stylesheet.dm @@ -30,6 +30,7 @@ em {font-style: normal; font-weight: bold;} .comradio {color: #193A7A;} .syndradio {color: #6D3F40;} .centradio {color: #5C5C8A;} +.airadio {color: #FF00FF;} .secradio {color: #A30000;} .engradio {color: #A66300;} diff --git a/code/unused/disease2/analyser.dm b/code/unused/disease2/analyser.dm deleted file mode 100644 index abc123369a..0000000000 --- a/code/unused/disease2/analyser.dm +++ /dev/null @@ -1,75 +0,0 @@ -/obj/machinery/disease2/diseaseanalyser - name = "Disease Analyser" - icon = 'icons/obj/virology.dmi' - icon_state = "analyser" - anchored = 1 - density = 1 - - var/scanning = 0 - var/pause = 0 - - var/obj/item/weapon/virusdish/dish = null - -/obj/machinery/disease2/diseaseanalyser/attackby(var/obj/I as obj, var/mob/user as mob) - if(istype(I,/obj/item/weapon/virusdish)) - var/mob/living/carbon/c = user - if(!dish) - - dish = I - c.drop_item() - I.loc = src - for(var/mob/M in viewers(src)) - if(M == user) continue - M.show_message("\blue [user.name] inserts the [dish.name] in the [src.name]", 3) - - - else - user << "There is already a dish inserted" - - //else - return - - -/obj/machinery/disease2/diseaseanalyser/process() - if(stat & (NOPOWER|BROKEN)) - return - use_power(500) - src.updateDialog() - - - if(scanning) - scanning -= 1 - if(scanning == 0) - var/r = "GNAv2 based virus lifeform" - r += "
    Infection rate : [dish.virus2.infectionchance * 10]" - r += "
    Spread form : [dish.virus2.spreadtype]" - r += "
    Progress Speed : [dish.virus2.stageprob * 10]" - for(var/datum/disease2/effectholder/E in dish.virus2.effects) - r += "
    Effect:[E.effect.name]. Strength : [E.multiplier * 8]. Verosity : [E.chance * 15]. Type : [5-E.stage]." - var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(src.loc) - P.info = r - dish.info = r - dish.analysed = 1 - dish.loc = src.loc - dish = null - icon_state = "analyser" - - for(var/mob/O in hearers(src, null)) - O.show_message("\icon[src] \blue The [src.name] prints a sheet of paper", 3) - else if(dish && !scanning && !pause) - if(dish.virus2 && dish.growth > 50) - dish.growth -= 10 - scanning = 25 - icon_state = "analyser_processing" - else - pause = 1 - spawn(25) - dish.loc = src.loc - dish = null - for(var/mob/M in viewers(src)) - M.show_message("\icon[src] \blue The [src.name] buzzes", 2) - pause = 0 - - - - return diff --git a/code/unused/disease2/base.dm b/code/unused/disease2/base.dm deleted file mode 100644 index eab69ba69c..0000000000 --- a/code/unused/disease2/base.dm +++ /dev/null @@ -1,331 +0,0 @@ -//To simplify, all diseases have 4 stages, with effects starting at stage 2 -//Stage 1 = Rest,Minor disease -//Stage 2 = Minimal effect -//Stage 3 = Medium effect -//Stage 4 = Death/Really Really really bad effect - - -/proc/infect_virus2(var/mob/living/carbon/M,var/datum/disease2/disease/disease,var/forced = 0) - if(prob(disease.infectionchance)) - if(M.virus2) - return - else - var/score = 0 - if(!forced) - if(istype(M, /mob/living/carbon/human)) - if(M:gloves) - score += 5 - if(istype(M:wear_suit, /obj/item/clothing/suit/space)) score += 10 - if(istype(M:wear_suit, /obj/item/clothing/suit/bio_suit)) score += 10 - if(istype(M:head, /obj/item/clothing/head/helmet/space)) score += 5 - if(istype(M:head, /obj/item/clothing/head/bio_hood)) score += 5 - if(M.wear_mask) - score += 5 - if((istype(M:wear_mask, /obj/item/clothing/mask) || istype(M:wear_mask, /obj/item/clothing/mask/surgical)) && !M.internal) - score += 5 - if(M.internal) - score += 5 - - if(score > 15) - return - // else if(score == 20 && prob(95)) - // return - else if(score == 15 && prob(75)) - return - else if(score == 10 && prob(55)) - return - else if(score == 5 && prob(35)) - return - - M.virus2 = disease.getcopy() - M.virus2.minormutate() - - for(var/datum/disease2/resistance/res in M.resistances) - if(res.resistsdisease(M.virus2)) - M.virus2 = null - - - -/datum/disease2/resistance - var/list/datum/disease2/effect/resistances = list() - - proc/resistsdisease(var/datum/disease2/disease/virus2) - var/list/res2 = list() - for(var/datum/disease2/effect/e in resistances) - res2 += e.type - for(var/datum/disease2/effectholder/holder in virus2) - if(!(holder.effect.type in res2)) - return 0 - else - res2 -= holder.effect.type - if(res2.len > 0) - return 0 - else - return 1 - - New(var/datum/disease2/disease/virus2) - for(var/datum/disease2/effectholder/h in virus2.effects) - resistances += h.effect.type - - -/proc/infect_mob_random(var/mob/living/carbon/M) - if(!M.virus2) - M.virus2 = new /datum/disease2/disease - M.virus2.makerandom() - -/datum/disease2/disease - var/infectionchance = 10 - var/spreadtype = "Blood" // Can also be "Airborne" - var/stage = 1 - var/stageprob = 2 - var/dead = 0 - var/clicks = 0 - - var/uniqueID = 0 - var/list/datum/disease2/effectholder/effects = list() - proc/makerandom() - var/datum/disease2/effectholder/holder = new /datum/disease2/effectholder - holder.stage = 1 - holder.getrandomeffect() - effects += holder - holder = new /datum/disease2/effectholder - holder.stage = 2 - holder.getrandomeffect() - effects += holder - holder = new /datum/disease2/effectholder - holder.stage = 3 - holder.getrandomeffect() - effects += holder - holder = new /datum/disease2/effectholder - holder.stage = 4 - holder.getrandomeffect() - effects += holder - uniqueID = rand(0,10000) - infectionchance = rand(1,10) - spreadtype = "Airborne" - proc/minormutate() - var/datum/disease2/effectholder/holder = pick(effects) - holder.minormutate() - infectionchance = min(10,infectionchance + rand(0,1)) - proc/issame(var/datum/disease2/disease/disease) - var/list/types = list() - var/list/types2 = list() - for(var/datum/disease2/effectholder/d in effects) - types += d.effect.type - var/equal = 1 - - for(var/datum/disease2/effectholder/d in disease.effects) - types2 += d.effect.type - - for(var/type in types) - if(!(type in types2)) - equal = 0 - return equal - - proc/activate(var/mob/living/carbon/mob) - if(dead) - mob.virus2 = null - return - if(mob.stat == 2) - return - if(mob.radiation > 50) - if(prob(1)) - majormutate() - if(mob.reagents.has_reagent("spaceacillin")) - return - if(prob(stageprob) && prob(25 + (clicks/100)) && stage != 4) - stage++ - clicks = 0 - for(var/datum/disease2/effectholder/e in effects) - e.runeffect(mob,stage) - - proc/cure_added(var/datum/disease2/resistance/res) - if(res.resistsdisease(src)) - dead = 1 - - proc/majormutate() - var/datum/disease2/effectholder/holder = pick(effects) - holder.majormutate() - - - proc/getcopy() -// world << "getting copy" - var/datum/disease2/disease/disease = new /datum/disease2/disease - disease.infectionchance = infectionchance - disease.spreadtype = spreadtype - disease.stageprob = stageprob - for(var/datum/disease2/effectholder/holder in effects) - // world << "adding effects" - var/datum/disease2/effectholder/newholder = new /datum/disease2/effectholder - newholder.effect = new holder.effect.type - newholder.chance = holder.chance - newholder.cure = holder.cure - newholder.multiplier = holder.multiplier - newholder.happensonce = holder.happensonce - newholder.stage = holder.stage - disease.effects += newholder - // world << "[newholder.effect.name]" - // world << "[disease]" - return disease - -/datum/disease2/effect - var/name = "Blanking effect" - var/stage = 4 - var/maxm = 1 - proc/activate(var/mob/living/carbon/mob,var/multiplier) - -/datum/disease2/effect/gibbingtons - name = "Gibbingtons Syndrome" - stage = 4 - activate(var/mob/living/carbon/mob,var/multiplier) - mob.gib() - -/datum/disease2/effect/radian - name = "Radian's syndrome" - stage = 4 - maxm = 3 - activate(var/mob/living/carbon/mob,var/multiplier) - mob.radiation += (2*multiplier) - -/datum/disease2/effect/toxins - name = "Hyperacid Syndrome" - stage = 3 - maxm = 3 - activate(var/mob/living/carbon/mob,var/multiplier) - mob.adjustToxLoss(2*multiplier) - -/datum/disease2/effect/scream - name = "Random screaming syndrome" - stage = 2 - activate(var/mob/living/carbon/mob,var/multiplier) - mob.say("*scream") - -/datum/disease2/effect/drowsness - name = "Automated sleeping syndrome" - stage = 2 - activate(var/mob/living/carbon/mob,var/multiplier) - mob.drowsyness += 10 - -/datum/disease2/effect/shakey - name = "World Shaking syndrome" - stage = 3 - maxm = 3 - activate(var/mob/living/carbon/mob,var/multiplier) - shake_camera(mob,5*multiplier) - -/datum/disease2/effect/deaf - name = "Hard of hearing syndrome" - stage = 4 - activate(var/mob/living/carbon/mob,var/multiplier) - mob.ear_deaf += 20 - -/datum/disease2/effect/invisible - name = "Waiting Syndrome" - stage = 1 - activate(var/mob/living/carbon/mob,var/multiplier) - return -/* -/datum/disease2/effect/telepathic - name = "Telepathy Syndrome" - stage = 3 - activate(var/mob/living/carbon/mob,var/multiplier) - mob.mutations |= 512 -*/ -/datum/disease2/effect/noface - name = "Identity Loss syndrome" - stage = 4 - activate(var/mob/living/carbon/mob,var/multiplier) - mob.real_name = "Unknown" - -/datum/disease2/effect/monkey - name = "Monkism syndrome" - stage = 4 - activate(var/mob/living/carbon/mob,var/multiplier) - if(istype(mob,/mob/living/carbon/human)) - var/mob/living/carbon/human/h = mob - h.monkeyize() - -/datum/disease2/effect/sneeze - name = "Coldingtons Effect" - stage = 1 - activate(var/mob/living/carbon/mob,var/multiplier) - mob.say("*sneeze") - -/datum/disease2/effect/gunck - name = "Flemmingtons" - stage = 1 - activate(var/mob/living/carbon/mob,var/multiplier) - mob << "\red Mucous runs down the back of your throat." - -/datum/disease2/effect/killertoxins - name = "Toxification syndrome" - stage = 4 - activate(var/mob/living/carbon/mob,var/multiplier) - mob.adjustToxLoss(15) -/* -/datum/disease2/effect/hallucinations - name = "Hallucinational Syndrome" - stage = 3 - activate(var/mob/living/carbon/mob,var/multiplier) - mob.hallucination += 25 -*/ -/datum/disease2/effect/sleepy - name = "Resting syndrome" - stage = 2 - activate(var/mob/living/carbon/mob,var/multiplier) - mob.say("*collapse") - -/datum/disease2/effect/mind - name = "Lazy mind syndrome" - stage = 3 - activate(var/mob/living/carbon/mob,var/multiplier) - mob.setBrainLoss(50) - -/datum/disease2/effect/suicide - name = "Suicidal syndrome" - stage = 4 - activate(var/mob/living/carbon/mob,var/multiplier) - mob.suiciding = 1 - //instead of killing them instantly, just put them at -175 health and let 'em gasp for a while - viewers(mob) << "\red [mob.name] is attempting to bite off \his tongue. It looks like \he's trying to commit suicide." - mob.oxyloss = max(175 - mob.getToxLoss() - mob.getFireLoss() - mob.getBruteLoss(), mob.getOxyLoss()) - mob.updatehealth() - spawn(200) //in case they get revived by cryo chamber or something stupid like that, let them suicide again in 20 seconds - mob.suiciding = 0 - -/datum/disease2/effectholder - var/name = "Holder" - var/datum/disease2/effect/effect - var/chance = 0 //Chance in percentage each tick - var/cure = "" //Type of cure it requires - var/happensonce = 0 - var/multiplier = 1 //The chance the effects are WORSE - var/stage = 0 - - proc/runeffect(var/mob/living/carbon/human/mob,var/stage) - if(happensonce > -1 && effect.stage <= stage && prob(chance)) - effect.activate(mob) - if(happensonce == 1) - happensonce = -1 - - proc/getrandomeffect() - var/list/datum/disease2/effect/list = list() - for(var/e in (typesof(/datum/disease2/effect) - /datum/disease2/effect)) - // world << "Making [e]" - var/datum/disease2/effect/f = new e - if(f.stage == src.stage) - list += f - effect = pick(list) - chance = rand(1,6) - - proc/minormutate() - switch(pick(1,2,3,4,5)) - if(1) - chance = rand(0,100) - if(2) - multiplier = rand(1,effect.maxm) - proc/majormutate() - getrandomeffect() - -/proc/dprob(var/p) - return(prob(sqrt(p)) && prob(sqrt(p))) diff --git a/code/unused/disease2/biohazard destroyer.dm b/code/unused/disease2/biohazard destroyer.dm deleted file mode 100644 index 1f39043326..0000000000 --- a/code/unused/disease2/biohazard destroyer.dm +++ /dev/null @@ -1,20 +0,0 @@ -/obj/machinery/disease2/biodestroyer - name = "Biohazard destroyer" - icon = 'icons/obj/pipes/disposal.dmi' - icon_state = "disposal" - var/list/accepts = list(/obj/item/clothing,/obj/item/weapon/virusdish/,/obj/item/weapon/cureimplanter,/obj/item/weapon/diseasedisk) - density = 1 - anchored = 1 - -/obj/machinery/disease2/biodestroyer/attackby(var/obj/I as obj, var/mob/user as mob) - for(var/path in accepts) - if(I.type in typesof(path)) - user.drop_item() - del(I) - overlays += image('icons/obj/pipes/disposal.dmi', "dispover-handle") - return - user.drop_item() - I.loc = src.loc - - for(var/mob/O in hearers(src, null)) - O.show_message("\icon[src] \blue The [src.name] beeps", 2) diff --git a/code/unused/disease2/diseasesplicer.dm b/code/unused/disease2/diseasesplicer.dm deleted file mode 100644 index 958a14b1f1..0000000000 --- a/code/unused/disease2/diseasesplicer.dm +++ /dev/null @@ -1,202 +0,0 @@ -/obj/machinery/computer/diseasesplicer - name = "Disease Splicer" - icon = 'icons/obj/computer.dmi' - icon_state = "crew" - //brightnessred = 0 -// brightnessgreen = 2 -// brightnessblue = 2 -// broken_icon - - var/datum/disease2/effectholder/memorybank = null - var/analysed = 0 - var/obj/item/weapon/virusdish/dish = null - var/burning = 0 - - var/splicing = 0 - var/scanning = 0 - -/obj/machinery/computer/diseasesplicer/attackby(var/obj/I as obj, var/mob/user as mob) -/* - if(istype(I, /obj/item/weapon/screwdriver)) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - if(do_after(user, 20)) - if (src.stat & BROKEN) - user << "\blue The broken glass falls out." - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) - new /obj/item/weapon/shard( src.loc ) - var/obj/item/weapon/circuitboard/diseasesplicer/M = new /obj/item/weapon/circuitboard/diseasesplicer( A ) - for (var/obj/C in src) - C.loc = src.loc - A.circuit = M - A.state = 3 - A.icon_state = "3" - A.anchored = 1 - del(src) - else - user << "\blue You disconnect the monitor." - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) - var/obj/item/weapon/circuitboard/diseasesplicer/M = new /obj/item/weapon/circuitboard/diseasesplicer( A ) - for (var/obj/C in src) - C.loc = src.loc - A.circuit = M - A.state = 4 - A.icon_state = "4" - A.anchored = 1 - del(src)*/ - if(istype(I,/obj/item/weapon/virusdish)) - var/mob/living/carbon/c = user - if(!dish) - - dish = I - c.drop_item() - I.loc = src - if(istype(I,/obj/item/weapon/diseasedisk)) - user << "You upload the contents of the disk into the buffer" - memorybank = I:effect - - - //else - src.attack_hand(user) - return - -/obj/machinery/computer/diseasesplicer/attack_ai(var/mob/user as mob) - return src.attack_hand(user) - -/obj/machinery/computer/diseasesplicer/attack_paw(var/mob/user as mob) - - return src.attack_hand(user) - return - -/obj/machinery/computer/diseasesplicer/attack_hand(var/mob/user as mob) - if(..()) - return - user.machine = src - var/dat - if(splicing) - dat = "Splicing in progress" - else if(scanning) - dat = "Splicing in progress" - else if(burning) - dat = "Data disk burning in progress" - else - if(dish) - dat = "Virus dish inserted" - - dat += "
    Current DNA strand : " - if(memorybank) - dat += "" - if(analysed) - dat += "[memorybank.effect.name] ([5-memorybank.effect.stage])" - else - dat += "Unknown DNA strand ([5-memorybank.effect.stage])" - dat += "" - - dat += "
    Burn DNA Sequence to data storage disk" - else - dat += "Empty" - - dat += "

    " - - if(dish) - if(dish.virus2) - if(dish.growth >= 50) - for(var/datum/disease2/effectholder/e in dish.virus2.effects) - dat += "
    DNA strand" - if(dish.analysed) - dat += ": [e.effect.name]" - dat += " (5-[e.effect.stage])" - else - dat += "
    Insufficent cells to attempt gene splicing" - else - dat += "
    No virus found in dish" - - dat += "

    Eject disk" - else - dat += "
    Please insert dish" - - user << browse(dat, "window=computer;size=400x500") - onclose(user, "computer") - return - -/obj/machinery/computer/diseasesplicer/process() - if(stat & (NOPOWER|BROKEN)) - return - use_power(500) - src.updateDialog() - - if(scanning) - scanning -= 1 - if(!scanning) - state("The [src.name] beeps") - icon_state = "crew" - if(splicing) - splicing -= 1 - if(!splicing) - state("The [src.name] pings") - icon_state = "crew" - if(burning) - burning -= 1 - if(!burning) - var/obj/item/weapon/diseasedisk/d = new /obj/item/weapon/diseasedisk(src.loc) - if(analysed) - d.name = "[memorybank.effect.name] GNA disk (Stage: [5-memorybank.effect.stage])" - else - d.name = "Unknown GNA disk (Stage: [5-memorybank.effect.stage])" - d.effect = memorybank - state("The [src.name] zings") - icon_state = "crew" - - - return - -/obj/machinery/computer/diseasesplicer/Topic(href, href_list) - if(..()) - return - if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon))) - usr.machine = src - - if (href_list["grab"]) - memorybank = locate(href_list["grab"]) - analysed = dish.analysed - del(dish) - dish = null - scanning = 30 - icon_state = "crew" - - else if(href_list["eject"]) - dish.loc = src.loc - dish = null - - else if(href_list["splice"]) - for(var/datum/disease2/effectholder/e in dish.virus2.effects) - if(e.stage == memorybank.stage) - e.effect = memorybank.effect - splicing = 50 - dish.virus2.spreadtype = "Blood" - icon_state = "crew" - - else if(href_list["disk"]) - burning = 20 - icon_state = "crew" - - src.add_fingerprint(usr) - src.updateUsrDialog() - return - -/obj/machinery/computer/diseasesplicer/proc/state(var/msg) - for(var/mob/O in hearers(src, null)) - O.show_message("\icon[src] \blue [msg]", 2) - - -/obj/item/weapon/diseasedisk - name = "Blank GNA disk" - icon = 'icons/obj/cloning.dmi' - icon_state = "datadisk2" - var/datum/disease2/effectholder/effect = null - var/stage = 1 - -/obj/item/weapon/diseasedisk/premade/New() - name = "Blank GNA disk (stage: [5-stage])" - effect = new /datum/disease2/effectholder - effect.effect = new /datum/disease2/effect/invisible - effect.stage = stage diff --git a/code/unused/disease2/dishincubator.dm b/code/unused/disease2/dishincubator.dm deleted file mode 100644 index 921ed21574..0000000000 --- a/code/unused/disease2/dishincubator.dm +++ /dev/null @@ -1,176 +0,0 @@ -/obj/machinery/disease2/incubator/ - name = "Pathogenic incubator" - density = 1 - anchored = 1 - icon = 'icons/obj/virology.dmi' - icon_state = "incubator" - var/obj/item/weapon/virusdish/dish - var/obj/item/weapon/reagent_containers/glass/beaker = null - var/radiation = 0 - - var/on = 0 - var/power = 0 - - var/foodsupply = 0 - var/toxins = 0 - - ex_act(severity) - switch(severity) - if(1.0) - del(src) - return - if(2.0) - if (prob(50)) - del(src) - return - - blob_act() - if (prob(25)) - del(src) - - meteorhit() - del(src) - return - - attackby(var/obj/B as obj, var/mob/user as mob) - if(istype(B, /obj/item/weapon/reagent_containers/glass) || istype(B,/obj/item/weapon/reagent_containers/syringe)) - - if(src.beaker) - if(istype(beaker,/obj/item/weapon/reagent_containers/syringe)) - user << "A syringe is already loaded into the machine." - else - user << "A beaker is already loaded into the machine." - return - - src.beaker = B - user.drop_item() - B.loc = src - if(istype(B,/obj/item/weapon/reagent_containers/syringe)) - user << "You add the syringe to the machine!" - src.updateUsrDialog() - else - user << "You add the beaker to the machine!" - src.updateUsrDialog() - else - if(istype(B,/obj/item/weapon/virusdish)) - if(src.dish) - user << "A dish is already loaded into the machine." - return - - src.dish = B - user.drop_item() - B.loc = src - if(istype(B,/obj/item/weapon/virusdish)) - user << "You add the dish to the machine!" - src.updateUsrDialog() - - Topic(href, href_list) - if(stat & BROKEN) return - if(usr.stat || usr.restrained()) return - if(!in_range(src, usr)) return - - usr.machine = src - if(!dish) return - - if (href_list["power"]) - on = !on - if(on) - icon_state = "incubator_on" - else - icon_state = "incubator" - if (href_list["ejectchem"]) - if(beaker) - beaker.loc = src.loc - beaker = null - if (href_list["ejectdish"]) - if(dish) - dish.loc = src.loc - dish = null - if (href_list["rad"]) - radiation += 10 - if (href_list["flush"]) - radiation = 0 - toxins = 0 - foodsupply = 0 - - - src.add_fingerprint(usr) - src.updateUsrDialog() - - attack_hand(mob/user as mob) - if(stat & BROKEN) - return - user.machine = src - var/dat = "" - if(!dish) - dat = "Please insert dish into the incubator.
    " - dat += "Close" - var/string = "Off" - if(on) - string = "On" - dat += "Power status : [string]" - dat += "
    " - dat += "Food supply : [foodsupply]" - dat += "
    " - dat += "Radiation Levels : [radiation] RADS : Radiate" - dat += "
    " - dat += "Toxins : [toxins]" - dat += "

    " - if(beaker) - dat += "Eject chemicals : Eject" - dat += "
    " - if(dish) - dat += "Eject Virus dish : Eject" - dat += "
    " - dat += "

    " - dat += "Flush system" - - - user << browse("Pathogenic incubatorincubator menu:

    [dat]", "window=incubator;size=575x400") - onclose(user, "incubator") - return - - - - - process() - - if(dish && on && dish.virus2) - use_power(50,EQUIP) - if(!powered(EQUIP)) - on = 0 - icon_state = "incubator" - if(foodsupply) - foodsupply -= 1 - dish.growth += 1 - if(dish.growth == 100) - state("The [src.name] pings") - if(radiation) - if(radiation > 50 & prob(5)) - dish.virus2.majormutate() - if(dish.info) - dish.info = "OUTDATED : [dish.info]" - dish.analysed = 0 - state("The [src.name] beeps") - - else if(prob(5)) - dish.virus2.minormutate() - radiation -= 1 - if(toxins && prob(5)) - dish.virus2.infectionchance -= 1 - if(toxins > 50) - dish.virus2 = null - else if(!dish) - on = 0 - icon_state = "incubator" - - - if(beaker) - if(!beaker.reagents.remove_reagent("virusfood",5)) - foodsupply += 20 - if(!beaker.reagents.remove_reagent("toxins",1)) - toxins += 1 - - proc/state(var/msg) - for(var/mob/O in hearers(src, null)) - O.show_message("\icon[src] \blue [msg]", 2) diff --git a/code/unused/disease2/isolator.dm b/code/unused/disease2/isolator.dm deleted file mode 100644 index a8b4f0e832..0000000000 --- a/code/unused/disease2/isolator.dm +++ /dev/null @@ -1,139 +0,0 @@ -/obj/machinery/disease2/isolator/ - name = "Pathogenic Isolator" - density = 1 - anchored = 1 - icon = 'icons/obj/virology.dmi' - icon_state = "isolator" - var/datum/disease2/disease/virus2 = null - var/isolating = 0 - var/beaker = null - - ex_act(severity) - switch(severity) - if(1.0) - del(src) - return - if(2.0) - if (prob(50)) - del(src) - return - - blob_act() - if (prob(25)) - del(src) - - meteorhit() - del(src) - return - - attackby(var/obj/item/weapon/reagent_containers/glass/B as obj, var/mob/user as mob) - if(!istype(B,/obj/item/weapon/reagent_containers/syringe)) - return - - if(src.beaker) - user << "A syringe is already loaded into the machine." - return - - src.beaker = B - user.drop_item() - B.loc = src - if(istype(B,/obj/item/weapon/reagent_containers/syringe)) - user << "You add the syringe to the machine!" - src.updateUsrDialog() - icon_state = "isolator_in" - - Topic(href, href_list) - if(stat & BROKEN) return - if(usr.stat || usr.restrained()) return - if(!in_range(src, usr)) return - - usr.machine = src - if(!beaker) return - var/datum/reagents/R = beaker:reagents - - if (href_list["isolate"]) - var/datum/reagent/blood/Blood - for(var/datum/reagent/blood/B in R.reagent_list) - if(B) - Blood = B - break - - if(Blood.data["virus2"]) - virus2 = Blood.data["virus2"] - isolating = 40 - icon_state = "isolator_processing" - src.updateUsrDialog() - return - - else if (href_list["main"]) - attack_hand(usr) - return - else if (href_list["eject"]) - beaker:loc = src.loc - beaker = null - icon_state = "isolator" - src.updateUsrDialog() - return - - attack_hand(mob/user as mob) - if(stat & BROKEN) - return - user.machine = src - var/dat = "" - if(!beaker) - dat = "Please insert sample into the isolator.
    " - dat += "Close" - else if(isolating) - dat = "Isolating" - else - var/datum/reagents/R = beaker:reagents - dat += "Eject

    " - if(!R.total_volume) - dat += "[beaker] is empty." - else - dat += "Contained reagents:
    " - for(var/datum/reagent/blood/G in R.reagent_list) - dat += " [G.name]: Isolate" - user << browse("Pathogenic IsolatorIsolator menu:

    [dat]", "window=isolator;size=575x400") - onclose(user, "isolator") - return - - - - - process() - if(isolating > 0) - isolating -= 1 - if(isolating == 0) - var/obj/item/weapon/virusdish/d = new /obj/item/weapon/virusdish(src.loc) - d.virus2 = virus2.getcopy() - virus2 = null - icon_state = "isolator_in" - - - - -/obj/item/weapon/virusdish - name = "Virus containment/growth dish" - icon = 'icons/obj/items.dmi' - icon_state = "implantcase-b" - var/datum/disease2/disease/virus2 = null - var/growth = 0 - var/info = 0 - var/analysed = 0 - -/obj/item/weapon/virusdish/attackby(var/obj/item/weapon/W as obj,var/mob/living/carbon/user as mob) - if(istype(W,/obj/item/weapon/hand_labeler)) - return - ..() - if(prob(50)) - user << "The dish shatters" - if(virus2.infectionchance > 0) - infect_virus2(user,virus2) - del src - -/obj/item/weapon/virusdish/examine() - usr << "This is a virus containment dish" - if(src.info) - usr << "It has the following information about its contents" - usr << src.info diff --git a/code/unused/gamemodes/monkey.dm b/code/unused/gamemodes/monkey.dm deleted file mode 100644 index 04b0689f6a..0000000000 --- a/code/unused/gamemodes/monkey.dm +++ /dev/null @@ -1,131 +0,0 @@ -#define MONKEY_MODE_RUNNING 0 -#define MONKEY_MODE_NO_RABID_LEFT 1 -#define MONKEY_MODE_SHUTTLE_CAPTURED 2 -#define MONKEY_MODE_SHUTTLE_WITH_HUMANS 3 - -#define MONKEY_MODE_MONKEYS 4 - -/datum/game_mode/monkey - name = "monkey" - config_tag = "monkey" - var/state = MONKEY_MODE_RUNNING - var/list/datum/mind/initial_monkeys = new - -/datum/game_mode/monkey/announce() - world << "The current game mode is - Monkey!" - world << "Some of your crew members have been infected by a mutageous virus!" - world << "Escape on the shuttle but the humans have precedence!" - -/datum/game_mode/monkey/can_start() - if (num_players()<2) - return 0 - for(var/mob/new_player/P in player_list) - if(P.client && P.ready && !jobban_isbanned(P, "Syndicate")) - return 1 - return 0 - -/datum/game_mode/monkey/pre_setup() - var/list/possible_monkeys = get_players_for_role(BE_MONKEY) - - // stop setup if no possible monkeys - if(!possible_monkeys.len) - return 0 - - var/num_monkeys = MONKEY_MODE_MONKEYS - var/num_players = num_players() - - if (num_players<=num_monkeys) - num_monkeys = round(num_players/2) - - for(var/j = 1 to num_monkeys) - if (!possible_monkeys.len) - break - var/datum/mind/monkey = pick(possible_monkeys) - possible_monkeys-=monkey - initial_monkeys += monkey - monkey.special_role = "monkey" - - if(!initial_monkeys.len) - return 0 - return 1 - -/datum/game_mode/monkey/post_setup() - spawn (50) - for (var/datum/mind/monkey in initial_monkeys) - var/mob/living/carbon/human/H = monkey.current - var/mob/living/carbon/monkey/new_monkey = H.monkeyize() - new_monkey << "Your goal is to capture the entire human civilization and your first target is Centcom. Hijack the shuttle without humans aboard!" - - for (var/mob/living/carbon/monkey/rabid_monkey in mob_list) - if (!(rabid_monkey.mind in initial_monkeys) && (!isturf(rabid_monkey.loc) || rabid_monkey.z!=1)) - continue - rabid_monkey.contract_disease(new /datum/disease/jungle_fever,1,0) - del(initial_monkeys) - ..() - -/datum/game_mode/monkey/proc/is_important_monkey(var/mob/living/carbon/monkey/M as mob) - var/turf/T = get_turf(M) - var/area/A = get_area(M) - if(M.stat!=2) - - for(var/datum/disease/D in M.viruses) - if(istype(D, /datum/disease/jungle_fever) && ( T.z==1 || is_type_in_list(A, centcom_areas))) - return 1 - - -/datum/game_mode/monkey/check_win() - if (state==MONKEY_MODE_SHUTTLE_CAPTURED || state==MONKEY_MODE_SHUTTLE_WITH_HUMANS) - return - var/infected_count = 0 - for (var/mob/living/carbon/monkey/rabid_monkey in mob_list) - if (is_important_monkey(rabid_monkey)) - infected_count++ - if (infected_count==0) - state = MONKEY_MODE_NO_RABID_LEFT - -/datum/game_mode/monkey/check_finished() - return (emergency_shuttle.location==2) || (state>0) - -/datum/game_mode/monkey/declare_completion() - var/monkeywin = 0 - if (state != MONKEY_MODE_NO_RABID_LEFT) - for(var/mob/living/carbon/monkey/monkey_player in mob_list) - if (is_important_monkey(monkey_player)) - var/area/A = get_area(monkey_player) - if ( is_type_in_list(A, centcom_areas)) - monkeywin = 1 - break - - if(monkeywin) - for(var/mob/living/carbon/human/human_player in mob_list) - if (human_player.stat != 2) - var/area/A = get_area(human_player) - if (istype(A, /area/shuttle/escape/centcom)) - monkeywin = 0 - break - - if (monkeywin) - feedback_set_details("round_end_result","win - monkey win") - world << "The monkeys have won! Humanity is doomed!" - for (var/mob/living/carbon/human/player in player_list) - spawn(rand(0,150)) - player.monkeyize() - sleep(200) - else - feedback_set_details("round_end_result","loss - crew win") - world << "The Research Staff has stopped the monkey invasion!" - ..() - return 1 - - -/datum/game_mode/proc/auto_declare_completion_monkey() - for(var/mob/living/carbon/monkey/monkey_player in mob_list) - for(var/datum/disease/D in monkey_player.viruses) - if (istype(D, /datum/disease/jungle_fever) && monkey_player.ckey) - world << "[monkey_player.ckey] was played infested [monkey_player]. [monkey_player.stat == 2 ? "(DEAD)" : ""]" - return 1 - -#undef MONKEY_MODE_RUNNING -#undef MONKEY_MODE_NO_RABID_LEFT -#undef MONKEY_MODE_SHUTTLE_CAPTURED -#undef MONKEY_MODE_SHUTTLE_WITH_HUMANS diff --git a/html/changelog.html b/html/changelog.html index 4cbb7242b3..1d5921782c 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -35,7 +35,7 @@ Header Section
    - Code: Abi79, Aryn, Cael_Aislinn, Ccomp5950 ,Chinsky, cib, CompactNinja, DopeGhoti, Erthilo, Hawk_v3, Head, Ispil, JoeyJo0, Lexusjjss, Melonstorm, Miniature, Mloc, NerdyBoy1104, SkyMarshal, Snapshot, Spectre, Strumpetplaya, Sunfall, Tastyfish, Uristqwerty
    + Code: Abi79, Aryn, Cael_Aislinn, Ccomp5950, Chinsky, cib, CompactNinja, DopeGhoti, Erthilo, Hawk_v3, Head, Ispil, JoeyJo0, Lexusjjss, Melonstorm, Miniature, Mloc, NerdyBoy1104, SkyMarshal, Snapshot, Spectre, Strumpetplaya, Sunfall, Tastyfish, Uristqwerty
    Sprites: Apple_Master, Arcalane, Chinsky, CompactNinja, Deus Dactyl, Erthilo, Flashkirby, JoeyJo0, Miniature, Searif, Xenone, faux
    Sounds: Aryn
    Thanks To: /tg/ station, Goonstation, Animus Station, Daedalus, and original Spacestation 13 devs. Skibiliano for the IRC bot. @@ -55,6 +55,15 @@ should be listed in the changelog upon commit though. Thanks. --> + +
    +

    30 March 2014

    +

    RavingManiac updated:

    +
      +
    • Inflatable walls and doors added. Useful for sealing off hull breaches, but easily punctured by sharp objects and Tajarans.
    • +
    +
    +

    10 March 2014

    Chinsky updated:

    @@ -72,7 +81,24 @@ should be listed in the changelog upon commit though. Thanks. -->
    • Smartfridges added to the bar, chemistry and virology. No more clutter!
    • A certain musical instrument has returned to the bar.
    • -
    • There is now a ten second delay between ingesting a pill/donut/milkshake and feeling the effects of the vile chemicals within.
    • +
    • There is now a ten second delay between ingesting a pill/donut/milkshake and regretting it.
    • +
    +
    + +
    +

    1 March 2014

    +

    Various updated:

    +
      +
    • Paint Mixing, red and blue makes purple!
    • +
    • New posters to tell you to respect those darned cat people
    • +
    • NanoUI for APC's, Canisters, Tank Transfer Valves and the heaters / coolers
    • +
    • PDA bombs are now less annoying, and won't always blow up / cause internal bleeding
    • +
    • Blob made less deadly
    • +
    • Objectiveless Antags now a configuration option, choose your own adventure!
    • +
    • Engineering redesign, now with better monitoring of the explodium supermatter!
    • +
    • Security EOD
    • +
    • New playable race, IPC's, go beep boop boop all over the station!
    • +
    • Gamemode autovoting, now players don't have to call for gamemode votes, it's automatic!
    @@ -84,6 +110,33 @@ should be listed in the changelog upon commit though. Thanks. --> +
    +

    1 February 2014

    +

    Various updated:

    +
      +
    • NanoUI for PDA
    • +
    • Write in blood while a ghost in cult rounds with enough cultists
    • +
    • Cookies, absurd sandwiches, and even cookable dioanae nymphs!
    • +
    • A bunch of new guns and other weapons
    • +
    • Species specific blood
    • +
    +
    + +
    +

    1 January 2014

    +

    Various updated:

    +
      +
    • AntagHUD and MedicalHUD for ghosts, see who the baddies are, check for new configuration options.
    • +
    • Ghosts will now have bold text if they are in the same room as the person making conversations easier to follow.
    • +
    • New hairstyles! Now you can use something other then hotpink floor length braid.
    • +
    • DNA rework, tell us how you were cloned and became albino!
    • +
    • Dirty floors, so now you know exactly how lazy the janitors are!
    • +
    • A new UI system, feel free to color it yourself, don't set it to completely clear or you will have a bad time.
    • +
    • Cryogenic storage, for all your SSD needs.
    • +
    • New hardsuits for those syndicate tajaran
    • +
    +
    +

    18 December 2013

    RavingManiac updated:

    @@ -93,6 +146,20 @@ should be listed in the changelog upon commit though. Thanks. -->
    +
    +

    1 December 2013

    +

    Various Developers banged their keyboards together:

    +
      +
    • New Engine, the supermatter, figure out what a cooling loop is, or don't and blow up engineering!
    • +
    • Each department will have it's own fax, make a copy of your butt and fax it to the admins!
    • +
    • Booze and soda dispensers, they are like chemmasters, only with booze and soda!
    • +
    • Bluespace and Cryostasis beakers, how do they work? Fuggin bluespace how do they work?
    • +
    • You can now shove things into vending machines, impress your friends on how things magically disappear out of your hands into the machine!
    • +
    • Robots and Androids (And gynoids too!) can now use custom job titles
    • +
    • Various bugfixes
    • +
    +
    +

    24 November 2013

    Yinadele updated:

    @@ -126,6 +193,19 @@ should be listed in the changelog upon commit though. Thanks. -->
    +
    +

    1 November 2013

    +

    Various updated:

    +
      +
    • Autovoting, Get off the station when your 15 hour workweek is done, thanks unions!
    • +
    • Some beach props that Chinsky finds useless.
    • +
    • Updated NanoUI
    • +
    • Dialysis while in sleepers - removes reagents from mobs, like the chemist, toss him in there!
    • +
    • Pipe Dispensers can now be ordered by Cargo
    • +
    • Fancy G-G-G-G-Ghosts!
    • +
    +
    +

    29 October 2013

    Cael_Aislinn updated:

    @@ -138,7 +218,7 @@ should be listed in the changelog upon commit though. Thanks. -->
    -

    06 Derptomber 2013

    +

    06 October 2013

    Chinsky updated:

    • Added contact-spread viruses. Spread if infected guy touches someone with bare hands, or if someone touches bare infected guy. Biosuits/gloves help.
    • @@ -1075,4 +1155,4 @@ Credits Section

      Some icons by Yusuke Kamiyamane. All rights reserved. Licensed under a Creative Commons Attribution 3.0 License.

    - \ No newline at end of file + diff --git a/icons/mob/human.dmi b/icons/mob/human.dmi index b08aa4b480..cb21e0f502 100644 Binary files a/icons/mob/human.dmi and b/icons/mob/human.dmi differ diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi index d73abf05c9..d0c5c1f959 100644 Binary files a/icons/mob/human_face.dmi and b/icons/mob/human_face.dmi differ diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi index fc06f3d110..547538e55f 100644 Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ diff --git a/icons/obj/bureaucracy.dmi b/icons/obj/bureaucracy.dmi index 33e1cb9df2..feec0ae0df 100644 Binary files a/icons/obj/bureaucracy.dmi and b/icons/obj/bureaucracy.dmi differ diff --git a/icons/obj/inflatable.dmi b/icons/obj/inflatable.dmi new file mode 100644 index 0000000000..d80e12b707 Binary files /dev/null and b/icons/obj/inflatable.dmi differ diff --git a/icons/obj/projectiles.dmi b/icons/obj/projectiles.dmi index 14e1f5a188..03915794e4 100644 Binary files a/icons/obj/projectiles.dmi and b/icons/obj/projectiles.dmi differ diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi index 941c984f1d..d1f2d00b44 100644 Binary files a/icons/obj/storage.dmi and b/icons/obj/storage.dmi differ diff --git a/icons/turf/areas.dmi b/icons/turf/areas.dmi index cbbc5232d0..7cb88319b0 100755 Binary files a/icons/turf/areas.dmi and b/icons/turf/areas.dmi differ diff --git a/maps/tgstation2.dmm b/maps/tgstation2.dmm index 5eba03523f..b33672160f 100644 --- a/maps/tgstation2.dmm +++ b/maps/tgstation2.dmm @@ -553,16 +553,16 @@ "akG" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor{icon_state = "red"; dir = 5},/area/security/main) "akH" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor,/area/security/main) "akI" = (/obj/structure/sign/securearea,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall/r_wall,/area/security/warden) -"akJ" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; level = 2; on = 1},/obj/structure/table,/obj/item/weapon/storage/box/handcuffs,/obj/item/weapon/storage/box/flashbangs{pixel_x = -2; pixel_y = -2},/turf/simulated/floor{icon_state = "dark"},/area/security/main) -"akK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/table,/obj/item/weapon/storage/fancy/donut_box,/turf/simulated/floor{icon_state = "dark"},/area/security/main) -"akL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/security/main) -"akM" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; external_pressure_bound = 100; on = 1; pressure_checks = 1},/turf/simulated/floor{icon_state = "dark"},/area/security/main) +"akJ" = (/turf/simulated/wall/r_wall,/area/security/tactical) +"akK" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; level = 2; on = 1},/obj/structure/table,/obj/item/weapon/storage/box/handcuffs,/obj/item/weapon/storage/box/flashbangs{pixel_x = -2; pixel_y = -2},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{cell_type = 5000; dir = 8; name = "Tactical Equipment APC"; pixel_x = -24; pixel_y = 0},/turf/simulated/floor{icon_state = "dark"},/area/security/tactical) +"akL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/table,/obj/item/weapon/storage/fancy/donut_box,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{icon_state = "dark"},/area/security/tactical) +"akM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor{icon_state = "dark"},/area/security/tactical) "akN" = (/obj/structure/sign/pods{pixel_x = 32; pixel_y = 0},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{dir = 10; icon_state = "warning"},/area/security/brig) "akO" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/security/brig) "akP" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/fsmaint) "akQ" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/turf/simulated/shuttle/wall{icon_state = "swall_f5"; dir = 2},/area/shuttle/escape_pod3/station) "akR" = (/turf/simulated/shuttle/wall{icon_state = "swall_s9"; dir = 2},/area/shuttle/escape_pod3/station) -"akS" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/security{name = "Washroom"; req_access_txt = "1"},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/main) +"akS" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; external_pressure_bound = 100; on = 1; pressure_checks = 1},/turf/simulated/floor{icon_state = "dark"},/area/security/tactical) "akT" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/glass_security{id_tag = "BrigEast"; name = "Brig"; req_access_txt = "63"},/turf/simulated/floor,/area/security/brig) "akU" = (/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/turf/simulated/wall,/area/security/brig) "akV" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable,/turf/simulated/floor/plating,/area/security/lobby) @@ -585,7 +585,7 @@ "alm" = (/obj/structure/table,/obj/item/weapon/folder/red,/obj/item/weapon/pen,/obj/machinery/light/small{dir = 8},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/brig) "aln" = (/obj/machinery/firealarm{pixel_y = 22},/obj/machinery/camera{c_tag = "Interrogation Observation"},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/brig) "alo" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison) -"alp" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/security/hos) +"alp" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security{name = "Washroom"; req_access_txt = "1"},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/main) "alq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/security/hos) "alr" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor{icon_state = "dark"},/area/security/warden) "als" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor{icon_state = "dark"},/area/security/warden) @@ -624,10 +624,10 @@ "alZ" = (/obj/machinery/light/small{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/security/brig) "ama" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/security/brig) "amb" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable,/turf/simulated/floor,/area/security/lobby) -"amc" = (/turf/simulated/floor{icon_state = "dark"},/area/security/main) +"amc" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/security/hos) "amd" = (/turf/simulated/floor{icon_state = "bar"},/area/security/main) "ame" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor{icon_state = "redcorner"; dir = 4},/area/security/lobby) -"amf" = (/obj/machinery/door/airlock/highsecurity{name = "Tactical Equipment"; req_access_txt = "58"},/turf/simulated/floor{icon_state = "dark"},/area/security/main) +"amf" = (/turf/simulated/floor{icon_state = "dark"},/area/security/tactical) "amg" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_CO2 = 0; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor,/area/security/lobby) "amh" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating,/area/security/brig) "ami" = (/obj/machinery/light/small{dir = 8},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/brig) @@ -644,8 +644,8 @@ "amt" = (/obj/structure/grille,/obj/structure/window/reinforced/tinted,/obj/structure/window/reinforced/tinted{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/security/brig) "amu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor{dir = 2; icon_state = "redcorner"},/area/security/prison) "amv" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/prison) -"amw" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/security/main) -"amx" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor{icon_state = "dark"},/area/security/main) +"amw" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/camera{c_tag = "Tactical Equipment"; dir = 8; network = list("SS13")},/turf/simulated/floor{icon_state = "dark"},/area/security/tactical) +"amx" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/highsecurity{name = "Tactical Equipment"; req_access_txt = "58"},/turf/simulated/floor{icon_state = "dark"},/area/security/tactical) "amy" = (/obj/machinery/flasher{id = "Cell 1"; pixel_x = 0; pixel_y = -28},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_Toxins = 0},/turf/simulated/floor,/area/security/brig) "amz" = (/obj/structure/stool/bed,/turf/simulated/floor{icon_state = "red"; dir = 4},/area/security/brig) "amA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable,/turf/simulated/floor/plating,/area/security/brig) @@ -665,11 +665,11 @@ "amO" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/tracker,/turf/simulated/floor/plating/airless,/area/solar/auxstarboard) "amP" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/tracker,/turf/simulated/floor/plating/airless,/area/solar/auxport) "amQ" = (/obj/machinery/washing_machine,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "bar"},/area/security/main) -"amR" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall/r_wall,/area/security/main) +"amR" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/security/tactical) "amS" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plating,/area/security/prison) "amT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/security/prison) "amU" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/security/prison) -"amV" = (/obj/structure/closet/wardrobe/tactical,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/main) +"amV" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor{icon_state = "dark"},/area/security/tactical) "amW" = (/obj/item/device/radio/intercom{broadcasting = 1; freerange = 0; frequency = 1475; listening = 0; name = "Station Intercom (Security)"; pixel_x = -30; pixel_y = 0},/obj/machinery/light{dir = 8},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/security/lobby) "amX" = (/obj/machinery/computer/area_atmos/area,/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plating,/area/security/prison) "amY" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/lobby) @@ -1089,7 +1089,7 @@ "auW" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor{icon_state = "showroomfloor"},/area/crew_quarters/kitchen) "auX" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "showroomfloor"},/area/crew_quarters/kitchen) "auY" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall,/area/maintenance/fpmaint) -"auZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall,/area/hallway/primary/central) +"auZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall/r_wall,/area/security/tactical) "ava" = (/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{dir = 1},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/hallway/primary/port) "avb" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/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/border_only,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/hallway/primary/port) "avc" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/turf/simulated/floor/plating,/area/maintenance/fpmaint) @@ -1126,7 +1126,7 @@ "avH" = (/obj/structure/sink/kitchen{pixel_y = 28},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "showroomfloor"},/area/crew_quarters/kitchen) "avI" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/camera{c_tag = "Fore Primary Hallway"; dir = 4; network = list("SS13")},/obj/machinery/power/apc{dir = 8; name = "Fore Primary Hallway APC"; pixel_x = -24},/turf/simulated/floor{icon_state = "redcorner"; dir = 1},/area/hallway/primary/fore) "avJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall,/area/crew_quarters/bar) -"avK" = (/obj/structure/device/piano,/turf/simulated/floor/wood,/area/crew_quarters/bar) +"avK" = (/obj/structure/closet/wardrobe/tactical,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/tactical) "avL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/fpmaint) "avM" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/hallway/primary/port) "avN" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/hallway/primary/port) @@ -1420,7 +1420,7 @@ "aBp" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "aBq" = (/turf/simulated/wall,/area/maintenance/fsmaint2) "aBr" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall/r_wall,/area/turret_protected/ai) -"aBs" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/wall/r_wall,/area/bridge/meeting_room) +"aBs" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{color = "#4444FF"; dir = 4},/turf/simulated/wall,/area/crew_quarters/bar) "aBt" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/port) "aBu" = (/obj/structure/stool{pixel_y = 8},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) "aBv" = (/obj/structure/cable,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) @@ -1463,7 +1463,7 @@ "aCg" = (/obj/structure/table,/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor,/area/storage/primary) "aCh" = (/obj/machinery/power/apc{dir = 1; name = "Primary Tool Storage APC"; pixel_x = -1; pixel_y = 26},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor,/area/storage/primary) "aCi" = (/obj/machinery/vending/tool,/turf/simulated/floor,/area/storage/primary) -"aCj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/wall/r_wall,/area/bridge/meeting_room) +"aCj" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor,/area/hallway/primary/central) "aCk" = (/turf/simulated/floor{icon_state = "vault"; dir = 6},/area/security/nuke_storage) "aCl" = (/obj/machinery/nuclearbomb{r_code = "LOLNO"},/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/nuke_storage) "aCm" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "vault"; dir = 10},/area/security/nuke_storage) @@ -1479,7 +1479,7 @@ "aCw" = (/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/ai_monitored/storage/eva) "aCx" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass_command{name = "E.V.A."; req_access_txt = "0"; req_one_access_txt = "1;5;11;18;24"},/turf/simulated/floor{icon_state = "dark"},/area/ai_monitored/storage/eva) "aCy" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/ai_monitored/storage/eva) -"aCz" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/wall/r_wall,/area/bridge/meeting_room) +"aCz" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar) "aCA" = (/obj/machinery/door/firedoor/border_only,/turf/simulated/floor{icon_state = "neutral"; dir = 8},/area/crew_quarters/sleep) "aCB" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor{icon_state = "neutral"; dir = 4},/area/crew_quarters/sleep) "aCC" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/toilet) @@ -1496,14 +1496,14 @@ "aCN" = (/obj/machinery/camera{c_tag = "Fore Starboard Solars"; dir = 1},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/smes{charge = 0},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) "aCO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "aCP" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) -"aCQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall/r_wall,/area/bridge/meeting_room) +"aCQ" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{color = "#4444FF"; dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar) "aCR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/meter,/turf/simulated/floor/plating,/area/maintenance/port) "aCS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall,/area/crew_quarters/locker/locker_toilet) "aCT" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/maintenance/port) "aCU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall,/area/crew_quarters/locker) "aCV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall/r_wall,/area/crew_quarters/captain) -"aCW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/wood,/area/bridge/meeting_room) -"aCX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "heads_meeting"; name = "Meeting Room Window Shields"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/bridge/meeting_room) +"aCW" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/fpmaint) +"aCX" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall,/area/crew_quarters/toilet) "aCY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/hallway/primary/starboard) "aCZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/turf/simulated/floor,/area/hallway/primary/starboard) "aDa" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor{icon_state = "dark"},/area/maintenance/fsmaint2) @@ -1537,7 +1537,7 @@ "aDC" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/hallway/primary/starboard) "aDD" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock East"},/turf/simulated/floor,/area/hallway/primary/starboard) "aDE" = (/obj/machinery/washing_machine,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/crew_quarters/locker) -"aDF" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "heads_meeting"; name = "Meeting Room Window Shields"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/bridge/meeting_room) +"aDF" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/toilet) "aDG" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/wall/r_wall,/area/turret_protected/ai) "aDH" = (/obj/structure/table,/obj/item/weapon/paper/pamphlet,/turf/simulated/floor,/area/gateway) "aDI" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/gateway) @@ -1621,7 +1621,7 @@ "aFi" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) "aFj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/stool/bed/chair/wood/wings{icon_state = "wooden_chair_wings"; dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar) "aFk" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/port) -"aFl" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/fpmaint) +"aFl" = (/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_CO2 = 0; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor,/area/hallway/primary/central) "aFm" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/ai_monitored/storage/eva) "aFn" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/table/reinforced,/obj/machinery/cell_charger,/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/cable_coil{pixel_x = 3; pixel_y = -7},/obj/item/weapon/cable_coil{pixel_x = 3; pixel_y = -7},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/ai_monitored/storage/eva) "aFo" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor{icon_state = "dark"},/area/ai_monitored/storage/eva) @@ -1655,7 +1655,7 @@ "aFQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/wall/r_wall,/area/bridge) "aFR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall/r_wall,/area/bridge) "aFS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/wall/r_wall,/area/bridge) -"aFT" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/wall/r_wall,/area/bridge) +"aFT" = (/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_y = 20},/obj/machinery/light{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/turf/simulated/floor,/area/hallway/primary/central) "aFU" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/wood,/area/crew_quarters/bar) "aFV" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/carpet,/area/library) "aFW" = (/obj/structure/disposalpipe/segment,/obj/machinery/light{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/hallway/primary/starboard) @@ -1714,7 +1714,7 @@ "aGX" = (/obj/machinery/door/airlock/glass{name = "Cryogenic Storage"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{dir = 2; icon_state = "warnwhite"},/area/crew_quarters/sleep/cryo) "aGY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "red"; dir = 4},/area/crew_quarters/fitness) "aGZ" = (/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/obj/machinery/door/airlock/glass{name = "Holodeck Door"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/turf/simulated/floor,/area/crew_quarters/fitness) -"aHa" = (/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/fpmaint) +"aHa" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/turf/simulated/floor,/area/hallway/primary/central) "aHb" = (/obj/machinery/light/small{dir = 8},/obj/structure/dispenser/oxygen,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/ai_monitored/storage/eva) "aHc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/fitness) "aHd" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/head/helmet/space/skrell/black,/obj/item/clothing/mask/breath,/obj/item/clothing/suit/space/skrell/black,/obj/item/clothing/head/helmet/space/skrell/white,/obj/item/clothing/mask/breath,/obj/item/clothing/suit/space/skrell/white,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/ai_monitored/storage/eva) @@ -1880,7 +1880,7 @@ "aKh" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "solar_tool_pump"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "solar_tool_sensor"; pixel_x = 25; pixel_y = 12},/obj/machinery/embedded_controller/radio/airlock_controller{tag_airpump = "solar_tool_pump"; tag_exterior_door = "solar_tool_outer"; frequency = 1379; id_tag = "solar_tool_airlock"; tag_interior_door = "solar_tool_inner"; pixel_x = 25; req_access_txt = "13"; tag_chamber_sensor = "solar_tool_sensor"},/turf/simulated/floor/plating,/area/maintenance/auxsolarport) "aKi" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/gateway) "aKj" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/crew_quarters/fitness) -"aKk" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/turf/simulated/floor/plating,/area/maintenance/fpmaint) +"aKk" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/wood,/area/bridge/meeting_room) "aKl" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/ai_monitored/storage/eva) "aKm" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/cable,/obj/structure/sign/securearea,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/ai_monitored/storage/eva) "aKn" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/cable,/obj/structure/sign/securearea,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/ai_monitored/storage/eva) @@ -1977,7 +1977,7 @@ "aMa" = (/turf/simulated/floor{icon_state = "L11"},/area/hallway/primary/central) "aMb" = (/turf/simulated/floor{desc = ""; icon_state = "L13"; name = "floor"},/area/hallway/primary/central) "aMc" = (/turf/simulated/floor{icon_state = "L15"},/area/hallway/primary/central) -"aMd" = (/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_y = 20},/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/obj/machinery/light{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/turf/simulated/floor,/area/hallway/primary/central) +"aMd" = (/obj/machinery/door/airlock/command{name = "Conference Room"; req_access = null; req_access_txt = "19"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/wood,/area/bridge/meeting_room) "aMe" = (/turf/simulated/floor{icon_state = "neutralcorner"; dir = 4},/area/hallway/primary/central) "aMf" = (/turf/simulated/floor{icon_state = "neutralcorner"; dir = 1},/area/hallway/primary/central) "aMg" = (/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor{icon_state = "neutralcorner"; dir = 1},/area/hallway/primary/central) @@ -2276,7 +2276,7 @@ "aRN" = (/obj/machinery/computer/crew,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable,/turf/simulated/floor{icon_state = "whitehall"; dir = 2},/area/bridge) "aRO" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/storage/firstaid/regular,/turf/simulated/floor{dir = 6; icon_state = "whitehall"},/area/bridge) "aRP" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/hallway/primary/central) -"aRQ" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor,/area/hallway/primary/central) +"aRQ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/wood,/area/bridge/meeting_room) "aRR" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 0},/turf/simulated/wall,/area/crew_quarters/bar) "aRS" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/bar) "aRT" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "vault"; dir = 6},/area/security/nuke_storage) @@ -2317,7 +2317,7 @@ "aSC" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor,/area/hallway/secondary/entry) "aSD" = (/obj/machinery/light,/turf/simulated/floor,/area/hallway/secondary/entry) "aSE" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall,/area/crew_quarters/sleep) -"aSF" = (/obj/machinery/power/apc{dir = 4; name = "Dormitory Bathrooms APC"; pixel_x = 26; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/toilet) +"aSF" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "heads_meeting"; name = "Meeting Room Window Shields"; opacity = 0},/turf/simulated/floor/plating,/area/bridge/meeting_room) "aSG" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/port) "aSH" = (/obj/structure/closet/wardrobe/mixed,/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = -27},/turf/simulated/floor,/area/crew_quarters/locker) "aSI" = (/obj/effect/landmark{name = "lightsout"},/turf/simulated/floor,/area/crew_quarters/locker) @@ -2464,11 +2464,11 @@ "aVt" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "aVu" = (/obj/machinery/camera{c_tag = "Security Checkpoint"; dir = 1},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "red"; dir = 10},/area/security/checkpoint2) "aVv" = (/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/cable,/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/ai_monitored/storage/eva) -"aVw" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/turf/simulated/floor/plating,/area/maintenance/fpmaint) +"aVw" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "heads_meeting"; name = "Meeting Room Window Shields"; opacity = 0},/turf/simulated/floor/plating,/area/bridge/meeting_room) "aVx" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall,/area/crew_quarters/toilet) "aVy" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/toilet) -"aVz" = (/obj/machinery/light_switch{pixel_x = 27},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/toilet) -"aVA" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/plating,/area/maintenance/fsmaint) +"aVz" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/bridge) +"aVA" = (/obj/structure/closet/emcloset,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; icon_state = "off"; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/bridge) "aVB" = (/obj/structure/closet/wardrobe/grey,/obj/machinery/requests_console{department = "Locker Room"; pixel_x = -32; pixel_y = 0},/turf/simulated/floor,/area/crew_quarters/locker) "aVC" = (/obj/structure/table,/obj/item/clothing/head/soft/grey{pixel_x = -2; pixel_y = 3},/turf/simulated/floor,/area/crew_quarters/locker) "aVD" = (/obj/structure/table,/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/crew_quarters/locker) @@ -2651,9 +2651,9 @@ "aYY" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock East"},/turf/simulated/floor{icon_state = "blue"; dir = 6},/area/hallway/primary/central) "aYZ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/cable,/turf/simulated/floor/plating,/area/bridge) "aZa" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "bridge blast"; name = "Bridge Blast Doors"; opacity = 0},/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock East"},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/bridge) -"aZb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall,/area/maintenance/fsmaint) -"aZc" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; icon_state = "off"; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/closet/emcloset,/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/bridge) -"aZd" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/bridge) +"aZb" = (/obj/machinery/power/apc{dir = 4; name = "Dormitory Bathrooms APC"; pixel_x = 26; pixel_y = 0},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/toilet) +"aZc" = (/obj/structure/reagent_dispensers/fueltank,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plating,/area/maintenance/fpmaint) +"aZd" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/fpmaint) "aZe" = (/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/bridge) "aZf" = (/turf/simulated/floor{icon_state = "blue"; dir = 6},/area/bridge) "aZg" = (/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/cable,/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/ai_monitored/storage/eva) @@ -2727,7 +2727,7 @@ "baw" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "bax" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "bay" = (/turf/simulated/wall,/area/bridge/meeting_room) -"baz" = (/obj/machinery/door/airlock/command{name = "Conference Room"; req_access = null; req_access_txt = "19"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/wood,/area/bridge/meeting_room) +"baz" = (/obj/machinery/light_switch{pixel_x = 27},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/toilet) "baA" = (/turf/simulated/wall/r_wall,/area/bridge/meeting_room) "baB" = (/turf/simulated/wall/r_wall,/area/turret_protected/ai) "baC" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/sortjunction{dir = 4; icon_state = "pipe-j2s"; sortType = 17},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) @@ -2793,7 +2793,7 @@ "bbK" = (/obj/structure/stool,/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/quartermaster/office) "bbL" = (/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/quartermaster/office) "bbM" = (/obj/machinery/conveyor_switch/oneway{id = "packageSort2"},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/quartermaster/office) -"bbN" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; icon_state = "off"; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor{icon_state = "bluecorner"},/area/hallway/primary/central) +"bbN" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/fpmaint) "bbO" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/power/apc{dir = 2; name = "Bar Maintenance APC"; pixel_y = -24},/obj/structure/cable,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "bbP" = (/obj/machinery/photocopier,/turf/simulated/floor/wood,/area/bridge/meeting_room) "bbQ" = (/obj/machinery/door_control{id = "heads_meeting"; name = "Security Shutters"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor/wood,/area/bridge/meeting_room) @@ -2801,7 +2801,7 @@ "bbS" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/camera{c_tag = "Conference Room"; dir = 2},/turf/simulated/floor/wood,/area/bridge/meeting_room) "bbT" = (/obj/machinery/power/apc{dir = 1; name = "Conference Room APC"; pixel_y = 24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/wood,/area/bridge/meeting_room) "bbU" = (/obj/machinery/light_switch{pixel_y = 28},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/wood,/area/bridge/meeting_room) -"bbV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/wood,/area/bridge/meeting_room) +"bbV" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/medical/patient_wing) "bbW" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/wood,/area/bridge/meeting_room) "bbX" = (/turf/simulated/floor/bluegrid,/area/turret_protected/ai) "bbY" = (/obj/machinery/alarm{pixel_y = 23},/obj/machinery/turret,/turf/simulated/floor/bluegrid,/area/turret_protected/ai) @@ -2857,10 +2857,10 @@ "bcW" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor,/area/hallway/primary/central) "bcX" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "bcY" = (/obj/machinery/recharger{pixel_y = 4},/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/bridge/meeting_room) -"bcZ" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor/wood,/area/bridge/meeting_room) +"bcZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/patient_wing) "bda" = (/turf/simulated/floor/carpet,/area/bridge/meeting_room) "bdb" = (/obj/structure/stool/bed/chair/comfy/black,/turf/simulated/floor/carpet,/area/bridge/meeting_room) -"bdc" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/bridge/meeting_room) +"bdc" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci) "bdd" = (/obj/machinery/vending/snack,/turf/simulated/floor/wood,/area/bridge/meeting_room) "bde" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) "bdf" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai) @@ -3025,13 +3025,13 @@ "bgi" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "white_d"},/area/medical/medbay2) "bgj" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/patient_wing) "bgk" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/patient_wing) -"bgl" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor{dir = 2; icon_state = "whitegreencorner"},/area/medical/patient_wing) +"bgl" = (/obj/machinery/atmospherics/binary/pump{dir = 1; icon_state = "intact_off"; name = "Gas pump"; on = 0},/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci) "bgm" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) "bgn" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) "bgo" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/sign/fire{pixel_y = -32},/obj/machinery/atmospherics/binary/pump{dir = 8; icon_state = "intact_on"; on = 1},/turf/simulated/floor/engine,/area/toxins/mixing) "bgp" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "bgq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/asmaint2) -"bgr" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{dir = 2; icon_state = "whitegreen_v"; tag = "icon-whitegreen_v (WEST)"},/area/medical/patient_wing) +"bgr" = (/obj/structure/sign/redcross{desc = "The Star of Life, a symbol of Medical Aid."; icon_state = "lifestar"; name = "Medbay"; pixel_x = -32},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/asmaint) "bgs" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "robotics_inner"; locked = 0; name = "Engineering External Access"; req_access = null; req_access_txt = "13"},/turf/simulated/floor/plating,/area/maintenance/aft) "bgt" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/aft) "bgu" = (/obj/structure/sign/electricshock{pixel_y = -32},/turf/space,/area) @@ -3070,7 +3070,7 @@ "bhb" = (/turf/simulated/wall,/area/medical/morgue) "bhc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/hologram/holopad,/turf/simulated/floor{dir = 2; icon_state = "whitered_c"; tag = "icon-whitered_c (WEST)"},/area/medical/patient_wing) "bhd" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{dir = 8; icon_state = "whiteredcorner"},/area/medical/patient_wing) -"bhe" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "whitegreencorner"},/area/medical/patient_wing) +"bhe" = (/turf/simulated/floor{icon_state = "white"},/area/medical/patient_wing) "bhf" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{dir = 2; icon_state = "whitebluecorner"; tag = "icon-whitebluecorner"},/area/medical/patient_wing) "bhg" = (/turf/simulated/wall,/area/storage/emergency) "bhh" = (/obj/machinery/door/firedoor/border_only,/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 2; icon_state = "yellowcorner"},/area/hallway/primary/aft) @@ -3097,11 +3097,11 @@ "bhC" = (/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/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) "bhD" = (/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/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/asmaint) "bhE" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor{tag = "icon-whitebluecorner (WEST)"; icon_state = "whitebluecorner"; dir = 8},/area/medical/patient_wing) -"bhF" = (/turf/simulated/floor{icon_state = "floorgrime"},/area/toxins/misc_lab) -"bhG" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/toxins/misc_lab) -"bhH" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/toxins/misc_lab) -"bhI" = (/obj/machinery/door/airlock/maintenance{name = "Telescience Maintenance"; req_access_txt = "47"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/toxins/misc_lab) -"bhJ" = (/obj/structure/sign/redcross{desc = "The Star of Life, a symbol of Medical Aid."; icon_state = "lifestar"; name = "Medbay"; pixel_x = -32},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/sortjunction{dir = 2; icon_state = "pipe-j2s"; sortType = 13},/turf/simulated/floor/plating,/area/maintenance/asmaint) +"bhF" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/medical/patient_wing) +"bhG" = (/obj/machinery/light,/obj/machinery/atmospherics/portables_connector{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci) +"bhH" = (/obj/machinery/portable_atmospherics/scrubber,/obj/structure/disposalpipe/junction{icon_state = "pipe-j2"; dir = 2},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_CO2 = 0; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci) +"bhI" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci) +"bhJ" = (/obj/machinery/door/window/westright{name = "Inflatable Barriers"},/obj/structure/rack{layer = 2.6},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/briefcase/inflatable{req_one_access_txt = "11;24"},/turf/simulated/floor{dir = 2; icon_state = "yellowpatch"},/area/hallway/primary/aft) "bhK" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/light_switch{pixel_x = 0; pixel_y = 27},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator) "bhL" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/light{dir = 1},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator) "bhM" = (/obj/machinery/atmospherics/pipe/tank/oxygen{dir = 2; volume = 3200},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator) @@ -3118,7 +3118,7 @@ "bhX" = (/obj/machinery/door/window/eastright{dir = 1; name = "Bridge Delivery"; req_access_txt = "19"},/turf/simulated/floor{icon_state = "delivery"},/area/bridge/meeting_room) "bhY" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall/r_wall,/area/toxins/mixing) "bhZ" = (/obj/structure/reagent_dispensers/water_cooler,/turf/simulated/floor/wood,/area/bridge/meeting_room) -"bia" = (/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 0; pixel_y = -32},/obj/machinery/faxmachine{department = "Bridge"},/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/bridge/meeting_room) +"bia" = (/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor{dir = 4; icon_state = "yellowpatch"},/area/hallway/primary/aft) "bib" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/machinery/hologram/holopad,/turf/simulated/floor/wood,/area/bridge/meeting_room) "bic" = (/obj/machinery/light,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; icon_state = "off"; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor/wood,/area/bridge/meeting_room) "bid" = (/turf/simulated/wall,/area/medical/patient_wing) @@ -3139,10 +3139,10 @@ "bis" = (/obj/effect/landmark/start{name = "Scientist"},/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci) "bit" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 8},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/asmaint2) "biu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 9},/area/maintenance/asmaint2) -"biv" = (/obj/structure/sign/biohazard,/turf/simulated/wall,/area/medical/patient_wing) +"biv" = (/obj/structure/table/reinforced,/obj/item/device/gps/science,/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci) "biw" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall/r_wall,/area/medical/research{name = "Research Division"}) "bix" = (/turf/simulated/wall,/area/medical/chemistry) -"biy" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Decontamination"; req_access_txt = "39"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "whitehall"; dir = 1},/area/medical/patient_wing) +"biy" = (/obj/structure/table/reinforced,/obj/machinery/ignition_switch{id = "Xenobio"; pixel_x = -6; pixel_y = 4},/obj/item/device/gps/science,/obj/machinery/atmospherics/pipe/manifold/visible{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci) "biz" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "psych"; name = "Mental Health Privacy Shutters"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/medical/psych) "biA" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/obj/structure/closet/bombcloset,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci) "biB" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Mental Health"; req_access_txt = "0"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) @@ -3190,13 +3190,13 @@ "bjr" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/maintenance/port) "bjs" = (/obj/structure/grille,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/port) "bjt" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/port) -"bju" = (/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor{dir = 2; icon_state = "yellowpatch"},/area/hallway/primary/aft) +"bju" = (/obj/item/weapon/crowbar/red,/obj/item/weapon/wrench,/obj/machinery/power/apc{dir = 8; name = "Telescience APC"; pixel_x = -25},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 6},/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci) "bjv" = (/obj/machinery/door/poddoor/shutters{dir = 2; id = "qm_warehouse"; name = "Warehouse Shutters"},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/quartermaster/storage) "bjw" = (/obj/structure/disposalpipe/wrapsortjunction{dir = 1},/turf/simulated/wall,/area/quartermaster/storage) "bjx" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/hallway/primary/aft) "bjy" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/engine/break_room) "bjz" = (/turf/simulated/floor{dir = 8; icon_state = "brown"},/area/quartermaster/office) -"bjA" = (/obj/item/weapon/folder/yellow,/obj/item/weapon/pen{pixel_x = 4; pixel_y = 4},/obj/structure/table/reinforced,/turf/simulated/floor{icon_state = "arrival"; dir = 4},/area/quartermaster/office) +"bjA" = (/obj/structure/table,/obj/item/device/eftpos{eftpos_name = "HoP EFTPOS scanner"},/obj/item/weapon/paper_bin/carbon,/turf/simulated/floor,/area/crew_quarters/heads) "bjB" = (/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/turf/simulated/floor{icon_state = "bluecorner"},/area/hallway/primary/central) "bjC" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=1"; dir = 1; freq = 1400; location = "Bridge"},/obj/structure/plasticflaps{opacity = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor{icon_state = "bot"},/area/bridge/meeting_room) "bjD" = (/obj/structure/table/woodentable,/obj/item/weapon/book/manual/supermatter_engine{pixel_x = -3},/turf/simulated/floor/carpet,/area/engine/break_room) @@ -3219,7 +3219,7 @@ "bjU" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/engine/chiefs_office) "bjV" = (/obj/machinery/atmospherics/pipe/simple{dir = 9; icon_state = "intact"; level = 2},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/medical/sleeper) "bjW" = (/obj/machinery/atmospherics/pipe/simple{dir = 4; icon_state = "intact"; level = 2},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor,/area/medical/sleeper) -"bjX" = (/obj/machinery/atm{pixel_y = 32},/turf/simulated/floor{dir = 4; icon_state = "yellowpatch"},/area/hallway/primary/aft) +"bjX" = (/turf/simulated/wall,/area/toxins/telesci) "bjY" = (/obj/machinery/atmospherics/pipe/simple{dir = 6; icon_state = "intact"; level = 2},/turf/simulated/floor,/area/medical/sleeper) "bjZ" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Medbay Diagnostics Maintenance Access"; req_access_txt = "5"},/turf/simulated/floor/plating,/area/medical/sleeper) "bka" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/asmaint) @@ -3230,11 +3230,11 @@ "bkf" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) "bkg" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) "bkh" = (/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "shutter0"; id = "scanhideside"; name = "Diagnostics Room Privacy Shutters"; opacity = 0},/turf/simulated/floor{dir = 8; icon_state = "whitered"},/area/medical/sleeper) -"bki" = (/obj/machinery/light,/turf/simulated/floor{icon_state = "floorgrime"},/area/toxins/misc_lab) -"bkj" = (/obj/machinery/portable_atmospherics/scrubber,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/toxins/misc_lab) -"bkk" = (/obj/structure/disposalpipe/junction{icon_state = "pipe-j2"; dir = 2},/turf/simulated/floor{icon_state = "floorgrime"},/area/toxins/misc_lab) +"bki" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atm{pixel_x = -32},/turf/simulated/floor{dir = 8; icon_state = "yellowcorner"},/area/hallway/primary/aft) +"bkj" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor{dir = 1; icon_state = "whiteredcorner"},/area/medical/patient_wing) +"bkk" = (/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/simple/hidden/supply,/obj/structure/disposalpipe/sortjunction{dir = 2; icon_state = "pipe-j2s"; sortType = 13},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) "bkl" = (/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Hygiene Facilities"; req_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "white"},/area/medical/patient_wing) -"bkm" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Medbay Maintenance Access"; req_access_txt = "5"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"bkm" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Medbay Patient Wing Maintenance Access"; req_access_txt = "5"},/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/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/medical/patient_wing) "bkn" = (/obj/machinery/disposal,/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci) "bko" = (/obj/machinery/portable_atmospherics/pump,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci) "bkp" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 8},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/maintenance/asmaint2) @@ -3261,7 +3261,7 @@ "bkK" = (/obj/structure/sign/securearea,/turf/simulated/wall,/area/medical/research{name = "Research Division"}) "bkL" = (/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{dir = 1; icon_state = "whitepurple"},/area/toxins/lab) "bkM" = (/obj/structure/stool,/obj/effect/landmark/start{name = "Scientist"},/turf/simulated/floor{dir = 1; icon_state = "whitepurple"},/area/toxins/lab) -"bkN" = (/obj/structure/table,/turf/simulated/floor{dir = 1; icon_state = "whitepurple"},/area/toxins/lab) +"bkN" = (/obj/item/weapon/folder/yellow,/obj/item/weapon/pen{pixel_x = 4; pixel_y = 4},/obj/structure/table/reinforced,/obj/item/weapon/paper_bin/carbon,/turf/simulated/floor{icon_state = "arrival"; dir = 4},/area/quartermaster/office) "bkO" = (/obj/machinery/camera{c_tag = "Research and Development Lab"; dir = 2; network = list("SS13","Research")},/obj/machinery/power/apc{dir = 1; name = "Research Lab APC"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor{dir = 1; icon_state = "whitepurplecorner"},/area/toxins/lab) "bkP" = (/turf/simulated/floor{icon_state = "white"},/area/toxins/lab) "bkQ" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor{icon_state = "white"},/area/toxins/lab) @@ -3280,7 +3280,7 @@ "bld" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/port) "ble" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "medprivb"; name = "Patient Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/patient_b) "blf" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Sub-Acute B"; req_access_txt = "0"},/turf/simulated/floor{icon_state = "white"},/area/medical/patient_wing) -"blg" = (/obj/machinery/portable_atmospherics/pump,/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/toxins/misc_lab) +"blg" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci) "blh" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/port) "bli" = (/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/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/port) "blj" = (/obj/structure/table,/obj/item/clothing/head/soft,/obj/item/weapon/stamp{pixel_x = -3; pixel_y = 3},/obj/item/clothing/head/soft,/turf/simulated/floor,/area/quartermaster/storage) @@ -3297,8 +3297,8 @@ "blu" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall,/area/quartermaster/office) "blv" = (/obj/machinery/atmospherics/pipe/simple/insulated{icon_state = "intact"; dir = 4},/obj/machinery/meter,/obj/machinery/embedded_controller/radio/airlock_controller{tag_airpump = "tox_airlock_pump"; tag_exterior_door = "tox_airlock_exterior"; id_tag = "tox_airlock_control"; tag_interior_door = "tox_airlock_interior"; pixel_x = -24; pixel_y = 0; tag_chamber_sensor = "tox_airlock_sensor"},/turf/simulated/floor{dir = 1; icon_state = "warnwhitecorner"},/area/toxins/mixing) "blw" = (/obj/machinery/airlock_sensor{id_tag = "tox_airlock_sensor"; master_tag = "tox_airlock_control"; pixel_y = 24},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/binary/pump{dir = 4; icon_state = "intact_on"; on = 1},/turf/simulated/floor/engine,/area/toxins/mixing) -"blx" = (/obj/structure/table/reinforced,/obj/machinery/ignition_switch{id = "Xenobio"; pixel_x = -6; pixel_y = 4},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/toxins/misc_lab) -"bly" = (/obj/item/weapon/crowbar/red,/obj/item/weapon/wrench,/obj/machinery/power/apc{dir = 8; name = "Misc Research APC"; pixel_x = -25},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/toxins/misc_lab) +"blx" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Telescience Maintenance"; req_access_txt = "47"},/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/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/toxins/telesci) +"bly" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci) "blz" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/asmaint) "blA" = (/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/maintenance/asmaint) "blB" = (/obj/machinery/atmospherics/pipe/simple{dir = 6; icon_state = "intact"; level = 2},/turf/simulated/floor{icon_state = "redcorner"; dir = 1},/area/medical/sleeper) @@ -3319,7 +3319,7 @@ "blQ" = (/obj/effect/decal/cleanable/blood/oil{amount = 0},/turf/simulated/floor/plating,/area/maintenance/aft) "blR" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 2; icon_state = "yellowcorner"},/area/hallway/primary/aft) "blS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor,/area/hallway/primary/aft) -"blT" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor{dir = 8; icon_state = "yellowcorner"},/area/hallway/primary/aft) +"blT" = (/obj/machinery/door_control{id = "misclab"; name = "Test Chamber Blast Doors"; pixel_x = 6; pixel_y = 30; req_access_txt = "47"},/obj/structure/stool,/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/visible,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci) "blU" = (/obj/machinery/door/airlock/glass_research{autoclose = 0; frequency = 1379; glass = 1; icon_state = "door_locked"; id_tag = "tox_airlock_exterior"; locked = 1; name = "Mixing Room Exterior Airlock"; req_access_txt = "8"},/turf/simulated/floor/engine,/area/toxins/mixing) "blV" = (/obj/machinery/atmospherics/binary/dp_vent_pump/high_volume{dir = 2; frequency = 1379; id = "tox_airlock_pump"},/turf/simulated/floor/engine,/area/toxins/mixing) "blW" = (/obj/machinery/door/airlock/glass_research{autoclose = 0; frequency = 1379; glass = 1; icon_state = "door_locked"; id_tag = "tox_airlock_interior"; locked = 1; name = "Mixing Room Interior Airlock"; req_access_txt = "8"},/turf/simulated/floor/engine,/area/toxins/mixing) @@ -3345,13 +3345,13 @@ "bmq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/asmaint) "bmr" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/storage/emergency) "bms" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/storage/emergency) -"bmt" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor{dir = 1; icon_state = "whiteredcorner"},/area/medical/patient_wing) +"bmt" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci) "bmu" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{dir = 1; icon_state = "whitered_b"; tag = "icon-whitered_b (WEST)"},/area/medical/patient_wing) -"bmv" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/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/simple/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/asmaint) -"bmw" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Medbay Patient Wing Maintenance Access"; req_access_txt = "5"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/medical/patient_wing) -"bmx" = (/turf/simulated/floor/plating,/area/toxins/misc_lab) -"bmy" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor{icon_state = "floorgrime"},/area/toxins/misc_lab) -"bmz" = (/obj/machinery/door_control{id = "misclab"; name = "Test Chamber Blast Doors"; pixel_x = 6; pixel_y = 30; req_access_txt = "47"},/obj/structure/stool,/turf/simulated/floor{icon_state = "floorgrime"},/area/toxins/misc_lab) +"bmv" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/virologyaccess) +"bmw" = (/turf/simulated/floor{icon_state = "white"},/area/medical/virologyaccess) +"bmx" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/medical/virologyaccess) +"bmy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{color = "#4444FF"; dir = 4},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/asmaint) +"bmz" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) "bmA" = (/obj/machinery/hologram/holopad,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci) "bmB" = (/obj/structure/table/woodentable,/obj/item/weapon/book/manual/engineering_guide{pixel_x = 3; pixel_y = 2},/obj/item/weapon/book/manual/atmospipes,/turf/simulated/floor/carpet,/area/engine/break_room) "bmC" = (/obj/structure/table/woodentable,/obj/item/weapon/book/manual/engineering_construction,/obj/item/weapon/book/manual/evaguide{pixel_x = -2; pixel_y = 7},/turf/simulated/floor/carpet,/area/engine/break_room) @@ -3411,7 +3411,7 @@ "bnE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall,/area/maintenance/asmaint) "bnF" = (/turf/simulated/wall,/area/crew_quarters/captain) "bnG" = (/obj/machinery/door/airlock/command{name = "Captain's Quarters"; req_access = null; req_access_txt = "20"},/turf/simulated/floor/carpet,/area/crew_quarters/captain) -"bnH" = (/obj/machinery/door/airlock/maintenance{name = "Captain's Office Maintenance"; req_access_txt = "20"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/crew_quarters/captain) +"bnH" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/plating,/area/maintenance/asmaint) "bnI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) "bnJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) "bnK" = (/obj/structure/rack{dir = 1},/obj/item/weapon/storage/box/lights/mixed,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) @@ -3500,11 +3500,11 @@ "bpp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 8; icon_state = "whitered"},/area/medical/ward) "bpq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2; name = "hazard door south"},/turf/simulated/floor{dir = 2; icon_state = "whitegreen"},/area/toxins/xenobiology) "bpr" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) -"bps" = (/turf/simulated/floor/plating/airless,/area/maintenance/evahallway) -"bpt" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "eng_eva_outer"; locked = 1; name = "Engineering EVA External Access"; req_access = null; req_access_txt = "13"},/turf/simulated/floor/airless{icon_state = "circuit"},/area/maintenance/evahallway) -"bpu" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1379; id_tag = "eng_eva_pump"},/obj/machinery/camera{c_tag = "Engineering EVA Airlock"; dir = 1},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/evahallway) -"bpv" = (/obj/machinery/light/small,/turf/simulated/floor{dir = 8; icon_state = "floorgrimecaution"},/area/maintenance/evahallway) -"bpw" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1; scrub_Toxins = 0},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/evahallway) +"bps" = (/turf/simulated/floor/plating/airless,/area/engine/engine_eva) +"bpt" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "eng_eva_outer"; locked = 1; name = "Engineering EVA External Access"; req_access = null; req_access_txt = "13"},/turf/simulated/floor/airless{icon_state = "circuit"},/area/engine/engine_eva) +"bpu" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1379; id_tag = "eng_eva_pump"},/obj/machinery/camera{c_tag = "Engineering EVA Airlock"; dir = 1},/turf/simulated/floor{icon_state = "floorgrime"},/area/engine/engine_eva) +"bpv" = (/obj/machinery/light/small,/turf/simulated/floor{dir = 8; icon_state = "floorgrimecaution"},/area/engine/engine_eva) +"bpw" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1; scrub_Toxins = 0},/turf/simulated/floor{icon_state = "floorgrime"},/area/engine/engine_eva) "bpx" = (/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Patient Ward"; req_access_txt = "0"},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) "bpy" = (/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/assembly/chargebay) "bpz" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/assembly/robotics) @@ -3523,7 +3523,7 @@ "bpM" = (/obj/structure/table,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/extinguisher,/turf/simulated/floor/plating,/area/storage/emergency) "bpN" = (/turf/simulated/shuttle/wall{icon_state = "swall_s6"; dir = 2},/area/shuttle/research/station) "bpO" = (/turf/simulated/shuttle/wall{icon_state = "swall12"; dir = 2},/area/shuttle/research/station) -"bpP" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/extinguisher_cabinet{pixel_x = 25},/turf/simulated/floor/plating,/area/maintenance/evahallway) +"bpP" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/extinguisher_cabinet{pixel_x = 25},/turf/simulated/floor/plating,/area/engine/engine_eva) "bpQ" = (/turf/simulated/shuttle/wall{icon_state = "swall_s10"; dir = 2},/area/shuttle/research/station) "bpR" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/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 = 0},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/hallway/secondary/entry) "bpS" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/hallway/secondary/entry) @@ -3541,16 +3541,16 @@ "bqe" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{dir = 8; icon_state = "brown"},/area/quartermaster/office) "bqf" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/quartermaster/office) "bqg" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor,/area/quartermaster/office) -"bqh" = (/obj/item/weapon/stamp{pixel_x = -3; pixel_y = 3},/obj/item/weapon/stamp/denied{pixel_x = 4; pixel_y = -2},/obj/structure/table,/turf/simulated/floor,/area/quartermaster/office) +"bqh" = (/obj/structure/table,/obj/item/weapon/paper_bin/carbon,/turf/simulated/floor{dir = 1; icon_state = "whitepurple"},/area/toxins/lab) "bqi" = (/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/clipboard,/obj/item/weapon/pen/red{pixel_x = 2; pixel_y = 6},/obj/structure/table,/turf/simulated/floor,/area/quartermaster/office) "bqj" = (/obj/machinery/computer/ordercomp,/turf/simulated/floor,/area/quartermaster/office) "bqk" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor,/area/quartermaster/office) "bql" = (/obj/structure/stool/bed/chair{dir = 8},/obj/machinery/firealarm{pixel_y = 27},/obj/machinery/light{dir = 1},/turf/simulated/floor,/area/quartermaster/office) -"bqm" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "eng_eva_inner"; locked = 1; name = "Engineering EVA Internal Access"; req_access = null; req_access_txt = "13"},/turf/simulated/floor/plating,/area/maintenance/evahallway) +"bqm" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "eng_eva_inner"; locked = 1; name = "Engineering EVA Internal Access"; req_access = null; req_access_txt = "13"},/turf/simulated/floor/plating,/area/engine/engine_eva) "bqn" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor,/area/hallway/primary/central) "bqo" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 27},/turf/simulated/floor{dir = 2; icon_state = "redcorner"},/area/hallway/primary/central) "bqp" = (/obj/machinery/computer/skills{icon_state = "medlaptop"},/obj/structure/table,/turf/simulated/floor{dir = 9; icon_state = "blue"},/area/crew_quarters/heads) -"bqq" = (/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/evahallway) +"bqq" = (/turf/simulated/floor{icon_state = "floorgrime"},/area/engine/engine_eva) "bqr" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/machinery/recharger/wallcharger{pixel_x = 0; pixel_y = 30},/turf/simulated/floor,/area/crew_quarters/heads) "bqs" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/engine/chiefs_office) "bqt" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor,/area/crew_quarters/heads) @@ -3567,7 +3567,7 @@ "bqE" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/captain,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/carpet,/area/crew_quarters/captain) "bqF" = (/obj/structure/table/woodentable,/obj/item/device/camera,/obj/item/weapon/storage/photo_album{pixel_y = -10},/turf/simulated/floor/carpet,/area/crew_quarters/captain) "bqG" = (/obj/structure/toilet{dir = 4},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/captain) -"bqH" = (/obj/machinery/light/small{dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/crew_quarters/captain) +"bqH" = (/obj/machinery/vending/medical,/turf/simulated/floor{icon_state = "white"},/area/medical/virologyaccess) "bqI" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/engine/chiefs_office) "bqJ" = (/turf/simulated/floor{icon_state = "white"},/area/medical/ward) "bqK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "yellowcorner"},/area/hallway/primary/aft) @@ -3638,9 +3638,9 @@ "brX" = (/obj/structure/stool/bed/chair/comfy/brown{dir = 4},/obj/machinery/camera{c_tag = "Captain's Quarters"; dir = 1},/turf/simulated/floor/carpet,/area/crew_quarters/captain) "brY" = (/obj/structure/table/woodentable,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/obj/item/weapon/storage/box/matches,/obj/item/clothing/mask/cigarette/cigar,/obj/item/weapon/reagent_containers/food/drinks/flask{pixel_x = 8},/turf/simulated/floor/carpet,/area/crew_quarters/captain) "brZ" = (/obj/machinery/door/window/eastright{base_state = "left"; dir = 1; icon_state = "left"; name = "Shower"; req_access_txt = "0"},/obj/machinery/shower{icon_state = "shower"; dir = 4},/obj/item/weapon/soap/deluxe,/obj/item/weapon/bikehorn/rubberducky,/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/captain) -"bsa" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/crew_quarters/captain) +"bsa" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "white"},/area/medical/virologyaccess) "bsb" = (/obj/machinery/door_control{id = "medprivc"; name = "Privacy Shutters"; pixel_y = -25},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/table,/obj/item/weapon/clipboard,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 0; pixel_y = -36},/turf/simulated/floor{dir = 6; icon_state = "whitered"},/area/medical/patient_c) -"bsc" = (/obj/structure/window/reinforced,/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor,/area/medical/virologyaccess) +"bsc" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/machinery/holosign/surgery,/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Pre-Op Prep Room"; req_access_txt = "5"},/turf/simulated/floor{icon_state = "white"},/area/medical/surgeryprep) "bsd" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/carpet,/area/engine/break_room) "bse" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/carpet,/area/engine/break_room) "bsf" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/light/small{dir = 8},/turf/simulated/floor{icon_state = "dark"},/area/medical/biostorage) @@ -3653,9 +3653,9 @@ "bsm" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/newscaster{pixel_x = 30},/obj/structure/table,/obj/machinery/computer/med_data/laptop{pixel_x = 3; pixel_y = 4},/turf/simulated/floor{dir = 4; icon_state = "whitered"},/area/medical/ward) "bsn" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor{icon_state = "bcarpet01"},/area/medical/psych) "bso" = (/turf/simulated/floor{icon_state = "bcarpet02"},/area/medical/psych) -"bsp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{color = "#4444FF"; dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) -"bsq" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/plating,/area/maintenance/asmaint) -"bsr" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{color = "#4444FF"; dir = 4},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/asmaint) +"bsp" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/holosign/surgery,/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Pre-Op Prep Room"; req_access_txt = "5"},/turf/simulated/floor{icon_state = "white"},/area/medical/surgeryprep) +"bsq" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor{icon_state = "floorgrime"},/area/engine/engine_eva) +"bsr" = (/obj/machinery/power/apc{dir = 4; name = "EVA Hallway APC"; pixel_x = 25; pixel_y = 0},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "floorgrime"},/area/engine/engine_eva) "bss" = (/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/patient_wing) "bst" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/door/airlock/glass_engineering{name = "Engineering Break Room"; req_one_access_txt = "11;24;5"},/obj/machinery/door/firedoor/border_only{dir = 1; layer = 2.4; name = "Engineering Firelock"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/engine/break_room) "bsu" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{dir = 4; icon_state = "whiteyellowfull"},/area/crew_quarters/sleep/engi) @@ -3665,7 +3665,7 @@ "bsy" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor/plating,/area/maintenance/incinerator) "bsz" = (/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = -27},/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor{icon_state = "dark"},/area/medical/biostorage) "bsA" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/closet/l3closet,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/suit/bio_suit/general,/obj/item/clothing/suit/bio_suit/general,/obj/item/clothing/suit/bio_suit/general,/obj/item/clothing/mask/gas,/obj/item/clothing/head/bio_hood/general,/obj/item/clothing/head/bio_hood/general,/obj/item/clothing/head/bio_hood/general,/turf/simulated/floor{icon_state = "dark"},/area/medical/biostorage) -"bsB" = (/obj/machinery/shower{icon_state = "shower"; dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor,/area/medical/virologyaccess) +"bsB" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/toxins/telesci) "bsC" = (/obj/machinery/embedded_controller/radio/access_controller{tag_exterior_door = "incinerator_airlock_exterior"; id_tag = "incinerator_access_control"; tag_interior_door = "incinerator_airlock_interior"; name = "Incinerator Access Console"; pixel_x = -6; pixel_y = -26; req_access_txt = "12"},/obj/machinery/ignition_switch{id = "Incinerator"; pixel_x = 6; pixel_y = -24},/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator) "bsD" = (/obj/structure/sign/nosmoking_2{pixel_x = 0; pixel_y = -30},/turf/simulated/floor/plating,/area/maintenance/incinerator) "bsE" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor,/area/assembly/chargebay) @@ -3712,9 +3712,9 @@ "btt" = (/obj/structure/stool/bed/chair/office/dark,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/engine/break_room) "btu" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/engine/break_room) "btv" = (/turf/simulated/wall/r_wall,/area/teleporter) -"btw" = (/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) +"btw" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/virologyaccess) "btx" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/engine/break_room) -"bty" = (/obj/structure/closet/secure_closet/personal,/obj/machinery/light/small{dir = 8},/turf/simulated/floor,/area/medical/virologyaccess) +"bty" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/medical/virologyaccess) "btz" = (/obj/structure/bookcase,/turf/simulated/floor{icon_state = "bcarpet06"},/area/medical/psych) "btA" = (/obj/structure/closet/secure_closet{name = "Psychiatrist's Locker"; req_access = null; req_access_txt = "64"},/obj/item/clothing/suit/straight_jacket{layer = 3},/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/obj/item/weapon/reagent_containers/pill/methylphenidate,/obj/item/weapon/reagent_containers/pill/citalopram,/obj/item/weapon/reagent_containers/pill/citalopram,/obj/item/weapon/reagent_containers/pill/methylphenidate,/obj/item/weapon/reagent_containers/syringe,/turf/simulated/floor{icon_state = "bcarpet04"},/area/medical/psych) "btB" = (/turf/simulated/floor{icon_state = "bcarpet05"},/area/medical/psych) @@ -3725,8 +3725,8 @@ "btG" = (/obj/structure/noticeboard{pixel_x = 32; pixel_y = 0},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/engine/break_room) "btH" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor{dir = 4; icon_state = "whiteyellowfull"},/area/crew_quarters/sleep/engi) "btI" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/medical,/obj/machinery/vending/wallmed1{pixel_x = -26},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor{dir = 8; icon_state = "whitered"},/area/medical/ward) -"btJ" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Pre-Op Prep Room"; req_access_txt = "45"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/machinery/holosign/surgery,/turf/simulated/floor{icon_state = "white"},/area/medical/surgeryprep) -"btK" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Pre-Op Prep Room"; req_access_txt = "45"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/holosign/surgery,/turf/simulated/floor{icon_state = "white"},/area/medical/surgeryprep) +"btJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/engine/engine_eva) +"btK" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/engine/engine_eva) "btL" = (/obj/machinery/power/apc{dir = 4; name = "Surgery Observation APC"; pixel_x = 0; pixel_y = -27},/obj/structure/cable,/turf/simulated/floor{icon_state = "blue"; dir = 6},/area/medical/surgeryobs) "btM" = (/turf/simulated/floor{icon_state = "bluecorner"},/area/medical/surgeryobs) "btN" = (/obj/structure/stool/bed/chair,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor,/area/medical/surgeryobs) @@ -3736,7 +3736,7 @@ "btR" = (/obj/machinery/light/small{dir = 4},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/asmaint) "btS" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/asmaint) "btT" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/patient_wing) -"btU" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/toxins/misc_lab) +"btU" = (/turf/simulated/wall,/area/engine/engine_eva) "btV" = (/obj/structure/closet/wardrobe/atmospherics_yellow,/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/crew_quarters/sleep/engi) "btW" = (/obj/structure/closet/wardrobe/engineering_yellow,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/crew_quarters/sleep/engi) "btX" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{autoclose = 0; name = "Diagnostics Room"; req_access_txt = "5"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{dir = 8; icon_state = "whitered"},/area/medical/sleeper) @@ -3745,11 +3745,11 @@ "bua" = (/obj/machinery/power/apc{dir = 4; name = "Mech Bay APC"; pixel_x = 26; pixel_y = 0},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor,/area/assembly/chargebay) "bub" = (/obj/structure/table,/obj/item/weapon/circular_saw,/obj/item/weapon/scalpel{pixel_y = 12},/turf/simulated/floor{dir = 2; icon_state = "whitecorner"},/area/assembly/robotics) "buc" = (/obj/structure/table,/obj/item/device/flash/synthetic,/obj/item/device/flash/synthetic,/obj/item/device/flash/synthetic,/obj/item/device/flash/synthetic,/obj/item/device/flash/synthetic,/obj/item/device/flash/synthetic,/obj/structure/window/reinforced/tinted{dir = 4; icon_state = "twindow"},/obj/item/device/mmi/posibrain,/obj/item/device/robotanalyzer,/turf/simulated/floor{dir = 8; icon_state = "whitecorner"},/area/assembly/robotics) -"bud" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/evahallway) +"bud" = (/obj/structure/window/reinforced,/obj/machinery/door/window/westleft{name = "Inflatable Barriers"; req_one_access_txt = "11;24"},/obj/structure/rack{layer = 2.6},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/briefcase/inflatable,/turf/simulated/floor{dir = 2; icon_state = "yellowcorner"},/area/hallway/primary/aft) "bue" = (/obj/structure/table,/obj/item/weapon/crowbar,/obj/item/device/radio/headset/headset_sci{pixel_x = -3},/obj/item/device/multitool{pixel_x = 3},/obj/item/device/multitool{pixel_x = 3},/obj/item/clothing/glasses/welding,/obj/item/clothing/glasses/welding,/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics) "buf" = (/obj/machinery/light{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor{dir = 2; icon_state = "whitecorner"},/area/medical/research{name = "Research Division"}) "bug" = (/obj/effect/landmark{name = "lightsout"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor{icon_state = "whitehall"; dir = 2},/area/medical/research{name = "Research Division"}) -"buh" = (/obj/machinery/power/apc{dir = 4; name = "EVA Hallway APC"; pixel_x = 25; pixel_y = 0},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/evahallway) +"buh" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/wall,/area/engine/engine_eva) "bui" = (/turf/simulated/wall,/area/toxins/lab) "buj" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/toxins/lab) "buk" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/engine/chiefs_office) @@ -3810,12 +3810,12 @@ "bvn" = (/obj/machinery/atmospherics/portables_connector{dir = 1; name = "Connector Port (Air Supply)"},/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor{icon_state = "delivery"},/area/medical/sleeper) "bvo" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor,/area/medical/sleeper) "bvp" = (/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = -28},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/stool/bed/roller,/turf/simulated/floor,/area/medical/sleeper) -"bvq" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor,/area/medical/virologyaccess) +"bvq" = (/turf/simulated/wall/r_wall,/area/engine/engine_eva) "bvr" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "dark"},/area/medical/biostorage) "bvs" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/table,/obj/item/weapon/storage/box/lights/mixed,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 0; pixel_y = 22},/turf/simulated/floor{icon_state = "dark"},/area/medical/biostorage) "bvt" = (/obj/structure/table,/obj/machinery/computer/med_data/laptop,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor{dir = 9; icon_state = "whitered"},/area/medical/patient_c) "bvu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor{dir = 1; icon_state = "whitered"},/area/medical/patient_c) -"bvv" = (/turf/simulated/floor{icon_state = "white"},/area/medical/genetics) +"bvv" = (/turf/simulated/floor{icon_state = "floorgrime"},/area/medical/genetics) "bvw" = (/obj/machinery/power/apc{dir = 4; name = "Medbay APC"; pixel_x = 25},/obj/structure/cable,/obj/machinery/iv_drip,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 5; icon_state = "whitered"},/area/medical/patient_c) "bvx" = (/obj/machinery/power/apc{dir = 1; name = "Recovery Ward APC"; pixel_y = 26},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/iv_drip,/obj/machinery/light_switch{pixel_x = 22; pixel_y = 0},/turf/simulated/floor{dir = 5; icon_state = "whitered"},/area/medical/ward) "bvy" = (/obj/structure/table,/turf/simulated/floor,/area/assembly/chargebay) @@ -3862,9 +3862,9 @@ "bwn" = (/obj/machinery/message_server,/turf/simulated/floor/bluegrid,/area/server) "bwo" = (/obj/structure/table/reinforced,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd,/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/engine/chiefs_office) "bwp" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/obj/item/device/radio/intercom{broadcasting = 0; name = "Station Intercom (General)"; pixel_y = 20},/turf/simulated/floor{icon_state = "dark"},/area/server) -"bwq" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/evahallway) -"bwr" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/maintenance/evahallway) -"bws" = (/turf/simulated/wall,/area/maintenance/evahallway) +"bwq" = (/obj/machinery/airlock_sensor{command = "cycle_interior"; frequency = 1379; id_tag = "eng_eva_int_sensor"; master_tag = "eng_eva_airlock"; pixel_x = 0; pixel_y = 25; req_access_txt = "13"},/turf/simulated/floor{icon_state = "floorgrime"},/area/engine/engine_eva) +"bwr" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plating,/area/engine/engine_eva) +"bws" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/light/small{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/plating,/area/engine/engine_eva) "bwt" = (/obj/machinery/door/airlock/glass_command{name = "Chief Engineer"; req_access_txt = "56"},/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/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 1; layer = 2.4; name = "Engineering Firelock"},/turf/simulated/floor,/area/engine/chiefs_office) "bwu" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/item/device/radio/intercom{broadcasting = 0; name = "Station Intercom (General)"; pixel_y = 20},/obj/structure/stool/bed/chair/office/dark{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/comms{name = "\improper Cyborg Station"}) "bwv" = (/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/hidden/scrubbers{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "yellowcorner"},/area/hallway/primary/aft) @@ -3874,7 +3874,7 @@ "bwz" = (/obj/machinery/hologram/holopad,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/teleporter) "bwA" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/item/device/radio/beacon,/turf/simulated/floor,/area/teleporter) "bwB" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/teleporter) -"bwC" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/teleporter) +"bwC" = (/obj/machinery/embedded_controller/radio/airlock_controller{tag_airpump = "eng_eva_pump"; tag_exterior_door = "eng_eva_outer"; frequency = 1379; id_tag = "eng_eva_airlock"; tag_interior_door = "eng_eva_inner"; name = "Engineering Airlock Console"; pixel_y = 25; req_access_txt = "13"; tag_chamber_sensor = "eng_eva_sensor"},/obj/machinery/atmospherics/pipe/manifold/hidden{tag = "icon-manifold-f (EAST)"; icon_state = "manifold-f"; dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/engine/engine_eva) "bwD" = (/obj/structure/stool/bed/chair{dir = 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,/area/engine/chiefs_office) "bwE" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/patient_wing) "bwF" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/wall,/area/medical/patient_c) @@ -3891,12 +3891,12 @@ "bwQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/medical/patient_wing) "bwR" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) "bwS" = (/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/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/hallway/primary/aft) -"bwT" = (/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/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) +"bwT" = (/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "eng_eva_sensor"; pixel_x = 0; pixel_y = 25},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "eng_eva_pump"},/turf/simulated/floor{dir = 8; icon_state = "floorgrimecaution"},/area/engine/engine_eva) "bwU" = (/turf/simulated/wall,/area/medical/psych) "bwV" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/sortjunction{dir = 2; icon_state = "pipe-j2s"; sortType = 13},/turf/simulated/floor/plating,/area/maintenance/asmaint) "bwW" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "dark"},/area/medical/biostorage) "bwX" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/closet/crate{icon_state = "crateopen"; name = "Grenade Crate"; opened = 1},/obj/item/weapon/grenade/chem_grenade,/obj/item/weapon/grenade/chem_grenade,/obj/item/weapon/grenade/chem_grenade,/obj/item/weapon/grenade/chem_grenade,/obj/item/device/assembly/igniter,/obj/item/device/assembly/igniter,/obj/item/device/assembly/igniter,/obj/item/device/assembly/timer,/obj/item/device/assembly/timer,/obj/item/device/assembly/timer,/turf/simulated/floor{icon_state = "dark"},/area/medical/biostorage) -"bwY" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor,/area/medical/virologyaccess) +"bwY" = (/obj/machinery/airlock_sensor{command = "cycle_exterior"; frequency = 1379; id_tag = "eng_eva_ext_sensor"; master_tag = "eng_eva_airlock"; pixel_x = 0; pixel_y = 25; req_access_txt = "13"},/turf/simulated/floor/plating/airless,/area/engine/engine_eva) "bwZ" = (/turf/simulated/floor{icon_state = "white"},/area/medical/patient_c) "bxa" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/rd,/obj/item/weapon/storage/secure/safe{pixel_x = 32},/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/crew_quarters/sleep/engi) "bxb" = (/turf/simulated/wall,/area/assembly/chargebay) @@ -3908,8 +3908,8 @@ "bxh" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor{dir = 5; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) "bxi" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) "bxj" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/snacks/chips,/turf/simulated/floor/carpet,/area/engine/break_room) -"bxk" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/wall,/area/maintenance/evahallway) -"bxl" = (/turf/simulated/wall/r_wall,/area/maintenance/evahallway) +"bxk" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating/airless,/area/engine/engine_eva) +"bxl" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall,/area/maintenance/asmaint) "bxm" = (/obj/machinery/camera{c_tag = "Research Division North"; dir = 1; network = list("SS13","Research")},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) "bxn" = (/obj/machinery/door/firedoor/border_only{dir = 4; layer = 2.6; name = "Firelock East"},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) "bxo" = (/obj/machinery/door/window/eastright{base_state = "left"; dir = 8; icon_state = "left"; name = "Research Division Delivery"; req_access_txt = "47"},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor{icon_state = "delivery"},/area/medical/research{name = "Research Division"}) @@ -3956,7 +3956,7 @@ "byd" = (/turf/simulated/floor{dir = 6; icon_state = "warning"},/area/teleporter) "bye" = (/obj/machinery/shieldwallgen,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "bot"},/area/teleporter) "byf" = (/obj/machinery/shieldwallgen,/turf/simulated/floor{icon_state = "bot"},/area/teleporter) -"byg" = (/obj/structure/closet/crate,/turf/simulated/floor,/area/teleporter) +"byg" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/asmaint) "byh" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/medical,/obj/machinery/vending/wallmed1{name = "NanoMed Wall"; pixel_x = 25; pixel_y = 0; req_access_txt = "0"},/obj/machinery/camera{c_tag = "Medbay Patient C"; dir = 8; network = list("SS13")},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 4; icon_state = "whitered"},/area/medical/patient_c) "byi" = (/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = -27},/obj/structure/stool/bed/chair/office/dark{dir = 1},/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor{dir = 8; icon_state = "whitered"},/area/medical/patient_c) "byj" = (/obj/machinery/light/small{dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) @@ -3965,7 +3965,7 @@ "bym" = (/turf/simulated/wall,/area/medical/sleeper) "byn" = (/obj/structure/table/woodentable,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/light_switch{pixel_x = -4},/obj/machinery/door_control{id = "psych"; name = "Mental Health Privacy Shutters Control"; pixel_x = 6; pixel_y = 0},/turf/simulated/floor/wood,/area/medical/psych) "byo" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/light/small,/turf/simulated/floor/plating,/area/maintenance/asmaint2) -"byp" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor,/area/medical/virologyaccess) +"byp" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor,/area/hallway/primary/central) "byq" = (/obj/structure/stool/bed/chair/office/dark{dir = 1},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/wood,/area/medical/psych) "byr" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) "bys" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/camera{c_tag = "Medbay Surgery Access"; dir = 4; network = list("SS13")},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) @@ -4025,7 +4025,7 @@ "bzu" = (/turf/simulated/floor{dir = 4; icon_state = "loadingarea"},/area/hallway/primary/central) "bzv" = (/obj/structure/filingcabinet/chestdrawer,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/turf/simulated/floor{icon_state = "blue"; dir = 10},/area/crew_quarters/heads) "bzw" = (/obj/machinery/requests_console{announcementConsole = 1; department = "Head of Personnel's Desk"; departmentType = 5; name = "Head of Personnel RC"; pixel_y = -30},/obj/machinery/camera{c_tag = "Head of Personnel's Office"; dir = 1},/turf/simulated/floor,/area/crew_quarters/heads) -"bzx" = (/obj/structure/table,/obj/item/device/eftpos{eftpos_name = "HoP EFTPOS scanner"},/turf/simulated/floor,/area/crew_quarters/heads) +"bzx" = (/obj/item/weapon/stamp{pixel_x = -3; pixel_y = 3},/obj/item/weapon/stamp/denied{pixel_x = 4; pixel_y = -2},/obj/structure/table,/obj/item/weapon/paper_bin/carbon,/turf/simulated/floor,/area/quartermaster/office) "bzy" = (/obj/machinery/light_switch{pixel_x = 27},/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/crew_quarters/heads) "bzz" = (/obj/machinery/blackbox_recorder,/turf/simulated/floor/bluegrid,/area/server) "bzA" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor{dir = 4; icon_state = "whiteyellowfull"},/area/crew_quarters/sleep/engi) @@ -4044,23 +4044,23 @@ "bzN" = (/obj/structure/rack,/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/gas,/turf/simulated/floor/plating,/area/teleporter) "bzO" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = -27},/turf/simulated/floor{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/medical/medbay2) "bzP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/junction{icon_state = "pipe-j2"; dir = 2},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) -"bzQ" = (/turf/simulated/floor{tag = "icon-whitepurple (NORTH)"; icon_state = "whitepurple"; dir = 1},/area/medical/genetics) -"bzR" = (/turf/simulated/floor{dir = 1; icon_state = "whitepurplecorner"},/area/medical/genetics) +"bzQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/medical/genetics) +"bzR" = (/turf/simulated/floor/plating,/area/medical/genetics) "bzS" = (/obj/structure/closet/secure_closet/engineering_chief{req_access_txt = "0"},/obj/item/weapon/tank/emergency_oxygen/engi,/turf/simulated/floor,/area/engine/chiefs_office) "bzT" = (/obj/structure/noticeboard{pixel_y = 28},/obj/structure/table/woodentable,/obj/item/weapon/book/manual/medical_diagnostics_manual{pixel_y = 7},/obj/item/device/radio{anchored = 1; broadcasting = 0; canhear_range = 4; frequency = 1487; icon = 'icons/obj/items.dmi'; icon_state = "red_phone"; listening = 1; name = "Break Room Emergency Phone"},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/medical/medbreak) "bzU" = (/obj/machinery/light{dir = 1},/obj/structure/bookcase/manuals/medical,/obj/item/weapon/book/manual/stasis,/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/medical/medbreak) "bzV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor,/area/engine/chiefs_office) -"bzW" = (/mob/living/carbon/monkey,/turf/simulated/floor{tag = "icon-whitepurple (NORTHWEST)"; icon_state = "whitepurple"; dir = 9},/area/medical/genetics) +"bzW" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor{icon_state = "floorgrime"},/area/medical/genetics) "bzX" = (/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = -27},/obj/item/roller,/turf/simulated/floor{dir = 8; icon_state = "whitered"},/area/medical/sleeper) "bzY" = (/obj/machinery/vending/cigarette,/turf/simulated/floor{icon_state = "dark"},/area/hallway/primary/central) "bzZ" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/structure/table,/obj/item/weapon/book/manual/medical_diagnostics_manual{pixel_y = 7},/turf/simulated/floor{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/medical/cmo) "bAa" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "white"},/area/medical/cmo) "bAb" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/cmo) "bAc" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{autoclose = 0; name = "Acute One"; req_access_txt = "5"},/turf/simulated/floor{dir = 8; icon_state = "whitered"},/area/medical/sleeper) -"bAd" = (/obj/machinery/airlock_sensor{command = "cycle_interior"; frequency = 1379; id_tag = "eng_eva_int_sensor"; master_tag = "eng_eva_airlock"; pixel_x = 0; pixel_y = 25; req_access_txt = "13"},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/evahallway) +"bAd" = (/obj/machinery/light,/obj/machinery/atmospherics/unary/vent_scrubber,/turf/simulated/floor,/area/hallway/primary/central) "bAe" = (/obj/machinery/door_control{id = "acutesep"; name = "Acute Separation Shutters"; pixel_y = -25; req_access_txt = "5"},/turf/simulated/floor{icon_state = "white"},/area/medical/sleeper) -"bAf" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plating,/area/maintenance/evahallway) -"bAg" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/light/small{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/plating,/area/maintenance/evahallway) +"bAf" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/hallway/primary/central) +"bAg" = (/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/hidden/supply,/turf/simulated/floor,/area/hallway/primary/central) "bAh" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/engine/chiefs_office) "bAi" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/disposalpipe/segment,/obj/machinery/firealarm{dir = 4; layer = 3.3; pixel_x = 26},/turf/simulated/floor,/area/engine/chiefs_office) "bAj" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/engine/chiefs_office) @@ -4073,12 +4073,12 @@ "bAq" = (/turf/simulated/wall,/area/medical/genetics) "bAr" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) "bAs" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/light,/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) -"bAt" = (/obj/machinery/embedded_controller/radio/airlock_controller{tag_airpump = "eng_eva_pump"; tag_exterior_door = "eng_eva_outer"; frequency = 1379; id_tag = "eng_eva_airlock"; tag_interior_door = "eng_eva_inner"; name = "Engineering Airlock Console"; pixel_y = 25; req_access_txt = "13"; tag_chamber_sensor = "eng_eva_sensor"},/obj/machinery/atmospherics/pipe/manifold/hidden{tag = "icon-manifold-f (EAST)"; icon_state = "manifold-f"; dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/evahallway) +"bAt" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor,/area/hallway/primary/central) "bAu" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) "bAv" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor{dir = 9; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) "bAw" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/crew_quarters/hor) "bAx" = (/obj/structure/table,/obj/item/weapon/folder/white,/obj/item/weapon/stamp/rd{pixel_x = 3; pixel_y = -2},/obj/item/weapon/paper/monitorkey,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/hor) -"bAy" = (/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "eng_eva_sensor"; pixel_x = 0; pixel_y = 25},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "eng_eva_pump"},/turf/simulated/floor{dir = 8; icon_state = "floorgrimecaution"},/area/maintenance/evahallway) +"bAy" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/hallway/primary/central) "bAz" = (/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{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/hor) "bAA" = (/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor{dir = 8; icon_state = "warnwhite"},/area/crew_quarters/hor) "bAB" = (/obj/structure/lamarr,/obj/machinery/light{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/hor) @@ -4099,9 +4099,9 @@ "bAQ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/quartermaster/storage) "bAR" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/quartermaster/storage) "bAS" = (/turf/simulated/wall,/area/quartermaster/miningdock) -"bAT" = (/obj/machinery/airlock_sensor{command = "cycle_exterior"; frequency = 1379; id_tag = "eng_eva_ext_sensor"; master_tag = "eng_eva_airlock"; pixel_x = 0; pixel_y = 25; req_access_txt = "13"},/turf/simulated/floor/plating/airless,/area/maintenance/evahallway) +"bAT" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; icon_state = "off"; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor,/area/hallway/primary/central) "bAU" = (/turf/simulated/wall,/area/quartermaster/qm) -"bAV" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating/airless,/area/maintenance/evahallway) +"bAV" = (/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/wall/r_wall,/area/toxins/telesci) "bAW" = (/obj/machinery/computer/supplycomp,/turf/simulated/floor,/area/quartermaster/qm) "bAX" = (/obj/machinery/computer/security/mining,/turf/simulated/floor,/area/quartermaster/qm) "bAY" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor,/area/quartermaster/qm) @@ -4115,7 +4115,7 @@ "bBg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor/border_only,/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor,/area/hallway/primary/central) "bBh" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall,/area/janitor) "bBi" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/aft) -"bBj" = (/turf/simulated/floor{tag = "icon-whitepurple (EAST)"; icon_state = "whitepurple"; dir = 4},/area/medical/genetics) +"bBj" = (/obj/machinery/camera{c_tag = "Genetics Aft"; dir = 1; network = list("SS13")},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plating,/area/medical/genetics) "bBk" = (/obj/machinery/vending/medical,/obj/machinery/light_switch{pixel_x = 22; pixel_y = 0},/turf/simulated/wall,/area/medical/sleeper) "bBl" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "acutesep"; name = "Acute Separation Shutters"; opacity = 0},/turf/simulated/floor{tag = "icon-whitebluefull"; icon_state = "whitebluefull"},/area/medical/sleeper) "bBm" = (/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/structure/closet/secure_closet/medical_wall{name = "O- Blood Locker"},/turf/simulated/wall,/area/medical/sleeper) @@ -4143,7 +4143,7 @@ "bBI" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/medical/medbreak) "bBJ" = (/obj/machinery/door/window/westleft{name = "Janitoral Delivery"; req_access_txt = "26"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "delivery"},/area/janitor) "bBK" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/janitor) -"bBL" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) +"bBL" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "misclab"; name = "Test Chamber Blast Doors"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/engine,/area/toxins/telesci) "bBM" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "Janitor"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/structure/plasticflaps{opacity = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "bot"},/area/janitor) "bBN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall,/area/medical/surgery) "bBO" = (/turf/simulated/wall/r_wall,/area/toxins/server) @@ -4189,19 +4189,19 @@ "bCC" = (/obj/structure/sign/securearea{pixel_y = 32},/turf/simulated/floor{icon_state = "warningcorner"; dir = 4},/area/hallway/primary/central) "bCD" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor,/area/hallway/primary/central) "bCE" = (/obj/machinery/camera{c_tag = "Central Primary Hallway South"; dir = 2},/turf/simulated/floor,/area/hallway/primary/central) -"bCF" = (/obj/machinery/camera{c_tag = "Genetics Aft"; dir = 1; network = list("SS13")},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor{dir = 2; icon_state = "whitepurple"},/area/medical/genetics) +"bCF" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/plating,/area/medical/genetics) "bCG" = (/obj/machinery/door/firedoor/border_only{dir = 8; name = "hazard door west"},/turf/simulated/floor,/area/hallway/primary/central) "bCH" = (/obj/machinery/atm{pixel_y = 32},/turf/simulated/floor,/area/hallway/primary/central) -"bCI" = (/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor,/area/hallway/primary/central) -"bCJ" = (/mob/living/carbon/monkey/tajara,/turf/simulated/floor{dir = 2; icon_state = "whitepurple"},/area/medical/genetics) -"bCK" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor{dir = 2; icon_state = "whitepurple"},/area/medical/genetics) -"bCL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/mob/living/carbon/monkey/skrell,/turf/simulated/floor{dir = 2; icon_state = "whitepurple"},/area/medical/genetics) -"bCM" = (/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/mob/living/carbon/monkey,/turf/simulated/floor{tag = "icon-whitepurple (SOUTHWEST)"; icon_state = "whitepurple"; dir = 10},/area/medical/genetics) +"bCI" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "misclab"; name = "Test Chamber Blast Doors"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor/engine,/area/toxins/telesci) +"bCJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/medical/genetics) +"bCK" = (/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/medical/genetics) +"bCL" = (/obj/machinery/light,/turf/simulated/floor/plating,/area/medical/genetics) +"bCM" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/plating,/area/medical/genetics) "bCN" = (/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/medical/medbreak) "bCO" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/obj/machinery/light_switch{pixel_x = 22; pixel_y = 0},/obj/structure/stool/bed,/obj/item/weapon/bedsheet/blue,/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/medical/medbreak) -"bCP" = (/obj/machinery/light,/mob/living/carbon/monkey/unathi,/turf/simulated/floor{tag = "icon-whitepurple (SOUTHEAST)"; icon_state = "whitepurple"; dir = 6},/area/medical/genetics) -"bCQ" = (/turf/simulated/floor{dir = 2; icon_state = "whitepurple"},/area/medical/genetics) -"bCR" = (/obj/structure/stool/bed/chair/office/dark,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor{tag = "icon-whitepurple (EAST)"; icon_state = "whitepurple"; dir = 4},/area/medical/genetics) +"bCP" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_Toxins = 0},/turf/simulated/floor/plating,/area/medical/genetics) +"bCQ" = (/obj/structure/window/reinforced,/obj/structure/computerframe,/turf/simulated/floor{icon_state = "floorgrime"},/area/medical/genetics) +"bCR" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/medical/genetics) "bCS" = (/obj/machinery/power/apc{dir = 8; name = "Misc Research APC"; pixel_x = -25},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/light{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 5; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) "bCT" = (/turf/simulated/wall/r_wall,/area/maintenance/asmaint) "bCU" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "cmooffice"; name = "CMO Office Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/cmo) @@ -4243,7 +4243,7 @@ "bDE" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/medical/genetics) "bDF" = (/obj/structure/rack{dir = 1},/obj/item/weapon/pickaxe{pixel_x = 5},/obj/item/weapon/shovel{pixel_x = -5},/turf/simulated/floor,/area/quartermaster/miningdock) "bDG" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/quartermaster/qm) -"bDH" = (/obj/structure/stool/bed/chair/office/dark,/turf/simulated/floor{tag = "icon-whitepurple (WEST)"; icon_state = "whitepurple"; dir = 8},/area/medical/genetics) +"bDH" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/constructable_frame/machine_frame,/turf/simulated/floor/plating,/area/medical/genetics) "bDI" = (/obj/structure/table,/obj/item/weapon/folder/yellow,/obj/item/weapon/pen{pixel_x = 4; pixel_y = 4},/obj/item/weapon/pen/red{pixel_x = 2; pixel_y = 6},/turf/simulated/floor,/area/quartermaster/qm) "bDJ" = (/obj/structure/stool/bed/chair/office/light,/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact-f (EAST)"; icon_state = "intact-f"; dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/toxins/server) "bDK" = (/obj/structure/disposalpipe/segment,/obj/machinery/camera{c_tag = "Quartermaster's Office"; dir = 8},/turf/simulated/floor,/area/quartermaster/qm) @@ -4255,10 +4255,10 @@ "bDQ" = (/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/hallway/primary/central) "bDR" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=CHE"; location = "AIE"},/turf/simulated/floor,/area/hallway/primary/central) "bDS" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor,/area/hallway/primary/central) -"bDT" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/hallway/primary/central) +"bDT" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 2; frequency = 1441; icon_state = "on"; id = "n2_in"; on = 1},/turf/simulated/floor/engine,/area/toxins/telesci) "bDU" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/machinery/light/small{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact-f (NORTHWEST)"; icon_state = "intact-f"; dir = 9},/turf/simulated/floor{icon_state = "dark"},/area/toxins/server) -"bDV" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/medical/genetics) -"bDW" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_Toxins = 0},/turf/simulated/floor{icon_state = "white"},/area/medical/genetics) +"bDV" = (/obj/item/weapon/shard,/turf/simulated/floor{icon_state = "floorgrime"},/area/medical/genetics) +"bDW" = (/obj/structure/computerframe,/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor{icon_state = "floorgrime"},/area/medical/genetics) "bDX" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=HOP"; location = "CHE"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor,/area/hallway/primary/central) "bDY" = (/obj/structure/disposalpipe/junction{dir = 8},/turf/simulated/floor,/area/hallway/primary/central) "bDZ" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/camera{c_tag = "Central Hallway South-East"; dir = 8},/turf/simulated/floor,/area/hallway/primary/central) @@ -4272,8 +4272,8 @@ "bEh" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "cmooffice"; name = "CMO Office Privacy Shutters"; opacity = 0},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/medical/cmo) "bEi" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "cmooffice"; name = "CMO Office Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/cmo) "bEj" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_command{id_tag = "cmodoor"; name = "Chief Medical Officer"; req_access_txt = "40"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/medical/cmo) -"bEk" = (/obj/machinery/computer/scan_consolenew,/obj/structure/window/reinforced,/turf/simulated/floor{tag = "icon-whitepurple (EAST)"; icon_state = "whitepurple"; dir = 4},/area/medical/genetics) -"bEl" = (/obj/machinery/dna_scannernew,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/medical/genetics) +"bEk" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock/glass_medical{id_tag = "GeneticsDoor"; name = "Cloning Laboratory"; req_access_txt = "5"},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) +"bEl" = (/obj/item/weapon/table_parts,/turf/simulated/floor{icon_state = "floorgrime"},/area/medical/genetics) "bEm" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; external_pressure_bound = 0; icon_state = "in"; 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) "bEn" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor,/area/hallway/primary/central) "bEo" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/hallway/primary/central) @@ -4285,16 +4285,16 @@ "bEu" = (/obj/machinery/light,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor,/area/hallway/primary/central) "bEv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/hallway/primary/central) "bEw" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor,/area/hallway/primary/central) -"bEx" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/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/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor,/area/hallway/primary/central) +"bEx" = (/obj/machinery/sparker{id = "Xenobio"; pixel_x = -25},/turf/simulated/floor/engine,/area/toxins/telesci) "bEy" = (/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/toxins/storage) "bEz" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/toxins/storage) -"bEA" = (/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/hidden/supply{dir = 6},/turf/simulated/floor,/area/hallway/primary/central) +"bEA" = (/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor/engine,/area/toxins/telesci) "bEB" = (/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{icon_state = "white"},/area/medical/research{name = "Research Division"}) "bEC" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{dir = 9; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) "bED" = (/obj/machinery/door/airlock/glass_command{name = "Research Director"; req_access_txt = "30"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/hor) "bEE" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/hor) "bEF" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/hor) -"bEG" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/hallway/primary/central) +"bEG" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/medical/genetics) "bEH" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_Toxins = 0},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/hor) "bEI" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/hor) "bEJ" = (/obj/structure/closet/crate,/obj/item/device/multitool,/obj/item/device/multitool,/obj/item/device/assembly/prox_sensor,/obj/item/device/flashlight,/turf/simulated/floor/plating,/area/maintenance/asmaint2) @@ -4332,7 +4332,7 @@ "bFp" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor,/area/hallway/primary/central) "bFq" = (/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = -32},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 8; name = "hazard door west"},/turf/simulated/floor,/area/hallway/primary/central) "bFr" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor,/area/hallway/primary/central) -"bFs" = (/obj/machinery/light,/turf/simulated/floor,/area/hallway/primary/central) +"bFs" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/teleporter) "bFt" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor{dir = 4; icon_state = "whiteblue"; tag = "icon-whitehall (WEST)"},/area/medical/medbay2) "bFu" = (/turf/simulated/floor{icon_state = "white_1"},/area/medical/medbay2) "bFv" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/medical/cmo) @@ -4365,9 +4365,9 @@ "bFW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/wall/r_wall,/area/crew_quarters/hor) "bFX" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "bFY" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint2) -"bFZ" = (/obj/machinery/dna_scannernew,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/medical/genetics) -"bGa" = (/obj/machinery/door/window/southright{dir = 1; name = "Primate Pen"; req_access_txt = "5;9"},/turf/simulated/floor{icon_state = "white"},/area/medical/genetics) -"bGb" = (/obj/machinery/computer/scan_consolenew,/obj/structure/window/reinforced,/turf/simulated/floor{tag = "icon-whitepurple (WEST)"; icon_state = "whitepurple"; dir = 8},/area/medical/genetics) +"bFZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/item/light_fixture_frame,/turf/simulated/floor/plating,/area/medical/genetics) +"bGa" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/medical/genetics) +"bGb" = (/obj/item/light_fixture_frame,/turf/simulated/floor{icon_state = "floorgrime"},/area/medical/genetics) "bGc" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/medical/patient_a) "bGd" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/medical,/obj/machinery/vending/wallmed1{name = "NanoMed Wall"; pixel_x = 25; pixel_y = 0; req_access_txt = "0"},/obj/machinery/camera{c_tag = "Medbay Patient A"; dir = 8; network = list("SS13")},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor{dir = 4; icon_state = "whitered"},/area/medical/patient_a) "bGe" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/hor) @@ -4484,12 +4484,12 @@ "bIl" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/medical/medbay2) "bIm" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) "bIn" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "cmooffice"; name = "CMO Office Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/cmo) -"bIo" = (/obj/machinery/shieldwallgen{req_access = list(55)},/turf/simulated/floor/engine,/area/toxins/misc_lab) -"bIp" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "misclab"; name = "Test Chamber Blast Doors"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/engine,/area/toxins/misc_lab) -"bIq" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "misclab"; name = "Test Chamber Blast Doors"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/engine,/area/toxins/misc_lab) +"bIo" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock East"},/obj/machinery/door/airlock/command{name = "Teleport Access"; req_access_txt = "17"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/teleporter) +"bIp" = (/obj/machinery/light_switch{pixel_x = 27},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor,/area/teleporter) +"bIq" = (/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"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/plating,/area/teleporter) "bIr" = (/obj/machinery/power/apc{dir = 4; name = "Medbay APC"; pixel_x = 25},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/iv_drip,/turf/simulated/floor{dir = 6; icon_state = "whitered"},/area/medical/patient_b) "bIs" = (/turf/simulated/floor{dir = 3; icon_state = "whitered"},/area/medical/patient_b) -"bIt" = (/obj/machinery/sparker{id = "Xenobio"; pixel_x = -25},/turf/simulated/floor/engine,/area/toxins/misc_lab) +"bIt" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{color = "#4444FF"; dir = 4},/turf/simulated/wall/r_wall,/area/teleporter) "bIu" = (/obj/structure/stool,/obj/effect/landmark/start{name = "Geneticist"},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/medical/medbreak) "bIv" = (/obj/machinery/computer/med_data,/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/medical/medbreak) "bIw" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall,/area/medical/genetics) @@ -4664,7 +4664,7 @@ "bLJ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/medical/genetics) "bLK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor{icon_state = "white"},/area/toxins/mixing) "bLL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/toxins/mixing) -"bLM" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock/glass_medical{id_tag = "GeneticsDoor"; name = "Cloning Laboratory"; req_access_txt = "5"},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) +"bLM" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/crew_quarters/captain) "bLN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 2; icon_state = "whiteyellow"},/area/medical/chemistry) "bLO" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/extinguisher_cabinet{pixel_x = -24},/turf/simulated/floor{dir = 5; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) "bLP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry) @@ -4717,7 +4717,7 @@ "bMK" = (/obj/machinery/door/airlock/engineering{name = "Tech Storage"; req_access_txt = "23"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/storage/tech) "bML" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Medical Equipment"; req_access_txt = "5"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) "bMM" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/assembly/robotics) -"bMN" = (/turf/simulated/floor{dir = 2; icon_state = "yellowcorner"},/area/hallway/primary/aft) +"bMN" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/medical/genetics) "bMO" = (/obj/machinery/door/airlock/maintenance{name = "Custodial Maintenance"; req_access_txt = "26"},/turf/simulated/floor/plating,/area/janitor) "bMP" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/medical/medbay3) "bMQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay3) @@ -4733,7 +4733,7 @@ "bNa" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay3) "bNb" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) "bNc" = (/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/manifold/hidden/supply{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) -"bNd" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock East"},/obj/machinery/door/airlock/command{name = "Teleport Access"; req_access_txt = "17"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/teleporter) +"bNd" = (/obj/machinery/newscaster{pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/hallway/primary/central) "bNe" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor{dir = 2; icon_state = "whitepurplecorner"},/area/medical/medbay2) "bNf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) "bNg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall/r_wall,/area/turret_protected/ai_upload) @@ -4799,9 +4799,9 @@ "bOo" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall/r_wall,/area/server) "bOp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/wall/r_wall,/area/server) "bOq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/wall/r_wall,/area/server) -"bOr" = (/obj/machinery/light_switch{pixel_x = 27},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/teleporter) +"bOr" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/medical/genetics) "bOs" = (/obj/machinery/computer/operating,/turf/simulated/floor{icon_state = "white"},/area/medical/surgery) -"bOt" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/wall/r_wall,/area/teleporter) +"bOt" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/medical/genetics) "bOu" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/sign/examroom{pixel_y = 32},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) "bOv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/wall/r_wall,/area/turret_protected/ai_upload) "bOw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/wall/r_wall,/area/comms{name = "\improper Cyborg Station"}) @@ -4864,7 +4864,7 @@ "bPB" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/sortjunction{dir = 2; icon_state = "pipe-j2s"; sortType = 14},/turf/simulated/floor/plating,/area/storage/emergency3) "bPC" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "29"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/assembly/chargebay) "bPD" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/assembly/chargebay) -"bPE" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/wall/r_wall,/area/teleporter) +"bPE" = (/obj/structure/closet/crate,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/teleporter) "bPF" = (/obj/structure/table,/obj/item/weapon/packageWrap,/obj/item/weapon/hand_labeler,/turf/simulated/floor{dir = 1; icon_state = "whiteyellowcorner"},/area/medical/chemistry) "bPG" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/assembly/chargebay) "bPH" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "bot"},/area/medical/research{name = "Research Division"}) @@ -4879,7 +4879,7 @@ "bPQ" = (/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/medical/medbay2) "bPR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall,/area/medical/medbay3) "bPS" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Medbay Reception"; req_access_txt = "5"},/turf/simulated/floor{tag = "icon-whitebluefull"; icon_state = "whitebluefull"},/area/medical/medbay3) -"bPT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall,/area/crew_quarters/captain) +"bPT" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/bridge/meeting_room) "bPU" = (/obj/machinery/door/firedoor,/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/medical/medbay2) "bPV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/lattice,/turf/space,/area) "bPW" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/wall,/area/crew_quarters/captain) @@ -4922,7 +4922,7 @@ "bQH" = (/obj/machinery/alarm{pixel_y = 25},/turf/simulated/floor{dir = 4; icon_state = "whitecorner"},/area/medical/medbay2) "bQI" = (/obj/machinery/camera{c_tag = "Medbay Fore Starboard"; network = list("SS13")},/obj/item/device/radio/intercom{pixel_y = 25},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) "bQJ" = (/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/obj/machinery/disposal,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/trunk,/turf/simulated/floor{dir = 1; icon_state = "whitecorner"},/area/medical/medbay2) -"bQK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/hallway/primary/central) +"bQK" = (/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 0; pixel_y = -32},/obj/machinery/faxmachine{department = "Bridge"},/obj/structure/table/woodentable,/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor/wood,/area/bridge/meeting_room) "bQL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/hallway/primary/central) "bQM" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/hallway/primary/central) "bQN" = (/obj/machinery/newscaster{pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/hallway/primary/central) @@ -4932,7 +4932,7 @@ "bQR" = (/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/hidden/supply,/turf/simulated/floor,/area/quartermaster/miningdock) "bQS" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor{dir = 1; icon_state = "whitehall_m"; tag = "icon-whitehall_m"},/area/medical/medbay2) "bQT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall,/area/toxins/storage) -"bQU" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/medical/genetics) +"bQU" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{id_tag = "GeneticsDoor"; name = "Cloning Laboratory"; req_access_txt = "5"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/cryo) "bQV" = (/obj/machinery/vending/medical,/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) "bQW" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/tank/oxygen,/obj/item/weapon/tank/oxygen,/obj/item/weapon/storage/belt/utility,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/weapon/extinguisher,/turf/simulated/floor/plating,/area/storage/emergency3) "bQX" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/plating,/area/storage/emergency3) @@ -4940,21 +4940,21 @@ "bQZ" = (/obj/structure/stool/bed/chair/office/light{dir = 8},/obj/effect/landmark/start{name = "Research Director"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/hor) "bRa" = (/obj/item/weapon/storage/box/lights/mixed,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/storage/emergency3) "bRb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/bluegrid,/area/assembly/chargebay) -"bRc" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci) +"bRc" = (/obj/machinery/requests_console{announcementConsole = 1; department = "Bridge"; departmentType = 5; name = "Bridge RC"; pixel_y = -30},/turf/simulated/floor/wood,/area/bridge/meeting_room) "bRd" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/quartermaster/office) "bRe" = (/obj/structure/shuttle/window,/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/escape_pod5/station) "bRf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall/r_wall,/area/assembly/chargebay) "bRg" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/quartermaster/office) "bRh" = (/obj/structure/extinguisher_cabinet{pixel_x = -27},/obj/machinery/light{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/bluegrid,/area/assembly/chargebay) "bRi" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server) -"bRj" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/structure/table,/obj/item/roller,/turf/simulated/floor{tag = "icon-whitepurple (EAST)"; icon_state = "whitepurple"; dir = 4},/area/medical/genetics) +"bRj" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor{icon_state = "floorgrime"},/area/medical/genetics) "bRk" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{req_access_txt = "0"; req_one_access_txt = "9;12;47"},/turf/simulated/floor/plating,/area/maintenance/asmaint) "bRl" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) -"bRm" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/genetics) +"bRm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/medical/genetics) "bRn" = (/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) "bRo" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/medical/research{name = "Research Division"}) "bRp" = (/turf/simulated/floor/engine/vacuum,/area/toxins/mixing) -"bRq" = (/obj/machinery/light{dir = 8},/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{tag = "icon-whitepurple (WEST)"; icon_state = "whitepurple"; dir = 8},/area/medical/genetics) +"bRq" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Morgue"; req_access_txt = "6"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/medical/morgue) "bRr" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/wall/r_wall,/area/crew_quarters/heads) "bRs" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/wall/r_wall,/area/crew_quarters/heads) "bRt" = (/turf/simulated/floor{dir = 8; icon_state = "warnwhite"},/area/toxins/mixing) @@ -5018,7 +5018,7 @@ "bSz" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor{dir = 4; icon_state = "whiteredcorner"},/area/medical/research{name = "Research Division"}) "bSA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = 30},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) "bSB" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "acute1em"; name = "Acute One Entry Shutters"; opacity = 0},/turf/simulated/floor{dir = 3; icon_state = "whitered"},/area/medical/sleeper) -"bSC" = (/turf/simulated/wall/r_wall,/area/ai_monitored/storage/eva{name = "Engineering EVA Storage"}) +"bSC" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/hallway/primary/starboard) "bSD" = (/obj/machinery/door/firedoor,/obj/machinery/power/apc{dir = 8; name = "Emergency Treatment APC"; pixel_x = -25; pixel_y = -6},/obj/structure/cable,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "acute1em"; name = "Acute One Entry Shutters"; opacity = 0},/turf/simulated/floor{dir = 3; icon_state = "whitered"},/area/medical/sleeper) "bSE" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "bot"},/area/medical/research{name = "Research Division"}) "bSF" = (/turf/simulated/wall,/area/construction) @@ -5056,13 +5056,13 @@ "bTl" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall/r_wall,/area/turret_protected/ai) "bTm" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/lattice,/turf/space,/area) "bTn" = (/obj/structure/table/reinforced,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) -"bTo" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor{icon_state = "white"},/area/medical/genetics) +"bTo" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/medical/genetics) "bTp" = (/obj/structure/table/reinforced,/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) "bTq" = (/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) "bTr" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/door/airlock/research{name = "Miscellaneous and Xenobiology Research"; req_access_txt = "47"},/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) -"bTs" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall/r_wall,/area/bridge/meeting_room) +"bTs" = (/obj/machinery/light/small{dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/crew_quarters/captain) "bTt" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall/r_wall,/area/bridge/meeting_room) -"bTu" = (/obj/structure/table,/obj/item/weapon/storage/box/beakers,/obj/item/weapon/storage/box/syringes,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/machinery/light_switch{pixel_x = 22; pixel_y = 0},/turf/simulated/floor{tag = "icon-whitepurple (EAST)"; icon_state = "whitepurple"; dir = 4},/area/medical/genetics) +"bTu" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating,/area/medical/genetics) "bTv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall/r_wall,/area/turret_protected/ai) "bTw" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) "bTx" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/space,/area) @@ -5076,7 +5076,7 @@ "bTF" = (/obj/machinery/light{dir = 1},/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/item/device/radio/intercom{broadcasting = 0; name = "Station Intercom (General)"; pixel_y = 20},/turf/simulated/floor{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/medbay2) "bTG" = (/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; freerange = 0; frequency = 1485; listening = 1; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = 21},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/medbay2) "bTH" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/port) -"bTI" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/bridge/meeting_room) +"bTI" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/crew_quarters/captain) "bTJ" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/wall,/area/quartermaster/office) "bTK" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall,/area/quartermaster/office) "bTL" = (/obj/structure/stool/bed/chair{dir = 4},/obj/effect/landmark/start{name = "Cargo Technician"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/quartermaster/office) @@ -5135,7 +5135,7 @@ "bUM" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating/airless,/area) "bUN" = (/obj/structure/closet/crate/medical,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor{icon_state = "floorgrime"},/area/quartermaster/storage) "bUO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/port) -"bUP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/requests_console{announcementConsole = 1; department = "Bridge"; departmentType = 5; name = "Bridge RC"; pixel_y = -30},/turf/simulated/floor/wood,/area/bridge/meeting_room) +"bUP" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/maintcentral) "bUQ" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = -30; pixel_y = 0},/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/item/device/megaphone,/turf/simulated/floor/wood,/area/crew_quarters/captain) "bUR" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/wall/r_wall,/area/crew_quarters/captain) "bUS" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/door/airlock/multi_tile/glass{autoclose = 0; dir = 2; id_tag = "emerg"; req_access_txt = "5"},/turf/simulated/floor{dir = 6; icon_state = "warning"},/area/medical/sleeper) @@ -5148,7 +5148,7 @@ "bUZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "white"},/area/medical/sleeper) "bVa" = (/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,/area/hallway/primary/central) "bVb" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "medbayquar"; name = "Medbay Emergency Quarantine Shutters"; opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor{dir = 4; icon_state = "loadingarea"; tag = "loading"},/area/medical/sleeper) -"bVc" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor{icon_state = "white"},/area/medical/genetics) +"bVc" = (/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/item/apc_frame,/turf/simulated/floor/plating,/area/medical/genetics) "bVd" = (/obj/structure/table,/obj/item/weapon/hand_labeler,/obj/item/weapon/packageWrap,/obj/machinery/newscaster/security_unit{pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/crew_quarters/heads) "bVe" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/power/apc{dir = 1; name = "Head of Personnel APC"; pixel_y = 24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor,/area/crew_quarters/heads) "bVf" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/turret_protected/ai_upload) @@ -5159,20 +5159,20 @@ "bVk" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall,/area/crew_quarters/captain) "bVl" = (/obj/structure/sign/securearea,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall/r_wall,/area/medical/research{name = "Research Division"}) "bVm" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{id_tag = "GeneticsDoor"; name = "Genetics Laboratory"; req_access_txt = "9"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/genetics) -"bVn" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{icon_state = "white"},/area/medical/genetics) -"bVo" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "white"},/area/medical/genetics) +"bVn" = (/obj/machinery/camera{c_tag = "Genetics Fore"; network = list("SS13")},/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/plating,/area/medical/genetics) +"bVo" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/medical/genetics) "bVp" = (/obj/machinery/atmospherics/pipe/manifold{pipe_color = "red"; dir = 1; icon_state = "manifold-r-f"; level = 1; name = "pipe manifold"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor{icon_state = "white"},/area/medical/genetics_cloning) "bVq" = (/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) "bVr" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/atmos) -"bVs" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{id_tag = "GeneticsDoor"; name = "Cloning Laboratory"; req_access_txt = "5"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/cryo) +"bVs" = (/obj/machinery/door/airlock/maintenance{name = "Captain's Office Maintenance"; req_access_txt = "20"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/crew_quarters/captain) "bVt" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/junction{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/medical/genetics_cloning) "bVu" = (/turf/simulated/wall/r_wall,/area/medical/virology) "bVv" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "white"},/area/medical/genetics_cloning) "bVw" = (/obj/machinery/atmospherics/pipe/simple{icon_state = "intact"; level = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "whiteredcorner"},/area/medical/cryo) "bVx" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{dir = 4; icon_state = "whitered"},/area/medical/medbay2) "bVy" = (/obj/machinery/door/airlock{name = "Private Restroom"; req_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/captain) -"bVz" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/crew_quarters/captain) -"bVA" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/wall,/area/crew_quarters/captain) +"bVz" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/wood,/area/crew_quarters/captain) +"bVA" = (/obj/item/weapon/extinguisher,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/maintcentral) "bVB" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/structure/mirror{pixel_x = 28},/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/captain) "bVC" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/cryo) "bVD" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall,/area/crew_quarters/captain) @@ -5193,9 +5193,9 @@ "bVS" = (/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator) "bVT" = (/obj/machinery/atmospherics/binary/pump,/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator) "bVU" = (/obj/structure/table,/obj/item/weapon/storage/box/bodybags{pixel_x = -1; pixel_y = -2},/obj/machinery/power/apc{dir = 8; name = "Genetics APC"; pixel_x = -25},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor{icon_state = "white"},/area/medical/genetics_cloning) -"bVV" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/genetics) -"bVW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "white"},/area/medical/genetics) -"bVX" = (/obj/structure/table,/obj/item/weapon/storage/box/disks,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{tag = "icon-whitepurple (WEST)"; icon_state = "whitepurple"; dir = 8},/area/medical/genetics) +"bVV" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/item/weapon/table_parts,/turf/simulated/floor/plating,/area/medical/genetics) +"bVW" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/medical/genetics) +"bVX" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/engine/engine_monitoring) "bVY" = (/obj/machinery/conveyor{dir = 4; id = "packageExternal"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/plasticflaps{opacity = 1},/turf/simulated/floor{icon_state = "floorgrime"},/area/quartermaster/office) "bVZ" = (/obj/machinery/conveyor{dir = 4; id = "packageExternal"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor{icon_state = "floorgrime"},/area/quartermaster/office) "bWa" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/quartermaster/office) @@ -5210,7 +5210,7 @@ "bWj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/hallway/primary/central) "bWk" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/engine/engine_monitoring) "bWl" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/atmos) -"bWm" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"bWm" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/newscaster{pixel_x = 28; pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/engine/engine_monitoring) "bWn" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/hallway/primary/central) "bWo" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/space,/area) "bWp" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/bridge/meeting_room) @@ -5232,7 +5232,7 @@ "bWF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/lattice,/turf/space,/area) "bWG" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall/r_wall,/area/crew_quarters/captain) "bWH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/poddoor{desc = "For use by authorized Nanotrasen AI Maintenance Technitians or in case of Emergancy Only."; id = "AI Door"; name = "AI Chamber Maintenance Door"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/turret_protected/ai) -"bWI" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/captain) +"bWI" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor,/area/engine/engine_monitoring) "bWJ" = (/obj/machinery/power/apc{dir = 4; name = "Cryogenics APC"; pixel_x = 25},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor{icon_state = "white"},/area/medical/cryo) "bWK" = (/obj/machinery/light,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/captain) "bWL" = (/turf/simulated/floor/engine,/area/toxins/telesci) @@ -5243,9 +5243,9 @@ "bWQ" = (/obj/structure/rack,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/clothing/mask/gas,/obj/item/clothing/suit/armor/captain,/obj/item/clothing/head/helmet/space/capspace,/obj/machinery/newscaster/security_unit{pixel_x = -32; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/captain) "bWR" = (/obj/machinery/door/window/southright{dir = 1; name = "Test Chamber"; req_access_txt = "47"},/obj/machinery/door/window/southright{name = "Test Chamber"; req_access_txt = "47"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "misclab"; name = "Test Chamber Blast Doors"; opacity = 0},/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci) "bWS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/captain) -"bWT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/item/weapon/extinguisher,/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"bWT" = (/turf/space,/area/medical/virology) "bWU" = (/obj/machinery/power/apc{dir = 1; name = "Bridge Maintenance APC"; pixel_y = 24},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/maintcentral) -"bWV" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"bWV" = (/obj/structure/table/reinforced,/obj/machinery/light_switch{pixel_x = 27},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_CO2 = 0; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor,/area/engine/engine_monitoring) "bWW" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 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},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1379; id_tag = "toxin_test_pump"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "toxin_test_sensor"; pixel_x = 0; pixel_y = 16},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "bWX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/maintcentral) "bWY" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "toxin_test_outer"; locked = 1; name = "Engineering External Access"; req_access = null; req_access_txt = "10;13"},/turf/simulated/floor/plating,/area/maintenance/asmaint2) @@ -5255,7 +5255,7 @@ "bXc" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plating/airless,/area/toxins/test_area) "bXd" = (/obj/machinery/power/apc{dir = 4; name = "Explosives Testing APC"; pixel_x = 25},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating/airless,/area/toxins/test_area) "bXe" = (/obj/machinery/camera{c_tag = "Toxins Test Chamber South"; dir = 1; network = list("Toxins Test Area")},/obj/machinery/light,/turf/simulated/floor/airless,/area/toxins/test_area) -"bXf" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall,/area/maintenance/maintcentral) +"bXf" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/stool/bed/chair/office/dark,/obj/effect/landmark/start{name = "Station Engineer"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/engine/engine_monitoring) "bXg" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor{icon_state = "bluecorner"},/area/hallway/primary/central) "bXh" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "browncorner"},/area/hallway/primary/central) "bXi" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/lattice,/turf/space,/area) @@ -5289,7 +5289,6 @@ "bXK" = (/turf/simulated/floor{icon_state = "white"},/area/medical/virology) "bXL" = (/obj/machinery/door/firedoor,/turf/simulated/floor{icon_state = "white"},/area/medical/sleeper) "bXM" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor,/area/assembly/chargebay) -"bXN" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor{icon_state = "white"},/area/medical/genetics) "bXO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/asmaint) "bXP" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/asmaint) "bXQ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/asmaint) @@ -5323,17 +5322,17 @@ "bYs" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/turf/simulated/floor/plating,/area/engine/engine_airlock) "bYt" = (/obj/machinery/door/airlock/maintenance_hatch{frequency = 1379; icon_state = "door_closed"; id_tag = "engine_airlock_exterior"; locked = 0; name = "Engine Airlock Exterior"; req_access_txt = "10"},/turf/simulated/floor/plating,/area/engine/engine_airlock) "bYu" = (/obj/machinery/space_heater,/obj/machinery/light/small,/turf/simulated/floor,/area/atmos) -"bYv" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/engine/engine_monitoring) -"bYw" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/newscaster{pixel_x = 28; pixel_y = 0},/turf/simulated/floor,/area/engine/engine_monitoring) -"bYx" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor,/area/engine/engine_monitoring) +"bYv" = (/obj/structure/stool/bed/chair/office/dark,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/landmark/start{name = "Station Engineer"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/engine/engine_monitoring) +"bYw" = (/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/power/monitor{name = "Engine Power Monitoring"},/obj/structure/cable,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/engine/engine_monitoring) +"bYx" = (/obj/machinery/power/monitor{name = "Main Power Grid Monitoring"},/obj/structure/cable,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/engine/engine_monitoring) "bYy" = (/obj/structure/grille,/obj/structure/grille,/turf/simulated/wall/r_wall,/area/atmos) "bYz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/engine/engine_airlock) "bYA" = (/obj/machinery/atmospherics/binary/dp_vent_pump/high_volume{dir = 8; frequency = 1379; id = "engine_airlock_pump"},/turf/simulated/floor/plating,/area/engine/engine_airlock) "bYB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/embedded_controller/radio/advanced_airlock_controller{id_tag = "engine_room_airlock"; name = "Engine Room Airlock"; pixel_x = -24; tag_airpump = "engine_airlock_pump"; tag_chamber_sensor = "eng_al_c_snsr"; tag_exterior_door = "engine_airlock_exterior"; tag_exterior_sensor = "eng_al_ext_snsr"; tag_interior_door = "engine_airlock_interior"; tag_interior_sensor = "eng_al_int_snsr"},/turf/simulated/floor/plating,/area/engine/engine_airlock) -"bYC" = (/obj/structure/table/reinforced,/obj/machinery/light_switch{pixel_x = 27},/turf/simulated/floor,/area/engine/engine_monitoring) -"bYD" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/stool/bed/chair/office/dark,/obj/effect/landmark/start{name = "Station Engineer"},/turf/simulated/floor,/area/engine/engine_monitoring) +"bYC" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/poddoor{density = 0; dir = 4; icon_state = "pdoor0"; id = "EngineBlast"; layer = 2.7; name = "Engine Monitoring Room Blast Doors"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/engine/engine_room) +"bYD" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/poddoor{density = 0; dir = 4; icon_state = "pdoor0"; id = "EngineBlast"; layer = 2.7; name = "Engine Monitoring Room Blast Doors"; opacity = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/engine/engine_room) "bYE" = (/obj/structure/table/reinforced,/obj/machinery/door_control{desc = "A remote control-switch for the engine control room blast doors."; id = "EngineBlast"; name = "Engine Room Blast Doors"; pixel_x = 0; pixel_y = 0; req_access_txt = "10"},/turf/simulated/floor,/area/engine/engine_monitoring) -"bYF" = (/obj/structure/stool/bed/chair/office/dark,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/landmark/start{name = "Station Engineer"},/turf/simulated/floor,/area/engine/engine_monitoring) +"bYF" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/turf/simulated/floor/plating,/area/engine/engine_room) "bYG" = (/obj/structure/table/reinforced,/obj/machinery/camera{c_tag = "Engine Monitoring Room"; dir = 4; network = list("SS13")},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor,/area/engine/engine_monitoring) "bYH" = (/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/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/camera{c_tag = "SMES"; dir = 8; network = list("SS13")},/turf/simulated/floor,/area/engine/engine_smes) "bYI" = (/obj/structure/cable,/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/power/smes,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/engine/engine_smes) @@ -5357,16 +5356,16 @@ "bZa" = (/obj/machinery/computer/general_air_control{frequency = 1441; name = "Engine Pressure Monitor"; sensors = list("engine_sensor" = "Engine Chamber")},/turf/simulated/floor,/area/engine/engine_monitoring) "bZb" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft) "bZc" = (/obj/machinery/computer/security/engineering{network = list("Engineering","Power Alarms","Atmosphere Alarms","Fire Alarms","Supermatter")},/turf/simulated/floor,/area/engine/engine_monitoring) -"bZd" = (/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/power/monitor{name = "Engine Power Monitoring"},/obj/structure/cable,/turf/simulated/floor,/area/engine/engine_monitoring) +"bZd" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 0; scrub_CO2 = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plating,/area/engine/engine_room) "bZe" = (/obj/machinery/computer/station_alert,/turf/simulated/floor,/area/engine/engine_monitoring) -"bZf" = (/obj/machinery/power/monitor{name = "Main Power Grid Monitoring"},/obj/structure/cable,/turf/simulated/floor,/area/engine/engine_monitoring) +"bZf" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 10},/turf/simulated/floor/plating,/area/engine/engine_room) "bZg" = (/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "eng_al_c_snsr"; pixel_x = -25; pixel_y = 0},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor/plating,/area/engine/engine_airlock) "bZh" = (/obj/structure/table,/obj/item/weapon/book/manual/supermatter_engine,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/engine/engine_airlock) "bZi" = (/turf/simulated/floor/plating,/area/engine/engine_airlock) "bZj" = (/turf/simulated/wall/r_wall,/area/engine/engine_room) "bZk" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/poddoor{density = 0; dir = 4; icon_state = "pdoor0"; id = "EngineBlast"; layer = 2.7; name = "Engine Monitoring Room Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/engine/engine_room) "bZl" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/poddoor{density = 0; dir = 4; icon_state = "pdoor0"; id = "EngineBlast"; layer = 2.7; name = "Engine Monitoring Room Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/engine/engine_room) -"bZm" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/poddoor{density = 0; dir = 4; icon_state = "pdoor0"; id = "EngineBlast"; layer = 2.7; name = "Engine Monitoring Room Blast Doors"; opacity = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/engine/engine_room) +"bZm" = (/obj/machinery/door/firedoor/border_only{dir = 1; layer = 2.4; name = "Engineering Firelock"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/door/airlock/glass_engineering{name = "Engineering Hallway"; req_one_access_txt = "11;24"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/engine/hallway) "bZn" = (/obj/machinery/door/airlock/maintenance_hatch{frequency = 1379; icon_state = "door_closed"; id_tag = "engine_airlock_interior"; locked = 0; name = "Engine Airlock Interior"; req_access_txt = "10"},/turf/simulated/floor/plating,/area/engine/engine_room) "bZo" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/poddoor{density = 0; dir = 4; icon_state = "pdoor0"; id = "EngineBlast"; layer = 2.7; name = "Engine Monitoring Room Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/engine/engine_room) "bZp" = (/obj/structure/table,/obj/item/weapon/storage/box/matches,/obj/item/weapon/storage/fancy/cigarettes,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/maintenance/aft) @@ -5388,9 +5387,9 @@ "bZF" = (/obj/machinery/atmospherics/binary/pump{dir = 8; icon_state = "intact_off"; name = "Engine Feed"; on = 0},/turf/simulated/floor/plating,/area/engine/engine_room) "bZG" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"; tag = "icon-intact (EAST)"},/obj/machinery/atmospherics/pipe/simple/visible/yellow,/turf/simulated/floor/plating,/area/engine/engine_room) "bZH" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{tag = "icon-intact (SOUTHEAST)"; icon_state = "intact"; dir = 6},/turf/simulated/floor/plating,/area/engine/engine_room) -"bZI" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8},/turf/simulated/floor/plating,/area/engine/engine_room) +"bZI" = (/obj/structure/lattice,/turf/space,/area/medical/virology) "bZJ" = (/obj/structure/sign/biohazard,/turf/simulated/wall/r_wall,/area/medical/virology) -"bZK" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 6},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/engine/engine_room) +"bZK" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/unary/vent_pump,/turf/simulated/floor,/area/engine/engine_monitoring) "bZL" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/turf/simulated/floor/plating{icon_state = "platebotc"; nitrogen = 0.01; oxygen = 0.01},/area/engine/engine_room) "bZM" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/research{name = "Genetics Research"; req_access_txt = "9"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) "bZN" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "bot"},/area/medical/research{name = "Research Division"}) @@ -5416,7 +5415,7 @@ "cah" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/engine/engine_room) "cai" = (/obj/machinery/atmospherics/tvalve/mirrored/digital,/turf/simulated/floor,/area/atmos) "caj" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/engine/engine_room) -"cak" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/engine/engine_room) +"cak" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor,/area/engine/engine_monitoring) "cal" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{tag = "icon-manifold (WEST)"; icon_state = "manifold"; dir = 8},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/engine/engine_room) "cam" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/engine/engine_room) "can" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"; tag = "icon-intact (EAST)"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engine/engine_room) @@ -5429,7 +5428,7 @@ "cau" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/light,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/toxins/xenobiology) "cav" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) "caw" = (/obj/machinery/status_display,/turf/simulated/wall,/area/medical/chemistry) -"cax" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow{tag = "icon-manifold (EAST)"; icon_state = "manifold"; dir = 4},/obj/machinery/meter,/turf/simulated/floor/plating,/area/engine/engine_room) +"cax" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor,/area/engine/engine_monitoring) "cay" = (/obj/structure/stool,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/camera{c_tag = "Aft Starboard Solar Control"; dir = 4; network = list("SS13")},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) "caz" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"; tag = "icon-intact (EAST)"},/obj/machinery/atmospherics/pipe/simple/visible/yellow,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/engine/engine_room) "caA" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) @@ -5542,15 +5541,12 @@ "ccD" = (/obj/machinery/atmospherics/pipe/simple/visible/green,/turf/simulated/floor{dir = 10; icon_state = "escape"},/area/atmos) "ccE" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/item/device/radio/intercom{broadcasting = 0; name = "Station Intercom (General)"; pixel_y = 20},/turf/simulated/floor{icon_state = "white"},/area/medical/genetics_cloning) "ccF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/medical/genetics_cloning) -"ccG" = (/obj/structure/closet/secure_closet/medical1,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/power/apc{dir = 8; name = "Genetics APC"; pixel_x = -25},/turf/simulated/floor{tag = "icon-whitepurple (NORTHWEST)"; icon_state = "whitepurple"; dir = 9},/area/medical/genetics) "ccH" = (/obj/machinery/atmospherics/valve/digital{dir = 2; name = "N2O Outlet Valve"; pipe_color = "yellow"},/turf/simulated/floor{icon_state = "escape"; dir = 6},/area/atmos) "ccI" = (/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{dir = 7; icon_state = "escape"},/area/atmos) "ccJ" = (/obj/machinery/atmospherics/pipe/simple/visible/green,/obj/machinery/camera{c_tag = "Atmospherics South West"; dir = 1},/turf/simulated/floor{dir = 10; icon_state = "warning"},/area/atmos) "ccK" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/medical/virology) "ccL" = (/obj/machinery/atmospherics/valve/digital{dir = 2; name = "Plasma Outlet Valve"; pipe_color = "yellow"},/turf/simulated/floor{dir = 6; icon_state = "warning"},/area/atmos) -"ccM" = (/obj/machinery/disposal,/obj/machinery/camera{c_tag = "Genetics Fore"; network = list("SS13")},/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor{tag = "icon-whitepurple (NORTH)"; icon_state = "whitepurple"; dir = 1},/area/medical/genetics) "ccN" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "tox_in"; name = "Toxin Supply Control"; output_tag = "tox_out"; sensors = list("tox_sensor" = "Tank")},/turf/simulated/floor{icon_state = "warning"},/area/atmos) -"ccO" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "white"},/area/medical/genetics) "ccP" = (/obj/structure/sign/securearea{pixel_x = -32; pixel_y = 0},/obj/machinery/shower{icon_state = "shower"; dir = 4},/turf/simulated/floor{dir = 8; icon_state = "warnwhite"},/area/toxins/xenobiology) "ccQ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) "ccR" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/junction{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) @@ -5560,7 +5556,7 @@ "ccV" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/atmos) "ccW" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/visible/yellow,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/atmos) "ccX" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/atmos) -"ccY" = (/obj/machinery/door/firedoor/border_only{dir = 1; layer = 2.4; name = "Engineering Firelock"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/door/airlock/glass_engineering{name = "Engineering Hallway"; req_one_access_txt = "11;24"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/engine/hallway) +"ccY" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/medical{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "virology_airlock_exterior"; locked = 1; name = "Virology Exterior Airlock"; req_access_txt = "39"},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "virology_airlock_control"; name = "Virology Access Button"; pixel_x = -24; pixel_y = 0; req_access_txt = "39"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/medical/virologyaccess) "ccZ" = (/obj/machinery/door/firedoor/border_only{dir = 1; layer = 2.4; name = "Engineering Firelock"},/obj/machinery/door/airlock/glass_engineering{name = "Engineering Hallway"; req_one_access_txt = "11;24"},/turf/simulated/floor,/area/engine/hallway) "cda" = (/obj/structure/table,/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/item/weapon/storage/box/masks{pixel_y = -5},/obj/item/weapon/storage/box/gloves{pixel_y = 9},/turf/simulated/floor{tag = "icon-whiteblue (SOUTHEAST)"; icon_state = "whiteblue"; dir = 6},/area/medical/medbay3) "cdb" = (/obj/machinery/door/firedoor/border_only{dir = 1; layer = 2.4; name = "Engineering Firelock"},/obj/machinery/door/airlock/glass_engineering{name = "Engineering Hallway"; req_one_access_txt = "11;24"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/engine/hallway) @@ -5634,7 +5630,7 @@ "cer" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 1; frequency = 1441; icon_state = "on"; id = "waste_in"; on = 1; pixel_y = 1},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/atmos) "ces" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent/roomfiller,/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/atmos) "cet" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/engine/engine_monitoring) -"ceu" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor,/area/engine/engine_monitoring) +"ceu" = (/obj/machinery/light{dir = 1},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor{dir = 1; icon_state = "whitered"},/area) "cev" = (/obj/structure/closet/radiation,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = 28},/turf/simulated/floor,/area/engine/engine_monitoring) "cew" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/ai_status_display{layer = 4; pixel_y = 32},/turf/simulated/floor,/area/engine/engine_monitoring) "cex" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{dir = 8; name = "Engine Room Airlock APC"; pixel_x = -25; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/turf/simulated/floor,/area/engine/engine_airlock) @@ -5659,9 +5655,9 @@ "ceQ" = (/mob/living/carbon/slime,/turf/simulated/floor/engine,/area/toxins/xenobiology) "ceR" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "xenobio3"; name = "Containment Blast Doors"; opacity = 0},/obj/machinery/door/window/northleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Containment Pen"; req_access_txt = "55"},/turf/simulated/floor/engine,/area/toxins/xenobiology) "ceS" = (/obj/machinery/door/window/northleft{dir = 4; name = "Containment Pen"; req_access_txt = "55"},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/toxins/xenobiology) -"ceT" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor,/area/engine/engine_monitoring) +"ceT" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet,/obj/item/device/radio/intercom{freerange = 1; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 30},/turf/simulated/floor{dir = 1; icon_state = "whitered"},/area) "ceU" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor,/area/engine/engine_monitoring) -"ceV" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor,/area/engine/engine_monitoring) +"ceV" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor{dir = 1; icon_state = "whitered"},/area) "ceW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "solar_xeno_airlock"; name = "exterior access button"; pixel_x = 25; pixel_y = 25; req_access_txt = "10;13"},/turf/simulated/floor/plating/airless,/area/solar/starboard) "ceX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft) "ceY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/shower{icon_state = "shower"; dir = 8},/turf/simulated/floor,/area/engine/engine_airlock) @@ -5694,8 +5690,6 @@ "cfz" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/engine/engineering_monitoring) "cfA" = (/obj/machinery/computer/station_alert,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/engine/engineering_monitoring) "cfB" = (/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/atmos) -"cfC" = (/obj/structure/table,/obj/item/device/flashlight/pen,/obj/item/device/flashlight/pen,/obj/item/weapon/hand_labeler,/obj/item/device/radio/intercom{broadcasting = 0; name = "Station Intercom (General)"; pixel_y = 20},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{tag = "icon-whitepurple (NORTH)"; icon_state = "whitepurple"; dir = 1},/area/medical/genetics) -"cfD" = (/obj/structure/closet/wardrobe/genetics_white,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{tag = "icon-whitepurple (NORTHEAST)"; icon_state = "whitepurple"; dir = 5},/area/medical/genetics) "cfE" = (/obj/machinery/light{dir = 1},/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "whiteblue"},/area/medical/research{name = "Research Division"}) "cfF" = (/obj/structure/stool/bed/chair/office/dark{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/landmark/start{name = "Station Engineer"},/turf/simulated/floor,/area/engine/engineering_monitoring) "cfG" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor,/area/engine/engineering_monitoring) @@ -6049,13 +6043,13 @@ "cmq" = (/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{tag = "icon-manifold-f (WEST)"; icon_state = "manifold-f"; dir = 8},/turf/simulated/floor,/area/hallway/primary/aft) "cmr" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor,/area/hallway/primary/aft) "cms" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor,/area/hallway/primary/aft) -"cmt" = (/obj/machinery/door/airlock/glass_engineering{name = "Engineering EVA Storage"; req_one_access_txt = "11;24"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 1; layer = 2.4; name = "Engineering Firelock"},/turf/simulated/floor,/area/ai_monitored/storage/eva{name = "Engineering EVA Storage"}) -"cmu" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/ai_monitored/storage/eva{name = "Engineering EVA Storage"}) -"cmv" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor,/area/ai_monitored/storage/eva{name = "Engineering EVA Storage"}) -"cmw" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_Toxins = 0},/turf/simulated/floor,/area/ai_monitored/storage/eva{name = "Engineering EVA Storage"}) -"cmx" = (/obj/machinery/power/apc{dir = 8; name = "Engineering EVA APC"; pixel_x = -25; pixel_y = 0},/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/turf/simulated/floor,/area/ai_monitored/storage/eva{name = "Engineering EVA Storage"}) -"cmy" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/evahallway) -"cmz" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/evahallway) +"cmt" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor{dir = 2; icon_state = "green"},/area/medical/virologyaccess) +"cmu" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/light,/obj/machinery/door_control{desc = "A remote control-switch for shutters."; id = "virologyquar"; name = "Virology Emergency Lockdown Control"; pixel_x = 0; pixel_y = -28; req_access_txt = "5"},/turf/simulated/floor{dir = 8; icon_state = "greencorner"},/area/medical/virologyaccess) +"cmv" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/machinery/light,/turf/simulated/floor{dir = 2; icon_state = "greencorner"},/area/medical/virologyaccess) +"cmw" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area) +"cmx" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area) +"cmy" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor{icon_state = "white"},/area) +"cmz" = (/obj/machinery/camera{c_tag = "Virology Monkey Pen"; dir = 2},/turf/simulated/floor{icon_state = "white"},/area) "cmA" = (/obj/structure/disposalpipe/segment,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/construction) "cmB" = (/obj/machinery/door/airlock/engineering{name = "Engineering Washroom"; req_one_access_txt = "11;24"},/obj/machinery/door/firedoor/border_only{dir = 1; layer = 2.4; name = "Engineering Firelock"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 4; icon_state = "whiteyellowfull"},/area/crew_quarters/sleep/engi) "cmC" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/hallway/primary/aft) @@ -6114,12 +6108,12 @@ "cnD" = (/obj/machinery/atmospherics/portables_connector{layer = 2},/obj/machinery/portable_atmospherics/pump,/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/hallway/primary/aft) "cnE" = (/obj/machinery/atmospherics/portables_connector{layer = 2},/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/floor{icon_state = "red"; dir = 1},/area/hallway/primary/aft) "cnF" = (/obj/machinery/atmospherics/portables_connector{layer = 2},/obj/machinery/portable_atmospherics/pump,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/hallway/primary/aft) -"cnG" = (/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/rig,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig,/obj/machinery/door/window/southleft{name = "Engineering Hardsuits"; req_access_txt = "11"},/obj/structure/rack{dir = 8; layer = 2.6},/turf/simulated/floor,/area/ai_monitored/storage/eva{name = "Engineering EVA Storage"}) -"cnH" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/ai_monitored/storage/eva{name = "Engineering EVA Storage"}) -"cnI" = (/obj/structure/dispenser{plasmatanks = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/ai_monitored/storage/eva{name = "Engineering EVA Storage"}) -"cnJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/sign/pods,/turf/simulated/wall/r_wall,/area/maintenance/evahallway) -"cnK" = (/obj/structure/rack{dir = 8; layer = 2.6},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/rig,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig,/obj/machinery/light{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window/southleft{name = "Engineering Hardsuits"; req_access_txt = "11"},/turf/simulated/floor,/area/ai_monitored/storage/eva{name = "Engineering EVA Storage"}) -"cnL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor,/area/ai_monitored/storage/eva{name = "Engineering EVA Storage"}) +"cnG" = (/obj/machinery/shower{icon_state = "shower"; dir = 4},/obj/structure/sign/securearea{pixel_x = -32; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor{dir = 8; icon_state = "warnwhite"},/area/medical/virology) +"cnH" = (/obj/machinery/disease2/incubator,/turf/simulated/floor{icon_state = "white"},/area) +"cnI" = (/obj/machinery/smartfridge/secure/virology,/turf/simulated/floor{icon_state = "white"},/area) +"cnJ" = (/obj/machinery/disease2/isolator,/obj/item/device/radio/intercom{freerange = 1; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 30},/turf/simulated/floor{icon_state = "white"},/area) +"cnK" = (/obj/machinery/light{dir = 1},/obj/machinery/computer/centrifuge,/obj/item/weapon/storage/secure/safe{pixel_x = 5; pixel_y = 29},/turf/simulated/floor{icon_state = "white"},/area) +"cnL" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/item/device/radio/intercom{broadcasting = 0; name = "Station Intercom (General)"; pixel_y = 26},/turf/simulated/floor{icon_state = "white"},/area) "cnM" = (/turf/simulated/floor/engine{name = "n2 floor"; nitrogen = 100000; oxygen = 0},/area/atmos) "cnN" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/simulated/floor/engine{name = "n2 floor"; nitrogen = 100000; oxygen = 0},/area/atmos) "cnO" = (/turf/simulated/floor/engine{name = "o2 floor"; nitrogen = 0; oxygen = 100000},/area/atmos) @@ -6136,8 +6130,8 @@ "cnZ" = (/obj/machinery/light,/obj/structure/closet,/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/toxins/xenobiology) "coa" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table/reinforced,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door_control{id = "xenobio6"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access_txt = "55"},/obj/machinery/door_control{desc = "A remote control-switch for a door to space."; id = "xenobioout6"; name = "Containment Release Switch"; pixel_x = 24; pixel_y = 4; req_access = "55"},/turf/simulated/floor{dir = 5; icon_state = "warning"},/area/toxins/xenobiology) "cob" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating/airless,/area/solar/starboard) -"coc" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/evahallway) -"cod" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/evahallway) +"coc" = (/obj/structure/table,/obj/item/weapon/storage/box/syringes,/obj/item/weapon/storage/box/beakers,/obj/item/weapon/hand_labeler,/obj/structure/reagent_dispensers/virusfood{pixel_x = -30},/turf/simulated/floor{icon_state = "white"},/area) +"cod" = (/obj/structure/sign/biohazard,/turf/simulated/wall/r_wall,/area) "coe" = (/obj/machinery/door/airlock/engineering{name = "Aft Starboard Solar Access"; req_access_txt = "10"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor/plating,/area/maintenance/starboardsolar) "cof" = (/obj/machinery/camera{c_tag = "Medbay Lobby Starboard"; network = list("SS13")},/obj/structure/stool,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/reception) "cog" = (/obj/machinery/light{dir = 1},/obj/structure/stool,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/reception) @@ -6159,19 +6153,19 @@ "cow" = (/obj/machinery/door/window/southright{name = "Containment Pen"; req_access_txt = "47"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "xenobio6"; name = "Containment Blast Doors"; opacity = 0},/turf/simulated/floor/engine,/area/toxins/xenobiology) "cox" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "xenobio6"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/toxins/xenobiology) "coy" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/turf/simulated/floor,/area/hallway/primary/aft) -"coz" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/ai_monitored/storage/eva{name = "Engineering EVA Storage"}) -"coA" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/rig/atmos,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig/atmos,/obj/machinery/door/window/northright{name = "Atmospherics Hardsuits"; req_access_txt = "24"},/turf/simulated/floor,/area/ai_monitored/storage/eva{name = "Engineering EVA Storage"}) -"coB" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/rig/atmos,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig/atmos,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window/northleft{name = "Atmospherics Hardsuits"; req_access_txt = "24"},/turf/simulated/floor,/area/ai_monitored/storage/eva{name = "Engineering EVA Storage"}) +"coz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor{icon_state = "white"},/area/medical/virologyaccess) +"coA" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/turf/simulated/floor{dir = 9; icon_state = "warnwhite"},/area/medical/virologyaccess) +"coB" = (/obj/structure/sign/deathsposal,/turf/simulated/wall/r_wall,/area) "coC" = (/obj/structure/table/reinforced,/turf/simulated/floor,/area/hallway/primary/aft) "coD" = (/obj/structure/table/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/cyan,/obj/item/weapon/folder/yellow,/turf/simulated/floor,/area/hallway/primary/aft) "coE" = (/obj/structure/table/reinforced,/obj/item/weapon/packageWrap,/obj/item/weapon/hand_labeler,/turf/simulated/floor,/area/hallway/primary/aft) -"coF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/light/small{dir = 4},/obj/structure/disposalpipe/junction{dir = 1; icon_state = "pipe-j2"},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/evahallway) -"coG" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/evahallway) +"coF" = (/obj/machinery/camera/xray{c_tag = "Virology Access"; network = list("SS13","Medical")},/obj/structure/closet/wardrobe/virology_white,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 1; name = "Virology APC"; pixel_y = 24},/turf/simulated/floor{icon_state = "warnwhite"; dir = 5},/area/medical/virologyaccess) +"coG" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Virology Laboratory"; req_access_txt = "39"},/turf/simulated/floor{icon_state = "delivery"},/area/medical/virology) "coH" = (/obj/machinery/door/airlock/engineering{name = "Construction Area"; req_access_txt = "32"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 1; layer = 2.4; name = "Engineering Firelock"},/turf/simulated/floor/plating,/area/construction) "coI" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor,/area/construction) -"coJ" = (/obj/machinery/suit_storage_unit/standard_unit,/obj/machinery/camera{c_tag = "Engineering EVA Storage"; dir = 1; network = list("SS13")},/turf/simulated/floor,/area/ai_monitored/storage/eva{name = "Engineering EVA Storage"}) -"coK" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/ai_monitored/storage/eva{name = "Engineering EVA Storage"}) -"coL" = (/obj/structure/table/reinforced{icon_state = "table"},/obj/item/device/modkit/tajaran,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor,/area/ai_monitored/storage/eva{name = "Engineering EVA Storage"}) +"coJ" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Virology Laboratory"; req_access_txt = "39"},/turf/simulated/floor{icon_state = "delivery"},/area/medical/virology) +"coK" = (/obj/machinery/door/airlock/glass_engineering{name = "Engineering EVA Storage"; req_one_access_txt = "11;24"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 1; layer = 2.4; name = "Engineering Firelock"},/turf/simulated/floor,/area/engine/engine_eva) +"coL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/engine/engine_eva) "coM" = (/turf/simulated/wall,/area/crew_quarters/sleep_male/toilet_male{name = "\improper Engineering Washroom"}) "coN" = (/obj/machinery/light_switch{pixel_x = -27; pixel_y = 0},/turf/simulated/floor{dir = 4; icon_state = "whiteyellowcorner"},/area/crew_quarters/sleep_male/toilet_male{name = "\improper Engineering Washroom"}) "coO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor,/area/engine/locker_room) @@ -6217,10 +6211,10 @@ "cpC" = (/obj/machinery/firealarm{dir = 4; layer = 3.3; pixel_x = 26},/turf/simulated/floor{dir = 2; icon_state = "yellowcorner"},/area/hallway/primary/aft) "cpD" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/engine/locker_room) "cpE" = (/obj/structure/closet/secure_closet/engineering_personal,/obj/machinery/light{dir = 1},/obj/item/weapon/tank/emergency_oxygen/engi,/turf/simulated/floor,/area/engine/locker_room) -"cpF" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/ai_monitored/storage/eva{name = "Engineering EVA Storage"}) -"cpG" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor,/area/ai_monitored/storage/eva{name = "Engineering EVA Storage"}) +"cpF" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor,/area/engine/engine_eva) +"cpG" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_Toxins = 0},/turf/simulated/floor,/area/engine/engine_eva) "cpH" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/hallway/primary/aft) -"cpI" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/airlock/glass_engineering{name = "Engineering EVA Storage"; req_one_access_txt = "11;24"},/obj/machinery/door/firedoor/border_only{dir = 1; layer = 2.4; name = "Engineering Firelock"},/turf/simulated/floor,/area/ai_monitored/storage/eva{name = "Engineering EVA Storage"}) +"cpI" = (/obj/machinery/power/apc{dir = 8; name = "Engineering EVA APC"; pixel_x = -25; pixel_y = 0},/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/turf/simulated/floor,/area/engine/engine_eva) "cpJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/hallway/primary/aft) "cpK" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "yellowcorner"},/area/hallway/primary/aft) "cpL" = (/obj/machinery/camera{c_tag = "Morgue"; network = list("SS13")},/obj/machinery/power/apc{dir = 1; name = "Morgue APC"; pixel_y = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/medical/morgue) @@ -6230,11 +6224,11 @@ "cpP" = (/obj/structure/lattice,/obj/structure/grille,/obj/structure/lattice,/turf/space,/area) "cpQ" = (/obj/machinery/shield_gen,/turf/simulated/floor/plating,/area/engine/storage_hard) "cpR" = (/obj/structure/disposalpipe/segment,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor,/area/construction) -"cpS" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/evahallway) -"cpT" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/decal/cleanable/blood/oil/streak{amount = 0},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/evahallway) -"cpU" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/ai_monitored/storage/eva{name = "Engineering EVA Storage"}) -"cpV" = (/obj/machinery/door/airlock/engineering{name = "Engineering EVA Storage"; req_access_txt = "12"; req_one_access_txt = "11;24"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 1; layer = 2.4; name = "Engineering Firelock"},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/evahallway) -"cpW" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/ai_monitored/storage/eva{name = "Engineering EVA Storage"}) +"cpS" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "floorgrime"},/area/engine/engine_eva) +"cpT" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor{icon_state = "floorgrime"},/area/engine/engine_eva) +"cpU" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Virology Access"; req_access_txt = "39"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "whitehall"; dir = 1},/area/medical/virologyaccess) +"cpV" = (/obj/structure/sign/biohazard,/turf/simulated/wall,/area/medical/virologyaccess) +"cpW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/maintenance/asmaint) "cpX" = (/obj/structure/closet/crate,/obj/item/weapon/beach_ball/holoball,/obj/item/stack/sheet/metal{amount = 50},/turf/simulated/floor/plating,/area/construction) "cpY" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/engine{name = "o2 floor"; nitrogen = 0; oxygen = 100000},/area/atmos) "cpZ" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/engine{name = "n2 floor"; nitrogen = 100000; oxygen = 0},/area/atmos) @@ -6260,8 +6254,8 @@ "cqt" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/cyan{tag = "icon-intact-f (EAST)"; icon_state = "intact-f"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/cyan{tag = "icon-intact-f (EAST)"; icon_state = "intact-f"; dir = 4},/turf/simulated/floor{dir = 4; icon_state = "loadingarea"},/area/hallway/primary/aft) "cqu" = (/obj/machinery/door/window/eastright{name = "Engineering Delivery"; req_one_access_txt = "11;24"},/obj/machinery/atmospherics/pipe/simple/hidden/cyan{tag = "icon-intact-f (SOUTHEAST)"; icon_state = "intact-f"; dir = 6},/turf/simulated/floor{icon_state = "delivery"},/area/hallway/primary/aft) "cqv" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=4"; freq = 1400; location = "Engineering"},/obj/structure/plasticflaps{opacity = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor{icon_state = "bot"},/area/hallway/primary/aft) -"cqw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/evahallway) -"cqx" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/sign/securearea{pixel_x = -32},/turf/simulated/floor/plating,/area/maintenance/evahallway) +"cqw" = (/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/rig,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig,/obj/machinery/door/window/southleft{name = "Engineering Hardsuits"; req_access_txt = "11"},/obj/structure/rack{dir = 8; layer = 2.6},/turf/simulated/floor,/area/engine/engine_eva) +"cqx" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/engine/engine_eva) "cqy" = (/obj/machinery/light/small{dir = 4},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = 28},/turf/simulated/floor,/area/construction) "cqz" = (/obj/machinery/door/window/eastright{name = "Engineering Reception Desk"; req_one_access_txt = "11;24"},/obj/machinery/light,/turf/simulated/floor,/area/hallway/primary/aft) "cqA" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{tag = "icon-intact-f (EAST)"; icon_state = "intact-f"; dir = 4},/turf/simulated/floor,/area/hallway/primary/aft) @@ -6310,9 +6304,9 @@ "crr" = (/obj/structure/shuttle/window,/obj/structure/grille,/turf/simulated/shuttle/plating,/area/centcom/evac) "crs" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/door/airlock/engineering{name = "Engineering Washroom"; req_one_access_txt = "11;24"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 1; layer = 2.4; name = "Engineering Firelock"},/turf/simulated/floor,/area/crew_quarters/sleep_male/toilet_male{name = "\improper Engineering Washroom"}) "crt" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "whiteyellow"},/area/crew_quarters/sleep_male/toilet_male{name = "\improper Engineering Washroom"}) -"cru" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/maintenance{name = "Engineering EVA Storage Maintainance"; req_access_txt = "12"; req_one_access_txt = "11;24"},/turf/simulated/floor,/area/ai_monitored/storage/eva{name = "Engineering EVA Storage"}) -"crv" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/evahallway) -"crw" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/evahallway) +"cru" = (/obj/structure/dispenser{plasmatanks = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/engine/engine_eva) +"crv" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/sign/pods,/turf/simulated/wall/r_wall,/area/engine/engine_eva) +"crw" = (/obj/structure/rack{dir = 8; layer = 2.6},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/rig,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig,/obj/machinery/light{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window/southleft{name = "Engineering Hardsuits"; req_access_txt = "11"},/turf/simulated/floor,/area/engine/engine_eva) "crx" = (/obj/structure/stool/bed/chair/office/dark{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/cyan,/turf/simulated/floor,/area/hallway/primary/aft) "cry" = (/obj/structure/table/reinforced,/obj/item/weapon/clipboard,/turf/simulated/floor,/area/hallway/primary/aft) "crz" = (/obj/machinery/computer/station_alert,/turf/simulated/floor,/area/hallway/primary/aft) @@ -6390,7 +6384,7 @@ "csT" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/medical/virology) "csU" = (/obj/structure/sign/nosmoking_1,/turf/simulated/wall,/area/medical/reception) "csV" = (/obj/structure/sign/redcross{desc = "The Star of Life, a symbol of Medical Aid."; icon_state = "lifestar"; name = "Medbay"},/turf/simulated/wall,/area/medical/reception) -"csW" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Morgue"; req_access_txt = "6;9"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/medical/morgue) +"csW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor,/area/engine/engine_eva) "csX" = (/obj/machinery/door/airlock{name = "Starboard Emergency Storage"; req_access_txt = "0"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/storage/emergency3) "csY" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor,/area/hallway/primary/starboard) "csZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor,/area/hallway/primary/starboard) @@ -10385,7 +10379,7 @@ "dRK" = (/obj/machinery/door/firedoor/border_only{dir = 8; layer = 2.6; name = "Firelock West"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/camera{c_tag = "Research Outpost Hallway Starboard"; dir = 2; network = list("Research","SS13"); pixel_x = 24},/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{icon_state = "white"},/area/research_outpost/hallway) "dRL" = (/obj/structure/stool/bed/chair/office/dark,/obj/machinery/door_control{desc = "A remote control switch for port-side blast doors."; icon_state = "doorctrl0"; id = "CentComPort"; name = "Security Doors"; pixel_x = -12; pixel_y = -25; req_access_txt = "101"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) "dRM" = (/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/manifold/hidden/supply{dir = 4},/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/hallway/primary/aft) -"dRN" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/ai_monitored/storage/eva{name = "Engineering EVA Storage"}) +"dRN" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor{icon_state = "floorgrime"},/area/engine/engine_eva) "dRO" = (/obj/machinery/computer/communications,/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom) "dRP" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=AIE"; location = "AftH"},/turf/simulated/floor,/area/hallway/primary/aft) "dRQ" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{dir = 8; icon_state = "red"},/area/centcom/control) @@ -10493,7 +10487,7 @@ "dTO" = (/obj/machinery/door/airlock/glass_atmos{name = "Atmospherics Monitoring Room"; req_access_txt = "24"},/turf/simulated/floor,/area/engine/engineering_monitoring{name = "\improper Atmospherics Monitoring Room"}) "dTP" = (/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -30},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/hallway/primary/starboard) "dTQ" = (/obj/machinery/light,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "bluecorner"},/area/hallway/primary/starboard) -"dTR" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/hallway/primary/starboard) +"dTR" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor{icon_state = "floorgrime"},/area/engine/engine_eva) "dTS" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/hallway/primary/starboard) "dTT" = (/obj/structure/closet/wardrobe/engineering_yellow,/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/crew_quarters/sleep/engi) "dTU" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/hallway/primary/starboard) @@ -10540,7 +10534,7 @@ "dUJ" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/computer/crew,/turf/simulated/floor{icon_state = "blue"; dir = 8},/area/medical/reception) "dUK" = (/obj/machinery/door_control{desc = "A remote control switch for the medbay foyer."; id = "MedbayFoyerPort"; name = "Medbay Doors Control"; normaldoorcontrol = 1; pixel_x = -16; pixel_y = 28; range = 3; req_access_txt = null},/obj/structure/stool/bed/chair/office/dark{dir = 1},/obj/effect/landmark/start{name = "Medical Doctor"},/turf/simulated/floor{tag = "icon-vault (NORTH)"; icon_state = "vault"; dir = 1},/area/medical/reception) "dUL" = (/obj/structure/table,/obj/item/device/radio{anchored = 1; broadcasting = 0; canhear_range = 1; frequency = 1487; icon = 'icons/obj/items.dmi'; icon_state = "red_phone"; listening = 1; name = "Reception Emergency Phone"},/turf/simulated/floor,/area/medical/reception) -"dUM" = (/obj/structure/table,/obj/item/device/radio{anchored = 1; broadcasting = 0; canhear_range = 1; frequency = 1487; icon = 'icons/obj/items.dmi'; icon_state = "red_phone"; listening = 1; name = "Reception Emergency Phone"; pixel_x = -5},/obj/machinery/door_control{id = "medbayrecquar"; name = "Medbay Entrance Lockdown Shutters Control"; pixel_x = 6; pixel_y = 8; req_access_txt = "5"},/turf/simulated/floor,/area/medical/reception) +"dUM" = (/obj/structure/table,/obj/machinery/door_control{id = "medbayrecquar"; name = "Medbay Entrance Lockdown Shutters Control"; pixel_x = 6; pixel_y = 8; req_access_txt = "5"},/obj/item/weapon/paper_bin/carbon,/obj/item/device/radio{anchored = 1; broadcasting = 0; canhear_range = 1; frequency = 1487; icon = 'icons/obj/items.dmi'; icon_state = "red_phone"; listening = 1; name = "Reception Emergency Phone"; pixel_x = -5},/turf/simulated/floor,/area/medical/reception) "dUN" = (/obj/machinery/light_switch{pixel_x = 22; pixel_y = -8},/obj/machinery/door_control{id = "chemwindow"; name = "Chemistry Laboratory Window Shutters Control"; pixel_x = 26; pixel_y = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry) "dUO" = (/obj/structure/sign/redcross{desc = "The Star of Life, a symbol of Medical Aid."; icon_state = "lifestar"; name = "Medbay"; pixel_x = -32},/turf/simulated/floor{tag = "icon-whiteblue (SOUTHWEST)"; icon_state = "whiteblue"; dir = 10},/area/medical/reception) "dUP" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor{tag = "icon-whiteblue"; icon_state = "whiteblue"},/area/medical/reception) @@ -10573,7 +10567,7 @@ "dVq" = (/obj/structure/morgue{tag = "icon-morgue1 (WEST)"; icon_state = "morgue1"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{dir = 4; icon_state = "blue"},/area/medical/morgue) "dVr" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/storage/emergency3) "dVs" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/wall/r_wall,/area/assembly/chargebay) -"dVt" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/wall/r_wall,/area/crew_quarters/captain) +"dVt" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{dir = 2; icon_state = "whitegreen"},/area/medical/virologyaccess) "dVu" = (/obj/structure/stool/bed,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/medical/exam_room) "dVv" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor,/area/medical/morgue) "dVw" = (/obj/structure/filingcabinet/chestdrawer{desc = "A large drawer filled with autopsy reports."; name = "Autopsy Reports"},/obj/machinery/light{dir = 8},/turf/simulated/floor{icon_state = "blue"; dir = 8},/area/medical/morgue) @@ -10608,7 +10602,7 @@ "dVZ" = (/obj/machinery/vending/coffee,/turf/simulated/floor{icon_state = "white"},/area/medical/virology) "dWa" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/medical/virology) "dWb" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/medical/virology) -"dWc" = (/obj/machinery/status_display,/turf/space,/area) +"dWc" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor{dir = 2; icon_state = "whitegreen"},/area/medical/virologyaccess) "dWd" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/medical/virology) "dWe" = (/obj/machinery/camera{c_tag = "Virology Starboard"; dir = 8; network = list("RD"); pixel_y = -22},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) "dWf" = (/obj/structure/extinguisher_cabinet,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall/r_wall,/area/medical/virology) @@ -10617,7 +10611,7 @@ "dWi" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor{dir = 1; icon_state = "green"},/area/medical/virology) "dWj" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "whitegreen"},/area/medical/virology) "dWk" = (/obj/machinery/light_switch{pixel_y = 28},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "green"; dir = 4},/area/medical/virology) -"dWl" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Virology Laboratory"; req_access_txt = "39"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "delivery"},/area/medical/virology) +"dWl" = (/obj/structure/table,/turf/simulated/floor{dir = 2; icon_state = "whitegreen"},/area/medical/virologyaccess) "dWm" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/table,/obj/item/weapon/storage/box/syringes{pixel_x = 5; pixel_y = 5},/obj/item/weapon/storage/box/beakers,/obj/item/weapon/reagent_containers/dropper,/turf/simulated/floor{icon_state = "white"},/area/medical/virology) "dWn" = (/obj/structure/table,/obj/item/weapon/storage/fancy/vials,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "white"},/area/medical/virology) "dWo" = (/obj/structure/table,/obj/item/weapon/storage/lockbox/vials,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/turf/simulated/floor{icon_state = "white"},/area/medical/virology) @@ -10628,7 +10622,7 @@ "dWt" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/closet/secure_closet/personal/patient,/turf/simulated/floor{dir = 8; icon_state = "greencorner"},/area/medical/virology) "dWu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 2; icon_state = "green"},/area/medical/virology) "dWv" = (/obj/machinery/embedded_controller/radio/access_controller{id_tag = "virologyq_airlock_control"; name = "Virology Quarantine Access Console"; pixel_x = -8; pixel_y = -22; tag_exterior_door = "virologyq_airlock_exterior"; tag_interior_door = "virologyq_airlock_interior"},/turf/simulated/floor{icon_state = "green"; dir = 4},/area/medical/virology) -"dWw" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Virology Laboratory"; req_access_txt = "39"},/turf/simulated/floor{icon_state = "delivery"},/area/medical/virology) +"dWw" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 9},/area/maintenance/asmaint) "dWx" = (/turf/simulated/floor{dir = 8; icon_state = "whitegreen"},/area/medical/virology) "dWy" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) "dWz" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/computer/med_data/laptop,/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "white"},/area/medical/virology) @@ -10690,9 +10684,9 @@ "dXD" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/asmaint) "dXE" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plating,/area/maintenance/asmaint) "dXF" = (/turf/simulated/wall/r_wall,/area/medical/virologyaccess) -"dXG" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/medical/virologyaccess) -"dXH" = (/turf/simulated/floor{icon_state = "green"; dir = 8},/area/medical/virologyaccess) -"dXI" = (/turf/simulated/floor{icon_state = "green"; dir = 4},/area/medical/virologyaccess) +"dXG" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 8},/turf/simulated/floor/plating{dir = 1; icon_state = "warnplate"; nitrogen = 0.01; oxygen = 0.01},/area/maintenance/asmaint) +"dXH" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/engine/engine_eva) +"dXI" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/rig/atmos,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig/atmos,/obj/machinery/door/window/northright{name = "Atmospherics Hardsuits"; req_access_txt = "24"},/turf/simulated/floor,/area/engine/engine_eva) "dXJ" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/surgery) "dXK" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/surgery) "dXL" = (/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/surgery) @@ -10714,15 +10708,15 @@ "dYb" = (/obj/structure/closet/crate/freezer,/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/surgery2) "dYc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/poddoor{density = 0; dir = 4; icon_state = "pdoor0"; id = "virologyquar"; name = "Virology Emergency Quarantine Blast Doors"; opacity = 0},/turf/simulated/floor{icon_state = "delivery"},/area/medical/virologyaccess) "dYd" = (/obj/machinery/door/poddoor{density = 0; dir = 4; icon_state = "pdoor0"; id = "virologyquar"; name = "Virology Emergency Quarantine Blast Doors"; opacity = 0},/turf/simulated/floor{icon_state = "delivery"},/area/medical/virologyaccess) -"dYe" = (/obj/machinery/light{dir = 1},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor{dir = 1; icon_state = "whitered"},/area/medical/virology) -"dYf" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet,/obj/item/device/radio/intercom{freerange = 1; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 30},/turf/simulated/floor{dir = 1; icon_state = "whitered"},/area/medical/virology) -"dYg" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor{dir = 1; icon_state = "whitered"},/area/medical/virology) -"dYh" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/medical{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "virology_airlock_exterior"; locked = 1; name = "Virology Exterior Airlock"; req_access_txt = "39"},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "virology_airlock_control"; name = "Virology Access Button"; pixel_x = -24; pixel_y = 0; req_access_txt = "39"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/medical/virology) +"dYe" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/rig/atmos,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig/atmos,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window/northleft{name = "Atmospherics Hardsuits"; req_access_txt = "24"},/turf/simulated/floor,/area/engine/engine_eva) +"dYf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/light/small{dir = 4},/obj/structure/disposalpipe/junction{dir = 1; icon_state = "pipe-j2"},/turf/simulated/floor{icon_state = "floorgrime"},/area/engine/engine_eva) +"dYg" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/engine/engine_eva) +"dYh" = (/obj/machinery/suit_storage_unit/standard_unit,/obj/machinery/camera{c_tag = "Engineering EVA Storage"; dir = 1; network = list("SS13")},/turf/simulated/floor,/area/engine/engine_eva) "dYi" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/maintenance{name = "Operating Theatre 1 Maintenance Access"; req_access_txt = "45"},/turf/simulated/floor/plating,/area/medical/surgery) "dYj" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Operating Theatre 2 Maintenance Access"; req_access_txt = "45"},/turf/simulated/floor/plating,/area/medical/surgery2) "dYk" = (/obj/structure/rack{dir = 1},/obj/item/weapon/extinguisher,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/maintenance/asmaint) "dYl" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/maintenance/asmaint) -"dYm" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/medical/virology) +"dYm" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/engine/engine_eva) "dYn" = (/obj/structure/closet/secure_closet/medical2,/obj/machinery/light/small{dir = 4},/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/surgery) "dYo" = (/obj/machinery/power/apc{dir = 2; name = "Surgery APC"; pixel_y = -24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/surgery) "dYp" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/surgery) @@ -10730,22 +10724,22 @@ "dYr" = (/obj/structure/closet/secure_closet/medical2,/obj/machinery/light/small{dir = 8},/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/surgery2) "dYs" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Pre-Op Prep Room Maintenance Access"; req_access_txt = "45"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/medical/surgeryprep) "dYt" = (/turf/simulated/wall,/area/medical/surgeryprep) -"dYu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{dir = 2; icon_state = "green"},/area/medical/virologyaccess) -"dYv" = (/obj/machinery/light,/turf/simulated/floor{dir = 8; icon_state = "greencorner"},/area/medical/virologyaccess) +"dYu" = (/obj/structure/table/reinforced{icon_state = "table"},/obj/item/device/modkit/tajaran,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor,/area/engine/engine_eva) +"dYv" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/engine/engine_eva) "dYw" = (/obj/machinery/power/apc{dir = 2; name = "Surgery APC"; pixel_y = -24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/surgery2) -"dYx" = (/obj/machinery/light,/turf/simulated/floor{dir = 2; icon_state = "greencorner"},/area/medical/virologyaccess) +"dYx" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor,/area/engine/engine_eva) "dYy" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/closet/l3closet/virology,/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/item/clothing/mask/gas,/turf/simulated/floor{dir = 4; icon_state = "warnwhite"},/area/medical/virology) -"dYz" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/item/device/radio/intercom{broadcasting = 0; name = "Station Intercom (General)"; pixel_y = 26},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) -"dYA" = (/obj/structure/table,/obj/item/weapon/storage/box/syringes,/obj/item/weapon/storage/box/beakers,/obj/item/weapon/hand_labeler,/obj/structure/reagent_dispensers/virusfood{pixel_x = -30},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) -"dYB" = (/obj/machinery/disease2/incubator,/turf/simulated/floor{icon_state = "white"},/area/medical/virology) -"dYC" = (/obj/machinery/smartfridge/secure/virology,/turf/simulated/floor{icon_state = "white"},/area/medical/virology) -"dYD" = (/obj/machinery/disease2/isolator,/obj/item/device/radio/intercom{freerange = 1; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 30},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) -"dYE" = (/obj/machinery/light{dir = 1},/obj/machinery/computer/centrifuge,/obj/item/weapon/storage/secure/safe{pixel_x = 5; pixel_y = 29},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) +"dYz" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/airlock/glass_engineering{name = "Engineering EVA Storage"; req_one_access_txt = "11;24"},/obj/machinery/door/firedoor/border_only{dir = 1; layer = 2.4; name = "Engineering Firelock"},/turf/simulated/floor,/area/engine/engine_eva) +"dYA" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "floorgrime"},/area/engine/engine_eva) +"dYB" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/decal/cleanable/blood/oil/streak{amount = 0},/turf/simulated/floor{icon_state = "floorgrime"},/area/engine/engine_eva) +"dYC" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/engine/engine_eva) +"dYD" = (/obj/machinery/door/airlock/engineering{name = "Engineering EVA Storage"; req_access_txt = "12"; req_one_access_txt = "11;24"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 1; layer = 2.4; name = "Engineering Firelock"},/turf/simulated/floor{icon_state = "floorgrime"},/area/engine/engine_eva) +"dYE" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/engine/engine_eva) "dYF" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) -"dYG" = (/obj/machinery/shower{icon_state = "shower"; dir = 4},/obj/structure/sign/securearea{pixel_x = -32; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor{dir = 8; icon_state = "warnwhite"},/area/medical/virology) +"dYG" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/engine/engine_eva) "dYH" = (/obj/machinery/door/airlock/maintenance{name = "Incinerator Access"; req_access_txt = null; req_one_access_txt = "5;12"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/incinerator) -"dYI" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) -"dYJ" = (/obj/machinery/camera{c_tag = "Virology Monkey Pen"; dir = 2},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) +"dYI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/engine/engine_eva) +"dYJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/sign/securearea{pixel_x = -32},/turf/simulated/floor/plating,/area/engine/engine_eva) "dYK" = (/obj/structure/disposalpipe/junction{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) "dYL" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) "dYM" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/asmaint) @@ -10754,11 +10748,11 @@ "dYP" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) "dYQ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/maintenance/asmaint) "dYR" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/maintenance/asmaint) -"dYS" = (/obj/machinery/camera/xray{c_tag = "Virology Access"; network = list("SS13","Medical")},/obj/structure/closet/wardrobe/virology_white,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 1; name = "Virology APC"; pixel_y = 24},/turf/simulated/floor{icon_state = "warnwhite"; dir = 5},/area/medical/virology) -"dYT" = (/obj/structure/sign/deathsposal,/turf/simulated/wall/r_wall,/area/medical/virology) +"dYS" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/maintenance{name = "Engineering EVA Storage Maintainance"; req_access_txt = "12"; req_one_access_txt = "11;24"},/turf/simulated/floor,/area/engine/engine_eva) +"dYT" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/engine/engine_eva) "dYU" = (/obj/structure/sign/redcross{desc = "The Star of Life, a symbol of Medical Aid."; icon_state = "lifestar"; name = "Medbay"; pixel_x = 0; pixel_y = 32},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) -"dYV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) -"dYW" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/turf/simulated/floor{dir = 9; icon_state = "warnwhite"},/area/medical/virology) +"dYV" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor{icon_state = "floorgrime"},/area/engine/engine_eva) +"dYW" = (/obj/machinery/door/poddoor{density = 0; dir = 4; icon_state = "pdoor0"; id = "virologyquar"; name = "Virology Emergency Quarantine Blast Doors"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "delivery"},/area/medical/virologyaccess) "dYX" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/machinery/smartfridge/secure/extract,/turf/simulated/floor{dir = 2; icon_state = "whitecorner"},/area/toxins/xenobiology) "dYY" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) "dYZ" = (/obj/machinery/door/window/southright{dir = 4; name = "Primate Pen"; req_access_txt = "39"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor{dir = 4; icon_state = "whitegreen"},/area/medical/virology) @@ -10788,12 +10782,9 @@ "dZx" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor{dir = 4; icon_state = "blue"},/area/medical/surgeryprep) "dZy" = (/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = -27},/obj/structure/stool/bed/chair/comfy/brown{icon_state = "comfychair_brown"; dir = 4},/turf/simulated/floor{icon_state = "bcarpet08"},/area/medical/psych) "dZz" = (/obj/structure/stool/bed/psych,/obj/item/weapon/bedsheet/brown,/turf/simulated/floor{icon_state = "bcarpet09"},/area/medical/psych) -"dZA" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor,/area/medical/virologyaccess) "dZB" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/table,/obj/item/bodybag/cryobag{pixel_x = -3},/obj/item/bodybag/cryobag{pixel_x = -3},/obj/item/weapon/gun/syringe,/turf/simulated/floor{icon_state = "dark"},/area/medical/biostorage) "dZC" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{dir = 8; name = "Medbay Secondary Storage APC"; pixel_x = -25},/obj/structure/bedsheetbin,/obj/structure/table,/turf/simulated/floor{icon_state = "dark"},/area/medical/biostorage) "dZD" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{dir = 4; pixel_x = -32; pixel_y = 0},/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/patient_wing) -"dZE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area) -"dZF" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 8},/turf/simulated/floor/plating,/area) "dZG" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/machinery/camera{c_tag = "Medbay Mental Health Room"; dir = 1; network = list("SS13")},/turf/simulated/floor{icon_state = "bcarpet04"},/area/medical/psych) "dZH" = (/obj/structure/closet/secure_closet/personal/patient,/obj/machinery/camera{c_tag = "Medbay Recovery Ward"; dir = 1; network = list("SS13")},/turf/simulated/floor{dir = 6; icon_state = "whitered"},/area/medical/ward) "dZI" = (/obj/structure/stool/bed/chair/comfy/brown,/turf/simulated/floor{icon_state = "bcarpet06"},/area/medical/psych) @@ -10811,8 +10802,6 @@ "dZU" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/patient_wing) "dZV" = (/obj/machinery/door/airlock/medical{autoclose = 0; icon_state = "door_open"; id_tag = "cubicle1"; name = "Cubicle 1"},/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/patient_wing) "dZW" = (/obj/structure/toilet{dir = 8},/obj/machinery/light/small{dir = 1},/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/patient_wing) -"dZX" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 9},/area) -"dZY" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 8},/turf/simulated/floor/plating{dir = 1; icon_state = "warnplate"; nitrogen = 0.01; oxygen = 0.01},/area) "dZZ" = (/turf/simulated/floor{dir = 4; icon_state = "whiteyellowcorner"},/area/crew_quarters/sleep_male/toilet_male{name = "\improper Engineering Washroom"}) "eaa" = (/obj/structure/table,/obj/item/weapon/reagent_containers/spray/cleaner{desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; name = "Surgery Cleaner"},/turf/simulated/floor{dir = 4; icon_state = "whitered"},/area/medical/surgery) "eab" = (/obj/structure/table,/obj/item/weapon/FixOVein,/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = -27},/obj/item/weapon/surgicaldrill,/turf/simulated/floor{icon_state = "white"},/area/medical/surgery) @@ -10862,8 +10851,6 @@ "eaT" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Virology Access"; req_access_txt = "39"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/medical/virologyaccess) "eaU" = (/obj/structure/sign/biohazard,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall/r_wall,/area/medical/virologyaccess) "eaV" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area) -"eaW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area) -"eaX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area) "eaY" = (/obj/machinery/light/small,/turf/simulated/floor{icon_state = "bluecorner"},/area/medical/virologyaccess) "eaZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/asmaint) "eba" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall,/area/medical/surgery2) @@ -10885,15 +10872,11 @@ "ebq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{dir = 4; icon_state = "whitered"},/area/medical/surgery) "ebr" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor{icon_state = "white"},/area/medical/surgery) "ebs" = (/obj/machinery/optable,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/surgery) -"ebt" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/asmaint) "ebu" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/medical{name = "Operating Theatre 2 Storage"; req_access_txt = "45"},/turf/simulated/floor{icon_state = "white"},/area/medical/surgery2) "ebv" = (/obj/machinery/light{dir = 8},/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = -27},/obj/structure/closet/wardrobe/medic_white,/turf/simulated/floor{icon_state = "blue"; dir = 8},/area/medical/surgeryprep) "ebw" = (/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/structure/table,/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/camera{c_tag = "Medbay Surgery Prep"; dir = 8; network = list("SS13")},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor{icon_state = "blue"; dir = 4},/area/medical/surgeryprep) "ebx" = (/obj/machinery/status_display,/turf/simulated/wall,/area/medical/surgery) "eby" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/medical{name = "Operating Theatre 1 Storage"; req_access_txt = "45"},/turf/simulated/floor{icon_state = "white"},/area/medical/surgery) -"ebz" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor{dir = 4; icon_state = "blue"},/area/medical/virologyaccess) -"ebA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor,/area/medical/virologyaccess) -"ebB" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor{icon_state = "blue"; dir = 8},/area/medical/virologyaccess) "ebC" = (/obj/machinery/status_display,/turf/simulated/wall,/area/medical/surgery2) "ebD" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 4; name = "Medbay APC"; pixel_x = 25},/obj/machinery/light{dir = 1},/turf/simulated/floor{dir = 4; icon_state = "bluecorner"},/area/medical/virologyaccess) "ebE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/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{dir = 1; icon_state = "blue"},/area/medical/virologyaccess) @@ -10979,12 +10962,12 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaiabAaaiabwabxabvabyabnabpabkabDaaPabEaaiaafaaaaaaaaaaafaaVabFabuabGaaVaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaafaaiabKaaPabIabJaaPabSabRabMabMabNaaPabOaaiaafaafaagaafaafabPabuabsabuabPaafaagaaaaaaaafaagaagaagaafaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaaaaacaacaacaacaacaaaaacaacaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaaaaadaadaadaadaadaaaaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaiabKaaPabIabQaaPabLabHaaaaaaaaaaaPabTabTabTabTabTaafaafabUabsabuabsabVaafaafaafaafaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaaaaacaacaacaacaacaaaaacaacaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaaaaadaadaadaadaadaaaaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaiamSaaPabXabYaaiamTamUaaiaaaaaaabTabTacbaccacdabTabTaafaaVabsabsabuaaVaceaceaceaceaceaceacfacfacfacfacfacfaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaagaaiamXachancamZaneandanfaaPaaaabTabTapeacoacoacoapVabTabTaaVacqabsacraaVaceacsactacuacvacwacfamVamVamVamVacfaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaiacxamvalBamuamnamkacDaaPaaaabTacEalbacGacoacHalaacJabTacKacLacMacNacOaceacsacPacQacRamdamfamcamcamcamcacfaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTaaiaaiaaiaaiakAamIamDamCaaPaaPaaPaaPaaaabTacYalbacZacoacHalaadaabTadbadcaddadeadfaceacsactamJamKamQamRamxamcamcamwacfaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTadiadjadkadlaldalcaloalhaavadqadraaPaaaabTadsalbadtacoacHalaaduabTadvadwadxadyadzaceaceaceakSakWaceacfakJakKakLakMacfaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTadCadDadEadDalxalvalBalAadIadJadJaaPaaaabTabTalralsacoalKalUabTabTadOalVadxalWaaVaceadRadSalFalGadVadWadWalqalpadWadWaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaaaaadaadaadaadaadaaaaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaiamSaaPabXabYaaiamTamUaaiaaaaaaabTabTacbaccacdabTabTaafaaVabsabsabuaaVaceaceaceaceaceaceakJakJakJakJakJakJaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaagaaiamXachancamZaneandanfaaPaaaabTabTapeacoacoacoapVabTabTaaVacqabsacraaVaceacsactacuacvacwakJavKavKavKavKakJaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaiacxamvalBamuamnamkacDaaPaaaabTacEalbacGacoacHalaacJabTacKacLacMacNacOaceacsacPacQacRamdamxamfamfamfamwakJaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTaaiaaiaaiaaiakAamIamDamCaaPaaPaaPaaPaaaabTacYalbacZacoacHalaadaabTadbadcaddadeadfaceacsactamJamKamQauZamVamfamfamRakJaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTadiadjadkadlaldalcaloalhaavadqadraaPaaaabTadsalbadtacoacHalaaduabTadvadwadxadyadzaceaceacealpakWaceakJakKakLakMakSakJaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTadCadDadEadDalxalvalBalAadIadJadJaaPaaaabTabTalralsacoalKalUabTabTadOalVadxalWaaVaceadRadSalFalGadVadWadWalqamcadWadWaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTadZaeaakdakcakbakaajZajYaaJaehaeiaaPaaaaaaabTaejajXacoajWaemabTaenaaVajVaepajUaaVaeraesaetajSajTaewaexaeyajRaeAaeBadWadWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTaaiaaiaaiaaiakAaeCakzakyaeFaeFaeFaeFaeFaeFabTabTakxaeHakIabTabTaeJakFakGaeMakHakEaePaeQaeRakBakCaeUakDaeWakwaeYaeZafaafbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcaaaaaaaaaafcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiafdafeaquafgaqvalAaeFafiafjafjafjafjaenafkaqwafmaqDafoaenafpakBafqafraqEaqGaqHaqFaqFaqJaqMafyaqIafAaqRafCafDafEafFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -11024,89 +11007,89 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafazQasSazRavtazSazTazUazVazWazSavtazXazYasSazZaAaatKaAbaAcaAcaAcaAcaAcaAcavzbezaAeazbaAfaAgaAhazbaAiapaapaapaapaapaapaapaapaaAjaygaafaAkaAkaAkaAkaAkaAkaAkaafaygaykaylaAlaAmaAnaAoaAlaylaQnaApaxraxraxraxraAqaAraypaAsaAraAtaxraxraxraxrayzapEaAualNaQvaNFaHybdEaHqaHravdaAvazBazBazBazBazBazBaAwaAxaAyazBasPasPasPasPaAzasPasPbdKasRasRasRasRasRbdKasPaaaaaaaaaaaaaaeaaaaaaaaaaaaaafaAAaABbdTaADaAAaafaaaaaaaafaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxRayVaAEaAFaAFaAFaAFaAGayVaxRaAHasSaAIaAJaAKaAKaAKaAKaAKaAKaAKaAKawibfxbfzazbaAMaANaAOazbaAPaAQaAPaAPaAPaAPaAPaAPaAPaAPaARaaaaAkaASaATaAUaAVaAWaAkaaaaygaykaylaAlaAXbewaAZaAlaylaQnapxaxraBaaBbazlaBcaBdazoazpaBdaBeazsaBfaBfaxrayzapEayAalNbdZaIkaIhbdEbejbelavdaAvazBaBiaAxaBjaBjazBaAwaBkaAyazBaBlaBmaBnaBoaBpaBqaafbfBbfdbfdbfdbfdbfdbfgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaAAaBuaBvaBwaAAaafaaaaaabeXbbzbbzbbzbbzbeHbeObbzbbzbbzbbzbeDbeDbbzbeGbeFbeEaBFaBGaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaBHaBIaBJaBIaBIaBKaBLaBIaBIaBJaBMaBNasSayWaBOaQlaQjaBRaBSaBTaBUaBVaAKawiaPOatKazbazbaBXaBYaARaBZaCaaCbaCcaCdaCeaCfaCgaChaCiaARaafaAkaQmaCkaClaCmaCnaAkaafaygaykaylaCoaCpaCqaCpaCraylaQnaCsaxrayoaypaCtaCuaAraCvaAsaAraCwaCxaypaCyaxrayzapEayAalNaQvaIAaIDaQxaIvaHraCAaCBazBaCCaAxaAxaAxazCaCDaCEaCFazBaCGaCHaCIaCJaYfaBqaaaaafaaaaafaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaAAaCLaCMaCNaAAaBqaCOaCPaQBaQSaQDaQDaQDaQDaQDaQDaQFaRdaRdaRgaRgaRfaRdaRdaRgaRhaDaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBHaBMaBIaDbaDcaDcaDdaDeaDfaDgaDhaDcaDcaDiaDjayUayWaDkaAKaRqaDmaDnaDoaDnaDpaDqaDraDsaqYaRiaDuaDvaAcaDwaDxaDyaDzaDzaDzaDAaDzaDzaDBaCaaARaaaaAkaRAaRTaRVaCmaSaaAkaaaaygaykaylaRuaDHaDIaDJaRyaylaQnaDLaxraxraxraxraDMaAraypaDNaBdaDOaTuaypaDQaxraDRasxaDSalNaQvaTsaShaShaShaSEaScaSfaTiaTnaSFaSPaSPaSPaUgaSPaTFaTTaTUaTVaUkaUGaUKaBqaBqaBqaBqaBqaBqaBqaBqaBqaBqaCOaCPaBqaBqaBqaCOaEjaEkaBqaBqaAAaAAaElaEmaAAaEnaVqaVoaVpaVsaEsaEsaEsaEsaEsaEnaVraEuaEuaVdaVdaUNaEuaEyaULaVnaEyaEyaEyaEyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDiaEBaECaEDaDcaEEaDcaEEaDcaEEaDcaEEaDcaEFaEGazSayWaEHaAKaVuaEJaEKaELaEMaENaAKaEOaVtaAcaEQaAcaERaqYaAPaESaDBaDzaDzaDzaDzaDzaDzaETaWjaWgaVJaVIaWMaWNaWKaWLaWJaAkaafaygaWIaWpaWuaWxaWqaWsaWkaWpaVwaFlaxraFmaypazlaFnaBdazoaFoaAraCwaVvaypaFqaxraFraFsaFtalNaVHagjagjagjaVAaVEaVFaVGaVxaVyaVzaVxaXfaVxaXeaVxaXgaXhaFGaFHaFIaBoaXjaXCaXXaXVaXVaXCaYcaXYaXYaXYaXYaXYaYdaXYaXYaYwaYgaYeaYIaYHaYGaYxaWOaWPaWQaWQaWQaWRaWSaWTaGeaEsaGfaGgaGhaEsaEuaWUaEuaGjaGkaXcaGmaGnaGoaGpasHaGraGsaGtaGuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGvaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaYbaDcaDcaBJaDcaEEaDcaEEaGxaEEaDcaEEaDcaEFaEGazSayWaGyaAKaYQaYRaYKaYPaYKaQlaQlaYJaYNaYOaYLaYMaYLaYLbakbajaGKaGLaGLaGLaGMaGLaGLaGNaGOaARaaaaZXaAkaGQaZOaGQaAkaAkaaaaygavOaylaGTaZIaZiaZqaZDaZEaZhaHaaxraHbaypaCxaCuaAraypaAsaAraCwaZgaypaHdaxraHeaHfaHgalNaHhalNalNalNaZbalNaHjaHkazBaHlaAxazBaHmazBaHnazBaHobcvbcwbcNbczbdNbcXbbybdlbdmbbvbdAbbwbbvbbvbbxbbzbbybbAbbybbFbbybbybbObcubcbbawbawbaCbaSbawbaxbawbaWbaTaHOaHPaHQaHRaHSaHTaEsaHUbaXaEuaHWaHXbavaHZaGnaIaaIbasHaIcaEyaEyaEyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDiaIdaECaEDaDcaEEaDcaEEaDcaEEaDcaEEaDcaEFaEGazSaIeawzawyawxawuawuawuawzawCawDawzawAaImaInawBauKauKaAPaGOaIpaCaaIqaGOaGOaIraIsaItaIuaARaaaawaaaaavMavNavMaaaaafaaaaygavOaylaIyaIzavZaIBaICaylavLapaaxraIEaypazlaIFaIGazoaIHaIIaIJaIKaILaIMaxraINaIOaIPaIQaIRaISaaaaaaauZaIUaIVaIWazBaIXaAxaAxaAxaCEaAxaAxaAxauOaBoaKyaBoaBoavJaBoaJcaBoaJdavHavGaJgaJhaJiaJjaJkavFaJjavEaJjaJjaJjaJjavDaJjaJjavCaJjaJjaJjaJjasIarZaHPaJraJsaJtaJuaJvaEsavBavpavlavmavnavoaHZaJCaIaaIbasHaIbaJDaJEaJFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJHaJIaBIaDbaDcaDcaDcaJJaDcaDcaJKaDcaDcaDiaJLaJMayWaxTaJNaJOaJOaJOaJOaJOaJOaJOaJPasDatKatKavkatKatKaAPaJSaJTaJUaJVaJVaJVaJVaJWaJXaJYaARaJZavaaKbaKcavbaKeaKbaKbaKfaygavcaylaylaylavjaKiaylaylauYaKkaxraxraxraxraKlaKmaCxaCxaKnaKoaxraxraxraxraIOaIOaIOaIOaKpaKqaKraKsauZaKtaIVaKuazBazBazBazBazBazBazBazBazBauOaKwaKvaKxaIZauMaKAaKBaKCaJdauyauWauXaKGaKHaJjaKIauVaKKauRaKKaKMaKNaKOauQaKQaKRauxaKTaKUaKVaJjauwauvaKYaJraKZaJtaJuaLaaEsaLbauuaLdavfauoaveaunaEuaEyaLhasHaIbaLiaLjaLkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJHaBIaBJaBIaBIaBKaBLaBIaBIaBJaJIaLmasSaLnaxTawXaLoaLoaLpaLoaLqatHaLraLsasDaLtaLuaACaLwaLxaLyaLzaLAaLzaLzaLzaLzaLzaLzaLzaLBaLCazNaAdaLFaLFayTaLHaLFaLFaLFaLIazKaLKaLLaLFazJaLNaLOaLPaLQaIOaLRaLSaIOaIPaLTaLTaLTaLTaLTaLTaLUaLVaLWaLXaLYaLZaMaaMbaMcaIOaIOaIOaMdaMeaMfaMeaMgaMhaMiaMjaIOaMkaIOaBoaMlaxMaOOaMoaMnaMpaxKaMraMsaMtaJdaxLaMvaMwaMwaMxaJjaMyaxJaMAaxBaMAaMAaMCaMDaxDaMDaMFayOayCayQaMDaJjasIayRayvayvaysayBayvaMNaEsaMOaMPaEuaMQaMRaHZavTaEuaMSaymayeaIbaEyaEyaEyaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBHaBMaBIaDbaDcaDcaDdaDeaDfaDgaDhaDcaDcaDiaDjayUayWaDkaAKaRqaDmaDnaDoaDnaDpaDqaDraDsaqYaRiaDuaDvaAcaDwaDxaDyaDzaDzaDzaDAaDzaDzaDBaCaaARaaaaAkaRAaRTaRVaCmaSaaAkaaaaygaykaylaRuaDHaDIaDJaRyaylaQnaDLaxraxraxraxraDMaAraypaDNaBdaDOaTuaypaDQaxraDRasxaDSalNaQvaTsaShaShaShaSEaScaSfaTiaTnaZbaSPaSPaSPaUgaSPaTFaTTaTUaTVaUkaUGaUKaBqaBqaBqaBqaBqaBqaBqaBqaBqaBqaCOaCPaBqaBqaBqaCOaEjaEkaBqaBqaAAaAAaElaEmaAAaEnaVqaVoaVpaVsaEsaEsaEsaEsaEsaEnaVraEuaEuaVdaVdaUNaEuaEyaULaVnaEyaEyaEyaEyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDiaEBaECaEDaDcaEEaDcaEEaDcaEEaDcaEEaDcaEFaEGazSayWaEHaAKaVuaEJaEKaELaEMaENaAKaEOaVtaAcaEQaAcaERaqYaAPaESaDBaDzaDzaDzaDzaDzaDzaETaWjaWgaVJaVIaWMaWNaWKaWLaWJaAkaafaygaWIaWpaWuaWxaWqaWsaWkaWpaZdaZcaxraFmaypazlaFnaBdazoaFoaAraCwaVvaypaFqaxraFraFsaFtalNaVHagjagjagjagjaVEaVFaVGaVxaVybazaVxaXfaVxaXeaVxaXgaXhaFGaFHaFIaBoaXjaXCaXXaXVaXVaXCaYcaXYaXYaXYaXYaXYaYdaXYaXYaYwaYgaYeaYIaYHaYGaYxaWOaWPaWQaWQaWQaWRaWSaWTaGeaEsaGfaGgaGhaEsaEuaWUaEuaGjaGkaXcaGmaGnaGoaGpasHaGraGsaGtaGuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGvaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaYbaDcaDcaBJaDcaEEaDcaEEaGxaEEaDcaEEaDcaEFaEGazSayWaGyaAKaYQaYRaYKaYPaYKaQlaQlaYJaYNaYOaYLaYMaYLaYLbakbajaGKaGLaGLaGLaGMaGLaGLaGNaGOaARaaaaZXaAkaGQaZOaGQaAkaAkaaaaygavOaylaGTaZIaZiaZqaZDaZEaZhbbNaxraHbaypaCxaCuaAraypaAsaAraCwaZgaypaHdaxraHeaHfaHgalNaHhalNalNalNalNalNaHjaHkazBaHlaDFazBaHmazBaHnazBaHobcvbcwbcNbczbdNbcXbbybdlbdmbbvbdAbbwbbvbbvbbxbbzbbybbAbbybbFbbybbybbObcubcbbawbawbaCbaSbawbaxbawbaWbaTaHOaHPaHQaHRaHSaHTaEsaHUbaXaEuaHWaHXbavaHZaGnaIaaIbasHaIcaEyaEyaEyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDiaIdaECaEDaDcaEEaDcaEEaDcaEEaDcaEEaDcaEFaEGazSaIeawzawyawxawuawuawuawzawCawDawzawAaImaInawBauKauKaAPaGOaIpaCaaIqaGOaGOaIraIsaItaIuaARaaaawaaaaavMavNavMaaaaafaaaaygavOaylaIyaIzavZaIBaICaylavLaQnaxraIEaypazlaIFaIGazoaIHaIIaIJaIKaILaIMaxraINaIOaIPaIQaIRaISaaaaaaaUnaIUaIVaIWazBaIXaDFaAxaAxaCEaAxaAxaAxauOaBoaKyaBoaBoavJaBoaJcaBoaJdavHavGaJgaJhaJiaJjaJkavFaJjavEaJjaJjaJjaJjavDaJjaJjavCaJjaJjaJjaJjasIarZaHPaJraJsaJtaJuaJvaEsavBavpavlavmavnavoaHZaJCaIaaIbasHaIbaJDaJEaJFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJHaJIaBIaDbaDcaDcaDcaJJaDcaDcaJKaDcaDcaDiaJLaJMayWaxTaJNaJOaJOaJOaJOaJOaJOaJOaJPasDatKatKavkatKatKaAPaJSaJTaJUaJVaJVaJVaJVaJWaJXaJYaARaJZavaaKbaKcavbaKeaKbaKbaKfaygavcaylaylaylavjaKiaylaylauYaCWaxraxraxraxraKlaKmaCxaCxaKnaKoaxraxraxraxraIOaIOaIOaIOaKpaKqaKraKsaUnaKtaIVaKuazBazBaCXazBazBazBazBazBazBauOaKwaKvaKxaIZauMaKAaKBaKCaJdauyauWauXaKGaKHaJjaKIauVaKKauRaKKaKMaKNaKOauQaKQaKRauxaKTaKUaKVaJjauwauvaKYaJraKZaJtaJuaLaaEsaLbauuaLdavfauoaveaunaEuaEyaLhasHaIbaLiaLjaLkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJHaBIaBJaBIaBIaBKaBLaBIaBIaBJaJIaLmasSaLnaxTawXaLoaLoaLpaLoaLqatHaLraLsasDaLtaLuaACaLwaLxaLyaLzaLAaLzaLzaLzaLzaLzaLzaLzaLBaLCazNaAdaLFaLFayTaLHaLFaLFaLFaLIazKaLKaLLaLFazJaLNaLOaLPaLQaHaaLRaLSaIOaIPaLTaLTaLTaLTaLTaLTaLUaLVaLWaLXaLYaLZaMaaMbaMcaIOaIOaIOaFTaMeaMfaMeaMgaMhaFlaMjaIOaMkaIOaBoaMlaxMaOOaMoaMnaMpaxKaMraMsaMtaJdaxLaMvaMwaMwaMxaJjaMyaxJaMAaxBaMAaMAaMCaMDaxDaMDaMFayOayCayQaMDaJjasIayRayvayvaysayBayvaMNaEsaMOaMPaEuaMQaMRaHZavTaEuaMSaymayeaIbaEyaEyaEyaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawXayVaMVaAFaAFaAFaAFaMWayVawXaAHasSaAIaMXaMYaMZavSaNbaNbaNcatHaNdaLsaxAaNfaLuaxzaNhaNiaNjaNkaNlaLzaLzaLzaLzaLzaLzaLzaLBaNmaxhaLzaLzaLzaxpaxiaLzaLzaLzaLzaxvaLzaLzaLzaxtaNmaLuaLPaIOaIOaIOaIOaIOaIOaIOaIOaIOaIOaIOaIOaNsaNtaNuaNvaNwaNxaNyaNzaNAaIOaIOaIOaLPaIOaIOaIOaIOaIOaIOaIOaIOaNBaIOaBoaNCawGaMpaNEaMpaMpawEaNGaMsaNHaJdawFawJawSaNLaNMaJjaNNawTaNPawHaNRaNSaJjaNTawIaNTaJjaJjaJjavCaJjaJjasIarZaNVaHPaHPaNWaHPaNXaEsaEuaEuaEuaEuaEuaEuavQaEuaIbaIbasHaIbaNZaOaaEyaaaaafaaaaaaaaaaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafazQasSaMYavtazSaObaOcaOdaOeazSavtaOfaOgasSayWaxTaMYaOhaOiaNbaNbaNcatHaOjaLsasDaNfaLuasXaOlaOmaOmaOmaOnaOoaOpaOmaOqaOmaOmaOraOsaOtatmaOmaOvaOwaOxathatlatkatjatiatcatbatbasYatdaNmaLuaLPaIOaOHaIOaOIaOIaOIaOIaOIaOIaOIaOIaOJaOKaOIaOIaOIaOIaOLaOIaOIaOIaOIaOIaOMaONaOIaOIaOIaOIaOIaOIaOIaIOaIOaIOaBoaAYasOaOQaOQaOQaORasQaNGaMsaBQaJdaJdaJdaJdaJdaOUaJjaOVasKasLasNaNPaNPaJjaOZasMaPbaPcaPbaPbasJaPeaJjasIarZaPfaPfaPgaPhaPiaPiaPjaEsaPkaPlaPmaEyaskaVbasbaIbaIbasHaIbaEyaPsaEyaPtaPtaPtaPuaPvaPwaaaaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafatHaxRayVaJMayWaxTaxTayXaJMayVaJMaPxawYaPyaxTaxRaPzaPzaLpaPzaLqatHaPAaLsasDaPBaPBasCaPDaPBaPEaPEaPEaPEaPEaPFaPGaPEaPEaPEaPEaPEasEaPIaPJaPIaPKasGaPMaLzaLAaPNasFaPPaPQaLAaLzaPRaPSaPSaIOaIOaIPaPTaKraKraPUaPUaPUaPUaPVaPWaPXaPYaPZaQaaQaaQbaQcaQaaQdaQeaQfaPWaQgaPUaPUaPUaPUaKraKraQhaINaIOaIOaBoaQiashaQkaQkaQkaQkasyassasiavKaQkarFaQraQsaQtaQuaJdaJdaszaQwasBaQyaQzaJjaQAasAaQCaQCaQCaQCascaQEaJjasaarZaQGaHPaPgaPhaHPaHPaQHaEsaQIaQJaQKaEyaQLarpaPraSoaPoasgaIbaQQaQRaEyasfaQTaPtaQUaQVaQWaafaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawXaQXaxTaQYaPyaxTaxTaQZaQYaxTaQXaPyaxTaxTaxTaRaaRbaRbaRbaRbaRbaRbaRbaRcatUaPBaReaufausautaumaRjaRkaRlaRmaRnaRoaRpaukaRraRsaRtaujaRvaRwaRxaPKatwaPMaPMaRzaPMaugaPSaPSaRBaRCaPSaPSaPSaRDaIOaIPaREaaaaaaaaaaaaaaaaaaaaaaPWaRFaRGaRHaRIaRJaRKaRJaRLaRMaRNaROaPWaaaaaaaaaaaaaaaaaaaaaaRPaINaIOaRQaRRaRSatDaQoaQoaQoaQoaQoaRUatGaQoaQoaQoaQraMpaRWaRXaRYaRZatxaSbatyaSdaSeaJdaPbatCaSgaSgaSgaSgatTaSiaJjasIarZaSjaSjaPgaPhaSkaSkaSlaEsaEsaSmaEsaEyaLhatZaulaulaulatNaTJaEyaEyaEyaSpaSqaSraSsaStaSuaafaafaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafatHaxRayVaJMayWaxTaxTayXaJMayVaJMaPxawYaPyaxTaxRaPzaPzaLpaPzaLqatHaPAaLsasDaPBaPBasCaPDaPBaPEaPEaPEaPEaPEaPFaPGaPEaPEaPEaPEaPEasEaPIaPJaPIaPKasGaPMaLzaLAaPNasFaPPaPQaLAaLzaPRaPSaPSaIOaIOaIPaPTaKraKraPUaPUaPUaPUaPVaPWaPXaPYaPZaQaaQaaQbaQcaQaaQdaQeaQfaPWaQgaPUaPUaPUaPUaKraKraQhaINaIOaIOaBoaQiashaQkaQkaQkaQkasyassasiaQoaQkarFaQraQsaQtaQuaJdaJdaszaQwasBaQyaQzaJjaQAasAaQCaQCaQCaQCascaQEaJjasaarZaQGaHPaPgaPhaHPaHPaQHaEsaQIaQJaQKaEyaQLarpaPraSoaPoasgaIbaQQaQRaEyasfaQTaPtaQUaQVaQWaafaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawXaQXaxTaQYaPyaxTaxTaQZaQYaxTaQXaPyaxTaxTaxTaRaaRbaRbaRbaRbaRbaRbaRbaRcatUaPBaReaufausautaumaRjaRkaRlaRmaRnaRoaRpaukaRraRsaRtaujaRvaRwaRxaPKatwaPMaPMaRzaPMaugaPSaPSaRBaRCaPSaPSaPSaRDaIOaIPaREaaaaaaaaaaaaaaaaaaaaaaPWaRFaRGaRHaRIaRJaRKaRJaRLaRMaRNaROaPWaaaaaaaaaaaaaaaaaaaaaaRPaINaIOaCjaBsaCQaCzaQoaQoaQoaQoaQoaRUatGaQoaQoaQoaQraMpaRWaRXaRYaRZatxaSbatyaSdaSeaJdaPbatCaSgaSgaSgaSgatTaSiaJjasIarZaSjaSjaPgaPhaSkaSkaSlaEsaEsaSmaEsaEyaLhatZaulaulaulatNaTJaEyaEyaEyaSpaSqaSraSsaStaSuaafaafaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaxRaSvaSwaSvaSvaSvaSvaSvaSvaSwaSvaSvaSxaxTaxTaSyaxTaxTaSzaxTaSAaSBaSCaSDatuaPBaReattaSGaPEaSHaRnaRnaRnaRnaRnaRoaSIaRnaRnaRnaRtasEaSJaSKaSLaPKatwaPMaSMaSNaSOatvaPSaSQaSRaSSaSTaSUaSVaIOaIOaIPaREaaaaaaaaaaaaaPWaPWaPWaPWaSWaSXaSYaSZaTaaTbaTcaTdaTeaTfaTgaPWaPWaPWaPWaaaaaaaaaaaaaRPaINaIOaIOaThaQoatnaTjaTkaQoaTlaTmaCIatqaToaTkaQoaQraMpaTpaRXaTqaTratraTtatsaTvaRXaTwaTxaTyaSgaTzaTAaSgaTBaPbaJjasIarZaQGaHPaPgaPhaHPaHPaHPaTCaTDaHPaTEaEyasnastaSoaSoaSoasgaIbaIbaEyaTKaSsaSsaSsaSsaStaTLaTMaTMaTNaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasSasSaTOaTPaTPaTPaTPaTPaTPaTPazYasSatHaTQaTRaTSaTSaTSaFuaTSaTSaTSaBgaTSaBgaPBaReaFvaTWaPEaTXaRnaRnaTYaTZaUaaUbaTYaRnaRnaRnaUcasEaUdaUeaUfaPKaFkaPMaUhaUiaUjaFpaPSaUlaSUaSUaSSaSUaUmaIOaIOaIPaKqaPVaUnaUoaPWaPWaUpaUqaUraUsaUtaUtaUuaUvaUtaUuaUvaUtaUwaUxaUyaUzaUAaPWaPWaUoaUnaUBaUCaINaIOaIOaBoaUDatnaToaTkaQoaUEaUFaQoaFjaUHaTkaQoaQraMpaUIaRXaUJaFzaFyaUMaFxaUOaRXaUPaUQaURaSgaUSaUTaSgaUUaUVaJjasIarZaUWaUWaPgaPhaUXaHPaHPaUYaHPaUZaVaaEyaIbaTGaTHaSoaTGaFwaQqaVfaEyaVgaSsaSsaSsaSsaSsaVhaViaVjaVkaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaafaVmazTaxVaxTaExaEwaEvaEtaEraEXaEWaEVaEUaEPaEIaEAaEzaEqaPEaVBaRnaRnaTYaUaaVCaVDaTYaRnaRnaRnaRtasEaPKaPKaEfaPKaEgaEhaEhaEhaEhaEoaEiaEpaSSaSSaSSaSSaUmaIOaIOaIPaLTaLTaVKaVLaVMaPWaVNaTbaUtaVOaUtaUtaUtaUtaVPaUtaVQaUtaVRaVSaVSaVTaVUaPWaVVaVLaVWaVXaLTaINaIOaIOaThaQoatDaQoaQoaQoaVYaVZaQoaFjaWaaTkaQoaQraMpaWbaRXaWcaWdaWeaWfaFiaUOaWhaJdaPbaURaWiaSgaSgaSgaUUaPbaJjaFharZaEsaEsaFgaPhaWlaWmaHPaWnaWoaKZaFfaFaaymaFdaFeaFcaFdaFbaymaEZaFaaEYaWzaSsaSsaSsaWAaWBaWCaTMaWDaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaWEaWFaWGayWaWHaGlaGzaGqaGBaGAaGDaGCaGEaGqaGGaGFaGIaGHaFXaPEaWVaRnaWWaWXaWYaWYaWZaWYaWYaWYaXaaXbaFYaXdaGcaGbaGaaFZaReaReaXiaPBaGdaPSaXkaXlaXmaXnaXnaXoaIOaIOaIOaIOaIOaXpaXqaXraXsaXtaXuaUtaXvaXwaXxaXyaXzaXAaXBaGiaXDaXEaXFaXtaXGaXHaXIaXJaXKaXLaXMaXNaXOaIOaXPaBoaRSatnaXQaTkaQoaXRaXSaQoaFjaToaTkaQoaQraXTaRWaRXaWcaRXaXUaRXaGJaUOaXWaJdaQAaURaSgaSgaSgaSgaUUaQEaJjaGPaGRaXZaYaaQOaQPaPgaPgaPgaPgaPgaPgaFVaEyaIbaTGaTHaSoaTGaTHaIbasHaEyaSnaSsaSsaSsaSsaYkaYlaYmaafaafaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaYnavtaYnaxTaYoaBgaYpaYqaYraYraYraYraYsaYtaTSaYuaYvaBPaCSaYyaYyaYyaYzaYyaYAaYBaYCaYDaYEaYEaYFaRtaFOaFPaFEaFDaFJaFFaFAaFAaFCaFBaFLaFKaFMaYSaYSaYSaYTaPSaYUaIOaYVaYWaYXaYYaYZaZaaFTaZcaZdaZeaZfaPWaPWaPWaPWaPWaPWaFSaFRaFQaZjaXwaZkaZlaPWaZaaYZaZmaZnaYWaZoaIOaIOaThaQoaZpaQoaQoaQoaFHaQoaQoaFUaQoaZraZraZraZraZsaZtaZuaRXaRXaRXaZvaZwaZxaJdaZyaZzaSgaZAaZAaZBaZzaZCaJjaFWaBDaZFaZGaPgaPgaPgaPgaZHaPgaPgaPgaFVawKaIbaPoaPraSoaPoaPraIbasHawKaYjaSsaSsaZJaSsaSsaZKaYmaafaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaZLaZMaWGayWaZNaBWaZPaZQaZRaZSaZTaYraZUaZVaTSaZWbaEaBPaCSaZYaZZbaababaYybacbadbaeaPEbafbagbahbaiaPEaCRaBtbalbalbalbalbambalbalbanbaobaobaobapbaobaqbarbasbatbauaCzaCQaCQaCQaCQaCjbaybazbaybaAbaBbaBbaBbaBbaBbaBbaBbaBaBrbaDbaDbbubaDbaDbaDbaDbaDbaDbaDaZoaIOaIOaBobaFbaGaBlbaHaQobaIaQobaJbaKbaLaZrbaMbaNbaOaJdaJdaJdbaPbaQbaQbaQaJdaJdaJdbaRaSgaSgaLeaFNbaUbaVaGwaJjaBEaBDbaYaEsbaZbbabbbaWmbbcbbabbdaWmbbeaEybbfaQMaQNbbgaQMaQNaIbbbhaEybbibbjbbkaSsaSsbblbbmaYmaafaafaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaafaxRbbnaPybboaBgbbpbbpbbqbbrbbsbbqbbtbbpaTSaQpaOTaALaByaBzaBzaBAaBBaBzbbBbadbbCaPEbafbagbbDbbEaPEaBxaBtbalbbGbbHbbHbbHbbIbalbbJbbKbbLbbMbarbarbarbaraIOaIObbNaBsbbPbbQbbRbbSbbTbbUbbVbbWbaAbaBbbXbbYbbZbcaaBhbccbcdaBrbaDbcebcfbcgbchbcibcjbckbdsbaDbcmbcnbcnaBoaBoaBoaBoaBobcoaThbcobcpaBoaBoaRRaBoaBoaBobcqbcrbcrbcrbcrbcrbcrbcsbcrbcqazGbctbctaCKaZFaZFaZFaZFbcqaBEaBDbaYaEsaEsaEsaEsaEsarZaEsaEsaEsaEsaEyaBCbcAawKavUawKbcybcAaEyaEybcBaSsbcCaSsaSsaWAbcDbcEaTMaWDaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazQasSbcFaAFaWGatHatHatHatHatHatHbcGbboaBgaTSaTSaTSaTSaTSaTSaTSaTSaTSbcHaReaBPaCSaZYbcIbcJbcKaYybcLbcMaDEaPEbafbagbcObcPaPEaBxaBtbalbbHbcQbcQbbHbcQbalbbJbcRbcSbcSbcTbcUbcVbarbcWaIOaYVaDFbcYbcZbdabdbbdbbdabdcbddbaAbaBbdebdfbdgbdhbdibdjbdkaDGaDKbdnbdobclbdpbdqbdrbclaLgbaDaZobdtaIOaNsbdubdvaZFaZFaZFaZFaZFaZFaZFbdwaZFaZFaZFaZFbdxaZFaZFaZFaZFaZFaZFaZFaZFbdyaZFaZFaZFaZFaZFaZFaZFaZFbdzaDPaDTaCYaDUaCYaDVaCYaDXaDWaDYaCYaDZaCYaEaaEbaCYaCYaCYaCYaCYaCYaEcaEdaEebdObcCaSsaSsaSsaVkbdPaVjaVkaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQaaaaafbdRazTaxVbdSaCTbdUbdUbdUbdUbdUbdUbdVbdWaPBaXiaReaBPaCSaYyaYybdXbdYaYyaPEaPEaCUaPEbafbeabcObebaPEaBxaBtbalbecbedbbHbcQbeebalbbJbefbcSbcSbcSbegbehbarbeiaIOaYVaCXbekaCWbembenbeobepbdcbeqbaAbaBberbesbetbetbetbeubevbaBaCVbexbclbclbdpbeybdrbclaLfbaDbeAaIOaIOaNsbdubdvaZFaZFaZFaZFaZFaZFaZFbeBaZFaZFaZFaZFaZFaZFbeCaCYaCYaCYaCYaCYaCYaCZaCYaCYaCYaCYaCYaCYaCYaDlaDDaDCaDtaZFaZFaZFaZFaZFaBDaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFbeIbdzbeJaSsaSsbcCaSsaSsbeKbeLaTMaTMaTNaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQbdQaWEaWFbeMayWbeNbUVbePbePbeQbePbePbePbeRaPBaPBaPBaPBaBPaCSaZYbeSbeTbeUaYybeVbeWbUWaPEaPEaPEaPEbeYaPEaBxaBtbalbeZbbHbcQbfabfbbalbbJbarbfcbcSbcSbPhbfebarbffaIOaYVbUYbfhaCWbembfibfjbepbdcbfkbaAbflbfmbfnbetbfobetbdfbfpbfqaCVbfrbfsbftbfubfubfvbclbfwbaDcuRcuSaXNcvvcxRdPwdPxdTPdPxdPxdPxdPxdTQdTRdTSctbctbctaaZFaZFaZFaZFbfDaZFbfybfOaZFctcctectdbfIctfbfIbfIbfKdTUdTVdTWaZFaZFaZFaZFaZFbfObfPbfDaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFbdzbfQbfRbfSbfTbfUbfVbbmbfWaafaaaaafaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQbdQaYnavtaYnaxTbfXbePbfYbfZbgabgabgbbgcbgdbgebgebgebgebUibUubUrbUrbUtbUsbUrbUobUobUpbUobUnbUlbUlbUmbUlbUkbUObSTbUNbUHbUHbULbUCbSTbUybUBbgybcSbcSbPhbgzbgAbffaIOaYVbTsbgCbUPbdabdabdabdabdcbgEbaAbaBbgFbgGbgHbgIbgJbgGbgKbaBaCVbURbUQbgNbgObgPbgQbgRbgSbaDcsoaHfaHfbgUbgUbgUbgUbgUbgUbgUcmTcmTcsUcsVcsrcsscsVcsUcmTcmTcmTckbckbckbckbckbbhbbhbcsWbhbbhbbhbbhbbhbbktcsXbxbcsYcsZaZFbhkbhkbhlbhlbhlbhlbhlbhmbhnbhnbhobhnaZFbhnbhobhnbhnbhpbhqbhqbhqbhqbhrbhgaPtaPtaPtaaaaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQbdQaZLaZMbeMayWbhsbePbhtbePbhubhvbePbePbePaRebhwbhxbhxbTHaYyaZYbhzbcJbhAaYybUabTZbTTbTSbTVbTUbTXbTWbTYbTXbTMbTNbTObTPbTObTObTQbTRbTJbTKbhSbcSbcSbTLbhUbhVbffaIObhWbTsbhXbTtbhZbiabibbicbTIbaAbaAbaBbiebifbigbihbiibijbikbaBaCVbTybimckrbiobipbgQbclbiqbaDaZoaIObirbgUcqlcqncqScqTcrDcrGcrMcsncqUcqVcrAcrBcogcofcpscoYcmTcmIcnrcmUcpMckbcqkcpNcpzcptcpLcktcktclSbktcggbiSbiScksbiSbiUbiUbhlbiVbiWbiXbhlbiYbiZbiYbhlbhmbhnbhpbhqbjabjbbjabhqbjcbjdbhqbjebjfbjgbhgaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQaaaaaaaMYbbnaPybjhbePbjibePbjjbjkbjlbSjbePbjnaRebjoaRebTjaYyaYyaYyaYyaYyaYybTAbjrbjsaRebjtbalbalbalbTzbalbalbalbjvbalbalbalbalbjwbTCbTDbjzbcSbcSbPhbjAbgAbffaIObjBbTsbjCbTtbaAbaAbaAbaAbTkbaAbTmbTlbjGbjHbbXbjIbbXbjJbjKbTvbTxbTybjNbclbjObjPbgQbjQbjRbaDaZoaIOaIOcgQcglcgPcgjcgkchOciichMchNchochocgRcgScjtcjpciHciEciDciCciBciAckcckbcjDcgecjwcgecjvcjucgecgfbktcggbiSbkwcfKcgdbkzbkAbkBbkCbkDbkCbTEbkFbkGbkHbhlbkIbkJbkKbhqbkLbkMbkNbkObkPbkQbhqbkRbkSbkTbhgaaaaaaaaaaaeaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazQasSbcFaAFaZMaTPaTPaTPbkUaTPbkVayWaxTaxTbePbkWbkXbkYbkZblablbblcbldbldbldbldbXnbWDbWDbWDbTXbTXbTXbWCblhblhblhblibalbljblkbWEblmblnbloblpblqblrblsbltblubVHbWAbWBbSWbTdbWwbWxbWxbXhbEvbXgbXfbWXbWVbWUbWTbXmbXlbXkbXjbXibTvbTvbTvbTvbWHbTvbTvbTvbTvbWFbWGbWQbWSbWObWPbWKbWNbWIdVtblZaIOaIObgUdVHdVIdVJdVKdVEbOIdVFdVGcjtcjtcjtcjtcjtcjpdVzdVydVBdVAdVDdVCdVuckbdVwdVvdVxcgecjvcjucgedVLbktcggdVNbYedVMbYbbXHbXMbXFbXGbXGbXGbXUbXWbXAbXzbXybXxbXEbXDbXCbXBbmLbkPbmMbmNbmObhqbmPbkSbmsbhgaaaaaaaaaaaaaaaaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabmQbmRavtaYnawYawYawYaPyaxTaxTbePbmSbmTbkZbmUbePbePbePaPBbmVbmWbmXbmYbmXbmXbmXbmYbmXaPBaPBbalbalbalbmZbalblpblpbnablpblpblpblpblpbnbbncbndbnebWebWdbWdbWdbWabWcbVYbVZbWjbWibWnbWmbWfbWfbWhbWgbWqbWpbWsbWrbWobnxbnybnzbnAbnBbnCbnzbnDbnxbPVbTybnFbnGbnFbaDbaDbaDbnHaCVdUZaIOaIOcgQcglcgPdVadVbdUUbgUdUSdUTdUXdUYdUVdUWdVndVmdVldVkcmTdVpdUEdVodVfdVedVddVcdVjdVidVhdVgdVidVqbUedVrdVsdTXbnYdTYboabobbocbodboebofbofbogbkCbohbhlbWvbojbokbhqbolbombonboobopboqbhqbmPbkSborbhgaaaaaaaaaaaaaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaabmQavtavtaYnaxSaxSaxSbosaxSaxSbePbotboubovbkZbePaaaaaaaaaaafaafbowbowbowbowbowbowbowaaaaaaboxboybozboAboBblpblpblpblpblpblpblpblpboCbjzbcSboDboEboFbarbarbVGbVHbarbarboHboIbVEboKboLboMboMbNsboMbVFboPboMabLboQboRbnzboSbnBboSbnzboTboQbPVbVkboVbfuboWbVybVBbVDbVzbVAbpcaIOaIObgUcqlcqndUQdURdUNbixdUOdUPdUJdUKdULdUMdUGdUFdUIdUHcmTckbdUEdUDdUAckbdUCdUBdUydUxdUzdUzdUvdUwbktcggbiSdUubkxbkxboabpybpzbpAbpBbpCbpCbpDbpEbpFbhlbpGbojbpHbhqbpIbpJbpKboobkPbpLbhqbkRbkSbpMbhgaaaaaaaaaaaaaafbpNbpObFHbpObFHbpObpQaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxRaYnaYnbpRaTPbpSazQasSbpTbpSbePbpUbpVbpWbpXbePaaaaaaaaaaaaaaabowbowbowbowbowbowbowaaaaaabpYbpZblpbqabqbbqbbqbbqbbqbbqcbqbbqbbqbbqdbqebqfbqgbqhbqibarbqjbPhbqkbqlbRdbffbqnbqoboKboKboMbqpbVdbqrbVebqtboMbVgbVfbVhbqxbqybqzbqybqAbVibVjbTxbVkbqEbfubqFbaDbqGbnFbqHbPTbpcaIOaIObgUdUjdUkdUhdUidUgbixdUedUfdUcdUddUadUbdUtdUsdUrdUqdUpbPZdUodUnbPZbPZbPZbPZdUmdUlbPZbPZbktdTZbktcggbiSdTXbnYdTYbrabrbbrcbrdbrebrebrebpDbkCbrfbrgbrhbkJbVlbhqbrjbrkbrlbrmbkPbrnbhqbmPbmrbhgbhgaaaaaaaaaaaaaafbrobrpbrqbrrbrrbrsbroaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowbrubrvbrwbrxblpblpblpbrybrybrybryboAblpblpblpbnbbrzbcSbrAbrBbrCbrDbrEbPhbcSbrFbRgbffbqnbrHbrIbrJbrKbrLbPPbrNbPObrPboMabLbrQbrRbnzbqybrSbqybnzbrTbrUbPVbPWbrWbrXbrYbaDbrZbnFbsabPTbpcaIOaIObgUbPFbPIbPJbPKbPLbixbPMbPQbLDbPRbPubPSbLDbLDbPYbPUbPZbPZbQxbQpbQFbQEbQIbQHbQSbQJbQVbPZbQYbRabQWbQXbRfbRhbRbbRbbPGbsEbkBbsFbrebrebrebsGbkCbsHbhlbsIbsIbPHbhqbsKbPNbsMbsNbkPbsObhqbmPbsPbhgaaaaaaaaaaaaaaaaafbsQbsRbrqbrrbrqbsSbFHaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowbsTbsUbsTbsVbsWblpblpblpblpblpblpboAblpbsXbalbalbsYbcSbcSbsZbtabtbbtcbPhbcSbcSbtdaIObqnbtebtfbtgbPrbtibtjbtkbPqbtmboMabLbrUbrUbtnbtobtpbnzbtqbOvbNgbPpbNqbtvbtvbtvbtvbtvbtvbtwbPEbOJbOHbOHbOIbOMbONbOKbOLbPfbixbOUbOYbPubPvbPsbPtbOibOhbOgbNUbOybOubOkbOjbOCbOBbOAbOzbOGbOFbOEbODbPzbPAbPAbPBbPCbPDbPDbPDbtZbuabkBbubbkCbkCbucbPgbkCbuebkBbufbugbORbuibujbOTbulbumbunbhqbhqbuobhgbhgbupbuqbuqbuqburbkIbrobrrbrqbrrbrrbrsbroaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaeaaaaaaaaabowbowbowbowbowbowbowbusbutbusbuublpblpblpbrybrybrybryboAblpbuvbuwbalbuxbcSbcSbsZbuybuzbtcbOxbuBbqfbuCbuDbuEbpcbuFbtgbuGbuHbuIbuJbOmbuLbOlbOqbOpbOobOnbuRbrSbuRbOvbOwbuTbuTbNqbuUbuVbuWbuXbuYbuZbOrbOtbvcaIOaIObgUbMmbMnbMrbMBbMSbMTbMUbMVbMLbMPbMQbMRbNabMZbNcbNbbApbHvbMYbMWbNlbNkbNGbNobNfbNebNibNhbMjbMlbMhbMibiSbvybvzbMgbvBbvBbkBbvCbvDbvEbkBbNVbkCbvGbvHbvIbvJbOebvLbvMbOfbvObvPbvQbsIbkJbvRbvSbvTbvUbvVbvVbvVbvVbvWbvXbpObFHbvYbFHbpObvZaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowbwabrvbwbbwcblpblpblpblpblpblpblpboAblpbuvbwdbalbwebegbcSbwfbqfbwgbqfbNFbcSbrFbRdbffaIObpcbuFbtgboMbwibwjbwkbwlbwmbNsbwnbNvbwpbNBbNgbNjbNmbNnbwubNpbwwbNqbwxbwybwzbwAbwBbwBbwCbNdbLSbLUaIObgUbLQbLRbLNbLPbMcbixbLYbLZbLDbLXbLVbLWbLEbLDbLAbLzbDcbDcbDcbDcbDcbHfbLMbHfbAqbLJbLGbAqbAqbAqbAqbLybiSbiSbxbbxbbxbbxbbkBbkBbkBbkBbkBbMMbxebxfbxgbxhbxibMobMpbMpbMqbxmbojbxnbxobxpbvRbojbvTbxqbojbxrbojbxsbkIbupbuqburbxtbkIaaaaaaaafaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowbusbutbusbxubxvblpblpbxwbSRbSSbSRbSXbSRbSYbTabSTbSUbSVbSWbTbbSWbTcbTdbSVbxFbxGbRgbffaIObxHbxIbxJboMbxKbxLbxMbxNbxObNsbxPbThbxRbTgbxTbxUbxVbxWbxXbxYbxZbTibybbycbycbydbyebyfbygbPocbPbDNbSHbgUbixcbQcciccjcarcawcaWcbabPucbccbecbOcdabPucdkbWubRSceEceJceFbDccckccFccEbAqccGccOccMcfCcfDcfbcfccfHcfIbSEcfEbMpbMpbSsbSwbMpbSAbSybSzbSObSNbMpbSMbSQbSPbyPbyQbSLbySbySbySbySbySbyTbyUbyVbupburbkIbojbvVbyWbyXbyYbyZbzabzbaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowbzcbzdbzcbzebzfbzgbzgbzgbzgbzgbzhbziblpbuvbzjbalbzkbzlbzmbSbbzoboEbRZbzqbzrbarbarbzsaIObztbzubtgboMbzvbzwbzxbwjbzybNsbzzbSfbzBbzCbSdbzEbzFbSebzHbzIbzJbNqbzKbzLbzMbzNbyebyfbygbPobpcbDNaIObXvbXJbXLbLTbXwbEpbXtbXrbXsbLDbLDbLDbXubWzbLDbWybWubXqbXpbXobWJbDcbVUbVRbVQbWtbVXbVWbVVbXNbVnbYcbYKbYObZMbZNbZObvMbvMbArbvMbAsbvMbOfbvMbvMbvMbvMbRUbAubAvbAwbAxbRTbAzbAAbABbACbySbADbAEbAFaafaafbkIbAGbvVbyXbyXbvWbAHbAIbAJaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowbAKbALbAMbalbalbANbrvbrvbrvbAObalbalbAPbAQbARbalbASbASbASbRKbASbAUbRLbAWbAXbAYbAUbffaIObAZbBaaUnboMbOlbRrbRzbRzbRwbRsbRAbRCbRBbRAbRFbRGbRDbREbRHbRHbRHbRJbtvbtvbtvbtvbtvbtvbtvbPobpcbVabuDbVbbUSbUTbUUbUZbUdbUfbUgbUqbTFbTGbUbbUcbVKbVJbVMbVLbVxbVwbVIbVCbVsbVpbVvbVtbVmbVcbVobVnbTobTubAqbSKbSJbBObBObBObBObBObBPbBObBObBQbQTbBSbBTbBTbBUbKjbvRbBWbAwbBXbQZbBZbCabCbbCcbySbADbAEbCdaaaaaabkIbCebCfbkIbvWbkIbkIbvWbkIaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabCgaafaaaaaaaaaaaabASbChbCibQRbCkbAUbQQbCmbCnbCobAUbffaIObQMbQLbQNbQLbQObCtbCubCvbCwbCxaXNbQPaXNbCzbCAbCBbCCbCDbCEaIOaMibDbaMjaNsbCubCGbCHaIObCIbQKbpcbDNbSHbymbymbSDbSBbSBbymbymbSmbSxbRXbSibScbSgbRYbRXbRWbRVbRSbRRbRQbRPbDcbRObRNbRMbRIbRqbRmbvvbvvbRjbAqbRkbCTbBObDjbRibFAbQlbQmbDobDpbBQbQfbDrbDsbBTbBTbQdbvRbBWbDubDvbPXbDxbDybDzbDAbySbADbDBbyVbyVbyVbyVbyVbkIbkIaaaaaaaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGvaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabASbDCbDDbDmbDFbDGbDnbDIbDlbDKbAUbffbDLbDiaIOaIOaIOaIOaNsbCubCGbDNaIOaIObDdaIOaIObDPbDQbDRaIOaIOaIOaIObDbaIOaNsbCubCGbDSaXNbDTbCXbDYbDXbDZbymbEbbBxbBxbBxbEebEdbEgbEfbEibEhbzGbEjbCUbCYbCZbDabDcbDebDfbDgbDcbDhbDkbDwbDEbDHbDVbDWbvvbCRbAqbksbCTbBObEqbErbEsbEtbDMbDJbDUbBQbDObEybEzbEzbBTbDqbEBbECbEDbEEbEFbDzbDtbEHbEIbySbADbAEbyVbEJbEKbEKbyVaafaafaafaafaafaafaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbELbEMbEMbENbEObEObEPbEPbEPbEPbEQaafaafaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowaaaaaaaaaaaaaaaaaaaaaaaabERbESaYhbESbEUaaaaaaaaabASbASbEVbEWbDmbEWbEXbEYbEZbFdbFbbAUbFcbffbEwbFebuDbFfbuDbFgbFhbFibuEaIObFjbEubEvbEvbFaaIObDSaXNaXNaXNaXNbEGbFnbFobFpbFqbFrbFsbEAbExbEobEnaIObymbFmbBxbFlbETbBxbEdbFubFtbFzbFxbFwbFvbFEbFFbFBbFDbFKbFQbFGbDcbDcbHfbHfbHfbAqbGbbFZbGabElbEkbAqbksbCTbBObFPbEmbFAbFybFCbFTbFUbBQbFVbEybEzbEzbBTbFIbFJbFLbFMbFNbFObFRbFSbGebGfbFWbFXbFYbFYbFYbFYbGhbAFaaaaaaaaaaaaaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafbGkbGlbGmbGlbEObEPbEPbGnbGobGnbEPbEPaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGpbGqbGrbGqbGpbGsbGtbGubASbGvbEWbGwbBbbGybGzbGAbGAbBcbGCbAUbGDbGDbBibGDaUnaUnaUnaUnbGFbGFbGFbGFbGFbGFbGFbGFbBgbBfbBebGHbGHbGHbGHbBhbGJbGHbGHbGHbGHbGKbBdbGKaIUaKtbzYbymbzXbBxbBxbBxbAebAcbApbAobzGbzZbAbbAabyKbzGbzObzPbyzbyAbyCbyHbzTbzUbEcbzWbzQbzRbQUbvvbvvbBjbAqbksbHkbHkbHkbHkbIGbIGbIGbIGbIGbBQbHlbHmbHnbHnbBTbBnbHpbHqbHrbHrbHrbHrbHsbHtbHubBqbHrbHrbHrbHrbAEbgpbHxaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagbHybGlbGlbHzbEPbEPbGnbGnbHAbGnbGnbEPbEPaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaYhbHBbHCbHBaYhbHDbHEbHFbASbHGbHHbEWbHIbHJbAUbHKbHLbBrbHNbAUbHObHObBBbGDaaaaaaaaaaaabGFbBvbHRbBAbHTbHUbHVbGFbBVbHXbBYbGHbHZbCjbCpbClbBGbBDbBKbBJbBMbBLbBRbBNbBobGKbGKbymbBmbBlbBlbBkbymbBCbBybBwbBubBtbBsbBpbCsbCybCqbCrbBHbBIbBEbBFbCNbCObFkbCMbCKbCLbCFbCJbCQbCPbAqbksbHkdQRbIEbIEbKXbWMbWLbWLbWLbBQbIKbILbIMbIMbBTbCSbIObBWbIPbIQbIRbISbITbIUbIVbCVbIXbIYbIZbHrbyVbCWbyVbJbbJbbJbbJbbJbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabJcbEPbHybEPbEPbGnbGnbGnbGnbGnbGnbGnbEPbEPaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGpbHBbHBbHBbJdbJebEWbEWbJfbJgbEWbEWbJhbJibAUbAUbAUbJRbAUbAUbJkbJlbJDbJnaaabJCbJpbJBbJrbJsbHVbJtbJubJPbJKbJObJybJxbJwbJvbJqbJobJEbJFbJGbJHbJIbGHbGHbJJbJAbJzbJQbJNbJUbJSbJZbJWbJWbJWbIDbICbJabIFbzGbJjbJMbJLbIxbzGbIybIzbEcbIAbIBbIBbIubIvbEcbAqbIwbAqbAqbAqbAqbAqbAqbksbHkbItbIEbIEdPubWLbWLbWLdPvbBQbKobEybKpbKpbBTbKjbKqbKrbKsbKtbKtbKtbKtbKubKvbKibKgbKhbJYbHrbKfbKdbJVbJTbJXbKFbKGbKHaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbEObEPbKIbKJbKJbGnbGnbGnbGnbGnbGnbGnbGnbEPbEPaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaYhbHCbHCbHCaYhbKKbKLbKMbKNbKObEWbKPbLsbLkbLibKVbKVbKZbKWbKVbKDbKEbKQbKYaaabGLbLabLbbLcbLdbHVbLebLfbLgbLhbGFbIabLjbKRbGHbLlbLmbLnbLobLpbLqbLrbKUboNbKSbKTbEabPybPybKnbymbFmbBxbFlbETbBxbHcbKcbFtbKmbKlbKkbKebKBbKCbGXbGYbLxbIAbIBbIBbIubKxbEcbKwbKzbKAbmobKybKbbKabkybksbHkdQRbIEbIEbWLbWLbWLbWLbWLbBQbQDbEybMbbMbbBTbLObMdbBWbMebKvbKvbMfbLFbLHbLIbLKbMkbLLbLCbLBbLwbLvbLubLtbMsbMtbKGbMuaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabEPbEPbMvbGnbGnbGnbGnbGnbGnbGnbGnbGnbGnbGnbEPbEPaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaabGpbMwbMxbMybGpbMzbGtbGubASbASbMAbMAbMAbASbASbGDbJkbJkbGibJkbJkbJkblPbKYaaabGLbMDbMEbMFbMGbMHbMIbMJbMGbMGbMKbGBbGxbGjbGHbGHbGHbGHbGHbGHbMObGHbGHbGIbGGbGEbEabPycpqasZbymbEbbBxbBxbBxbHdbHcbApbFtbHabGZbHbbBtbGVbGWbGXbGYbGRbGSbGTbGUbGNbGObEcbGPbGcbGdbmobGgbHgbHebkybksbHkbHkbHkbIEbWLbWLbWLbIGbIGbBQbNtbNubMbbMbbBTbHQbMdbBWbIPbNwbNxbNybNzbNAbHPbNCbKvbNDbNEbHrbGQbGMbNHbJbbNIbNJbNKbNLaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbEPbGnbGnbGnbGnbGnbGnbNMbGnbNNbGnbGnbGnbGnbGnbEPbEPaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabNObESbNPbESbNQaaaaafaaaaaabASbNRbNSbNTbASaaabGDccpcbybHWbJkbJkbJkblPbKYaaabGLbNWbNXbNYbNZbHVbOabObbOcbOdbGFbIabHYbIcbIbbIdbIdbIdbIdbIdbIdbIdbIdbIebIebIgbHhbGKbGKbGKbymbymbHwbHMbHwbymbymbHvbHobHjbHibzGbBubCUbInbIlbImbEcbIkbEcbEcbEcbEcbEcbIjbIfbIibmobHSbIsbIrbkybksbHkbIobIqbIpbXTbWRbMCbMabINbBTbOSbIWbDsbBTbBTbJmbMdbOVbJbbJbbHrbHrbHrbHrbBqbHrbOWbKvbOXbHrbIhbCWbyVbJbbOZbPabPbbJbaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabEPbPcbPcbPcbPcbPcbPcbPdbGnbPebPcbNNbGnbGnbGnbGnbEPaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafaafaafaafcbxbGDbGDbGDbGDbJkblQblPbPiaaabPjbJpbPkbPlbPmbHVbHVbPnblOblMblNblTblSblRbgXbgXbgXbgXbgXbgXbgXbgXbgXbPwbPxbPybmqblAblzbGKbymblCblBblEblDblGblFblIblHblKblJblYblXbmabmbbmcbmdbmebmfbmgbmibmjbmkbidbmlbmmbmnbmobmpblfblebkybksbHkblyblxblgbIIbIIbOPbOObOQbBTbBTbllbBTbBTbQebgnbMdbojbQgaafbQhbQibQjbQkblwbQkblvbQnbQobHrblLbgpbQqbJbbQrbQsbQsbQtaagaagaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabQubGlbGlbGlbGlbGlbGlbGlbQvbGobGnbGnbGnbGnbQwbGobEPaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaBcaCcaCcaDcaEbGDccfbJkbmKbGDaaaaaaaaaaaabGFbQybQzbQAbQBbGFbQCbGFbmIbmHbmJbgXbgXbmEbmGbmFbmCbmBbmDbfNbfNbfNbfNbfNbfNbkabnZbnXbpdboXboUboObpkbpjbpibphbpobpnbnIbpmbnIbnJbnubnvbnNbnObnLbnMbnObnSbnPbnQbnVbnWbnTbnUbmubmtbmwbmvbHkbmxbmzbmybmAbQabQbbQabRcbQcbRlbmhbojbRnbojbgnbMdbojbRoaafbQhbRpbRpblUblVblWbRtbRubRvbHrbgqbgpbAEbJbbJbbJbbJbbJbaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabEPbKJbKJbKJbKJbKJbKJbRxbGnbKIbKJbRybGnbGnbGnbGnbEPaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabRecbncbocbpbJkbgsbJkbJkbgtbGDbguaaaaaaaaabGFbGFbGFbGFbGFbGFbGFbGFbhybhibhhbgXbgXbhBbgwbgxbgxbgwbgvbfNbgMbgLbgDbgBbfNbfGbymbymbfCbfAbfFbfEbBzbggbgibghbfJbfHbgfbfLbgTbgVbgWbgYbgjbgkbglbgrbhebhfbhjbhEbgZbhabhcbhdbinbilbidbhJbhIbhHbhGbhFbIIbisbIJbIIbIIbIHbSlbgmbSnbojbSobgnbMdbSpbSqaafbQhbRpbSrbQkbgobQkbStbSubSvbHrbgqbgpbiubitbyVaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbEPbGnbGnbGnbGnbGnbGnbNMbGnbRybGnbGnbGnbGnbGnbEPbEPaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccecaCcaCcaDcbtbiLbkebGDbkubGDccgbkvbkEccgccgbjFbjLbjMbjSbjTbjUbjXbYpbjqbjxbjubjybgwbjEbjDbiNbiMbiObfNbiQbiPbjpbiRbfNbkabPybjZbjYbjWbjVbiTbiTbkhbkgbkfbiDbkdbkcbkbbiDbiDbiBbiCbizbwUbivbiybivbiKbiIbiJbiGbiHbiEbiFbiGbklbidbkmbHkbkibkkbkjbkobknbiAbNrbIGbIGbrhbiwbrhbrhbrhbhTbTwbhRbrhbHrbHrbHrbHrbHrbhYbHrbHrbHrbHrbHrbgqbgpbkrbkpbyVaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabEPbEPbMvbGnbGnbGnbGnbGnbGnbGnbGnbGnbGnbGnbEPbEPaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQalQchdalQalQalQalQalQaaaaaaaaaaaaaaaaaaaafaafaaabxlbwsbwsbwsbxkbwsbwsbwqbwrccgbwobwhccgbwJbwKbwHbwIbwDbwGbwtbwvbwSbwObwNbMNbwMbgwbjEbwLbxjbiMbxdbfNbiQbiPbxcbxabfNbkabPybymbvnbvlbvpbvobuQbtXbvebvdbiDbvfbvkbvjbvxbiDbvAbvFbvNbwUbvqbslbvqbiKbvrbvsbiGbvtbvubvwbiGbtTbidbksbHkbHkbtUbHkbIGbIGbuObIGbIGbUwbUxbuPbUzbUAbrhbiwbUvbvabrhbUDbUEbUFbUGbuSbgqbUIbAEbUJbAEbAEbgqbgpbUKbyVbyVbyVaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbEObEPbPebPcbPcbGnbGnbGnbGnbGnbGnbGnbGnbEPbEPaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbAVbATbptbAybAtbqmbAdbAfbAgccgbzSbzVccgccgbAlbAmbAnbAhbAibAjbAkbYpbyNbyRbyObyxbyJbyMbyLbzDbyJbyJbyybzpbznbzAcjcbfNbkabqZbqZbqZbqZbywbqZbqZbqZbysbyrbiDbyvbqJbytbtDbiDbylbynbyqbwUbskbypbwYbiKbwWbwXbiGbyibwZbyhbwFbwEbwQbwPbwRbwRbwVbwTbhCbhCbhDbhCbhCbhCbhCbyubxEbhCbxQbxSbyabyjbykbyobxAbxBbxAbxCbxDbxAbxAbxAbxAbxAbxzbxybxxbVNbVObyVbyVbyVbyVaaaaafaaaaaaaaaanmanmanmaafaaaaaaaafaaaaaaaafaaaaaabJcbEPbHybEPbEPbGnbGnbGnbGnbGnbGnbGnbEPbEPaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbpsbpsbptbpvbpubqmbqqbpwbpPccgbqvbqsbqubqCbqDbqwbqBbqObqQbqIbqKbqVbqUbqTbqSbstbrMbrGbribsdbsebsdbsvbsubsjbjpbshbfNbkabqZbqYbqWbqRbqXbqWbqMbqLbqPbqNbpxbppbqJbqJbsmbiDbsnbsobsibwUbskbslbscbiKbsfbsgbiGbrObrVbsbbiGbssbidbvKboNbsrbsqbspboJboGboibnRbnKbnEbnEbnwbprbnEbnEbpqbpgbplbpabpabpebpfbpbbngbpabnjboZbnhbnhbngbnjbnibAEbnkbnmbnlbWWbnfbWYbWZbXabXabXabXabXabXabXabXabXabXabXabXabXabXabXabXabXbbXcbXcbXdbEPbEPbGnbGnbXebGnbGnbEPbEPaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabSFbSFbSFbSFbSFbSFbSFbudbuhccgccgccgccgccgbukbuAbuKbuKbuKbuMbuNbYpbjqbjxbtsbjybttbtxbtubtEbtCbtGbfNbtVbtHbtYbtWbfNbtRbtQbtPbtObtObtNbtMbtLbqZbtKbtJbiDbtIbtFbqJbtDbiDbtAbtBbtzbwUbtybslbsBbiKbszbsAbiGbiGbiGbiGbiGbssbidbidbidbtScmHbPybGKbXObXPbXQbGKbGKaaaaaaaaaaaabXRbXSbTrbtlbHkbtrbTnbthbTpbTqbsLbjmbSkbIEbIEbShbHkbyVbXVbswbXXbyVbyVbyVbyVaaaaafaaaaaaaaaanmanmanmaafaaaaaaaafaaaaaaaafaafaafbXYbXZbYabHzbEObEPbEPbGnbGobGnbEPbEPaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaafaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbSFbSGcnjcngcnhcnQbSFcodcoccnJcnIcnLcnKcnGcnGcnHcnEcnEcnDcnFbAkbYpbjqbjxcnCbwMcnzcnAcnBcnwcnxcnybfNbtVcnpcnqdTTbfNbkabqZdZLdZOdZOdZMdZNbqZdYtdZPdZQbiDdZTdZRdZSdZHbiDdZGbtBdZIbwUbtybslbsBbiKdZKdZJbiKbPxbPwbiddZUbssdZVdZWbidbtSdZXdZYbGKaaaaafaaaaaaaafaaaaaaaaaaaabYQbYRcolcokdPAcrRdPDcombTqdPPconcrfbIEbIEbIEdQRbHkbYUbYUcoebYWbYUaaaaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbYXbEMbEMbENbEObEObEPbEPbEPbEPbEQaafaafaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaafaafaafbTebTebTebTebTebTebTebTebTebTebTebTebTeaaaaaacmobSGbSGbSGbSGcmAbSFcmzcmybxlcmxcmwcmucmvcmucmtcmscmrcmqcmpbAkbLjcmFcmCcmDbgXbgXbgXbgXbgXbgXbgXbfNbfNcmBbfNbfNbfNbkabqZbqZdZrdZsdZtdZubqZdZvdZwdZxbiDbkdbiDbiDbiDbiDbwUdZydZzbwUbskbsldZAbiKdZCdZBbiKbPxbPwbiddZDbssbidbidbidbtSdZEdZFbGKaaaaafaaaaaaaafaaaaaaaaaaaabZPbZQcjWcmXcmWcmVcnacmZcmYcmYcnecndcnbdPHbIEcqebHkbYUbZTcmGbZVbYUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaabTecnScqacnSbTecnOcpYcnObTecnMcpZcnMbTeaaaaaacphbSGcpXbSGbSGcpRbSFcpTcpScpVcpUcpWdRNcpGcpFcpIcpHcpHcpJcpHcpKcpAdRMbjxcpCcpDcpucpucpEcpucpucoMcpvcpwcpxcpyeaqcoMbkabEaeaxbMXbMXeaveaweaDeaEeaBeaCeazeaAeayeaeeaeeaudXBbwUbwUbwUeatbslbskbiKbiKbiKbiKbPybPybidbssbsseareasbidbtSanmanmbGKaaaaafaaaaaaaafaaaaaaaaaaaacaucavcqdcqcdPYcqgcqjcpmbTqbTqdQadPZbIEbIEbIEdQTbHkbYUcaycqbcaAbYUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaabTecnScnRcnSbTecnOcnPcnObTecnMcnNcnMbTeaaaaaacphbSGbSGbSGcpicoIcoHcoGcoFbxlcoLcoKcoJcoBcoAcozcoycoEcoDcoCbAkbYpcpdcpbcpccpgcpfcpecpfcoOcoWcoMcoNcoZcpacoXdZZcoMbkabEaeabbMXbOsbMXeaaeageaheaieajeaceadeaeeafeaeeandXBdXEdYLeakeamealeapeakdYLdYLdYLdYLeaobidbidbidbidbidbidbtSanmaafaafaafcbfaafaafaafaafaafaafaafcbgbXRcplcpkdPTdPSdPScpmbTqdPPdPVcrpbIEbIEbIEdQSbHkbYUcbjcpjcblbYUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaabTecrgcnicrebTecrccnfcrbbTecracnccqZbTeaaaaafcphcrdbSGbSGcqqbWbbSFcrwcrvbxlbSCcrubSCbSCbSCbSCcrzbYpcrxcrybAkbYpdRPcrlbyOcrhcricrkcricrocrqcrscrtcrmcrncoMcoMcoMbkabEaeboebrebsebpebqebiebjebgebhebmebnebkeblebcebbebaeaZbJNebfebeebdeaYbCTbyDbXPbXQbGKboYdYLdYLdYLdYLdYLdYLebtanmaaaaaaaaaaafaaaaaaaafaaaaaaaaaaaabXRcbWcrLcrKbHkdQidQdcrCdQUdQedQhcrEbIEdQVdQWcrFbHkcbZccacrNcccccdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaafaafbTecqocdMcqpbTecdWcdMcdXbTecdLcdMcdNbTeaaaaafcqrbSGbSGbSIcqqcqybSFcqxcqwcqvcqucqtcqscqAcqAcqAcqBcqAcmpcqzbAkbAkbjqcqIcqJcpDcqCcqCcqHcqPcqQcoMcqOcqMcqNcqKcqLcoMbkabEaeaLeaMeaNeaOeaPbEaeaFeaGeaHdXBeaIeaJeaKeaSeaRdXBbyBbPydXFeaUeaTeaQdXFaaaaaaaaaanmanmanmeaXeaVeaVeaWanmanmanmaaaaaaaaabXRbXRbXRbXRbXRbXRbXRbXRbXRccPcqXcqWbHkbHkbHkbHkbHkbHkbHkbHkbHkbHkbHkbHkbHkaafccScqYccSaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaYnavtaYnaxTaYoaBgaYpaYqaYraYraYraYraYsaYtaTSaYuaYvaBPaCSaYyaYyaYyaYzaYyaYAaYBaYCaYDaYEaYEaYFaRtaFOaFPaFEaFDaFJaFFaFAaFAaFCaFBaFLaFKaFMaYSaYSaYSaYTaPSaYUaIOaYVaYWaYXaYYaYZaZaaPWaVAaVzaZeaZfaPWaPWaPWaPWaPWaPWaFSaFRaFQaZjaXwaZkaZlaPWaZaaYZaZmaZnaYWaZoaIOaIOaThaQoaZpaQoaQoaQoaFHaQoaQoaFUaQoaZraZraZraZraZsaZtaZuaRXaRXaRXaZvaZwaZxaJdaZyaZzaSgaZAaZAaZBaZzaZCaJjaFWaBDaZFaZGaPgaPgaPgaPgaZHaPgaPgaPgaFVawKaIbaPoaPraSoaPoaPraIbasHawKaYjaSsaSsaZJaSsaSsaZKaYmaafaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaZLaZMaWGayWaZNaBWaZPaZQaZRaZSaZTaYraZUaZVaTSaZWbaEaBPaCSaZYaZZbaababaYybacbadbaeaPEbafbagbahbaiaPEaCRaBtbalbalbalbalbambalbalbanbaobaobaobapbaobaqbarbasbatbaubaAbaAbaAbaAbaAbaAbayaMdbaybaAbaBbaBbaBbaBbaBbaBbaBbaBaBrbaDbaDbbubaDbaDbaDbaDbaDbaDbaDaZoaIOaIOaBobaFbaGaBlbaHaQobaIaQobaJbaKbaLaZrbaMbaNbaOaJdaJdaJdbaPbaQbaQbaQaJdaJdaJdbaRaSgaSgaLeaFNbaUbaVaGwaJjaBEaBDbaYaEsbaZbbabbbaWmbbcbbabbdaWmbbeaEybbfaQMaQNbbgaQMaQNaIbbbhaEybbibbjbbkaSsaSsbblbbmaYmaafaafaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaafaxRbbnaPybboaBgbbpbbpbbqbbrbbsbbqbbtbbpaTSaQpaOTaALaByaBzaBzaBAaBBaBzbbBbadbbCaPEbafbagbbDbbEaPEaBxaBtbalbbGbbHbbHbbHbbIbalbbJbbKbbLbbMbarbarbarbaraIOaIOaYVbaAbbPbbQbbRbbSbbTbbUaKkbbWbaAbaBbbXbbYbbZbcaaBhbccbcdaBrbaDbcebcfbcgbchbcibcjbckbdsbaDbcmbcnbcnaBoaBoaBoaBoaBobcoaThbcobcpaBoaBoaRRaBoaBoaBobcqbcrbcrbcrbcrbcrbcrbcsbcrbcqazGbctbctaCKaZFaZFaZFaZFbcqaBEaBDbaYaEsaEsaEsaEsaEsarZaEsaEsaEsaEsaEyaBCbcAawKavUawKbcybcAaEyaEybcBaSsbcCaSsaSsaWAbcDbcEaTMaWDaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazQasSbcFaAFaWGatHatHatHatHatHatHbcGbboaBgaTSaTSaTSaTSaTSaTSaTSaTSaTSbcHaReaBPaCSaZYbcIbcJbcKaYybcLbcMaDEaPEbafbagbcObcPaPEaBxaBtbalbbHbcQbcQbbHbcQbalbbJbcRbcSbcSbcTbcUbcVbarbcWaIOaYVaVwbcYbgCbdabdbbdbbdaaRQbddbaAbaBbdebdfbdgbdhbdibdjbdkaDGaDKbdnbdobclbdpbdqbdrbclaLgbaDaZobdtaIOaNsbdubdvaZFaZFaZFaZFaZFaZFaZFbdwaZFaZFaZFaZFbdxaZFaZFaZFaZFaZFaZFaZFaZFbdyaZFaZFaZFaZFaZFaZFaZFaZFbdzaDPaDTaCYaDUaCYaDVaCYaDXaDWaDYaCYaDZaCYaEaaEbaCYaCYaCYaCYaCYaCYaEcaEdaEebdObcCaSsaSsaSsaVkbdPaVjaVkaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQaaaaafbdRazTaxVbdSaCTbdUbdUbdUbdUbdUbdUbdVbdWaPBaXiaReaBPaCSaYyaYybdXbdYaYyaPEaPEaCUaPEbafbeabcObebaPEaBxaBtbalbecbedbbHbcQbeebalbbJbefbcSbcSbcSbegbehbarbeiaIOaYVaSFbekbgCbembenbeobepaRQbeqbaAbaBberbesbetbetbetbeubevbaBaCVbexbclbclbdpbeybdrbclaLfbaDbeAaIOaIOaNsbdubdvaZFaZFaZFaZFaZFaZFaZFbeBaZFaZFaZFaZFaZFaZFbeCaCYaCYaCYaCYaCYaCYaCZaCYaCYaCYaCYaCYaCYaCYaDlaDDaDCaDtaZFaZFaZFaZFaZFaBDaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFbeIbdzbeJaSsaSsbcCaSsaSsbeKbeLaTMaTMaTNaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQbdQaWEaWFbeMayWbeNbUVbePbePbeQbePbePbePbeRaPBaPBaPBaPBaBPaCSaZYbeSbeTbeUaYybeVbeWbUWaPEaPEaPEaPEbeYaPEaBxaBtbalbeZbbHbcQbfabfbbalbbJbarbfcbcSbcSbPhbfebarbffaIOaYVbUYbfhbgCbembfibfjbepaRQbfkbaAbflbfmbfnbetbfobetbdfbfpbfqaCVbfrbfsbftbfubfubfvbclbfwbaDcuRcuSaXNcvvcxRdPwdPxdTPdPxdPxdPxdPxdTQbSCdTSctbctbctaaZFaZFaZFaZFbfDaZFbfybfOaZFctcctectdbfIctfbfIbfIbfKdTUdTVdTWaZFaZFaZFaZFaZFbfObfPbfDaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFbdzbfQbfRbfSbfTbfUbfVbbmbfWaafaaaaafaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQbdQaYnavtaYnaxTbfXbePbfYbfZbgabgabgbbgcbgdbgebgebgebgebUibUubUrbUrbUtbUsbUrbUobUobUpbUobUnbUlbUlbUmbUlbUkbUObSTbUNbUHbUHbULbUCbSTbUybUBbgybcSbcSbPhbgzbgAbffaIOaYVbaAbgCbRcbdabdabdabdaaRQbgEbaAbaBbgFbgGbgHbgIbgJbgGbgKbaBaCVbURbUQbgNbgObgPbgQbgRbgSbaDcsoaHfaHfbgUbgUbgUbgUbgUbgUbgUcmTcmTcsUcsVcsrcsscsVcsUcmTcmTcmTckbckbckbckbckbbhbbhbbRqbhbbhbbhbbhbbhbbktcsXbxbcsYcsZaZFbhkbhkbhlbhlbhlbhlbhlbhmbhnbhnbhobhnaZFbhnbhobhnbhnbhpbhqbhqbhqbhqbhrbhgaPtaPtaPtaaaaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQbdQaZLaZMbeMayWbhsbePbhtbePbhubhvbePbePbePaRebhwbhxbhxbTHaYyaZYbhzbcJbhAaYybUabTZbTTbTSbTVbTUbTXbTWbTYbTXbTMbTNbTObTPbTObTObTQbTRbTJbTKbhSbcSbcSbTLbhUbhVbffaIObhWbaAbhXbaAbhZbQKbibbicbPTbaAbaAbaBbiebifbigbihbiibijbikbaBaCVbTybimckrbiobipbgQbclbiqbaDaZoaIObirbgUcqlcqncqScqTcrDcrGcrMcsncqUcqVcrAcrBcogcofcpscoYcmTcmIcnrcmUcpMckbcqkcpNcpzcptcpLcktcktclSbktcggbiSbiScksbiSbiUbiUbhlbiVbiWbiXbhlbiYbiZbiYbhlbhmbhnbhpbhqbjabjbbjabhqbjcbjdbhqbjebjfbjgbhgaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQaaaaaaaMYbbnaPybjhbePbjibePbjjbjkbjlbSjbePbjnaRebjoaRebTjaYyaYyaYyaYyaYyaYybTAbjrbjsaRebjtbalbalbalbTzbalbalbalbjvbalbalbalbalbjwbTCbTDbjzbcSbcSbPhbkNbgAbffaIObjBbaAbjCbaAbaAbTtbaAbaAbTkbaAbTmbTlbjGbjHbbXbjIbbXbjJbjKbTvbTxbTybjNbclbjObjPbgQbjQbjRbaDaZoaIOaIOcgQcglcgPcgjcgkchOciichMchNchochocgRcgScjtcjpciHciEciDciCciBciAckcckbcjDcgecjwcgecjvcjucgecgfbktcggbiSbkwcfKcgdbkzbkAbkBbkCbkDbkCbTEbkFbkGbkHbhlbkIbkJbkKbhqbkLbkMbqhbkObkPbkQbhqbkRbkSbkTbhgaaaaaaaaaaaeaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazQasSbcFaAFaZMaTPaTPaTPbkUaTPbkVayWaxTaxTbePbkWbkXbkYbkZblablbblcbldbldbldbldbXnbWDbWDbWDbTXbTXbTXbWCblhblhblhblibalbljblkbWEblmblnbloblpblqblrblsbltblubVHbWAbWBbSWbTdbWwbWxbWxbXhbEvbXgbXmbWXbWXbWUbVAbXmbXlbXkbXjbXibTvbTvbTvbTvbWHbTvbTvbTvbTvbWFbWGbWQbWSbWObWPbWKbWNbVzbaDblZaIOaIObgUdVHdVIdVJdVKdVEbOIdVFdVGcjtcjtcjtcjtcjtcjpdVzdVydVBdVAdVDdVCdVuckbdVwdVvdVxcgecjvcjucgedVLbktcggdVNbYedVMbYbbXHbXMbXFbXGbXGbXGbXUbXWbXAbXzbXybXxbXEbXDbXCbXBbmLbkPbmMbmNbmObhqbmPbkSbmsbhgaaaaaaaaaaaaaaaaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabmQbmRavtaYnawYawYawYaPyaxTaxTbePbmSbmTbkZbmUbePbePbePaPBbmVbmWbmXbmYbmXbmXbmXbmYbmXaPBaPBbalbalbalbmZbalblpblpbnablpblpblpblpblpbnbbncbndbnebWebWdbWdbWdbWabWcbVYbVZbWjbWibWnbUPbWfbWfbWhbWgbWqbWpbWsbWrbWobnxbnybnzbnAbnBbnCbnzbnDbnxbPVbTybnFbnGbnFbaDbaDbaDbVsbaDdUZaIOaIOcgQcglcgPdVadVbdUUbgUdUSdUTdUXdUYdUVdUWdVndVmdVldVkcmTdVpdUEdVodVfdVedVddVcdVjdVidVhdVgdVidVqbUedVrdVsdTXbnYdTYboabobbocbodboebofbofbogbkCbohbhlbWvbojbokbhqbolbombonboobopboqbhqbmPbkSborbhgaaaaaaaaaaaaaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaabmQavtavtaYnaxSaxSaxSbosaxSaxSbePbotboubovbkZbePaaaaaaaaaaafaafbowbowbowbowbowbowbowaaaaaaboxboybozboAboBblpblpblpblpblpblpblpblpboCbjzbcSboDboEboFbarbarbVGbVHbarbarboHboIbVEboKboLboMboMbNsboMbVFboPboMabLboQboRbnzboSbnBboSbnzboTboQbPVbVkboVbfuboWbVybVBbVDbTIbnFbpcaIOaIObgUcqlcqndUQdURdUNbixdUOdUPdUJdUKdULdUMdUGdUFdUIdUHcmTckbdUEdUDdUAckbdUCdUBdUydUxdUzdUzdUvdUwbktcggbiSdUubkxbkxboabpybpzbpAbpBbpCbpCbpDbpEbpFbhlbpGbojbpHbhqbpIbpJbpKboobkPbpLbhqbkRbkSbpMbhgaaaaaaaaaaaaaafbpNbpObFHbpObFHbpObpQaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxRaYnaYnbpRaTPbpSazQasSbpTbpSbePbpUbpVbpWbpXbePaaaaaaaaaaaaaaabowbowbowbowbowbowbowaaaaaabpYbpZblpbqabqbbqbbqbbqbbqbbqcbqbbqbbqbbqdbqebqfbqgbzxbqibarbqjbPhbqkbqlbRdbffbqnbqoboKboKboMbqpbVdbqrbVebqtboMbVgbVfbVhbqxbqybqzbqybqAbVibVjbTxbVkbqEbfubqFbaDbqGbnFbTsbnFbpcaIOaIObgUdUjdUkdUhdUidUgbixdUedUfdUcdUddUadUbdUtdUsdUrdUqdUpbPZdUodUnbPZbPZbPZbPZdUmdUlbPZbPZbktdTZbktcggbiSdTXbnYdTYbrabrbbrcbrdbrebrebrebpDbkCbrfbrgbrhbkJbVlbhqbrjbrkbrlbrmbkPbrnbhqbmPbmrbhgbhgaaaaaaaaaaaaaafbrobrpbrqbrrbrrbrsbroaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowbrubrvbrwbrxblpblpblpbrybrybrybryboAblpblpblpbnbbrzbcSbrAbrBbrCbrDbrEbPhbcSbrFbRgbffbqnbrHbrIbrJbrKbrLbPPbrNbPObrPboMabLbrQbrRbnzbqybrSbqybnzbrTbrUbPVbPWbrWbrXbrYbaDbrZbnFbLMbnFbpcaIOaIObgUbPFbPIbPJbPKbPLbixbPMbPQbLDbPRbPubPSbLDbLDbPYbPUbPZbPZbQxbQpbQFbQEbQIbQHbQSbQJbQVbPZbQYbRabQWbQXbRfbRhbRbbRbbPGbsEbkBbsFbrebrebrebsGbkCbsHbhlbsIbsIbPHbhqbsKbPNbsMbsNbkPbsObhqbmPbsPbhgaaaaaaaaaaaaaaaaafbsQbsRbrqbrrbrqbsSbFHaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowbsTbsUbsTbsVbsWblpblpblpblpblpblpboAblpbsXbalbalbsYbcSbcSbsZbtabtbbtcbPhbcSbcSbtdaIObqnbtebtfbtgbPrbtibtjbtkbPqbtmboMabLbrUbrUbtnbtobtpbnzbtqbOvbNgbPpbNqbtvbtvbtvbtvbtvbtvbIqbItbOJbOHbOHbOIbOMbONbOKbOLbPfbixbOUbOYbPubPvbPsbPtbOibOhbOgbNUbOybOubOkbOjbOCbOBbOAbOzbOGbOFbOEbODbPzbPAbPAbPBbPCbPDbPDbPDbtZbuabkBbubbkCbkCbucbPgbkCbuebkBbufbugbORbuibujbOTbulbumbunbhqbhqbuobhgbhgbupbuqbuqbuqburbkIbrobrrbrqbrrbrrbrsbroaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaeaaaaaaaaabowbowbowbowbowbowbowbusbutbusbuublpblpblpbrybrybrybryboAblpbuvbuwbalbuxbcSbcSbsZbuybuzbtcbOxbuBbqfbuCbuDbuEbpcbuFbtgbuGbuHbuIbuJbOmbuLbOlbOqbOpbOobOnbuRbrSbuRbOvbOwbuTbuTbNqbuUbuVbuWbuXbuYbuZbIpbtvbvcaIOaIObgUbMmbMnbMrbMBbMSbMTbMUbMVbMLbMPbMQbMRbNabMZbNcbNbbApbHvbMYbMWbNlbNkbNGbNobNfbNebNibNhbMjbMlbMhbMibiSbvybvzbMgbvBbvBbkBbvCbvDbvEbkBbNVbkCbvGbvHbvIbvJbOebvLbvMbOfbvObvPbvQbsIbkJbvRbvSbvTbvUbvVbvVbvVbvVbvWbvXbpObFHbvYbFHbpObvZaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowbwabrvbwbbwcblpblpblpblpblpblpblpboAblpbuvbwdbalbwebegbcSbwfbqfbwgbqfbNFbcSbrFbRdbffaIObpcbuFbtgboMbwibwjbwkbwlbwmbNsbwnbNvbwpbNBbNgbNjbNmbNnbwubNpbwwbNqbwxbwybwzbwAbwBbwBbFsbIobLSbLUaIObgUbLQbLRbLNbLPbMcbixbLYbLZbLDbLXbLVbLWbLEbLDbLAbLzbDcbDcbDcbDcbDcbHfbEkbHfbAqbLJbLGbAqbAqbAqbAqbLybiSbiSbxbbxbbxbbxbbkBbkBbkBbkBbkBbMMbxebxfbxgbxhbxibMobMpbMpbMqbxmbojbxnbxobxpbvRbojbvTbxqbojbxrbojbxsbkIbupbuqburbxtbkIaaaaaaaafaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowbusbutbusbxubxvblpblpbxwbSRbSSbSRbSXbSRbSYbTabSTbSUbSVbSWbTbbSWbTcbTdbSVbxFbxGbRgbffaIObxHbxIbxJboMbxKbxLbxMbxNbxObNsbxPbThbxRbTgbxTbxUbxVbxWbxXbxYbxZbTibybbycbycbydbyebyfbPEbtvcbPbDNbSHbgUbixcbQcciccjcarcawcaWcbabPucbccbecbOcdabPucdkbWubRSceEceJceFbDccckccFccEbAqbVcbVobVnbVVbVWcfbcfccfHcfIbSEcfEbMpbMpbSsbSwbMpbSAbSybSzbSObSNbMpbSMbSQbSPbyPbyQbSLbySbySbySbySbySbyTbyUbyVbupburbkIbojbvVbyWbyXbyYbyZbzabzbaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowbzcbzdbzcbzebzfbzgbzgbzgbzgbzgbzhbziblpbuvbzjbalbzkbzlbzmbSbbzoboEbRZbzqbzrbarbarbzsaIObztbzubtgboMbzvbzwbjAbwjbzybNsbzzbSfbzBbzCbSdbzEbzFbSebzHbzIbzJbNqbzKbzLbzMbzNbyebyfbPEbtvbpcbDNaIObXvbXJbXLbLTbXwbEpbXtbXrbXsbLDbLDbLDbXubWzbLDbWybWubXqbXpbXobWJbDcbVUbVRbVQbWtbTobRmbRjbTubOrbYcbYKbYObZMbZNbZObvMbvMbArbvMbAsbvMbOfbvMbvMbvMbvMbRUbAubAvbAwbAxbRTbAzbAAbABbACbySbADbAEbAFaafaafbkIbAGbvVbyXbyXbvWbAHbAIbAJaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowbAKbALbAMbalbalbANbrvbrvbrvbAObalbalbAPbAQbARbalbASbASbASbRKbASbAUbRLbAWbAXbAYbAUbffaIObAZbBaaUnboMbOlbRrbRzbRzbRwbRsbRAbRCbRBbRAbRFbRGbRDbREbRHbRHbRHbRJbtvbtvbtvbtvbtvbtvbPobtvbpcbVabuDbVbbUSbUTbUUbUZbUdbUfbUgbUqbTFbTGbUbbUcbVKbVJbVMbVLbVxbVwbVIbVCbQUbVpbVvbVtbVmbMNbOtbOrbGabGbbAqbSKbSJbBObBObBObBObBObBPbBObBObBQbQTbBSbBTbBTbBUbKjbvRbBWbAwbBXbQZbBZbCabCbbCcbySbADbAEbCdaaaaaabkIbCebCfbkIbvWbkIbkIbvWbkIaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabCgaafaaaaaaaaaaaabASbChbCibQRbCkbAUbQQbCmbCnbCobAUbffaIObQMbQLbQNbQLbQObCtbCubCvbCwbCxaXNbQPaXNbCzbCAbCBbCCbCDbCEaIOaMibDbaMjaNsbCubCGbCHaIObNdaIObpcbDNbSHbymbymbSDbSBbSBbymbymbSmbSxbRXbSibScbSgbRYbRXbRWbRVbRSbRRbRQbRPbDcbRObRNbRMbRIbFZbEGbzRbvvbElbAqbRkbCTbBObDjbRibFAbQlbQmbDobDpbBQbQfbDrbDsbBTbBTbQdbvRbBWbDubDvbPXbDxbDybDzbDAbySbADbDBbyVbyVbyVbyVbyVbkIbkIaaaaaaaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGvaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabASbDCbDDbDmbDFbDGbDnbDIbDlbDKbAUbffbDLbDiaIOaIOaIOaIOaNsbCubCGbDNaIOaIObDdaIOaIObDPbDQbDRaIOaIOaIOaIObDbaIOaNsbCubCGbDSbypbCXaXNbDYbDXbDZbymbEbbBxbBxbBxbEebEdbEgbEfbEibEhbzGbEjbCUbCYbCZbDabDcbDebDfbDgbDcbDhbDkbDwbDEbvvbCMbCPbvvbvvbAqbksbCTbBObEqbErbEsbEtbDMbDJbDUbBQbDObEybEzbEzbBTbDqbEBbECbEDbEEbEFbDzbDtbEHbEIbySbADbAEbyVbEJbEKbEKbyVaafaafaafaafaafaafaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbELbEMbEMbENbEObEObEPbEPbEPbEPbEQaafaafaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowaaaaaaaaaaaaaaaaaaaaaaaabERbESaYhbESbEUaaaaaaaaabASbASbEVbEWbDmbEWbEXbEYbEZbFdbFbbAUbFcbffbEwbFebuDbFfbuDbFgbFhbFibuEaIObFjbEubEvbEvbFaaIObDSaXNbAtaXNbATbAybFnbFobFpbFqbFrbAdbAgbAfbEobEnaIObymbFmbBxbFlbETbBxbEdbFubFtbFzbFxbFwbFvbFEbFFbFBbFDbFKbFQbFGbDcbDcbHfbHfbHfbAqbDWbDHbDVbCRbCQbAqbksbCTbBObFPbEmbFAbFybFCbFTbFUbBQbFVbEybEzbEzbBTbFIbFJbFLbFMbFNbFObFRbFSbGebGfbFWbFXbFYbFYbFYbFYbGhbAFaaaaaaaaaaaaaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafbGkbGlbGmbGlbEObEPbEPbGnbGobGnbEPbEPaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGpbGqbGrbGqbGpbGsbGtbGubASbGvbEWbGwbBbbGybGzbGAbGAbBcbGCbAUbGDbGDbBibGDaUnaUnaUnaUnbGFbGFbGFbGFbGFbGFbGFbGFbBgbBfbBebGHbGHbGHbGHbBhbGJbGHbGHbGHbGHbxlbBdbGKaIUaKtbzYbymbzXbBxbBxbBxbAebAcbApbAobzGbzZbAbbAabyKbzGbzObzPbyzbyAbyCbyHbzTbzUbEcbvvbvvbvvbzQbzRbzWbvvbAqbksbIGbIGbIGbIGbIGbIGbIGbIGbIGbIGbHlbHmbHnbHnbBTbBnbHpbHqbHrbHrbHrbHrbHsbHtbHubBqbHrbHrbHrbHrbAEbgpbHxaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagbHybGlbGlbHzbEPbEPbGnbGnbHAbGnbGnbEPbEPaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaYhbHBbHCbHBaYhbHDbHEbHFbASbHGbHHbEWbHIbHJbAUbHKbHLbBrbHNbAUbHObHObBBbGDaaaaaaaaaaaabGFbBvbHRbBAbHTbHUbHVbGFbBVbHXbBYbGHbHZbCjbCpbClbBGbBDbBKbBJbBMbygbBRbBNbBobGKbGKbymbBmbBlbBlbBkbymbBCbBybBwbBubBtbBsbBpbCsbCybCqbCrbBHbBIbBEbBFbCNbCObFkbCKbCFbCJbBjbvvbvvbCLbAqbksbIGbWLbWLbWLbKXbWMbWLbWLbWLbIGbIKbILbIMbIMbBTbCSbIObBWbIPbIQbIRbISbITbIUbIVbCVbIXbIYbIZbHrbyVbCWbyVbJbbJbbJbbJbbJbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabJcbEPbHybEPbEPbGnbGnbGnbGnbGnbGnbGnbEPbEPaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGpbHBbHBbHBbJdbJebEWbEWbJfbJgbEWbEWbJhbJibAUbAUbAUbJRbAUbAUbJkbJlbJDbJnaaabJCbJpbJBbJrbJsbHVbJtbJubJPbJKbJObJybJxbJwbJvbJqbJobJEbJFbJGbJHbJIbGHbGHbJJbJAbJzbJQbJNbJUbJSbJZbJWbJWbJWbIDbICbJabIFbzGbJjbJMbJLbIxbzGbIybIzbEcbIAbIBbIBbIubIvbEcbAqbIwbAqbAqbAqbAqbAqbAqbksbIGbExbDTbWLdPubWLbWLbWLdPvbIGbKobEybKpbKpbBTbKjbKqbKrbKsbKtbKtbKtbKtbKubKvbKibKgbKhbJYbHrbKfbKdbJVbJTbJXbKFbKGbKHaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbEObEPbKIbKJbKJbGnbGnbGnbGnbGnbGnbGnbGnbEPbEPaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaYhbHCbHCbHCaYhbKKbKLbKMbKNbKObEWbKPbLsbLkbLibKVbKVbKZbKWbKVbKDbKEbKQbKYaaabGLbLabLbbLcbLdbHVbLebLfbLgbLhbGFbIabLjbKRbGHbLlbLmbLnbLobLpbLqbLrbKUboNbKSbKTbEabPybPybKnbymbFmbBxbFlbETbBxbHcbKcbFtbKmbKlbKkbKebKBbKCbGXbGYbLxbIAbIBbIBbIubKxbEcbKwbKzbKAbmobKybKbbKabkybksbIGbWLbEAbWLbWLbWLbWLbWLbWLbIGbQDbEybMbbMbbBTbLObMdbBWbMebKvbKvbMfbLFbLHbLIbLKbMkbLLbLCbLBbLwbLvbLubLtbMsbMtbKGbMuaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabEPbEPbMvbGnbGnbGnbGnbGnbGnbGnbGnbGnbGnbGnbEPbEPaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaabGpbMwbMxbMybGpbMzbGtbGubASbASbMAbMAbMAbASbASbGDbJkbJkbGibJkbJkbJkblPbKYaaabGLbMDbMEbMFbMGbMHbMIbMJbMGbMGbMKbGBbGxbGjbGHbGHbGHbGHbGHbGHbMObGHbGHbGIbGGbGEbEabPycpqasZbymbEbbBxbBxbBxbHdbHcbApbFtbHabGZbHbbBtbGVbGWbGXbGYbGRbGSbGTbGUbGNbGObEcbGPbGcbGdbmobGgbHgbHebkybksbIGbIGbAVbWLbWLbWLbWLbIGbIGbIGbNtbNubMbbMbbBTbHQbMdbBWbIPbNwbNxbNybNzbNAbHPbNCbKvbNDbNEbHrbGQbGMbNHbJbbNIbNJbNKbNLaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbEPbGnbGnbGnbGnbGnbGnbNMbGnbNNbGnbGnbGnbGnbGnbEPbEPaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabNObESbNPbESbNQaaaaafaaaaaabASbNRbNSbNTbASaaabGDccpcbybHWbJkbJkbJkblPbKYaaabGLbNWbNXbNYbNZbHVbOabObbOcbOdbGFbIabHYbIcbIbbIdbIdbIdbIdbIdbIdbIdbIdbIebIebIgbHhbGKbGKbGKbymbymbHwbHMbHwbymbymbHvbHobHjbHibzGbBubCUbInbIlbImbEcbIkbEcbEcbEcbEcbEcbIjbIfbIibmobHSbIsbIrbkybksbIGbINbCIbBLbXTbWRbMCbMabINbjXbOSbIWbDsbBTbBTbJmbMdbOVbJbbJbbHrbHrbHrbHrbBqbHrbOWbKvbOXbHrbIhbCWbyVbJbbOZbPabPbbJbaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabEPbPcbPcbPcbPcbPcbPcbPdbGnbPebPcbNNbGnbGnbGnbGnbEPaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafaafaafaafcbxbGDbGDbGDbGDbJkblQblPbPiaaabPjbJpbPkbPlbPmbHVbHVbPnblOblMblNbkiblSblRbgXbgXbgXbgXbgXbgXbgXbgXbgXbPwbPxbPybmqblAblzbGKbymblCblBblEblDblGblFblIblHblKblJblYblXbmabmbbmcbmdbmebmfbmgbmibmjbmkbidbmlbmmbmnbmobmpblfblebkybksbIGbjubiybivbIIbIIbOPbOObOQbjXbBTbllbBTbBTbQebgnbMdbojbQgaafbQhbQibQjbQkblwbQkblvbQnbQobHrblLbgpbQqbJbbQrbQsbQsbQtaagaagaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabQubGlbGlbGlbGlbGlbGlbGlbQvbGobGnbGnbGnbGnbQwbGobEPaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaBcaCcaCcaDcaEbGDccfbJkbmKbGDaaaaaaaaaaaabGFbQybQzbQAbQBbGFbQCbGFbmIbmHbmJbgXbgXbmEbmGbmFbmCbmBbmDbfNbfNbfNbfNbfNbfNbkabnZbnXbpdboXboUboObpkbpjbpibphbpobpnbnIbpmbnIbnJbnubnvbnNbnObnLbnMbnObnSbnPbnQbnVbnWbnTbnUbmubkjbkmbkkblxblgblTblybmAbQabQbbQabmtbQcbRlbmhbojbRnbojbgnbMdbojbRoaafbQhbRpbRpblUblVblWbRtbRubRvbHrbgqbgpbAEbJbbJbbJbbJbbJbaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabEPbKJbKJbKJbKJbKJbKJbRxbGnbKIbKJbRybGnbGnbGnbGnbEPaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabRecbncbocbpbJkbgsbJkbJkbgtbGDbguaaaaaaaaabGFbGFbGFbGFbGFbGFbGFbGFbhybhibhhbgXbgXbhBbgwbgxbgxbgwbgvbfNbgMbgLbgDbgBbfNbfGbymbymbfCbfAbfFbfEbBzbggbgibghbfJbfHbgfbfLbgTbgVbgWbgYbgjbgkbbVbcZbgkbhfbhjbhEbgZbhabhcbhdbinbilbidbgrbIGbglbglbdcbIIbisbIJbIIbIIbIHbSlbgmbSnbojbSobgnbMdbSpbSqaafbQhbRpbSrbQkbgobQkbStbSubSvbHrbgqbgpbiubitbyVaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbEPbGnbGnbGnbGnbGnbGnbNMbGnbRybGnbGnbGnbGnbGnbEPbEPaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccecaCcaCcaDcbtbiLbkebGDbkubGDccgbkvbkEccgccgbjFbjLbjMbjSbjTbjUbiabYpbjqbjxbhJbjybgwbjEbjDbiNbiMbiObfNbiQbiPbjpbiRbfNbkabPybjZbjYbjWbjVbiTbiTbkhbkgbkfbiDbkdbkcbkbbiDbiDbiBbiCbizbwUbhebhFbhebiKbiIbiJbiGbiHbiEbiFbiGbklbidbksbIGbhGbhIbhHbkobknbiAbNrbIGbIGbrhbiwbrhbrhbrhbhTbTwbhRbrhbHrbHrbHrbHrbHrbhYbHrbHrbHrbHrbHrbgqbgpbkrbkpbyVaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabEPbEPbMvbGnbGnbGnbGnbGnbGnbGnbGnbGnbGnbGnbEPbEPaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQalQchdalQalQalQalQalQaaaaaaaaaaaaaaaaaaaafaafaaabvqbtUbtUbtUbuhbtUbtUbtJbtKccgbwobwhccgbwJbwKbwHbwIbwDbwGbwtbwvbwSbwObwNbudbwMbgwbjEbwLbxjbiMbxdbfNbiQbiPbxcbxabfNbkabPybymbvnbvlbvpbvobuQbtXbvebvdbiDbvfbvkbvjbvxbiDbvAbvFbvNbwUbmwbtybtwbiKbvrbvsbiGbvtbvubvwbiGbtTbidbksbIGbIGbIGbsBbIGbIGbuObIGbIGbUwbUxbuPbUzbUAbrhbiwbUvbvabrhbUDbUEbUFbUGbuSbgqbUIbAEbUJbAEbAEbgqbgpbUKbyVbyVbyVaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbEObEPbPebPcbPcbGnbGnbGnbGnbGnbGnbGnbGnbEPbEPaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbxkbwYbptbwTbwCbqmbwqbwrbwsccgbzSbzVccgccgbAlbAmbAnbAhbAibAjbAkbYpbyNbyRbyObyxbyJbyMbyLbzDbyJbyJbyybzpbznbzAcjcbfNbkabqZbqZbqZbqZbywbqZbqZbqZbysbyrbiDbyvbqJbytbtDbiDbylbynbyqbwUbmwbtybmwbiKbwWbwXbiGbyibwZbyhbwFbwEbwQbwPbwRbwRbwRbwVbhCbhCbhDbhCbhCbhCbhCbyubxEbhCbxQbxSbyabyjbykbyobxAbxBbxAbxCbxDbxAbxAbxAbxAbxAbxzbxybxxbVNbVObyVbyVbyVbyVaaaaafaaaaaaaaaanmanmanmaafaaaaaaaafaaaaaaaafaaaaaabJcbEPbHybEPbEPbGnbGnbGnbGnbGnbGnbGnbEPbEPaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbpsbpsbptbpvbpubqmbqqbpwbpPccgbqvbqsbqubqCbqDbqwbqBbqObqQbqIbqKbqVbqUbqTbqSbstbrMbrGbribsdbsebsdbsvbsubsjbjpbshbfNbkabqZbqYbqWbqRbqXbqWbqMbqLbqPbqNbpxbppbqJbqJbsmbiDbsnbsobsibwUbmwbmxbmvbiKbsfbsgbiGbrObrVbsbbiGbssbidbvKboNbnHbmzbmyboJboGboibnRbnKbnEbnEbnwbprbnEbnEbpqbpgbplbpabpabpebpfbpbbngbpabnjboZbnhbnhbngbnjbnibAEbnkbnmbnlbWWbnfbWYbWZbXabXabXabXabXabXabXabXabXabXabXabXabXabXabXabXabXbbXcbXcbXdbEPbEPbGnbGnbXebGnbGnbEPbEPaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabSFbSFbSFbSFbSFbSFbSFbsqbsrccgccgccgccgccgbukbuAbuKbuKbuKbuMbuNbYpbjqbjxbtsbjybttbtxbtubtEbtCbtGbfNbtVbtHbtYbtWbfNbtRbtQbtPbtObtObtNbtMbtLbqZbspbscbiDbtIbtFbqJbtDbiDbtAbtBbtzbwUbmwbsabqHbiKbszbsAbiGbiGbiGbiGbiGbssbidbidbidbyBcmHbPybGKbXObXPbXQbGKbGKaaaaaaaaaaaabXRbXSbTrbtlbHkbtrbTnbthbTpbTqbsLbjmbSkbIEbIEbShbHkbyVbXVbswbXXbyVbyVbyVbyVaaaaafaaaaaaaaaanmanmanmaafaaaaaaaafaaaaaaaafaafaafbXYbXZbYabHzbEObEPbEPbGnbGobGnbEPbEPaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaafaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbSFbSGcnjcngcnhcnQbSFdTRdRNcrvcrucsWcrwcqwcqwcqxcnEcnEcnDcnFbAkbYpbjqbjxcnCbwMcnzcnAcnBcnwcnxcnybfNbtVcnpcnqdTTbfNbkabqZdZLdZOdZOdZMdZNbqZdYtdZPdZQbiDdZTdZRdZSdZHbiDdZGbtBdZIbwUdWcdVtdWlbiKdZKdZJbiKbPxbPwbiddZUbssdZVdZWbidbyBdWwdXGbGKaaaaafaaaaaaaafaaaaaaaaaaaabYQbYRcolcokdPAcrRdPDcombTqdPPconcrfbIEbIEbIEdQRbHkbYUbYUcoebYWbYUaaaaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbYXbEMbEMbENbEObEObEPbEPbEPbEPbEQaafaafaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaafaafaafbTebTebTebTebTebTebTebTebTebTebTebTebTeaaaaaacmobSGbSGbSGbSGcmAbSFcpTcpSbvqcpIcpGcoLcpFcoLcoKcmscmrcmqcmpbAkbLjcmFcmCcmDbgXbgXbgXbgXbgXbgXbgXbfNbfNcmBbfNbfNbfNbkabqZbqZdZrdZsdZtdZubqZdZvdZwdZxbiDbkdbiDbiDbiDbiDbwUdZydZzbwUcpVcpUcpVbiKdZCdZBbiKbPybPybiddZDbssbidbidbidbyBcpWcmNbGKaaaaafaaaaaaaafaaaaaaaaaaaabZPbZQcjWcmXcmWcmVcnacmZcmYcmYcnecndcnbdPHbIEcqebHkbYUbZTcmGbZVbYUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaabTecnScqacnSbTecnOcpYcnObTecnMcpZcnMbTeaaaaaacphbSGcpXbSGbSGcpRbSFdYBdYAdYDdYCdYGdYEdYxdYvdYzcpHcpHcpJcpHcpKcpAdRMbjxcpCcpDcpucpucpEcpucpucoMcpvcpwcpxcpyeaqcoMbkabEaeaxbMXbMXeaveaweaDeaEeaBeaCeazeaAeayeaeeaeeaudXBbwUbwUbwUeatbslbskbiKbiKbiKbiKbPybPybidbssbsseareasbidbyBbGKbGKbGKaaaaafaaaaaaaafaaaaaaaaaaaacaucavcqdcqcdPYcqgcqjcpmbTqbTqdQadPZbIEbIEbIEdQTbHkbYUcaycqbcaAbYUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaabTecnScnRcnSbTecnOcnPcnObTecnMcnNcnMbTeaaaaaacphbSGbSGbSGcpicoIcoHdYgdYfbvqdYudYmdYhdYedXIdXHcoycoEcoDcoCbAkbYpcpdcpbcpccpgcpfcpecpfcoOcoWcoMcoNcoZcpacoXdZZcoMbkabEaeabbMXbOsbMXeaaeageaheaieajeaceadeaeeafeaeeandXBdXEdYLeakeamealeapeakdYLdYLdYLdYLeaobidbidbidbidbidbidbyBbGKaafaafaafcbfaafaafaafaafaafaafaafcbgbXRcplcpkdPTdPSdPScpmbTqdPPdPVcrpbIEbIEbIEdQSbHkbYUcbjcpjcblbYUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaabTecrgcnicrebTecrccnfcrbbTecracnccqZbTeaaaaafcphcrdbSGbSGcqqbWbbSFdYVdYTbvqbvqdYSbvqbvqbvqbvqcrzbYpcrxcrybAkbYpdRPcrlbyOcrhcricrkcricrocrqcrscrtcrmcrncoMcoMcoMbkabEaeboebrebsebpebqebiebjebgebhebmebnebkeblebcebbebaeaZbJNebfebeebdeaYbCTbyDbXPbXQbGKboYdYLdYLdYLdYLdYLdYLdXDbGKaaaaaaaaaaafaaaaaaaafaaaaaaaaaaaabXRcbWcrLcrKbHkdQidQdcrCdQUdQedQhcrEbIEdQVdQWcrFbHkcbZccacrNcccccdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaafaafbTecqocdMcqpbTecdWcdMcdXbTecdLcdMcdNbTeaaaaafcqrbSGbSGbSIcqqcqybSFdYJdYIcqvcqucqtcqscqAcqAcqAcqBcqAcmpcqzbAkbAkbjqcqIcqJcpDcqCcqCcqHcqPcqQcoMcqOcqMcqNcqKcqLcoMbkabEaeaLeaMeaNeaOeaPbEaeaFeaGeaHdXBeaIeaJeaKeaSeaRdXBbyBbPydXFeaUeaTeaQdXFaaaaaaaaabGKbGKbGKbXObXPbXPbXQbGKbGKbGKaaaaaaaaabXRbXRbXRbXRbXRbXRbXRbXRbXRccPcqXcqWbHkbHkbHkbHkbHkbHkbHkbHkbHkbHkbHkbHkbHkaafccScqYccSaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaachdaafaafaafaaaaafcsLaafcsLaafcdmaafcdlaafcdmaafcdlaafaafaaabSFcsKbUXcsIcsJcszbQGcsBcsAbQGcsCcsDcivcivdTOcivchBcsGcsFchBcsHcstcsucsvcswcaOcaOcaOcaOcsxcsycaOcjXcjXcjXcjXcjXcjXbkabEaebRebPebQebNebObEaeaFebLebMdXBebKebIebJebHebGdXBbyBbPydXFebFebEebDdXFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaabXRcdOcdPcdQcdRcdScdTcdUcdVcsPcsNcsMcsOcrHaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaafcebceccebaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaafcsgclgcshclgcshclgccWclgccUclgccWclgccUclgccVbQGbQGbQGbQGbQGbQGbQGbQGcrPcrOcrUcrTcrSdTAdTNdTMdTLchBcsacrZcrYchBcaTchwchtcaOcsdcsecsbcscchhcaPcaOcpQcpQcsfclLclLcjXbkabEabEaebxebybEabEabEaebvdXXebwdXBdXBdXBebuebCdXBdXBbyBcpqdXFebBebAebzdXFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaafaafbXRcePceQcePceRceSbZQcsmcdVcskcslcskbXRbXRaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaafaaaceWaaaaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcbMbSZcgtcgrcgqcgAcgGchrcgFbSZcgDcgBcgCcgAbSZcgycgzcgwcgxcgucgvcilchachgchfcgYcgXcgZchDcijchJcikcgUcgIcgHcgKcgJchjchkchlcaOcaPcaPcaPcaPchhchicaOcoVcoVcoVclLclLcjXdXUdXTbEadXWdXKdXLdXVbEadXZdXXdXYdXBdYadXRdXSdYbdXBbPybyBcpqdXFdYddYcdYddXFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaabXRcePcePcePcfNcfOcdTcgmcfQcgncgpcgocfUbXRaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafaaacfVaaaaafaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaafcfqcfpcfmcbDcfmcbDcfmcbDcfocbDcfmcbDcfncbkcbkcbkcflbSZbSZcfkbSZcgccbkcgbcgacfZcfTcfSchDchCchbcgWcfJcfGcfFcfAcfzcducfycfxcaOcfwcfvcfvcfvcftcfucaOcfscfgcfgcfgcfrcjXbGKbkabEadXJdXKdXLdXLdXMdXNdXOdXPdXQdXRdXRdXSdXCdXBdXEdXDbGKdXFdXHdXGdXIdXFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaabXRcdVcdVcdVcdVcgVbZQcffcfecfdcfjcficfhbXRaaaaaaaaaaaaaaachcchcchcchdaafaafaafaafcfVaafaafaafaafaafampchcchcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaafaafaafcbMciccibbSZcibciYchYciXciabSZcibbSZbSZbSZbSZbSZciUcbkciWciVcbkciqcipciscirciucitciwdRUcrXcrWcsEchBcincimciochBciLciMciQciRciSciSciTciTchqcixcaOciycfgcizcfgciKcjXbGKbkabEadYodYpdXLdYnbEadYtdYsdYtdXBdYrdXRdYqdYwdXBbyBbGKbGKdXFdYvdYudYxdXFaaaaaaaaaaaaaaaaaabVudYmdWadXfbVuaafaaaaaaaaaaaabXRcdOcdPcdQchPchQcdTcifcihcigciebZQchVbXRaaaaaaaaaaaaaaachcaaaaafaaaaafaaaaaaaaachWaaaaafaafaaaaaaaaaaaachcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaafaafaaaaaacbMciccibbSZcidchUchXchHchGchHchYchZciachLchHchHchRchHchSchTchHchIchIchHchGcfTchKbWlcrVcrQckLcivchBchFchBchBchBchvchwchtchuchzchAchxchychqdypcaOchpcfgchscfgcfgcjXbGKbkabEabEadYibEabEabEadYkbtSdYldXBdXBdXBdYjdXBdXBbyBbGKaaabZJbVudYhbVubZJaaaaaaaafaaaaaaaaabVudYgdYedYfbVuaafaafaaaaafaafbXRcePcePcePciIceSbZQciJchnchmcgsbZQciNbXRbXRbXRbXRaaaaaachcaaaciOciOciOciOciOaafciPaafciOciOciOciOciOaaachcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaacbMciccidchHchHchHchHchHchGchHchHchHchGchYckockmcknckkcklckhckickwckwckickGbSZckpckvclqckMdTzckNckHckIckHckKckJckHckQckRckSckOckPckPckPckVckPckWckXckTckUclHclHcjXbGKdYMdYNdYQdYRdYOdYPdYLdYLdYKdYLdYLdYLdYLdYLdYLdYUdXDbGKaaabVudYWdYVdYSbVubVubVudYTbVubVubVubVucsjbXKcbdbVubVubVubZJaaaaaabXRcePcePcePchPcjxcdTcjyckeckdckgckfckfdYXcjEcjFbXRaafaafchcaafcjGcjHcjHcjHcjHcjIciPcjJcjKcjKcjKcjKcjLaafchcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaacbMcjlbSZbSZcjjcjbcjbcjbcjdcjbcjbcjbcjdcjbcjbcjhcjicjecjdcjfcjgcjScjRcjbcjQcjPcjOcjCcjBckqcjZcjYcjqcjVcjUcjTcjqcjqcjrcjncjocjmcjkcjkckacjkcjkcjAcjscjscjzclHclHcjXbGKbfMbTBbTBbTBbTBdYHbTBbTBbTBbTBbPybPybGKbGKbGKbGKbGKbGKaaabVudYGdYFdYycaZdYAdYzdYCdYBdYEdYDbVudWFbXKdWLbVudYJdYIbVuaaaaaabXRcdVcdVcdVcdVckubZQciJcjaciZcgsbZQbZQckxbZQckybXRaaaaaachcaafckzckzckzckzckzaaaciPaaackzckzckzckzckzaafchcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaachdaaaaaaaaaaaacbMcicbSZbSZbSZbSZbSZbSZcmmbSZbSZbSZcmmbSZbSZcmmcicbSZcmmcidcmnclTcaiclUcljcbsclVbSZbSZcbXcpBbQGbQGbQGbQGclXclrcaTcaSccsciRclYcaPcmbcmjcaPcmkcaOcqicmlcfgcqGcencjXbPybfMbTBbhNbhMbhLbYhbhKbhQbhPbTBbSabhObGKaaaaaaaaaaaaaaaaaacaZdZqbsxdZpcaZdZodZnbXKbXKdZmcbbdZkdWqdZldWsdZjbXKbXKbVuaaaaaabXRcdOcdPcdQcllchQcdTclmckZclRclOclNclQclPclMclsbXRaaaaaachcaaaaafaaaaafaafaafaaaciPaaaaafaaaaafaaaaafaaachcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaacbMcicbSZbSZclKckickickiclBckickickiclBckickiclDclGckiclIckiclJclhcljcliclhclnclnclnclnclWclpclockiclAclzclxclrclbcdzccsclacldcaPcaPclccaPclecaOcqhcqhclfcqGcencjXbPybfMbTBbvhbvibVTbVSbvmbVSbvbbTBbTfbvgbGKaaaaaaaaaaaaaaaaaacaZdXmdZicaZcaZdZhdZgdZddZcdZfdZedZadZbcspcsqdYZbXKdYYbVuaaaaaabXRcePceQcePcmaceSbZQbZRckZckYcmJbZQcmccdVcdVcdVbXRaaaaaachcaaaciOciOciOciOciOaafciPaafciOciOciOciOciOaafchcaaaaaaaaaaaaaaaaaaaaaaaacmdaaaaaaaaacmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaacbMcbJcbKcbDcbIcbDcbHcbDcbGcbDcbFcbDcbEcbDcbDcbCcbBcbAcbzcbwcbvcbscbubSZcbmcbmcbqcbrcbrbSZcbhcbicbkcaVcaVcaXcaYcaTcaScaUcaOcaQcaPcaRcaPcaNcaMcaOcjXcjXcjXcjXcjXcjXbPybfMbTBbyGbyIbvibYgbvibVSbyFbTBbyEbUjbGKaaaaaaaaaaaaaaaaaabVudWhdWidWkdWldWjcsidWndWodWmcsTcsQdWdcsRdWedWfbVudWgbVuaaaaaabXRcePcePcePcllcmEcbRcbScbTcbUcmJbZQcmJbZQcmKbZQbYQaafaafchcaafcjGcjHcjHcjHcjHcjIciPcjJcjKcjKcjKcjKcjLaafchcaaaaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaafaaaaaaaaacbMbSZcctccuccvckjccJccNccLbSZccDccIccHckjbSZbSZccAccxccwcczccycchcclbSZcbrcbrcbrbSZccbbSZcbYbQGbSZbYuchEcbVcaYcaTcaSccscaOccrccqccoccnccmcaPcaObPybPybPybPybPybPybPybfMbTBbVSbnsbnrbVSbntbnpbnobTBbnqbnnbGKaaaaaaaaaaaaaaaaaabVudWtdWudWvdWwdWxdWydWzdWAdWqdWBcgidWrdWqdWpdWsbVubVubVuaaaaaacbgbXRcnkcnlcnlcnmcnncnocnnccQccRccTcnscntcdTcnucnvaaaaaachcaafckzckzckzckzckzaaaciPaafckzckzckzckzckzaaachcaaacmdaaaaaacmdaaaaaacmdcmdcmdcmdcmdcmdcmdaaaaaacmdaaaaaacmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaccXclgccUclgccWclgccUclgccWclgccUclgccWclgclgclgccUclgccWclgccVbQGbQGcdecdfcdgcdhcdibQGcdcbQGbQGbQGbQGbQGbQGcddccZccYcdbcaOcaOcaOcaOcaOcaOcaOcaObPybPybGKbXOdWCdWJbGKbfMbTBbsJbsDbsCbVSdWKbYdbsybTBbSabhObGKaaaaaaaaaaaaaaaaaabVudWDdWEcaZcaZdWHdWIdWGcgTdWFbXKdWLdWMdWFbXKdWLbVuaaaaaaaaaaaaaaaaaaclkaaabXRcnTcnUcnVcnWcnXcnUcnYcnZcnXcnUcoabXRaaaaaachdaaaaafaaaaafaaaaafaaacobaaaaafaaaaafaafaafaafchcaaacmdcmdcmdcmdaaacmdcmdcmdcmdcmdcmdcmdcmdcmdaaacmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGvaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaafaafaafaaaaafcdlaafcdmaafcdlaafcdmaafcdlaafcdmaafaaaaafcdlaafcdmaafaaaaaabQGcdecdfcdvcdhcdibQGcdpcdqcdncdocdtcdwcdrcdscdwcdCcdBcdAcdFcdEcdDcdycdycdycdxbPybPybGKaafaafaaabGKbfMbTBbTBbVPcoicohcoibVPcojbTBbGKbXIbGKaaaaaaaaaaaaaaaaaabVucsjbsxdWOdWPdWQdWRdWNciFcsjbXKdWydWMdWScsRdWybVuaaaaaaaaaaaaaaaaaacooaafbXRcopcoqcorcdVcoscotcoucdVcovcowcoxbXRaaaaaachcaaaciOciOciOciOciOaafcfVaafciOciOciOciOciOaafchcaaacmdcmdcmdcmdaaacmdcmdcmdcmdcmdcmdcmdcmdcmdaaacmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaafaafbTecdXcdMcdWbTecdXcdMcdWbTecdNcdMcdLbTeaaabTecdNcdMcdLbTeaaaaaabQGbQGbQGbQGbQGbQGbQGbGibJkcgOcdycfRcdocgLcdocdocdKcfMcfLcdHcdGcdJcdIcdycdycfPbYPbPybGKaafaaaaaabGKcmHdXccmNbVPcmObYdcmPbVPcmQaafcmRcmScmRaaaaaaaaaaaaaaaaaabVucsjbsxbXKcaZccKdWYdXbcaZdWZdXadWUdWTdWWdWVdWXbVuaafaafaaeaaaaaaaaaaaaaaabXRcoPcePcePcdVcoPcePcePcdVcoPcePcePbXRaafaafchcaafcjGcjHcjHcjHcjHcoQcoRcoQcjKcjKcjKcjKcjLaafchcaaacmdcmdcmdcmdaaacmdcmdcmdcmdcmdcmdcmdcmdcmdaaacmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaabTeceicgMcejbTeceoccBcepbTecekcemcelbTeaaabTecerbVqceqbTeaaaaaaaaaaafaafaafaaaaafbGDbGibJkcrjcrjcdZcrjcgEcdYcehcegcdYcefcgEceecedceabYocgOcgObGKbGKbGKaaaaaaaaabGKbvKdXgdXhbVPcoicqmcoibVPcmQaafaaaaafaaaaaaaaaaaaaaaaaaaaabVudXmdXndWPcaZdXidXjdXkcaZdWAdXldXfdXeccKdXddWbbZJaaaaaaaaaaaaaaaaaaaaaaaabXRcprcePcePcdVcprcePcePcdVcprcePcePbXRaaaaaachcaafckzckzckzckzckzaaacfVaaackzckzckzckzckzaaachcaaacmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaabTecfBcgNcfBbTecbLccCcbLbTebUhcesbUhbTeaaabTebUhbUhbVrbTeaaaaaaaaaaaaaagaafaafaaabGDbGibJkcrjceAceBceCbYrceDceucetcewcevbYrcexcezceybYoaaaaafaafaaaaaaaaaaaaaaabGKbPybPycpqbVPcpncpocppbVPcmQaafaafaaaaaaaaaaaaaaaaaaaaaaaabVudXtcghcspdXsdXqdXrdXpcbNdXoaafaaadXvdXxdXwdXuaaaaaaaaaaaaaaaaaaaaaaaaaaabXRcpOcePcePcdVcpOcePcePcdVcpOcePcePbXRaaeaaachcaaaaaaaafaafaafaaaaaacfVaafaaaaaaaafaafaaaaaachcaaacmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaampaaaaaaaaaaafbTecfBceGcfBbTecbLceHcbLbTebUhceIbUhbTeaaabTebUhbUhbUhbTeaaaaaaaaaaaaaaaaaaaafaaabGDbGiceKcrjbYIceMceNbYrceLceVceUceTceObYrcfaceZceYbYoaaaaaaaaaaaaaaaaaaaaaaaabGKbPybPybGKbVPcrJcrJcrJbVPcrIcrHaaaaaaaaaaaaaaaaaaaaaaaaaaabVudXtbYLdXzdXAdXAdVRdWydXybVuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbgbXRbXRbXRbXRbXRbXRbXRbXRcqfcqfcqfcbgaaaaaachcchcchcchcchcaaaaaaaaacfVaaaaaaaaachcchcchcchdchcaaacmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaafbTebTebTebTebTebTebTebTebTebTebTebTebTeaaabYybTebTebTebYyaaaaaaaaabYnaaaaaabYmcoUbGDbGibJkcrjbYlbYfbYibYjbYkbYvbWkbYxbYwbYrbYqbYtbYsbYoaafaaaaaaaaaaaaaaaaaaaaabGKbPybPydVOcqRaafaafaafaaaclkaafaafaaaaaaaaaaaaaaaaaaaaaaaabVudVPcsSdVRciGciGdVQbXKdVSbVuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacqDcqDcqDaaaaaaaaaaaaaaaaaaaaaaaaaaachcaafcqEaafchcaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabYmbYNbYJbYMbGibJkcrjbYIbYfbYHbYrbYGbYFbYEbYDbYCbYrbYBbYAbYzbYoaagaafaaaaaaaaaaaaaaaaaabGKbUxctgdVVaafaaaaaaaafaaaclZaafaaaaaaaaaaaaaaaaaaaaaaaaaaabVudVTbXKbXKbXKbXKbXKbXKdVUbVuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaachcaaaaafaaachcaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaalQaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaabYSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceXbZbbJkbJkbGibYTcrjbYVbYYbYZbYrbZabZdbZcbZfbZebYrbZgbZibZhbYoaaaaaaaaaaaaaaaaaaaaaaaabGKdVWcdjbGKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZJbVubVudVXdVZdVQdVQdVQdVYdVXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaachcchcchcchcchcaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaceXbZpbJkbJkbGibZjbZjbZjbZjbZjbZjbZobZmbZlbZlbZkbZjbZjbZnbZjbZjbZjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaciFciGciGciGciGciGciFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdaaaaaacmdcmdcmdcmdcmdcmdcmdaaaaaacmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaampaaaaaaaafaafaaaaafaafaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZraaaaaaceXbZqbJkbJkbGibZjbZwbZxbZsbZtbZubZvbZDbZCbZCbZCbZzbZybZBbZAbZEbZjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabVuccKdWadWadWadWbbVuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaacfWcfXcfYaaacfWcfXcfYaaacfWcfXcfYaafaafaaaaaaaaaaaaaafaafaaaaaaaaaaaabZYaaabZWbZXbZSbZUbGibZjbZwbZxcaacabbZvbZZbZKbZIbZCbZCbZDbZHbZGbZFbZLbZjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadWcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaacfWchecfYaaacfWchecfYaaacfWchecfYaafaafaafaafaaaaaabYnaaaaaaaaaaafaaaaaaaaaaaabZWcoUbGDbGibZjcaccadcaecafcagcahcakcajcafcafcamcalcaocancapbZjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalPaafcfWchecfYaaacfWchecfYaafcfWchecfYaafaaaaaaaafaafcaqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGDbGibZjcaHcaIcaLbZBcaJcaKcaxcatbZHcascascaFcazcancaGbZjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaafcsgclgcshclgcshclgccWclgccUclgccWclgccUclgccVbQGbQGbQGbQGbQGbQGbQGbQGcrPcrOcrUcrTcrSdTAdTNdTMdTLchBcsacrZcrYchBcaTchwchtcaOcsdcsecsbcscchhcaPcaOcpQcpQcsfclLclLcjXbkabEabEaebxebybEabEabEaebvdXXebwdXBdXBdXBebuebCdXBdXBbyBcpqdXFdYWdYcdYddXFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaafaafbXRcePceQcePceRceSbZQcsmcdVcskcslcskbXRbXRaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaafaaaceWaaaaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcbMbSZcgtcgrcgqcgAcgGchrcgFbSZcgDcgBcgCcgAbSZcgycgzcgwcgxcgucgvcilchachgchfcgYcgXcgZchDcijchJcikcgUcgIcgHcgKcgJchjchkchlcaOcaPcaPcaPcaPchhchicaOcoVcoVcoVclLclLcjXdXUdXTbEadXWdXKdXLdXVbEadXZdXXdXYdXBdYadXRdXSdYbdXBbPybyBcpqdXFcmucmtcmvdXFaaaaaaaaaaaaaaaaaaacTcmweaVcmxacTaafaaaaaaaaaaaabXRcePcePcePcfNcfOcdTcgmcfQcgncgpcgocfUbXRaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafaaacfVaaaaafaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaafcfqcfpcfmcbDcfmcbDcfmcbDcfocbDcfmcbDcfncbkcbkcbkcflbSZbSZcfkbSZcgccbkcgbcgacfZcfTcfSchDchCchbcgWcfJcfGcfFcfAcfzcducfycfxcaOcfwcfvcfvcfvcftcfucaOcfscfgcfgcfgcfrcjXbGKbkabEadXJdXKdXLdXLdXMdXNdXOdXPdXQdXRdXRdXSdXCdXBdXEdXDbGKeaQdXFccYdXFeaQaaaaaaaafaaaaaaaaaacTceVceuceTacTaafaafaaaaaaaaabXRcdVcdVcdVcdVcgVbZQcffcfecfdcfjcficfhbXRaaaaaaaaaaaaaaachcchcchcchdaafaafaafaafcfVaafaafaafaafaafampchcchcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaafaafaafcbMciccibbSZcibciYchYciXciabSZcibbSZbSZbSZbSZbSZciUcbkciWciVcbkciqcipciscirciucitciwdRUcrXcrWcsEchBcincimciochBciLciMciQciRciSciSciTciTchqcixcaOciycfgcizcfgciKcjXbGKbkabEadYodYpdXLdYnbEadYtdYsdYtdXBdYrdXRdYqdYwdXBbyBbGKbGKdXFcoAcozcoFdXFacTacTcoBacTacTacTbVucsjbXKcbdbVuacTacTcodaaaaaabXRcdOcdPcdQchPchQcdTcifcihcigciebZQchVbXRaaaaaaaaaaaaaaachcaaaaafaaaaafaaaaaaaaachWaaaaafaafaaaaaaaaaaaachcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaafaafaaaaaacbMciccibbSZcidchUchXchHchGchHchYchZciachLchHchHchRchHchSchTchHchIchIchHchGcfTchKbWlcrVcrQckLcivchBchFchBchBchBchvchwchtchuchzchAchxchychqdypcaOchpcfgchscfgcfgcjXbGKbkabEabEadYibEabEabEadYkbtSdYldXBdXBdXBdYjdXBdXBbyBbGKaaabVucnGdYFdYycaZcoccnLcnIcnHcnKcnJbVudWFbXKdWLbVucmzcmyacTaafaafbXRcePcePcePciIceSbZQciJchnchmcgsbZQciNbXRbXRbXRbXRaaaaaachcaaaciOciOciOciOciOaafciPaafciOciOciOciOciOaaachcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaacbMciccidchHchHchHchHchHchGchHchHchHchGchYckockmcknckkcklckhckickwckwckickGbSZckpckvclqckMdTzckNckHckIckHckKckJckHckQckRckSckOckPckPckPckVckPckWckXckTckUclHclHcjXbGKdYMdYNdYQdYRdYOdYPdYLdYLdYKdYLdYLdYLdYLdYLdYLdYUdXDbGKaaacaZdZqbsxdZpcaZdZodZnbXKbXKdZmcbbdZkdWqdZldWsdZjbXKbXKbVuaaaaaabXRcePcePcePchPcjxcdTcjyckeckdckgckfckfdYXcjEcjFbXRaafaafchcaafcjGcjHcjHcjHcjHcjIciPcjJcjKcjKcjKcjKcjLaafchcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaacbMcjlbSZbSZcjjcjbcjbcjbcjdcjbcjbcjbcjdcjbcjbcjhcjicjecjdcjfcjgcjScjRcjbcjQcjPcjOcjCcjBckqcjZcjYcjqcjVcjUcjTcjqcjqcjrcjncjocjmcjkcjkckacjkcjkcjAcjscjscjzclHclHcjXbGKbfMbTBbTBbTBbTBdYHbTBbTBbTBbTBbPybPybGKbGKbGKbGKbGKbGKaaacaZdXmdZicaZcaZdZhdZgdZddZcdZfdZedZadZbcspcsqdYZbXKdYYbVuaaaaaabXRcdVcdVcdVcdVckubZQciJcjaciZcgsbZQbZQckxbZQckybXRaaaaaachcaafckzckzckzckzckzaaaciPaaackzckzckzckzckzaafchcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaachdaaaaaaaaaaaacbMcicbSZbSZbSZbSZbSZbSZcmmbSZbSZbSZcmmbSZbSZcmmcicbSZcmmcidcmnclTcaiclUcljcbsclVbSZbSZcbXcpBbQGbQGbQGbQGclXclrcaTcaSccsciRclYcaPcmbcmjcaPcmkcaOcqicmlcfgcqGcencjXbPybfMbTBbhNbhMbhLbYhbhKbhQbhPbTBbSabhObGKaaaaaaaaaaaaaaaaaabVudWhdWidWkcoJdWjcsidWndWodWmcsTcsQdWdcsRdWedWfbVudWgbVuaaaaaabXRcdOcdPcdQcllchQcdTclmckZclRclOclNclQclPclMclsbXRaaaaaachcaaaaafaaaaafaafaafaaaciPaaaaafaaaaafaaaaafaaachcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaacbMcicbSZbSZclKckickickiclBckickickiclBckickiclDclGckiclIckiclJclhcljcliclhclnclnclnclnclWclpclockiclAclzclxclrclbcdzccsclacldcaPcaPclccaPclecaOcqhcqhclfcqGcencjXbPybfMbTBbvhbvibVTbVSbvmbVSbvbbTBbTfbvgbGKaaaaaaaaaaaaaaaaaabVudWtdWudWvcoGdWxdWydWzdWAdWqdWBcgidWrdWqdWpdWsbVubVubVuaaaaaabXRcePceQcePcmaceSbZQbZRckZckYcmJbZQcmccdVcdVcdVbXRaaaaaachcaaaciOciOciOciOciOaafciPaafciOciOciOciOciOaafchcaaaaaaaaaaaaaaaaaaaaaaaacmdaaaaaaaaacmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaacbMcbJcbKcbDcbIcbDcbHcbDcbGcbDcbFcbDcbEcbDcbDcbCcbBcbAcbzcbwcbvcbscbubSZcbmcbmcbqcbrcbrbSZcbhcbicbkcaVcaVcaXcaYcaTcaScaUcaOcaQcaPcaRcaPcaNcaMcaOcjXcjXcjXcjXcjXcjXbPybfMbTBbyGbyIbvibYgbvibVSbyFbTBbyEbUjbGKaaaaaaaaaaaaaaaaaabVudWDdWEcaZcaZdWHdWIdWGcgTdWFbXKdWLdWMdWFbXKdWLbVubWTbWTaaaaaabXRcePcePcePcllcmEcbRcbScbTcbUcmJbZQcmJbZQcmKbZQbYQaafaafchcaafcjGcjHcjHcjHcjHcjIciPcjJcjKcjKcjKcjKcjLaafchcaaaaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaafaaaaaaaaacbMbSZcctccuccvckjccJccNccLbSZccDccIccHckjbSZbSZccAccxccwcczccycchcclbSZcbrcbrcbrbSZccbbSZcbYbQGbSZbYuchEcbVcaYcaTcaSccscaOccrccqccoccnccmcaPcaObPybPybPybPybPybPybPybfMbTBbVSbnsbnrbVSbntbnpbnobTBbnqbnnbGKaaaaaaaaaaaaaaaaaabVucsjbsxdWOdWPdWQdWRdWNciFcsjbXKdWydWMdWScsRdWybVubWTbWTaaaaaacbgbXRcnkcnlcnlcnmcnncnocnnccQccRccTcnscntcdTcnucnvaaaaaachcaafckzckzckzckzckzaaaciPaafckzckzckzckzckzaaachcaaacmdaaaaaacmdaaaaaacmdcmdcmdcmdcmdcmdcmdaaaaaacmdaaaaaacmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaccXclgccUclgccWclgccUclgccWclgccUclgccWclgclgclgccUclgccWclgccVbQGbQGcdecdfcdgcdhcdibQGcdcbQGbQGbQGbQGbQGbQGcddccZbZmcdbcaOcaOcaOcaOcaOcaOcaOcaObPybPybGKbXOdWCdWJbGKbfMbTBbsJbsDbsCbVSdWKbYdbsybTBbSabhObGKaaaaaaaaaaaaaaaaaabVucsjbsxbXKcaZccKdWYdXbcaZdWZdXadWUdWTdWWdWVdWXbVuaafaafaaaaaaaaaaaaclkaaabXRcnTcnUcnVcnWcnXcnUcnYcnZcnXcnUcoabXRaaaaaachdaaaaafaaaaafaaaaafaaacobaaaaafaaaaafaafaafaafchcaaacmdcmdcmdcmdaaacmdcmdcmdcmdcmdcmdcmdcmdcmdaaacmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGvaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaafaafaafaaaaafcdlaafcdmaafcdlaafcdmaafcdlaafcdmaafaaaaafcdlaafcdmaafaaaaaabQGcdecdfcdvcdhcdibQGcdpcdqcdncdocdtcdwcdrcdscdwcdCcdBcdAcdFcdEcdDcdycdycdycdxbPybPybGKaafaafaaabGKbfMbTBbTBbVPcoicohcoibVPcojbTBbGKbXIbGKaaaaaaaaaaaaaaaaaabVudXmdXndWPcaZdXidXjdXkcaZdWAdXldXfdXeccKdXddWbbZJaaaaaaaaaaaaaaaaaacooaafbXRcopcoqcorcdVcoscotcoucdVcovcowcoxbXRaaaaaachcaaaciOciOciOciOciOaafcfVaafciOciOciOciOciOaafchcaaacmdcmdcmdcmdaaacmdcmdcmdcmdcmdcmdcmdcmdcmdaaacmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaafaafbTecdXcdMcdWbTecdXcdMcdWbTecdNcdMcdLbTeaaabTecdNcdMcdLbTeaaaaaabQGbQGbQGbQGbQGbQGbQGbGibJkcgOcdycfRcdocgLcdocdocdKcfMcfLcdHcdGcdJcdIcdycdycfPbYPbPybGKaafaaaaaabGKcmHdXccmNbVPcmObYdcmPbVPcmQaafcmRcmScmRaaaaaaaaaaaaaaaaaabVudXtcghcspdXsdXqdXrdXpcbNdXobZIbWTdXvdXxdXwdXubWTaaaaaaaaeaaaaaaaaaaaaaaabXRcoPcePcePcdVcoPcePcePcdVcoPcePcePbXRaafaafchcaafcjGcjHcjHcjHcjHcoQcoRcoQcjKcjKcjKcjKcjLaafchcaaacmdcmdcmdcmdaaacmdcmdcmdcmdcmdcmdcmdcmdcmdaaacmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaabTeceicgMcejbTeceoccBcepbTecekcemcelbTeaaabTecerbVqceqbTeaaaaaaaaaaafaafaafaaaaafbGDbGibJkcrjcrjcdZcrjcgEcdYcehcegcdYcefcgEceecedceabYocgOcgObGKbGKbGKaaaaaaaaabGKbvKdXgdXhbVPcoicqmcoibVPcmQaafaaaaafaaaaaaaaaaaaaaaaaaaaabVudXtbYLdXzdXAdXAdVRdWydXybVubWTbWTbWTbWTbWTbWTbWTaaaaaaaaaaaaaaaaaaaaaaaabXRcprcePcePcdVcprcePcePcdVcprcePcePbXRaaaaaachcaafckzckzckzckzckzaaacfVaaackzckzckzckzckzaaachcaaacmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaabTecfBcgNcfBbTecbLccCcbLbTebUhcesbUhbTeaaabTebUhbUhbVrbTeaaaaaaaaaaaaaagaafaafaaabGDbGibJkcrjceAceBceCbYrceDbZKcetcewcevbYrcexcezceybYoaaaaafaafaaaaaaaaaaaaaaabGKbPybPycpqbVPcpncpocppbVPcmQaafaafaaaaaaaaaaaaaaaaaaaaaaaabVudVPcsSdVRciGciGdVQbXKdVSbVuaaaaaabWTbWTbWTbWTaaaaaaaaaaaaaaaaaaaaaaaaaaabXRcpOcePcePcdVcpOcePcePcdVcpOcePcePbXRaaeaaachcaaaaaaaafaafaafaaaaaacfVaafaaaaaaaafaafaaaaaachcaaacmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaampaaaaaaaaaaafbTecfBceGcfBbTecbLceHcbLbTebUhceIbUhbTeaaabTebUhbUhbUhbTeaaaaaaaaaaaaaaaaaaaafaaabGDbGiceKcrjbYIceMceNbYrceLcaxceUcakceObYrcfaceZceYbYoaaaaaaaaaaaaaaaaaaaaaaaabGKbPybPybGKbVPcrJcrJcrJbVPcrIcrHaaaaaaaaaaaaaaaaaaaaaaaaaaabVudVTbXKbXKbXKbXKbXKbXKdVUbVuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbgbXRbXRbXRbXRbXRbXRbXRbXRcqfcqfcqfcbgaaaaaachcchcchcchcchcaaaaaaaaacfVaaaaaaaaachcchcchcchdchcaaacmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaafbTebTebTebTebTebTebTebTebTebTebTebTebTeaaabYybTebTebTebYyaaaaaaaaabYnaaaaaabYmcoUbGDbGibJkcrjbYlbYfbYibYjbYkbVXbWkbWIbWmbYrbYqbYtbYsbYoaafaaaaaaaaaaaaaaaaaaaaabGKbPybPydVOcqRaafaafaafaaaclkaafaafaaaaaaaaaaaaaaaaaaaaaaaabZJbVubVudVXdVZdVQdVQdVQdVYdVXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacqDcqDcqDaaaaaaaaaaaaaaaaaaaaaaaaaaachcaafcqEaafchcaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabYmbYNbYJbYMbGibJkcrjbYIbYfbYHbYrbYGbYvbYEbXfbWVbYrbYBbYAbYzbYoaagaafaaaaaaaaaaaaaaaaaabGKbUxctgdVVaafaaaaaaaafaaaclZaafaaaaaaaaaaaaaaaaaaaaaaaaaaabWTbWTbWTciFciGciGciGciGciGciFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaachcaaaaafaaachcaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaalQaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaabYSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceXbZbbJkbJkbGibYTcrjbYVbYYbYZbYrbZabYwbZcbYxbZebYrbZgbZibZhbYoaaaaaaaaaaaaaaaaaaaaaaaabGKdVWcdjbGKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWTbWTbWTbVuccKdWadWadWadWbbVuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaachcchcchcchcchcaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaceXbZpbJkbJkbGibZjbZjbZjbZjbZjbZjbZobYDbZlbYCbZkbZjbZjbZnbZjbZjbZjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWTbWTbWTbWTbWTbWTbWTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdaaaaaacmdcmdcmdcmdcmdcmdcmdaaaaaacmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaampaaaaaaaafaafaaaaafaafaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZraaaaaaceXbZqbJkbJkbGibZjbZwbZxbZsbZtbZubZvbYFbZCbZdbZCbZzbZybZBbZAbZEbZjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWTbWTbWTbWTbWTbWTbWTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaacfWcfXcfYaaacfWcfXcfYaaacfWcfXcfYaafaafaaaaaaaaaaaaaafaafaaaaaaaaaaaabZYaaabZWbZXbZSbZUbGibZjbZwbZxcaacabbZvbZZbZDbZCbZCbZCbZDbZHbZGbZFbZLbZjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaacfWchecfYaaacfWchecfYaaacfWchecfYaafaafaafaafaaaaaabYnaaaaaaaaaaafaaaaaaaaaaaabZWcoUbGDbGibZjcaccadcaecafcagcahcamcajcafcafcamcalcaocancapbZjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalPaafcfWchecfYaaacfWchecfYaafcfWchecfYaafaaaaaaaafaafcaqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGDbGibZjcaHcaIcaLbZBcaJcaKbZfcatbZHcascascaFcazcancaGbZjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvaaactvctvctvctvctvaaactvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaacfWchecfYaafcfWchecfYaaacfWchecfYaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGDbGibZjcRQcaIcTocSfcRfcRfcRicRfcRecRfcRfcROcRpcRqcRdbZjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvaaactvctvctvctvctvaaactvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQalQalPaafaaacfWchecfYaafcfWchecfYaaacfWchecfYaafaaaaaaaaaaaaaafaafcjMcjNcjNcjNcjNbGDcoTctictictjbGDbGibZjcPScPDcPVbZjbZjbZjcQHcQJcQNbZjbZjbZjcRbcRccPWbZjaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaafaaaaafaafckAaafaafaafckAaafaaaaafckAaafaaaaaaaaaaaaaaackBckCckDckEckFcPBcPqcPdcPacOXbJkbJkbJkbGibZjcOWbZCcvGcttcvEcIGcIHcOLcFscIGctscttcyVbZCcFabZjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/nano/js/nano_base_helpers.js b/nano/js/nano_base_helpers.js index ceb1c27047..ed3ce322f1 100644 --- a/nano/js/nano_base_helpers.js +++ b/nano/js/nano_base_helpers.js @@ -1,17 +1,17 @@ // NanoBaseHelpers is where the base template helpers (common to all templates) are stored -NanoBaseHelpers = function () +NanoBaseHelpers = function () { var _urlParameters = {}; // This is populated with the base url parameters (used by all links), which is probaby just the "src" parameter - - var init = function () + + var init = function () { var body = $('body'); // We store data in the body tag, it's as good a place as any - + _urlParameters = body.data('urlParameters'); - + initHelpers(); }; - + var initHelpers = function () { $.views.helpers({ @@ -31,7 +31,7 @@ NanoBaseHelpers = function () // Generate a Byond link link: function( text, icon, parameters, status, elementClass, elementId) { - + var iconHtml = ''; var iconClass = 'noIcon'; if (typeof icon != 'undefined' && icon) @@ -39,45 +39,45 @@ NanoBaseHelpers = function () iconHtml = '
    '; iconClass = 'hasIcon'; } - + if (typeof elementClass == 'undefined' || !elementClass) { elementClass = ''; } - + var elementIdHtml = ''; if (typeof elementId != 'undefined' && elementId) { elementIdHtml = 'id="' + elementId + '"'; } - + if (typeof status != 'undefined' && status) { return ''; } - + return ''; }, // Round a number to the nearest integer - round: function(number) { + round: function(number) { return Math.round(number); }, // Round a number down to integer - floor: function(number) { + floor: function(number) { return Math.floor(number); }, // Round a number up to integer - ceil: function(number) { + ceil: function(number) { return Math.ceil(number); }, // Format a string (~string("Hello {0}, how are {1}?", 'Martin', 'you') becomes "Hello Martin, how are you?") - string: function() { + string: function() { if (arguments.length == 0) - { + { return ''; } else if (arguments.length == 1) - { + { return arguments[0]; } else if (arguments.length > 1) @@ -85,15 +85,21 @@ NanoBaseHelpers = function () stringArgs = []; for (var i = 1; i < arguments.length; i++) { - stringArgs.push(arguments[i]); + stringArgs.push(arguments[i]); } return arguments[0].format(stringArgs); } return ''; }, + formatNumber: function(x) { + // From http://stackoverflow.com/questions/2901102/how-to-print-a-number-with-commas-as-thousands-separators-in-javascript + var parts = x.toString().split("."); + parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ","); + return parts.join("."); + }, // Display a bar. Used to show health, capacity, etc. - displayBar: function(value, rangeMin, rangeMax, styleClass, showText) { - + displayBar: function(value, rangeMin, rangeMax, styleClass, showText) { + if (rangeMin < rangeMax) { if (value < rangeMin) @@ -115,31 +121,31 @@ NanoBaseHelpers = function () { value = rangeMax; } - } - + } + if (typeof styleClass == 'undefined' || !styleClass) { styleClass = ''; } - + if (typeof showText == 'undefined' || !showText) { showText = ''; } - + var percentage = Math.round((value - rangeMin) / (rangeMax - rangeMin) * 100); - + return '
    ' + showText + '
    '; }, // Display DNA Blocks (for the DNA Modifier UI) - displayDNABlocks: function(dnaString, selectedBlock, selectedSubblock, blockSize, paramKey) { + displayDNABlocks: function(dnaString, selectedBlock, selectedSubblock, blockSize, paramKey) { if (!dnaString) { return '
    Please place a valid subject into the DNA modifier.
    '; } - + var characters = dnaString.split(''); - + var html = '
    '; var block = 1; var subblock = 1; @@ -149,7 +155,7 @@ NanoBaseHelpers = function () { continue; } - + var parameters; if (paramKey.toUpperCase() == 'UI') { @@ -158,41 +164,41 @@ NanoBaseHelpers = function () else { parameters = { 'selectSEBlock' : block, 'selectSESubblock' : subblock }; - } - + } + var status = 'linkActive'; if (block == selectedBlock && subblock == selectedSubblock) { status = 'selected'; } - + html += '' - + index++; if (index % blockSize == 0 && index < characters.length) { block++; subblock = 1; - html += '
    '; + html += '
    '; } else { subblock++; } } - + html += '
    '; - + return html; } }); }; - + // generate a Byond href, combines _urlParameters with parameters var generateHref = function (parameters) { var queryString = '?'; - + for (var key in _urlParameters) { if (_urlParameters.hasOwnProperty(key)) @@ -204,7 +210,7 @@ NanoBaseHelpers = function () queryString += key + '=' + _urlParameters[key]; } } - + for (var key in parameters) { if (parameters.hasOwnProperty(key)) @@ -220,14 +226,14 @@ NanoBaseHelpers = function () }; return { - init: function () + init: function () { init(); } }; } (); -$(document).ready(function() +$(document).ready(function() { NanoBaseHelpers.init(); }); diff --git a/nano/templates/disease_splicer.tmpl b/nano/templates/disease_splicer.tmpl new file mode 100644 index 0000000000..a7d76fb4f6 --- /dev/null +++ b/nano/templates/disease_splicer.tmpl @@ -0,0 +1,108 @@ +
    +
    + {{:~link('Close', 'gear', {'close' : 1}, null, 'fixedLeft')}} +
    +
    + +{{if busy}} +
    The Splicer is currently busy.
    +
    +
    {{:busy}}
    +
    +

    + Thank you for your patience! +

    +{{else}} +
    +

    Virus Dish

    +
    +
    + {{:~link('Eject Dish', 'eject', { 'eject' : 1 }, dish_inserted ? null : 'disabled')}} +
    + +
    +
    + Growth Density: +
    +
    + {{:~displayBar(growth, 0, 100, growth >= 50 ? 'good' : growth >= 25 ? 'average' : 'bad', growth + '%' )}} +
    +
    + +
    +
    + {{if !info}} +
    + Symptoms: +
    + {{/if}} +
    + {{if info}} + {{:info}} + {{else}} + {{for effects}} +
    +
    + ({{:stage}}) {{:name}} + {{if badness > 1}} + Dangerous + {{/if}} +
    +
    + {{/for}} + {{/if}} +
    +
    + {{if affected_species && !info}} +
    +
    + Affected Species: +
    +
    + {{:affected_species}} +
    +
    + {{/if}} +
    + {{if effects}} +
    + CAUTION: Reverse engineering will destroy the viral sample. +
    +
    +
    + Reverse Engineering: +
    +
    + {{for effects}} + {{:~link(stage, 'transferthick-e-w', { 'grab' : reference })}} + {{/for}} +
    +
    + {{:~link('Species', 'transferthick-e-w', { 'affected_species' : 1 })}} +
    +
    + {{/if}} + +
    +

    Storage

    +
    + +
    +
    + Memory Buffer: +
    +
    + {{if buffer}} + {{:buffer.name}} ({{:buffer.stage}}) + {{else}} + {{if species_buffer}} + {{:species_buffer}} + {{else}} + Empty + {{/if}} + {{/if}} +
    +
    + {{:~link('Save To Disk', 'disk', { 'disk' : 1 }, (buffer || species_buffer) ? null : 'disabled')}} + {{:~link('Splice Onto Dish', 'pencil', { 'splice' : 1 }, (buffer || species_buffer) && !info ? null : 'disabled')}} +{{/if}} diff --git a/nano/templates/dish_incubator.tmpl b/nano/templates/dish_incubator.tmpl new file mode 100644 index 0000000000..6ebff27698 --- /dev/null +++ b/nano/templates/dish_incubator.tmpl @@ -0,0 +1,123 @@ +
    +
    + {{:~link('Close', 'gear', {'close' : '1'}, null, 'fixedLeft')}} +
    +
    + +
    +

    Environmental Conditions

    +
    +
    +
    + Power: +
    +
    + {{:~link('On', 'power', { 'power' : 1 }, !dish_inserted ? 'disabled' : on ? 'selected' : null)}}{{:~link('Off', 'close', { 'power' : 1 }, on ? null : 'selected')}} +
    +
    +
    + {{:~link('Add Radiation', 'radiation', {'rad' : 1})}} + {{:~link('Flush System', 'trash', {'flush' : 1}, system_in_use ? null : 'disabled')}} +
    + +
    +
    +
    + Virus Food: +
    +
    + {{:~displayBar(food_supply, 0, 100, 'good', food_supply)}} +
    +
    +
    +
    + Radiation Level: +
    +
    + {{:~displayBar(radiation, 0, 100, radiation >= 50 ? 'bad' : growth >= 25 ? 'average' : 'good')}} +
    + {{:~formatNumber(radiation * 10000)}} µSv +
    +
    +
    +
    + Toxicity: +
    +
    + {{:~displayBar(toxins, 0, 100, toxins >= 50 ? 'bad' : toxins >= 25 ? 'average' : 'good', toxins + '%')}} +
    +
    +
    + +
    +

    Chemicals

    +
    +
    + {{:~link('Eject Chemicals', 'eject', { 'ejectchem' : 1 }, chemicals_inserted ? null : 'disabled')}} + {{:~link('Breed Virus', 'circle-arrow-s', { 'virus' : 1 }, can_breed_virus ? null : 'disabled')}} +
    + +{{if chemicals_inserted}} +
    +
    + Volume: +
    +
    + {{:~displayBar(chemical_volume, 0, max_chemical_volume, 'good', chemical_volume + ' / ' + max_chemical_volume)}} +
    +
    +
    +
    + Breeding Environment: +
    +
    + + {{:!dish_inserted ? 'N/A' : can_breed_virus ? 'Suitable' : 'No hemolytic samples detected'}} + + {{if blood_already_infected}} +
    + CAUTION: Viral infection detected in blood sample. + {{/if}} +
    +
    +{{else}} +
    + No chemicals inserted. +
    +{{/if}} + +
    +

    Virus Dish

    +
    +
    + {{:~link('Eject Dish', 'eject', {'ejectdish' : 1}, dish_inserted ? null : 'disabled')}} +
    + +{{if dish_inserted}} + {{if virus}} +
    +
    + Growth Density: +
    +
    + {{:~displayBar(growth, 0, 100, growth >= 50 ? 'good' : growth >= 25 ? 'average' : 'bad', growth + '%' )}} +
    +
    +
    +
    + Infection Rate: +
    +
    + {{:analysed ? infection_rate : "Unknown"}} +
    +
    + {{else}} +
    + No virus detected. +
    + {{/if}} +{{else}} +
    + No dish loaded. +
    +{{/if}} diff --git a/nano/templates/isolation_centrifuge.tmpl b/nano/templates/isolation_centrifuge.tmpl new file mode 100644 index 0000000000..1c201ff9f5 --- /dev/null +++ b/nano/templates/isolation_centrifuge.tmpl @@ -0,0 +1,81 @@ +
    + {{:~link('Close', 'gear', {'close' : 1}, null, 'fixedLeft')}} + {{:~link('Print', 'print', { 'print' : 1 }, antibodies || pathogens ? null : 'disabled', 'fixedLeft')}} +
    + +{{if busy}} +
    The Centrifuge is currently busy.
    +
    +
    {{:busy}}
    +
    +

    + Thank you for your patience! +

    +{{else}} +
    +

    {{:is_antibody_sample ? 'Antibody Sample' : 'Blood Sample'}}

    +
    +
    + {{:~link('Eject Vial', 'eject', { 'action' : 'sample' }, sample_inserted ? null : 'disabled')}} +
    + {{if sample_inserted}} + {{if antibodies || pathogens}} +
    + {{if antibodies}} +
    +
    + Antibodies: +
    +
    + {{:antibodies}} +
    +
    + {{/if}} + {{if pathogens}} +
    +
    + Pathogens: +
    +
    + {{for pathogens}} +
    + {{:name}} ({{:spread_type}}) +
    + {{/for}} +
    +
    + {{/if}} +
    + {{else}} +
    + No antibodies or viral strains detected. +
    + {{/if}} + {{else}} +
    + No vial detected. +
    + {{/if}} + {{if antibodies && !is_antibody_sample}} +
    +
    + Isolate Antibodies: +
    +
    + {{:~link(antibodies, 'pencil', { 'action' : 'antibody' })}} +
    +
    + {{/if}} + {{if pathogens}} +
    +
    + Isolate Strain: +
    +
    + {{for pathogens}} + {{:~link(name, 'pencil', { 'isolate' : reference })}} + {{/for}} +
    +
    + {{/if}} +{{/if}} diff --git a/nano/templates/pathogenic_isolator.tmpl b/nano/templates/pathogenic_isolator.tmpl new file mode 100644 index 0000000000..ad88151c3b --- /dev/null +++ b/nano/templates/pathogenic_isolator.tmpl @@ -0,0 +1,107 @@ +
    +

    Menu

    +
    +
    + {{if !isolating}} + {{:~link('Home', 'home', {'home' : 1}, state == 'home' ? 'disabled' : null, 'fixedLeft')}} + {{:~link('List', 'note', {'list' : 1}, state == 'list' ? 'disabled' : null, 'fixedLeft')}} + {{:~link('Pathogen', 'folder-open', {'entry' : 1}, state == 'entry' ? 'disabled' : null, 'fixedLeft')}} + {{/if}} +
    + {{:~link('Close', 'gear', {'close' : 1}, null, 'fixedLeft')}} + {{:~link('Print', 'print', { 'print' : 1 }, can_print ? null : 'disabled', 'fixedLeft')}} +
    + +{{if isolating}} +
    The Isolator is currently busy.
    +
    +
    Isolating pathogens...
    +
    +

    + Thank you for your patience! +

    +{{else}} + {{if state =="home"}} +
    +

    Blood Sample

    +
    +
    + {{:~link('Eject Syringe', 'eject', { 'eject' : 1 }, syringe_inserted ? null : 'disabled')}} +
    + + {{if syringe_inserted}} +
    + Pathogens: + {{if pathogen_pool}} + {{for pathogen_pool}} +
    + {{:#index + 1}}. #{{:unique_id}} {{:is_in_database ? "(Analysed)" : ""}}
    + {{:name}}: {{:dna}} +
    + {{/for}} + {{else}} + No pathogens detected. + {{/if}} +
    + {{else}} +
    + No syringe loaded. +
    + {{/if}} + {{if pathogen_pool}} +
    +
    + Isolate Pathogens: +
    +
    + {{for pathogen_pool}} + {{:~link('#' + unique_id, 'pencil', { 'isolate' : reference }, null, 'fixedLeft')}} + {{/for}} +
    +
    +
    +
    + Database Lookup: +
    +
    + {{for pathogen_pool}} + {{if is_in_database}} + {{:~link('#' + unique_id, 'info', { 'entry' : 1, 'view' : record }, null, 'fixedLeft')}} + {{/if}} + {{/for}} +
    +
    + {{/if}} + {{else}} + {{if state == "list"}} +
    +

    View Database

    +
    +
    + {{if database}} + {{for database}} +
    +
    {{:name}}
    + {{:~link('Details', 'circle-arrow-s', { 'entry' : 1, 'view' : record }, null, 'fixedLeft')}} +
    + {{/for}} + {{else}} + The viral database is empty. + {{/if}} +
    + {{else}} + {{if state == "entry"}} + {{if entry}} +
    +

    {{:entry.name}}

    +
    +
    + {{:entry.description}} +
    + {{else}} + No virus selected. + {{/if}} + {{/if}} + {{/if}} + {{/if}} +{{/if}} diff --git a/nano/templates/smartfridge.tmpl b/nano/templates/smartfridge.tmpl new file mode 100644 index 0000000000..9e50bab96d --- /dev/null +++ b/nano/templates/smartfridge.tmpl @@ -0,0 +1,79 @@ +
    + {{:~link('Close', 'gear', {'close' : 1}, null, 'fixedLeft')}} +
    + +
    +

    Storage

    + {{if secure}} + + {{:locked == -1 ? "Sec.re ACC_** //):securi_nt.diag=>##'or 1=1'%($..." : "Secure Access: Please have your identification ready."}} + + {{/if}} +
    +
    + {{if contents}} + {{for contents}} +
    +
    + {{:display_name}} ({{:quantity}}): +
    +
    + {{:~link('Vend', 'circle-arrow-s', { "vend" : vend, "amount" : 1 }, null, 'statusValue')}} + {{if quantity >= 5}} + {{:~link('x5', 'circle-arrow-s', { "vend" : vend, "amount" : 5 }, null, 'statusValue')}} + {{/if}} + {{if quantity >= 10}} + {{:~link('x10', 'circle-arrow-s', { "vend" : vend, "amount" : 10 }, null, 'statusValue')}} + {{/if}} + {{if quantity >= 25}} + {{:~link('x25', 'circle-arrow-s', { "vend" : vend, "amount" : 25 }, null, 'statusValue')}} + {{/if}} + {{if quantity > 1}} + {{:~link('All', 'circle-arrow-s', { "vend" : vend, "amount" : quantity }, null, 'statusValue')}} + {{/if}} +
    +
    + {{/for}} + {{else}} + No products loaded. + {{/if}} +
    + +{{if panel_open}} +
    +

    Access Panel

    +
    +
    +
    + Wires: +
    +
    + {{for wires}} +
    +
    + {{:wire}} wire: +
    +
    + {{if cut}} + {{:~link('Mend', 'plus', {'cutwire' : index})}} + {{else}} + {{:~link('Cut', 'minus', {'cutwire' : index})}} + {{:~link('Pulse', 'signal-diag', {'pulsewire' : index})}} + {{/if}} +
    +
    + {{/for}} +
    +
    + +
    + The orange light is {{:electrified ? "on" : "off"}}.
    + The red light is {{:shoot_inventory ? "on" : "off"}}.
    + {{if secure}} + The green light is + + {{:locked == 1 ? "off" : locked == -1 ? "blinking" : "on"}} + .
    + {{/if}} +
    +{{/if}}