Name: [active1.fields["name"]] \
ID: [active1.fields["id"]] \n \
- Sex: [active1.fields["sex"]] \n \
- Age: [active1.fields["age"]] \n \
+ Sex: [active1.fields["sex"]] \n"
+ if ((istype(src.active2, /datum/data/record) && data_core.medical.Find(src.active2)))
+ dat += "Gender identity: [active2.fields["id_gender"]] "
+ else
+ dat += "Gender identity: Unknown "
+ dat += "Age: [active1.fields["age"]] \n \
Fingerprint: [active1.fields["fingerprint"]] \n \
Physical Status: [active1.fields["p_stat"]] \n \
Mental Status: [active1.fields["m_stat"]] \
@@ -135,6 +139,7 @@
else
else
dat += text("{Log In} ", src)
+ dat = jointext(dat,null)
user << browse(text("Medical Records [] ", dat), "window=med_rec")
onclose(user, "med_rec")
return
@@ -249,10 +254,10 @@
src.active1.fields["fingerprint"] = t1
if("sex")
if (istype(src.active1, /datum/data/record))
- if (src.active1.fields["sex"] == "Male")
- src.active1.fields["sex"] = "Female"
- else
- src.active1.fields["sex"] = "Male"
+ src.active1.fields["sex"] = next_in_list(src.active1.fields["sex"], all_genders_text_list)
+ if("id_gender")
+ if (istype(src.active2, /datum/data/record))
+ src.active2.fields["id_gender"] = next_in_list(src.active2.fields["id_gender"], all_genders_text_list)
if("age")
if (istype(src.active1, /datum/data/record))
var/t1 = input("Please input age:", "Med. records", src.active1.fields["age"], null) as num
diff --git a/code/game/machinery/computer/prisonshuttle.dm b/code/game/machinery/computer/prisonshuttle.dm
index c2c4598706..1c54fb0f4c 100644
--- a/code/game/machinery/computer/prisonshuttle.dm
+++ b/code/game/machinery/computer/prisonshuttle.dm
@@ -26,32 +26,6 @@ var/prison_shuttle_timeleft = 0
attack_ai(var/mob/user as mob)
return src.attack_hand(user)
- attackby(I as obj, user as mob)
- if(istype(I, /obj/item/weapon/screwdriver))
- playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
- if(do_after(user, 20))
- var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
- var/obj/item/weapon/circuitboard/prison_shuttle/M = new /obj/item/weapon/circuitboard/prison_shuttle( A )
- for (var/obj/C in src)
- C.loc = src.loc
- A.circuit = M
- A.anchored = 1
-
- if (src.stat & BROKEN)
- user << "The broken glass falls out. "
- new /obj/item/weapon/material/shard( src.loc )
- A.state = 3
- A.icon_state = "3"
- else
- user << "You disconnect the monitor. "
- A.state = 4
- A.icon_state = "4"
-
- qdel(src)
- else
- return src.attack_hand(user)
-
-
attack_hand(var/mob/user as mob)
if(!src.allowed(user) && (!hacked))
user << "Access Denied. "
diff --git a/code/game/machinery/computer/robot.dm b/code/game/machinery/computer/robot.dm
index bedfbad62a..82834df896 100644
--- a/code/game/machinery/computer/robot.dm
+++ b/code/game/machinery/computer/robot.dm
@@ -91,7 +91,7 @@
if(!target || !istype(target))
return
- var/istraitor = traitors.is_antagonist(target.mind)
+ var/istraitor = target.mind.special_role
if (istraitor)
target.lockcharge = !target.lockcharge
if (target.lockcharge)
@@ -132,7 +132,7 @@
if(!target || !istype(target))
return
- message_admins("[key_name_admin(usr)] emagged [target.name] using robotic console! ")
+ message_admins("[key_name_admin(usr)] emagged [target.name] using the robotic console! ")
log_game("[key_name(usr)] emagged [target.name] using robotic console!")
target.emagged = 1
target << "Failsafe protocols overriden. New tools available. "
@@ -187,7 +187,7 @@
robot["name"] = R.name
if(R.stat)
robot["status"] = "Not Responding"
- else if (!R.canmove)
+ else if (R.lockcharge)
robot["status"] = "Lockdown"
else
robot["status"] = "Operational"
@@ -204,11 +204,11 @@
robot["master_ai"] = R.connected_ai ? R.connected_ai.name : "None"
robot["hackable"] = 0
//Antag synths should be able to hack themselves and see their hacked status.
- if(operator && istype(operator, /mob/living/silicon) && (operator.mind.special_role && operator.mind.original == operator))
+ if(operator && isrobot(operator) && (operator.mind.special_role && operator.mind.original == operator) && (operator == R))
robot["hacked"] = R.emagged ? 1 : 0
robot["hackable"] = R.emagged? 0 : 1
// Antag AIs know whether linked cyborgs are hacked or not.
- if(operator && istype(operator, /mob/living/silicon/ai) && (R.connected_ai == operator) && (operator.mind.special_role && operator.mind.original == operator))
+ if(operator && isAI(operator) && (R.connected_ai == operator) && (operator.mind.special_role && operator.mind.original == operator))
robot["hacked"] = R.emagged ? 1 : 0
robot["hackable"] = R.emagged? 0 : 1
robots.Add(list(robot))
diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm
index 8747f7750c..2624c4ff28 100644
--- a/code/game/machinery/computer/security.dm
+++ b/code/game/machinery/computer/security.dm
@@ -286,7 +286,7 @@ What a mess.*/
return
Perp = new/list()
t1 = lowertext(t1)
- var/list/components = text2list(t1, " ")
+ var/list/components = splittext(t1, " ")
if(components.len > 5)
return //Lets not let them search too greedily.
for(var/datum/data/record/R in data_core.general)
diff --git a/code/game/machinery/computer/skills.dm b/code/game/machinery/computer/skills.dm
index 8e57548d6e..1fa38c4a71 100644
--- a/code/game/machinery/computer/skills.dm
+++ b/code/game/machinery/computer/skills.dm
@@ -219,7 +219,7 @@ What a mess.*/
return
Perp = new/list()
t1 = lowertext(t1)
- var/list/components = text2list(t1, " ")
+ var/list/components = splittext(t1, " ")
if(components.len > 5)
return //Lets not let them search too greedily.
for(var/datum/data/record/R in data_core.general)
diff --git a/code/game/machinery/computer/station_alert.dm b/code/game/machinery/computer/station_alert.dm
index 22c97a955a..d1c66b500d 100644
--- a/code/game/machinery/computer/station_alert.dm
+++ b/code/game/machinery/computer/station_alert.dm
@@ -17,13 +17,13 @@
monitor_type = /datum/nano_module/alarm_monitor/all
circuit = /obj/item/weapon/circuitboard/stationalert_all
-/obj/machinery/computer/station_alert/New()
- ..()
+/obj/machinery/computer/station_alert/initialize()
alarm_monitor = new monitor_type(src)
- alarm_monitor.register(src, /obj/machinery/computer/station_alert/update_icon)
+ alarm_monitor.register_alarm(src, /obj/machinery/computer/station_alert/update_icon)
+ ..()
/obj/machinery/computer/station_alert/Destroy()
- alarm_monitor.unregister(src)
+ alarm_monitor.unregister_alarm(src)
qdel(alarm_monitor)
..()
@@ -46,7 +46,7 @@
/obj/machinery/computer/station_alert/update_icon()
if(!(stat & (BROKEN|NOPOWER)))
- var/list/alarms = alarm_monitor.major_alarms()
+ var/list/alarms = alarm_monitor ? alarm_monitor.major_alarms() : list()
if(alarms.len)
icon_screen = "alert:2"
else
diff --git a/code/game/machinery/computer/supply.dm b/code/game/machinery/computer/supply.dm
index a8a4591ee2..224e201628 100644
--- a/code/game/machinery/computer/supply.dm
+++ b/code/game/machinery/computer/supply.dm
@@ -109,7 +109,7 @@
reqform.info += "RANK: [idrank] "
reqform.info += "REASON: [reason] "
reqform.info += "SUPPLY CRATE TYPE: [P.name] "
- reqform.info += "ACCESS RESTRICTION: [replacetext(get_access_desc(P.access))] "
+ reqform.info += "ACCESS RESTRICTION: [get_access_desc(P.access)] "
reqform.info += "CONTENTS: "
reqform.info += P.manifest
reqform.info += " "
@@ -310,7 +310,7 @@
reqform.info += "RANK: [idrank] "
reqform.info += "REASON: [reason] "
reqform.info += "SUPPLY CRATE TYPE: [P.name] "
- reqform.info += "ACCESS RESTRICTION: [replacetext(get_access_desc(P.access))] "
+ reqform.info += "ACCESS RESTRICTION: [get_access_desc(P.access)] "
reqform.info += "CONTENTS: "
reqform.info += P.manifest
reqform.info += " "
diff --git a/code/game/machinery/computer3/computer.dm b/code/game/machinery/computer3/computer.dm
index 37d9a67d92..e0040a6d83 100644
--- a/code/game/machinery/computer3/computer.dm
+++ b/code/game/machinery/computer3/computer.dm
@@ -29,7 +29,7 @@
// when you had to search the list to find what you had.
// Mostly decorative, holds the OS rom
- var/obj/item/part/computer/circuitboard/circuit
+ var/obj/item/part/computer/circuitboard/circuitb
// Storage
var/obj/item/part/computer/storage/hdd/hdd = null
@@ -97,11 +97,11 @@
overlays += kb
if(!built)
- if(!circuit || !istype(circuit))
- circuit = new(src)
- if(circuit.OS)
- os = circuit.OS
- circuit.OS.computer = src
+ if(!circuitb || !istype(circuitb))
+ circuitb = new(src)
+ if(circuitb.OS)
+ os = circuitb.OS
+ circuitb.OS.computer = src
else
os = null
@@ -121,10 +121,10 @@
floppy.addfile(P)
program = P
else
- circuit.OS = P
- circuit.OS.computer = src
- os = circuit.OS
- circuit.name = "Circuitboard ([P])"
+ circuitb.OS = P
+ circuitb.OS.computer = src
+ os = circuitb.OS
+ circuitb.name = "Circuitboard ([P])"
if(hdd) // Spawn files
diff --git a/code/game/machinery/computer3/computers/camera.dm b/code/game/machinery/computer3/computers/camera.dm
index 5a1b3acc0e..0f92519c36 100644
--- a/code/game/machinery/computer3/computers/camera.dm
+++ b/code/game/machinery/computer3/computers/camera.dm
@@ -26,7 +26,7 @@
New()
..(built=0)
os = program
- circuit.OS = os
+ circuitb.OS = os
/obj/machinery/computer3/security/mining
diff --git a/code/game/machinery/computer3/computers/security.dm b/code/game/machinery/computer3/computers/security.dm
index 0c58ea6728..59bb46fd69 100644
--- a/code/game/machinery/computer3/computers/security.dm
+++ b/code/game/machinery/computer3/computers/security.dm
@@ -305,7 +305,7 @@ What a mess.*/
return
Perp = new/list()
t1 = lowertext(t1)
- var/list/components = text2list(t1, " ")
+ var/list/components = splittext(t1, " ")
if(components.len > 5)
return //Lets not let them search too greedily.
for(var/datum/data/record/R in data_core.general)
diff --git a/code/game/machinery/computer3/file.dm b/code/game/machinery/computer3/file.dm
index b1fbe0ddbe..be4285b3e1 100644
--- a/code/game/machinery/computer3/file.dm
+++ b/code/game/machinery/computer3/file.dm
@@ -100,6 +100,7 @@
if(content)
if(file_increment > 1)
volume = round(file_increment * length(content))
+ ..()
/*
A generic file that contains text
diff --git a/code/game/machinery/computer3/lapvend.dm b/code/game/machinery/computer3/lapvend.dm
index efd0747b35..6acb530acc 100644
--- a/code/game/machinery/computer3/lapvend.dm
+++ b/code/game/machinery/computer3/lapvend.dm
@@ -6,12 +6,10 @@
layer = 2.9
anchored = 1
density = 1
- var/datum/browser/popup = null
var/obj/machinery/computer3/laptop/vended/newlap = null
var/obj/item/device/laptop/relap = null
var/vendmode = 0
-
var/cardreader = 0
var/floppy = 0
var/radionet = 0
@@ -34,9 +32,11 @@
if(vendmode == 1 && I)
scan_id(I, W)
vendmode = 0
- if(vendmode == 3 && I)
+ nanomanager.update_uis(src)
+ if(vendmode == 2 && I)
if(reimburse_id(I, W))
vendmode = 0
+ nanomanager.update_uis(src)
if(vendmode == 0)
if(istype(W, /obj/item/device/laptop))
var/obj/item/device/laptop/L = W
@@ -44,84 +44,49 @@
calc_reimburse(L)
usr.drop_item()
L.loc = src
- vendmode = 3
+ vendmode = 2
usr << "You slot your [L.name] into \The [src.name] "
+ nanomanager.update_uis(src)
else
..()
/obj/machinery/lapvend/attack_hand(mob/user as mob)
+ if(stat & (BROKEN|NOPOWER))
+ return
+
+ ui_interact(user)
+
+/**
+ * Display the NanoUI window for the vending machine.
+ *
+ * See NanoUI documentation for details.
+ */
+/obj/machinery/lapvend/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
user.set_machine(src)
- var/vendorname = (src.name) //import the machine's name
- var/dat = "[vendorname] " //display the name, and added a horizontal rule
- if(vendmode == 0)
- dat += "Please choose your laptop customization options "
- dat += "Your comptuer will automatically be loaded with any programs you can use after the transaction is complete. "
- dat += "Some programs will require additional components to be installed! "
- dat += "HDD (Required) : Added "
- dat += "Card Reader : Single (50) | Dual (125) "
- dat += "Floppy Drive : Add (50) "
- dat += "Radio Network card Add (50) "
- dat += "Camera Card Add (100) "
- dat += " Network card Area (75) Adjacent (50) Powernet (25) "
- dat += " Power source upgrade Extended (175) Unreal (250) "
- if(vendmode == 0 || vendmode == 1)
- dat += "Cart "
- dat += "Total: [total()] "
- if(cardreader == 1)
- dat += "Card Reader: (single) (50) "
- else if (cardreader == 2)
- dat += "Card Reader: (double) (125) "
- else
- dat += "Card Reader: None "
- if(floppy == 0)
- dat += "Floppy Drive: None "
- else
- dat += "Floppy Drive: Added (50) "
- if(radionet == 1)
- dat += "Radio Card: Added (50) "
- else
- dat += "Radio Card: None "
- if(camera == 1)
- dat += "Camera Card: Added (100) "
- else
- dat += "Camera Card: None "
- if(network == 1)
- dat += "Network card: Area (75) "
- else if(network == 2)
- dat += "Network card: Adjacent (50) "
- else if(network == 3)
- dat += "Network card: Powernet (25) "
- else
- dat += "Network card: None"
- if (power == 0)
- dat += "Power source: Regular"
- else if (power == 1)
- dat += "Power source: Extended (175) "
- else
- dat += "Power source: Unreal (250) "
-
- if(vendmode == 0)
- dat += "Vend Laptop "
-
- if(vendmode == 1)
- dat += "Please swipe your card and enter your PIN to complete the transaction"
-
- if(vendmode == 3)
- dat += "Please swipe your card and enter your PIN to be finish returning your computer "
- dat += "Cancel "
-
-
-
-
- popup = new(user, "lapvend", name, 450, 500)
- popup.set_content(dat)
- popup.open()
- return
+ var/list/data = list()
+ data["mode"] = vendmode
+ data["cardreader"] = cardreader
+ data["floppy"] = floppy
+ data["radionet"] = radionet
+ data["camera"] = camera
+ data["network"] = network
+ data["power"] = power
+ data["total"] = total()
+ ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
+ if (!ui)
+ ui = new(user, src, ui_key, "laptop_vendor.tmpl", src.name, 480, 425)
+ ui.set_initial_data(data)
+ ui.open()
+ //ui.set_auto_update(5)
/obj/machinery/lapvend/Topic(href, href_list)
+ if(stat & (BROKEN|NOPOWER))
+ return
+ if(usr.stat || usr.restrained())
+ return
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))))
usr.set_machine(src)
switch(href_list["choice"])
@@ -146,7 +111,7 @@
if ("super_add")
power = 2
- if ("single_rem" || "dual_rem")
+ if ("cardreader_rem")
cardreader = 0
if ("floppy_rem")
floppy = 0
@@ -154,9 +119,9 @@
radionet = 0
if ("camnet_rem")
camera = 0
- if ("area_rem" || "prox_rem" || "cable_rem")
+ if ("network_rem")
network = 0
- if ("high_rem" || "super_rem")
+ if ("power_rem")
power = 0
if("vend")
@@ -168,9 +133,8 @@
relap = null
vendmode = 0
- src.updateUsrDialog()
- return
-
+ src.add_fingerprint(usr)
+ nanomanager.update_uis(src)
/obj/machinery/lapvend/proc/vend()
if(cardreader > 0)
@@ -253,7 +217,6 @@
choose_progs(C)
vend()
- popup.close()
newlap.close_laptop()
newlap = null
cardreader = 0
diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm
index 48fea8a04a..6c4c6160cd 100644
--- a/code/game/machinery/cryo.dm
+++ b/code/game/machinery/cryo.dm
@@ -63,10 +63,9 @@
return 1
/obj/machinery/atmospherics/unary/cryo_cell/relaymove(mob/user as mob)
- if(user.stat)
- return
- go_out()
- return
+ // note that relaymove will also be called for mobs outside the cell with UI open
+ if(src.occupant == user && !user.stat)
+ go_out()
/obj/machinery/atmospherics/unary/cryo_cell/attack_hand(mob/user)
ui_interact(user)
diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm
index 57d20ca3c2..e1c65243d9 100644
--- a/code/game/machinery/cryopod.dm
+++ b/code/game/machinery/cryopod.dm
@@ -219,7 +219,7 @@
var/disallow_occupant_types = list()
var/mob/occupant = null // Person waiting to be despawned.
- var/time_till_despawn = 18000 // 30 minutes-ish safe period before being despawned.
+ var/time_till_despawn = 9000 // Down to 15 minutes //30 minutes-ish is too long
var/time_entered = 0 // Used to keep track of the safe period.
var/obj/item/device/radio/intercom/announce //
@@ -232,7 +232,6 @@
/obj/item/weapon/hand_tele,
/obj/item/weapon/card/id/captains_spare,
/obj/item/device/aicard,
- /obj/item/device/mmi,
/obj/item/device/paicard,
/obj/item/weapon/gun,
/obj/item/weapon/pinpointer,
@@ -487,32 +486,33 @@
if(istype(G, /obj/item/weapon/grab))
+ var/obj/item/weapon/grab/grab = G
if(occupant)
user << "\The [src] is in use. "
return
- if(!ismob(G:affecting))
+ if(!ismob(grab.affecting))
return
- if(!check_occupant_allowed(G:affecting))
+ if(!check_occupant_allowed(grab.affecting))
return
var/willing = null //We don't want to allow people to be forced into despawning.
- var/mob/M = G:affecting
+ var/mob/M = grab.affecting
if(M.client)
if(alert(M,"Would you like to enter long-term storage?",,"Yes","No") == "Yes")
- if(!M || !G || !G:affecting) return
+ if(!M || !grab || !grab:affecting) return
willing = 1
else
willing = 1
if(willing)
- visible_message("[user] starts putting [G:affecting:name] into \the [src].", 3)
+ visible_message("\The [user] starts putting [grab:affecting:name] into \the [src].", 3)
if(do_after(user, 20))
- if(!M || !G || !G:affecting) return
+ if(!M || !grab || !grab:affecting) return
M.forceMove(src)
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index cb8b9f5e69..6873cbf005 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -87,6 +87,7 @@
name = "External Airlock"
icon = 'icons/obj/doors/Doorext.dmi'
assembly_type = /obj/structure/door_assembly/door_assembly_ext
+ opacity = 0
/obj/machinery/door/airlock/glass
name = "Glass Airlock"
@@ -808,23 +809,23 @@ About the new airlock wires panel:
else
spawn(0) close(1)
- else if(istype(C, /obj/item/weapon/material/twohanded/fireaxe) && !arePowerSystemsOn())
+ // Check if we're using a crowbar or armblade, and if the airlock's unpowered for whatever reason (off, broken, etc).
+ else if( (istype(C, /obj/item/weapon/material/twohanded/fireaxe) || istype(C, /obj/item/weapon/melee/arm_blade) ) && !arePowerSystemsOn())
if(locked)
user << "The airlock's bolts prevent it from being forced. "
else if( !welded && !operating )
+ if(istype(C, /obj/item/weapon/material/twohanded/fireaxe)) // If this is a fireaxe, make sure it's held in two hands.
+ var/obj/item/weapon/material/twohanded/fireaxe/F = C
+ if(!F.wielded)
+ user << "You need to be wielding \the [F] to do that. "
+ return
+ // At this point, it's an armblade or a fireaxe that passed the wielded test, let's try to open it.
if(density)
- var/obj/item/weapon/material/twohanded/fireaxe/F = C
- if(F.wielded)
- spawn(0) open(1)
- else
- user << "You need to be wielding \the [C] to do that. "
+ spawn(0)
+ open(1)
else
- var/obj/item/weapon/material/twohanded/fireaxe/F = C
- if(F.wielded)
- spawn(0) close(1)
- else
- user << "You need to be wielding \the [C] to do that. "
-
+ spawn(0)
+ close(1)
else
..()
return
@@ -1019,6 +1020,9 @@ About the new airlock wires panel:
else
name = "[istext(assembly.glass) ? "[assembly.glass] airlock" : assembly.base_name]"
+ //get the dir from the assembly
+ set_dir(assembly.dir)
+
//wires
var/turf/T = get_turf(newloc)
if(T && (T.z in config.admin_levels))
diff --git a/code/game/machinery/doors/blast_door.dm b/code/game/machinery/doors/blast_door.dm
index 8c960e7bdf..9647befd6e 100644
--- a/code/game/machinery/doors/blast_door.dm
+++ b/code/game/machinery/doors/blast_door.dm
@@ -86,11 +86,17 @@
// Proc: attackby()
// Parameters: 2 (C - Item this object was clicked with, user - Mob which clicked this object)
-// Description: If we are clicked with crowbar or wielded fire axe, try to manually open the door.
+// Description: If we are clicked with crowbar, wielded fire axe, or armblade, try to manually open the door.
// This only works on broken doors or doors without power. Also allows repair with Plasteel.
/obj/machinery/door/blast/attackby(obj/item/weapon/C as obj, mob/user as mob)
src.add_fingerprint(user)
- if(istype(C, /obj/item/weapon/crowbar) || (istype(C, /obj/item/weapon/material/twohanded/fireaxe) && C:wielded == 1))
+ if(istype(C, /obj/item/weapon/crowbar) || istype(C, /obj/item/weapon/material/twohanded/fireaxe) || istype(C, /obj/item/weapon/melee/arm_blade))
+ if(istype(C,/obj/item/weapon/material/twohanded/fireaxe))
+ var/obj/item/weapon/material/twohanded/fireaxe/F = C
+ if(!F.wielded)
+ user << "You need to be wielding \the [F] to do that. "
+ return
+
if(((stat & NOPOWER) || (stat & BROKEN)) && !( src.operating ))
force_toggle()
else
@@ -144,7 +150,7 @@
if(stat & BROKEN)
stat &= ~BROKEN
-
+
/obj/machinery/door/blast/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if(air_group) return 1
return ..()
diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm
index 08d47db158..b2b619e342 100644
--- a/code/game/machinery/doors/firedoor.dm
+++ b/code/game/machinery/doors/firedoor.dm
@@ -221,7 +221,7 @@
if (stat & BROKEN)
new /obj/item/weapon/circuitboard/broken(src.loc)
else
- new/obj/item/weapon/airalarm_electronics(src.loc)
+ new/obj/item/weapon/circuitboard/airalarm(src.loc)
var/obj/structure/firedoor_assembly/FA = new/obj/structure/firedoor_assembly(src.loc)
FA.anchored = 1
@@ -235,7 +235,7 @@
user << "\The [src] is welded shut! "
return
- if(istype(C, /obj/item/weapon/crowbar) || istype(C,/obj/item/weapon/material/twohanded/fireaxe))
+ if(istype(C, /obj/item/weapon/crowbar) || istype(C,/obj/item/weapon/material/twohanded/fireaxe) || istype(C, /obj/item/weapon/melee/arm_blade))
if(operating)
return
diff --git a/code/game/machinery/doors/firedoor_assembly.dm b/code/game/machinery/doors/firedoor_assembly.dm
index c01fff5bed..a96065d2c6 100644
--- a/code/game/machinery/doors/firedoor_assembly.dm
+++ b/code/game/machinery/doors/firedoor_assembly.dm
@@ -36,7 +36,7 @@ obj/structure/firedoor_assembly/attackby(C as obj, mob/user as mob)
new/obj/item/stack/cable_coil(src.loc, 1)
wired = 0
- else if(istype(C, /obj/item/weapon/airalarm_electronics) && wired)
+ else if(istype(C, /obj/item/weapon/circuitboard/airalarm) && wired)
if(anchored)
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
user.visible_message("[user] has inserted a circuit into \the [src]! ",
diff --git a/code/game/machinery/doors/multi_tile.dm b/code/game/machinery/doors/multi_tile.dm
index a2d599fa00..4fc4b2fad7 100644
--- a/code/game/machinery/doors/multi_tile.dm
+++ b/code/game/machinery/doors/multi_tile.dm
@@ -4,17 +4,23 @@
/obj/machinery/door/airlock/multi_tile/New()
..()
- switch(dir)
- if(EAST, WEST)
- bound_width = width * world.icon_size
- bound_height = world.icon_size
- else
- bound_width = world.icon_size
- bound_height = width * world.icon_size
+ SetBounds()
+
+/obj/machinery/door/airlock/multi_tile/Move()
+ . = ..()
+ SetBounds()
+
+/obj/machinery/door/airlock/multi_tile/proc/SetBounds()
+ if(dir in list(EAST, WEST))
+ bound_width = width * world.icon_size
+ bound_height = world.icon_size
+ else
+ bound_width = world.icon_size
+ bound_height = width * world.icon_size
/obj/machinery/door/airlock/multi_tile/glass
name = "Glass Airlock"
icon = 'icons/obj/doors/Door2x1glass.dmi'
opacity = 0
glass = 1
- assembly_type = /obj/structure/door_assembly/multi_tile
\ No newline at end of file
+ assembly_type = /obj/structure/door_assembly/multi_tile
diff --git a/code/game/machinery/embedded_controller/airlock_docking_controller_multi.dm b/code/game/machinery/embedded_controller/airlock_docking_controller_multi.dm
index d03bffcbae..0cffb34dc6 100644
--- a/code/game/machinery/embedded_controller/airlock_docking_controller_multi.dm
+++ b/code/game/machinery/embedded_controller/airlock_docking_controller_multi.dm
@@ -2,21 +2,21 @@
//this is the master controller, that things will try to dock with.
/obj/machinery/embedded_controller/radio/docking_port_multi
name = "docking port controller"
-
+
var/child_tags_txt
var/child_names_txt
var/list/child_names = list()
-
+
var/datum/computer/file/embedded_program/docking/multi/docking_program
/obj/machinery/embedded_controller/radio/docking_port_multi/initialize()
..()
docking_program = new/datum/computer/file/embedded_program/docking/multi(src)
program = docking_program
-
- var/list/names = text2list(child_names_txt, ";")
- var/list/tags = text2list(child_tags_txt, ";")
-
+
+ var/list/names = splittext(child_names_txt, ";")
+ var/list/tags = splittext(child_tags_txt, ";")
+
if (names.len == tags.len)
for (var/i = 1; i <= tags.len; i++)
child_names[tags[i]] = names[i]
@@ -84,10 +84,10 @@
/obj/machinery/embedded_controller/radio/airlock/docking_port_multi/Topic(href, href_list)
if(..())
return
-
+
usr.set_machine(src)
src.add_fingerprint(usr)
-
+
var/clean = 0
switch(href_list["command"]) //anti-HTML-hacking checks
if("cycle_ext")
diff --git a/code/game/machinery/embedded_controller/docking_program_multi.dm b/code/game/machinery/embedded_controller/docking_program_multi.dm
index 3901591720..a4ad7d2985 100644
--- a/code/game/machinery/embedded_controller/docking_program_multi.dm
+++ b/code/game/machinery/embedded_controller/docking_program_multi.dm
@@ -17,7 +17,7 @@
if (istype(M,/obj/machinery/embedded_controller/radio/docking_port_multi)) //if our parent controller is the right type, then we can auto-init stuff at construction
var/obj/machinery/embedded_controller/radio/docking_port_multi/controller = M
//parse child_tags_txt and create child tags
- children_tags = text2list(controller.child_tags_txt, ";")
+ children_tags = splittext(controller.child_tags_txt, ";")
children_ready = list()
children_override = list()
diff --git a/code/game/machinery/exonet_node.dm b/code/game/machinery/exonet_node.dm
index f826bbafff..aa36e34c9e 100644
--- a/code/game/machinery/exonet_node.dm
+++ b/code/game/machinery/exonet_node.dm
@@ -1,6 +1,6 @@
/obj/machinery/exonet_node
name = "exonet node"
- desc = "This machine is one of many, many nodes inside Vir's section of the Exonet, connecting the Northern Star to the rest of the system, at least \
+ desc = "This machine is one of many, many nodes inside "+starsys_name+"'s section of the Exonet, connecting the "+station_orig+" to the rest of the system, at least \
electronically."
icon = 'icons/obj/stationobjs.dmi'
icon_state = "exonet_node"
@@ -18,7 +18,7 @@
// Proc: New()
// Parameters: None
// Description: Adds components to the machine for deconstruction.
-/obj/machinery/exonet_node/New()
+/obj/machinery/exonet_node/map/New()
..()
component_parts = list()
diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm
index c7c1d59a08..7532cb1407 100644
--- a/code/game/machinery/flasher.dm
+++ b/code/game/machinery/flasher.dm
@@ -77,11 +77,12 @@
if(!E)
return
if(E.is_bruised() && prob(E.damage + 50))
- flick("e_flash", O:flash)
+ H.flash_eyes()
E.damage += rand(1, 5)
else
- if(!O.blinded)
- flick("flash", O:flash)
+ if(!O.blinded && isliving(O))
+ var/mob/living/L = O
+ L.flash_eyes()
O.Weaken(flash_time)
/obj/machinery/flasher/emp_act(severity)
diff --git a/code/game/machinery/frame.dm b/code/game/machinery/frame.dm
new file mode 100644
index 0000000000..1dddcedea0
--- /dev/null
+++ b/code/game/machinery/frame.dm
@@ -0,0 +1,448 @@
+/obj/structure/frame
+ anchored = 0
+ name = "frame"
+ icon = 'icons/obj/stock_parts.dmi'
+ icon_state = "machine_0"
+ var/state = 0
+ var/obj/item/weapon/circuitboard/circuit = null
+ var/need_circuit = 1
+ var/frame_type = "machine"
+
+ var/list/components = null
+ var/list/req_components = null
+ var/list/req_component_names = null
+
+ var/list/alarms = list("firealarm", "airalarm", "intercom", "keycard")
+ var/list/machines = list(
+ "machine", "photocopier", "fax", "microwave", "conveyor", "recharger", "wrecharger",
+ "washing", "grinder", "teleporter_hub", "teleporter_station", "medpod", "dna_analyzer",
+ "massdriver")
+ var/list/computers = list("computer", "holopad", "console")
+ var/list/displays = list("display", "guestpass", "newscaster", "atm", "request")
+ var/list/no_circuit = list("wrecharger", "recharger", "grinder", "conveyor", "massdriver")
+
+/obj/structure/frame/proc/update_desc()
+ var/D
+ if(req_components)
+ var/list/component_list = new
+ for(var/I in req_components)
+ if(req_components[I] > 0)
+ component_list += "[num2text(req_components[I])] [req_component_names[I]]"
+ D = "Requires [english_list(component_list)]."
+ desc = D
+
+/obj/structure/frame/proc/check_components(mob/user as mob)
+ components = list()
+ req_components = circuit.req_components.Copy()
+ for(var/A in circuit.req_components)
+ req_components[A] = circuit.req_components[A]
+ req_component_names = circuit.req_components.Copy()
+ for(var/A in req_components)
+ var/obj/ct = A
+ req_component_names[A] = initial(ct.name)
+
+/obj/structure/frame/New(var/loc, var/dir, var/building = 0, var/obj/item/frame/frame_type, mob/user as mob)
+ ..()
+ if(building)
+ src.frame_type = frame_type
+ icon_state = "[frame_type]_0"
+ if(dir)
+ src.set_dir(dir)
+
+ if(frame_type in alarms)
+ if(loc)
+ src.loc = loc
+
+ state = 0
+ if(frame_type == "airalarm" || frame_type == "firealarm" || frame_type == "keycard")
+ if(dir)
+ src.set_dir(dir)
+ pixel_x = (dir & 3)? 0 : (dir == 4 ? -24 : 24)
+ pixel_y = (dir & 3)? (dir == 1 ? -24 : 24) : 0
+
+ if(frame_type == "intercom")
+ if(dir)
+ src.set_dir(dir)
+ pixel_x = (dir & 3)? 0 : (dir == 4 ? -28 : 28)
+ pixel_y = (dir & 3)? (dir == 1 ? -28 : 28) : 0
+
+ update_icon()
+ return
+
+ if(frame_type in displays)
+ if(loc)
+ src.loc = loc
+
+ if(frame_type == "display" || frame_type == "atm" || frame_type == "request")
+ pixel_x = (dir & 3)? 0 : (dir == 4 ? -32 : 32)
+ pixel_y = (dir & 3)? (dir == 1 ? -32 : 32) : 0
+
+ if(frame_type == "newscaster")
+ pixel_x = (dir & 3)? 0 : (dir == 4 ? -28 : 28)
+ pixel_y = (dir & 3)? (dir == 1 ? -30 : 30) : 0
+
+ if(frame_type == "guestpass")
+ pixel_x = (dir & 3)? 0 : (dir == 4 ? -30 : 30)
+ pixel_y = (dir & 3)? (dir == 1 ? -30 : 30) : 0
+
+ update_icon()
+ return
+
+ if(frame_type in no_circuit)
+ need_circuit = 0
+ if(frame_type == "wrecharger")
+ circuit = new /obj/item/weapon/circuitboard/recharger/wrecharger(src)
+ if(loc)
+ src.loc = loc
+
+ state = 0
+
+ pixel_x = (dir & 3)? 0 : (dir == 4 ? -26 : 32)
+ pixel_y = (dir & 3)? (dir == 1 ? -32 : 32) : 0
+
+ update_icon()
+ return
+ if(frame_type == "recharger")
+ circuit = new /obj/item/weapon/circuitboard/recharger(src)
+ if(frame_type == "grinder")
+ circuit = new /obj/item/weapon/circuitboard/grinder(src)
+ if(frame_type == "conveyor")
+ circuit = new /obj/item/weapon/circuitboard/conveyor(src)
+ if(frame_type == "massdriver")
+ circuit = new /obj/item/weapon/circuitboard/mass_driver(src)
+
+ if(frame_type == "computer")
+ density = 1
+ if(frame_type in machines)
+ density = 1
+ return
+
+/obj/structure/frame/attackby(obj/item/P as obj, mob/user as mob)
+ if(istype(P, /obj/item/weapon/wrench))
+ if(state == 0)
+ user << "You start to wrench the frame into place. "
+ playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
+ if(do_after(user, 20))
+ src.anchored = 1
+ if(!need_circuit && circuit)
+ src.state = 2
+ check_components()
+ update_desc()
+ src.icon_state = "[frame_type]_2"
+ user << "You wrench the frame into place and set the outer cover. "
+ else
+ src.state = 1
+ user << "You wrench the frame into place. "
+ return
+
+ if(state == 1)
+ playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
+ if(do_after(user, 20))
+ user << "You unfasten the frame. "
+ src.anchored = 0
+ src.state = 0
+ return
+
+ if(istype(P, /obj/item/weapon/weldingtool))
+ if(state == 0)
+ var/obj/item/weapon/weldingtool/WT = P
+ if(!WT.remove_fuel(0, user))
+ user << "The welding tool must be on to complete this task."
+ return
+ playsound(src.loc, 'sound/items/Welder.ogg', 50, 1)
+ if(do_after(user, 20))
+ if(!src || !WT.isOn()) return
+ user << "You deconstruct the frame. "
+ if(frame_type == "holopad" || frame_type == "microwave")
+ new /obj/item/stack/material/steel( src.loc, 4 )
+ else if(frame_type == "fax" || frame_type == "newscaster" || frame_type == "recharger" || frame_type == "wrecharger" || frame_type == "grinder")
+ new /obj/item/stack/material/steel( src.loc, 3 )
+ else if(frame_type == "firealarm" || frame_type == "airalarm" || frame_type == "intercom" || frame_type == "guestpass")
+ new /obj/item/stack/material/steel( src.loc, 2 )
+ else if(frame_type == "keycard")
+ new /obj/item/stack/material/steel( src.loc, 1 )
+ else
+ new /obj/item/stack/material/steel( src.loc, 5 )
+ qdel(src)
+ return
+
+ if(istype(P, /obj/item/weapon/circuitboard) && need_circuit && !circuit)
+ if(state == 1)
+ var/obj/item/weapon/circuitboard/B = P
+ if(B.board_type == frame_type)
+ playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
+ user << "You place the circuit board inside the frame. "
+ src.icon_state = "[frame_type]_1"
+ src.circuit = P
+ user.drop_item()
+ P.loc = src
+ if(frame_type in machines) //because machines are assholes
+ check_components()
+ update_desc()
+ return
+ else
+ user << "This frame does not accept circuit boards of this type! "
+ return
+
+ if(istype(P, /obj/item/weapon/screwdriver))
+ if(state == 1)
+ if(need_circuit && circuit)
+ playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
+ user << "You screw the circuit board into place. "
+ src.state = 2
+ src.icon_state = "[frame_type]_2"
+ return
+
+ if(state == 2)
+ if(need_circuit && circuit)
+ playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
+ user << "You unfasten the circuit board. "
+ src.state = 1
+ src.icon_state = "[frame_type]_1"
+ return
+
+ if(!need_circuit && circuit)
+ playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
+ user << "You unfasten the outer cover. "
+ src.state = 1
+ src.icon_state = "[frame_type]_0"
+ return
+
+ if(state == 3)
+ if(frame_type in machines)
+ var/component_check = 1
+ for(var/R in req_components)
+ if(req_components[R] > 0)
+ component_check = 0
+ break
+ if(component_check)
+ playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
+ var/obj/machinery/new_machine = new src.circuit.build_path(src.loc, src.dir)
+ // Handle machines that have allocated default parts in thier constructor.
+ if(new_machine.component_parts)
+ for(var/CP in new_machine.component_parts)
+ qdel(CP)
+ new_machine.component_parts.Cut()
+ else
+ new_machine.component_parts = list()
+
+ src.circuit.construct(new_machine)
+
+ for(var/obj/O in src.components)
+ if(circuit.contain_parts)
+ O.loc = new_machine
+ else
+ O.loc = null
+ new_machine.component_parts += O
+
+ circuit.loc = null
+ new_machine.circuit = circuit
+
+ new_machine.RefreshParts()
+
+ new_machine.pixel_x = src.pixel_x
+ new_machine.pixel_y = src.pixel_y
+ qdel(src)
+ return
+
+ if(frame_type in alarms)
+ playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
+ user << "You fasten the cover. "
+ var/obj/machinery/B = new src.circuit.build_path ( src.loc )
+ B.pixel_x = src.pixel_x
+ B.pixel_y = src.pixel_y
+ B.set_dir(dir)
+ src.circuit.construct(B)
+ qdel(src)
+ return
+
+ if(state == 4)
+ if(frame_type in computers)
+ playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
+ user << "You connect the monitor. "
+ var/obj/machinery/B = new src.circuit.build_path ( src.loc )
+ B.pixel_x = src.pixel_x
+ B.pixel_y = src.pixel_y
+ B.set_dir(dir)
+ src.circuit.construct(B)
+ qdel(src)
+ return
+
+ if(frame_type in displays)
+ playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
+ user << "You connect the monitor. "
+ var/obj/machinery/B = new src.circuit.build_path ( src.loc )
+ B.pixel_x = src.pixel_x
+ B.pixel_y = src.pixel_y
+ B.set_dir(dir)
+ src.circuit.construct(B)
+ qdel(src)
+ return
+
+ if(istype(P, /obj/item/weapon/crowbar))
+ if(state == 1)
+ if(need_circuit && circuit)
+ playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
+ user << "You remove the circuit board. "
+ src.state = 1
+ src.icon_state = "[frame_type]_0"
+ circuit.loc = src.loc
+ src.circuit = null
+ if(frame_type in machines) //becuase machines are assholes
+ req_components = null
+ return
+
+ if(state == 3)
+ if(frame_type in machines)
+ playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
+ if(components.len == 0)
+ user << "There are no components to remove. "
+ else
+ user << "You remove the components. "
+ for(var/obj/item/weapon/W in components)
+ W.forceMove(loc)
+ check_components()
+ update_desc()
+ user << desc
+ return
+
+ if(state == 4)
+ if(frame_type in computers)
+ playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
+ user << "You remove the glass panel. "
+ src.state = 3
+ src.icon_state = "[frame_type]_3"
+ new /obj/item/stack/material/glass( src.loc, 2 )
+ return
+
+ if(frame_type in displays)
+ playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
+ user << "You remove the glass panel. "
+ src.state = 3
+ src.icon_state = "[frame_type]_3"
+ new /obj/item/stack/material/glass( src.loc, 2 )
+ return
+
+ if(istype(P, /obj/item/stack/cable_coil))
+ if(state == 2)
+ var/obj/item/stack/cable_coil/C = P
+ if (C.get_amount() < 5)
+ user << "You need five coils of wire to add them to the frame. "
+ return
+ user << "You start to add cables to the frame. "
+ playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
+ if(do_after(user, 20) && state == 2)
+ if (C.use(5))
+ user << "You add cables to the frame. "
+ state = 3
+ icon_state = "[frame_type]_3"
+ if(frame_type in machines)
+ user << desc
+ return
+
+ if(istype(P, /obj/item/weapon/wirecutters))
+ if(state == 3)
+ if(frame_type in computers)
+ playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1)
+ user << "You remove the cables. "
+ src.state = 2
+ src.icon_state = "[frame_type]_2"
+ new /obj/item/stack/cable_coil( src.loc, 5 )
+ return
+
+ if(frame_type in displays)
+ playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1)
+ user << "You remove the cables. "
+ src.state = 2
+ src.icon_state = "[frame_type]_2"
+ new /obj/item/stack/cable_coil( src.loc, 5 )
+ return
+
+ if(frame_type in alarms)
+ playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1)
+ user << "You remove the cables. "
+ src.state = 2
+ src.icon_state = "[frame_type]_2"
+ new /obj/item/stack/cable_coil( src.loc, 5 )
+ return
+
+ if(frame_type in machines)
+ playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1)
+ user << "You remove the cables. "
+ src.state = 2
+ src.icon_state = "[frame_type]_2"
+ new /obj/item/stack/cable_coil( src.loc, 5 )
+ return
+
+ if(istype(P, /obj/item/stack/material) && P.get_material_name() == "glass")
+ if(state == 3)
+ if(frame_type in computers)
+ var/obj/item/stack/G = P
+ if (G.get_amount() < 2)
+ user << "You need two sheets of glass to put in the glass panel. "
+ return
+ playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
+ user << "You start to put in the glass panel. "
+ if(do_after(user, 20) && state == 3)
+ if (G.use(2))
+ user << "You put in the glass panel. "
+ src.state = 4
+ src.icon_state = "[frame_type]_4"
+ return
+
+ if(frame_type in displays)
+ var/obj/item/stack/G = P
+ if (G.get_amount() < 2)
+ user << "You need two sheets of glass to put in the glass panel. "
+ return
+ playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
+ user << "You start to put in the glass panel. "
+ if(do_after(user, 20) && state == 3)
+ if (G.use(2))
+ user << "You put in the glass panel. "
+ src.state = 4
+ src.icon_state = "[frame_type]_4"
+ return
+
+ if(istype(P, /obj/item))
+ if(state == 3)
+ if(frame_type in machines)
+ for(var/I in req_components)
+ if(istype(P, I) && (req_components[I] > 0))
+ playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
+ if(istype(P, /obj/item/stack/cable_coil))
+ var/obj/item/stack/cable_coil/CP = P
+ if(CP.get_amount() > 1)
+ var/camt = min(CP.amount, req_components[I]) // amount of cable to take, idealy amount required, but limited by amount provided
+ var/obj/item/stack/cable_coil/CC = new /obj/item/stack/cable_coil(src)
+ CC.amount = camt
+ CC.update_icon()
+ CP.use(camt)
+ components += CC
+ req_components[I] -= camt
+ update_desc()
+ break
+
+ if(istype(P, /obj/item/stack/material/glass/reinforced))
+ var/obj/item/stack/material/glass/reinforced/CP = P
+ if(CP.get_amount() > 1)
+ var/camt = min(CP.amount, req_components[I]) // amount of cable to take, idealy amount required, but limited by amount provided
+ var/obj/item/stack/material/glass/reinforced/CC = new /obj/item/stack/material/glass/reinforced(src)
+ CC.amount = camt
+ CC.update_icon()
+ CP.use(camt)
+ components += CC
+ req_components[I] -= camt
+ update_desc()
+ break
+
+ user.drop_item()
+ P.forceMove(src)
+ components += P
+ req_components[I]--
+ update_desc()
+ break
+ user << desc
+ if(P && P.loc != src && !istype(P, /obj/item/stack/cable_coil) && !istype(P, /obj/item/stack/material))
+ user << "You cannot add that component to the machine! "
+ return
\ No newline at end of file
diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm
index d34acd5d2d..58c8423a23 100644
--- a/code/game/machinery/hologram.dm
+++ b/code/game/machinery/hologram.dm
@@ -36,6 +36,7 @@ var/const/HOLOPAD_MODE = RANGE_BASED
desc = "It's a floor-mounted device for projecting holographic images. It is activated remotely."
icon_state = "holopad0"
show_messages = 1
+ circuit = /obj/item/weapon/circuitboard/holopad
layer = TURF_LAYER+0.1 //Preventing mice and drones from sneaking under them.
@@ -47,6 +48,30 @@ var/const/HOLOPAD_MODE = RANGE_BASED
var/last_request = 0 //to prevent request spam. ~Carn
var/holo_range = 5 // Change to change how far the AI can move away from the holopad before deactivating.
+/obj/machinery/hologram/holopad/attackby(obj/item/I as obj, user as mob)
+ if(istype(I, /obj/item/weapon/screwdriver) && circuit)
+ user << "You start removing the glass. "
+ playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
+ if(do_after(user, 20))
+ var/obj/structure/frame/A = new /obj/structure/frame( src.loc )
+ var/obj/item/weapon/circuitboard/M = new circuit( A )
+ A.circuit = M
+ A.anchored = 1
+ A.density = 1
+ A.frame_type = "holopad"
+ for (var/obj/C in src)
+ C.forceMove(loc)
+ user << "You remove the glass. "
+ A.state = 4
+ A.icon_state = "holopad_4"
+ M.deconstruct(src)
+ for (var/mob/living/silicon/ai/master in masters)
+ clear_holo(master)
+ qdel(src)
+ else
+ src.attack_hand(user)
+ return
+
/obj/machinery/hologram/holopad/attack_hand(var/mob/living/carbon/human/user) //Carn: Hologram requests.
if(!istype(user))
return
diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm
index d2fa5478cb..4ae639c039 100644
--- a/code/game/machinery/iv_drip.dm
+++ b/code/game/machinery/iv_drip.dm
@@ -37,6 +37,8 @@
/obj/machinery/iv_drip/MouseDrop(over_object, src_location, over_location)
..()
+ if(!isliving(usr))
+ return
if(attached)
visible_message("[src.attached] is detached from \the [src]")
@@ -62,6 +64,19 @@
user << "You attach \the [W] to \the [src]."
src.update_icon()
return
+
+ if(istype(W, /obj/item/weapon/screwdriver))
+ playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
+ user << "You start to dismantle the IV drip. "
+ if(do_after(user, 15))
+ user << "You dismantle the IV drip. "
+ var/obj/item/stack/rods/A = new /obj/item/stack/rods( src.loc )
+ A.amount = 6
+ if(src.beaker)
+ src.beaker.loc = get_turf(src)
+ src.beaker = null
+ qdel(src)
+ return
else
return ..()
diff --git a/code/game/machinery/jukebox.dm b/code/game/machinery/jukebox.dm
index 59d8f2bd08..3cc537be49 100644
--- a/code/game/machinery/jukebox.dm
+++ b/code/game/machinery/jukebox.dm
@@ -19,6 +19,7 @@ datum/track/New(var/title_name, var/audio)
use_power = 1
idle_power_usage = 10
active_power_usage = 100
+ circuit = /obj/item/weapon/circuitboard/jukebox
var/playing = 0
@@ -35,6 +36,14 @@ datum/track/New(var/title_name, var/audio)
new/datum/track("Trai`Tor", 'sound/music/traitor.ogg'),
)
+/obj/machinery/media/jukebox/New()
+ ..()
+ circuit = new circuit(src)
+ component_parts = list()
+ component_parts += new /obj/item/weapon/stock_parts/capacitor(src)
+ component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
+ component_parts += new /obj/item/stack/cable_coil(src, 5)
+ RefreshParts()
/obj/machinery/media/jukebox/Destroy()
StopPlaying()
@@ -163,6 +172,10 @@ datum/track/New(var/title_name, var/audio)
/obj/machinery/media/jukebox/attackby(obj/item/W as obj, mob/user as mob)
src.add_fingerprint(user)
+ if(default_deconstruction_screwdriver(user, W))
+ return
+ if(default_deconstruction_crowbar(user, W))
+ return
if(istype(W, /obj/item/weapon/wrench))
if(playing)
StopPlaying()
diff --git a/code/game/machinery/kitchen/microwave.dm b/code/game/machinery/kitchen/microwave.dm
index e78f2b5227..1be387f35f 100644
--- a/code/game/machinery/kitchen/microwave.dm
+++ b/code/game/machinery/kitchen/microwave.dm
@@ -1,4 +1,3 @@
-
/obj/machinery/microwave
name = "Microwave"
icon = 'icons/obj/kitchen.dmi'
@@ -10,6 +9,7 @@
idle_power_usage = 5
active_power_usage = 100
flags = OPENCONTAINER | NOREACT
+ circuit = /obj/item/weapon/circuitboard/microwave
var/operating = 0 // Is it on?
var/dirty = 0 // = {0..100} Does it need cleaning?
var/broken = 0 // ={0,1,2} How broken is it???
@@ -29,6 +29,13 @@
..()
reagents = new/datum/reagents(100)
reagents.my_atom = src
+
+ circuit = new circuit(src)
+ component_parts = list()
+ component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
+ component_parts += new /obj/item/weapon/stock_parts/motor(src)
+ component_parts += new /obj/item/weapon/stock_parts/capacitor(src)
+
if (!available_recipes)
available_recipes = new
for (var/type in (typesof(/datum/recipe)-/datum/recipe))
@@ -48,6 +55,8 @@
acceptable_items |= /obj/item/weapon/holder
acceptable_items |= /obj/item/weapon/reagent_containers/food/snacks/grown
+ RefreshParts()
+
/*******************
* Item Adding
********************/
@@ -82,6 +91,11 @@
else
user << "It's broken! "
return 1
+ else if(default_deconstruction_screwdriver(user, O))
+ return
+ else if(default_deconstruction_crowbar(user, O))
+ return
+
else if(src.dirty==100) // The microwave is all dirty so can't be used!
if(istype(O, /obj/item/weapon/reagent_containers/spray/cleaner)) // If they're trying to clean it then let them
user.visible_message( \
@@ -101,7 +115,7 @@
user << "It's dirty! "
return 1
else if(is_type_in_list(O,acceptable_items))
- if (contents.len>=max_n_of_items)
+ if (contents.len>=(max_n_of_items + component_parts.len + 1)) //Adds component_parts to the maximum number of items. The 1 is from the circuit
user << "This [src] is full of ingredients, you cannot put more. "
return 1
if(istype(O, /obj/item/stack) && O:get_amount() > 1) // This is bad, but I can't think of how to change it
@@ -164,7 +178,7 @@
var/list/items_counts = new
var/list/items_measures = new
var/list/items_measures_p = new
- for (var/obj/O in contents)
+ for (var/obj/O in ((contents - component_parts) - circuit))
var/display_name = O.name
if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/egg))
items_measures[display_name] = "egg"
@@ -224,7 +238,7 @@
if(stat & (NOPOWER|BROKEN))
return
start()
- if (reagents.total_volume==0 && !(locate(/obj) in contents)) //dry run
+ if (reagents.total_volume==0 && !(locate(/obj) in ((contents - component_parts) - circuit))) //dry run
if (!wzhzhzh(10))
abort()
return
@@ -286,7 +300,7 @@
return 1
/obj/machinery/microwave/proc/has_extra_item()
- for (var/obj/O in contents)
+ for (var/obj/O in ((contents - component_parts) - circuit))
if ( \
!istype(O,/obj/item/weapon/reagent_containers/food) && \
!istype(O, /obj/item/weapon/grown) \
@@ -312,7 +326,7 @@
src.updateUsrDialog()
/obj/machinery/microwave/proc/dispose()
- for (var/obj/O in contents)
+ for (var/obj/O in ((contents-component_parts)-circuit))
O.loc = src.loc
if (src.reagents.total_volume)
src.dirty++
@@ -347,7 +361,7 @@
/obj/machinery/microwave/proc/fail()
var/obj/item/weapon/reagent_containers/food/snacks/badrecipe/ffuu = new(src)
var/amount = 0
- for (var/obj/O in contents-ffuu)
+ for (var/obj/O in (((contents - ffuu) - component_parts) - circuit))
amount++
if (O.reagents)
var/id = O.reagents.get_master_reagent_id()
diff --git a/code/game/machinery/kitchen/smartfridge.dm b/code/game/machinery/kitchen/smartfridge.dm
index ac13a52bc4..ae48142b4d 100644
--- a/code/game/machinery/kitchen/smartfridge.dm
+++ b/code/game/machinery/kitchen/smartfridge.dm
@@ -15,7 +15,8 @@
var/icon_on = "smartfridge"
var/icon_off = "smartfridge-off"
var/icon_panel = "smartfridge-panel"
- var/item_quants = list()
+ var/list/item_records = list()
+ var/datum/stored_item/currently_vending = null //What we're putting out of the machine.
var/seconds_electrified = 0;
var/shoot_inventory = 0
var/locked = 0
@@ -35,6 +36,8 @@
/obj/machinery/smartfridge/Destroy()
qdel(wires)
+ for(var/A in item_records) //Get rid of item records.
+ qdel(A)
wires = null
return ..()
@@ -57,15 +60,26 @@
return 0
/obj/machinery/smartfridge/secure/extract
- name = "\improper Slime Extract Storage"
- desc = "A refrigerated storage unit for slime extracts"
+ name = "\improper Biological Sample Storage"
+ desc = "A refrigerated storage unit for xenobiological samples."
req_access = list(access_research)
/obj/machinery/smartfridge/secure/extract/accept_check(var/obj/item/O as obj)
- if(istype(O,/obj/item/slime_extract))
+ if(istype(O,/obj/item/xenoproduct/))
return 1
return 0
+/obj/machinery/smartfridge/secure/extract/New()
+ ..()
+ var/datum/stored_item/I = new(src, /obj/item/xenoproduct/slime/core)
+ item_records.Add(I)
+ for(var/i=1 to 5)
+ var/obj/item/xenoproduct/slime/core/C = new(src)
+ C.traits = new()
+ C.nameVar = "grey"
+ I.add_product(C)
+
+
/obj/machinery/smartfridge/secure/medbay
name = "\improper Refrigerated Medicine Storage"
desc = "A refrigerated storage unit for storing medicine and chemicals."
@@ -148,26 +162,31 @@
icon_state = icon_off
else
icon_state = icon_on
- if(contents.len)
+ var/hasItems
+ for(var/datum/stored_item/I in item_records)
+ if(I.get_amount())
+ hasItems = 1
+ break
+ if(hasItems)
overlays += "drying_rack_filled"
if(!not_working)
overlays += "drying_rack_drying"
/obj/machinery/smartfridge/drying_rack/proc/dry()
- for(var/obj/item/weapon/reagent_containers/food/snacks/S in contents)
- if(S.dry) continue
- if(S.dried_type == S.type)
- S.dry = 1
- item_quants[S.name]--
- S.name = "dried [S.name]"
- S.color = "#AAAAAA"
- S.loc = loc
- else
- var/D = S.dried_type
- new D(loc)
- item_quants[S.name]--
- qdel(S)
- return
+ for(var/datum/stored_item/I in item_records)
+ for(var/obj/item/weapon/reagent_containers/food/snacks/S in I.instances)
+ if(S.dry) continue
+ if(S.dried_type == S.type)
+ S.dry = 1
+ S.name = "dried [S.name]"
+ S.color = "#AAAAAA"
+ I.instances -= S
+ S.forceMove(get_turf(src))
+ else
+ var/D = S.dried_type
+ new D(get_turf(src))
+ qdel(S)
+ return
return
/obj/machinery/smartfridge/process()
@@ -214,43 +233,23 @@
return
if(accept_check(O))
- if(contents.len >= max_n_of_items)
- user << "\The [src] is full. "
- return 1
- else
- user.remove_from_mob(O)
- O.loc = src
- if(item_quants[O.name])
- item_quants[O.name]++
- else
- item_quants[O.name] = 1
- user.visible_message("[user] has added \the [O] to \the [src]. ", "You add \the [O] to \the [src]. ")
+ user.remove_from_mob(O)
+ stock(O)
+ 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))
var/obj/item/weapon/storage/bag/P = O
var/plants_loaded = 0
for(var/obj/G in P.contents)
if(accept_check(G))
- if(contents.len >= max_n_of_items)
- user << "\The [src] is full. "
- return 1
- else
- P.remove_from_storage(G,src)
- if(item_quants[G.name])
- item_quants[G.name]++
- else
- item_quants[G.name] = 1
- plants_loaded++
+ stock(G)
+ plants_loaded = 1
if(plants_loaded)
-
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
@@ -261,6 +260,23 @@
locked = -1
user << "You short out the product lock on [src]."
return 1
+
+/obj/machinery/smartfridge/proc/stock(obj/item/O)
+ var/hasRecord = FALSE //Check to see if this passes or not.
+ for(var/datum/stored_item/I in item_records)
+ if((O.type == I.item_path) && (O.name == I.item_name))
+ I.add_product(O)
+ hasRecord = TRUE
+ break
+ if(!hasRecord)
+ var/datum/stored_item/item = new/datum/stored_item(src, O.type, O.name)
+ item.add_product(O)
+ item_records.Add(item)
+ nanomanager.update_uis(src)
+
+/obj/machinery/smartfridge/proc/vend(datum/stored_item/I)
+ I.get_product(get_turf(src))
+ nanomanager.update_uis(src)
/obj/machinery/smartfridge/attack_ai(mob/user as mob)
attack_hand(user)
@@ -286,11 +302,11 @@
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]
+ for (var/i=1 to length(item_records))
+ var/datum/stored_item/I = item_records[i]
+ var/count = I.get_amount()
if(count > 0)
- items.Add(list(list("display_name" = html_encode(capitalize(K)), "vend" = i, "quantity" = count)))
+ items.Add(list(list("display_name" = html_encode(capitalize(I.item_name)), "vend" = i, "quantity" = count)))
if(items.len > 0)
data["contents"] = items
@@ -317,20 +333,15 @@
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]
+ var/datum/stored_item/I = item_records[index]
+ var/count = I.get_amount()
// 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)
-
- var/i = amount
- for(var/obj/O in contents)
- if(O.name == K)
- O.loc = loc
- i--
- if(i <= 0)
- return 1
+ if((count - amount) < 0)
+ amount = count
+ for(var/i = 1 to amount)
+ vend(I)
return 1
return 0
@@ -341,17 +352,12 @@
if(!target)
return 0
- for (var/O in item_quants)
- if(item_quants[O] <= 0) //Try to use a record that actually has something to dump.
+ for(var/datum/stored_item/I in item_records)
+ throw_item = I.get_product(get_turf(src))
+ if (!throw_item)
continue
-
- item_quants[O]--
- for(var/obj/T in contents)
- if(T.name == O)
- T.loc = src.loc
- throw_item = T
- break
break
+
if(!throw_item)
return 0
spawn(0)
diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm
index ded7ebc9b9..7d8e75764c 100644
--- a/code/game/machinery/lightswitch.dm
+++ b/code/game/machinery/lightswitch.dm
@@ -7,10 +7,13 @@
icon = 'icons/obj/power.dmi'
icon_state = "light1"
anchored = 1.0
+ use_power = 1
+ idle_power_usage = 10
+ power_channel = LIGHT
var/on = 1
var/area/area = null
var/otherarea = null
- // luminosity = 1
+ var/image/overlay
/obj/machinery/light_switch/New()
..()
@@ -29,10 +32,18 @@
/obj/machinery/light_switch/proc/updateicon()
+ if(!overlay)
+ overlay = image(icon, "light1-overlay", LIGHTING_LAYER+0.1)
+
+ overlays.Cut()
if(stat & NOPOWER)
icon_state = "light-p"
+ set_light(0)
else
icon_state = "light[on]"
+ overlay.icon_state = "light[on]-overlay"
+ overlays += overlay
+ set_light(2, 0.1, on ? "#82FF4C" : "#F86060")
/obj/machinery/light_switch/examine(mob/user)
if(..(user, 1))
diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm
index 6c391b75b5..30a9b8548b 100644
--- a/code/game/machinery/machinery.dm
+++ b/code/game/machinery/machinery.dm
@@ -112,6 +112,8 @@ Class Procs:
var/panel_open = 0
var/global/gl_uid = 1
var/interact_offline = 0 // Can the machine be interacted with while de-powered.
+ var/circuit = null
+ var/frame_type = "machine"
/obj/machinery/New(l, d=0)
..(l)
@@ -134,7 +136,7 @@ Class Procs:
if(contents) // The same for contents.
for(var/atom/A in contents)
qdel(A)
- ..()
+ return ..()
/obj/machinery/process()//If you dont use process or power why are you here
if(!(use_power || idle_power_usage || active_power_usage))
@@ -225,11 +227,6 @@ Class Procs:
istype(usr, /mob/living/silicon)))
usr << "You don't have the dexterity to do this! "
return 1
-/*
- //distance checks are made by atom/proc/DblClick
- if ((get_dist(src, user) > 1 || !istype(src.loc, /turf)) && !istype(user, /mob/living/silicon))
- return 1
-*/
if (ishuman(user))
var/mob/living/carbon/human/H = user
if(H.getBrainLoss() >= 55)
@@ -280,33 +277,16 @@ Class Procs:
return 1
return 0
-/obj/machinery/proc/default_deconstruction_crowbar(var/mob/user, var/obj/item/weapon/crowbar/C)
- if(!istype(C))
- return 0
- if(!panel_open)
- return 0
- . = dismantle()
-
-/obj/machinery/proc/default_deconstruction_screwdriver(var/mob/user, var/obj/item/weapon/screwdriver/S)
- if(!istype(S))
- return 0
- playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
- panel_open = !panel_open
- user << "You [panel_open ? "open" : "close"] the maintenance hatch of [src]. "
- update_icon()
- return 1
-
/obj/machinery/proc/default_part_replacement(var/mob/user, var/obj/item/weapon/storage/part_replacer/R)
if(!istype(R))
return 0
if(!component_parts)
return 0
if(panel_open)
- var/obj/item/weapon/circuitboard/CB = locate(/obj/item/weapon/circuitboard) in component_parts
+ var/obj/item/weapon/circuitboard/CB = circuit
var/P
for(var/obj/item/weapon/stock_parts/A in component_parts)
- for(var/D in CB.req_components)
- var/T = text2path(D)
+ for(var/T in CB.req_components)
if(ispath(A.type, T))
P = T
break
@@ -328,13 +308,47 @@ Class Procs:
user << " [C.name] "
return 1
+/obj/machinery/proc/default_deconstruction_crowbar(var/mob/user, var/obj/item/weapon/crowbar/C)
+ if(!istype(C))
+ return 0
+ if(!panel_open)
+ return 0
+ . = dismantle()
+
+/obj/machinery/proc/default_deconstruction_screwdriver(var/mob/user, var/obj/item/weapon/screwdriver/S)
+ if(!istype(S))
+ return 0
+ playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
+ panel_open = !panel_open
+ user << "You [panel_open ? "open" : "close"] the maintenance hatch of [src]. "
+ update_icon()
+ return 1
+
/obj/machinery/proc/dismantle()
playsound(loc, 'sound/items/Crowbar.ogg', 50, 1)
- var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(loc)
- M.set_dir(src.dir)
- M.state = 2
- M.icon_state = "box_1"
- for(var/obj/I in component_parts)
- I.loc = loc
+ var/obj/structure/frame/A = new /obj/structure/frame( src.loc )
+ var/obj/item/weapon/circuitboard/M = circuit
+ A.circuit = M
+ A.anchored = 1
+ A.density = 1
+ A.frame_type = M.board_type
+ if(A.frame_type in A.no_circuit)
+ A.need_circuit = 0
+ for (var/obj/D in src.component_parts)
+ D.forceMove(loc)
+ if(A.components)
+ A.components.Cut()
+ else
+ A.components = list()
+ component_parts = list()
+ A.icon_state = "[A.frame_type]_3"
+ A.state = 3
+ A.dir = dir
+ A.pixel_x = pixel_x
+ A.pixel_y = pixel_y
+ A.check_components()
+ A.update_desc()
+ M.loc = null
+ M.deconstruct(src)
qdel(src)
return 1
diff --git a/code/game/machinery/mass_driver.dm b/code/game/machinery/mass_driver.dm
index abd9809176..f563d9ef39 100644
--- a/code/game/machinery/mass_driver.dm
+++ b/code/game/machinery/mass_driver.dm
@@ -9,12 +9,41 @@
use_power = 1
idle_power_usage = 2
active_power_usage = 50
+ circuit = /obj/item/weapon/circuitboard/mass_driver
var/power = 1.0
var/code = 1.0
var/id = 1.0
var/drive_range = 50 //this is mostly irrelevant since current mass drivers throw into space, but you could make a lower-range mass driver for interstation transport or something I guess.
+/obj/machinery/mass_driver/New()
+ ..()
+ circuit = new circuit(src)
+ component_parts = list()
+ component_parts += new /obj/item/weapon/stock_parts/motor(src)
+ component_parts += new /obj/item/weapon/stock_parts/motor(src)
+ component_parts += new /obj/item/weapon/stock_parts/gear(src)
+ component_parts += new /obj/item/weapon/stock_parts/gear(src)
+ component_parts += new /obj/item/weapon/stock_parts/spring(src)
+ component_parts += new /obj/item/weapon/stock_parts/capacitor(src)
+ component_parts += new /obj/item/stack/cable_coil(src, 5)
+ RefreshParts()
+
+/obj/machinery/mass_driver/attackby(var/obj/item/I, mob/user)
+ if(default_deconstruction_screwdriver(user, I))
+ return
+ if(default_deconstruction_crowbar(user, I))
+ return
+
+ if(istype(I, /obj/item/device/multitool))
+ if(panel_open)
+ var/input = sanitize(input(usr, "What id would you like to give this conveyor?", "Multitool-Conveyor interface", id))
+ if(!input)
+ usr << "No input found please hang up and try your call again."
+ return
+ id = input
+ return
+ return
/obj/machinery/mass_driver/proc/drive(amount)
if(stat & (BROKEN|NOPOWER))
diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm
index 443a704934..0c14c66990 100644
--- a/code/game/machinery/navbeacon.dm
+++ b/code/game/machinery/navbeacon.dm
@@ -49,7 +49,7 @@ var/global/list/navbeacons // no I don't like putting this in, but it will do
codes = new()
- var/list/entries = text2list(codes_txt, ";") // entries are separated by semicolons
+ var/list/entries = splittext(codes_txt, ";") // entries are separated by semicolons
for(var/e in entries)
var/index = findtext(e, "=") // format is "key=value"
diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm
index 5a2663a7d1..7bfe32d719 100644
--- a/code/game/machinery/newscaster.dm
+++ b/code/game/machinery/newscaster.dm
@@ -167,7 +167,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
light_range = 0
anchored = 1
var/obj/machinery/exonet_node/node = null
-
+ circuit = /obj/item/weapon/circuitboard/newscaster
/obj/machinery/newscaster/security_unit //Security unit
name = "Security Newscaster"
@@ -751,32 +751,34 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
-/obj/machinery/newscaster/attackby(obj/item/I as obj, mob/user as mob)
- if (src.isbroken)
- playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 100, 1)
- for (var/mob/O in hearers(5, src.loc))
- O.show_message("[user.name] further abuses the shattered [src.name].")
- else
- if(istype(I, /obj/item/weapon) )
- var/obj/item/weapon/W = I
- if(W.force <15)
- for (var/mob/O in hearers(5, src.loc))
- O.show_message("[user.name] hits the [src.name] with the [W.name] with no visible effect." )
- playsound(src.loc, 'sound/effects/Glasshit.ogg', 100, 1)
+/obj/machinery/newscaster/attackby(I as obj, user as mob)
+ if(istype(I, /obj/item/weapon/screwdriver) && circuit)
+ user << "You start disconnecting the monitor. "
+ playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
+ if(do_after(user, 20))
+ var/obj/structure/frame/A = new /obj/structure/frame( src.loc )
+ var/obj/item/weapon/circuitboard/M = new circuit( A )
+ A.frame_type = "newscaster"
+ A.pixel_x = pixel_x
+ A.pixel_y = pixel_y
+ A.circuit = M
+ A.anchored = 1
+ for (var/obj/C in src)
+ C.forceMove(loc)
+ if (src.stat & isbroken == 1)
+ user << "The broken glass falls out. "
+ new /obj/item/weapon/material/shard( src.loc )
+ A.state = 3
+ A.icon_state = "newscaster_3"
else
- src.hitstaken++
- if(src.hitstaken==3)
- for (var/mob/O in hearers(5, src.loc))
- O.show_message("[user.name] smashes the [src.name]!" )
- src.isbroken=1
- playsound(src.loc, 'sound/effects/Glassbr3.ogg', 100, 1)
- else
- for (var/mob/O in hearers(5, src.loc))
- O.show_message("[user.name] forcefully slams the [src.name] with the [I.name]!" )
- playsound(src.loc, 'sound/effects/Glasshit.ogg', 100, 1)
- else
- user << "This does nothing. "
- src.update_icon()
+ user << "You disconnect the monitor. "
+ A.state = 4
+ A.icon_state = "newscaster_4"
+ M.deconstruct(src)
+ qdel(src)
+ else
+ src.attack_hand(user)
+ return
/obj/machinery/newscaster/attack_ai(mob/user as mob)
return src.attack_hand(user) //or maybe it'll have some special functions? No idea.
diff --git a/code/game/machinery/pda_multicaster.dm b/code/game/machinery/pda_multicaster.dm
new file mode 100644
index 0000000000..a7d5c780c3
--- /dev/null
+++ b/code/game/machinery/pda_multicaster.dm
@@ -0,0 +1,101 @@
+/obj/machinery/pda_multicaster
+ name = "\improper PDA multicaster"
+ desc = "This machine mirrors messages sent to it to specific departments."
+ icon = 'icons/obj/stationobjs.dmi'
+ icon_state = "controller"
+ density = 1
+ anchored = 1
+ circuit = /obj/item/weapon/circuitboard/telecomms/pda_multicaster
+ use_power = 1
+ idle_power_usage = 750
+ var/on = 1 // If we're currently active,
+ var/toggle = 1 // If we /should/ be active or not,
+ var/list/internal_PDAs = list() // Assoc list of PDAs inside of this, with the department name being the index,
+
+/obj/machinery/pda_multicaster/New()
+ ..()
+ internal_PDAs = list("command" = new /obj/item/device/pda/multicaster/command(src),
+ "security" = new /obj/item/device/pda/multicaster/security(src),
+ "engineering" = new /obj/item/device/pda/multicaster/engineering(src),
+ "medical" = new /obj/item/device/pda/multicaster/medical(src),
+ "research" = new /obj/item/device/pda/multicaster/research(src),
+ "cargo" = new /obj/item/device/pda/multicaster/cargo(src),
+ "civilian" = new /obj/item/device/pda/multicaster/civilian(src))
+
+/obj/machinery/pda_multicaster/prebuilt/New()
+ ..()
+
+ component_parts = list()
+ component_parts += new /obj/item/weapon/circuitboard/telecomms/pda_multicaster(src)
+ component_parts += new /obj/item/weapon/stock_parts/subspace/ansible(src)
+ component_parts += new /obj/item/weapon/stock_parts/subspace/filter(src)
+ component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
+ component_parts += new /obj/item/weapon/stock_parts/subspace/treatment(src)
+ component_parts += new /obj/item/stack/cable_coil(src, 2)
+ RefreshParts()
+
+/obj/machinery/pda_multicaster/Destroy()
+ for(var/atom/movable/AM in contents)
+ qdel(AM)
+ ..()
+
+/obj/machinery/pda_multicaster/update_icon()
+ if(on)
+ icon_state = initial(icon_state)
+ else
+ icon_state = "[initial(icon_state)]-p"
+
+/obj/machinery/pda_multicaster/attackby(obj/item/I, mob/user)
+ if(istype(I, /obj/item/weapon/screwdriver))
+ default_deconstruction_screwdriver(user, I)
+ else if(istype(I, /obj/item/weapon/crowbar))
+ default_deconstruction_crowbar(user, I)
+ else
+ ..()
+
+/obj/machinery/pda_multicaster/attack_ai(mob/user)
+ attack_hand(user)
+
+/obj/machinery/pda_multicaster/attack_hand(mob/user)
+ toggle_power(user)
+
+/obj/machinery/pda_multicaster/proc/toggle_power(mob/user)
+ toggle = !toggle
+ visible_message("\the [user] turns \the [src] [toggle ? "on" : "off"].")
+ update_power()
+ if(!toggle)
+ var/msg = "[usr.client.key] ([usr]) has turned [src] off, at [x],[y],[z]."
+ message_admins(msg)
+ log_game(msg)
+
+/obj/machinery/pda_multicaster/proc/update_PDAs(var/turn_off)
+ for(var/obj/item/device/pda/pda in contents)
+ pda.toff = turn_off
+
+/obj/machinery/pda_multicaster/proc/update_power()
+ if(toggle)
+ if(stat & (BROKEN|NOPOWER|EMPED))
+ on = 0
+ update_PDAs(1) // 1 being to turn off.
+ idle_power_usage = 0
+ else
+ on = 1
+ update_PDAs(0)
+ idle_power_usage = 750
+ else
+ on = 0
+ update_PDAs(1)
+ idle_power_usage = 0
+ update_icon()
+
+/obj/machinery/pda_multicaster/process()
+ update_power()
+
+/obj/machinery/pda_multicaster/emp_act(severity)
+ if(!(stat & EMPED))
+ stat |= EMPED
+ var/duration = (300 * 10)/severity
+ spawn(rand(duration - 20, duration + 20))
+ stat &= ~EMPED
+ update_icon()
+ ..()
diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm
index 992a93c40a..55c2e10eaa 100644
--- a/code/game/machinery/recharger.dm
+++ b/code/game/machinery/recharger.dm
@@ -7,13 +7,23 @@ obj/machinery/recharger
anchored = 1
use_power = 1
idle_power_usage = 4
- active_power_usage = 15000 //15 kW
+ active_power_usage = 40000 //40 kW
var/obj/item/charging = null
var/list/allowed_devices = list(/obj/item/weapon/gun/energy, /obj/item/weapon/melee/baton, /obj/item/device/laptop, /obj/item/weapon/cell)
var/icon_state_charged = "recharger2"
var/icon_state_charging = "recharger1"
var/icon_state_idle = "recharger0" //also when unpowered
var/portable = 1
+ circuit = /obj/item/weapon/circuitboard/recharger
+
+obj/machinery/recharger/New()
+ circuit = new circuit(src)
+ component_parts = list()
+ component_parts += new /obj/item/weapon/stock_parts/capacitor(src)
+ component_parts += new /obj/item/stack/cable_coil(src, 5)
+ RefreshParts()
+ ..()
+ return
obj/machinery/recharger/attackby(obj/item/weapon/G as obj, mob/user as mob)
if(istype(user,/mob/living/silicon))
@@ -52,6 +62,10 @@ obj/machinery/recharger/attackby(obj/item/weapon/G as obj, mob/user as mob)
anchored = !anchored
user << "You [anchored ? "attached" : "detached"] the recharger."
playsound(loc, 'sound/items/Ratchet.ogg', 75, 1)
+ else if(default_deconstruction_screwdriver(user, G))
+ return
+ else if(default_deconstruction_crowbar(user, G))
+ return
obj/machinery/recharger/attack_hand(mob/user as mob)
if(istype(user,/mob/living/silicon))
@@ -156,3 +170,5 @@ obj/machinery/recharger/wallcharger
icon_state_charging = "wrecharger1"
icon_state_idle = "wrecharger0"
portable = 0
+ circuit = /obj/item/weapon/circuitboard/recharger/wrecharger
+ frame_type = "wrecharger"
diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm
index efcc8314c1..b5f7e029a5 100644
--- a/code/game/machinery/rechargestation.dm
+++ b/code/game/machinery/rechargestation.dm
@@ -5,6 +5,7 @@
icon_state = "borgcharger0"
density = 1
anchored = 1
+ circuit = /obj/item/weapon/circuitboard/recharge_station
use_power = 1
idle_power_usage = 50
var/mob/occupant = null
@@ -23,9 +24,8 @@
/obj/machinery/recharge_station/New()
..()
-
+ circuit = new circuit(src)
component_parts = list()
- component_parts += new /obj/item/weapon/circuitboard/recharge_station(src)
component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
component_parts += new /obj/item/weapon/stock_parts/capacitor(src)
diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm
index 7e2d521698..fc39af88f7 100644
--- a/code/game/machinery/requests_console.dm
+++ b/code/game/machinery/requests_console.dm
@@ -28,6 +28,7 @@ var/list/obj/machinery/requests_console/allConsoles = list()
anchored = 1
icon = 'icons/obj/terminals.dmi'
icon_state = "req_comp0"
+ circuit = /obj/item/weapon/circuitboard/request
var/department = "Unknown" //The list of all departments on the station (Determined from this variable on each unit) Set this to the same thing if you want several consoles in one department
var/list/message_log = list() //List of all messages
var/departmentType = 0 //Bitflag. Zero is reply-only. Map currently uses raw numbers instead of defines.
@@ -79,7 +80,7 @@ var/list/obj/machinery/requests_console/allConsoles = list()
req_console_supplies |= department
if (departmentType & RC_INFO)
req_console_information |= department
-
+
set_light(1)
/obj/machinery/requests_console/Destroy()
@@ -199,27 +200,29 @@ var/list/obj/machinery/requests_console/allConsoles = list()
//err... hacking code, which has no reason for existing... but anyway... it was once supposed to unlock priority 3 messanging on that console (EXTREME priority...), but the code for that was removed.
/obj/machinery/requests_console/attackby(var/obj/item/weapon/O as obj, var/mob/user as mob)
- /*
- if (istype(O, /obj/item/weapon/crowbar))
- if(open)
- open = 0
- icon_state="req_comp0"
- else
- open = 1
- if(hackState == 0)
- icon_state="req_comp_open"
- else if(hackState == 1)
- icon_state="req_comp_rewired"
- if (istype(O, /obj/item/weapon/screwdriver))
- if(open)
- if(hackState == 0)
- hackState = 1
- icon_state="req_comp_rewired"
- else if(hackState == 1)
- hackState = 0
- icon_state="req_comp_open"
- else
- user << "You can't do much with that."*/
+ if(default_deconstruction_screwdriver(user, O))
+ return
+ if(default_deconstruction_crowbar(user, O))
+ return
+ if(istype(O, /obj/item/device/multitool))
+ if(panel_open)
+ var/input = sanitize(input(usr, "What Department id would you like to give this Request Console?", "Multitool-Request Console interface", department))
+ if(!input)
+ usr << "No input found please hang up and try your call again."
+ return
+ department = input
+ announcement.title = "[department] announcement"
+ announcement.newscast = 1
+
+ name = "[department] Requests Console"
+ allConsoles += src
+ if (departmentType & RC_ASSIST)
+ req_console_assistance |= department
+ if (departmentType & RC_SUPPLY)
+ req_console_supplies |= department
+ if (departmentType & RC_INFO)
+ req_console_information |= department
+ return
if (istype(O, /obj/item/weapon/card/id))
if(inoperable(MAINT)) return
diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm
index e0047a08bf..36c8c62814 100644
--- a/code/game/machinery/spaceheater.dm
+++ b/code/game/machinery/spaceheater.dm
@@ -6,9 +6,9 @@
name = "space heater"
desc = "Made by Space Amish using traditional space techniques, this heater is guaranteed not to set the station on fire."
var/obj/item/weapon/cell/cell
- var/cell_type = /obj/item/weapon/cell/apc
+ var/cell_type = /obj/item/weapon/cell/high
var/on = 0
- var/set_temperature = T0C + 50 //K
+ var/set_temperature = T0C + 20 //K
var/heating_power = 40000
diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm
index dd862a7754..8b0d78cb96 100644
--- a/code/game/machinery/status_display.dm
+++ b/code/game/machinery/status_display.dm
@@ -17,6 +17,7 @@
density = 0
use_power = 1
idle_power_usage = 10
+ circuit = /obj/item/weapon/circuitboard/status_display
var/mode = 1 // 0 = Blank
// 1 = Shuttle timer
// 2 = Arbitrary message(s)
@@ -51,6 +52,29 @@
radio_controller.remove_object(src,frequency)
return ..()
+/obj/machinery/status_display/attackby(I as obj, user as mob)
+ if(istype(I, /obj/item/weapon/screwdriver) && circuit)
+ playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
+ if(do_after(user, 20))
+ var/obj/structure/frame/A = new /obj/structure/frame( src.loc )
+ var/obj/item/weapon/circuitboard/M = new circuit( A )
+ A.frame_type = "display"
+ A.pixel_x = pixel_x
+ A.pixel_y = pixel_y
+ A.circuit = M
+ A.anchored = 1
+ for (var/obj/C in src)
+ C.forceMove(loc)
+ user << "You disconnect the monitor. "
+ A.state = 4
+ A.icon_state = "display_4"
+ M.deconstruct(src)
+ qdel(src)
+ else
+ src.attack_hand(user)
+ return
+
+
// register for radio system
/obj/machinery/status_display/initialize()
..()
diff --git a/code/game/machinery/status_display_ai.dm b/code/game/machinery/status_display_ai.dm
index 0b7371c1b0..51fcfb4f51 100644
--- a/code/game/machinery/status_display_ai.dm
+++ b/code/game/machinery/status_display_ai.dm
@@ -59,6 +59,7 @@ var/list/ai_status_emotions = list(
name = "AI display"
anchored = 1
density = 0
+ circuit = /obj/item/weapon/circuitboard/ai_status_display
var/mode = 0 // 0 = Blank
// 1 = AI emoticon
@@ -68,6 +69,28 @@ var/list/ai_status_emotions = list(
var/emotion = "Neutral"
+/obj/machinery/ai_status_display/attackby(I as obj, user as mob)
+ if(istype(I, /obj/item/weapon/screwdriver) && circuit)
+ playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
+ if(do_after(user, 20))
+ var/obj/structure/frame/A = new /obj/structure/frame( src.loc )
+ var/obj/item/weapon/circuitboard/M = new circuit( A )
+ A.frame_type = "display"
+ A.pixel_x = pixel_x
+ A.pixel_y = pixel_y
+ A.circuit = M
+ A.anchored = 1
+ for (var/obj/C in src)
+ C.forceMove(loc)
+ user << "You disconnect the monitor. "
+ A.state = 4
+ A.icon_state = "display_4"
+ M.deconstruct(src)
+ qdel(src)
+ else
+ src.attack_hand(user)
+ return
+
/obj/machinery/ai_status_display/attack_ai/(mob/user as mob)
var/list/ai_emotions = get_ai_emotions(user.ckey)
var/emote = input("Please, select a status!", "AI Status", null, null) in ai_emotions
diff --git a/code/game/machinery/supplybeacon.dm b/code/game/machinery/supplybeacon.dm
index 7efa498d09..77e5887099 100644
--- a/code/game/machinery/supplybeacon.dm
+++ b/code/game/machinery/supplybeacon.dm
@@ -2,7 +2,7 @@
/obj/item/supply_beacon
name = "inactive supply beacon"
icon = 'icons/obj/supplybeacon.dmi'
- desc = "An inactive, hacked supply beacon stamped with the Vir Rapid Fabrication logo. Good for one (1) ballistic supply pod shipment."
+ desc = "An inactive, hacked supply beacon stamped with the "+starsys_name+" Rapid Fabrication logo. Good for one (1) ballistic supply pod shipment."
icon_state = "beacon"
var/deploy_path = /obj/machinery/power/supply_beacon
var/deploy_time = 30
@@ -114,6 +114,6 @@
var/drop_x = src.x-2
var/drop_y = src.y-2
var/drop_z = src.z
- command_announcement.Announce("Vir Rapid Fabrication priority supply request #[rand(1000,9999)]-[rand(100,999)] recieved. Shipment dispatched via ballistic supply pod for immediate delivery. Have a nice day.", "Thank You For Your Patronage")
+ command_announcement.Announce(starsys_name+" Rapid Fabrication priority supply request #[rand(1000,9999)]-[rand(100,999)] recieved. Shipment dispatched via ballistic supply pod for immediate delivery. Have a nice day.", "Thank You For Your Patronage")
spawn(rand(100,300))
new /datum/random_map/droppod/supply(null, drop_x, drop_y, drop_z, supplied_drop = drop_type) // Splat.
diff --git a/code/game/machinery/telecomms/broadcaster.dm b/code/game/machinery/telecomms/broadcaster.dm
index 6a61a082b9..7d27c94b65 100644
--- a/code/game/machinery/telecomms/broadcaster.dm
+++ b/code/game/machinery/telecomms/broadcaster.dm
@@ -286,19 +286,14 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept
for (var/mob/R in receive)
/* --- Loop through the receivers and categorize them --- */
-
- if (R.client)
- if(R.client.prefs)
- if(!(R.client.prefs.toggles & CHAT_RADIO)) //Adminning with 80 people on can be fun when you're trying to talk and all you can hear is radios.
- continue
- else
- log_debug("Client prefs found to be null in /proc/Broadcast_Message() for mob [R] and client [R.ckey], this should be investigated.")
+ if (!R.is_preference_enabled(/datum/client_preference/holder/hear_radio))
+ continue
if(istype(R, /mob/new_player)) // we don't want new players to hear messages. rare but generates runtimes.
continue
// Ghosts hearing all radio chat don't want to hear syndicate intercepts, they're duplicates
- if(data == 3 && istype(R, /mob/dead/observer) && R.client && R.client.prefs && (R.client.prefs.toggles & CHAT_GHOSTRADIO))
+ if(data == 3 && istype(R, /mob/observer/dead) && R.is_preference_enabled(/datum/client_preference/ghost_radio))
continue
// --- Check for compression ---
@@ -395,33 +390,33 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept
if (length(heard_masked))
for (var/mob/R in heard_masked)
- R.hear_radio(message,verbage, speaking, part_a, part_b, M, 0, name)
+ R.hear_radio(message,verbage, speaking, part_a, part_b, part_c, M, 0, name)
/* --- Process all the mobs that heard the voice normally (understood) --- */
if (length(heard_normal))
for (var/mob/R in heard_normal)
- R.hear_radio(message, verbage, speaking, part_a, part_b, M, 0, realname)
+ R.hear_radio(message, verbage, speaking, part_a, part_b, part_c, M, 0, realname)
/* --- Process all the mobs that heard the voice normally (did not understand) --- */
if (length(heard_voice))
for (var/mob/R in heard_voice)
- R.hear_radio(message,verbage, speaking, part_a, part_b, M,0, vname)
+ R.hear_radio(message,verbage, speaking, part_a, part_b, part_c, M,0, vname)
/* --- 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))
for (var/mob/R in heard_garbled)
- R.hear_radio(message, verbage, speaking, part_a, part_b, M, 1, vname)
+ R.hear_radio(message, verbage, speaking, part_a, part_b, part_c, M, 1, vname)
/* --- Complete gibberish. Usually happens when there's a compressed message --- */
if (length(heard_gibberish))
for (var/mob/R in heard_gibberish)
- R.hear_radio(message, verbage, speaking, part_a, part_b, M, 1)
+ R.hear_radio(message, verbage, speaking, part_a, part_b, part_c, M, 1)
return 1
@@ -494,12 +489,8 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept
/* --- Loop through the receivers and categorize them --- */
- if (R.client)
- if(R.client.prefs)
- if(!(R.client.prefs.toggles & CHAT_RADIO)) //Adminning with 80 people on can be fun when you're trying to talk and all you can hear is radios.
- continue
- else
- log_debug("Client prefs found to be null in /proc/Broadcast_SimpleMessage() for mob [R] and client [R.ckey], this should be investigated.")
+ if(!R.is_preference_enabled(/datum/client_preference/holder/hear_radio)) //Adminning with 80 people on can be fun when you're trying to talk and all you can hear is radios.
+ continue
// --- Check for compression ---
diff --git a/code/game/machinery/telecomms/logbrowser.dm b/code/game/machinery/telecomms/logbrowser.dm
index 072c99322f..b9cc3428f9 100644
--- a/code/game/machinery/telecomms/logbrowser.dm
+++ b/code/game/machinery/telecomms/logbrowser.dm
@@ -10,6 +10,7 @@
var/screen = 0 // the screen number:
var/list/servers = list() // the servers located by the computer
var/obj/machinery/telecomms/server/SelectedServer
+ circuit = /obj/item/weapon/circuitboard/comm_server
var/network = "NULL" // the network to probe
var/temp = "" // temporary feedback messages
@@ -188,36 +189,6 @@
updateUsrDialog()
return
- attackby(var/obj/item/weapon/D as obj, var/mob/user as mob)
- if(istype(D, /obj/item/weapon/screwdriver))
- playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
- if(do_after(user, 20))
- if (src.stat & BROKEN)
- user << "The broken glass falls out. "
- var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
- new /obj/item/weapon/material/shard( src.loc )
- var/obj/item/weapon/circuitboard/comm_server/M = new /obj/item/weapon/circuitboard/comm_server( A )
- for (var/obj/C in src)
- C.loc = src.loc
- A.circuit = M
- A.state = 3
- A.icon_state = "3"
- A.anchored = 1
- qdel(src)
- else
- user << "You disconnect the monitor. "
- var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
- var/obj/item/weapon/circuitboard/comm_server/M = new /obj/item/weapon/circuitboard/comm_server( A )
- for (var/obj/C in src)
- C.loc = src.loc
- A.circuit = M
- A.state = 4
- A.icon_state = "4"
- A.anchored = 1
- qdel(src)
- src.updateUsrDialog()
- return
-
/obj/machinery/computer/telecomms/server/emag_act(var/remaining_charges, var/mob/user)
if(!emagged)
playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
diff --git a/code/game/machinery/telecomms/machine_interactions.dm b/code/game/machinery/telecomms/machine_interactions.dm
index 2859083c9d..002da7bc53 100644
--- a/code/game/machinery/telecomms/machine_interactions.dm
+++ b/code/game/machinery/telecomms/machine_interactions.dm
@@ -98,8 +98,8 @@
// Drop a circuit board too
C.loc = user.loc
- // Create a machine frame and delete the current machine
- var/obj/machinery/constructable_frame/machine_frame/F = new
+ // Create a frame and delete the current machine
+ var/obj/structure/frame/F = new
F.loc = src.loc
qdel(src)
@@ -196,7 +196,7 @@
// Returns a multitool from a user depending on their mobtype.
-/obj/machinery/telecomms/proc/get_multitool(mob/user as mob)
+/obj/machinery/proc/get_multitool(mob/user as mob) //No need to have this being a telecomms specific proc.
var/obj/item/device/multitool/P = null
// Let's double check
diff --git a/code/game/machinery/telecomms/telemonitor.dm b/code/game/machinery/telecomms/telemonitor.dm
index 24549bd8b7..6567012a80 100644
--- a/code/game/machinery/telecomms/telemonitor.dm
+++ b/code/game/machinery/telecomms/telemonitor.dm
@@ -14,6 +14,7 @@
var/screen = 0 // the screen number:
var/list/machinelist = list() // the machines located by the computer
var/obj/machinery/telecomms/SelectedMachine
+ circuit = /obj/item/weapon/circuitboard/comm_monitor
var/network = "NULL" // the network to probe
@@ -123,36 +124,6 @@
updateUsrDialog()
return
- attackby(var/obj/item/weapon/D as obj, var/mob/user as mob)
- if(istype(D, /obj/item/weapon/screwdriver))
- playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
- if(do_after(user, 20))
- if (src.stat & BROKEN)
- user << "The broken glass falls out. "
- var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
- new /obj/item/weapon/material/shard( src.loc )
- var/obj/item/weapon/circuitboard/comm_monitor/M = new /obj/item/weapon/circuitboard/comm_monitor( A )
- for (var/obj/C in src)
- C.loc = src.loc
- A.circuit = M
- A.state = 3
- A.icon_state = "3"
- A.anchored = 1
- qdel(src)
- else
- user << "You disconnect the monitor. "
- var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
- var/obj/item/weapon/circuitboard/comm_monitor/M = new /obj/item/weapon/circuitboard/comm_monitor( A )
- for (var/obj/C in src)
- C.loc = src.loc
- A.circuit = M
- A.state = 4
- A.icon_state = "4"
- A.anchored = 1
- qdel(src)
- src.updateUsrDialog()
- return
-
/obj/machinery/computer/telecomms/monitor/emag_act(var/remaining_charges, var/mob/user)
if(!emagged)
playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
diff --git a/code/game/machinery/telecomms/traffic_control.dm b/code/game/machinery/telecomms/traffic_control.dm
index e941a268ef..0d372b2aaa 100644
--- a/code/game/machinery/telecomms/traffic_control.dm
+++ b/code/game/machinery/telecomms/traffic_control.dm
@@ -14,6 +14,7 @@
var/mob/lasteditor
var/list/viewingcode = list()
var/obj/machinery/telecomms/server/SelectedServer
+ circuit = /obj/item/weapon/circuitboard/comm_traffic
var/network = "NULL" // the network to probe
var/temp = "" // temporary feedback messages
@@ -206,40 +207,10 @@
updateUsrDialog()
return
- attackby(var/obj/item/weapon/D as obj, var/mob/user as mob)
- if(istype(D, /obj/item/weapon/screwdriver))
- playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
- if(do_after(user, 20))
- if (src.stat & BROKEN)
- user << "The broken glass falls out. "
- var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
- new /obj/item/weapon/material/shard( src.loc )
- var/obj/item/weapon/circuitboard/comm_traffic/M = new /obj/item/weapon/circuitboard/comm_traffic( A )
- for (var/obj/C in src)
- C.loc = src.loc
- A.circuit = M
- A.state = 3
- A.icon_state = "3"
- A.anchored = 1
- qdel(src)
- else
- user << "You disconnect the monitor. "
- var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
- var/obj/item/weapon/circuitboard/comm_traffic/M = new /obj/item/weapon/circuitboard/comm_traffic( A )
- for (var/obj/C in src)
- C.loc = src.loc
- A.circuit = M
- A.state = 4
- A.icon_state = "4"
- A.anchored = 1
- qdel(src)
- src.updateUsrDialog()
- return
-
/obj/machinery/computer/telecomms/traffic/emag_act(var/remaining_charges, var/mob/user)
if(!emagged)
playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
emagged = 1
user << "You you disable the security protocols "
src.updateUsrDialog()
- return 1
+ return 1
\ No newline at end of file
diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm
index d5d03749be..c9a42680f7 100644
--- a/code/game/machinery/teleporter.dm
+++ b/code/game/machinery/teleporter.dm
@@ -85,7 +85,7 @@
if(..()) return
/* Ghosts can't use this one because it's a direct selection */
- if(istype(user, /mob/dead/observer)) return
+ if(istype(user, /mob/observer/dead)) return
var/list/L = list()
var/list/areaindex = list()
@@ -170,6 +170,7 @@
use_power = 1
idle_power_usage = 10
active_power_usage = 2000
+ circuit = /obj/item/weapon/circuitboard/teleporter_hub
var/obj/machinery/computer/teleporter/com
@@ -178,6 +179,19 @@
underlays.Cut()
underlays += image('icons/obj/stationobjs.dmi', icon_state = "tele-wires")
+ circuit = new circuit(src)
+ component_parts = list()
+ component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
+ component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
+ component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
+ component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
+ component_parts += new /obj/item/weapon/stock_parts/micro_laser(src)
+ component_parts += new /obj/item/weapon/stock_parts/micro_laser(src)
+ component_parts += new /obj/item/weapon/stock_parts/micro_laser(src)
+ component_parts += new /obj/item/weapon/stock_parts/micro_laser(src)
+ component_parts += new /obj/item/stack/cable_coil(src, 10)
+ RefreshParts()
+
/obj/machinery/teleport/hub/Bumped(M as mob|obj)
spawn()
if (src.icon_state == "tele1")
@@ -307,6 +321,7 @@
use_power = 1
idle_power_usage = 10
active_power_usage = 2000
+ circuit = /obj/item/weapon/circuitboard/teleporter_station
var/obj/machinery/teleport/hub/com
/obj/machinery/teleport/station/New()
@@ -314,6 +329,14 @@
overlays.Cut()
overlays += image('icons/obj/stationobjs.dmi', icon_state = "controller-wires")
+ circuit = new circuit(src)
+ component_parts = list()
+ component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
+ component_parts += new /obj/item/weapon/stock_parts/capacitor(src)
+ component_parts += new /obj/item/weapon/stock_parts/capacitor(src)
+ component_parts += new /obj/item/stack/cable_coil(src, 10)
+ RefreshParts()
+
/obj/machinery/teleport/station/attackby(var/obj/item/weapon/W)
src.attack_hand()
diff --git a/code/game/machinery/turrets.dm b/code/game/machinery/turrets.dm
deleted file mode 100644
index d324f3dd9c..0000000000
--- a/code/game/machinery/turrets.dm
+++ /dev/null
@@ -1,523 +0,0 @@
-/area/turret_protected
- name = "Turret Protected Area"
- var/list/turretTargets = list()
-
-/area/turret_protected/proc/subjectDied(target)
- if( isliving(target) )
- if( !issilicon(target) )
- var/mob/living/L = target
- if( L.stat )
- if( L in turretTargets )
- src.Exited(L)
-
-
-/area/turret_protected/Entered(O)
- ..()
- if( iscarbon(O) )
- turretTargets |= O
- else if( istype(O, /obj/mecha) )
- var/obj/mecha/Mech = O
- if( Mech.occupant )
- turretTargets |= Mech
- else if(istype(O,/mob/living/simple_animal))
- turretTargets |= O
- return 1
-
-/area/turret_protected/Exited(O)
- if( ismob(O) && !issilicon(O) )
- turretTargets -= O
- else if( istype(O, /obj/mecha) )
- turretTargets -= O
- ..()
- return 1
-
-
-/obj/machinery/turret
- name = "turret"
- icon = 'icons/obj/turrets.dmi'
- icon_state = "grey_target_prism"
- var/raised = 0
- var/enabled = 1
- anchored = 1
- layer = 3
- invisibility = INVISIBILITY_LEVEL_TWO
- density = 1
- var/lasers = 0
- var/lasertype = 1
- // 1 = lasers
- // 2 = cannons
- // 3 = pulse
- // 4 = change (HONK)
- // 5 = bluetag
- // 6 = redtag
- var/health = 80
- var/maxhealth = 80
- var/auto_repair = 0
- var/obj/machinery/turretcover/cover = null
- var/popping = 0
- var/wasvalid = 0
- var/lastfired = 0
- var/shot_delay = 30 //3 seconds between shots
- var/datum/effect/effect/system/spark_spread/spark_system
- use_power = 1
- idle_power_usage = 50
- active_power_usage = 300
-// var/list/targets
- var/atom/movable/cur_target
- var/targeting_active = 0
- var/area/turret_protected/protected_area
-
-/obj/machinery/turret/proc/take_damage(damage)
- src.health -= damage
- if(src.health<=0)
- qdel(src)
- return
-
-/obj/machinery/turret/attack_hand(var/mob/living/carbon/human/user)
-
- if(!istype(user))
- return ..()
-
- if(user.species.can_shred(user) && !(stat & BROKEN))
- playsound(src.loc, 'sound/weapons/slash.ogg', 25, 1, -1)
- visible_message("[user] has slashed at [src]! ")
- src.take_damage(15)
- return
-
-/obj/machinery/turret/bullet_act(var/obj/item/projectile/Proj)
- if(!(Proj.damage_type == BRUTE || Proj.damage_type == BURN))
- return
- take_damage(Proj.damage)
- ..()
- return
-
-/obj/machinery/turret/New()
- maxhealth = health
- spark_system = new /datum/effect/effect/system/spark_spread
- spark_system.set_up(5, 0, src)
- spark_system.attach(src)
-// targets = new
- ..()
- return
-
-/obj/machinery/turret/proc/update_health()
- if(src.health<=0)
- qdel(src)
- return
-
-/obj/machinery/turretcover
- name = "pop-up turret cover"
- icon = 'icons/obj/turrets.dmi'
- icon_state = "turretCover"
- anchored = 1
- layer = 3.5
- density = 0
- var/obj/machinery/turret/host = null
-
-/obj/machinery/turret/proc/isPopping()
- return (popping!=0)
-
-/obj/machinery/turret/power_change()
- ..()
- if(stat & BROKEN)
- icon_state = "grey_target_prism"
- else
- if( !(stat & NOPOWER) )
- if (src.enabled)
- if (src.lasers)
- icon_state = "orange_target_prism"
- else
- icon_state = "target_prism"
- else
- icon_state = "grey_target_prism"
- stat &= ~NOPOWER
- else
- spawn(rand(0, 15))
- src.icon_state = "grey_target_prism"
- stat |= NOPOWER
-
-/obj/machinery/turret/proc/setState(var/enabled, var/lethal)
- src.enabled = enabled
- src.lasers = lethal
- src.power_change()
-
-
-/obj/machinery/turret/proc/get_protected_area()
- var/area/turret_protected/TP = get_area(src)
- if(istype(TP))
- return TP
- return
-
-/obj/machinery/turret/proc/check_target(var/atom/movable/T as mob|obj)
- if( T && T in protected_area.turretTargets )
- var/area/area_T = get_area(T)
- if( !area_T || (area_T.type != protected_area.type) )
- protected_area.Exited(T)
- return 0 //If the guy is somehow not in the turret's area (teleportation), get them out the damn list. --NEO
- if( iscarbon(T) )
- var/mob/living/carbon/MC = T
- if( !MC.stat )
- if( !MC.lying || lasers )
- return 1
- else if( istype(T, /obj/mecha) )
- var/obj/mecha/ME = T
- if( ME.occupant )
- return 1
- else if(istype(T,/mob/living/simple_animal))
- var/mob/living/simple_animal/A = T
- if( !A.stat )
- if(lasers)
- return 1
- return 0
-
-/obj/machinery/turret/proc/get_new_target()
- var/list/new_targets = new
- var/new_target
- for(var/mob/living/carbon/M in protected_area.turretTargets)
- if(!M.stat)
- if(!M.lying || lasers)
- new_targets += M
- for(var/obj/mecha/M in protected_area.turretTargets)
- if(M.occupant)
- new_targets += M
- for(var/mob/living/simple_animal/M in protected_area.turretTargets)
- if(!M.stat)
- new_targets += M
- if(new_targets.len)
- new_target = pick(new_targets)
- return new_target
-
-
-/obj/machinery/turret/process()
- if(stat & (NOPOWER|BROKEN))
- return
- if(src.cover==null)
- src.cover = new /obj/machinery/turretcover(src.loc)
- src.cover.host = src
- protected_area = get_protected_area()
- if(!enabled || !protected_area || protected_area.turretTargets.len<=0)
- if(!isDown() && !isPopping())
- popDown()
- return
- if(!check_target(cur_target)) //if current target fails target check
- cur_target = get_new_target() //get new target
-
- if(cur_target) //if it's found, proceed
-// world << "[cur_target]"
- if(!isPopping())
- if(isDown())
- popUp()
- use_power = 2
- else
- spawn()
- if(!targeting_active)
- targeting_active = 1
- target()
- targeting_active = 0
-
- if(prob(15))
- if(prob(50))
- playsound(src.loc, 'sound/effects/turret/move1.wav', 60, 1)
- else
- playsound(src.loc, 'sound/effects/turret/move2.wav', 60, 1)
- else if(!isPopping())//else, pop down
- if(!isDown())
- popDown()
- use_power = 1
-
- // Auto repair requires massive amount of power, but slowly regenerates the turret's health.
- // Currently only used by malfunction hardware, but may be used as admin-settable option too.
- if(auto_repair)
- if(health < maxhealth)
- use_power(20000)
- health = min(health + 1, maxhealth)
- return
-
-
-/obj/machinery/turret/proc/target()
- while(src && enabled && !stat && check_target(cur_target))
- src.set_dir(get_dir(src, cur_target))
- shootAt(cur_target)
- sleep(shot_delay)
- return
-
-/obj/machinery/turret/proc/shootAt(var/atom/movable/target)
- var/turf/T = get_turf(src)
- var/turf/U = get_turf(target)
- if (!T || !U)
- return
- var/obj/item/projectile/A
- if (src.lasers)
- switch(lasertype)
- if(1)
- A = new /obj/item/projectile/beam( loc )
- if(2)
- A = new /obj/item/projectile/beam/heavylaser( loc )
- if(3)
- A = new /obj/item/projectile/beam/pulse( loc )
- if(4)
- A = new /obj/item/projectile/change( loc )
- if(5)
- A = new /obj/item/projectile/beam/lastertag/blue( loc )
- if(6)
- A = new /obj/item/projectile/beam/lastertag/red( loc )
- A.original = target
- use_power(500)
- else
- A = new /obj/item/projectile/energy/electrode( loc )
- use_power(200)
-
- //Turrets aim for the center of mass by default.
- //If the target is grabbing someone then the turret smartly aims for extremities
- var/obj/item/weapon/grab/G = locate() in target
- if(G && G.state >= GRAB_NECK) //works because mobs are currently not allowed to upgrade to NECK if they are grabbing two people.
- A.def_zone = pick(BP_HEAD, BP_L_HAND, BP_R_HAND, BP_L_FOOT, BP_R_FOOT, BP_L_ARM, BP_R_ARM, BP_L_LEG, BP_R_LEG)
- else
- A.def_zone = pick(BP_TORSO, BP_GROIN)
-
- A.current = T
- A.starting = T
- A.yo = U.y - T.y
- A.xo = U.x - T.x
- spawn( 0 )
- A.process()
- return
-
-
-/obj/machinery/turret/proc/isDown()
- return (invisibility!=0)
-
-/obj/machinery/turret/proc/popUp()
- if ((!isPopping()) || src.popping==-1)
- invisibility = 0
- popping = 1
- playsound(src.loc, 'sound/effects/turret/open.wav', 60, 1)
- if (src.cover!=null)
- flick("popup", src.cover)
- src.cover.icon_state = "openTurretCover"
- spawn(10)
- if (popping==1) popping = 0
-
-/obj/machinery/turret/proc/popDown()
- if ((!isPopping()) || src.popping==1)
- popping = -1
- playsound(src.loc, 'sound/effects/turret/open.wav', 60, 1)
- if (src.cover!=null)
- flick("popdown", src.cover)
- src.cover.icon_state = "turretCover"
- spawn(10)
- if (popping==-1)
- invisibility = INVISIBILITY_LEVEL_TWO
- popping = 0
-
-/obj/machinery/turret/bullet_act(var/obj/item/projectile/Proj)
- if(!(Proj.damage_type == BRUTE || Proj.damage_type == BURN))
- return
- src.health -= Proj.damage
- ..()
- if(prob(45) && Proj.damage > 0) src.spark_system.start()
- qdel (Proj)
- if (src.health <= 0)
- src.die()
- return
-
-/obj/machinery/turret/attackby(obj/item/weapon/W, mob/user)//I can't believe no one added this before/N
- ..()
- playsound(src.loc, 'sound/weapons/smash.ogg', 60, 1)
- src.spark_system.start()
- src.health -= W.force * 0.5
- if (src.health <= 0)
- src.die()
- return
-
-/obj/machinery/turret/emp_act(severity)
- switch(severity)
- if(1)
- enabled = 0
- lasers = 0
- power_change()
- ..()
-
-/obj/machinery/turret/ex_act(severity)
- if(severity < 3)
- src.die()
-
-/obj/machinery/turret/proc/die()
- src.health = 0
- src.density = 0
- src.stat |= BROKEN
- src.icon_state = "destroyed_target_prism"
- if (cover!=null)
- qdel(cover)
- sleep(3)
- flick("explosion", src)
- spawn(13)
- qdel(src)
-
-/obj/machinery/turret/attack_generic(var/mob/user, var/damage, var/attack_message)
- if(!damage)
- return 0
- if(stat & BROKEN)
- user << "That object is useless to you."
- return 0
- user.do_attack_animation(src)
- visible_message("[user] [attack_message] the [src]! ")
- user.attack_log += text("\[[time_stamp()]\] attacked [src.name] ")
- src.health -= damage
- if (src.health <= 0)
- src.die()
- return 1
-
-/obj/structure/turret/gun_turret
- name = "Gun Turret"
- density = 1
- anchored = 1
- var/cooldown = 20
- var/projectiles = 100
- var/projectiles_per_shot = 2
- var/deviation = 0.3
- var/list/exclude = list()
- var/atom/cur_target
- var/scan_range = 7
- var/health = 40
- var/list/scan_for = list("human"=0,"cyborg"=0,"mecha"=0,"alien"=1)
- var/on = 0
- icon = 'icons/obj/turrets.dmi'
- icon_state = "gun_turret"
-
- proc/take_damage(damage)
- src.health -= damage
- if(src.health<=0)
- qdel(src)
- return
-
-
- bullet_act(var/obj/item/projectile/Proj)
- if(Proj.damage_type == HALLOSS)
- return
- take_damage(Proj.damage)
- ..()
- return
-
-
- ex_act()
- qdel(src)
- return
-
- emp_act()
- qdel(src)
- return
-
- attack_hand(mob/user as mob)
- user.set_machine(src)
- var/dat = {"
- [src] Control
-
- Power: [on?"on":"off"]
- Scan Range: - [scan_range] +
- Scan for: "}
- for(var/scan in scan_for)
- dat += ""
-
- dat += {"Ammo: [max(0, projectiles)]
-
- "}
- user << browse(dat, "window=turret")
- onclose(user, "turret")
- return
-
- attack_ai(mob/user as mob)
- return attack_hand(user)
-
- Topic(href, href_list)
- if(href_list["power"])
- src.on = !src.on
- if(src.on)
- spawn(50)
- if(src)
- src.process()
- if(href_list["scan_range"])
- src.scan_range = between(1,src.scan_range+text2num(href_list["scan_range"]),8)
- if(href_list["scan_for"])
- if(href_list["scan_for"] in scan_for)
- scan_for[href_list["scan_for"]] = !scan_for[href_list["scan_for"]]
- src.updateUsrDialog()
- return
-
-
- proc/validate_target(atom/target)
- if(get_dist(target, src)>scan_range)
- return 0
- if(istype(target, /mob))
- var/mob/M = target
- if(!M.stat && !M.lying)//ninjas can't catch you if you're lying
- return 1
- else if(istype(target, /obj/mecha))
- return 1
- return 0
-
-
- process()
- spawn while(on)
- if(projectiles<=0)
- on = 0
- return
- if(cur_target && !validate_target(cur_target))
- cur_target = null
- if(!cur_target)
- cur_target = get_target()
- fire(cur_target)
- sleep(cooldown)
- return
-
- proc/get_target()
- var/list/pos_targets = list()
- var/target = null
- if(scan_for["human"])
- for(var/mob/living/carbon/human/M in oview(scan_range,src))
- if(M.stat || M.lying || M in exclude)
- continue
- pos_targets += M
- if(scan_for["cyborg"])
- for(var/mob/living/silicon/M in oview(scan_range,src))
- if(M.stat || M.lying || M in exclude)
- continue
- pos_targets += M
- if(scan_for["mecha"])
- for(var/obj/mecha/M in oview(scan_range, src))
- if(M in exclude)
- continue
- pos_targets += M
- if(scan_for["alien"])
- for(var/mob/living/carbon/alien/M in oview(scan_range,src))
- if(M.stat || M.lying || M in exclude)
- continue
- pos_targets += M
- if(pos_targets.len)
- target = pick(pos_targets)
- return target
-
-
- proc/fire(atom/target)
- if(!target)
- cur_target = null
- return
- src.set_dir(get_dir(src,target))
- var/turf/targloc = get_turf(target)
- var/target_x = targloc.x
- var/target_y = targloc.y
- var/target_z = targloc.z
- targloc = null
- spawn for(var/i=1 to min(projectiles, projectiles_per_shot))
- if(!src) break
- var/turf/curloc = get_turf(src)
- targloc = locate(target_x+GaussRandRound(deviation,1),target_y+GaussRandRound(deviation,1),target_z)
- if (!targloc || !curloc)
- continue
- if (targloc == curloc)
- continue
- playsound(src, 'sound/weapons/Gunshot.ogg', 50, 1)
- var/obj/item/projectile/A = new /obj/item/projectile(curloc)
- src.projectiles--
- A.launch(target)
- return
diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm
index 561979e6e4..0f3ff025b9 100644
--- a/code/game/machinery/vending.dm
+++ b/code/game/machinery/vending.dm
@@ -1,30 +1,3 @@
-/**
- * Datum used to hold information about a product in a vending machine
- */
-/datum/data/vending_product
- var/product_name = "generic" // Display name for the product
- var/product_path = null
- var/amount = 0 // Amount held in the vending machine
- var/price = 0 // Price to buy one
- var/display_color = null // Display color for vending machine listing
- var/category = CAT_NORMAL // CAT_HIDDEN for contraband, CAT_COIN for premium
-
-/datum/data/vending_product/New(var/path, var/name = null, var/amount = 1, var/price = 0, var/color = null, var/category = CAT_NORMAL)
- ..()
-
- src.product_path = path
-
- if(!name)
- var/atom/tmp = path
- src.product_name = initial(tmp.name)
- else
- src.product_name = name
-
- src.amount = amount
- src.price = price
- src.display_color = color
- src.category = category
-
/**
* A vending machine
*/
@@ -50,7 +23,7 @@
var/vend_ready = 1 //Are we ready to vend?? Is it time??
var/vend_delay = 10 //How long does it take to vend?
var/categories = CAT_NORMAL // Bitmask of cats we're currently showing
- var/datum/data/vending_product/currently_vending = null // What we're requesting payment for right now
+ var/datum/stored_item/vending_product/currently_vending = null // What we're requesting payment for right now
var/status_message = "" // Status screen messages like "insufficient funds", displayed in NanoUI
var/status_error = 0 // Set to 1 if status_message is an error
@@ -96,7 +69,7 @@
wires = new(src)
spawn(4)
if(src.product_slogans)
- src.slogan_list += text2list(src.product_slogans, ";")
+ src.slogan_list += splittext(src.product_slogans, ";")
// So not all machines speak at the exact same time.
// The first time this machine says something will be at slogantime + this random value,
@@ -104,7 +77,7 @@
src.last_slogan = world.time + rand(0, slogan_delay)
if(src.product_ads)
- src.ads_list += text2list(src.product_ads, ";")
+ src.ads_list += splittext(src.product_ads, ";")
src.build_inventory()
power_change()
@@ -130,7 +103,7 @@
var/category = current_list[2]
for(var/entry in current_list[1])
- var/datum/data/vending_product/product = new/datum/data/vending_product(entry)
+ var/datum/stored_item/vending_product/product = new/datum/stored_item/vending_product(src, entry)
product.price = (entry in src.prices) ? src.prices[entry] : 0
product.amount = (current_list[1][entry]) ? current_list[1][entry] : 1
@@ -143,6 +116,9 @@
wires = null
qdel(coin)
coin = null
+ for(var/datum/stored_item/vending_product/R in product_records)
+ qdel(R)
+ product_records = null
return ..()
/obj/machinery/vending/ex_act(severity)
@@ -214,7 +190,7 @@
return
else if(istype(W, /obj/item/weapon/coin) && premium.len > 0)
user.drop_item()
- W.loc = src
+ W.forceMove(src)
coin = W
categories |= CAT_COIN
user << "You insert \the [W] into \the [src]. "
@@ -232,13 +208,11 @@
user << "You [anchored? "un" : ""]secured \the [src]! "
anchored = !anchored
return
-
else
- for(var/datum/data/vending_product/R in product_records)
- if(istype(W, R.product_path))
- stock(R, user)
- qdel(W)
+ for(var/datum/stored_item/vending_product/R in product_records)
+ if(istype(W, R.item_path) && (W.name == R.item_name))
+ stock(W, R, user)
return
..()
@@ -333,7 +307,7 @@
// create entry in the purchaser's account log
var/datum/transaction/T = new()
T.target_name = "[vendor_account.owner_name] (via [src.name])"
- T.purpose = "Purchase of [currently_vending.product_name]"
+ T.purpose = "Purchase of [currently_vending.item_name]"
if(currently_vending.price > 0)
T.amount = "([currently_vending.price])"
else
@@ -359,7 +333,7 @@
var/datum/transaction/T = new()
T.target_name = target
- T.purpose = "Purchase of [currently_vending.product_name]"
+ T.purpose = "Purchase of [currently_vending.item_name]"
T.amount = "[currently_vending.price]"
T.source_terminal = src.name
T.date = current_date_string
@@ -391,7 +365,7 @@
var/list/data = list()
if(currently_vending)
data["mode"] = 1
- data["product"] = currently_vending.product_name
+ data["product"] = currently_vending.item_name
data["price"] = currently_vending.price
data["message_err"] = 0
data["message"] = src.status_message
@@ -401,17 +375,17 @@
var/list/listed_products = list()
for(var/key = 1 to src.product_records.len)
- var/datum/data/vending_product/I = src.product_records[key]
+ var/datum/stored_item/vending_product/I = src.product_records[key]
if(!(I.category & src.categories))
continue
listed_products.Add(list(list(
"key" = key,
- "name" = I.product_name,
+ "name" = I.item_name,
"price" = I.price,
"color" = I.display_color,
- "amount" = I.amount)))
+ "amount" = I.get_amount())))
data["products"] = listed_products
@@ -441,10 +415,10 @@
usr << "There is no coin in this machine."
return
- coin.loc = src.loc
+ coin.forceMove(src.loc)
if(!usr.get_active_hand())
usr.put_in_hands(coin)
- usr << "You remove the [coin] from the [src] "
+ usr << "You remove \the [coin] from \the [src] "
coin = null
categories &= ~CAT_COIN
@@ -456,7 +430,7 @@
return
var/key = text2num(href_list["vend"])
- var/datum/data/vending_product/R = product_records[key]
+ var/datum/stored_item/vending_product/R = product_records[key]
// This should not happen unless the request from NanoUI was bad
if(!(R.category & src.categories))
@@ -485,7 +459,7 @@
src.add_fingerprint(usr)
nanomanager.update_uis(src)
-/obj/machinery/vending/proc/vend(datum/data/vending_product/R, mob/user)
+/obj/machinery/vending/proc/vend(datum/stored_item/vending_product/R, mob/user)
if((!allowed(usr)) && !emagged && scan_id) //For SECURE VENDING MACHINES YEAH
usr << "Access denied. " //Unless emagged of course
flick(src.icon_deny,src)
@@ -505,13 +479,13 @@
else
user << "You weren't able to pull the coin out fast enough, the machine ate it, string and all. "
qdel(coin)
+ coin = null
categories &= ~CAT_COIN
else
qdel(coin)
+ coin = null
categories &= ~CAT_COIN
- R.amount--
-
if(((src.last_reply + (src.vend_delay + 200)) <= world.time) && src.vend_reply)
spawn(0)
src.speak(src.vend_reply)
@@ -521,16 +495,31 @@
if (src.icon_vend) //Show the vending animation if needed
flick(src.icon_vend,src)
spawn(src.vend_delay)
- new R.product_path(get_turf(src))
+ R.get_product(get_turf(src))
+ if(prob(1))
+ sleep(3)
+ if(R.get_product(get_turf(src)))
+ src.visible_message("\The [src] clunks as it vends an additional item. ")
+
src.status_message = ""
src.status_error = 0
src.vend_ready = 1
currently_vending = null
nanomanager.update_uis(src)
-/obj/machinery/vending/proc/stock(var/datum/data/vending_product/R, var/mob/user)
- user << "You insert \the [src] in the product receptor. "
- R.amount++
+
+/**
+ * Add item to the machine
+ *
+ * Checks if item is vendable in this machine should be performed before
+ * calling. W is the item being inserted, R is the associated vending_product entry.
+ */
+/obj/machinery/vending/proc/stock(obj/item/weapon/W, var/datum/stored_item/vending_product/R, var/mob/user)
+ if(!user.unEquip(W))
+ return
+
+ user << "You insert \the [W] in the product receptor. "
+ R.add_product(W)
nanomanager.update_uis(src)
@@ -579,16 +568,9 @@
//Oh no we're malfunctioning! Dump out some product and break.
/obj/machinery/vending/proc/malfunction()
- for(var/datum/data/vending_product/R in src.product_records)
- if (R.amount <= 0) //Try to use a record that actually has something to dump.
- continue
- var/dump_path = R.product_path
- if (!dump_path)
- continue
-
- while(R.amount>0)
- new dump_path(src.loc)
- R.amount--
+ for(var/datum/stored_item/vending_product/R in src.product_records)
+ while(R.get_amount()>0)
+ R.get_product(loc)
break
stat |= BROKEN
@@ -602,21 +584,16 @@
if(!target)
return 0
- for(var/datum/data/vending_product/R in src.product_records)
- if (R.amount <= 0) //Try to use a record that actually has something to dump.
+ for(var/datum/stored_item/vending_product/R in src.product_records)
+ throw_item = R.get_product(loc)
+ if (!throw_item)
continue
- var/dump_path = R.product_path
- if (!dump_path)
- continue
-
- R.amount--
- throw_item = new dump_path(src.loc)
break
if (!throw_item)
return 0
spawn(0)
throw_item.throw_at(target, 16, 3, src)
- src.visible_message("[src] launches [throw_item.name] at [target.name]! ")
+ src.visible_message("\The [src] launches \a [throw_item] at \the [target]! ")
return 1
/*
@@ -644,31 +621,55 @@
icon = 'icons/obj/objects.dmi'
icon_state = "dispenser"
product_paths = "/obj/item/weapon/tank/oxygen;/obj/item/weapon/tank/phoron;/obj/item/weapon/tank/emergency_oxygen;/obj/item/weapon/tank/emergency_oxygen/engi;/obj/item/clothing/mask/breath"
- product_amounts = "10;10;10;5;25"
+ productamounts = "10;10;10;5;25"
vend_delay = 0
*/
/obj/machinery/vending/boozeomat
name = "Booze-O-Mat"
desc = "A technological marvel, supposedly able to mix just the mixture you'd like to drink the moment you ask for one."
- icon_state = "boozeomat" //////////////18 drink entities below, plus the glasses, in case someone wants to edit the number of bottles
+ icon_state = "boozeomat"
icon_deny = "boozeomat-deny"
- products = list(/obj/item/weapon/reagent_containers/food/drinks/bottle/gin = 5,/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey = 5,
- /obj/item/weapon/reagent_containers/food/drinks/bottle/tequilla = 5,/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka = 5,
- /obj/item/weapon/reagent_containers/food/drinks/bottle/vermouth = 5,/obj/item/weapon/reagent_containers/food/drinks/bottle/rum = 5,
- /obj/item/weapon/reagent_containers/food/drinks/bottle/wine = 5,/obj/item/weapon/reagent_containers/food/drinks/bottle/cognac = 5,
- /obj/item/weapon/reagent_containers/food/drinks/bottle/kahlua = 5,/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer = 6,
- /obj/item/weapon/reagent_containers/food/drinks/bottle/small/ale = 6,/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice = 4,
- /obj/item/weapon/reagent_containers/food/drinks/bottle/tomatojuice = 4,/obj/item/weapon/reagent_containers/food/drinks/bottle/limejuice = 4,
- /obj/item/weapon/reagent_containers/food/drinks/bottle/cream = 4,/obj/item/weapon/reagent_containers/food/drinks/cans/tonic = 8,
- /obj/item/weapon/reagent_containers/food/drinks/bottle/cola = 5, /obj/item/weapon/reagent_containers/food/drinks/bottle/space_up = 5,
- /obj/item/weapon/reagent_containers/food/drinks/bottle/space_mountain_wind = 5, /obj/item/weapon/reagent_containers/food/drinks/cans/sodawater = 15,
- /obj/item/weapon/reagent_containers/food/drinks/flask/barflask = 2, /obj/item/weapon/reagent_containers/food/drinks/flask/vacuumflask = 2,
- /obj/item/weapon/reagent_containers/food/drinks/drinkingglass = 30,/obj/item/weapon/reagent_containers/food/drinks/ice = 9,
- /obj/item/weapon/reagent_containers/food/drinks/bottle/melonliquor = 2,/obj/item/weapon/reagent_containers/food/drinks/bottle/bluecuracao = 2,
- /obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe = 2,/obj/item/weapon/reagent_containers/food/drinks/bottle/grenadine = 5,
- /obj/item/weapon/reagent_containers/food/drinks/bottle/specialwhiskey = 4)
- contraband = list(/obj/item/weapon/reagent_containers/food/drinks/tea = 10)
+ products = list(/obj/item/weapon/reagent_containers/food/drinks/glass2/square = 10,
+ /obj/item/weapon/reagent_containers/food/drinks/glass2/rocks = 10,
+ /obj/item/weapon/reagent_containers/food/drinks/glass2/shake = 10,
+ /obj/item/weapon/reagent_containers/food/drinks/glass2/cocktail = 10,
+ /obj/item/weapon/reagent_containers/food/drinks/glass2/shot = 10,
+ /obj/item/weapon/reagent_containers/food/drinks/glass2/pint = 10,
+ /obj/item/weapon/reagent_containers/food/drinks/glass2/mug = 10,
+ /obj/item/weapon/reagent_containers/food/drinks/glass2/wine = 10,
+ /obj/item/weapon/reagent_containers/food/drinks/bottle/gin = 5,
+ /obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe = 5,
+ /obj/item/weapon/reagent_containers/food/drinks/bottle/bluecuracao = 5,
+ /obj/item/weapon/reagent_containers/food/drinks/bottle/cognac = 5,
+ /obj/item/weapon/reagent_containers/food/drinks/bottle/grenadine = 5,
+ /obj/item/weapon/reagent_containers/food/drinks/bottle/kahlua = 5,
+ /obj/item/weapon/reagent_containers/food/drinks/bottle/melonliquor = 5,
+ /obj/item/weapon/reagent_containers/food/drinks/bottle/rum = 5,
+ /obj/item/weapon/reagent_containers/food/drinks/bottle/specialwhiskey = 5,
+ /obj/item/weapon/reagent_containers/food/drinks/bottle/tequilla = 5,
+ /obj/item/weapon/reagent_containers/food/drinks/bottle/vermouth = 5,
+ /obj/item/weapon/reagent_containers/food/drinks/bottle/vodka = 5,
+ /obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey = 5,
+ /obj/item/weapon/reagent_containers/food/drinks/bottle/wine = 5,
+ /obj/item/weapon/reagent_containers/food/drinks/bottle/small/ale = 15,
+ /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer = 15,
+ /obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice = 5,
+ /obj/item/weapon/reagent_containers/food/drinks/bottle/tomatojuice = 5,
+ /obj/item/weapon/reagent_containers/food/drinks/bottle/limejuice = 5,
+ /obj/item/weapon/reagent_containers/food/drinks/bottle/cream = 5,
+ /obj/item/weapon/reagent_containers/food/drinks/bottle/cola = 5,
+ /obj/item/weapon/reagent_containers/food/drinks/bottle/space_up = 5,
+ /obj/item/weapon/reagent_containers/food/drinks/bottle/space_mountain_wind = 5,
+ /obj/item/weapon/reagent_containers/food/drinks/cans/sodawater = 15,
+ /obj/item/weapon/reagent_containers/food/drinks/cans/tonic = 15,
+ /obj/item/weapon/reagent_containers/food/drinks/flask/barflask = 5,
+ /obj/item/weapon/reagent_containers/food/drinks/flask/vacuumflask = 5,
+ /obj/item/weapon/reagent_containers/food/drinks/ice = 10,
+ /obj/item/weapon/reagent_containers/food/drinks/tea = 15,
+ /obj/item/weapon/glass_extra/stick = 30,
+ /obj/item/weapon/glass_extra/straw = 30)
+ contraband = list()
vend_delay = 15
idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan.
product_slogans = "I hope nobody asks me for a bloody cup o' tea...;Alcohol is humanity's friend. Would you abandon a friend?;Quite delighted to serve you!;Is nobody thirsty on this station?"
@@ -730,6 +731,30 @@
/obj/item/weapon/reagent_containers/food/drinks/cans/iced_tea = 1,/obj/item/weapon/reagent_containers/food/drinks/cans/grape_juice = 1)
idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan.
+/obj/machinery/vending/fitness
+ name = "SweatMAX"
+ desc = "Fueled by your inner inadequacy!"
+ icon_state = "fitness"
+ products = list(/obj/item/weapon/reagent_containers/food/drinks/milk/smallcarton = 8,
+ /obj/item/weapon/reagent_containers/food/drinks/milk/smallcarton/chocolate = 8,
+ /obj/item/weapon/reagent_containers/food/drinks/glass2/fitnessflask/proteinshake = 8,
+ /obj/item/weapon/reagent_containers/food/drinks/glass2/fitnessflask = 8,
+ /obj/item/weapon/reagent_containers/food/snacks/candy/proteinbar = 8,
+ /obj/item/weapon/reagent_containers/food/snacks/liquidfood = 8,
+ /obj/item/weapon/reagent_containers/pill/diet = 8,
+ /obj/item/weapon/towel/random = 8)
+
+ prices = list(/obj/item/weapon/reagent_containers/food/drinks/milk/smallcarton = 3,
+ /obj/item/weapon/reagent_containers/food/drinks/milk/smallcarton/chocolate = 3,
+ /obj/item/weapon/reagent_containers/food/drinks/glass2/fitnessflask/proteinshake = 20,
+ /obj/item/weapon/reagent_containers/food/drinks/glass2/fitnessflask = 5,
+ /obj/item/weapon/reagent_containers/food/snacks/candy/proteinbar = 5,
+ /obj/item/weapon/reagent_containers/food/snacks/liquidfood = 5,
+ /obj/item/weapon/reagent_containers/pill/diet = 25,
+ /obj/item/weapon/towel/random = 40)
+
+ contraband = list(/obj/item/weapon/reagent_containers/syringe/steroid = 4)
+
//This one's from bay12
/obj/machinery/vending/cart
name = "PTech"
@@ -830,7 +855,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/weapon/reagent_containers/glass/fertilizer/ez = 35,/obj/item/weapon/reagent_containers/glass/fertilizer/l4z = 25,/obj/item/weapon/reagent_containers/glass/fertilizer/rh = 15,/obj/item/weapon/plantspray/pests = 20,
+ products = list(/obj/item/weapon/reagent_containers/glass/bottle/eznutrient = 6,/obj/item/weapon/reagent_containers/glass/bottle/left4zed = 4,/obj/item/weapon/reagent_containers/glass/bottle/robustharvest = 3,/obj/item/weapon/plantspray/pests = 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)
idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan.
@@ -847,7 +872,7 @@
/obj/item/seeds/sunflowerseed = 3,/obj/item/seeds/tomatoseed = 3,/obj/item/seeds/towermycelium = 3,/obj/item/seeds/wheatseed = 3,/obj/item/seeds/appleseed = 3,
/obj/item/seeds/poppyseed = 3,/obj/item/seeds/sugarcaneseed = 3,/obj/item/seeds/ambrosiavulgarisseed = 3,/obj/item/seeds/peanutseed = 3,/obj/item/seeds/whitebeetseed = 3,/obj/item/seeds/watermelonseed = 3,/obj/item/seeds/limeseed = 3,
/obj/item/seeds/lemonseed = 3,/obj/item/seeds/orangeseed = 3,/obj/item/seeds/grassseed = 3,/obj/item/seeds/cocoapodseed = 3,/obj/item/seeds/plumpmycelium = 2,
- /obj/item/seeds/cabbageseed = 3,/obj/item/seeds/grapeseed = 3,/obj/item/seeds/pumpkinseed = 3,/obj/item/seeds/cherryseed = 3,/obj/item/seeds/plastiseed = 3,/obj/item/seeds/riceseed = 3)
+ /obj/item/seeds/cabbageseed = 3,/obj/item/seeds/grapeseed = 3,/obj/item/seeds/pumpkinseed = 3,/obj/item/seeds/cherryseed = 3,/obj/item/seeds/plastiseed = 3,/obj/item/seeds/riceseed = 3,/obj/item/seeds/lavenderseed = 3)
contraband = list(/obj/item/seeds/amanitamycelium = 2,/obj/item/seeds/glowshroom = 2,/obj/item/seeds/libertymycelium = 2,/obj/item/seeds/mtearseed = 2,
/obj/item/seeds/nettleseed = 2,/obj/item/seeds/reishimycelium = 2,/obj/item/seeds/reishimycelium = 2,/obj/item/seeds/shandseed = 2,)
premium = list(/obj/item/toy/waterflower = 1)
@@ -870,7 +895,7 @@
for(var/entry in current_list[1])
var/obj/item/seeds/S = new entry(src)
var/name = S.name
- var/datum/data/vending_product/product = new/datum/data/vending_product(entry, name)
+ var/datum/stored_item/vending_product/product = new/datum/stored_item/vending_product(src, entry, name)
product.price = (entry in src.prices) ? src.prices[entry] : 0
product.amount = (current_list[1][entry]) ? current_list[1][entry] : 1
@@ -893,16 +918,37 @@
desc = "A kitchen and restaurant equipment vendor."
product_ads = "Mm, food stuffs!;Food and food accessories.;Get your plates!;You like forks?;I like forks.;Woo, utensils.;You don't really need these..."
icon_state = "dinnerware"
- products = list(/obj/item/weapon/tray = 8,/obj/item/weapon/material/kitchen/utensil/fork = 6, /obj/item/weapon/material/kitchen/utensil/knife = 6, /obj/item/weapon/material/kitchen/utensil/spoon = 6, /obj/item/weapon/material/knife = 3,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass = 8,/obj/item/clothing/suit/chef/classic = 2)
- contraband = list(/obj/item/weapon/material/kitchen/rollingpin = 2, /obj/item/weapon/material/knife/butch = 2)
+ products = list(
+ /obj/item/weapon/tray = 8,
+ /obj/item/weapon/material/kitchen/utensil/fork = 6,
+ /obj/item/weapon/material/kitchen/utensil/knife = 6,
+ /obj/item/weapon/material/kitchen/utensil/spoon = 6,
+ /obj/item/weapon/material/knife = 3,
+ /obj/item/weapon/material/kitchen/rollingpin = 2,
+ /obj/item/weapon/reagent_containers/food/drinks/glass2/square = 8,
+ /obj/item/weapon/reagent_containers/food/drinks/glass2/shake = 8,
+ /obj/item/weapon/glass_extra/stick = 15,
+ /obj/item/weapon/glass_extra/straw = 15,
+ /obj/item/clothing/suit/chef/classic = 2,
+ /obj/item/weapon/storage/toolbox/lunchbox = 3,
+ /obj/item/weapon/storage/toolbox/lunchbox/heart = 3,
+ /obj/item/weapon/storage/toolbox/lunchbox/cat = 3,
+ /obj/item/weapon/storage/toolbox/lunchbox/nt = 3,
+ /obj/item/weapon/storage/toolbox/lunchbox/mars = 3,
+ /obj/item/weapon/storage/toolbox/lunchbox/cti = 3,
+ /obj/item/weapon/storage/toolbox/lunchbox/nymph = 3,
+ /obj/item/weapon/storage/toolbox/lunchbox/syndicate = 3)
+
+
+ contraband = list(/obj/item/weapon/material/knife/butch = 2)
/obj/machinery/vending/sovietsoda
name = "BODA"
desc = "An old sweet water vending machine,how did this end up here?"
icon_state = "sovietsoda"
product_ads = "For Tsar and Country.;Have you fulfilled your nutrition quota today?;Very nice!;We are simple people, for this is all we eat.;If there is a person, there is a problem. If there is no person, then there is no problem."
- products = list(/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/soda = 30)
- contraband = list(/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/cola = 20)
+ products = list(/obj/item/weapon/reagent_containers/food/drinks/bottle/space_up = 30) // TODO Russian soda can
+ contraband = list(/obj/item/weapon/reagent_containers/food/drinks/bottle/cola = 20) // TODO Russian cola can
idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan.
/obj/machinery/vending/tool
@@ -912,8 +958,10 @@
icon_deny = "tool-deny"
//req_access = list(access_maint_tunnels) //Maintenance access
products = list(/obj/item/stack/cable_coil/random = 10,/obj/item/weapon/crowbar = 5,/obj/item/weapon/weldingtool = 3,/obj/item/weapon/wirecutters = 5,
- /obj/item/weapon/wrench = 5,/obj/item/device/analyzer = 5,/obj/item/device/t_scanner = 5,/obj/item/weapon/screwdriver = 5)
- contraband = list(/obj/item/weapon/weldingtool/hugetank = 2,/obj/item/clothing/gloves/fyellow = 2)
+ /obj/item/weapon/wrench = 5,/obj/item/device/analyzer = 5,/obj/item/device/t_scanner = 5,/obj/item/weapon/screwdriver = 5,
+ /obj/item/device/flashlight/glowstick = 3, /obj/item/device/flashlight/glowstick/red = 3, /obj/item/device/flashlight/glowstick/blue = 3,
+ /obj/item/device/flashlight/glowstick/orange =3, /obj/item/device/flashlight/glowstick/yellow = 3)
+ contraband = list(/obj/item/weapon/weldingtool/hugetank = 2,/obj/item/clothing/gloves/fyellow = 2, )
premium = list(/obj/item/clothing/gloves/yellow = 1)
/obj/machinery/vending/engivend
@@ -922,9 +970,20 @@
icon_state = "engivend"
icon_deny = "engivend-deny"
req_access = list(access_engine_equip)
- products = list(/obj/item/clothing/glasses/meson = 2,/obj/item/device/multitool = 4,/obj/item/weapon/airlock_electronics = 10,/obj/item/weapon/module/power_control = 10,/obj/item/weapon/airalarm_electronics = 10,/obj/item/weapon/cell/high = 10)
+ products = list(/obj/item/clothing/glasses/meson = 2,/obj/item/device/multitool = 4,/obj/item/weapon/cell/high = 10,
+ /obj/item/weapon/airlock_electronics = 10,/obj/item/weapon/module/power_control = 10,
+ /obj/item/weapon/circuitboard/airalarm = 10,/obj/item/weapon/circuitboard/firealarm = 10,/obj/item/weapon/circuitboard/status_display = 2,
+ /obj/item/weapon/circuitboard/ai_status_display = 2,/obj/item/weapon/circuitboard/newscaster = 2,/obj/item/weapon/circuitboard/holopad = 2,
+ /obj/item/weapon/circuitboard/intercom = 4,/obj/item/weapon/circuitboard/security/telescreen/entertainment = 4,
+ /obj/item/weapon/stock_parts/motor = 2,/obj/item/weapon/stock_parts/spring = 2,/obj/item/weapon/stock_parts/gear = 2,
+ /obj/item/weapon/circuitboard/atm,/obj/item/weapon/circuitboard/guestpass,/obj/item/weapon/circuitboard/keycard_auth,
+ /obj/item/weapon/circuitboard/photocopier,/obj/item/weapon/circuitboard/fax,/obj/item/weapon/circuitboard/request,
+ /obj/item/weapon/circuitboard/microwave,/obj/item/weapon/circuitboard/washing,/obj/item/weapon/circuitboard/scanner_console,
+ /obj/item/weapon/circuitboard/sleeper_console,/obj/item/weapon/circuitboard/body_scanner,/obj/item/weapon/circuitboard/sleeper,
+ /obj/item/weapon/circuitboard/dna_analyzer)
contraband = list(/obj/item/weapon/cell/potato = 3)
premium = list(/obj/item/weapon/storage/belt/utility = 3)
+ product_records = list()
//This one's from bay12
/obj/machinery/vending/engineering
@@ -955,4 +1014,3 @@
/obj/item/weapon/scalpel = 2,/obj/item/weapon/circular_saw = 2,/obj/item/weapon/tank/anesthetic = 2,/obj/item/clothing/mask/breath/medical = 5,
/obj/item/weapon/screwdriver = 5,/obj/item/weapon/crowbar = 5)
//everything after the power cell had no amounts, I improvised. -Sayu
-
diff --git a/code/game/machinery/wall_frames.dm b/code/game/machinery/wall_frames.dm
index c9182586c8..701d4ebab2 100644
--- a/code/game/machinery/wall_frames.dm
+++ b/code/game/machinery/wall_frames.dm
@@ -1,13 +1,14 @@
/obj/item/frame
- name = "frame"
- desc = "Used for building machines."
- icon = 'icons/obj/monitors.dmi'
- icon_state = "fire_bitem"
+ name = "frame parts"
+ desc = "Used for building frames."
+ icon = 'icons/obj/stock_parts.dmi'
+ icon_state = "frame_bitem"
flags = CONDUCT
- var/build_machine_type
- var/refund_amt = 2
+ var/build_machine_type = /obj/structure/frame
+ var/refund_amt = 5
var/refund_type = /obj/item/stack/material/steel
var/reverse = 0 //if resulting object faces opposite its dir (like light fixtures)
+ var/frame_type = null
/obj/item/frame/attackby(obj/item/weapon/W as obj, mob/user as mob)
if (istype(W, /obj/item/weapon/wrench))
@@ -16,7 +17,92 @@
return
..()
-/obj/item/frame/proc/try_build(turf/on_wall)
+/obj/item/frame/attack_self(mob/user as mob)
+ ..()
+ if(!build_machine_type)
+ return
+
+ if(!frame_type)
+ var/response = input(usr, "What kind of frame would you like to make?", "Frame type request", null) in list("Computer", "Machine", "Holopad", "Conveyor",
+ "Photocopier", "Fax", "Microwave",
+ "Recharger", "Washing Machine", "Grinder",
+ "Medical Console", "Medical Pod", "DNA Analyzer",
+ "Mass Driver",
+ "Cancel")
+
+ if(response == "Cancel")
+ return
+
+ frame_type = lowertext(response)
+
+ switch(response)
+ if("Holopad")
+ new /obj/item/stack/material/steel( usr.loc, 1 ) //holopads are smaller, they only need 4 sheets
+ if("Fax")
+ new /obj/item/stack/material/steel( usr.loc, 2 ) //faxes are smaller, they only need 3 sheets
+ if("Microwave")
+ new /obj/item/stack/material/steel( usr.loc, 1 ) //microwaves are smaller, they only need 4 sheets
+ if("Recharger")
+ new /obj/item/stack/material/steel( usr.loc, 2 ) //rechargers are smaller, they only need 3 sheets
+ if("Washing Machine")
+ frame_type = "washing"
+ if("Grinder")
+ new /obj/item/stack/material/steel( usr.loc, 2 ) //grinders are smaller, they only need 3 sheets
+ if("Medical Console")
+ frame_type = "console"
+ if("Medical Pod")
+ frame_type = "medpod"
+ if("DNA Analyzer")
+ frame_type = "dna_analyzer"
+ if("Mass Driver")
+ frame_type = "massdriver"
+
+ var/ndir
+ ndir = usr.dir
+ if (!(ndir in cardinal))
+ return
+
+ var/obj/machinery/M = new build_machine_type(get_turf(src.loc), ndir, 1, frame_type)
+ M.fingerprints = src.fingerprints
+ M.fingerprintshidden = src.fingerprintshidden
+ M.fingerprintslast = src.fingerprintslast
+ qdel(src)
+
+/obj/item/frame/proc/try_build(turf/on_wall, mob/user as mob)
+ if(!frame_type)
+ var/response = input(usr, "What kind of frame would you like to make?", "Frame type request", null) in list("Fire Alarm", "Air Alarm", "Display", "Newscaster",
+ "ATM", "Guest Pass Console", "Intercom", "Keycard Authenticator",
+ "Wall Charger", "Supply Request Console",
+ "Cancel")
+
+ if(response == "Cancel")
+ return
+
+ frame_type = lowertext(response)
+
+ switch(response)
+ if("Fire Alarm")
+ frame_type = "firealarm"
+ new /obj/item/stack/material/steel( usr.loc, 3 ) //fire alarms are smaller, they only need 2 sheets
+ if("Air Alarm")
+ frame_type = "airalarm"
+ new /obj/item/stack/material/steel( usr.loc, 3 ) //air alarms are smaller, they only need 2 sheets
+ if("Intercom")
+ new /obj/item/stack/material/steel( usr.loc, 3 ) //intercoms are smaller, they only need 2 sheets
+ if("Newscaster")
+ new /obj/item/stack/material/steel( usr.loc, 2 ) //newscasters are smaller, they only need 3 sheets
+ if("Guest Pass Console")
+ frame_type = "guestpass"
+ new /obj/item/stack/material/steel( usr.loc, 3 ) //guestpass consoles are smaller, they only need 2 sheets
+ if("Keycard Authenticator")
+ frame_type = "keycard"
+ new /obj/item/stack/material/steel( usr.loc, 4 ) //keycard authenticators are smaller, they only need 1 sheets
+ if("Wall Charger")
+ frame_type = "wrecharger"
+ new /obj/item/stack/material/steel( usr.loc, 2 ) //wall rechargers are smaller, they only need 3 sheets
+ if("Supply Request Console")
+ frame_type = "request"
+
if(!build_machine_type)
return
@@ -35,7 +121,7 @@
var/turf/loc = get_turf(usr)
var/area/A = loc.loc
if (!istype(loc, /turf/simulated/floor))
- usr << "\The [src] Alarm cannot be placed on this spot. "
+ usr << "\The frame cannot be placed on this spot. "
return
if (A.requires_power == 0 || A.name == "Space")
usr << "\The [src] Alarm cannot be placed in this area. "
@@ -44,23 +130,12 @@
if(gotwallitem(loc, ndir))
usr << "There's already an item on this wall! "
return
-
- var/obj/machinery/M = new build_machine_type(loc, ndir, 1)
+ var/obj/machinery/M = new build_machine_type(loc, ndir, 1, frame_type)
M.fingerprints = src.fingerprints
M.fingerprintshidden = src.fingerprintshidden
M.fingerprintslast = src.fingerprintslast
qdel(src)
-/obj/item/frame/fire_alarm
- name = "fire alarm frame"
- desc = "Used for building fire alarms."
- build_machine_type = /obj/machinery/firealarm
-
-/obj/item/frame/air_alarm
- name = "air alarm frame"
- desc = "Used for building air alarms."
- build_machine_type = /obj/machinery/alarm
-
/obj/item/frame/light
name = "light fixture frame"
desc = "Used for building lights."
@@ -68,9 +143,48 @@
icon_state = "tube-construct-item"
build_machine_type = /obj/machinery/light_construct
reverse = 1
+ frame_type = 1
/obj/item/frame/light/small
name = "small light fixture frame"
icon_state = "bulb-construct-item"
refund_amt = 1
build_machine_type = /obj/machinery/light_construct/small
+ frame_type = 1
+
+/obj/item/frame/extinguisher_cabinet
+ name = "extinguisher cabinet frame"
+ desc = "Used for building fire extinguisher cabinets."
+ icon = 'icons/obj/closet.dmi'
+ icon_state = "extinguisher_empty"
+ refund_amt = 4
+ build_machine_type = /obj/structure/extinguisher_cabinet
+ frame_type = 1
+
+/obj/item/frame/noticeboard
+ name = "noticeboard frame"
+ desc = "Used for building noticeboards."
+ icon = 'icons/obj/stationobjs.dmi'
+ icon_state = "nboard00"
+ refund_amt = 4
+ refund_type = /obj/item/stack/material/wood
+ build_machine_type = /obj/structure/noticeboard
+ frame_type = 1
+
+/obj/item/frame/mirror
+ name = "mirror frame"
+ desc = "Used for building mirrors."
+ icon = 'icons/obj/watercloset.dmi'
+ icon_state = "mirror_frame"
+ refund_amt = 1
+ build_machine_type = /obj/structure/mirror
+ frame_type = 1
+
+/obj/item/frame/fireaxe_cabinet
+ name = "fire axe cabinet frame"
+ desc = "Used for building fire axe cabinets."
+ icon = 'icons/obj/closet.dmi'
+ icon_state = "fireaxe0101"
+ refund_amt = 4
+ build_machine_type = /obj/structure/closet/fireaxecabinet
+ frame_type = 1
\ No newline at end of file
diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm
index a22482a416..ad8976e121 100644
--- a/code/game/machinery/washing_machine.dm
+++ b/code/game/machinery/washing_machine.dm
@@ -4,6 +4,7 @@
icon_state = "wm_10"
density = 1
anchored = 1.0
+ circuit = /obj/item/weapon/circuitboard/washing
var/state = 1
//1 = empty, open door
//2 = empty, closed door
@@ -13,14 +14,20 @@
//6 = blood, open door
//7 = blood, closed door
//8 = blood, running
- var/panel = 0
- //0 = closed
- //1 = open
var/hacked = 1 //Bleh, screw hacking, let's have it hacked by default.
//0 = not hacked
//1 = hacked
var/gibs_ready = 0
var/obj/crayon
+ var/list/washing = list()
+
+/obj/machinery/washing_machine/New()
+ circuit = new circuit(src)
+ component_parts = list()
+ component_parts += new /obj/item/weapon/stock_parts/motor(src)
+ component_parts += new /obj/item/weapon/stock_parts/gear(src)
+ component_parts += new /obj/item/weapon/stock_parts/gear(src)
+ RefreshParts()
/obj/machinery/washing_machine/verb/start()
set name = "Start Washing"
@@ -34,25 +41,25 @@
usr << "The washing machine cannot run in this state."
return
- if( locate(/mob,contents) )
+ if( locate(/mob,washing) )
state = 8
else
state = 5
update_icon()
sleep(200)
- for(var/atom/A in contents)
+ for(var/atom/A in washing)
A.clean_blood()
- for(var/obj/item/I in contents)
+ for(var/obj/item/I in washing)
I.decontaminate()
//Tanning!
- for(var/obj/item/stack/material/hairlesshide/HH in contents)
+ for(var/obj/item/stack/material/hairlesshide/HH in washing)
var/obj/item/stack/material/wetleather/WL = new(src)
WL.amount = HH.amount
qdel(HH)
- if( locate(/mob,contents) )
+ if( locate(/mob,washing) )
state = 7
gibs_ready = 1
else
@@ -70,9 +77,14 @@
/obj/machinery/washing_machine/update_icon()
- icon_state = "wm_[state][panel]"
+ icon_state = "wm_[state][panel_open]"
/obj/machinery/washing_machine/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ if(state == 2 && washing.len < 1)
+ if(default_deconstruction_screwdriver(user, W))
+ return
+ if(default_deconstruction_crowbar(user, W))
+ return
/*if(istype(W,/obj/item/weapon/screwdriver))
panel = !panel
user << "You [panel ? "open" : "close"] the [src]'s maintenance panel "*/
@@ -142,10 +154,11 @@
user << "This item does not fit."
return
- if(contents.len < 5)
+ if(washing.len < 5)
if ( state in list(1, 3) )
user.drop_item()
W.loc = src
+ washing += W
state = 3
else
user << "You can't put the item in right now. "
@@ -161,15 +174,17 @@
state = 2
if(2)
state = 1
- for(var/atom/movable/O in contents)
+ for(var/atom/movable/O in washing)
O.loc = src.loc
+ washing.Cut()
if(3)
state = 4
if(4)
state = 3
- for(var/atom/movable/O in contents)
+ for(var/atom/movable/O in washing)
O.loc = src.loc
crayon = null
+ washing.Cut()
state = 1
if(5)
user << "The [src] is busy. "
@@ -178,13 +193,13 @@
if(7)
if(gibs_ready)
gibs_ready = 0
- if(locate(/mob,contents))
- var/mob/M = locate(/mob,contents)
+ if(locate(/mob,washing))
+ var/mob/M = locate(/mob,washing)
M.gib()
- for(var/atom/movable/O in contents)
+ for(var/atom/movable/O in washing)
O.loc = src.loc
crayon = null
state = 1
+ washing.Cut()
-
- update_icon()
+ update_icon()
\ No newline at end of file
diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm
index 4721e84440..4edaae81aa 100644
--- a/code/game/mecha/equipment/weapons/weapons.dm
+++ b/code/game/mecha/equipment/weapons/weapons.dm
@@ -48,7 +48,7 @@
/obj/item/mecha_parts/mecha_equipment/weapon/proc/Fire(atom/A, atom/target)
var/obj/item/projectile/P = A
- P.launch(target)
+ P.launch(target)
/obj/item/mecha_parts/mecha_equipment/weapon/energy
name = "general energy weapon"
@@ -95,7 +95,7 @@
energy_drain = 120
origin_tech = list(TECH_MATERIAL = 3, TECH_COMBAT = 6, TECH_POWER = 4)
projectile = /obj/item/projectile/beam/pulse/heavy
- fire_sound = 'sound/weapons/marauder.ogg'
+ fire_sound = 'sound/weapons/gauss_shoot.ogg'
/obj/item/projectile/beam/pulse/heavy
name = "heavy pulse laser"
@@ -205,7 +205,7 @@
icon_state = "mecha_uac2"
equip_cooldown = 10
projectile = /obj/item/projectile/bullet/pistol/medium
- fire_sound = 'sound/weapons/Gunshot.ogg'
+ fire_sound = 'sound/weapons/machinegun.ogg'
projectiles = 300
projectiles_per_shot = 3
deviation = 0.3
@@ -218,7 +218,7 @@
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/Fire(atom/movable/AM, atom/target, turf/aimloc)
AM.throw_at(target,missile_range, missile_speed, chassis)
-
+
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flare
name = "\improper BNI Flare Launcher"
icon_state = "mecha_flaregun"
@@ -231,7 +231,7 @@
missile_speed = 1
missile_range = 15
required_type = /obj/mecha //Why restrict it to just mining or combat mechs?
-
+
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flare/Fire(atom/movable/AM, atom/target, turf/aimloc)
var/obj/item/device/flashlight/flare/fired = AM
fired.ignite()
@@ -241,7 +241,7 @@
name = "\improper SRM-8 missile rack"
icon_state = "mecha_missilerack"
projectile = /obj/item/missile
- fire_sound = 'sound/effects/bang.ogg'
+ fire_sound = 'sound/weapons/rpg.ogg'
projectiles = 8
projectile_energy_cost = 1000
equip_cooldown = 60
diff --git a/code/game/mecha/mech_bay.dm b/code/game/mecha/mech_bay.dm
index cf50e69525..23c30d3a3d 100644
--- a/code/game/mecha/mech_bay.dm
+++ b/code/game/mecha/mech_bay.dm
@@ -5,6 +5,7 @@
icon_state = "recharge_floor"
density = 0
layer = TURF_LAYER + 0.1
+ circuit = /obj/item/weapon/circuitboard/mech_recharger
var/obj/mecha/charging = null
var/charge = 45
@@ -14,7 +15,6 @@
..()
component_parts = list()
- component_parts += new /obj/item/weapon/circuitboard/mech_recharger(src)
component_parts += new /obj/item/weapon/stock_parts/capacitor(src)
component_parts += new /obj/item/weapon/stock_parts/capacitor(src)
component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm
index 0685e6efd2..ee000d60be 100644
--- a/code/game/mecha/mech_fabricator.dm
+++ b/code/game/mecha/mech_fabricator.dm
@@ -2,13 +2,14 @@
icon = 'icons/obj/robotics.dmi'
icon_state = "fab-idle"
name = "Exosuit Fabricator"
- desc = "A machine used for construction of robotcs and mechas."
+ desc = "A machine used for construction of mechas."
density = 1
anchored = 1
use_power = 1
idle_power_usage = 20
active_power_usage = 5000
req_access = list(access_robotics)
+ circuit = /obj/item/weapon/circuitboard/mechfab
var/speed = 1
var/mat_efficiency = 1
@@ -22,14 +23,12 @@
var/list/categories = list()
var/category = null
- var/manufacturer = null
var/sync_message = ""
/obj/machinery/mecha_part_fabricator/New()
..()
-
+ circuit = new circuit(src)
component_parts = list()
- component_parts += new /obj/item/weapon/circuitboard/mechfab(src)
component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
@@ -41,7 +40,6 @@
return
/obj/machinery/mecha_part_fabricator/initialize()
- manufacturer = basic_robolimb.company
update_categories()
/obj/machinery/mecha_part_fabricator/process()
@@ -89,7 +87,7 @@
return
ui_interact(user)
-/obj/machinery/mecha_part_fabricator/ui_interact(var/mob/user, var/ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
+/obj/machinery/mecha_part_fabricator/ui_interact(var/mob/user, var/ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
var/data[0]
var/datum/design/current = queue.len ? queue[1] : null
@@ -99,13 +97,6 @@
data["buildable"] = get_build_options()
data["category"] = category
data["categories"] = categories
- if(all_robolimbs)
- var/list/T = list()
- for(var/A in all_robolimbs)
- var/datum/robolimb/R = all_robolimbs[A]
- T += list(list("id" = A, "company" = R.company))
- data["manufacturers"] = T
- data["manufacturer"] = manufacturer
data["materials"] = get_materials()
data["maxres"] = res_max_amount
data["sync"] = sync_message
@@ -133,10 +124,6 @@
if(href_list["category"] in categories)
category = href_list["category"]
- if(href_list["manufacturer"])
- if(href_list["manufacturer"] in all_robolimbs)
- manufacturer = href_list["manufacturer"]
-
if(href_list["eject"])
eject_materials(href_list["eject"], text2num(href_list["amount"]))
@@ -158,43 +145,32 @@
if(default_part_replacement(user, I))
return
- var/material
- switch(I.type)
- if(/obj/item/stack/material/gold)
- material = "gold"
- if(/obj/item/stack/material/silver)
- material = "silver"
- if(/obj/item/stack/material/diamond)
- material = "diamond"
- if(/obj/item/stack/material/phoron)
- material = "phoron"
- if(/obj/item/stack/material/steel)
- material = DEFAULT_WALL_MATERIAL
- if(/obj/item/stack/material/glass)
- material = "glass"
- if(/obj/item/stack/material/uranium)
- material = "uranium"
+ if(istype(I,/obj/item/stack/material))
+ var/obj/item/stack/material/S = I
+ if(!(S.material.name in materials))
+ user << "The [src] doesn't accept [S.material]! "
+ return
+
+ var/sname = "[S.name]"
+ var/amnt = S.perunit
+ if(materials[S.material.name] + amnt <= res_max_amount)
+ if(S && S.amount >= 1)
+ var/count = 0
+ overlays += "fab-load-metal"
+ spawn(10)
+ overlays -= "fab-load-metal"
+ while(materials[S.material.name] + amnt <= res_max_amount && S.amount >= 1)
+ materials[S.material.name] += amnt
+ S.use(1)
+ count++
+ user << "You insert [count] [sname] into the fabricator."
+ update_busy()
else
- return ..()
+ user << "The fabricator cannot hold more [sname]."
- var/obj/item/stack/material/stack = I
- var/sname = "[stack.name]"
- var/amnt = stack.perunit
+ return
- if(materials[material] + amnt <= res_max_amount)
- if(stack && stack.amount >= 1)
- var/count = 0
- overlays += "fab-load-metal"
- spawn(10)
- overlays -= "fab-load-metal"
- while(materials[material] + amnt <= res_max_amount && stack.amount >= 1)
- materials[material] += amnt
- stack.use(1)
- count++
- user << "You insert [count] [sname] into the fabricator."
- update_busy()
- else
- user << "The fabricator cannot hold more [sname]."
+ ..()
/obj/machinery/mecha_part_fabricator/emag_act(var/remaining_charges, var/mob/user)
switch(emagged)
@@ -254,7 +230,7 @@
for(var/M in D.materials)
materials[M] = max(0, materials[M] - D.materials[M] * mat_efficiency)
if(D.build_path)
- var/obj/new_item = D.Fabricate(loc, src)
+ var/obj/new_item = D.Fabricate(get_step(get_turf(src), src.dir), src)
visible_message("\The [src] pings, indicating that \the [D] is complete.", "You hear a ping.")
if(mat_efficiency != 1)
if(new_item.matter && new_item.matter.len > 0)
@@ -301,36 +277,20 @@
/obj/machinery/mecha_part_fabricator/proc/eject_materials(var/material, var/amount) // 0 amount = 0 means ejecting a full stack; -1 means eject everything
var/recursive = amount == -1 ? 1 : 0
- material = lowertext(material)
- var/mattype
- switch(material)
- if(DEFAULT_WALL_MATERIAL)
- mattype = /obj/item/stack/material/steel
- if("glass")
- mattype = /obj/item/stack/material/glass
- if("gold")
- mattype = /obj/item/stack/material/gold
- if("silver")
- mattype = /obj/item/stack/material/silver
- if("diamond")
- mattype = /obj/item/stack/material/diamond
- if("phoron")
- mattype = /obj/item/stack/material/phoron
- if("uranium")
- mattype = /obj/item/stack/material/uranium
- else
- return
- var/obj/item/stack/material/S = new mattype(loc)
+ var/matstring = lowertext(material)
+ var/material/M = get_material_by_name(matstring)
+
+ var/obj/item/stack/material/S = M.place_sheet(get_turf(src))
if(amount <= 0)
amount = S.max_amount
- var/ejected = min(round(materials[material] / S.perunit), amount)
+ var/ejected = min(round(materials[matstring] / S.perunit), amount)
S.amount = min(ejected, amount)
if(S.amount <= 0)
qdel(S)
return
- materials[material] -= ejected * S.perunit
- if(recursive && materials[material] >= S.perunit)
- eject_materials(material, -1)
+ materials[matstring] -= ejected * S.perunit
+ if(recursive && materials[matstring] >= S.perunit)
+ eject_materials(matstring, -1)
update_busy()
/obj/machinery/mecha_part_fabricator/proc/sync()
diff --git a/code/game/mecha/mech_prosthetics.dm b/code/game/mecha/mech_prosthetics.dm
new file mode 100644
index 0000000000..588fd402f3
--- /dev/null
+++ b/code/game/mecha/mech_prosthetics.dm
@@ -0,0 +1,333 @@
+/obj/machinery/pros_fabricator
+ icon = 'icons/obj/robotics.dmi'
+ icon_state = "fab-idle"
+ name = "Prosthetics Fabricator"
+ desc = "A machine used for construction of prosthetics."
+ density = 1
+ anchored = 1
+ use_power = 1
+ idle_power_usage = 20
+ active_power_usage = 5000
+ req_access = list(access_robotics)
+ circuit = /obj/item/weapon/circuitboard/prosthetics
+
+ var/speed = 1
+ var/mat_efficiency = 1
+ var/list/materials = list(DEFAULT_WALL_MATERIAL = 0, "glass" = 0, "gold" = 0, "silver" = 0, "diamond" = 0, "phoron" = 0, "uranium" = 0, "plasteel" = 0)
+ var/res_max_amount = 200000
+
+ var/datum/research/files
+ var/list/datum/design/queue = list()
+ var/progress = 0
+ var/busy = 0
+
+ var/list/categories = list()
+ var/category = null
+ var/manufacturer = null
+ var/sync_message = ""
+
+/obj/machinery/pros_fabricator/New()
+ ..()
+ circuit = new circuit(src)
+ component_parts = list()
+ component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
+ component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
+ component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
+ component_parts += new /obj/item/weapon/stock_parts/micro_laser(src)
+ component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
+ RefreshParts()
+
+ files = new /datum/research(src) //Setup the research data holder.
+ return
+
+/obj/machinery/pros_fabricator/initialize()
+ manufacturer = basic_robolimb.company
+ update_categories()
+
+/obj/machinery/pros_fabricator/process()
+ ..()
+ if(stat)
+ return
+ if(busy)
+ use_power = 2
+ progress += speed
+ check_build()
+ else
+ use_power = 1
+ update_icon()
+
+/obj/machinery/pros_fabricator/update_icon()
+ overlays.Cut()
+ if(panel_open)
+ icon_state = "fab-o"
+ else
+ icon_state = "fab-idle"
+ if(busy)
+ overlays += "fab-active"
+
+/obj/machinery/pros_fabricator/dismantle()
+ for(var/f in materials)
+ eject_materials(f, -1)
+ ..()
+
+/obj/machinery/pros_fabricator/RefreshParts()
+ res_max_amount = 0
+ for(var/obj/item/weapon/stock_parts/matter_bin/M in component_parts)
+ res_max_amount += M.rating * 100000 // 200k -> 600k
+ var/T = 0
+ for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts)
+ T += M.rating
+ mat_efficiency = 1 - (T - 1) / 4 // 1 -> 0.5
+ for(var/obj/item/weapon/stock_parts/micro_laser/M in component_parts) // Not resetting T is intended; speed is affected by both
+ T += M.rating
+ speed = T / 2 // 1 -> 3
+
+/obj/machinery/pros_fabricator/attack_hand(var/mob/user)
+ if(..())
+ return
+ if(!allowed(user))
+ return
+ ui_interact(user)
+
+/obj/machinery/pros_fabricator/ui_interact(var/mob/user, var/ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
+ var/data[0]
+
+ var/datum/design/current = queue.len ? queue[1] : null
+ if(current)
+ data["current"] = current.name
+ data["queue"] = get_queue_names()
+ data["buildable"] = get_build_options()
+ data["category"] = category
+ data["categories"] = categories
+ if(all_robolimbs)
+ var/list/T = list()
+ for(var/A in all_robolimbs)
+ var/datum/robolimb/R = all_robolimbs[A]
+ if(R.unavailable_to_build) continue
+ T += list(list("id" = A, "company" = R.company))
+ data["manufacturers"] = T
+ data["manufacturer"] = manufacturer
+ data["materials"] = get_materials()
+ data["maxres"] = res_max_amount
+ data["sync"] = sync_message
+ if(current)
+ data["builtperc"] = round((progress / current.time) * 100)
+
+ ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
+ if(!ui)
+ ui = new(user, src, ui_key, "mechfab.tmpl", "Prosthetics Fab UI", 800, 600)
+ ui.set_initial_data(data)
+ ui.open()
+ ui.set_auto_update(1)
+
+/obj/machinery/pros_fabricator/Topic(href, href_list)
+ if(..())
+ return
+
+ if(href_list["build"])
+ add_to_queue(text2num(href_list["build"]))
+
+ if(href_list["remove"])
+ remove_from_queue(text2num(href_list["remove"]))
+
+ if(href_list["category"])
+ if(href_list["category"] in categories)
+ category = href_list["category"]
+
+ if(href_list["manufacturer"])
+ if(href_list["manufacturer"] in all_robolimbs)
+ manufacturer = href_list["manufacturer"]
+
+ if(href_list["eject"])
+ eject_materials(href_list["eject"], text2num(href_list["amount"]))
+
+ if(href_list["sync"])
+ sync()
+ else
+ sync_message = ""
+
+ return 1
+
+/obj/machinery/pros_fabricator/attackby(var/obj/item/I, var/mob/user)
+ if(busy)
+ user << "\The [src] is busy. Please wait for completion of previous operation. "
+ return 1
+ if(default_deconstruction_screwdriver(user, I))
+ return
+ if(default_deconstruction_crowbar(user, I))
+ return
+ if(default_part_replacement(user, I))
+ return
+
+ if(istype(I,/obj/item/weapon/disk/limb))
+ var/obj/item/weapon/disk/limb/D = I
+ if(!D.company || !(D.company in all_robolimbs))
+ user << "This disk seems to be corrupted! "
+ else
+ user << "Installing blueprint files for [D.company]... "
+ if(do_after(user,50,src))
+ var/datum/robolimb/R = all_robolimbs[D.company]
+ R.unavailable_to_build = 0
+ user << "Installed [D.company] blueprints! "
+ qdel(I)
+ return
+
+ if(istype(I,/obj/item/stack/material))
+ var/obj/item/stack/material/S = I
+ if(!(S.material.name in materials))
+ user << "The [src] doesn't accept [S.material]! "
+ return
+
+ var/sname = "[S.name]"
+ var/amnt = S.perunit
+ if(materials[S.material.name] + amnt <= res_max_amount)
+ if(S && S.amount >= 1)
+ var/count = 0
+ overlays += "fab-load-metal"
+ spawn(10)
+ overlays -= "fab-load-metal"
+ while(materials[S.material.name] + amnt <= res_max_amount && S.amount >= 1)
+ materials[S.material.name] += amnt
+ S.use(1)
+ count++
+ user << "You insert [count] [sname] into the fabricator."
+ update_busy()
+ else
+ user << "The fabricator cannot hold more [sname]."
+
+ return
+
+ ..()
+
+/obj/machinery/pros_fabricator/emag_act(var/remaining_charges, var/mob/user)
+ switch(emagged)
+ if(0)
+ emagged = 0.5
+ visible_message("\icon[src] [src] beeps: \"DB error \[Code 0x00F1\]\"")
+ sleep(10)
+ visible_message("\icon[src] [src] beeps: \"Attempting auto-repair\"")
+ sleep(15)
+ visible_message("\icon[src] [src] beeps: \"User DB corrupted \[Code 0x00FA\]. Truncating data structure...\"")
+ sleep(30)
+ visible_message("\icon[src] [src] beeps: \"User DB truncated. Please contact your [company_name] system operator for future assistance.\"")
+ req_access = null
+ emagged = 1
+ return 1
+ if(0.5)
+ visible_message("\icon[src] [src] beeps: \"DB not responding \[Code 0x0003\]...\"")
+ if(1)
+ visible_message("\icon[src] [src] beeps: \"No records in User DB\"")
+
+/obj/machinery/pros_fabricator/proc/update_busy()
+ if(queue.len)
+ if(can_build(queue[1]))
+ busy = 1
+ else
+ busy = 0
+ else
+ busy = 0
+
+/obj/machinery/pros_fabricator/proc/add_to_queue(var/index)
+ var/datum/design/D = files.known_designs[index]
+ queue += D
+ update_busy()
+
+/obj/machinery/pros_fabricator/proc/remove_from_queue(var/index)
+ if(index == 1)
+ progress = 0
+ queue.Cut(index, index + 1)
+ update_busy()
+
+/obj/machinery/pros_fabricator/proc/can_build(var/datum/design/D)
+ for(var/M in D.materials)
+ if(materials[M] < D.materials[M])
+ return 0
+ return 1
+
+/obj/machinery/pros_fabricator/proc/check_build()
+ if(!queue.len)
+ progress = 0
+ return
+ var/datum/design/D = queue[1]
+ if(!can_build(D))
+ progress = 0
+ return
+ if(D.time > progress)
+ return
+ for(var/M in D.materials)
+ materials[M] = max(0, materials[M] - D.materials[M] * mat_efficiency)
+ if(D.build_path)
+ var/obj/new_item = D.Fabricate(get_step(get_turf(src), src.dir), src)
+ visible_message("\The [src] pings, indicating that \the [D] is complete.", "You hear a ping.")
+ if(mat_efficiency != 1)
+ if(new_item.matter && new_item.matter.len > 0)
+ for(var/i in new_item.matter)
+ new_item.matter[i] = new_item.matter[i] * mat_efficiency
+ remove_from_queue(1)
+
+/obj/machinery/pros_fabricator/proc/get_queue_names()
+ . = list()
+ for(var/i = 2 to queue.len)
+ var/datum/design/D = queue[i]
+ . += D.name
+
+/obj/machinery/pros_fabricator/proc/get_build_options()
+ . = list()
+ for(var/i = 1 to files.known_designs.len)
+ var/datum/design/D = files.known_designs[i]
+ if(D.build_path && (D.build_type & PROSFAB))
+ . += list(list("name" = D.name, "id" = i, "category" = D.category, "resourses" = get_design_resourses(D), "time" = get_design_time(D)))
+
+/obj/machinery/pros_fabricator/proc/get_design_resourses(var/datum/design/D)
+ var/list/F = list()
+ for(var/T in D.materials)
+ F += "[capitalize(T)]: [D.materials[T] * mat_efficiency]"
+ return english_list(F, and_text = ", ")
+
+/obj/machinery/pros_fabricator/proc/get_design_time(var/datum/design/D)
+ return time2text(round(10 * D.time / speed), "mm:ss")
+
+/obj/machinery/pros_fabricator/proc/update_categories()
+ categories = list()
+ for(var/datum/design/D in files.known_designs)
+ if(!D.build_path || !(D.build_type & PROSFAB))
+ continue
+ categories |= D.category
+ if(!category || !(category in categories))
+ category = categories[1]
+
+/obj/machinery/pros_fabricator/proc/get_materials()
+ . = list()
+ for(var/T in materials)
+ . += list(list("mat" = capitalize(T), "amt" = materials[T]))
+
+/obj/machinery/pros_fabricator/proc/eject_materials(var/material, var/amount) // 0 amount = 0 means ejecting a full stack; -1 means eject everything
+ var/recursive = amount == -1 ? 1 : 0
+ var/matstring = lowertext(material)
+ var/material/M = get_material_by_name(matstring)
+
+ var/obj/item/stack/material/S = M.place_sheet(get_turf(src))
+ if(amount <= 0)
+ amount = S.max_amount
+ var/ejected = min(round(materials[matstring] / S.perunit), amount)
+ S.amount = min(ejected, amount)
+ if(S.amount <= 0)
+ qdel(S)
+ return
+ materials[matstring] -= ejected * S.perunit
+ if(recursive && materials[matstring] >= S.perunit)
+ eject_materials(matstring, -1)
+ update_busy()
+
+/obj/machinery/pros_fabricator/proc/sync()
+ sync_message = "Error: no console found."
+ for(var/obj/machinery/computer/rdconsole/RDC in get_area_all_atoms(get_area(src)))
+ if(!RDC.sync)
+ continue
+ for(var/datum/tech/T in RDC.files.known_tech)
+ files.AddTech2Known(T)
+ for(var/datum/design/D in RDC.files.known_designs)
+ files.AddDesign2Known(D)
+ files.RefreshResearch()
+ sync_message = "Sync complete."
+ update_categories()
diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm
index 3c35ece9d2..b742b8a14b 100644
--- a/code/game/mecha/mecha.dm
+++ b/code/game/mecha/mecha.dm
@@ -39,6 +39,7 @@
var/datum/effect/effect/system/spark_spread/spark_system = new
var/lights = 0
var/lights_power = 6
+ var/force = 0
//inner atmos
var/use_internal_tank = 0
diff --git a/code/game/mecha/medical/odysseus.dm b/code/game/mecha/medical/odysseus.dm
index ede4ccf410..65ed711f2f 100644
--- a/code/game/mecha/medical/odysseus.dm
+++ b/code/game/mecha/medical/odysseus.dm
@@ -101,8 +101,6 @@
holder = patient.hud_list[STATUS_HUD]
if(patient.stat == 2)
holder.icon_state = "huddead"
- else if(patient.status_flags & XENO_HOST)
- holder.icon_state = "hudxeno"
else if(foundVirus)
holder.icon_state = "hudill"
else if(patient.has_brain_worms())
diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm
index 02d85234ed..e900ba7373 100644
--- a/code/game/objects/buckling.dm
+++ b/code/game/objects/buckling.dm
@@ -29,12 +29,16 @@
/obj/proc/buckle_mob(mob/living/M)
if(!can_buckle || !istype(M) || (M.loc != loc) || M.buckled || M.pinned.len || (buckle_require_restraints && !M.restrained()))
return 0
+ if(buckled_mob) //Handles trying to buckle yourself to the chair when someone is on it
+ M << "\The [src] already has someone buckled to it. "
+ return 0
M.buckled = src
M.facing_dir = null
M.set_dir(buckle_dir ? buckle_dir : dir)
M.update_canmove()
buckled_mob = M
+
post_buckle_mob(M)
return 1
diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm
index 65fa2ceb6a..fc764efd02 100644
--- a/code/game/objects/effects/decals/Cleanable/humans.dm
+++ b/code/game/objects/effects/decals/Cleanable/humans.dm
@@ -17,6 +17,7 @@ var/global/list/image/splatter_cache=list()
var/base_icon = 'icons/effects/blood.dmi'
blood_DNA = list()
var/basecolor="#A10808" // Color when wet.
+ var/synthblood = 0
var/list/datum/disease2/disease/virus2 = list()
var/amount = 5
var/drytime
@@ -61,9 +62,9 @@ var/global/list/image/splatter_cache=list()
/obj/effect/decal/cleanable/blood/update_icon()
if(basecolor == "rainbow") basecolor = "#[get_random_colour(1)]"
color = basecolor
- if(basecolor == SYNTH_BLOOD_COLOUR)
- name = "oil"
- desc = "It's black and greasy."
+ if(synthblood)
+ name = "synthetic blood"
+ desc = "It's quite greasy."
else
name = initial(name)
desc = initial(desc)
@@ -181,7 +182,7 @@ var/global/list/image/splatter_cache=list()
layer = 2
icon = 'icons/effects/blood.dmi'
icon_state = "gibbl5"
- random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6")
+ random_icon_states = list("gib1", "gib2", "gib3", "gib5", "gib6")
var/fleshcolor = "#FFFFFF"
/obj/effect/decal/cleanable/blood/gibs/update_icon()
diff --git a/code/game/objects/effects/decals/posters/bs12.dm b/code/game/objects/effects/decals/posters/bs12.dm
index a727e2804c..6b5ad182c4 100644
--- a/code/game/objects/effects/decals/posters/bs12.dm
+++ b/code/game/objects/effects/decals/posters/bs12.dm
@@ -91,7 +91,7 @@
/datum/poster/bay_19
icon_state="bsposter19"
- name = "Respect a Unathi"
+ name = "Respect an 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
@@ -117,7 +117,7 @@
/datum/poster/bay_24
icon_state="bsposter24"
name = "Responsible medbay habits, No #259"
- desc = "A poster with a nervous looking geneticist on it states; \"Friends Don't Tell Friends They're Clones. It can cause severe and irreparable emotional trauma. Always do the right thing and never tell them that they were dead.\""
+ desc = "A poster with a nervous looking geneticist on it states; \"Friends Tell Friends They're Clones. It can cause severe and irreparable emotional trauma if a person is not properly informed of their recent demise. Always follow your contractual obligation and inform them of their recent rejuvenation.\""
/datum/poster/bay_25
icon_state="bsposter25"
diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm
index 3dcaa92cc3..d7e530b761 100644
--- a/code/game/objects/effects/effect_system.dm
+++ b/code/game/objects/effects/effect_system.dm
@@ -107,9 +107,10 @@ steam.start() -- spawns the effect
var/turf/T = src.loc
if (istype(T, /turf))
T.hotspot_expose(1000,100)
- spawn (20)
- qdel(src)
- return
+
+/obj/effect/effect/sparks/initialize()
+ ..()
+ schedule_task_in(5 SECONDS, /proc/qdel, list(src))
/obj/effect/effect/sparks/Destroy()
var/turf/T = src.loc
@@ -185,7 +186,6 @@ steam.start() -- spawns the effect
..()
spawn (time_to_live)
qdel(src)
- return
/obj/effect/effect/smoke/Crossed(mob/living/carbon/M as mob )
..()
@@ -193,16 +193,14 @@ steam.start() -- spawns the effect
affect(M)
/obj/effect/effect/smoke/proc/affect(var/mob/living/carbon/M)
- if (istype(M))
+ if (!istype(M))
return 0
- if (M.internal != null)
- if(M.wear_mask && (M.wear_mask.item_flags & AIRTIGHT))
+ if(M.wear_mask && (M.wear_mask.item_flags & AIRTIGHT))
+ return 0
+ if(istype(M,/mob/living/carbon/human))
+ var/mob/living/carbon/human/H = M
+ if(H.head && (H.head.item_flags & AIRTIGHT))
return 0
- if(istype(M,/mob/living/carbon/human))
- var/mob/living/carbon/human/H = M
- if(H.head && (H.head.item_flags & AIRTIGHT))
- return 0
- return 0
return 1
/////////////////////////////////////////////
@@ -215,17 +213,18 @@ steam.start() -- spawns the effect
icon = 'icons/effects/effects.dmi'
icon_state = "sparks"
-/obj/effect/effect/smoke/illumination/New(var/newloc, var/brightness=15, var/lifetime=10)
+/obj/effect/effect/smoke/illumination/New(var/newloc, var/lifetime=10, var/range=null, var/power=null, var/color=null)
time_to_live=lifetime
..()
- set_light(brightness)
+ set_light(range, power, color)
/////////////////////////////////////////////
// Bad smoke
/////////////////////////////////////////////
/obj/effect/effect/smoke/bad
- time_to_live = 200
+ time_to_live = 600
+ //var/list/projectiles
/obj/effect/effect/smoke/bad/Move()
..()
@@ -235,70 +234,25 @@ steam.start() -- spawns the effect
/obj/effect/effect/smoke/bad/affect(var/mob/living/carbon/M)
if (!..())
return 0
- M.drop_item()
M.adjustOxyLoss(1)
- if (M.coughedtime != 1)
- M.coughedtime = 1
+ if(prob(25))
M.emote("cough")
- spawn ( 20 )
- M.coughedtime = 0
-/obj/effect/effect/smoke/bad/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
- if(air_group || (height==0)) return 1
- if(istype(mover, /obj/item/projectile/beam))
- var/obj/item/projectile/beam/B = mover
- B.damage = (B.damage/2)
+/* Not feasile until a later date
+/obj/effect/effect/smoke/bad/Crossed(atom/movable/M as mob|obj)
+ ..()
+ if(istype(M, /obj/item/projectile/beam))
+ var/obj/item/projectile/beam/B = M
+ if(!(B in projectiles))
+ B.damage = (B.damage/2)
+ projectiles += B
+ destroyed_event.register(B, src, /obj/effect/effect/smoke/bad/proc/on_projectile_delete)
+ world << "Damage is: [B.damage]"
return 1
-/////////////////////////////////////////////
-// Sleep smoke
-/////////////////////////////////////////////
-/obj/effect/effect/smoke/sleepy
-
-/obj/effect/effect/smoke/sleepy/Move()
- ..()
- for(var/mob/living/carbon/M in get_turf(src))
- affect(M)
-
-/obj/effect/effect/smoke/sleepy/affect(mob/living/carbon/M as mob )
- if (!..())
- return 0
-
- M.drop_item()
- M:sleeping += 1
- if (M.coughedtime != 1)
- M.coughedtime = 1
- M.emote("cough")
- spawn ( 20 )
- M.coughedtime = 0
-/////////////////////////////////////////////
-// Mustard Gas
-/////////////////////////////////////////////
-
-
-/obj/effect/effect/smoke/mustard
- name = "mustard gas"
- icon_state = "mustard"
-
-/obj/effect/effect/smoke/mustard/Move()
- ..()
- for(var/mob/living/carbon/human/R in get_turf(src))
- affect(R)
-
-/obj/effect/effect/smoke/mustard/affect(var/mob/living/carbon/human/R)
- if (!..())
- return 0
- if (R.wear_suit != null)
- return 0
-
- R.burn_skin(0.75)
- if (R.coughedtime != 1)
- R.coughedtime = 1
- R.emote("gasp")
- spawn (20)
- R.coughedtime = 0
- R.updatehealth()
- return
+/obj/effect/effect/smoke/bad/proc/on_projectile_delete(obj/item/projectile/beam/proj)
+ projectiles -= proj
+*/
/////////////////////////////////////////////
// Smoke spread
@@ -321,7 +275,7 @@ steam.start() -- spawns the effect
if(direct)
direction = direct
-/datum/effect/effect/system/smoke_spread/start()
+/datum/effect/effect/system/smoke_spread/start(var/I)
var/i = 0
for(i=0, i 20)
@@ -331,6 +285,7 @@ steam.start() -- spawns the effect
src.location = get_turf(holder)
var/obj/effect/effect/smoke/smoke = PoolOrNew(smoke_type, src.location)
src.total_smoke++
+ smoke.color = I
var/direction = src.direction
if(!direction)
if(src.cardinals)
@@ -348,14 +303,6 @@ steam.start() -- spawns the effect
/datum/effect/effect/system/smoke_spread/bad
smoke_type = /obj/effect/effect/smoke/bad
-/datum/effect/effect/system/smoke_spread/sleepy
- smoke_type = /obj/effect/effect/smoke/sleepy
-
-
-/datum/effect/effect/system/smoke_spread/mustard
- smoke_type = /obj/effect/effect/smoke/mustard
-
-
/////////////////////////////////////////////
//////// Attach an Ion trail to any object, that spawns when it moves (like for the jetpack)
/// just pass in the object to attach it to in set_up
diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm
index 7a923f14bd..d08d45d5ce 100644
--- a/code/game/objects/effects/landmarks.dm
+++ b/code/game/objects/effects/landmarks.dm
@@ -5,6 +5,7 @@
anchored = 1.0
unacidable = 1
simulated = 0
+ var/delete_me = 0
/obj/effect/landmark/New()
..()
@@ -14,33 +15,35 @@
switch(name) //some of these are probably obsolete
if("monkey")
monkeystart += loc
- qdel(src)
+ delete_me = 1
return
if("start")
newplayer_start += loc
- qdel(src)
+ delete_me = 1
+ return
if("JoinLate")
latejoin += loc
- qdel(src)
+ delete_me = 1
+ return
if("JoinLateGateway")
latejoin_gateway += loc
- qdel(src)
+ delete_me = 1
return
if("JoinLateElevator")
latejoin_elevator += loc
- qdel(src)
+ delete_me = 1
return
if("JoinLateCryo")
latejoin_cryo += loc
- qdel(src)
+ delete_me = 1
return
if("JoinLateCyborg")
latejoin_cyborg += loc
- qdel(src)
+ delete_me = 1
return
if("prisonwarp")
prisonwarp += loc
- qdel(src)
+ delete_me = 1
return
if("Holding Facility")
holdingfacility += loc
@@ -54,28 +57,36 @@
tdomeobserve += loc
if("prisonsecuritywarp")
prisonsecuritywarp += loc
- qdel(src)
+ delete_me = 1
return
if("blobstart")
blobstart += loc
- qdel(src)
+ delete_me = 1
return
if("xeno_spawn")
xeno_spawn += loc
- qdel(src)
+ delete_me = 1
return
if("endgame_exit")
endgame_safespawns += loc
- qdel(src)
+ delete_me = 1
return
if("bluespacerift")
endgame_exits += loc
- qdel(src)
+ delete_me = 1
return
landmarks_list += src
return 1
+/obj/effect/landmark/proc/delete()
+ delete_me = 1
+
+/obj/effect/landmark/initialize()
+ ..()
+ if(delete_me)
+ qdel(src)
+
/obj/effect/landmark/Destroy()
landmarks_list -= src
return ..()
@@ -99,14 +110,14 @@
var/list/options = typesof(/obj/effect/landmark/costume)
var/PICK= options[rand(1,options.len)]
new PICK(src.loc)
- qdel(src)
+ delete_me = 1
//SUBCLASSES. Spawn a bunch of items and disappear likewise
/obj/effect/landmark/costume/chicken/New()
new /obj/item/clothing/suit/chickensuit(src.loc)
new /obj/item/clothing/head/chicken(src.loc)
new /obj/item/weapon/reagent_containers/food/snacks/egg(src.loc)
- qdel(src)
+ delete_me = 1
/obj/effect/landmark/costume/gladiator/New()
new /obj/item/clothing/under/gladiator(src.loc)
@@ -118,32 +129,32 @@
new /obj/item/clothing/head/flatcap(src.loc)
new /obj/item/clothing/suit/storage/toggle/labcoat/mad(src.loc)
new /obj/item/clothing/glasses/gglasses(src.loc)
- qdel(src)
+ delete_me = 1
/obj/effect/landmark/costume/elpresidente/New()
new /obj/item/clothing/under/gimmick/rank/captain/suit(src.loc)
new /obj/item/clothing/head/flatcap(src.loc)
new /obj/item/clothing/mask/smokable/cigarette/cigar/havana(src.loc)
new /obj/item/clothing/shoes/jackboots(src.loc)
- qdel(src)
+ delete_me = 1
/obj/effect/landmark/costume/nyangirl/New()
new /obj/item/clothing/under/schoolgirl(src.loc)
new /obj/item/clothing/head/kitty(src.loc)
- qdel(src)
+ delete_me = 1
/obj/effect/landmark/costume/maid/New()
- new /obj/item/clothing/under/blackskirt(src.loc)
+ new /obj/item/clothing/under/skirt(src.loc)
var/CHOICE = pick( /obj/item/clothing/head/beret , /obj/item/clothing/head/rabbitears )
new CHOICE(src.loc)
new /obj/item/clothing/glasses/sunglasses/blindfold(src.loc)
- qdel(src)
+ delete_me = 1
/obj/effect/landmark/costume/butler/New()
new /obj/item/clothing/suit/wcoat(src.loc)
new /obj/item/clothing/under/suit_jacket(src.loc)
new /obj/item/clothing/head/that(src.loc)
- qdel(src)
+ delete_me = 1
/obj/effect/landmark/costume/scratch/New()
new /obj/item/clothing/gloves/white(src.loc)
@@ -151,12 +162,12 @@
new /obj/item/clothing/under/scratch(src.loc)
if (prob(30))
new /obj/item/clothing/head/cueball(src.loc)
- qdel(src)
+ delete_me = 1
/obj/effect/landmark/costume/highlander/New()
new /obj/item/clothing/under/kilt(src.loc)
new /obj/item/clothing/head/beret(src.loc)
- qdel(src)
+ delete_me = 1
/obj/effect/landmark/costume/prig/New()
new /obj/item/clothing/suit/wcoat(src.loc)
@@ -167,24 +178,24 @@
new /obj/item/weapon/cane(src.loc)
new /obj/item/clothing/under/sl_suit(src.loc)
new /obj/item/clothing/mask/fakemoustache(src.loc)
- qdel(src)
+ delete_me = 1
/obj/effect/landmark/costume/plaguedoctor/New()
new /obj/item/clothing/suit/bio_suit/plaguedoctorsuit(src.loc)
new /obj/item/clothing/head/plaguedoctorhat(src.loc)
- qdel(src)
+ delete_me = 1
/obj/effect/landmark/costume/nightowl/New()
new /obj/item/clothing/under/owl(src.loc)
new /obj/item/clothing/mask/gas/owl_mask(src.loc)
- qdel(src)
+ delete_me = 1
/obj/effect/landmark/costume/waiter/New()
new /obj/item/clothing/under/waiter(src.loc)
var/CHOICE= pick( /obj/item/clothing/head/kitty, /obj/item/clothing/head/rabbitears)
new CHOICE(src.loc)
new /obj/item/clothing/suit/apron(src.loc)
- qdel(src)
+ delete_me = 1
/obj/effect/landmark/costume/pirate/New()
new /obj/item/clothing/under/pirate(src.loc)
@@ -192,18 +203,18 @@
var/CHOICE = pick( /obj/item/clothing/head/pirate , /obj/item/clothing/head/bandana )
new CHOICE(src.loc)
new /obj/item/clothing/glasses/eyepatch(src.loc)
- qdel(src)
+ delete_me = 1
/obj/effect/landmark/costume/commie/New()
new /obj/item/clothing/under/soviet(src.loc)
new /obj/item/clothing/head/ushanka(src.loc)
- qdel(src)
+ delete_me = 1
/obj/effect/landmark/costume/imperium_monk/New()
new /obj/item/clothing/suit/imperium_monk(src.loc)
if (prob(25))
new /obj/item/clothing/mask/gas/cyborg(src.loc)
- qdel(src)
+ delete_me = 1
/obj/effect/landmark/costume/holiday_priest/New()
new /obj/item/clothing/suit/holidaypriest(src.loc)
@@ -212,26 +223,26 @@
/obj/effect/landmark/costume/marisawizard/fake/New()
new /obj/item/clothing/head/wizard/marisa/fake(src.loc)
new/obj/item/clothing/suit/wizrobe/marisa/fake(src.loc)
- qdel(src)
+ delete_me = 1
/obj/effect/landmark/costume/cutewitch/New()
new /obj/item/clothing/under/sundress(src.loc)
new /obj/item/clothing/head/witchwig(src.loc)
new /obj/item/weapon/staff/broom(src.loc)
- qdel(src)
+ delete_me = 1
/obj/effect/landmark/costume/fakewizard/New()
new /obj/item/clothing/suit/wizrobe/fake(src.loc)
new /obj/item/clothing/head/wizard/fake(src.loc)
new /obj/item/weapon/staff/(src.loc)
- qdel(src)
+ delete_me = 1
/obj/effect/landmark/costume/sexyclown/New()
new /obj/item/clothing/mask/gas/sexyclown(src.loc)
new /obj/item/clothing/under/sexyclown(src.loc)
- qdel(src)
+ delete_me = 1
/obj/effect/landmark/costume/sexymime/New()
new /obj/item/clothing/mask/gas/sexymime(src.loc)
new /obj/item/clothing/under/sexymime(src.loc)
- qdel(src)
\ No newline at end of file
+ delete_me = 1
diff --git a/code/game/objects/effects/overlays.dm b/code/game/objects/effects/overlays.dm
index cc52bf7bbf..b7bb820f54 100644
--- a/code/game/objects/effects/overlays.dm
+++ b/code/game/objects/effects/overlays.dm
@@ -52,3 +52,30 @@
..()
pixel_x += rand(-10, 10)
pixel_y += rand(-10, 10)
+
+/obj/effect/overlay/snow
+ name = "snow"
+ icon = 'icons/turf/overlays.dmi'
+ icon_state = "snow"
+ anchored = 1
+
+/obj/effect/overlay/snow/floor
+ icon_state = "snowfloor"
+ layer = 2.01 //Just above floor
+
+/obj/effect/overlay/snow/floor/edges
+ icon_state = "snow_edges"
+
+/obj/effect/overlay/snow/floor/surround
+ icon_state = "snow_surround"
+
+/obj/effect/overlay/snow/airlock
+ icon_state = "snowairlock"
+ layer = 3.2 //Just above airlocks
+
+/obj/effect/overlay/snow/floor/pointy
+ icon_state = "snowfloorpointy"
+
+/obj/effect/overlay/snow/wall
+ icon_state = "snowwall"
+ layer = 5 //Same as lights so humans can stand under it
diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm
index 4b6b437900..b7b258f5d6 100644
--- a/code/game/objects/effects/spiders.dm
+++ b/code/game/objects/effects/spiders.dm
@@ -21,6 +21,8 @@
return
/obj/effect/spider/attackby(var/obj/item/weapon/W, var/mob/user)
+ user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
+
if(W.attack_verb.len)
visible_message("\The [src] have been [pick(W.attack_verb)] with \the [W][(user ? " by [user]." : ".")] ")
else
diff --git a/code/game/objects/effects/step_triggers.dm b/code/game/objects/effects/step_triggers.dm
index 59a71ddaa8..fa521c104a 100644
--- a/code/game/objects/effects/step_triggers.dm
+++ b/code/game/objects/effects/step_triggers.dm
@@ -13,7 +13,7 @@
..()
if(!H)
return
- if(istype(H, /mob/dead/observer) && !affect_ghosts)
+ if(istype(H, /mob/observer) && !affect_ghosts)
return
Trigger(H)
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index a07b82cd17..4d78f5aa9d 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -10,12 +10,16 @@
var/burn_point = null
var/burning = null
var/hitsound = null
+ var/storage_cost = null
var/slot_flags = 0 //This is used to determine on which slots an item can fit.
var/no_attack_log = 0 //If it's an item we don't want to log attack_logs with, set this to 1
pass_flags = PASSTABLE
pressure_resistance = 5
// causeerrorheresoifixthis
var/obj/item/master = null
+ var/list/origin_tech = null //Used by R&D to determine what research bonuses it grants.
+ var/list/attack_verb = list() //Used in attackby() to say how something was attacked "[x] has been [z.attack_verb] by [y] with [z]"
+ var/force = 0
var/heat_protection = 0 //flags which determine which body parts are protected from heat. Use the HEAD, UPPER_TORSO, LOWER_TORSO, etc. flags. See setup.dm
var/cold_protection = 0 //flags which determine which body parts are protected from cold. Use the HEAD, UPPER_TORSO, LOWER_TORSO, etc. flags. See setup.dm
@@ -73,13 +77,10 @@
/obj/item/equipped()
..()
- var/mob/M = loc
+ var/mob/living/M = loc
if(!istype(M))
return
- if(M.l_hand)
- M.l_hand.update_held_icon()
- if(M.r_hand)
- M.r_hand.update_held_icon()
+ M.update_held_icons()
/obj/item/Destroy()
if(ismob(loc))
@@ -95,8 +96,8 @@
//Checks if the item is being held by a mob, and if so, updates the held icons
/obj/item/proc/update_held_icon()
- if(ismob(src.loc))
- var/mob/M = src.loc
+ if(isliving(src.loc))
+ var/mob/living/M = src.loc
if(M.l_hand == src)
M.update_inv_l_hand()
else if(M.r_hand == src)
@@ -157,7 +158,7 @@
size = "huge"
return ..(user, distance, "", "It is a [size] item.")
-/obj/item/attack_hand(mob/user as mob)
+/obj/item/attack_hand(mob/living/user as mob)
if (!user) return
if (hasorgans(user))
var/mob/living/carbon/human/H = user
@@ -358,7 +359,7 @@ var/list/global/slot_flags_enumeration = list(
var/allow = 0
if(H.back && istype(H.back, /obj/item/weapon/storage/backpack))
var/obj/item/weapon/storage/backpack/B = H.back
- if(B.contents.len < B.storage_slots && w_class <= B.max_w_class)
+ if(B.can_be_inserted(src,1))
allow = 1
if(!allow)
return 0
@@ -396,17 +397,15 @@ var/list/global/slot_flags_enumeration = list(
if((!istype(usr, /mob/living/carbon)) || (istype(usr, /mob/living/carbon/brain)))//Is humanoid, and is not a brain
usr << "You can't pick things up! "
return
+ var/mob/living/carbon/C = usr
if( usr.stat || usr.restrained() )//Is not asleep/dead and is not restrained
usr << "You can't pick things up! "
return
if(src.anchored) //Object isn't anchored
usr << "You can't pick that up! "
return
- if(!usr.hand && usr.r_hand) //Right hand is not full
- usr << "Your right hand is full. "
- return
- if(usr.hand && usr.l_hand) //Left hand is not full
- usr << "Your left hand is full. "
+ if(C.get_active_hand()) //Hand is not full
+ usr << "Your hand is full. "
return
if(!istype(src.loc, /turf)) //Object is on a turf
usr << "You can't pick that up! "
@@ -454,6 +453,9 @@ var/list/global/slot_flags_enumeration = list(
M.attack_log += "\[[time_stamp()]\] Attacked by [user.name] ([user.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)]) "
msg_admin_attack("[user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)]) (JMP )") //BS12 EDIT ALG
+ user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
+ user.do_attack_animation(M)
+
src.add_fingerprint(user)
//if((CLUMSY in user.mutations) && prob(50))
// M = user
@@ -482,7 +484,7 @@ var/list/global/slot_flags_enumeration = list(
eyes.damage += rand(3,4)
if(eyes.damage >= eyes.min_bruised_damage)
if(M.stat != 2)
- if(!(eyes.status & ORGAN_ROBOT)) //robot eyes bleeding might be a bit silly
+ if(!(eyes.robotic >= ORGAN_ROBOT)) //robot eyes bleeding might be a bit silly
M << "Your eyes start to bleed profusely! "
if(prob(50))
if(M.stat != 2)
@@ -634,6 +636,3 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
/obj/item/proc/pwr_drain()
return 0 // Process Kill
-/obj/item/proc/resolve_attackby(atom/A, mob/source)
- return A.attackby(src,source)
-
diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm
index 3a6d55ca7d..88b513e06e 100644
--- a/code/game/objects/items/bodybag.dm
+++ b/code/game/objects/items/bodybag.dm
@@ -86,6 +86,17 @@
qdel(src)
return
+/obj/structure/closet/body_bag/proc/get_occupants()
+ var/list/occupants = list()
+ for(var/mob/living/carbon/human/H in contents)
+ occupants += H
+ return occupants
+
+/obj/structure/closet/body_bag/proc/update(var/broadcast=0)
+ if(istype(loc, /obj/structure/morgue))
+ var/obj/structure/morgue/M = loc
+ M.update(broadcast)
+
/obj/structure/closet/body_bag/update_icon()
if(opened)
icon_state = icon_opened
diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm
index ed2e134154..f0bb82efd0 100644
--- a/code/game/objects/items/devices/PDA/PDA.dm
+++ b/code/game/objects/items/devices/PDA/PDA.dm
@@ -163,6 +163,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
/obj/item/device/pda/shaftminer
icon_state = "pda-miner"
+ default_cartridge = /obj/item/weapon/cartridge/miner
/obj/item/device/pda/syndicate
default_cartridge = /obj/item/weapon/cartridge/syndicate
@@ -172,6 +173,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
hidden = 1
/obj/item/device/pda/chaplain
+ default_cartridge = /obj/item/weapon/cartridge/service
icon_state = "pda-holy"
ttone = "holy"
@@ -181,13 +183,15 @@ var/global/list/obj/item/device/pda/PDAs = list()
ttone = "..."
/obj/item/device/pda/botanist
- //default_cartridge = /obj/item/weapon/cartridge/botanist
+ default_cartridge = /obj/item/weapon/cartridge/service
icon_state = "pda-hydro"
/obj/item/device/pda/roboticist
+ default_cartridge = /obj/item/weapon/cartridge/signal/science
icon_state = "pda-robot"
/obj/item/device/pda/librarian
+ default_cartridge = /obj/item/weapon/cartridge/service
icon_state = "pda-libb"
desc = "A portable microcomputer by Thinktronic Systems, LTD. This is model is a WGW-11 series e-reader."
note = "Congratulations, your station has chosen the Thinktronic 5290 WGW-11 Series E-reader and Personal Data Assistant!"
@@ -200,9 +204,11 @@ var/global/list/obj/item/device/pda/PDAs = list()
note = "Congratulations, you have chosen the Thinktronic 5230 Personal Data Assistant Deluxe Special Max Turbo Limited Edition!"
/obj/item/device/pda/chef
+ default_cartridge = /obj/item/weapon/cartridge/service
icon_state = "pda-chef"
/obj/item/device/pda/bar
+ default_cartridge = /obj/item/weapon/cartridge/service
icon_state = "pda-bar"
/obj/item/device/pda/atmos
@@ -304,6 +310,99 @@ var/global/list/obj/item/device/pda/PDAs = list()
ttone = "assist"
+// Used for the PDA multicaster, which mirrors messages sent to it to a specific department,
+/obj/item/device/pda/multicaster
+ ownjob = "Relay"
+ icon_state = "NONE"
+ ttone = "data"
+ detonate = 0
+ news_silent = 1
+ var/list/cartridges_to_send_to = list()
+
+// This is what actually mirrors the message,
+/obj/item/device/pda/multicaster/new_message(var/sending_unit, var/sender, var/sender_job, var/message)
+ if(sender)
+ var/list/targets = list()
+ for(var/obj/item/device/pda/pda in PDAs)
+ if(pda.cartridge && pda.owner && is_type_in_list(pda.cartridge, cartridges_to_send_to))
+ targets |= pda
+ if(targets.len)
+ for(var/obj/item/device/pda/target in targets)
+ create_message(target, sender, sender_job, message)
+
+// This has so much copypasta,
+/obj/item/device/pda/multicaster/create_message(var/obj/item/device/pda/P, var/original_sender, var/original_job, var/t)
+ t = sanitize(t, MAX_MESSAGE_LEN, 0)
+ t = replace_characters(t, list(""" = "\""))
+ if (!t || !istype(P))
+ return
+
+ if (isnull(P)||P.toff || toff)
+ return
+
+ last_text = world.time
+ var/datum/reception/reception = get_reception(src, P, t)
+ t = reception.message
+
+ if(reception.message_server && (reception.telecomms_reception & TELECOMMS_RECEPTION_SENDER)) // only send the message if it's stable,
+ if(reception.telecomms_reception & TELECOMMS_RECEPTION_RECEIVER == 0) // Does our recipient have a broadcaster on their level?,
+ return
+ var/send_result = reception.message_server.send_pda_message("[P.owner]","[owner]","[t]")
+ if (send_result)
+ return
+
+ P.tnote.Add(list(list("sent" = 0, "owner" = "[owner]", "job" = "[ownjob]", "message" = "[t]", "target" = "\ref[src]")))
+
+ if(!P.conversations.Find("\ref[src]"))
+ P.conversations.Add("\ref[src]")
+
+ P.new_message(src, "[original_sender] \[Relayed\]", original_job, t, 0)
+
+ else
+ return
+
+/obj/item/device/pda/multicaster/command/New()
+ ..()
+ owner = "Command Department"
+ name = "Command Department (Relay)"
+ cartridges_to_send_to = command_cartridges
+
+/obj/item/device/pda/multicaster/security/New()
+ ..()
+ owner = "Security Department"
+ name = "Security Department (Relay)"
+ cartridges_to_send_to = security_cartridges
+
+/obj/item/device/pda/multicaster/engineering/New()
+ ..()
+ owner = "Engineering Department"
+ name = "Engineering Department (Relay)"
+ cartridges_to_send_to = engineering_cartridges
+
+/obj/item/device/pda/multicaster/medical/New()
+ ..()
+ owner = "Medical Department"
+ name = "Medical Department (Relay)"
+ cartridges_to_send_to = medical_cartridges
+
+/obj/item/device/pda/multicaster/research/New()
+ ..()
+ owner = "Research Department"
+ name = "Research Department (Relay)"
+ cartridges_to_send_to = research_cartridges
+
+/obj/item/device/pda/multicaster/cargo/New()
+ ..()
+ owner = "Cargo Department"
+ name = "Cargo Department (Relay)"
+ cartridges_to_send_to = cargo_cartridges
+
+/obj/item/device/pda/multicaster/civilian/New()
+ ..()
+ owner = "Civilian Services Department"
+ name = "Civilian Services Department (Relay)"
+ cartridges_to_send_to = civilian_cartridges
+
/*
* The Actual PDA
*/
@@ -462,7 +561,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
data["convo_job"] = sanitize(c["job"])
break
if(mode==41)
- data_core.get_manifest_json()
+ data_core.get_manifest_list()
if(mode==3)
@@ -531,7 +630,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
data["feed"] = feed
- data["manifest"] = list("__json_cache" = ManifestJSON)
+ data["manifest"] = PDA_Manifest
nanoUI = data
// update the ui if it exists, returns null if no ui is passed/found
@@ -932,7 +1031,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
message += "Your [P] bleeps loudly."
j = prob(10)
- if(j) //This kills the PDA
+ if(j && detonate) //This kills the PDA
qdel(P)
if(message)
message += "It melts in a puddle of plastic."
@@ -990,7 +1089,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
tnote.Add(list(list("sent" = 1, "owner" = "[P.owner]", "job" = "[P.ownjob]", "message" = "[t]", "target" = "\ref[P]")))
P.tnote.Add(list(list("sent" = 0, "owner" = "[owner]", "job" = "[ownjob]", "message" = "[t]", "target" = "\ref[src]")))
for(var/mob/M in player_list)
- if(M.stat == DEAD && M.client && (M.client.prefs.toggles & CHAT_GHOSTEARS)) // src.client is so that ghosts don't have to listen to mice
+ if(M.stat == DEAD && M.client && (M.is_preference_enabled(/datum/client_preference/ghost_ears))) // src.client is so that ghosts don't have to listen to mice
if(istype(M, /mob/new_player))
continue
M.show_message("PDA Message - [owner] -> [P.owner] : [t] ")
@@ -1046,8 +1145,8 @@ var/global/list/obj/item/device/pda/PDAs = list()
/obj/item/device/pda/proc/new_message_from_pda(var/obj/item/device/pda/sending_device, var/message)
new_message(sending_device, sending_device.owner, sending_device.ownjob, message)
-/obj/item/device/pda/proc/new_message(var/sending_unit, var/sender, var/sender_job, var/message)
- var/reception_message = "\icon[src] Message from [sender] ([sender_job]), \"[message]\" (Reply )"
+/obj/item/device/pda/proc/new_message(var/sending_unit, var/sender, var/sender_job, var/message, var/reply = 1)
+ var/reception_message = "\icon[src] Message from [sender] ([sender_job]), \"[message]\" ([reply ? "Reply " : "Unable to Reply"])"
new_info(message_silent, ttone, reception_message)
log_pda("[usr] (PDA: [sending_unit]) sent \"[message]\" to [name]")
diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm
index 24a2db67d7..a0e37e28b8 100644
--- a/code/game/objects/items/devices/PDA/cart.dm
+++ b/code/game/objects/items/devices/PDA/cart.dm
@@ -1,3 +1,48 @@
+var/list/command_cartridges = list(
+ /obj/item/weapon/cartridge/captain,
+ /obj/item/weapon/cartridge/hop,
+ /obj/item/weapon/cartridge/hos,
+ /obj/item/weapon/cartridge/ce,
+ /obj/item/weapon/cartridge/rd,
+ /obj/item/weapon/cartridge/head,
+ /obj/item/weapon/cartridge/lawyer // Internal Affaris,
+ )
+
+var/list/security_cartridges = list(
+ /obj/item/weapon/cartridge/security,
+ /obj/item/weapon/cartridge/detective,
+ /obj/item/weapon/cartridge/hos
+ )
+
+var/list/engineering_cartridges = list(
+ /obj/item/weapon/cartridge/engineering,
+ /obj/item/weapon/cartridge/atmos,
+ /obj/item/weapon/cartridge/ce
+ )
+
+var/list/medical_cartridges = list(
+ /obj/item/weapon/cartridge/medical,
+ /obj/item/weapon/cartridge/chemistry,
+ /obj/item/weapon/cartridge/cmo
+ )
+
+var/list/research_cartridges = list(
+ /obj/item/weapon/cartridge/signal/science,
+ /obj/item/weapon/cartridge/rd
+ )
+
+var/list/cargo_cartridges = list(
+ /obj/item/weapon/cartridge/quartermaster, // This also covers cargo-techs, apparently,
+ /obj/item/weapon/cartridge/miner,
+ /obj/item/weapon/cartridge/hop
+ )
+
+var/list/civilian_cartridges = list(
+ /obj/item/weapon/cartridge/janitor,
+ /obj/item/weapon/cartridge/service,
+ /obj/item/weapon/cartridge/hop
+ )
+
/obj/item/weapon/cartridge
name = "generic cartridge"
desc = "A data cartridge for portable microcomputers."
@@ -98,6 +143,10 @@
access_flora = 1
*/
+/obj/item/weapon/cartridge/service
+ name = "\improper Serv-U Pro"
+ desc = "A data cartridge designed to serve YOU!"
+
/obj/item/weapon/cartridge/signal
name = "generic signaler cartridge"
desc = "A data cartridge with an integrated radio signaler module."
@@ -124,6 +173,11 @@
icon_state = "cart-q"
access_quartermaster = 1
+/obj/item/weapon/cartridge/miner
+ name = "\improper Drill-Jockey 4.5"
+ desc = "It's covered in some sort of sand."
+ icon_state = "cart-q"
+
/obj/item/weapon/cartridge/head
name = "\improper Easy-Record DELUXE"
icon_state = "cart-h"
@@ -354,12 +408,12 @@
var/muleData[0]
muleData["name"] = M.suffix
muleData["location"] = get_area(M)
- muleData["mode"] = M.mode
+ muleData["paused"] = M.paused
muleData["home"] = M.homeName
muleData["target"] = M.targetName
muleData["ref"] = "\ref[M]"
muleData["load"] = M.load ? M.load.name : "Nothing"
-
+
mulebotsData[++mulebotsData.len] = muleData.Copy()
values["mulebotcount"] = count
diff --git a/code/game/objects/items/devices/communicator/communicator.dm b/code/game/objects/items/devices/communicator/communicator.dm
index 4e552cc513..bf7bd30ab1 100644
--- a/code/game/objects/items/devices/communicator/communicator.dm
+++ b/code/game/objects/items/devices/communicator/communicator.dm
@@ -17,16 +17,39 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
origin_tech = list(TECH_ENGINEERING = 2, TECH_MAGNET = 2, TECH_BLUESPACE = 2, TECH_DATA = 2)
matter = list(DEFAULT_WALL_MATERIAL = 30,"glass" = 10)
+ var/video_range = 4
+ var/obj/machinery/camera/communicator/video_source // Their camera
+ var/obj/machinery/camera/communicator/camera // Our camera
+
var/list/voice_mobs = list()
var/list/voice_requests = list()
var/list/voice_invites = list()
- var/selected_tab = 1 //1 equals dialing, 2 equals reviewing requests/invites.
+
+ var/list/im_contacts = list()
+ var/list/im_list = list()
+
+ var/note = "Thank you for choosing the T-14.2 Communicator, this is your notepad!" //Current note in the notepad function
+ var/notehtml = ""
+
+ var/obj/item/weapon/cartridge/cartridge = null //current cartridge
+ var/list/modules = list(
+ list("module" = "Phone", "icon" = "phone64", "number" = 2),
+ list("module" = "Contacts", "icon" = "person64", "number" = 3),
+ list("module" = "Messaging", "icon" = "comment64", "number" = 4),
+ list("module" = "Note", "icon" = "note64", "number" = 5),
+ list("module" = "Settings", "icon" = "gear64", "number" = 6)
+ ) //list("module" = "Name of Module", "icon" = "icon name64", "number" = "what tab is the module")
+
+ var/selected_tab = 1
var/owner = ""
+ var/occupation = ""
var/alert_called = 0
var/obj/machinery/exonet_node/node = null //Reference to the Exonet node, to avoid having to look it up so often.
var/target_address = ""
+ var/target_address_name = ""
var/network_visibility = 1
+ var/ringer = 1
var/list/known_devices = list()
var/datum/exonet_protocol/exonet = null
var/list/communicating = list()
@@ -42,14 +65,42 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
all_communicators = sortAtom(all_communicators)
node = get_exonet_node()
processing_objects |= src
+ camera = new(src)
+ camera.name = "[src] #[rand(100,999)]"
+ camera.c_tag = camera.name
//This is a pretty terrible way of doing this.
- spawn(50) //Wait for our mob to finish spawning.
+ spawn(5 SECONDS) //Wait for our mob to finish spawning.
if(ismob(loc))
register_device(loc)
+ initialize_exonet(loc)
else if(istype(loc, /obj/item/weapon/storage))
var/obj/item/weapon/storage/S = loc
if(ismob(S.loc))
register_device(S.loc)
+ initialize_exonet(S.loc)
+
+// Proc: examine()
+// Parameters: user - the user doing the examining
+// Description: Allows the user to click a link when examining to look at video if one is going.
+/obj/item/device/communicator/examine(mob/user)
+ . = ..(user, 1)
+ if(. && video_source)
+ user << "It looks like it's on a video call: \[view\] "
+
+// Proc: initialize_exonet()
+// Parameters: 1 (user - the person the communicator belongs to)
+// Description: Sets up the exonet datum, gives the device an address, and then gets a node reference. Afterwards, populates the device
+// list.
+/obj/item/device/communicator/proc/initialize_exonet(mob/user)
+ if(!user || !istype(user, /mob/living))
+ return
+ if(!exonet)
+ exonet = new(src)
+ if(!exonet.address)
+ exonet.make_address("communicator-[user.client]-[user.name]")
+ if(!node)
+ node = get_exonet_node()
+ populate_known_devices()
// Proc: examine()
// Parameters: 1 (user - the person examining the device)
@@ -109,7 +160,7 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
if(!comm || !comm.exonet || !comm.exonet.address || comm.exonet.address == src.exonet.address) //Don't add addressless devices, and don't add ourselves.
continue
src.known_devices |= comm
- for(var/mob/dead/observer/O in dead_mob_list)
+ for(var/mob/observer/dead/O in dead_mob_list)
if(!O.client || O.client.prefs.communicator_visibility == 0)
continue
src.known_devices |= O
@@ -134,18 +185,30 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
if(!node || !node.on || !node.allow_external_communicators)
close_connection(reason = "Connection timed out")
+// Proc: attackby()
+// Parameters: 2 (C - what is used on the communicator. user - the mob that has the communicator)
+// Description: When an ID is swiped on the communicator, the communicator reads the job and checks it against the Owner name, if success, the occupation is added.
+/obj/item/device/communicator/attackby(obj/item/C as obj, mob/user as mob)
+ if(istype(C, /obj/item/weapon/card/id))
+ var/obj/item/weapon/card/id/idcard = C
+ if(!idcard.registered_name || !idcard.assignment)
+ user << "\The [src] rejects the ID. "
+ return
+ if(!owner)
+ user << "\The [src] rejects the ID. "
+ return
+ if(owner == idcard.registered_name)
+ occupation = idcard.assignment
+ user << "Occupation updated. "
+ return
+ else return
+
// Proc: attack_self()
// Parameters: 1 (user - the mob that clicked the device in their hand)
// Description: Makes an exonet datum if one does not exist, allocates an address for it, maintains the lists of all devies, clears the alert icon, and
// finally makes NanoUI appear.
/obj/item/device/communicator/attack_self(mob/user)
- if(!exonet)
- exonet = new(src)
- if(!exonet.address)
- exonet.make_address("communicator-[user.client]-[user.name]")
- if(!node)
- node = get_exonet_node()
- populate_known_devices()
+ initialize_exonet(user)
alert_called = 0
update_icon()
ui_interact(user)
@@ -157,13 +220,13 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
populate_known_devices() //Update the devices so ghosts can see the list on NanoUI.
..()
-/mob/dead/observer
+/mob/observer/dead
var/datum/exonet_protocol/exonet = null
// Proc: New()
// Parameters: None
// Description: Gives ghosts an exonet address based on their key and ghost name.
-/mob/dead/observer/New()
+/mob/observer/dead/New()
. = ..()
spawn(20)
exonet = new(src)
@@ -175,7 +238,7 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
// Proc: Destroy()
// Parameters: None
// Description: Removes the ghost's address and nulls the exonet datum, to allow qdel()ing.
-/mob/dead/observer/Destroy()
+/mob/observer/dead/Destroy()
. = ..()
if(exonet)
exonet.remove_address()
@@ -194,35 +257,40 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
var/voices[0] //Current /mob/living/voice s inside the device.
var/connected_communicators[0] //Current communicators connected to the device.
+ var/im_contacts_ui[0] //List of communicators that have been messaged.
+ var/im_list_ui[0] //List of messages.
+
+ var/modules_ui[0] //Home screen info.
+
//First we add other 'local' communicators.
for(var/obj/item/device/communicator/comm in known_devices)
if(comm.network_visibility && comm.exonet)
communicators[++communicators.len] = list("name" = sanitize(comm.name), "address" = comm.exonet.address)
//Now for ghosts who we pretend have communicators.
- for(var/mob/dead/observer/O in known_devices)
+ for(var/mob/observer/dead/O in known_devices)
if(O.client && O.client.prefs.communicator_visibility == 1 && O.exonet)
- communicators[++communicators.len] = list("name" = sanitize("[O.client.prefs.real_name]'s communicator"), "address" = O.exonet.address)
+ communicators[++communicators.len] = list("name" = sanitize("[O.client.prefs.real_name]'s communicator"), "address" = O.exonet.address, "ref" = "\ref[O]")
//Lists all the other communicators that we invited.
for(var/obj/item/device/communicator/comm in voice_invites)
if(comm.exonet)
- invites[++invites.len] = list("name" = sanitize(comm.name), "address" = comm.exonet.address)
+ invites[++invites.len] = list("name" = sanitize(comm.name), "address" = comm.exonet.address, "ref" = "\ref[comm]")
//Ghosts we invited.
- for(var/mob/dead/observer/O in voice_invites)
+ for(var/mob/observer/dead/O in voice_invites)
if(O.exonet && O.client)
- invites[++invites.len] = list("name" = sanitize("[O.client.prefs.real_name]'s communicator"), "address" = O.exonet.address)
+ invites[++invites.len] = list("name" = sanitize("[O.client.prefs.real_name]'s communicator"), "address" = O.exonet.address, "ref" = "\ref[O]")
//Communicators that want to talk to us.
for(var/obj/item/device/communicator/comm in voice_requests)
if(comm.exonet)
- requests[++requests.len] = list("name" = sanitize(comm.name), "address" = comm.exonet.address)
+ requests[++requests.len] = list("name" = sanitize(comm.name), "address" = comm.exonet.address, "ref" = "\ref[comm]")
//Ghosts that want to talk to us.
- for(var/mob/dead/observer/O in voice_requests)
+ for(var/mob/observer/dead/O in voice_requests)
if(O.exonet && O.client)
- requests[++requests.len] = list("name" = sanitize("[O.client.prefs.real_name]'s communicator"), "address" = O.exonet.address)
+ requests[++requests.len] = list("name" = sanitize("[O.client.prefs.real_name]'s communicator"), "address" = O.exonet.address, "ref" = "\ref[O]")
//Now for all the voice mobs inside the communicator.
for(var/mob/living/voice/voice in contents)
@@ -230,27 +298,48 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
//Finally, all the communicators linked to this one.
for(var/obj/item/device/communicator/comm in communicating)
- connected_communicators[++connected_communicators.len] = list("name" = sanitize(comm.name), "true_name" = sanitize(comm.name))
+ connected_communicators[++connected_communicators.len] = list("name" = sanitize(comm.name), "true_name" = sanitize(comm.name), "ref" = "\ref[comm]")
+ //Devices that have been messaged or recieved messages from.
+ for(var/obj/item/device/communicator/comm in im_contacts)
+ if(comm.exonet)
+ im_contacts_ui[++im_contacts_ui.len] = list("name" = sanitize(comm.name), "address" = comm.exonet.address, "ref" = "\ref[comm]")
+
+ //Actual messages.
+ for(var/I in im_list)
+ im_list_ui[++im_list_ui.len] = list("address" = I["address"], "to_address" = I["to_address"], "im" = I["im"])
+
+ //Modules for homescreen.
+ for(var/list/R in modules)
+ modules_ui[++modules_ui.len] = R
data["owner"] = owner ? owner : "Unset"
+ data["occupation"] = occupation ? occupation : "Swipe ID to set."
data["connectionStatus"] = get_connection_to_tcomms()
data["visible"] = network_visibility
data["address"] = exonet.address ? exonet.address : "Unallocated"
data["targetAddress"] = target_address
+ data["targetAddressName"] = target_address_name
data["currentTab"] = selected_tab
data["knownDevices"] = communicators
data["invitesSent"] = invites
data["requestsReceived"] = requests
data["voice_mobs"] = voices
data["communicating"] = connected_communicators
+ data["video_comm"] = video_source ? "\ref[video_source.loc]" : null
+ data["imContacts"] = im_contacts_ui
+ data["imList"] = im_list_ui
+ data["time"] = worldtime2text()
+ data["ring"] = ringer
+ data["homeScreen"] = modules_ui
+ data["note"] = note // current notes
// update the ui if it exists, returns null if no ui is passed/found
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if(!ui)
// the ui does not exist, so we'll create a new() one
// for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm
- ui = new(user, src, ui_key, "communicator.tmpl", "Communicator", 450, 700)
+ ui = new(user, src, ui_key, "communicator.tmpl", "Communicator", 475, 700)
// when the ui is first opened this is the data it will use
ui.set_initial_data(data)
// open the new ui window
@@ -269,9 +358,23 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
if(new_name)
owner = new_name
name = "[owner]'s [initial(name)]"
+ if(camera)
+ camera.name = name
+ camera.c_tag = name
if(href_list["toggle_visibility"])
- network_visibility = !network_visibility
+ switch(network_visibility)
+ if(1) //Visible, becoming invisbile
+ network_visibility = 0
+ if(camera)
+ camera.remove_network(NETWORK_COMMUNICATORS)
+ if(0) //Invisible, becoming visible
+ network_visibility = 1
+ if(camera)
+ camera.add_network(NETWORK_COMMUNICATORS)
+
+ if(href_list["toggle_ringer"])
+ ringer = !ringer
if(href_list["add_hex"])
var/hex = href_list["add_hex"]
@@ -292,35 +395,80 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
return
var/their_address = href_list["dial"]
exonet.send_message(their_address, "voice")
-
+
+ if(href_list["decline"])
+ var/ref_to_remove = href_list["decline"]
+ var/atom/decline = locate(ref_to_remove)
+ if(decline)
+ del_request(decline)
+
+ if(href_list["message"])
+ if(!get_connection_to_tcomms())
+ usr << "Error: Cannot connect to Exonet node. "
+ return
+ var/their_address = href_list["message"]
+ var/text = sanitizeSafe(input(usr,"Enter your message.","Text Message"))
+ if(text)
+ exonet.send_message(their_address, "text", text)
+ im_list += list(list("address" = exonet.address, "to_address" = their_address, "im" = text))
+
if(href_list["disconnect"])
var/name_to_disconnect = href_list["disconnect"]
for(var/mob/living/voice/V in contents)
if(name_to_disconnect == V.name)
- close_connection(usr, V, "[usr] hung up.")
+ close_connection(usr, V, "[usr] hung up")
for(var/obj/item/device/communicator/comm in communicating)
if(name_to_disconnect == comm.name)
- close_connection(usr, comm, "[usr] hung up.")
+ close_connection(usr, comm, "[usr] hung up")
+
+ if(href_list["startvideo"])
+ var/ref_to_video = href_list["startvideo"]
+ var/obj/item/device/communicator/comm = locate(ref_to_video)
+ if(comm)
+ connect_video(usr, comm)
+
+ if(href_list["endvideo"])
+ if(video_source)
+ end_video()
+
+ if(href_list["watchvideo"])
+ if(video_source)
+ watch_video(usr,video_source.loc)
if(href_list["copy"])
target_address = href_list["copy"]
-
+
+ if(href_list["copy_name"])
+ target_address_name = href_list["copy_name"]
+
if(href_list["hang_up"])
for(var/mob/living/voice/V in contents)
- close_connection(usr, V, "[usr] hung up.")
+ close_connection(usr, V, "[usr] hung up")
for(var/obj/item/device/communicator/comm in communicating)
- close_connection(usr, comm, "[usr] hung up.")
-
+ close_connection(usr, comm, "[usr] hung up")
+
if(href_list["switch_tab"])
selected_tab = href_list["switch_tab"]
+ if(href_list["edit"])
+ var/n = input(usr, "Please enter message", name, notehtml)
+ n = sanitizeSafe(n, extra = 0)
+ if(n)
+ note = html_decode(n)
+ notehtml = note
+ note = replacetext(note, "\n", " ")
+ else
+ note = ""
+ notehtml = note
+
nanomanager.update_uis(src)
add_fingerprint(usr)
// Proc: receive_exonet_message()
-// Parameters: 3 (origin atom - the source of the message's holder, origin_address - where the message came from, message - the message received)
-// Description: Handles voice requests and invite messages originating from both real communicators and ghosts. Also includes a ping response.
-/obj/item/device/communicator/receive_exonet_message(var/atom/origin_atom, origin_address, message)
+// Parameters: 4 (origin atom - the source of the message's holder, origin_address - where the message came from, message - the message received,
+// text - message text to send if message is of type "text")
+// Description: Handles voice requests and invite messages originating from both real communicators and ghosts. Also includes a ping response and IM function.
+/obj/item/device/communicator/receive_exonet_message(var/atom/origin_atom, origin_address, message, text)
if(message == "voice")
if(isobserver(origin_atom) || istype(origin_atom, /obj/item/device/communicator))
if(origin_atom in voice_invites)
@@ -338,11 +486,14 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
var/random = rand(200,350)
random = random / 10
exonet.send_message(origin_address, "64 bytes received from [exonet.address] ecmp_seq=1 ttl=51 time=[random] ms")
+ if(message == "text")
+ request_im(origin_atom, origin_address, text)
+ return
// Proc: receive_exonet_message()
// Parameters: 3 (origin atom - the source of the message's holder, origin_address - where the message came from, message - the message received)
// Description: Handles voice requests and invite messages originating from both real communicators and ghosts. Also includes a ping response.
-/mob/dead/observer/receive_exonet_message(origin_atom, origin_address, message)
+/mob/observer/dead/receive_exonet_message(origin_atom, origin_address, message)
if(message == "voice")
if(istype(origin_atom, /obj/item/device/communicator))
var/obj/item/device/communicator/comm = origin_atom
@@ -357,6 +508,8 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
var/random = rand(450,700)
random = random / 10
exonet.send_message(origin_address, "64 bytes received from [exonet.address] ecmp_seq=1 ttl=51 time=[random] ms")
+ if(message == "text") //Ghosts don't get texting yet. Mostly for spam prevention by ghosts but also due to ui requirements not sorted out yet.
+ return
// Proc: register_device()
// Parameters: 1 (user - the person to use their name for)
@@ -367,6 +520,28 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
owner = user.name
name = "[owner]'s [initial(name)]"
+ if(camera)
+ camera.name = name
+ camera.c_tag = name
+
+// Proc: add_communicating()
+// Parameters: 1 (comm - the communicator to add to communicating)
+// Description: Used when this communicator gets a new communicator to relay say/me messages to
+/obj/item/device/communicator/proc/add_communicating(obj/item/device/communicator/comm)
+ if(!comm || !istype(comm)) return
+
+ communicating |= comm
+ listening_objects |= src
+ update_icon()
+
+// Proc: del_communicating()
+// Parameters: 1 (comm - the communicator to remove from communicating)
+// Description: Used when this communicator is being asked to stop relaying say/me messages to another
+/obj/item/device/communicator/proc/del_communicating(obj/item/device/communicator/comm)
+ if(!comm || !istype(comm)) return
+
+ communicating.Remove(comm)
+ update_icon()
// Proc: open_connection()
// Parameters: 2 (user - the person who initiated the connecting being opened, candidate - the communicator or observer that will connect to the device)
@@ -401,8 +576,8 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
comm.visible_message("\icon[src] Connection to [src] at [exonet.address] established. ")
sleep(20)
- communicating |= comm
- comm.communicating |= src
+ src.add_communicating(comm)
+ comm.add_communicating(src)
// Proc: open_connection_to_ghost()
// Parameters: 2 (user - the person who initiated this, candidate - the ghost that will be turned into a voice mob)
@@ -424,6 +599,7 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
new_voice.mind = candidate.mind //Transfer the mind, if any.
new_voice.ckey = candidate.ckey //Finally, bring the client over.
voice_mobs.Add(new_voice)
+ listening_objects |= src
var/obj/screen/blackness = new() //Makes a black screen, so the candidate can't see what's going on before actually 'connecting' to the communicator.
blackness.screen_loc = ui_entire_screen
@@ -474,15 +650,22 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
visible_message("\icon[src] [reason]. ")
voice_mobs.Remove(voice)
qdel(voice)
+ update_icon()
for(var/obj/item/device/communicator/comm in communicating) //Now we handle real communicators.
if(target && comm != target)
continue
+ src.del_communicating(comm)
+ comm.del_communicating(src)
comm.visible_message("\icon[src] [reason]. ")
visible_message("\icon[src] [reason]. ")
- comm.communicating.Remove(src)
- communicating.Remove(comm)
- update_icon()
+ if(comm.camera && video_source == comm.camera) //We hung up on the person on video
+ end_video()
+ if(camera && comm.video_source == camera) //We hung up on them while they were watching us
+ comm.end_video()
+
+ if(voice_mobs.len == 0 && communicating.len == 0)
+ listening_objects.Remove(src)
// Proc: request()
// Parameters: 1 (candidate - the ghost or communicator wanting to call the device)
@@ -503,9 +686,10 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
voice_requests |= candidate
- playsound(loc, 'sound/machines/twobeep.ogg', 50, 1)
- for (var/mob/O in hearers(2, loc))
- O.show_message(text("\icon[src] *beep*"))
+ if(ringer)
+ playsound(loc, 'sound/machines/twobeep.ogg', 50, 1)
+ for (var/mob/O in hearers(2, loc))
+ O.show_message(text("\icon[src] *beep*"))
alert_called = 1
update_icon()
@@ -518,6 +702,65 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
if(L)
L << "\icon[src] Communications request from [who]. "
+// Proc: del_request()
+// Parameters: 1 (candidate - the ghost or communicator to be declined)
+// Description: Declines a request and cleans up both ends
+/obj/item/device/communicator/proc/del_request(var/atom/candidate)
+ if(!(candidate in voice_requests))
+ return
+
+ if(isobserver(candidate))
+ candidate << "Your communicator call request was declined. "
+ else if(istype(candidate, /obj/item/device/communicator))
+ var/obj/item/device/communicator/comm = candidate
+ comm.voice_invites -= src
+
+ voice_requests -= candidate
+
+ //Search for holder of our device.
+ var/mob/living/us = null
+ if(loc && isliving(loc))
+ us = loc
+
+ if(us)
+ us << "\icon[src] Declined request. "
+
+// Proc: request_im()
+// Parameters: 3 (candidate - the communicator wanting to message the device, origin_address - the address of the sender, text - the message)
+// Description: Response to a communicator trying to message the device.
+// Adds them to the list of people that have messaged this device and adds the message to the message list.
+/obj/item/device/communicator/proc/request_im(var/atom/candidate, var/origin_address, var/text)
+ var/who = null
+ if(isobserver(candidate))
+ return
+ else if(istype(candidate, /obj/item/device/communicator))
+ var/obj/item/device/communicator/comm = candidate
+ who = comm.owner
+ comm.im_contacts |= src
+ im_list += list(list("address" = origin_address, "to_address" = exonet.address, "im" = text))
+ else return
+
+ im_contacts |= candidate
+
+ if(!who)
+ return
+
+ if(ringer)
+ playsound(loc, 'sound/machines/twobeep.ogg', 50, 1)
+ for (var/mob/O in hearers(2, loc))
+ O.show_message(text("\icon[src] *beep*"))
+
+ alert_called = 1
+ update_icon()
+
+ //Search for holder of the device.
+ var/mob/living/L = null
+ if(loc && isliving(loc))
+ L = loc
+
+ if(L)
+ L << "\icon[src] Message from [who]. "
+
// Proc: Destroy()
// Parameters: None
// Description: Deletes all the voice mobs, disconnects all linked communicators, and cuts lists to allow successful qdel()
@@ -532,6 +775,9 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
voice_invites.Cut()
all_communicators -= src
processing_objects -= src
+ listening_objects.Remove(src)
+ qdel(camera)
+ camera = null
if(exonet)
exonet.remove_address()
exonet = null
@@ -541,7 +787,11 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
// Parameters: None
// Description: Self explanatory
/obj/item/device/communicator/update_icon()
- if(voice_mobs.len > 0)
+ if(video_source)
+ icon_state = "communicator-video"
+ return
+
+ if(voice_mobs.len || communicating.len)
icon_state = "communicator-active"
return
@@ -557,10 +807,18 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
/obj/item/device/communicator/see_emote(mob/living/M, text)
var/rendered = "\icon[src] [text] "
for(var/obj/item/device/communicator/comm in communicating)
- for(var/mob/mob in viewers(get_turf(comm))) //We can't use visible_message(), or else we will get an infinite loop if two communicators hear each other.
- mob.show_message(rendered)
- for(var/mob/living/voice/V in comm.contents)
- V.show_message(rendered)
+ var/turf/T = get_turf(comm)
+ if(!T) return
+ var/list/in_range = get_mobs_and_objs_in_view_fast(T,world.view,0) //Range of 3 since it's a tiny video display
+ var/list/mobs_to_relay = in_range["mobs"]
+
+ for(var/mob/mob in mobs_to_relay) //We can't use visible_message(), or else we will get an infinite loop if two communicators hear each other.
+ var/dst = get_dist(get_turf(mob),get_turf(comm))
+ if(dst <= video_range)
+ mob.show_message(rendered)
+ else
+ mob << "You can barely see some movement on \the [src]'s display."
+
..()
// Proc: hear_talk()
@@ -569,9 +827,12 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
// Description: Relays the speech to all linked communicators.
/obj/item/device/communicator/hear_talk(mob/living/M, text, verb, datum/language/speaking)
for(var/obj/item/device/communicator/comm in communicating)
- var/list/mobs_to_relay = list()
- mobs_to_relay |= viewers(get_turf(comm))
- mobs_to_relay |= comm.contents //Needed so ghost-callers can see speech.
+
+ var/turf/T = get_turf(comm)
+ if(!T) return
+ var/list/in_range = get_mobs_and_objs_in_view_fast(T,world.view,0)
+ var/list/mobs_to_relay = in_range["mobs"]
+
for(var/mob/mob in mobs_to_relay)
//Can whoever is hearing us understand?
if(!mob.say_understands(M, speaking))
@@ -593,14 +854,19 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
/obj/item/device/communicator/show_message(msg, type, alt, alt_type)
var/rendered = "\icon[src] [msg] "
for(var/obj/item/device/communicator/comm in communicating)
- for(var/mob/mob in hearers(get_turf(comm))) //Ditto for audible messages.
+ var/turf/T = get_turf(comm)
+ if(!T) return
+ var/list/in_range = get_mobs_and_objs_in_view_fast(T,world.view,0)
+ var/list/mobs_to_relay = in_range["mobs"]
+
+ for(var/mob/mob in mobs_to_relay)
mob.show_message(rendered)
..()
// Verb: join_as_voice()
// Parameters: None
// Description: Allows ghosts to call communicators, if they meet all the requirements.
-/mob/dead/verb/join_as_voice()
+/mob/observer/dead/verb/join_as_voice()
set category = "Ghost"
set name = "Call Communicator"
set desc = "If there is a communicator available, send a request to speak through it. This will reset your respawn timer, if someone picks up."
@@ -643,13 +909,77 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
var/choice = input(src,"Send a voice request to whom?") as null|anything in choices
if(choice)
var/obj/item/device/communicator/chosen_communicator = choice
- var/mob/dead/observer/O = src
+ var/mob/observer/dead/O = src
if(O.exonet)
O.exonet.send_message(chosen_communicator.exonet.address, "voice")
src << "A communications request has been sent to [chosen_communicator]. Now you need to wait until someone answers."
-/obj/item/device/communicator/integrated //For synths who have no hands.
+// Proc: connect_video()
+// Parameters: user - the mob doing the viewing of video, comm - the communicator at the far end
+// Description: Sets up a videocall and puts the first view into it using watch_video, and updates the icon
+/obj/item/device/communicator/proc/connect_video(mob/user,obj/item/device/communicator/comm)
+ if((!user) || (!comm) || user.stat) return //KO or dead, or already in a video
+
+ if(video_source) //Already in a video
+ user << "You are already connected to a video call! "
+
+ if(user.blinded) //User is blinded
+ user << "You cannot see well enough to do that! "
+
+ if(!(src in comm.communicating) || !comm.camera) //You called someone with a broken communicator or one that's fake or yourself or something
+ user << "\icon[src]ERROR: Video failed. Either bandwidth is too low, or the other communicator is malfunctioning. "
+
+ user << "\icon[src] Attempting to start video over existing call. "
+ sleep(30)
+ user << "\icon[src] Please wait... "
+
+ video_source = comm.camera
+ comm.visible_message("\icon[src] New video connection from [comm]. ")
+ watch_video(user)
+ update_icon()
+
+// Proc: watch_video()
+// Parameters: user - the mob doing the viewing of video
+// Description: Moves a mob's eye to the far end for the duration of viewing the far end
+/obj/item/device/communicator/proc/watch_video(mob/user)
+ if(!Adjacent(user) || !video_source) return
+ user.set_machine(video_source)
+ user.reset_view(video_source)
+ user << "Now viewing video session. To leave camera view: OOC -> Cancel Camera View "
+ spawn(0)
+ while(user.machine == video_source && Adjacent(user))
+ var/turf/T = get_turf(video_source)
+ if(!T || !is_on_same_plane_or_station(T.z, user.z) || !video_source.can_use())
+ user << "The screen bursts into static, then goes black. "
+ video_cleanup(user)
+ return
+ sleep(10)
+
+ video_cleanup(user)
+
+// Proc: video_cleanup()
+// Parameters: user - the mob who doesn't want to see video anymore
+// Description: Cleans up mob's client when they stop watching a video
+/obj/item/device/communicator/proc/video_cleanup(mob/user)
+ if(!user) return
+
+ user.reset_view(null)
+ user.unset_machine()
+
+// Proc: end_video()
+// Parameters: reason - the text reason to print for why it ended
+// Description: Ends the video call by clearing video_source
+/obj/item/device/communicator/proc/end_video(var/reason)
+ video_source = null
+
+ . = "\icon[src] [reason ? reason : "Video session ended"]. "
+
+ visible_message(.)
+ update_icon()
+
+//For synths who have no hands.
+/obj/item/device/communicator/integrated
name = "integrated communicator"
desc = "A circuit used for long-range communications, able to be integrated into a system."
@@ -679,4 +1009,13 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
usr << "You can't do that because you are dead!"
return
- src.attack_self(usr)
\ No newline at end of file
+ src.attack_self(usr)
+
+// A camera preset for spawning in the communicator
+/obj/machinery/camera/communicator
+ network = list(NETWORK_COMMUNICATORS)
+
+/obj/machinery/camera/communicator/New()
+ ..()
+ client_huds |= global_hud.whitense
+ client_huds |= global_hud.darkMask
\ No newline at end of file
diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm
index da512f9449..d143220935 100644
--- a/code/game/objects/items/devices/flash.dm
+++ b/code/game/objects/items/devices/flash.dm
@@ -31,14 +31,17 @@
last_used = world.time
times_used = max(0,round(times_used)) //sanity
-
-/obj/item/device/flash/attack(mob/living/M as mob, mob/user as mob)
+//attack_as_weapon
+/obj/item/device/flash/attack(mob/living/M, mob/living/user, var/target_zone)
if(!user || !M) return //sanity
M.attack_log += text("\[[time_stamp()]\] Has been flashed (attempt) with [src.name] by [user.name] ([user.ckey]) ")
user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to flash [M.name] ([M.ckey]) ")
msg_admin_attack("[user.name] ([user.ckey]) Used the [src.name] to flash [M.name] ([M.ckey]) (JMP )")
+ user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
+ user.do_attack_animation(M)
+
if(!clown_check(user)) return
if(broken)
user << "\The [src] is broken. "
@@ -60,6 +63,10 @@
else //can only use it 5 times a minute
user << "*click* *click* "
return
+
+ user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
+ user.do_attack_animation(M)
+
playsound(src.loc, 'sound/weapons/flash.ogg', 100, 1)
var/flashfail = 0
@@ -73,7 +80,7 @@
flash_strength *= H.species.flash_mod
if(flash_strength > 0)
M.Weaken(flash_strength)
- flick("e_flash", M.flash)
+ M.flash_eyes()
else
flashfail = 1
@@ -112,6 +119,9 @@
/obj/item/device/flash/attack_self(mob/living/carbon/user as mob, flag = 0, emp = 0)
if(!user || !clown_check(user)) return
+
+ user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
+
if(broken)
user.show_message("The [src.name] is broken ", 2)
return
@@ -148,7 +158,7 @@
var/safety = M:eyecheck()
if(!safety)
if(!M.blinded)
- flick("flash", M.flash)
+ M.flash_eyes()
return
@@ -167,7 +177,7 @@
var/safety = M.eyecheck()
if(safety <= 0)
M.Weaken(10)
- flick("e_flash", M.flash)
+ M.flash_eyes()
for(var/mob/O in viewers(M, null))
O.show_message("[M] is blinded by the flash! ")
..()
@@ -178,7 +188,8 @@
icon_state = "sflash"
origin_tech = list(TECH_MAGNET = 2, TECH_COMBAT = 1)
-/obj/item/device/flash/synthetic/attack(mob/living/M as mob, mob/user as mob)
+//attack_as_weapon
+/obj/item/device/flash/synthetic/attack(mob/living/M, mob/living/user, var/target_zone)
..()
if(!broken)
broken = 1
diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm
index c7f90e9746..6a68d555b0 100644
--- a/code/game/objects/items/devices/flashlight.dm
+++ b/code/game/objects/items/devices/flashlight.dm
@@ -79,7 +79,9 @@
user << "\The [M]'s pupils narrow slightly, but are still very dilated. "
else
user << "\The [M]'s pupils narrow. "
- flick("flash", M.flash)
+
+ user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) //can be used offensively
+ M.flash_eyes()
else
return ..()
@@ -199,7 +201,7 @@
src.force = on_damage
src.damtype = "fire"
processing_objects += src
-
+
/obj/item/device/flashlight/flare/proc/ignite() //Used for flare launchers.
on = !on
update_icon()
@@ -208,6 +210,76 @@
processing_objects += src
return 1
+//Glowsticks
+
+/obj/item/device/flashlight/glowstick
+ name = "green glowstick"
+ desc = "A green military-grade glowstick."
+ w_class = 2.0
+ brightness_on = 4
+ light_power = 2
+ light_color = "#49F37C"
+ icon_state = "glowstick"
+ item_state = "glowstick"
+ var/fuel = 0
+
+/obj/item/device/flashlight/glowstick/New()
+ fuel = rand(1600, 2000)
+ ..()
+
+/obj/item/device/flashlight/glowstick/process()
+ fuel = max(fuel - 1, 0)
+ if(!fuel || !on)
+ turn_off()
+ if(!fuel)
+ src.icon_state = "[initial(icon_state)]-empty"
+ processing_objects -= src
+
+/obj/item/device/flashlight/glowstick/proc/turn_off()
+ on = 0
+ update_icon()
+
+/obj/item/device/flashlight/glowstick/attack_self(mob/user)
+
+ if(!fuel)
+ user << "The glowstick has already been turned on. "
+ return
+ if(on)
+ return
+
+ . = ..()
+ if(.)
+ user.visible_message("[user] cracks and shakes the glowstick. ", "You crack and shake the glowstick, turning it on! ")
+ processing_objects += src
+
+/obj/item/device/flashlight/glowstick/red
+ name = "red glowstick"
+ desc = "A red military-grade glowstick."
+ light_color = "#FC0F29"
+ icon_state = "glowstick_red"
+ item_state = "glowstick_red"
+
+/obj/item/device/flashlight/glowstick/blue
+ name = "blue glowstick"
+ desc = "A blue military-grade glowstick."
+ light_color = "#599DFF"
+ icon_state = "glowstick_blue"
+ item_state = "glowstick_blue"
+
+/obj/item/device/flashlight/glowstick/orange
+ name = "orange glowstick"
+ desc = "A orange military-grade glowstick."
+ light_color = "#FA7C0B"
+ icon_state = "glowstick_orange"
+ item_state = "glowstick_orange"
+
+/obj/item/device/flashlight/glowstick/yellow
+ name = "yellow glowstick"
+ desc = "A yellow military-grade glowstick."
+ light_color = "#FEF923"
+ icon_state = "glowstick_yellow"
+ item_state = "glowstick_yellow"
+
/obj/item/device/flashlight/slime
gender = PLURAL
name = "glowing slime extract"
diff --git a/code/game/objects/items/devices/hacktool.dm b/code/game/objects/items/devices/hacktool.dm
new file mode 100644
index 0000000000..0cf4af6c74
--- /dev/null
+++ b/code/game/objects/items/devices/hacktool.dm
@@ -0,0 +1,100 @@
+/obj/item/device/multitool/hacktool
+ var/is_hacking = 0
+ var/max_known_targets
+
+ var/in_hack_mode = 0
+ var/list/known_targets
+ var/list/supported_types
+ var/datum/topic_state/default/must_hack/hack_state
+
+/obj/item/device/multitool/hacktool/New()
+ ..()
+ known_targets = list()
+ max_known_targets = 5 + rand(1,3)
+ supported_types = list(/obj/machinery/door/airlock)
+ hack_state = new(src)
+
+/obj/item/device/multitool/hacktool/Destroy()
+ for(var/T in known_targets)
+ var/atom/target = T
+ target.unregister(OBSERVER_EVENT_DESTROY, src)
+ known_targets.Cut()
+ qdel(hack_state)
+ hack_state = null
+ return ..()
+
+/obj/item/device/multitool/hacktool/attackby(var/obj/W, var/mob/user)
+ if(isscrewdriver(W))
+ in_hack_mode = !in_hack_mode
+ playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
+ else
+ ..()
+
+/obj/item/device/multitool/hacktool/resolve_attackby(atom/A, mob/user)
+ sanity_check()
+
+ if(!in_hack_mode)
+ return ..()
+
+ if(!attempt_hack(user, A))
+ return 0
+
+ A.ui_interact(user, state = hack_state)
+ return 1
+
+/obj/item/device/multitool/hacktool/proc/attempt_hack(var/mob/user, var/atom/target)
+ if(is_hacking)
+ user << "You are already hacking! "
+ return 0
+ if(!is_type_in_list(target, supported_types))
+ user << "\icon[src] Unable to hack this target! "
+ return 0
+ var/found = known_targets.Find(target)
+ if(found)
+ known_targets.Swap(1, found) // Move the last hacked item first
+ return 1
+
+ user << "You begin hacking \the [target]... "
+ is_hacking = 1
+ // On average hackin takes ~30 seconds. Fairly small random span to avoid people simply aborting and trying again
+ var/hack_result = do_after(user, (20 SECONDS + rand(0, 10 SECONDS) + rand(0, 10 SECONDS)))
+ is_hacking = 0
+
+ if(hack_result && in_hack_mode)
+ user << "Your hacking attempt was succesful! "
+ playsound(src.loc, 'sound/piano/A#6.ogg', 75)
+ else
+ user << "Your hacking attempt failed! "
+ return 0
+
+ known_targets.Insert(1, target) // Insert the newly hacked target first,
+ target.register(OBSERVER_EVENT_DESTROY, src, /obj/item/device/multitool/hacktool/proc/on_target_destroy)
+ return 1
+
+/obj/item/device/multitool/hacktool/proc/sanity_check()
+ if(max_known_targets < 1) max_known_targets = 1
+ // Cut away the oldest items if the capacity has been reached
+ if(known_targets.len > max_known_targets)
+ for(var/i = (max_known_targets + 1) to known_targets.len)
+ var/atom/A = known_targets[i]
+ A.unregister(OBSERVER_EVENT_DESTROY, src)
+ known_targets.Cut(max_known_targets + 1)
+
+/obj/item/device/multitool/hacktool/proc/on_target_destroy(var/target)
+ known_targets -= target
+
+/datum/topic_state/default/must_hack
+ var/obj/item/device/multitool/hacktool/hacktool
+
+/datum/topic_state/default/must_hack/New(var/hacktool)
+ src.hacktool = hacktool
+ ..()
+
+/datum/topic_state/default/must_hack/Destroy()
+ hacktool = null
+ return ..()
+
+/datum/topic_state/default/must_hack/can_use_topic(var/src_object, var/mob/user)
+ if(!hacktool || !hacktool.in_hack_mode || !(src_object in hacktool.known_targets))
+ return STATUS_CLOSE
+ return ..()
diff --git a/code/game/objects/items/devices/locker_painter.dm b/code/game/objects/items/devices/locker_painter.dm
new file mode 100644
index 0000000000..567e296348
--- /dev/null
+++ b/code/game/objects/items/devices/locker_painter.dm
@@ -0,0 +1,140 @@
+/obj/item/device/closet_painter
+ name = "closet painter"
+ icon = 'icons/obj/bureaucracy.dmi'
+ icon_state = "labeler1"
+ item_state = "flight"
+
+ var/colour = "plain"
+ var/colour_secure = "plain"
+
+ var/list/colours = list(
+ "plain" = list("open" = "open", "closed" = "closed"),
+ "blue" = list("open" = "open", "closed" = "blue"),
+ "mixed" = list("open" = "open", "closed" = "mixed"),
+ "grey" = list("open" = "open", "closed" = "grey"),
+ "green" = list("open" = "open", "closed" = "green"),
+ "orange" = list("open" = "open", "closed" = "orange"),
+ "pink" = list("open" = "open", "closed" = "pink"),
+ "red" = list("open" = "open", "closed" = "red"),
+ "white" = list("open" = "open", "closed" = "white"),
+ "yellow" = list("open" = "open", "closed" = "yellow"),
+ "black" = list("open" = "open", "closed" = "black"),
+ "bio" = list("open" = "bioopen", "closed" = "bio"),
+ "bio-virology" = list("open" = "bio_virologyopen", "closed" = "bio_virology"),
+ "bio-security" = list("open" = "bio_securityopen", "closed" = "bio_security"),
+ "bio-janitor" = list("open" = "bio_janitoropen", "closed" = "bio_janitor"),
+ "bio-scientist" = list("open" = "bio_scientistopen", "closed" = "bio_scientist"),
+ "bombsuit" = list("open" = "bombsuitopen", "closed" = "bombsuit"),
+ "bombsuit-security" = list("open" = "bombsuitsecopen", "closed" = "bombsuitsec"),
+ "full-red" = list("open" = "syndicateopen", "closed" = "syndicate"),
+ "full-green" = list("open" = "syndicate1open", "closed" = "syndicate1"),
+ "full-purple" = list("open" = "aclosetopen", "closed" = "acloset"),
+ "mining" = list("open" = "miningopen", "closed" = "mining"),
+ "emergency" = list("open" = "emergencyopen", "closed" = "emergency"),
+ "fire" = list("open" = "fireclosetopen", "closed" = "firecloset"),
+ "tool" = list("open" = "toolclosetopen", "closed" = "toolcloset"),
+ "radiation" = list("open" = "toolclosetopen", "closed" = "radsuitcloset")
+ )
+
+ var/list/colours_secure = list(
+ "plain" = list("open" = "open", "closed" = "secure", "locked" = "secure1", "broken" = "securebroken", "off" = "secureoff"),
+ "medical-red" = list("open" = "medicalopen", "closed" = "medical", "locked" = "medical1", "broken" = "medicalbroken", "off" = "medicaloff"),
+ "medical-green" = list("open" = "securemedopen", "closed" = "securemed", "locked" = "securemed1", "broken" = "securemedbroken", "off" = "securemedoff"),
+ "CMO" = list("open" = "cmosecureopen", "closed" = "cmosecure", "locked" = "cmosecure1", "broken" = "cmosecurebroken", "off" = "cmosecureoff"),
+ "cargo" = list("open" = "securecargoopen", "closed" = "securecargo", "locked" = "securecargo1", "broken" = "securecargobroken", "off" = "securecargooff"),
+ "mining" = list("open" = "miningsecopen", "closed" = "miningsec", "locked" = "miningsec1", "broken" = "miningsecbroken", "off" = "miningsecoff"),
+ "QM" = list("open" = "secureqmopen", "closed" = "secureqm", "locked" = "secureqm1", "broken" = "secureqmbroken", "off" = "secureqmoff"),
+ "hydroponics" = list("open" = "hydrosecureopen", "closed" = "hydrosecure", "locked" = "hydrosecure1", "broken" = "hydrosecurebroken", "off" = "hydrosecureoff"),
+ "atmospherics" = list("open" = "secureatmopen", "closed" = "secureatm", "locked" = "secureatm1", "broken" = "secureatmbroken", "off" = "secureatmoff"),
+ "engineer" = list("open" = "secureengopen", "closed" = "secureeng", "locked" = "secureeng1", "broken" = "secureengbroken", "off" = "secureengoff"),
+ "CE" = list("open" = "secureceopen", "closed" = "securece", "locked" = "securece1", "broken" = "securecebroken", "off" = "secureceoff"),
+ "electrical" = list("open" = "toolclosetopen", "closed" = "secureengelec", "locked" = "secureengelec1", "broken" = "secureengelecbroken", "off" = "secureengelecoff"),
+ "welding" = list("open" = "toolclosetopen", "closed" = "secureengweld", "locked" = "secureengweld1", "broken" = "secureengweldbroken", "off" = "secureengweldoff"),
+ "research" = list("open" = "secureresopen", "closed" = "secureres", "locked" = "secureres1", "broken" = "secureresbroken", "off" = "secureresoff"),
+ "RD" = list("open" = "rdsecureopen", "closed" = "rdsecure", "locked" = "rdsecure1", "broken" = "rdsecurebroken", "off" = "rdsecureoff"),
+ "security" = list("open" = "secopen", "closed" = "sec", "locked" = "sec1", "broken" = "secbroken", "off" = "secoff"),
+ "warden" = list("open" = "wardensecureopen", "closed" = "wardensecure", "locked" = "wardensecure1", "broken" = "wardensecurebroken", "off" = "wardensecureoff"),
+ "HoS" = list("open" = "hossecureopen", "closed" = "hossecure", "locked" = "hossecure1", "broken" = "hossecurebroken", "off" = "hossecureoff"),
+ "HoP" = list("open" = "hopsecureopen", "closed" = "hopsecure", "locked" = "hopsecure1", "broken" = "hopsecurebroken", "off" = "hopsecureoff"),
+ "Captain" = list("open" = "capsecureopen", "closed" = "capsecure", "locked" = "capsecure1", "broken" = "capsecurebroken", "off" = "capsecureoff")
+ )
+
+/obj/item/device/closet_painter/afterattack(atom/A, var/mob/user, proximity)
+ if(!proximity)
+ return
+
+ if(!istype(A,/obj/structure/closet))
+ user << "\The [src] can only be used on closets. "
+ return
+
+ var/config_error
+
+ if(istype(A,/obj/structure/closet/secure_closet))
+ var/obj/structure/closet/secure_closet/F = A
+ if(F.broken)
+ user << "\The [src] cannot paint broken closets. "
+ return
+
+ var/list/colour_data = colours_secure[colour_secure]
+ if(!islist(colour_data))
+ config_error = 1
+ if(!config_error)
+ F.icon_opened = colour_data["open"]
+ F.icon_closed = colour_data["closed"]
+ F.icon_locked = colour_data["locked"]
+ F.icon_broken = colour_data["broken"]
+ F.icon_off = colour_data["off"]
+ F.update_icon()
+
+ else
+ var/obj/structure/closet/F = A
+ var/list/colour_data = colours[colour]
+ if(!islist(colour_data))
+ config_error = 1
+ if(!config_error)
+ F.icon_opened = colour_data["open"]
+ F.icon_closed = colour_data["closed"]
+ F.update_icon()
+
+ if(config_error)
+ user << "\The [src] flashes an error light. You might need to reconfigure it. "
+ return
+
+/obj/item/device/closet_painter/attack_self(var/mob/user)
+ var/choice = input("Do you wish to change the regular closet colour or the secure closet colour?") as null|anything in list("Regular Closet Colour","Secure Closet Colour")
+ if(choice == "Regular Closet Colour")
+ choose_colour()
+ else if(choice == "Secure Closet Colour")
+ choose_colour_secure()
+
+/obj/item/device/closet_painter/examine(mob/user)
+ ..(user)
+ user << "It is configured to produce the '[colour]' paint scheme or the '[colour_secure]' secure closet paint scheme."
+
+/obj/item/device/closet_painter/verb/choose_colour()
+ set name = "Choose Colour"
+ set desc = "Choose a regular closet painter colour."
+ set category = "Object"
+ set src in usr
+
+ if(usr.incapacitated())
+ return
+
+ var/new_colour = input("Select a colour.") as null|anything in colours
+ if(new_colour && !isnull(colours[new_colour]))
+ colour = new_colour
+ usr << "You set \the [src] regular closet colour to '[colour]'. "
+
+/obj/item/device/closet_painter/verb/choose_colour_secure()
+ set name = "Choose Secure Colour"
+ set desc = "Choose a secure closet painter colour."
+ set category = "Object"
+ set src in usr
+
+ if(usr.incapacitated())
+ return
+
+ var/new_colour_secure = input("Select a colour.") as null|anything in colours_secure
+ if(new_colour_secure && !isnull(colours_secure[new_colour_secure]))
+ colour_secure = new_colour_secure
+ usr << "You set \the [src] secure closet colour to '[colour_secure]'. "
\ No newline at end of file
diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm
index 867e64f446..cbc60670e7 100644
--- a/code/game/objects/items/devices/multitool.dm
+++ b/code/game/objects/items/devices/multitool.dm
@@ -20,4 +20,14 @@
origin_tech = list(TECH_MAGNET = 1, TECH_ENGINEERING = 1)
var/obj/machinery/telecomms/buffer // simple machine buffer for device linkage
- var/obj/machinery/clonepod/connecting //same for cryopod linkage
\ No newline at end of file
+ var/obj/machinery/clonepod/connecting //same for cryopod linkage
+ var/obj/machinery/connectable //Used to connect machinery, currently only used by Xenobio2.
+
+/obj/item/device/multitool/attack_self(mob/user)
+ var/clear = alert("Do you want to clear the buffers on the [src]?",, "Yes", "No",)
+ if(clear == "Yes")
+ buffer = null
+ connecting = null
+ connectable = null
+ else
+ ..()
\ No newline at end of file
diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm
index e5e94fc93d..5b769ed803 100644
--- a/code/game/objects/items/devices/radio/electropack.dm
+++ b/code/game/objects/items/devices/radio/electropack.dm
@@ -12,7 +12,7 @@
var/code = 2
-/obj/item/device/radio/electropack/attack_hand(mob/user as mob)
+/obj/item/device/radio/electropack/attack_hand(mob/living/user as mob)
if(src == user.back)
user << "You need help taking this off! "
return
diff --git a/code/game/objects/items/devices/radio/encryptionkey.dm b/code/game/objects/items/devices/radio/encryptionkey.dm
index 9a54fa1829..9b5dffdd37 100644
--- a/code/game/objects/items/devices/radio/encryptionkey.dm
+++ b/code/game/objects/items/devices/radio/encryptionkey.dm
@@ -12,9 +12,6 @@
var/syndie = 0
var/list/channels = list()
-
-/obj/item/device/encryptionkey/New()
-
/obj/item/device/encryptionkey/attackby(obj/item/weapon/W as obj, mob/user as mob)
/obj/item/device/encryptionkey/syndicate
diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm
index ed8cf4ce0b..7aaf609eca 100644
--- a/code/game/objects/items/devices/radio/intercom.dm
+++ b/code/game/objects/items/devices/radio/intercom.dm
@@ -6,8 +6,10 @@
w_class = 4.0
canhear_range = 2
flags = CONDUCT | NOBLOODY
+ var/circuit = /obj/item/weapon/circuitboard/intercom
var/number = 0
var/last_tick //used to delay the powercheck
+ var/wiresexposed = 0
/obj/item/device/radio/intercom/custom
name = "station intercom (Custom)"
@@ -81,6 +83,41 @@
spawn (0)
attack_self(user)
+/obj/item/device/radio/intercom/attackby(obj/item/W as obj, mob/user as mob)
+ src.add_fingerprint(user)
+ if(istype(W, /obj/item/weapon/screwdriver)) // Opening the intercom up.
+ wiresexposed = !wiresexposed
+ user << "The wires have been [wiresexposed ? "exposed" : "unexposed"]"
+ if(wiresexposed)
+ if(!on)
+ icon_state = "intercom-p_open"
+ else
+ icon_state = "intercom_open"
+ else
+ icon_state = "intercom"
+ return
+ if (wiresexposed && istype(W, /obj/item/weapon/wirecutters))
+ user.visible_message("[user] has cut the wires inside \the [src]! ", "You have cut the wires inside \the [src].")
+ playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1)
+ new/obj/item/stack/cable_coil(get_turf(src), 5)
+ var/obj/structure/frame/A = new /obj/structure/frame( src.loc )
+ var/obj/item/weapon/circuitboard/M = new circuit( A )
+ A.frame_type = "intercom"
+ A.pixel_x = pixel_x
+ A.pixel_y = pixel_y
+ A.circuit = M
+ A.set_dir(dir)
+ A.anchored = 1
+ for (var/obj/C in src)
+ C.forceMove(loc)
+ A.state = 2
+ A.icon_state = "intercom_2"
+ M.deconstruct(src)
+ qdel(src)
+ else
+ src.attack_hand(user)
+ return
+
/obj/item/device/radio/intercom/receive_range(freq, level)
if (!on)
return -1
@@ -110,9 +147,15 @@
on = A.powered(EQUIP) // set "on" to the power status
if(!on)
- icon_state = "intercom-p"
+ if(wiresexposed)
+ icon_state = "intercom-p_open"
+ else
+ icon_state = "intercom-p"
else
- icon_state = initial(icon_state)
+ if(wiresexposed)
+ icon_state = "intercom_open"
+ else
+ icon_state = initial(icon_state)
/obj/item/device/radio/intercom/locked
var/locked_frequency
diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm
index da19137043..e1332dda1e 100644
--- a/code/game/objects/items/devices/radio/radio.dm
+++ b/code/game/objects/items/devices/radio/radio.dm
@@ -156,7 +156,7 @@ var/global/list/default_medbay_channels = list(
var/obj/item/weapon/card/id/I = GetIdCard()
return has_access(list(), req_one_accesses, I ? I.GetAccess() : list())
-/mob/dead/observer/has_internal_radio_channel_access(var/list/req_one_accesses)
+/mob/observer/dead/has_internal_radio_channel_access(var/list/req_one_accesses)
return can_admin_interact()
/obj/item/device/radio/proc/text_wires()
diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm
index ef875940ad..8c9452ea49 100644
--- a/code/game/objects/items/devices/scanners.dm
+++ b/code/game/objects/items/devices/scanners.dm
@@ -24,8 +24,16 @@ REAGENT SCANNER
origin_tech = list(TECH_MAGNET = 1, TECH_BIO = 1)
var/mode = 1;
+/obj/item/device/healthanalyzer/do_surgery(mob/living/M, mob/living/user)
+ if(user.a_intent != I_HELP) //in case it is ever used as a surgery tool
+ return ..()
+ scan_mob(M, user) //default surgery behaviour is just to scan as usual
+ return 1
-/obj/item/device/healthanalyzer/attack(mob/living/M as mob, mob/living/user as mob)
+/obj/item/device/healthanalyzer/attack(mob/living/M, mob/living/user)
+ scan_mob(M, user)
+
+/obj/item/device/healthanalyzer/proc/scan_mob(mob/living/M, mob/living/user)
if ((CLUMSY in user.mutations) && prob(50))
user << text("You try to analyze the floor's vitals! ")
for(var/mob/O in viewers(M, null))
@@ -75,7 +83,7 @@ REAGENT SCANNER
for(var/obj/item/organ/external/org in damaged)
user.show_message(text(" [][]: [][] - [] ",
capitalize(org.name),
- (org.status & ORGAN_ROBOT) ? "(Cybernetic)" : "",
+ (org.robotic >= ORGAN_ROBOT) ? "(Cybernetic)" : "",
(org.brute_dam > 0) ? "[org.brute_dam] " : 0,
(org.status & ORGAN_BLEEDING)?"\[Bleeding\] ":"",
(org.burn_dam > 0) ? "[org.burn_dam] " : 0),1)
@@ -168,8 +176,7 @@ REAGENT SCANNER
else
user.show_message("Blood Level Normal: [blood_percent]% [blood_volume]cl. Type: [blood_type] ")
user.show_message("Subject's pulse: [H.get_pulse(GETPULSE_TOOL)] bpm. ")
- src.add_fingerprint(user)
- return
+
/obj/item/device/healthanalyzer/verb/toggle_mode()
set name = "Switch Verbosity"
diff --git a/code/game/objects/items/devices/suit_cooling.dm b/code/game/objects/items/devices/suit_cooling.dm
index 37ceba9445..550ea04380 100644
--- a/code/game/objects/items/devices/suit_cooling.dm
+++ b/code/game/objects/items/devices/suit_cooling.dm
@@ -31,7 +31,7 @@
/obj/item/device/suit_cooling_unit/New()
processing_objects |= src
- cell = new/obj/item/weapon/cell() //comes with the crappy default power cell - high-capacity ones shouldn't be hard to find
+ cell = new/obj/item/weapon/cell/high() //comes not with the crappy default power cell - because this is dedicated EVA equipment
cell.loc = src
/obj/item/device/suit_cooling_unit/process()
@@ -66,7 +66,7 @@
if (ishuman(loc))
var/mob/living/carbon/human/H = loc
if(istype(H.loc, /obj/mecha))
- var/obj/mecha/M = loc
+ var/obj/mecha/M = H.loc
return M.return_temperature()
else if(istype(H.loc, /obj/machinery/atmospherics/unary/cryo_cell))
return H.loc:air_contents.temperature
diff --git a/code/game/objects/items/devices/uplink.dm b/code/game/objects/items/devices/uplink.dm
index df28d4d3d7..571b0462df 100644
--- a/code/game/objects/items/devices/uplink.dm
+++ b/code/game/objects/items/devices/uplink.dm
@@ -1,11 +1,3 @@
-//This could either be split into the proper DM files or placed somewhere else all together, but it'll do for now -Nodrak
-
-/*
-
-A list of items and costs is stored under the datum of every game mode, alongside the number of crystals, and the welcoming message.
-
-*/
-
/obj/item/device/uplink
var/welcome = "Welcome, Operative" // Welcoming menu message
var/uses // Numbers of crystals
@@ -18,6 +10,10 @@ A list of items and costs is stored under the datum of every game mode, alongsid
var/list/purchase_log = new
var/datum/mind/uplink_owner = null
var/used_TC = 0
+ var/offer_time = 15 MINUTES //The time increment per discount offered
+ var/next_offer_time //The time a discount will next be offered
+ var/datum/uplink_item/discount_item //The item to be discounted
+ var/discount_amount //The amount as a percent the item will be discounted by
/obj/item/device/uplink/nano_host()
return loc
@@ -28,10 +24,15 @@ A list of items and costs is stored under the datum of every game mode, alongsid
purchase_log = list()
world_uplinks += src
uses = owner.tcrystals
+ processing_objects += src
/obj/item/device/uplink/Destroy()
world_uplinks -= src
- ..()
+ processing_objects -= src
+ return ..()
+
+/obj/item/device/uplink/get_item_cost(var/item_type, var/item_cost)
+ return (discount_item && (item_type == discount_item)) ? max(1, round(item_cost*discount_amount)) : item_cost
// HIDDEN UPLINK - Can be stored in anything but the host item has to have a trigger for it.
/* How to create an uplink in 3 easy steps!
@@ -52,7 +53,6 @@ A list of items and costs is stored under the datum of every game mode, alongsid
var/datum/uplink_category/category = 0 // The current category we are in
var/exploit_id // Id of the current exploit record we are viewing
-
// The hidden uplink MUST be inside an obj/item's contents.
/obj/item/device/uplink/hidden/New()
spawn(2)
@@ -62,6 +62,14 @@ A list of items and costs is stored under the datum of every game mode, alongsid
nanoui_data = list()
update_nano_data()
+/obj/item/device/uplink/hidden/process()
+ if(world.time > next_offer_time)
+ discount_item = default_uplink_selection.get_random_item(INFINITY)
+ discount_amount = pick(90;0.9, 80;0.8, 70;0.7, 60;0.6, 50;0.5, 40;0.4, 30;0.3, 20;0.2, 10;0.1)
+ next_offer_time = world.time + offer_time
+ update_nano_data()
+ nanomanager.update_uis(src)
+
// Toggles the uplink on and off. Normally this will bypass the item's normal functions and go to the uplink menu, if activated.
/obj/item/device/uplink/hidden/proc/toggle()
active = !active
@@ -107,6 +115,11 @@ A list of items and costs is stored under the datum of every game mode, alongsid
/obj/item/device/uplink/hidden/interact(mob/user)
ui_interact(user)
+/obj/item/device/uplink/hidden/CanUseTopic()
+ if(!active)
+ return STATUS_CLOSE
+ return ..()
+
// The purchasing code.
/obj/item/device/uplink/hidden/Topic(href, href_list)
if(..())
@@ -139,11 +152,14 @@ A list of items and costs is stored under the datum of every game mode, alongsid
if(category.can_view(src))
categories[++categories.len] = list("name" = category.name, "ref" = "\ref[category]")
nanoui_data["categories"] = categories
+ nanoui_data["discount_name"] = discount_item ? discount_item.name : ""
+ nanoui_data["discount_amount"] = (1-discount_amount)*100
+ nanoui_data["offer_expiry"] = worldtime2text(next_offer_time)
else if(nanoui_menu == 1)
var/items[0]
for(var/datum/uplink_item/item in category.items)
if(item.can_view(src))
- var/cost = item.cost(uses)
+ var/cost = item.cost(uses, src)
if(!cost) cost = "???"
items[++items.len] = list("name" = item.name, "description" = replacetext(item.description(), "\n", " "), "can_buy" = item.can_buy(src), "cost" = cost, "ref" = "\ref[item]")
nanoui_data["items"] = items
diff --git a/code/game/objects/items/devices/uplink_items.dm b/code/game/objects/items/devices/uplink_items.dm
deleted file mode 100644
index 3c4ecc3e19..0000000000
--- a/code/game/objects/items/devices/uplink_items.dm
+++ /dev/null
@@ -1,725 +0,0 @@
-var/datum/uplink/uplink = new()
-
-/datum/uplink
- var/list/items_assoc
- var/list/datum/uplink_item/items
- var/list/datum/uplink_category/categories
-
-/datum/uplink/New()
- items_assoc = list()
- items = init_subtypes(/datum/uplink_item)
- categories = init_subtypes(/datum/uplink_category)
- categories = dd_sortedObjectList(categories)
-
- for(var/datum/uplink_item/item in items)
- if(!item.name)
- items -= item
- continue
-
- items_assoc[item.type] = item
-
- for(var/datum/uplink_category/category in categories)
- if(item.category == category.type)
- category.items += item
-
- for(var/datum/uplink_category/category in categories)
- category.items = dd_sortedObjectList(category.items)
-
-/datum/uplink_item
- var/name
- var/desc
- var/item_cost = 0
- var/datum/uplink_category/category // Item category
- var/list/datum/antagonist/antag_roles // Antag roles this item is displayed to. If empty, display to all.
-
-/datum/uplink_item/item
- var/path = null
-
-/datum/uplink_item/New()
- ..()
- antag_roles = list()
-
-
-
-/datum/uplink_item/proc/buy(var/obj/item/device/uplink/U, var/mob/user)
- var/extra_args = extra_args(user)
- if(!extra_args)
- return
-
- if(!can_buy(U))
- return
-
- var/cost = cost(U.uses)
-
- var/goods = get_goods(U, get_turf(user), user, extra_args)
- if(!goods)
- return
-
- purchase_log(U)
- user.mind.tcrystals -= cost
- U.used_TC += cost
- return goods
-
-// Any additional arguments you wish to send to the get_goods
-/datum/uplink_item/proc/extra_args(var/mob/user)
- return 1
-
-/datum/uplink_item/proc/can_buy(obj/item/device/uplink/U)
- if(cost(U.uses) > U.uses)
- return 0
-
- return can_view(U)
-
-/datum/uplink_item/proc/can_view(obj/item/device/uplink/U)
- // Making the assumption that if no uplink was supplied, then we don't care about antag roles
- if(!U || !antag_roles.len)
- return 1
-
- // With no owner, there's no need to check antag status.
- if(!U.uplink_owner)
- return 0
-
- for(var/antag_role in antag_roles)
- var/datum/antagonist/antag = all_antag_types[antag_role]
- if(antag.is_antagonist(U.uplink_owner))
- return 1
- return 0
-
-/datum/uplink_item/proc/cost(var/telecrystals)
- return item_cost
-
-/datum/uplink_item/proc/description()
- return desc
-
-// get_goods does not necessarily return physical objects, it is simply a way to acquire the uplink item without paying
-/datum/uplink_item/proc/get_goods(var/obj/item/device/uplink/U, var/loc)
- return 0
-
-/datum/uplink_item/proc/log_icon()
- return
-
-/datum/uplink_item/proc/purchase_log(obj/item/device/uplink/U)
- feedback_add_details("traitor_uplink_items_bought", "[src]")
- log_and_message_admins("used \the [U.loc] to buy \a [src]")
- U.purchase_log[src] = U.purchase_log[src] + 1
-
-datum/uplink_item/dd_SortValue()
- return cost(INFINITY)
-
-/********************************
-* *
-* Physical Uplink Entries *
-* *
-********************************/
-/datum/uplink_item/item/buy(var/obj/item/device/uplink/U, var/mob/user)
- var/obj/item/I = ..()
- if(!I)
- return
-
- if(istype(I, /list))
- var/list/L = I
- if(L.len) I = L[1]
-
- if(istype(I) && ishuman(user))
- var/mob/living/carbon/human/A = user
- A.put_in_any_hand_if_possible(I)
- return I
-
-/datum/uplink_item/item/get_goods(var/obj/item/device/uplink/U, var/loc)
- var/obj/item/I = new path(loc)
- return I
-
-/datum/uplink_item/item/description()
- if(!desc)
- // Fallback description
- var/obj/temp = src.path
- desc = initial(temp.desc)
- return ..()
-
-/datum/uplink_item/item/log_icon()
- var/obj/I = path
- return "\icon[I]"
-
-/*************
-* Ammunition *
-*************/
-/datum/uplink_item/item/ammo
- item_cost = 2
- category = /datum/uplink_category/ammunition
-
-/datum/uplink_item/item/ammo/a357
- name = ".357"
- path = /obj/item/ammo_magazine/a357
-
-/datum/uplink_item/item/ammo/mc9mm
- name = "9mm"
- path = /obj/item/ammo_magazine/mc9mm
-
-/datum/uplink_item/item/ammo/darts
- name = "Darts"
- path = /obj/item/ammo_magazine/chemdart
-
-/datum/uplink_item/item/ammo/sniperammo
- name = "14.5mm"
- path = /obj/item/weapon/storage/box/sniperammo
-
-/datum/uplink_item/item/ammo/a10mm
- name = "10mm"
- path = /obj/item/ammo_magazine/a10mm
-
-/datum/uplink_item/item/ammo/a762
- name = "7.62mm"
- path = /obj/item/ammo_magazine/a762
-
-/***************************************
-* Highly Visible and Dangerous Weapons *
-***************************************/
-/datum/uplink_item/item/visible_weapons
- category = /datum/uplink_category/visible_weapons
-
-/datum/uplink_item/item/visible_weapons/energy_sword
- name = "Energy Sword"
- item_cost = 4
- path = /obj/item/weapon/melee/energy/sword
-
-/datum/uplink_item/item/visible_weapons/dartgun
- name = "Dart Gun"
- item_cost = 5
- path = /obj/item/weapon/gun/projectile/dartgun
-
-/datum/uplink_item/item/visible_weapons/crossbow
- name = "Energy Crossbow"
- item_cost = 5
- path = /obj/item/weapon/gun/energy/crossbow
-
-/datum/uplink_item/item/visible_weapons/g9mm
- name = "Silenced 9mm"
- item_cost = 5
- path = /obj/item/weapon/storage/box/syndie_kit/g9mm
-
-/datum/uplink_item/item/visible_weapons/riggedlaser
- name = "Exosuit Rigged Laser"
- item_cost = 6
- path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/riggedlaser
-
-/datum/uplink_item/item/visible_weapons/revolver
- name = "Revolver"
- item_cost = 6
- path = /obj/item/weapon/gun/projectile/revolver
-
-/datum/uplink_item/item/visible_weapons/heavysniper
- name = "Anti-materiel Rifle"
- item_cost = DEFAULT_TELECRYSTAL_AMOUNT
- path = /obj/item/weapon/gun/projectile/heavysniper
-
-//These are for traitors (or other antags, perhaps) to have the option of purchasing some merc gear.
-/datum/uplink_item/item/visible_weapons/submachinegun
- name = "Submachine Gun"
- item_cost = 6
- path = /obj/item/weapon/gun/projectile/automatic/c20r
-
-/datum/uplink_item/item/visible_weapons/assaultrifle
- name = "Assault Rifle"
- item_cost = 7
- path = /obj/item/weapon/gun/projectile/automatic/sts35
-
-/*************************************
-* Stealthy and Inconspicuous Weapons *
-*************************************/
-/datum/uplink_item/item/stealthy_weapons
- category = /datum/uplink_category/stealthy_weapons
-
-/datum/uplink_item/item/stealthy_weapons/soap
- name = "Subversive Soap"
- item_cost = 1
- path = /obj/item/weapon/soap/syndie
-
-/datum/uplink_item/item/stealthy_weapons/concealed_cane
- name = "Concealed Cane Sword"
- item_cost = 1
- path = /obj/item/weapon/cane/concealed
-
-/datum/uplink_item/item/stealthy_weapons/detomatix
- name = "Detomatix PDA Cartridge"
- item_cost = 3
- path = /obj/item/weapon/cartridge/syndicate
-
-/datum/uplink_item/item/stealthy_weapons/parapen
- name = "Paralysis Pen"
- item_cost = 3
- path = /obj/item/weapon/pen/reagent/paralysis
-
-/datum/uplink_item/item/stealthy_weapons/cigarette_kit
- name = "Cigarette Kit"
- item_cost = 3
- path = /obj/item/weapon/storage/box/syndie_kit/cigarette
-
-/datum/uplink_item/item/stealthy_weapons/random_toxin
- name = "Random Toxin - Beaker"
- item_cost = 3
- path = /obj/item/weapon/storage/box/syndie_kit/toxin
-
-/*******************************
-* Stealth and Camouflage Items *
-*******************************/
-/datum/uplink_item/item/stealth_items
- category = /datum/uplink_category/stealth_items
-
-/datum/uplink_item/item/stealth_items/id
- name = "Agent ID card"
- item_cost = 2
- path = /obj/item/weapon/card/id/syndicate
-
-/datum/uplink_item/item/stealth_items/syndigaloshes
- name = "No-Slip Shoes"
- item_cost = 2
- path = /obj/item/clothing/shoes/syndigaloshes
-
-/datum/uplink_item/item/stealth_items/spy
- name = "Bug Kit"
- item_cost = 2
- path = /obj/item/weapon/storage/box/syndie_kit/spy
-
-/datum/uplink_item/item/stealth_items/chameleon_kit
- name = "Chameleon Kit"
- item_cost = 3
- path = /obj/item/weapon/storage/box/syndie_kit/chameleon
-
-/datum/uplink_item/item/stealth_items/chameleon_projector
- name = "Chameleon-Projector"
- item_cost = 4
- path = /obj/item/device/chameleon
-
-/datum/uplink_item/item/stealth_items/chameleon_projector
- name = "Chameleon-Projector"
- item_cost = 4
- path = /obj/item/device/chameleon
-
-/datum/uplink_item/item/stealth_items/voice
- name = "Voice Changer"
- item_cost = 4
- path = /obj/item/clothing/mask/gas/voice
-
-/datum/uplink_item/item/stealth_items/camera_floppy
- name = "Camera Network Access - Floppy"
- item_cost = 6
- path = /obj/item/weapon/disk/file/cameras/syndicate
-
-/********
-* Armor *
-********/
-/datum/uplink_item/item/armor
- category = /datum/uplink_category/armor
-
-/datum/uplink_item/item/armor/combat
- name = "Combat Armor Set"
- item_cost = 5
- path = /obj/item/weapon/storage/box/syndie_kit/combat_armor
-
-/datum/uplink_item/item/armor/heavy_vest
- name = "Heavy Armor Vest"
- item_cost = 4
- path = /obj/item/clothing/suit/storage/vest/heavy/merc
-
-/********************
-* Devices and Tools *
-********************/
-/datum/uplink_item/item/tools
- category = /datum/uplink_category/tools
-
-/datum/uplink_item/item/tools/toolbox
- name = "Fully Loaded Toolbox"
- item_cost = 1
- path = /obj/item/weapon/storage/toolbox/syndicate
-
-/datum/uplink_item/item/tools/plastique
- name = "C-4 (Destroys walls)"
- item_cost = 2
- path = /obj/item/weapon/plastique
-
-/datum/uplink_item/item/tools/encryptionkey_radio
- name = "Encrypted Radio Channel Key"
- item_cost = 2
- path = /obj/item/device/encryptionkey/syndicate
-
-/datum/uplink_item/item/tools/encryptionkey_binary
- name = "Binary Translator Key"
- item_cost = 3
- path = /obj/item/device/encryptionkey/binary
-
-/datum/uplink_item/item/tools/emag
- name = "Cryptographic Sequencer"
- item_cost = 3
- path = /obj/item/weapon/card/emag
-
-/datum/uplink_item/item/tools/clerical
- name = "Morphic Clerical Kit"
- item_cost = 3
- path = /obj/item/weapon/storage/box/syndie_kit/clerical
-
-/datum/uplink_item/item/tools/space_suit
- name = "Space Suit"
- item_cost = 3
- path = /obj/item/weapon/storage/box/syndie_kit/space
-
-/datum/uplink_item/item/tools/thermal
- name = "Thermal Imaging Glasses"
- item_cost = 3
- path = /obj/item/clothing/glasses/thermal/syndi
-
-/datum/uplink_item/item/tools/powersink
- name = "Powersink (DANGER!)"
- item_cost = 5
- path = /obj/item/device/powersink
-
-/datum/uplink_item/item/tools/ai_module
- name = "Hacked AI Upload Module"
- item_cost = 7
- path = /obj/item/weapon/aiModule/syndicate
-
-/datum/uplink_item/item/tools/supply_beacon
- name = "Hacked Supply Beacon (DANGER!)"
- item_cost = 7
- path = /obj/item/supply_beacon
-
-/datum/uplink_item/item/tools/teleporter
- name = "Teleporter Circuit Board"
- item_cost = 20
- path = /obj/item/weapon/circuitboard/teleporter
-
-/datum/uplink_item/item/tools/teleporter/New()
- ..()
- antag_roles = list(MODE_MERCENARY)
-
-/datum/uplink_item/item/tools/money
- name = "Operations Funding"
- item_cost = 3
- path = /obj/item/weapon/storage/secure/briefcase/money
- desc = "A briefcase with 10,000 untraceable thalers for funding your sneaky activities."
-
-/datum/uplink_item/item/tools/crystal
- name = "Tradable Crystal"
- item_cost = 1
- path = /obj/item/device/telecrystal
- desc = "A telecrystal that can be transferred from one user to another. Be sure not to give it to just anyone."
-
-/***********
-* Implants *
-***********/
-/datum/uplink_item/item/implants
- category = /datum/uplink_category/implants
-
-/datum/uplink_item/item/implants/imp_freedom
- name = "Freedom Implant"
- item_cost = 3
- path = /obj/item/weapon/storage/box/syndie_kit/imp_freedom
-
-/datum/uplink_item/item/implants/imp_compress
- name = "Compressed Matter Implant"
- item_cost = 4
- path = /obj/item/weapon/storage/box/syndie_kit/imp_compress
-
-/datum/uplink_item/item/implants/imp_explosive
- name = "Explosive Implant (DANGER!)"
- item_cost = 6
- path = /obj/item/weapon/storage/box/syndie_kit/imp_explosive
-
-/datum/uplink_item/item/implants/imp_uplink
- name = "Uplink Implant" //Original name: "Uplink Implant (Contains 5 Telecrystals)"
- item_cost = 5 //Original cost: 10
- path = /obj/item/weapon/storage/box/syndie_kit/imp_uplink
-
-/**********
-* Medical *
-**********/
-/datum/uplink_item/item/medical
- category = /datum/uplink_category/medical
-
-/datum/uplink_item/item/medical/sinpockets
- name = "Box of Sin-Pockets"
- item_cost = 1
- path = /obj/item/weapon/storage/box/sinpockets
-
-/datum/uplink_item/item/medical/surgery
- name = "Surgery kit"
- item_cost = 6
- path = /obj/item/weapon/storage/firstaid/surgery
-
-/datum/uplink_item/item/medical/combat
- name = "Combat medical kit"
- item_cost = 6
- path = /obj/item/weapon/storage/firstaid/combat
-
-/*******************
-* Hardsuit Modules *
-*******************/
-/datum/uplink_item/item/hardsuit_modules
- category = /datum/uplink_category/hardsuit_modules
-
-/datum/uplink_item/item/hardsuit_modules/thermal
- name = "Thermal Scanner"
- item_cost = 2
- path = /obj/item/rig_module/vision/thermal
-
-/datum/uplink_item/item/hardsuit_modules/energy_net
- name = "Net Projector"
- item_cost = 3
- path = /obj/item/rig_module/fabricator/energy_net
-
-/datum/uplink_item/item/ewar_voice
- name = "Electrowarfare Suite and Voice Synthesiser"
- item_cost = 4
- path = /obj/item/weapon/storage/box/syndie_kit/ewar_voice
-
-/datum/uplink_item/item/hardsuit_modules/maneuvering_jets
- name = "Maneuvering Jets"
- item_cost = 4
- path = /obj/item/rig_module/maneuvering_jets
-
-/datum/uplink_item/item/hardsuit_modules/egun
- name = "Mounted Energy Gun"
- item_cost = 6
- path = /obj/item/rig_module/mounted/egun
-
-/datum/uplink_item/item/hardsuit_modules/power_sink
- name = "Power Sink"
- item_cost = 6
- path = /obj/item/rig_module/power_sink
-
-/datum/uplink_item/item/hardsuit_modules/laser_canon
- name = "Mounted Laser Cannon"
- item_cost = 8
- path = /obj/item/rig_module/mounted
-
-/***********
-* Grenades *
-************/
-/datum/uplink_item/item/grenades
- category = /datum/uplink_category/grenades
-
-/datum/uplink_item/item/grenades/anti_photon
- name = "5xPhoton Disruption Grenades"
- item_cost = 2
- path = /obj/item/weapon/storage/box/anti_photons
-
-/datum/uplink_item/item/grenades/emp
- name = "5xEMP Grenades"
- item_cost = 3
- path = /obj/item/weapon/storage/box/emps
-
-/datum/uplink_item/item/grenades/smoke
- name = "5xSmoke Grenades"
- item_cost = 2
- path = /obj/item/weapon/storage/box/smokes
-
-/************
-* Badassery *
-************/
-/datum/uplink_item/item/badassery
- category = /datum/uplink_category/badassery
-
-/datum/uplink_item/item/badassery/balloon
- name = "For showing that You Are The BOSS (Useless Balloon)"
- item_cost = DEFAULT_TELECRYSTAL_AMOUNT
- path = /obj/item/toy/syndicateballoon
-
-/datum/uplink_item/item/badassery/balloon/NT
- name = "For showing that you love NT SOO much (Useless Balloon)"
- path = /obj/item/toy/nanotrasenballoon
-
-/**************
-* Random Item *
-**************/
-/datum/uplink_item/item/badassery/random_one
- name = "Random Item"
- desc = "Buys you one random item."
-
-/datum/uplink_item/item/badassery/random_one/buy(var/obj/item/device/uplink/U, var/mob/user)
- var/datum/uplink_item/item = default_uplink_selection.get_random_item(U.uses)
- return item.buy(U, user)
-
-/datum/uplink_item/item/badassery/random_one/can_buy(obj/item/device/uplink/U)
- return default_uplink_selection.get_random_item(U.uses, U) != null
-
-/datum/uplink_item/item/badassery/random_many
- name = "Random Items"
- desc = "Buys you as many random items you can afford. Convenient packaging NOT included."
-
-/datum/uplink_item/item/badassery/random_many/cost(var/telecrystals)
- return max(1, telecrystals)
-
-/datum/uplink_item/item/badassery/random_many/get_goods(var/obj/item/device/uplink/U, var/loc)
- var/list/bought_items = list()
- for(var/datum/uplink_item/UI in get_random_uplink_items(U, U.uses, loc))
- UI.purchase_log(U)
- var/obj/item/I = UI.get_goods(U, loc)
- if(istype(I))
- bought_items += I
-
- return bought_items
-
-/datum/uplink_item/item/badassery/random_many/purchase_log(obj/item/device/uplink/U)
- feedback_add_details("traitor_uplink_items_bought", "[src]")
- log_and_message_admins("used \the [U.loc] to buy \a [src]")
-
-/****************
-* Surplus Crate *
-****************/
-/datum/uplink_item/item/badassery/surplus
- name = "Surplus Crate"
- item_cost = 40
- var/item_worth = 60
- var/icon
-
-/datum/uplink_item/item/badassery/surplus/New()
- ..()
- antag_roles = list(MODE_MERCENARY)
- desc = "A crate containing [item_worth] telecrystal\s worth of surplus leftovers."
-
-/datum/uplink_item/item/badassery/surplus/get_goods(var/obj/item/device/uplink/U, var/loc)
- var/obj/structure/largecrate/C = new(loc)
- var/random_items = get_random_uplink_items(null, item_worth, C)
- for(var/datum/uplink_item/I in random_items)
- I.purchase_log(U)
- I.get_goods(U, C)
-
- return C
-
-/datum/uplink_item/item/badassery/surplus/log_icon()
- if(!icon)
- var/obj/structure/largecrate/C = /obj/structure/largecrate
- icon = image(initial(C.icon), initial(C.icon_state))
-
- return "\icon[icon]"
-
-/********************************
-* *
-* Abstract Uplink Entries *
-* *
-********************************/
-var/image/default_abstract_uplink_icon
-/datum/uplink_item/abstract/log_icon()
- if(!default_abstract_uplink_icon)
- default_abstract_uplink_icon = image('icons/obj/pda.dmi', "pda-syn")
-
- return "\icon[default_abstract_uplink_icon]"
-
-/****************
-* Announcements *
-*****************/
-/datum/uplink_item/abstract/announcements
- category = /datum/uplink_category/services
-
-/datum/uplink_item/abstract/announcements/buy(var/obj/item/device/uplink/U, var/mob/user)
- . = ..()
- if(.)
- log_and_message_admins("has triggered a falsified [src]", user)
-
-/datum/uplink_item/abstract/announcements/fake_centcom
- item_cost = DEFAULT_TELECRYSTAL_AMOUNT / 2
-
-/datum/uplink_item/abstract/announcements/fake_centcom/New()
- ..()
- name = "[command_name()] Update Announcement"
- desc = "Causes a falsified [command_name()] Update. Triggers immediately after supplying additional data."
- antag_roles = list(MODE_MERCENARY)
-
-/datum/uplink_item/abstract/announcements/fake_centcom/get_goods(var/obj/item/device/uplink/U, var/loc, var/mob/user, var/list/args)
- command_announcement.Announce(args.["message"], args.["title"])
- return 1
-
-/datum/uplink_item/abstract/announcements/fake_crew_arrival
- name = "Crew Arrival Announcement/Records"
- desc = "Creates a fake crew arrival announcement as well as fake crew records, using your current appearance (including held items!) and worn id card. Trigger with care!"
- item_cost = 4
-
-/datum/uplink_item/abstract/announcements/fake_crew_arrival/New()
- ..()
- antag_roles = list(MODE_MERCENARY)
-
-/datum/uplink_item/abstract/announcements/fake_crew_arrival/get_goods(var/obj/item/device/uplink/U, var/loc, var/mob/user, var/list/args)
- if(!user)
- return 0
-
- var/obj/item/weapon/card/id/I = user.GetIdCard()
- var/datum/data/record/random_general_record
- var/datum/data/record/random_medical_record
- if(data_core.general.len)
- random_general_record = pick(data_core.general)
- random_medical_record = find_medical_record("id", random_general_record.fields["id"])
-
- var/datum/data/record/general = data_core.CreateGeneralRecord(user)
- if(I)
- general.fields["age"] = I.age
- general.fields["rank"] = I.assignment
- general.fields["real_rank"] = I.assignment
- general.fields["name"] = I.registered_name
- general.fields["sex"] = I.sex
- else
- var/mob/living/carbon/human/H
- if(istype(user,/mob/living/carbon/human))
- H = user
- general.fields["age"] = H.age
- else
- general.fields["age"] = initial(H.age)
- var/assignment = GetAssignment(user)
- general.fields["rank"] = assignment
- general.fields["real_rank"] = assignment
- general.fields["name"] = user.real_name
- general.fields["sex"] = capitalize(user.gender)
-
- general.fields["species"] = user.get_species()
- var/datum/data/record/medical = data_core.CreateMedicalRecord(general.fields["name"], general.fields["id"])
- data_core.CreateSecurityRecord(general.fields["name"], general.fields["id"])
-
- if(!random_general_record)
- general.fields["citizenship"] = random_general_record.fields["citizenship"]
- general.fields["faction"] = random_general_record.fields["faction"]
- general.fields["fingerprint"] = random_general_record.fields["fingerprint"]
- general.fields["home_system"] = random_general_record.fields["home_system"]
- general.fields["religion"] = random_general_record.fields["religion"]
- if(random_medical_record)
- medical.fields["b_type"] = random_medical_record.fields["b_type"]
- medical.fields["b_dna"] = random_medical_record.fields["b_type"]
-
- if(I)
- general.fields["fingerprint"] = I.fingerprint_hash
- medical.fields["b_type"] = I.blood_type
- medical.fields["b_dna"] = I.dna_hash
-
- AnnounceArrivalSimple(general.fields["name"], general.fields["rank"])
- return 1
-
-/datum/uplink_item/abstract/announcements/fake_ion_storm
- name = "Ion Storm Announcement"
- desc = "Interferes with the station's ion sensors. Triggers immediately upon investment."
- item_cost = 1
-
-/datum/uplink_item/abstract/announcements/fake_ion_storm/get_goods(var/obj/item/device/uplink/U, var/loc)
- ion_storm_announcement()
- return 1
-
-/datum/uplink_item/abstract/announcements/fake_radiation
- name = "Radiation Storm Announcement"
- desc = "Interferes with the station's radiation sensors. Triggers immediately upon investment."
- item_cost = 3
-
-/datum/uplink_item/abstract/announcements/fake_radiation/get_goods(var/obj/item/device/uplink/U, var/loc)
- var/datum/event_meta/EM = new(EVENT_LEVEL_MUNDANE, "Fake Radiation Storm", add_to_queue = 0)
- new/datum/event/radiation_storm/syndicate(EM)
- return 1
-
-
-/****************
-* Support procs *
-****************/
-/proc/get_random_uplink_items(var/obj/item/device/uplink/U, var/remaining_TC, var/loc)
- var/list/bought_items = list()
- while(remaining_TC)
- var/datum/uplink_item/I = default_uplink_selection.get_random_item(remaining_TC, U, bought_items)
- if(!I)
- break
- bought_items += I
- remaining_TC -= I.cost(remaining_TC)
-
- return bought_items
diff --git a/code/game/objects/items/devices/uplink_random_lists.dm b/code/game/objects/items/devices/uplink_random_lists.dm
index 4359918cee..00860eb30c 100644
--- a/code/game/objects/items/devices/uplink_random_lists.dm
+++ b/code/game/objects/items/devices/uplink_random_lists.dm
@@ -27,7 +27,7 @@ var/datum/uplink_random_selection/default_uplink_selection = new/datum/uplink_ra
if(!prob(RI.keep_probability))
continue
var/datum/uplink_item/I = uplink.items_assoc[RI.uplink_item]
- if(I.cost(telecrystals) > telecrystals)
+ if(I.cost(telecrystals, U) > telecrystals)
continue
if(bought_items && (I in bought_items) && !prob(RI.reselect_probability))
continue
@@ -38,7 +38,7 @@ var/datum/uplink_random_selection/default_uplink_selection = new/datum/uplink_ra
/datum/uplink_random_selection/default/New()
..()
- items += new/datum/uplink_random_item(/datum/uplink_item/item/visible_weapons/g9mm)
+ items += new/datum/uplink_random_item(/datum/uplink_item/item/visible_weapons/silenced_45)
items += new/datum/uplink_random_item(/datum/uplink_item/item/ammo/mc9mm)
items += new/datum/uplink_random_item(/datum/uplink_item/item/visible_weapons/revolver)
items += new/datum/uplink_random_item(/datum/uplink_item/item/ammo/a357)
diff --git a/code/game/objects/items/devices/violin.dm b/code/game/objects/items/devices/violin.dm
index 2286f78714..6d195bd2bd 100644
--- a/code/game/objects/items/devices/violin.dm
+++ b/code/game/objects/items/devices/violin.dm
@@ -202,10 +202,10 @@
for(var/line in song.lines)
//world << line
- for(var/beat in text2list(lowertext(line), ","))
+ for(var/beat in splittext(lowertext(line), ","))
//world << "beat: [beat]"
- var/list/notes = text2list(beat, "/")
- for(var/note in text2list(notes[1], "-"))
+ var/list/notes = splittext(beat, "/")
+ for(var/note in splittext(notes[1], "-"))
//world << "note: [note]"
if(!playing || !isliving(loc))//If the violin is playing, or isn't held by a person
playing = 0
@@ -367,7 +367,7 @@
//split into lines
spawn()
- var/list/lines = text2list(t, "\n")
+ var/list/lines = splittext(t, "\n")
var/tempo = 5
if(copytext(lines[1],1,6) == "BPM: ")
tempo = 600 / text2num(copytext(lines[1],6))
diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm
index 3ccf1fb3a9..28f3a1def6 100644
--- a/code/game/objects/items/robot/robot_items.dm
+++ b/code/game/objects/items/robot/robot_items.dm
@@ -10,11 +10,7 @@
icon = 'icons/obj/decals.dmi'
icon_state = "shock"
-/obj/item/borg/stun/attack(var/mob/living/M, var/mob/living/silicon/robot/user)
-
- if(!istype(M))
- return
-
+/obj/item/borg/stun/apply_hit_effect(mob/living/M, mob/living/silicon/robot/user, var/hit_zone)
// How the Hell.
if(!istype(user))
var/mob/living/temp = user
@@ -23,18 +19,16 @@
qdel(src)
return
- M.attack_log += text("\[[time_stamp()]\] Has been attacked with [src.name] by [user.name] ([user.ckey]) ")
- user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to attack [M.name] ([M.ckey]) ")
- msg_admin_attack("[user.name] ([user.ckey]) used the [src.name] to attack [M.name] ([M.ckey]) (JMP )")
+ user.visible_message("\The [user] has prodded \the [M] with \a [src]! ")
if(!user.cell || !user.cell.checked_use(1250)) //Slightly more than a baton.
- user.visible_message("\The [user] has prodded \the [M] with its arm! ")
return
- if (M.stuttering < 5)
- M.stuttering = 5
- M.stun_effect_act(0, 70, check_zone(user.zone_sel.selecting), src)
- user.visible_message("\The [user] has prodded \the [M] with \a [src]! ")
+ playsound(loc, 'sound/weapons/Egloves.ogg', 50, 1, -1)
+
+ M.apply_effect(5, STUTTER)
+ M.stun_effect_act(0, 70, check_zone(hit_zone), src)
+
if(ishuman(M))
var/mob/living/carbon/human/H = M
H.forcesay(hit_appends)
diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm
index 7cccb0eb10..ebdd95791d 100644
--- a/code/game/objects/items/robot/robot_parts.dm
+++ b/code/game/objects/items/robot/robot_parts.dm
@@ -15,47 +15,37 @@
/obj/item/robot_parts/New(var/newloc, var/model)
..(newloc)
- if(model_info && model)
- model_info = model
- var/datum/robolimb/R = all_robolimbs[model]
- if(R)
- name = "[R.company] [initial(name)]"
- desc = "[R.desc]"
- if(icon_state in icon_states(R.icon))
- icon = R.icon
- else
- name = "robot [initial(name)]"
/obj/item/robot_parts/l_arm
- name = "left arm"
+ name = "cyborg left arm"
desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case."
icon_state = "l_arm"
part = list(BP_L_ARM, BP_L_HAND)
model_info = 1
/obj/item/robot_parts/r_arm
- name = "right arm"
+ name = "cyborg right arm"
desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case."
icon_state = "r_arm"
part = list(BP_R_ARM, BP_R_HAND)
model_info = 1
/obj/item/robot_parts/l_leg
- name = "left leg"
+ name = "cyborg left leg"
desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case."
icon_state = "l_leg"
part = list(BP_L_LEG, BP_L_FOOT)
model_info = 1
/obj/item/robot_parts/r_leg
- name = "right leg"
+ name = "cyborg leg"
desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case."
icon_state = "r_leg"
part = list(BP_R_LEG, BP_R_FOOT)
model_info = 1
/obj/item/robot_parts/chest
- name = "chest"
+ name = "cyborg chest"
desc = "A heavily reinforced case containing cyborg logic boards, with space for a standard power cell."
icon_state = "chest"
part = list(BP_GROIN,BP_TORSO)
@@ -63,7 +53,7 @@
var/obj/item/weapon/cell/cell = null
/obj/item/robot_parts/head
- name = "head"
+ name = "cyborg head"
desc = "A standard reinforced braincase, with spine-plugged neural socket and sensor gimbals."
icon_state = "head"
part = list(BP_HEAD)
@@ -185,7 +175,7 @@
if(!M.brainmob.key)
var/ghost_can_reenter = 0
if(M.brainmob.mind)
- for(var/mob/dead/observer/G in player_list)
+ for(var/mob/observer/dead/G in player_list)
if(G.can_reenter_corpse && G.mind == M.brainmob.mind)
ghost_can_reenter = 1
break
diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm
index ccd6ab0adb..a13df854cb 100644
--- a/code/game/objects/items/robot/robot_upgrades.dm
+++ b/code/game/objects/items/robot/robot_upgrades.dm
@@ -67,7 +67,7 @@
return 0
if(!R.key)
- for(var/mob/dead/observer/ghost in player_list)
+ for(var/mob/observer/dead/ghost in player_list)
if(ghost.mind && ghost.mind.current == R)
R.key = ghost.key
diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm
index b8b79a5ca1..1298206b3e 100644
--- a/code/game/objects/items/stacks/medical.dm
+++ b/code/game/objects/items/stacks/medical.dm
@@ -2,8 +2,8 @@
name = "medical pack"
singular_name = "medical pack"
icon = 'icons/obj/items.dmi'
- amount = 5
- max_amount = 5
+ amount = 10
+ max_amount = 10
w_class = 2
throw_speed = 4
throw_range = 20
@@ -24,6 +24,10 @@
var/mob/living/carbon/human/H = M
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
+ if(!affecting)
+ user << "No body part there to work on! "
+ return 1
+
if(affecting.organ_tag == BP_HEAD)
if(H.head && istype(H.head,/obj/item/clothing/head/helmet/space))
user << "You can't apply [src] through [H.head]! "
@@ -33,8 +37,13 @@
user << "You can't apply [src] through [H.wear_suit]! "
return 1
- if(affecting.status & ORGAN_ROBOT)
- user << "This isn't useful at all on a robotic limb.. "
+ if(affecting.robotic == ORGAN_ROBOT)
+ user << "This isn't useful at all on a robotic limb. "
+ return 1
+
+ if(affecting.robotic >= ORGAN_LIFELIKE)
+ user << "You apply the [src], but it seems to have no effect... "
+ use(1)
return 1
H.UpdateDamageIcon()
@@ -64,31 +73,47 @@
var/mob/living/carbon/human/H = M
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
- if(affecting.open == 0)
- if(!affecting.bandage())
- user << "The wounds on [M]'s [affecting.name] have already been bandaged. "
- return 1
- else
- for (var/datum/wound/W in affecting.wounds)
- if (W.internal)
- continue
- if (W.current_stage <= W.max_bleeding_stage)
- user.visible_message("\The [user] bandages [W.desc] on [M]'s [affecting.name]. ", \
- "You bandage [W.desc] on [M]'s [affecting.name]. " )
- //H.add_side_effect("Itch")
- else if (istype(W,/datum/wound/bruise))
- user.visible_message("\The [user] places a bruise patch over [W.desc] on [M]'s [affecting.name]. ", \
- "You place a bruise patch over [W.desc] on [M]'s [affecting.name]. " )
- else
- user.visible_message("\The [user] places a bandaid over [W.desc] on [M]'s [affecting.name]. ", \
- "You place a bandaid over [W.desc] on [M]'s [affecting.name]. " )
- use(1)
+ if(affecting.open)
+ user << "The [affecting.name] is cut open, you'll need more than a bandage! "
+ return
+
+ if(affecting.is_bandaged())
+ user << "The wounds on [M]'s [affecting.name] have already been bandaged. "
+ return 1
else
- if (can_operate(H)) //Checks if mob is lying down on table for surgery
- if (do_surgery(H,user,src))
- return
- else
- user << "The [affecting.name] is cut open, you'll need more than a bandage! "
+ user.visible_message("\The [user] starts treating [M]'s [affecting.name]. ", \
+ "You start treating [M]'s [affecting.name]. " )
+ var/used = 0
+ for (var/datum/wound/W in affecting.wounds)
+ if (W.internal)
+ continue
+ if(W.bandaged)
+ continue
+ if(used == amount)
+ break
+ if(!do_mob(user, M, W.damage/5))
+ user << "You must stand still to bandage wounds. "
+ break
+
+ if (W.current_stage <= W.max_bleeding_stage)
+ user.visible_message("\The [user] bandages \a [W.desc] on [M]'s [affecting.name]. ", \
+ "You bandage \a [W.desc] on [M]'s [affecting.name]. " )
+ //H.add_side_effect("Itch")
+ else if (W.damage_type == BRUISE)
+ user.visible_message("\The [user] places a bruise patch over \a [W.desc] on [M]'s [affecting.name]. ", \
+ "You place a bruise patch over \a [W.desc] on [M]'s [affecting.name]. " )
+ else
+ user.visible_message("\The [user] places a bandaid over \a [W.desc] on [M]'s [affecting.name]. ", \
+ "You place a bandaid over \a [W.desc] on [M]'s [affecting.name]. " )
+ W.bandage()
+ used++
+ affecting.update_damages()
+ if(used == amount)
+ if(affecting.is_bandaged())
+ user << "\The [src] is used up. "
+ else
+ user << "\The [src] is used up, but there are more wounds to treat on \the [affecting.name]. "
+ use(used)
/obj/item/stack/medical/ointment
name = "ointment"
@@ -107,27 +132,30 @@
var/mob/living/carbon/human/H = M
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
- if(affecting.open == 0)
- if(!affecting.salve())
- user << "The wounds on [M]'s [affecting.name] have already been salved. "
- return 1
- else
- user.visible_message("[user] salves wounds on [M]'s [affecting.name]. ", \
- "You salve wounds on [M]'s [affecting.name]. " )
- use(1)
+ if(affecting.open)
+ user << "The [affecting.name] is cut open, you'll need more than a bandage! "
+ return
+
+ if(affecting.is_salved())
+ user << "The wounds on [M]'s [affecting.name] have already been salved. "
+ return 1
else
- if (can_operate(H)) //Checks if mob is lying down on table for surgery
- if (do_surgery(H,user,src))
- return
- else
- user << "The [affecting.name] is cut open, you'll need more than a bandage! "
+ user.visible_message("\The [user] starts salving wounds on [M]'s [affecting.name]. ", \
+ "You start salving the wounds on [M]'s [affecting.name]. " )
+ if(!do_mob(user, M, 10))
+ user << "You must stand still to salve wounds. "
+ return 1
+ user.visible_message("[user] salved wounds on [M]'s [affecting.name]. ", \
+ "You salved wounds on [M]'s [affecting.name]. " )
+ use(1)
+ affecting.salve()
/obj/item/stack/medical/advanced/bruise_pack
name = "advanced trauma kit"
singular_name = "advanced trauma kit"
desc = "An advanced trauma kit for severe injuries."
icon_state = "traumakit"
- heal_brute = 12
+ heal_brute = 0
origin_tech = list(TECH_BIO = 1)
/obj/item/stack/medical/advanced/bruise_pack/attack(mob/living/carbon/M as mob, mob/user as mob)
@@ -138,43 +166,54 @@
var/mob/living/carbon/human/H = M
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
- if(affecting.open == 0)
- var/bandaged = affecting.bandage()
- var/disinfected = affecting.disinfect()
+ if(affecting.open)
+ user << "The [affecting.name] is cut open, you'll need more than a bandage! "
+ return
- if(!(bandaged || disinfected))
- user << "The wounds on [M]'s [affecting.name] have already been treated. "
- return 1
- else
- for (var/datum/wound/W in affecting.wounds)
- if (W.internal)
- continue
- if (W.current_stage <= W.max_bleeding_stage)
- user.visible_message("\The [user] cleans [W.desc] on [M]'s [affecting.name] and seals the edges with bioglue. ", \
- "You clean and seal [W.desc] on [M]'s [affecting.name]. " )
- //H.add_side_effect("Itch")
- else if (istype(W,/datum/wound/bruise))
- user.visible_message("\The [user] places a medical patch over [W.desc] on [M]'s [affecting.name]. ", \
- "You place a medical patch over [W.desc] on [M]'s [affecting.name]. " )
- else
- user.visible_message("\The [user] smears some bioglue over [W.desc] on [M]'s [affecting.name]. ", \
- "You smear some bioglue over [W.desc] on [M]'s [affecting.name]. " )
- if (bandaged)
- affecting.heal_damage(heal_brute,0)
- use(1)
+ if(affecting.is_bandaged() && affecting.is_disinfected())
+ user << "The wounds on [M]'s [affecting.name] have already been treated. "
+ return 1
else
- if (can_operate(H)) //Checks if mob is lying down on table for surgery
- if (do_surgery(H,user,src))
- return
- else
- user << "The [affecting.name] is cut open, you'll need more than a bandage! "
+ user.visible_message("\The [user] starts treating [M]'s [affecting.name]. ", \
+ "You start treating [M]'s [affecting.name]. " )
+ var/used = 0
+ for (var/datum/wound/W in affecting.wounds)
+ if (W.internal)
+ continue
+ if (W.bandaged && W.disinfected)
+ continue
+ if(used == amount)
+ break
+ if(!do_mob(user, M, W.damage/5))
+ user << "You must stand still to bandage wounds. "
+ break
+ if (W.current_stage <= W.max_bleeding_stage)
+ user.visible_message("\The [user] cleans \a [W.desc] on [M]'s [affecting.name] and seals the edges with bioglue. ", \
+ "You clean and seal \a [W.desc] on [M]'s [affecting.name]. " )
+ else if (W.damage_type == BRUISE)
+ user.visible_message("\The [user] places a medical patch over \a [W.desc] on [M]'s [affecting.name]. ", \
+ "You place a medical patch over \a [W.desc] on [M]'s [affecting.name]. " )
+ else
+ user.visible_message("\The [user] smears some bioglue over \a [W.desc] on [M]'s [affecting.name]. ", \
+ "You smear some bioglue over \a [W.desc] on [M]'s [affecting.name]. " )
+ W.bandage()
+ W.disinfect()
+ W.heal_damage(heal_brute)
+ used++
+ affecting.update_damages()
+ if(used == amount)
+ if(affecting.is_bandaged())
+ user << "\The [src] is used up. "
+ else
+ user << "\The [src] is used up, but there are more wounds to treat on \the [affecting.name]. "
+ use(used)
/obj/item/stack/medical/advanced/ointment
name = "advanced burn kit"
singular_name = "advanced burn kit"
desc = "An advanced treatment kit for severe burns."
icon_state = "burnkit"
- heal_burn = 12
+ heal_burn = 0
origin_tech = list(TECH_BIO = 1)
@@ -186,21 +225,23 @@
var/mob/living/carbon/human/H = M
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
- if(affecting.open == 0)
- if(!affecting.salve())
- user << "The wounds on [M]'s [affecting.name] have already been salved. "
- return 1
- else
- user.visible_message( "[user] covers wounds on [M]'s [affecting.name] with regenerative membrane. ", \
- "You cover wounds on [M]'s [affecting.name] with regenerative membrane. " )
- affecting.heal_damage(0,heal_burn)
- use(1)
+ if(affecting.open)
+ user << "The [affecting.name] is cut open, you'll need more than a bandage! "
+
+ if(affecting.is_salved())
+ user << "The wounds on [M]'s [affecting.name] have already been salved. "
+ return 1
else
- if (can_operate(H)) //Checks if mob is lying down on table for surgery
- if (do_surgery(H,user,src))
- return
- else
- user << "The [affecting.name] is cut open, you'll need more than a bandage! "
+ user.visible_message("\The [user] starts salving wounds on [M]'s [affecting.name]. ", \
+ "You start salving the wounds on [M]'s [affecting.name]. " )
+ if(!do_mob(user, M, 10))
+ user << "You must stand still to salve wounds. "
+ return 1
+ user.visible_message( "[user] covers wounds on [M]'s [affecting.name] with regenerative membrane. ", \
+ "You cover wounds on [M]'s [affecting.name] with regenerative membrane. " )
+ affecting.heal_damage(0,heal_burn)
+ use(1)
+ affecting.salve()
/obj/item/stack/medical/splint
name = "medical splints"
@@ -209,7 +250,7 @@
amount = 5
max_amount = 5
-/obj/item/stack/medical/splint/attack(mob/living/carbon/M as mob, mob/user as mob)
+/obj/item/stack/medical/splint/attack(mob/living/carbon/M as mob, mob/living/user as mob)
if(..())
return 1
diff --git a/code/game/objects/items/stacks/nanopaste.dm b/code/game/objects/items/stacks/nanopaste.dm
index a9ec052102..da2b23e0e3 100644
--- a/code/game/objects/items/stacks/nanopaste.dm
+++ b/code/game/objects/items/stacks/nanopaste.dm
@@ -18,7 +18,7 @@
R.adjustFireLoss(-15)
R.updatehealth()
use(1)
- user.visible_message("\The [user] applied some [src] at [R]'s damaged areas. ",\
+ user.visible_message("\The [user] applied some [src] on [R]'s damaged areas. ",\
"You apply some [src] at [R]'s damaged areas. ")
else
user << "All [R]'s systems are nominal. "
@@ -27,19 +27,14 @@
var/mob/living/carbon/human/H = M
var/obj/item/organ/external/S = H.get_organ(user.zone_sel.selecting)
- if(S.open == 1)
- if (S && (S.status & ORGAN_ROBOT))
- if(S.get_damage())
+ if(S.open >= 2)
+ if (S && (S.robotic >= ORGAN_ROBOT))
+ if(!S.get_damage())
+ user << "Nothing to fix here. "
+ else if(can_use(1))
+ user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
S.heal_damage(15, 15, robo_repair = 1)
H.updatehealth()
use(1)
- user.visible_message("\The [user] applies some nanite paste at[user != M ? " \the [M]'s" : " \the"][S.name] with \the [src]. ",\
- "You apply some nanite paste at [user == M ? "your" : "[M]'s"] [S.name]. ")
- else
- user << "Nothing to fix here. "
- else
- if (can_operate(H))
- if (do_surgery(H,user,src))
- return
- else
- user << "Nothing to fix in here. "
+ user.visible_message("\The [user] applies some nanite paste on [user != M ? "[M]'s [S.name]" : "[S]"] with [src]. ",\
+ "You apply some nanite paste on [user == M ? "your" : "[M]'s"] [S.name]. ")
diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm
index 3d6a5c9626..a0496b367d 100644
--- a/code/game/objects/items/stacks/rods.dm
+++ b/code/game/objects/items/stacks/rods.dm
@@ -9,7 +9,7 @@
throwforce = 15.0
throw_speed = 5
throw_range = 20
- matter = list(DEFAULT_WALL_MATERIAL = 1875)
+ matter = list(DEFAULT_WALL_MATERIAL = SHEET_MATERIAL_AMOUNT / 2)
max_amount = 60
attack_verb = list("hit", "bludgeoned", "whacked")
diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm
index 96a6656795..669c32955f 100644
--- a/code/game/objects/items/stacks/tiles/tile_types.dm
+++ b/code/game/objects/items/stacks/tiles/tile_types.dm
@@ -4,6 +4,7 @@
* Grass
* Wood
* Carpet
+ * Blue Carpet
* Linoleum
*/
@@ -70,13 +71,19 @@
throw_range = 20
flags = 0
+/obj/item/stack/tile/carpet/blue
+ name = "blue carpet"
+ singular_name = "blue carpet"
+ desc = "A piece of blue carpet. It is the same size as a normal floor tile!"
+ icon_state = "tile-bluecarpet"
+
/obj/item/stack/tile/floor
name = "floor tile"
singular_name = "floor tile"
desc = "Those could work as a pretty decent throwing weapon" //why?
icon_state = "tile"
force = 6.0
- matter = list(DEFAULT_WALL_MATERIAL = 937.5)
+ matter = list(DEFAULT_WALL_MATERIAL = SHEET_MATERIAL_AMOUNT / 4)
throwforce = 15.0
throw_speed = 5
throw_range = 20
@@ -92,13 +99,13 @@
name = "steel floor tile"
singular_name = "steel floor tile"
icon_state = "tile_steel"
- matter = list("plasteel" = 937.5)
+ matter = list("plasteel" = SHEET_MATERIAL_AMOUNT / 4)
/obj/item/stack/tile/floor_white
name = "white floor tile"
singular_name = "white floor tile"
icon_state = "tile_white"
- matter = list("plastic" = 937.5)
+ matter = list("plastic" = SHEET_MATERIAL_AMOUNT / 4)
/obj/item/stack/tile/floor_yellow
name = "yellow floor tile"
@@ -110,13 +117,13 @@
name = "dark floor tile"
singular_name = "dark floor tile"
icon_state = "fr_tile"
- matter = list("plasteel" = 937.5)
+ matter = list("plasteel" = SHEET_MATERIAL_AMOUNT / 4)
/obj/item/stack/tile/floor_freezer
name = "freezer floor tile"
singular_name = "freezer floor tile"
icon_state = "tile_freezer"
- matter = list("plastic" = 937.5)
+ matter = list("plastic" = SHEET_MATERIAL_AMOUNT / 4)
/obj/item/stack/tile/floor/cyborg
name = "floor tile synthesizer"
diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm
index 0068473fb7..63a88dadbb 100644
--- a/code/game/objects/items/toys.dm
+++ b/code/game/objects/items/toys.dm
@@ -407,12 +407,12 @@
* Bosun's whistle
*/
- /obj/item/toy/bosunwhistle
- name = "bosun's whistle"
- desc = "A genuine Admiral Krush Bosun's Whistle, for the aspiring ship's captain! Suitable for ages 8 and up, do not swallow."
- icon = 'icons/obj/toy.dmi'
- icon_state = "bosunwhistle"
- var/cooldown = 0
+/obj/item/toy/bosunwhistle
+ name = "bosun's whistle"
+ desc = "A genuine Admiral Krush Bosun's Whistle, for the aspiring ship's captain! Suitable for ages 8 and up, do not swallow."
+ icon = 'icons/obj/toy.dmi'
+ icon_state = "bosunwhistle"
+ var/cooldown = 0
w_class = 1
slot_flags = SLOT_EARS
diff --git a/code/game/objects/items/trash.dm b/code/game/objects/items/trash.dm
index 34181486e4..1d171d9dbe 100644
--- a/code/game/objects/items/trash.dm
+++ b/code/game/objects/items/trash.dm
@@ -9,11 +9,15 @@
/obj/item/trash/raisins
name = "\improper 4no raisins"
- icon_state= "4no_raisins"
+ icon_state = "4no_raisins"
/obj/item/trash/candy
name = "candy"
- icon_state= "candy"
+ icon_state = "candy"
+
+/obj/item/trash/candy/proteinbar
+ name = "protein bar"
+ icon_state = "proteinbar"
/obj/item/trash/cheesie
name = "\improper Cheesie Honkers"
diff --git a/code/game/objects/items/weapons/RSF.dm b/code/game/objects/items/weapons/RSF.dm
index b96d53c2a8..6384508c04 100644
--- a/code/game/objects/items/weapons/RSF.dm
+++ b/code/game/objects/items/weapons/RSF.dm
@@ -82,7 +82,7 @@ RSF
product = new /obj/item/clothing/mask/smokable/cigarette()
used_energy = 10
if(2)
- product = new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass()
+ product = new /obj/item/weapon/reagent_containers/food/drinks/glass2()
used_energy = 50
if(3)
product = new /obj/item/weapon/paper()
diff --git a/code/game/objects/items/weapons/autopsy.dm b/code/game/objects/items/weapons/autopsy.dm
index c17d8ba650..61c6668c33 100644
--- a/code/game/objects/items/weapons/autopsy.dm
+++ b/code/game/objects/items/weapons/autopsy.dm
@@ -160,34 +160,18 @@
P.icon_state = "paper_words"
if(istype(usr,/mob/living/carbon))
- // place the item in the usr's hand if possible
- if(!usr.r_hand)
- P.loc = usr
- usr.r_hand = P
- P.layer = 20
- else if(!usr.l_hand)
- P.loc = usr
- usr.l_hand = P
- P.layer = 20
+ usr.put_in_hands(src)
- if (ismob(src.loc))
- var/mob/M = src.loc
- M.update_inv_l_hand()
- M.update_inv_r_hand()
-
-/obj/item/weapon/autopsy_scanner/attack(mob/living/carbon/human/M as mob, mob/living/carbon/user as mob)
+/obj/item/weapon/autopsy_scanner/do_surgery(mob/living/carbon/human/M, mob/living/user)
if(!istype(M))
- return
-
- if(!can_operate(M))
- return
+ return 0
if(target_name != M.name)
target_name = M.name
src.wdata = list()
src.chemtraces = list()
src.timeofdeath = null
- user << "A new patient has been registered.. Purging data for previous patient. "
+ user << "A new patient has been registered. Purging data for previous patient. "
src.timeofdeath = M.timeofdeath
@@ -196,10 +180,9 @@
usr << "You can't scan this body part. "
return
if(!S.open)
- usr << "You have to cut the limb open first! "
+ usr << "You have to cut [S] open first! "
return
- for(var/mob/O in viewers(M))
- O.show_message("\The [user] scans the wounds on [M.name]'s [S.name] with \the [src] ", 1)
+ M.visible_message("\The [user] scans the wounds on [M]'s [S.name] with [src] ")
src.add_data(S)
diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm
index 17e9d35ab9..0f59b09cc4 100644
--- a/code/game/objects/items/weapons/cards_ids.dm
+++ b/code/game/objects/items/weapons/cards_ids.dm
@@ -15,7 +15,8 @@
name = "card"
desc = "Does card things."
icon = 'icons/obj/card.dmi'
- w_class = 1.0
+ w_class = 1
+ slot_flags = SLOT_EARS
var/associated_account_number = 0
var/list/files = list( )
@@ -68,6 +69,7 @@
icon_state = "emag"
item_state = "card-id"
origin_tech = list(TECH_MAGNET = 2, TECH_ILLEGAL = 2)
+ var/default_uses = 10
var/uses = 10
/obj/item/weapon/card/emag/resolve_attackby(atom/A, mob/user)
@@ -87,6 +89,12 @@
qdel(src)
return 1
+/obj/item/weapon/card/emag/attackby(obj/item/O as obj, mob/user as mob)
+ if(istype(O, /obj/item/device/telecrystal))
+ src.uses += default_uses/2 //Adds half the default amount of uses which is more than you get per TC when buying, as to balance the utility of having multiple emags vs one heavily usable one
+ usr << "You add \the [O] to \the [src]. Increasing the uses of \the [src] to [uses]. "
+ qdel(O)
+
/obj/item/weapon/card/id
name = "identification card"
@@ -110,6 +118,9 @@
var/icon/front
var/icon/side
+ var/primary_color = rgb(0,0,0) // Obtained by eyedroppering the stripe in the middle of the card
+ var/secondary_color = rgb(0,0,0) // Likewise for the oval in the top-left corner
+
//alt titles are handled a bit weirdly in order to unobtrusively integrate into existing ID system
var/assignment = null //can be alt title or the actual job
var/rank = null //actual job
@@ -255,3 +266,88 @@
/obj/item/weapon/card/id/centcom/ERT/New()
..()
access |= get_all_station_access()
+
+// Department-flavor IDs
+/obj/item/weapon/card/id/medical
+ name = "identification card"
+ desc = "A card issued to station medical staff."
+ icon_state = "med"
+ primary_color = rgb(189,237,237)
+ secondary_color = rgb(223,255,255)
+
+/obj/item/weapon/card/id/medical/head
+ name = "identification card"
+ desc = "A card which represents care and compassion."
+ icon_state = "medGold"
+ primary_color = rgb(189,237,237)
+ secondary_color = rgb(255,223,127)
+
+/obj/item/weapon/card/id/security
+ name = "identification card"
+ desc = "A card issued to station security staff."
+ icon_state = "sec"
+ primary_color = rgb(189,47,0)
+ secondary_color = rgb(223,127,95)
+
+/obj/item/weapon/card/id/security/head
+ name = "identification card"
+ desc = "A card which represents honor and protection."
+ icon_state = "secGold"
+ primary_color = rgb(189,47,0)
+ secondary_color = rgb(255,223,127)
+
+/obj/item/weapon/card/id/engineering
+ name = "identification card"
+ desc = "A card issued to station engineering staff."
+ icon_state = "eng"
+ primary_color = rgb(189,94,0)
+ secondary_color = rgb(223,159,95)
+
+/obj/item/weapon/card/id/engineering/head
+ name = "identification card"
+ desc = "A card which represents creativity and ingenuity."
+ icon_state = "engGold"
+ primary_color = rgb(189,94,0)
+ secondary_color = rgb(255,223,127)
+
+/obj/item/weapon/card/id/science
+ name = "identification card"
+ desc = "A card issued to station science staff."
+ icon_state = "sci"
+ primary_color = rgb(142,47,142)
+ secondary_color = rgb(191,127,191)
+
+/obj/item/weapon/card/id/science/head
+ name = "identification card"
+ desc = "A card which represents knowledge and reasoning."
+ icon_state = "sciGold"
+ primary_color = rgb(142,47,142)
+ secondary_color = rgb(255,223,127)
+
+/obj/item/weapon/card/id/cargo
+ name = "identification card"
+ desc = "A card issued to station cargo staff."
+ icon_state = "cargo"
+ primary_color = rgb(142,94,0)
+ secondary_color = rgb(191,159,95)
+
+/obj/item/weapon/card/id/cargo/head
+ name = "identification card"
+ desc = "A card which represents service and planning."
+ icon_state = "cargoGold"
+ primary_color = rgb(142,94,0)
+ secondary_color = rgb(255,223,127)
+
+/obj/item/weapon/card/id/civilian
+ name = "identification card"
+ desc = "A card issued to station civilian staff."
+ icon_state = "civ"
+ primary_color = rgb(0,94,142)
+ secondary_color = rgb(95,159,191)
+
+/obj/item/weapon/card/id/civilian/head //This is not the HoP. There's no position that uses this right now.
+ name = "identification card"
+ desc = "A card which represents common sense and responsibility."
+ icon_state = "civGold"
+ primary_color = rgb(0,94,142)
+ secondary_color = rgb(255,223,127)
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm
index b156d569ad..4772063b4c 100644
--- a/code/game/objects/items/weapons/cigs_lighters.dm
+++ b/code/game/objects/items/weapons/cigs_lighters.dm
@@ -445,39 +445,36 @@ CIGARETTE PACKETS ARE IN FANCY.DM
/obj/item/weapon/flame/lighter/attack_self(mob/living/user)
if(!base_state)
base_state = icon_state
- if(user.r_hand == src || user.l_hand == src)
- if(!lit)
- lit = 1
- icon_state = "[base_state]on"
- item_state = "[base_state]on"
- if(istype(src, /obj/item/weapon/flame/lighter/zippo) )
- user.visible_message("Without even breaking stride, [user] flips open and lights [src] in one smooth movement. ")
- else
- if(prob(95))
- user.visible_message("After a few attempts, [user] manages to light the [src]. ")
- else
- user << "You burn yourself while lighting the lighter. "
- if (user.l_hand == src)
- user.apply_damage(2,BURN,"l_hand")
- else
- user.apply_damage(2,BURN,"r_hand")
- user.visible_message("After a few attempts, [user] manages to light the [src], they however burn their finger in the process. ")
-
- set_light(2)
- processing_objects.Add(src)
+ if(!lit)
+ lit = 1
+ icon_state = "[base_state]on"
+ item_state = "[base_state]on"
+ if(istype(src, /obj/item/weapon/flame/lighter/zippo) )
+ user.visible_message("Without even breaking stride, [user] flips open and lights [src] in one smooth movement. ")
else
- lit = 0
- icon_state = "[base_state]"
- item_state = "[base_state]"
- if(istype(src, /obj/item/weapon/flame/lighter/zippo) )
- user.visible_message("You hear a quiet click, as [user] shuts off [src] without even looking at what they're doing. ")
+ if(prob(95))
+ user.visible_message("After a few attempts, [user] manages to light the [src]. ")
else
- user.visible_message("[user] quietly shuts off the [src]. ")
+ user << "You burn yourself while lighting the lighter. "
+ if (user.get_left_hand() == src)
+ user.apply_damage(2,BURN,"l_hand")
+ else
+ user.apply_damage(2,BURN,"r_hand")
+ user.visible_message("After a few attempts, [user] manages to light the [src], they however burn their finger in the process. ")
- set_light(0)
- processing_objects.Remove(src)
+ set_light(2)
+ processing_objects.Add(src)
else
- return ..()
+ lit = 0
+ icon_state = "[base_state]"
+ item_state = "[base_state]"
+ if(istype(src, /obj/item/weapon/flame/lighter/zippo) )
+ user.visible_message("You hear a quiet click, as [user] shuts off [src] without even looking at what they're doing. ")
+ else
+ user.visible_message("[user] quietly shuts off the [src]. ")
+
+ set_light(0)
+ processing_objects.Remove(src)
return
diff --git a/code/game/objects/items/weapons/circuitboards/computer/camera_monitor.dm b/code/game/objects/items/weapons/circuitboards/computer/camera_monitor.dm
index ef6b4c4d57..0016fc730a 100644
--- a/code/game/objects/items/weapons/circuitboards/computer/camera_monitor.dm
+++ b/code/game/objects/items/weapons/circuitboards/computer/camera_monitor.dm
@@ -9,7 +9,7 @@
var/list/network
var/locked = 1
var/emagged = 0
-
+
/obj/item/weapon/circuitboard/security/New()
..()
network = station_networks
@@ -18,7 +18,7 @@
name = T_BOARD("engineering camera monitor")
build_path = /obj/machinery/computer/security/engineering
req_access = list()
-
+
/obj/item/weapon/circuitboard/security/engineering/New()
..()
network = engineering_networks
@@ -29,14 +29,24 @@
network = list("MINE")
req_access = list()
+/obj/item/weapon/circuitboard/security/telescreen/entertainment
+ name = T_BOARD("entertainment camera monitor")
+ build_path = /obj/machinery/computer/security/telescreen/entertainment
+ board_type = "display"
+ matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
+
+/obj/item/weapon/circuitboard/security/telescreen/entertainment/New()
+ ..()
+ network = NETWORK_THUNDER
+
/obj/item/weapon/circuitboard/security/construct(var/obj/machinery/computer/security/C)
if (..(C))
- C.network = network
+ C.network = network.Copy()
/obj/item/weapon/circuitboard/security/deconstruct(var/obj/machinery/computer/security/C)
if (..(C))
- network = C.network
-
+ network = C.network.Copy()
+
/obj/item/weapon/circuitboard/security/emag_act(var/remaining_charges, var/mob/user)
if(emagged)
user << "Circuit lock is already removed."
@@ -60,12 +70,12 @@
if(locked)
user << "Circuit controls are locked. "
return
- var/existing_networks = list2text(network,",")
+ var/existing_networks = jointext(network,",")
var/input = sanitize(input(usr, "Which networks would you like to connect this camera console circuit to? Seperate networks with a comma. No Spaces!\nFor example: SS13,Security,Secret ", "Multitool-Circuitboard interface", existing_networks))
if(!input)
usr << "No input found please hang up and try your call again."
return
- var/list/tempnetwork = text2list(input, ",")
+ var/list/tempnetwork = splittext(input, ",")
tempnetwork = difflist(tempnetwork,restricted_camera_networks,1)
if(tempnetwork.len < 1)
usr << "No network found please hang up and try your call again."
diff --git a/code/game/objects/items/weapons/circuitboards/frame.dm b/code/game/objects/items/weapons/circuitboards/frame.dm
new file mode 100644
index 0000000000..3acb2de755
--- /dev/null
+++ b/code/game/objects/items/weapons/circuitboards/frame.dm
@@ -0,0 +1,318 @@
+#ifndef T_BOARD
+#error T_BOARD macro is not defined but we need it!
+#endif
+
+//Circuitboards for frames (mostly wall based frames). Most of these don't fit into other categories.
+
+//Display
+
+/obj/item/weapon/circuitboard/guestpass
+ name = T_BOARD("guestpass console")
+ build_path = /obj/machinery/computer/guestpass
+ board_type = "guestpass"
+ matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
+
+/obj/item/weapon/circuitboard/status_display
+ name = T_BOARD("status display")
+ build_path = /obj/machinery/status_display
+ board_type = "display"
+ matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
+
+/obj/item/weapon/circuitboard/ai_status_display
+ name = T_BOARD("ai status display")
+ build_path = /obj/machinery/ai_status_display
+ board_type = "display"
+ matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
+
+/obj/item/weapon/circuitboard/newscaster
+ name = T_BOARD("newscaster")
+ build_path = /obj/machinery/newscaster
+ board_type = "newscaster"
+ matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
+
+/obj/item/weapon/circuitboard/atm
+ name = T_BOARD("atm")
+ build_path = /obj/machinery/atm
+ board_type = "atm"
+ matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
+
+/obj/item/weapon/circuitboard/request
+ name = T_BOARD("reques console")
+ build_path = /obj/machinery/requests_console
+ board_type = "request"
+ matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
+
+//Alarm
+
+/obj/item/weapon/circuitboard/firealarm
+ name = T_BOARD("fire alarm")
+ build_path = /obj/machinery/firealarm
+ board_type = "firealarm"
+ matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
+
+/obj/item/weapon/circuitboard/airalarm
+ name = T_BOARD("air alarm")
+ build_path = /obj/machinery/alarm
+ board_type = "airalarm"
+ matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
+
+/obj/item/weapon/circuitboard/intercom
+ name = T_BOARD("intercom")
+ build_path = /obj/item/device/radio/intercom
+ board_type = "intercom"
+ matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
+
+/obj/item/weapon/circuitboard/keycard_auth
+ name = T_BOARD("keycard authenticator")
+ build_path = /obj/machinery/keycard_auth
+ board_type = "keycard"
+ matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
+
+//Computer
+
+/obj/item/weapon/circuitboard/holopad
+ name = T_BOARD("holopad")
+ build_path = /obj/machinery/hologram/holopad
+ board_type = "holopad"
+ matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
+
+/obj/item/weapon/circuitboard/scanner_console
+ name = T_BOARD("body scanner console")
+ build_path = /obj/machinery/body_scanconsole
+ board_type = "console"
+ origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 2)
+
+/obj/item/weapon/circuitboard/sleeper_console
+ name = T_BOARD("sleeper console")
+ build_path = /obj/machinery/sleep_console
+ board_type = "console"
+ origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 2)
+
+//Machine
+
+/obj/item/weapon/circuitboard/photocopier
+ name = T_BOARD("photocopier")
+ build_path = /obj/machinery/photocopier
+ board_type = "photocopier"
+ matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
+ req_components = list(
+ /obj/item/weapon/stock_parts/scanning_module = 1,
+ /obj/item/weapon/stock_parts/motor = 1,
+ /obj/item/weapon/stock_parts/micro_laser = 1,
+ /obj/item/weapon/stock_parts/matter_bin = 1)
+
+/obj/item/weapon/circuitboard/fax
+ name = T_BOARD("fax")
+ build_path = /obj/machinery/photocopier/faxmachine
+ board_type = "fax"
+ matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
+ req_components = list(
+ /obj/item/weapon/stock_parts/scanning_module = 1,
+ /obj/item/weapon/stock_parts/motor = 1,
+ /obj/item/weapon/stock_parts/micro_laser = 1,
+ /obj/item/weapon/stock_parts/matter_bin = 1)
+
+/obj/item/weapon/circuitboard/conveyor
+ name = T_BOARD("conveyor")
+ build_path = /obj/machinery/conveyor
+ board_type = "conveyor"
+ req_components = list(
+ /obj/item/weapon/stock_parts/gear = 2,
+ /obj/item/weapon/stock_parts/motor = 2,
+ /obj/item/stack/cable_coil = 5)
+
+/obj/item/weapon/circuitboard/microwave
+ name = T_BOARD("microwave")
+ build_path = /obj/machinery/microwave
+ board_type = "microwave"
+ matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
+ req_components = list(
+ /obj/item/weapon/stock_parts/console_screen = 1,
+ /obj/item/weapon/stock_parts/motor = 1,
+ /obj/item/weapon/stock_parts/capacitor = 1)
+
+/obj/item/weapon/circuitboard/recharger
+ name = T_BOARD("recharger")
+ build_path = /obj/machinery/recharger
+ board_type = "recharger"
+ req_components = list(
+ /obj/item/weapon/stock_parts/capacitor = 1,
+ /obj/item/stack/cable_coil = 5)
+
+/obj/item/weapon/circuitboard/recharger/wrecharger
+ name = T_BOARD("wall recharger")
+ build_path = /obj/machinery/recharger/wallcharger
+ board_type = "wrecharger"
+
+/obj/item/weapon/circuitboard/washing
+ name = T_BOARD("washing machine")
+ build_path = /obj/machinery/washing_machine
+ board_type = "washing"
+ matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
+ req_components = list(
+ /obj/item/weapon/stock_parts/motor = 1,
+ /obj/item/weapon/stock_parts/gear = 2)
+
+/obj/item/weapon/circuitboard/grinder
+ name = T_BOARD("reagent grinder")
+ build_path = /obj/machinery/reagentgrinder
+ board_type = "grinder"
+ req_components = list(
+ /obj/item/weapon/stock_parts/motor = 1,
+ /obj/item/weapon/stock_parts/gear = 1,
+ /obj/item/weapon/reagent_containers/glass/beaker/large = 1)
+
+/obj/item/weapon/circuitboard/teleporter_hub
+ name = T_BOARD("teleporter hub")
+ build_path = /obj/machinery/teleport/hub
+ board_type = "teleporter_hub"
+// origin_tech = list(TECH_DATA = 2, TECH_BLUESPACE = 4)
+ req_components = list(
+ /obj/item/weapon/stock_parts/scanning_module = 4,
+ /obj/item/weapon/stock_parts/micro_laser = 4,
+ /obj/item/stack/cable_coil = 10)
+
+/obj/item/weapon/circuitboard/teleporter_station
+ name = T_BOARD("teleporter station")
+ build_path = /obj/machinery/teleport/station
+ board_type = "teleporter_station"
+// origin_tech = list(TECH_DATA = 2, TECH_BLUESPACE = 3)
+ req_components = list(
+ /obj/item/weapon/stock_parts/console_screen = 1,
+ /obj/item/weapon/stock_parts/capacitor = 2,
+ /obj/item/stack/cable_coil = 10)
+
+/obj/item/weapon/circuitboard/body_scanner
+ name = T_BOARD("body scanner")
+ build_path = /obj/machinery/bodyscanner
+ board_type = "medpod"
+ origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 2)
+ req_components = list(
+ /obj/item/weapon/stock_parts/scanning_module = 3,
+ /obj/item/stack/material/glass/reinforced = 2)
+
+/obj/item/weapon/circuitboard/sleeper
+ name = T_BOARD("sleeper")
+ build_path = /obj/machinery/sleeper
+ board_type = "medpod"
+ origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 2)
+ req_components = list(
+ /obj/item/weapon/stock_parts/scanning_module = 1,
+ /obj/item/weapon/reagent_containers/glass/beaker = 3,
+ /obj/item/weapon/reagent_containers/syringe = 3,
+ /obj/item/stack/material/glass/reinforced = 2)
+
+/obj/item/weapon/circuitboard/dna_analyzer
+ name = T_BOARD("dna analyzer")
+ build_path = /obj/machinery/dnaforensics
+ board_type = "dna_analyzer"
+ origin_tech = list(TECH_MAGNET = 4, TECH_BIO = 2, TECH_DATA = 2)
+ req_components = list(
+ /obj/item/weapon/stock_parts/scanning_module = 2,
+ /obj/item/weapon/stock_parts/micro_laser = 1,
+ /obj/item/weapon/stock_parts/console_screen = 1)
+
+/obj/item/weapon/circuitboard/mass_driver
+ name = T_BOARD("mass driver")
+ build_path = /obj/machinery/mass_driver
+ board_type = "massdriver"
+ req_components = list(
+ /obj/item/weapon/stock_parts/gear = 2,
+ /obj/item/weapon/stock_parts/motor = 2,
+ /obj/item/weapon/stock_parts/capacitor = 1,
+ /obj/item/weapon/stock_parts/spring = 1,
+ /obj/item/stack/cable_coil = 5)
+
+//for testing - If this is still in when I commit, someone shoot me. --leaving in for now, shouldn't be able to get these on station anyways.
+/obj/item/weapon/storage/box/frame_parts
+ display_contents_with_number = 1
+ New()
+ ..()
+ new /obj/item/weapon/circuitboard/guestpass( src )
+ new /obj/item/weapon/circuitboard/status_display( src )
+ new /obj/item/weapon/circuitboard/ai_status_display( src )
+ new /obj/item/weapon/circuitboard/newscaster( src )
+ new /obj/item/weapon/circuitboard/atm( src )
+ new /obj/item/weapon/circuitboard/firealarm( src )
+ new /obj/item/weapon/circuitboard/airalarm( src )
+ new /obj/item/weapon/circuitboard/intercom( src )
+ new /obj/item/weapon/circuitboard/keycard_auth( src )
+ new /obj/item/weapon/circuitboard/holopad( src )
+ new /obj/item/weapon/circuitboard/photocopier( src )
+ new /obj/item/weapon/circuitboard/fax( src )
+ new /obj/item/weapon/circuitboard/microwave( src )
+ new /obj/item/weapon/circuitboard/washing( src )
+ new /obj/item/weapon/stock_parts/scanning_module( src )
+ new /obj/item/weapon/stock_parts/motor( src )
+ new /obj/item/weapon/stock_parts/micro_laser( src )
+ new /obj/item/weapon/stock_parts/matter_bin( src )
+ new /obj/item/weapon/stock_parts/gear( src )
+ new /obj/item/weapon/stock_parts/console_screen( src )
+ new /obj/item/weapon/stock_parts/capacitor( src )
+ new /obj/item/weapon/stock_parts/spring( src )
+ new /obj/item/weapon/stock_parts/scanning_module( src )
+ new /obj/item/weapon/stock_parts/motor( src )
+ new /obj/item/weapon/stock_parts/micro_laser( src )
+ new /obj/item/weapon/stock_parts/matter_bin( src )
+ new /obj/item/weapon/stock_parts/gear( src )
+ new /obj/item/weapon/stock_parts/console_screen( src )
+ new /obj/item/weapon/stock_parts/capacitor( src )
+ new /obj/item/weapon/stock_parts/spring( src )
+ new /obj/item/weapon/stock_parts/scanning_module( src )
+ new /obj/item/weapon/stock_parts/motor( src )
+ new /obj/item/weapon/stock_parts/micro_laser( src )
+ new /obj/item/weapon/stock_parts/matter_bin( src )
+ new /obj/item/weapon/stock_parts/gear( src )
+ new /obj/item/weapon/stock_parts/console_screen( src )
+ new /obj/item/weapon/stock_parts/capacitor( src )
+ new /obj/item/weapon/stock_parts/spring( src )
+ new /obj/item/weapon/stock_parts/scanning_module( src )
+ new /obj/item/weapon/stock_parts/motor( src )
+ new /obj/item/weapon/stock_parts/micro_laser( src )
+ new /obj/item/weapon/stock_parts/matter_bin( src )
+ new /obj/item/weapon/stock_parts/gear( src )
+ new /obj/item/weapon/stock_parts/console_screen( src )
+ new /obj/item/weapon/stock_parts/capacitor( src )
+ new /obj/item/weapon/stock_parts/spring( src )
+ new /obj/item/weapon/stock_parts/scanning_module( src )
+ new /obj/item/weapon/stock_parts/motor( src )
+ new /obj/item/weapon/stock_parts/micro_laser( src )
+ new /obj/item/weapon/stock_parts/matter_bin( src )
+ new /obj/item/weapon/stock_parts/gear( src )
+ new /obj/item/weapon/stock_parts/console_screen( src )
+ new /obj/item/weapon/stock_parts/capacitor( src )
+ new /obj/item/weapon/stock_parts/spring( src )
+ new /obj/item/weapon/stock_parts/scanning_module( src )
+ new /obj/item/weapon/stock_parts/motor( src )
+ new /obj/item/weapon/stock_parts/micro_laser( src )
+ new /obj/item/weapon/stock_parts/matter_bin( src )
+ new /obj/item/weapon/stock_parts/gear( src )
+ new /obj/item/weapon/stock_parts/console_screen( src )
+ new /obj/item/weapon/stock_parts/capacitor( src )
+ new /obj/item/weapon/stock_parts/spring( src )
+ new /obj/item/weapon/stock_parts/scanning_module( src )
+ new /obj/item/weapon/stock_parts/motor( src )
+ new /obj/item/weapon/stock_parts/micro_laser( src )
+ new /obj/item/weapon/stock_parts/matter_bin( src )
+ new /obj/item/weapon/stock_parts/gear( src )
+ new /obj/item/weapon/stock_parts/console_screen( src )
+ new /obj/item/weapon/stock_parts/capacitor( src )
+ new /obj/item/weapon/stock_parts/spring( src )
+ new /obj/item/weapon/stock_parts/scanning_module( src )
+ new /obj/item/weapon/stock_parts/motor( src )
+ new /obj/item/weapon/stock_parts/micro_laser( src )
+ new /obj/item/weapon/stock_parts/matter_bin( src )
+ new /obj/item/weapon/stock_parts/gear( src )
+ new /obj/item/weapon/stock_parts/console_screen( src )
+ new /obj/item/weapon/stock_parts/capacitor( src )
+ new /obj/item/weapon/stock_parts/spring( src )
+ new /obj/item/weapon/stock_parts/scanning_module( src )
+ new /obj/item/weapon/stock_parts/motor( src )
+ new /obj/item/weapon/stock_parts/micro_laser( src )
+ new /obj/item/weapon/stock_parts/matter_bin( src )
+ new /obj/item/weapon/stock_parts/gear( src )
+ new /obj/item/weapon/stock_parts/console_screen( src )
+ new /obj/item/weapon/stock_parts/capacitor( src )
+ new /obj/item/weapon/stock_parts/spring( src )
+ new /obj/item/stack/cable_coil( src , 5 )
+ new /obj/item/stack/material/glass/reinforced( src , 2 )
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/circuitboards/machinery/biogenerator.dm b/code/game/objects/items/weapons/circuitboards/machinery/biogenerator.dm
index 65949ae338..716e763515 100644
--- a/code/game/objects/items/weapons/circuitboards/machinery/biogenerator.dm
+++ b/code/game/objects/items/weapons/circuitboards/machinery/biogenerator.dm
@@ -1,5 +1,5 @@
#ifndef T_BOARD
-#error T_BOARD macro is not defined but we need it!
+#error T_BOARD macro is not defined but we need it!
#endif
/obj/item/weapon/circuitboard/biogenerator
@@ -8,5 +8,5 @@
board_type = "machine"
origin_tech = list(TECH_DATA = 2)
req_components = list(
- "/obj/item/weapon/stock_parts/matter_bin" = 1,
- "/obj/item/weapon/stock_parts/manipulator" = 1)
\ No newline at end of file
+ /obj/item/weapon/stock_parts/matter_bin = 1,
+ /obj/item/weapon/stock_parts/manipulator = 1)
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/circuitboards/machinery/cloning.dm b/code/game/objects/items/weapons/circuitboards/machinery/cloning.dm
index b80a3abd34..a1edb3f464 100644
--- a/code/game/objects/items/weapons/circuitboards/machinery/cloning.dm
+++ b/code/game/objects/items/weapons/circuitboards/machinery/cloning.dm
@@ -1,5 +1,5 @@
#ifndef T_BOARD
-#error T_BOARD macro is not defined but we need it!
+#error T_BOARD macro is not defined but we need it!
#endif
/obj/item/weapon/circuitboard/clonepod
@@ -8,10 +8,10 @@
board_type = "machine"
origin_tech = list(TECH_DATA = 3, TECH_BIO = 3)
req_components = list(
- "/obj/item/stack/cable_coil" = 2,
- "/obj/item/weapon/stock_parts/scanning_module" = 2,
- "/obj/item/weapon/stock_parts/manipulator" = 2,
- "/obj/item/weapon/stock_parts/console_screen" = 1)
+ /obj/item/stack/cable_coil = 2,
+ /obj/item/weapon/stock_parts/scanning_module = 2,
+ /obj/item/weapon/stock_parts/manipulator = 2,
+ /obj/item/weapon/stock_parts/console_screen = 1)
/obj/item/weapon/circuitboard/clonescanner
name = T_BOARD("cloning scanner")
@@ -19,8 +19,8 @@
board_type = "machine"
origin_tech = list(TECH_DATA = 2, TECH_BIO = 2)
req_components = list(
- "/obj/item/weapon/stock_parts/scanning_module" = 1,
- "/obj/item/weapon/stock_parts/manipulator" = 1,
- "/obj/item/weapon/stock_parts/micro_laser" = 1,
- "/obj/item/weapon/stock_parts/console_screen" = 1,
- "/obj/item/stack/cable_coil" = 2)
+ /obj/item/weapon/stock_parts/scanning_module = 1,
+ /obj/item/weapon/stock_parts/manipulator = 1,
+ /obj/item/weapon/stock_parts/micro_laser = 1,
+ /obj/item/weapon/stock_parts/console_screen = 1,
+ /obj/item/stack/cable_coil = 2)
diff --git a/code/game/objects/items/weapons/circuitboards/machinery/jukebox.dm b/code/game/objects/items/weapons/circuitboards/machinery/jukebox.dm
new file mode 100644
index 0000000000..4b6296c886
--- /dev/null
+++ b/code/game/objects/items/weapons/circuitboards/machinery/jukebox.dm
@@ -0,0 +1,13 @@
+#ifndef T_BOARD
+#error T_BOARD macro is not defined but we need it!
+#endif
+
+/obj/item/weapon/circuitboard/jukebox
+ name = T_BOARD("jukebox")
+ build_path = "/obj/machinery/media/jukebox"
+ board_type = "machine"
+ origin_tech = list(TECH_MAGNET = 2, TECH_DATA = 1)
+ req_components = list(
+ /obj/item/weapon/stock_parts/capacitor = 1,
+ /obj/item/weapon/stock_parts/console_screen = 1,
+ /obj/item/stack/cable_coil = 5)
diff --git a/code/game/objects/items/weapons/circuitboards/machinery/mech_recharger.dm b/code/game/objects/items/weapons/circuitboards/machinery/mech_recharger.dm
index 6b8eb5d5e5..4515bfd74b 100644
--- a/code/game/objects/items/weapons/circuitboards/machinery/mech_recharger.dm
+++ b/code/game/objects/items/weapons/circuitboards/machinery/mech_recharger.dm
@@ -1,5 +1,5 @@
#ifndef T_BOARD
-#error T_BOARD macro is not defined but we need it!
+#error T_BOARD macro is not defined but we need it!
#endif
/obj/item/weapon/circuitboard/mech_recharger
@@ -8,6 +8,6 @@
board_type = "machine"
origin_tech = list(TECH_DATA = 2, TECH_POWER = 2, TECH_ENGINEERING = 2)
req_components = list(
- "/obj/item/weapon/stock_parts/capacitor" = 2,
- "/obj/item/weapon/stock_parts/scanning_module" = 1,
- "/obj/item/weapon/stock_parts/manipulator" = 2)
\ No newline at end of file
+ /obj/item/weapon/stock_parts/capacitor = 2,
+ /obj/item/weapon/stock_parts/scanning_module = 1,
+ /obj/item/weapon/stock_parts/manipulator = 2)
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/circuitboards/machinery/mining_drill.dm b/code/game/objects/items/weapons/circuitboards/machinery/mining_drill.dm
index a31a73684a..653d20d666 100644
--- a/code/game/objects/items/weapons/circuitboards/machinery/mining_drill.dm
+++ b/code/game/objects/items/weapons/circuitboards/machinery/mining_drill.dm
@@ -1,5 +1,5 @@
#ifndef T_BOARD
-#error T_BOARD macro is not defined but we need it!
+#error T_BOARD macro is not defined but we need it!
#endif
/obj/item/weapon/circuitboard/miningdrill
@@ -8,10 +8,10 @@
board_type = "machine"
origin_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1)
req_components = list(
- "/obj/item/weapon/stock_parts/capacitor" = 1,
- "/obj/item/weapon/cell" = 1,
- "/obj/item/weapon/stock_parts/matter_bin" = 1,
- "/obj/item/weapon/stock_parts/micro_laser" = 1)
+ /obj/item/weapon/stock_parts/capacitor = 1,
+ /obj/item/weapon/cell = 1,
+ /obj/item/weapon/stock_parts/matter_bin = 1,
+ /obj/item/weapon/stock_parts/micro_laser = 1)
/obj/item/weapon/circuitboard/miningdrillbrace
name = T_BOARD("mining drill brace")
diff --git a/code/game/objects/items/weapons/circuitboards/machinery/pacman.dm b/code/game/objects/items/weapons/circuitboards/machinery/pacman.dm
index 02bf65fb0a..a5cd69b0f4 100644
--- a/code/game/objects/items/weapons/circuitboards/machinery/pacman.dm
+++ b/code/game/objects/items/weapons/circuitboards/machinery/pacman.dm
@@ -1,5 +1,5 @@
#ifndef T_BOARD
-#error T_BOARD macro is not defined but we need it!
+#error T_BOARD macro is not defined but we need it!
#endif
/obj/item/weapon/circuitboard/pacman
@@ -8,10 +8,10 @@
board_type = "machine"
origin_tech = list(TECH_DATA = 3, TECH_POWER = 3, TECH_PHORON = 3, TECH_ENGINEERING = 3)
req_components = list(
- "/obj/item/weapon/stock_parts/matter_bin" = 1,
- "/obj/item/weapon/stock_parts/micro_laser" = 1,
- "/obj/item/stack/cable_coil" = 2,
- "/obj/item/weapon/stock_parts/capacitor" = 1)
+ /obj/item/weapon/stock_parts/matter_bin = 1,
+ /obj/item/weapon/stock_parts/micro_laser = 1,
+ /obj/item/stack/cable_coil = 2,
+ /obj/item/weapon/stock_parts/capacitor = 1)
/obj/item/weapon/circuitboard/pacman/super
name = T_BOARD("SUPERPACMAN-type generator")
diff --git a/code/game/objects/items/weapons/circuitboards/machinery/power.dm b/code/game/objects/items/weapons/circuitboards/machinery/power.dm
index a8d2e1ea37..5c8975a207 100644
--- a/code/game/objects/items/weapons/circuitboards/machinery/power.dm
+++ b/code/game/objects/items/weapons/circuitboards/machinery/power.dm
@@ -1,5 +1,5 @@
#ifndef T_BOARD
-#error T_BOARD macro is not defined but we need it!
+#error T_BOARD macro is not defined but we need it!
#endif
/obj/item/weapon/circuitboard/smes
@@ -7,18 +7,18 @@
build_path = "/obj/machinery/power/smes/buildable"
board_type = "machine"
origin_tech = list(TECH_POWER = 6, TECH_ENGINEERING = 4)
- req_components = list("/obj/item/weapon/smes_coil" = 1, "/obj/item/stack/cable_coil" = 30)
+ req_components = list(/obj/item/weapon/smes_coil = 1, /obj/item/stack/cable_coil = 30)
/obj/item/weapon/circuitboard/batteryrack
name = T_BOARD("battery rack PSU")
build_path = "/obj/machinery/power/smes/batteryrack"
board_type = "machine"
origin_tech = list(TECH_POWER = 3, TECH_ENGINEERING = 2)
- req_components = list("/obj/item/weapon/cell" = 3)
+ req_components = list(/obj/item/weapon/cell = 3)
/obj/item/weapon/circuitboard/ghettosmes
name = T_BOARD("makeshift PSU")
desc = "An APC circuit repurposed into some power storage device controller"
build_path = "/obj/machinery/power/smes/batteryrack/makeshift"
board_type = "machine"
- req_components = list("/obj/item/weapon/cell" = 3)
+ req_components = list(/obj/item/weapon/cell = 3)
diff --git a/code/game/objects/items/weapons/circuitboards/machinery/recharge_station.dm b/code/game/objects/items/weapons/circuitboards/machinery/recharge_station.dm
index 27e4c652c6..a3684cd894 100644
--- a/code/game/objects/items/weapons/circuitboards/machinery/recharge_station.dm
+++ b/code/game/objects/items/weapons/circuitboards/machinery/recharge_station.dm
@@ -1,5 +1,5 @@
#ifndef T_BOARD
-#error T_BOARD macro is not defined but we need it!
+#error T_BOARD macro is not defined but we need it!
#endif
/obj/item/weapon/circuitboard/recharge_station
@@ -8,7 +8,7 @@
board_type = "machine"
origin_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 3)
req_components = list(
- "/obj/item/stack/cable_coil" = 5,
- "/obj/item/weapon/stock_parts/capacitor" = 2,
- "/obj/item/weapon/stock_parts/manipulator" = 2,
- "/obj/item/weapon/cell" = 1)
\ No newline at end of file
+ /obj/item/stack/cable_coil = 5,
+ /obj/item/weapon/stock_parts/capacitor = 2,
+ /obj/item/weapon/stock_parts/manipulator = 2,
+ /obj/item/weapon/cell = 1)
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/circuitboards/machinery/research.dm b/code/game/objects/items/weapons/circuitboards/machinery/research.dm
index ee2a2b054c..c871bd3dc5 100644
--- a/code/game/objects/items/weapons/circuitboards/machinery/research.dm
+++ b/code/game/objects/items/weapons/circuitboards/machinery/research.dm
@@ -1,5 +1,5 @@
#ifndef T_BOARD
-#error T_BOARD macro is not defined but we need it!
+#error T_BOARD macro is not defined but we need it!
#endif
obj/item/weapon/circuitboard/rdserver
@@ -8,8 +8,8 @@ obj/item/weapon/circuitboard/rdserver
board_type = "machine"
origin_tech = list(TECH_DATA = 3)
req_components = list(
- "/obj/item/stack/cable_coil" = 2,
- "/obj/item/weapon/stock_parts/scanning_module" = 1)
+ /obj/item/stack/cable_coil = 2,
+ /obj/item/weapon/stock_parts/scanning_module = 1)
/obj/item/weapon/circuitboard/destructive_analyzer
name = T_BOARD("destructive analyzer")
@@ -17,9 +17,9 @@ obj/item/weapon/circuitboard/rdserver
board_type = "machine"
origin_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 2, TECH_DATA = 2)
req_components = list(
- "/obj/item/weapon/stock_parts/scanning_module" = 1,
- "/obj/item/weapon/stock_parts/manipulator" = 1,
- "/obj/item/weapon/stock_parts/micro_laser" = 1)
+ /obj/item/weapon/stock_parts/scanning_module = 1,
+ /obj/item/weapon/stock_parts/manipulator = 1,
+ /obj/item/weapon/stock_parts/micro_laser = 1)
/obj/item/weapon/circuitboard/autolathe
name = T_BOARD("autolathe")
@@ -27,9 +27,9 @@ obj/item/weapon/circuitboard/rdserver
board_type = "machine"
origin_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2)
req_components = list(
- "/obj/item/weapon/stock_parts/matter_bin" = 3,
- "/obj/item/weapon/stock_parts/manipulator" = 1,
- "/obj/item/weapon/stock_parts/console_screen" = 1)
+ /obj/item/weapon/stock_parts/matter_bin = 3,
+ /obj/item/weapon/stock_parts/manipulator = 1,
+ /obj/item/weapon/stock_parts/console_screen = 1)
/obj/item/weapon/circuitboard/protolathe
name = T_BOARD("protolathe")
@@ -37,10 +37,9 @@ obj/item/weapon/circuitboard/rdserver
board_type = "machine"
origin_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2)
req_components = list(
- "/obj/item/weapon/stock_parts/matter_bin" = 2,
- "/obj/item/weapon/stock_parts/manipulator" = 2,
- "/obj/item/weapon/reagent_containers/glass/beaker" = 2)
-
+ /obj/item/weapon/stock_parts/matter_bin = 2,
+ /obj/item/weapon/stock_parts/manipulator = 2,
+ /obj/item/weapon/reagent_containers/glass/beaker = 2)
/obj/item/weapon/circuitboard/circuit_imprinter
name = T_BOARD("circuit imprinter")
@@ -48,9 +47,9 @@ obj/item/weapon/circuitboard/rdserver
board_type = "machine"
origin_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2)
req_components = list(
- "/obj/item/weapon/stock_parts/matter_bin" = 1,
- "/obj/item/weapon/stock_parts/manipulator" = 1,
- "/obj/item/weapon/reagent_containers/glass/beaker" = 2)
+ /obj/item/weapon/stock_parts/matter_bin = 1,
+ /obj/item/weapon/stock_parts/manipulator = 1,
+ /obj/item/weapon/reagent_containers/glass/beaker = 2)
/obj/item/weapon/circuitboard/mechfab
name = "Circuit board (Exosuit Fabricator)"
@@ -58,7 +57,18 @@ obj/item/weapon/circuitboard/rdserver
board_type = "machine"
origin_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 3)
req_components = list(
- "/obj/item/weapon/stock_parts/matter_bin" = 2,
- "/obj/item/weapon/stock_parts/manipulator" = 1,
- "/obj/item/weapon/stock_parts/micro_laser" = 1,
- "/obj/item/weapon/stock_parts/console_screen" = 1)
+ /obj/item/weapon/stock_parts/matter_bin = 2,
+ /obj/item/weapon/stock_parts/manipulator = 1,
+ /obj/item/weapon/stock_parts/micro_laser = 1,
+ /obj/item/weapon/stock_parts/console_screen = 1)
+
+/obj/item/weapon/circuitboard/prosthetics
+ name = "Circuit board (Prosthetics Fabricator)"
+ build_path = "/obj/machinery/pros_fabricator"
+ board_type = "machine"
+ origin_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 3)
+ req_components = list(
+ /obj/item/weapon/stock_parts/matter_bin = 2,
+ /obj/item/weapon/stock_parts/manipulator = 1,
+ /obj/item/weapon/stock_parts/micro_laser = 1,
+ /obj/item/weapon/stock_parts/console_screen = 1)
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/circuitboards/machinery/shieldgen.dm b/code/game/objects/items/weapons/circuitboards/machinery/shieldgen.dm
index 6dc0a3f7ab..7218b7f094 100644
--- a/code/game/objects/items/weapons/circuitboards/machinery/shieldgen.dm
+++ b/code/game/objects/items/weapons/circuitboards/machinery/shieldgen.dm
@@ -1,5 +1,5 @@
#ifndef T_BOARD
-#error T_BOARD macro is not defined but we need it!
+#error T_BOARD macro is not defined but we need it!
#endif
/obj/item/weapon/circuitboard/shield_gen_ex
@@ -8,12 +8,12 @@
build_path = "/obj/machinery/shield_gen/external"
origin_tech = list(TECH_BLUESPACE = 4, TECH_PHORON = 3)
req_components = list(
- "/obj/item/weapon/stock_parts/manipulator/pico" = 2,
- "/obj/item/weapon/stock_parts/subspace/transmitter" = 1,
- "/obj/item/weapon/stock_parts/subspace/crystal" = 1,
- "/obj/item/weapon/stock_parts/subspace/amplifier" = 1,
- "/obj/item/weapon/stock_parts/console_screen" = 1,
- "/obj/item/stack/cable_coil" = 5)
+ /obj/item/weapon/stock_parts/manipulator/pico = 2,
+ /obj/item/weapon/stock_parts/subspace/transmitter = 1,
+ /obj/item/weapon/stock_parts/subspace/crystal = 1,
+ /obj/item/weapon/stock_parts/subspace/amplifier = 1,
+ /obj/item/weapon/stock_parts/console_screen = 1,
+ /obj/item/stack/cable_coil = 5)
/obj/item/weapon/circuitboard/shield_gen
name = T_BOARD("bubble shield generator")
@@ -21,12 +21,12 @@
build_path = "/obj/machinery/shield_gen"
origin_tech = list(TECH_BLUESPACE = 4, TECH_PHORON = 3)
req_components = list(
- "/obj/item/weapon/stock_parts/manipulator/pico" = 2,
- "/obj/item/weapon/stock_parts/subspace/transmitter" = 1,
- "/obj/item/weapon/stock_parts/subspace/crystal" = 1,
- "/obj/item/weapon/stock_parts/subspace/amplifier" = 1,
- "/obj/item/weapon/stock_parts/console_screen" = 1,
- "/obj/item/stack/cable_coil" = 5)
+ /obj/item/weapon/stock_parts/manipulator/pico = 2,
+ /obj/item/weapon/stock_parts/subspace/transmitter = 1,
+ /obj/item/weapon/stock_parts/subspace/crystal = 1,
+ /obj/item/weapon/stock_parts/subspace/amplifier = 1,
+ /obj/item/weapon/stock_parts/console_screen = 1,
+ /obj/item/stack/cable_coil = 5)
/obj/item/weapon/circuitboard/shield_cap
name = T_BOARD("shield capacitor")
@@ -34,9 +34,9 @@
build_path = "/obj/machinery/shield_capacitor"
origin_tech = list(TECH_MAGNET = 3, TECH_POWER = 4)
req_components = list(
- "/obj/item/weapon/stock_parts/manipulator/pico" = 2,
- "/obj/item/weapon/stock_parts/subspace/filter" = 1,
- "/obj/item/weapon/stock_parts/subspace/treatment" = 1,
- "/obj/item/weapon/stock_parts/subspace/analyzer" = 1,
- "/obj/item/weapon/stock_parts/console_screen" = 1,
- "/obj/item/stack/cable_coil" = 5)
+ /obj/item/weapon/stock_parts/manipulator/pico = 2,
+ /obj/item/weapon/stock_parts/subspace/filter = 1,
+ /obj/item/weapon/stock_parts/subspace/treatment = 1,
+ /obj/item/weapon/stock_parts/subspace/analyzer = 1,
+ /obj/item/weapon/stock_parts/console_screen = 1,
+ /obj/item/stack/cable_coil = 5)
diff --git a/code/game/objects/items/weapons/circuitboards/machinery/telecomms.dm b/code/game/objects/items/weapons/circuitboards/machinery/telecomms.dm
index 9ee761a730..8a7516f476 100644
--- a/code/game/objects/items/weapons/circuitboards/machinery/telecomms.dm
+++ b/code/game/objects/items/weapons/circuitboards/machinery/telecomms.dm
@@ -10,69 +10,69 @@
build_path = "/obj/machinery/telecomms/receiver"
origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 3, TECH_BLUESPACE = 2)
req_components = list(
- "/obj/item/weapon/stock_parts/subspace/ansible" = 1,
- "/obj/item/weapon/stock_parts/subspace/filter" = 1,
- "/obj/item/weapon/stock_parts/manipulator" = 2,
- "/obj/item/weapon/stock_parts/micro_laser" = 1)
+ /obj/item/weapon/stock_parts/subspace/ansible = 1,
+ /obj/item/weapon/stock_parts/subspace/filter = 1,
+ /obj/item/weapon/stock_parts/manipulator = 2,
+ /obj/item/weapon/stock_parts/micro_laser = 1)
/obj/item/weapon/circuitboard/telecomms/hub
name = T_BOARD("hub mainframe")
build_path = "/obj/machinery/telecomms/hub"
origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4)
req_components = list(
- "/obj/item/weapon/stock_parts/manipulator" = 2,
- "/obj/item/stack/cable_coil" = 2,
- "/obj/item/weapon/stock_parts/subspace/filter" = 2)
+ /obj/item/weapon/stock_parts/manipulator = 2,
+ /obj/item/stack/cable_coil = 2,
+ /obj/item/weapon/stock_parts/subspace/filter = 2)
/obj/item/weapon/circuitboard/telecomms/relay
name = T_BOARD("relay mainframe")
build_path = "/obj/machinery/telecomms/relay"
origin_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 4, TECH_BLUESPACE = 3)
req_components = list(
- "/obj/item/weapon/stock_parts/manipulator" = 2,
- "/obj/item/stack/cable_coil" = 2,
- "/obj/item/weapon/stock_parts/subspace/filter" = 2)
+ /obj/item/weapon/stock_parts/manipulator = 2,
+ /obj/item/stack/cable_coil = 2,
+ /obj/item/weapon/stock_parts/subspace/filter = 2)
/obj/item/weapon/circuitboard/telecomms/bus
name = T_BOARD("bus mainframe")
build_path = "/obj/machinery/telecomms/bus"
origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4)
req_components = list(
- "/obj/item/weapon/stock_parts/manipulator" = 2,
- "/obj/item/stack/cable_coil" = 1,
- "/obj/item/weapon/stock_parts/subspace/filter" = 1)
+ /obj/item/weapon/stock_parts/manipulator = 2,
+ /obj/item/stack/cable_coil = 1,
+ /obj/item/weapon/stock_parts/subspace/filter = 1)
/obj/item/weapon/circuitboard/telecomms/processor
name = T_BOARD("processor unit")
build_path = "/obj/machinery/telecomms/processor"
origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4)
req_components = list(
- "/obj/item/weapon/stock_parts/manipulator" = 3,
- "/obj/item/weapon/stock_parts/subspace/filter" = 1,
- "/obj/item/weapon/stock_parts/subspace/treatment" = 2,
- "/obj/item/weapon/stock_parts/subspace/analyzer" = 1,
- "/obj/item/stack/cable_coil" = 2,
- "/obj/item/weapon/stock_parts/subspace/amplifier" = 1)
+ /obj/item/weapon/stock_parts/manipulator = 3,
+ /obj/item/weapon/stock_parts/subspace/filter = 1,
+ /obj/item/weapon/stock_parts/subspace/treatment = 2,
+ /obj/item/weapon/stock_parts/subspace/analyzer = 1,
+ /obj/item/stack/cable_coil = 2,
+ /obj/item/weapon/stock_parts/subspace/amplifier = 1)
/obj/item/weapon/circuitboard/telecomms/server
name = T_BOARD("telecommunication server")
build_path = "/obj/machinery/telecomms/server"
origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4)
req_components = list(
- "/obj/item/weapon/stock_parts/manipulator" = 2,
- "/obj/item/stack/cable_coil" = 1,
- "/obj/item/weapon/stock_parts/subspace/filter" = 1)
+ /obj/item/weapon/stock_parts/manipulator = 2,
+ /obj/item/stack/cable_coil = 1,
+ /obj/item/weapon/stock_parts/subspace/filter = 1)
/obj/item/weapon/circuitboard/telecomms/broadcaster
name = T_BOARD("subspace broadcaster")
build_path = "/obj/machinery/telecomms/broadcaster"
origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4, TECH_BLUESPACE = 2)
req_components = list(
- "/obj/item/weapon/stock_parts/manipulator" = 2,
- "/obj/item/stack/cable_coil" = 1,
- "/obj/item/weapon/stock_parts/subspace/filter" = 1,
- "/obj/item/weapon/stock_parts/subspace/crystal" = 1,
- "/obj/item/weapon/stock_parts/micro_laser/high" = 2)
+ /obj/item/weapon/stock_parts/manipulator = 2,
+ /obj/item/stack/cable_coil = 1,
+ /obj/item/weapon/stock_parts/subspace/filter = 1,
+ /obj/item/weapon/stock_parts/subspace/crystal = 1,
+ /obj/item/weapon/stock_parts/micro_laser/high = 2)
//This isn't a real telecomms board but I don't want to make a whole file to hold only one circuitboard.
/obj/item/weapon/circuitboard/telecomms/exonet_node
@@ -80,10 +80,21 @@
build_path = "/obj/machinery/exonet_node"
origin_tech = list(TECH_DATA = 5, TECH_ENGINEERING = 5, TECH_BLUESPACE = 4)
req_components = list(
- "/obj/item/weapon/stock_parts/subspace/ansible" = 1,
- "/obj/item/weapon/stock_parts/subspace/filter" = 1,
- "/obj/item/weapon/stock_parts/manipulator" = 2,
- "/obj/item/weapon/stock_parts/micro_laser" = 1,
- "/obj/item/weapon/stock_parts/subspace/crystal" = 1,
- "/obj/item/weapon/stock_parts/subspace/treatment" = 2,
- "/obj/item/stack/cable_coil" = 2)
+ /obj/item/weapon/stock_parts/subspace/ansible = 1,
+ /obj/item/weapon/stock_parts/subspace/filter = 1,
+ /obj/item/weapon/stock_parts/manipulator = 2,
+ /obj/item/weapon/stock_parts/micro_laser = 1,
+ /obj/item/weapon/stock_parts/subspace/crystal = 1,
+ /obj/item/weapon/stock_parts/subspace/treatment = 2,
+ /obj/item/stack/cable_coil = 2)
+
+/obj/item/weapon/circuitboard/telecomms/pda_multicaster
+ name = T_BOARD("pda multicaster")
+ build_path = "/obj/machinery/pda_multicaster"
+ origin_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 2, TECH_BLUESPACE = 2)
+ req_components = list(
+ /obj/item/weapon/stock_parts/subspace/ansible = 1,
+ /obj/item/weapon/stock_parts/subspace/filter = 1,
+ /obj/item/weapon/stock_parts/manipulator = 1,
+ /obj/item/weapon/stock_parts/subspace/treatment = 1,
+ /obj/item/stack/cable_coil = 2)
diff --git a/code/game/objects/items/weapons/circuitboards/machinery/unary_atmos.dm b/code/game/objects/items/weapons/circuitboards/machinery/unary_atmos.dm
index 045f29592a..38438d6327 100644
--- a/code/game/objects/items/weapons/circuitboards/machinery/unary_atmos.dm
+++ b/code/game/objects/items/weapons/circuitboards/machinery/unary_atmos.dm
@@ -1,5 +1,5 @@
#ifndef T_BOARD
-#error T_BOARD macro is not defined but we need it!
+#error T_BOARD macro is not defined but we need it!
#endif
/obj/item/weapon/circuitboard/unary_atmos
@@ -18,16 +18,16 @@
build_path = "/obj/machinery/atmospherics/unary/heater"
origin_tech = list(TECH_POWER = 2, TECH_ENGINEERING = 1)
req_components = list(
- "/obj/item/stack/cable_coil" = 5,
- "/obj/item/weapon/stock_parts/matter_bin" = 1,
- "/obj/item/weapon/stock_parts/capacitor" = 2)
+ /obj/item/stack/cable_coil = 5,
+ /obj/item/weapon/stock_parts/matter_bin = 1,
+ /obj/item/weapon/stock_parts/capacitor = 2)
/obj/item/weapon/circuitboard/unary_atmos/cooler
name = T_BOARD("gas cooling system")
build_path = "/obj/machinery/atmospherics/unary/freezer"
origin_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 2)
req_components = list(
- "/obj/item/stack/cable_coil" = 2,
- "/obj/item/weapon/stock_parts/matter_bin" = 1,
- "/obj/item/weapon/stock_parts/capacitor" = 2,
- "/obj/item/weapon/stock_parts/manipulator" = 1)
+ /obj/item/stack/cable_coil = 2,
+ /obj/item/weapon/stock_parts/matter_bin = 1,
+ /obj/item/weapon/stock_parts/capacitor = 2,
+ /obj/item/weapon/stock_parts/manipulator = 1)
diff --git a/code/game/objects/items/weapons/circuitboards/other.dm b/code/game/objects/items/weapons/circuitboards/other.dm
index 6d016a96fa..da70371e4a 100644
--- a/code/game/objects/items/weapons/circuitboards/other.dm
+++ b/code/game/objects/items/weapons/circuitboards/other.dm
@@ -1,5 +1,5 @@
#ifndef T_BOARD
-#error T_BOARD macro is not defined but we need it!
+#error T_BOARD macro is not defined but we need it!
#endif
//Stuff that doesn't fit into any category goes here
@@ -7,4 +7,4 @@
/obj/item/weapon/circuitboard/aicore
name = T_BOARD("AI core")
origin_tech = list(TECH_DATA = 4, TECH_BIO = 2)
- board_type = "other"
+ board_type = "other"
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/clown_items.dm b/code/game/objects/items/weapons/clown_items.dm
index 0ccb1f1a24..d15b78963d 100644
--- a/code/game/objects/items/weapons/clown_items.dm
+++ b/code/game/objects/items/weapons/clown_items.dm
@@ -34,6 +34,10 @@
//So this is a workaround. This also makes more sense from an IC standpoint. ~Carn
if(user.client && (target in user.client.screen))
user << "You need to take that [target.name] off before cleaning it. "
+ else if(istype(target,/obj/effect/decal/cleanable/blood))
+ user << "You scrub \the [target.name] out. "
+ target.clean_blood()
+ return //Blood is a cleanable decal, therefore needs to be accounted for before all cleanable decals.
else if(istype(target,/obj/effect/decal/cleanable))
user << "You scrub \the [target.name] out. "
qdel(target)
@@ -49,9 +53,11 @@
target.clean_blood()
return
-/obj/item/weapon/soap/attack(mob/target as mob, mob/user as mob)
- if(target && user && ishuman(target) && ishuman(user) && !target.stat && !user.stat && user.zone_sel &&user.zone_sel.selecting == O_MOUTH)
+//attack_as_weapon
+/obj/item/weapon/soap/attack(mob/living/target, mob/living/user, var/target_zone)
+ if(target && user && ishuman(target) && ishuman(user) && !user.incapacitated() && user.zone_sel &&user.zone_sel.selecting == "mouth" )
user.visible_message("\The [user] washes \the [target]'s mouth out with soap! ")
+ user.setClickCooldown(DEFAULT_QUICK_COOLDOWN) //prevent spam
return
..()
diff --git a/code/game/objects/items/weapons/cosmetics.dm b/code/game/objects/items/weapons/cosmetics.dm
index 218d2fb21c..d92ad00bab 100644
--- a/code/game/objects/items/weapons/cosmetics.dm
+++ b/code/game/objects/items/weapons/cosmetics.dm
@@ -77,7 +77,5 @@
icon_state = "purplecomb"
item_state = "purplecomb"
-/obj/item/weapon/haircomb/attack_self(mob/user)
- if(user.r_hand == src || user.l_hand == src)
- user.visible_message(text("[] uses [] to comb their hair with incredible style and sophistication. What a []. ", user, src, user.gender == FEMALE ? "lady" : "guy"))
- return
+/obj/item/weapon/haircomb/attack_self(mob/living/user)
+ user.visible_message(text("[] uses [] to comb their hair with incredible style and sophistication. What a []. ", user, src, user.gender == FEMALE ? "lady" : "guy"))
diff --git a/code/game/objects/items/weapons/dna_injector.dm b/code/game/objects/items/weapons/dna_injector.dm
index 484c185a14..24f6ad53b3 100644
--- a/code/game/objects/items/weapons/dna_injector.dm
+++ b/code/game/objects/items/weapons/dna_injector.dm
@@ -114,6 +114,9 @@
if(!do_after(user,50))
return
+ user.setClickCooldown(DEFAULT_QUICK_COOLDOWN)
+ user.do_attack_animation(M)
+
M.visible_message("\The [M] has been injected with \the [src] by \the [user]. ")
var/mob/living/carbon/human/H = M
diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm
index 8e3fed202d..46e8e7ba26 100644
--- a/code/game/objects/items/weapons/explosives.dm
+++ b/code/game/objects/items/weapons/explosives.dm
@@ -18,7 +18,7 @@
wires = new(src)
image_overlay = image('icons/obj/assemblies.dmi', "plastic-explosive2")
..()
-
+
/obj/item/weapon/plastique/Destroy()
qdel(wires)
wires = null
@@ -46,6 +46,7 @@
if (ismob(target) || istype(target, /turf/unsimulated) || istype(target, /turf/simulated/shuttle) || istype(target, /obj/item/weapon/storage/) || istype(target, /obj/item/clothing/accessory/storage/) || istype(target, /obj/item/clothing/under))
return
user << "Planting explosives..."
+ user.do_attack_animation(target)
if(do_after(user, 50) && in_range(user, target))
user.drop_item()
@@ -78,7 +79,7 @@
if(target)
if (istype(target, /turf/simulated/wall))
var/turf/simulated/wall/W = target
- W.dismantle_wall(1)
+ W.dismantle_wall(1,1,1)
else if(istype(target, /mob/living))
target.ex_act(2) // c4 can't gib mobs anymore.
else
diff --git a/code/game/objects/items/weapons/extinguisher.dm b/code/game/objects/items/weapons/extinguisher.dm
index e2ec23be7c..2a85fbdfc9 100644
--- a/code/game/objects/items/weapons/extinguisher.dm
+++ b/code/game/objects/items/weapons/extinguisher.dm
@@ -37,6 +37,7 @@
/obj/item/weapon/extinguisher/New()
create_reagents(max_water)
reagents.add_reagent("water", max_water)
+ ..()
/obj/item/weapon/extinguisher/examine(mob/user)
if(..(user, 0))
diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm
index bbdd46cdb3..8cd4c373e9 100644
--- a/code/game/objects/items/weapons/flamethrower.dm
+++ b/code/game/objects/items/weapons/flamethrower.dm
@@ -39,8 +39,8 @@
return null
var/turf/location = loc
if(istype(location, /mob/))
- var/mob/M = location
- if(M.l_hand == src || M.r_hand == src)
+ var/mob/living/M = location
+ if(M.item_is_in_hands(src))
location = M.loc
if(isturf(location)) //start a fire if possible
location.hotspot_expose(700, 2)
diff --git a/code/game/objects/items/weapons/gift_wrappaper.dm b/code/game/objects/items/weapons/gift_wrappaper.dm
index 43b58a1726..94775ceb36 100644
--- a/code/game/objects/items/weapons/gift_wrappaper.dm
+++ b/code/game/objects/items/weapons/gift_wrappaper.dm
@@ -61,7 +61,7 @@
qdel(src)
/obj/item/weapon/a_gift/attack_self(mob/M as mob)
- var/gift_type = pick(/obj/item/weapon/sord,
+ var/gift_type = pick(
/obj/item/weapon/storage/wallet,
/obj/item/weapon/storage/photo_album,
/obj/item/weapon/storage/box/snappops,
@@ -80,7 +80,6 @@
/obj/item/weapon/bikehorn,
/obj/item/weapon/beach_ball,
/obj/item/weapon/beach_ball/holoball,
- /obj/item/weapon/banhammer,
/obj/item/toy/balloon,
/obj/item/toy/blink,
/obj/item/toy/crossbow,
@@ -125,12 +124,12 @@
icon_state = "wrap_paper"
var/amount = 20.0
-/obj/item/weapon/wrapping_paper/attackby(obj/item/weapon/W as obj, mob/user as mob)
+/obj/item/weapon/wrapping_paper/attackby(obj/item/weapon/W as obj, mob/living/user as mob)
..()
if (!( locate(/obj/structure/table, src.loc) ))
user << "You MUST put the paper on a table! "
if (W.w_class < 4)
- if ((istype(user.l_hand, /obj/item/weapon/wirecutters) || istype(user.r_hand, /obj/item/weapon/wirecutters)))
+ if (user.get_type_in_hands(/obj/item/weapon/wirecutters))
var/a_used = 2 ** (src.w_class - 1)
if (src.amount < a_used)
user << "You need more paper! "
diff --git a/code/game/objects/items/weapons/grenades/emgrenade.dm b/code/game/objects/items/weapons/grenades/emgrenade.dm
index 632c82b474..91b2d8f7e1 100644
--- a/code/game/objects/items/weapons/grenades/emgrenade.dm
+++ b/code/game/objects/items/weapons/grenades/emgrenade.dm
@@ -1,5 +1,5 @@
/obj/item/weapon/grenade/empgrenade
- name = "classic emp grenade"
+ name = "emp grenade"
icon_state = "emp"
item_state = "empgrenade"
origin_tech = list(TECH_MATERIAL = 2, TECH_MAGNET = 3)
@@ -12,7 +12,7 @@
/obj/item/weapon/grenade/empgrenade/low_yield
name = "low yield emp grenade"
- desc = "A weaker variant of the classic emp grenade"
+ desc = "A weaker variant of the EMP grenade"
icon_state = "lyemp"
item_state = "lyempgrenade"
origin_tech = list(TECH_MATERIAL = 2, TECH_MAGNET = 3)
diff --git a/code/game/objects/items/weapons/grenades/flashbang.dm b/code/game/objects/items/weapons/grenades/flashbang.dm
index a95d3b1382..a38c66333c 100644
--- a/code/game/objects/items/weapons/grenades/flashbang.dm
+++ b/code/game/objects/items/weapons/grenades/flashbang.dm
@@ -22,13 +22,13 @@
B.update_icon()
new/obj/effect/effect/sparks(src.loc)
- new/obj/effect/effect/smoke/illumination(src.loc, brightness=15)
+ new/obj/effect/effect/smoke/illumination(src.loc, 5, range=30, power=30, color="#FFFFFF")
qdel(src)
return
proc/bang(var/turf/T , var/mob/living/carbon/M) // Added a new proc called 'bang' that takes a location and a person to be banged.
M << "BANG " // Called during the loop that bangs people in lockers/containers and when banging
- playsound(src.loc, 'sound/effects/bang.ogg', 50, 1, 5) // people in normal view. Could theroetically be called during other explosions.
+ playsound(src.loc, 'sound/effects/bang.ogg', 50, 1, 30) // people in normal view. Could theroetically be called during other explosions.
// -- Polymorph
//Checking for protections
@@ -40,7 +40,7 @@
//Flashing everyone
if(eye_safety < 1)
- flick("e_flash", M.flash)
+ M.flash_eyes()
M.Stun(2)
M.Weaken(10)
diff --git a/code/game/objects/items/weapons/grenades/smokebomb.dm b/code/game/objects/items/weapons/grenades/smokebomb.dm
index 704df83db8..d64627fcf3 100644
--- a/code/game/objects/items/weapons/grenades/smokebomb.dm
+++ b/code/game/objects/items/weapons/grenades/smokebomb.dm
@@ -1,5 +1,5 @@
/obj/item/weapon/grenade/smokebomb
- desc = "It is set to detonate in 2 seconds."
+ desc = "It is set to detonate in 2 seconds. These high-tech grenades can have their color adapted on the fly with a multitool!"
name = "smoke bomb"
icon = 'icons/obj/grenade.dmi'
icon_state = "flashbang"
@@ -7,6 +7,8 @@
item_state = "flashbang"
slot_flags = SLOT_BELT
var/datum/effect/effect/system/smoke_spread/bad/smoke
+ var/smoke_color
+ var/smoke_strength = 8
/obj/item/weapon/grenade/smokebomb/New()
..()
@@ -22,18 +24,15 @@
playsound(src.loc, 'sound/effects/smoke.ogg', 50, 1, -3)
src.smoke.set_up(10, 0, usr.loc)
spawn(0)
- src.smoke.start()
- sleep(10)
- src.smoke.start()
- sleep(10)
- src.smoke.start()
- sleep(10)
- src.smoke.start()
+ for(var/i = 1 to smoke_strength)
+ src.smoke.start(smoke_color)
+ sleep(10)
+ qdel(src)
- for(var/obj/effect/blob/B in view(8,src))
- var/damage = round(30/(get_dist(B,src)+1))
- B.health -= damage
- B.update_icon()
- sleep(80)
- qdel(src)
return
+
+/obj/item/weapon/grenade/smokebomb/attackby(obj/item/I as obj, mob/user as mob)
+ if(istype(I,/obj/item/device/multitool))
+ var/new_smoke_color = input(user, "Choose a color for the smoke:", "Smoke Color", smoke_color) as color|null
+ if(new_smoke_color)
+ smoke_color = new_smoke_color
diff --git a/code/game/objects/items/weapons/grenades/spawnergrenade.dm b/code/game/objects/items/weapons/grenades/spawnergrenade.dm
index 5ca0bd3845..8e112d9655 100644
--- a/code/game/objects/items/weapons/grenades/spawnergrenade.dm
+++ b/code/game/objects/items/weapons/grenades/spawnergrenade.dm
@@ -18,7 +18,7 @@
playsound(T, 'sound/effects/phasein.ogg', 100, 1)
for(var/mob/living/carbon/human/M in viewers(T, null))
if(M:eyecheck() <= 0)
- flick("e_flash", M.flash)
+ M.flash_eyes()
// Spawn some hostile syndicate critters
for(var/i=1, i<=deliveryamt, i++)
diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm
index 1868827b5b..c44c3e1688 100644
--- a/code/game/objects/items/weapons/handcuffs.dm
+++ b/code/game/objects/items/weapons/handcuffs.dm
@@ -74,6 +74,9 @@
msg_admin_attack("[key_name(user)] attempted to handcuff [key_name(H)]")
feedback_add_details("handcuffs","H")
+ user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
+ user.do_attack_animation(H)
+
user.visible_message("\The [user] has put [cuff_type] on \the [H]! ")
// Apply cuffs.
@@ -166,4 +169,4 @@ var/last_chew = 0
item_state = null
icon = 'icons/obj/bureaucracy.dmi'
breakouttime = 200
- cuff_type = "duct tape"
\ No newline at end of file
+ cuff_type = "duct tape"
diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm
index 783a2088da..69f14d7c2b 100644
--- a/code/game/objects/items/weapons/implants/implant.dm
+++ b/code/game/objects/items/weapons/implants/implant.dm
@@ -417,22 +417,26 @@ the implant may become unstable and either pre-maturely inject the subject or si
var/area/t = get_area(M)
switch (cause)
if("death")
- var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset(null)
+ var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset/heads/captain(null)
if(istype(t, /area/syndicate_station) || istype(t, /area/syndicate_mothership) || istype(t, /area/shuttle/syndicate_elite) )
//give the syndies a bit of stealth
- a.autosay("[mobname] has died in Space!", "[mobname]'s Death Alarm")
+ a.autosay("[mobname] has died in Space!", "[mobname]'s Death Alarm", "Security")
+ a.autosay("[mobname] has died in Space!", "[mobname]'s Death Alarm", "Medical")
else
- a.autosay("[mobname] has died in [t.name]!", "[mobname]'s Death Alarm")
+ a.autosay("[mobname] has died in [t.name]!", "[mobname]'s Death Alarm", "Security")
+ a.autosay("[mobname] has died in [t.name]!", "[mobname]'s Death Alarm", "Medical")
qdel(a)
processing_objects.Remove(src)
if ("emp")
- var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset(null)
+ var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset/heads/captain(null)
var/name = prob(50) ? t.name : pick(teleportlocs)
- a.autosay("[mobname] has died in [name]!", "[mobname]'s Death Alarm")
+ a.autosay("[mobname] has died in [name]!", "[mobname]'s Death Alarm", "Security")
+ a.autosay("[mobname] has died in [name]!", "[mobname]'s Death Alarm", "Medical")
qdel(a)
else
- var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset(null)
- a.autosay("[mobname] has died-zzzzt in-in-in...", "[mobname]'s Death Alarm")
+ var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset/heads/captain(null)
+ a.autosay("[mobname] has died-zzzzt in-in-in...", "[mobname]'s Death Alarm", "Security")
+ a.autosay("[mobname] has died-zzzzt in-in-in...", "[mobname]'s Death Alarm", "Medical")
qdel(a)
processing_objects.Remove(src)
diff --git a/code/game/objects/items/weapons/implants/implanter.dm b/code/game/objects/items/weapons/implants/implanter.dm
index 4f168556d2..655727a62a 100644
--- a/code/game/objects/items/weapons/implants/implanter.dm
+++ b/code/game/objects/items/weapons/implants/implanter.dm
@@ -30,18 +30,18 @@
if (!istype(M, /mob/living/carbon))
return
if (user && src.imp)
- for (var/mob/O in viewers(M, null))
- O.show_message("[user] is attemping to implant [M]. ", 1)
+ M.visible_message("[user] is attemping to implant [M]. ")
+
+ user.setClickCooldown(DEFAULT_QUICK_COOLDOWN)
+ user.do_attack_animation(M)
var/turf/T1 = get_turf(M)
if (T1 && ((M == user) || do_after(user, 50)))
if(user && M && (get_turf(M) == T1) && src && src.imp)
- for (var/mob/O in viewers(M, null))
- O.show_message("[M] has been implanted by [user]. ", 1)
+ M.visible_message("[M] has been implanted by [user]. ")
admin_attack_log(user, M, "Implanted using \the [src.name] ([src.imp.name])", "Implanted with \the [src.name] ([src.imp.name])", "used an implanter, [src.name] ([src.imp.name]), on")
- user.show_message("You implanted the implant into [M]. ")
if(src.imp.implanted(M))
src.imp.loc = M
src.imp.imp_in = M
diff --git a/code/game/objects/items/weapons/implants/implantpad.dm b/code/game/objects/items/weapons/implants/implantpad.dm
index 476ed726cd..a6feac2998 100644
--- a/code/game/objects/items/weapons/implants/implantpad.dm
+++ b/code/game/objects/items/weapons/implants/implantpad.dm
@@ -24,8 +24,8 @@
return
- attack_hand(mob/user as mob)
- if ((src.case && (user.l_hand == src || user.r_hand == src)))
+ attack_hand(mob/living/user as mob)
+ if ((src.case && user.item_is_in_hands(src)))
user.put_in_active_hand(case)
src.case.add_fingerprint(user)
diff --git a/code/game/objects/items/weapons/improvised_components.dm b/code/game/objects/items/weapons/improvised_components.dm
index af4e528b70..0fd7d95e8c 100644
--- a/code/game/objects/items/weapons/improvised_components.dm
+++ b/code/game/objects/items/weapons/improvised_components.dm
@@ -54,7 +54,7 @@
/obj/item/weapon/material/wirerod/attackby(var/obj/item/I, mob/user as mob)
..()
var/obj/item/finished
- if(istype(I, /obj/item/weapon/material/shard))
+ if(istype(I, /obj/item/weapon/material/shard) || istype(I, /obj/item/weapon/material/butterflyblade))
var/obj/item/weapon/material/tmp_shard = I
finished = new /obj/item/weapon/material/twohanded/spear(get_turf(user), tmp_shard.material.name)
user << "You fasten \the [I] to the top of the rod with the cable. "
diff --git a/code/game/objects/items/weapons/material/kitchen.dm b/code/game/objects/items/weapons/material/kitchen.dm
index b5c966ebd5..6672d488de 100644
--- a/code/game/objects/items/weapons/material/kitchen.dm
+++ b/code/game/objects/items/weapons/material/kitchen.dm
@@ -57,6 +57,8 @@
name = "fork"
desc = "It's a fork. Sure is pointy."
icon_state = "fork"
+ sharp = 1
+ edge = 0
/obj/item/weapon/material/kitchen/utensil/fork/plastic
default_material = "plastic"
@@ -101,13 +103,6 @@
return
return ..()
-/obj/item/weapon/material/kitchen/utensil/knife/attack(target as mob, mob/living/user as mob)
- if ((CLUMSY in user.mutations) && prob(50))
- user << "You somehow managed to cut yourself with \the [src]. "
- user.take_organ_damage(20)
- return
- return ..()
-
/obj/item/weapon/material/kitchen/utensil/knife/plastic
default_material = "plastic"
diff --git a/code/game/objects/items/weapons/material/material_weapons.dm b/code/game/objects/items/weapons/material/material_weapons.dm
index 18181df6b0..fc9ac7eb32 100644
--- a/code/game/objects/items/weapons/material/material_weapons.dm
+++ b/code/game/objects/items/weapons/material/material_weapons.dm
@@ -64,9 +64,8 @@
processing_objects -= src
..()
-/obj/item/weapon/material/attack()
- if(!..())
- return
+/obj/item/weapon/material/apply_hit_effect()
+ ..()
if(!unbreakable)
if(material.is_brittle())
health = 0
diff --git a/code/game/objects/items/weapons/material/misc.dm b/code/game/objects/items/weapons/material/misc.dm
index 80d3771f0e..91d97274f6 100644
--- a/code/game/objects/items/weapons/material/misc.dm
+++ b/code/game/objects/items/weapons/material/misc.dm
@@ -1,7 +1,7 @@
/obj/item/weapon/material/harpoon
name = "harpoon"
sharp = 1
- edge = 1
+ edge = 0
desc = "Tharr she blows!"
icon_state = "harpoon"
item_state = "harpoon"
@@ -65,7 +65,6 @@
icon = 'icons/obj/weapons.dmi'
icon_state = "hoe"
item_state = "hoe"
- flags = CONDUCT | NOBLUDGEON
force_divisor = 0.25 // 5 with weight 20 (steel)
thrown_force_divisor = 0.25 // as above
w_class = 2
diff --git a/code/game/objects/items/weapons/material/shards.dm b/code/game/objects/items/weapons/material/shards.dm
index e708cc0765..f4b763c5e9 100644
--- a/code/game/objects/items/weapons/material/shards.dm
+++ b/code/game/objects/items/weapons/material/shards.dm
@@ -85,7 +85,7 @@
var/picked = pick(check)
var/obj/item/organ/external/affecting = H.get_organ(picked)
if(affecting)
- if(affecting.status & ORGAN_ROBOT)
+ if(affecting.robotic >= ORGAN_ROBOT)
return
if(affecting.take_damage(5, 0))
H.UpdateDamageIcon()
diff --git a/code/game/objects/items/weapons/material/twohanded.dm b/code/game/objects/items/weapons/material/twohanded.dm
index 2c11456b70..2e36eead75 100644
--- a/code/game/objects/items/weapons/material/twohanded.dm
+++ b/code/game/objects/items/weapons/material/twohanded.dm
@@ -29,7 +29,7 @@
/obj/item/weapon/material/twohanded/update_held_icon()
var/mob/living/M = loc
- if(istype(M) && !issmall(M) && ((M.r_hand == src && !M.l_hand) || (M.l_hand == src && !M.r_hand)))
+ if(istype(M) && !issmall(M) && M.item_is_in_hands(src) && !M.hands_are_full())
wielded = 1
force = force_wielded
name = "[base_name] (wielded)"
@@ -69,6 +69,12 @@
icon_state = "[base_icon][wielded]"
item_state = icon_state
+/obj/item/weapon/material/twohanded/dropped()
+ ..()
+ if(wielded)
+ spawn(0)
+ update_held_icon()
+
/*
* Fireaxe
*/
@@ -109,11 +115,11 @@
force = 10
w_class = 4.0
slot_flags = SLOT_BACK
- force_wielded = 0.75 // 22 when wielded with hardness 15 (glass)
- unwielded_force_divisor = 0.65 // 14 when unwielded based on above
- thrown_force_divisor = 1.5 // 20 when thrown with weight 15 (glass)
+ force_divisor = 0.75 // 22 when wielded with hardness 15 (glass)
+ unwielded_force_divisor = 0.375
+ thrown_force_divisor = 1.5 // 20 when thrown with weight 15 (glass)
throw_speed = 3
- edge = 1
+ edge = 0
sharp = 1
hitsound = 'sound/weapons/bladeslice.ogg'
attack_verb = list("attacked", "poked", "jabbed", "torn", "gored")
diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm
index 6a236e1b8f..ac8da3d835 100644
--- a/code/game/objects/items/weapons/melee/energy.dm
+++ b/code/game/objects/items/weapons/melee/energy.dm
@@ -214,7 +214,7 @@
spawn(1) if(src) qdel(src)
/obj/item/weapon/melee/energy/blade/process()
- if(!creator || loc != creator || (creator.l_hand != src && creator.r_hand != src))
+ if(!creator || loc != creator || !creator.item_is_in_hands(src))
// Tidy up a bit.
if(istype(loc,/mob/living))
var/mob/living/carbon/human/host = loc
diff --git a/code/game/objects/items/weapons/mop_deploy.dm b/code/game/objects/items/weapons/mop_deploy.dm
index 66ae01797e..e50f82966b 100644
--- a/code/game/objects/items/weapons/mop_deploy.dm
+++ b/code/game/objects/items/weapons/mop_deploy.dm
@@ -59,7 +59,7 @@
spawn(1) if(src) del(src)
/obj/item/weapon/mop_deploy/process()
- if(!creator || loc != creator || (creator.l_hand != src && creator.r_hand != src))
+ if(!creator || loc != creator || !creator.item_is_in_hands(src))
// Tidy up a bit.
if(istype(loc,/mob/living))
var/mob/living/carbon/human/host = loc
diff --git a/code/game/objects/items/weapons/policetape.dm b/code/game/objects/items/weapons/policetape.dm
index e3c1268ea0..4ddd60526c 100644
--- a/code/game/objects/items/weapons/policetape.dm
+++ b/code/game/objects/items/weapons/policetape.dm
@@ -9,6 +9,20 @@
var/tape_type = /obj/item/tape
var/icon_base
+ var/apply_tape = FALSE
+
+/obj/item/taperoll/initialize()
+ ..()
+ if(apply_tape)
+ var/turf/T = get_turf(src)
+ if(!T)
+ return
+ var/obj/machinery/door/airlock/airlock = locate(/obj/machinery/door/airlock) in T
+ if(airlock)
+ afterattack(airlock, null, TRUE)
+ qdel(src)
+
+
var/list/image/hazard_overlays
var/list/tape_roll_applications = list()
@@ -63,6 +77,9 @@ var/list/tape_roll_applications = list()
tape_type = /obj/item/tape/engineering
icon_base = "engineering"
+/obj/item/taperoll/engineering/applied
+ apply_tape = TRUE
+
/obj/item/tape/engineering
name = "engineering tape"
desc = "A length of engineering tape. Better not cross it."
@@ -220,8 +237,7 @@ var/list/tape_roll_applications = list()
if (istype(A, /obj/machinery/door/airlock))
var/turf/T = get_turf(A)
- var/obj/item/tape/P = new tape_type(T.x,T.y,T.z)
- P.loc = locate(T.x,T.y,T.z)
+ var/obj/item/tape/P = new tape_type(T)
P.update_icon()
P.layer = 3.2
user << "You finish placing \the [src]. "
diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm
index db9db8a360..9eebc7b3f0 100644
--- a/code/game/objects/items/weapons/storage/backpack.dm
+++ b/code/game/objects/items/weapons/storage/backpack.dm
@@ -22,7 +22,7 @@
)
w_class = 4
slot_flags = SLOT_BACK
- max_w_class = 3
+ max_w_class = 4
max_storage_space = 28
/obj/item/weapon/storage/backpack/attackby(obj/item/weapon/W as obj, mob/user as mob)
@@ -53,6 +53,7 @@
icon_state = "holdingpack"
max_w_class = 4
max_storage_space = 56
+ storage_cost = 29
New()
..()
@@ -77,7 +78,6 @@
icon_state = "giftbag0"
item_state = "giftbag"
w_class = 4.0
- storage_slots = 20
max_w_class = 3
max_storage_space = 400 // can store a ton of shit!
item_state_slots = null
@@ -142,57 +142,93 @@
desc = "It's an orange backpack which was designed to hold beakers, pill bottles and bottles."
icon_state = "chempack"
+/*
+ * Duffle Types
+ */
+
/obj/item/weapon/storage/backpack/dufflebag
name = "dufflebag"
desc = "A large dufflebag for holding extra things."
icon_state = "duffle"
- item_state = "duffle"
+ item_state_slots = list(
+ slot_l_hand_str = "duffle",
+ slot_r_hand_str = "duffle",
+ )
slowdown = 1
- max_storage_space = 38
- storage_slots = 12
+ max_storage_space = 36
/obj/item/weapon/storage/backpack/dufflebag/syndie
- name = "suspicious looking dufflebag"
+ name = "black dufflebag"
desc = "A large dufflebag for holding extra tactical supplies."
icon_state = "duffle_syndie"
- item_state = "duffle_syndiemed"
+ item_state_slots = list(
+ slot_l_hand_str = "duffle_syndiemed",
+ slot_r_hand_str = "duffle_syndiemed",
+ )
slowdown = 0
/obj/item/weapon/storage/backpack/dufflebag/syndie/med
name = "medical dufflebag"
desc = "A large dufflebag for holding extra tactical medical supplies."
icon_state = "duffle_syndiemed"
- item_state = "duffle_syndiemed"
+ item_state_slots = list(
+ slot_l_hand_str = "duffle_syndiemed",
+ slot_r_hand_str = "duffle_syndiemed",
+ )
/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo
name = "ammunition dufflebag"
desc = "A large dufflebag for holding extra weapons ammunition and supplies."
icon_state = "duffle_syndieammo"
- item_state = "duffle_syndieammo"
+ item_state_slots = list(
+ slot_l_hand_str = "duffle_syndieammo",
+ slot_r_hand_str = "duffle_syndieammo",
+ )
/obj/item/weapon/storage/backpack/dufflebag/captain
name = "captain's dufflebag"
desc = "A large dufflebag for holding extra captainly goods."
icon_state = "duffle_captain"
- item_state = "duffle_captain"
+ item_state_slots = list(
+ slot_l_hand_str = "duffle_captain",
+ slot_r_hand_str = "duffle_captain",
+ )
/obj/item/weapon/storage/backpack/dufflebag/med
name = "medical dufflebag"
desc = "A large dufflebag for holding extra medical supplies."
icon_state = "duffle_med"
- item_state = "duffle_med"
+ item_state_slots = list(
+ slot_l_hand_str = "duffle_med",
+ slot_r_hand_str = "duffle_med",
+ )
+
+/obj/item/weapon/storage/backpack/dufflebag/emt
+ name = "EMT dufflebag"
+ desc = "A large dufflebag for holding extra medical supplies. This one has reflective stripes!"
+ icon_state = "duffle_emt"
+ item_state_slots = list(
+ slot_l_hand_str = "duffle_emt",
+ slot_r_hand_str = "duffle_emt",
+ )
/obj/item/weapon/storage/backpack/dufflebag/sec
name = "security dufflebag"
desc = "A large dufflebag for holding extra security supplies and ammunition."
icon_state = "duffle_sec"
- item_state = "duffle_sec"
+ item_state_slots = list(
+ slot_l_hand_str = "duffle_sec",
+ slot_r_hand_str = "duffle_sec",
+ )
/obj/item/weapon/storage/backpack/dufflebag/eng
name = "industrial dufflebag"
desc = "A large dufflebag for holding extra tools and supplies."
icon_state = "duffle_eng"
- item_state = "duffle_eng"
+ item_state_slots = list(
+ slot_l_hand_str = "duffle_eng",
+ slot_r_hand_str = "duffle_eng",
+ )
/*
* Satchel Types
@@ -208,12 +244,12 @@
..()
new /obj/item/weapon/storage/wallet/random( src )
-/obj/item/weapon/storage/backpack/satchel_norm
+/obj/item/weapon/storage/backpack/satchel/norm
name = "satchel"
desc = "A trendy looking satchel."
icon_state = "satchel-norm"
-/obj/item/weapon/storage/backpack/satchel_eng
+/obj/item/weapon/storage/backpack/satchel/eng
name = "industrial satchel"
desc = "A tough satchel with extra pockets."
icon_state = "satchel-eng"
@@ -222,7 +258,7 @@
slot_r_hand_str = "engiepack",
)
-/obj/item/weapon/storage/backpack/satchel_med
+/obj/item/weapon/storage/backpack/satchel/med
name = "medical satchel"
desc = "A sterile satchel used in medical departments."
icon_state = "satchel-med"
@@ -231,27 +267,27 @@
slot_r_hand_str = "medicalpack",
)
-/obj/item/weapon/storage/backpack/satchel_vir
+/obj/item/weapon/storage/backpack/satchel/vir
name = "virologist satchel"
desc = "A sterile satchel with virologist colours."
icon_state = "satchel-vir"
-/obj/item/weapon/storage/backpack/satchel_chem
+/obj/item/weapon/storage/backpack/satchel/chem
name = "chemist satchel"
desc = "A sterile satchel with chemist colours."
icon_state = "satchel-chem"
-/obj/item/weapon/storage/backpack/satchel_gen
+/obj/item/weapon/storage/backpack/satchel/gen
name = "geneticist satchel"
desc = "A sterile satchel with geneticist colours."
icon_state = "satchel-gen"
-/obj/item/weapon/storage/backpack/satchel_tox
+/obj/item/weapon/storage/backpack/satchel/tox
name = "scientist satchel"
desc = "Useful for holding research materials."
icon_state = "satchel-tox"
-/obj/item/weapon/storage/backpack/satchel_sec
+/obj/item/weapon/storage/backpack/satchel/sec
name = "security satchel"
desc = "A robust satchel for security related needs."
icon_state = "satchel-sec"
@@ -260,12 +296,12 @@
slot_r_hand_str = "securitypack",
)
-/obj/item/weapon/storage/backpack/satchel_hyd
+/obj/item/weapon/storage/backpack/satchel/hyd
name = "hydroponics satchel"
desc = "A green satchel for plant related work."
icon_state = "satchel_hyd"
-/obj/item/weapon/storage/backpack/satchel_cap
+/obj/item/weapon/storage/backpack/satchel/cap
name = "captain's satchel"
desc = "An exclusive satchel for officers."
icon_state = "satchel-cap"
diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm
index 33fa1d6d7e..476bf1a67e 100644
--- a/code/game/objects/items/weapons/storage/bags.dm
+++ b/code/game/objects/items/weapons/storage/bags.dm
@@ -34,7 +34,6 @@
w_class = 4
max_w_class = 2
- storage_slots = 21
can_hold = list() // any
cant_hold = list(/obj/item/weapon/disk/nuclear)
@@ -61,7 +60,6 @@
w_class = 4
max_w_class = 2
- storage_slots = 21
can_hold = list() // any
cant_hold = list(/obj/item/weapon/disk/nuclear)
@@ -76,8 +74,7 @@
icon_state = "satchel"
slot_flags = SLOT_BELT | SLOT_POCKET
w_class = 3
- storage_slots = 50
- max_storage_space = 200 //Doesn't matter what this is, so long as it's more or equal to storage_slots * ore.w_class
+ max_storage_space = 100
max_w_class = 3
can_hold = list(/obj/item/weapon/ore)
@@ -90,8 +87,7 @@
name = "plant bag"
icon = 'icons/obj/hydroponics_machines.dmi'
icon_state = "plantbag"
- storage_slots = 50; //the number of plant pieces it can carry.
- max_storage_space = 200 //Doesn't matter what this is, so long as it's more or equal to storage_slots * plants.w_class
+ max_storage_space = 100
max_w_class = 3
w_class = 2
can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/grown,/obj/item/seeds,/obj/item/weapon/grown)
@@ -111,6 +107,7 @@
var/capacity = 300; //the number of sheets it can carry.
w_class = 3
+ storage_slots = 7
allow_quick_empty = 1 // this function is superceded
New()
@@ -193,7 +190,7 @@
var/col_count = min(7,storage_slots) -1
if (adjusted_contents > 7)
row_num = round((adjusted_contents-1) / 7) // 7 is the maximum allowed width.
- src.standard_orient_objs(row_num, col_count, numbered_contents)
+ src.slot_orient_objs(row_num, col_count, numbered_contents)
return
@@ -248,8 +245,7 @@
icon = 'icons/obj/storage.dmi'
icon_state = "cashbag"
desc = "A bag for carrying lots of cash. It's got a big dollar sign printed on the front."
- storage_slots = 50; //the number of cash pieces it can carry.
- max_storage_space = 200 //Doesn't matter what this is, so long as it's more or equal to storage_slots * cash.w_class
+ max_storage_space = 100
max_w_class = 3
w_class = 2
can_hold = list(/obj/item/weapon/coin,/obj/item/weapon/spacecash)
diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm
index 6f93f03df2..c0469cd9f8 100644
--- a/code/game/objects/items/weapons/storage/belt.dm
+++ b/code/game/objects/items/weapons/storage/belt.dm
@@ -4,6 +4,9 @@
icon = 'icons/obj/clothing/belts.dmi'
icon_state = "utilitybelt"
item_state = "utility"
+ storage_slots = 7
+ max_storage_space = 28 //This should ensure belts always have enough room to store whatever.
+ max_w_class = 3
slot_flags = SLOT_BELT
attack_verb = list("whipped", "lashed", "disciplined")
sprite_sheets = list("Teshari" = 'icons/mob/species/seromi/belt.dmi')
@@ -121,9 +124,7 @@
desc = "Can hold security gear like handcuffs and flashes."
icon_state = "securitybelt"
item_state = "security"
- storage_slots = 7
max_w_class = 3
- max_storage_space = 28
can_hold = list(
/obj/item/weapon/grenade,
/obj/item/weapon/reagent_containers/spray/pepper,
@@ -180,7 +181,14 @@
/obj/item/device/megaphone,
/obj/item/device/radio/headset,
/obj/item/clothing/gloves,
- /obj/item/taperoll/police
+ /obj/item/taperoll/police,
+ /obj/item/weapon/reagent_containers/spray/pepper,
+ /obj/item/weapon/handcuffs,
+ /obj/item/device/flash,
+ /obj/item/weapon/flame/lighter,
+ /obj/item/weapon/reagent_containers/food/snacks/donut/,
+ /obj/item/ammo_magazine,
+ /obj/item/weapon/gun/projectile/colt/detective
)
/obj/item/weapon/storage/belt/soulstone
@@ -227,3 +235,27 @@
desc = "Can hold security gear like handcuffs and flashes, with more pouches for more storage."
icon_state = "bandolier"
item_state = "bandolier"
+
+/obj/item/weapon/storage/belt/janitor
+ name = "janitorial belt"
+ desc = "A belt used to hold most janitorial supplies."
+ icon_state = "janibelt"
+ item_state = "janibelt"
+ storage_slots = 7
+ max_w_class = 3
+ can_hold = list(
+ /obj/item/clothing/glasses,
+ /obj/item/device/flashlight,
+ /obj/item/weapon/grenade,
+ /obj/item/device/pda,
+ /obj/item/device/radio/headset,
+ /obj/item/clothing/gloves,
+ /obj/item/clothing/mask/surgical, //sterile mask,
+ /obj/item/device/assembly/mousetrap,
+ /obj/item/weapon/light/bulb,
+ /obj/item/weapon/light/tube,
+ /obj/item/weapon/flame/lighter,
+ /obj/item/device/megaphone,
+ /obj/item/weapon/reagent_containers/spray,
+ /obj/item/weapon/soap
+ )
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm
index 62a9117de1..a1b6e17b5a 100644
--- a/code/game/objects/items/weapons/storage/boxes.dm
+++ b/code/game/objects/items/weapons/storage/boxes.dm
@@ -25,6 +25,7 @@
icon_state = "box"
item_state = "syringe_kit"
var/foldable = /obj/item/stack/material/cardboard // BubbleWrap - if set, can be folded (when empty) into a sheet of cardboard
+ max_w_class = 2
// BubbleWrap - A box can be folded up to make card
/obj/item/weapon/storage/box/attack_self(mob/user as mob)
@@ -50,31 +51,24 @@
new src.foldable(get_turf(src))
qdel(src)
-/obj/item/weapon/storage/box/survival/
- New()
- ..()
- new /obj/item/clothing/mask/breath( src )
- new /obj/item/weapon/tank/emergency_oxygen( src )
+/obj/item/weapon/storage/box/survival/New()
+ ..()
+ new /obj/item/clothing/mask/breath(src)
+ new /obj/item/weapon/tank/emergency_oxygen(src)
-/obj/item/weapon/storage/box/engineer/
- New()
- ..()
- new /obj/item/clothing/mask/breath( src )
- new /obj/item/weapon/tank/emergency_oxygen/engi( src )
+/obj/item/weapon/storage/box/engineer/New()
+ ..()
+ new /obj/item/clothing/mask/breath(src)
+ new /obj/item/weapon/tank/emergency_oxygen/engi(src)
/obj/item/weapon/storage/box/gloves
name = "box of latex gloves"
desc = "Contains white gloves."
icon_state = "latex"
- New()
- ..()
- new /obj/item/clothing/gloves/latex(src)
- new /obj/item/clothing/gloves/latex(src)
- new /obj/item/clothing/gloves/latex(src)
- new /obj/item/clothing/gloves/latex(src)
- new /obj/item/clothing/gloves/latex(src)
- new /obj/item/clothing/gloves/latex(src)
+/obj/item/weapon/storage/box/gloves/New()
+ ..()
+ for(var/i = 1 to 7)
new /obj/item/clothing/gloves/latex(src)
/obj/item/weapon/storage/box/masks
@@ -82,75 +76,50 @@
desc = "This box contains masks of sterility."
icon_state = "sterile"
- New()
- ..()
+/obj/item/weapon/storage/box/masks/New()
+ ..()
+ for(var/i = 1 to 7)
new /obj/item/clothing/mask/surgical(src)
- new /obj/item/clothing/mask/surgical(src)
- new /obj/item/clothing/mask/surgical(src)
- new /obj/item/clothing/mask/surgical(src)
- new /obj/item/clothing/mask/surgical(src)
- new /obj/item/clothing/mask/surgical(src)
- new /obj/item/clothing/mask/surgical(src)
-
/obj/item/weapon/storage/box/syringes
name = "box of syringes"
desc = "A box full of syringes."
icon_state = "syringe"
- New()
- ..()
- new /obj/item/weapon/reagent_containers/syringe( src )
- new /obj/item/weapon/reagent_containers/syringe( src )
- new /obj/item/weapon/reagent_containers/syringe( src )
- new /obj/item/weapon/reagent_containers/syringe( src )
- new /obj/item/weapon/reagent_containers/syringe( src )
- new /obj/item/weapon/reagent_containers/syringe( src )
- new /obj/item/weapon/reagent_containers/syringe( src )
+/obj/item/weapon/storage/box/syringes/New()
+ ..()
+ for(var/i = 1 to 7)
+ new /obj/item/weapon/reagent_containers/syringe(src)
/obj/item/weapon/storage/box/syringegun
name = "box of syringe gun cartridges"
desc = "A box full of compressed gas cartridges."
icon_state = "syringe"
- New()
- ..()
- new /obj/item/weapon/syringe_cartridge( src )
- new /obj/item/weapon/syringe_cartridge( src )
- new /obj/item/weapon/syringe_cartridge( src )
- new /obj/item/weapon/syringe_cartridge( src )
- new /obj/item/weapon/syringe_cartridge( src )
- new /obj/item/weapon/syringe_cartridge( src )
- new /obj/item/weapon/syringe_cartridge( src )
-
+/obj/item/weapon/storage/box/syringegun/New()
+ ..()
+ for(var/i = 1 to 7)
+ new /obj/item/weapon/syringe_cartridge(src)
/obj/item/weapon/storage/box/beakers
name = "box of beakers"
icon_state = "beaker"
- New()
- ..()
- new /obj/item/weapon/reagent_containers/glass/beaker( src )
- new /obj/item/weapon/reagent_containers/glass/beaker( src )
- new /obj/item/weapon/reagent_containers/glass/beaker( src )
- new /obj/item/weapon/reagent_containers/glass/beaker( src )
- new /obj/item/weapon/reagent_containers/glass/beaker( src )
- new /obj/item/weapon/reagent_containers/glass/beaker( src )
- new /obj/item/weapon/reagent_containers/glass/beaker( src )
+/obj/item/weapon/storage/box/beakers/New()
+ ..()
+ for(var/i = 1 to 7)
+ new /obj/item/weapon/reagent_containers/glass/beaker(src)
/obj/item/weapon/storage/box/injectors
name = "box of DNA injectors"
desc = "This box contains injectors it seems."
- New()
- ..()
- new /obj/item/weapon/dnainjector/h2m(src)
- new /obj/item/weapon/dnainjector/h2m(src)
+/obj/item/weapon/storage/box/injectors/New()
+ ..()
+ for(var/i = 1 to 3)
new /obj/item/weapon/dnainjector/h2m(src)
+ for(var/i = 1 to 3)
new /obj/item/weapon/dnainjector/m2h(src)
- new /obj/item/weapon/dnainjector/m2h(src)
- new /obj/item/weapon/dnainjector/m2h(src)
-
/obj/item/weapon/storage/box/blanks
name = "box of blank shells"
@@ -158,14 +127,9 @@
icon_state = "blankshot_box"
item_state = "syringe_kit"
- New()
- ..()
- new /obj/item/ammo_casing/shotgun/blank(src)
- new /obj/item/ammo_casing/shotgun/blank(src)
- new /obj/item/ammo_casing/shotgun/blank(src)
- new /obj/item/ammo_casing/shotgun/blank(src)
- new /obj/item/ammo_casing/shotgun/blank(src)
- new /obj/item/ammo_casing/shotgun/blank(src)
+/obj/item/weapon/storage/box/blanks/New()
+ ..()
+ for(var/i = 1 to 7)
new /obj/item/ammo_casing/shotgun/blank(src)
/obj/item/weapon/storage/box/beanbags
@@ -174,14 +138,9 @@
icon_state = "beanshot_box"
item_state = "syringe_kit"
- New()
- ..()
- new /obj/item/ammo_casing/shotgun/beanbag(src)
- new /obj/item/ammo_casing/shotgun/beanbag(src)
- new /obj/item/ammo_casing/shotgun/beanbag(src)
- new /obj/item/ammo_casing/shotgun/beanbag(src)
- new /obj/item/ammo_casing/shotgun/beanbag(src)
- new /obj/item/ammo_casing/shotgun/beanbag(src)
+/obj/item/weapon/storage/box/beanbags/New()
+ ..()
+ for(var/i = 1 to 7)
new /obj/item/ammo_casing/shotgun/beanbag(src)
/obj/item/weapon/storage/box/shotgunammo
@@ -190,14 +149,9 @@
icon_state = "lethalshellshot_box"
item_state = "syringe_kit"
- New()
- ..()
- new /obj/item/ammo_casing/shotgun(src)
- new /obj/item/ammo_casing/shotgun(src)
- new /obj/item/ammo_casing/shotgun(src)
- new /obj/item/ammo_casing/shotgun(src)
- new /obj/item/ammo_casing/shotgun(src)
- new /obj/item/ammo_casing/shotgun(src)
+/obj/item/weapon/storage/box/shotgunammo/New()
+ ..()
+ for(var/i = 1 to 7)
new /obj/item/ammo_casing/shotgun(src)
/obj/item/weapon/storage/box/shotgunshells
@@ -206,14 +160,9 @@
icon_state = "lethalslug_box"
item_state = "syringe_kit"
- New()
- ..()
- new /obj/item/ammo_casing/shotgun/pellet(src)
- new /obj/item/ammo_casing/shotgun/pellet(src)
- new /obj/item/ammo_casing/shotgun/pellet(src)
- new /obj/item/ammo_casing/shotgun/pellet(src)
- new /obj/item/ammo_casing/shotgun/pellet(src)
- new /obj/item/ammo_casing/shotgun/pellet(src)
+/obj/item/weapon/storage/box/shotgunshells/New()
+ ..()
+ for(var/i = 1 to 7)
new /obj/item/ammo_casing/shotgun/pellet(src)
/obj/item/weapon/storage/box/flashshells
@@ -222,14 +171,9 @@
icon_state = "illumshot_box"
item_state = "syringe_kit"
- New()
- ..()
- new /obj/item/ammo_casing/shotgun/flash(src)
- new /obj/item/ammo_casing/shotgun/flash(src)
- new /obj/item/ammo_casing/shotgun/flash(src)
- new /obj/item/ammo_casing/shotgun/flash(src)
- new /obj/item/ammo_casing/shotgun/flash(src)
- new /obj/item/ammo_casing/shotgun/flash(src)
+/obj/item/weapon/storage/box/flashshells/New()
+ ..()
+ for(var/i = 1 to 7)
new /obj/item/ammo_casing/shotgun/flash(src)
/obj/item/weapon/storage/box/stunshells
@@ -238,14 +182,9 @@
icon_state = "stunshot_box"
item_state = "syringe_kit"
- New()
- ..()
- new /obj/item/ammo_casing/shotgun/stunshell(src)
- new /obj/item/ammo_casing/shotgun/stunshell(src)
- new /obj/item/ammo_casing/shotgun/stunshell(src)
- new /obj/item/ammo_casing/shotgun/stunshell(src)
- new /obj/item/ammo_casing/shotgun/stunshell(src)
- new /obj/item/ammo_casing/shotgun/stunshell(src)
+/obj/item/weapon/storage/box/stunshells/New()
+ ..()
+ for(var/i = 1 to 7)
new /obj/item/ammo_casing/shotgun/stunshell(src)
/obj/item/weapon/storage/box/practiceshells
@@ -254,28 +193,18 @@
icon_state = "blankshot_box"
item_state = "syringe_kit"
- New()
- ..()
- new /obj/item/ammo_casing/shotgun/practice(src)
- new /obj/item/ammo_casing/shotgun/practice(src)
- new /obj/item/ammo_casing/shotgun/practice(src)
- new /obj/item/ammo_casing/shotgun/practice(src)
- new /obj/item/ammo_casing/shotgun/practice(src)
- new /obj/item/ammo_casing/shotgun/practice(src)
+/obj/item/weapon/storage/box/practiceshells/New()
+ ..()
+ for(var/i = 1 to 7)
new /obj/item/ammo_casing/shotgun/practice(src)
/obj/item/weapon/storage/box/sniperammo
name = "box of 14.5mm shells"
desc = "It has a picture of a gun and several warning symbols on the front. WARNING: Live ammunition. Misuse may result in serious injury or death."
- New()
- ..()
- new /obj/item/ammo_casing/a145(src)
- new /obj/item/ammo_casing/a145(src)
- new /obj/item/ammo_casing/a145(src)
- new /obj/item/ammo_casing/a145(src)
- new /obj/item/ammo_casing/a145(src)
- new /obj/item/ammo_casing/a145(src)
+/obj/item/weapon/storage/box/sniperammo/New()
+ ..()
+ for(var/i = 1 to 7)
new /obj/item/ammo_casing/a145(src)
/obj/item/weapon/storage/box/flashbangs
@@ -283,14 +212,9 @@
desc = "WARNING: These devices are extremely dangerous and can cause blindness or deafness in repeated use. "
icon_state = "flashbang"
- New()
- ..()
- new /obj/item/weapon/grenade/flashbang(src)
- new /obj/item/weapon/grenade/flashbang(src)
- new /obj/item/weapon/grenade/flashbang(src)
- new /obj/item/weapon/grenade/flashbang(src)
- new /obj/item/weapon/grenade/flashbang(src)
- new /obj/item/weapon/grenade/flashbang(src)
+/obj/item/weapon/storage/box/flashbangs/New()
+ ..()
+ for(var/i = 1 to 7)
new /obj/item/weapon/grenade/flashbang(src)
/obj/item/weapon/storage/box/emps
@@ -298,12 +222,9 @@
desc = "A box containing 5 military grade EMP grenades. WARNING: Do not use near unshielded electronics or biomechanical augmentations, death or permanent paralysis may occur."
icon_state = "emp"
- New()
- ..()
- new /obj/item/weapon/grenade/empgrenade(src)
- new /obj/item/weapon/grenade/empgrenade(src)
- new /obj/item/weapon/grenade/empgrenade(src)
- new /obj/item/weapon/grenade/empgrenade(src)
+/obj/item/weapon/storage/box/emps/New()
+ ..()
+ for(var/i = 1 to 5)
new /obj/item/weapon/grenade/empgrenade(src)
/obj/item/weapon/storage/box/empslite
@@ -311,26 +232,19 @@
desc = "A box containing 5 low yield EMP grenades. WARNING: Do not use near unshielded electronics or biomechanical augmentations, death or permanent paralysis may occur."
icon_state = "emp"
- New()
- ..()
- new /obj/item/weapon/grenade/empgrenade/low_yield(src)
- new /obj/item/weapon/grenade/empgrenade/low_yield(src)
- new /obj/item/weapon/grenade/empgrenade/low_yield(src)
- new /obj/item/weapon/grenade/empgrenade/low_yield(src)
+/obj/item/weapon/storage/box/empslite/New()
+ ..()
+ for(var/i = 1 to 5)
new /obj/item/weapon/grenade/empgrenade/low_yield(src)
/obj/item/weapon/storage/box/smokes
name = "box of smoke bombs"
- desc = "A box containing 5 smoke bombs."
+ desc = "A box containing 7 smoke bombs."
icon_state = "flashbang"
-
/obj/item/weapon/storage/box/smokes/New()
- ..()
- new /obj/item/weapon/grenade/smokebomb(src)
- new /obj/item/weapon/grenade/smokebomb(src)
- new /obj/item/weapon/grenade/smokebomb(src)
- new /obj/item/weapon/grenade/smokebomb(src)
+ ..()
+ for(var/i = 1 to 7)
new /obj/item/weapon/grenade/smokebomb(src)
/obj/item/weapon/storage/box/anti_photons
@@ -339,11 +253,8 @@
icon_state = "flashbang"
/obj/item/weapon/storage/box/anti_photons/New()
- ..()
- new /obj/item/weapon/grenade/anti_photon(src)
- new /obj/item/weapon/grenade/anti_photon(src)
- new /obj/item/weapon/grenade/anti_photon(src)
- new /obj/item/weapon/grenade/anti_photon(src)
+ ..()
+ for(var/i = 1 to 5)
new /obj/item/weapon/grenade/anti_photon(src)
/obj/item/weapon/storage/box/frags
@@ -351,74 +262,55 @@
desc = "A box containing 5 military grade fragmentation grenades. WARNING: These devices are extremely dangerous and can cause limb loss or death in repeated use."
icon_state = "frag"
+/obj/item/weapon/storage/box/frags/New()
+ ..()
+ for(var/i = 1 to 5)
+ new /obj/item/weapon/grenade/explosive(src)
- New()
- ..()
- new /obj/item/weapon/grenade/explosive(src)
- new /obj/item/weapon/grenade/explosive(src)
- new /obj/item/weapon/grenade/explosive(src)
- new /obj/item/weapon/grenade/explosive(src)
- new /obj/item/weapon/grenade/explosive(src)
+/obj/item/weapon/storage/box/metalfoam
+ name = "box of metal foam grenades."
+ desc = "A box containing 7 metal foam grenades."
+ icon_state = "flashbang"
+
+/obj/item/weapon/storage/box/metalfoam/New()
+ ..()
+ for(var/i = 1 to 7)
+ new /obj/item/weapon/grenade/chem_grenade/metalfoam(src)
/obj/item/weapon/storage/box/trackimp
name = "boxed tracking implant kit"
desc = "Box full of scum-bag tracking utensils."
icon_state = "implant"
- New()
- ..()
+/obj/item/weapon/storage/box/trackimp/New()
+ ..()
+ for(var/i = 1 to 4)
new /obj/item/weapon/implantcase/tracking(src)
- new /obj/item/weapon/implantcase/tracking(src)
- new /obj/item/weapon/implantcase/tracking(src)
- new /obj/item/weapon/implantcase/tracking(src)
- new /obj/item/weapon/implanter(src)
- new /obj/item/weapon/implantpad(src)
- new /obj/item/weapon/locator(src)
+ new /obj/item/weapon/implanter(src)
+ new /obj/item/weapon/implantpad(src)
+ new /obj/item/weapon/locator(src)
/obj/item/weapon/storage/box/chemimp
name = "boxed chemical implant kit"
desc = "Box of stuff used to implant chemicals."
icon_state = "implant"
- New()
- ..()
+/obj/item/weapon/storage/box/chemimp/New()
+ ..()
+ for(var/i = 1 to 5)
new /obj/item/weapon/implantcase/chem(src)
- new /obj/item/weapon/implantcase/chem(src)
- new /obj/item/weapon/implantcase/chem(src)
- new /obj/item/weapon/implantcase/chem(src)
- new /obj/item/weapon/implantcase/chem(src)
- new /obj/item/weapon/implanter(src)
- new /obj/item/weapon/implantpad(src)
-
-
+ new /obj/item/weapon/implanter(src)
+ new /obj/item/weapon/implantpad(src)
/obj/item/weapon/storage/box/rxglasses
name = "box of prescription glasses"
desc = "This box contains nerd glasses."
icon_state = "glasses"
- New()
- ..()
+/obj/item/weapon/storage/box/rxglasses/New()
+ ..()
+ for(var/i = 1 to 7)
new /obj/item/clothing/glasses/regular(src)
- new /obj/item/clothing/glasses/regular(src)
- new /obj/item/clothing/glasses/regular(src)
- new /obj/item/clothing/glasses/regular(src)
- new /obj/item/clothing/glasses/regular(src)
- new /obj/item/clothing/glasses/regular(src)
- new /obj/item/clothing/glasses/regular(src)
-
-/obj/item/weapon/storage/box/drinkingglasses
- name = "box of drinking glasses"
- desc = "It has a picture of drinking glasses on it."
-
- New()
- ..()
- new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass(src)
- new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass(src)
- new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass(src)
- new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass(src)
- new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass(src)
- new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass(src)
/obj/item/weapon/storage/box/cdeathalarm_kit
name = "death alarm kit"
@@ -426,57 +318,38 @@
icon_state = "implant"
item_state = "syringe_kit"
- New()
- ..()
- new /obj/item/weapon/implanter(src)
- new /obj/item/weapon/implantcase/death_alarm(src)
- new /obj/item/weapon/implantcase/death_alarm(src)
- new /obj/item/weapon/implantcase/death_alarm(src)
- new /obj/item/weapon/implantcase/death_alarm(src)
- new /obj/item/weapon/implantcase/death_alarm(src)
+/obj/item/weapon/storage/box/cdeathalarm_kit/New()
+ ..()
+ for(var/i = 1 to 7)
new /obj/item/weapon/implantcase/death_alarm(src)
+ new /obj/item/weapon/implanter(src)
/obj/item/weapon/storage/box/condimentbottles
name = "box of condiment bottles"
desc = "It has a large ketchup smear on it."
- New()
- ..()
+/obj/item/weapon/storage/box/condimentbottles/New()
+ ..()
+ for(var/i = 1 to 7)
new /obj/item/weapon/reagent_containers/food/condiment(src)
- new /obj/item/weapon/reagent_containers/food/condiment(src)
- new /obj/item/weapon/reagent_containers/food/condiment(src)
- new /obj/item/weapon/reagent_containers/food/condiment(src)
- new /obj/item/weapon/reagent_containers/food/condiment(src)
- new /obj/item/weapon/reagent_containers/food/condiment(src)
-
-
/obj/item/weapon/storage/box/cups
name = "box of paper cups"
desc = "It has pictures of paper cups on the front."
- New()
- ..()
- new /obj/item/weapon/reagent_containers/food/drinks/sillycup( src )
- new /obj/item/weapon/reagent_containers/food/drinks/sillycup( src )
- new /obj/item/weapon/reagent_containers/food/drinks/sillycup( src )
- new /obj/item/weapon/reagent_containers/food/drinks/sillycup( src )
- new /obj/item/weapon/reagent_containers/food/drinks/sillycup( src )
- new /obj/item/weapon/reagent_containers/food/drinks/sillycup( src )
- new /obj/item/weapon/reagent_containers/food/drinks/sillycup( src )
+/obj/item/weapon/storage/box/cups/New()
+ ..()
+ for(var/i = 1 to 7)
+ new /obj/item/weapon/reagent_containers/food/drinks/sillycup(src)
/obj/item/weapon/storage/box/donkpockets
name = "box of donk-pockets"
desc = "Instructions: Heat in microwave. Product will cool if not eaten within seven minutes. "
icon_state = "donk_kit"
- New()
- ..()
- new /obj/item/weapon/reagent_containers/food/snacks/donkpocket(src)
- new /obj/item/weapon/reagent_containers/food/snacks/donkpocket(src)
- new /obj/item/weapon/reagent_containers/food/snacks/donkpocket(src)
- new /obj/item/weapon/reagent_containers/food/snacks/donkpocket(src)
- new /obj/item/weapon/reagent_containers/food/snacks/donkpocket(src)
+/obj/item/weapon/storage/box/donkpockets/New()
+ ..()
+ for(var/i = 1 to 7)
new /obj/item/weapon/reagent_containers/food/snacks/donkpocket(src)
/obj/item/weapon/storage/box/sinpockets
@@ -484,13 +357,9 @@
desc = "Instructions: Crush bottom of package to initiate chemical heating. Wait for 20 seconds before consumption. Product will cool if not eaten within seven minutes. "
icon_state = "donk_kit"
- New()
- ..()
- new /obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket(src)
- new /obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket(src)
- new /obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket(src)
- new /obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket(src)
- new /obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket(src)
+/obj/item/weapon/storage/box/sinpockets/New()
+ ..()
+ for(var/i = 1 to 7)
new /obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket(src)
/obj/item/weapon/storage/box/monkeycubes
@@ -498,126 +367,101 @@
desc = "Drymate brand monkey cubes. Just add water!"
icon = 'icons/obj/food.dmi'
icon_state = "monkeycubebox"
- storage_slots = 7
can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/monkeycube)
- New()
- ..()
- if(src.type == /obj/item/weapon/storage/box/monkeycubes)
- for(var/i = 1; i <= 5; i++)
- new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped(src)
+
+/obj/item/weapon/storage/box/monkeycubes/New()
+ ..()
+ if(src.type == /obj/item/weapon/storage/box/monkeycubes)
+ for(var/i = 1 to 4)
+ new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped(src)
/obj/item/weapon/storage/box/monkeycubes/farwacubes
name = "farwa cube box"
desc = "Drymate brand farwa cubes, shipped from Ahdomai. Just add water!"
- New()
- ..()
- for(var/i = 1; i <= 5; i++)
- new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/farwacube(src)
+
+/obj/item/weapon/storage/box/monkeycubes/farwacubes/New()
+ ..()
+ for(var/i = 1 to 4)
+ new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/farwacube(src)
/obj/item/weapon/storage/box/monkeycubes/stokcubes
name = "stok cube box"
desc = "Drymate brand stok cubes, shipped from Moghes. Just add water!"
- New()
- ..()
- for(var/i = 1; i <= 5; i++)
- new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/stokcube(src)
+
+/obj/item/weapon/storage/box/monkeycubes/stokcubes/New()
+ ..()
+ for(var/i = 1 to 4)
+ new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/stokcube(src)
/obj/item/weapon/storage/box/monkeycubes/neaeracubes
name = "neaera cube box"
desc = "Drymate brand neaera cubes, shipped from Jargon 4. Just add water!"
- New()
- ..()
- for(var/i = 1; i <= 5; i++)
- new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/neaeracube(src)
+
+/obj/item/weapon/storage/box/monkeycubes/neaeracubes/New()
+ ..()
+ for(var/i = 1 to 4)
+ new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/neaeracube(src)
/obj/item/weapon/storage/box/ids
name = "box of spare IDs"
desc = "Has so many empty IDs."
icon_state = "id"
- New()
- ..()
+/obj/item/weapon/storage/box/ids/New()
+ ..()
+ for(var/i = 1 to 7)
new /obj/item/weapon/card/id(src)
- new /obj/item/weapon/card/id(src)
- new /obj/item/weapon/card/id(src)
- new /obj/item/weapon/card/id(src)
- new /obj/item/weapon/card/id(src)
- new /obj/item/weapon/card/id(src)
- new /obj/item/weapon/card/id(src)
-
/obj/item/weapon/storage/box/seccarts
name = "box of spare R.O.B.U.S.T. Cartridges"
desc = "A box full of R.O.B.U.S.T. Cartridges, used by Security."
icon_state = "pda"
- New()
- ..()
+/obj/item/weapon/storage/box/seccarts/New()
+ ..()
+ for(var/i = 1 to 7)
new /obj/item/weapon/cartridge/security(src)
- new /obj/item/weapon/cartridge/security(src)
- new /obj/item/weapon/cartridge/security(src)
- new /obj/item/weapon/cartridge/security(src)
- new /obj/item/weapon/cartridge/security(src)
- new /obj/item/weapon/cartridge/security(src)
- new /obj/item/weapon/cartridge/security(src)
-
/obj/item/weapon/storage/box/handcuffs
name = "box of spare handcuffs"
desc = "A box full of handcuffs."
icon_state = "handcuff"
- New()
- ..()
+/obj/item/weapon/storage/box/handcuffs/New()
+ ..()
+ for(var/i = 1 to 7)
new /obj/item/weapon/handcuffs(src)
- new /obj/item/weapon/handcuffs(src)
- new /obj/item/weapon/handcuffs(src)
- new /obj/item/weapon/handcuffs(src)
- new /obj/item/weapon/handcuffs(src)
- new /obj/item/weapon/handcuffs(src)
- new /obj/item/weapon/handcuffs(src)
-
/obj/item/weapon/storage/box/mousetraps
name = "box of Pest-B-Gon mousetraps"
desc = "WARNING: Keep out of reach of children ."
icon_state = "mousetraps"
- New()
- ..()
- new /obj/item/device/assembly/mousetrap( src )
- new /obj/item/device/assembly/mousetrap( src )
- new /obj/item/device/assembly/mousetrap( src )
- new /obj/item/device/assembly/mousetrap( src )
- new /obj/item/device/assembly/mousetrap( src )
- new /obj/item/device/assembly/mousetrap( src )
+/obj/item/weapon/storage/box/mousetraps/New()
+ ..()
+ for(var/i = 1 to 7)
+ new /obj/item/device/assembly/mousetrap(src)
/obj/item/weapon/storage/box/pillbottles
name = "box of pill bottles"
desc = "It has pictures of pill bottles on its front."
- New()
- ..()
- new /obj/item/weapon/storage/pill_bottle( src )
- new /obj/item/weapon/storage/pill_bottle( src )
- new /obj/item/weapon/storage/pill_bottle( src )
- new /obj/item/weapon/storage/pill_bottle( src )
- new /obj/item/weapon/storage/pill_bottle( src )
- new /obj/item/weapon/storage/pill_bottle( src )
- new /obj/item/weapon/storage/pill_bottle( src )
-
+/obj/item/weapon/storage/box/pillbottles/New()
+ ..()
+ for(var/i = 1 to 7)
+ new /obj/item/weapon/storage/pill_bottle(src)
/obj/item/weapon/storage/box/snappops
name = "snap pop box"
desc = "Eight wrappers of fun! Ages 8 and up. Not suitable for children."
icon = 'icons/obj/toy.dmi'
icon_state = "spbox"
- storage_slots = 8
can_hold = list(/obj/item/toy/snappop)
- New()
- ..()
- for(var/i=1; i <= storage_slots; i++)
- new /obj/item/toy/snappop(src)
+
+/obj/item/weapon/storage/box/snappops/New()
+ ..()
+ for(var/i = 1 to 8)
+ new /obj/item/toy/snappop(src)
/obj/item/weapon/storage/box/matches
name = "matchbox"
@@ -625,33 +469,33 @@
icon = 'icons/obj/cigarettes.dmi'
icon_state = "matchbox"
item_state = "zippo"
- storage_slots = 10
w_class = 1
slot_flags = SLOT_BELT
can_hold = list(/obj/item/weapon/flame/match)
- New()
- ..()
- for(var/i=1; i <= storage_slots; i++)
- new /obj/item/weapon/flame/match(src)
+/obj/item/weapon/storage/box/matches/New()
+ ..()
+ for(var/i=1 to 10)
+ new /obj/item/weapon/flame/match(src)
- attackby(obj/item/weapon/flame/match/W as obj, mob/user as mob)
- if(istype(W) && !W.lit && !W.burnt)
- W.lit = 1
- W.damtype = "burn"
- W.icon_state = "match_lit"
- processing_objects.Add(W)
- W.update_icon()
- return
+/obj/item/weapon/storage/box/matches/attackby(obj/item/weapon/flame/match/W as obj, mob/user as mob)
+ if(istype(W) && !W.lit && !W.burnt)
+ W.lit = 1
+ W.damtype = "burn"
+ W.icon_state = "match_lit"
+ processing_objects.Add(W)
+ W.update_icon()
+ return
/obj/item/weapon/storage/box/autoinjectors
name = "box of injectors"
desc = "Contains autoinjectors."
icon_state = "syringe"
- New()
- ..()
- for (var/i; i < storage_slots; i++)
- new /obj/item/weapon/reagent_containers/hypospray/autoinjector(src)
+
+/obj/item/weapon/storage/box/autoinjectors/New()
+ ..()
+ for (var/i = 1 to 7)
+ new /obj/item/weapon/reagent_containers/hypospray/autoinjector(src)
/obj/item/weapon/storage/box/lights
name = "box of replacement bulbs"
@@ -666,7 +510,7 @@
/obj/item/weapon/storage/box/lights/bulbs/New()
..()
- for(var/i = 0; i < 21; i++)
+ for(var/i = 1 to 24)
new /obj/item/weapon/light/bulb(src)
/obj/item/weapon/storage/box/lights/tubes
@@ -675,7 +519,7 @@
/obj/item/weapon/storage/box/lights/tubes/New()
..()
- for(var/i = 0; i < 21; i++)
+ for(var/i = 1 to 24)
new /obj/item/weapon/light/tube(src)
/obj/item/weapon/storage/box/lights/mixed
@@ -684,9 +528,9 @@
/obj/item/weapon/storage/box/lights/mixed/New()
..()
- for(var/i = 0; i < 14; i++)
+ for(var/i = 1 to 16)
new /obj/item/weapon/light/tube(src)
- for(var/i = 0; i < 7; i++)
+ for(var/i = 1 to 8)
new /obj/item/weapon/light/bulb(src)
/obj/item/weapon/storage/box/freezer
@@ -696,9 +540,25 @@
icon_state = "portafreezer"
item_state = "medicalpack"
foldable = null
- storage_slots=7
max_w_class = 3
can_hold = list(/obj/item/organ, /obj/item/weapon/reagent_containers/food, /obj/item/weapon/reagent_containers/glass)
max_storage_space = 21
use_to_pickup = 1 // for picking up broken bulbs, not that most people will try
+/obj/item/weapon/storage/box/ambrosia
+ name = "ambrosia seeds box"
+ desc = "Contains the seeds you need to get a little high."
+
+/obj/item/weapon/storage/box/ambrosia/New()
+ ..()
+ for(var/i = 1 to 7)
+ new /obj/item/seeds/ambrosiavulgarisseed(src)
+
+/obj/item/weapon/storage/box/ambrosiadeus
+ name = "ambrosia deus seeds box"
+ desc = "Contains the seeds you need to get a proper healthy high."
+
+/obj/item/weapon/storage/box/ambrosiadeus/New()
+ ..()
+ for(var/i = 1 to 7)
+ new /obj/item/seeds/ambrosiadeusseed(src)
diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm
index 1af88c9fa8..758ac8dc39 100644
--- a/code/game/objects/items/weapons/storage/fancy.dm
+++ b/code/game/objects/items/weapons/storage/fancy.dm
@@ -53,7 +53,7 @@
/obj/item/weapon/storage/fancy/egg_box/New()
..()
- for(var/i=1; i <= storage_slots; i++)
+ for(var/i=1 to storage_slots)
new /obj/item/weapon/reagent_containers/food/snacks/egg(src)
return
@@ -68,14 +68,13 @@
icon_state = "candlebox5"
icon_type = "candle"
item_state = "candlebox5"
- storage_slots = 5
throwforce = 2
slot_flags = SLOT_BELT
/obj/item/weapon/storage/fancy/candle_box/New()
..()
- for(var/i=1; i <= storage_slots; i++)
+ for(var/i=1 to 5)
new /obj/item/weapon/flame/candle(src)
return
@@ -89,7 +88,6 @@
icon = 'icons/obj/crayons.dmi'
icon_state = "crayonbox"
w_class = 2.0
- storage_slots = 6
icon_type = "crayon"
can_hold = list(
/obj/item/weapon/pen/crayon
@@ -144,27 +142,42 @@
for(var/i = 1 to storage_slots)
new /obj/item/clothing/mask/smokable/cigarette(src)
create_reagents(15 * storage_slots)//so people can inject cigarettes without opening a packet, now with being able to inject the whole one
+ flags |= OPENCONTAINER
/obj/item/weapon/storage/fancy/cigarettes/update_icon()
icon_state = "[initial(icon_state)][contents.len]"
return
/obj/item/weapon/storage/fancy/cigarettes/remove_from_storage(obj/item/W as obj, atom/new_location)
+ // Don't try to transfer reagents to lighters
+ if(istype(W, /obj/item/clothing/mask/smokable/cigarette))
var/obj/item/clothing/mask/smokable/cigarette/C = W
- if(!istype(C)) return // what
reagents.trans_to_obj(C, (reagents.total_volume/contents.len))
- ..()
+ ..()
/obj/item/weapon/storage/fancy/cigarettes/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
if(!istype(M, /mob))
return
- if(M == user && user.zone_sel.selecting == O_MOUTH && contents.len > 0 && !user.wear_mask)
- var/obj/item/clothing/mask/smokable/cigarette/W = new /obj/item/clothing/mask/smokable/cigarette(user)
- reagents.trans_to_obj(W, (reagents.total_volume/contents.len))
- user.equip_to_slot_if_possible(W, slot_wear_mask)
+ if(M == user && user.zone_sel.selecting == O_MOUTH)
+ // Find ourselves a cig. Note that we could be full of lighters.
+ var/obj/item/clothing/mask/smokable/cigarette/cig = locate() in src
+
+ if(cig == null)
+ user << "Looks like the packet is out of cigarettes. "
+ return
+
+ // Instead of running equip_to_slot_if_possible() we check here first,
+ // to avoid dousing cig with reagents if we're not going to equip it
+ if(!cig.mob_can_equip(user, slot_wear_mask))
+ return
+
+ // We call remove_from_storage first to manage the reagent transfer and
+ // UI updates.
+ remove_from_storage(cig, null)
+ user.equip_to_slot(cig, slot_wear_mask)
+
reagents.maximum_volume = 15 * contents.len
- contents.len--
user << "You take a cigarette out of the pack. "
update_icon()
else
@@ -248,21 +261,6 @@
reagents.trans_to_obj(C, (reagents.total_volume/contents.len))
..()
-/obj/item/weapon/storage/fancy/cigar/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
- if(!istype(M, /mob))
- return
-
- if(M == user && user.zone_sel.selecting == O_MOUTH && contents.len > 0 && !user.wear_mask)
- var/obj/item/clothing/mask/smokable/cigarette/cigar/W = new /obj/item/clothing/mask/smokable/cigarette/cigar(user)
- reagents.trans_to_obj(W, (reagents.total_volume/contents.len))
- user.equip_to_slot_if_possible(W, slot_wear_mask)
- reagents.maximum_volume = 15 * contents.len
- contents.len--
- user << "You take a cigar out of the case. "
- update_icon()
- else
- ..()
-
/*
* Vial Box
*/
@@ -278,7 +276,7 @@
/obj/item/weapon/storage/fancy/vials/New()
..()
- for(var/i=1; i <= storage_slots; i++)
+ for(var/i=1 to 6)
new /obj/item/weapon/reagent_containers/glass/beaker/vial(src)
return
diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm
index dad95da904..4bd5592704 100644
--- a/code/game/objects/items/weapons/storage/firstaid.dm
+++ b/code/game/objects/items/weapons/storage/firstaid.dm
@@ -14,6 +14,7 @@
throw_speed = 2
throw_range = 8
var/empty = 0
+ max_storage_space = 14
/obj/item/weapon/storage/firstaid/fire
@@ -131,8 +132,8 @@
/obj/item/weapon/storage/firstaid/surgery
name = "surgery kit"
desc = "Contains tools for surgery."
- storage_slots = 10
- max_storage_space = 23
+ max_storage_space = 21
+ max_w_class = 3
/obj/item/weapon/storage/firstaid/surgery/New()
..()
@@ -162,8 +163,9 @@
can_hold = list(/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/dice,/obj/item/weapon/paper)
allow_quick_gather = 1
use_to_pickup = 1
- storage_slots = 14
use_sound = null
+ max_storage_space = 14
+ max_w_class = 1
/obj/item/weapon/storage/pill_bottle/antitox
name = "bottle of Dylovene pills"
diff --git a/code/game/objects/items/weapons/storage/laundry_basket.dm b/code/game/objects/items/weapons/storage/laundry_basket.dm
index 92dd28c61a..ffb4867ca6 100644
--- a/code/game/objects/items/weapons/storage/laundry_basket.dm
+++ b/code/game/objects/items/weapons/storage/laundry_basket.dm
@@ -21,7 +21,7 @@
var/linked
-/obj/item/weapon/storage/laundry_basket/attack_hand(mob/user as mob)
+/obj/item/weapon/storage/laundry_basket/attack_hand(mob/living/user as mob)
if(ishuman(user))
var/mob/living/carbon/human/H = user
var/obj/item/organ/external/temp = H.get_organ("r_hand")
diff --git a/code/game/objects/items/weapons/storage/lockbox.dm b/code/game/objects/items/weapons/storage/lockbox.dm
index 33d462eff2..7288d2d038 100644
--- a/code/game/objects/items/weapons/storage/lockbox.dm
+++ b/code/game/objects/items/weapons/storage/lockbox.dm
@@ -8,7 +8,6 @@
w_class = 4
max_w_class = 3
max_storage_space = 14 //The sum of the w_classes of all the items in this storage item.
- storage_slots = 4
req_access = list(access_armory)
var/locked = 1
var/broken = 0
@@ -27,6 +26,7 @@
if(src.locked)
src.icon_state = src.icon_locked
user << "You lock \the [src]! "
+ close_all()
return
else
src.icon_state = src.icon_closed
diff --git a/code/game/objects/items/weapons/storage/misc.dm b/code/game/objects/items/weapons/storage/misc.dm
index eb63c96cb8..cf1af1ea79 100644
--- a/code/game/objects/items/weapons/storage/misc.dm
+++ b/code/game/objects/items/weapons/storage/misc.dm
@@ -15,14 +15,14 @@
icon = 'icons/obj/food.dmi'
icon_state = "donutbox"
name = "donut box"
- storage_slots = 6
var/startswith = 6
+ max_storage_space = 12
can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/donut)
foldable = /obj/item/stack/material/cardboard
/obj/item/weapon/storage/box/donut/New()
..()
- for(var/i=1; i <= startswith; i++)
+ for(var/i=1 to startswith)
new /obj/item/weapon/reagent_containers/food/snacks/donut/normal(src)
update_icon()
return
diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm
index 3cb92b0a3c..2df9701436 100644
--- a/code/game/objects/items/weapons/storage/storage.dm
+++ b/code/game/objects/items/weapons/storage/storage.dm
@@ -15,9 +15,15 @@
var/list/cant_hold = new/list() //List of objects which this item can't store (in effect only if can_hold isn't set)
var/list/is_seeing = new/list() //List of mobs which are currently seeing the contents of this item's storage
var/max_w_class = 2 //Max size of objects that this object can store (in effect only if can_hold isn't set)
- var/max_storage_space = 14 //The sum of the storage costs of all the items in this storage item.
- var/storage_slots = 7 //The number of storage slots in this container.
+ var/max_storage_space = 8 //The sum of the storage costs of all the items in this storage item.
+ var/storage_slots = null //The number of storage slots in this container. If null, it uses the volume-based storage instead.
var/obj/screen/storage/boxes = null
+ var/obj/screen/storage/storage_start = null //storage UI
+ var/obj/screen/storage/storage_continue = null
+ var/obj/screen/storage/storage_end = null
+ var/obj/screen/storage/stored_start = null
+ var/obj/screen/storage/stored_continue = null
+ var/obj/screen/storage/stored_end = null
var/obj/screen/close/closer = null
var/use_to_pickup //Set this to make it possible to use this item in an inverse way, so you can have the item in your hand and click items on the floor to pick them up.
var/display_contents_with_number //Set this to make the storage item group contents of the same type and display them as a number.
@@ -29,11 +35,16 @@
/obj/item/weapon/storage/Destroy()
close_all()
qdel(boxes)
+ qdel(src.storage_start)
+ qdel(src.storage_continue)
+ qdel(src.storage_end)
+ qdel(src.stored_start)
+ qdel(src.stored_continue)
+ qdel(src.stored_end)
qdel(closer)
..()
/obj/item/weapon/storage/MouseDrop(obj/over_object as obj)
-
if(!canremove)
return
@@ -57,7 +68,7 @@
if (( usr.restrained() ) || ( usr.stat ))
return
- if ((src.loc == usr) && !usr.unEquip(src))
+ if ((src.loc == usr) && !(istype(over_object, /obj/screen)) && !usr.unEquip(src))
return
switch(over_object.name)
@@ -92,11 +103,19 @@
if(user.s_active)
user.s_active.hide_from(user)
user.client.screen -= src.boxes
+ user.client.screen -= src.storage_start
+ user.client.screen -= src.storage_continue
+ user.client.screen -= src.storage_end
user.client.screen -= src.closer
user.client.screen -= src.contents
- user.client.screen += src.boxes
user.client.screen += src.closer
user.client.screen += src.contents
+ if(storage_slots)
+ user.client.screen += src.boxes
+ else
+ user.client.screen += src.storage_start
+ user.client.screen += src.storage_continue
+ user.client.screen += src.storage_end
user.s_active = src
is_seeing |= user
return
@@ -106,6 +125,9 @@
if(!user.client)
return
user.client.screen -= src.boxes
+ user.client.screen -= src.storage_start
+ user.client.screen -= src.storage_continue
+ user.client.screen -= src.storage_end
user.client.screen -= src.closer
user.client.screen -= src.contents
if(user.s_active == src)
@@ -157,7 +179,7 @@
return
//This proc draws out the inventory and places the items on it. It uses the standard position.
-/obj/item/weapon/storage/proc/standard_orient_objs(var/rows, var/cols, var/list/obj/item/display_contents)
+/obj/item/weapon/storage/proc/slot_orient_objs(var/rows, var/cols, var/list/obj/item/display_contents)
var/cx = 4
var/cy = 2+rows
src.boxes.screen_loc = "4:16,2:16 to [4+cols]:16,[2+rows]:16"
@@ -183,6 +205,52 @@
src.closer.screen_loc = "[4+cols+1]:16,2:16"
return
+/obj/item/weapon/storage/proc/space_orient_objs(var/list/obj/item/display_contents)
+
+ var/baseline_max_storage_space = 16 //should be equal to default backpack capacity
+ var/storage_cap_width = 2 //length of sprite for start and end of the box representing total storage space
+ var/stored_cap_width = 4 //length of sprite for start and end of the box representing the stored item
+ var/storage_width = min( round( 224 * max_storage_space/baseline_max_storage_space ,1) ,274) //length of sprite for the box representing total storage space
+
+ storage_start.overlays.Cut()
+
+ var/matrix/M = matrix()
+ M.Scale((storage_width-storage_cap_width*2+3)/32,1)
+ src.storage_continue.transform = M
+
+ src.storage_start.screen_loc = "4:16,2:16"
+ src.storage_continue.screen_loc = "4:[storage_cap_width+(storage_width-storage_cap_width*2)/2+2],2:16"
+ src.storage_end.screen_loc = "4:[19+storage_width-storage_cap_width],2:16"
+
+ var/startpoint = 0
+ var/endpoint = 1
+
+ for(var/obj/item/O in contents)
+ startpoint = endpoint + 1
+ endpoint += storage_width * O.get_storage_cost()/max_storage_space
+
+ var/matrix/M_start = matrix()
+ var/matrix/M_continue = matrix()
+ var/matrix/M_end = matrix()
+ M_start.Translate(startpoint,0)
+ M_continue.Scale((endpoint-startpoint-stored_cap_width*2)/32,1)
+ M_continue.Translate(startpoint+stored_cap_width+(endpoint-startpoint-stored_cap_width*2)/2 - 16,0)
+ M_end.Translate(endpoint-stored_cap_width,0)
+ src.stored_start.transform = M_start
+ src.stored_continue.transform = M_continue
+ src.stored_end.transform = M_end
+ storage_start.overlays += src.stored_start
+ storage_start.overlays += src.stored_continue
+ storage_start.overlays += src.stored_end
+
+ O.screen_loc = "4:[round((startpoint+endpoint)/2)+2],2:16"
+ O.maptext = ""
+ O.layer = 20
+
+ src.closer.screen_loc = "4:[storage_width+19],2:16"
+ return
+
+
/datum/numbered_display
var/obj/item/sample_object
var/number
@@ -214,12 +282,14 @@
adjusted_contents++
numbered_contents.Add( new/datum/numbered_display(I) )
- //var/mob/living/carbon/human/H = user
- var/row_num = 0
- var/col_count = min(7,storage_slots) -1
- if (adjusted_contents > 7)
- row_num = round((adjusted_contents-1) / 7) // 7 is the maximum allowed width.
- src.standard_orient_objs(row_num, col_count, numbered_contents)
+ if(storage_slots == null)
+ src.space_orient_objs(numbered_contents)
+ else
+ var/row_num = 0
+ var/col_count = min(7,storage_slots) -1
+ if (adjusted_contents > 7)
+ row_num = round((adjusted_contents-1) / 7) // 7 is the maximum allowed width.
+ src.slot_orient_objs(row_num, col_count, numbered_contents)
return
//This proc return 1 if the item can be picked up and 0 if it can't.
@@ -227,12 +297,12 @@
/obj/item/weapon/storage/proc/can_be_inserted(obj/item/W as obj, stop_messages = 0)
if(!istype(W)) return //Not an item
- if(usr.isEquipped(W) && !usr.canUnEquip(W))
+ if(usr && usr.isEquipped(W) && !usr.canUnEquip(W))
return 0
if(src.loc == W)
return 0 //Means the item is already in the storage item
- if(contents.len >= storage_slots)
+ if(storage_slots != null && contents.len >= storage_slots)
if(!stop_messages)
usr << "[src] is full, make some space. "
return 0 //Storage item is full
@@ -249,9 +319,9 @@
usr << "[src] cannot hold [W]. "
return 0
- if (W.w_class > max_w_class)
+ if (max_w_class != null && W.w_class > max_w_class)
if(!stop_messages)
- usr << "[W] is too big for this [src]. "
+ usr << "[W] is too long for \the [src]. "
return 0
var/total_storage_space = W.get_storage_cost()
@@ -260,7 +330,7 @@
if(total_storage_space > max_storage_space)
if(!stop_messages)
- usr << "[src] is full, make some space. "
+ usr << "[src] is too full, make some space. "
return 0
if(W.w_class >= src.w_class && (istype(W, /obj/item/weapon/storage)))
@@ -437,15 +507,51 @@
else
verbs -= /obj/item/weapon/storage/verb/toggle_gathering_mode
+ spawn(5)
+ var/total_storage_space = 0
+ for(var/obj/item/I in contents)
+ total_storage_space += I.get_storage_cost()
+ max_storage_space = max(total_storage_space,max_storage_space) //prevents spawned containers from being too small for their contents
+
src.boxes = new /obj/screen/storage( )
src.boxes.name = "storage"
src.boxes.master = src
src.boxes.icon_state = "block"
src.boxes.screen_loc = "7,7 to 10,8"
src.boxes.layer = 19
+
+ src.storage_start = new /obj/screen/storage( )
+ src.storage_start.name = "storage"
+ src.storage_start.master = src
+ src.storage_start.icon_state = "storage_start"
+ src.storage_start.screen_loc = "7,7 to 10,8"
+ src.storage_start.layer = 19
+ src.storage_continue = new /obj/screen/storage( )
+ src.storage_continue.name = "storage"
+ src.storage_continue.master = src
+ src.storage_continue.icon_state = "storage_continue"
+ src.storage_continue.screen_loc = "7,7 to 10,8"
+ src.storage_continue.layer = 19
+ src.storage_end = new /obj/screen/storage( )
+ src.storage_end.name = "storage"
+ src.storage_end.master = src
+ src.storage_end.icon_state = "storage_end"
+ src.storage_end.screen_loc = "7,7 to 10,8"
+ src.storage_end.layer = 19
+
+ src.stored_start = new /obj //we just need these to hold the icon
+ src.stored_start.icon_state = "stored_start"
+ src.stored_start.layer = 19
+ src.stored_continue = new /obj
+ src.stored_continue.icon_state = "stored_continue"
+ src.stored_continue.layer = 19
+ src.stored_end = new /obj
+ src.stored_end.icon_state = "stored_end"
+ src.stored_end.layer = 19
+
src.closer = new /obj/screen/close( )
src.closer.master = src
- src.closer.icon_state = "x"
+ src.closer.icon_state = "storage_close"
src.closer.layer = 20
orient2hud()
return
@@ -500,4 +606,19 @@
return depth
/obj/item/proc/get_storage_cost()
- return 2**(w_class-1) //1,2,4,8,16,...
+ if (storage_cost)
+ return storage_cost
+ else
+ switch(w_class)
+ if(1)
+ return 1
+ if(2)
+ return 2
+ if(3)
+ return 4
+ if(4)
+ return 8
+ if(5)
+ return 16
+ else
+ return 1000
diff --git a/code/game/objects/items/weapons/storage/toolbox.dm b/code/game/objects/items/weapons/storage/toolbox.dm
index 11c2d6a853..13cbc06dc7 100644
--- a/code/game/objects/items/weapons/storage/toolbox.dm
+++ b/code/game/objects/items/weapons/storage/toolbox.dm
@@ -11,7 +11,7 @@
throw_range = 7
w_class = 4
max_w_class = 3
- max_storage_space = 14 //can hold 7 w_class-2 items or up to 3 w_class-3 items (with 1 w_class-2 item as change).
+ max_storage_space = 14 //enough to hold all starting contents
origin_tech = list(TECH_COMBAT = 1)
attack_verb = list("robusted")
@@ -20,63 +20,153 @@
icon_state = "red"
item_state = "toolbox_red"
- New()
- ..()
- new /obj/item/weapon/crowbar/red(src)
- new /obj/item/weapon/extinguisher/mini(src)
- if(prob(50))
- new /obj/item/device/flashlight(src)
- else
- new /obj/item/device/flashlight/flare(src)
- new /obj/item/device/radio(src)
+/obj/item/weapon/storage/toolbox/emergency/New()
+ ..()
+ new /obj/item/weapon/crowbar/red(src)
+ new /obj/item/weapon/extinguisher/mini(src)
+ if(prob(50))
+ new /obj/item/device/flashlight(src)
+ else
+ new /obj/item/device/flashlight/flare(src)
+ new /obj/item/device/radio(src)
/obj/item/weapon/storage/toolbox/mechanical
name = "mechanical toolbox"
icon_state = "blue"
item_state = "toolbox_blue"
- New()
- ..()
- new /obj/item/weapon/screwdriver(src)
- new /obj/item/weapon/wrench(src)
- new /obj/item/weapon/weldingtool(src)
- new /obj/item/weapon/crowbar(src)
- new /obj/item/device/analyzer(src)
- new /obj/item/weapon/wirecutters(src)
+/obj/item/weapon/storage/toolbox/mechanical/New()
+ ..()
+ new /obj/item/weapon/screwdriver(src)
+ new /obj/item/weapon/wrench(src)
+ new /obj/item/weapon/weldingtool(src)
+ new /obj/item/weapon/crowbar(src)
+ new /obj/item/device/analyzer(src)
+ new /obj/item/weapon/wirecutters(src)
/obj/item/weapon/storage/toolbox/electrical
name = "electrical toolbox"
icon_state = "yellow"
item_state = "toolbox_yellow"
- New()
- ..()
- var/color = pick("red","yellow","green","blue","pink","orange","cyan","white")
- new /obj/item/weapon/screwdriver(src)
- new /obj/item/weapon/wirecutters(src)
- new /obj/item/device/t_scanner(src)
- new /obj/item/weapon/crowbar(src)
- new /obj/item/stack/cable_coil(src,30,color)
- new /obj/item/stack/cable_coil(src,30,color)
- if(prob(5))
- new /obj/item/clothing/gloves/yellow(src)
- else
- new /obj/item/stack/cable_coil(src,30,color)
+/obj/item/weapon/storage/toolbox/electrical/New()
+ ..()
+ new /obj/item/weapon/screwdriver(src)
+ new /obj/item/weapon/wirecutters(src)
+ new /obj/item/device/t_scanner(src)
+ new /obj/item/weapon/crowbar(src)
+ new /obj/item/stack/cable_coil/random(src,30)
+ new /obj/item/stack/cable_coil/random(src,30)
+ if(prob(5))
+ new /obj/item/clothing/gloves/yellow(src)
+ else
+ new /obj/item/stack/cable_coil/random(src,30)
/obj/item/weapon/storage/toolbox/syndicate
- name = "suspicious looking toolbox"
+ name = "black and red toolbox"
icon_state = "syndicate"
item_state = "toolbox_syndi"
origin_tech = list(TECH_COMBAT = 1, TECH_ILLEGAL = 1)
force = 7.0
- New()
- ..()
- var/color = pick("red","yellow","green","blue","pink","orange","cyan","white")
- new /obj/item/weapon/screwdriver(src)
- new /obj/item/weapon/wrench(src)
- new /obj/item/weapon/weldingtool(src)
- new /obj/item/weapon/crowbar(src)
- new /obj/item/stack/cable_coil(src,30,color)
- new /obj/item/weapon/wirecutters(src)
- new /obj/item/device/multitool(src)
+/obj/item/weapon/storage/toolbox/syndicate/New()
+ ..()
+ new /obj/item/clothing/gloves/yellow(src)
+ new /obj/item/weapon/screwdriver(src)
+ new /obj/item/weapon/wrench(src)
+ new /obj/item/weapon/weldingtool(src)
+ new /obj/item/weapon/crowbar(src)
+ new /obj/item/weapon/wirecutters(src)
+ new /obj/item/device/multitool(src)
+
+/obj/item/weapon/storage/toolbox/lunchbox
+ max_storage_space = 8 //slightly smaller than a toolbox
+ name = "rainbow lunchbox"
+ icon_state = "lunchbox_rainbow"
+ item_state = "toolbox_pink"
+ desc = "A little lunchbox. This one is the colors of the rainbow!"
+ w_class = 3
+ max_w_class = 2
+ var/filled = FALSE
+ attack_verb = list("lunched")
+
+/obj/item/weapon/storage/toolbox/lunchbox/New()
+ ..()
+ if(filled)
+ var/list/lunches = lunchables_lunches()
+ var/lunch = lunches[pick(lunches)]
+ new lunch(src)
+
+ var/list/snacks = lunchables_snacks()
+ var/snack = snacks[pick(snacks)]
+ new snack(src)
+
+ var/list/drinks = lunchables_drinks()
+ var/drink = drinks[pick(drinks)]
+ new drink(src)
+
+/obj/item/weapon/storage/toolbox/lunchbox/filled
+ filled = TRUE
+
+/obj/item/weapon/storage/toolbox/lunchbox/heart
+ name = "heart lunchbox"
+ icon_state = "lunchbox_lovelyhearts"
+ item_state = "toolbox_pink"
+ desc = "A little lunchbox. This one has cute little hearts on it!"
+
+/obj/item/weapon/storage/toolbox/lunchbox/heart/filled
+ filled = TRUE
+
+/obj/item/weapon/storage/toolbox/lunchbox/cat
+ name = "cat lunchbox"
+ icon_state = "lunchbox_sciencecatshow"
+ item_state = "toolbox_green"
+ desc = "A little lunchbox. This one has a cute little science cat from a popular show on it!"
+
+/obj/item/weapon/storage/toolbox/lunchbox/cat/filled
+ filled = TRUE
+
+/obj/item/weapon/storage/toolbox/lunchbox/nt
+ name = "Nanotrasen brand lunchbox"
+ icon_state = "lunchbox_nanotrasen"
+ item_state = "toolbox_blue"
+ desc = "A little lunchbox. This one is branded with the Nanotrasen logo!"
+
+/obj/item/weapon/storage/toolbox/lunchbox/nt/filled
+ filled = TRUE
+
+/obj/item/weapon/storage/toolbox/lunchbox/mars
+ name = "\improper Mojave university lunchbox"
+ icon_state = "lunchbox_marsuniversity"
+ item_state = "toolbox_red"
+ desc = "A little lunchbox. This one is branded with the Mojave university logo!"
+
+/obj/item/weapon/storage/toolbox/lunchbox/mars/filled
+ filled = TRUE
+
+/obj/item/weapon/storage/toolbox/lunchbox/cti
+ name = "\improper CTI lunchbox"
+ icon_state = "lunchbox_cti"
+ item_state = "toolbox_blue"
+ desc = "A little lunchbox. This one is branded with the CTI logo!"
+
+/obj/item/weapon/storage/toolbox/lunchbox/cti/filled
+ filled = TRUE
+
+/obj/item/weapon/storage/toolbox/lunchbox/nymph
+ name = "\improper Diona nymph lunchbox"
+ icon_state = "lunchbox_dionanymph"
+ item_state = "toolbox_yellow"
+ desc = "A little lunchbox. This one is an adorable Diona nymph on the side!"
+
+/obj/item/weapon/storage/toolbox/lunchbox/nymph/filled
+ filled = TRUE
+
+/obj/item/weapon/storage/toolbox/lunchbox/syndicate
+ name = "black and red lunchbox"
+ icon_state = "lunchbox_syndie"
+ item_state = "toolbox_syndi"
+ desc = "A little lunchbox. This one is a sleek black and red, made of a durable steel!"
+
+/obj/item/weapon/storage/toolbox/lunchbox/syndicate/filled
+ filled = TRUE
diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm
index 4f80e85a52..4e427c8f6e 100644
--- a/code/game/objects/items/weapons/storage/uplink_kits.dm
+++ b/code/game/objects/items/weapons/storage/uplink_kits.dm
@@ -127,7 +127,6 @@
/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()
..()
diff --git a/code/game/objects/items/weapons/storage/wallets.dm b/code/game/objects/items/weapons/storage/wallets.dm
index 9b4f9271a2..9cbda62db7 100644
--- a/code/game/objects/items/weapons/storage/wallets.dm
+++ b/code/game/objects/items/weapons/storage/wallets.dm
@@ -2,7 +2,8 @@
name = "wallet"
desc = "It can hold a few small and personal things."
storage_slots = 10
- icon_state = "wallet"
+ icon = 'icons/obj/wallet.dmi'
+ icon_state = "wallet-orange"
w_class = 2
can_hold = list(
/obj/item/weapon/spacecash,
@@ -27,7 +28,6 @@
var/obj/item/weapon/card/id/front_id = null
-
/obj/item/weapon/storage/wallet/remove_from_storage(obj/item/W as obj, atom/new_location)
. = ..(W, new_location)
if(.)
@@ -45,23 +45,14 @@
update_icon()
/obj/item/weapon/storage/wallet/update_icon()
-
+ overlays.Cut()
if(front_id)
- switch(front_id.icon_state)
- if("id")
- icon_state = "walletid"
- return
- if("silver")
- icon_state = "walletid_silver"
- return
- if("gold")
- icon_state = "walletid_gold"
- return
- if("centcom")
- icon_state = "walletid_centcom"
- return
- icon_state = "wallet"
-
+ var/tiny_state = "id-generic"
+ if("id-"+front_id.icon_state in icon_states(icon))
+ tiny_state = "id-"+front_id.icon_state
+ var/image/tiny_image = new/image(icon, icon_state = tiny_state)
+ tiny_image.appearance_flags = RESET_COLOR
+ overlays += tiny_image
/obj/item/weapon/storage/wallet/GetID()
return front_id
@@ -75,16 +66,49 @@
/obj/item/weapon/storage/wallet/random/New()
..()
- var/item1_type = pick( /obj/item/weapon/spacecash/c10,/obj/item/weapon/spacecash/c100,/obj/item/weapon/spacecash/c1000,/obj/item/weapon/spacecash/c20,/obj/item/weapon/spacecash/c200,/obj/item/weapon/spacecash/c50, /obj/item/weapon/spacecash/c500)
- var/item2_type
- if(prob(50))
- item2_type = pick( /obj/item/weapon/spacecash/c10,/obj/item/weapon/spacecash/c100,/obj/item/weapon/spacecash/c1000,/obj/item/weapon/spacecash/c20,/obj/item/weapon/spacecash/c200,/obj/item/weapon/spacecash/c50, /obj/item/weapon/spacecash/c500)
- var/item3_type = pick( /obj/item/weapon/coin/silver, /obj/item/weapon/coin/silver, /obj/item/weapon/coin/gold, /obj/item/weapon/coin/iron, /obj/item/weapon/coin/iron, /obj/item/weapon/coin/iron )
+ var/amount = rand(50, 100) + rand(50, 100) // Triangular distribution from 100 to 200
+ var/obj/item/weapon/spacecash/SC = null
+ for(var/i in list(100, 50, 20, 10, 5, 1))
+ if(amount < i)
+ continue
+ SC = new(src)
+ while(amount >= i)
+ amount -= i
+ SC.adjust_worth(i, 0)
+ SC.update_icon()
- spawn(2)
- if(item1_type)
- new item1_type(src)
- if(item2_type)
- new item2_type(src)
- if(item3_type)
- new item3_type(src)
+/obj/item/weapon/storage/wallet/poly
+ name = "polychromic wallet"
+ desc = "You can recolor it! Fancy! The future is NOW!"
+ icon_state = "wallet-white"
+
+/obj/item/weapon/storage/wallet/poly/New()
+ ..()
+ verbs |= /obj/item/weapon/storage/wallet/poly/proc/change_color
+ color = "#"+get_random_colour()
+ update_icon()
+
+/obj/item/weapon/storage/wallet/poly/proc/change_color()
+ set name = "Change Wallet Color"
+ set category = "Object"
+ set desc = "Change the color of the wallet."
+ set src in usr
+
+ if(usr.stat || usr.restrained() || usr.incapacitated())
+ return
+
+ var/new_color = input(usr, "Pick a new color", "Wallet Color", color) as color|null
+
+ if(new_color && (new_color != color))
+ color = new_color
+
+/obj/item/weapon/storage/wallet/poly/emp_act()
+ var/original_state = icon_state
+ icon_state = "wallet-emp"
+ update_icon()
+
+ spawn(200)
+ if(src)
+ icon_state = original_state
+ update_icon()
+
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm
index a4d771aa81..5e01c43e55 100644
--- a/code/game/objects/items/weapons/stunbaton.dm
+++ b/code/game/objects/items/weapons/stunbaton.dm
@@ -12,6 +12,7 @@
w_class = 3
origin_tech = list(TECH_COMBAT = 2)
attack_verb = list("beaten")
+ var/lightcolor = "#FF6A00"
var/stunforce = 0
var/agonyforce = 60
var/status = 0 //whether the thing is on or not
@@ -52,7 +53,7 @@
icon_state = "[initial(name)]"
if(icon_state == "[initial(name)]_active")
- set_light(1.5, 1, "#FF6A00")
+ set_light(1.5, 1, lightcolor)
else
set_light(0)
@@ -102,73 +103,52 @@
user << "[src] is out of charge. "
add_fingerprint(user)
-
/obj/item/weapon/melee/baton/attack(mob/M, mob/user)
if(status && (CLUMSY in user.mutations) && prob(50))
user << "You accidentally hit yourself with the [src]! "
user.Weaken(30)
deductcharge(hitcost)
return
+ return ..()
- if(isrobot(M))
- ..()
- return
+/obj/item/weapon/melee/baton/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone)
+ if(isrobot(target))
+ return ..()
var/agony = agonyforce
var/stun = stunforce
- var/mob/living/L = M
+ var/obj/item/organ/external/affecting = null
+ if(ishuman(target))
+ var/mob/living/carbon/human/H = target
+ affecting = H.get_organ(hit_zone)
- var/target_zone = check_zone(user.zone_sel.selecting)
- if(user.a_intent == I_HURT)
- if (!..()) //item/attack() does it's own messaging and logs
- return 0 // item/attack() will return 1 if they hit, 0 if they missed.
+ if(user.a_intent == I_HURT || user.a_intent == I_DISARM)
+ . = ..()
+ //whacking someone causes a much poorer electrical contact than deliberately prodding them.
+ agony *= 0.5
stun *= 0.5
- if(status) //Checks to see if the stunbaton is on.
- agony *= 0.5 //whacking someone causes a much poorer contact than prodding them.
+ else if(!status)
+ if(affecting)
+ target.visible_message("[target] has been prodded in the [affecting.name] with [src] by [user]. Luckily it was off. ")
else
- agony = 0 //Shouldn't really stun if it's off, should it?
- //we can't really extract the actual hit zone from ..(), unfortunately. Just act like they attacked the area they intended to.
+ target.visible_message("[target] has been prodded with [src] by [user]. Luckily it was off. ")
else
- //copied from human_defense.dm - human defence code should really be refactored some time.
- if (ishuman(L))
- user.lastattacked = L //are these used at all, if we have logs?
- L.lastattacker = user
-
- if (user != L) // Attacking yourself can't miss
- target_zone = get_zone_with_miss_chance(user.zone_sel.selecting, L)
-
- if(!target_zone)
- L.visible_message("\The [user] misses [L] with \the [src]! ")
- return 0
-
- var/mob/living/carbon/human/H = L
- var/obj/item/organ/external/affecting = H.get_organ(target_zone)
- if (affecting)
- if(!status)
- L.visible_message("[L] has been prodded in the [affecting.name] with [src] by [user]. Luckily it was off. ")
- return 1
- else
- H.visible_message("[L] has been prodded in the [affecting.name] with [src] by [user]! ")
+ if(affecting)
+ target.visible_message("[target] has been prodded in the [affecting.name] with [src] by [user]! ")
else
- if(!status)
- L.visible_message("[L] has been prodded with [src] by [user]. Luckily it was off. ")
- return 1
- else
- L.visible_message("[L] has been prodded with [src] by [user]! ")
+ target.visible_message("[target] has been prodded with [src] by [user]! ")
+ playsound(loc, 'sound/weapons/Egloves.ogg', 50, 1, -1)
//stun effects
- L.stun_effect_act(stun, agony, target_zone, src)
+ if(status)
+ target.stun_effect_act(stun, agony, hit_zone, src)
+ msg_admin_attack("[key_name(user)] stunned [key_name(target)] with the [src].")
- playsound(loc, 'sound/weapons/Egloves.ogg', 50, 1, -1)
- msg_admin_attack("[key_name(user)] stunned [key_name(L)] with the [src].")
+ deductcharge(hitcost)
- deductcharge(hitcost)
-
- if(ishuman(L))
- var/mob/living/carbon/human/H = L
- H.forcesay(hit_appends)
-
- return 1
+ if(ishuman(target))
+ var/mob/living/carbon/human/H = target
+ H.forcesay(hit_appends)
/obj/item/weapon/melee/baton/emp_act(severity)
if(bcell)
@@ -176,6 +156,9 @@
..()
//secborg stun baton module
+/obj/item/weapon/melee/baton/robot
+ hitcost = 500
+
/obj/item/weapon/melee/baton/robot/attack_self(mob/user)
//try to find our power cell
var/mob/living/silicon/robot/R = loc
diff --git a/code/game/objects/items/weapons/surgery_limbattachment.dm b/code/game/objects/items/weapons/surgery_limbattachment.dm
deleted file mode 100644
index 4ba10524f2..0000000000
--- a/code/game/objects/items/weapons/surgery_limbattachment.dm
+++ /dev/null
@@ -1,71 +0,0 @@
-/obj/item/robot_parts/attack(mob/living/carbon/human/M as mob, mob/living/carbon/user as mob)
- var/limbloc = null
-
- if(!istype(M))
- return ..()
-
- if(!((locate(/obj/machinery/optable, M.loc) && M.resting) || (locate(/obj/structure/bed/roller, M.loc) && (M.buckled || M.lying || M.weakened || M.stunned || M.paralysis || M.sleeping || M.stat)) && prob(75) || (locate(/obj/structure/table/, M.loc) && (M.lying || M.weakened || M.stunned || M.paralysis || M.sleeping || M.stat) && prob(66))))
- return ..()
-
- if(!istype(M, /mob/living/carbon/human))
- return ..()
-
- if((user.zone_sel.selecting == "l_arm") && (istype(src, /obj/item/robot_parts/l_arm)))
- limbloc = "l_hand"
- else if((user.zone_sel.selecting == "r_arm") && (istype(src, /obj/item/robot_parts/r_arm)))
- limbloc = "r_hand"
- else if((user.zone_sel.selecting == "r_leg") && (istype(src, /obj/item/robot_parts/r_leg)))
- limbloc = "r_foot"
- else if((user.zone_sel.selecting == "l_leg") && (istype(src, /obj/item/robot_parts/l_leg)))
- limbloc = "l_foot"
- else
- user << "That doesn't fit there! "
- return ..()
-
- var/mob/living/carbon/human/H = M
- var/datum/organ/external/S = H.organs[user.zone_sel.selecting]
- if(S.status & ORGAN_DESTROYED)
- if(!(S.status & ORGAN_ATTACHABLE))
- user << "The wound is not ready for a replacement! "
- return 0
- if(M != user)
- M.visible_message( \
- "\The [user] is beginning to attach \the [src] where [H]'s [S.display_name] used to be. ", \
- "\The [user] begins to attach \the [src] where your [S.display_name] used to be. ")
- else
- M.visible_message( \
- "\The [user] begins to attach a robotic limb where \his [S.display_name] used to be with [src]. ", \
- "You begin to attach \the [src] where your [S.display_name] used to be. ")
-
- if(do_mob(user, H, 100))
- if(M != user)
- M.visible_message( \
- "\The [user] finishes attaching [H]'s new [S.display_name]. ", \
- "\The [user] finishes attaching your new [S.display_name]. ")
- else
- M.visible_message( \
- "\The [user] finishes attaching \his new [S.display_name]. ", \
- "You finish attaching your new [S.display_name]. ")
-
- if(H == user && prob(25))
- user << "You mess up! "
- S.take_damage(15)
-
- S.status &= ~ORGAN_BROKEN
- S.status &= ~ORGAN_SPLINTED
- S.status &= ~ORGAN_ATTACHABLE
- S.status &= ~ORGAN_DESTROYED
- S.status |= ORGAN_ROBOT
- var/datum/organ/external/T = H.organs["[limbloc]"]
- T.status &= ~ORGAN_BROKEN
- T.status &= ~ORGAN_SPLINTED
- T.status &= ~ORGAN_ATTACHABLE
- T.status &= ~ORGAN_DESTROYED
- T.status |= ORGAN_ROBOT
- H.update_body()
- M.updatehealth()
- M.UpdateDamageIcon()
- qdel(src)
-
- return 1
- return 0
diff --git a/code/game/objects/items/weapons/swords_axes_etc.dm b/code/game/objects/items/weapons/swords_axes_etc.dm
index c773f3da38..b289e79257 100644
--- a/code/game/objects/items/weapons/swords_axes_etc.dm
+++ b/code/game/objects/items/weapons/swords_axes_etc.dm
@@ -1,18 +1,10 @@
/* Weapons
* Contains:
- * Banhammer
* Sword
* Classic Baton
*/
-/*
- * Banhammer
- */
-/obj/item/weapon/banhammer/attack(mob/M as mob, mob/user as mob)
- M << " You have been banned FOR NO REISIN by [user] "
- user << " You have BANNED [M] "
-
-/*
+/*
* Classic Baton
*/
/obj/item/weapon/melee/classic_baton
@@ -34,33 +26,7 @@
else
user.take_organ_damage(2*force)
return
-/*this is already called in ..()
- src.add_fingerprint(user)
- M.attack_log += text("\[[time_stamp()]\] Has been attacked with [src.name] by [user.name] ([user.ckey]) ")
- user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to attack [M.name] ([M.ckey]) ")
-
- log_attack("[user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)]) ")
-*/
- if (user.a_intent == I_HURT)
- if(!..()) return
- //playsound(src.loc, "swing_hit", 50, 1, -1)
- if (M.stuttering < 8 && (!(HULK in M.mutations)) /*&& (!istype(H:wear_suit, /obj/item/clothing/suit/judgerobe))*/)
- M.stuttering = 8
- M.Stun(8)
- M.Weaken(8)
- for(var/mob/O in viewers(M))
- if (O.client) O.show_message("\The [M] has been beaten with \the [src] by [user]! ", 1, "You hear someone fall ", 2)
- else
- playsound(src.loc, 'sound/weapons/Genhit.ogg', 50, 1, -1)
- M.Stun(5)
- M.Weaken(5)
- M.attack_log += text("\[[time_stamp()]\] Has been attacked with [src.name] by [user.name] ([user.ckey]) ")
- user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to attack [M.name] ([M.ckey]) ")
- msg_admin_attack("[key_name(user)] attacked [key_name(user)] with [src.name] (INTENT: [uppertext(user.a_intent)])")
- src.add_fingerprint(user)
-
- for(var/mob/O in viewers(M))
- if (O.client) O.show_message("\The [M] has been stunned with \the [src] by [user]! ", 1, "You hear someone fall ", 2)
+ return ..()
//Telescopic baton
/obj/item/weapon/melee/telebaton
diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm
index 0a5b1ec686..b7868cf7e0 100644
--- a/code/game/objects/items/weapons/tools.dm
+++ b/code/game/objects/items/weapons/tools.dm
@@ -46,6 +46,7 @@
throw_range = 5
matter = list(DEFAULT_WALL_MATERIAL = 75)
attack_verb = list("stabbed")
+ sharp = 1
suicide_act(mob/user)
viewers(user) << pick("\The [user] is stabbing the [src.name] into \his temple! It looks like \he's trying to commit suicide. ", \
@@ -78,7 +79,7 @@
if (prob(75))
src.pixel_y = rand(0, 16)
- return
+ ..()
/obj/item/weapon/screwdriver/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
if(!istype(M) || user.a_intent == "help")
@@ -113,9 +114,10 @@
if(prob(50))
icon_state = "cutters-y"
item_state = "cutters_yellow"
+ ..()
/obj/item/weapon/wirecutters/attack(mob/living/carbon/C as mob, mob/user as mob)
- if((C.handcuffed) && (istype(C.handcuffed, /obj/item/weapon/handcuffs/cable)))
+ if(user.a_intent == I_HELP && (C.handcuffed) && (istype(C.handcuffed, /obj/item/weapon/handcuffs/cable)))
usr.visible_message("\The [usr] cuts \the [C]'s restraints with \the [src]!",\
"You cut \the [C]'s restraints with \the [src]!",\
"You hear cable being cut.")
@@ -161,19 +163,19 @@
reagents = R
R.my_atom = src
R.add_reagent("fuel", max_fuel)
- return
+ ..()
/obj/item/weapon/weldingtool/Destroy()
if(welding)
processing_objects -= src
- ..()
+ return ..()
/obj/item/weapon/weldingtool/examine(mob/user)
if(..(user, 0))
user << text("\icon[] [] contains []/[] units of fuel!", src, src.name, get_fuel(),src.max_fuel )
-/obj/item/weapon/weldingtool/attackby(obj/item/W as obj, mob/user as mob)
+/obj/item/weapon/weldingtool/attackby(obj/item/W as obj, mob/living/user as mob)
if(istype(W,/obj/item/weapon/screwdriver))
if(welding)
user << "Stop welding first! "
@@ -222,9 +224,9 @@
//I'm not sure what this does. I assume it has to do with starting fires...
//...but it doesnt check to see if the welder is on or not.
var/turf/location = src.loc
- if(istype(location, /mob/))
- var/mob/M = location
- if(M.l_hand == src || M.r_hand == src)
+ if(istype(location, /mob/living))
+ var/mob/living/M = location
+ if(M.item_is_in_hands(src))
location = get_turf(M)
if (istype(location, /turf))
location.hotspot_expose(700, 5)
@@ -427,21 +429,18 @@
var/mob/living/carbon/human/H = A
var/obj/item/organ/external/S = H.organs_by_name[user.zone_sel.selecting]
- if(!S || !(S.status & ORGAN_ROBOT))
+ if(!S || S.robotic < ORGAN_ROBOT || S.open == 3)
return ..()
- if(S.brute_dam)
- if(S.brute_dam < ROBOLIMB_SELF_REPAIR_CAP)
- S.heal_damage(15,0,0,1)
- user.visible_message("\The [user] patches some dents on \the [H]'s [S.name] with \the [src]. ")
- else if(S.open < 3)
- user << "The damage is far too severe to patch over externally. "
- else
- return ..()
- else
- user << "Nothing to fix! "
- return
- return ..()
+ if(!welding)
+ user << "You'll need to turn [src] on to patch the damage on [H]'s [S.name]! "
+ return 1
+
+ if(S.robo_repair(15, BRUTE, "some dents", src, user))
+ remove_fuel(1, user)
+
+ else
+ return ..()
/*/obj/item/weapon/combitool
name = "combi-tool"
diff --git a/code/game/objects/items/weapons/towels.dm b/code/game/objects/items/weapons/towels.dm
new file mode 100644
index 0000000000..d51cc8d1d0
--- /dev/null
+++ b/code/game/objects/items/weapons/towels.dm
@@ -0,0 +1,18 @@
+/obj/item/weapon/towel
+ name = "towel"
+ icon = 'icons/obj/weapons.dmi'
+ icon_state = "towel"
+ slot_flags = SLOT_HEAD | SLOT_BELT | SLOT_OCLOTHING
+ force = 3.0
+ w_class = 3.0
+ attack_verb = list("whipped")
+ hitsound = 'sound/weapons/towelwhip.ogg'
+ desc = "A soft cotton towel."
+
+/obj/item/weapon/towel/attack_self(mob/living/user as mob)
+ user.visible_message(text("[] uses [] to towel themselves off. ", user, src))
+ playsound(user, 'sound/weapons/towelwipe.ogg', 25, 1)
+
+/obj/item/weapon/towel/random/New()
+ ..()
+ color = "#"+get_random_colour()
\ 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 35302dc5dc..0f5cebc44d 100644
--- a/code/game/objects/items/weapons/weaponry.dm
+++ b/code/game/objects/items/weapons/weaponry.dm
@@ -1,18 +1,3 @@
-/obj/item/weapon/banhammer
- desc = "banhammer"
- name = "banhammer"
- icon = 'icons/obj/items.dmi'
- icon_state = "toyhammer"
- slot_flags = SLOT_BELT
- throwforce = 0
- w_class = 2.0
- throw_speed = 7
- throw_range = 15
- attack_verb = list("banned")
-
- suicide_act(mob/user)
- viewers(user) << "[user] is hitting \himself with the [src.name]! It looks like \he's trying to ban \himself from life. "
- return (BRUTELOSS|FIRELOSS|TOXLOSS|OXYLOSS)
/obj/item/weapon/nullrod
name = "null rod"
@@ -37,6 +22,9 @@
msg_admin_attack("[user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)]) (JMP )")
+ user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
+ user.do_attack_animation(M)
+
if (!(istype(user, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey")
user << "You don't have the dexterity to do this! "
return
@@ -68,27 +56,6 @@
user << "You hit the floor with the [src]. "
call(/obj/effect/rune/proc/revealrunes)(src)
-/obj/item/weapon/sord
- name = "\improper SORD"
- desc = "This thing is so unspeakably shitty you are having a hard time even holding it."
- icon_state = "sord"
- item_state = "sord"
- slot_flags = SLOT_BELT
- force = 2
- throwforce = 1
- sharp = 1
- edge = 1
- w_class = 3
- attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
-
- suicide_act(mob/user)
- viewers(user) << "[user] is impaling \himself with the [src.name]! It looks like \he's trying to commit suicide. "
- return(BRUTELOSS)
-
-/obj/item/weapon/sord/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
- playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1)
- return ..()
-
/obj/item/weapon/energy_net
name = "energy net"
desc = "It's a net made of green energy."
diff --git a/code/game/objects/items/weapons/wires.dm b/code/game/objects/items/weapons/wires.dm
deleted file mode 100644
index 0a70fdbe1c..0000000000
--- a/code/game/objects/items/weapons/wires.dm
+++ /dev/null
@@ -1,18 +0,0 @@
-// WIRES
-
-/obj/item/weapon/wire/proc/update()
- if (src.amount > 1)
- src.icon_state = "spool_wire"
- src.desc = text("This is just spool of regular insulated wire. It consists of about [] unit\s of wire.", src.amount)
- else
- src.icon_state = "item_wire"
- src.desc = "This is just a simple piece of regular insulated wire."
- return
-
-/obj/item/weapon/wire/attack_self(mob/user as mob)
- if (src.laying)
- src.laying = 0
- user << "You're done laying wire! "
- else
- user << "You are not using this to lay wire... "
- return
diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm
index cf851e0b3a..63c3ff61b1 100644
--- a/code/game/objects/objs.dm
+++ b/code/game/objects/objs.dm
@@ -2,16 +2,13 @@
//Used to store information about the contents of the object.
var/list/matter
var/w_class // Size of the object.
- var/list/origin_tech = null //Used by R&D to determine what research bonuses it grants.
var/unacidable = 0 //universal "unacidabliness" var, here so you can use it in any obj.
animate_movement = 2
var/throwforce = 1
- var/list/attack_verb = list() //Used in attackby() to say how something was attacked "[x] has been [z.attack_verb] by [y] with [z]"
var/sharp = 0 // whether this object cuts
var/edge = 0 // whether this object is more likely to dismember
var/in_use = 0 // If we have a user using us, this will be set on. We will check if the user has stopped using us, and thus stop updating and LAGGING EVERYTHING!
var/damtype = "brute"
- var/force = 0
var/armor_penetration = 0
var/show_messages
@@ -93,11 +90,12 @@
// check for TK users
if (istype(usr, /mob/living/carbon/human))
- if(istype(usr.l_hand, /obj/item/tk_grab) || istype(usr.r_hand, /obj/item/tk_grab/))
- if(!(usr in nearby))
- if(usr.client && usr.machine==src)
+ var/mob/living/carbon/human/H = usr
+ if(H.get_type_in_hands(/obj/item/tk_grab))
+ if(!(H in nearby))
+ if(H.client && H.machine==src)
is_in_use = 1
- src.attack_hand(usr)
+ src.attack_hand(H)
in_use = is_in_use
/obj/proc/updateDialog()
diff --git a/code/game/objects/random/random.dm b/code/game/objects/random/random.dm
index e64d422a20..fc6615fcf0 100644
--- a/code/game/objects/random/random.dm
+++ b/code/game/objects/random/random.dm
@@ -11,8 +11,10 @@
..()
if (!prob(spawn_nothing_percentage))
spawn_item()
- qdel(src)
+/obj/random/initialize()
+ ..()
+ qdel(src)
// this function should return a specific item to spawn
/obj/random/proc/item_to_spawn()
@@ -108,7 +110,7 @@
prob(2);/obj/random/bomb_supply,\
prob(1);/obj/item/weapon/extinguisher,\
prob(1);/obj/item/clothing/gloves/fyellow,\
- prob(3);/obj/item/stack/cable_coil,\
+ prob(3);/obj/item/stack/cable_coil/random,\
prob(2);/obj/random/toolbox,\
prob(2);/obj/item/weapon/storage/belt/utility,\
prob(5);/obj/random/tool,\
diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm
index 68c774c91f..2712d6de79 100644
--- a/code/game/objects/structures.dm
+++ b/code/game/objects/structures.dm
@@ -102,7 +102,7 @@
usr.visible_message("[user] starts climbing onto \the [src]! ")
climbers |= user
- if(!do_after(user,(issmall(user) ? 30 : 50)))
+ if(!do_after(user,(issmall(user) ? 20 : 34)))
climbers -= user
return
diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm
index 23d819afa0..375c6727ea 100644
--- a/code/game/objects/structures/bedsheet_bin.dm
+++ b/code/game/objects/structures/bedsheet_bin.dm
@@ -10,6 +10,7 @@ LINEN BINS
icon = 'icons/obj/items.dmi'
icon_state = "sheet"
item_state = "bedsheet"
+ slot_flags = SLOT_BACK
layer = 4.0
throwforce = 1
throw_speed = 1
@@ -19,7 +20,7 @@ LINEN BINS
/obj/item/weapon/bedsheet/attack_self(mob/user as mob)
user.drop_item()
if(layer == initial(layer))
- layer = 5
+ layer = MOB_LAYER + 0.1
else
layer = initial(layer)
add_fingerprint(user)
@@ -38,51 +39,139 @@ LINEN BINS
/obj/item/weapon/bedsheet/blue
icon_state = "sheetblue"
+ item_state = "sheetblue"
/obj/item/weapon/bedsheet/green
icon_state = "sheetgreen"
+ item_state = "sheetgreen"
/obj/item/weapon/bedsheet/orange
icon_state = "sheetorange"
+ item_state = "sheetorange"
/obj/item/weapon/bedsheet/purple
icon_state = "sheetpurple"
+ item_state = "sheetpurple"
/obj/item/weapon/bedsheet/rainbow
icon_state = "sheetrainbow"
+ item_state = "sheetrainbow"
/obj/item/weapon/bedsheet/red
icon_state = "sheetred"
+ item_state = "sheetred"
/obj/item/weapon/bedsheet/yellow
icon_state = "sheetyellow"
+ item_state = "sheetyellow"
/obj/item/weapon/bedsheet/mime
icon_state = "sheetmime"
+ item_state = "sheetmime"
/obj/item/weapon/bedsheet/clown
icon_state = "sheetclown"
+ item_state = "sheetclown"
/obj/item/weapon/bedsheet/captain
icon_state = "sheetcaptain"
+ item_state = "sheetcaptain"
/obj/item/weapon/bedsheet/rd
icon_state = "sheetrd"
+ item_state = "sheetrd"
/obj/item/weapon/bedsheet/medical
icon_state = "sheetmedical"
+ item_state = "sheetmedical"
/obj/item/weapon/bedsheet/hos
icon_state = "sheethos"
+ item_state = "sheethos"
/obj/item/weapon/bedsheet/hop
icon_state = "sheethop"
+ item_state = "sheethop"
/obj/item/weapon/bedsheet/ce
icon_state = "sheetce"
+ item_state = "sheetce"
/obj/item/weapon/bedsheet/brown
icon_state = "sheetbrown"
+ item_state = "sheetbrown"
+
+/obj/item/weapon/bedsheet/ian
+ icon_state = "sheetian"
+ item_state = "bedsheet"
+
+/obj/item/weapon/bedsheet/double
+ icon_state = "doublesheet"
+ item_state = "bedsheet"
+
+/obj/item/weapon/bedsheet/bluedouble
+ icon_state = "doublesheetblue"
+ item_state = "sheetblue"
+
+/obj/item/weapon/bedsheet/greendouble
+ icon_state = "doublesheetgreen"
+ item_state = "sheetgreen"
+
+/obj/item/weapon/bedsheet/orangedouble
+ icon_state = "doublesheetorange"
+ item_state = "sheetorange"
+
+/obj/item/weapon/bedsheet/purpledouble
+ icon_state = "doublesheetpurple"
+ item_state = "sheetpurple"
+
+/obj/item/weapon/bedsheet/doublerainbow //all the way across the sky.
+ icon_state = "doublesheetrainbow"
+ item_state = "sheetrainbow"
+
+/obj/item/weapon/bedsheet/doublered
+ icon_state = "doublesheetred"
+ item_state = "sheetred"
+
+/obj/item/weapon/bedsheet/doubleyellow
+ icon_state = "doublesheetyellow"
+ item_state = "sheetyellow"
+
+/obj/item/weapon/bedsheet/doublemime
+ icon_state = "doublesheetmime"
+ item_state = "sheetmime"
+
+/obj/item/weapon/bedsheet/doubleclown
+ icon_state = "doublesheetclown"
+ item_state = "sheetclown"
+
+/obj/item/weapon/bedsheet/doublecaptain
+ icon_state = "doublesheetcaptain"
+ item_state = "sheetcaptain"
+
+/obj/item/weapon/bedsheet/doublerd
+ icon_state = "doublesheetrd"
+ item_state = "sheetrd"
+
+/obj/item/weapon/bedsheet/doublehos
+ icon_state = "doublesheethos"
+ item_state = "sheethos"
+
+/obj/item/weapon/bedsheet/doublehop
+ icon_state = "doublesheethop"
+ item_state = "sheethop"
+
+/obj/item/weapon/bedsheet/doublece
+ icon_state = "doublesheetce"
+ item_state = "sheetce"
+
+/obj/item/weapon/bedsheet/doublebrown
+ icon_state = "doublesheetbrown"
+ item_state = "sheetbrown"
+
+/obj/item/weapon/bedsheet/doubleian
+ icon_state = "doublesheetian"
+ item_state = "bedsheet"
/obj/structure/bedsheetbin
diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm
index 5029e166d2..d88e8c5372 100644
--- a/code/game/objects/structures/crates_lockers/closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets.dm
@@ -247,6 +247,16 @@
src.update_icon()
for(var/mob/M in viewers(src))
M.show_message("[src] has been [welded?"welded shut":"unwelded"] by [user.name]. ", 3, "You hear welding.", 2)
+ else if(istype(W, /obj/item/weapon/wrench))
+ if(welded)
+ if(anchored)
+ user.visible_message("\The [user] begins unsecuring \the [src] from the floor.", "You start unsecuring \the [src] from the floor.")
+ else
+ user.visible_message("\The [user] begins securing \the [src] to the floor.", "You start securing \the [src] to the floor.")
+ if(do_after(user, 20))
+ if(!src) return
+ user << "You [anchored? "un" : ""]secured \the [src]! "
+ anchored = !anchored
else
src.attack_hand(user)
return
diff --git a/code/game/objects/structures/crates_lockers/closets/job_closets.dm b/code/game/objects/structures/crates_lockers/closets/job_closets.dm
index 390830e829..ff15bb0a6c 100644
--- a/code/game/objects/structures/crates_lockers/closets/job_closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets/job_closets.dm
@@ -79,6 +79,7 @@
new /obj/item/weapon/caution(src)
new /obj/item/device/lightreplacer(src)
new /obj/item/weapon/storage/bag/trash(src)
+ new /obj/item/weapon/storage/belt/janitor(src)
new /obj/item/clothing/shoes/galoshes(src)
/*
@@ -114,3 +115,7 @@
new /obj/item/clothing/shoes/black(src)
new /obj/item/clothing/shoes/laceup(src)
new /obj/item/clothing/shoes/laceup(src)
+ new /obj/item/clothing/glasses/sunglasses/big(src)
+ new /obj/item/clothing/glasses/sunglasses/big(src)
+ new /obj/item/clothing/under/lawyer/blue(src)
+ new /obj/item/clothing/under/lawyer/blue(src)
\ No newline at end of file
diff --git a/code/game/objects/structures/crates_lockers/closets/l3closet.dm b/code/game/objects/structures/crates_lockers/closets/l3closet.dm
index 4f52278a9c..1b4b27b196 100644
--- a/code/game/objects/structures/crates_lockers/closets/l3closet.dm
+++ b/code/game/objects/structures/crates_lockers/closets/l3closet.dm
@@ -12,8 +12,8 @@
/obj/structure/closet/l3closet/general/New()
..()
- new /obj/item/clothing/suit/bio_suit/general( src )
- new /obj/item/clothing/head/bio_hood/general( src )
+ new /obj/item/clothing/suit/bio_suit/general(src)
+ new /obj/item/clothing/head/bio_hood/general(src)
/obj/structure/closet/l3closet/virology
@@ -23,9 +23,9 @@
/obj/structure/closet/l3closet/virology/New()
..()
- new /obj/item/clothing/suit/bio_suit/virology( src )
- new /obj/item/clothing/head/bio_hood/virology( src )
- new /obj/item/clothing/mask/breath(src)
+ new /obj/item/clothing/suit/bio_suit/virology(src)
+ new /obj/item/clothing/head/bio_hood/virology(src)
+ new /obj/item/clothing/mask/gas(src)
new /obj/item/weapon/tank/oxygen(src)
@@ -36,8 +36,8 @@
/obj/structure/closet/l3closet/security/New()
..()
- new /obj/item/clothing/suit/bio_suit/security( src )
- new /obj/item/clothing/head/bio_hood/security( src )
+ new /obj/item/clothing/suit/bio_suit/security(src)
+ new /obj/item/clothing/head/bio_hood/security(src)
/obj/structure/closet/l3closet/janitor
@@ -47,8 +47,14 @@
/obj/structure/closet/l3closet/janitor/New()
..()
- new /obj/item/clothing/suit/bio_suit/janitor( src )
- new /obj/item/clothing/head/bio_hood/janitor( src )
+ new /obj/item/clothing/suit/bio_suit/janitor(src)
+ new /obj/item/clothing/suit/bio_suit/janitor(src)
+ new /obj/item/clothing/head/bio_hood/janitor(src)
+ new /obj/item/clothing/head/bio_hood/janitor(src)
+ new /obj/item/clothing/mask/gas(src)
+ new /obj/item/clothing/mask/gas(src)
+ new /obj/item/weapon/tank/emergency_oxygen/engi(src)
+ new /obj/item/weapon/tank/emergency_oxygen/engi(src)
/obj/structure/closet/l3closet/scientist
@@ -58,5 +64,23 @@
/obj/structure/closet/l3closet/scientist/New()
..()
- new /obj/item/clothing/suit/bio_suit/scientist( src )
- new /obj/item/clothing/head/bio_hood/scientist( src )
+ new /obj/item/clothing/suit/bio_suit/scientist(src)
+ new /obj/item/clothing/head/bio_hood/scientist(src)
+
+
+/obj/structure/closet/l3closet/medical
+ icon_state = "bio_scientist"
+ icon_closed = "bio_scientist"
+ icon_opened = "bio_scientistopen"
+
+/obj/structure/closet/l3closet/medical/New()
+ ..()
+ new /obj/item/clothing/suit/bio_suit/general(src)
+ new /obj/item/clothing/suit/bio_suit/general(src)
+ new /obj/item/clothing/suit/bio_suit/general(src)
+ new /obj/item/clothing/head/bio_hood/general(src)
+ new /obj/item/clothing/head/bio_hood/general(src)
+ new /obj/item/clothing/head/bio_hood/general(src)
+ new /obj/item/clothing/mask/gas(src)
+ new /obj/item/clothing/mask/gas(src)
+ new /obj/item/clothing/mask/gas(src)
\ No newline at end of file
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm
index cc18681294..c7095514cc 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm
@@ -13,7 +13,7 @@
if(prob(75))
new /obj/item/weapon/storage/backpack(src)
else
- new /obj/item/weapon/storage/backpack/satchel_norm(src)
+ new /obj/item/weapon/storage/backpack/satchel/norm(src)
if(prob(25))
new /obj/item/weapon/storage/backpack/dufflebag(src)
new /obj/item/clothing/under/rank/cargotech(src)
@@ -44,7 +44,7 @@
if(prob(75))
new /obj/item/weapon/storage/backpack(src)
else
- new /obj/item/weapon/storage/backpack/satchel_norm(src)
+ new /obj/item/weapon/storage/backpack/satchel/norm(src)
if(prob(25))
new /obj/item/weapon/storage/backpack/dufflebag(src)
new /obj/item/clothing/under/rank/cargo(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
index bd2b216888..35a9b55438 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
@@ -14,16 +14,13 @@
if(prob(50))
new /obj/item/weapon/storage/backpack/industrial(src)
else
- new /obj/item/weapon/storage/backpack/satchel_eng(src)
+ new /obj/item/weapon/storage/backpack/satchel/eng(src)
if(prob(50))
new /obj/item/weapon/storage/backpack/dufflebag/eng(src)
- if (prob(70))
- new /obj/item/clothing/accessory/storage/brown_vest(src)
- else
- new /obj/item/clothing/accessory/storage/webbing(src)
+ new /obj/item/clothing/accessory/storage/brown_vest(src)
new /obj/item/blueprints(src)
new /obj/item/clothing/under/rank/chief_engineer(src)
- new /obj/item/clothing/under/rank/chief_engineer/skirt(src)
+ new /obj/item/clothing/under/rank/engineer/chief_engineer/skirt(src)
new /obj/item/clothing/head/hardhat/white(src)
new /obj/item/clothing/head/welding(src)
new /obj/item/clothing/gloves/yellow(src)
@@ -38,6 +35,7 @@
new /obj/item/device/flash(src)
new /obj/item/taperoll/engineering(src)
new /obj/item/clothing/suit/storage/hooded/wintercoat/engineering(src)
+ new /obj/item/weapon/tank/emergency_oxygen/engi(src)
return
@@ -92,6 +90,9 @@
new /obj/item/weapon/weldpack(src)
new /obj/item/weapon/weldpack(src)
new /obj/item/weapon/weldpack(src)
+ new /obj/item/clothing/glasses/welding(src)
+ new /obj/item/clothing/glasses/welding(src)
+ new /obj/item/clothing/glasses/welding(src)
return
@@ -112,13 +113,10 @@
if(prob(50))
new /obj/item/weapon/storage/backpack/industrial(src)
else
- new /obj/item/weapon/storage/backpack/satchel_eng(src)
+ new /obj/item/weapon/storage/backpack/satchel/eng(src)
if(prob(50))
new /obj/item/weapon/storage/backpack/dufflebag/eng(src)
- if (prob(70))
- new /obj/item/clothing/accessory/storage/brown_vest(src)
- else
- new /obj/item/clothing/accessory/storage/webbing(src)
+ new /obj/item/clothing/accessory/storage/brown_vest(src)
new /obj/item/weapon/storage/toolbox/mechanical(src)
new /obj/item/device/radio/headset/headset_eng(src)
new /obj/item/device/radio/headset/headset_eng/alt(src)
@@ -128,7 +126,11 @@
new /obj/item/weapon/cartridge/engineering(src)
new /obj/item/taperoll/engineering(src)
new /obj/item/clothing/suit/storage/hooded/wintercoat/engineering(src)
+ new /obj/item/weapon/tank/emergency_oxygen/engi(src)
return
+
+
+
/obj/structure/closet/secure_closet/atmos_personal
name = "technician's locker"
req_access = list(access_atmospherics)
@@ -145,13 +147,10 @@
if(prob(50))
new /obj/item/weapon/storage/backpack/industrial(src)
else
- new /obj/item/weapon/storage/backpack/satchel_eng(src)
+ new /obj/item/weapon/storage/backpack/satchel/eng(src)
if(prob(50))
new /obj/item/weapon/storage/backpack/dufflebag/eng(src)
- if (prob(70))
- new /obj/item/clothing/accessory/storage/brown_vest(src)
- else
- new /obj/item/clothing/accessory/storage/webbing(src)
+ new /obj/item/clothing/accessory/storage/brown_vest(src)
new /obj/item/clothing/suit/fire/firefighter(src)
new /obj/item/device/flashlight(src)
new /obj/item/weapon/extinguisher(src)
@@ -162,4 +161,5 @@
new /obj/item/weapon/cartridge/atmos(src)
new /obj/item/taperoll/atmos(src)
new /obj/item/clothing/suit/storage/hooded/wintercoat/engineering/atmos(src)
+ new /obj/item/weapon/tank/emergency_oxygen/engi(src)
return
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm
index 0722b5b077..62401902b6 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm
@@ -18,11 +18,10 @@
New()
..()
- for(var/i = 0, i < 6, i++)
+ for(var/i = 1 to 7)
new /obj/item/weapon/reagent_containers/food/condiment/flour(src)
- new /obj/item/weapon/reagent_containers/food/condiment/sugar(src)
- for(var/i = 0, i < 3, i++)
- new /obj/item/weapon/reagent_containers/food/snacks/meat/monkey(src)
+ for(var/i = 1 to 2)
+ new /obj/item/weapon/reagent_containers/food/condiment/sugar(src)
return
@@ -43,7 +42,7 @@
New()
..()
- for(var/i = 0, i < 4, i++)
+ for(var/i = 1 to 10)
new /obj/item/weapon/reagent_containers/food/snacks/meat/monkey(src)
return
@@ -61,11 +60,11 @@
New()
..()
- for(var/i = 0, i < 5, i++)
+ for(var/i = 1 to 6)
new /obj/item/weapon/reagent_containers/food/drinks/milk(src)
- for(var/i = 0, i < 3, i++)
+ for(var/i = 1 to 4)
new /obj/item/weapon/reagent_containers/food/drinks/soymilk(src)
- for(var/i = 0, i < 2, i++)
+ for(var/i = 1 to 4)
new /obj/item/weapon/storage/fancy/egg_box(src)
return
@@ -84,10 +83,10 @@
New()
..()
- for(var/i = 0, i < 3, i++)
+ for(var/i = 1 to 3)
new /obj/item/weapon/spacecash/c1000(src)
- for(var/i = 0, i < 5, i++)
+ for(var/i = 1 to 4)
new /obj/item/weapon/spacecash/c500(src)
- for(var/i = 0, i < 6, i++)
+ for(var/i = 1 to 5)
new /obj/item/weapon/spacecash/c200(src)
return
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm
index 23e9eaa98d..95d4fd3d06 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm
@@ -65,12 +65,12 @@
if(prob(50))
new /obj/item/weapon/storage/backpack/medic(src)
else
- new /obj/item/weapon/storage/backpack/satchel_med(src)
+ new /obj/item/weapon/storage/backpack/satchel/med(src)
if(prob(50))
new /obj/item/weapon/storage/backpack/dufflebag/med(src)
new /obj/item/clothing/under/rank/nursesuit (src)
new /obj/item/clothing/head/nursehat (src)
- switch(pick("blue", "green", "purple", "black"))
+ switch(pick("blue", "green", "purple", "black", "navyblue"))
if ("blue")
new /obj/item/clothing/under/rank/medical/blue(src)
new /obj/item/clothing/head/surgery/blue(src)
@@ -83,7 +83,10 @@
if ("black")
new /obj/item/clothing/under/rank/medical/black(src)
new /obj/item/clothing/head/surgery/black(src)
- switch(pick("blue", "green", "purple", "black"))
+ if ("navyblue")
+ new /obj/item/clothing/under/rank/medical/navyblue(src)
+ new /obj/item/clothing/head/surgery/navyblue(src)
+ switch(pick("blue", "green", "purple", "black", "navyblue"))
if ("blue")
new /obj/item/clothing/under/rank/medical/blue(src)
new /obj/item/clothing/head/surgery/blue(src)
@@ -96,6 +99,9 @@
if ("black")
new /obj/item/clothing/under/rank/medical/black(src)
new /obj/item/clothing/head/surgery/black(src)
+ if ("navyblue")
+ new /obj/item/clothing/under/rank/medical/navyblue(src)
+ new /obj/item/clothing/head/surgery/navyblue(src)
new /obj/item/clothing/under/rank/medical(src)
new /obj/item/clothing/under/rank/nurse(src)
new /obj/item/clothing/under/rank/orderly(src)
@@ -125,6 +131,7 @@
New()
..()
+ new /obj/item/weapon/storage/backpack/dufflebag/emt(src)
new /obj/item/weapon/storage/box/autoinjectors(src)
new /obj/item/weapon/storage/box/syringes(src)
new /obj/item/weapon/reagent_containers/glass/bottle/inaprovaline(src)
@@ -144,6 +151,7 @@
new /obj/item/weapon/crowbar(src)
new /obj/item/weapon/extinguisher/mini(src)
new /obj/item/weapon/storage/box/freezer(src)
+ new /obj/item/clothing/accessory/storage/white_vest(src)
return
/obj/structure/closet/secure_closet/CMO
@@ -161,13 +169,13 @@
if(prob(50))
new /obj/item/weapon/storage/backpack/medic(src)
else
- new /obj/item/weapon/storage/backpack/satchel_med(src)
+ new /obj/item/weapon/storage/backpack/satchel/med(src)
if(prob(50))
new /obj/item/weapon/storage/backpack/dufflebag/med(src)
new /obj/item/clothing/suit/bio_suit/cmo(src)
new /obj/item/clothing/head/bio_hood/cmo(src)
new /obj/item/clothing/shoes/white(src)
- switch(pick("blue", "green", "purple", "black"))
+ switch(pick("blue", "green", "purple", "black", "navyblue"))
if ("blue")
new /obj/item/clothing/under/rank/medical/blue(src)
new /obj/item/clothing/head/surgery/blue(src)
@@ -180,8 +188,11 @@
if ("black")
new /obj/item/clothing/under/rank/medical/black(src)
new /obj/item/clothing/head/surgery/black(src)
+ if ("navyblue")
+ new /obj/item/clothing/under/rank/medical/navyblue(src)
+ new /obj/item/clothing/head/surgery/navyblue(src)
new /obj/item/clothing/under/rank/chief_medical_officer(src)
- new /obj/item/clothing/under/rank/chief_medical_officer/skirt(src)
+ new /obj/item/clothing/under/rank/medical/chief_medical_officer/skirt(src)
new /obj/item/clothing/suit/storage/toggle/labcoat/cmo(src)
new /obj/item/clothing/suit/storage/toggle/labcoat/cmoalt(src)
new /obj/item/weapon/cartridge/cmo(src)
@@ -193,6 +204,7 @@
new /obj/item/weapon/reagent_containers/hypospray(src)
new /obj/item/clothing/suit/storage/hooded/wintercoat/medical(src)
new /obj/item/weapon/storage/box/freezer(src)
+ new /obj/item/clothing/mask/gas(src)
return
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm
index d91b22fe74..2930b8c0a0 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm
@@ -10,7 +10,7 @@
if(prob(50))
new /obj/item/weapon/storage/backpack(src)
else
- new /obj/item/weapon/storage/backpack/satchel_norm(src)
+ new /obj/item/weapon/storage/backpack/satchel/norm(src)
new /obj/item/device/radio/headset( src )
return
@@ -94,7 +94,7 @@
else
user << "Access Denied "
return
-
+
/obj/structure/closet/secure_closet/personal/emag_act(var/remaining_charges, var/mob/user, var/visual_feedback, var/audible_feedback)
if(!broken)
broken = 1
@@ -102,7 +102,7 @@
desc = "It appears to be broken."
icon_state = src.icon_broken
if(visual_feedback)
- visible_message("[visual_feedback] ", "[audible_feedback] ")
+ visible_message("[visual_feedback] ", "[audible_feedback] ")
return 1
/obj/structure/closet/secure_closet/personal/verb/reset()
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm
index 1ce97a64a7..49fe7bbdd3 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm
@@ -87,6 +87,17 @@
spark_system.start()
playsound(src.loc, 'sound/weapons/blade1.ogg', 50, 1)
playsound(src.loc, "sparks", 50, 1)
+ else if(istype(W, /obj/item/weapon/wrench))
+ if(welded)
+ if(anchored)
+ user.visible_message("\The [user] begins unsecuring \the [src] from the floor.", "You start unsecuring \the [src] from the floor.")
+ else
+ user.visible_message("\The [user] begins securing \the [src] to the floor.", "You start securing \the [src] to the floor.")
+ if(do_after(user, 20))
+ if(!src) return
+ user << "You [anchored? "un" : ""]secured \the [src]! "
+ anchored = !anchored
+ return
else if(istype(W,/obj/item/weapon/packageWrap) || istype(W,/obj/item/weapon/weldingtool))
return ..(W,user)
else
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
index fcbe9e9060..6aa1ee66f6 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
@@ -10,31 +10,16 @@
New()
..()
- if(prob(50))
- new /obj/item/weapon/storage/backpack/captain(src)
- else
- new /obj/item/weapon/storage/backpack/satchel_cap(src)
- if(prob(50))
- new /obj/item/weapon/storage/backpack/dufflebag/captain(src)
- new /obj/item/clothing/suit/captunic(src)
- new /obj/item/clothing/suit/captunic/capjacket(src)
- new /obj/item/clothing/head/caphat/cap(src)
- new /obj/item/clothing/under/rank/captain(src)
+ new /obj/item/weapon/storage/backpack/dufflebag/captain(src)
new /obj/item/clothing/suit/storage/vest(src)
new /obj/item/weapon/cartridge/captain(src)
new /obj/item/clothing/head/helmet/swat(src)
new /obj/item/weapon/storage/lockbox/medal(src)
- new /obj/item/clothing/shoes/brown(src)
new /obj/item/device/radio/headset/heads/captain(src)
new /obj/item/device/radio/headset/heads/captain/alt(src)
- new /obj/item/clothing/gloves/captain(src)
new /obj/item/weapon/gun/energy/gun(src)
new /obj/item/clothing/suit/armor/captain(src)
new /obj/item/weapon/melee/telebaton(src)
- new /obj/item/clothing/under/dress/dress_cap(src)
- new /obj/item/clothing/head/caphat/formal(src)
- new /obj/item/clothing/under/captainformal(src)
- new /obj/item/clothing/suit/storage/hooded/wintercoat/captain(src)
return
@@ -51,7 +36,6 @@
New()
..()
- new /obj/item/clothing/glasses/sunglasses(src)
new /obj/item/clothing/suit/storage/vest(src)
new /obj/item/clothing/head/helmet(src)
new /obj/item/weapon/cartridge/hop(src)
@@ -89,6 +73,8 @@
new /obj/item/clothing/shoes/white(src)
new /obj/item/clothing/under/rank/head_of_personnel_whimsy(src)
new /obj/item/clothing/head/caphat/hop(src)
+ new /obj/item/clothing/under/gimmick/rank/head_of_personnel/suit(src)
+ new /obj/item/clothing/glasses/sunglasses(src)
return
@@ -102,13 +88,14 @@
icon_opened = "hossecureopen"
icon_broken = "hossecurebroken"
icon_off = "hossecureoff"
+ storage_capacity = 2.5 * MOB_MEDIUM
New()
..()
if(prob(50))
new /obj/item/weapon/storage/backpack/security(src)
else
- new /obj/item/weapon/storage/backpack/satchel_sec(src)
+ new /obj/item/weapon/storage/backpack/satchel/sec(src)
if(prob(50))
new /obj/item/weapon/storage/backpack/dufflebag/sec(src)
new /obj/item/clothing/head/helmet/HoS(src)
@@ -157,7 +144,7 @@
if(prob(50))
new /obj/item/weapon/storage/backpack/security(src)
else
- new /obj/item/weapon/storage/backpack/satchel_sec(src)
+ new /obj/item/weapon/storage/backpack/satchel/sec(src)
if(prob(50))
new /obj/item/weapon/storage/backpack/dufflebag/sec(src)
new /obj/item/clothing/suit/storage/vest/warden(src)
@@ -201,7 +188,7 @@
if(prob(50))
new /obj/item/weapon/storage/backpack/security(src)
else
- new /obj/item/weapon/storage/backpack/satchel_sec(src)
+ new /obj/item/weapon/storage/backpack/satchel/sec(src)
if(prob(50))
new /obj/item/weapon/storage/backpack/dufflebag/sec(src)
new /obj/item/clothing/suit/storage/vest/officer(src)
@@ -273,20 +260,8 @@
New()
..()
- new /obj/item/clothing/under/det(src)
- new /obj/item/clothing/under/det/grey(src)
- new /obj/item/clothing/under/det/black(src)
- new /obj/item/clothing/under/det/waistcoat(src)
- new /obj/item/clothing/under/det/grey/waistcoat(src)
- new /obj/item/clothing/suit/storage/det_trench(src)
- new /obj/item/clothing/suit/storage/det_trench/grey(src)
- new /obj/item/clothing/suit/storage/forensics/blue(src)
- new /obj/item/clothing/suit/storage/forensics/red(src)
new /obj/item/clothing/accessory/badge/holo/detective(src)
new /obj/item/clothing/gloves/black(src)
- new /obj/item/clothing/head/det(src)
- new /obj/item/clothing/head/det/grey(src)
- new /obj/item/clothing/shoes/laceup(src)
new /obj/item/weapon/storage/belt/detective(src)
new /obj/item/weapon/storage/box/evidence(src)
new /obj/item/device/radio/headset/headset_sec(src)
@@ -297,6 +272,9 @@
new /obj/item/taperoll/police(src)
new /obj/item/weapon/gun/projectile/colt/detective(src)
new /obj/item/clothing/accessory/holster/armpit(src)
+ new /obj/item/device/flashlight/maglight(src)
+ new /obj/item/weapon/reagent_containers/food/drinks/flask/detflask(src)
+ new /obj/item/weapon/storage/briefcase/crimekit(src)
return
/obj/structure/closet/secure_closet/detective/update_icon()
diff --git a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm
index 31f8115b91..714be281b8 100644
--- a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm
@@ -22,7 +22,7 @@
/obj/structure/closet/emcloset/New()
..()
- switch (pickweight(list("small" = 55, "aid" = 25, "tank" = 10, "both" = 10, "nothing" = 0, "delete" = 0)))
+ switch (pickweight(list("small" = 55, "aid" = 25, "tank" = 10, "both" = 10)))
if ("small")
new /obj/item/weapon/tank/emergency_oxygen(src)
new /obj/item/weapon/tank/emergency_oxygen(src)
@@ -51,17 +51,6 @@
new /obj/item/clothing/suit/space/emergency(src)
new /obj/item/clothing/head/helmet/space/emergency(src)
new /obj/item/clothing/head/helmet/space/emergency(src)
- if ("nothing")
- // doot
-
- // teehee - Ah, tg coders...
- if ("delete")
- qdel(src)
-
- //If you want to re-add fire, just add "fire" = 15 to the pick list.
- /*if ("fire")
- new /obj/structure/closet/firecloset(src.loc)
- qdel(src)*/
/obj/structure/closet/emcloset/legacy/New()
..()
diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
index aa820a48fa..2e342e55cf 100644
--- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
+++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
@@ -14,15 +14,15 @@
if(prob(50))
new /obj/item/weapon/storage/backpack/security(src)
else
- new /obj/item/weapon/storage/backpack/satchel_sec(src)
+ new /obj/item/weapon/storage/backpack/satchel/sec(src)
if(prob(50))
new /obj/item/weapon/storage/backpack/security(src)
else
- new /obj/item/weapon/storage/backpack/satchel_sec(src)
+ new /obj/item/weapon/storage/backpack/satchel/sec(src)
if(prob(50))
new /obj/item/weapon/storage/backpack/security(src)
else
- new /obj/item/weapon/storage/backpack/satchel_sec(src)
+ new /obj/item/weapon/storage/backpack/satchel/sec(src)
new /obj/item/clothing/under/rank/security(src)
new /obj/item/clothing/under/rank/security(src)
new /obj/item/clothing/under/rank/security(src)
@@ -66,18 +66,32 @@
..()
new /obj/item/clothing/head/det(src)
new /obj/item/clothing/head/det(src)
- new /obj/item/clothing/shoes/brown(src)
- new /obj/item/clothing/shoes/brown(src)
- new /obj/item/clothing/under/det(src)
- new /obj/item/clothing/under/det(src)
new /obj/item/clothing/head/det/grey(src)
new /obj/item/clothing/head/det/grey(src)
+ new /obj/item/clothing/shoes/brown(src)
+ new /obj/item/clothing/shoes/brown(src)
+ new /obj/item/clothing/shoes/laceup(src)
+ new /obj/item/clothing/shoes/laceup(src)
+ new /obj/item/clothing/under/det(src)
+ new /obj/item/clothing/under/det(src)
+ new /obj/item/clothing/under/det/waistcoat(src)
+ new /obj/item/clothing/under/det/waistcoat(src)
new /obj/item/clothing/under/det/grey(src)
new /obj/item/clothing/under/det/grey(src)
+ new /obj/item/clothing/under/det/grey/waistcoat(src)
+ new /obj/item/clothing/under/det/grey/waistcoat(src)
new /obj/item/clothing/under/det/black(src)
new /obj/item/clothing/under/det/black(src)
new /obj/item/clothing/under/det/corporate(src)
new /obj/item/clothing/under/det/corporate(src)
+ new /obj/item/clothing/suit/storage/det_trench(src)
+ new /obj/item/clothing/suit/storage/det_trench(src)
+ new /obj/item/clothing/suit/storage/det_trench/grey(src)
+ new /obj/item/clothing/suit/storage/det_trench/grey(src)
+ new /obj/item/clothing/suit/storage/forensics/blue(src)
+ new /obj/item/clothing/suit/storage/forensics/blue(src)
+ new /obj/item/clothing/suit/storage/forensics/red(src)
+ new /obj/item/clothing/suit/storage/forensics/red(src)
return
/obj/structure/closet/wardrobe/pink
@@ -232,9 +246,9 @@
new /obj/item/clothing/under/rank/atmospheric_technician(src)
new /obj/item/clothing/under/rank/atmospheric_technician(src)
new /obj/item/clothing/under/rank/atmospheric_technician(src)
- new /obj/item/clothing/under/rank/atmospheric_technician/skirt(src)
- new /obj/item/clothing/under/rank/atmospheric_technician/skirt(src)
- new /obj/item/clothing/under/rank/atmospheric_technician/skirt(src)
+ new /obj/item/clothing/under/rank/engineer/atmospheric_technician/skirt(src)
+ new /obj/item/clothing/under/rank/engineer/atmospheric_technician/skirt(src)
+ new /obj/item/clothing/under/rank/engineer/atmospheric_technician/skirt(src)
new /obj/item/clothing/shoes/black(src)
new /obj/item/clothing/shoes/black(src)
new /obj/item/clothing/shoes/black(src)
@@ -280,6 +294,9 @@
new /obj/item/clothing/suit/storage/hooded/wintercoat/engineering(src)
new /obj/item/clothing/suit/storage/hooded/wintercoat/engineering(src)
new /obj/item/clothing/suit/storage/hooded/wintercoat/engineering(src)
+ new /obj/item/clothing/shoes/workboots(src)
+ new /obj/item/clothing/shoes/workboots(src)
+ new /obj/item/clothing/shoes/workboots(src)
return
@@ -344,8 +361,8 @@
new /obj/item/clothing/suit/storage/hooded/wintercoat/science(src)
new /obj/item/weapon/storage/backpack/toxins(src)
new /obj/item/weapon/storage/backpack/toxins(src)
- new /obj/item/weapon/storage/backpack/satchel_tox(src)
- new /obj/item/weapon/storage/backpack/satchel_tox(src)
+ new /obj/item/weapon/storage/backpack/satchel/tox(src)
+ new /obj/item/weapon/storage/backpack/satchel/tox(src)
return
/obj/structure/closet/wardrobe/robotics_black
@@ -365,8 +382,8 @@
new /obj/item/clothing/gloves/black(src)
new /obj/item/weapon/storage/backpack/toxins(src)
new /obj/item/weapon/storage/backpack/toxins(src)
- new /obj/item/weapon/storage/backpack/satchel_tox(src)
- new /obj/item/weapon/storage/backpack/satchel_tox(src)
+ new /obj/item/weapon/storage/backpack/satchel/tox(src)
+ new /obj/item/weapon/storage/backpack/satchel/tox(src)
return
@@ -379,16 +396,16 @@
..()
new /obj/item/clothing/under/rank/chemist(src)
new /obj/item/clothing/under/rank/chemist(src)
- new /obj/item/clothing/under/rank/chemist/skirt(src)
- new /obj/item/clothing/under/rank/chemist/skirt(src)
+ new /obj/item/clothing/under/rank/medical/chemist/skirt(src)
+ new /obj/item/clothing/under/rank/medical/chemist/skirt(src)
new /obj/item/clothing/shoes/white(src)
new /obj/item/clothing/shoes/white(src)
new /obj/item/clothing/suit/storage/toggle/labcoat/chemist(src)
new /obj/item/clothing/suit/storage/toggle/labcoat/chemist(src)
new /obj/item/weapon/storage/backpack/chemistry(src)
new /obj/item/weapon/storage/backpack/chemistry(src)
- new /obj/item/weapon/storage/backpack/satchel_chem(src)
- new /obj/item/weapon/storage/backpack/satchel_chem(src)
+ new /obj/item/weapon/storage/backpack/satchel/chem(src)
+ new /obj/item/weapon/storage/backpack/satchel/chem(src)
return
@@ -401,16 +418,16 @@
..()
new /obj/item/clothing/under/rank/geneticist(src)
new /obj/item/clothing/under/rank/geneticist(src)
- new /obj/item/clothing/under/rank/geneticist/skirt(src)
- new /obj/item/clothing/under/rank/geneticist/skirt(src)
+ new /obj/item/clothing/under/rank/medical/geneticist/skirt(src)
+ new /obj/item/clothing/under/rank/medical/geneticist/skirt(src)
new /obj/item/clothing/shoes/white(src)
new /obj/item/clothing/shoes/white(src)
new /obj/item/clothing/suit/storage/toggle/labcoat/genetics(src)
new /obj/item/clothing/suit/storage/toggle/labcoat/genetics(src)
new /obj/item/weapon/storage/backpack/genetics(src)
new /obj/item/weapon/storage/backpack/genetics(src)
- new /obj/item/weapon/storage/backpack/satchel_gen(src)
- new /obj/item/weapon/storage/backpack/satchel_gen(src)
+ new /obj/item/weapon/storage/backpack/satchel/gen(src)
+ new /obj/item/weapon/storage/backpack/satchel/gen(src)
return
@@ -423,8 +440,8 @@
..()
new /obj/item/clothing/under/rank/virologist(src)
new /obj/item/clothing/under/rank/virologist(src)
- new /obj/item/clothing/under/rank/virologist/skirt(src)
- new /obj/item/clothing/under/rank/virologist/skirt(src)
+ new /obj/item/clothing/under/rank/medical/virologist/skirt(src)
+ new /obj/item/clothing/under/rank/medical/virologist/skirt(src)
new /obj/item/clothing/shoes/white(src)
new /obj/item/clothing/shoes/white(src)
new /obj/item/clothing/suit/storage/toggle/labcoat/virologist(src)
@@ -433,8 +450,8 @@
new /obj/item/clothing/mask/surgical(src)
new /obj/item/weapon/storage/backpack/virology(src)
new /obj/item/weapon/storage/backpack/virology(src)
- new /obj/item/weapon/storage/backpack/satchel_vir(src)
- new /obj/item/weapon/storage/backpack/satchel_vir(src)
+ new /obj/item/weapon/storage/backpack/satchel/vir(src)
+ new /obj/item/weapon/storage/backpack/satchel/vir(src)
return
@@ -453,6 +470,8 @@
new /obj/item/clothing/under/rank/medical/green(src)
new /obj/item/clothing/under/rank/medical/purple(src)
new /obj/item/clothing/under/rank/medical/black(src)
+ new /obj/item/clothing/under/rank/medical/navyblue(src)
+ new /obj/item/clothing/head/surgery/navyblue(src)
new /obj/item/clothing/head/surgery/purple(src)
new /obj/item/clothing/head/surgery/blue(src)
new /obj/item/clothing/head/surgery/green(src)
@@ -498,9 +517,9 @@
new /obj/item/clothing/under/color/yellow(src)
new /obj/item/clothing/under/color/green(src)
new /obj/item/clothing/under/color/pink(src)
- new /obj/item/clothing/under/dress/plaid_blue(src)
- new /obj/item/clothing/under/dress/plaid_red(src)
- new /obj/item/clothing/under/dress/plaid_purple(src)
+ new /obj/item/clothing/under/skirt/plaid_blue(src)
+ new /obj/item/clothing/under/skirt/plaid_red(src)
+ new /obj/item/clothing/under/skirt/plaid_purple(src)
new /obj/item/clothing/shoes/blue(src)
new /obj/item/clothing/shoes/yellow(src)
new /obj/item/clothing/shoes/green(src)
@@ -516,7 +535,7 @@
new /obj/item/clothing/under/pants/black(src)
new /obj/item/clothing/under/pants/tan(src)
new /obj/item/clothing/under/pants/track(src)
- new /obj/item/clothing/under/pants/jeans(src)
+ new /obj/item/clothing/under/pants(src)
new /obj/item/clothing/under/pants/khaki(src)
new /obj/item/clothing/mask/bandana/blue(src)
new /obj/item/clothing/mask/bandana/blue(src)
@@ -589,3 +608,29 @@
new /obj/item/clothing/under/scratch(src)
new /obj/item/weapon/storage/backpack/satchel(src)
new /obj/item/weapon/storage/backpack/satchel(src)
+ return
+
+/obj/structure/closet/wardrobe/captain
+ name = "captain's wardrobe"
+ icon_state = "cabinet_closed"
+ icon_closed = "cabinet_closed"
+ icon_opened = "cabinet_open"
+
+/obj/structure/closet/wardrobe/captain/New()
+ ..()
+ new /obj/item/weapon/storage/backpack/captain(src)
+ new /obj/item/clothing/suit/captunic(src)
+ new /obj/item/clothing/suit/captunic/capjacket(src)
+ new /obj/item/clothing/head/caphat/cap(src)
+ new /obj/item/clothing/under/rank/captain(src)
+ new /obj/item/clothing/shoes/brown(src)
+ new /obj/item/clothing/gloves/captain(src)
+ new /obj/item/clothing/under/dress/dress_cap(src)
+ new /obj/item/weapon/storage/backpack/satchel/cap(src)
+ new /obj/item/clothing/head/caphat/formal(src)
+ new /obj/item/clothing/under/captainformal(src)
+ new /obj/item/clothing/suit/storage/hooded/wintercoat/captain(src)
+ new /obj/item/clothing/head/beret/centcom/captain(src)
+ new /obj/item/clothing/under/gimmick/rank/captain/suit(src)
+ new /obj/item/clothing/glasses/sunglasses(src)
+ return
\ No newline at end of file
diff --git a/code/game/objects/structures/crates_lockers/largecrate.dm b/code/game/objects/structures/crates_lockers/largecrate.dm
index b9c9a1b797..d8de10bf18 100644
--- a/code/game/objects/structures/crates_lockers/largecrate.dm
+++ b/code/game/objects/structures/crates_lockers/largecrate.dm
@@ -5,6 +5,13 @@
icon_state = "densecrate"
density = 1
+/obj/structure/largecrate/initialize()
+ ..()
+ for(var/obj/I in src.loc)
+ if(I.density || I.anchored || I == src || !I.simulated)
+ continue
+ I.forceMove(src)
+
/obj/structure/largecrate/attack_hand(mob/user as mob)
user << "You need a crowbar to pry this open! "
return
diff --git a/code/game/objects/structures/curtains.dm b/code/game/objects/structures/curtains.dm
index cc67d80ac3..bd241bb63a 100644
--- a/code/game/objects/structures/curtains.dm
+++ b/code/game/objects/structures/curtains.dm
@@ -1,5 +1,5 @@
#define SHOWER_OPEN_LAYER OBJ_LAYER + 0.4
-#define SHOWER_CLOSED_LAYER MOB_LAYER + 0.1
+#define SHOWER_CLOSED_LAYER MOB_LAYER + 0.2
/obj/structure/curtain
name = "curtain"
@@ -35,6 +35,21 @@
icon_state = "open"
layer = SHOWER_OPEN_LAYER
+/obj/structure/curtain/attackby(obj/item/P, mob/user)
+ if(istype(P, /obj/item/weapon/wirecutters))
+ playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1)
+ user << "You start to cut the shower curtains. "
+ playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
+ if(do_after(user, 10))
+ user << "You cut the shower curtains. "
+ var/obj/item/stack/material/plastic/A = new /obj/item/stack/material/plastic( src.loc )
+ A.amount = 3
+ qdel(src)
+ return
+ else
+ src.attack_hand(user)
+ return
+
/obj/structure/curtain/black
name = "black curtain"
color = "#222222"
diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm
index 8ce2a88f24..2dcb1ddaad 100644
--- a/code/game/objects/structures/displaycase.dm
+++ b/code/game/objects/structures/displaycase.dm
@@ -55,6 +55,9 @@
/obj/structure/displaycase/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
+ user.do_attack_animation(src)
+ playsound(loc, 'sound/effects/Glasshit.ogg', 50, 1)
src.health -= W.force
src.healthcheck()
..()
diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm
index cd859b1489..89e841bc58 100644
--- a/code/game/objects/structures/door_assembly.dm
+++ b/code/game/objects/structures/door_assembly.dm
@@ -282,8 +282,7 @@
else
path = text2path("/obj/machinery/door/airlock[airlock_type]")
- var/obj/machinery/door/new_airlock = new path(src.loc, src)
- new_airlock.dir = src.dir
+ new path(src.loc, src)
qdel(src)
else
..()
diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm
index c8ccd4b32b..dcc0270abc 100644
--- a/code/game/objects/structures/extinguisher.dm
+++ b/code/game/objects/structures/extinguisher.dm
@@ -8,9 +8,19 @@
var/obj/item/weapon/extinguisher/has_extinguisher
var/opened = 0
-/obj/structure/extinguisher_cabinet/New()
+/obj/structure/extinguisher_cabinet/New(var/loc, var/dir, var/building = 0)
..()
- has_extinguisher = new/obj/item/weapon/extinguisher(src)
+
+ if(building)
+ if(loc)
+ src.loc = loc
+
+ pixel_x = (dir & 3)? 0 : (dir == 4 ? -27 : 27)
+ pixel_y = (dir & 3)? (dir ==1 ? -27 : 27) : 0
+ update_icon()
+ return
+ else
+ has_extinguisher = new/obj/item/weapon/extinguisher(src)
/obj/structure/extinguisher_cabinet/attackby(obj/item/O, mob/user)
if(isrobot(user))
@@ -23,12 +33,21 @@
user << "You place [O] in [src]. "
else
opened = !opened
+ if(istype(O, /obj/item/weapon/wrench))
+ if(!has_extinguisher)
+ user << "You start to unwrench the extinguisher cabinet. "
+ playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
+ if(do_after(user, 15))
+ user << "You unwrench the extinguisher cabinet. "
+ new /obj/item/frame/extinguisher_cabinet( src.loc )
+ qdel(src)
+ return
else
opened = !opened
update_icon()
-/obj/structure/extinguisher_cabinet/attack_hand(mob/user)
+/obj/structure/extinguisher_cabinet/attack_hand(mob/living/user)
if(isrobot(user))
return
if (ishuman(user))
diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm
index 867dada6d9..9c103a8ed2 100644
--- a/code/game/objects/structures/girders.dm
+++ b/code/game/objects/structures/girders.dm
@@ -143,7 +143,8 @@
user << "You begin adding the plating... "
- if(!do_after(user,40) || !S.use(2))
+ var/amount_to_use = reinf_material ? 1 : 2
+ if(!do_after(user,40) || !S.use(amount_to_use))
return 1 //once we've gotten this far don't call parent attackby()
if(anchored)
@@ -167,7 +168,7 @@
user << "\The [src] is already reinforced. "
return 0
- if(S.get_amount() < 2)
+ if(S.get_amount() < 1)
user << "There isn't enough material here to reinforce the girder. "
return 0
@@ -177,7 +178,7 @@
return 0
user << "Now reinforcing... "
- if (!do_after(user,40) || !S.use(2))
+ if (!do_after(user,40) || !S.use(1))
return 1 //don't call parent attackby() past this point
user << "You added reinforcement! "
diff --git a/code/game/objects/structures/inflatable.dm b/code/game/objects/structures/inflatable.dm
index 3d867111cc..20b326ebc9 100644
--- a/code/game/objects/structures/inflatable.dm
+++ b/code/game/objects/structures/inflatable.dm
@@ -40,7 +40,7 @@
/obj/structure/inflatable/bullet_act(var/obj/item/projectile/Proj)
var/proj_damage = Proj.get_structure_damage()
if(!proj_damage) return
-
+
health -= proj_damage
..()
if(health <= 0)
@@ -248,6 +248,7 @@
desc = "Contains inflatable walls and doors."
icon_state = "inf_box"
item_state = "syringe_kit"
+ w_class = 3
max_storage_space = 28
can_hold = list(/obj/item/inflatable)
diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm
index 17957cc589..b3ad998895 100644
--- a/code/game/objects/structures/janicart.dm
+++ b/code/game/objects/structures/janicart.dm
@@ -107,7 +107,7 @@
if(!isliving(usr))
return
var/mob/living/user = usr
-
+
if(href_list["take"])
switch(href_list["take"])
if("garbage")
@@ -213,10 +213,10 @@
..()
-/obj/structure/bed/chair/janicart/relaymove(mob/user, direction)
+/obj/structure/bed/chair/janicart/relaymove(mob/living/user, direction)
if(user.stat || user.stunned || user.weakened || user.paralysis)
unbuckle_mob()
- if(istype(user.l_hand, /obj/item/key) || istype(user.r_hand, /obj/item/key))
+ if(user.get_type_in_hands(/obj/item/key))
step(src, direction)
update_mob()
else
diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm
index 2b8396c554..eff0de4b48 100644
--- a/code/game/objects/structures/lattice.dm
+++ b/code/game/objects/structures/lattice.dm
@@ -9,7 +9,7 @@
layer = 2.3 //under pipes
// flags = CONDUCT
-/obj/structure/lattice/New() //turf/simulated/floor/asteroid
+/obj/structure/lattice/initialize()
..()
if(!(istype(src.loc, /turf/space) || istype(src.loc, /turf/simulated/open) || istype(src.loc, /turf/simulated/mineral)))
diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm
index 88e771f8ed..a8747e07ec 100644
--- a/code/game/objects/structures/mirror.dm
+++ b/code/game/objects/structures/mirror.dm
@@ -8,9 +8,18 @@
anchored = 1
var/shattered = 0
var/list/ui_users = list()
+ var/glass = 1
+
+/obj/structure/mirror/New(var/loc, var/dir, var/building = 0, mob/user as mob)
+ if(building)
+ glass = 0
+ icon_state = "mirror_frame"
+ pixel_x = (dir & 3)? 0 : (dir == 4 ? -28 : 28)
+ pixel_y = (dir & 3)? (dir == 1 ? -30 : 30) : 0
+ return
/obj/structure/mirror/attack_hand(mob/user as mob)
-
+ if(!glass) return
if(shattered) return
if(ishuman(user))
@@ -22,6 +31,7 @@
AC.ui_interact(user)
/obj/structure/mirror/proc/shatter()
+ if(!glass) return
if(shattered) return
shattered = 1
icon_state = "mirror_broke"
@@ -34,18 +44,57 @@
if(prob(Proj.get_structure_damage() * 2))
if(!shattered)
shatter()
- else
+ else if(glass)
playsound(src, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1)
..()
/obj/structure/mirror/attackby(obj/item/I as obj, mob/user as mob)
- if(shattered)
+ if(istype(I, /obj/item/weapon/wrench))
+ if(!glass)
+ playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
+ if(do_after(user, 20))
+ user << "You unfasten the frame. "
+ new /obj/item/frame/mirror( src.loc )
+ qdel(src)
+ return
+ if(istype(I, /obj/item/weapon/crowbar))
+ if(shattered && glass)
+ user << "The broken glass falls out. "
+ icon_state = "mirror_frame"
+ glass = !glass
+ new /obj/item/weapon/material/shard( src.loc )
+ return
+ if(!shattered && glass)
+ playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
+ user << "You remove the glass. "
+ glass = !glass
+ icon_state = "mirror_frame"
+ new /obj/item/stack/material/glass( src.loc, 2 )
+ return
+
+ if(istype(I, /obj/item/stack/material/glass))
+ if(!glass)
+ var/obj/item/stack/material/glass/G = I
+ if (G.get_amount() < 2)
+ user << "You need two sheets of glass to add them to the frame. "
+ return
+ user << "You start to add the glass to the frame. "
+ if(do_after(user, 20))
+ if (G.use(2))
+ shattered = 0
+ glass = 1
+ icon_state = "mirror"
+ user << "You add the glass to the frame. "
+ return
+
+ if(shattered && glass)
playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1)
return
if(prob(I.force * 2))
visible_message("[user] smashes [src] with [I]! ")
- shatter()
+ if(glass)
+ shatter()
else
visible_message("[user] hits [src] with [I]! ")
playsound(src.loc, 'sound/effects/Glasshit.ogg', 70, 1)
@@ -53,13 +102,14 @@
/obj/structure/mirror/attack_generic(var/mob/user, var/damage)
user.do_attack_animation(src)
- if(shattered)
+ if(shattered && glass)
playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1)
return 0
if(damage)
user.visible_message("[user] smashes [src]! ")
- shatter()
+ if(glass)
+ shatter()
else
user.visible_message("[user] hits [src] and bounces off! ")
return 1
diff --git a/code/game/objects/structures/mop_bucket.dm b/code/game/objects/structures/mop_bucket.dm
index 1624a4bbde..c76ca1802d 100644
--- a/code/game/objects/structures/mop_bucket.dm
+++ b/code/game/objects/structures/mop_bucket.dm
@@ -12,7 +12,7 @@
/obj/structure/mopbucket/New()
create_reagents(100)
-
+ ..()
/obj/structure/mopbucket/examine(mob/user)
if(..(user, 1))
diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm
index 949cbc1ff6..bd28078782 100644
--- a/code/game/objects/structures/morgue.dm
+++ b/code/game/objects/structures/morgue.dm
@@ -18,6 +18,7 @@
dir = EAST
density = 1
var/obj/structure/m_tray/connected = null
+ var/list/occupants = list()
anchored = 1.0
/obj/structure/morgue/Destroy()
@@ -26,12 +27,28 @@
connected = null
return ..()
-/obj/structure/morgue/proc/update()
+/obj/structure/morgue/proc/get_occupants()
+ occupants.Cut()
+ for(var/mob/living/carbon/human/H in contents)
+ occupants += H
+ for(var/obj/structure/closet/body_bag/B in contents)
+ occupants += B.get_occupants()
+
+/obj/structure/morgue/proc/update(var/broadcast=0)
if (src.connected)
src.icon_state = "morgue0"
else
if (src.contents.len)
src.icon_state = "morgue2"
+ get_occupants()
+ for (var/mob/living/carbon/human/H in occupants)
+ if(H.isSynthetic() || H.suiciding || !H.ckey || !H.client || (NOCLONE in H.mutations) || (H.species && H.species.flags & NO_SCAN))
+ src.icon_state = "morgue2"
+ break
+ else
+ src.icon_state = "morgue3"
+ if(broadcast)
+ broadcast_medical_hud_message("[src] was able to establish a mental interface with occupant.", src)
else
src.icon_state = "morgue1"
return
diff --git a/code/game/objects/structures/musician.dm b/code/game/objects/structures/musician.dm
index fa53637f88..a39e9658dd 100644
--- a/code/game/objects/structures/musician.dm
+++ b/code/game/objects/structures/musician.dm
@@ -220,10 +220,10 @@
for(var/line in song.lines)
//world << line
- for(var/beat in text2list(lowertext(line), ","))
+ for(var/beat in splittext(lowertext(line), ","))
//world << "beat: [beat]"
- var/list/notes = text2list(beat, "/")
- for(var/note in text2list(notes[1], "-"))
+ var/list/notes = splittext(beat, "/")
+ for(var/note in splittext(notes[1], "-"))
//world << "note: [note]"
if(!playing || !anchored)//If the piano is playing, or is loose
playing = 0
@@ -387,7 +387,7 @@
//split into lines
spawn()
- var/list/lines = text2list(t, "\n")
+ var/list/lines = splittext(t, "\n")
var/tempo = 5
if(copytext(lines[1],1,6) == "BPM: ")
tempo = 600 / text2num(copytext(lines[1],6))
diff --git a/code/game/objects/structures/noticeboard.dm b/code/game/objects/structures/noticeboard.dm
index 3647d565f7..174634e3cb 100644
--- a/code/game/objects/structures/noticeboard.dm
+++ b/code/game/objects/structures/noticeboard.dm
@@ -7,6 +7,18 @@
anchored = 1
var/notices = 0
+/obj/structure/noticeboard/New(var/loc, var/dir, var/building = 0)
+ ..()
+
+ if(building)
+ if(loc)
+ src.loc = loc
+
+ pixel_x = (dir & 3)? 0 : (dir == 4 ? -32 : 32)
+ pixel_y = (dir & 3)? (dir ==1 ? -27 : 27) : 0
+ update_icon()
+ return
+
/obj/structure/noticeboard/initialize()
for(var/obj/item/I in loc)
if(notices > 4) break
@@ -28,6 +40,14 @@
user << "You pin the paper to the noticeboard. "
else
user << "You reach to pin your paper to the board but hesitate. You are certain your paper will not be seen among the many others already attached. "
+ if(istype(O, /obj/item/weapon/wrench))
+ user << "You start to unwrench the noticeboard. "
+ playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
+ if(do_after(user, 15))
+ user << "You unwrench the noticeboard. "
+ new /obj/item/frame/noticeboard( src.loc )
+ qdel(src)
+ return
/obj/structure/noticeboard/attack_hand(var/mob/user)
examine(user)
@@ -64,15 +84,14 @@
return
var/obj/item/P = locate(href_list["write"])
if((P && P.loc == src)) //ifthe paper's on the board
- if(istype(usr.r_hand, /obj/item/weapon/pen)) //and you're holding a pen
- add_fingerprint(usr)
- P.attackby(usr.r_hand, usr) //then do ittttt
- else
- if(istype(usr.l_hand, /obj/item/weapon/pen)) //check other hand for pen
- add_fingerprint(usr)
- P.attackby(usr.l_hand, usr)
+ var/mob/living/M = usr
+ if(istype(M))
+ var/obj/item/weapon/pen/E = M.get_type_in_hands(/obj/item/weapon/pen)
+ if(E)
+ add_fingerprint(M)
+ P.attackby(E, usr)
else
- usr << "You'll need something to write with! "
+ M << "You'll need something to write with! "
if(href_list["read"])
var/obj/item/weapon/paper/P = locate(href_list["read"])
if((P && P.loc == src))
diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm
index a3904f65a1..7003f4d3a2 100644
--- a/code/game/objects/structures/safe.dm
+++ b/code/game/objects/structures/safe.dm
@@ -90,7 +90,7 @@ FLOOR SAFES
var/mob/living/carbon/human/user = usr
var/canhear = 0
- if(istype(user.l_hand, /obj/item/clothing/accessory/stethoscope) || istype(user.r_hand, /obj/item/clothing/accessory/stethoscope))
+ if(user.get_type_in_hands(/obj/item/clothing/accessory/stethoscope))
canhear = 1
if(href_list["open"])
diff --git a/code/game/objects/structures/stool_bed_chair_nest/bed.dm b/code/game/objects/structures/stool_bed_chair_nest/bed.dm
index 73914e113c..73ceddb70f 100644
--- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm
+++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm
@@ -129,6 +129,9 @@
else if(istype(W, /obj/item/weapon/grab))
var/obj/item/weapon/grab/G = W
var/mob/living/affecting = G.affecting
+ if(buckled_mob) //Handles trying to buckle someone else to a chair when someone else is on it
+ user << "\The [src] already has someone buckled to it. "
+ return
user.visible_message("[user] attempts to buckle [affecting] into \the [src]! ")
if(do_after(user, 20))
affecting.loc = loc
@@ -176,6 +179,22 @@
/obj/structure/bed/alien/New(var/newloc)
..(newloc,"resin")
+/obj/structure/bed/double
+ name = "double bed"
+ icon_state = "doublebed"
+ base_icon = "doublebed"
+
+/obj/structure/bed/double/padded/New(var/newloc)
+ ..(newloc,"wood","cotton")
+
+/obj/structure/bed/double/post_buckle_mob(mob/living/M as mob)
+ if(M == buckled_mob)
+ M.pixel_y = 13
+ M.old_y = 13
+ else
+ M.pixel_y = 0
+ M.old_y = 0
+
/*
* Roller beds
*/
diff --git a/code/game/objects/structures/stool_bed_chair_nest/stools.dm b/code/game/objects/structures/stool_bed_chair_nest/stools.dm
index e4840bedc6..e4d54f48ba 100644
--- a/code/game/objects/structures/stool_bed_chair_nest/stools.dm
+++ b/code/game/objects/structures/stool_bed_chair_nest/stools.dm
@@ -72,6 +72,11 @@ var/global/list/stool_cache = list() //haha stool
/obj/item/weapon/stool/attack(mob/M as mob, mob/user as mob)
if (prob(5) && istype(M,/mob/living))
user.visible_message("[user] breaks [src] over [M]'s back! ")
+ user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
+ user.do_attack_animation(M)
+
+ user.drop_from_inventory(src)
+
user.remove_from_mob(src)
dismantle()
qdel(src)
diff --git a/code/game/objects/structures/transit_tubes.dm b/code/game/objects/structures/transit_tubes.dm
index 47a2f53fb3..0f9b4a603a 100644
--- a/code/game/objects/structures/transit_tubes.dm
+++ b/code/game/objects/structures/transit_tubes.dm
@@ -367,7 +367,7 @@ obj/structure/ex_act(severity)
// currently on.
/obj/structure/transit_tube_pod/proc/mix_air()
var/datum/gas_mixture/environment = loc.return_air()
-
+
//note that share_ratio assumes both gas mixes have the same volume,
//so if the volume is changed this may need to be changed as well.
air_contents.share_ratio(environment, 1)
@@ -539,7 +539,7 @@ obj/structure/ex_act(severity)
if(text in direction_table)
return direction_table[text]
- var/list/split_text = text2list(text, "-")
+ var/list/split_text = splittext(text, "-")
// If the first token is D, the icon_state represents
// a purely decorative tube, and doesn't actually
diff --git a/code/game/objects/structures/under_wardrobe.dm b/code/game/objects/structures/under_wardrobe.dm
index a02c67c968..6a06ef26fb 100644
--- a/code/game/objects/structures/under_wardrobe.dm
+++ b/code/game/objects/structures/under_wardrobe.dm
@@ -5,39 +5,83 @@
icon_state = "cabinet_closed"
density = 1
-/obj/structure/undies_wardrobe/attack_hand(mob/user as mob)
- src.add_fingerprint(user)
- var/mob/living/carbon/human/H = user
- if(!ishuman(user) || (H.species && !(H.species.appearance_flags & HAS_UNDERWEAR)))
+/obj/structure/undies_wardrobe/attack_hand(var/mob/user)
+ if(!human_who_can_use_underwear(user))
user << "Sadly there's nothing in here for you to wear. "
- return 0
+ return
+ interact(user)
- var/utype = alert("Which section do you want to pick from?",,"Underwear", "Undershirts", "Socks",)
- var/list/selection
- switch(utype)
- if("Underwear")
- utype = alert("Which section do you want to pick from?",, "Top", "Bottom",)
- switch(utype)
- if("Top")
- selection = underwear_top_t
- if("Bottom")
- selection = underwear_bottom_t
- if("Undershirts")
- selection = undershirt_t
- if("Socks")
- selection = socks_t
- var/pick = input("Select the style") as null|anything in selection
- if(pick)
- if(get_dist(src,user) > 1)
+/obj/structure/undies_wardrobe/interact(var/mob/living/carbon/human/H)
+ var/dat = list()
+ dat += "Underwear: "
+ for(var/datum/category_group/underwear/UWC in global_underwear.categories)
+ var/datum/category_item/underwear/UWI = H.all_underwear[UWC.name]
+ var/item_name = UWI ? UWI.name : "None"
+ dat += "[UWC.name]: [item_name] "
+ if(UWI)
+ for(var/datum/gear_tweak/gt in UWI.tweaks)
+ dat += " [gt.get_contents(get_metadata(H, UWC.name, gt))] "
+ dat += " (Remove) "
+
+ dat = jointext(dat,null)
+ H << browse(dat, "window=wardrobe;size=400x200")
+
+/obj/structure/undies_wardrobe/proc/get_metadata(var/mob/living/carbon/human/H, var/underwear_category, var/datum/gear_tweak/gt)
+ var/metadata = H.all_underwear_metadata[underwear_category]
+ if(!metadata)
+ metadata = list()
+ H.all_underwear_metadata[underwear_category] = metadata
+
+ var/tweak_data = metadata["[gt]"]
+ if(!tweak_data)
+ tweak_data = gt.get_default()
+ metadata["[gt]"] = tweak_data
+ return tweak_data
+
+/obj/structure/undies_wardrobe/proc/set_metadata(var/mob/living/carbon/human/H, var/underwear_category, var/datum/gear_tweak/gt, var/new_metadata)
+ var/list/metadata = H.all_underwear_metadata[underwear_category]
+ metadata["[gt]"] = new_metadata
+
+/obj/structure/undies_wardrobe/proc/human_who_can_use_underwear(var/mob/living/carbon/human/H)
+ if(!istype(H) || !H.species || !(H.species.appearance_flags & HAS_UNDERWEAR))
+ return FALSE
+ return TRUE
+
+/obj/structure/undies_wardrobe/CanUseTopic(var/user)
+ if(!human_who_can_use_underwear(user))
+ return STATUS_CLOSE
+
+ return ..()
+
+/obj/structure/undies_wardrobe/Topic(href, href_list, state)
+ if(..())
+ return TRUE
+
+ var/mob/living/carbon/human/H = usr
+ if(href_list["remove_underwear"])
+ if(href_list["remove_underwear"] in H.all_underwear)
+ H.all_underwear -= href_list["remove_underwear"]
+ . = TRUE
+ else if(href_list["change_underwear"])
+ var/datum/category_group/underwear/UWC = global_underwear.categories_by_name[href_list["change_underwear"]]
+ if(!UWC)
return
- if(utype == "Undershirts")
- H.undershirt = selection[pick]
- else if(utype == "Socks")
- H.socks = selection[pick]
- else if(utype == "Top")
- H.underwear_top = selection[pick]
- else
- H.underwear_bottom = selection[pick]
- H.update_body(1)
+ var/datum/category_item/underwear/selected_underwear = input(H, "Choose underwear:", "Choose underwear", H.all_underwear[UWC.name]) as null|anything in UWC.items
+ if(selected_underwear && CanUseTopic(H, default_state))
+ H.all_underwear[UWC.name] = selected_underwear
+ . = TRUE
+ else if(href_list["underwear"] && href_list["tweak"])
+ var/underwear = href_list["underwear"]
+ if(!(underwear in H.all_underwear))
+ return
+ var/datum/gear_tweak/gt = locate(href_list["tweak"])
+ if(!gt)
+ return
+ var/new_metadata = gt.get_metadata(usr, get_metadata(H, underwear, gt), "Wardrobe Underwear Selection")
+ if(new_metadata)
+ set_metadata(H, underwear, gt, new_metadata)
+ . = TRUE
- return 1
\ No newline at end of file
+ if(.)
+ H.update_underwear()
+ interact(H)
\ No newline at end of file
diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm
index 8df5be2629..4ac596267d 100644
--- a/code/game/objects/structures/watercloset.dm
+++ b/code/game/objects/structures/watercloset.dm
@@ -358,7 +358,7 @@
if (ishuman(user))
var/mob/living/carbon/human/H = user
var/obj/item/organ/external/temp = H.organs_by_name["r_hand"]
- if (user.hand)
+ if (H.hand)
temp = H.organs_by_name["l_hand"]
if(temp && !temp.is_usable())
user << "You try to move your [temp.name], but cannot! "
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index 3c39c382fa..8e6c2cd0d5 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -271,6 +271,9 @@
else
new glasstype(loc)
qdel(src)
+ else if(istype(W,/obj/item/frame) && anchored)
+ var/obj/item/frame/F = W
+ F.try_build(src)
else
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
if(W.damtype == BRUTE || W.damtype == BURN)
diff --git a/code/game/periodic_news.dm b/code/game/periodic_news.dm
index fb59a407b2..14cb92624d 100644
--- a/code/game/periodic_news.dm
+++ b/code/game/periodic_news.dm
@@ -6,7 +6,7 @@
round_time // time of the round at which this should be announced, in seconds
message // body of the message
author = "NanoTrasen Editor"
- channel_name = "The Vir Times"
+ channel_name = "The "+starsys_name+" Times"
can_be_redacted = 0
message_type = "Story"
@@ -66,7 +66,7 @@
round_time = 60 * 50
found_ssd
- channel_name = "The Vir Times"
+ channel_name = "The "+starsys_name+" Times"
author = "Doctor Eric Hanfield"
message = {"Several people have been found unconscious at their terminals. It is thought that it was due
@@ -78,7 +78,7 @@
lotus_tree
explosions
- channel_name = "The Vir Times"
+ channel_name = "The "+starsys_name+" Times"
author = "Reporter Leland H. Howards"
message = {"The newly-christened civillian transport Lotus Tree suffered two very large explosions near the
@@ -92,7 +92,7 @@
food_riots
breaking_news
- channel_name = "The Vir Times"
+ channel_name = "The "+starsys_name+" Times"
author = "Reporter Ro'kii Ar-Raqis"
message = {"Breaking news: Food riots have broken out throughout the Refuge asteroid colony in the Tenebrae
@@ -103,7 +103,7 @@
round_time = 60 * 10
more
- channel_name = "The Vir Times"
+ channel_name = "The "+starsys_name+" Times"
author = "Reporter Ro'kii Ar-Raqis"
message = {"More on the Refuge food riots: The Refuge Council has condemned NanoTrasen's withdrawal from
diff --git a/code/game/response_team.dm b/code/game/response_team.dm
index 7a536cd6ca..fd7fbe1b9b 100644
--- a/code/game/response_team.dm
+++ b/code/game/response_team.dm
@@ -46,7 +46,7 @@ client/verb/JoinResponseTeam()
usr << "You cannot join the response team at this time. "
return
- if(istype(usr,/mob/dead/observer) || istype(usr,/mob/new_player))
+ if(istype(usr,/mob/observer/dead) || istype(usr,/mob/new_player))
if(!send_emergency_team)
usr << "No emergency response team is currently being sent."
return
diff --git a/code/game/sound.dm b/code/game/sound.dm
index ce2b992d9b..fea1bdcb38 100644
--- a/code/game/sound.dm
+++ b/code/game/sound.dm
@@ -157,7 +157,7 @@ var/const/FALLOFF_SOUNDS = 0.5
/client/proc/playtitlemusic()
if(!ticker || !ticker.login_music) return
- if(prefs.toggles & SOUND_LOBBY)
+ if(is_preference_enabled(/datum/client_preference/play_lobby_music))
src << sound(ticker.login_music, repeat = 0, wait = 0, volume = 85, channel = 1) // MAD JAMS
/proc/get_rand_frequency()
diff --git a/code/game/supplyshuttle.dm b/code/game/supplyshuttle.dm
index cc91ee49a2..9496413be7 100644
--- a/code/game/supplyshuttle.dm
+++ b/code/game/supplyshuttle.dm
@@ -55,6 +55,20 @@ var/list/mechtoys = list(
/mob/living/silicon/robot/drone
)
+/obj/structure/plasticflaps/attackby(obj/item/P, mob/user)
+ if(istype(P, /obj/item/weapon/wirecutters))
+ playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1)
+ user << "You start to cut the plastic flaps. "
+ playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
+ if(do_after(user, 10))
+ user << "You cut the plastic flaps. "
+ var/obj/item/stack/material/plastic/A = new /obj/item/stack/material/plastic( src.loc )
+ A.amount = 4
+ qdel(src)
+ return
+ else
+ return
+
/obj/structure/plasticflaps/CanPass(atom/A, turf/T)
if(istype(A) && A.checkpass(PASSGLASS))
return prob(60)
@@ -274,9 +288,11 @@ var/list/mechtoys = list(
for(var/typepath in contains)
if(!typepath) continue
- var/atom/B2 = new typepath(A)
- if(SP.amount && B2:amount) B2:amount = SP.amount
- if(slip) slip.info += "[B2.name] " //add the item to the manifest
+ var/number_of_items = max(1, contains[typepath])
+ for(var/j = 1 to number_of_items)
+ var/atom/B2 = new typepath(A)
+ if(SP.amount && B2:amount) B2:amount = SP.amount
+ if(slip) slip.info += "[B2.name] " //add the item to the manifest
//manifest finalisation
if(slip)
diff --git a/code/game/turfs/flooring/flooring.dm b/code/game/turfs/flooring/flooring.dm
index bd95b7f594..779f76fc93 100644
--- a/code/game/turfs/flooring/flooring.dm
+++ b/code/game/turfs/flooring/flooring.dm
@@ -56,6 +56,32 @@ var/list/flooring_types
flags = TURF_HAS_EDGES | TURF_REMOVE_SHOVEL
build_type = null
+/decl/flooring/snow
+ name = "snow"
+ desc = "A layer of many tiny bits of frozen water. It's hard to tell how deep it is."
+ icon = 'icons/turf/snow_new.dmi'
+ icon_base = "snow"
+
+/decl/flooring/snow/snow2
+ name = "snow"
+ desc = "A layer of many tiny bits of frozen water. It's hard to tell how deep it is."
+ icon = 'icons/turf/snow.dmi'
+ icon_base = "snow"
+ flags = TURF_HAS_EDGES
+
+/decl/flooring/snow/gravsnow
+ name = "snow"
+ icon_base = "gravsnow"
+
+/decl/flooring/snow/plating
+ name = "snowy plating"
+ desc = "Steel plating coated with a light layer of snow."
+ icon_base = "snowyplating"
+ flags = null
+
+/decl/flooring/snow/plating/drift
+ icon_base = "snowyplayingdrift"
+
/decl/flooring/carpet
name = "carpet"
desc = "Imported and comfy."
@@ -68,8 +94,8 @@ var/list/flooring_types
/decl/flooring/carpet/blue
name = "carpet"
icon_base = "bcarpet"
- build_type = null
- flags = TURF_HAS_EDGES
+ build_type = /obj/item/stack/tile/carpet/blue
+ flags = TURF_HAS_EDGES | TURF_REMOVE_CROWBAR
/decl/flooring/tiling
name = "floor"
@@ -186,7 +212,7 @@ var/list/flooring_types
icon = 'icons/turf/flooring/circuit.dmi'
icon_base = "bcircuit"
build_type = null
- flags = TURF_ACID_IMMUNE | TURF_CAN_BREAK
+ flags = TURF_ACID_IMMUNE | TURF_CAN_BREAK | TURF_REMOVE_CROWBAR
can_paint = 1
/decl/flooring/reinforced/circuit/green
diff --git a/code/game/turfs/flooring/flooring_premade.dm b/code/game/turfs/flooring/flooring_premade.dm
index 73bb5f71f8..55795bc5b3 100644
--- a/code/game/turfs/flooring/flooring_premade.dm
+++ b/code/game/turfs/flooring/flooring_premade.dm
@@ -195,7 +195,6 @@
/turf/simulated/floor/airless/lava
/turf/simulated/floor/light
-/turf/simulated/floor/snow
/*
/turf/simulated/floor/beach
/turf/simulated/floor/beach/sand
@@ -204,5 +203,58 @@
/turf/simulated/floor/beach/water
/turf/simulated/floor/beach/water/ocean
*/
-/turf/simulated/floor/plating/snow
/turf/simulated/floor/airless/ceiling
+/turf/simulated/floor/plating
+
+
+//**** Here lives snow ****
+/turf/simulated/floor/snow
+ name = "snow"
+ icon = 'icons/turf/snow_new.dmi'
+ icon_state = "snow"
+ var/list/crossed_dirs = list()
+
+/turf/simulated/floor/snow/snow2
+ name = "snow"
+ icon = 'icons/turf/snow.dmi'
+ icon_state = "snow"
+ initial_flooring = /decl/flooring/snow
+
+/turf/simulated/floor/snow/gravsnow
+ name = "snow"
+ icon_state = "gravsnow"
+ initial_flooring = /decl/flooring/snow/gravsnow
+
+/turf/simulated/floor/snow/plating
+ name = "snowy playing"
+ icon_state = "snowyplating"
+ initial_flooring = /decl/flooring/snow/plating
+
+/turf/simulated/floor/snow/plating/drift
+ name = "snowy plating"
+ icon_state = "snowyplayingdrift"
+ initial_flooring = /decl/flooring/snow/plating/drift
+
+#define FOOTSTEP_SPRITE_AMT 2
+
+/turf/snow/Entered(atom/A)
+ if(ismob(A))
+ var/mdir = "[A.dir]"
+ if(crossed_dirs[mdir])
+ crossed_dirs[mdir] = min(crossed_dirs[mdir] + 1, FOOTSTEP_SPRITE_AMT)
+ else
+ crossed_dirs[mdir] = 1
+
+ update_icon()
+
+ . = ..()
+
+/turf/snow/update_icon()
+ overlays.Cut()
+ for(var/d in crossed_dirs)
+ var/amt = crossed_dirs[d]
+
+ for(var/i in 1 to amt)
+ overlays += icon(icon, "footprint[i]", text2num(d))
+
+//**** Here ends snow ****
\ No newline at end of file
diff --git a/code/game/turfs/initialization/maintenance.dm b/code/game/turfs/initialization/maintenance.dm
index 5a9574810b..16b1d03d21 100644
--- a/code/game/turfs/initialization/maintenance.dm
+++ b/code/game/turfs/initialization/maintenance.dm
@@ -26,7 +26,7 @@ var/global/list/random_junk
if(prob(25))
return /obj/effect/decal/cleanable/generic
if(!random_junk)
- random_junk = subtypes(/obj/item/trash)
+ random_junk = subtypesof(/obj/item/trash)
random_junk += typesof(/obj/item/weapon/cigbutt)
random_junk += /obj/effect/decal/cleanable/spiderling_remains
random_junk += /obj/effect/decal/remains/mouse
diff --git a/code/game/turfs/simulated/floor_types.dm b/code/game/turfs/simulated/floor_types.dm
index e5341c7719..0d3e43bbfa 100644
--- a/code/game/turfs/simulated/floor_types.dm
+++ b/code/game/turfs/simulated/floor_types.dm
@@ -40,3 +40,5 @@
name = "skipjack floor"
oxygen = 0
nitrogen = MOLES_N2STANDARD + MOLES_O2STANDARD
+
+
diff --git a/code/game/turfs/simulated/wall_attacks.dm b/code/game/turfs/simulated/wall_attacks.dm
index 2e82174e53..ffc2297d02 100644
--- a/code/game/turfs/simulated/wall_attacks.dm
+++ b/code/game/turfs/simulated/wall_attacks.dm
@@ -217,8 +217,7 @@
if (istype(W, /obj/item/weapon/wirecutters))
playsound(src, 'sound/items/Wirecutter.ogg', 100, 1)
construction_stage = 5
- new /obj/item/stack/rods( src )
- user << "You cut the outer grille. "
+ user << "You cut through the outer grille. "
update_icon()
return
if(5)
@@ -229,16 +228,13 @@
return
construction_stage = 4
update_icon()
- user << "You remove the support lines. "
+ user << "You unscrew the support lines. "
+ return
+ else if (istype(W, /obj/item/weapon/wirecutters))
+ construction_stage = 6
+ user << "You mend the outer grille. "
+ update_icon()
return
- else if( istype(W, /obj/item/stack/rods) )
- var/obj/item/stack/O = W
- if(O.get_amount()>0)
- O.use(1)
- construction_stage = 6
- update_icon()
- user << "You replace the outer grille. "
- return
if(4)
var/cut_cover
if(istype(W,/obj/item/weapon/weldingtool))
@@ -261,6 +257,15 @@
update_icon()
user << "You press firmly on the cover, dislodging it. "
return
+ else if (istype(W, /obj/item/weapon/screwdriver))
+ user << "You begin screwing down the support lines. "
+ playsound(src, 'sound/items/Screwdriver.ogg', 100, 1)
+ if(!do_after(user,40) || !istype(src, /turf/simulated/wall) || construction_stage != 4)
+ return
+ construction_stage = 5
+ update_icon()
+ user << "You screw down the support lines. "
+ return
if(3)
if (istype(W, /obj/item/weapon/crowbar))
user << "You struggle to pry off the cover. "
@@ -299,15 +304,14 @@
return
construction_stage = 0
update_icon()
- new /obj/item/stack/rods(src)
- user << "The support rods drop out as you cut them loose from the frame. "
+ user << "The slice through the support rods. "
return
if(0)
if(istype(W, /obj/item/weapon/crowbar))
user << "You struggle to pry off the outer sheath. "
playsound(src, 'sound/items/Crowbar.ogg', 100, 1)
- sleep(100)
- if(!istype(src, /turf/simulated/wall) || !user || !W || !T ) return
+ if(!do_after(user,100) || !istype(src, /turf/simulated/wall) || !user || !W || !T )
+ return
if(user.loc == T && user.get_active_hand() == W )
user << "You pry off the outer sheath. "
dismantle_wall()
diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm
index 16235a72fc..9492cb87cf 100644
--- a/code/game/turfs/simulated/walls.dm
+++ b/code/game/turfs/simulated/walls.dm
@@ -162,7 +162,10 @@
reinf_material.place_dismantled_girder(src, reinf_material)
else
material.place_dismantled_girder(src)
- material.place_dismantled_product(src,devastated)
+ if(!devastated)
+ material.place_dismantled_product(src)
+ if (!reinf_material)
+ material.place_dismantled_product(src)
for(var/obj/O in src.contents) //Eject contents!
if(istype(O,/obj/structure/sign/poster))
diff --git a/code/game/turfs/snow/snow.dm b/code/game/turfs/snow/snow.dm
new file mode 100644
index 0000000000..b09275ca41
--- /dev/null
+++ b/code/game/turfs/snow/snow.dm
@@ -0,0 +1,51 @@
+/turf/snow
+ name = "snow"
+
+ dynamic_lighting = 0
+ icon = 'icons/turf/snow_new.dmi'
+ icon_state = "snow"
+
+ oxygen = MOLES_O2STANDARD * 1.15
+ nitrogen = MOLES_N2STANDARD * 1.15
+
+ temperature = TN60C
+ var/list/crossed_dirs = list()
+
+#define FOOTSTEP_SPRITE_AMT 2
+
+/turf/snow/Entered(atom/A)
+ if(ismob(A))
+ var/mdir = "[A.dir]"
+ if(crossed_dirs[mdir])
+ crossed_dirs[mdir] = min(crossed_dirs[mdir] + 1, FOOTSTEP_SPRITE_AMT)
+ else
+ crossed_dirs[mdir] = 1
+
+ update_icon()
+
+ . = ..()
+
+/turf/snow/update_icon()
+ overlays.Cut()
+ for(var/d in crossed_dirs)
+ var/amt = crossed_dirs[d]
+
+ for(var/i in 1 to amt)
+ overlays += icon(icon, "footprint[i]", text2num(d))
+
+/turf/snow/snow2
+ name = "snow"
+ icon = 'icons/turf/snow.dmi'
+ icon_state = "snow"
+
+/turf/snow/gravsnow
+ name = "snow"
+ icon_state = "gravsnow"
+
+/turf/snow/plating
+ name = "snowy playing"
+ icon_state = "snowyplating"
+
+/turf/snow/drift
+ name = "snowy plating"
+ icon_state = "snowyplayingdrift"
diff --git a/code/game/verbs/ignore.dm b/code/game/verbs/ignore.dm
new file mode 100644
index 0000000000..c154628087
--- /dev/null
+++ b/code/game/verbs/ignore.dm
@@ -0,0 +1,48 @@
+/client/verb/ignore(key_to_ignore as text)
+ set name = "Ignore"
+ set category = "OOC"
+ set desc = "Makes OOC and Deadchat messages from a specific player not appear to you."
+
+ if(!key_to_ignore)
+ return
+ key_to_ignore = ckey(sanitize(key_to_ignore))
+ if(prefs && prefs.ignored_players)
+ if(key_to_ignore in prefs.ignored_players)
+ usr << "[key_to_ignore] is already being ignored. "
+ return
+ if(key_to_ignore == usr.ckey)
+ usr <<"You can't ignore yourself. "
+ return
+
+ prefs.ignored_players |= key_to_ignore
+ prefs.save_preferences()
+ usr << "Now ignoring [key_to_ignore] . "
+
+/client/verb/unignore(key_to_unignore as text)
+ set name = "Unignore"
+ set category = "OOC"
+ set desc = "Reverts your ignoring of a specific player."
+
+ if(!key_to_unignore)
+ return
+ key_to_unignore = ckey(sanitize(key_to_unignore))
+ if(prefs && prefs.ignored_players)
+ if(!(key_to_unignore in prefs.ignored_players))
+ usr << "[key_to_unignore] isn't being ignored. "
+ return
+ prefs.ignored_players -= key_to_unignore
+ prefs.save_preferences()
+ usr << "Reverted ignore on [key_to_unignore] . "
+
+/mob/proc/is_key_ignored(var/key_to_check)
+ if(client)
+ return client.is_key_ignored(key_to_check)
+ return 0
+
+/client/proc/is_key_ignored(var/key_to_check)
+ key_to_check = ckey(key_to_check)
+ if(key_to_check in prefs.ignored_players)
+ if(directory[key_to_check] in admins) // This is here so this is only evaluated if someone is actually being blocked.
+ return 0
+ return 1
+ return 0
\ No newline at end of file
diff --git a/code/game/verbs/ooc.dm b/code/game/verbs/ooc.dm
index f2a2d74f11..2a0f3b6607 100644
--- a/code/game/verbs/ooc.dm
+++ b/code/game/verbs/ooc.dm
@@ -15,7 +15,7 @@
msg = sanitize(msg)
if(!msg) return
- if(!(prefs.toggles & CHAT_OOC))
+ if(!is_preference_enabled(/datum/client_preference/show_ooc))
src << "You have OOC muted. "
return
@@ -29,8 +29,6 @@
if(prefs.muted & MUTE_OOC)
src << "You cannot use OOC (muted). "
return
- if(handle_spam_prevention(msg,MUTE_OOC))
- return
if(findtext(msg, "byond://"))
src << "Advertising other servers is not allowed. "
log_admin("[key_name(src)] has attempted to advertise in OOC: [msg]")
@@ -50,7 +48,9 @@
ooc_style = "admin"
for(var/client/target in clients)
- if(target.prefs.toggles & CHAT_OOC)
+ if(target.is_preference_enabled(/datum/client_preference/show_ooc))
+ if(target.is_key_ignored(key)) // If we're ignored by this person, then do nothing.
+ continue
var/display_name = src.key
if(holder)
if(holder.fakekey)
@@ -83,7 +83,7 @@
if(!msg)
return
- if(!(prefs.toggles & CHAT_LOOC))
+ if(!is_preference_enabled(/datum/client_preference/show_looc))
src << "You have LOOC muted. "
return
@@ -97,8 +97,6 @@
if(prefs.muted & MUTE_OOC)
src << "You cannot use OOC (muted). "
return
- if(handle_spam_prevention(msg, MUTE_OOC))
- return
if(findtext(msg, "byond://"))
src << "Advertising other servers is not allowed. "
log_admin("[key_name(src)] has attempted to advertise in OOC: [msg]")
@@ -108,7 +106,13 @@
log_ooc("(LOCAL) [mob.name]/[key] : [msg]")
var/mob/source = mob.get_looc_source()
- var/list/heard = get_mobs_or_objects_in_view(7, get_turf(source), 1, 0)
+ var/turf/T = get_turf(source)
+ if(!T) return
+ var/list/in_range = get_mobs_and_objs_in_view_fast(T,world.view,0)
+ var/list/m_viewers = in_range["mobs"]
+
+ var/list/receivers = list() // Clients, not mobs.
+ var/list/r_receivers = list()
var/display_name = key
if(holder && holder.fakekey)
@@ -116,34 +120,33 @@
if(mob.stat != DEAD)
display_name = mob.name
- for(var/client/target in clients)
- if(target.prefs.toggles & CHAT_LOOC)
- var/prefix = ""
- var/admin_stuff = ""
- var/send = 0
+ // Everyone in normal viewing range of the LOOC
+ for(var/mob/viewer in m_viewers)
+ if(viewer.client && viewer.client.is_preference_enabled(/datum/client_preference/show_looc))
+ receivers |= viewer.client
+ else if(istype(viewer,/mob/observer/eye)) // For AI eyes and the like
+ var/mob/observer/eye/E = viewer
+ if(E.owner && E.owner.client)
+ receivers |= E.owner.client
- if(target in admins)
- admin_stuff += "/([key])"
- if(target != src)
- admin_stuff += "([admin_jump_link(mob, target.holder)])"
+ // Admins with RLOOC displayed who weren't already in
+ for(var/client/admin in admins)
+ if(!(admin in receivers) && admin.is_preference_enabled(/datum/client_preference/holder/show_rlooc))
+ r_receivers |= admin
- if(target.mob in heard)
- send = 1
- if(isAI(target.mob))
- prefix = "(Core) "
+ // Send a message
+ for(var/client/target in receivers)
+ var/admin_stuff = ""
+
+ if(target in admins)
+ admin_stuff += "/([key])"
- else if(isAI(target.mob)) // Special case
- var/mob/living/silicon/ai/A = target.mob
- if(A.eyeobj in hearers(7, source))
- send = 1
- prefix = "(Eye) "
+ target << "" + create_text_tag("looc", "LOOC:", target) + " [display_name][admin_stuff]: [msg] "
- if(!send && (target in admins))
- send = 1
- prefix = "(R)"
-
- if(send)
- target << "" + create_text_tag("looc", "LOOC:", target) + " [prefix] [display_name][admin_stuff]: [msg] "
+ for(var/client/target in r_receivers)
+ var/admin_stuff = "/([key])([admin_jump_link(mob, target.holder)])"
+
+ target << "" + create_text_tag("looc", "LOOC:", target) + " (R) [display_name][admin_stuff]: [msg] "
/mob/proc/get_looc_source()
return src
diff --git a/code/game/verbs/who.dm b/code/game/verbs/who.dm
index 7580b76fff..c8dfc8dedd 100644
--- a/code/game/verbs/who.dm
+++ b/code/game/verbs/who.dm
@@ -18,7 +18,7 @@
entry += " - Unconscious "
if(DEAD)
if(isobserver(C.mob))
- var/mob/dead/observer/O = C.mob
+ var/mob/observer/dead/O = C.mob
if(O.started_as_observer)
entry += " - Observing "
else
@@ -41,6 +41,13 @@
if(is_special_character(C.mob))
entry += " - Antagonist "
+
+ if(C.is_afk())
+ var/seconds = C.last_activity_seconds()
+ entry += " (AFK - "
+ entry += "[round(seconds / 60)] minutes, "
+ entry += "[seconds % 60] seconds)"
+
entry += " (? )"
Lines += entry
else
diff --git a/code/global.dm b/code/global.dm
index 7a9366c3b3..15b17823f8 100644
--- a/code/global.dm
+++ b/code/global.dm
@@ -22,19 +22,22 @@ var/global/datum/universal_state/universe = new
var/global/list/global_map = null
// Noises made when hit while typing.
-var/list/hit_appends = list("-OOF", "-ACK", "-UGH", "-HRNK", "-HURGH", "-GLORF")
+var/list/hit_appends = list("-OOF", "-ACK", "-UGH", "-HRNK", "-HURGH", "-GLORF")
var/diary = null
-var/href_logfile = null
-var/station_name = "Northern Star"
-var/station_short = "Northern Star"
-var/const/dock_name = "Vir Interstellar Spaceport"
-var/const/boss_name = "Central Command"
-var/const/boss_short = "Centcomm"
-var/const/company_name = "NanoTrasen"
-var/const/company_short = "NT"
-var/game_version = "Polaris"
-var/changelog_hash = ""
-var/game_year = (text2num(time2text(world.realtime, "YYYY")) + 544)
+var/href_logfile = null
+var/station_name = "Northern Star"
+var/const/station_orig = "Northern Star" //station_name can't be const due to event prefix/suffix
+var/const/station_short = "Northern Star"
+var/const/dock_name = "Vir Interstellar Spaceport"
+var/const/boss_name = "Central Command"
+var/const/boss_short = "Centcomm"
+var/const/company_name = "NanoTrasen"
+var/const/company_short = "NT"
+var/const/star_name = "Vir"
+var/const/starsys_name = "Vir"
+var/const/game_version = "Polaris"
+var/changelog_hash = ""
+var/game_year = (text2num(time2text(world.realtime, "YYYY")) + 544)
var/round_progressing = 1
//On some maps, it does not make sense for space turf to appear when something blows up (e.g. on an asteroid colony, or planetside)
@@ -115,7 +118,6 @@ var/join_motd = null
var/datum/nanomanager/nanomanager = new() // NanoManager, the manager for Nano UIs.
var/datum/event_manager/event_manager = new() // Event Manager, the manager for events.
-var/datum/subsystem/alarm/alarm_manager = new() // Alarm Manager, the manager for alarms.
var/list/awaydestinations = list() // Away missions. A list of landmarks that the warpgate can take you to.
diff --git a/code/hub.dm b/code/hub.dm
index 6c38b00143..767ff8510f 100644
--- a/code/hub.dm
+++ b/code/hub.dm
@@ -1,8 +1,10 @@
/world
hub = "Exadv1.spacestation13"
- hub_password = "SORRYNOPASSWORD"
+ hub_password = "kMZy3U5jJHSiBQjr"
+ //hub_password = "SORRYNOPASSWORD"
name = "Space Station 13"
+
/* This is for any host that would like their server to appear on the main SS13 hub.
To use it, simply replace the password above, with the password found below, and it should work.
If not, let us know on the main tgstation IRC channel of irc.rizon.net #tgstation13 we can help you there.
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index be3b6e0136..e045c19f1e 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -16,7 +16,7 @@ var/global/floorIsLava = 0
var/rendered = "ATTACK: [text] "
for(var/client/C in admins)
if((R_ADMIN|R_MOD) & C.holder.rights)
- if(C.prefs.toggles & CHAT_ATTACKLOGS)
+ if(C.is_preference_enabled(/datum/client_preference/mod/show_attack_logs))
var/msg = rendered
C << msg
@@ -594,26 +594,33 @@ proc/admin_notice(var/message, var/rights)
usr << browse(dat, "window=admin2;size=210x280")
return
-/datum/admins/proc/Secrets()
+/datum/admins/proc/Secrets(var/datum/admin_secret_category/active_category = null)
if(!check_rights(0)) return
+ // Print the header with category selection buttons.
var/dat = "The first rule of adminbuse is: you don't talk about the adminbuse. "
for(var/datum/admin_secret_category/category in admin_secrets.categories)
if(!category.can_view(usr))
continue
- dat += "[category.name] "
- if(category.desc)
- dat += "[category.desc] "
- for(var/datum/admin_secret_item/item in category.items)
+ dat += "[category.name] "
+ dat += " "
+
+ // If a category is selected, print its description and then options
+ if(istype(active_category) && active_category.can_view(usr))
+ dat += "[active_category.name] "
+ if(active_category.desc)
+ dat += "[active_category.desc] "
+ for(var/datum/admin_secret_item/item in active_category.items)
if(!item.can_view(usr))
continue
dat += "[item.name()] "
dat += " "
- usr << browse(dat, "window=secrets")
+
+ var/datum/browser/popup = new(usr, "secrets", "Secrets", 500, 500)
+ popup.set_content(dat)
+ popup.open()
return
-
-
/////////////////////////////////////////////////////////////////////////////////////////////////admins2.dm merge
//i.e. buttons/verbs
@@ -895,22 +902,26 @@ proc/admin_notice(var/message, var/rights)
////////////////////////////////////////////////////////////////////////////////////////////////ADMIN HELPER PROCS
-/proc/is_special_character(mob/M as mob) // returns 1 for specail characters and 2 for heroes of gamemode
+/proc/is_special_character(var/character) // returns 1 for special characters and 2 for heroes of gamemode
if(!ticker || !ticker.mode)
return 0
- if (!istype(M))
- return 0
+ var/datum/mind/M
+ if (ismob(character))
+ var/mob/C = character
+ M = C.mind
+ else if(istype(character, /datum/mind))
+ M = character
- if(M.mind)
+ if(M)
if(ticker.mode.antag_templates && ticker.mode.antag_templates.len)
for(var/datum/antagonist/antag in ticker.mode.antag_templates)
- if(antag.is_antagonist(M.mind))
+ if(antag.is_antagonist(M))
return 2
- else if(M.mind.special_role)
+ if(M.special_role)
return 1
- if(isrobot(M))
- var/mob/living/silicon/robot/R = M
+ if(isrobot(character))
+ var/mob/living/silicon/robot/R = character
if(R.emagged)
return 1
@@ -1251,7 +1262,7 @@ proc/admin_notice(var/message, var/rights)
//Returns 1 to let the dragdrop code know we are trapping this event
//Returns 0 if we don't plan to trap the event
-/datum/admins/proc/cmd_ghost_drag(var/mob/dead/observer/frommob, var/mob/living/tomob)
+/datum/admins/proc/cmd_ghost_drag(var/mob/observer/dead/frommob, var/mob/living/tomob)
if(!istype(frommob))
return //Extra sanity check to make sure only observers are shoved into things
diff --git a/code/modules/admin/admin_ranks.dm b/code/modules/admin/admin_ranks.dm
index 5d1f5db452..3652237454 100644
--- a/code/modules/admin/admin_ranks.dm
+++ b/code/modules/admin/admin_ranks.dm
@@ -14,7 +14,7 @@ var/list/admin_ranks = list() //list of all ranks with associated rights
if(!length(line)) continue
if(copytext(line,1,2) == "#") continue
- var/list/List = text2list(line,"+")
+ var/list/List = splittext(line,"+")
if(!List.len) continue
var/rank = ckeyEx(List[1])
@@ -77,7 +77,7 @@ var/list/admin_ranks = list() //list of all ranks with associated rights
if(copytext(line,1,2) == "#") continue
//Split the line at every "-"
- var/list/List = text2list(line, "-")
+ var/list/List = splittext(line, "-")
if(!List.len) continue
//ckey is before the first "-"
diff --git a/code/modules/admin/admin_secrets.dm b/code/modules/admin/admin_secrets.dm
index 38bebb844a..b6d0abbe1c 100644
--- a/code/modules/admin/admin_secrets.dm
+++ b/code/modules/admin/admin_secrets.dm
@@ -22,6 +22,9 @@ var/datum/admin_secrets/admin_secrets = new()
dd_insertObjectList(category.items, item)
items += item
+//
+// Secret Item Category - Each subtype is a category for organizing secret commands.
+//
/datum/admin_secret_category
var/name = ""
var/desc = ""
@@ -37,6 +40,10 @@ var/datum/admin_secrets/admin_secrets = new()
return 1
return 0
+//
+// Secret Item Datum - Each subtype is a command on the secrets panel.
+// Override execute() with the implementation of the command.
+//
/datum/admin_secret_item
var/name = ""
var/category = null
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index 39e6be78f9..f049424b02 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -1,102 +1,101 @@
//admin verb groups - They can overlap if you so wish. Only one of each verb will exist in the verbs list regardless
var/list/admin_verbs_default = list(
- /datum/admins/proc/show_player_panel, /*shows an interface for individual players, with various links (links require additional flags*/
+ /datum/admins/proc/show_player_panel, //shows an interface for individual players, with various links (links require additional flags,
/client/proc/player_panel,
- /client/proc/toggleadminhelpsound, /*toggles whether we hear a sound when adminhelps/PMs are used*/
- /client/proc/deadmin_self, /*destroys our own admin datum so we can play as a regular player*/
- /client/proc/hide_verbs, /*hides all our adminverbs*/
- /client/proc/hide_most_verbs, /*hides all our hideable adminverbs*/
- /client/proc/debug_variables, /*allows us to -see- the variables of any instance in the game. +VAREDIT needed to modify*/
-// /client/proc/check_antagonists, /*shows all antags*/
+ /client/proc/deadmin_self, //destroys our own admin datum so we can play as a regular player,
+ /client/proc/hide_verbs, //hides all our adminverbs,
+ /client/proc/hide_most_verbs, //hides all our hideable adminverbs,
+ /client/proc/debug_variables, //allows us to -see- the variables of any instance in the game. +VAREDIT needed to modify,
+// /client/proc/check_antagonists, //shows all antags,
// /client/proc/cmd_mod_say,
- /client/proc/cmd_mentor_check_new_players
-// /client/proc/deadchat /*toggles deadchat on/off*/
+ /client/proc/cmd_mentor_check_new_players,
+// /client/proc/deadchat //toggles deadchat on/off,
+// /client/proc/toggle_ahelp_sound,
)
var/list/admin_verbs_admin = list(
- /client/proc/player_panel_new, /*shows an interface for all players, with links to various panels*/
+ /client/proc/player_panel_new, //shows an interface for all players, with links to various panels,
/datum/admins/proc/set_tcrystals,
/datum/admins/proc/add_tcrystals,
- /client/proc/invisimin, /*allows our mob to go invisible/visible*/
-// /datum/admins/proc/show_traitor_panel, /*interface which shows a mob's mind*/ -Removed due to rare practical use. Moved to debug verbs ~Errorage
- /datum/admins/proc/show_game_mode, /*Configuration window for the current game mode.*/
- /datum/admins/proc/force_mode_latespawn, /*Force the mode to try a latespawn proc*/
- /datum/admins/proc/force_antag_latespawn, /*Force a specific template to try a latespawn proc*/
- /datum/admins/proc/toggleenter, /*toggles whether people can join the current game*/
- /datum/admins/proc/toggleguests, /*toggles whether guests can join the current game*/
- /datum/admins/proc/announce, /*priority announce something to all clients.*/
- /client/proc/colorooc, /*allows us to set a custom colour for everythign we say in ooc*/
- /client/proc/admin_ghost, /*allows us to ghost/reenter body at will*/
- /client/proc/toggle_view_range, /*changes how far we can see*/
- /datum/admins/proc/view_txt_log, /*shows the server log (diary) for today*/
- /datum/admins/proc/view_atk_log, /*shows the server combat-log, doesn't do anything presently*/
- /client/proc/cmd_admin_pm_context, /*right-click adminPM interface*/
- /client/proc/cmd_admin_pm_panel, /*admin-pm list*/
- /client/proc/cmd_admin_subtle_message, /*send an message to somebody as a 'voice in their head'*/
- /client/proc/cmd_admin_delete, /*delete an instance/object/mob/etc*/
- /client/proc/cmd_admin_check_contents, /*displays the contents of an instance*/
- /datum/admins/proc/access_news_network, /*allows access of newscasters*/
- /client/proc/giveruntimelog, /*allows us to give access to runtime logs to somebody*/
- /client/proc/getserverlog, /*allows us to fetch server logs (diary) for other days*/
- /client/proc/jumptocoord, /*we ghost and jump to a coordinate*/
- /client/proc/Getmob, /*teleports a mob to our location*/
- /client/proc/Getkey, /*teleports a mob with a certain ckey to our location*/
-// /client/proc/sendmob, /*sends a mob somewhere*/ -Removed due to it needing two sorting procs to work, which were executed every time an admin right-clicked. ~Errorage
+ /client/proc/invisimin, //allows our mob to go invisible/visible,
+// /datum/admins/proc/show_traitor_panel, //interface which shows a mob's mind -Removed due to rare practical use. Moved to debug verbs ~Errorage,
+ /datum/admins/proc/show_game_mode, //Configuration window for the current game mode.,
+ /datum/admins/proc/force_mode_latespawn, //Force the mode to try a latespawn proc,
+ /datum/admins/proc/force_antag_latespawn, //Force a specific template to try a latespawn proc,
+ /datum/admins/proc/toggleenter, //toggles whether people can join the current game,
+ /datum/admins/proc/toggleguests, //toggles whether guests can join the current game,
+ /datum/admins/proc/announce, //priority announce something to all clients.,
+ /client/proc/colorooc, //allows us to set a custom colour for everythign we say in ooc,
+ /client/proc/admin_ghost, //allows us to ghost/reenter body at will,
+ /client/proc/toggle_view_range, //changes how far we can see,
+ /datum/admins/proc/view_txt_log, //shows the server log (diary) for today,
+ /datum/admins/proc/view_atk_log, //shows the server combat-log, doesn't do anything presently,
+ /client/proc/cmd_admin_pm_context, //right-click adminPM interface,
+ /client/proc/cmd_admin_pm_panel, //admin-pm list,
+ /client/proc/cmd_admin_subtle_message, //send an message to somebody as a 'voice in their head',
+ /client/proc/cmd_admin_delete, //delete an instance/object/mob/etc,
+ /client/proc/cmd_admin_check_contents, //displays the contents of an instance,
+ /datum/admins/proc/access_news_network, //allows access of newscasters,
+ /client/proc/giveruntimelog, //allows us to give access to runtime logs to somebody,
+ /client/proc/getserverlog, //allows us to fetch server logs (diary) for other days,
+ /client/proc/jumptocoord, //we ghost and jump to a coordinate,
+ /client/proc/Getmob, //teleports a mob to our location,
+ /client/proc/Getkey, //teleports a mob with a certain ckey to our location,
+// /client/proc/sendmob, //sends a mob somewhere, -Removed due to it needing two sorting procs to work, which were executed every time an admin right-clicked. ~Errorage,
/client/proc/Jump,
- /client/proc/jumptokey, /*allows us to jump to the location of a mob with a certain ckey*/
- /client/proc/jumptomob, /*allows us to jump to a specific mob*/
- /client/proc/jumptoturf, /*allows us to jump to a specific turf*/
- /client/proc/admin_call_shuttle, /*allows us to call the emergency shuttle*/
- /client/proc/admin_cancel_shuttle, /*allows us to cancel the emergency shuttle, sending it back to centcomm*/
- /client/proc/cmd_admin_direct_narrate, /*send text directly to a player with no padding. Useful for narratives and fluff-text*/
- /client/proc/cmd_admin_world_narrate, /*sends text to all players with no padding*/
+ /client/proc/jumptokey, //allows us to jump to the location of a mob with a certain ckey,
+ /client/proc/jumptomob, //allows us to jump to a specific mob,
+ /client/proc/jumptoturf, //allows us to jump to a specific turf,
+ /client/proc/admin_call_shuttle, //allows us to call the emergency shuttle,
+ /client/proc/admin_cancel_shuttle, //allows us to cancel the emergency shuttle, sending it back to centcomm,
+ /client/proc/cmd_admin_direct_narrate, //send text directly to a player with no padding. Useful for narratives and fluff-text,
+ /client/proc/cmd_admin_world_narrate, //sends text to all players with no padding,
/client/proc/cmd_admin_create_centcom_report,
- /client/proc/check_words, /*displays cult-words*/
- /client/proc/check_ai_laws, /*shows AI and borg laws*/
- /client/proc/rename_silicon, /*properly renames silicons*/
- /client/proc/manage_silicon_laws, /* Allows viewing and editing silicon laws. */
+ /client/proc/check_words, //displays cult-words,
+ /client/proc/check_ai_laws, //shows AI and borg laws,
+ /client/proc/rename_silicon, //properly renames silicons,
+ /client/proc/manage_silicon_laws, // Allows viewing and editing silicon laws. ,
/client/proc/check_antagonists,
- /client/proc/admin_memo, /*admin memo system. show/delete/write. +SERVER needed to delete admin memos of others*/
- /client/proc/dsay, /*talk in deadchat using our ckey/fakekey*/
- /client/proc/toggleprayers, /*toggles prayers on/off*/
-// /client/proc/toggle_hear_deadcast, /*toggles whether we hear deadchat*/
- /client/proc/toggle_hear_radio, /*toggles whether we hear the radio*/
- /client/proc/investigate_show, /*various admintools for investigation. Such as a singulo grief-log*/
+ /client/proc/admin_memo, //admin memo system. show/delete/write. +SERVER needed to delete admin memos of others,
+ /client/proc/dsay, //talk in deadchat using our ckey/fakekey,
+// /client/proc/toggle_hear_deadcast, //toggles whether we hear deadchat,
+ /client/proc/investigate_show, //various admintools for investigation. Such as a singulo grief-log,
/client/proc/secrets,
- /datum/admins/proc/toggleooc, /*toggles ooc on/off for everyone*/
- /datum/admins/proc/togglelooc, /*toggles looc on/off for everyone*/
- /datum/admins/proc/toggleoocdead, /*toggles ooc on/off for everyone who is dead*/
- /datum/admins/proc/togglehubvisibility, /*toggles visibility on the BYOND Hub.*/
- /datum/admins/proc/toggledsay, /*toggles dsay on/off for everyone*/
- /client/proc/game_panel, /*game panel, allows to change game-mode etc*/
- /client/proc/cmd_admin_say, /*admin-only ooc chat*/
+ /datum/admins/proc/toggleooc, //toggles ooc on/off for everyone,
+ /datum/admins/proc/togglelooc, //toggles looc on/off for everyone,
+ /datum/admins/proc/toggleoocdead, //toggles ooc on/off for everyone who is dead,
+ /datum/admins/proc/togglehubvisibility, //toggles visibility on the BYOND Hub.,
+ /datum/admins/proc/toggledsay, //toggles dsay on/off for everyone,
+ /client/proc/game_panel, //game panel, allows to change game-mode etc,
+ /client/proc/cmd_admin_say, //admin-only ooc chat,
/datum/admins/proc/PlayerNotes,
/client/proc/cmd_mod_say,
/datum/admins/proc/show_player_info,
- /client/proc/free_slot, /*frees slot for chosen job*/
+ /client/proc/free_slot, //frees slot for chosen job,
/client/proc/cmd_admin_change_custom_event,
/client/proc/cmd_admin_rejuvenate,
- /client/proc/toggleattacklogs,
- /client/proc/toggledebuglogs,
/client/proc/toggleghostwriters,
/client/proc/toggledrones,
/datum/admins/proc/show_skills,
/client/proc/check_customitem_activity,
/client/proc/man_up,
/client/proc/global_man_up,
- /client/proc/response_team, // Response Teams admin verb
+ /client/proc/response_team, // Response Teams admin verb,
/client/proc/toggle_antagHUD_use,
/client/proc/toggle_antagHUD_restrictions,
- /client/proc/allow_character_respawn, /* Allows a ghost to respawn */
+ /client/proc/allow_character_respawn, // Allows a ghost to respawn ,
/client/proc/event_manager_panel,
/client/proc/empty_ai_core_toggle_latejoin,
/client/proc/empty_ai_core_toggle_latejoin,
/client/proc/aooc,
- /client/proc/change_human_appearance_admin, /* Allows an admin to change the basic appearance of human-based mobs */
- /client/proc/change_human_appearance_self, /* Allows the human-based mob itself change its basic appearance */
+ /client/proc/change_human_appearance_admin, // Allows an admin to change the basic appearance of human-based mobs ,
+ /client/proc/change_human_appearance_self, // Allows the human-based mob itself change its basic appearance ,
/client/proc/change_security_level,
/client/proc/view_chemical_reaction_logs,
/client/proc/makePAI,
- /datum/admins/proc/paralyze_mob
+ /client/proc/toggle_debug_logs,
+ /client/proc/toggle_attack_logs,
+ /datum/admins/proc/paralyze_mob,
+ /client/proc/fixatmos
)
var/list/admin_verbs_ban = list(
/client/proc/unban_panel,
@@ -131,7 +130,7 @@ var/list/admin_verbs_spawn = list(
/datum/admins/proc/spawn_custom_item,
/datum/admins/proc/check_custom_items,
/datum/admins/proc/spawn_plant,
- /datum/admins/proc/spawn_atom, /*allows us to spawn instances*/
+ /datum/admins/proc/spawn_atom, //allows us to spawn instances,
/client/proc/respawn_character,
/client/proc/virus2_editor,
/client/proc/spawn_chemdisp_cartridge
@@ -149,7 +148,7 @@ var/list/admin_verbs_server = list(
/datum/admins/proc/immreboot,
/client/proc/everyone_random,
/datum/admins/proc/toggleAI,
- /client/proc/cmd_admin_delete, /*delete an instance/object/mob/etc*/
+ /client/proc/cmd_admin_delete, //delete an instance/object/mob/etc,
/client/proc/cmd_debug_del_all,
/datum/admins/proc/adrev,
/datum/admins/proc/adspawn,
@@ -161,7 +160,7 @@ var/list/admin_verbs_server = list(
/client/proc/nanomapgen_DumpImage
)
var/list/admin_verbs_debug = list(
- /client/proc/getruntimelog, /*allows us to access runtime logs to somebody*/
+ /client/proc/getruntimelog, //allows us to access runtime logs to somebody,
/client/proc/cmd_admin_list_open_jobs,
/client/proc/Debug2,
/client/proc/kill_air,
@@ -184,17 +183,18 @@ var/list/admin_verbs_debug = list(
/client/proc/overlay_random_map,
/client/proc/delete_random_map,
/client/proc/show_plant_genes,
+ /client/proc/show_xenobio_genes,
/client/proc/enable_debug_verbs,
/client/proc/callproc,
/client/proc/callproc_target,
- /client/proc/toggledebuglogs,
/client/proc/SDQL_query,
/client/proc/SDQL2_query,
/client/proc/Jump,
/client/proc/jumptomob,
/client/proc/jumptocoord,
/client/proc/dsay,
- /client/proc/admin_ghost /*allows us to ghost/reenter body at will*/
+ /client/proc/toggle_debug_logs,
+ /client/proc/admin_ghost //allows us to ghost/reenter body at will,
)
var/list/admin_verbs_paranoid_debug = list(
@@ -218,8 +218,6 @@ var/list/admin_verbs_rejuv = list(
var/list/admin_verbs_hideable = list(
/client/proc/deadmin_self,
// /client/proc/deadchat,
- /client/proc/toggleprayers,
- /client/proc/toggle_hear_radio,
/datum/admins/proc/show_traitor_panel,
/datum/admins/proc/toggleenter,
/datum/admins/proc/toggleguests,
@@ -288,14 +286,12 @@ var/list/admin_verbs_hideable = list(
/datum/admins/proc/set_tcrystals
)
var/list/admin_verbs_mod = list(
- /client/proc/cmd_admin_pm_context, /*right-click adminPM interface*/
- /client/proc/cmd_admin_pm_panel, /*admin-pm list*/
- /client/proc/debug_variables, /*allows us to -see- the variables of any instance in the game.*/
- /client/proc/toggledebuglogs,
+ /client/proc/cmd_admin_pm_context, //right-click adminPM interface,
+ /client/proc/cmd_admin_pm_panel, //admin-pm list,
+ /client/proc/debug_variables, //allows us to -see- the variables of any instance in the game.,
/datum/admins/proc/PlayerNotes,
- /client/proc/admin_ghost, /*allows us to ghost/reenter body at will*/
+ /client/proc/admin_ghost, //allows us to ghost/reenter body at will,
/client/proc/cmd_mod_say,
- /client/proc/toggleattacklogs,
/datum/admins/proc/show_player_info,
/client/proc/player_panel_new,
/client/proc/dsay,
@@ -304,10 +300,11 @@ var/list/admin_verbs_mod = list(
/client/proc/check_antagonists,
/client/proc/aooc,
/client/proc/jobbans,
- /client/proc/cmd_admin_subtle_message, /*send an message to somebody as a 'voice in their head'*/
+ /client/proc/toggle_attack_logs,
+ /client/proc/cmd_admin_subtle_message, //send an message to somebody as a 'voice in their head',
/datum/admins/proc/paralyze_mob,
/client/proc/cmd_admin_direct_narrate,
- /client/proc/allow_character_respawn /* Allows a ghost to respawn */
+ /client/proc/allow_character_respawn // Allows a ghost to respawn ,
)
var/list/admin_verbs_mentor = list(
@@ -400,9 +397,9 @@ var/list/admin_verbs_mentor = list(
set category = "Admin"
set name = "Aghost"
if(!holder) return
- if(istype(mob,/mob/dead/observer))
+ if(istype(mob,/mob/observer/dead))
//re-enter
- var/mob/dead/observer/ghost = mob
+ var/mob/observer/dead/ghost = mob
if(!is_mentor(usr.client))
ghost.can_reenter_corpse = 1
if(ghost.can_reenter_corpse)
@@ -418,7 +415,7 @@ var/list/admin_verbs_mentor = list(
else
//ghostize
var/mob/body = mob
- var/mob/dead/observer/ghost = body.ghostize(1)
+ var/mob/observer/dead/ghost = body.ghostize(1)
ghost.admin_ghosted = 1
if(body)
body.teleop = ghost
@@ -525,12 +522,16 @@ var/list/admin_verbs_mentor = list(
if(holder)
if(holder.fakekey)
holder.fakekey = null
+ if(istype(src.mob, /mob/new_player))
+ mob.name = capitalize(ckey)
else
var/new_key = ckeyEx(input("Enter your desired display name.", "Fake Key", key) as text|null)
if(!new_key) return
if(length(new_key) >= 26)
new_key = copytext(new_key, 1, 26)
holder.fakekey = new_key
+ if(istype(mob, /mob/new_player))
+ mob.name = new_key
log_admin("[key_name(usr)] has turned stealth mode [holder.fakekey ? "ON" : "OFF"]")
message_admins("[key_name_admin(usr)] has turned stealth mode [holder.fakekey ? "ON" : "OFF"]", 1)
feedback_add_details("admin_verb","SM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -903,17 +904,6 @@ var/list/admin_verbs_mentor = list(
message_admins("A job slot for [job] has been opened by [key_name_admin(usr)]")
return
-/client/proc/toggleattacklogs()
- set name = "Toggle Attack Log Messages"
- set category = "Preferences"
-
- prefs.toggles ^= CHAT_ATTACKLOGS
- if (prefs.toggles & CHAT_ATTACKLOGS)
- usr << "You now will get attack log messages"
- else
- usr << "You now won't get attack log messages"
-
-
/client/proc/toggleghostwriters()
set name = "Toggle ghost writers"
set category = "Server"
@@ -942,17 +932,6 @@ var/list/admin_verbs_mentor = list(
src << "Enabled maint drones. "
message_admins("Admin [key_name_admin(usr)] has enabled maint drones.", 1)
-/client/proc/toggledebuglogs()
- set name = "Toggle Debug Log Messages"
- set category = "Preferences"
-
- prefs.toggles ^= CHAT_DEBUGLOGS
- if (prefs.toggles & CHAT_DEBUGLOGS)
- usr << "You now will get debug log messages"
- else
- usr << "You now won't get debug log messages"
-
-
/client/proc/man_up(mob/T as mob in mob_list)
set category = "Fun"
set name = "Man Up"
diff --git a/code/modules/admin/create_mob.dm b/code/modules/admin/create_mob.dm
index a723fe3795..4a892d893d 100644
--- a/code/modules/admin/create_mob.dm
+++ b/code/modules/admin/create_mob.dm
@@ -2,7 +2,7 @@
/datum/admins/proc/create_mob(var/mob/user)
if (!create_mob_html)
var/mobjs = null
- mobjs = list2text(typesof(/mob), ";")
+ mobjs = jointext(typesof(/mob), ";")
create_mob_html = file2text('html/create_object.html')
create_mob_html = replacetext(create_mob_html, "null /* object types */", "\"[mobjs]\"")
diff --git a/code/modules/admin/create_object.dm b/code/modules/admin/create_object.dm
index 779cb7bc90..3778441b1d 100644
--- a/code/modules/admin/create_object.dm
+++ b/code/modules/admin/create_object.dm
@@ -3,7 +3,7 @@
/datum/admins/proc/create_object(var/mob/user)
if (!create_object_html)
var/objectjs = null
- objectjs = list2text(typesof(/obj), ";")
+ objectjs = jointext(typesof(/obj), ";")
create_object_html = file2text('html/create_object.html')
create_object_html = replacetext(create_object_html, "null /* object types */", "\"[objectjs]\"")
@@ -22,7 +22,7 @@
if (!quick_create_object_html)
var/objectjs = null
- objectjs = list2text(typesof(path), ";")
+ objectjs = jointext(typesof(path), ";")
quick_create_object_html = file2text('html/create_object.html')
quick_create_object_html = replacetext(quick_create_object_html, "null /* object types */", "\"[objectjs]\"")
diff --git a/code/modules/admin/create_turf.dm b/code/modules/admin/create_turf.dm
index 0938b7bd33..fdaa103b5d 100644
--- a/code/modules/admin/create_turf.dm
+++ b/code/modules/admin/create_turf.dm
@@ -2,7 +2,7 @@
/datum/admins/proc/create_turf(var/mob/user)
if (!create_turf_html)
var/turfjs = null
- turfjs = list2text(typesof(/turf), ";")
+ turfjs = jointext(typesof(/turf), ";")
create_turf_html = file2text('html/create_object.html')
create_turf_html = replacetext(create_turf_html, "null /* object types */", "\"[turfjs]\"")
diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm
index 83a2f3b370..622be84c3d 100644
--- a/code/modules/admin/player_panel.dm
+++ b/code/modules/admin/player_panel.dm
@@ -392,7 +392,7 @@
if (ticker && ticker.current_state >= GAME_STATE_PLAYING)
var/dat = "Round Status Round Status "
dat += "Current Game Mode: [ticker.mode.name] "
- dat += "Round Duration: [round(world.time / 36000)]:[add_zero(world.time / 600 % 60, 2)]:[world.time / 100 % 6][world.time / 100 % 10] "
+ dat += "Round Duration: [round_duration_as_text()] "
dat += "Emergency shuttle "
if (!emergency_shuttle.online())
dat += "Call Shuttle "
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index 4bc8298193..cf98ede72f 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -262,7 +262,7 @@
message_admins("\blue [key_name_admin(usr)] has used rudimentary transformation on [key_name_admin(M)]. Transforming to [href_list["simplemake"]]; deletemob=[delmob]", 1)
switch(href_list["simplemake"])
- if("observer") M.change_mob_type( /mob/dead/observer , null, null, delmob )
+ if("observer") M.change_mob_type( /mob/observer/dead , null, null, delmob )
if("larva") M.change_mob_type( /mob/living/carbon/alien/larva , null, null, delmob )
if("nymph") M.change_mob_type( /mob/living/carbon/alien/diona , null, null, delmob )
if("human") M.change_mob_type( /mob/living/carbon/human , null, null, delmob, href_list["species"])
@@ -769,7 +769,7 @@
message_admins("\blue [key_name_admin(usr)] removed [t]", 1)
jobban_remove(t)
href_list["ban"] = 1 // lets it fall through and refresh
- var/t_split = text2list(t, " - ")
+ var/t_split = splittext(t, " - ")
var/key = t_split[1]
var/job = t_split[2]
DB_ban_unban(ckey(key), BANTYPE_JOB_PERMA, job)
@@ -1574,9 +1574,9 @@
alert("Select fewer object types, (max 5)")
return
else if(length(removed_paths))
- alert("Removed:\n" + list2text(removed_paths, "\n"))
+ alert("Removed:\n" + jointext(removed_paths, "\n"))
- var/list/offset = text2list(href_list["offset"],",")
+ var/list/offset = splittext(href_list["offset"],",")
var/number = dd_range(1, 100, text2num(href_list["object_count"]))
var/X = offset.len > 0 ? text2num(offset[1]) : 0
var/Y = offset.len > 1 ? text2num(offset[2]) : 0
@@ -1644,6 +1644,10 @@
log_and_message_admins("created [number] [english_list(paths)]")
return
+ else if(href_list["admin_secrets_panel"])
+ var/datum/admin_secret_category/AC = locate(href_list["admin_secrets_panel"]) in admin_secrets.categories
+ src.Secrets(AC)
+
else if(href_list["admin_secrets"])
var/datum/admin_secret_item/item = locate(href_list["admin_secrets"]) in admin_secrets.items
item.execute(usr)
@@ -1917,7 +1921,7 @@ mob/living/silicon/ai/can_centcom_reply()
if(client && eyeobj)
return "|EYE "
-/mob/dead/observer/extra_admin_link(var/source)
+/mob/observer/dead/extra_admin_link(var/source)
if(mind && mind.current)
return "|BDY "
diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm
index 5f4595e026..8f8532590e 100644
--- a/code/modules/admin/verbs/adminhelp.dm
+++ b/code/modules/admin/verbs/adminhelp.dm
@@ -17,9 +17,6 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
adminhelped = 1 //Determines if they get the message to reply by clicking the name.
- if(src.handle_spam_prevention(msg,MUTE_ADMINHELP))
- return
-
//clean the input msg
if(!msg)
return
@@ -29,7 +26,7 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
var/original_msg = msg
//explode the input msg into a list
- var/list/msglist = text2list(msg, " ")
+ var/list/msglist = splittext(msg, " ")
//generate keywords lookup
var/list/surnames = list()
@@ -40,7 +37,7 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
if(M.mind) indexing += M.mind.name
for(var/string in indexing)
- var/list/L = text2list(string, " ")
+ var/list/L = splittext(string, " ")
var/surname_found = 0
//surnames
for(var/i=L.len, i>=1, i--)
@@ -100,7 +97,7 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
if((R_ADMIN|R_MOD|R_MENTOR|R_SERVER) & X.holder.rights)
if(X.is_afk())
admin_number_afk++
- if(X.prefs.toggles & SOUND_ADMINHELP)
+ if(X.is_preference_enabled(/datum/client_preference/holder/play_adminhelp_ping))
X << 'sound/effects/adminhelp.ogg'
if(X.holder.rights == R_MENTOR)
X << mentor_msg // Mentors won't see coloring of names on people with special_roles (Antags, etc.)
diff --git a/code/modules/admin/verbs/adminjump.dm b/code/modules/admin/verbs/adminjump.dm
index e579ca1544..e57720bb62 100644
--- a/code/modules/admin/verbs/adminjump.dm
+++ b/code/modules/admin/verbs/adminjump.dm
@@ -1,7 +1,7 @@
/mob/proc/on_mob_jump()
return
-/mob/dead/observer/on_mob_jump()
+/mob/observer/dead/on_mob_jump()
following = null
/client/proc/Jump(var/area/A in return_sorted_areas())
diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm
index 61050526d5..bcb87f06d8 100644
--- a/code/modules/admin/verbs/adminpm.dm
+++ b/code/modules/admin/verbs/adminpm.dm
@@ -21,7 +21,7 @@
if(T.mob)
if(istype(T.mob, /mob/new_player))
targets["(New Player) - [T]"] = T
- else if(istype(T.mob, /mob/dead/observer))
+ else if(istype(T.mob, /mob/observer/dead))
targets["[T.mob.name](Ghost) - [T]"] = T
else
targets["[T.mob.real_name](as [T.mob.name]) - [T]"] = T
@@ -56,9 +56,6 @@
else src << "Error: Private-Message: Client not found. They may have lost connection, so try using an adminhelp! "
return
- if (src.handle_spam_prevention(msg,MUTE_ADMINHELP))
- return
-
//clean the message if it's not sent by a high-rank admin
//todo: sanitize for all???
if(!check_rights(R_SERVER|R_DEBUG,0))
@@ -104,7 +101,7 @@
//play the recieving admin the adminhelp sound (if they have them enabled)
//non-admins shouldn't be able to disable this
- if(C.prefs && C.prefs.toggles & SOUND_ADMINHELP)
+ if(C.is_preference_enabled(/datum/client_preference/holder/play_adminhelp_ping))
C << 'sound/effects/adminhelp.ogg'
log_admin("PM: [key_name(src)]->[key_name(C)]: [msg]")
diff --git a/code/modules/admin/verbs/buildmode.dm b/code/modules/admin/verbs/buildmode.dm
index 0ecc220ae2..5a211d960b 100644
--- a/code/modules/admin/verbs/buildmode.dm
+++ b/code/modules/admin/verbs/buildmode.dm
@@ -71,38 +71,61 @@
screen_loc = "NORTH,WEST+1"
Click()
switch(master.cl.buildmode)
- if(1)
- usr << "\blue ***********************************************************"
- usr << "\blue Left Mouse Button = Construct / Upgrade"
- usr << "\blue Right Mouse Button = Deconstruct / Delete / Downgrade"
- usr << "\blue Left Mouse Button + ctrl = R-Window"
- usr << "\blue Left Mouse Button + alt = Airlock"
+ if(1) // Basic Build
+ usr << "*********************************************************** "
+ usr << "Left Mouse Button = Construct / Upgrade "
+ usr << "Right Mouse Button = Deconstruct / Delete / Downgrade "
+ usr << "Left Mouse Button + ctrl = R-Window "
+ usr << "Left Mouse Button + alt = Airlock "
usr << ""
- usr << "\blue Use the button in the upper left corner to"
- usr << "\blue change the direction of built objects."
- usr << "\blue ***********************************************************"
- if(2)
- usr << "\blue ***********************************************************"
- usr << "\blue Right Mouse Button on buildmode button = Set object type"
- usr << "\blue Middle Mouse Button on buildmode button= On/Off object type saying"
- usr << "\blue Middle Mouse Button on turf/obj = Capture object type"
- usr << "\blue Left Mouse Button on turf/obj = Place objects"
- usr << "\blue Right Mouse Button = Delete objects"
+ usr << "Use the button in the upper left corner to "
+ usr << "change the direction of built objects. "
+ usr << "*********************************************************** "
+ if(2) // Adv. Build
+ usr << "*********************************************************** "
+ usr << "Right Mouse Button on buildmode button = Set object type "
+ usr << "Middle Mouse Button on buildmode button= On/Off object type saying "
+ usr << "Middle Mouse Button on turf/obj = Capture object type "
+ usr << "Left Mouse Button on turf/obj = Place objects "
+ usr << "Right Mouse Button = Delete objects "
+ usr << "Mouse Button + ctrl = Copy object type "
usr << ""
- usr << "\blue Use the button in the upper left corner to"
- usr << "\blue change the direction of built objects."
- usr << "\blue ***********************************************************"
- if(3)
- usr << "\blue ***********************************************************"
- usr << "\blue Right Mouse Button on buildmode button = Select var(type) & value"
- usr << "\blue Left Mouse Button on turf/obj/mob = Set var(type) & value"
- usr << "\blue Right Mouse Button on turf/obj/mob = Reset var's value"
- usr << "\blue ***********************************************************"
- if(4)
- usr << "\blue ***********************************************************"
- usr << "\blue Left Mouse Button on turf/obj/mob = Select"
- usr << "\blue Right Mouse Button on turf/obj/mob = Throw"
- usr << "\blue ***********************************************************"
+ usr << "Use the button in the upper left corner to "
+ usr << "change the direction of built objects. "
+ usr << "*********************************************************** "
+ if(3) // Edit
+ usr << "*********************************************************** "
+ usr << "Right Mouse Button on buildmode button = Select var(type) & value "
+ usr << "Left Mouse Button on turf/obj/mob = Set var(type) & value "
+ usr << "Right Mouse Button on turf/obj/mob = Reset var's value "
+ usr << "*********************************************************** "
+ if(4) // Throw
+ usr << "*********************************************************** "
+ usr << "Left Mouse Button on turf/obj/mob = Select "
+ usr << "Right Mouse Button on turf/obj/mob = Throw "
+ usr << "*********************************************************** "
+ if(5) // Room Build
+ usr << "*********************************************************** "
+ usr << "Left Mouse Button on turf = Select as point A "
+ usr << "Right Mouse Button on turf = Select as point B "
+ usr << "Right Mouse Button on buildmode button = Change floor/wall type "
+ usr << "*********************************************************** "
+ if(6) // Make Ladders
+ usr << "*********************************************************** "
+ usr << "Left Mouse Button on turf = Set as upper ladder loc "
+ usr << "Right Mouse Button on turf = Set as lower ladder loc "
+ usr << "*********************************************************** "
+ if(7) // Move Into Contents
+ usr << "*********************************************************** "
+ usr << "Left Mouse Button on turf/obj/mob = Select "
+ usr << "Right Mouse Button on turf/obj/mob = Move into selection "
+ usr << "*********************************************************** "
+ if(8) // Make Lights
+ usr << "*********************************************************** "
+ usr << "Left Mouse Button on turf/obj/mob = Make it glow "
+ usr << "Right Mouse Button on turf/obj/mob = Reset glowing "
+ usr << "Right Mouse Button on buildmode button = Change glow properties "
+ usr << "*********************************************************** "
return 1
/obj/effect/bmode/buildquit
@@ -144,62 +167,100 @@
var/objholder = /obj/structure/closet
var/objsay = 1
- Click(location, control, params)
- var/list/pa = params2list(params)
+ var/wall_holder = /turf/simulated/wall
+ var/floor_holder = /turf/simulated/floor/plating
+ var/turf/coordA = null
+ var/turf/coordB = null
- if(pa.Find("middle"))
- switch(master.cl.buildmode)
- if(2)
- objsay=!objsay
+ var/new_light_color = "#FFFFFF"
+ var/new_light_range = 3
+ var/new_light_intensity = 3
+
+/obj/effect/bmode/buildmode/Click(location, control, params)
+ var/list/pa = params2list(params)
+
+ if(pa.Find("middle"))
+ switch(master.cl.buildmode)
+ if(2)
+ objsay=!objsay
- if(pa.Find("left"))
- switch(master.cl.buildmode)
- if(1)
- master.cl.buildmode = 2
- src.icon_state = "buildmode2"
- if(2)
- master.cl.buildmode = 3
- src.icon_state = "buildmode3"
- if(3)
- master.cl.buildmode = 4
- src.icon_state = "buildmode4"
- if(4)
- master.cl.buildmode = 1
- src.icon_state = "buildmode1"
+ if(pa.Find("left"))
+ switch(master.cl.buildmode)
+ if(1)
+ master.cl.buildmode = 2
+ src.icon_state = "buildmode2"
+ if(2)
+ master.cl.buildmode = 3
+ src.icon_state = "buildmode3"
+ if(3)
+ master.cl.buildmode = 4
+ src.icon_state = "buildmode4"
+ if(4)
+ master.cl.buildmode = 5
+ src.icon_state = "buildmode5"
+ if(5)
+ master.cl.buildmode = 6
+ src.icon_state = "buildmode6"
+ if(6)
+ master.cl.buildmode = 7
+ src.icon_state = "buildmode7"
+ if(7)
+ master.cl.buildmode = 8
+ src.icon_state = "buildmode8"
+ if(8)
+ master.cl.buildmode = 1
+ src.icon_state = "buildmode1"
- else if(pa.Find("right"))
- switch(master.cl.buildmode)
- if(1)
+ else if(pa.Find("right"))
+ switch(master.cl.buildmode)
+ if(1) // Basic Build
+ return 1
+ if(2) // Adv. Build
+ objholder = get_path_from_partial_text(/obj/structure/closet)
+
+ if(3) // Edit
+ var/list/locked = list("vars", "key", "ckey", "client", "firemut", "ishulk", "telekinesis", "xray", "virus", "viruses", "cuffed", "ka", "last_eaten", "urine")
+
+ master.buildmode.varholder = input(usr,"Enter variable name:" ,"Name", "name")
+ if(master.buildmode.varholder in locked && !check_rights(R_DEBUG,0))
return 1
- if(2)
- objholder = text2path(input(usr,"Enter typepath:" ,"Typepath","/obj/structure/closet"))
- if(!ispath(objholder))
- objholder = /obj/structure/closet
- alert("That path is not allowed.")
- else
- if(ispath(objholder,/mob) && !check_rights(R_DEBUG,0))
- objholder = /obj/structure/closet
- if(3)
- var/list/locked = list("vars", "key", "ckey", "client", "firemut", "ishulk", "telekinesis", "xray", "virus", "viruses", "cuffed", "ka", "last_eaten", "urine")
-
- master.buildmode.varholder = input(usr,"Enter variable name:" ,"Name", "name")
- if(master.buildmode.varholder in locked && !check_rights(R_DEBUG,0))
- return 1
- var/thetype = input(usr,"Select variable type:" ,"Type") in list("text","number","mob-reference","obj-reference","turf-reference")
- if(!thetype) return 1
- switch(thetype)
- if("text")
- master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value", "value") as text
- if("number")
- master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value", 123) as num
- if("mob-reference")
- master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value") as mob in mob_list
- if("obj-reference")
- master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value") as obj in world
- if("turf-reference")
- master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value") as turf in world
- return 1
+ var/thetype = input(usr,"Select variable type:" ,"Type") in list("text","number","mob-reference","obj-reference","turf-reference")
+ if(!thetype) return 1
+ switch(thetype)
+ if("text")
+ master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value", "value") as text
+ if("number")
+ master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value", 123) as num
+ if("mob-reference")
+ master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value") as mob in mob_list
+ if("obj-reference")
+ master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value") as obj in world
+ if("turf-reference")
+ master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value") as turf in world
+ if(5) // Room build
+ var/choice = alert("Would you like to change the floor or wall holders?","Room Builder", "Floor", "Wall")
+ switch(choice)
+ if("Floor")
+ floor_holder = get_path_from_partial_text(/turf/simulated/floor/plating)
+ if("Wall")
+ wall_holder = get_path_from_partial_text(/turf/simulated/wall)
+ if(8) // Lights
+ var/choice = alert("Change the new light range, power, or color?", "Light Maker", "Range", "Power", "Color")
+ switch(choice)
+ if("Range")
+ var/input = input("New light range.","Light Maker",3) as null|num
+ if(input)
+ new_light_range = input
+ if("Power")
+ var/input = input("New light power.","Light Maker",3) as null|num
+ if(input)
+ new_light_intensity = input
+ if("Color")
+ var/input = input("New light color.","Light Maker",3) as null|color
+ if(input)
+ new_light_color = input
+ return 1
/proc/build_click(var/mob/user, buildmode, params, var/obj/object)
var/obj/effect/bmode/buildholder/holder = null
@@ -211,7 +272,7 @@
var/list/pa = params2list(params)
switch(buildmode)
- if(1)
+ if(1) // Basic Build
if(istype(object,/turf) && pa.Find("left") && !pa.Find("alt") && !pa.Find("ctrl") )
if(istype(object,/turf/space))
var/turf/T = object
@@ -260,8 +321,8 @@
if(NORTHWEST)
var/obj/structure/window/reinforced/WIN = new/obj/structure/window/reinforced(get_turf(object))
WIN.set_dir(NORTHWEST)
- if(2)
- if(pa.Find("left"))
+ if(2) // Adv. Build
+ if(pa.Find("left") && !pa.Find("ctrl"))
if(ispath(holder.buildmode.objholder,/turf))
var/turf/T = get_turf(object)
T.ChangeTurf(holder.buildmode.objholder)
@@ -269,27 +330,31 @@
var/obj/A = new holder.buildmode.objholder (get_turf(object))
A.set_dir(holder.builddir.dir)
else if(pa.Find("right"))
- if(isobj(object)) qdel(object)
+ if(isobj(object))
+ qdel(object)
+ else if(pa.Find("ctrl"))
+ holder.buildmode.objholder = object.type
+ user << "[object]([object.type]) copied to buildmode. "
if(pa.Find("middle"))
holder.buildmode.objholder = text2path("[object.type]")
if(holder.buildmode.objsay) usr << "[object.type]"
- if(3)
+ if(3) // Edit
if(pa.Find("left")) //I cant believe this shit actually compiles.
if(object.vars.Find(holder.buildmode.varholder))
log_admin("[key_name(usr)] modified [object.name]'s [holder.buildmode.varholder] to [holder.buildmode.valueholder]")
object.vars[holder.buildmode.varholder] = holder.buildmode.valueholder
else
- usr << "\red [initial(object.name)] does not have a var called '[holder.buildmode.varholder]'"
+ user << "[initial(object.name)] does not have a var called '[holder.buildmode.varholder]' "
if(pa.Find("right"))
if(object.vars.Find(holder.buildmode.varholder))
log_admin("[key_name(usr)] modified [object.name]'s [holder.buildmode.varholder] to [holder.buildmode.valueholder]")
object.vars[holder.buildmode.varholder] = initial(object.vars[holder.buildmode.varholder])
else
- usr << "\red [initial(object.name)] does not have a var called '[holder.buildmode.varholder]'"
+ user << "[initial(object.name)] does not have a var called '[holder.buildmode.varholder]' "
- if(4)
+ if(4) // Throw
if(pa.Find("left"))
if(istype(object, /atom/movable))
holder.throw_atom = object
@@ -297,3 +362,127 @@
if(holder.throw_atom)
holder.throw_atom.throw_at(object, 10, 1)
log_admin("[key_name(usr)] threw [holder.throw_atom] at [object]")
+ if(5) // Room build
+ if(pa.Find("left"))
+ holder.buildmode.coordA = get_turf(object)
+ user << "Defined [object] ([object.type]) as point A. "
+
+ if(pa.Find("right"))
+ holder.buildmode.coordB = get_turf(object)
+ user << "Defined [object] ([object.type]) as point B. "
+
+ if(holder.buildmode.coordA && holder.buildmode.coordB)
+ user << "A and B set, creating rectangle. "
+ holder.buildmode.make_rectangle(
+ holder.buildmode.coordA,
+ holder.buildmode.coordB,
+ holder.buildmode.wall_holder,
+ holder.buildmode.floor_holder
+ )
+ holder.buildmode.coordA = null
+ holder.buildmode.coordB = null
+ if(6) // Ladders
+ if(pa.Find("left"))
+ holder.buildmode.coordA = get_turf(object)
+ user << "Defined [object] ([object.type]) as upper ladder location. "
+
+ if(pa.Find("right"))
+ holder.buildmode.coordB = get_turf(object)
+ user << "Defined [object] ([object.type]) as lower ladder location. "
+
+ if(holder.buildmode.coordA && holder.buildmode.coordB)
+ user << "Ladder locations set, building ladders. "
+ var/obj/structure/ladder/A = new /obj/structure/ladder(holder.buildmode.coordA)
+ var/obj/structure/ladder/B = new /obj/structure/ladder(holder.buildmode.coordB)
+ A.target = B
+ B.target = A
+ B.icon_state = "ladderup"
+ holder.buildmode.coordA = null
+ holder.buildmode.coordB = null
+ if(7) // Move into contents
+ if(pa.Find("left"))
+ if(istype(object, /atom))
+ holder.throw_atom = object
+ if(pa.Find("right"))
+ if(holder.throw_atom && istype(object, /atom/movable))
+ object.forceMove(holder.throw_atom)
+ log_admin("[key_name(usr)] moved [object] into [holder.throw_atom].")
+ if(8) // Lights
+ if(pa.Find("left"))
+ if(object)
+ object.set_light(holder.buildmode.new_light_range, holder.buildmode.new_light_intensity, holder.buildmode.new_light_color)
+ if(pa.Find("right"))
+ if(object)
+ object.set_light(0, 0, "#FFFFFF")
+
+/obj/effect/bmode/buildmode/proc/get_path_from_partial_text(default_path)
+ var/desired_path = input("Enter full or partial typepath.","Typepath","[default_path]")
+
+ var/list/types = typesof(/atom)
+ var/list/matches = list()
+
+ for(var/path in types)
+ if(findtext("[path]", desired_path))
+ matches += path
+
+ if(matches.len==0)
+ alert("No results found. Sorry.")
+ return
+
+ var/result = null
+
+ if(matches.len==1)
+ result = matches[1]
+ else
+ result = input("Select an atom type", "Spawn Atom", matches[1]) as null|anything in matches
+ if(!objholder)
+ result = default_path
+ return result
+
+/obj/effect/bmode/buildmode/proc/make_rectangle(var/turf/A, var/turf/B, var/turf/wall_type, var/turf/floor_type)
+ if(!A || !B) // No coords
+ return
+ if(A.z != B.z) // Not same z-level
+ return
+
+ var/height = A.y - B.y
+ var/width = A.x - B.x
+ var/z_level = A.z
+
+ var/turf/lower_left_corner = null
+ // First, try to find the lowest part
+ var/desired_y = 0
+ if(A.y <= B.y)
+ desired_y = A.y
+ else
+ desired_y = B.y
+
+ //Now for the left-most part.
+ var/desired_x = 0
+ if(A.x <= B.x)
+ desired_x = A.x
+ else
+ desired_x = B.x
+
+ lower_left_corner = locate(desired_x, desired_y, z_level)
+
+ // Now we can begin building the actual room. This defines the boundries for the room.
+ var/low_bound_x = lower_left_corner.x
+ var/low_bound_y = lower_left_corner.y
+
+ var/high_bound_x = lower_left_corner.x + abs(width)
+ var/high_bound_y = lower_left_corner.y + abs(height)
+
+ for(var/i = low_bound_x, i <= high_bound_x, i++)
+ for(var/j = low_bound_y, j <= high_bound_y, j++)
+ var/turf/T = locate(i, j, z_level)
+ if(i == low_bound_x || i == high_bound_x || j == low_bound_y || j == high_bound_y)
+ if(isturf(wall_type))
+ T.ChangeTurf(wall_type)
+ else
+ new wall_type(T)
+ else
+ if(isturf(floor_type))
+ T.ChangeTurf(floor_type)
+ else
+ new floor_type(T)
\ No newline at end of file
diff --git a/code/modules/admin/verbs/check_customitem_activity.dm b/code/modules/admin/verbs/check_customitem_activity.dm
index 1bda56c6e5..80bbfccc12 100644
--- a/code/modules/admin/verbs/check_customitem_activity.dm
+++ b/code/modules/admin/verbs/check_customitem_activity.dm
@@ -37,11 +37,11 @@ var/inactive_keys = "None "
var/list/ckeys_with_customitems = list()
var/file = file2text("config/custom_items.txt")
- var/lines = text2list(file, "\n")
+ var/lines = splittext(file, "\n")
for(var/line in lines)
// split & clean up
- var/list/Entry = text2list(line, ":")
+ var/list/Entry = splittext(line, ":")
for(var/i = 1 to Entry.len)
Entry[i] = trim(Entry[i])
diff --git a/code/modules/admin/verbs/deadsay.dm b/code/modules/admin/verbs/deadsay.dm
index e6da3c736a..08eda6bb34 100644
--- a/code/modules/admin/verbs/deadsay.dm
+++ b/code/modules/admin/verbs/deadsay.dm
@@ -8,14 +8,11 @@
if(!src.mob)
return
if(prefs.muted & MUTE_DEADCHAT)
- src << "\red You cannot send DSAY messages (muted)."
+ src << "You cannot send DSAY messages (muted). "
return
- if(!(prefs.toggles & CHAT_DEAD))
- src << "\red You have deadchat muted."
- return
-
- if (src.handle_spam_prevention(msg,MUTE_DEADCHAT))
+ if(!is_preference_enabled(/datum/client_preference/show_dsay))
+ src << "You have deadchat muted. "
return
var/stafftype = uppertext(holder.rank)
diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm
index 6522c5e1a4..b21abd7e30 100644
--- a/code/modules/admin/verbs/debug.dm
+++ b/code/modules/admin/verbs/debug.dm
@@ -85,7 +85,7 @@
var/mob/choice = input("Choose a player to play the pAI", "Spawn pAI") in available
if(!choice)
return 0
- if(!istype(choice, /mob/dead/observer))
+ if(!istype(choice, /mob/observer/dead))
var/confirm = input("[choice.key] isn't ghosting right now. Are you sure you want to yank them out of them out of their body and place them in this pAI?", "Spawn pAI Confirmation", "No") in list("Yes", "No")
if(confirm != "Yes")
return 0
@@ -214,7 +214,7 @@
set name = "Del-All"
// to prevent REALLY stupid deletions
- var/blocked = list(/obj, /mob, /mob/living, /mob/living/carbon, /mob/living/carbon/human, /mob/dead, /mob/dead/observer, /mob/living/silicon, /mob/living/silicon/robot, /mob/living/silicon/ai)
+ var/blocked = list(/obj, /mob, /mob/living, /mob/living/carbon, /mob/living/carbon/human, /mob/observer/dead, /mob/living/silicon, /mob/living/silicon/robot, /mob/living/silicon/ai)
var/hsbitem = input(usr, "Choose an object to delete.", "Delete:") as null|anything in typesof(/obj) + typesof(/mob) - blocked
if(hsbitem)
for(var/atom/O in world)
@@ -282,7 +282,7 @@
if(alert("This mob is being controlled by [M.ckey]. Are you sure you wish to assume control of it? [M.ckey] will be made a ghost.",,"Yes","No") != "Yes")
return
else
- var/mob/dead/observer/ghost = new/mob/dead/observer(M,1)
+ var/mob/observer/dead/ghost = new/mob/observer/dead(M,1)
ghost.ckey = M.ckey
message_admins("\blue [key_name_admin(usr)] assumed direct control of [M].", 1)
log_admin("[key_name(usr)] assumed direct control of [M].")
@@ -732,7 +732,7 @@
M.equip_to_slot_or_del(W, slot_wear_id)
if("blue wizard")
- M.equip_to_slot_or_del(new /obj/item/clothing/under/lightpurple(M), slot_w_uniform)
+ M.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear)
@@ -744,7 +744,7 @@
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box(M), slot_in_backpack)
if("red wizard")
- M.equip_to_slot_or_del(new /obj/item/clothing/under/lightpurple(M), slot_w_uniform)
+ M.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/red(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear)
@@ -756,7 +756,7 @@
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box(M), slot_in_backpack)
if("marisa wizard")
- M.equip_to_slot_or_del(new /obj/item/clothing/under/lightpurple(M), slot_w_uniform)
+ M.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/marisa(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal/marisa(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear)
@@ -932,17 +932,17 @@
switch(input("Which list?") in list("Players","Admins","Mobs","Living Mobs","Dead Mobs", "Clients"))
if("Players")
- usr << list2text(player_list,",")
+ usr << jointext(player_list,",")
if("Admins")
- usr << list2text(admins,",")
+ usr << jointext(admins,",")
if("Mobs")
- usr << list2text(mob_list,",")
+ usr << jointext(mob_list,",")
if("Living Mobs")
- usr << list2text(living_mob_list,",")
+ usr << jointext(living_mob_list,",")
if("Dead Mobs")
- usr << list2text(dead_mob_list,",")
+ usr << jointext(dead_mob_list,",")
if("Clients")
- usr << list2text(clients,",")
+ usr << jointext(clients,",")
// DNA2 - Admin Hax
/client/proc/cmd_admin_toggle_block(var/mob/M,var/block)
diff --git a/code/modules/admin/verbs/grief_fixers.dm b/code/modules/admin/verbs/grief_fixers.dm
new file mode 100644
index 0000000000..dd28127e4a
--- /dev/null
+++ b/code/modules/admin/verbs/grief_fixers.dm
@@ -0,0 +1,54 @@
+/client/proc/fixatmos()
+ set category = "Admin"
+ set name = "Fix Atmospherics Grief"
+
+ if(!check_rights(R_ADMIN|R_DEBUG)) return
+
+
+ if(alert("WARNING: Executing this command will perform a full reset of atmosphere. All pipelines will lose any gas that may be in them, and all zones will be reset to contain air mix as on roundstart. The supermatter engine will also be stopped (to prevent overheat due to removal of coolant). Do not use unless the station is suffering serious atmospheric issues due to grief or bug.", "Full Atmosphere Reboot", "No", "Yes") == "No")
+ return
+ feedback_add_details("admin_verb","FA")
+
+ log_and_message_admins("Full atmosphere reset initiated by [usr].")
+ world << "Initiating restart of atmosphere. The server may lag a bit. "
+ sleep(10)
+ var/current_time = world.timeofday
+
+ // Depower the supermatter, as it would quickly blow up once we remove all gases from the pipes.
+ for(var/obj/machinery/power/supermatter/S in machines)
+ S.power = 0
+ usr << "\[1/5\] - Supermatter depowered"
+
+ // Remove all gases from all pipenets
+ for(var/datum/pipe_network/PN in pipe_networks)
+ for(var/datum/gas_mixture/G in PN.gases)
+ G.gas = list()
+ G.update_values()
+
+ usr << "\[2/5\] - All pipenets purged of gas."
+
+ // Delete all zones.
+ for(var/zone/Z in world)
+ Z.c_invalidate()
+
+ usr << "\[3/5\] - All ZAS Zones removed."
+
+ var/list/unsorted_overlays = list()
+ for(var/id in gas_data.tile_overlay)
+ unsorted_overlays |= gas_data.tile_overlay[id]
+
+
+ for(var/turf/simulated/T in world)
+ T.air = null
+ T.overlays.Remove(unsorted_overlays)
+ T.zone = null
+
+ usr << "\[4/5\] - All turfs reset to roundstart values."
+
+ qdel(air_master)
+ air_master = new
+ air_master.Setup()
+ spawn air_master.Start()
+
+ usr << "\[5/5\] - ZAS Rebooted"
+ world << "Atmosphere restart completed in [(world.timeofday - current_time)/10] seconds. "
\ No newline at end of file
diff --git a/code/modules/admin/verbs/modifyvariables.dm b/code/modules/admin/verbs/modifyvariables.dm
index 50ddc81f41..51f1fbceb3 100644
--- a/code/modules/admin/verbs/modifyvariables.dm
+++ b/code/modules/admin/verbs/modifyvariables.dm
@@ -1,7 +1,7 @@
var/list/forbidden_varedit_object_types = list(
- /datum/admins, //Admins editing their own admin-power object? Yup, sounds like a good idea.
- /obj/machinery/blackbox_recorder, //Prevents people messing with feedback gathering
- /datum/feedback_variable //Prevents people messing with feedback gathering
+ /datum/admins, //Admins editing their own admin-power object? Yup, sounds like a good idea,
+ /obj/machinery/blackbox_recorder, //Prevents people messing with feedback gathering,
+ /datum/feedback_variable //Prevents people messing with feedback gathering,
)
var/list/VVlocked = list("vars", "client", "virus", "viruses", "cuffed", "last_eaten", "unlock_content", "bound_x", "bound_y", "step_x", "step_y", "force_ending")
diff --git a/code/modules/admin/verbs/playsound.dm b/code/modules/admin/verbs/playsound.dm
index 3a4b40d985..eb7451c61c 100644
--- a/code/modules/admin/verbs/playsound.dm
+++ b/code/modules/admin/verbs/playsound.dm
@@ -16,7 +16,7 @@ var/list/sounds_cache = list()
log_admin("[key_name(src)] played sound [S]")
message_admins("[key_name_admin(src)] played sound [S]", 1)
for(var/mob/M in player_list)
- if(M.client.prefs.toggles & SOUND_MIDI)
+ if(M.is_preference_enabled(/datum/client_preference/play_admin_midis))
M << uploaded_sound
feedback_add_details("admin_verb","PGS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
diff --git a/code/modules/admin/verbs/pray.dm b/code/modules/admin/verbs/pray.dm
index e43c5400d9..844f74b5f6 100644
--- a/code/modules/admin/verbs/pray.dm
+++ b/code/modules/admin/verbs/pray.dm
@@ -13,16 +13,15 @@
if(usr.client.prefs.muted & MUTE_PRAY)
usr << "\red You cannot pray (muted)."
return
- if(src.client.handle_spam_prevention(msg,MUTE_PRAY))
- return
var/image/cross = image('icons/obj/storage.dmi',"bible")
msg = "\blue \icon[cross] PRAY: [key_name(src, 1)] (? ) (PP ) (VV ) (SM ) ([admin_jump_link(src, src)]) (CA ) (SC ): [msg]"
for(var/client/C in admins)
if(R_ADMIN & C.holder.rights)
- if(C.prefs.toggles & CHAT_PRAYER)
+ if(C.is_preference_enabled(/datum/client_preference/admin/show_chat_prayers))
C << msg
+ C << 'sound/effects/ding.ogg'
usr << "Your prayers have been received by the gods."
feedback_add_details("admin_verb","PR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -33,9 +32,11 @@
for(var/client/C in admins)
if(R_ADMIN & C.holder.rights)
C << msg
+ C << 'sound/machines/signal.ogg'
/proc/Syndicate_announce(var/msg, var/mob/Sender)
msg = "\blue ILLEGAL: [key_name(Sender, 1)] (PP ) (VV ) (SM ) ([admin_jump_link(Sender, src)]) (CA ) (BSA ) (RPLY ): [msg]"
for(var/client/C in admins)
if(R_ADMIN & C.holder.rights)
C << msg
+ C << 'sound/machines/signal.ogg'
\ No newline at end of file
diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm
index c1cde11dad..170f9302f9 100644
--- a/code/modules/admin/verbs/randomverbs.dm
+++ b/code/modules/admin/verbs/randomverbs.dm
@@ -189,7 +189,7 @@ proc/cmd_admin_mute(mob/M as mob, mute_type, automute = 0)
M.client.prefs.muted |= mute_type
log_admin("SPAM AUTOMUTE: [muteunmute] [key_name(M)] from [mute_string]")
message_admins("SPAM AUTOMUTE: [muteunmute] [key_name_admin(M)] from [mute_string].", 1)
- M << "You have been [muteunmute] from [mute_string] by the SPAM AUTOMUTE system. Contact an admin."
+ M << "You have been [muteunmute] from [mute_string] by the SPAM AUTOMUTE system. Contact an admin. "
feedback_add_details("admin_verb","AUTOMUTE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
return
@@ -202,7 +202,7 @@ proc/cmd_admin_mute(mob/M as mob, mute_type, automute = 0)
log_admin("[key_name(usr)] has [muteunmute] [key_name(M)] from [mute_string]")
message_admins("[key_name_admin(usr)] has [muteunmute] [key_name_admin(M)] from [mute_string].", 1)
- M << "You have been [muteunmute] from [mute_string]."
+ M << "You have been [muteunmute] from [mute_string]. "
feedback_add_details("admin_verb","MUTE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_admin_add_random_ai_law()
@@ -235,8 +235,8 @@ Ccomp's first proc.
var/list/mobs = list()
var/list/ghosts = list()
var/list/sortmob = sortAtom(mob_list) // get the mob list.
- /var/any=0
- for(var/mob/dead/observer/M in sortmob)
+ var/any=0
+ for(var/mob/observer/dead/M in sortmob)
mobs.Add(M) //filter it where it's only ghosts
any = 1 //if no ghosts show up, any will just be 0
if(!any)
@@ -266,7 +266,7 @@ Ccomp's first proc.
src << "Hrm, appears you didn't select a ghost" // Sanity check, if no ghosts in the list we don't want to edit a null variable and cause a runtime error.
return
- var/mob/dead/observer/G = ghosts[target]
+ var/mob/observer/dead/G = ghosts[target]
if(G.has_enabled_antagHUD && config.antag_hud_restricted)
var/response = alert(src, "Are you sure you wish to allow this individual to play?","Ghost has used AntagHUD","Yes","No")
if(response == "No") return
@@ -291,9 +291,9 @@ Ccomp's first proc.
src << "Only administrators may use this command."
var/action=""
if(config.antag_hud_allowed)
- for(var/mob/dead/observer/g in get_ghosts())
+ for(var/mob/observer/dead/g in get_ghosts())
if(!g.client.holder) //Remove the verb from non-admin ghosts
- g.verbs -= /mob/dead/observer/verb/toggle_antagHUD
+ g.verbs -= /mob/observer/dead/verb/toggle_antagHUD
if(g.antagHUD)
g.antagHUD = 0 // Disable it on those that have it enabled
g.has_enabled_antagHUD = 2 // We'll allow them to respawn
@@ -302,9 +302,9 @@ Ccomp's first proc.
src << "\red AntagHUD usage has been disabled "
action = "disabled"
else
- for(var/mob/dead/observer/g in get_ghosts())
+ for(var/mob/observer/dead/g in get_ghosts())
if(!g.client.holder) // Add the verb back for all non-admin ghosts
- g.verbs += /mob/dead/observer/verb/toggle_antagHUD
+ g.verbs += /mob/observer/dead/verb/toggle_antagHUD
g << "\blue The Administrator has enabled AntagHUD " // Notify all observers they can now use AntagHUD
config.antag_hud_allowed = 1
action = "enabled"
@@ -324,13 +324,13 @@ Ccomp's first proc.
src << "Only administrators may use this command."
var/action=""
if(config.antag_hud_restricted)
- for(var/mob/dead/observer/g in get_ghosts())
+ for(var/mob/observer/dead/g in get_ghosts())
g << "\blue The administrator has lifted restrictions on joining the round if you use AntagHUD "
action = "lifted restrictions"
config.antag_hud_restricted = 0
src << "\blue AntagHUD restrictions have been lifted "
else
- for(var/mob/dead/observer/g in get_ghosts())
+ for(var/mob/observer/dead/g in get_ghosts())
g << "\red The administrator has placed restrictions on joining the round if you use AntagHUD "
g << "\red Your AntagHUD has been disabled, you may choose to re-enabled it but will be under restrictions "
g.antagHUD = 0
@@ -358,8 +358,8 @@ Traitors and the like can also be revived with the previous role mostly intact.
if(!input)
return
- var/mob/dead/observer/G_found
- for(var/mob/dead/observer/G in player_list)
+ var/mob/observer/dead/G_found
+ for(var/mob/observer/dead/G in player_list)
if(G.ckey == input)
G_found = G
break
@@ -388,7 +388,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
else
new_character.gender = pick(MALE,FEMALE)
var/datum/preferences/A = new()
- A.randomize_appearance_for(new_character)
+ A.randomize_appearance_and_body_for(new_character)
new_character.real_name = G_found.real_name
if(!new_character.real_name)
@@ -627,7 +627,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
log_admin("[key_name(usr)] has gibbed [key_name(M)]")
message_admins("[key_name_admin(usr)] has gibbed [key_name_admin(M)]", 1)
- if(istype(M, /mob/dead/observer))
+ if(istype(M, /mob/observer/dead))
gibs(M.loc)
return
@@ -640,7 +640,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
var/confirm = alert(src, "You sure?", "Confirm", "Yes", "No")
if(confirm == "Yes")
- if (istype(mob, /mob/dead/observer)) // so they don't spam gibs everywhere
+ if (istype(mob, /mob/observer/dead)) // so they don't spam gibs everywhere
return
else
mob.gib()
diff --git a/code/modules/alarm/alarm.dm b/code/modules/alarm/alarm.dm
index aa88e170bf..d0a6a8be4c 100644
--- a/code/modules/alarm/alarm.dm
+++ b/code/modules/alarm/alarm.dm
@@ -76,9 +76,9 @@
/datum/alarm/proc/cameras()
// reset camera cache
- if(camera_cache_id != cache_id)
+ if(camera_repository.camera_cache_id != cache_id)
cameras = null
- cache_id = camera_cache_id
+ cache_id = camera_repository.camera_cache_id
// If the alarm origin has changed area, for example a borg containing an alarming camera, reset the list of cameras
else if(cameras && (last_camera_area != alarm_area()))
cameras = null
diff --git a/code/modules/alarm/alarm_handler.dm b/code/modules/alarm/alarm_handler.dm
index 47b7f7b571..afa45d7649 100644
--- a/code/modules/alarm/alarm_handler.dm
+++ b/code/modules/alarm/alarm_handler.dm
@@ -86,10 +86,10 @@
/turf/get_alarm_origin()
return get_area(src)
-/datum/alarm_handler/proc/register(var/object, var/procName)
+/datum/alarm_handler/proc/register_alarm(var/object, var/procName)
listeners[object] = procName
-/datum/alarm_handler/proc/unregister(var/object)
+/datum/alarm_handler/proc/unregister_alarm(var/object)
listeners -= object
/datum/alarm_handler/proc/notify_listeners(var/alarm, var/was_raised)
diff --git a/code/modules/assembly/mousetrap.dm b/code/modules/assembly/mousetrap.dm
index c3c395f15a..b731905e5f 100644
--- a/code/modules/assembly/mousetrap.dm
+++ b/code/modules/assembly/mousetrap.dm
@@ -94,7 +94,7 @@
..()
- on_found(mob/finder as mob)
+ on_found(mob/living/finder as mob)
if(armed)
finder.visible_message("[finder] accidentally sets off [src], breaking their fingers. ", \
"You accidentally trigger [src]! ")
diff --git a/code/modules/client/client defines.dm b/code/modules/client/client defines.dm
index 1155882b82..b559652132 100644
--- a/code/modules/client/client defines.dm
+++ b/code/modules/client/client defines.dm
@@ -30,7 +30,6 @@
////////////
//SECURITY//
////////////
- var/next_allowed_topic_time = 10
// comment out the line below when debugging locally to enable the options & messages menu
//control_freak = 1
@@ -47,3 +46,5 @@
var/related_accounts_cid = "Requires database" //So admins know why it isn't working - Used to determine what other accounts previously logged in from this computer id
preload_rsc = 0 // This is 0 so we can set it to an URL once the player logs in and have them download the resources from a different server.
+ var/global/obj/screen/click_catcher/void
+
diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm
index aa1cf3b1ad..fc72bc1611 100644
--- a/code/modules/client/client procs.dm
+++ b/code/modules/client/client procs.dm
@@ -1,10 +1,12 @@
////////////
//SECURITY//
////////////
-#define TOPIC_SPAM_DELAY 2 //2 ticks is about 2/10ths of a second; it was 4 ticks, but that caused too many clicks to be lost due to lag
#define UPLOAD_LIMIT 10485760 //Restricts client uploads to the server to 10MB //Boosted this thing. What's the worst that can happen?
#define MIN_CLIENT_VERSION 0 //Just an ambiguously low version for now, I don't want to suddenly stop people playing.
//I would just like the code ready should it ever need to be used.
+
+//#define TOPIC_DEBUGGING 1
+
/*
When somebody clicks a link in game, this Topic is called first.
It does the stuff in this proc and then is redirected to the Topic() proc for the src=[0xWhatever]
@@ -24,10 +26,13 @@
if(!usr || usr != mob) //stops us calling Topic for somebody else's client. Also helps prevent usr=null
return
- //Reduces spamming of links by dropping calls that happen during the delay period
- if(next_allowed_topic_time > world.time)
- return
- next_allowed_topic_time = world.time + TOPIC_SPAM_DELAY
+ #if defined(TOPIC_DEBUGGING)
+ world << "[src]'s Topic: [href] destined for [hsrc]."
+
+ if(href_list["nano_err"]) //nano throwing errors
+ world << "## NanoUI, Subject [src]: " + html_decode(href_list["nano_err"]) //NANO DEBUG HOOK
+
+ #endif
//search the href for script injection
if( findtext(href,"
[head_content]
@@ -458,8 +466,8 @@ nanoui is used to open and update nano browser uis
var/list/send_data = get_send_data(data)
- //user << list2json(data) // used for debugging
- user << output(list2params(list(list2json_usecache(send_data))),"[window_id].browser:receiveUpdateData")
+ //user << list2json_usecache(send_data) // used for debugging //NANO DEBUG HOOK
+ user << output(list2params(list(strip_improper(json_encode(send_data)))),"[window_id].browser:receiveUpdateData")
/**
* This Topic() proc is called whenever a user clicks on a link within a Nano UI
diff --git a/code/modules/organs/blood.dm b/code/modules/organs/blood.dm
index 1bae132aed..2c5f24984a 100644
--- a/code/modules/organs/blood.dm
+++ b/code/modules/organs/blood.dm
@@ -126,7 +126,7 @@ var/const/BLOOD_VOLUME_SURVIVE = 40
//Bleeding out
var/blood_max = 0
for(var/obj/item/organ/external/temp in organs)
- if(!(temp.status & ORGAN_BLEEDING) || (temp.status & ORGAN_ROBOT))
+ if(!(temp.status & ORGAN_BLEEDING) || (temp.robotic >= ORGAN_ROBOT))
continue
for(var/datum/wound/W in temp.wounds) if(W.bleeding())
blood_max += W.damage / 40
@@ -266,9 +266,11 @@ proc/blood_splatter(var/target,var/datum/reagent/blood/source,var/large)
var/obj/effect/decal/cleanable/blood/B
var/decal_type = /obj/effect/decal/cleanable/blood/splatter
var/turf/T = get_turf(target)
+ var/synth = 0
if(istype(source,/mob/living/carbon/human))
var/mob/living/carbon/human/M = source
+ if(M.isSynthetic()) synth = 1
source = M.get_blood(M.vessel)
// Are we dripping or splattering?
@@ -297,6 +299,7 @@ proc/blood_splatter(var/target,var/datum/reagent/blood/source,var/large)
// Update appearance.
if(source.data["blood_colour"])
B.basecolor = source.data["blood_colour"]
+ B.synthblood = synth
B.update_icon()
// Update blood information.
diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm
index 44376e9110..d8533239e7 100644
--- a/code/modules/organs/organ.dm
+++ b/code/modules/organs/organ.dm
@@ -10,9 +10,10 @@ var/list/organ_cache = list()
var/parent_organ = BP_TORSO // Organ holding this object.
// Status tracking.
- var/status = 0 // Various status flags (such as robotic)
+ var/status = 0 // Various status flags
var/vital // Lose a vital limb, die immediately.
var/damage = 0 // Current damage to the organ
+ var/robotic = 0
// Reference data.
var/mob/living/carbon/human/owner // Current mob owning the organ.
@@ -49,6 +50,7 @@ var/list/organ_cache = list()
max_damage = min_broken_damage * 2
if(istype(holder))
src.owner = holder
+ src.w_class = max(src.w_class + mob_size_difference(holder.mob_size, MOB_MEDIUM), 1) //smaller mobs have smaller organs.
species = all_species["Human"]
if(holder.dna)
dna = holder.dna.Clone()
@@ -69,6 +71,8 @@ var/list/organ_cache = list()
blood_DNA[dna.unique_enzymes] = dna.b_type
if(internal)
holder.internal_organs |= src
+ else
+ species = all_species["Human"]
/obj/item/organ/proc/set_dna(var/datum/dna/new_dna)
if(new_dna)
@@ -77,7 +81,7 @@ var/list/organ_cache = list()
blood_DNA[dna.unique_enzymes] = dna.b_type
/obj/item/organ/proc/die()
- if(status & ORGAN_ROBOT)
+ if(robotic >= ORGAN_ROBOT)
return
damage = max_damage
status |= ORGAN_DEAD
@@ -96,10 +100,10 @@ var/list/organ_cache = list()
// Don't process if we're in a freezer, an MMI or a stasis bag.or a freezer or something I dunno
if(istype(loc,/obj/item/device/mmi))
return
- if(istype(loc,/obj/structure/closet/body_bag/cryobag) || istype(loc,/obj/structure/closet/crate/freezer) || istype(loc,/obj/item/weapon/storage/box/freezer))
+ if(istype(loc,/obj/structure/closet/body_bag/cryobag) || istype(loc,/obj/structure/closet/crate/freezer) || istype(loc,/obj/item/weapon/storage/box/freezer) || istype(loc,/obj/item/weapon/gripper/no_use/organ))
return
//Process infections
- if ((status & ORGAN_ROBOT) || (owner && owner.species && (owner.species.flags & IS_PLANT)))
+ if ((robotic >= ORGAN_ROBOT) || (owner && owner.species && (owner.species.flags & IS_PLANT)))
germ_level = 0
return
@@ -231,7 +235,7 @@ var/list/organ_cache = list()
//Note: external organs have their own version of this proc
/obj/item/organ/proc/take_damage(amount, var/silent=0)
- if(src.status & ORGAN_ROBOT)
+ if(src.robotic >= ORGAN_ROBOT)
src.damage = between(0, src.damage + (amount * 0.8), max_damage)
else
src.damage = between(0, src.damage + amount, max_damage)
@@ -243,19 +247,20 @@ var/list/organ_cache = list()
owner.custom_pain("Something inside your [parent.name] hurts a lot.", 1)
/obj/item/organ/proc/robotize() //Being used to make robutt hearts, etc
- status = 0
- status |= ORGAN_ASSISTED
- status |= ORGAN_ROBOT
-
+ robotic = ORGAN_ROBOT
+ src.status &= ~ORGAN_BROKEN
+ src.status &= ~ORGAN_BLEEDING
+ src.status &= ~ORGAN_SPLINTED
+ src.status &= ~ORGAN_CUT_AWAY
/obj/item/organ/proc/mechassist() //Used to add things like pacemakers, etc
- status = 0
- status |= ORGAN_ASSISTED
+ robotize()
+ robotic = ORGAN_ASSISTED
min_bruised_damage = 15
min_broken_damage = 35
/obj/item/organ/emp_act(severity)
- if(!(status & ORGAN_ROBOT))
+ if(!(robotic >= ORGAN_ROBOT))
return
switch (severity)
if (1)
@@ -316,7 +321,7 @@ var/list/organ_cache = list()
/obj/item/organ/proc/bitten(mob/user)
- if(status & ORGAN_ROBOT)
+ if(robotic >= ORGAN_ROBOT)
return
user << "You take an experimental bite out of \the [src]. "
@@ -342,9 +347,9 @@ var/list/organ_cache = list()
/obj/item/organ/attack_self(mob/user as mob)
// Convert it to an edible form, yum yum.
- if(!(status & ORGAN_ROBOT) && user.a_intent == I_HELP && user.zone_sel.selecting == O_MOUTH)
+ if(!(robotic >= ORGAN_ROBOT) && user.a_intent == I_HELP && user.zone_sel.selecting == O_MOUTH)
bitten(user)
return
/obj/item/organ/proc/can_feel_pain()
- return !(status & (ORGAN_ROBOT|ORGAN_DESTROYED)) && !(species.flags & NO_PAIN)
+ return !(robotic >= (ORGAN_ROBOT|ORGAN_DESTROYED)) && !(species.flags & NO_PAIN)
diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm
index 65a740c068..d3b309fd84 100644
--- a/code/modules/organs/organ_external.dm
+++ b/code/modules/organs/organ_external.dm
@@ -26,6 +26,7 @@
var/last_dam = -1 // used in healing/processing calculations.
// Appearance vars.
+ var/nonsolid // Snowflake warning, reee. Used for slime limbs.
var/icon_name = null // Icon state base.
var/body_part = null // Part flag
var/icon_position = 0 // Used in mob overlay layering calculations.
@@ -43,7 +44,7 @@
var/list/wounds = list() // wound datum list.
var/number_wounds = 0 // number of wounds, which is NOT wounds.len!
var/obj/item/organ/external/parent // Master-limb.
- var/list/children // Sub-limbs.
+ var/list/children = list() // Sub-limbs.
var/list/internal_organs = list() // Internal organs of this body part
var/sabotaged = 0 // If a prosthetic limb is emagged, it will detonate when it fails.
var/list/implants = list() // Currently implanted objects.
@@ -56,9 +57,10 @@
var/disfigured = 0 // Scarred/burned beyond recognition.
var/cannot_amputate // Impossible to amputate.
var/cannot_break // Impossible to fracture.
+ var/cannot_gib // Impossible to gib, distinct from amputation.
var/joint = "joint" // Descriptive string used in dislocation.
var/amputation_point // Descriptive string used in amputation.
- var/dislocated = 0 // If you target a joint, you can dislocate the limb, causing temporary damage to the organ.
+ var/dislocated = 0 // If you target a joint, you can dislocate the limb, impairing it's usefulness and causing pain
var/encased // Needs to be opened with a saw to access the organs.
// Surgery vars.
@@ -90,7 +92,7 @@
return ..()
/obj/item/organ/external/emp_act(severity)
- if(!(status & ORGAN_ROBOT))
+ if(!(robotic >= ORGAN_ROBOT))
return
switch (severity)
if (1)
@@ -98,7 +100,7 @@
if (2)
take_damage(4)
-/obj/item/organ/external/attack_self(var/mob/user)
+/obj/item/organ/external/attack_self(var/mob/living/user)
if(!contents.len)
return ..()
var/list/removable_objects = list()
@@ -113,22 +115,21 @@
var/obj/item/I = pick(removable_objects)
I.loc = get_turf(user) //just in case something was embedded that is not an item
if(istype(I))
- if(!(user.l_hand && user.r_hand))
- user.put_in_hands(I)
+ user.put_in_hands(I)
user.visible_message("\The [user] rips \the [I] out of \the [src]! ")
return //no eating the limb until everything's been removed
return ..()
/obj/item/organ/external/examine()
..()
- if(in_range(usr, src) || istype(usr, /mob/dead/observer))
+ if(in_range(usr, src) || istype(usr, /mob/observer/dead))
for(var/obj/item/I in contents)
if(istype(I, /obj/item/organ))
continue
usr << "There is \a [I] sticking out of it. "
return
-/obj/item/organ/external/attackby(obj/item/weapon/W as obj, mob/user as mob)
+/obj/item/organ/external/attackby(obj/item/weapon/W as obj, mob/living/user as mob)
switch(stage)
if(0)
if(istype(W,/obj/item/weapon/scalpel))
@@ -145,8 +146,7 @@
if(contents.len)
var/obj/item/removing = pick(contents)
removing.loc = get_turf(user.loc)
- if(!(user.l_hand && user.r_hand))
- user.put_in_hands(removing)
+ user.put_in_hands(removing)
user.visible_message("[user] extracts [removing] from [src] with [W]! ")
else
user.visible_message("[user] fishes around fruitlessly in [src] with [W]. ")
@@ -156,32 +156,38 @@
/obj/item/organ/external/proc/is_dislocated()
if(dislocated > 0)
return 1
- if(parent)
- return parent.is_dislocated()
+ if(is_parent_dislocated())
+ return 1//if any parent is dislocated, we are considered dislocated as well
return 0
-/obj/item/organ/external/proc/dislocate(var/primary)
- if(dislocated != -1)
- if(primary)
- dislocated = 2
- else
- dislocated = 1
- owner.verbs |= /mob/living/carbon/human/proc/undislocate
- if(children && children.len)
- for(var/obj/item/organ/external/child in children)
- child.dislocate()
+/obj/item/organ/external/proc/is_parent_dislocated()
+ var/obj/item/organ/external/O = parent
+ while(O && O.dislocated != -1)
+ if(O.dislocated == 1)
+ return 1
+ O = O.parent
+ return 0
+
+
+/obj/item/organ/external/proc/dislocate()
+ if(dislocated == -1)
+ return
+
+ dislocated = 1
+ if(owner)
+ owner.verbs |= /mob/living/carbon/human/proc/undislocate
/obj/item/organ/external/proc/undislocate()
- if(dislocated != -1)
- dislocated = 0
- if(children && children.len)
- for(var/obj/item/organ/external/child in children)
- if(child.dislocated == 1)
- child.undislocate()
+ if(dislocated == -1)
+ return
+
+ dislocated = 0
if(owner)
owner.shock_stage += 20
+
+ //check to see if we still need the verb
for(var/obj/item/organ/external/limb in owner.organs)
- if(limb.dislocated == 2)
+ if(limb.dislocated == 1)
return
owner.verbs -= /mob/living/carbon/human/proc/undislocate
@@ -200,11 +206,11 @@
/obj/item/organ/external/replaced(var/mob/living/carbon/human/target)
owner = target
+ forceMove(owner)
if(istype(owner))
owner.organs_by_name[organ_tag] = src
owner.organs |= src
for(var/obj/item/organ/organ in src)
- organ.loc = owner
organ.replaced(owner,src)
if(parent_organ)
@@ -213,13 +219,20 @@
if(!parent.children)
parent.children = list()
parent.children.Add(src)
+ //Remove all stump wounds since limb is not missing anymore
+ for(var/datum/wound/lost_limb/W in parent.wounds)
+ parent.wounds -= W
+ qdel(W)
+ break
+ parent.update_damages()
/****************************************************
DAMAGE PROCS
****************************************************/
/obj/item/organ/external/proc/is_damageable(var/additional_damage = 0)
- return (vital || brute_dam + burn_dam + additional_damage < max_damage)
+ //Continued damage to vital organs can kill you, and robot organs don't count towards total damage so no need to cap them.
+ return (vital || (robotic >= ORGAN_ROBOT) || brute_dam + burn_dam + additional_damage < max_damage)
/obj/item/organ/external/take_damage(brute, burn, sharp, edge, used_weapon = null, list/forbidden_limbs = list())
if((brute <= 0) && (burn <= 0))
@@ -237,12 +250,12 @@
brute -= brute / 2
if(status & ORGAN_BROKEN && prob(40) && brute)
- if(!((species.flags & NO_PAIN) || (status & ORGAN_ROBOT)))
+ if(!((species.flags & NO_PAIN) || (robotic >= ORGAN_ROBOT)))
owner.emote("scream") //getting hit on broken hand hurts
if(used_weapon)
add_autopsy_data("[used_weapon]", brute + burn)
- var/can_cut = (prob(brute*2) || sharp) && !(status & ORGAN_ROBOT)
+ var/can_cut = (prob(brute*2) || sharp) && (robotic < ORGAN_ROBOT)
// If the limbs can break, make sure we don't exceed the maximum damage a limb can take before breaking
// Non-vital organs are limited to max_damage. You can't kill someone by bludeonging their arm all the way to 200 -- you can
@@ -250,7 +263,10 @@
if(is_damageable(brute + burn) || !config.limbs_can_break)
if(brute)
if(can_cut)
- createwound( CUT, brute )
+ if(sharp && !edge)
+ createwound( PIERCE, brute )
+ else
+ createwound( CUT, brute )
else
createwound( BRUISE, brute )
if(burn)
@@ -264,7 +280,10 @@
if (brute > 0)
//Inflict all burte damage we can
if(can_cut)
- createwound( CUT, min(brute,can_inflict) )
+ if(sharp && !edge)
+ createwound( PIERCE, min(brute,can_inflict) )
+ else
+ createwound( CUT, min(brute,can_inflict) )
else
createwound( BRUISE, min(brute,can_inflict) )
var/temp = can_inflict
@@ -318,7 +337,7 @@
return update_icon()
/obj/item/organ/external/proc/heal_damage(brute, burn, internal = 0, robo_repair = 0)
- if(status & ORGAN_ROBOT && !robo_repair)
+ if(robotic >= ORGAN_ROBOT && !robo_repair)
return
//Heal damage on the individual wounds
@@ -327,27 +346,77 @@
break
// heal brute damage
- if(W.damage_type == CUT || W.damage_type == BRUISE)
- brute = W.heal_damage(brute)
- else if(W.damage_type == BURN)
+ if(W.damage_type == BURN)
burn = W.heal_damage(burn)
+ else
+ brute = W.heal_damage(brute)
if(internal)
status &= ~ORGAN_BROKEN
//Sync the organ's damage with its wounds
src.update_damages()
+ src.update_wounds()
owner.updatehealth()
var/result = update_icon()
return result
+//Helper proc used by various tools for repairing robot limbs
+/obj/item/organ/external/proc/robo_repair(var/repair_amount, var/damage_type, var/damage_desc, obj/item/tool, mob/living/user)
+ if((src.robotic < ORGAN_ROBOT))
+ return 0
+
+ var/damage_amount
+ switch(damage_type)
+ if(BRUTE) damage_amount = brute_dam
+ if(BURN) damage_amount = burn_dam
+ if("omni") damage_amount = max(brute_dam,burn_dam)
+ else return 0
+
+ if(!damage_amount)
+ user << "Nothing to fix! "
+ return 0
+
+ if(damage_amount >= ROBOLIMB_REPAIR_CAP)
+ user << "The damage is far too severe to patch over externally. "
+ return 0
+
+ if(user == src.owner)
+ var/grasp
+ if(user.l_hand == tool && (src.body_part & (ARM_LEFT|HAND_LEFT)))
+ grasp = "l_hand"
+ else if(user.r_hand == tool && (src.body_part & (ARM_RIGHT|HAND_RIGHT)))
+ grasp = "r_hand"
+
+ if(grasp)
+ user << "You can't reach your [src.name] while holding [tool] in your [owner.get_bodypart_name(grasp)]. "
+ return 0
+
+ user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
+ if(!do_mob(user, owner, 10))
+ user << "You must stand still to do that. "
+ return 0
+
+ switch(damage_type)
+ if(BRUTE) src.heal_damage(repair_amount, 0, 0, 1)
+ if(BURN) src.heal_damage(0, repair_amount, 0, 1)
+ if("omni")src.heal_damage(repair_amount, repair_amount, 0, 1)
+
+ if(damage_desc)
+ if(user == src.owner)
+ user.visible_message("\The [user] patches [damage_desc] on \his [src.name] with [tool]. ")
+ else
+ user.visible_message("\The [user] patches [damage_desc] on [owner]'s [src.name] with [tool]. ")
+
+ return 1
+
+
/*
This function completely restores a damaged organ to perfect condition.
*/
/obj/item/organ/external/rejuvenate(var/ignore_prosthetic_prefs)
damage_state = "00"
-
status = 0
brute_dam = 0
burn_dam = 0
@@ -398,7 +467,7 @@ This function completely restores a damaged organ to perfect condition.
//moved this before the open_wound check so that having many small wounds for example doesn't somehow protect you from taking internal damage (because of the return)
//Possibly trigger an internal wound, too.
var/local_damage = brute_dam + burn_dam + damage
- if(damage > 15 && type != BURN && local_damage > 30 && prob(damage) && !(status & ORGAN_ROBOT))
+ if((damage > 15) && (type != BURN) && (local_damage > 30) && prob(damage) && (robotic < ORGAN_ROBOT))
var/datum/wound/internal_bleeding/I = new (min(damage - 15, 15))
wounds += I
owner.custom_pain("You feel something rip in your [name]!", 1)
@@ -416,7 +485,7 @@ This function completely restores a damaged organ to perfect condition.
var/datum/wound/W = pick(compatible_wounds)
W.open_wound(damage)
if(prob(25))
- if(status & ORGAN_ROBOT)
+ if(robotic >= ORGAN_ROBOT)
owner.visible_message("The damage to [owner.name]'s [name] worsens. ",\
"The damage to your [name] worsens. ",\
"You hear the screech of abused metal. ")
@@ -454,7 +523,7 @@ This function completely restores a damaged organ to perfect condition.
/obj/item/organ/external/proc/need_process()
if(status & (ORGAN_CUT_AWAY|ORGAN_BLEEDING|ORGAN_BROKEN|ORGAN_DESTROYED|ORGAN_SPLINTED|ORGAN_DEAD|ORGAN_MUTATED))
return 1
- if(brute_dam || burn_dam)
+ if((brute_dam || burn_dam) && (robotic < ORGAN_ROBOT)) //Robot limbs don't autoheal and thus don't need to process when damaged
return 1
if(last_dam != brute_dam + burn_dam) // Process when we are fully healed up.
last_dam = brute_dam + burn_dam
@@ -510,7 +579,7 @@ Note that amputating the affected organ does in fact remove the infection from t
*/
/obj/item/organ/external/proc/update_germs()
- if(status & (ORGAN_ROBOT) || (owner.species && owner.species.flags & IS_PLANT)) //Robotic limbs shouldn't be infected, nor should nonexistant limbs.
+ if(robotic >= ORGAN_ROBOT || (owner.species && owner.species.flags & IS_PLANT)) //Robotic limbs shouldn't be infected, nor should nonexistant limbs.
germ_level = 0
return
@@ -568,12 +637,12 @@ Note that amputating the affected organ does in fact remove the infection from t
//spread the infection to child and parent organs
if (children)
for (var/obj/item/organ/external/child in children)
- if (child.germ_level < germ_level && !(child.status & ORGAN_ROBOT))
+ if (child.germ_level < germ_level && (child.robotic < ORGAN_ROBOT))
if (child.germ_level < INFECTION_LEVEL_ONE*2 || prob(30))
child.germ_level++
if (parent)
- if (parent.germ_level < germ_level && !(parent.status & ORGAN_ROBOT))
+ if (parent.germ_level < germ_level && (parent.robotic < ORGAN_ROBOT))
if (parent.germ_level < INFECTION_LEVEL_ONE*2 || prob(30))
parent.germ_level++
@@ -589,7 +658,10 @@ Note that amputating the affected organ does in fact remove the infection from t
//Updating wounds. Handles wound natural I had some free spachealing, internal bleedings and infections
/obj/item/organ/external/proc/update_wounds()
- if((status & ORGAN_ROBOT)) //Robotic limbs don't heal or get worse.
+ if((robotic >= ORGAN_ROBOT)) //Robotic limbs don't heal or get worse.
+ for(var/datum/wound/W in wounds) //Repaired wounds disappear though
+ if(W.damage <= 0) //and they disappear right away
+ wounds -= W //TODO: robot wounds for robot limbs
return
for(var/datum/wound/W in wounds)
@@ -654,12 +726,12 @@ Note that amputating the affected organ does in fact remove the infection from t
//update damage counts
for(var/datum/wound/W in wounds)
if(!W.internal) //so IB doesn't count towards crit/paincrit
- if(W.damage_type == CUT || W.damage_type == BRUISE)
- brute_dam += W.damage
- else if(W.damage_type == BURN)
+ if(W.damage_type == BURN)
burn_dam += W.damage
+ else
+ brute_dam += W.damage
- if(!(status & ORGAN_ROBOT) && W.bleeding() && (H && H.should_have_organ(O_HEART)))
+ if(!(robotic >= ORGAN_ROBOT) && W.bleeding() && (H && !H.should_have_organ(O_HEART)))
W.bleed_timer--
status |= ORGAN_BLEEDING
@@ -672,7 +744,7 @@ Note that amputating the affected organ does in fact remove the infection from t
status |= ORGAN_BLEEDING
//Bone fractures
- if(config.bones_can_break && brute_dam > min_broken_damage * config.organ_health_multiplier && !(status & ORGAN_ROBOT))
+ if(config.bones_can_break && brute_dam > min_broken_damage * config.organ_health_multiplier && !(robotic >= ORGAN_ROBOT))
src.fracture()
// new damage icon system
@@ -720,23 +792,30 @@ Note that amputating the affected organ does in fact remove the infection from t
if(cannot_amputate || !owner)
return
+ if(disintegrate == DROPLIMB_EDGE && nonsolid)
+ disintegrate = DROPLIMB_BLUNT //splut
+
switch(disintegrate)
if(DROPLIMB_EDGE)
if(!clean)
- var/gore_sound = "[(status & ORGAN_ROBOT) ? "tortured metal" : "ripping tendons and flesh"]"
+ var/gore_sound = "[(robotic >= ORGAN_ROBOT) ? "tortured metal" : "ripping tendons and flesh"]"
owner.visible_message(
"\The [owner]'s [src.name] flies off in an arc! ",\
"Your [src.name] goes flying off! ",\
"You hear a terrible sound of [gore_sound]. ")
if(DROPLIMB_BURN)
- var/gore = "[(status & ORGAN_ROBOT) ? "": " of burning flesh"]"
+ if(cannot_gib)
+ return
+ var/gore = "[(robotic >= ORGAN_ROBOT) ? "": " of burning flesh"]"
owner.visible_message(
"\The [owner]'s [src.name] flashes away into ashes! ",\
"Your [src.name] flashes away into ashes! ",\
"You hear a crackling sound[gore]. ")
if(DROPLIMB_BLUNT)
- var/gore = "[(status & ORGAN_ROBOT) ? "": " in shower of gore"]"
- var/gore_sound = "[(status & ORGAN_ROBOT) ? "rending sound of tortured metal" : "sickening splatter of gore"]"
+ if(cannot_gib)
+ return
+ var/gore = "[(robotic >= ORGAN_ROBOT) ? "": " in shower of gore"]"
+ var/gore_sound = "[(status >= ORGAN_ROBOT) ? "rending sound of tortured metal" : "sickening splatter of gore"]"
owner.visible_message(
"\The [owner]'s [src.name] explodes[gore]! ",\
"Your [src.name] explodes[gore]! ",\
@@ -744,10 +823,13 @@ Note that amputating the affected organ does in fact remove the infection from t
var/mob/living/carbon/human/victim = owner //Keep a reference for post-removed().
var/obj/item/organ/external/parent_organ = parent
+
+ var/use_flesh_colour = species.get_flesh_colour(owner)
+ var/use_blood_colour = species.get_blood_colour(owner)
+
removed(null, ignore_children)
victim.traumatic_shock += 60
- wounds.Cut()
if(parent_organ)
var/datum/wound/lost_limb/W = new (src, disintegrate, clean)
if(clean)
@@ -755,7 +837,7 @@ Note that amputating the affected organ does in fact remove the infection from t
parent_organ.update_damages()
else
var/obj/item/organ/external/stump/stump = new (victim, 0, src)
- if(status & ORGAN_ROBOT)
+ if(robotic >= ORGAN_ROBOT)
stump.robotize()
stump.wounds |= W
victim.organs |= stump
@@ -787,15 +869,13 @@ Note that amputating the affected organ does in fact remove the infection from t
qdel(src)
if(DROPLIMB_BLUNT)
var/obj/effect/decal/cleanable/blood/gibs/gore
- if(status & ORGAN_ROBOT)
+ if(robotic >= ORGAN_ROBOT)
gore = new /obj/effect/decal/cleanable/blood/gibs/robot(get_turf(victim))
else
gore = new /obj/effect/decal/cleanable/blood/gibs(get_turf(victim))
if(species)
- if(species.get_flesh_colour())
- gore.fleshcolor = species.get_flesh_colour()
- if(species.get_blood_colour())
- gore.basecolor = species.get_blood_colour()
+ gore.fleshcolor = use_flesh_colour
+ gore.basecolor = use_blood_colour
gore.update_icon()
gore.throw_at(get_edge_target_turf(src,pick(alldirs)),rand(1,3),30)
@@ -837,15 +917,46 @@ Note that amputating the affected organ does in fact remove the infection from t
"\The [holder.legcuffed.name] falls off you.")
holder.drop_from_inventory(holder.legcuffed)
+// checks if all wounds on the organ are bandaged
+/obj/item/organ/external/proc/is_bandaged()
+ for(var/datum/wound/W in wounds)
+ if(W.internal) continue
+ if(!W.bandaged)
+ return 0
+ return 1
+
+// checks if all wounds on the organ are salved
+/obj/item/organ/external/proc/is_salved()
+ for(var/datum/wound/W in wounds)
+ if(W.internal) continue
+ if(!W.salved)
+ return 0
+ return 1
+
+// checks if all wounds on the organ are disinfected
+/obj/item/organ/external/proc/is_disinfected()
+ for(var/datum/wound/W in wounds)
+ if(W.internal) continue
+ if(!W.disinfected)
+ return 0
+ return 1
+
/obj/item/organ/external/proc/bandage()
var/rval = 0
- src.status &= ~ORGAN_BLEEDING
+ status &= ~ORGAN_BLEEDING
for(var/datum/wound/W in wounds)
if(W.internal) continue
rval |= !W.bandaged
W.bandaged = 1
return rval
+/obj/item/organ/external/proc/salve()
+ var/rval = 0
+ for(var/datum/wound/W in wounds)
+ rval |= !W.salved
+ W.salved = 1
+ return rval
+
/obj/item/organ/external/proc/disinfect()
var/rval = 0
for(var/datum/wound/W in wounds)
@@ -864,15 +975,8 @@ Note that amputating the affected organ does in fact remove the infection from t
W.clamped = 1
return rval
-/obj/item/organ/external/proc/salve()
- var/rval = 0
- for(var/datum/wound/W in wounds)
- rval |= !W.salved
- W.salved = 1
- return rval
-
/obj/item/organ/external/proc/fracture()
- if(status & ORGAN_ROBOT)
+ if(robotic >= ORGAN_ROBOT)
return //ORGAN_BROKEN doesn't have the same meaning for robot limbs
if((status & ORGAN_BROKEN) || cannot_break)
return
@@ -912,7 +1016,7 @@ Note that amputating the affected organ does in fact remove the infection from t
return
/obj/item/organ/external/proc/mend_fracture()
- if(status & ORGAN_ROBOT)
+ if(robotic >= ORGAN_ROBOT)
return 0 //ORGAN_BROKEN doesn't have the same meaning for robot limbs
if(brute_dam > min_broken_damage * config.organ_health_multiplier)
return 0 //will just immediately fracture again
@@ -922,7 +1026,7 @@ Note that amputating the affected organ does in fact remove the infection from t
/obj/item/organ/external/robotize(var/company, var/skip_prosthetics = 0, var/keep_organs = 0)
- if(status & ORGAN_ROBOT)
+ if(robotic >= ORGAN_ROBOT)
return
..()
@@ -934,7 +1038,11 @@ Note that amputating the affected organ does in fact remove the infection from t
R = basic_robolimb
if(R)
force_icon = R.icon
- name = "robotic [initial(name)]"
+ if(R.lifelike)
+ robotic = ORGAN_LIFELIKE
+ name = "[initial(name)]"
+ else
+ name = "robotic [initial(name)]"
desc = "[R.desc] It looks like it was produced by [R.company]."
dislocated = -1
@@ -947,9 +1055,6 @@ Note that amputating the affected organ does in fact remove the infection from t
if(owner)
- if(!skip_prosthetics)
- owner.full_prosthetic = null // Will be rechecked next isSynthetic() call.
-
if(!keep_organs)
for(var/obj/item/organ/thing in internal_organs)
if(istype(thing))
@@ -967,7 +1072,7 @@ Note that amputating the affected organ does in fact remove the infection from t
return 1
/obj/item/organ/external/proc/mutate()
- if(src.status & ORGAN_ROBOT)
+ if(src.robotic >= ORGAN_ROBOT)
return
src.status |= ORGAN_MUTATED
if(owner) owner.update_body()
@@ -986,10 +1091,10 @@ Note that amputating the affected organ does in fact remove the infection from t
return 0
/obj/item/organ/external/proc/is_usable()
- return !is_dislocated() && !(status & (ORGAN_MUTATED|ORGAN_DEAD))
+ return !(status & (ORGAN_MUTATED|ORGAN_DEAD))
/obj/item/organ/external/proc/is_malfunctioning()
- return ((status & ORGAN_ROBOT) && (brute_dam + burn_dam) >= 10 && prob(brute_dam + burn_dam))
+ return ((robotic >= ORGAN_ROBOT) && (brute_dam + burn_dam) >= 10 && prob(brute_dam + burn_dam))
/obj/item/organ/external/proc/embed(var/obj/item/weapon/W, var/silent = 0)
if(!owner || loc != owner)
@@ -1006,10 +1111,9 @@ Note that amputating the affected organ does in fact remove the infection from t
W.loc = owner
/obj/item/organ/external/removed(var/mob/living/user, var/ignore_children = 0)
-
if(!owner)
return
- var/is_robotic = status & ORGAN_ROBOT
+ var/is_robotic = robotic >= ORGAN_ROBOT
var/mob/living/carbon/human/victim = owner
..()
@@ -1062,6 +1166,8 @@ Note that amputating the affected organ does in fact remove the infection from t
qdel(spark_system)
qdel(src)
+ victim.update_body()
+
/obj/item/organ/external/proc/disfigure(var/type = "brute")
if (disfigured)
return
@@ -1081,23 +1187,39 @@ Note that amputating the affected organ does in fact remove the infection from t
if(status & ORGAN_DESTROYED && !is_stump())
. += "tear at [amputation_point] so severe that it hangs by a scrap of flesh"
- if(status & ORGAN_ROBOT)
+ //Handle robotic and synthetic organ damage
+ if(robotic >= ORGAN_ROBOT)
+ var/LL //Life-Like, aka only show that it's robotic in heavy damage
+ if(robotic >= ORGAN_LIFELIKE)
+ LL = 1
if(brute_dam)
switch(brute_dam)
if(0 to 20)
- . += " some dents"
+ . += "some [LL ? "cuts" : "dents"]"
if(21 to INFINITY)
- . += pick(" a lot of dents"," severe denting")
+ . += "[LL ? pick("exposed wiring","torn-back synthflesh") : pick("a lot of dents","severe denting")]"
+
if(brute_dam && burn_dam)
- . += " and"
+ . += " and "
+
if(burn_dam)
switch(burn_dam)
if(0 to 20)
- . += " some burns"
+ . += "some burns"
if(21 to INFINITY)
- . += pick(" a lot of burns"," severe melting")
+ . += "[LL ? pick("roasted synth-flesh","melted internal wiring") : pick("many burns","scorched metal")]"
+
+ if(open)
+ if(brute_dam || burn_dam)
+ . += " and "
+ if(open == 1)
+ . += "some exposed screws"
+ else
+ . += "an open panel"
+
return
+ //Normal organic organ damage
var/list/wound_descriptors = list()
if(open > 1)
wound_descriptors["an open incision"] = 1
@@ -1131,217 +1253,3 @@ Note that amputating the affected organ does in fact remove the infection from t
if(6 to INFINITY)
flavor_text += "a ton of [wound]\s"
return english_list(flavor_text)
-
-/****************************************************
- ORGAN DEFINES
-****************************************************/
-
-/obj/item/organ/external/chest
- name = "upper body"
- organ_tag = BP_TORSO
- icon_name = "torso"
- max_damage = 100
- min_broken_damage = 35
- w_class = 5
- body_part = UPPER_TORSO
- vital = 1
- amputation_point = "spine"
- joint = "neck"
- dislocated = -1
- gendered_icon = 1
- cannot_amputate = 1
- parent_organ = null
- encased = "ribcage"
- organ_rel_size = 70
- base_miss_chance = 10
-
-/obj/item/organ/external/chest/robotize()
- if(..())
- // Give them a new cell.
- owner.internal_organs_by_name["cell"] = new /obj/item/organ/internal/cell(owner,1)
-
-
-/obj/item/organ/external/groin
- name = "lower body"
- organ_tag = BP_GROIN
- icon_name = "groin"
- max_damage = 100
- min_broken_damage = 35
- w_class = 5
- body_part = LOWER_TORSO
- vital = 1
- parent_organ = BP_TORSO
- amputation_point = "lumbar"
- joint = "hip"
- dislocated = -1
- gendered_icon = 1
- organ_rel_size = 30
-
-/obj/item/organ/external/arm
- organ_tag = "l_arm"
- name = "left arm"
- icon_name = "l_arm"
- max_damage = 50
- min_broken_damage = 30
- w_class = 3
- body_part = ARM_LEFT
- parent_organ = BP_TORSO
- joint = "left elbow"
- amputation_point = "left shoulder"
- can_grasp = 1
-
-/obj/item/organ/external/arm/right
- organ_tag = "r_arm"
- name = "right arm"
- icon_name = "r_arm"
- body_part = ARM_RIGHT
- joint = "right elbow"
- amputation_point = "right shoulder"
-
-/obj/item/organ/external/leg
- organ_tag = "l_leg"
- name = "left leg"
- icon_name = "l_leg"
- max_damage = 50
- min_broken_damage = 30
- w_class = 3
- body_part = LEG_LEFT
- icon_position = LEFT
- parent_organ = BP_GROIN
- joint = "left knee"
- amputation_point = "left hip"
- can_stand = 1
-
-/obj/item/organ/external/leg/right
- organ_tag = "r_leg"
- name = "right leg"
- icon_name = "r_leg"
- body_part = LEG_RIGHT
- icon_position = RIGHT
- joint = "right knee"
- amputation_point = "right hip"
-
-/obj/item/organ/external/foot
- organ_tag = "l_foot"
- name = "left foot"
- icon_name = "l_foot"
- min_broken_damage = 15
- w_class = 2
- body_part = FOOT_LEFT
- icon_position = LEFT
- parent_organ = "l_leg"
- joint = "left ankle"
- amputation_point = "left ankle"
- can_stand = 1
- organ_rel_size = 10
- base_miss_chance = 50
-
-/obj/item/organ/external/foot/removed()
- if(owner) owner.u_equip(owner.shoes)
- ..()
-
-/obj/item/organ/external/foot/right
- organ_tag = "r_foot"
- name = "right foot"
- icon_name = "r_foot"
- body_part = FOOT_RIGHT
- icon_position = RIGHT
- parent_organ = "r_leg"
- joint = "right ankle"
- amputation_point = "right ankle"
-
-/obj/item/organ/external/hand
- organ_tag = "l_hand"
- name = "left hand"
- icon_name = "l_hand"
- min_broken_damage = 15
- w_class = 2
- body_part = HAND_LEFT
- parent_organ = "l_arm"
- joint = "left wrist"
- amputation_point = "left wrist"
- can_grasp = 1
- organ_rel_size = 10
- base_miss_chance = 50
-
-/obj/item/organ/external/hand/removed()
- owner.u_equip(owner.gloves)
- ..()
-
-/obj/item/organ/external/hand/right
- organ_tag = "r_hand"
- name = "right hand"
- icon_name = "r_hand"
- body_part = HAND_RIGHT
- parent_organ = "r_arm"
- joint = "right wrist"
- amputation_point = "right wrist"
-
-/obj/item/organ/external/head
- organ_tag = BP_HEAD
- icon_name = "head"
- name = "head"
- max_damage = 75
- min_broken_damage = 35
- w_class = 3
- body_part = HEAD
- vital = 1
- parent_organ = BP_TORSO
- joint = "jaw"
- amputation_point = "neck"
- gendered_icon = 1
- encased = "skull"
- base_miss_chance = 40
-
- var/eye_icon = "eyes_s"
-
-// These organs are important for robotizing at chargen.
-/obj/item/organ/external/head/robotize(var/company, var/skip_prosthetics, var/keep_organs)
- return ..(company, skip_prosthetics, 1)
-
-/obj/item/organ/external/head/removed()
- if(owner)
- name = "[owner.real_name]'s head"
- owner.u_equip(owner.glasses)
- owner.u_equip(owner.head)
- owner.u_equip(owner.l_ear)
- owner.u_equip(owner.r_ear)
- owner.u_equip(owner.wear_mask)
- spawn(1)
- owner.update_hair()
- ..()
-
-/obj/item/organ/external/head/take_damage(brute, burn, sharp, edge, used_weapon = null, list/forbidden_limbs = list())
- ..(brute, burn, sharp, edge, used_weapon, forbidden_limbs)
- if (!disfigured)
- if (brute_dam > 40)
- if (prob(50))
- disfigure("brute")
- if (burn_dam > 40)
- disfigure("burn")
-
-/obj/item/organ/external/head/skrell
- eye_icon = "skrell_eyes_s"
-
-/obj/item/organ/external/head/seromi
- eye_icon = "eyes_seromi"
-
-/obj/item/organ/external/head/no_eyes
- eye_icon = "blank_eyes"
-
-/obj/item/organ/external/head/no_eyes/diona
- max_damage = 50
- min_broken_damage = 25
- cannot_break = 1
- amputation_point = "branch"
- joint = "structural ligament"
- dislocated = -1
- vital = 0
-
-/obj/item/organ/external/head/no_eyes/diona/removed()
- var/mob/living/carbon/human/H = owner
- ..()
- if(!istype(H) || !H.organs || !H.organs.len)
- H.death()
- if(prob(50) && spawn_diona_nymph(get_turf(src)))
- qdel(src)
\ No newline at end of file
diff --git a/code/modules/organs/organ_icon.dm b/code/modules/organs/organ_icon.dm
index ffcb3f32e1..035a0692c3 100644
--- a/code/modules/organs/organ_icon.dm
+++ b/code/modules/organs/organ_icon.dm
@@ -16,7 +16,7 @@ var/global/list/limb_icon_cache = list()
s_tone = null
s_col = null
h_col = null
- if(status & ORGAN_ROBOT)
+ if(robotic >= ORGAN_ROBOT)
return
if(species && human.species && species.name != human.species.name)
return
@@ -30,7 +30,7 @@ var/global/list/limb_icon_cache = list()
s_tone = null
s_col = null
h_col = null
- if(status & ORGAN_ROBOT)
+ if(robotic >= ORGAN_ROBOT)
return
if(!isnull(dna.GetUIValue(DNA_UI_SKIN_TONE)) && (species.appearance_flags & HAS_SKIN_TONE))
s_tone = dna.GetUIValue(DNA_UI_SKIN_TONE)
@@ -43,10 +43,6 @@ var/global/list/limb_icon_cache = list()
var/obj/item/organ/internal/eyes/eyes = owner.internal_organs_by_name[O_EYES]
if(eyes) eyes.update_colour()
-/obj/item/organ/external/head/removed()
- get_icon()
- ..()
-
/obj/item/organ/external/head/get_icon()
..()
@@ -71,7 +67,7 @@ var/global/list/limb_icon_cache = list()
if(owner.f_style)
var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[owner.f_style]
- if(facial_hair_style && facial_hair_style.species_allowed && (species.get_bodytype() in facial_hair_style.species_allowed))
+ if(facial_hair_style && facial_hair_style.species_allowed && (species.get_bodytype(owner) in facial_hair_style.species_allowed))
var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s")
if(facial_hair_style.do_colouration)
facial_s.Blend(rgb(owner.r_facial, owner.g_facial, owner.b_facial), ICON_ADD)
@@ -79,7 +75,7 @@ var/global/list/limb_icon_cache = list()
if(owner.h_style && !(owner.head && (owner.head.flags_inv & BLOCKHEADHAIR)))
var/datum/sprite_accessory/hair_style = hair_styles_list[owner.h_style]
- if(hair_style && (species.get_bodytype() in hair_style.species_allowed))
+ if(hair_style && (species.get_bodytype(owner) in hair_style.species_allowed))
var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s")
if(hair_style.do_colouration && islist(h_col) && h_col.len >= 3)
hair_s.Blend(rgb(h_col[1], h_col[2], h_col[3]), ICON_ADD)
@@ -110,39 +106,50 @@ var/global/list/limb_icon_cache = list()
if(skeletal)
mob_icon = new /icon('icons/mob/human_races/r_skeleton.dmi', "[icon_name][gender ? "_[gender]" : ""]")
- else if (status & ORGAN_ROBOT)
+ else if (robotic >= ORGAN_ROBOT)
mob_icon = new /icon('icons/mob/human_races/robotic.dmi', "[icon_name][gender ? "_[gender]" : ""]")
else
- if (status & ORGAN_MUTATED)
- mob_icon = new /icon(species.deform, "[icon_name][gender ? "_[gender]" : ""]")
- else
- mob_icon = new /icon(species.icobase, "[icon_name][gender ? "_[gender]" : ""]")
-
- if(status & ORGAN_DEAD)
- mob_icon.ColorTone(rgb(10,50,0))
- mob_icon.SetIntensity(0.7)
-
- if(!isnull(s_tone))
- if(s_tone >= 0)
- mob_icon.Blend(rgb(s_tone, s_tone, s_tone), ICON_ADD)
- else
- mob_icon.Blend(rgb(-s_tone, -s_tone, -s_tone), ICON_SUBTRACT)
- else if(s_col && s_col.len >= 3)
- mob_icon.Blend(rgb(s_col[1], s_col[2], s_col[3]), ICON_ADD)
+ mob_icon = new /icon(species.get_icobase(owner, (status & ORGAN_MUTATED)), "[icon_name][gender ? "_[gender]" : ""]")
+ apply_colouration(mob_icon)
if(body_hair && islist(h_col) && h_col.len >= 3)
var/cache_key = "[body_hair]-[icon_name]-[h_col[1]][h_col[2]][h_col[3]]"
if(!limb_icon_cache[cache_key])
- var/icon/I = icon(species.icobase, "[icon_name]_[body_hair]")
+ var/icon/I = icon(species.get_icobase(owner), "[icon_name]_[body_hair]")
I.Blend(rgb(h_col[1],h_col[2],h_col[3]), ICON_ADD)
limb_icon_cache[cache_key] = I
mob_icon.Blend(limb_icon_cache[cache_key], ICON_OVERLAY)
dir = EAST
icon = mob_icon
-
return mob_icon
+/obj/item/organ/external/proc/apply_colouration(var/icon/applying)
+
+ if(nonsolid)
+ applying.MapColors("#4D4D4D","#969696","#1C1C1C", "#000000")
+ if(species && species.get_bodytype(owner) != "Human")
+ applying.SetIntensity(1.5) // Unathi, Taj and Skrell have -very- dark base icons.
+ else
+ applying.SetIntensity(0.7)
+
+ else if(status & ORGAN_DEAD)
+ applying.ColorTone(rgb(10,50,0))
+ applying.SetIntensity(0.7)
+
+ if(!isnull(s_tone))
+ if(s_tone >= 0)
+ applying.Blend(rgb(s_tone, s_tone, s_tone), ICON_ADD)
+ else
+ applying.Blend(rgb(-s_tone, -s_tone, -s_tone), ICON_SUBTRACT)
+ else if(s_col && s_col.len >= 3)
+ applying.Blend(rgb(s_col[1], s_col[2], s_col[3]), ICON_ADD)
+
+ // Translucency.
+ if(nonsolid) applying += rgb(,,,180) // SO INTUITIVE TY BYOND
+
+ return applying
+
// new damage icon system
// adjusted to set damage_state to brute/burn code only (without r_name0 as before)
/obj/item/organ/external/update_icon()
diff --git a/code/modules/organs/organ_internal.dm b/code/modules/organs/organ_internal.dm
index e4edadfe14..6975e747d0 100644
--- a/code/modules/organs/organ_internal.dm
+++ b/code/modules/organs/organ_internal.dm
@@ -104,6 +104,7 @@
icon = 'icons/obj/robot_component.dmi'
icon_state = "camera"
dead_icon = "camera_broken"
+ verbs |= /obj/item/organ/internal/eyes/proc/change_eye_color
/obj/item/organ/internal/eyes/robot
name = "optical sensor"
@@ -112,6 +113,26 @@
..()
robotize()
+/obj/item/organ/internal/eyes/proc/change_eye_color()
+ set name = "Change Eye Color"
+ set desc = "Changes your robotic eye color instantly."
+ set category = "IC"
+ set src in usr
+
+ var/current_color = rgb(eye_colour[1],eye_colour[2],eye_colour[3])
+ var/new_color = input("Pick a new color for your eyes.","Eye Color", current_color) as null|color
+ if(new_color && owner)
+ // input() supplies us with a hex color, which we can't use, so we convert it to rbg values.
+ var/list/new_color_rgb_list = hex2rgb(new_color)
+ // First, update mob vars.
+ owner.r_eyes = new_color_rgb_list[1]
+ owner.g_eyes = new_color_rgb_list[2]
+ owner.b_eyes = new_color_rgb_list[3]
+ // Now sync the organ's eye_colour list.
+ update_colour()
+ // Finally, update the eye icon on the mob.
+ owner.update_eyes()
+
/obj/item/organ/internal/eyes/replaced(var/mob/living/carbon/human/target)
// Apply our eye colour to the target.
diff --git a/code/modules/organs/organ_stump.dm b/code/modules/organs/organ_stump.dm
index ef1fffd01b..3eb2c15e0a 100644
--- a/code/modules/organs/organ_stump.dm
+++ b/code/modules/organs/organ_stump.dm
@@ -14,7 +14,7 @@
..(holder, internal)
if(istype(limb))
max_damage = limb.max_damage
- if((limb.status & ORGAN_ROBOT) && (!parent || (parent.status & ORGAN_ROBOT)))
+ if((limb.robotic >= ORGAN_ROBOT) && (!parent || (parent.robotic >= ORGAN_ROBOT)))
robotize() //if both limb and the parent are robotic, the stump is robotic too
/obj/item/organ/external/stump/is_stump()
diff --git a/code/modules/organs/pain.dm b/code/modules/organs/pain.dm
index 280ea53f49..ea9499fc43 100644
--- a/code/modules/organs/pain.dm
+++ b/code/modules/organs/pain.dm
@@ -82,7 +82,7 @@ mob/living/carbon/human/proc/handle_pain()
var/maxdam = 0
var/obj/item/organ/external/damaged_organ = null
for(var/obj/item/organ/external/E in organs)
- if(E.status & (ORGAN_DEAD|ORGAN_ROBOT)) continue
+ if((E.status & ORGAN_DEAD) || E.robotic >= ORGAN_ROBOT) continue
var/dam = E.get_damage()
// make the choice of the organ depend on damage,
// but also sometimes use one of the less damaged ones
@@ -94,7 +94,7 @@ mob/living/carbon/human/proc/handle_pain()
// Damage to internal organs hurts a lot.
for(var/obj/item/organ/I in internal_organs)
- if(I.status & (ORGAN_DEAD|ORGAN_ROBOT)) continue
+ if((I.status & ORGAN_DEAD) || I.robotic >= ORGAN_ROBOT) continue
if(I.damage > 2) if(prob(2))
var/obj/item/organ/external/parent = get_organ(I.parent_organ)
src.custom_pain("You feel a sharp pain in your [parent.name]", 1)
diff --git a/code/modules/organs/robolimbs.dm b/code/modules/organs/robolimbs.dm
index 281f854dac..e1dac6efe9 100644
--- a/code/modules/organs/robolimbs.dm
+++ b/code/modules/organs/robolimbs.dm
@@ -1,6 +1,27 @@
var/list/all_robolimbs = list()
+var/list/robolimb_data = list()
var/list/chargen_robolimbs = list()
var/datum/robolimb/basic_robolimb
+var/const/standard_monitor_styles = "blank=ipc_blank;\
+ pink=ipc_pink;\
+ green=ipc_green,\
+ red=ipc_red;\
+ blue=ipc_blue;\
+ shower=ipc_shower;\
+ orange=ipc_orange;\
+ nature=ipc_nature;\
+ eight=ipc_eight;\
+ goggles=ipc_goggles;\
+ heart=ipc_heart;\
+ monoeye=ipc_monoeye;\
+ breakout=ipc_breakout;\
+ yellow=ipc_yellow;\
+ static=ipc_static;\
+ purple=ipc_purple;\
+ scroll=ipc_scroll;\
+ console=ipc_console;\
+ glider=ipc_gol_glider;\
+ rainbow=ipc_rainbow"
/proc/populate_robolimb_list()
basic_robolimb = new()
@@ -8,41 +29,177 @@ var/datum/robolimb/basic_robolimb
var/datum/robolimb/R = new limb_type()
all_robolimbs[R.company] = R
if(!R.unavailable_at_chargen)
- chargen_robolimbs[R.company] = R
+ chargen_robolimbs[R.company] = R //List only main brands and solo parts.
/datum/robolimb
var/company = "Unbranded" // Shown when selecting the limb.
var/desc = "A generic unbranded robotic prosthesis." // Seen when examining a limb.
var/icon = 'icons/mob/human_races/robotic.dmi' // Icon base to draw from.
var/unavailable_at_chargen // If set, not available at chargen.
+ var/unavailable_to_build // If set, can't be constructed.
+ var/lifelike // If set, appears organic.
+ var/blood_color = "#030303"
var/list/species_cannot_use = list("Teshari")
+ var/list/monitor_styles //If empty, the model of limbs offers a head compatible with monitors.
+ var/parts = BP_ALL //Defines what parts said brand can replace on a body.
+
+/datum/robolimb/nanotrasen
+ company = "NanoTrasen"
+ desc = "A simple but efficient robotic limb, created by NanoTrasen."
+ icon = 'icons/mob/human_races/cyberlimbs/nanotrasen/nanotrasen_main.dmi'
/datum/robolimb/bishop
company = "Bishop"
desc = "This limb has a white polymer casing with blue holo-displays."
- icon = 'icons/mob/human_races/cyberlimbs/bishop.dmi'
+ icon = 'icons/mob/human_races/cyberlimbs/bishop/bishop_main.dmi'
+ unavailable_to_build = 1
-/datum/robolimb/hesphaistos
+/datum/robolimb/bishop_alt1
+ company = "Bishop - Glyph"
+ desc = "This limb has a white polymer casing with blue holo-displays."
+ icon = 'icons/mob/human_races/cyberlimbs/bishop/bishop_alt1.dmi'
+ unavailable_to_build = 1
+ parts = list(BP_HEAD)
+
+/datum/robolimb/bishop_monitor
+ company = "Bishop Monitor"
+ desc = "Bishop Cybernetics' unique spin on a popular prosthetic head model. The themes conflict in an intriguing way."
+ icon = 'icons/mob/human_races/cyberlimbs/bishop/bishop_monitor.dmi'
+ unavailable_to_build = 1
+ parts = list(BP_HEAD)
+ monitor_styles = standard_monitor_styles
+
+/datum/robolimb/hesphiastos
company = "Hesphiastos"
desc = "This limb has a militaristic black and green casing with gold stripes."
- icon = 'icons/mob/human_races/cyberlimbs/hesphaistos.dmi'
+ icon = 'icons/mob/human_races/cyberlimbs/hesphiastos/hesphiastos_main.dmi'
+ unavailable_to_build = 1
-/datum/robolimb/zenghu
- company = "Zeng-Hu"
- desc = "This limb has a rubbery fleshtone covering with visible seams."
- icon = 'icons/mob/human_races/cyberlimbs/zenghu.dmi'
+/datum/robolimb/hesphiastos_alt1
+ company = "Hesphiastos - Frontier"
+ desc = "A rugged prosthetic head featuring the standard Hesphiastos theme, a visor and an external display."
+ icon = 'icons/mob/human_races/cyberlimbs/hesphiastos/hesphiastos_alt1.dmi'
+ unavailable_to_build = 1
+ parts = list(BP_HEAD)
+ monitor_styles = "blank=hesphiastos_alt_off;\
+ pink=hesphiastos_alt_pink;\
+ orange=hesphiastos_alt_orange;\
+ goggles=hesphiastos_alt_goggles;\
+ scroll=hesphiastos_alt_scroll;\
+ rgb=hesphiastos_alt_rgb;\
+ rainbow=hesphiastos_alt_rainbow"
-/datum/robolimb/xion
- company = "Xion"
- desc = "This limb has a minimalist black and red casing."
- icon = 'icons/mob/human_races/cyberlimbs/xion.dmi'
+/datum/robolimb/hesphiastos_monitor
+ company = "Hesphiastos Monitor"
+ desc = "Hesphiastos' unique spin on a popular prosthetic head model. It looks rugged and sturdy."
+ icon = 'icons/mob/human_races/cyberlimbs/hesphiastos/hesphiastos_monitor.dmi'
+ unavailable_to_build = 1
+ parts = list(BP_HEAD)
+ monitor_styles = standard_monitor_styles
-/datum/robolimb/ipc
+/datum/robolimb/morpheus
company = "Morpheus"
desc = "This limb is simple and functional; no effort has been made to make it look human."
- icon = 'icons/mob/human_races/cyberlimbs/ipc.dmi'
+ icon = 'icons/mob/human_races/cyberlimbs/morpheus/morpheus_main.dmi'
+ unavailable_to_build = 1
+ monitor_styles = standard_monitor_styles
+
+/datum/robolimb/morpheus_alt1
+ company = "Morpheus - Zenith"
+ desc = "This limb is simple and functional; no effort has been made to make it look human."
+ icon = 'icons/mob/human_races/cyberlimbs/morpheus/morpheus_alt1.dmi'
+ unavailable_to_build = 1
+ parts = list(BP_HEAD)
+
+/datum/robolimb/veymed
+ company = "Vey-Med"
+ desc = "This high quality limb is nearly indistinguishable from an organic one."
+ icon = 'icons/mob/human_races/cyberlimbs/veymed/veymed_main.dmi'
+ unavailable_to_build = 1
+ lifelike = 1
+ blood_color = "#CCCCCC"
/datum/robolimb/wardtakahashi
company = "Ward-Takahashi"
desc = "This limb features sleek black and white polymers."
- icon = 'icons/mob/human_races/cyberlimbs/wardtakahashi.dmi'
\ No newline at end of file
+ icon = 'icons/mob/human_races/cyberlimbs/wardtakahashi/wardtakahashi_main.dmi'
+ unavailable_to_build = 1
+
+/datum/robolimb/wardtakahashi_alt1
+ company = "Ward-Takahashi - Shroud"
+ desc = "This limb features sleek black and white polymers. This one looks more like a helmet of some sort."
+ icon = 'icons/mob/human_races/cyberlimbs/wardtakahashi/wardtakahashi_alt1.dmi'
+ unavailable_to_build = 1
+ parts = list(BP_HEAD)
+
+/datum/robolimb/wardtakahashi_monitor
+ company = "Ward-Takahashi Monitor"
+ desc = "Ward-Takahashi's unique spin on a popular prosthetic head model. It looks sleek and modern."
+ icon = 'icons/mob/human_races/cyberlimbs/wardtakahashi/wardtakahashi_monitor.dmi'
+ unavailable_to_build = 1
+ parts = list(BP_HEAD)
+ monitor_styles = standard_monitor_styles
+
+/datum/robolimb/xion
+ company = "Xion"
+ desc = "This limb has a minimalist black and red casing."
+ icon = 'icons/mob/human_races/cyberlimbs/xion/xion_main.dmi'
+ unavailable_to_build = 1
+
+/datum/robolimb/xion_alt1
+ company = "Xion Mfg. - Breach"
+ desc = "This limb has a minimalist black and red casing. Looks a bit menacing."
+ icon = 'icons/mob/human_races/cyberlimbs/xion/xion_alt1.dmi'
+ unavailable_to_build = 1
+ parts = list(BP_HEAD)
+
+/datum/robolimb/xion_monitor
+ company = "Xion Mfg. Monitor"
+ desc = "Xion Mfg.'s unique spin on a popular prosthetic head model. It looks and minimalist and utilitarian."
+ icon = 'icons/mob/human_races/cyberlimbs/xion/xion_monitor.dmi'
+ unavailable_to_build = 1
+ parts = list(BP_HEAD)
+ monitor_styles = standard_monitor_styles
+
+/datum/robolimb/zenghu
+ company = "Zeng-Hu"
+ desc = "This limb has a rubbery fleshtone covering with visible seams."
+ icon = 'icons/mob/human_races/cyberlimbs/zenghu/zenghu_main.dmi'
+ unavailable_to_build = 1
+
+/obj/item/weapon/disk/limb
+ name = "Limb Blueprints"
+ desc = "A disk containing the blueprints for prosthetics."
+ icon = 'icons/obj/cloning.dmi'
+ icon_state = "datadisk2"
+ var/company = ""
+
+ //I'm normally opposed to relative pathing, but pls.
+ bishop
+ company = "Bishop"
+
+ hesphiastos
+ company = "Hesphiastos"
+
+ morpheus
+ company = "Morpheus"
+
+ veymed
+ company = "Vey-Med"
+
+ wardtakahashi
+ company = "Ward-Takahashi"
+
+ xion
+ company = "Xion"
+
+ zenghu
+ company = "Zeng-Hu"
+
+ nanotrasen
+ company = "NanoTrasen"
+
+/obj/item/weapon/disk/limb/New(var/newloc)
+ ..()
+ if(company)
+ name = "[company] [initial(name)]"
diff --git a/code/modules/organs/subtypes/diona.dm b/code/modules/organs/subtypes/diona.dm
index c74f1199e7..0776e318b4 100644
--- a/code/modules/organs/subtypes/diona.dm
+++ b/code/modules/organs/subtypes/diona.dm
@@ -126,7 +126,7 @@
//DIONA ORGANS.
/obj/item/organ/external/diona/removed()
- if(status & ORGAN_ROBOT)
+ if(robotic >= ORGAN_ROBOT)
return ..()
var/mob/living/carbon/human/H = owner
..()
@@ -142,7 +142,7 @@
organ_tag = "special" // Turns into a nymph instantly, no transplanting possible.
/obj/item/organ/internal/diona/removed(var/mob/living/user, var/skip_nymph)
- if(status & ORGAN_ROBOT)
+ if(robotic >= ORGAN_ROBOT)
return ..()
var/mob/living/carbon/human/H = owner
..()
@@ -198,3 +198,13 @@
/obj/item/organ/internal/diona/node/removed()
return
+
+/obj/item/organ/external/head/no_eyes/diona
+ max_damage = 50
+ min_broken_damage = 25
+ cannot_break = 1
+ amputation_point = "branch"
+ joint = "structural ligament"
+ dislocated = -1
+ vital = 0
+ slot_flags = SLOT_BELT
diff --git a/code/modules/organs/subtypes/machine.dm b/code/modules/organs/subtypes/machine.dm
index 04544035c0..df74367d0d 100644
--- a/code/modules/organs/subtypes/machine.dm
+++ b/code/modules/organs/subtypes/machine.dm
@@ -25,6 +25,7 @@
organ_tag = "brain"
parent_organ = BP_HEAD
vital = 1
+ var/brain_type = /obj/item/device/mmi
var/obj/item/device/mmi/stored_mmi
/obj/item/organ/internal/mmi_holder/Destroy()
@@ -35,8 +36,10 @@
/obj/item/organ/internal/mmi_holder/New(var/mob/living/carbon/human/new_owner, var/internal)
..(new_owner, internal)
- if(!stored_mmi)
- stored_mmi = new(src)
+ var/mob/living/carbon/human/dummy/mannequin/M = new_owner
+ if(istype(M))
+ return
+ stored_mmi = new brain_type(src)
sleep(-1)
update_from_mmi()
@@ -80,10 +83,8 @@
/obj/item/organ/internal/mmi_holder/posibrain
name = "positronic brain interface"
-
-/obj/item/organ/internal/mmi_holder/posibrain/New()
- stored_mmi = new /obj/item/device/mmi/digital/posibrain(src)
- ..()
+ brain_type = /obj/item/device/mmi/digital/posibrain
+
/obj/item/organ/internal/mmi_holder/posibrain/update_from_mmi()
..()
diff --git a/code/modules/organs/subtypes/standard.dm b/code/modules/organs/subtypes/standard.dm
index 5d195f3b0c..e33a319f69 100644
--- a/code/modules/organs/subtypes/standard.dm
+++ b/code/modules/organs/subtypes/standard.dm
@@ -2,6 +2,8 @@
ORGAN DEFINES
****************************************************/
+//Make sure that w_class is set as if the parent mob was medium sized! This is because w_class is adjusted automatically for mob_size in New()
+
/obj/item/organ/external/chest
name = "upper body"
organ_tag = BP_TORSO
@@ -18,6 +20,13 @@
cannot_amputate = 1
parent_organ = null
encased = "ribcage"
+ organ_rel_size = 70
+ base_miss_chance = 10
+
+/obj/item/organ/external/chest/robotize()
+ if(..())
+ // Give them a new cell.
+ owner.internal_organs_by_name["cell"] = new /obj/item/organ/internal/cell(owner,1)
/obj/item/organ/external/groin
name = "lower body"
@@ -33,6 +42,7 @@
joint = "hip"
dislocated = -1
gendered_icon = 1
+ organ_rel_size = 30
/obj/item/organ/external/arm
organ_tag = "l_arm"
@@ -93,7 +103,8 @@
can_stand = 1
/obj/item/organ/external/foot/removed()
- if(owner) owner.u_equip(owner.shoes)
+ if(owner)
+ owner.drop_from_inventory(owner.shoes)
..()
/obj/item/organ/external/foot/right
@@ -118,9 +129,12 @@
joint = "left wrist"
amputation_point = "left wrist"
can_grasp = 1
+ organ_rel_size = 10
+ base_miss_chance = 50
/obj/item/organ/external/hand/removed()
- owner.u_equip(owner.gloves)
+ if(owner)
+ owner.drop_from_inventory(owner.gloves)
..()
/obj/item/organ/external/hand/right
@@ -136,6 +150,7 @@
organ_tag = BP_HEAD
icon_name = "head"
name = "head"
+ slot_flags = SLOT_BELT
max_damage = 75
min_broken_damage = 35
w_class = 3
@@ -145,19 +160,26 @@
joint = "jaw"
amputation_point = "neck"
gendered_icon = 1
+ cannot_gib = 1
encased = "skull"
+ base_miss_chance = 40
var/can_intake_reagents = 1
+ var/eye_icon = "eyes_s"
+
+/obj/item/organ/external/head/robotize(var/company, var/skip_prosthetics, var/keep_organs)
+ return ..(company, skip_prosthetics, 1)
/obj/item/organ/external/head/removed()
if(owner)
name = "[owner.real_name]'s head"
- owner.u_equip(owner.glasses)
- owner.u_equip(owner.head)
- owner.u_equip(owner.l_ear)
- owner.u_equip(owner.r_ear)
- owner.u_equip(owner.wear_mask)
+ owner.drop_from_inventory(owner.glasses)
+ owner.drop_from_inventory(owner.head)
+ owner.drop_from_inventory(owner.l_ear)
+ owner.drop_from_inventory(owner.r_ear)
+ owner.drop_from_inventory(owner.wear_mask)
spawn(1)
owner.update_hair()
+ get_icon()
..()
/obj/item/organ/external/head/take_damage(brute, burn, sharp, edge, used_weapon = null, list/forbidden_limbs = list())
@@ -168,3 +190,12 @@
disfigure("brute")
if (burn_dam > 40)
disfigure("burn")
+
+/obj/item/organ/external/head/skrell
+ eye_icon = "skrell_eyes_s"
+
+/obj/item/organ/external/head/seromi
+ eye_icon = "eyes_seromi"
+
+/obj/item/organ/external/head/no_eyes
+ eye_icon = "blank_eyes"
diff --git a/code/modules/organs/subtypes/unbreakable.dm b/code/modules/organs/subtypes/unbreakable.dm
index 137249e747..9492d330e1 100644
--- a/code/modules/organs/subtypes/unbreakable.dm
+++ b/code/modules/organs/subtypes/unbreakable.dm
@@ -1,4 +1,3 @@
-// Slime limbs.
/obj/item/organ/external/chest/unbreakable
cannot_break = 1
dislocated = -1
@@ -42,3 +41,48 @@
/obj/item/organ/external/head/unbreakable
cannot_break = 1
dislocated = -1
+
+// Slime limbs.
+/obj/item/organ/external/chest/unbreakable/slime
+ nonsolid = 1
+ max_damage = 50
+
+/obj/item/organ/external/groin/unbreakable/slime
+ nonsolid = 1
+ max_damage = 30
+
+/obj/item/organ/external/arm/unbreakable/slime
+ nonsolid = 1
+ max_damage = 15
+
+/obj/item/organ/external/arm/right/unbreakable/slime
+ nonsolid = 1
+ max_damage = 15
+
+/obj/item/organ/external/leg/unbreakable/slime
+ nonsolid = 1
+ max_damage = 15
+
+/obj/item/organ/external/leg/right/unbreakable/slime
+ nonsolid = 1
+ max_damage = 15
+
+/obj/item/organ/external/foot/unbreakable/slime
+ nonsolid = 1
+ max_damage = 5
+
+/obj/item/organ/external/foot/right/unbreakable/slime
+ nonsolid = 1
+ max_damage = 5
+
+/obj/item/organ/external/hand/unbreakable/slime
+ nonsolid = 1
+ max_damage = 5
+
+/obj/item/organ/external/hand/right/unbreakable/slime
+ nonsolid = 1
+ max_damage = 5
+
+/obj/item/organ/external/head/unbreakable/slime
+ nonsolid = 1
+ max_damage = 15
diff --git a/code/modules/organs/wound.dm b/code/modules/organs/wound.dm
index 850f5114c0..2c97bf4cfc 100644
--- a/code/modules/organs/wound.dm
+++ b/code/modules/organs/wound.dm
@@ -13,6 +13,8 @@
var/damage = 0
// ticks of bleeding left.
var/bleed_timer = 0
+ // Above this amount wounds you will need to treat the wound to stop bleeding, regardless of bleed_timer
+ var/bleed_threshold = 30
// amount of damage the current wound type requires(less means we need to apply the next healing stage)
var/min_damage = 0
@@ -38,7 +40,7 @@
var/internal = 0
// maximum stage at which bleeding should still happen. Beyond this stage bleeding is prevented.
var/max_bleeding_stage = 0
- // one of CUT, BRUISE, BURN
+ // one of CUT, PIERCE, BRUISE, BURN
var/damage_type = CUT
// whether this wound needs a bandage/salve to heal at all
// the maximum amount of damage that this wound can have and still autoheal
@@ -140,6 +142,15 @@
return 0
+ proc/bandage()
+ bandaged = 1
+
+ proc/salve()
+ salved = 1
+
+ proc/disinfect()
+ disinfected = 1
+
// heal the given amount of damage, and if the given amount of damage was more
// than what needed to be healed, return how much heal was left
// set @heals_internal to also heal internal organ damage
@@ -178,7 +189,7 @@
return 0 //incompatible damage types
if (src.amount > 1)
- return 0
+ return 0//merged wounds cannot be worsened.
//with 1.5*, a shallow cut will be able to carry at most 30 damage,
//37.5 for a deep cut
@@ -199,10 +210,10 @@
if (bandaged||clamped)
return 0
- if (wound_damage() <= 30 && bleed_timer <= 0)
- return 0 //Bleed timer has run out. Wounds with more than 30 damage don't stop bleeding on their own.
+ if (bleed_timer <= 0 && wound_damage() <= bleed_threshold)
+ return 0 //Bleed timer has run out. Once a wound is big enough though, you'll need a bandage to stop it
- return (damage_type == BRUISE && wound_damage() >= 20 || damage_type == CUT && wound_damage() >= 5)
+ return 1
/** WOUND DEFINITIONS **/
@@ -226,6 +237,18 @@
return /datum/wound/cut/deep
if(0 to 15)
return /datum/wound/cut/small
+ if(PIERCE)
+ switch(damage)
+ if(60 to INFINITY)
+ return /datum/wound/puncture/massive
+ if(50 to 60)
+ return /datum/wound/puncture/gaping_big
+ if(30 to 50)
+ return /datum/wound/puncture/gaping
+ if(15 to 30)
+ return /datum/wound/puncture/flesh
+ if(0 to 15)
+ return /datum/wound/puncture/small
if(BRUISE)
return /datum/wound/bruise
if(BURN)
@@ -243,67 +266,101 @@
return null //no wound
/** CUTS **/
+/datum/wound/cut
+ bleed_threshold = 5
+ damage_type = CUT
+
/datum/wound/cut/small
// link wound descriptions to amounts of damage
// Minor cuts have max_bleeding_stage set to the stage that bears the wound type's name.
// The major cut types have the max_bleeding_stage set to the clot stage (which is accordingly given the "blood soaked" descriptor).
max_bleeding_stage = 3
stages = list("ugly ripped cut" = 20, "ripped cut" = 10, "cut" = 5, "healing cut" = 2, "small scab" = 0)
- damage_type = CUT
/datum/wound/cut/deep
max_bleeding_stage = 3
stages = list("ugly deep ripped cut" = 25, "deep ripped cut" = 20, "deep cut" = 15, "clotted cut" = 8, "scab" = 2, "fresh skin" = 0)
- damage_type = CUT
/datum/wound/cut/flesh
max_bleeding_stage = 4
stages = list("ugly ripped flesh wound" = 35, "ugly flesh wound" = 30, "flesh wound" = 25, "blood soaked clot" = 15, "large scab" = 5, "fresh skin" = 0)
- damage_type = CUT
/datum/wound/cut/gaping
max_bleeding_stage = 3
stages = list("gaping wound" = 50, "large blood soaked clot" = 25, "blood soaked clot" = 15, "small angry scar" = 5, "small straight scar" = 0)
- damage_type = CUT
/datum/wound/cut/gaping_big
max_bleeding_stage = 3
stages = list("big gaping wound" = 60, "healing gaping wound" = 40, "large blood soaked clot" = 25, "large angry scar" = 10, "large straight scar" = 0)
- damage_type = CUT
datum/wound/cut/massive
max_bleeding_stage = 3
stages = list("massive wound" = 70, "massive healing wound" = 50, "massive blood soaked clot" = 25, "massive angry scar" = 10, "massive jagged scar" = 0)
- damage_type = CUT
+
+/** PUNCTURES **/
+/datum/wound/puncture
+ bleed_threshold = 5
+ damage_type = PIERCE
+
+/datum/wound/puncture/can_worsen(damage_type, damage)
+ return 0 //puncture wounds cannot be enlargened
+
+/datum/wound/puncture/small
+ max_bleeding_stage = 2
+ stages = list("puncture" = 5, "healing puncture" = 2, "small scab" = 0)
+ damage_type = PIERCE
+
+/datum/wound/puncture/flesh
+ max_bleeding_stage = 2
+ stages = list("puncture wound" = 15, "blood soaked clot" = 5, "large scab" = 2, "small round scar" = 0)
+ damage_type = PIERCE
+
+/datum/wound/puncture/gaping
+ max_bleeding_stage = 3
+ stages = list("gaping hole" = 30, "large blood soaked clot" = 15, "blood soaked clot" = 10, "small angry scar" = 5, "small round scar" = 0)
+ damage_type = PIERCE
+
+/datum/wound/puncture/gaping_big
+ max_bleeding_stage = 3
+ stages = list("big gaping hole" = 50, "healing gaping hole" = 20, "large blood soaked clot" = 15, "large angry scar" = 10, "large round scar" = 0)
+ damage_type = PIERCE
+
+datum/wound/puncture/massive
+ max_bleeding_stage = 3
+ stages = list("massive wound" = 60, "massive healing wound" = 30, "massive blood soaked clot" = 25, "massive angry scar" = 10, "massive jagged scar" = 0)
+ damage_type = PIERCE
/** BRUISES **/
/datum/wound/bruise
stages = list("monumental bruise" = 80, "huge bruise" = 50, "large bruise" = 30,
"moderate bruise" = 20, "small bruise" = 10, "tiny bruise" = 5)
+ bleed_threshold = 20
max_bleeding_stage = 3 //only large bruise and above can bleed.
autoheal_cutoff = 30
damage_type = BRUISE
/** BURNS **/
+/datum/wound/burn
+ damage_type = BURN
+ max_bleeding_stage = 0
+
+/datum/wound/burn/bleeding()
+ return 0
+
/datum/wound/burn/moderate
stages = list("ripped burn" = 10, "moderate burn" = 5, "healing moderate burn" = 2, "fresh skin" = 0)
- damage_type = BURN
/datum/wound/burn/large
stages = list("ripped large burn" = 20, "large burn" = 15, "healing large burn" = 5, "fresh skin" = 0)
- damage_type = BURN
/datum/wound/burn/severe
stages = list("ripped severe burn" = 35, "severe burn" = 30, "healing severe burn" = 10, "burn scar" = 0)
- damage_type = BURN
/datum/wound/burn/deep
stages = list("ripped deep burn" = 45, "deep burn" = 40, "healing deep burn" = 15, "large burn scar" = 0)
- damage_type = BURN
/datum/wound/burn/carbonised
stages = list("carbonised area" = 50, "healing carbonised area" = 20, "massive burn scar" = 0)
- damage_type = BURN
/** INTERNAL BLEEDING **/
/datum/wound/internal_bleeding
@@ -318,15 +375,15 @@ datum/wound/cut/massive
/datum/wound/lost_limb/New(var/obj/item/organ/external/lost_limb, var/losstype, var/clean)
var/damage_amt = lost_limb.max_damage
if(clean) damage_amt /= 2
-
+
switch(losstype)
if(DROPLIMB_EDGE, DROPLIMB_BLUNT)
damage_type = CUT
max_bleeding_stage = 3 //clotted stump and above can bleed.
stages = list(
"ripped stump" = damage_amt*1.3,
- "bloody stump" = damage_amt,
- "clotted stump" = damage_amt*0.5,
+ "bloody stump" = damage_amt,
+ "clotted stump" = damage_amt*0.5,
"scarred stump" = 0
)
if(DROPLIMB_BURN)
@@ -337,7 +394,7 @@ datum/wound/cut/massive
"scarred stump" = damage_amt*0.5,
"scarred stump" = 0
)
-
+
..(damage_amt)
/datum/wound/lost_limb/can_merge(var/datum/wound/other)
diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm
index 2253e049a5..891fd809fe 100644
--- a/code/modules/paperwork/clipboard.dm
+++ b/code/modules/paperwork/clipboard.dm
@@ -147,7 +147,7 @@
if(P && (P.loc == src) && istype(P, /obj/item/weapon/paper) )
- if(!(istype(usr, /mob/living/carbon/human) || istype(usr, /mob/dead/observer) || istype(usr, /mob/living/silicon)))
+ if(!(istype(usr, /mob/living/carbon/human) || istype(usr, /mob/observer/dead) || istype(usr, /mob/living/silicon)))
usr << browse("[P.name] [stars(P.info)][P.stamps]", "window=[P.name]")
onclose(usr, "[P.name]")
else
diff --git a/code/modules/paperwork/faxmachine.dm b/code/modules/paperwork/faxmachine.dm
index a7d489ba53..8c30f1d486 100644
--- a/code/modules/paperwork/faxmachine.dm
+++ b/code/modules/paperwork/faxmachine.dm
@@ -14,6 +14,7 @@ var/list/adminfaxes = list() //cache for faxes that have been sent to admins
use_power = 1
idle_power_usage = 30
active_power_usage = 200
+ circuit = /obj/item/weapon/circuitboard/fax
var/obj/item/weapon/card/id/scan = null // identification
var/authenticated = 0
@@ -22,63 +23,46 @@ var/list/adminfaxes = list() //cache for faxes that have been sent to admins
var/destination = null // the department we're sending to
/obj/machinery/photocopier/faxmachine/New()
- ..()
allfaxes += src
if(!destination) destination = "[boss_name]"
if( !(("[department]" in alldepartments) || ("[department]" in admin_departments)) )
alldepartments |= department
+ ..()
/obj/machinery/photocopier/faxmachine/attack_hand(mob/user as mob)
user.set_machine(src)
- var/dat = "Fax Machine "
+ ui_interact(user)
- var/scan_name
+/**
+ * Display the NanoUI window for the fax machine.
+ *
+ * See NanoUI documentation for details.
+ */
+/obj/machinery/photocopier/faxmachine/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
+ user.set_machine(src)
+
+ var/list/data = list()
if(scan)
- scan_name = scan.name
+ data["scanName"] = scan.name
else
- scan_name = "--------"
-
- dat += "Confirm Identity: [scan_name] "
-
- if(authenticated)
- dat += "{Log Out} "
+ data["scanName"] = null
+ data["bossName"] = boss_name
+ data["authenticated"] = authenticated
+ data["copyItem"] = copyitem
+ if(copyitem)
+ data["copyItemName"] = copyitem.name
else
- dat += "{Log In} "
+ data["copyItemName"] = null
+ data["cooldown"] = sendcooldown
+ data["destination"] = destination
- dat += " "
-
- if(authenticated)
- dat += "Logged in to: [boss_name] Quantum Entanglement Network "
-
- if(copyitem)
- dat += "Remove Item "
-
- if(sendcooldown)
- dat += "Transmitter arrays realigning. Please stand by. "
-
- else
-
- dat += "Send "
- dat += "Currently sending: [copyitem.name] "
- dat += "Sending to: [destination] "
-
- else
- if(sendcooldown)
- dat += "Please insert paper to send via secure connection. "
- dat += "Transmitter arrays realigning. Please stand by. "
- else
- dat += "Please insert paper to send via secure connection. "
-
- else
- dat += "Proper authentication is required to use this device. "
-
- if(copyitem)
- dat += "Remove Item "
-
- user << browse(dat, "window=copier")
- onclose(user, "copier")
- return
+ ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
+ if (!ui)
+ ui = new(user, src, ui_key, "fax.tmpl", src.name, 500, 500)
+ ui.set_initial_data(data)
+ ui.open()
+ ui.set_auto_update(10) //this machine is so unimportant let's not have it update that often.
/obj/machinery/photocopier/faxmachine/Topic(href, href_list)
if(href_list["send"])
@@ -98,7 +82,6 @@ var/list/adminfaxes = list() //cache for faxes that have been sent to admins
usr.put_in_hands(copyitem)
usr << "You take \the [copyitem] out of \the [src]. "
copyitem = null
- updateUsrDialog()
if(href_list["scan"])
if (scan)
@@ -130,7 +113,7 @@ var/list/adminfaxes = list() //cache for faxes that have been sent to admins
if(href_list["logout"])
authenticated = 0
- updateUsrDialog()
+ nanomanager.update_uis(src)
/obj/machinery/photocopier/faxmachine/proc/sendfax(var/destination)
if(stat & (BROKEN|NOPOWER))
@@ -157,7 +140,7 @@ var/list/adminfaxes = list() //cache for faxes that have been sent to admins
return 0 //You can't send faxes to "Unknown"
flick("faxreceive", src)
- playsound(loc, "sound/items/polaroid1.ogg", 50, 1)
+ playsound(loc, "sound/effects/printer.ogg", 50, 1)
// give the sprite some time to flick
sleep(20)
@@ -215,3 +198,4 @@ var/list/adminfaxes = list() //cache for faxes that have been sent to admins
for(var/client/C in admins)
if(R_ADMIN & C.holder.rights)
C << msg
+ C << 'sound/effects/printer.ogg'
diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm
index 67eb5c9aeb..57691fed9b 100644
--- a/code/modules/paperwork/filingcabinet.dm
+++ b/code/modules/paperwork/filingcabinet.dm
@@ -17,12 +17,10 @@
density = 1
anchored = 1
-
/obj/structure/filingcabinet/chestdrawer
name = "chest drawer"
icon_state = "chestdrawer"
-
/obj/structure/filingcabinet/filingcabinet //not changing the path to avoid unecessary map issues, but please don't name stuff like this in the future -Pete
icon_state = "tallcabinet"
@@ -46,6 +44,16 @@
playsound(loc, 'sound/items/Ratchet.ogg', 50, 1)
anchored = !anchored
user << "You [anchored ? "wrench" : "unwrench"] \the [src]. "
+ else if(istype(P, /obj/item/weapon/screwdriver))
+ user << "You begin taking the [name] apart. "
+ if(do_after(user, 10))
+ playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
+ user << "You take the [name] apart. "
+ new /obj/item/stack/material/steel( src.loc, 4 )
+ for(var/obj/item/I in contents)
+ I.forceMove(loc)
+ qdel(src)
+ return
else
user << "You can't put [P] in [src]! "
@@ -151,7 +159,7 @@
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(src)
P.info = "Medical Record "
P.info += "Name: [G.fields["name"]] ID: [G.fields["id"]] \nSex: [G.fields["sex"]] \nAge: [G.fields["age"]] \nFingerprint: [G.fields["fingerprint"]] \nPhysical Status: [G.fields["p_stat"]] \nMental Status: [G.fields["m_stat"]] "
-
+
P.info += " \nMedical Data \nBlood Type: [M.fields["b_type"]] \nDNA: [M.fields["b_dna"]] \n \nMinor Disabilities: [M.fields["mi_dis"]] \nDetails: [M.fields["mi_dis_d"]] \n \nMajor Disabilities: [M.fields["ma_dis"]] \nDetails: [M.fields["ma_dis_d"]] \n \nAllergies: [M.fields["alg"]] \nDetails: [M.fields["alg_d"]] \n \nCurrent Diseases: [M.fields["cdi"]] (per disease info placed in log/comment section) \nDetails: [M.fields["cdi_d"]] \n \nImportant Notes: \n\t[M.fields["notes"]] \n \nComments/Log "
var/counter = 1
while(M.fields["com_[counter]"])
diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm
index 8289b291ad..cfb662a340 100644
--- a/code/modules/paperwork/folders.dm
+++ b/code/modules/paperwork/folders.dm
@@ -102,7 +102,7 @@
else if(href_list["read"])
var/obj/item/weapon/paper/P = locate(href_list["read"])
if(P && (P.loc == src) && istype(P))
- if(!(istype(usr, /mob/living/carbon/human) || istype(usr, /mob/dead/observer) || istype(usr, /mob/living/silicon)))
+ if(!(istype(usr, /mob/living/carbon/human) || istype(usr, /mob/observer/dead) || istype(usr, /mob/living/silicon)))
usr << browse("[P.name] [stars(P.info)][P.stamps]", "window=[P.name]")
onclose(usr, "[P.name]")
else
diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm
index 9cb37d98a9..bb4a9d1a23 100644
--- a/code/modules/paperwork/paper.dm
+++ b/code/modules/paperwork/paper.dm
@@ -73,14 +73,14 @@
/obj/item/weapon/paper/examine(mob/user)
..()
- if(in_range(user, src) || istype(user, /mob/dead/observer))
+ if(in_range(user, src) || istype(user, /mob/observer/dead))
show_content(usr)
else
user << "You have to go closer if you want to read it. "
return
/obj/item/weapon/paper/proc/show_content(var/mob/user, var/forceshow=0)
- if(!(istype(user, /mob/living/carbon/human) || istype(user, /mob/dead/observer) || istype(user, /mob/living/silicon)) && !forceshow)
+ if(!(istype(user, /mob/living/carbon/human) || istype(user, /mob/observer/dead) || istype(user, /mob/living/silicon)) && !forceshow)
user << browse("[name] [stars(info)][stamps]", "window=[name]")
onclose(user, "[name]")
else
@@ -337,8 +337,9 @@
var/obj/item/i = usr.get_active_hand() // Check to see if he still got that darn pen, also check if he's using a crayon or pen.
var/iscrayon = 0
if(!istype(i, /obj/item/weapon/pen))
- if(usr.back && istype(usr.back,/obj/item/weapon/rig))
- var/obj/item/weapon/rig/r = usr.back
+ var/mob/living/M = usr
+ if(istype(M) && M.back && istype(M.back,/obj/item/weapon/rig))
+ var/obj/item/weapon/rig/r = M.back
var/obj/item/rig_module/device/pen/m = locate(/obj/item/rig_module/device/pen) in r.installed_modules
if(!r.offline && m)
i = m.device
diff --git a/code/modules/paperwork/paper_bundle.dm b/code/modules/paperwork/paper_bundle.dm
index db7a088216..53110bed0f 100644
--- a/code/modules/paperwork/paper_bundle.dm
+++ b/code/modules/paperwork/paper_bundle.dm
@@ -122,7 +122,7 @@
if(istype(pages[page], /obj/item/weapon/paper))
var/obj/item/weapon/paper/P = W
- if(!(istype(usr, /mob/living/carbon/human) || istype(usr, /mob/dead/observer) || istype(usr, /mob/living/silicon)))
+ if(!(istype(usr, /mob/living/carbon/human) || istype(usr, /mob/observer/dead) || istype(usr, /mob/living/silicon)))
dat+= "[P.name] [stars(P.info)][P.stamps]"
else
dat+= "[P.name] [P.info][P.stamps]"
diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm
index 7d612158b1..7ee79cb923 100644
--- a/code/modules/paperwork/pen.dm
+++ b/code/modules/paperwork/pen.dm
@@ -111,8 +111,8 @@
/*
* Parapens
*/
- /obj/item/weapon/pen/reagent/paralysis
- origin_tech = "materials=2;syndicate=5"
+/obj/item/weapon/pen/reagent/paralysis
+ origin_tech = list(TECH_MATERIAL = 2, TECH_ILLEGAL = 5)
/obj/item/weapon/pen/reagent/paralysis/New()
..()
diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm
index 6d24a8f238..ec0d7acf19 100644
--- a/code/modules/paperwork/photocopier.dm
+++ b/code/modules/paperwork/photocopier.dm
@@ -9,35 +9,53 @@
idle_power_usage = 30
active_power_usage = 200
power_channel = EQUIP
+ circuit = /obj/item/weapon/circuitboard/photocopier
var/obj/item/copyitem = null //what's in the copier!
var/copies = 1 //how many copies to print!
var/toner = 30 //how much toner is left! woooooo~
var/maxcopies = 10 //how many copies can be copied at once- idea shamelessly stolen from bs12's copier!
+/obj/machinery/photocopier/New()
+ circuit = new circuit(src)
+ component_parts = list()
+ component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
+ component_parts += new /obj/item/weapon/stock_parts/motor(src)
+ component_parts += new /obj/item/weapon/stock_parts/micro_laser(src)
+ component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
+ RefreshParts()
+
/obj/machinery/photocopier/attack_ai(mob/user as mob)
return attack_hand(user)
/obj/machinery/photocopier/attack_hand(mob/user as mob)
user.set_machine(src)
- var/dat = "Photocopier "
- if(copyitem)
- dat += "Remove Item "
- if(toner)
- dat += "Copy "
- dat += "Printing: [copies] copies."
- dat += "- "
- dat += "+ "
- else if(toner)
- dat += "Please insert something to copy. "
+ ui_interact(user)
+
+/**
+ * Display the NanoUI window for the photocopier.
+ *
+ * See NanoUI documentation for details.
+ */
+/obj/machinery/photocopier/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
+ user.set_machine(src)
+
+ var/list/data = list()
+ data["copyItem"] = copyitem
+ data["toner"] = toner
+ data["copies"] = copies
+ data["maxCopies"] = maxcopies
if(istype(user,/mob/living/silicon))
- dat += "Print photo from database "
- dat += "Current toner level: [toner]"
- if(!toner)
- dat +=" Please insert a new toner cartridge!"
- user << browse(dat, "window=copier")
- onclose(user, "copier")
- return
+ data["isSilicon"] = 1
+ else
+ data["isSilicon"] = null
+
+ ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
+ if (!ui)
+ ui = new(user, src, ui_key, "photocopier.tmpl", src.name, 300, 250)
+ ui.set_initial_data(data)
+ ui.open()
+ ui.set_auto_update(10)
/obj/machinery/photocopier/Topic(href, href_list)
if(href_list["copy"])
@@ -62,22 +80,18 @@
break
use_power(active_power_usage)
- updateUsrDialog()
else if(href_list["remove"])
if(copyitem)
copyitem.loc = usr.loc
usr.put_in_hands(copyitem)
usr << "You take \the [copyitem] out of \the [src]. "
copyitem = null
- updateUsrDialog()
else if(href_list["min"])
if(copies > 1)
copies--
- updateUsrDialog()
else if(href_list["add"])
if(copies < maxcopies)
copies++
- updateUsrDialog()
else if(href_list["aipic"])
if(!istype(usr,/mob/living/silicon)) return
if(stat & (BROKEN|NOPOWER)) return
@@ -99,7 +113,8 @@
p.desc += " - Copied by [tempAI.name]"
toner -= 5
sleep(15)
- updateUsrDialog()
+
+ nanomanager.update_uis(src)
/obj/machinery/photocopier/attackby(obj/item/O as obj, mob/user as mob)
if(istype(O, /obj/item/weapon/paper) || istype(O, /obj/item/weapon/photo) || istype(O, /obj/item/weapon/paper_bundle))
@@ -109,7 +124,6 @@
O.loc = src
user << "You insert \the [O] into \the [src]. "
flick(insert_anim, src)
- updateUsrDialog()
else
user << "There is already something in \the [src]. "
else if(istype(O, /obj/item/device/toner))
@@ -119,13 +133,18 @@
var/obj/item/device/toner/T = O
toner += T.toner_amount
qdel(O)
- updateUsrDialog()
else
user << "This cartridge is not yet ready for replacement! Use up the rest of the toner. "
else if(istype(O, /obj/item/weapon/wrench))
playsound(loc, 'sound/items/Ratchet.ogg', 50, 1)
anchored = !anchored
user << "You [anchored ? "wrench" : "unwrench"] \the [src]. "
+
+ else if(default_deconstruction_screwdriver(user, O))
+ return
+ else if(default_deconstruction_crowbar(user, O))
+ return
+
return
/obj/machinery/photocopier/ex_act(severity)
diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm
index 90ed7ccf59..5787ff2d02 100644
--- a/code/modules/paperwork/photography.dm
+++ b/code/modules/paperwork/photography.dm
@@ -91,7 +91,7 @@ var/global/photo_count = 0
/obj/item/weapon/storage/photo_album/MouseDrop(obj/over_object as obj)
if((istype(usr, /mob/living/carbon/human)))
- var/mob/M = usr
+ var/mob/living/carbon/human/M = usr
if(!( istype(over_object, /obj/screen) ))
return ..()
playsound(loc, "rustle", 50, 1, -5)
diff --git a/code/modules/paperwork/stamps.dm b/code/modules/paperwork/stamps.dm
index a6954e9e2f..f37cdce706 100644
--- a/code/modules/paperwork/stamps.dm
+++ b/code/modules/paperwork/stamps.dm
@@ -52,6 +52,10 @@
name = "centcomm rubber stamp"
icon_state = "stamp-cent"
+/obj/item/weapon/stamp/qm
+ name = "quartermaster's stamp"
+ icon_state = "stamp-qm"
+
// Syndicate stamp to forge documents.
/obj/item/weapon/stamp/chameleon/attack_self(mob/user as mob)
diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm
index 128cc62560..1d19b0fd6b 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -866,7 +866,7 @@
if(locked && !issilicon(usr) )
if(isobserver(usr) )
- var/mob/dead/observer/O = usr //Added to allow admin nanoUI interactions.
+ var/mob/observer/dead/O = usr //Added to allow admin nanoUI interactions.
if(!O.can_admin_interact() ) //NanoUI /should/ make this not needed, but better safe than sorry.
usr << "Try as you might, your ghostly fingers can't press the buttons."
return 1
diff --git a/code/modules/power/batteryrack.dm b/code/modules/power/batteryrack.dm
index a70b19421e..203227e613 100644
--- a/code/modules/power/batteryrack.dm
+++ b/code/modules/power/batteryrack.dm
@@ -9,20 +9,19 @@
input_level_max = 0
output_level_max = 0
icon_state = "gsmes"
+ circuit = /obj/item/weapon/circuitboard/batteryrack
var/cells_amount = 0
var/capacitors_amount = 0
var/global/list/br_cache = null
/obj/machinery/power/smes/batteryrack/New()
..()
- add_parts()
RefreshParts()
return
//Maybe this should be moved up to obj/machinery
/obj/machinery/power/smes/batteryrack/proc/add_parts()
component_parts = list()
- component_parts += new /obj/item/weapon/circuitboard/batteryrack
component_parts += new /obj/item/weapon/cell/high
component_parts += new /obj/item/weapon/cell/high
component_parts += new /obj/item/weapon/cell/high
@@ -49,7 +48,7 @@
/obj/machinery/power/smes/batteryrack/update_icon()
overlays.Cut()
if(stat & BROKEN) return
-
+
if(!br_cache)
br_cache = list()
br_cache.len = 7
@@ -60,7 +59,7 @@
br_cache[5] = image('icons/obj/power.dmi', "gsmes_og2")
br_cache[6] = image('icons/obj/power.dmi', "gsmes_og3")
br_cache[7] = image('icons/obj/power.dmi', "gsmes_og4")
-
+
if (output_attempt)
overlays += br_cache[1]
if(inputting)
@@ -83,9 +82,10 @@
if (charge < (capacity / 100))
if (!output_attempt && !input_attempt)
playsound(get_turf(src), 'sound/items/Crowbar.ogg', 50, 1)
- var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(src.loc)
+ var/obj/structure/frame/M = new /obj/structure/frame(src.loc)
+ M.frame_type = "machine"
M.state = 2
- M.icon_state = "box_1"
+ M.icon_state = "machine_1"
for(var/obj/I in component_parts)
I.loc = src.loc
qdel(src)
@@ -117,12 +117,12 @@
/obj/machinery/power/smes/batteryrack/makeshift
name = "makeshift PSU"
desc = "A rack of batteries connected by a mess of wires posing as a PSU."
+ circuit = /obj/item/weapon/circuitboard/ghettosmes
var/overcharge_percent = 0
/obj/machinery/power/smes/batteryrack/makeshift/add_parts()
component_parts = list()
- component_parts += new /obj/item/weapon/circuitboard/ghettosmes
component_parts += new /obj/item/weapon/cell/high
component_parts += new /obj/item/weapon/cell/high
component_parts += new /obj/item/weapon/cell/high
diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm
index bfcf1aefa3..a423e4ced4 100644
--- a/code/modules/power/cable.dm
+++ b/code/modules/power/cable.dm
@@ -12,7 +12,7 @@
9 1 5
\ | /
- 8 - 0 - 4
+ 8 - 0 - 4,
/ | \
10 2 6
@@ -21,6 +21,27 @@ If d1 = 0 and d2 = dir, it's a O-X cable, getting from the center of the tile to
If d1 = dir1 and d2 = dir2, it's a full X-X cable, getting from dir1 to dir2
By design, d1 is the smallest direction and d2 is the highest
*/
+var/list/possible_cable_coil_colours = list(
+ "White" = COLOR_WHITE,
+ "Silver" = COLOR_SILVER,
+ "Gray" = COLOR_GRAY,
+ "Black" = COLOR_BLACK,
+ "Red" = COLOR_RED,
+ "Maroon" = COLOR_MAROON,
+ "Yellow" = COLOR_YELLOW,
+ "Olive" = COLOR_OLIVE,
+ "Lime" = COLOR_GREEN,
+ "Green" = COLOR_LIME,
+ "Cyan" = COLOR_CYAN,
+ "Teal" = COLOR_TEAL,
+ "Blue" = COLOR_BLUE,
+ "Navy" = COLOR_NAVY,
+ "Pink" = COLOR_PINK,
+ "Purple" = COLOR_PURPLE,
+ "Orange" = COLOR_ORANGE,
+ "Beige" = COLOR_BEIGE,
+ "Brown" = COLOR_BROWN
+ )
/obj/structure/cable
level = 1
@@ -464,6 +485,7 @@ obj/structure/cable/proc/cableColor(var/colorC)
slot_flags = SLOT_BELT
item_state = "coil"
attack_verb = list("whipped", "lashed", "disciplined", "flogged")
+ stacktype = /obj/item/stack/cable_coil
/obj/item/stack/cable_coil/cyborg
name = "cable coil synthesizer"
@@ -472,7 +494,6 @@ obj/structure/cable/proc/cableColor(var/colorC)
matter = null
uses_charge = 1
charge_costs = list(1)
- stacktype = /obj/item/stack/cable_coil
/obj/item/stack/cable_coil/suicide_act(mob/user)
if(locate(/obj/item/weapon/stool) in user.loc)
@@ -501,22 +522,16 @@ obj/structure/cable/proc/cableColor(var/colorC)
var/mob/living/carbon/human/H = A
var/obj/item/organ/external/S = H.organs_by_name[user.zone_sel.selecting]
- if(!S || !(S.status & ORGAN_ROBOT))
+ if(!S || S.robotic < ORGAN_ROBOT || S.open == 3)
return ..()
- if(S.burn_dam)
- if(S.burn_dam < ROBOLIMB_SELF_REPAIR_CAP)
- S.heal_damage(0,15,0,1)
- user.visible_message("\The [user] repairs some burn damage on \the [H]'s [S.name] with \the [src]. ")
- else if(S.open < 3)
- user << "The damage is far too severe to patch over externally. "
- else
- return ..()
- else
- user << "Nothing to fix! "
- return
- return ..()
+ var/use_amt = min(src.amount, ceil(S.burn_dam/3), 5)
+ if(can_use(use_amt))
+ if(S.robo_repair(3*use_amt, BURN, "some damaged wiring", src, user))
+ src.use(use_amt)
+ else
+ return ..()
/obj/item/stack/cable_coil/update_icon()
if (!color)
@@ -531,6 +546,17 @@ obj/structure/cable/proc/cableColor(var/colorC)
icon_state = "coil"
name = "cable coil"
+/obj/item/stack/cable_coil/proc/set_cable_color(var/selected_color, var/user)
+ if(!selected_color)
+ return
+
+ var/final_color = possible_cable_coil_colours[selected_color]
+ if(!final_color)
+ final_color = possible_cable_coil_colours["Red"]
+ selected_color = "red"
+ color = final_color
+ user << "You change \the [src]'s color to [lowertext(selected_color)]. "
+
/obj/item/stack/cable_coil/proc/update_wclass()
if(amount == 1)
w_class = 1.0
@@ -571,42 +597,16 @@ obj/structure/cable/proc/cableColor(var/colorC)
set name = "Change Colour"
set category = "Object"
- var/list/possible_colours = list ("Yellow", "Green", "Pink", "Blue", "Orange", "Cyan", "Red")
- var/selected_type = input("Pick new colour.", "Cable Colour", null, null) as null|anything in possible_colours
-
- if(selected_type)
- switch(selected_type)
- if("Yellow")
- color = COLOR_YELLOW
- if("Green")
- color = COLOR_LIME
- if("Pink")
- color = COLOR_PINK
- if("Blue")
- color = COLOR_BLUE
- if("Orange")
- color = COLOR_ORANGE
- if("Cyan")
- color = COLOR_CYAN
- else
- color = COLOR_RED
- usr << "You change your cable coil's colour to [selected_type]"
+ var/selected_type = input("Pick new colour.", "Cable Colour", null, null) as null|anything in possible_cable_coil_colours
+ set_cable_color(selected_type, usr)
// Items usable on a cable coil :
// - Wirecutters : cut them duh !
// - Cable coil : merge cables
-/obj/item/stack/cable_coil/proc/can_merge(var/obj/item/stack/cable_coil/C)
- return color == C.color
-
-/obj/item/stack/cable_coil/cyborg/can_merge()
- return 1
/obj/item/stack/cable_coil/transfer_to(obj/item/stack/cable_coil/S)
if(!istype(S))
return
- if(!can_merge(S))
- return
-
..()
/obj/item/stack/cable_coil/use()
@@ -880,7 +880,51 @@ obj/structure/cable/proc/cableColor(var/colorC)
stacktype = /obj/item/stack/cable_coil
color = COLOR_WHITE
+/obj/item/stack/cable_coil/silver
+ stacktype = /obj/item/stack/cable_coil
+ color = COLOR_SILVER
+
+/obj/item/stack/cable_coil/gray
+ stacktype = /obj/item/stack/cable_coil
+ color = COLOR_GRAY
+
+/obj/item/stack/cable_coil/black
+ stacktype = /obj/item/stack/cable_coil
+ color = COLOR_BLACK
+
+/obj/item/stack/cable_coil/maroon
+ stacktype = /obj/item/stack/cable_coil
+ color = COLOR_MAROON
+
+/obj/item/stack/cable_coil/olive
+ stacktype = /obj/item/stack/cable_coil
+ color = COLOR_OLIVE
+
+/obj/item/stack/cable_coil/lime
+ stacktype = /obj/item/stack/cable_coil
+ color = COLOR_LIME
+
+/obj/item/stack/cable_coil/teal
+ stacktype = /obj/item/stack/cable_coil
+ color = COLOR_TEAL
+
+/obj/item/stack/cable_coil/navy
+ stacktype = /obj/item/stack/cable_coil
+ color = COLOR_NAVY
+
+/obj/item/stack/cable_coil/purple
+ stacktype = /obj/item/stack/cable_coil
+ color = COLOR_PURPLE
+
+/obj/item/stack/cable_coil/beige
+ stacktype = /obj/item/stack/cable_coil
+ color = COLOR_BEIGE
+
+/obj/item/stack/cable_coil/brown
+ stacktype = /obj/item/stack/cable_coil
+ color = COLOR_BROWN
+
/obj/item/stack/cable_coil/random/New()
stacktype = /obj/item/stack/cable_coil
- color = pick(COLOR_RED, COLOR_BLUE, COLOR_LIME, COLOR_WHITE, COLOR_PINK, COLOR_YELLOW, COLOR_CYAN)
+ color = pick(COLOR_RED, COLOR_BLUE, COLOR_LIME, COLOR_WHITE, COLOR_PINK, COLOR_YELLOW, COLOR_CYAN, COLOR_SILVER, COLOR_GRAY, COLOR_BLACK, COLOR_MAROON, COLOR_OLIVE, COLOR_LIME, COLOR_TEAL, COLOR_NAVY, COLOR_PURPLE, COLOR_BEIGE, COLOR_BROWN)
..()
\ No newline at end of file
diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm
index 4bbce17aa1..f3596a5d9a 100644
--- a/code/modules/power/lighting.dm
+++ b/code/modules/power/lighting.dm
@@ -590,7 +590,7 @@
icon = 'icons/obj/lighting.dmi'
force = 2
throwforce = 5
- w_class = 2
+ w_class = 1
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/port_gen.dm b/code/modules/power/port_gen.dm
index 400e7281b6..41e182b91b 100644
--- a/code/modules/power/port_gen.dm
+++ b/code/modules/power/port_gen.dm
@@ -287,14 +287,15 @@
else
user << "\blue You close the access panel."
else if(istype(O, /obj/item/weapon/crowbar) && open)
- var/obj/machinery/constructable_frame/machine_frame/new_frame = new /obj/machinery/constructable_frame/machine_frame(src.loc)
+ var/obj/structure/frame/new_frame = new /obj/structure/frame(src.loc)
for(var/obj/item/I in component_parts)
I.loc = src.loc
while ( sheets > 0 )
DropFuel()
+ new_frame.frame_type = "machine"
new_frame.state = 2
- new_frame.icon_state = "box_1"
+ new_frame.icon_state = "machine_1"
qdel(src)
/obj/machinery/power/port_gen/pacman/attack_hand(mob/user as mob)
diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm
index 540e5a3367..4f34cd7eff 100644
--- a/code/modules/power/power.dm
+++ b/code/modules/power/power.dm
@@ -344,7 +344,7 @@
PN.trigger_warning(5)
if(istype(M,/mob/living/carbon/human))
var/mob/living/carbon/human/H = M
- if(H.species.siemens_coefficient == 0)
+ if(H.species.siemens_coefficient <= 0)
return
if(H.gloves)
var/obj/item/clothing/gloves/G = H.gloves
diff --git a/code/modules/power/sensors/sensor_monitoring.dm b/code/modules/power/sensors/sensor_monitoring.dm
index c75b628528..597ced19db 100644
--- a/code/modules/power/sensors/sensor_monitoring.dm
+++ b/code/modules/power/sensors/sensor_monitoring.dm
@@ -8,7 +8,7 @@
desc = "Computer designed to remotely monitor power levels around the station"
icon = 'icons/obj/computer.dmi'
icon_keyboard = "power_key"
- icon_screen = "power"
+ icon_screen = "power:0"
light_color = "#ffcc33"
//computer stuff
@@ -30,16 +30,12 @@
// Updates icon of this computer according to current status.
/obj/machinery/computer/power_monitor/update_icon()
- if(stat & BROKEN)
- icon_state = "powerb"
- return
- if(stat & NOPOWER)
- icon_state = "power0"
- return
- if(alerting)
- icon_state = "power_alert"
- return
- icon_state = "power"
+ if(!(stat & (NOPOWER|BROKEN)))
+ if(alerting)
+ icon_screen = "power:1"
+ else
+ icon_screen = "power:0"
+ ..()
// On creation automatically connects to active sensors. This is delayed to ensure sensors already exist.
/obj/machinery/computer/power_monitor/New()
diff --git a/code/modules/power/singularity/act.dm b/code/modules/power/singularity/act.dm
index 23774d526e..d244c4eeaa 100644
--- a/code/modules/power/singularity/act.dm
+++ b/code/modules/power/singularity/act.dm
@@ -134,10 +134,7 @@
/atom/proc/singuloCanEat()
return 1
-/mob/dead/singuloCanEat()
- return 0
-
-/mob/eye/singuloCanEat()
+/mob/observer/singuloCanEat()
return 0
/mob/new_player/singuloCanEat()
diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm
index 05dae4fdbf..9fc0f74290 100644
--- a/code/modules/power/smes.dm
+++ b/code/modules/power/smes.dm
@@ -1,7 +1,7 @@
// the SMES
// stores power
-#define SMESRATE 0.05
+#define SMESRATE 0.03333 //translates Watt into Kilowattminutes with respect to machinery schedule_interval ~(2s*1W*1min/60s)
#define SMESMAXCHARGELEVEL 250000
#define SMESMAXOUTPUT 250000
@@ -12,6 +12,7 @@
density = 1
anchored = 1
use_power = 0
+ circuit = /obj/item/weapon/circuitboard/smes
var/capacity = 5e6 // maximum charge
var/charge = 1e6 // actual charge
@@ -300,14 +301,17 @@
var/data[0]
data["nameTag"] = name_tag
data["storedCapacity"] = round(100.0*charge/capacity, 0.1)
+ data["storedCapacityAbs"] = round(charge/(1000*60), 0.1)
+ data["storedCapacityMax"] = round(capacity/(1000*60))
data["charging"] = inputting
data["chargeMode"] = input_attempt
- data["chargeLevel"] = input_level
- data["chargeMax"] = input_level_max
+ data["chargeLevel"] = round(input_level/1000, 0.1)
+ data["chargeMax"] = round(input_level_max/1000)
+ data["chargeLoad"] = round(terminal.powernet.avail/1000, 0.1)
data["outputOnline"] = output_attempt
- data["outputLevel"] = output_level
- data["outputMax"] = output_level_max
- data["outputLoad"] = round(output_used)
+ data["outputLevel"] = round(output_level/1000, 0.1)
+ data["outputMax"] = round(output_level_max/1000)
+ data["outputLoad"] = round(output_used/1000, 0.1)
if(outputting)
data["outputting"] = 2 // smes is outputting
@@ -350,7 +354,7 @@
if("max")
input_level = input_level_max
if("set")
- input_level = input(usr, "Enter new input level (0-[input_level_max])", "SMES Input Power Control", input_level) as num
+ input_level = (input(usr, "Enter new input level (0-[input_level_max/1000] kW)", "SMES Input Power Control", input_level/1000) as num) * 1000
input_level = max(0, min(input_level_max, input_level)) // clamp to range
else if( href_list["output"] )
@@ -360,7 +364,7 @@
if("max")
output_level = output_level_max
if("set")
- output_level = input(usr, "Enter new output level (0-[output_level_max])", "SMES Output Power Control", output_level) as num
+ output_level = (input(usr, "Enter new output level (0-[output_level_max/1000] kW)", "SMES Output Power Control", output_level/1000) as num) * 1000
output_level = max(0, min(output_level_max, output_level)) // clamp to range
investigate_log("input/output; on ":"off "] | Input-mode: [input_attempt?"auto ":"off "] by [usr.key]","singulo")
diff --git a/code/modules/power/smes_construction.dm b/code/modules/power/smes_construction.dm
index 497e16a885..0ce32da396 100644
--- a/code/modules/power/smes_construction.dm
+++ b/code/modules/power/smes_construction.dm
@@ -12,29 +12,29 @@
icon = 'icons/obj/stock_parts.dmi'
icon_state = "smes_coil" // Just few icons patched together. If someone wants to make better icon, feel free to do so!
w_class = 4.0 // It's LARGE (backpack size)
- var/ChargeCapacity = 5000000
- var/IOCapacity = 250000
+ var/ChargeCapacity = 6000000 // 100 kWh
+ var/IOCapacity = 250000 // 250 kW
// 20% Charge Capacity, 60% I/O Capacity. Used for substation/outpost SMESs.
/obj/item/weapon/smes_coil/weak
name = "basic superconductive magnetic coil"
desc = "Cheaper model of standard superconductive magnetic coil. It's capacity and I/O rating are considerably lower."
- ChargeCapacity = 1000000
- IOCapacity = 150000
+ ChargeCapacity = 1200000 // 20 kWh
+ IOCapacity = 150000 // 150 kW
// 1000% Charge Capacity, 20% I/O Capacity
/obj/item/weapon/smes_coil/super_capacity
name = "superconductive capacitance coil"
desc = "Specialised version of standard superconductive magnetic coil. This one has significantly stronger containment field, allowing for significantly larger power storage. It's IO rating is much lower, however."
- ChargeCapacity = 50000000
- IOCapacity = 50000
+ ChargeCapacity = 60000000 // 1000 kWh
+ IOCapacity = 50000 // 50 kW
// 10% Charge Capacity, 400% I/O Capacity. Technically turns SMES into large super capacitor.Ideal for shields.
/obj/item/weapon/smes_coil/super_io
name = "superconductive transmission coil"
desc = "Specialised version of standard superconductive magnetic coil. While this one won't store almost any power, it rapidly transfers power, making it useful in systems which require large throughput."
- ChargeCapacity = 500000
- IOCapacity = 1000000
+ ChargeCapacity = 600000 // 10 kWh
+ IOCapacity = 1000000 // 1000 kW
// SMES SUBTYPES - THESE ARE MAPPED IN AND CONTAIN DIFFERENT TYPES OF COILS
@@ -116,7 +116,6 @@
/obj/machinery/power/smes/buildable/New(var/install_coils = 1)
component_parts = list()
component_parts += new /obj/item/stack/cable_coil(src,30)
- component_parts += new /obj/item/weapon/circuitboard/smes(src)
src.wires = new /datum/wires/smes(src)
// Allows for mapped-in SMESs with larger capacity/IO
@@ -345,9 +344,10 @@
return
usr << "\red You have disassembled the SMES cell!"
- var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(src.loc)
+ var/obj/structure/frame/M = new /obj/structure/frame(src.loc)
+ M.frame_type = "machine"
M.state = 2
- M.icon_state = "box_1"
+ M.icon_state = "machine_1"
for(var/obj/I in component_parts)
I.loc = src.loc
component_parts -= I
diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm
index 232adb345b..dd1c2a56b6 100644
--- a/code/modules/power/solar.dm
+++ b/code/modules/power/solar.dm
@@ -407,25 +407,27 @@ var/list/solars_list = list()
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 )
+ var/obj/structure/frame/A = new /obj/structure/frame( src.loc )
new /obj/item/weapon/material/shard( src.loc )
var/obj/item/weapon/circuitboard/solar_control/M = new /obj/item/weapon/circuitboard/solar_control( A )
for (var/obj/C in src)
C.loc = src.loc
A.circuit = M
+ A.frame_type = "computer"
A.state = 3
- A.icon_state = "3"
+ A.icon_state = "computer_3"
A.anchored = 1
qdel(src)
else
user << "\blue You disconnect the monitor."
- var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
+ var/obj/structure/frame/A = new /obj/structure/frame( src.loc )
var/obj/item/weapon/circuitboard/solar_control/M = new /obj/item/weapon/circuitboard/solar_control( A )
for (var/obj/C in src)
C.loc = src.loc
A.circuit = M
+ A.frame_type = "computer"
A.state = 4
- A.icon_state = "4"
+ A.icon_state = "computer_4"
A.anchored = 1
qdel(src)
else
diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm
index 219ebff141..59428ceb94 100644
--- a/code/modules/projectiles/ammunition.dm
+++ b/code/modules/projectiles/ammunition.dm
@@ -12,7 +12,7 @@
var/caliber = "" //Which kind of guns it can be loaded into
var/projectile_type //The bullet type to create when New() is called
var/obj/item/projectile/BB = null //The loaded bullet - make it so that the projectiles are created only when needed?
- var/spent_icon = null
+// var/spent_icon = null
/obj/item/ammo_casing/New()
..()
@@ -46,8 +46,10 @@
BB.name = "[initial(BB.name)] (\"[label_text]\")"
/obj/item/ammo_casing/update_icon()
- if(spent_icon && !BB)
- icon_state = spent_icon
+/* if(spent_icon && !BB)
+ icon_state = spent_icon*/
+ if(!BB) // This is really just a much better way of doing this.
+ icon_state = "[initial(icon_state)]-spent"
/obj/item/ammo_casing/examine(mob/user)
..()
@@ -88,6 +90,7 @@
var/list/ammo_states = list() //values
/obj/item/ammo_magazine/New()
+ ..()
if(multiple_sprites)
initialize_magazine_icondata(src)
@@ -112,6 +115,24 @@
C.loc = src
stored_ammo.Insert(1, C) //add to the head of the list
update_icon()
+ if(istype(W, /obj/item/ammo_magazine/clip))
+ var/obj/item/ammo_magazine/clip/L = W
+ if(L.caliber != caliber)
+ user << "The ammo in [L] does not fit into [src]. "
+ return
+ if(!L.stored_ammo.len)
+ user << "There's no more ammo [L]! "
+ return
+ if(stored_ammo.len >= max_ammo)
+ user << "[src] is full! "
+ return
+ var/obj/item/ammo_casing/AC = L.stored_ammo[1] //select the next casing.
+ L.stored_ammo -= AC //Remove this casing from loaded list of the clip.
+ AC.loc = src
+ stored_ammo.Insert(1, AC) //add it to the head of our magazine's list
+ L.update_icon()
+ playsound(user.loc, 'sound/weapons/flipblade.ogg', 50, 1)
+ update_icon()
/obj/item/ammo_magazine/attack_self(mob/user)
if(!stored_ammo.len)
diff --git a/code/modules/projectiles/ammunition/boxes.dm b/code/modules/projectiles/ammunition/boxes.dm
index fac7b0f9a5..001753e81a 100644
--- a/code/modules/projectiles/ammunition/boxes.dm
+++ b/code/modules/projectiles/ammunition/boxes.dm
@@ -1,17 +1,20 @@
+///////// .357 /////////
+
/obj/item/ammo_magazine/a357
- //name = "ammo box (.357)"
- //desc = "A box of .357 ammo"
- //icon_state = "357"
- name = "speed loader (.357)"
- icon_state = "T38"
+ name = "speedloader (.357)"
+ desc = "A speedloader for .357 revolvers."
+ icon_state = "38"
caliber = "357"
ammo_type = /obj/item/ammo_casing/a357
matter = list(DEFAULT_WALL_MATERIAL = 1260)
- max_ammo = 7
+ max_ammo = 6
multiple_sprites = 1
+///////// .38 /////////
+
/obj/item/ammo_magazine/c38
- name = "speed loader (.38)"
+ name = "speedloader (.38)"
+ desc = "A speedloader for .38 revolvers."
icon_state = "38"
caliber = "38"
matter = list(DEFAULT_WALL_MATERIAL = 360)
@@ -20,11 +23,13 @@
multiple_sprites = 1
/obj/item/ammo_magazine/c38/rubber
- name = "speed loader (.38 rubber)"
+ name = "speedloader (.38 rubber)"
ammo_type = /obj/item/ammo_casing/c38r
+///////// .45 /////////
+
/obj/item/ammo_magazine/c45m
- name = "magazine (.45)"
+ name = "pistol magazine (.45)"
icon_state = "45"
mag_type = MAGAZINE
ammo_type = /obj/item/ammo_casing/c45
@@ -46,17 +51,79 @@
/obj/item/ammo_magazine/c45m/flash
name = "magazine (.45 flash)"
- ammo_type = "/obj/item/ammo_casing/c45f"
+ ammo_type = /obj/item/ammo_casing/c45f
+
+/obj/item/ammo_magazine/c45uzi
+ name = "stick magazine (.45)"
+ icon_state = "uzi45"
+ mag_type = MAGAZINE
+ ammo_type = /obj/item/ammo_casing/c45
+ matter = list(DEFAULT_WALL_MATERIAL = 1200)
+ caliber = ".45"
+ max_ammo = 16
+ multiple_sprites = 1
+
+/obj/item/ammo_magazine/c45uzi/empty
+ initial_ammo = 0
+
+/obj/item/ammo_magazine/tommymag
+ name = "tommygun magazine (.45)"
+ icon_state = "tommy-mag"
+ mag_type = MAGAZINE
+ ammo_type = /obj/item/ammo_casing/c45
+ matter = list(DEFAULT_WALL_MATERIAL = 1500)
+ caliber = ".45"
+ max_ammo = 20
+
+/obj/item/ammo_magazine/tommymag/empty
+ initial_ammo = 0
+
+/obj/item/ammo_magazine/tommydrum
+ name = "tommygun drum magazine (.45)"
+ icon_state = "tommy-drum"
+ w_class = 3 // Bulky ammo doesn't fit in your pockets!
+ mag_type = MAGAZINE
+ ammo_type = /obj/item/ammo_casing/c45
+ matter = list(DEFAULT_WALL_MATERIAL = 3750)
+ caliber = ".45"
+ max_ammo = 50
+
+/obj/item/ammo_magazine/tommydrum/empty
+ initial_ammo = 0
+
+/obj/item/ammo_magazine/clip/c45
+ name = "ammo clip (.45)"
+ icon_state = "clip_pistol"
+ desc = "A stripper clip for reloading .45 rounds into magazines."
+ caliber = ".45"
+ ammo_type = /obj/item/ammo_casing/c45
+ matter = list(DEFAULT_WALL_MATERIAL = 675) // metal costs very roughly based around one .45 casing = 75 metal
+ max_ammo = 9
+ multiple_sprites = 1
+
+/obj/item/ammo_magazine/clip/c45/rubber
+ name = "ammo clip (.45 rubber)"
+ ammo_type = /obj/item/ammo_casing/c45r
+
+/obj/item/ammo_magazine/clip/c45/practice
+ name = "ammo clip (.45 practice)"
+ ammo_type = /obj/item/ammo_casing/c45p
+
+/obj/item/ammo_magazine/clip/c45/flash
+ name = "ammo clip (.45 flash)"
+ ammo_type = /obj/item/ammo_casing/c45f
+
+///////// 9mm /////////
/obj/item/ammo_magazine/mc9mm
name = "magazine (9mm)"
icon_state = "9x19p"
origin_tech = list(TECH_COMBAT = 2)
mag_type = MAGAZINE
- matter = list(DEFAULT_WALL_MATERIAL = 600)
+ matter = list(DEFAULT_WALL_MATERIAL = 480)
caliber = "9mm"
ammo_type = /obj/item/ammo_casing/c9mm
- max_ammo = 10
+ max_ammo = 8
multiple_sprites = 1
/obj/item/ammo_magazine/mc9mm/empty
@@ -65,17 +132,13 @@
/obj/item/ammo_magazine/mc9mm/flash
ammo_type = /obj/item/ammo_casing/c9mmf
-/obj/item/ammo_magazine/c9mm
- name = "ammunition Box (9mm)"
- icon_state = "9mm"
- origin_tech = list(TECH_COMBAT = 2)
- matter = list(DEFAULT_WALL_MATERIAL = 1800)
- caliber = "9mm"
- ammo_type = /obj/item/ammo_casing/c9mm
- max_ammo = 30
+/obj/item/ammo_magazine/mc9mm/rubber
+ name = "magazine (9mm rubber)"
+ ammo_type = /obj/item/ammo_casing/c9mmr
-/obj/item/ammo_magazine/c9mm/empty
- initial_ammo = 0
+/obj/item/ammo_magazine/mc9mm/practice
+ name = "magazine (9mm practice)"
+ ammo_type = /obj/item/ammo_casing/c9mmp
/obj/item/ammo_magazine/mc9mmt
name = "top mounted magazine (9mm)"
@@ -94,22 +157,85 @@
name = "top mounted magazine (9mm rubber)"
ammo_type = /obj/item/ammo_casing/c9mmr
+/obj/item/ammo_magazine/mc9mmt/flash
+ name = "top mounted magazine (9mm flash)"
+ ammo_type = /obj/item/ammo_casing/c9mmf
+
/obj/item/ammo_magazine/mc9mmt/practice
name = "top mounted magazine (9mm practice)"
ammo_type = /obj/item/ammo_casing/c9mmp
-/obj/item/ammo_magazine/c45
- name = "ammunition Box (.45)"
+/obj/item/ammo_magazine/p90
+ name = "high capacity top mounted magazine (9mm armor-piercing)"
+ icon_state = "p90"
+ mag_type = MAGAZINE
+ ammo_type = /obj/item/ammo_casing/c9mm/ap
+ matter = list(DEFAULT_WALL_MATERIAL = 3000)
+ caliber = "9mm"
+ max_ammo = 50
+ multiple_sprites = 1
+
+/obj/item/ammo_magazine/p90/empty
+ initial_ammo = 0
+
+/obj/item/ammo_magazine/clip/c9mm
+ name = "ammo clip (9mm)"
+ icon_state = "clip_pistol"
+ desc = "A stripper clip for reloading 9mm rounds into magazines."
+ caliber = "9mm"
+ ammo_type = /obj/item/ammo_casing/c9mm
+ matter = list(DEFAULT_WALL_MATERIAL = 540) // metal costs are very roughly based around one 9mm casing = 60 metal
+ max_ammo = 9
+ multiple_sprites = 1
+
+/obj/item/ammo_magazine/clip/c9mm/rubber
+ name = "ammo clip (.45 rubber)"
+ ammo_type = /obj/item/ammo_casing/c9mmr
+
+/obj/item/ammo_magazine/clip/c9mm/practice
+ name = "ammo clip (.45 practice)"
+ ammo_type = /obj/item/ammo_casing/c9mmp
+
+/obj/item/ammo_magazine/clip/c9mm/flash
+ name = "ammo clip (.45 flash)"
+ ammo_type = /obj/item/ammo_casing/c9mmf
+
+/obj/item/ammo_magazine/c9mm // Made by RnD for Prototype SMG and should probably be removed because why does it require DIAMONDS to make bullets?
+ name = "ammunition Box (9mm)"
icon_state = "9mm"
origin_tech = list(TECH_COMBAT = 2)
- caliber = ".45"
- matter = list(DEFAULT_WALL_MATERIAL = 2250)
- ammo_type = /obj/item/ammo_casing/c45
+ matter = list(DEFAULT_WALL_MATERIAL = 1800)
+ caliber = "9mm"
+ ammo_type = /obj/item/ammo_casing/c9mm
max_ammo = 30
/obj/item/ammo_magazine/c9mm/empty
initial_ammo = 0
+///////// 5mm /////////
+/*
+/obj/item/ammo_magazine/c5mm
+ name = "magazine (5mm)"
+ icon_state = "fiveseven"
+ mag_type = MAGAZINE
+ ammo_type = /obj/item/ammo_casing/c5mm
+ matter = list(DEFAULT_WALL_MATERIAL = 1200)
+ caliber = "5mm"
+ max_ammo = 20
+ //multiple_sprites = 1
+
+/obj/item/ammo_magazine/clip/c5mm
+ name = "ammo clip (5mm)"
+ icon_state = "clip_pistol"
+ desc = "A stripper clip for reloading 5mm rounds into magazines."
+ caliber = "5mm"
+ ammo_type = /obj/item/ammo_casing/c5mm
+ matter = list(DEFAULT_WALL_MATERIAL = 540) // metal costs are very roughly based around one 5mm casing = 60 metal
+ max_ammo = 9
+ multiple_sprites = 1
+*/
+///////// 10mm /////////
+
/obj/item/ammo_magazine/a10mm
name = "magazine (10mm)"
icon_state = "12mm"
@@ -124,6 +250,18 @@
/obj/item/ammo_magazine/a10mm/empty
initial_ammo = 0
+/obj/item/ammo_magazine/clip/a10mm
+ name = "ammo clip (10mm)"
+ icon_state = "clip_pistol"
+ desc = "A stripper clip for reloading 5mm rounds into magazines."
+ caliber = "10mm"
+ ammo_type = /obj/item/ammo_casing/a10mm
+ matter = list(DEFAULT_WALL_MATERIAL = 675) // metal costs are very roughly based around one 10mm casing = 75 metal
+ max_ammo = 9
+ multiple_sprites = 1
+
+///////// 5.56mm /////////
+
/obj/item/ammo_magazine/a556
name = "magazine (5.56mm)"
icon_state = "5.56"
@@ -142,8 +280,53 @@
name = "magazine (5.56mm practice)"
ammo_type = /obj/item/ammo_casing/a556p
+/obj/item/ammo_magazine/a556/ap
+ name = "magazine (5.56mm armor-piercing)"
+ ammo_type = /obj/item/ammo_casing/a556/ap
+
+/obj/item/ammo_magazine/a556m
+ name = "20rnd magazine (5.56mm)"
+ icon_state = "5.56mid"
+ origin_tech = list(TECH_COMBAT = 2)
+ mag_type = MAGAZINE
+ caliber = "a556"
+ matter = list(DEFAULT_WALL_MATERIAL = 3600)
+ ammo_type = /obj/item/ammo_casing/a556
+ max_ammo = 20
+ multiple_sprites = 1
+
+/obj/item/ammo_magazine/a556m/empty
+ initial_ammo = 0
+
+/obj/item/ammo_magazine/a556m/ap
+ name = "20rnd magazine (5.56mm armor-piercing)"
+ ammo_type = /obj/item/ammo_casing/a556/ap
+
+/obj/item/ammo_magazine/a556m/practice
+ name = "20rnd magazine (5.56mm practice)"
+ ammo_type = /obj/item/ammo_casing/a556p
+
+/obj/item/ammo_magazine/clip/a556
+ name = "ammo clip (5.56mm)"
+ icon_state = "clip_rifle"
+ caliber = "a556"
+ ammo_type = /obj/item/ammo_casing/a556
+ matter = list(DEFAULT_WALL_MATERIAL = 450) // metal costs are very roughly based around one 10mm casing = 180 metal
+ max_ammo = 5
+ multiple_sprites = 1
+
+/obj/item/ammo_magazine/clip/a556/ap
+ name = "rifle clip (5.56mm armor-piercing)"
+ ammo_type = /obj/item/ammo_casing/a556/ap
+
+/obj/item/ammo_magazine/clip/a556/practice
+ name = "rifle clip (5.56mm practice)"
+ ammo_type = /obj/item/ammo_casing/a556
+
+///////// .50 AE /////////
+
/obj/item/ammo_magazine/a50
- name = "magazine (.50)"
+ name = "magazine (.50 AE)"
icon_state = "50ae"
origin_tech = list(TECH_COMBAT = 2)
mag_type = MAGAZINE
@@ -156,17 +339,17 @@
/obj/item/ammo_magazine/a50/empty
initial_ammo = 0
-/obj/item/ammo_magazine/a75
- name = "ammo magazine (20mm)"
- icon_state = "75"
- mag_type = MAGAZINE
- caliber = "75"
- ammo_type = /obj/item/ammo_casing/a75
+/obj/item/ammo_magazine/clip/a50
+ name = "ammo clip (.50 AE)"
+ icon_state = "clip_pistol"
+ desc = "A stripper clip for reloading .50 Action Express rounds into magazines."
+ caliber = ".50"
+ ammo_type = /obj/item/ammo_casing/a50
+ matter = list(DEFAULT_WALL_MATERIAL = 1620) // metal costs are very roughly based around one .50 casing = 180 metal
+ max_ammo = 9
multiple_sprites = 1
- max_ammo = 4
-/obj/item/ammo_magazine/a75/empty
- initial_ammo = 0
+///////// 7.62mm /////////
/obj/item/ammo_magazine/a762
name = "magazine box (7.62mm)"
@@ -174,11 +357,16 @@
origin_tech = list(TECH_COMBAT = 2)
mag_type = MAGAZINE
caliber = "a762"
- matter = list(DEFAULT_WALL_MATERIAL = 4500)
+ matter = list(DEFAULT_WALL_MATERIAL = 10000)
ammo_type = /obj/item/ammo_casing/a762
+ w_class = 3 // This should NOT fit in your pocket!!
max_ammo = 50
multiple_sprites = 1
+/obj/item/ammo_magazine/a762/ap
+ name = "magazine box (7.62mm armor-piercing)"
+ ammo_type = /obj/item/ammo_casing/a762/ap
+
/obj/item/ammo_magazine/a762/empty
initial_ammo = 0
@@ -187,23 +375,57 @@
icon_state = "c762"
mag_type = MAGAZINE
caliber = "a762"
- matter = list(DEFAULT_WALL_MATERIAL = 1800)
+ matter = list(DEFAULT_WALL_MATERIAL = 4000)
ammo_type = /obj/item/ammo_casing/a762
max_ammo = 20
multiple_sprites = 1
-/obj/item/ammo_magazine/caps
- name = "speed loader (caps)"
- icon_state = "T38"
- caliber = "caps"
- color = "#FF0000"
- ammo_type = /obj/item/ammo_casing/cap
- matter = list(DEFAULT_WALL_MATERIAL = 600)
- max_ammo = 7
+/obj/item/ammo_magazine/c762/ap
+ name = "magazine (7.62mm armor-piercing)"
+ ammo_type = /obj/item/ammo_casing/a762/ap
+
+/obj/item/ammo_magazine/c762/empty
+ initial_ammo = 0
+
+/obj/item/ammo_magazine/s762 // 's' for small!
+ name = "magazine (7.62mm)"
+ icon_state = "SVD"
+ mag_type = MAGAZINE
+ caliber = "a762"
+ matter = list(DEFAULT_WALL_MATERIAL = 2000)
+ ammo_type = /obj/item/ammo_casing/a762
+ max_ammo = 10
multiple_sprites = 1
+
+/obj/item/ammo_magazine/s762/empty
+ initial_ammo = 0
+
+/obj/item/ammo_magazine/s762/ap
+ name = "magazine (7.62mm armor-piercing)"
+ ammo_type = /obj/item/ammo_casing/a762/ap
+
+/obj/item/ammo_magazine/clip/a762
+ name = "ammo clip (7.62mm)"
+ icon_state = "clip_rifle"
+ caliber = "a762"
+ ammo_type = /obj/item/ammo_casing/a762
+ matter = list(DEFAULT_WALL_MATERIAL = 1000) // metal costs are very roughly based around one 7.62 casing = 200 metal
+ max_ammo = 5
+ multiple_sprites = 1
+
+/obj/item/ammo_magazine/clip/a762/ap
+ name = "rifle clip (7.62mm armor-piercing)"
+ ammo_type = /obj/item/ammo_casing/a762/ap
+
+/obj/item/ammo_magazine/clip/a762/practice
+ name = "rifle clip (7.62mm practice)"
+ ammo_type = /obj/item/ammo_casing/a762p
+
+///////// 12g /////////
+
/obj/item/ammo_magazine/g12
name = "magazine (12 gauge)"
- icon_state = "g12"
+ icon_state = "12g"
mag_type = MAGAZINE
caliber = "shotgun"
matter = list(DEFAULT_WALL_MATERIAL = 2200)
@@ -224,4 +446,30 @@
ammo_type = /obj/item/ammo_casing/shotgun/flash
/obj/item/ammo_magazine/g12/empty
- initial_ammo = 0
\ No newline at end of file
+ initial_ammo = 0
+
+///////// .75 Gyrojet /////////
+
+/obj/item/ammo_magazine/a75
+ name = "ammo magazine (.75 Gyrojet)"
+ icon_state = "75"
+ mag_type = MAGAZINE
+ caliber = "75"
+ ammo_type = /obj/item/ammo_casing/a75
+ multiple_sprites = 1
+ max_ammo = 4
+
+/obj/item/ammo_magazine/a75/empty
+ initial_ammo = 0
+
+///////// Misc. /////////
+
+/obj/item/ammo_magazine/caps
+ name = "speedloader (caps)"
+ icon_state = "T38"
+ caliber = "caps"
+ color = "#FF0000"
+ ammo_type = /obj/item/ammo_casing/cap
+ matter = list(DEFAULT_WALL_MATERIAL = 600)
+ max_ammo = 7
+ 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 52c44af1d1..d10280854f 100644
--- a/code/modules/projectiles/ammunition/bullets.dm
+++ b/code/modules/projectiles/ammunition/bullets.dm
@@ -9,7 +9,7 @@
projectile_type = /obj/item/projectile/bullet/pistol/strong
/obj/item/ammo_casing/a75
- desc = "A 20mm bullet casing."
+ desc = "A .75 gyrojet rocket sheathe."
caliber = "75"
projectile_type = /obj/item/projectile/bullet/gyro
@@ -21,6 +21,7 @@
/obj/item/ammo_casing/c38r
desc = "A .38 rubber bullet casing."
caliber = "38"
+ icon_state = "r-casing"
projectile_type = /obj/item/projectile/bullet/pistol/rubber
/obj/item/ammo_casing/c9mm
@@ -28,21 +29,34 @@
caliber = "9mm"
projectile_type = /obj/item/projectile/bullet/pistol
+/obj/item/ammo_casing/c9mm/ap
+ desc = "A 9mm armor-piercing bullet casing."
+ projectile_type = /obj/item/projectile/bullet/pistol/ap
+
/obj/item/ammo_casing/c9mmf
desc = "A 9mm flash shell casing."
caliber = "9mm"
+ icon_state = "r-casing"
projectile_type = /obj/item/projectile/energy/flash
/obj/item/ammo_casing/c9mmr
desc = "A 9mm rubber bullet casing."
caliber = "9mm"
+ icon_state = "r-casing"
projectile_type = /obj/item/projectile/bullet/pistol/rubber
/obj/item/ammo_casing/c9mmp
desc = "A 9mm practice bullet casing."
caliber = "9mm"
+ icon_state = "r-casing"
projectile_type = /obj/item/projectile/bullet/pistol/practice
+/*
+/obj/item/ammo_casing/c5mm
+ desc = "A 5mm bullet casing."
+ caliber = "5mm"
+ projectile_type = /obj/item/projectile/bullet/pistol/ap
+*/
/obj/item/ammo_casing/c45
desc = "A .45 bullet casing."
@@ -52,16 +66,19 @@
/obj/item/ammo_casing/c45p
desc = "A .45 practice bullet casing."
caliber = ".45"
+ icon_state = "r-casing"
projectile_type = /obj/item/projectile/bullet/pistol/practice
/obj/item/ammo_casing/c45r
desc = "A .45 rubber bullet casing."
caliber = ".45"
+ icon_state = "r-casing"
projectile_type = /obj/item/projectile/bullet/pistol/rubber
/obj/item/ammo_casing/c45f
desc = "A .45 flash shell casing."
caliber = ".45"
+ icon_state = "r-casing"
projectile_type = /obj/item/projectile/energy/flash
/obj/item/ammo_casing/a10mm
@@ -112,7 +129,6 @@
name = "stun shell"
desc = "A 12 gauge taser cartridge."
icon_state = "stunshell"
- spent_icon = "stunshell-spent"
projectile_type = /obj/item/projectile/energy/electrode/stunshot
matter = list(DEFAULT_WALL_MATERIAL = 360, "glass" = 720)
@@ -131,13 +147,27 @@
/obj/item/ammo_casing/a762
desc = "A 7.62mm bullet casing."
caliber = "a762"
+ icon_state = "rifle-casing"
projectile_type = /obj/item/projectile/bullet/rifle/a762
+/obj/item/ammo_casing/a762/ap
+ desc = "A 7.62mm armor-piercing bullet casing."
+ projectile_type = /obj/item/projectile/bullet/rifle/a762/ap
+
+/obj/item/ammo_casing/a762p
+ desc = "A 7.62mm practice bullet casing."
+ caliber = "a762"
+ icon_state = "rifle-casing" // Need to make an icon for these
+ projectile_type = /obj/item/projectile/bullet/rifle/practice
+
+/obj/item/ammo_casing/a762/blank
+ desc = "A blank 7.62mm bullet casing."
+ projectile_type = /obj/item/projectile/bullet/blank
+ matter = list(DEFAULT_WALL_MATERIAL = 90)
+
/obj/item/ammo_casing/a145
- name = "shell casing"
desc = "A 14.5mm shell."
icon_state = "lcasing"
- spent_icon = "lcasing-spent"
caliber = "14.5mm"
projectile_type = /obj/item/projectile/bullet/rifle/a145
matter = list(DEFAULT_WALL_MATERIAL = 1250)
@@ -145,12 +175,18 @@
/obj/item/ammo_casing/a556
desc = "A 5.56mm bullet casing."
caliber = "a556"
+ icon_state = "rifle-casing"
projectile_type = /obj/item/projectile/bullet/rifle/a556
+/obj/item/ammo_casing/a556/ap
+ desc = "A 5.56mm armor-piercing bullet casing."
+ projectile_type = /obj/item/projectile/bullet/rifle/a556/ap
+
/obj/item/ammo_casing/a556p
desc = "A 5.56mm practice bullet casing."
caliber = "a556"
- projectile_type = /obj/item/projectile/bullet/rifle/a556/practice
+ icon_state = "rifle-casing" // Need to make an icon for these
+ projectile_type = /obj/item/projectile/bullet/rifle/practice
/obj/item/ammo_casing/rocket
name = "rocket shell"
@@ -163,5 +199,11 @@
name = "cap"
desc = "A cap for children toys."
caliber = "caps"
+ icon_state = "r-casing"
color = "#FF0000"
projectile_type = /obj/item/projectile/bullet/pistol/cap
+
+/obj/item/ammo_casing/spent // For simple hostile mobs only, so they don't cough up usable bullets when firing. This is for literally nothing else.
+ icon_state = "s-casing-spent"
+ BB = null
+ projectile_type = null
\ No newline at end of file
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index 3e801be0d1..2db78ccd86 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -66,6 +66,7 @@
var/mode_name = null
var/requires_two_hands
var/wielded_icon = "gun_wielded"
+ var/one_handed_penalty = 0 // Penalty applied if someone fires a two-handed gun with one hand.
var/next_fire_time = 0
@@ -81,6 +82,13 @@
var/tmp/told_cant_shoot = 0 //So that it doesn't spam them with the fact they cannot hit them.
var/tmp/lock_time = -100
+ var/dna_lock = 0 //whether or not the gun is locked to dna
+ var/list/stored_dna = list() //list of the dna stored in the gun, used to allow users to use it or not
+ var/safety_level = 0 //either 0 or 1, at 0 the game buzzes and tells the user they can't use it, at 1 it self destructs after 10 seconds
+ var/controller_dna = null //The dna of the person who is the primary controller of the gun
+ var/controller_lock = 0 //whether or not the gun is locked by the primar controller, 0 or 1, at 1 it is locked and does not allow
+ var/exploding = 0
+
/obj/item/weapon/gun/New()
..()
for(var/i in 1 to firemodes.len)
@@ -89,11 +97,16 @@
if(isnull(scoped_accuracy))
scoped_accuracy = accuracy
+ if(!dna_lock)
+ verbs -= /obj/item/weapon/gun/verb/remove_dna
+ verbs -= /obj/item/weapon/gun/verb/give_dna
+ verbs -= /obj/item/weapon/gun/verb/allow_dna
+
/obj/item/weapon/gun/update_held_icon()
if(requires_two_hands)
var/mob/living/M = loc
if(istype(M))
- if((M.l_hand == src && !M.r_hand) || (M.r_hand == src && !M.l_hand))
+ if(M.item_is_in_hands(src) && !M.hands_are_full())
name = "[initial(name)] (wielded)"
item_state = wielded_icon
else
@@ -113,6 +126,20 @@
return 0
var/mob/living/M = user
+ if(dna_lock && stored_dna)
+ if(!authorized_user(user))
+ if(safety_level == 0)
+ M << "\The [src] buzzes in dissapoint and displays an invalid DNA symbol. "
+ return 0
+ if(!exploding)
+ if(safety_level == 1)
+ M << "\The [src] hisses in dissapointment. "
+ visible_message("\The [src] announces, \"Self-destruct occurring in ten seconds.\" ", "\The [src] announces, \"Self-destruct occurring in ten seconds.\" ")
+ sleep(100)
+ explosion(src, -1, 0, 2, 3, 0)
+ exploding = 1
+ qdel(src)
+ return 0
if(HULK in M.mutations)
M << "Your fingers are much too large for the trigger guard! "
return 0
@@ -145,7 +172,7 @@
PreFire(A,user,params) //They're using the new gun system, locate what they're aiming at.
return
- if(user && user.a_intent == I_HELP) //regardless of what happens, refuse to shoot if help intent is on
+ if(user && user.a_intent == I_HELP && user.is_preference_enabled(/datum/client_preference/safefiring)) //regardless of what happens, refuse to shoot if help intent is on
user << "You refrain from firing your [src] as your intent is set to help. "
else
Fire(A,user,params) //Otherwise, fire normally.
@@ -163,6 +190,8 @@
add_fingerprint(user)
+ user.break_cloak()
+
if(!special_check(user))
return
@@ -179,9 +208,9 @@
var/held_acc_mod = 0
var/held_disp_mod = 0
if(requires_two_hands)
- if((user.l_hand == src && user.r_hand) || (user.r_hand == src && user.l_hand))
- held_acc_mod = -3
- held_disp_mod = 3
+ if(user.item_is_in_hands(src) && user.hands_are_full())
+ held_acc_mod = held_acc_mod - one_handed_penalty
+ held_disp_mod = held_disp_mod - round(one_handed_penalty / 2)
//actually attempt to shoot
var/turf/targloc = get_turf(target) //cache this in case target gets deleted during shooting, e.g. if it was a securitron that got destroyed.
@@ -209,10 +238,16 @@
target = targloc
pointblank = 0
+ // We do this down here, so we don't get the message if we fire an empty gun.
+ if(requires_two_hands)
+ if(user.item_is_in_hands(src) && user.hands_are_full())
+ if(one_handed_penalty >= 2)
+ user << "You struggle to keep \the [src] pointed at the correct position with just one hand! "
+
admin_attack_log(usr, attacker_message="Fired [src]", admin_message="fired a gun ([src]) (MODE: [src.mode_name]) [reflex ? "by reflex" : "manually"].")
//update timing
- user.setClickCooldown(4)
+ user.setClickCooldown(DEFAULT_QUICK_COOLDOWN)
user.setMoveCooldown(move_delay)
next_fire_time = world.time + fire_delay
@@ -417,4 +452,78 @@
return new_mode
/obj/item/weapon/gun/attack_self(mob/user)
- switch_firemodes(user)
\ No newline at end of file
+ switch_firemodes(user)
+
+/obj/item/weapon/gun/proc/get_dna(mob/user)
+ var/mob/living/M = user
+ if(!controller_lock)
+
+ if(!stored_dna && !(M.dna in stored_dna))
+ M << "\The [src] buzzes and displays a symbol showing the gun already contains your DNA. "
+ return 0
+ else
+ stored_dna += M.dna
+ M << "\The [src] pings and a needle flicks out from the grip, taking a DNA sample from you. "
+ if(!controller_dna)
+ controller_dna = M.dna
+ M << "\The [src] processes the dna sample and pings, acknowledging you as the primary controller. "
+ return 1
+ else
+ M << "\The [src] buzzes and displays a locked symbol. It is not allowing DNA samples at this time. "
+ return 0
+
+/obj/item/weapon/gun/verb/give_dna()
+ set name = "Give DNA"
+ set category = "Object"
+ set src in usr
+ get_dna(usr)
+
+/obj/item/weapon/gun/proc/clear_dna(mob/user)
+ var/mob/living/M = user
+ if(!controller_lock)
+ if(!authorized_user(M))
+ M << "\The [src] buzzes and displays an invalid user symbol. "
+ return 0
+ else
+ stored_dna -= user.dna
+ M << "\The [src] beeps and clears the DNA it has stored. "
+ if(M.dna == controller_dna)
+ controller_dna = null
+ M << "\The [src] beeps and removes you as the primary controller. "
+ if(controller_lock)
+ controller_lock = 0
+ return 1
+ else
+ M << "\The [src] buzzes and displays a locked symbol. It is not allowing DNA modifcation at this time. "
+ return 0
+
+/obj/item/weapon/gun/verb/remove_dna()
+ set name = "Remove DNA"
+ set category = "Object"
+ set src in usr
+ clear_dna(usr)
+
+/obj/item/weapon/gun/proc/toggledna(mob/user)
+ var/mob/living/M = user
+ if(authorized_user(M) && user.dna == controller_dna)
+ if(!controller_lock)
+ controller_lock = 1
+ M << "\The [src] beeps and displays a locked symbol, informing you it will no longer allow DNA samples. "
+ else
+ controller_lock = 0
+ M << "\The [src] beeps and displays an unlocked symbol, informing you it will now allow DNA samples. "
+ else
+ M << "\The [src] buzzes and displays an invalid user symbol. "
+
+/obj/item/weapon/gun/verb/allow_dna()
+ set name = "Toggle DNA Samples Allowance"
+ set category = "Object"
+ set src in usr
+ toggledna(usr)
+
+/obj/item/weapon/gun/proc/authorized_user(mob/user)
+ if(!stored_dna || !stored_dna.len)
+ return 1
+ if(!(user.dna in stored_dna))
+ return 0
+ return 1
diff --git a/code/modules/projectiles/guns/alien.dm b/code/modules/projectiles/guns/alien.dm
index 665e9342c1..5889b523e1 100644
--- a/code/modules/projectiles/guns/alien.dm
+++ b/code/modules/projectiles/guns/alien.dm
@@ -5,7 +5,7 @@
desc = "A vicious alien projectile weapon. Parts of it quiver gelatinously, as though the thing is insectile and alive."
var/last_regen = 0
- var/spike_gen_time = 100
+ var/spike_gen_time = 150
var/max_spikes = 3
var/spikes = 3
release_force = 30
diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm
index c21fc97bd8..9d0ba4e736 100644
--- a/code/modules/projectiles/guns/energy/laser.dm
+++ b/code/modules/projectiles/guns/energy/laser.dm
@@ -1,6 +1,7 @@
/obj/item/weapon/gun/energy/laser
name = "laser carbine"
- desc = "An Hesphaistos Industries G40E carbine, designed to kill with concentrated energy blasts."
+ desc = "An Hesphaistos Industries G40E carbine, designed to kill with concentrated energy blasts. This varient has the ability to \
+ switch between standard fire and a more efficent but weaker 'suppressive' fire."
icon_state = "laser"
item_state = "laser"
fire_sound = 'sound/weapons/Laser.ogg'
@@ -10,16 +11,29 @@
origin_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 2)
matter = list(DEFAULT_WALL_MATERIAL = 2000)
projectile_type = /obj/item/projectile/beam/midlaser
+// requires_two_hands = 1
+ one_handed_penalty = 2
+
+ firemodes = list(
+ list(mode_name="normal", projectile_type=/obj/item/projectile/beam/midlaser, charge_cost = 200),
+ list(mode_name="suppressive", projectile_type=/obj/item/projectile/beam/weaklaser, charge_cost = 50),
+ )
/obj/item/weapon/gun/energy/laser/mounted
self_recharge = 1
use_external_power = 1
+ requires_two_hands = 0 // Not sure if two-handing gets checked for mounted weapons, but better safe than sorry.
/obj/item/weapon/gun/energy/laser/practice
name = "practice laser carbine"
desc = "A modified version of the HI G40E, this one fires less concentrated energy bolts designed for target practice."
projectile_type = /obj/item/projectile/beam/practice
+ firemodes = list(
+ list(mode_name="normal", projectile_type=/obj/item/projectile/beam/practice, charge_cost = 200),
+ list(mode_name="suppressive", projectile_type=/obj/item/projectile/beam/practice, charge_cost = 50),
+ )
+
obj/item/weapon/gun/energy/retro
name = "retro laser"
icon_state = "retro"
@@ -47,7 +61,8 @@ obj/item/weapon/gun/energy/retro
/obj/item/weapon/gun/energy/lasercannon
name = "laser cannon"
- desc = "With the laser cannon, the lasing medium is enclosed in a tube lined with uranium-235 and subjected to high neutron flux in a nuclear reactor core. This incredible technology may help YOU achieve high excitation rates with small laser volumes!"
+ desc = "With the laser cannon, the lasing medium is enclosed in a tube lined with uranium-235 and subjected to high neutron \
+ flux in a nuclear reactor core. This incredible technology may help YOU achieve high excitation rates with small laser volumes!"
icon_state = "lasercannon"
item_state = null
fire_sound = 'sound/weapons/lasercannonfire.ogg'
@@ -55,33 +70,39 @@ obj/item/weapon/gun/energy/retro
slot_flags = SLOT_BELT|SLOT_BACK
projectile_type = /obj/item/projectile/beam/heavylaser
charge_cost = 400
- max_shots = 5
+ max_shots = 6
fire_delay = 20
+// requires_two_hands = 1
+ one_handed_penalty = 6 // The thing's heavy and huge.
+ accuracy = 2
/obj/item/weapon/gun/energy/lasercannon/mounted
name = "mounted laser cannon"
self_recharge = 1
use_external_power = 1
recharge_time = 10
+ accuracy = 0 // Mounted cannons are just fine the way they are.
+ requires_two_hands = 0 // Not sure if two-handing gets checked for mounted weapons, but better safe than sorry.
/obj/item/weapon/gun/energy/xray
name = "xray laser gun"
- desc = "A high-power laser gun capable of expelling concentrated xray blasts."
+ desc = "A high-power laser gun capable of expelling concentrated xray blasts, which are able to penetrate matter easier than \
+ standard photonic beams, resulting in an effective 'anti-armor' energy weapon."
icon_state = "xray"
item_state = "xray"
- fire_sound = 'sound/weapons/laser3.ogg'
- origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 3, TECH_MAGNET = 2, TECH_ILLEGAL = 2)
+ fire_sound = 'sound/weapons/eluger.ogg'
+ origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 3, TECH_MAGNET = 2)
projectile_type = /obj/item/projectile/beam/xray
charge_cost = 100
- max_shots = 20
- fire_delay = 1
+ max_shots = 12
/obj/item/weapon/gun/energy/sniperrifle
name = "marksman energy rifle"
- desc = "The HI DMR 9E is an older design of Hesphaistos Industries. A designated marksman rifle capable of shooting powerful ionized beams, this is a weapon to kill from a distance."
+ desc = "The HI DMR 9E is an older design of Hesphaistos Industries. A designated marksman rifle capable of shooting powerful \
+ ionized beams, this is a weapon to kill from a distance."
icon_state = "sniper"
- item_state = "laser"
- fire_sound = 'sound/weapons/marauder.ogg'
+ item_state = "laser" // placeholder
+ fire_sound = 'sound/weapons/gauss_shoot.ogg'
origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 5, TECH_POWER = 4)
projectile_type = /obj/item/projectile/beam/sniper
slot_flags = SLOT_BACK
@@ -89,9 +110,11 @@ obj/item/weapon/gun/energy/retro
max_shots = 4
fire_delay = 35
force = 10
- w_class = 4
+ w_class = 5 // So it can't fit in a backpack.
accuracy = -3 //shooting at the hip
scoped_accuracy = 0
+// requires_two_hands = 1
+ one_handed_penalty = 4 // The weapon itself is heavy, and the long barrel makes it hard to hold steady with just one hand.
/obj/item/weapon/gun/energy/sniperrifle/verb/scope()
set category = "Object"
diff --git a/code/modules/projectiles/guns/energy/nuclear.dm b/code/modules/projectiles/guns/energy/nuclear.dm
index f106877471..2352cdce28 100644
--- a/code/modules/projectiles/guns/energy/nuclear.dm
+++ b/code/modules/projectiles/guns/energy/nuclear.dm
@@ -5,13 +5,14 @@
item_state = null //so the human update icon uses the icon_state instead.
fire_sound = 'sound/weapons/Taser.ogg'
max_shots = 10
+ fire_delay = 10 // Handguns should be inferior to two-handed weapons.
projectile_type = /obj/item/projectile/beam/stun
origin_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 2)
modifystate = "energystun"
firemodes = list(
- list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun, modifystate="energystun", fire_sound='sound/weapons/Taser.ogg'),
+ list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun/weak, modifystate="energystun", fire_sound='sound/weapons/Taser.ogg'),
list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, modifystate="energykill", fire_sound='sound/weapons/Laser.ogg'),
)
@@ -22,22 +23,25 @@
/obj/item/weapon/gun/energy/gun/burst
- name = "fm-2t"
+ name = "burst laser"
desc = "The FM-2t is a versatile energy based small arm, capable of switching between stun or kill with a three round burst option for both settings."
icon_state = "fm-2tstun100"
item_state = null //so the human update icon uses the icon_state instead.
fire_sound = 'sound/weapons/Taser.ogg'
- max_shots = 12
+ max_shots = 21 //7 trigger pulls
projectile_type = /obj/item/projectile/beam/stun/weak
origin_tech = list(TECH_COMBAT = 4, TECH_MAGNET = 2, TECH_ILLEGAL = 3)
modifystate = "fm-2tstun"
+// requires_two_hands = 1
+ one_handed_penalty = 2
+
firemodes = list(
- list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun/weak, modifystate="fm-2tstun", fire_sound='sound/weapons/Taser.ogg'),
- list(mode_name="stun 3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0), projectile_type=/obj/item/projectile/beam/stun, modifystate="fm-2tstun", fire_sound='sound/weapons/Taser.ogg'),
- list(mode_name="lethal", projectile_type=/obj/item/projectile/beam/weaklaser, modifystate="fm-2tkill", fire_sound='sound/weapons/Laser.ogg'),
- list(mode_name="lethal 3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0), projectile_type=/obj/item/projectile/beam, modifystate="fm-2tkill", fire_sound='sound/weapons/Laser.ogg'),
+ list(mode_name="stun", burst=1, projectile_type=/obj/item/projectile/beam/stun/weak, modifystate="fm-2tstun", fire_sound='sound/weapons/Taser.ogg'),
+ list(mode_name="stun burst", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0), projectile_type=/obj/item/projectile/beam/stun/weak, modifystate="fm-2tstun", fire_sound='sound/weapons/Taser.ogg'),
+ list(mode_name="lethal", burst=1, projectile_type=/obj/item/projectile/beam/weaklaser, modifystate="fm-2tkill", fire_sound='sound/weapons/Laser.ogg'),
+ list(mode_name="lethal burst", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0), projectile_type=/obj/item/projectile/beam/weaklaser, modifystate="fm-2tkill", fire_sound='sound/weapons/Laser.ogg'),
)
/obj/item/weapon/gun/energy/gun/nuclear
@@ -50,6 +54,9 @@
self_recharge = 1
modifystate = null
+// requires_two_hands = 1
+ one_handed_penalty = 1 // It's rather bulky, so holding it in one hand is a little harder than with two, however it's not 'required'.
+
firemodes = list(
list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun, fire_sound='sound/weapons/Taser.ogg'),
list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, fire_sound='sound/weapons/Laser.ogg'),
diff --git a/code/modules/projectiles/guns/energy/pulse.dm b/code/modules/projectiles/guns/energy/pulse.dm
index 98817fede3..3074638bce 100644
--- a/code/modules/projectiles/guns/energy/pulse.dm
+++ b/code/modules/projectiles/guns/energy/pulse.dm
@@ -7,25 +7,26 @@
force = 10
fire_sound='sound/weapons/Laser.ogg'
projectile_type = /obj/item/projectile/beam
+ charge_cost=100
+ max_shots = 20 // This is cut in half by "DESTROY" mode.
sel_mode = 2
- max_shots = 10
-
+
firemodes = list(
- list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun, fire_sound='sound/weapons/Taser.ogg', fire_delay=null, charge_cost=null),
- list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, fire_sound='sound/weapons/Laser.ogg', fire_delay=null, charge_cost=null),
- list(mode_name="DESTROY", projectile_type=/obj/item/projectile/beam/pulse, fire_sound='sound/weapons/pulse.ogg', fire_delay=25, charge_cost=400),
+ list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun, fire_sound='sound/weapons/Taser.ogg', fire_delay=null, charge_cost=100),
+ list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, fire_sound='sound/weapons/Laser.ogg', fire_delay=null, charge_cost=100),
+ list(mode_name="DESTROY", projectile_type=/obj/item/projectile/beam/pulse, fire_sound='sound/weapons/gauss_shoot.ogg', fire_delay=null, charge_cost=200),
)
/obj/item/weapon/gun/energy/pulse_rifle/mounted
self_recharge = 1
- use_external_power = 1
+ use_external_power = 1
/obj/item/weapon/gun/energy/pulse_rifle/destroyer
name = "pulse destroyer"
desc = "A heavy-duty, pulse-based energy weapon. Because of its complexity and cost, it is rarely seen in use except by specialists."
cell_type = /obj/item/weapon/cell/super
fire_delay = 25
- fire_sound='sound/weapons/pulse.ogg'
+ fire_sound='sound/weapons/gauss_shoot.ogg'
projectile_type=/obj/item/projectile/beam/pulse
charge_cost=400
diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm
index fab9a08b7a..ef3a74666e 100644
--- a/code/modules/projectiles/guns/energy/special.dm
+++ b/code/modules/projectiles/guns/energy/special.dm
@@ -19,7 +19,7 @@
/obj/item/weapon/gun/energy/ionrifle/update_icon()
..()
if(power_supply.charge < charge_cost)
- item_state = "ionrifle-empty"
+ item_state = "ionrifle0"
else
item_state = initial(item_state)
diff --git a/code/modules/projectiles/guns/energy/stun.dm b/code/modules/projectiles/guns/energy/stun.dm
index 72392da29a..20fa18b09e 100644
--- a/code/modules/projectiles/guns/energy/stun.dm
+++ b/code/modules/projectiles/guns/energy/stun.dm
@@ -1,10 +1,10 @@
/obj/item/weapon/gun/energy/taser
name = "taser gun"
- desc = "The NT Mk30 NL is a small, low capacity gun used for non-lethal takedowns. Produced by NT, it's actually a licensed version of a W-T design."
+ desc = "The NT Mk30 NL is a small gun used for non-lethal takedowns. Produced by NT, it's actually a licensed version of a W-T design."
icon_state = "taser"
item_state = null //so the human update icon uses the icon_state instead.
fire_sound = 'sound/weapons/Taser.ogg'
- max_shots = 5
+ max_shots = 10
projectile_type = /obj/item/projectile/beam/stun
/obj/item/weapon/gun/energy/taser/mounted
@@ -15,7 +15,7 @@
/obj/item/weapon/gun/energy/taser/mounted/cyborg
name = "taser gun"
max_shots = 6
- recharge_time = 10 //Time it takes for shots to recharge (in ticks)
+ recharge_time = 7 //Time it takes for shots to recharge (in ticks)
/obj/item/weapon/gun/energy/stunrevolver
@@ -25,7 +25,7 @@
item_state = "stunrevolver"
fire_sound = 'sound/weapons/Gunshot.ogg'
origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_POWER = 2)
- projectile_type = /obj/item/projectile/energy/electrode
+ projectile_type = /obj/item/projectile/energy/electrode/strong
max_shots = 8
diff --git a/code/modules/projectiles/guns/launcher/grenade_launcher.dm b/code/modules/projectiles/guns/launcher/grenade_launcher.dm
index 547dc702cf..107330c13d 100644
--- a/code/modules/projectiles/guns/launcher/grenade_launcher.dm
+++ b/code/modules/projectiles/guns/launcher/grenade_launcher.dm
@@ -60,6 +60,7 @@
grenades.len--
user.put_in_hands(G)
user.visible_message("[user] removes \a [G] from [src].", "You remove \a [G] from [src]. ")
+ playsound(src.loc, 'sound/weapons/empty.ogg', 50, 1)
else
user << "[src] is empty. "
@@ -117,6 +118,7 @@
if(chambered)
user.put_in_hands(chambered)
user.visible_message("[user] removes \a [chambered] from [src].", "You remove \a [chambered] from [src]. ")
+ playsound(src.loc, 'sound/weapons/empty.ogg', 50, 1)
chambered = null
else
user << "[src] is empty. "
\ No newline at end of file
diff --git a/code/modules/projectiles/guns/launcher/pneumatic.dm b/code/modules/projectiles/guns/launcher/pneumatic.dm
index b20e9521e6..5463fe26f0 100644
--- a/code/modules/projectiles/guns/launcher/pneumatic.dm
+++ b/code/modules/projectiles/guns/launcher/pneumatic.dm
@@ -54,6 +54,7 @@
item_storage.remove_from_storage(removing, src.loc)
user.put_in_hands(removing)
user << "You remove [removing] from the hopper."
+ playsound(src.loc, 'sound/weapons/empty.ogg', 50, 1)
else
user << "There is nothing to remove in \the [src]."
diff --git a/code/modules/projectiles/guns/launcher/rocket.dm b/code/modules/projectiles/guns/launcher/rocket.dm
index 12338ee5c3..300121aef7 100644
--- a/code/modules/projectiles/guns/launcher/rocket.dm
+++ b/code/modules/projectiles/guns/launcher/rocket.dm
@@ -10,8 +10,8 @@
flags = CONDUCT
slot_flags = 0
origin_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 5)
- fire_sound = 'sound/effects/bang.ogg'
-
+ fire_sound = 'sound/weapons/rpg.ogg'
+
release_force = 15
throw_distance = 30
var/max_rockets = 1
diff --git a/code/modules/projectiles/guns/launcher/syringe_gun.dm b/code/modules/projectiles/guns/launcher/syringe_gun.dm
index 07cb48d784..3cbbd40f34 100644
--- a/code/modules/projectiles/guns/launcher/syringe_gun.dm
+++ b/code/modules/projectiles/guns/launcher/syringe_gun.dm
@@ -31,6 +31,7 @@
/obj/item/weapon/syringe_cartridge/attack_self(mob/user)
if(syringe)
user << "You remove [syringe] from [src]. "
+ playsound(src.loc, 'sound/weapons/empty.ogg', 50, 1)
user.put_in_hands(syringe)
syringe = null
sharp = initial(sharp)
@@ -114,6 +115,7 @@
darts -= C
user.put_in_hands(C)
user.visible_message("[user] removes \a [C] from [src].", "You remove \a [C] from [src]. ")
+ playsound(src.loc, 'sound/weapons/empty.ogg', 50, 1)
else
..()
diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm
index d032cb3848..bb5168169e 100644
--- a/code/modules/projectiles/guns/projectile.dm
+++ b/code/modules/projectiles/guns/projectile.dm
@@ -24,6 +24,7 @@
//For MAGAZINE guns
var/magazine_type = null //the type of magazine that the gun comes preloaded with
var/obj/item/ammo_magazine/ammo_magazine = null //stored magazine
+ var/allowed_magazines //determines list of which magazines will fit in the gun
var/auto_eject = 0 //if the magazine should automatically eject itself when empty.
var/auto_eject_sound = null
//TODO generalize ammo icon states for guns
@@ -96,9 +97,9 @@
/obj/item/weapon/gun/projectile/proc/load_ammo(var/obj/item/A, mob/user)
if(istype(A, /obj/item/ammo_magazine))
var/obj/item/ammo_magazine/AM = A
- if(!(load_method & AM.mag_type) || caliber != AM.caliber)
- return //incompatible
-
+ if(!(load_method & AM.mag_type) || caliber != AM.caliber || allowed_magazines && !is_type_in_list(A, allowed_magazines))
+ user << "[AM] won't load into [src]! "
+ return
switch(AM.mag_type)
if(MAGAZINE)
if(ammo_magazine)
@@ -167,6 +168,7 @@
loaded.len--
user.put_in_hands(C)
user.visible_message("[user] removes \a [C] from [src].", "You remove \a [C] from [src]. ")
+ playsound(src.loc, 'sound/weapons/empty.ogg', 50, 1)
else
user << "[src] is empty. "
update_icon()
diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm
index 53f77feed2..2ed89336a9 100644
--- a/code/modules/projectiles/guns/projectile/automatic.dm
+++ b/code/modules/projectiles/guns/projectile/automatic.dm
@@ -11,23 +11,16 @@
ammo_type = /obj/item/ammo_casing/c9mm
multi_aim = 1
burst_delay = 2
+
+// requires_two_hands = 1
+ one_handed_penalty = 1
+
firemodes = list(
list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null),
- list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0)),
+ list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0))
// list(mode_name="short bursts", burst=5, fire_delay=null, move_delay=4, burst_accuracy=list(0,-1,-1,-2,-2), dispersion=list(0.6, 1.0, 1.0, 1.0, 1.2)),
)
-/obj/item/weapon/gun/projectile/automatic/mini_uzi
- name = "\improper Uzi"
- desc = "The UZI is a lightweight, fast firing gun. For when you want someone dead. Uses .45 rounds."
- icon_state = "mini-uzi"
- w_class = 3
- load_method = SPEEDLOADER //yup. until someone sprites a magazine for it.
- max_shells = 15
- caliber = ".45"
- origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2, TECH_ILLEGAL = 8)
- ammo_type = /obj/item/ammo_casing/c45
-
/obj/item/weapon/gun/projectile/automatic/c20r
name = "submachine gun"
desc = "The C-20r is a lightweight and rapid firing SMG, for when you REALLY need someone dead. Uses 10mm rounds. Has a 'Scarborough Arms - Per falcis, per pravitas' buttstamp."
@@ -41,9 +34,13 @@
fire_sound = 'sound/weapons/Gunshot_light.ogg'
load_method = MAGAZINE
magazine_type = /obj/item/ammo_magazine/a10mm
+ allowed_magazines = list(/obj/item/ammo_magazine/a10mm)
auto_eject = 1
auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg'
+// requires_two_hands = 1
+ one_handed_penalty = 2
+
/obj/item/weapon/gun/projectile/automatic/c20r/update_icon()
..()
if(ammo_magazine)
@@ -64,21 +61,27 @@
slot_flags = SLOT_BACK
load_method = MAGAZINE
magazine_type = /obj/item/ammo_magazine/c762
+ allowed_magazines = list(/obj/item/ammo_magazine/c762, /obj/item/ammo_magazine/s762)
+
+ one_handed_penalty = 4
firemodes = list(
list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null),
- list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=6, burst_accuracy=list(0,-1,-2), dispersion=list(0.0, 0.6, 0.6)),
+ list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=6, burst_accuracy=list(0,-1,-2), dispersion=list(0.0, 0.6, 0.6))
// list(mode_name="short bursts", burst=5, fire_delay=null, move_delay=6, burst_accuracy=list(0,-1,-2,-2,-3), dispersion=list(0.6, 1.0, 1.0, 1.0, 1.2)),
)
/obj/item/weapon/gun/projectile/automatic/sts35/update_icon(var/ignore_inhands)
..()
- icon_state = (ammo_magazine)? "arifle" : "arifle-empty"
+ if(istype(ammo_magazine,/obj/item/ammo_magazine/s762))
+ icon_state = "arifle-small"
+ else
+ icon_state = (ammo_magazine)? "arifle" : "arifle-empty"
if(!ignore_inhands) update_held_icon()
/obj/item/weapon/gun/projectile/automatic/wt550
name = "machine pistol"
- desc = "The W-T 550 Saber is a cheap self-defense weapon, mass-produced by Ward-Takahashi for paramilitary and private use. Uses 9mm rounds."
+ desc = "The WT550 Saber is a cheap self-defense weapon mass-produced by Ward-Takahashi for paramilitary and private use. Uses 9mm rounds."
icon_state = "wt550"
item_state = "wt550"
w_class = 3
@@ -89,6 +92,7 @@
fire_sound = 'sound/weapons/Gunshot_light.ogg'
load_method = MAGAZINE
magazine_type = /obj/item/ammo_magazine/mc9mmt/rubber
+ allowed_magazines = list(/obj/item/ammo_magazine/mc9mmt)
/obj/item/weapon/gun/projectile/automatic/wt550/update_icon()
..()
@@ -99,22 +103,25 @@
return
/obj/item/weapon/gun/projectile/automatic/z8
- name = "bullpup assault rifle"
- desc = "The Z8 Bulldog is an older model bullpup carbine, made by the now defunct Zendai Foundries. Uses armor piercing 5.56mm rounds. Makes you feel like a space marine when you hold it."
- icon_state = "carbine"
+ name = "designated marksman rifle"
+ desc = "The Z8 Bulldog is an older model designated marksman rifle, made by the now defunct Zendai Foundries. Makes you feel like a space marine when you hold it, even though it can only hold 10 round magazines. Uses 5.56mm rounds and has an under barrel grenade launcher."
+ icon_state = "carbine" // This isn't a carbine. :T
item_state = "z8carbine"
w_class = 4
force = 10
caliber = "a556"
origin_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 3)
- ammo_type = "/obj/item/ammo_casing/a556"
+ ammo_type = "/obj/item/ammo_casing/a556" // Is this really needed anymore?
fire_sound = 'sound/weapons/Gunshot.ogg'
slot_flags = SLOT_BACK
load_method = MAGAZINE
magazine_type = /obj/item/ammo_magazine/a556
+ allowed_magazines = list(/obj/item/ammo_magazine/a556)
auto_eject = 1
auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg'
+ one_handed_penalty = 4
+
burst_delay = 4
firemodes = list(
list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, use_launcher=null, burst_accuracy=null, dispersion=null),
@@ -149,12 +156,13 @@
else
..()
-/obj/item/weapon/gun/projectile/automatic/z8/update_icon()
+/obj/item/weapon/gun/projectile/automatic/z8/update_icon(var/ignore_inhands)
..()
if(ammo_magazine)
icon_state = "carbine-[round(ammo_magazine.stored_ammo.len,2)]"
else
icon_state = "carbine"
+ if(!ignore_inhands) update_held_icon()
return
/obj/item/weapon/gun/projectile/automatic/z8/examine(mob/user)
@@ -168,7 +176,7 @@
name = "light machine gun"
desc = "A rather traditionally made L6 SAW with a pleasantly lacquered wooden pistol grip. Has 'Aussec Armoury- 2531' engraved on the reciever"
icon_state = "l6closed100"
- item_state = "l6closedmag"
+ item_state = "l6closed"
w_class = 4
force = 10
slot_flags = 0
@@ -176,15 +184,18 @@
caliber = "a762"
origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 1, TECH_ILLEGAL = 2)
slot_flags = SLOT_BACK
- ammo_type = "/obj/item/ammo_casing/a762"
- fire_sound = 'sound/weapons/Gunshot_light.ogg'
+ ammo_type = "/obj/item/ammo_casing/a762" // Is this really needed anymore?
+ fire_sound = 'sound/weapons/machinegun.ogg'
load_method = MAGAZINE
magazine_type = /obj/item/ammo_magazine/a762
+ allowed_magazines = list(/obj/item/ammo_magazine/a762, /obj/item/ammo_magazine/c762)
+
+ one_handed_penalty = 6
firemodes = list(
list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null),
- list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0)),
- list(mode_name="short bursts", burst=5, move_delay=6, burst_accuracy = list(0,-1,-1,-2,-2), dispersion = list(0.6, 1.0, 1.0, 1.0, 1.2)),
+ list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0)),
+ list(mode_name="short bursts", burst=5, move_delay=6, burst_accuracy = list(0,-1,-1,-2,-2), dispersion = list(0.6, 1.0, 1.0, 1.0, 1.2))
)
var/cover_open = 0
@@ -199,6 +210,7 @@
cover_open = !cover_open
user << "You [cover_open ? "open" : "close"] [src]'s cover. "
update_icon()
+ update_held_icon()
/obj/item/weapon/gun/projectile/automatic/l6_saw/attack_self(mob/user as mob)
if(cover_open)
@@ -213,7 +225,13 @@
return ..() //once open, behave like normal
/obj/item/weapon/gun/projectile/automatic/l6_saw/update_icon()
- icon_state = "l6[cover_open ? "open" : "closed"][ammo_magazine ? round(ammo_magazine.stored_ammo.len, 25) : "-empty"]"
+ if(istype(ammo_magazine,/obj/item/ammo_magazine/c762))
+ icon_state = "l6[cover_open ? "open" : "closed"]mag"
+ item_state = icon_state
+ else
+ icon_state = "l6[cover_open ? "open" : "closed"][ammo_magazine ? round(ammo_magazine.stored_ammo.len, 25) : "-empty"]"
+ item_state = "l6[cover_open ? "open" : "closed"][ammo_magazine ? "" : "-empty"]"
+ update_held_icon()
/obj/item/weapon/gun/projectile/automatic/l6_saw/load_ammo(var/obj/item/A, mob/user)
if(!cover_open)
@@ -228,21 +246,25 @@
..()
/obj/item/weapon/gun/projectile/automatic/as24
- name = "\improper AS-24 automatic shotgun"
- desc = "A durable, rugged looking automatic weapon of a make popular on the frontier worlds. Uses 12 gauge shells. It is unmarked."
+ name = "automatic shotgun"
+ desc = "The AS-24 is a durable, rugged looking automatic weapon of a make popular on the frontier worlds. Uses 12 gauge shells. It is unmarked."
icon_state = "ashot"
item_state = null
w_class = 4
force = 10
caliber = "shotgun"
+ fire_sound = 'sound/weapons/shotgun.ogg'
origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 1, TECH_ILLEGAL = 4)
slot_flags = SLOT_BACK
load_method = MAGAZINE
magazine_type = /obj/item/ammo_magazine/g12
+ allowed_magazines = list(/obj/item/ammo_magazine/g12)
+
+ one_handed_penalty = 4
firemodes = list(
list(mode_name="semiauto", burst=1, fire_delay=0),
- list(mode_name="3-round bursts", burst=3, move_delay=6, burst_accuracy = list(0,-1,-1,-2,-2), dispersion = list(0.0, 0.6, 0.6)),
+ list(mode_name="3-round bursts", burst=3, move_delay=6, burst_accuracy = list(0,-1,-1,-2,-2), dispersion = list(0.0, 0.6, 0.6))
// list(mode_name="6-round bursts", burst=6, move_delay=6, burst_accuracy = list(0,-1,-1,-2,-2), dispersion = list(0.6, 1.0, 1.0, 1.0, 1.2, 1.2)),
)
@@ -254,5 +276,99 @@
icon_state = "ashot"
return
+/obj/item/weapon/gun/projectile/automatic/mini_uzi
+ name = "\improper Uzi"
+ desc = "A lightweight, compact, fast firing gun, for when you want someone really dead. Uses .45 rounds."
+ icon_state = "mini-uzi"
+ w_class = 3
+ load_method = MAGAZINE
+ caliber = ".45"
+ origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2, TECH_ILLEGAL = 5)
+ magazine_type = /obj/item/ammo_magazine/c45uzi
+ allowed_magazines = list(/obj/item/ammo_magazine/c45uzi)
+ firemodes = list(
+ list(mode_name="semiauto", burst=1, fire_delay=0),
+ list(mode_name="3-round bursts", burst=3, burst_delay=1, fire_delay=4, move_delay=4, burst_accuracy = list(0,-1,-1,-2,-2), dispersion = list(0.6, 1.0, 1.0))
+ )
+/obj/item/weapon/gun/projectile/automatic/mini_uzi/update_icon()
+ ..()
+ if(ammo_magazine)
+ icon_state = "mini-uzi"
+ else
+ icon_state = "mini-uzi-empty"
+
+/obj/item/weapon/gun/projectile/automatic/p90
+ name = "personal defense weapon"
+ desc = "The H90K is a compact, high capacity submachine gun produced by Hephaistos Industries. Despite its fierce reputation, it still manages to feel like a toy. Uses 9mm rounds."
+ icon_state = "p90smg"
+ item_state = "p90"
+ w_class = 3
+ caliber = "9mm"
+ origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2)
+ slot_flags = SLOT_BELT // ToDo: Belt sprite.
+ fire_sound = 'sound/weapons/Gunshot_light.ogg'
+ load_method = MAGAZINE
+ magazine_type = /obj/item/ammo_magazine/p90
+ allowed_magazines = list(/obj/item/ammo_magazine/p90, /obj/item/ammo_magazine/mc9mmt) // ToDo: New sprite for the different mag.
+
+ firemodes = list(
+ list(mode_name="semiauto", burst=1, fire_delay=0),
+ list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0))
+ )
+
+/obj/item/weapon/gun/projectile/automatic/p90/update_icon()
+ icon_state = "p90smg-[ammo_magazine ? round(ammo_magazine.stored_ammo.len, 6) : "empty"]"
+
+/obj/item/weapon/gun/projectile/automatic/tommygun
+ name = "\improper Tommygun"
+ desc = "This weapon was made famous by gangsters in the 20th century. Cybersun Industries is currently reproducing these for a target market of historic gun collectors and classy criminals. Uses .45 rounds."
+ icon_state = "tommygun"
+ w_class = 3
+ caliber = ".45"
+ origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2, TECH_ILLEGAL = 5)
+ slot_flags = SLOT_BELT // ToDo: Belt sprite.
+ load_method = MAGAZINE
+ magazine_type = /obj/item/ammo_magazine/tommymag
+ allowed_magazines = list(/obj/item/ammo_magazine/tommymag, /obj/item/ammo_magazine/tommydrum)
+
+ firemodes = list(
+ list(mode_name="semiauto", burst=1, fire_delay=0),
+ list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0))
+ )
+
+/obj/item/weapon/gun/projectile/automatic/tommygun/update_icon()
+ ..()
+ icon_state = (ammo_magazine)? "tommygun" : "tommygun-empty"
+// update_held_icon()
+
+/obj/item/weapon/gun/projectile/automatic/carbine
+ name = "assault carbine"
+ desc = "The bullpup configured GP3000 is a lightweight, compact, military-grade assault rifle produced by Gurov Projectile Weapons LLC. It is sold almost exclusively to standing armies. The serial number on this one has been scratched off. Uses 5.56mm rounds."
+ icon_state = "bullpupm"
+ item_state = "bullpup"
+ w_class = 4
+ force = 10
+ caliber = "a556"
+ origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 1, TECH_ILLEGAL = 4)
+ slot_flags = SLOT_BACK
+ load_method = MAGAZINE
+ magazine_type = /obj/item/ammo_magazine/a556m
+ allowed_magazines = list(/obj/item/ammo_magazine/a556, /obj/item/ammo_magazine/a556m)
+
+ one_handed_penalty = 4
+
+ firemodes = list(
+ list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null),
+ list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=6, burst_accuracy=list(0,-1,-2), dispersion=list(0.0, 0.6, 0.6))
+ )
+
+/obj/item/weapon/gun/projectile/automatic/carbine/update_icon(var/ignore_inhands)
+ ..()
+ if(istype(ammo_magazine,/obj/item/ammo_magazine/a556m))
+ icon_state = "bullpupm"
+ else
+ icon_state = (ammo_magazine)? "bullpup" : "bullpup-empty"
+ item_state = (ammo_magazine)? "bullpup" : "bullpup-empty"
+ if(!ignore_inhands) update_held_icon()
diff --git a/code/modules/projectiles/guns/projectile/boltaction.dm b/code/modules/projectiles/guns/projectile/boltaction.dm
new file mode 100644
index 0000000000..28da9997d2
--- /dev/null
+++ b/code/modules/projectiles/guns/projectile/boltaction.dm
@@ -0,0 +1,52 @@
+// For all intents and purposes, these work exactly the same as pump shotguns. It's unnecessary to make their own procs for them.
+
+/obj/item/weapon/gun/projectile/shotgun/pump/rifle
+ name = "bolt action rifle"
+ desc = "A reproduction of an almost ancient weapon design from the early 20th century. It's still popular among hunters and collectors due to its reliability. Uses 7.62mm rounds."
+ item_state = "boltaction"
+ icon_state = "boltaction"
+ fire_sound = 'sound/weapons/rifleshot.ogg'
+ max_shells = 5
+ caliber = "a762"
+ origin_tech = list(TECH_COMBAT = 1)// Old as shit rifle doesn't have very good tech.
+ ammo_type = /obj/item/ammo_casing/a762
+ load_method = SINGLE_CASING|SPEEDLOADER
+ action_sound = 'sound/weapons/riflebolt.ogg'
+
+/obj/item/weapon/gun/projectile/shotgun/pump/rifle/practice // For target practice
+ desc = "A bolt-action rifle with a lightweight synthetic wood stock, designed for competitive shooting. Comes shipped with practice rounds pre-loaded into the gun. Popular among professional marksmen. Uses 7.62mm rounds."
+ ammo_type = /obj/item/ammo_casing/a762p
+
+/obj/item/weapon/gun/projectile/shotgun/pump/rifle/ceremonial
+ name = "ceremonial bolt-action rifle"
+ desc = "A bolt-action rifle with a heavy, high-quality wood stock that has a beautiful finish. Clearly not intended to be used in combat. Uses 7.62mm rounds."
+ ammo_type = /obj/item/ammo_casing/a762/blank
+
+/obj/item/weapon/gun/projectile/shotgun/pump/rifle/mosin
+ name = "\improper Mosin Nagant"
+ desc = "Despite its age, the Mosin Nagant continues to be a favorite weapon among colonists, conscripts, and militias across the cosmos. Most today are built by Chen-Iltchenko Firearms, but it's hard to say who built this particular gun, considering the design has been ripped off by just about every arms manufacturer in the galaxy. Uses 7.62mm rounds."
+ icon_state = "mosin"
+ item_state = "mosin"
+
+// Stole hacky terrible code from doublebarrel shotgun. -Spades
+/obj/item/weapon/gun/projectile/shotgun/pump/rifle/mosin/attackby(var/obj/item/A as obj, mob/user as mob)
+ if(istype(A, /obj/item/weapon/circular_saw) || istype(A, /obj/item/weapon/melee/energy) || istype(A, /obj/item/weapon/pickaxe/plasmacutter) && w_class != 3)
+ user << "You begin to shorten the barrel and stock of \the [src]. "
+ if(loaded.len)
+ afterattack(user, user) //will this work? //it will. we call it twice, for twice the FUN
+ playsound(user, fire_sound, 50, 1)
+ user.visible_message("[src] goes off! ", "The rifle goes off in your face! ")
+ return
+ if(do_after(user, 30))
+ icon_state = "obrez"
+ w_class = 3
+ recoil = 2 // Owch
+ accuracy = -1 // You know damn well why.
+ item_state = "gun"
+ slot_flags &= ~SLOT_BACK //you can't sling it on your back
+ slot_flags |= (SLOT_BELT|SLOT_HOLSTER) //but you can wear it on your belt (poorly concealed under a trenchcoat, ideally) - or in a holster, why not.
+ name = "\improper Obrez"
+ desc = "The firepower of a Mosin, now the size of a pistol, with an effective combat range of about three feet. Uses 7.62mm rounds."
+ user << "You shorten the barrel and stock of \the [src]! "
+ else
+ ..()
\ No newline at end of file
diff --git a/code/modules/projectiles/guns/projectile/dartgun.dm b/code/modules/projectiles/guns/projectile/dartgun.dm
index 747a8294b8..79ca041ed5 100644
--- a/code/modules/projectiles/guns/projectile/dartgun.dm
+++ b/code/modules/projectiles/guns/projectile/dartgun.dm
@@ -54,6 +54,7 @@
silenced = 1
load_method = MAGAZINE
magazine_type = /obj/item/ammo_magazine/chemdart
+ allowed_magazines = list(/obj/item/ammo_magazine/chemdart)
auto_eject = 0
var/list/beakers = list() //All containers inside the gun.
diff --git a/code/modules/projectiles/guns/projectile/pistol.dm b/code/modules/projectiles/guns/projectile/pistol.dm
index 4763b83bb6..15471da2a2 100644
--- a/code/modules/projectiles/guns/projectile/pistol.dm
+++ b/code/modules/projectiles/guns/projectile/pistol.dm
@@ -1,12 +1,13 @@
/obj/item/weapon/gun/projectile/colt
var/unique_reskin
- name = "vintage .45 pistol"
+ name = ".45 pistol"
desc = "A cheap Martian knock-off of a Colt M1911. Uses .45 rounds."
magazine_type = /obj/item/ammo_magazine/c45m
+ allowed_magazines = list(/obj/item/ammo_magazine/c45m)
icon_state = "colt"
caliber = ".45"
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
- fire_sound = 'sound/weapons/Gunshot_light.ogg'
+ fire_sound = 'sound/weapons/semiauto.ogg'
load_method = MAGAZINE
/obj/item/weapon/gun/projectile/colt/detective
@@ -54,6 +55,7 @@
options["NT Mk. 58"] = "secguncomp"
options["NT Mk. 58 Custom"] = "secgundark"
options["Colt M1911"] = "colt"
+ options["FiveSeven"] = "fnseven"
options["USP"] = "usp"
options["H&K VP"] = "VP78"
options["P08 Luger"] = "p08"
@@ -72,7 +74,7 @@
magazine_type = /obj/item/ammo_magazine/c45m/rubber
caliber = ".45"
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
- fire_sound = 'sound/weapons/Gunshot_light.ogg'
+ fire_sound = 'sound/weapons/semiauto.ogg'
load_method = MAGAZINE
/obj/item/weapon/gun/projectile/sec/update_icon()
@@ -108,42 +110,69 @@
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_ILLEGAL = 8)
load_method = MAGAZINE
magazine_type = /obj/item/ammo_magazine/c45m
+ allowed_magazines = list(/obj/item/ammo_magazine/c45m)
/obj/item/weapon/gun/projectile/deagle
name = "desert eagle"
- desc = "A robust handgun that uses .50 AE ammo"
+ desc = "A robust handgun that uses .50 AE rounds."
icon_state = "deagle"
item_state = "deagle"
force = 14.0
caliber = ".50"
load_method = MAGAZINE
+ fire_sound = 'sound/weapons/deagle.ogg'
magazine_type = /obj/item/ammo_magazine/a50
- auto_eject = 1
+ allowed_magazines = list(/obj/item/ammo_magazine/a50)
+
+/obj/item/weapon/gun/projectile/deagle/update_icon()
+ ..()
+ if(ammo_magazine)
+ icon_state = "[initial(icon_state)]"
+ else
+ icon_state = "[initial(icon_state)]-e"
/obj/item/weapon/gun/projectile/deagle/gold
- desc = "A gold plated gun folded over a million times by superior martian gunsmiths. Uses .50 AE ammo."
+ desc = "A gold plated gun folded over a million times by superior martian gunsmiths. Uses .50 AE rounds."
icon_state = "deagleg"
item_state = "deagleg"
/obj/item/weapon/gun/projectile/deagle/camo
- desc = "A Deagle brand Deagle for operators operating operationally. Uses .50 AE ammo."
+ desc = "A Deagle brand Deagle for operators operating operationally. Uses .50 AE rounds."
icon_state = "deaglecamo"
item_state = "deagleg"
- auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg'
+/*
+/obj/item/weapon/gun/projectile/fiveseven
+ name = "\improper WT-AP57"
+ desc = "This tacticool pistol made by Ward-Takahashi trades stopping power for armor piercing and a high capacity. Uses 5mm rounds."
+ icon_state = "fnseven"
+ origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 2)
+ caliber = "5mm"
+ load_method = MAGAZINE
+ fire_sound = 'sound/weapons/semiauto.ogg'
+ magazine_type = /obj/item/ammo_magazine/c5mm
+ allowed_magazines = list(/obj/item/ammo_magazine/c5mm)
+/obj/item/weapon/gun/projectile/fiveseven/update_icon()
+ ..()
+ if(ammo_magazine)
+ icon_state = "fnseven"
+ else
+ icon_state = "fnseven-empty"
+*/
-/obj/item/weapon/gun/projectile/gyropistol
+/obj/item/weapon/gun/projectile/gyropistol // Does this even appear anywhere outside of admin abuse?
name = "gyrojet pistol"
- desc = "A bulky pistol designed to fire self propelled rounds"
+ desc = "Speak softly, and carry a big gun. Fires rare .75 caliber self-propelled exploding bolts--because fuck you and everything around you."
icon_state = "gyropistol"
max_shells = 8
caliber = "75"
- fire_sound = 'sound/effects/Explosion1.ogg'
+ fire_sound = 'sound/weapons/rpg.ogg'
origin_tech = list(TECH_COMBAT = 3)
ammo_type = "/obj/item/ammo_casing/a75"
load_method = MAGAZINE
magazine_type = /obj/item/ammo_magazine/a75
+ allowed_magazines = list(/obj/item/ammo_magazine/a75)
auto_eject = 1
auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg'
@@ -163,18 +192,19 @@
caliber = "9mm"
silenced = 0
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_ILLEGAL = 2)
- fire_sound = 'sound/weapons/Gunshot_light.ogg'
+ fire_sound = 'sound/weapons/semiauto.ogg'
load_method = MAGAZINE
magazine_type = /obj/item/ammo_magazine/mc9mm
+ allowed_magazines = list(/obj/item/ammo_magazine/mc9mm)
/obj/item/weapon/gun/projectile/pistol/flash
name = "holdout signal pistol"
magazine_type = /obj/item/ammo_magazine/mc9mm/flash
-/obj/item/weapon/gun/projectile/pistol/attack_hand(mob/user as mob)
+/obj/item/weapon/gun/projectile/pistol/attack_hand(mob/living/user as mob)
if(user.get_inactive_hand() == src)
if(silenced)
- if(user.l_hand != src && user.r_hand != src)
+ if(!user.item_is_in_hands(src))
..()
return
user << "You unscrew [silenced] from [src]. "
@@ -185,9 +215,9 @@
return
..()
-/obj/item/weapon/gun/projectile/pistol/attackby(obj/item/I as obj, mob/user as mob)
+/obj/item/weapon/gun/projectile/pistol/attackby(obj/item/I as obj, mob/living/user as mob)
if(istype(I, /obj/item/weapon/silencer))
- if(user.l_hand != src && user.r_hand != src) //if we're not in his hands
+ if(!user.item_is_in_hands(src)) //if we're not in his hands
user << "You'll need [src] in your hands to do that. "
return
user.drop_item()
@@ -246,3 +276,36 @@
var/obj/item/ammo_casing/ammo = ammo_type
caliber = initial(ammo.caliber)
..()
+
+/obj/item/weapon/gun/projectile/derringer
+ name = "derringer"
+ desc = "It's not size of your gun that matters, just the size of your load. Uses .357 rounds." //OHHH MYYY~
+ icon_state = "derringer"
+ item_state = "concealed"
+ w_class = 2
+ origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_ILLEGAL = 3)
+ handle_casings = CYCLE_CASINGS //player has to take the old casing out manually before reloading
+ load_method = SINGLE_CASING
+ max_shells = 2
+ ammo_type = /obj/item/ammo_casing/a357
+
+/obj/item/weapon/gun/projectile/luger
+ name = "\improper P08 Luger"
+ desc = "Not some cheap Scheisse .45 caliber Martian knockoff! This Luger is an authentic reproduction by RauMauser. Accuracy, easy handling, and its signature appearance make it popular among historic gun collectors. Uses 9mm rounds."
+ icon_state = "p08"
+ origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 2)
+ caliber = "9mm"
+ load_method = MAGAZINE
+ fire_sound = 'sound/weapons/semiauto.ogg'
+ magazine_type = /obj/item/ammo_magazine/mc9mm
+ allowed_magazines = list(/obj/item/ammo_magazine/mc9mm)
+
+/obj/item/weapon/gun/projectile/luger/update_icon()
+ ..()
+ if(ammo_magazine)
+ icon_state = "[initial(icon_state)]"
+ else
+ icon_state = "[initial(icon_state)]-e"
+
+/obj/item/weapon/gun/projectile/luger/brown
+ icon_state = "p08b"
\ No newline at end of file
diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm
index d1e561a509..7de8e7b877 100644
--- a/code/modules/projectiles/guns/projectile/revolver.dm
+++ b/code/modules/projectiles/guns/projectile/revolver.dm
@@ -1,12 +1,12 @@
/obj/item/weapon/gun/projectile/revolver
name = "revolver"
- desc = "The Lumoco Arms HE Colt is a choice revolver for when you absolutely, positively need to put a hole in the other guy. Uses .357 ammo."
+ desc = "The Lumoco Arms HE Colt is a choice revolver for when you absolutely, positively need to put a hole in the other guy. Uses .357 rounds."
icon_state = "revolver"
item_state = "revolver"
caliber = "357"
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
handle_casings = CYCLE_CASINGS
- max_shells = 7
+ max_shells = 6
ammo_type = /obj/item/ammo_casing/a357
var/chamber_offset = 0 //how many empty chambers in the cylinder until you hit a round
@@ -35,6 +35,7 @@
/obj/item/weapon/gun/projectile/revolver/mateba
name = "mateba"
+ desc = "This unique looking handgun is named after an Italian company famous for the manufacture of these revolvers, and pasta kneading machines. Uses .357 rounds." // Yes I'm serious. -Spades
icon_state = "mateba"
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
@@ -42,7 +43,6 @@
name = "revolver"
desc = "A cheap Martian knock-off of a Smith & Wesson Model 10. Uses .38-Special rounds."
icon_state = "detective"
- max_shells = 6
caliber = "38"
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
fire_sound = 'sound/weapons/Gunshot_light.ogg'
@@ -68,10 +68,9 @@
// Blade Runner pistol.
/obj/item/weapon/gun/projectile/revolver/deckard
- name = "Deckard .44"
+ name = "Deckard .38"
desc = "A custom-built revolver, based off the semi-popular Detective Special model."
icon_state = "deckard-empty"
- max_shells = 6
caliber = "38"
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
fire_sound = 'sound/weapons/Gunshot_light.ogg'
@@ -100,3 +99,15 @@
max_shells = 7
ammo_type = /obj/item/ammo_casing/cap
+/obj/item/weapon/gun/projectile/revolver/judge
+ name = "\"The Judge\""
+ desc = "A revolving hand-shotgun by Cybersun Industries that packs the power of a 12 guage in the palm of your hand (if you don't break your wrist). Uses 12 shotgun rounds."
+ icon_state = "judge"
+ caliber = "shotgun"
+ origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_ILLEGAL = 4)
+ max_shells = 5
+ fire_sound = 'sound/weapons/shotgun.ogg'
+ recoil = 2 // ow my fucking hand
+ accuracy = -1 // smooth bore + short barrel = shit accuracy
+ ammo_type = /obj/item/ammo_casing/shotgun
+ // ToDo: Remove accuracy debuf in exchange for slightly injuring your hand every time you fire it.
\ No newline at end of file
diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm
index d4da287a71..025aac20d9 100644
--- a/code/modules/projectiles/guns/projectile/shotgun.dm
+++ b/code/modules/projectiles/guns/projectile/shotgun.dm
@@ -13,7 +13,9 @@
load_method = SINGLE_CASING
ammo_type = /obj/item/ammo_casing/shotgun/beanbag
handle_casings = HOLD_CASINGS
+ fire_sound = 'sound/weapons/shotgun.ogg'
var/recentpump = 0 // to prevent spammage
+ var/action_sound = 'sound/weapons/shotgunpump.ogg'
/obj/item/weapon/gun/projectile/shotgun/pump/consume_next_projectile()
if(chambered)
@@ -26,7 +28,7 @@
recentpump = world.time
/obj/item/weapon/gun/projectile/shotgun/pump/proc/pump(mob/M as mob)
- playsound(M, 'sound/weapons/shotgunpump.ogg', 60, 1)
+ playsound(M, action_sound, 60, 1)
if(chambered)//We have a shell in the chamber
chambered.loc = get_turf(src)//Eject casing
@@ -65,7 +67,7 @@
caliber = "shotgun"
origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 1)
ammo_type = /obj/item/ammo_casing/shotgun/beanbag
-
+
burst_delay = 0
firemodes = list(
list(mode_name="fire one barrel at a time", burst=1),
diff --git a/code/modules/projectiles/guns/projectile/sniper.dm b/code/modules/projectiles/guns/projectile/sniper.dm
index e38740e732..d69a97f2f4 100644
--- a/code/modules/projectiles/guns/projectile/sniper.dm
+++ b/code/modules/projectiles/guns/projectile/sniper.dm
@@ -1,15 +1,17 @@
+////////////// PTR-7 Anti-Materiel Rifle //////////////
+
/obj/item/weapon/gun/projectile/heavysniper
name = "anti-materiel rifle"
desc = "A portable anti-armour rifle fitted with a scope, the HI PTR-7 Rifle was originally designed to used against armoured exosuits. It is capable of punching through windows and non-reinforced walls with ease. Fires armor piercing 14.5mm shells."
icon_state = "heavysniper"
- item_state = "l6closednomag" //placeholder
- w_class = 4
+ item_state = "l6closed-empty" // placeholder
+ w_class = 5 // So it can't fit in a backpack.
force = 10
slot_flags = SLOT_BACK
origin_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 2, TECH_ILLEGAL = 8)
caliber = "14.5mm"
- recoil = 2 //extra kickback
- //fire_sound = 'sound/weapons/sniper.ogg'
+ recoil = 3 //extra kickback
+ fire_sound = 'sound/weapons/sniper.ogg' // extra boom
handle_casings = HOLD_CASINGS
load_method = SINGLE_CASING
max_shells = 1
@@ -65,3 +67,41 @@
toggle_scope(2.0)
+////////////// Dragunov Sniper Rifle //////////////
+
+/* // Commented out until it's not worthless. Also might be nice to have a new icon that looks more sci-fi Dragunov-ish.
+/obj/item/weapon/gun/projectile/SVD
+ name = "\improper Dragunov"
+ desc = "The SVD, also known as the Dragunov, was mass produced with an Optical Sniper Sight so simple that even Ivan can figure out how it works. Too bad for you that it's written in Russian. Uses 7.62mm rounds."
+ icon_state = "SVD"
+ item_state = "SVD"
+ w_class = 5 // So it can't fit in a backpack.
+ force = 10
+ slot_flags = SLOT_BACK // Needs a sprite.
+ origin_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 2, TECH_ILLEGAL = 8)
+ recoil = 2 //extra kickback
+ caliber = "a762"
+ load_method = MAGAZINE
+ accuracy = -3 //shooting at the hip
+ scoped_accuracy = 0
+// requires_two_hands = 1
+ one_handed_penalty = 4 // The weapon itself is heavy, and the long barrel makes it hard to hold steady with just one hand.
+ fire_sound = 'sound/weapons/SVD_shot.ogg'
+ magazine_type = /obj/item/ammo_magazine/SVD
+ allowed_magazines = list(/obj/item/ammo_magazine/SVD, /obj/item/ammo_magazine/c762)
+
+/obj/item/weapon/gun/projectile/SVD/update_icon()
+ ..()
+// if(istype(ammo_magazine,/obj/item/ammo_magazine/c762)
+// icon_state = "SVD-bigmag" //No icon for this exists yet.
+ if(ammo_magazine)
+ icon_state = "SVD"
+ else
+ icon_state = "SVD-empty"
+
+/obj/item/weapon/gun/projectile/SVD/verb/scope()
+ set category = "Object"
+ set name = "Use Scope"
+ set popup_menu = 1
+
+ toggle_scope(2.0)*/
\ No newline at end of file
diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm
index e008d8e58c..f564b399ad 100644
--- a/code/modules/projectiles/projectile/beams.dm
+++ b/code/modules/projectiles/projectile/beams.dm
@@ -23,6 +23,11 @@
check_armour = "laser"
eyeblur = 2
+/obj/item/projectile/beam/weaklaser
+ name = "weak laser"
+ icon_state = "laser"
+ damage = 15
+
/obj/item/projectile/beam/midlaser
damage = 40
armor_penetration = 10
@@ -37,15 +42,6 @@
tracer_type = /obj/effect/projectile/laser_heavy/tracer
impact_type = /obj/effect/projectile/laser_heavy/impact
-/obj/item/projectile/beam/weaklaser
- name = "weak laser"
- icon_state = "laser"
- damage = 15
-
- muzzle_type = /obj/effect/projectile/laser_heavy/muzzle
- tracer_type = /obj/effect/projectile/laser_heavy/tracer
- impact_type = /obj/effect/projectile/laser_heavy/impact
-
/obj/item/projectile/beam/xray
name = "xray beam"
icon_state = "xray"
@@ -140,9 +136,6 @@
icon_state = "xray"
damage = 50
armor_penetration = 10
- stun = 3
- weaken = 3
- stutter = 3
muzzle_type = /obj/effect/projectile/xray/muzzle
tracer_type = /obj/effect/projectile/xray/tracer
@@ -163,11 +156,4 @@
/obj/item/projectile/beam/stun/weak
name = "weak stun beam"
icon_state = "stun"
- nodamage = 1
- taser_effect = 1
agony = 25
- damage_type = HALLOSS
-
- muzzle_type = /obj/effect/projectile/stun/muzzle
- tracer_type = /obj/effect/projectile/stun/tracer
- impact_type = /obj/effect/projectile/stun/impact
diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm
index a78eca0d51..8bbd31aed0 100644
--- a/code/modules/projectiles/projectile/bullets.dm
+++ b/code/modules/projectiles/projectile/bullets.dm
@@ -42,7 +42,7 @@
damage *= 0.7 //squishy mobs absorb KE
return 1
- var/chance = 0
+ var/chance = damage
if(istype(A, /turf/simulated/wall))
var/turf/simulated/wall/W = A
chance = round(damage/W.material.integrity*180)
@@ -52,8 +52,6 @@
if(D.glass) chance *= 2
else if(istype(A, /obj/structure/girder))
chance = 100
- else if(istype(A, /obj/machinery) || istype(A, /obj/structure))
- chance = damage
if(prob(chance))
if(A.opacity)
@@ -128,6 +126,10 @@
/obj/item/projectile/bullet/pistol
damage = 20
+/obj/item/projectile/bullet/pistol/ap
+ damage = 20
+ armor_penetration = 30
+
/obj/item/projectile/bullet/pistol/medium
damage = 25
@@ -169,15 +171,23 @@
/* "Rifle" rounds */
/obj/item/projectile/bullet/rifle
- armor_penetration = 20
+ armor_penetration = 15
penetrating = 1
/obj/item/projectile/bullet/rifle/a762
damage = 25
+/obj/item/projectile/bullet/rifle/a762/ap
+ damage = 20
+ armor_penetration = 50 // At 40 or more armor, this will do more damage than standard rounds.
+
/obj/item/projectile/bullet/rifle/a556
damage = 35
+/obj/item/projectile/bullet/rifle/a556/ap
+ damage = 30
+ armor_penetration = 50 // At 30 or more armor, this will do more damage than standard rounds.
+
/obj/item/projectile/bullet/rifle/a145
damage = 80
stun = 3
@@ -219,8 +229,9 @@
/obj/item/projectile/bullet/pistol/practice
damage = 5
-/obj/item/projectile/bullet/rifle/a556/practice
+/obj/item/projectile/bullet/rifle/practice
damage = 5
+ penetrating = 0
/obj/item/projectile/bullet/shotgun/practice
name = "practice"
diff --git a/code/modules/projectiles/projectile/change.dm b/code/modules/projectiles/projectile/change.dm
index 9fcc709ba0..b389d39153 100644
--- a/code/modules/projectiles/projectile/change.dm
+++ b/code/modules/projectiles/projectile/change.dm
@@ -78,7 +78,7 @@
H.set_species(randomize)
H.universal_speak = 1
var/datum/preferences/A = new() //Randomize appearance for the human
- A.randomize_appearance_for(H)
+ A.randomize_appearance_and_body_for(H)
if(new_mob)
for (var/spell/S in M.spell_list)
diff --git a/code/modules/projectiles/projectile/energy.dm b/code/modules/projectiles/projectile/energy.dm
index 063acf750b..a670ff47e8 100644
--- a/code/modules/projectiles/projectile/energy.dm
+++ b/code/modules/projectiles/projectile/energy.dm
@@ -14,7 +14,7 @@
kill_count = 15 //if the shell hasn't hit anything after travelling this far it just explodes.
var/flash_range = 0
var/brightness = 7
- var/light_duration = 5
+ var/light_colour = "#ffffff"
/obj/item/projectile/energy/flash/on_impact(var/atom/A)
var/turf/T = flash_range? src.loc : get_turf(A)
@@ -23,22 +23,31 @@
//blind adjacent people
for (var/mob/living/carbon/M in viewers(T, flash_range))
if(M.eyecheck() < 1)
- flick("e_flash", M.flash)
+ M.flash_eyes()
//snap pop
playsound(src, 'sound/effects/snap.ogg', 50, 1)
src.visible_message("\The [src] explodes in a bright flash! ")
-
- new /obj/effect/decal/cleanable/ash(src.loc) //always use src.loc so that ash doesn't end up inside windows
- new /obj/effect/effect/sparks(T)
- new /obj/effect/effect/smoke/illumination(T, brightness=max(flash_range*2, brightness), lifetime=light_duration)
+ var/datum/effect/effect/system/spark_spread/sparks = PoolOrNew(/datum/effect/effect/system/spark_spread)
+ sparks.set_up(2, 1, T)
+ sparks.start()
+
+ new /obj/effect/decal/cleanable/ash(src.loc) //always use src.loc so that ash doesn't end up inside windows
+ new /obj/effect/effect/smoke/illumination(T, 5, brightness, brightness, light_colour)
//blinds people like the flash round, but can also be used for temporary illumination
/obj/item/projectile/energy/flash/flare
damage = 10
flash_range = 1
- brightness = 9 //similar to a flare
- light_duration = 200
+ brightness = 15
+
+/obj/item/projectile/energy/flash/flare/on_impact(var/atom/A)
+ light_colour = pick("#e58775", "#ffffff", "#90ff90", "#a09030")
+
+ ..() //initial flash
+
+ //residual illumination
+ new /obj/effect/effect/smoke/illumination(src.loc, rand(190,240) SECONDS, range=8, power=3, color=light_colour) //same lighting power as flare
/obj/item/projectile/energy/electrode
name = "electrode"
@@ -49,6 +58,9 @@
damage_type = HALLOSS
//Damage will be handled on the MOB side, to prevent window shattering.
+/obj/item/projectile/energy/electrode/strong
+ agony = 55
+
/obj/item/projectile/energy/electrode/stunshot
name = "stunshot"
damage = 5
diff --git a/code/modules/projectiles/targeting/targeting_overlay.dm b/code/modules/projectiles/targeting/targeting_overlay.dm
index 7a6fdcc0ca..8c87751de7 100644
--- a/code/modules/projectiles/targeting/targeting_overlay.dm
+++ b/code/modules/projectiles/targeting/targeting_overlay.dm
@@ -113,7 +113,8 @@ obj/aiming_overlay/proc/update_aiming_deferred()
var/cancel_aim = 1
- if(!(aiming_with in owner) || (istype(owner, /mob/living/carbon/human) && (owner.l_hand != aiming_with && owner.r_hand != aiming_with)))
+ var/mob/living/carbon/human/H = owner
+ if(!(aiming_with in owner) || (istype(H) && !H.item_is_in_hands(aiming_with)))
owner << "You must keep hold of your weapon! "
else if(owner.eye_blind)
owner << "You are blind and cannot see your target! "
@@ -201,6 +202,7 @@ obj/aiming_overlay/proc/update_aiming_deferred()
else
owner << "You will no longer aim rather than fire. "
owner.client.remove_gun_icons()
+ owner.gun_setting_icon.icon_state = "gun[active]"
/obj/aiming_overlay/proc/cancel_aiming(var/no_message = 0)
if(!aiming_with || !aiming_at)
diff --git a/code/modules/projectiles/targeting/targeting_triggers.dm b/code/modules/projectiles/targeting/targeting_triggers.dm
index ea18fc3a70..9fd2208a35 100644
--- a/code/modules/projectiles/targeting/targeting_triggers.dm
+++ b/code/modules/projectiles/targeting/targeting_triggers.dm
@@ -1,4 +1,8 @@
-/mob/living/proc/trigger_aiming(var/trigger_type)
+//as core click exists at the mob level
+/mob/proc/trigger_aiming(var/trigger_type)
+ return
+
+/mob/living/trigger_aiming(var/trigger_type)
if(!aimed.len)
return
for(var/obj/aiming_overlay/AO in aimed)
@@ -16,14 +20,10 @@
if(!owner.canClick())
return
owner.setClickCooldown(5) // Spam prevention, essentially.
- if(owner.a_intent == I_HELP)
+ if(owner.a_intent == I_HELP && owner.is_preference_enabled(/datum/client_preference/safefiring))
owner << "You refrain from firing \the [aiming_with] as your intent is set to help. "
return
owner.visible_message("\The [owner] pulls the trigger reflexively! ")
var/obj/item/weapon/gun/G = aiming_with
if(istype(G))
G.Fire(aiming_at, owner)
-
-/mob/living/ClickOn(var/atom/A, var/params)
- . = ..()
- trigger_aiming(TARGET_CAN_CLICK)
diff --git a/code/modules/random_map/drop/droppod.dm b/code/modules/random_map/drop/droppod.dm
index 625568bbf1..da346d2eb7 100644
--- a/code/modules/random_map/drop/droppod.dm
+++ b/code/modules/random_map/drop/droppod.dm
@@ -112,7 +112,7 @@
// Splatter anything under us that survived the explosion.
if(value != SD_EMPTY_TILE && T.contents.len)
for(var/atom/movable/AM in T)
- if(AM.simulated && !istype(AM, /mob/dead))
+ if(AM.simulated && !istype(AM, /mob/observer))
qdel(AM)
// Also spawn doors and loot.
@@ -173,7 +173,7 @@
else
var/list/candidates = list()
for(var/client/player in clients)
- if(player.mob && istype(player.mob, /mob/dead/observer))
+ if(player.mob && istype(player.mob, /mob/observer/dead))
candidates |= player
if(!candidates.len)
diff --git a/code/modules/random_map/random_map.dm b/code/modules/random_map/random_map.dm
index f1d7d02637..72d52ae4d0 100644
--- a/code/modules/random_map/random_map.dm
+++ b/code/modules/random_map/random_map.dm
@@ -68,13 +68,11 @@ var/global/list/map_count = list()
if(!do_not_announce) admin_notice("[capitalize(name)] failed to generate ([round(0.1*(world.timeofday-start_time),0.1)] seconds): could not produce sane map. ", R_DEBUG)
/datum/random_map/proc/get_map_cell(var/x,var/y)
- if(!islist(map))
+ if(!map)
set_map_size()
- var/cell = ((y-1)*limit_x)+x
- if((cell < 1) || (cell > map.len))
+ . = ((y-1)*limit_x)+x
+ if((. < 1) || (. > map.len))
return null
- else
- return cell
/datum/random_map/proc/get_map_char(var/value)
switch(value)
diff --git a/code/modules/reagents/Chemistry-Holder.dm b/code/modules/reagents/Chemistry-Holder.dm
index 89aa9b76f3..b2d04233f2 100644
--- a/code/modules/reagents/Chemistry-Holder.dm
+++ b/code/modules/reagents/Chemistry-Holder.dm
@@ -383,6 +383,10 @@
if(type == CHEM_TOUCH)
var/datum/reagents/R = C.touching
return trans_to_holder(R, amount, multiplier, copy)
+ else if(isxeno(target))
+ var/mob/living/simple_animal/xeno/X = target
+ var/datum/reagents/R = X.reagents
+ return trans_to_holder(R, amount, multiplier, copy)
else
var/datum/reagents/R = new /datum/reagents(amount)
. = trans_to_holder(R, amount, multiplier, copy)
diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm
index 0febaa68bc..741ba588e4 100644
--- a/code/modules/reagents/Chemistry-Machinery.dm
+++ b/code/modules/reagents/Chemistry-Machinery.dm
@@ -2,7 +2,6 @@
#define LIQUID 2
#define GAS 3
-#define BOTTLE_SPRITES list("bottle-1", "bottle-2", "bottle-3", "bottle-4") //list of available bottle sprites
#define REAGENTS_PER_SHEET 20
@@ -21,12 +20,13 @@
var/obj/item/weapon/storage/pill_bottle/loaded_pill_bottle = null
var/mode = 0
var/condi = 0
- var/useramount = 30 // Last used amount
+ var/useramount = 15 // Last used amount
var/pillamount = 10
- var/bottlesprite = "bottle-1" //yes, strings
- var/pillsprite = "1"
- var/client/has_sprites = list()
+ var/bottlesprite = 1
+ var/pillsprite = 1
var/max_pill_count = 20
+ var/tab = "home"
+ var/analyze_data[0]
flags = OPENCONTAINER
/obj/machinery/chem_master/New()
@@ -56,7 +56,6 @@
user.drop_item()
B.loc = src
user << "You add the beaker to the machine!"
- src.updateUsrDialog()
icon_state = "mixer1"
else if(istype(B, /obj/item/weapon/storage/pill_bottle))
@@ -69,9 +68,74 @@
user.drop_item()
B.loc = src
user << "You add the pill bottle into the dispenser slot!"
- src.updateUsrDialog()
return
+/obj/machinery/chem_master/attack_hand(mob/user as mob)
+ if(stat & BROKEN)
+ return
+ user.set_machine(src)
+ ui_interact(user)
+
+/**
+ * Display the NanoUI window for the chem master.
+ *
+ * See NanoUI documentation for details.
+ */
+/obj/machinery/chem_master/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
+ user.set_machine(src)
+
+ var/list/data = list()
+ data["tab"] = tab
+ data["condi"] = condi
+
+ if(loaded_pill_bottle)
+ data["pillBottle"] = list("total" = loaded_pill_bottle.contents.len, "max" = loaded_pill_bottle.max_storage_space)
+ else
+ data["pillBottle"] = null
+
+ if(beaker)
+ var/datum/reagents/R = beaker:reagents
+ var/ui_reagent_beaker_list[0]
+ for(var/datum/reagent/G in R.reagent_list)
+ ui_reagent_beaker_list[++ui_reagent_beaker_list.len] = list("name" = G.name, "volume" = G.volume, "description" = G.description, "id" = G.id)
+
+ data["beaker"] = list("total_volume" = R.total_volume, "reagent_list" = ui_reagent_beaker_list)
+ else
+ data["beaker"] = null
+
+ if(reagents.total_volume)
+ var/ui_reagent_list[0]
+ for(var/datum/reagent/N in reagents.reagent_list)
+ ui_reagent_list[++ui_reagent_list.len] = list("name" = N.name, "volume" = N.volume, "description" = N.description, "id" = N.id)
+
+ data["reagents"] = list("total_volume" = reagents.total_volume, "reagent_list" = ui_reagent_list)
+ else
+ data["reagents"] = null
+
+ data["mode"] = mode
+
+ if(analyze_data)
+ data["analyzeData"] = list("name" = analyze_data["name"], "desc" = analyze_data["desc"], "blood_type" = analyze_data["blood_type"], "blood_DNA" = analyze_data["blood_DNA"])
+ else
+ data["analyzeData"] = null
+
+ data["pillSprite"] = pillsprite
+ data["bottleSprite"] = bottlesprite
+
+ var/P[20] //how many pill sprites there are. Sprites are taken from chemical.dmi and can be found in nano/images/pill.png
+ for(var/i = 1 to P.len)
+ P[i] = i
+ data["pillSpritesAmount"] = P
+
+ data["bottleSpritesAmount"] = list(1, 2, 3, 4) //how many bottle sprites there are. Sprites are taken from chemical.dmi and can be found in nano/images/pill.png
+
+ ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
+ if (!ui)
+ ui = new(user, src, ui_key, "chem_master.tmpl", src.name, 575, 400)
+ ui.set_initial_data(data)
+ ui.open()
+ ui.set_auto_update(5)
+
/obj/machinery/chem_master/Topic(href, href_list)
if(stat & (BROKEN|NOPOWER)) return
if(usr.stat || usr.restrained()) return
@@ -80,20 +144,19 @@
src.add_fingerprint(usr)
usr.set_machine(src)
+ if(href_list["tab_select"])
+ tab = href_list["tab_select"]
if (href_list["ejectp"])
if(loaded_pill_bottle)
loaded_pill_bottle.loc = src.loc
loaded_pill_bottle = null
- else if(href_list["close"])
- usr << browse(null, "window=chemmaster")
- usr.unset_machine()
- return
if(beaker)
var/datum/reagents/R = beaker:reagents
- if (href_list["analyze"])
- var/dat = ""
+ if (tab == "analyze")
+ analyze_data["name"] = href_list["name"]
+ analyze_data["desc"] = href_list["desc"]
if(!condi)
if(href_list["name"] == "Blood")
var/datum/reagent/blood/G
@@ -101,16 +164,9 @@
if(F.name == href_list["name"])
G = F
break
- var/A = G.name
- var/B = G.data["blood_type"]
- var/C = G.data["blood_DNA"]
- dat += "Chemmaster 3000 Chemical infos: Name: [A] Description: Blood Type: [B] DNA: [C](Back) "
- else
- dat += "Chemmaster 3000 Chemical infos: Name: [href_list["name"]] Description: [href_list["desc"]](Back) "
- else
- dat += "Condimaster 3000 Condiment infos: Name: [href_list["name"]] Description: [href_list["desc"]](Back) "
- usr << browse(dat, "window=chem_master;size=575x400")
- return
+ analyze_data["name"] = G.name
+ analyze_data["blood_type"] = G.data["blood_type"]
+ analyze_data["blood_DNA"] = G.data["blood_DNA"]
else if (href_list["add"])
@@ -147,9 +203,6 @@
else if (href_list["toggle"])
mode = !mode
- else if (href_list["main"])
- attack_hand(usr)
- return
else if (href_list["eject"])
if(beaker)
beaker:loc = src.loc
@@ -185,9 +238,8 @@
P.icon_state = "pill"+pillsprite
reagents.trans_to_obj(P,amount_per_pill)
if(src.loaded_pill_bottle)
- if(loaded_pill_bottle.contents.len < loaded_pill_bottle.storage_slots)
+ if(loaded_pill_bottle.contents.len < loaded_pill_bottle.max_storage_space)
P.loc = loaded_pill_bottle
- src.updateUsrDialog()
else if (href_list["createbottle"])
if(!condi)
@@ -197,102 +249,23 @@
P.name = "[name] bottle"
P.pixel_x = rand(-7, 7) //random position
P.pixel_y = rand(-7, 7)
- P.icon_state = bottlesprite
+ P.icon_state = "bottle"+bottlesprite
reagents.trans_to_obj(P,60)
P.update_icon()
else
var/obj/item/weapon/reagent_containers/food/condiment/P = new/obj/item/weapon/reagent_containers/food/condiment(src.loc)
reagents.trans_to_obj(P,50)
- else if(href_list["change_pill"])
- #define MAX_PILL_SPRITE 20 //max icon state of the pill sprites
- var/dat = ""
- for(var/i = 1 to MAX_PILL_SPRITE)
- dat += " "
- dat += "
"
- usr << browse(dat, "window=chem_master")
- return
- else if(href_list["change_bottle"])
- var/dat = ""
- for(var/sprite in BOTTLE_SPRITES)
- dat += " "
- dat += "
"
- usr << browse(dat, "window=chem_master")
- return
+
else if(href_list["pill_sprite"])
pillsprite = href_list["pill_sprite"]
else if(href_list["bottle_sprite"])
bottlesprite = href_list["bottle_sprite"]
- src.updateUsrDialog()
- return
+ nanomanager.update_uis(src)
/obj/machinery/chem_master/attack_ai(mob/user as mob)
return src.attack_hand(user)
-/obj/machinery/chem_master/attack_hand(mob/user as mob)
- if(stat & BROKEN)
- return
- user.set_machine(src)
- if(!(user.client in has_sprites))
- spawn()
- has_sprites += user.client
- for(var/i = 1 to MAX_PILL_SPRITE)
- usr << browse_rsc(icon('icons/obj/chemical.dmi', "pill" + num2text(i)), "pill[i].png")
- for(var/sprite in BOTTLE_SPRITES)
- usr << browse_rsc(icon('icons/obj/chemical.dmi', sprite), "[sprite].png")
- var/dat = ""
- if(!beaker)
- dat = "Please insert beaker. "
- if(src.loaded_pill_bottle)
- dat += "Eject Pill Bottle \[[loaded_pill_bottle.contents.len]/[loaded_pill_bottle.storage_slots]\] "
- else
- dat += "No pill bottle inserted. "
- dat += "Close "
- else
- var/datum/reagents/R = beaker:reagents
- dat += "Eject beaker and Clear Buffer "
- if(src.loaded_pill_bottle)
- dat += "Eject Pill Bottle \[[loaded_pill_bottle.contents.len]/[loaded_pill_bottle.storage_slots]\] "
- else
- dat += "No pill bottle inserted. "
- if(!R.total_volume)
- dat += "Beaker is empty."
- else
- dat += "Add to buffer: "
- for(var/datum/reagent/G in R.reagent_list)
- dat += "[G.name] , [G.volume] Units - "
- dat += "(Analyze) "
- dat += "(1) "
- dat += "(5) "
- dat += "(10) "
- dat += "(All) "
- dat += "(Custom) "
-
- dat += " Transfer to [(!mode ? "disposal" : "beaker")]: "
- if(reagents.total_volume)
- for(var/datum/reagent/N in reagents.reagent_list)
- dat += "[N.name] , [N.volume] Units - "
- dat += "(Analyze) "
- dat += "(1) "
- dat += "(5) "
- dat += "(10) "
- dat += "(All) "
- dat += "(Custom) "
- else
- dat += "Empty "
- if(!condi)
- dat += "Create pill (60 units max) "
- dat += "Create multiple pills "
- dat += "Create bottle (60 units max) "
- else
- dat += "Create bottle (50 units max) "
- if(!condi)
- user << browse("Chemmaster 3000 Chemmaster menu: [dat]", "window=chem_master;size=575x400")
- else
- user << browse("Condimaster 3000 Condimaster menu: [dat]", "window=chem_master;size=575x400")
- onclose(user, "chem_master")
- return
-
/obj/machinery/chem_master/condimaster
name = "CondiMaster 3000"
condi = 1
@@ -310,6 +283,7 @@
use_power = 1
idle_power_usage = 5
active_power_usage = 100
+ circuit = /obj/item/weapon/circuitboard/grinder
var/inuse = 0
var/obj/item/weapon/reagent_containers/beaker = null
var/limit = 10
@@ -326,6 +300,10 @@
/obj/machinery/reagentgrinder/New()
..()
beaker = new /obj/item/weapon/reagent_containers/glass/beaker/large(src)
+ component_parts = list()
+ component_parts += new /obj/item/weapon/stock_parts/motor(src)
+ component_parts += new /obj/item/weapon/stock_parts/gear(src)
+ RefreshParts()
return
/obj/machinery/reagentgrinder/update_icon()
@@ -333,9 +311,14 @@
return
/obj/machinery/reagentgrinder/attackby(var/obj/item/O as obj, var/mob/user as mob)
+ if(beaker)
+ if(default_deconstruction_screwdriver(user, O))
+ return
+ if(default_deconstruction_crowbar(user, O))
+ return
if (istype(O,/obj/item/weapon/reagent_containers/glass) || \
- istype(O,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass) || \
+ istype(O,/obj/item/weapon/reagent_containers/food/drinks/glass2) || \
istype(O,/obj/item/weapon/reagent_containers/food/drinks/shaker))
if (beaker)
@@ -356,13 +339,13 @@
return
if(istype(O,/obj/item/weapon/storage/bag/plants))
+ var/obj/item/weapon/storage/bag/plants/bag = O
var/failed = 1
for(var/obj/item/G in O.contents)
if(!G.reagents || !G.reagents.total_volume)
continue
failed = 0
- O.contents -= G
- G.loc = src
+ bag.remove_from_storage(G, src)
holdingitems += G
if(holdingitems && holdingitems.len >= limit)
break
diff --git a/code/modules/reagents/Chemistry-Readme.dm b/code/modules/reagents/Chemistry-Readme.dm
index 9a49d409e0..2b7e3a832a 100644
--- a/code/modules/reagents/Chemistry-Readme.dm
+++ b/code/modules/reagents/Chemistry-Readme.dm
@@ -127,7 +127,7 @@ About the Holder:
trans_to_obj(var/turf/target, var/amount = 1, var/multiplier = 1, var/copy = 0)
If target has reagents, transfers [amount] to it. Otherwise, same as trans_to_turf().
- /atom/proc/create_reagents(var/max_vol)
+ atom/proc/create_reagents(var/max_vol)
Creates a new reagent datum.
About Reagents:
@@ -285,7 +285,7 @@ About the Tools:
By default, all atom have a reagents var - but its empty. if you want to use an object for the chem.
system you'll need to add something like this in its new proc:
- /atom/proc/create_reagents(var/max_volume)
+ atom/proc/create_reagents(var/max_volume)
Other important stuff:
diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm
index 574e1131aa..64cbd4a32c 100644
--- a/code/modules/reagents/Chemistry-Reagents.dm
+++ b/code/modules/reagents/Chemistry-Reagents.dm
@@ -26,17 +26,19 @@
var/overdose = 0
var/scannable = 0 // Shows up on health analyzers.
var/affects_dead = 0
- var/glass_icon_state = null
- var/glass_name = null
- var/glass_desc = null
- var/glass_center_of_mass = null
var/cup_icon_state = null
var/cup_name = null
var/cup_desc = null
var/cup_center_of_mass = null
+
var/color = "#000000"
var/color_weight = 1
+ var/glass_icon = DRINK_ICON_DEFAULT
+ var/glass_name = "something"
+ var/glass_desc = "It's a glass of... what, exactly?"
+ var/list/glass_special = null // null equivalent to list()
+
/datum/reagent/proc/remove_self(var/amount) // Shortcut
holder.remove_reagent(id, amount)
@@ -55,7 +57,7 @@
return
if(!affects_dead && M.stat == DEAD)
return
- if(overdose && (dose > overdose) && (location != CHEM_TOUCH))
+ if(overdose && (volume > overdose) && (location != CHEM_TOUCH))
overdose(M, alien)
var/removed = metabolism
if(ingest_met && (location == CHEM_INGEST))
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm
index 20225508c6..842814bca2 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm
@@ -6,8 +6,7 @@
metabolism = REM * 5
color = "#C80000"
- glass_icon_state = "glass_red"
- glass_name = "glass of tomato juice"
+ glass_name = "tomato juice"
glass_desc = "Are you sure this is tomato juice?"
/datum/reagent/blood/initialize_data(var/newdata)
@@ -91,8 +90,7 @@
color = "#0064C877"
metabolism = REM * 10
- glass_icon_state = "glass_clear"
- glass_name = "glass of water"
+ glass_name = "water"
glass_desc = "The father of all refreshments."
/datum/reagent/water/touch_turf(var/turf/simulated/T)
@@ -154,8 +152,7 @@
reagent_state = LIQUID
color = "#660000"
- glass_icon_state = "dr_gibb_glass"
- glass_name = "glass of welder fuel"
+ glass_name = "welder fuel"
glass_desc = "Unless you are an industrial tool, this is probably not safe for consumption."
/datum/reagent/fuel/touch_turf(var/turf/T)
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm
index 26b58eed31..89837746c3 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm
@@ -66,8 +66,7 @@
var/targ_temp = 310
var/halluci = 0
- glass_icon_state = "glass_clear"
- glass_name = "glass of ethanol"
+ glass_name = "ethanol"
glass_desc = "A well-known alcohol with a variety of applications."
/datum/reagent/ethanol/touch_mob(var/mob/living/L, var/amount)
@@ -368,13 +367,32 @@
description = "The organic compound commonly known as table sugar and sometimes called saccharose. This white, odorless, crystalline powder has a pleasing, sweet taste."
reagent_state = SOLID
color = "#FFFFFF"
- glass_icon_state = "iceglass"
- glass_name = "glass of sugar"
+
+ glass_name = "sugar"
glass_desc = "The organic compound commonly known as table sugar and sometimes called saccharose. This white, odorless, crystalline powder has a pleasing, sweet taste."
+ glass_icon = DRINK_ICON_NOISY
/datum/reagent/sugar/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
M.nutrition += removed * 3
+ var/effective_dose = dose
+ if(issmall(M))
+ effective_dose *= 2
+
+ if(alien == IS_UNATHI)
+ if(effective_dose < 2)
+ if(effective_dose == metabolism * 2 || prob(5))
+ M.emote("yawn")
+ else if(effective_dose < 5)
+ M.eye_blurry = max(M.eye_blurry, 10)
+ else if(effective_dose < 20)
+ if(prob(50))
+ M.Weaken(2)
+ M.drowsyness = max(M.drowsyness, 20)
+ else
+ M.sleeping = max(M.sleeping, 20)
+ M.drowsyness = max(M.drowsyness, 60)
+
/datum/reagent/sulfur
name = "Sulfur"
id = "sulfur"
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm
index 47d03e5974..55a50bc925 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm
@@ -17,11 +17,20 @@
affect_ingest(M, alien, removed)
/datum/reagent/nutriment/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
+ switch(alien)
+ if(IS_UNATHI) removed *= 0.5
if(issmall(M)) removed *= 2 // Small bodymass, more effect from lower volume.
M.heal_organ_damage(0.5 * removed, 0)
M.nutrition += nutriment_factor * removed // For hunger and fatness
M.add_chemical_effect(CE_BLOODRESTORE, 4 * removed)
+/datum/reagent/nutriment/glucose
+ name = "Glucose"
+ id = "glucose"
+ color = "#FFFFFF"
+
+ injectable = 1
+
/datum/reagent/nutriment/protein // Bad for Skrell!
name = "animal protein"
id = "protein"
@@ -35,6 +44,8 @@
if(IS_TESHARI)
..(M, alien, removed*1.2) // Teshari get a bit more nutrition from meat.
return
+ if(IS_UNATHI)
+ ..(M, alien, removed*2.25) //Unathi get most of their nutrition from meat.
..()
/datum/reagent/nutriment/protein/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
@@ -55,6 +66,27 @@
nutriment_factor = 10
color = "#FFFF00"
+/datum/reagent/honey/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
+ ..()
+
+ var/effective_dose = dose
+ if(issmall(M))
+ effective_dose *= 2
+
+ if(alien == IS_UNATHI)
+ if(effective_dose < 2)
+ if(effective_dose == metabolism * 2 || prob(5))
+ M.emote("yawn")
+ else if(effective_dose < 5)
+ M.eye_blurry = max(M.eye_blurry, 10)
+ else if(effective_dose < 20)
+ if(prob(50))
+ M.Weaken(2)
+ M.drowsyness = max(M.drowsyness, 20)
+ else
+ M.sleeping = max(M.sleeping, 20)
+ M.drowsyness = max(M.drowsyness, 60)
+
/datum/reagent/nutriment/flour
name = "flour"
id = "flour"
@@ -351,8 +383,7 @@
description = "The raw essence of a banana."
color = "#C3AF00"
- glass_icon_state = "banana"
- glass_name = "glass of banana juice"
+ glass_name = "banana juice"
glass_desc = "The raw essence of a banana. HONK!"
/datum/reagent/drink/juice/berry
@@ -361,8 +392,7 @@
description = "A delicious blend of several different kinds of berries."
color = "#990066"
- glass_icon_state = "berryjuice"
- glass_name = "glass of berry juice"
+ glass_name = "berry juice"
glass_desc = "Berry juice. Or maybe it's jam. Who cares?"
/datum/reagent/drink/juice/carrot
@@ -371,8 +401,7 @@
description = "It is just like a carrot but without crunching."
color = "#FF8C00" // rgb: 255, 140, 0
- glass_icon_state = "carrotjuice"
- glass_name = "glass of carrot juice"
+ glass_name = "carrot juice"
glass_desc = "It is just like a carrot but without crunching."
/datum/reagent/drink/juice/carrot/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
@@ -385,18 +414,37 @@
description = "It's grrrrrape!"
color = "#863333"
- glass_icon_state = "grapejuice"
- glass_name = "glass of grape juice"
+ glass_name = "grape juice"
glass_desc = "It's grrrrrape!"
+/datum/reagent/juice/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
+ ..()
+
+ var/effective_dose = dose/2
+ if(issmall(M))
+ effective_dose *= 2
+
+ if(alien == IS_UNATHI)
+ if(effective_dose < 2)
+ if(effective_dose == metabolism * 2 || prob(5))
+ M.emote("yawn")
+ else if(effective_dose < 5)
+ M.eye_blurry = max(M.eye_blurry, 10)
+ else if(effective_dose < 20)
+ if(prob(50))
+ M.Weaken(2)
+ M.drowsyness = max(M.drowsyness, 20)
+ else
+ M.sleeping = max(M.sleeping, 20)
+ M.drowsyness = max(M.drowsyness, 60)
+
/datum/reagent/drink/juice/lemon
name = "Lemon Juice"
id = "lemonjuice"
description = "This juice is VERY sour."
color = "#AFAF00"
- glass_icon_state = "lemonjuice"
- glass_name = "glass of lemon juice"
+ glass_name = "lemon juice"
glass_desc = "Sour..."
/datum/reagent/drink/juice/lime
@@ -405,8 +453,7 @@
description = "The sweet-sour juice of limes."
color = "#365E30"
- glass_icon_state = "glass_green"
- glass_name = "glass of lime juice"
+ glass_name = "lime juice"
glass_desc = "A glass of sweet-sour lime juice"
/datum/reagent/drink/juice/lime/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
@@ -421,8 +468,7 @@
description = "Both delicious AND rich in Vitamin C, what more do you need?"
color = "#E78108"
- glass_icon_state = "glass_orange"
- glass_name = "glass of orange juice"
+ glass_name = "orange juice"
glass_desc = "Vitamins! Yay!"
/datum/reagent/drink/orangejuice/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
@@ -438,8 +484,7 @@
color = "#863353"
strength = 5
- glass_icon_state = "poisonberryjuice"
- glass_name = "glass of poison berry juice"
+ glass_name = "poison berry juice"
glass_desc = "A glass of deadly juice."
/datum/reagent/drink/juice/potato
@@ -449,8 +494,7 @@
nutrition = 2
color = "#302000"
- glass_icon_state = "glass_brown"
- glass_name = "glass of potato juice"
+ glass_name = "potato juice"
glass_desc = "Juice from a potato. Bleh."
/datum/reagent/drink/juice/tomato
@@ -459,8 +503,7 @@
description = "Tomatoes made into juice. What a waste of big, juicy tomatoes, huh?"
color = "#731008"
- glass_icon_state = "glass_red"
- glass_name = "glass of tomato juice"
+ glass_name = "tomato juice"
glass_desc = "Are you sure this is tomato juice?"
/datum/reagent/drink/juice/tomato/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
@@ -475,8 +518,7 @@
description = "Delicious juice made from watermelon."
color = "#B83333"
- glass_icon_state = "glass_red"
- glass_name = "glass of watermelon juice"
+ glass_name = "watermelon juice"
glass_desc = "Delicious juice made from watermelon."
// Everything else
@@ -487,14 +529,27 @@
description = "An opaque white liquid produced by the mammary glands of mammals."
color = "#DFDFDF"
- glass_icon_state = "glass_white"
- glass_name = "glass of milk"
+ glass_name = "milk"
glass_desc = "White and nutritious goodness!"
cup_icon_state = "cup_cream"
cup_name = "cup of milk"
cup_desc = "White and nutritious goodness!"
+/datum/reagent/drink/milk/chocolate
+ name = "Chocolate Milk"
+ id = "chocolate_milk"
+ description = "A delicious mixture of perfectly healthy mix and terrible chocolate."
+ color = "#74533b"
+
+ cup_icon_state = "cup_brown"
+ cup_name = "cup of chocolate milk"
+ cup_desc = "Deliciously fattening!"
+
+ glass_name = "chocolate milk"
+ glass_desc = "Deliciously fattening!"
+
+
/datum/reagent/drink/milk/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
..()
if(alien == IS_DIONA)
@@ -508,8 +563,7 @@
description = "The fatty, still liquid part of milk. Why don't you mix this with sum scotch, eh?"
color = "#DFD7AF"
- glass_icon_state = "glass_white"
- glass_name = "glass of cream"
+ glass_name = "cream"
glass_desc = "Ewwww..."
cup_icon_state = "cup_cream"
@@ -522,8 +576,7 @@
description = "An opaque white liquid made from soybeans."
color = "#DFDFC7"
- glass_icon_state = "glass_white"
- glass_name = "glass of soy milk"
+ glass_name = "soy milk"
glass_desc = "White and nutritious soy goodness!"
cup_icon_state = "cup_cream"
@@ -540,7 +593,6 @@
adj_sleepy = -3
adj_temp = 20
- glass_icon_state = "bigteacup"
glass_name = "cup of tea"
glass_desc = "Tasty black tea, it has antioxidants, it's good for you!"
@@ -557,10 +609,9 @@
color = "#104038" // rgb: 16, 64, 56
adj_temp = -5
- glass_icon_state = "icedteaglass"
- glass_name = "glass of iced tea"
+ glass_name = "iced tea"
glass_desc = "No relation to a certain rap artist/ actor."
- glass_center_of_mass = list("x"=15, "y"=10)
+ glass_special = list(DRINK_ICE)
/datum/reagent/drink/coffee
name = "Coffee"
@@ -573,14 +624,14 @@
adj_temp = 25
overdose = 45
- glass_icon_state = "hot_coffee"
- glass_name = "mug of coffee"
- glass_desc = "Don't drop it, or you'll send scalding liquid and porcelain shards everywhere."
-
cup_icon_state = "cup_coffee"
cup_name = "cup of coffee"
cup_desc = "Don't drop it, or you'll send scalding liquid and porcelain shards everywhere."
+ glass_name = "cup of coffee"
+ glass_desc = "Don't drop it, or you'll send scalding liquid and glass shards everywhere."
+
+
/datum/reagent/drink/coffee/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
if(alien == IS_DIONA)
return
@@ -613,21 +664,20 @@
color = "#102838"
adj_temp = -5
- glass_icon_state = "icedcoffeeglass"
- glass_name = "glass of iced coffee"
+ glass_name = "iced coffee"
glass_desc = "A drink to perk you up and refresh you!"
+ glass_special = list(DRINK_ICE)
/datum/reagent/drink/coffee/soy_latte
name = "Soy Latte"
id = "soy_latte"
description = "A nice and tasty beverage while you are reading your hippie books."
- color = "#664300"
+ color = "#C65905"
adj_temp = 5
- glass_icon_state = "soy_latte"
- glass_name = "glass of soy latte"
glass_desc = "A nice and refreshing beverage while you are reading."
- glass_center_of_mass = list("x"=15, "y"=9)
+ glass_name = "soy latte"
+ glass_desc = "A nice and refrshing beverage while you are reading."
cup_icon_state = "cup_latte"
cup_name = "cup of soy latte"
@@ -641,13 +691,11 @@
name = "Cafe Latte"
id = "cafe_latte"
description = "A nice, strong and tasty beverage while you are reading."
- color = "#664300" // rgb: 102, 67, 0
+ color = "#C65905"
adj_temp = 5
- glass_icon_state = "cafe_latte"
- glass_name = "glass of cafe latte"
+ glass_name = "cafe latte"
glass_desc = "A nice, strong and refreshing beverage while you are reading."
- glass_center_of_mass = list("x"=15, "y"=9)
cup_icon_state = "cup_latte"
cup_name = "cup of cafe latte"
@@ -666,8 +714,7 @@
nutrition = 2
adj_temp = 5
- glass_icon_state = "chocolateglass"
- glass_name = "glass of hot chocolate"
+ glass_name = "hot chocolate"
glass_desc = "Made with love! And cocoa beans."
cup_icon_state = "cup_coco"
@@ -683,9 +730,9 @@
adj_drowsy = -3
adj_temp = -5
- glass_icon_state = "glass_clear"
- glass_name = "glass of soda water"
+ glass_name = "soda water"
glass_desc = "Soda water. Why not make a scotch and soda?"
+ glass_special = list(DRINK_FIZZ)
/datum/reagent/drink/soda/grapesoda
name = "Grape Soda"
@@ -694,22 +741,22 @@
color = "#421C52"
adj_drowsy = -3
- glass_icon_state = "gsodaglass"
- glass_name = "glass of grape soda"
+ glass_name = "grape soda"
glass_desc = "Looks like a delicious drink!"
+ glass_special = list(DRINK_FIZZ)
/datum/reagent/drink/soda/tonic
name = "Tonic Water"
id = "tonic"
description = "It tastes strange but at least the quinine keeps the Space Malaria at bay."
- color = "#664300"
+ color = "#619494"
+
adj_dizzy = -5
adj_drowsy = -3
adj_sleepy = -2
adj_temp = -5
- glass_icon_state = "glass_clear"
- glass_name = "glass of tonic water"
+ glass_name = "tonic water"
glass_desc = "Quinine tastes funny, but at least it'll keep that Space Malaria away."
/datum/reagent/drink/soda/lemonade
@@ -719,9 +766,9 @@
color = "#FFFF00"
adj_temp = -5
- glass_icon_state = "lemonadeglass"
- glass_name = "glass of lemonade"
+ glass_name = "lemonade"
glass_desc = "Oh the nostalgia..."
+ glass_special = list(DRINK_FIZZ)
/datum/reagent/drink/soda/kiraspecial
name = "Kira Special"
@@ -730,10 +777,9 @@
color = "#CCCC99"
adj_temp = -5
- glass_icon_state = "kiraspecial"
- glass_name = "glass of Kira Special"
+ glass_name = "Kira Special"
glass_desc = "Long live the guy who everyone had mistaken for a girl. Baka!"
- glass_center_of_mass = list("x"=16, "y"=12)
+ glass_special = list(DRINK_FIZZ)
/datum/reagent/drink/soda/brownstar
name = "Brown Star"
@@ -742,8 +788,7 @@
color = "#9F3400"
adj_temp = -2
- glass_icon_state = "brownstar"
- glass_name = "glass of Brown Star"
+ glass_name = "Brown Star"
glass_desc = "It's not what it sounds like..."
/datum/reagent/drink/milkshake
@@ -753,10 +798,29 @@
color = "#AEE5E4"
adj_temp = -9
- glass_icon_state = "milkshake"
- glass_name = "glass of milkshake"
+ glass_name = "milkshake"
glass_desc = "Glorious brainfreezing mixture."
- glass_center_of_mass = list("x"=16, "y"=7)
+
+/datum/reagent/milkshake/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
+ ..()
+
+ var/effective_dose = dose/2
+ if(issmall(M))
+ effective_dose *= 2
+
+ if(alien == IS_UNATHI)
+ if(effective_dose < 2)
+ if(effective_dose == metabolism * 2 || prob(5))
+ M.emote("yawn")
+ else if(effective_dose < 5)
+ M.eye_blurry = max(M.eye_blurry, 10)
+ else if(effective_dose < 20)
+ if(prob(50))
+ M.Weaken(2)
+ M.drowsyness = max(M.drowsyness, 20)
+ else
+ M.sleeping = max(M.sleeping, 20)
+ M.drowsyness = max(M.drowsyness, 60)
/datum/reagent/drink/rewriter
name = "Rewriter"
@@ -765,10 +829,8 @@
color = "#485000"
adj_temp = -5
- glass_icon_state = "rewriter"
- glass_name = "glass of Rewriter"
+ glass_name = "Rewriter"
glass_desc = "The secret of the sanctuary of the Libarian..."
- glass_center_of_mass = list("x"=16, "y"=9)
/datum/reagent/drink/rewriter/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
..()
@@ -782,10 +844,9 @@
adj_temp = -5
adj_sleepy = -2
- glass_icon_state = "nuka_colaglass"
- glass_name = "glass of Nuka-Cola"
+ glass_name = "Nuka-Cola"
glass_desc = "Don't cry, Don't raise your eye, It's only nuclear wasteland"
- glass_center_of_mass = list("x"=16, "y"=6)
+ glass_special = list(DRINK_FIZZ)
/datum/reagent/drink/nuka_cola/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
..()
@@ -801,10 +862,8 @@
description = "Made in the modern day with proper pomegranate substitute. Who uses real fruit, anyways?"
color = "#FF004F"
- glass_icon_state = "grenadineglass"
- glass_name = "glass of grenadine syrup"
+ glass_name = "grenadine syrup"
glass_desc = "Sweet and tangy, a bar syrup used to add color or flavor to drinks."
- glass_center_of_mass = list("x"=17, "y"=6)
/datum/reagent/drink/soda/space_cola
name = "Space Cola"
@@ -815,9 +874,9 @@
adj_drowsy = -3
adj_temp = -5
- glass_icon_state = "glass_brown"
- glass_name = "glass of Space Cola"
+ glass_name = "Space Cola"
glass_desc = "A glass of refreshing Space Cola"
+ glass_special = list(DRINK_FIZZ)
/datum/reagent/drink/soda/spacemountainwind
name = "Mountain Wind"
@@ -828,9 +887,9 @@
adj_sleepy = -1
adj_temp = -5
- glass_icon_state = "Space_mountain_wind_glass"
- glass_name = "glass of Space Mountain Wind"
+ glass_name = "Space Mountain Wind"
glass_desc = "Space Mountain Wind. As you know, there are no mountains in space, only wind."
+ glass_special = list(DRINK_FIZZ)
/datum/reagent/drink/soda/dr_gibb
name = "Dr. Gibb"
@@ -840,8 +899,7 @@
adj_drowsy = -6
adj_temp = -5
- glass_icon_state = "dr_gibb_glass"
- glass_name = "glass of Dr. Gibb"
+ glass_name = "Dr. Gibb"
glass_desc = "Dr. Gibb. Not as dangerous as the name might imply."
/datum/reagent/drink/soda/space_up
@@ -851,9 +909,9 @@
color = "#202800"
adj_temp = -8
- glass_icon_state = "space-up_glass"
- glass_name = "glass of Space-up"
+ glass_name = "Space-up"
glass_desc = "Space-up. It helps keep your cool."
+ glass_special = list(DRINK_FIZZ)
/datum/reagent/drink/soda/lemon_lime
name = "Lemon Lime"
@@ -862,9 +920,9 @@
color = "#878F00"
adj_temp = -8
- glass_icon_state = "lemonlime"
- glass_name = "glass of lemon lime soda"
+ glass_name = "lemon lime soda"
glass_desc = "A tangy substance made of 0.5% natural citrus!"
+ glass_special = list(DRINK_FIZZ)
/datum/reagent/drink/doctor_delight
name = "The Doctor's Delight"
@@ -874,10 +932,8 @@
color = "#FF8CFF"
nutrition = 1
- glass_icon_state = "doctorsdelightglass"
- glass_name = "glass of The Doctor's Delight"
+ glass_name = "The Doctor's Delight"
glass_desc = "A healthy mixture of juices, guaranteed to keep you healthy until the next toolboxing takes place."
- glass_center_of_mass = list("x"=16, "y"=8)
/datum/reagent/drink/doctor_delight/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
..()
@@ -930,17 +986,16 @@
color = "#619494"
adj_temp = -5
- glass_icon_state = "iceglass"
- glass_name = "glass of ice"
+ glass_name = "ice"
glass_desc = "Generally, you're supposed to put something else in there too..."
+ glass_icon = DRINK_ICON_NOISY
/datum/reagent/drink/nothing
name = "Nothing"
id = "nothing"
description = "Absolutely nothing."
- glass_icon_state = "nothing"
- glass_name = "glass of nothing"
+ glass_name = "nothing"
glass_desc = "Absolutely nothing."
/* Alcohol */
@@ -954,35 +1009,29 @@
color = "#33EE00"
strength = 12
- glass_icon_state = "absintheglass"
- glass_name = "glass of absinthe"
+ glass_name = "absinthe"
glass_desc = "Wormwood, anise, oh my."
- glass_center_of_mass = list("x"=16, "y"=5)
/datum/reagent/ethanol/ale
name = "Ale"
id = "ale"
description = "A dark alchoholic beverage made by malted barley and yeast."
- color = "#664300"
+ color = "#4C3100"
strength = 50
- glass_icon_state = "aleglass"
- glass_name = "glass of ale"
+ glass_name = "ale"
glass_desc = "A freezing pint of delicious ale"
- glass_center_of_mass = list("x"=16, "y"=8)
/datum/reagent/ethanol/beer
name = "Beer"
id = "beer"
description = "An alcoholic beverage made from malted grains, hops, yeast, and water."
- color = "#664300"
+ color = "#FFD300"
strength = 50
nutriment_factor = 1
- glass_icon_state = "beerglass"
- glass_name = "glass of beer"
+ glass_name = "beer"
glass_desc = "A freezing pint of beer"
- glass_center_of_mass = list("x"=16, "y"=8)
/datum/reagent/ethanol/beer/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
..()
@@ -997,10 +1046,8 @@
color = "#0000CD"
strength = 15
- glass_icon_state = "curacaoglass"
- glass_name = "glass of blue curacao"
+ glass_name = "blue curacao"
glass_desc = "Exotically blue, fruity drink, distilled from oranges."
- glass_center_of_mass = list("x"=16, "y"=5)
/datum/reagent/ethanol/cognac
name = "Cognac"
@@ -1009,22 +1056,18 @@
color = "#AB3C05"
strength = 15
- glass_icon_state = "cognacglass"
- glass_name = "glass of cognac"
+ glass_name = "cognac"
glass_desc = "Damn, you feel like some kind of French aristocrat just by holding this."
- glass_center_of_mass = list("x"=16, "y"=6)
/datum/reagent/ethanol/deadrum
name = "Deadrum"
id = "deadrum"
description = "Popular with the sailors. Not very popular with everyone else."
- color = "#664300"
+ color = "#ECB633"
strength = 50
- glass_icon_state = "rumglass"
- glass_name = "glass of rum"
+ glass_name = "rum"
glass_desc = "Now you want to Pray for a pirate suit, don't you?"
- glass_center_of_mass = list("x"=16, "y"=12)
/datum/reagent/ethanol/deadrum/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
..()
@@ -1036,13 +1079,11 @@
name = "Gin"
id = "gin"
description = "It's gin. In space. I say, good sir."
- color = "#664300"
+ color = "#0064C6"
strength = 50
- glass_icon_state = "ginvodkaglass"
- glass_name = "glass of gin"
+ glass_name = "gin"
glass_desc = "A crystal clear glass of Griffeater gin."
- glass_center_of_mass = list("x"=16, "y"=12)
//Base type for alchoholic drinks containing coffee
/datum/reagent/ethanol/coffee
@@ -1080,13 +1121,11 @@
name = "Kahlua"
id = "kahlua"
description = "A widely known, Mexican coffee-flavoured liqueur. In production since 1936!"
- color = "#664300"
+ color = "#4C3100"
strength = 15
- glass_icon_state = "kahluaglass"
- glass_name = "glass of RR coffee liquor"
+ glass_name = "RR coffee liquor"
glass_desc = "DAMN, THIS THING LOOKS ROBUST"
- glass_center_of_mass = list("x"=15, "y"=7)
/datum/reagent/ethanol/melonliquor
name = "Melon Liquor"
@@ -1095,34 +1134,28 @@
color = "#138808" // rgb: 19, 136, 8
strength = 50
- glass_icon_state = "emeraldglass"
- glass_name = "glass of melon liquor"
+ glass_name = "melon liquor"
glass_desc = "A relatively sweet and fruity 46 proof liquor."
- glass_center_of_mass = list("x"=16, "y"=5)
/datum/reagent/ethanol/rum
name = "Rum"
id = "rum"
description = "Yohoho and all that."
- color = "#664300"
+ color = "#ECB633"
strength = 15
- glass_icon_state = "rumglass"
- glass_name = "glass of rum"
+ glass_name = "rum"
glass_desc = "Now you want to Pray for a pirate suit, don't you?"
- glass_center_of_mass = list("x"=16, "y"=12)
/datum/reagent/ethanol/sake
name = "Sake"
id = "sake"
description = "Anime's favorite drink."
- color = "#664300"
+ color = "#DDDDDD"
strength = 25
- glass_icon_state = "ginvodkaglass"
- glass_name = "glass of sake"
+ glass_name = "sake"
glass_desc = "A glass of sake."
- glass_center_of_mass = list("x"=16, "y"=12)
/datum/reagent/ethanol/tequila
name = "Tequila"
@@ -1131,10 +1164,8 @@
color = "#FFFF91"
strength = 25
- glass_icon_state = "tequillaglass"
- glass_name = "glass of Tequila"
+ glass_name = "Tequilla"
glass_desc = "Now all that's missing is the weird colored shades!"
- glass_center_of_mass = list("x"=16, "y"=12)
/datum/reagent/ethanol/thirteenloko
name = "Thirteen Loko"
@@ -1144,8 +1175,7 @@
strength = 25
nutriment_factor = 1
- glass_icon_state = "thirteen_loko_glass"
- glass_name = "glass of Thirteen Loko"
+ glass_name = "Thirteen Loko"
glass_desc = "This is a glass of Thirteen Loko, it appears to be of the highest quality. The drink, not the glass."
/datum/reagent/ethanol/thirteenloko/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
@@ -1164,10 +1194,8 @@
color = "#91FF91" // rgb: 145, 255, 145
strength = 15
- glass_icon_state = "vermouthglass"
- glass_name = "glass of vermouth"
+ glass_name = "vermouth"
glass_desc = "You wonder why you're even drinking this straight."
- glass_center_of_mass = list("x"=16, "y"=12)
/datum/reagent/ethanol/vodka
name = "Vodka"
@@ -1176,10 +1204,8 @@
color = "#0064C8" // rgb: 0, 100, 200
strength = 15
- glass_icon_state = "ginvodkaglass"
- glass_name = "glass of vodka"
+ glass_name = "vodka"
glass_desc = "The glass contain wodka. Xynta."
- glass_center_of_mass = list("x"=16, "y"=12)
/datum/reagent/ethanol/vodka/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
..()
@@ -1189,13 +1215,11 @@
name = "Whiskey"
id = "whiskey"
description = "A superb and well-aged single-malt whiskey. Damn."
- color = "#664300"
+ color = "#4C3100"
strength = 25
- glass_icon_state = "whiskeyglass"
- glass_name = "glass of whiskey"
+ glass_name = "whiskey"
glass_desc = "The silky, smokey whiskey goodness inside the glass makes the drink look very classy."
- glass_center_of_mass = list("x"=16, "y"=12)
/datum/reagent/ethanol/wine
name = "Wine"
@@ -1204,10 +1228,8 @@
color = "#7E4043" // rgb: 126, 64, 67
strength = 15
- glass_icon_state = "wineglass"
- glass_name = "glass of wine"
+ glass_name = "wine"
glass_desc = "A very classy looking drink."
- glass_center_of_mass = list("x"=15, "y"=7)
// Cocktails
@@ -1219,73 +1241,61 @@
color = "#365000"
strength = 30
- glass_icon_state = "acidspitglass"
- glass_name = "glass of Acid Spit"
+ glass_name = "Acid Spit"
glass_desc = "A drink from the company archives. Made from live aliens."
- glass_center_of_mass = list("x"=16, "y"=7)
/datum/reagent/ethanol/alliescocktail
name = "Allies Cocktail"
id = "alliescocktail"
description = "A drink made from your allies, not as sweet as when made from your enemies."
- color = "#664300"
+ color = "#D8AC45"
strength = 25
- glass_icon_state = "alliescocktail"
- glass_name = "glass of Allies cocktail"
+ glass_name = "Allies cocktail"
glass_desc = "A drink made from your allies."
- glass_center_of_mass = list("x"=17, "y"=8)
/datum/reagent/ethanol/aloe
name = "Aloe"
id = "aloe"
description = "So very, very, very good."
- color = "#664300"
+ color = "#B7EA75"
strength = 15
- glass_icon_state = "aloe"
- glass_name = "glass of Aloe"
+ glass_name = "Aloe"
glass_desc = "Very, very, very good."
- glass_center_of_mass = list("x"=17, "y"=8)
/datum/reagent/ethanol/amasec
name = "Amasec"
id = "amasec"
description = "Official drink of the Gun Club!"
reagent_state = LIQUID
- color = "#664300"
+ color = "#FF975D"
strength = 25
- glass_icon_state = "amasecglass"
- glass_name = "glass of Amasec"
+ glass_name = "Amasec"
glass_desc = "Always handy before COMBAT!!!"
- glass_center_of_mass = list("x"=16, "y"=9)
/datum/reagent/ethanol/andalusia
name = "Andalusia"
id = "andalusia"
description = "A nice, strangely named drink."
- color = "#664300"
+ color = "#F4EA4A"
strength = 15
- glass_icon_state = "andalusia"
- glass_name = "glass of Andalusia"
+ glass_name = "Andalusia"
glass_desc = "A nice, strange named drink."
- glass_center_of_mass = list("x"=16, "y"=9)
/datum/reagent/ethanol/antifreeze
name = "Anti-freeze"
id = "antifreeze"
description = "Ultimate refreshment."
- color = "#664300"
+ color = "#56DEEA"
strength = 12
adj_temp = 20
targ_temp = 330
- glass_icon_state = "antifreeze"
- glass_name = "glass of Anti-freeze"
+ glass_name = "Anti-freeze"
glass_desc = "The ultimate refreshment."
- glass_center_of_mass = list("x"=16, "y"=8)
/datum/reagent/ethanol/atomicbomb
name = "Atomic Bomb"
@@ -1296,20 +1306,17 @@
strength = 10
druggy = 50
- glass_icon_state = "atomicbombglass"
- glass_name = "glass of Atomic Bomb"
+ glass_name = "Atomic Bomb"
glass_desc = "We cannot take legal responsibility for your actions after imbibing."
- glass_center_of_mass = list("x"=15, "y"=7)
/datum/reagent/ethanol/coffee/b52
name = "B-52"
id = "b52"
description = "Coffee, Irish Cream, and cognac. You will get bombed."
- color = "#664300"
+ color = "#997650"
strength = 12
- glass_icon_state = "b52glass"
- glass_name = "glass of B-52"
+ glass_name = "B-52"
glass_desc = "Kahlua, Irish cream, and congac. You will get bombed."
/datum/reagent/ethanol/bahama_mama
@@ -1319,10 +1326,8 @@
color = "#FF7F3B"
strength = 25
- glass_icon_state = "bahama_mama"
- glass_name = "glass of Bahama Mama"
+ glass_name = "Bahama Mama"
glass_desc = "Tropical cocktail"
- glass_center_of_mass = list("x"=16, "y"=5)
/datum/reagent/ethanol/bananahonk
name = "Banana Mama"
@@ -1332,35 +1337,29 @@
color = "#FFFF91"
strength = 12
- glass_icon_state = "bananahonkglass"
- glass_name = "glass of Banana Honk"
+ glass_name = "Banana Honk"
glass_desc = "A drink from Banana Heaven."
- glass_center_of_mass = list("x"=16, "y"=8)
/datum/reagent/ethanol/barefoot
name = "Barefoot"
id = "barefoot"
description = "Barefoot and pregnant"
- color = "#664300"
+ color = "#FFCDEA"
strength = 30
- glass_icon_state = "b&p"
- glass_name = "glass of Barefoot"
+ glass_name = "Barefoot"
glass_desc = "Barefoot and pregnant"
- glass_center_of_mass = list("x"=17, "y"=8)
/datum/reagent/ethanol/beepsky_smash
name = "Beepsky Smash"
id = "beepskysmash"
description = "Deny drinking this and prepare for THE LAW."
reagent_state = LIQUID
- color = "#664300"
+ color = "#404040"
strength = 12
- glass_icon_state = "beepskysmashglass"
glass_name = "Beepsky Smash"
glass_desc = "Heavy, hot and strong. Just like the Iron fist of the LAW."
- glass_center_of_mass = list("x"=18, "y"=10)
/datum/reagent/ethanol/beepsky_smash/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
..()
@@ -1374,8 +1373,7 @@
strength = 50
nutriment_factor = 2
- glass_icon_state = "glass_brown"
- glass_name = "glass of bilk"
+ glass_name = "bilk"
glass_desc = "A brew of milk and beer. For those alcoholics who fear osteoporosis."
/datum/reagent/ethanol/black_russian
@@ -1385,20 +1383,17 @@
color = "#360000"
strength = 15
- glass_icon_state = "blackrussianglass"
- glass_name = "glass of Black Russian"
+ glass_name = "Black Russian"
glass_desc = "For the lactose-intolerant. Still as classy as a White Russian."
- glass_center_of_mass = list("x"=16, "y"=9)
/datum/reagent/ethanol/bloody_mary
name = "Bloody Mary"
id = "bloodymary"
description = "A strange yet pleasurable mixture made of vodka, tomato and lime juice. Or at least you THINK the red stuff is tomato juice."
- color = "#664300"
+ color = "#B40000"
strength = 15
- glass_icon_state = "bloodymaryglass"
- glass_name = "glass of Bloody Mary"
+ glass_name = "Bloody Mary"
glass_desc = "Tomato juice, mixed with Vodka and a lil' bit of lime. Tastes like liquid murder."
/datum/reagent/ethanol/booger
@@ -1408,21 +1403,18 @@
color = "#8CFF8C"
strength = 30
- glass_icon_state = "booger"
- glass_name = "glass of Booger"
+ glass_name = "Booger"
glass_desc = "Ewww..."
/datum/reagent/ethanol/coffee/brave_bull
name = "Brave Bull"
id = "bravebull"
description = "It's just as effective as Dutch-Courage!"
- color = "#664300"
+ color = "#4C3100"
strength = 15
- glass_icon_state = "bravebullglass"
- glass_name = "glass of Brave Bull"
+ glass_name = "Brave Bull"
glass_desc = "Tequilla and coffee liquor, brought together in a mouthwatering mixture. Drink up."
- glass_center_of_mass = list("x"=15, "y"=8)
/datum/reagent/ethanol/changelingsting
name = "Changeling Sting"
@@ -1431,21 +1423,18 @@
color = "#2E6671"
strength = 10
- glass_icon_state = "changelingsting"
- glass_name = "glass of Changeling Sting"
+ glass_name = "Changeling Sting"
glass_desc = "A stingy drink."
/datum/reagent/ethanol/martini
name = "Classic Martini"
id = "martini"
description = "Vermouth with Gin. Not quite how 007 enjoyed it, but still delicious."
- color = "#664300"
+ color = "#0064C8"
strength = 25
- glass_icon_state = "martiniglass"
- glass_name = "glass of classic martini"
+ glass_name = "classic martini"
glass_desc = "Damn, the bartender even stirred it, not shook it."
- glass_center_of_mass = list("x"=17, "y"=8)
/datum/reagent/ethanol/cuba_libre
name = "Cuba Libre"
@@ -1454,10 +1443,8 @@
color = "#3E1B00"
strength = 30
- glass_icon_state = "cubalibreglass"
- glass_name = "glass of Cuba Libre"
+ glass_name = "Cuba Libre"
glass_desc = "A classic mix of rum and cola."
- glass_center_of_mass = list("x"=16, "y"=8)
/datum/reagent/ethanol/demonsblood
name = "Demons Blood"
@@ -1466,10 +1453,8 @@
color = "#820000"
strength = 15
- glass_icon_state = "demonsblood"
- glass_name = "glass of Demons' Blood"
+ glass_name = "Demons' Blood"
glass_desc = "Just looking at this thing makes the hair at the back of your neck stand up."
- glass_center_of_mass = list("x"=16, "y"=2)
/datum/reagent/ethanol/devilskiss
name = "Devils Kiss"
@@ -1478,10 +1463,8 @@
color = "#A68310"
strength = 15
- glass_icon_state = "devilskiss"
- glass_name = "glass of Devil's Kiss"
+ glass_name = "Devil's Kiss"
glass_desc = "Creepy time!"
- glass_center_of_mass = list("x"=16, "y"=8)
/datum/reagent/ethanol/driestmartini
name = "Driest Martini"
@@ -1491,33 +1474,29 @@
color = "#2E6671"
strength = 12
- glass_icon_state = "driestmartiniglass"
- glass_name = "glass of Driest Martini"
+ glass_name = "Driest Martini"
glass_desc = "Only for the experienced. You think you see sand floating in the glass."
- glass_center_of_mass = list("x"=17, "y"=8)
/datum/reagent/ethanol/ginfizz
name = "Gin Fizz"
id = "ginfizz"
description = "Refreshingly lemony, deliciously dry."
- color = "#664300"
+ color = "#FFFFAE"
strength = 30
- glass_icon_state = "ginfizzglass"
- glass_name = "glass of gin fizz"
+ glass_name = "gin fizz"
glass_desc = "Refreshingly lemony, deliciously dry."
- glass_center_of_mass = list("x"=16, "y"=7)
/datum/reagent/ethanol/grog
name = "Grog"
id = "grog"
description = "Watered-down rum, pirate approved!"
reagent_state = LIQUID
- color = "#664300"
+ color = "#FFBB00"
strength = 100
- glass_icon_state = "grogglass"
- glass_name = "glass of grog"
+
+ glass_name = "grog"
glass_desc = "A fine and cepa drink for Space."
/datum/reagent/ethanol/erikasurprise
@@ -1527,87 +1506,76 @@
color = "#2E6671"
strength = 15
- glass_icon_state = "erikasurprise"
- glass_name = "glass of Erika Surprise"
+ glass_name = "Erika Surprise"
glass_desc = "The surprise is, it's green!"
- glass_center_of_mass = list("x"=16, "y"=9)
/datum/reagent/ethanol/gargle_blaster
name = "Pan-Galactic Gargle Blaster"
id = "gargleblaster"
description = "Whoah, this stuff looks volatile!"
reagent_state = LIQUID
- color = "#664300"
+ color = "#7F00FF"
strength = 10
- glass_icon_state = "gargleblasterglass"
- glass_name = "glass of Pan-Galactic Gargle Blaster"
+ glass_name = "Pan-Galactic Gargle Blaster"
glass_desc = "Does... does this mean that Arthur and Ford are on the station? Oh joy."
- glass_center_of_mass = list("x"=17, "y"=6)
/datum/reagent/ethanol/gintonic
name = "Gin and Tonic"
id = "gintonic"
description = "An all time classic, mild cocktail."
- color = "#664300"
+ color = "#0064C8"
strength = 50
- glass_icon_state = "gintonicglass"
- glass_name = "glass of gin and tonic"
+ glass_name = "gin and tonic"
glass_desc = "A mild but still great cocktail. Drink up, like a true Englishman."
- glass_center_of_mass = list("x"=16, "y"=7)
/datum/reagent/ethanol/goldschlager
name = "Goldschlager"
id = "goldschlager"
description = "100 proof cinnamon schnapps, made for alcoholic teen girls on spring break."
- color = "#664300"
+ color = "#F4E46D"
strength = 15
- glass_icon_state = "ginvodkaglass"
- glass_name = "glass of Goldschlager"
+ glass_name = "Goldschlager"
glass_desc = "100 proof that teen girls will drink anything with gold in it."
- glass_center_of_mass = list("x"=16, "y"=12)
/datum/reagent/ethanol/hippies_delight
name = "Hippies' Delight"
id = "hippiesdelight"
description = "You just don't get it maaaan."
reagent_state = LIQUID
- color = "#664300"
+ color = "#FF88FF"
strength = 15
druggy = 50
- glass_icon_state = "hippiesdelightglass"
- glass_name = "glass of Hippie's Delight"
+ glass_name = "Hippie's Delight"
glass_desc = "A drink enjoyed by people during the 1960's."
- glass_center_of_mass = list("x"=16, "y"=8)
/datum/reagent/ethanol/hooch
name = "Hooch"
id = "hooch"
description = "Either someone's failure at cocktail making or attempt in alchohol production. In any case, do you really want to drink that?"
- color = "#664300"
+ color = "#4C3100"
strength = 25
toxicity = 2
- glass_icon_state = "glass_brown2"
- glass_name = "glass of Hooch"
+ glass_name = "Hooch"
glass_desc = "You've really hit rock bottom now... your liver packed its bags and left last night."
/datum/reagent/ethanol/iced_beer
name = "Iced Beer"
id = "iced_beer"
description = "A beer which is so cold the air around it freezes."
- color = "#664300"
+
+ color = "#FFD300"
strength = 50
adj_temp = -20
targ_temp = 270
- glass_icon_state = "iced_beerglass"
- glass_name = "glass of iced beer"
+ glass_name = "iced beer"
glass_desc = "A beer so frosty, the air around it freezes."
- glass_center_of_mass = list("x"=16, "y"=7)
+ glass_special = list(DRINK_ICE)
/datum/reagent/ethanol/irishcarbomb
name = "Irish Car Bomb"
@@ -1616,81 +1584,68 @@
color = "#2E6671"
strength = 15
- glass_icon_state = "irishcarbomb"
- glass_name = "glass of Irish Car Bomb"
+ glass_name = "Irish Car Bomb"
glass_desc = "An irish car bomb."
- glass_center_of_mass = list("x"=16, "y"=8)
/datum/reagent/ethanol/coffee/irishcoffee
name = "Irish Coffee"
id = "irishcoffee"
description = "Coffee, and alcohol. More fun than a Mimosa to drink in the morning."
- color = "#664300"
+ color = "#4C3100"
strength = 15
- glass_icon_state = "irishcoffeeglass"
- glass_name = "glass of Irish coffee"
+ glass_name = "Irish coffee"
glass_desc = "Coffee and alcohol. More fun than a Mimosa to drink in the morning."
- glass_center_of_mass = list("x"=15, "y"=10)
/datum/reagent/ethanol/irish_cream
name = "Irish Cream"
id = "irishcream"
description = "Whiskey-imbued cream, what else would you expect from the Irish."
- color = "#664300"
+ color = "#DDDD9A3"
strength = 25
- glass_icon_state = "irishcreamglass"
- glass_name = "glass of Irish cream"
+ glass_name = "Irish cream"
glass_desc = "It's cream, mixed with whiskey. What else would you expect from the Irish?"
- glass_center_of_mass = list("x"=16, "y"=9)
/datum/reagent/ethanol/longislandicedtea
name = "Long Island Iced Tea"
id = "longislandicedtea"
description = "The liquor cabinet, brought together in a delicious mix. Intended for middle-aged alcoholic women only."
- color = "#664300"
+ color = "#895B1F"
strength = 12
- glass_icon_state = "longislandicedteaglass"
- glass_name = "glass of Long Island iced tea"
+ glass_name = "Long Island iced tea"
glass_desc = "The liquor cabinet, brought together in a delicious mix. Intended for middle-aged alcoholic women only."
- glass_center_of_mass = list("x"=16, "y"=8)
/datum/reagent/ethanol/manhattan
name = "Manhattan"
id = "manhattan"
description = "The Detective's undercover drink of choice. He never could stomach gin..."
- color = "#664300"
+ color = "#C13600"
strength = 15
- glass_icon_state = "manhattanglass"
- glass_name = "glass of Manhattan"
+ glass_name = "Manhattan"
glass_desc = "The Detective's undercover drink of choice. He never could stomach gin..."
- glass_center_of_mass = list("x"=17, "y"=8)
/datum/reagent/ethanol/manhattan_proj
name = "Manhattan Project"
id = "manhattan_proj"
description = "A scientist's drink of choice, for pondering ways to blow up the station."
- color = "#664300"
+ color = "#C15D00"
strength = 10
druggy = 30
- glass_icon_state = "proj_manhattanglass"
- glass_name = "glass of Manhattan Project"
+ glass_name = "Manhattan Project"
glass_desc = "A scienitst drink of choice, for thinking how to blow up the station."
- glass_center_of_mass = list("x"=17, "y"=8)
/datum/reagent/ethanol/manly_dorf
name = "The Manly Dorf"
id = "manlydorf"
description = "Beer and Ale, brought together in a delicious mix. Intended for true men only."
- color = "#664300"
+ color = "#4C3100"
strength = 25
- glass_icon_state = "manlydorfglass"
- glass_name = "glass of The Manly Dorf"
+ glass_name = "The Manly Dorf"
glass_desc = "A manly concotion made from Ale and Beer. Intended for true men only."
/datum/reagent/ethanol/margarita
@@ -1700,34 +1655,29 @@
color = "#8CFF8C"
strength = 15
- glass_icon_state = "margaritaglass"
- glass_name = "glass of margarita"
+ glass_name = "margarita"
glass_desc = "On the rocks with salt on the rim. Arriba~!"
- glass_center_of_mass = list("x"=16, "y"=8)
/datum/reagent/ethanol/mead
name = "Mead"
id = "mead"
description = "A Viking's drink, though a cheap one."
reagent_state = LIQUID
- color = "#664300"
+ color = "#FFBB00"
strength = 30
nutriment_factor = 1
- glass_icon_state = "meadglass"
- glass_name = "glass of mead"
+ glass_name = "mead"
glass_desc = "A Viking's beverage, though a cheap one."
- glass_center_of_mass = list("x"=17, "y"=10)
/datum/reagent/ethanol/moonshine
name = "Moonshine"
id = "moonshine"
description = "You've really hit rock bottom now... your liver packed its bags and left last night."
- color = "#664300"
+ color = "#0064C8"
strength = 12
- glass_icon_state = "glass_clear"
- glass_name = "glass of moonshine"
+ glass_name = "moonshine"
glass_desc = "You've really hit rock bottom now... your liver packed its bags and left last night."
/datum/reagent/ethanol/neurotoxin
@@ -1738,10 +1688,10 @@
color = "#2E2E61"
strength = 10
- glass_icon_state = "neurotoxinglass"
- glass_name = "glass of Neurotoxin"
+ glass_name = "Neurotoxin"
glass_desc = "A drink that is guaranteed to knock you silly."
- glass_center_of_mass = list("x"=16, "y"=8)
+ glass_icon = DRINK_ICON_NOISY
+ glass_special = list("neuroright")
/datum/reagent/ethanol/neurotoxin/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
..()
@@ -1754,10 +1704,8 @@
color = "#585840"
strength = 30
- glass_icon_state = "patronglass"
- glass_name = "glass of Patron"
+ glass_name = "Patron"
glass_desc = "Drinking patron in the bar, with all the subpar ladies."
- glass_center_of_mass = list("x"=7, "y"=8)
/datum/reagent/ethanol/pwine
name = "Poison Wine"
@@ -1768,10 +1716,8 @@
druggy = 50
halluci = 10
- glass_icon_state = "pwineglass"
- glass_name = "glass of ???"
+ glass_name = "???"
glass_desc = "A black ichor with an oily purple sheer on top. Are you sure you should drink this?"
- glass_center_of_mass = list("x"=16, "y"=5)
/datum/reagent/ethanol/pwine/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
..()
@@ -1793,24 +1739,20 @@
color = "#C73C00"
strength = 30
- glass_icon_state = "red_meadglass"
- glass_name = "glass of red mead"
+ glass_name = "red mead"
glass_desc = "A true Viking's beverage, though its color is strange."
- glass_center_of_mass = list("x"=17, "y"=10)
/datum/reagent/ethanol/sbiten
name = "Sbiten"
id = "sbiten"
description = "A spicy Vodka! Might be a little hot for the little guys!"
- color = "#664300"
+ color = "#FFA371"
strength = 15
adj_temp = 50
targ_temp = 360
- glass_icon_state = "sbitenglass"
- glass_name = "glass of Sbiten"
+ glass_name = "Sbiten"
glass_desc = "A spicy mix of Vodka and Spice. Very hot."
- glass_center_of_mass = list("x"=17, "y"=8)
/datum/reagent/ethanol/screwdrivercocktail
name = "Screwdriver"
@@ -1819,23 +1761,19 @@
color = "#A68310"
strength = 15
- glass_icon_state = "screwdriverglass"
- glass_name = "glass of Screwdriver"
+ glass_name = "Screwdriver"
glass_desc = "A simple, yet superb mixture of Vodka and orange juice. Just the thing for the tired engineer."
- glass_center_of_mass = list("x"=15, "y"=10)
/datum/reagent/ethanol/silencer
name = "Silencer"
id = "silencer"
description = "A drink from Mime Heaven."
nutriment_factor = 1
- color = "#664300"
+ color = "#FFFFFF"
strength = 12
- glass_icon_state = "silencerglass"
- glass_name = "glass of Silencer"
+ glass_name = "Silencer"
glass_desc = "A drink from mime Heaven."
- glass_center_of_mass = list("x"=16, "y"=9)
/datum/reagent/ethanol/singulo
name = "Singulo"
@@ -1844,10 +1782,8 @@
color = "#2E6671"
strength = 10
- glass_icon_state = "singulo"
- glass_name = "glass of Singulo"
+ glass_name = "Singulo"
glass_desc = "A blue-space beverage."
- glass_center_of_mass = list("x"=17, "y"=4)
/datum/reagent/ethanol/snowwhite
name = "Snow White"
@@ -1856,10 +1792,8 @@
color = "#FFFFFF"
strength = 30
- glass_icon_state = "snowwhite"
- glass_name = "glass of Snow White"
+ glass_name = "Snow White"
glass_desc = "A cold refreshment."
- glass_center_of_mass = list("x"=16, "y"=8)
/datum/reagent/ethanol/suidream
name = "Sui Dream"
@@ -1868,10 +1802,8 @@
color = "#00A86B"
strength = 100
- glass_icon_state = "sdreamglass"
- glass_name = "glass of Sui Dream"
+ glass_name = "Sui Dream"
glass_desc = "A froofy, fruity, and sweet mixed drink. Understanding the name only brings shame."
- glass_center_of_mass = list("x"=16, "y"=5)
/datum/reagent/ethanol/syndicatebomb
name = "Syndicate Bomb"
@@ -1880,10 +1812,8 @@
color = "#2E6671"
strength = 10
- glass_icon_state = "syndicatebomb"
- glass_name = "glass of Syndicate Bomb"
+ glass_name = "Syndicate Bomb"
glass_desc = "Tastes like terrorism!"
- glass_center_of_mass = list("x"=16, "y"=4)
/datum/reagent/ethanol/tequilla_sunrise
name = "Tequila Sunrise"
@@ -1892,8 +1822,7 @@
color = "#FFE48C"
strength = 25
- glass_icon_state = "tequillasunriseglass"
- glass_name = "glass of Tequila Sunrise"
+ glass_name = "Tequilla Sunrise"
glass_desc = "Oh great, now you feel nostalgic about sunrises back on Terra..."
/datum/reagent/ethanol/threemileisland
@@ -1904,36 +1833,32 @@
strength = 10
druggy = 50
- glass_icon_state = "threemileislandglass"
- glass_name = "glass of Three Mile Island iced tea"
+ glass_name = "Three Mile Island iced tea"
glass_desc = "A glass of this is sure to prevent a meltdown."
- glass_center_of_mass = list("x"=16, "y"=2)
/datum/reagent/ethanol/toxins_special
name = "Toxins Special"
id = "phoronspecial"
description = "This thing is ON FIRE! CALL THE DAMN SHUTTLE!"
reagent_state = LIQUID
- color = "#664300"
+ color = "#7F00FF"
strength = 10
adj_temp = 15
targ_temp = 330
- glass_icon_state = "toxinsspecialglass"
- glass_name = "glass of Toxins Special"
+ glass_name = "Toxins Special"
glass_desc = "Whoah, this thing is on FIRE"
/datum/reagent/ethanol/vodkamartini
name = "Vodka Martini"
id = "vodkamartini"
description = "Vodka with Gin. Not quite how 007 enjoyed it, but still delicious."
- color = "#664300"
+ color = "#0064C8"
strength = 12
- glass_icon_state = "martiniglass"
- glass_name = "glass of vodka martini"
+ glass_name = "vodka martini"
glass_desc ="A bastardisation of the classic martini. Still great."
- glass_center_of_mass = list("x"=17, "y"=8)
+
/datum/reagent/ethanol/vodkatonic
name = "Vodka and Tonic"
@@ -1942,10 +1867,9 @@
color = "#0064C8" // rgb: 0, 100, 200
strength = 15
- glass_icon_state = "vodkatonicglass"
- glass_name = "glass of vodka and tonic"
+ glass_name = "vodka and tonic"
glass_desc = "For when a gin and tonic isn't Russian enough."
- glass_center_of_mass = list("x"=16, "y"=7)
+
/datum/reagent/ethanol/white_russian
name = "White Russian"
@@ -1954,10 +1878,9 @@
color = "#A68340"
strength = 15
- glass_icon_state = "whiterussianglass"
- glass_name = "glass of White Russian"
+ glass_name = "White Russian"
glass_desc = "A very nice looking drink. But that's just, like, your opinion, man."
- glass_center_of_mass = list("x"=16, "y"=9)
+
/datum/reagent/ethanol/whiskey_cola
name = "Whiskey Cola"
@@ -1966,22 +1889,19 @@
color = "#3E1B00"
strength = 25
- glass_icon_state = "whiskeycolaglass"
- glass_name = "glass of whiskey cola"
+ glass_name = "whiskey cola"
glass_desc = "An innocent-looking mixture of cola and Whiskey. Delicious."
- glass_center_of_mass = list("x"=16, "y"=9)
+
/datum/reagent/ethanol/whiskeysoda
name = "Whiskey Soda"
id = "whiskeysoda"
description = "For the more refined griffon."
- color = "#664300"
+ color = "#EAB300"
strength = 15
- glass_icon_state = "whiskeysodaglass2"
- glass_name = "glass of whiskey soda"
+ glass_name = "whiskey soda"
glass_desc = "Ultimate refreshment."
- glass_center_of_mass = list("x"=16, "y"=9)
/datum/reagent/ethanol/specialwhiskey // I have no idea what this is and where it comes from
name = "Special Blend Whiskey"
@@ -1990,7 +1910,5 @@
color = "#523600"
strength = 7
- glass_icon_state = "whiskeyglass"
- glass_name = "glass of special blend whiskey"
- glass_desc = "Just when you thought regular station whiskey was good... This silky, amber goodness has to come along and ruin everything. The smell of it singes your nostrils."
- glass_center_of_mass = list("x"=16, "y"=12)
+ glass_name = "special blend whiskey"
+ glass_desc = "Just when you thought regular station whiskey was good... This silky, amber goodness has to come along and ruin everything."
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm
index 08ec5df6c5..c81a94927c 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm
@@ -257,7 +257,7 @@
var/mob/living/carbon/human/H = M
var/obj/item/organ/internal/eyes/E = H.internal_organs_by_name[O_EYES]
if(istype(E))
- if(E.status & ORGAN_ROBOT)
+ if(E.robotic >= ORGAN_ROBOT)
return
if(E.damage > 0)
E.damage = max(E.damage - 5 * removed, 0)
@@ -277,7 +277,7 @@
if(ishuman(M))
var/mob/living/carbon/human/H = M
for(var/obj/item/organ/I in H.internal_organs)
- if(I.status & ORGAN_ROBOT)
+ if(I.robotic >= ORGAN_ROBOT)
continue
if(I.damage > 0) //Peridaxon heals only non-robotic organs
I.damage = max(I.damage - removed, 0)
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm
index 2e8c8990d0..92d09d1e18 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm
@@ -66,7 +66,7 @@
O.color = color
/datum/reagent/paint/touch_mob(var/mob/M)
- if(istype(M) && !istype(M, /mob/dead)) //painting ghosts: not allowed
+ if(istype(M) && !istype(M, /mob/observer)) //painting ghosts: not allowed
M.color = color //maybe someday change this to paint only clothes and exposed body parts for human mobs.
/datum/reagent/paint/get_data()
@@ -112,8 +112,7 @@
color = "#C8A5DC"
affects_dead = 1 //This can even heal dead people.
- glass_icon_state = "golden_cup"
- glass_name = "golden cup"
+ glass_name = "liquid gold"
glass_desc = "It's magic. We don't have to explain it."
/datum/reagent/adminordrazine/affect_touch(var/mob/living/carbon/M, var/alien, var/removed)
@@ -197,8 +196,7 @@
description = "An ashen-obsidian-water mix, this solution will alter certain sections of the brain's rationality."
color = "#E0E8EF"
- glass_icon_state = "glass_clear"
- glass_name = "glass of holy water"
+ glass_name = "holy water"
glass_desc = "An ashen-obsidian-water mix, this solution will alter certain sections of the brain's rationality."
/datum/reagent/water/holywater/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm
index 8a6d50ab29..884ee830f0 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm
@@ -331,13 +331,10 @@
id = "beer2"
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"
+ color = "#FFD300"
- glass_icon_state = "beerglass"
- glass_name = "glass of beer"
+ glass_name = "beer"
glass_desc = "A freezing pint of beer"
- glass_center_of_mass = list("x"=16, "y"=8)
-
/* Drugs */
/datum/reagent/space_drugs
@@ -474,40 +471,46 @@
color = "#13BC5E"
/datum/reagent/slimetoxin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
- if(H.species.name != "Slime")
- M << "Your flesh rapidly mutates! "
- H.set_species("Slime")
+ if(M.isSynthetic())
+ return
+
+ var/mob/living/carbon/human/H = M
+ if(istype(H) && (H.species.flags & NO_SCAN))
+ return
+
+ if(M.dna)
+ if(prob(removed * 0.1))
+ randmuti(M)
+ if(prob(98))
+ randmutb(M)
+ else
+ randmutg(M)
+ domutcheck(M, null)
+ M.UpdateAppearance()
+ M.apply_effect(16 * removed, IRRADIATE, 0)
/datum/reagent/aslimetoxin
- name = "Advanced Mutation Toxin"
- id = "amutationtoxin"
- description = "An advanced corruptive toxin produced by slimes."
+ name = "Docility Toxin"
+ id = "docilitytoxin"
+ description = "A corruptive toxin produced by slimes."
reagent_state = LIQUID
- color = "#13BC5E"
+ color = "#FF69B4"
/datum/reagent/aslimetoxin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) // TODO: check if there's similar code anywhere else
- if(M.transforming)
+ if(M.isSynthetic())
return
- M << "Your flesh rapidly mutates! "
- M.transforming = 1
- M.canmove = 0
- M.icon = null
- M.overlays.Cut()
- M.invisibility = 101
- for(var/obj/item/W in M)
- if(istype(W, /obj/item/weapon/implant)) //TODO: Carn. give implants a dropped() or something
- qdel(W)
- continue
- W.layer = initial(W.layer)
- W.loc = M.loc
- W.dropped(M)
- var/mob/living/carbon/slime/new_mob = new /mob/living/carbon/slime(M.loc)
- new_mob.a_intent = "hurt"
- new_mob.universal_speak = 1
- if(M.mind)
- M.mind.transfer_to(new_mob)
- else
- new_mob.key = M.key
- qdel(M)
+
+ var/mob/living/carbon/human/H = M
+ if(istype(H) && (H.species.flags & NO_SCAN))
+ return
+
+ if(M.dna)
+ if(prob(removed * 0.1))
+ randmuti(M)
+ if(prob(98))
+ randmutb(M)
+ else
+ randmutg(M)
+ domutcheck(M, null)
+ M.UpdateAppearance()
+ M.apply_effect(6 * removed, IRRADIATE, 0)
diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm
index 9f49e6c627..a2938bb56d 100644
--- a/code/modules/reagents/Chemistry-Recipes.dm
+++ b/code/modules/reagents/Chemistry-Recipes.dm
@@ -622,7 +622,7 @@
if(istype(M:glasses, /obj/item/clothing/glasses/sunglasses))
continue
- flick("e_flash", M.flash)
+ M.flash_eyes()
M.Weaken(15)
if(4 to 5)
@@ -630,7 +630,7 @@
if(istype(M:glasses, /obj/item/clothing/glasses/sunglasses))
continue
- flick("e_flash", M.flash)
+ M.flash_eyes()
M.Stun(5)
/datum/chemical_reaction/emp_pulse
@@ -998,332 +998,24 @@
/datum/chemical_reaction/slime
var/required = null
+//Slimed monkeys
/datum/chemical_reaction/slime/can_happen(var/datum/reagents/holder)
if(holder.my_atom && istype(holder.my_atom, required))
- var/obj/item/slime_extract/T = holder.my_atom
- if(T.Uses > 0)
- return ..()
+ return ..()
return 0
-/datum/chemical_reaction/slime/on_reaction(var/datum/reagents/holder)
- var/obj/item/slime_extract/T = holder.my_atom
- T.Uses--
- if(T.Uses <= 0)
- T.visible_message("\icon[T]\The [T]'s power is consumed in the reaction. ")
- T.name = "used slime extract"
- T.desc = "This extract has been used up."
-
-//Grey
-/datum/chemical_reaction/slime/spawn
- name = "Slime Spawn"
- id = "m_spawn"
- result = null
- required_reagents = list("phoron" = 1)
- result_amount = 1
- required = /obj/item/slime_extract/grey
-
-/datum/chemical_reaction/slime/spawn/on_reaction(var/datum/reagents/holder)
- holder.my_atom.visible_message("Infused with phoron, the core begins to quiver and grow, and soon a new baby slime emerges from it! ")
- var/mob/living/carbon/slime/S = new /mob/living/carbon/slime
- S.loc = get_turf(holder.my_atom)
- ..()
-
-/datum/chemical_reaction/slime/monkey
- name = "Slime Monkey"
- id = "m_monkey"
- result = null
- required_reagents = list("blood" = 1)
- result_amount = 1
- required = /obj/item/slime_extract/grey
-
-/datum/chemical_reaction/slime/monkey/on_reaction(var/datum/reagents/holder)
- for(var/i = 1, i <= 3, i++)
- var /obj/item/weapon/reagent_containers/food/snacks/monkeycube/M = new /obj/item/weapon/reagent_containers/food/snacks/monkeycube
- M.loc = get_turf(holder.my_atom)
- ..()
-
-//Green
-/datum/chemical_reaction/slime/mutate
- name = "Mutation Toxin"
- id = "mutationtoxin"
- result = "mutationtoxin"
- required_reagents = list("phoron" = 1)
- result_amount = 1
- required = /obj/item/slime_extract/green
-
-//Metal
-/datum/chemical_reaction/slime/metal
- name = "Slime Metal"
- id = "m_metal"
- result = null
- required_reagents = list("phoron" = 1)
- result_amount = 1
- required = /obj/item/slime_extract/metal
-
-/datum/chemical_reaction/slime/metal/on_reaction(var/datum/reagents/holder)
- var/obj/item/stack/material/steel/M = new /obj/item/stack/material/steel
- M.amount = 15
- M.loc = get_turf(holder.my_atom)
- var/obj/item/stack/material/plasteel/P = new /obj/item/stack/material/plasteel
- P.amount = 5
- P.loc = get_turf(holder.my_atom)
- ..()
-
-//Gold - removed
-/datum/chemical_reaction/slime/crit
- name = "Slime Crit"
- id = "m_tele"
- result = null
- required_reagents = list("phoron" = 1)
- result_amount = 1
- required = /obj/item/slime_extract/gold
- mix_message = "The slime core fizzles disappointingly."
-
-//Silver
-/datum/chemical_reaction/slime/bork
- name = "Slime Bork"
- id = "m_tele2"
- result = null
- required_reagents = list("phoron" = 1)
- result_amount = 1
- required = /obj/item/slime_extract/silver
-
-/datum/chemical_reaction/slime/bork/on_reaction(var/datum/reagents/holder)
- var/list/borks = typesof(/obj/item/weapon/reagent_containers/food/snacks) - /obj/item/weapon/reagent_containers/food/snacks
- playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
- for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null))
- if(M.eyecheck() <= 0)
- flick("e_flash", M.flash)
-
- for(var/i = 1, i <= 4 + rand(1,2), i++)
- var/chosen = pick(borks)
- var/obj/B = new chosen
- if(B)
- B.loc = get_turf(holder.my_atom)
- if(prob(50))
- for(var/j = 1, j <= rand(1, 3), j++)
- step(B, pick(NORTH, SOUTH, EAST, WEST))
- ..()
-
-//Blue
-/datum/chemical_reaction/slime/frost
- name = "Slime Frost Oil"
- id = "m_frostoil"
- result = "frostoil"
- required_reagents = list("phoron" = 1)
- result_amount = 10
- required = /obj/item/slime_extract/blue
-
-//Dark Blue
-/datum/chemical_reaction/slime/freeze
- name = "Slime Freeze"
- id = "m_freeze"
- result = null
- required_reagents = list("phoron" = 1)
- result_amount = 1
- required = /obj/item/slime_extract/darkblue
- mix_message = "The slime extract begins to vibrate violently!"
-
-/datum/chemical_reaction/slime/freeze/on_reaction(var/datum/reagents/holder)
- ..()
- sleep(50)
- playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
- for(var/mob/living/M in range (get_turf(holder.my_atom), 7))
- M.bodytemperature -= 140
- M << "You feel a chill! "
-
-//Orange
-/datum/chemical_reaction/slime/casp
- name = "Slime Capsaicin Oil"
- id = "m_capsaicinoil"
- result = "capsaicin"
- required_reagents = list("blood" = 1)
- result_amount = 10
- required = /obj/item/slime_extract/orange
-
-/datum/chemical_reaction/slime/fire
- name = "Slime fire"
- id = "m_fire"
- result = null
- required_reagents = list("phoron" = 1)
- result_amount = 1
- required = /obj/item/slime_extract/orange
- mix_message = "The slime extract begins to vibrate violently!"
-
-/datum/chemical_reaction/slime/fire/on_reaction(var/datum/reagents/holder)
- ..()
- sleep(50)
- var/turf/location = get_turf(holder.my_atom.loc)
- for(var/turf/simulated/floor/target_tile in range(0, location))
- target_tile.assume_gas("phoron", 25, 1400)
- spawn (0)
- target_tile.hotspot_expose(700, 400)
-
-//Yellow
-/datum/chemical_reaction/slime/overload
- name = "Slime EMP"
- id = "m_emp"
- result = null
- required_reagents = list("blood" = 1)
- result_amount = 1
- required = /obj/item/slime_extract/yellow
-
-/datum/chemical_reaction/slime/overload/on_reaction(var/datum/reagents/holder, var/created_volume)
- ..()
- empulse(get_turf(holder.my_atom), 3, 7)
-
-/datum/chemical_reaction/slime/cell
- name = "Slime Powercell"
- id = "m_cell"
- result = null
- required_reagents = list("phoron" = 1)
- result_amount = 1
- required = /obj/item/slime_extract/yellow
-
-/datum/chemical_reaction/slime/cell/on_reaction(var/datum/reagents/holder, var/created_volume)
- var/obj/item/weapon/cell/slime/P = new /obj/item/weapon/cell/slime
- P.loc = get_turf(holder.my_atom)
-
-/datum/chemical_reaction/slime/glow
- name = "Slime Glow"
- id = "m_glow"
- result = null
- required_reagents = list("water" = 1)
- result_amount = 1
- required = /obj/item/slime_extract/yellow
- mix_message = "The contents of the slime core harden and begin to emit a warm, bright light."
-
-/datum/chemical_reaction/slime/glow/on_reaction(var/datum/reagents/holder, var/created_volume)
- ..()
- var/obj/item/device/flashlight/slime/F = new /obj/item/device/flashlight/slime
- F.loc = get_turf(holder.my_atom)
-
-//Purple
-/datum/chemical_reaction/slime/psteroid
- name = "Slime Steroid"
- id = "m_steroid"
- result = null
- required_reagents = list("phoron" = 1)
- result_amount = 1
- required = /obj/item/slime_extract/purple
-
-/datum/chemical_reaction/slime/psteroid/on_reaction(var/datum/reagents/holder, var/created_volume)
- ..()
- var/obj/item/weapon/slimesteroid/P = new /obj/item/weapon/slimesteroid
- P.loc = get_turf(holder.my_atom)
-
-/datum/chemical_reaction/slime/jam
- name = "Slime Jam"
- id = "m_jam"
- result = "slimejelly"
- required_reagents = list("sugar" = 1)
- result_amount = 10
- required = /obj/item/slime_extract/purple
-
-//Dark Purple
-/datum/chemical_reaction/slime/plasma
- name = "Slime Plasma"
- id = "m_plasma"
- result = null
- required_reagents = list("phoron" = 1)
- result_amount = 1
- required = /obj/item/slime_extract/darkpurple
-
-/datum/chemical_reaction/slime/plasma/on_reaction(var/datum/reagents/holder)
- ..()
- var/obj/item/stack/material/phoron/P = new /obj/item/stack/material/phoron
- P.amount = 10
- P.loc = get_turf(holder.my_atom)
-
-//Red
-/datum/chemical_reaction/slime/glycerol
- name = "Slime Glycerol"
- id = "m_glycerol"
- result = "glycerol"
- required_reagents = list("phoron" = 1)
- result_amount = 8
- required = /obj/item/slime_extract/red
-
-/datum/chemical_reaction/slime/bloodlust
- name = "Bloodlust"
- id = "m_bloodlust"
- result = null
- required_reagents = list("blood" = 1)
- result_amount = 1
- required = /obj/item/slime_extract/red
-
-/datum/chemical_reaction/slime/bloodlust/on_reaction(var/datum/reagents/holder)
- ..()
- for(var/mob/living/carbon/slime/slime in viewers(get_turf(holder.my_atom), null))
- slime.rabid = 1
- slime.visible_message("The [slime] is driven into a frenzy! ")
-
-//Pink
-/datum/chemical_reaction/slime/ppotion
- name = "Slime Potion"
- id = "m_potion"
- result = null
- required_reagents = list("phoron" = 1)
- result_amount = 1
- required = /obj/item/slime_extract/pink
-
-/datum/chemical_reaction/slime/ppotion/on_reaction(var/datum/reagents/holder)
- ..()
- var/obj/item/weapon/slimepotion/P = new /obj/item/weapon/slimepotion
- P.loc = get_turf(holder.my_atom)
-
-//Black
-/datum/chemical_reaction/slime/mutate2
- name = "Advanced Mutation Toxin"
- id = "mutationtoxin2"
- result = "amutationtoxin"
- required_reagents = list("phoron" = 1)
- result_amount = 1
- required = /obj/item/slime_extract/black
-
-//Oil
-/datum/chemical_reaction/slime/explosion
- name = "Slime Explosion"
- id = "m_explosion"
- result = null
- required_reagents = list("phoron" = 1)
- result_amount = 1
- required = /obj/item/slime_extract/oil
- mix_message = "The slime extract begins to vibrate violently!"
-
-/datum/chemical_reaction/slime/explosion/on_reaction(var/datum/reagents/holder)
- ..()
- sleep(50)
- explosion(get_turf(holder.my_atom), 1, 3, 6)
-
-//Light Pink
-/datum/chemical_reaction/slime/potion2
- name = "Slime Potion 2"
- id = "m_potion2"
- result = null
- result_amount = 1
- required = /obj/item/slime_extract/lightpink
- required_reagents = list("phoron" = 1)
-
-/datum/chemical_reaction/slime/potion2/on_reaction(var/datum/reagents/holder)
- ..()
- var/obj/item/weapon/slimepotion2/P = new /obj/item/weapon/slimepotion2
- P.loc = get_turf(holder.my_atom)
-
-//Adamantine
/datum/chemical_reaction/slime/golem
- name = "Slime Golem"
- id = "m_golem"
+ name = "Prometheans"
+ id = "m_promethean"
result = null
- required_reagents = list("phoron" = 1)
+ required_reagents = list("mutationtoxin" = 1)
result_amount = 1
- required = /obj/item/slime_extract/adamantine
+ required = /obj/item/weapon/reagent_containers/food/snacks/monkeycube
/datum/chemical_reaction/slime/golem/on_reaction(var/datum/reagents/holder)
- ..()
- var/obj/effect/golemrune/Z = new /obj/effect/golemrune
- Z.loc = get_turf(holder.my_atom)
- Z.announce_to_ghosts()
+ var/location = get_turf(holder.my_atom)
+ new /obj/item/slime_cube(location)
+ qdel(holder.my_atom)
/* Food */
@@ -1639,8 +1331,8 @@
name = "Pan-Galactic Gargle Blaster"
id = "gargleblaster"
result = "gargleblaster"
- required_reagents = list("vodka" = 1, "gin" = 1, "whiskey" = 1, "cognac" = 1, "limejuice" = 1)
- result_amount = 5
+ required_reagents = list("vodka" = 2, "gin" = 1, "whiskey" = 1, "cognac" = 1, "limejuice" = 1)
+ result_amount = 6
/datum/chemical_reaction/brave_bull
name = "Brave Bull"
@@ -1807,7 +1499,7 @@
name = "Allies Cocktail"
id = "alliescocktail"
result = "alliescocktail"
- required_reagents = list("classicmartini" = 1, "vodka" = 1)
+ required_reagents = list("martini" = 1, "vodka" = 1)
result_amount = 2
/datum/chemical_reaction/demonsblood
diff --git a/code/modules/reagents/dispenser/supply.dm b/code/modules/reagents/dispenser/supply.dm
index f4a12d45d3..0487e8f401 100644
--- a/code/modules/reagents/dispenser/supply.dm
+++ b/code/modules/reagents/dispenser/supply.dm
@@ -145,7 +145,7 @@
group = "Reagents"
#define SEC_PACK(_tname, _type, _name, _cname, _cost, _access)\
- /datum/supply_packs/dispenser_cartridges{\
+ datum/supply_packs/dispenser_cartridges{\
_tname {\
name = _name ;\
containername = _cname ;\
@@ -157,7 +157,7 @@
}\
}
#define PACK(_tname, _type, _name, _cname, _cost)\
- /datum/supply_packs/dispenser_cartridges{\
+ datum/supply_packs/dispenser_cartridges{\
_tname {\
name = _name ;\
containername = _cname ;\
diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm
index f98d90b248..2c8c853ebc 100644
--- a/code/modules/reagents/reagent_containers.dm
+++ b/code/modules/reagents/reagent_containers.dm
@@ -25,11 +25,6 @@
/obj/item/weapon/reagent_containers/attack_self(mob/user as mob)
return
-/obj/item/weapon/reagent_containers/attack(mob/M as mob, mob/user as mob, def_zone)
- if(can_operate(M))//Checks if mob is lying down on table for surgery
- if(do_surgery(M, user, src))
- return
-
/obj/item/weapon/reagent_containers/afterattack(obj/target, mob/user, flag)
return
@@ -106,6 +101,7 @@
user << "\The [blocked] is in the way! "
return
+ user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) //puts a limit on how fast people can eat/drink things
self_feed_message(user)
reagents.trans_to_mob(user, issmall(user) ? ceil(amount_per_transfer_from_this/2) : amount_per_transfer_from_this, CHEM_INGEST)
feed_sound(user)
@@ -123,6 +119,7 @@
other_feed_message_start(user, target)
+ user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
if(!do_mob(user, target))
return
diff --git a/code/modules/reagents/reagent_containers/blood_pack.dm b/code/modules/reagents/reagent_containers/blood_pack.dm
index 4f4981b4d8..558e860913 100644
--- a/code/modules/reagents/reagent_containers/blood_pack.dm
+++ b/code/modules/reagents/reagent_containers/blood_pack.dm
@@ -2,7 +2,8 @@
name = "blood packs bags"
desc = "This box contains blood packs."
icon_state = "sterile"
- New()
+
+/obj/item/weapon/storage/box/bloodpacks/New()
..()
new /obj/item/weapon/reagent_containers/blood/empty(src)
new /obj/item/weapon/reagent_containers/blood/empty(src)
@@ -21,22 +22,22 @@
var/blood_type = null
- New()
- ..()
- if(blood_type != null)
- name = "BloodPack [blood_type]"
- reagents.add_reagent("blood", 200, list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=blood_type,"resistances"=null,"trace_chem"=null))
- update_icon()
-
- on_reagent_change()
+/obj/item/weapon/reagent_containers/blood/New()
+ ..()
+ if(blood_type != null)
+ name = "BloodPack [blood_type]"
+ reagents.add_reagent("blood", 200, list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=blood_type,"resistances"=null,"trace_chem"=null))
update_icon()
+/obj/item/weapon/reagent_containers/blood/on_reagent_change()
update_icon()
- var/percent = round((reagents.total_volume / volume) * 100)
- switch(percent)
- if(0 to 9) icon_state = "empty"
- if(10 to 50) icon_state = "half"
- if(51 to INFINITY) icon_state = "full"
+
+/obj/item/weapon/reagent_containers/blood/update_icon()
+ var/percent = round((reagents.total_volume / volume) * 100)
+ switch(percent)
+ if(0 to 9) icon_state = "empty"
+ if(10 to 50) icon_state = "half"
+ if(51 to INFINITY) icon_state = "full"
/obj/item/weapon/reagent_containers/blood/APlus
blood_type = "A+"
diff --git a/code/modules/reagents/reagent_containers/borghydro.dm b/code/modules/reagents/reagent_containers/borghydro.dm
index 2c8396deee..ce377c8709 100644
--- a/code/modules/reagents/reagent_containers/borghydro.dm
+++ b/code/modules/reagents/reagent_containers/borghydro.dm
@@ -13,15 +13,15 @@
var/charge_tick = 0
var/recharge_time = 5 //Time it takes for shots to recharge (in seconds)
- var/list/reagent_ids = list("tricordrazine", "inaprovaline", "spaceacillin")
+ var/list/reagent_ids = list("tricordrazine", "inaprovaline", "tramadol", "dexalin" ,"spaceacillin")
var/list/reagent_volumes = list()
var/list/reagent_names = list()
/obj/item/weapon/reagent_containers/borghypo/surgeon
- reagent_ids = list("bicaridine", "inaprovaline", "dexalin")
+ reagent_ids = list("tricordrazine", "inaprovaline", "tramadol", "dexalin" ,"spaceacillin")
/obj/item/weapon/reagent_containers/borghypo/crisis
- reagent_ids = list("tricordrazine", "inaprovaline", "tramadol")
+ reagent_ids = list("tricordrazine", "inaprovaline", "tramadol", "dexalin" ,"spaceacillin")
/obj/item/weapon/reagent_containers/borghypo/New()
..()
@@ -65,7 +65,7 @@
if(!affected)
user << "\The [H] is missing that limb! "
return
- else if(affected.status & ORGAN_ROBOT)
+ else if(affected.robotic >= ORGAN_ROBOT)
user << "You cannot inject a robotic limb. "
return
diff --git a/code/modules/reagents/reagent_containers/drinkingglass/drinkingglass.dm b/code/modules/reagents/reagent_containers/drinkingglass/drinkingglass.dm
new file mode 100644
index 0000000000..c367d8b09c
--- /dev/null
+++ b/code/modules/reagents/reagent_containers/drinkingglass/drinkingglass.dm
@@ -0,0 +1,146 @@
+#define DRINK_ICON_FILE 'icons/pdrink.dmi'
+
+/var/const/DRINK_FIZZ = "fizz"
+/var/const/DRINK_ICE = "ice"
+/var/const/DRINK_ICON_DEFAULT = ""
+/var/const/DRINK_ICON_NOISY = "_noise"
+
+/obj/item/weapon/reagent_containers/food/drinks/glass2
+ name = "glass" // Name when empty
+ var/base_name = "glass" // Name to put in front of drinks, i.e. "[base_name] of [contents]"
+ desc = "A generic drinking glass." // Description when empty
+ icon = DRINK_ICON_FILE
+ var/base_icon = "square" // Base icon name
+ volume = 30
+
+ var/list/filling_states // List of percentages full that have icons
+
+ var/list/extras = list() // List of extras. Two extras maximum
+
+ var/rim_pos
+
+ center_of_mass = list("x"=16, "y"=10)
+
+ amount_per_transfer_from_this = 5
+ possible_transfer_amounts = list(5,10,15,30)
+ flags = OPENCONTAINER
+
+/obj/item/weapon/reagent_containers/food/drinks/glass2/examine(mob/M as mob)
+ ..()
+
+ for(var/I in extras)
+ if(istype(I, /obj/item/weapon/glass_extra))
+ M << "There is \a [I] in \the [src]."
+ else if(istype(I, /obj/item/weapon/reagent_containers/food/snacks/fruit_slice))
+ M << "There is \a [I] on the rim."
+ else
+ M << "There is \a [I] somewhere on the glass. Somehow."
+
+ if(has_ice())
+ M << "There is some ice floating in the drink."
+
+ if(has_fizz())
+ M << "It is fizzing slightly."
+
+/obj/item/weapon/reagent_containers/food/drinks/glass2/proc/has_ice()
+ if(reagents.reagent_list.len > 0)
+ var/datum/reagent/R = reagents.get_master_reagent()
+ if(!((R.id == "ice") || ("ice" in R.glass_special))) // if it's not a cup of ice, and it's not already supposed to have ice in, see if the bartender's put ice in it
+ if(reagents.has_reagent("ice", reagents.total_volume / 10)) // 10% ice by volume
+ return 1
+
+ return 0
+
+/obj/item/weapon/reagent_containers/food/drinks/glass2/proc/has_fizz()
+ if(reagents.reagent_list.len > 0)
+ var/datum/reagent/R = reagents.get_master_reagent()
+ if(!("fizz" in R.glass_special))
+ var/totalfizzy = 0
+ for(var/datum/reagent/re in reagents.reagent_list)
+ if("fizz" in re.glass_special)
+ totalfizzy += re.volume
+ if(totalfizzy >= reagents.total_volume / 5) // 20% fizzy by volume
+ return 1
+ return 0
+
+/obj/item/weapon/reagent_containers/food/drinks/glass2/New()
+ ..()
+ icon_state = base_icon
+
+/obj/item/weapon/reagent_containers/food/drinks/glass2/on_reagent_change()
+ ..()
+ update_icon()
+
+/obj/item/weapon/reagent_containers/food/drinks/glass2/proc/can_add_extra(obj/item/weapon/glass_extra/GE)
+ if(!("[base_icon]_[GE.glass_addition]left" in icon_states(DRINK_ICON_FILE)))
+ return 0
+ if(!("[base_icon]_[GE.glass_addition]right" in icon_states(DRINK_ICON_FILE)))
+ return 0
+
+ return 1
+
+/obj/item/weapon/reagent_containers/food/drinks/glass2/update_icon()
+ underlays.Cut()
+
+ if (reagents.reagent_list.len > 0)
+ var/datum/reagent/R = reagents.get_master_reagent()
+ name = "[base_name] of [R.glass_name ? R.glass_name : "something"]"
+ desc = R.glass_desc ? R.glass_desc : initial(desc)
+
+ var/list/under_liquid = list()
+ var/list/over_liquid = list()
+
+ var/amnt = 100
+ var/percent = round((reagents.total_volume / volume) * 100)
+ for(var/k in filling_states)
+ if(percent <= k)
+ amnt = k
+ break
+
+ if(has_ice())
+ over_liquid |= "[base_icon][amnt]_ice"
+
+ if(has_fizz())
+ over_liquid |= "[base_icon][amnt]_fizz"
+
+ for(var/S in R.glass_special)
+ if("[base_icon]_[S]" in icon_states(DRINK_ICON_FILE))
+ under_liquid |= "[base_icon]_[S]"
+ else if("[base_icon][amnt]_[S]" in icon_states(DRINK_ICON_FILE))
+ over_liquid |= "[base_icon][amnt]_[S]"
+
+ for(var/k in under_liquid)
+ underlays += image(DRINK_ICON_FILE, src, k, -3)
+
+ var/image/filling = image(DRINK_ICON_FILE, src, "[base_icon][amnt][R.glass_icon]", -2)
+ filling.color = reagents.get_color()
+ underlays += filling
+
+ for(var/k in over_liquid)
+ underlays += image(DRINK_ICON_FILE, src, k, -1)
+ else
+ name = initial(name)
+ desc = initial(desc)
+
+ var/side = "left"
+ for(var/item in extras)
+ if(istype(item, /obj/item/weapon/glass_extra))
+ var/obj/item/weapon/glass_extra/GE = item
+ var/image/I = image(DRINK_ICON_FILE, src, "[base_icon]_[GE.glass_addition][side]")
+ if(GE.glass_color)
+ I.color = GE.glass_color
+ underlays += I
+ else if(istype(item, /obj/item/weapon/reagent_containers/food/snacks/fruit_slice))
+ var/obj/FS = item
+ var/image/I = image(FS)
+
+ var/fsy = rim_pos[1] - 20
+ var/fsx = rim_pos[side == "left" ? 2 : 3] - 16
+
+ var/matrix/M = matrix()
+ M.Scale(0.5)
+ M.Translate(fsx, fsy)
+ I.transform = M
+ underlays += I
+ else continue
+ side = "right"
diff --git a/code/modules/reagents/reagent_containers/drinkingglass/extras.dm b/code/modules/reagents/reagent_containers/drinkingglass/extras.dm
new file mode 100644
index 0000000000..5a92b61c88
--- /dev/null
+++ b/code/modules/reagents/reagent_containers/drinkingglass/extras.dm
@@ -0,0 +1,72 @@
+/obj/item/weapon/reagent_containers/food/drinks/glass2/attackby(obj/item/I as obj, mob/user as mob)
+ if(extras.len >= 2) return ..() // max 2 extras, one on each side of the drink
+
+ if(istype(I, /obj/item/weapon/glass_extra))
+ var/obj/item/weapon/glass_extra/GE = I
+ if(can_add_extra(GE))
+ extras += GE
+ user.remove_from_mob(GE)
+ GE.loc = src
+ user << "You add \the [GE] to \the [src]. "
+ update_icon()
+ else
+ user << "There's no space to put \the [GE] on \the [src]! "
+ else if(istype(I, /obj/item/weapon/reagent_containers/food/snacks/fruit_slice))
+ if(!rim_pos)
+ user << "There's no space to put \the [I] on \the [src]! "
+ return
+ var/obj/item/weapon/reagent_containers/food/snacks/fruit_slice/FS = I
+ extras += FS
+ user.remove_from_mob(FS)
+ FS.pixel_x = 0 // Reset its pixel offsets so the icons work!
+ FS.pixel_y = 0
+ FS.loc = src
+ user << "You add \the [FS] to \the [src]. "
+ update_icon()
+ else
+ return ..()
+
+/obj/item/weapon/reagent_containers/food/drinks/glass2/attack_hand(mob/user as mob)
+ if(src != user.get_inactive_hand())
+ return ..()
+
+ if(!extras.len)
+ user << "There's nothing on the glass to remove! "
+ return
+
+ var/choice = input(user, "What would you like to remove from the glass?") as null|anything in extras
+ if(!choice || !(choice in extras))
+ return
+
+ if(user.put_in_active_hand(choice))
+ user << "You remove \the [choice] from \the [src]. "
+ extras -= choice
+ else
+ user << "Something went wrong, please try again. "
+
+ update_icon()
+
+/obj/item/weapon/glass_extra
+ name = "generic glass addition"
+ desc = "This goes on a glass."
+ var/glass_addition
+ var/glass_desc
+ var/glass_color
+ w_class = 1
+ icon = DRINK_ICON_FILE
+
+/obj/item/weapon/glass_extra/stick
+ name = "stick"
+ desc = "This goes in a glass."
+ glass_addition = "stick"
+ glass_desc = "There is a stick in the glass."
+ icon_state = "stick"
+
+/obj/item/weapon/glass_extra/straw
+ name = "straw"
+ desc = "This goes in a glass."
+ glass_addition = "straw"
+ glass_desc = "There is a straw in the glass."
+ icon_state = "straw"
+
+#undef DRINK_ICON_FILE
diff --git a/code/modules/reagents/reagent_containers/drinkingglass/glass_boxes.dm b/code/modules/reagents/reagent_containers/drinkingglass/glass_boxes.dm
new file mode 100644
index 0000000000..d9c19321ca
--- /dev/null
+++ b/code/modules/reagents/reagent_containers/drinkingglass/glass_boxes.dm
@@ -0,0 +1,75 @@
+/obj/item/weapon/storage/box/mixedglasses
+ name = "glassware box"
+ desc = "A box of assorted glassware"
+ can_hold = list(/obj/item/weapon/reagent_containers/food/drinks/glass2)
+ New()
+ ..()
+ new /obj/item/weapon/reagent_containers/food/drinks/glass2/square(src)
+ new /obj/item/weapon/reagent_containers/food/drinks/glass2/rocks(src)
+ new /obj/item/weapon/reagent_containers/food/drinks/glass2/shake(src)
+ new /obj/item/weapon/reagent_containers/food/drinks/glass2/cocktail(src)
+ new /obj/item/weapon/reagent_containers/food/drinks/glass2/shot(src)
+ new /obj/item/weapon/reagent_containers/food/drinks/glass2/pint(src)
+ new /obj/item/weapon/reagent_containers/food/drinks/glass2/mug(src)
+ new /obj/item/weapon/reagent_containers/food/drinks/glass2/wine(src)
+
+/obj/item/weapon/storage/box/glasses
+ name = "box of glasses"
+ var/glass_type = /obj/item/weapon/reagent_containers/food/drinks/glass2
+ can_hold = list(/obj/item/weapon/reagent_containers/food/drinks/glass2)
+ New()
+ ..()
+
+ for(var/i = 1 to 7)
+ new glass_type(src)
+
+/obj/item/weapon/storage/box/glasses/square
+ name = "box of half-pint glasses"
+ glass_type = /obj/item/weapon/reagent_containers/food/drinks/glass2/square
+
+/obj/item/weapon/storage/box/glasses/rocks
+ name = "box of rocks glasses"
+ glass_type = /obj/item/weapon/reagent_containers/food/drinks/glass2/rocks
+
+/obj/item/weapon/storage/box/glasses/shake
+ name = "box of milkshake glasses"
+ glass_type = /obj/item/weapon/reagent_containers/food/drinks/glass2/shake
+
+/obj/item/weapon/storage/box/glasses/cocktail
+ name = "box of cocktail glasses"
+ glass_type = /obj/item/weapon/reagent_containers/food/drinks/glass2/cocktail
+
+/obj/item/weapon/storage/box/glasses/shot
+ name = "box of shot glasses"
+ glass_type = /obj/item/weapon/reagent_containers/food/drinks/glass2/shot
+
+/obj/item/weapon/storage/box/glasses/pint
+ name = "box of pint glasses"
+ glass_type = /obj/item/weapon/reagent_containers/food/drinks/glass2/pint
+
+/obj/item/weapon/storage/box/glasses/mug
+ name = "box of glass mugs"
+ glass_type = /obj/item/weapon/reagent_containers/food/drinks/glass2/mug
+
+/obj/item/weapon/storage/box/glasses/wine
+ name = "box of wine glasses"
+ glass_type = /obj/item/weapon/reagent_containers/food/drinks/glass2/wine
+
+/obj/item/weapon/storage/box/glass_extras
+ name = "box of cocktail garnishings"
+ var/extra_type = /obj/item/weapon/glass_extra
+ can_hold = list(/obj/item/weapon/glass_extra)
+ storage_slots = 14
+ New()
+ ..()
+
+ for(var/i = 1 to 14)
+ new extra_type(src)
+
+/obj/item/weapon/storage/box/glass_extras/straws
+ name = "box of straws"
+ extra_type = /obj/item/weapon/glass_extra/straw
+
+/obj/item/weapon/storage/box/glass_extras/sticks
+ name = "box of drink sticks"
+ extra_type = /obj/item/weapon/glass_extra/stick
diff --git a/code/modules/reagents/reagent_containers/drinkingglass/glass_types.dm b/code/modules/reagents/reagent_containers/drinkingglass/glass_types.dm
new file mode 100644
index 0000000000..feec8bf16e
--- /dev/null
+++ b/code/modules/reagents/reagent_containers/drinkingglass/glass_types.dm
@@ -0,0 +1,72 @@
+/obj/item/weapon/reagent_containers/food/drinks/glass2/square
+ name = "half-pint glass"
+ base_name = "glass"
+ base_icon = "square"
+ desc = "Your standard drinking glass."
+ filling_states = list(20, 40, 60, 80, 100)
+ volume = 30
+ possible_transfer_amounts = list(5,10,15,30)
+ rim_pos = list(23,13,20) // y, x0, x1
+
+/obj/item/weapon/reagent_containers/food/drinks/glass2/rocks
+ name = "rocks glass"
+ base_name = "glass"
+ base_icon = "rocks"
+ filling_states = list(25, 50, 75, 100)
+ volume = 20
+ possible_transfer_amounts = list(5,10,20)
+ rim_pos = list(21, 10, 23)
+
+/obj/item/weapon/reagent_containers/food/drinks/glass2/shake
+ name = "milkshake glass"
+ base_name = "glass"
+ base_icon = "shake"
+ filling_states = list(25, 50, 75, 100)
+ volume = 30
+ possible_transfer_amounts = list(5,10,15,30)
+ rim_pos = list(25, 13, 21)
+
+/obj/item/weapon/reagent_containers/food/drinks/glass2/cocktail
+ name = "cocktail glass"
+ base_name = "glass"
+ base_icon = "cocktail"
+ filling_states = list(33, 66, 100)
+ volume = 15
+ possible_transfer_amounts = list(5,10,15)
+ rim_pos = list(22, 13, 21)
+
+/obj/item/weapon/reagent_containers/food/drinks/glass2/shot
+ name = "shot glass"
+ base_name = "shot"
+ base_icon = "shot"
+ filling_states = list(33, 66, 100)
+ volume = 5
+ possible_transfer_amounts = list(1,2,5)
+ rim_pos = list(17, 13, 21)
+
+/obj/item/weapon/reagent_containers/food/drinks/glass2/pint
+ name = "pint glass"
+ base_name = "pint"
+ base_icon = "pint"
+ filling_states = list(16, 33, 50, 66, 83, 100)
+ volume = 60
+ possible_transfer_amounts = list(5,10,15,30,60)
+ rim_pos = list(25, 12, 21)
+
+/obj/item/weapon/reagent_containers/food/drinks/glass2/mug
+ name = "glass mug"
+ base_name = "mug"
+ base_icon = "mug"
+ filling_states = list(25, 50, 75, 100)
+ volume = 40
+ possible_transfer_amounts = list(5,10,20,40)
+ rim_pos = list(22, 12, 20)
+
+/obj/item/weapon/reagent_containers/food/drinks/glass2/wine
+ name = "wine glass"
+ base_name = "glass"
+ base_icon = "wine"
+ filling_states = list(20, 40, 60, 80, 100)
+ volume = 25
+ possible_transfer_amounts = list(5, 10, 15, 25)
+ rim_pos = list(25, 12, 21)
diff --git a/code/modules/reagents/reagent_containers/drinkingglass/shaker.dm b/code/modules/reagents/reagent_containers/drinkingglass/shaker.dm
new file mode 100644
index 0000000000..b653f14c60
--- /dev/null
+++ b/code/modules/reagents/reagent_containers/drinkingglass/shaker.dm
@@ -0,0 +1,31 @@
+/obj/item/weapon/reagent_containers/food/drinks/glass2/fitnessflask
+ name = "fitness shaker"
+ base_name = "shaker"
+ desc = "Big enough to contain enough protein to get perfectly swole. Don't mind the bits."
+ icon_state = "fitness-cup_black"
+ base_icon = "fitness-cup"
+ volume = 100
+ matter = list("plastic" = 2000)
+ filling_states = list(10,20,30,40,50,60,70,80,90,100)
+ possible_transfer_amounts = list(5, 10, 15, 25)
+ rim_pos = null // no fruit slices
+ var/lid_color = "black"
+
+/obj/item/weapon/reagent_containers/food/drinks/glass2/fitnessflask/New()
+ ..()
+ lid_color = pick("black", "red", "blue")
+ update_icon()
+
+/obj/item/weapon/reagent_containers/food/drinks/glass2/fitnessflask/update_icon()
+ ..()
+ icon_state = "[base_icon]_[lid_color]"
+
+/obj/item/weapon/reagent_containers/food/drinks/glass2/fitnessflask/proteinshake
+ name = "protein shake"
+
+/obj/item/weapon/reagent_containers/food/drinks/glass2/fitnessflask/proteinshake/New()
+ ..()
+ reagents.add_reagent("nutriment", 30)
+ reagents.add_reagent("iron", 10)
+ reagents.add_reagent("protein", 35)
+ reagents.add_reagent("water", 25)
diff --git a/code/modules/reagents/reagent_containers/dropper.dm b/code/modules/reagents/reagent_containers/dropper.dm
index c352b60332..ba671cdb50 100644
--- a/code/modules/reagents/reagent_containers/dropper.dm
+++ b/code/modules/reagents/reagent_containers/dropper.dm
@@ -12,86 +12,95 @@
slot_flags = SLOT_EARS
volume = 5
- afterattack(var/obj/target, var/mob/user, var/flag)
- if(!target.reagents || !flag) return
- if(reagents.total_volume)
+/obj/item/weapon/reagent_containers/dropper/do_surgery(mob/living/carbon/M, mob/living/user)
+ if(user.a_intent != I_HELP) //in case it is ever used as a surgery tool
+ return ..()
+ afterattack(M, user, 1)
+ return 1
- if(!target.reagents.get_free_space())
- user << "[target] is full. "
+/obj/item/weapon/reagent_containers/dropper/afterattack(var/obj/target, var/mob/user, var/proximity)
+ if(!target.reagents || !proximity) return
+
+ if(reagents.total_volume)
+
+ if(!target.reagents.get_free_space())
+ user << "[target] is full. "
+ return
+
+ if(!target.is_open_container() && !ismob(target) && !istype(target, /obj/item/weapon/reagent_containers/food) && !istype(target, /obj/item/clothing/mask/smokable/cigarette)) //You can inject humans and food but you cant remove the shit.
+ user << "You cannot directly fill this object. "
+ return
+
+ var/trans = 0
+
+ if(ismob(target))
+
+ var/time = 20 //2/3rds the time of a syringe
+ user.visible_message("[user] is trying to squirt something into [target]'s eyes! ")
+
+ if(!do_mob(user, target, time))
return
- if(!target.is_open_container() && !ismob(target) && !istype(target, /obj/item/weapon/reagent_containers/food) && !istype(target, /obj/item/clothing/mask/smokable/cigarette)) //You can inject humans and food but you cant remove the shit.
- user << "You cannot directly fill this object. "
- return
+ if(istype(target, /mob/living/carbon/human))
+ var/mob/living/carbon/human/victim = target
- var/trans = 0
+ var/obj/item/safe_thing = null
+ if(victim.wear_mask)
+ if (victim.wear_mask.body_parts_covered & EYES)
+ safe_thing = victim.wear_mask
+ if(victim.head)
+ if (victim.head.body_parts_covered & EYES)
+ safe_thing = victim.head
+ if(victim.glasses)
+ if (!safe_thing)
+ safe_thing = victim.glasses
- if(ismob(target))
-
- var/time = 20 //2/3rds the time of a syringe
- user.visible_message("[user] is trying to squirt something into [target]'s eyes! ")
-
- if(!do_mob(user, target, time))
+ if(safe_thing)
+ trans = reagents.trans_to_obj(safe_thing, amount_per_transfer_from_this)
+ user.visible_message("[user] tries to squirt something into [target]'s eyes, but fails! ", "You transfer [trans] units of the solution. ")
return
- if(istype(target, /mob/living/carbon/human))
- var/mob/living/carbon/human/victim = target
+ var/mob/living/M = target
+ var/contained = reagentlist()
+ M.attack_log += text("\[[time_stamp()]\] Has been squirted with [name] by [user.name] ([user.ckey]). Reagents: [contained] ")
+ user.attack_log += text("\[[time_stamp()]\] Used the [name] to squirt [M.name] ([M.key]). Reagents: [contained] ")
+ msg_admin_attack("[user.name] ([user.ckey]) squirted [M.name] ([M.key]) with [name]. Reagents: [contained] (INTENT: [uppertext(user.a_intent)]) (JMP )")
- var/obj/item/safe_thing = null
- if(victim.wear_mask)
- if (victim.wear_mask.body_parts_covered & EYES)
- safe_thing = victim.wear_mask
- if(victim.head)
- if (victim.head.body_parts_covered & EYES)
- safe_thing = victim.head
- if(victim.glasses)
- if (!safe_thing)
- safe_thing = victim.glasses
+ trans = reagents.trans_to_mob(target, reagents.total_volume, CHEM_INGEST)
+ user.visible_message("[user] squirts something into [target]'s eyes! ", "You transfer [trans] units of the solution. ")
- if(safe_thing)
- trans = reagents.trans_to_obj(safe_thing, amount_per_transfer_from_this)
- user.visible_message("[user] tries to squirt something into [target]'s eyes, but fails! ", "You transfer [trans] units of the solution. ")
- return
- trans = reagents.trans_to_mob(target, reagents.total_volume, CHEM_INGEST)
- user.visible_message("[user] squirts something into [target]'s eyes! ", "You transfer [trans] units of the solution. ")
+ return
- var/mob/living/M = target
- var/contained = reagentlist()
- M.attack_log += text("\[[time_stamp()]\] Has been squirted with [name] by [user.name] ([user.ckey]). Reagents: [contained] ")
- user.attack_log += text("\[[time_stamp()]\] Used the [name] to squirt [M.name] ([M.key]). Reagents: [contained] ")
- msg_admin_attack("[user.name] ([user.ckey]) squirted [M.name] ([M.key]) with [name]. Reagents: [contained] (INTENT: [uppertext(user.a_intent)]) (JMP )")
- return
-
- else
- trans = reagents.trans_to(target, amount_per_transfer_from_this) //sprinkling reagents on generic non-mobs
- user << "You transfer [trans] units of the solution. "
-
- else // Taking from something
-
- if(!target.is_open_container() && !istype(target,/obj/structure/reagent_dispensers))
- user << "You cannot directly remove reagents from [target]. "
- return
-
- if(!target.reagents || !target.reagents.total_volume)
- user << "[target] is empty. "
- return
-
- var/trans = target.reagents.trans_to_obj(src, amount_per_transfer_from_this)
-
- user << "You fill the dropper with [trans] units of the solution. "
-
- return
-
- on_reagent_change()
- update_icon()
-
- update_icon()
- if(reagents.total_volume)
- icon_state = "dropper1"
else
- icon_state = "dropper0"
+ trans = reagents.trans_to(target, amount_per_transfer_from_this) //sprinkling reagents on generic non-mobs
+ user << "You transfer [trans] units of the solution. "
+
+ else // Taking from something
+
+ if(!target.is_open_container() && !istype(target,/obj/structure/reagent_dispensers))
+ user << "You cannot directly remove reagents from [target]. "
+ return
+
+ if(!target.reagents || !target.reagents.total_volume)
+ user << "[target] is empty. "
+ return
+
+ var/trans = target.reagents.trans_to_obj(src, amount_per_transfer_from_this)
+
+ user << "You fill the dropper with [trans] units of the solution. "
+
+ return
+
+/obj/item/weapon/reagent_containers/dropper/on_reagent_change()
+ update_icon()
+
+/obj/item/weapon/reagent_containers/dropper/update_icon()
+ if(reagents.total_volume)
+ icon_state = "dropper1"
+ else
+ icon_state = "dropper0"
/obj/item/weapon/reagent_containers/dropper/industrial
name = "Industrial Dropper"
diff --git a/code/modules/reagents/reagent_containers/food/cans.dm b/code/modules/reagents/reagent_containers/food/cans.dm
index 7d72b8bf51..4597c5bd71 100644
--- a/code/modules/reagents/reagent_containers/food/cans.dm
+++ b/code/modules/reagents/reagent_containers/food/cans.dm
@@ -10,43 +10,48 @@
desc = "Cola. in space."
icon_state = "cola"
center_of_mass = list("x"=16, "y"=10)
- New()
- ..()
- reagents.add_reagent("cola", 30)
+
+/obj/item/weapon/reagent_containers/food/drinks/cans/cola/New()
+ ..()
+ reagents.add_reagent("cola", 30)
/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle
name = "bottled water"
desc = "Introduced to the vending machines by Skrellian request, this water comes straight from the Martian poles."
icon_state = "waterbottle"
center_of_mass = list("x"=15, "y"=8)
- New()
- ..()
- reagents.add_reagent("water", 30)
+
+/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle/New()
+ ..()
+ reagents.add_reagent("water", 30)
/obj/item/weapon/reagent_containers/food/drinks/cans/space_mountain_wind
name = "\improper Space Mountain Wind"
desc = "Blows right through you like a space wind."
icon_state = "space_mountain_wind"
center_of_mass = list("x"=16, "y"=10)
- New()
- ..()
- reagents.add_reagent("spacemountainwind", 30)
+
+/obj/item/weapon/reagent_containers/food/drinks/cans/space_mountain_wind/New()
+ ..()
+ reagents.add_reagent("spacemountainwind", 30)
/obj/item/weapon/reagent_containers/food/drinks/cans/thirteenloko
name = "\improper Thirteen Loko"
desc = "The CMO has advised crew members that consumption of Thirteen Loko may result in seizures, blindness, drunkeness, or even death. Please Drink Responsibly."
icon_state = "thirteen_loko"
center_of_mass = list("x"=16, "y"=8)
- New()
- ..()
- reagents.add_reagent("thirteenloko", 30)
+
+/obj/item/weapon/reagent_containers/food/drinks/cans/thirteenloko/New()
+ ..()
+ reagents.add_reagent("thirteenloko", 30)
/obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb
name = "\improper Dr. Gibb"
desc = "A delicious mixture of 42 different flavors."
icon_state = "dr_gibb"
center_of_mass = list("x"=16, "y"=10)
- New()
+
+/obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb/New()
..()
reagents.add_reagent("dr_gibb", 30)
@@ -55,60 +60,67 @@
desc = "The taste of a star in liquid form. And, a bit of tuna...?"
icon_state = "starkist"
center_of_mass = list("x"=16, "y"=10)
- New()
- ..()
- reagents.add_reagent("brownstar", 30)
+
+/obj/item/weapon/reagent_containers/food/drinks/cans/starkist/New()
+ ..()
+ reagents.add_reagent("brownstar", 30)
/obj/item/weapon/reagent_containers/food/drinks/cans/space_up
name = "\improper Space-Up"
desc = "Tastes like a hull breach in your mouth."
icon_state = "space-up"
center_of_mass = list("x"=16, "y"=10)
- New()
- ..()
- reagents.add_reagent("space_up", 30)
+
+/obj/item/weapon/reagent_containers/food/drinks/cans/space_up/New()
+ ..()
+ reagents.add_reagent("space_up", 30)
/obj/item/weapon/reagent_containers/food/drinks/cans/lemon_lime
name = "\improper Lemon-Lime"
desc = "You wanted ORANGE. It gave you Lemon Lime."
icon_state = "lemon-lime"
center_of_mass = list("x"=16, "y"=10)
- New()
- ..()
- reagents.add_reagent("lemon_lime", 30)
+
+/obj/item/weapon/reagent_containers/food/drinks/cans/lemon_lime/New()
+ ..()
+ reagents.add_reagent("lemon_lime", 30)
/obj/item/weapon/reagent_containers/food/drinks/cans/iced_tea
name = "\improper Vrisk Serket Iced Tea"
desc = "That sweet, refreshing southern earthy flavor. That's where it's from, right? South Earth?"
icon_state = "ice_tea_can"
center_of_mass = list("x"=16, "y"=10)
- New()
- ..()
- reagents.add_reagent("icetea", 30)
+
+/obj/item/weapon/reagent_containers/food/drinks/cans/iced_tea/New()
+ ..()
+ reagents.add_reagent("icetea", 30)
/obj/item/weapon/reagent_containers/food/drinks/cans/grape_juice
name = "\improper Grapel Juice"
desc = "500 pages of rules of how to appropriately enter into a combat with this juice!"
icon_state = "purple_can"
center_of_mass = list("x"=16, "y"=10)
- New()
- ..()
- reagents.add_reagent("grapejuice", 30)
+
+/obj/item/weapon/reagent_containers/food/drinks/cans/grape_juice/New()
+ ..()
+ reagents.add_reagent("grapejuice", 30)
/obj/item/weapon/reagent_containers/food/drinks/cans/tonic
name = "\improper T-Borg's Tonic Water"
desc = "Quinine tastes funny, but at least it'll keep that Space Malaria away."
icon_state = "tonic"
center_of_mass = list("x"=16, "y"=10)
- New()
- ..()
- reagents.add_reagent("tonic", 50)
+
+/obj/item/weapon/reagent_containers/food/drinks/cans/tonic/New()
+ ..()
+ reagents.add_reagent("tonic", 50)
/obj/item/weapon/reagent_containers/food/drinks/cans/sodawater
name = "soda water"
desc = "A can of soda water. Still water's more refreshing cousin."
icon_state = "sodawater"
center_of_mass = list("x"=16, "y"=10)
- New()
- ..()
- reagents.add_reagent("sodawater", 50)
+
+/obj/item/weapon/reagent_containers/food/drinks/cans/sodawater/New()
+ ..()
+ reagents.add_reagent("sodawater", 50)
diff --git a/code/modules/reagents/reagent_containers/food/condiment.dm b/code/modules/reagents/reagent_containers/food/condiment.dm
index d449d25195..ce26cdda50 100644
--- a/code/modules/reagents/reagent_containers/food/condiment.dm
+++ b/code/modules/reagents/reagent_containers/food/condiment.dm
@@ -15,147 +15,152 @@
center_of_mass = list("x"=16, "y"=6)
volume = 50
- attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
+/obj/item/weapon/reagent_containers/food/condiment/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
+ return
+
+/obj/item/weapon/reagent_containers/food/condiment/attack_self(var/mob/user as mob)
+ return
+
+/obj/item/weapon/reagent_containers/food/condiment/attack(var/mob/M as mob, var/mob/user as mob, var/def_zone)
+ if(standard_feed_mob(user, M))
return
- attack_self(var/mob/user as mob)
+/obj/item/weapon/reagent_containers/food/condiment/afterattack(var/obj/target, var/mob/user, var/flag)
+ if(standard_dispenser_refill(user, target))
+ return
+ if(standard_pour_into(user, target))
return
- attack(var/mob/M as mob, var/mob/user as mob, var/def_zone)
- if(standard_feed_mob(user, M))
+ if(istype(target, /obj/item/weapon/reagent_containers/food/snacks)) // These are not opencontainers but we can transfer to them
+ if(!reagents || !reagents.total_volume)
+ user << "There is no condiment left in \the [src]. "
return
- afterattack(var/obj/target, var/mob/user, var/flag)
- if(standard_dispenser_refill(user, target))
- return
- if(standard_pour_into(user, target))
+ if(!target.reagents.get_free_space())
+ user << "You can't add more condiment to \the [target]. "
return
- if(istype(target, /obj/item/weapon/reagent_containers/food/snacks)) // These are not opencontainers but we can transfer to them
- if(!reagents || !reagents.total_volume)
- user << "There is no condiment left in \the [src]. "
- return
+ var/trans = reagents.trans_to_obj(target, amount_per_transfer_from_this)
+ user << "You add [trans] units of the condiment to \the [target]. "
+ else
+ ..()
- if(!target.reagents.get_free_space())
- user << "You can't add more condiment to \the [target]. "
- return
+/obj/item/weapon/reagent_containers/food/condiment/feed_sound(var/mob/user)
+ playsound(user.loc, 'sound/items/drink.ogg', rand(10, 50), 1)
- var/trans = reagents.trans_to_obj(target, amount_per_transfer_from_this)
- user << "You add [trans] units of the condiment to \the [target]. "
- else
- ..()
+/obj/item/weapon/reagent_containers/food/condiment/self_feed_message(var/mob/user)
+ user << "You swallow some of contents of \the [src]. "
- feed_sound(var/mob/user)
- playsound(user.loc, 'sound/items/drink.ogg', rand(10, 50), 1)
-
- self_feed_message(var/mob/user)
- user << "You swallow some of contents of \the [src]. "
-
- on_reagent_change()
- if(reagents.reagent_list.len > 0)
- switch(reagents.get_master_reagent_id())
- if("ketchup")
- name = "Ketchup"
- desc = "You feel more American already."
- icon_state = "ketchup"
- center_of_mass = list("x"=16, "y"=6)
- if("capsaicin")
- name = "Hotsauce"
- desc = "You can almost TASTE the stomach ulcers now!"
- icon_state = "hotsauce"
- center_of_mass = list("x"=16, "y"=6)
- if("enzyme")
- name = "Universal Enzyme"
- desc = "Used in cooking various dishes."
- icon_state = "enzyme"
- center_of_mass = list("x"=16, "y"=6)
- if("soysauce")
- name = "Soy Sauce"
- desc = "A salty soy-based flavoring."
- icon_state = "soysauce"
- center_of_mass = list("x"=16, "y"=6)
- if("frostoil")
- name = "Coldsauce"
- desc = "Leaves the tongue numb in its passage."
- icon_state = "coldsauce"
- center_of_mass = list("x"=16, "y"=6)
- if("sodiumchloride")
- name = "Salt Shaker"
- desc = "Salt. From space oceans, presumably."
- icon_state = "saltshaker"
- center_of_mass = list("x"=16, "y"=10)
- if("blackpepper")
- name = "Pepper Mill"
- desc = "Often used to flavor food or make people sneeze."
- icon_state = "peppermillsmall"
- center_of_mass = list("x"=16, "y"=10)
- if("cornoil")
- name = "Corn Oil"
- desc = "A delicious oil used in cooking. Made from corn."
- icon_state = "oliveoil"
- center_of_mass = list("x"=16, "y"=6)
- if("sugar")
- name = "Sugar"
- desc = "Tastey space sugar!"
- center_of_mass = list("x"=16, "y"=6)
+/obj/item/weapon/reagent_containers/food/condiment/on_reagent_change()
+ if(reagents.reagent_list.len > 0)
+ switch(reagents.get_master_reagent_id())
+ if("ketchup")
+ name = "Ketchup"
+ desc = "You feel more American already."
+ icon_state = "ketchup"
+ center_of_mass = list("x"=16, "y"=6)
+ if("capsaicin")
+ name = "Hotsauce"
+ desc = "You can almost TASTE the stomach ulcers now!"
+ icon_state = "hotsauce"
+ center_of_mass = list("x"=16, "y"=6)
+ if("enzyme")
+ name = "Universal Enzyme"
+ desc = "Used in cooking various dishes."
+ icon_state = "enzyme"
+ center_of_mass = list("x"=16, "y"=6)
+ if("soysauce")
+ name = "Soy Sauce"
+ desc = "A salty soy-based flavoring."
+ icon_state = "soysauce"
+ center_of_mass = list("x"=16, "y"=6)
+ if("frostoil")
+ name = "Coldsauce"
+ desc = "Leaves the tongue numb in its passage."
+ icon_state = "coldsauce"
+ center_of_mass = list("x"=16, "y"=6)
+ if("sodiumchloride")
+ name = "Salt Shaker"
+ desc = "Salt. From space oceans, presumably."
+ icon_state = "saltshaker"
+ center_of_mass = list("x"=16, "y"=10)
+ if("blackpepper")
+ name = "Pepper Mill"
+ desc = "Often used to flavor food or make people sneeze."
+ icon_state = "peppermillsmall"
+ center_of_mass = list("x"=16, "y"=10)
+ if("cornoil")
+ name = "Corn Oil"
+ desc = "A delicious oil used in cooking. Made from corn."
+ icon_state = "oliveoil"
+ center_of_mass = list("x"=16, "y"=6)
+ if("sugar")
+ name = "Sugar"
+ desc = "Tastey space sugar!"
+ center_of_mass = list("x"=16, "y"=6)
+ else
+ name = "Misc Condiment Bottle"
+ if (reagents.reagent_list.len==1)
+ desc = "Looks like it is [reagents.get_master_reagent_name()], but you are not sure."
else
- name = "Misc Condiment Bottle"
- if (reagents.reagent_list.len==1)
- desc = "Looks like it is [reagents.get_master_reagent_name()], but you are not sure."
- else
- desc = "A mixture of various condiments. [reagents.get_master_reagent_name()] is one of them."
- icon_state = "mixedcondiments"
- center_of_mass = list("x"=16, "y"=6)
- else
- icon_state = "emptycondiment"
- name = "Condiment Bottle"
- desc = "An empty condiment bottle."
- center_of_mass = list("x"=16, "y"=6)
- return
+ desc = "A mixture of various condiments. [reagents.get_master_reagent_name()] is one of them."
+ icon_state = "mixedcondiments"
+ center_of_mass = list("x"=16, "y"=6)
+ else
+ icon_state = "emptycondiment"
+ name = "Condiment Bottle"
+ desc = "An empty condiment bottle."
+ center_of_mass = list("x"=16, "y"=6)
+ return
/obj/item/weapon/reagent_containers/food/condiment/enzyme
name = "Universal Enzyme"
desc = "Used in cooking various dishes."
icon_state = "enzyme"
- New()
- ..()
- reagents.add_reagent("enzyme", 50)
-/obj/item/weapon/reagent_containers/food/condiment/sugar
- New()
- ..()
- reagents.add_reagent("sugar", 50)
+/obj/item/weapon/reagent_containers/food/condiment/enzyme/New()
+ ..()
+ reagents.add_reagent("enzyme", 50)
+
+/obj/item/weapon/reagent_containers/food/condiment/sugar/New()
+ ..()
+ reagents.add_reagent("sugar", 50)
/obj/item/weapon/reagent_containers/food/condiment/small
possible_transfer_amounts = list(1,20)
amount_per_transfer_from_this = 1
volume = 20
center_of_mass = list()
- on_reagent_change() return
+
+/obj/item/weapon/reagent_containers/food/condiment/small/on_reagent_change()
+ return
/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker //Seperate from above since it's a small shaker rather then
name = "salt shaker" // a large one.
desc = "Salt. From space oceans, presumably."
icon_state = "saltshakersmall"
- New()
- ..()
- reagents.add_reagent("sodiumchloride", 20)
+
+/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker/New()
+ ..()
+ reagents.add_reagent("sodiumchloride", 20)
/obj/item/weapon/reagent_containers/food/condiment/small/peppermill
name = "pepper mill"
desc = "Often used to flavor food or make people sneeze."
icon_state = "peppermillsmall"
- New()
- ..()
- reagents.add_reagent("blackpepper", 20)
+
+/obj/item/weapon/reagent_containers/food/condiment/small/peppermill/New()
+ ..()
+ reagents.add_reagent("blackpepper", 20)
/obj/item/weapon/reagent_containers/food/condiment/small/sugar
name = "sugar"
desc = "Sweetness in a bottle"
icon_state = "sugarsmall"
- New()
- ..()
- reagents.add_reagent("sugar", 20)
+
+/obj/item/weapon/reagent_containers/food/condiment/small/sugar/New()
+ ..()
+ reagents.add_reagent("sugar", 20)
/obj/item/weapon/reagent_containers/food/condiment/flour
name = "flour sack"
@@ -163,9 +168,12 @@
icon = 'icons/obj/food.dmi'
icon_state = "flour"
item_state = "flour"
- on_reagent_change() return
- New()
- ..()
- reagents.add_reagent("flour", 30)
- src.pixel_x = rand(-10.0, 10)
- src.pixel_y = rand(-10.0, 10)
+
+/obj/item/weapon/reagent_containers/food/condiment/flour/on_reagent_change()
+ return
+
+/obj/item/weapon/reagent_containers/food/condiment/flour/New()
+ ..()
+ reagents.add_reagent("flour", 30)
+ src.pixel_x = rand(-10.0, 10)
+ src.pixel_y = rand(-10.0, 10)
diff --git a/code/modules/reagents/reagent_containers/food/drinks.dm b/code/modules/reagents/reagent_containers/food/drinks.dm
index 7fd9bec3a2..f2770d9823 100644
--- a/code/modules/reagents/reagent_containers/food/drinks.dm
+++ b/code/modules/reagents/reagent_containers/food/drinks.dm
@@ -10,70 +10,79 @@
amount_per_transfer_from_this = 5
volume = 50
- on_reagent_change()
+/obj/item/weapon/reagent_containers/food/drinks/on_reagent_change()
+ if (reagents.reagent_list.len > 0)
+ var/datum/reagent/R = reagents.get_master_reagent()
+ if(R.price_tag)
+ price_tag = R.price_tag
+ else
+ price_tag = null
+ return
+
+/obj/item/weapon/reagent_containers/food/drinks/attack_self(mob/user as mob)
+ if(!is_open_container())
+ open(user)
+
+/obj/item/weapon/reagent_containers/food/drinks/proc/open(mob/user)
+ playsound(loc,'sound/effects/canopen.ogg', rand(10,50), 1)
+ user << "You open [src] with an audible pop! "
+ flags |= OPENCONTAINER
+
+/obj/item/weapon/reagent_containers/food/drinks/attack(mob/M as mob, mob/user as mob, def_zone)
+ if(force && !(flags & NOBLUDGEON) && user.a_intent == I_HURT)
+ return ..()
+
+ if(standard_feed_mob(user, M))
return
- attack_self(mob/user as mob)
- if(!is_open_container())
- open(user)
+ return 0
- proc/open(mob/user)
- playsound(loc,'sound/effects/canopen.ogg', rand(10,50), 1)
- user << "You open [src] with an audible pop! "
- flags |= OPENCONTAINER
+/obj/item/weapon/reagent_containers/food/drinks/afterattack(obj/target, mob/user, proximity)
+ if(!proximity) return
- attack(mob/M as mob, mob/user as mob, def_zone)
- if(standard_feed_mob(user, M))
- return
-
- return 0
+ if(standard_dispenser_refill(user, target))
+ return
+ if(standard_pour_into(user, target))
+ return
+ return ..()
- afterattack(obj/target, mob/user, proximity)
- if(!proximity) return
+/obj/item/weapon/reagent_containers/food/drinks/standard_feed_mob(var/mob/user, var/mob/target)
+ if(!is_open_container())
+ user << "You need to open [src]! "
+ return 1
+ return ..()
- if(standard_dispenser_refill(user, target))
- return
- if(standard_pour_into(user, target))
- return
- return ..()
+/obj/item/weapon/reagent_containers/food/drinks/standard_dispenser_refill(var/mob/user, var/obj/structure/reagent_dispensers/target)
+ if(!is_open_container())
+ user << "You need to open [src]! "
+ return 1
+ return ..()
- standard_feed_mob(var/mob/user, var/mob/target)
- if(!is_open_container())
- user << "You need to open [src]! "
- return 1
- return ..()
+/obj/item/weapon/reagent_containers/food/drinks/standard_pour_into(var/mob/user, var/atom/target)
+ if(!is_open_container())
+ user << "You need to open [src]! "
+ return 1
+ return ..()
- standard_dispenser_refill(var/mob/user, var/obj/structure/reagent_dispensers/target)
- if(!is_open_container())
- user << "You need to open [src]! "
- return 1
- return ..()
+/obj/item/weapon/reagent_containers/food/drinks/self_feed_message(var/mob/user)
+ user << "You swallow a gulp from \the [src]. "
- standard_pour_into(var/mob/user, var/atom/target)
- if(!is_open_container())
- user << "You need to open [src]! "
- return 1
- return ..()
+/obj/item/weapon/reagent_containers/food/drinks/feed_sound(var/mob/user)
+ playsound(user.loc, 'sound/items/drink.ogg', rand(10, 50), 1)
- self_feed_message(var/mob/user)
- user << "You swallow a gulp from \the [src]. "
-
- feed_sound(var/mob/user)
- playsound(user.loc, 'sound/items/drink.ogg', rand(10, 50), 1)
-
- examine(mob/user)
- if(!..(user, 1))
- return
- if(!reagents || reagents.total_volume == 0)
- user << "\The [src] is empty! "
- else if (reagents.total_volume <= volume * 0.25)
- user << "\The [src] is almost empty! "
- else if (reagents.total_volume <= volume * 0.66)
- user << "\The [src] is half full! "
- else if (reagents.total_volume <= volume * 0.90)
- user << "\The [src] is almost full! "
- else
- user << "\The [src] is full! "
+/obj/item/weapon/reagent_containers/food/drinks/examine(mob/user)
+ if(!..(user, 1))
+ return
+ if(!reagents || reagents.total_volume == 0)
+ user << "\The [src] is empty! "
+ else if (reagents.total_volume <= volume * 0.25)
+ user << "\The [src] is almost empty! "
+ else if (reagents.total_volume <= volume * 0.66)
+ user << "\The [src] is half full! "
+ else if (reagents.total_volume <= volume * 0.90)
+ user << "\The [src] is almost full! "
+ else
+ user << "\The [src] is full! "
////////////////////////////////////////////////////////////////////////////////
@@ -93,9 +102,8 @@
volume = 150
flags = CONDUCT | OPENCONTAINER
-/obj/item/weapon/reagent_containers/food/drinks/golden_cup/tournament_26_06_2011
- desc = "A golden cup. It will be presented to a winner of tournament 26 june and name of the winner will be graved on it."
-
+/obj/item/weapon/reagent_containers/food/drinks/golden_cup/on_reagent_change()
+ ..()
///////////////////////////////////////////////Drinks
//Notes by Darem: Drinks are simply containers that start preloaded. Unlike condiments, the contents can be ingested directly
@@ -103,87 +111,108 @@
// Formatting is the same as food.
/obj/item/weapon/reagent_containers/food/drinks/milk
- name = "Space Milk"
+ name = "milk carton"
desc = "It's milk. White and nutritious goodness!"
icon_state = "milk"
item_state = "carton"
center_of_mass = list("x"=16, "y"=9)
- New()
- ..()
- reagents.add_reagent("milk", 50)
+
+/obj/item/weapon/reagent_containers/food/drinks/milk/New()
+ ..()
+ reagents.add_reagent("milk", 50)
/obj/item/weapon/reagent_containers/food/drinks/soymilk
- name = "SoyMilk"
+ name = "soymilk carton"
desc = "It's soy milk. White and nutritious goodness!"
icon_state = "soymilk"
item_state = "carton"
center_of_mass = list("x"=16, "y"=9)
- New()
- ..()
- reagents.add_reagent("soymilk", 50)
+/obj/item/weapon/reagent_containers/food/drinks/soymilk/New()
+ ..()
+ reagents.add_reagent("soymilk", 50)
+
+/obj/item/weapon/reagent_containers/food/drinks/milk/smallcarton
+ name = "small milk carton"
+ volume = 30
+ icon_state = "mini-milk"
+/obj/item/weapon/reagent_containers/food/drinks/milk/smallcarton/New()
+ ..()
+ reagents.add_reagent("milk", 30)
+
+/obj/item/weapon/reagent_containers/food/drinks/milk/smallcarton/chocolate
+ name = "small chocolate milk carton"
+ desc = "It's milk! This one is in delicious chocolate flavour."
+ icon_state = "mini-milk_choco"
+/obj/item/weapon/reagent_containers/food/drinks/milk/smallcarton/chocolate/New()
+ ..()
+ reagents.add_reagent("chocolate_milk", 30)
+
/obj/item/weapon/reagent_containers/food/drinks/coffee
- name = "Robust Coffee"
+ name = "\improper Robust Coffee"
desc = "Careful, the beverage you're about to enjoy is extremely hot."
icon_state = "coffee"
center_of_mass = list("x"=15, "y"=10)
- New()
- ..()
- reagents.add_reagent("coffee", 30)
+/obj/item/weapon/reagent_containers/food/drinks/coffee/New()
+ ..()
+ reagents.add_reagent("coffee", 30)
/obj/item/weapon/reagent_containers/food/drinks/tea
- name = "Duke Purple Tea"
+ name = "cup of Duke Purple Tea"
desc = "An insult to Duke Purple is an insult to the Space Queen! Any proper gentleman will fight you, if you sully this tea."
icon_state = "teacup"
item_state = "coffee"
center_of_mass = list("x"=16, "y"=14)
- New()
- ..()
- reagents.add_reagent("tea", 30)
+
+/obj/item/weapon/reagent_containers/food/drinks/tea/New()
+ ..()
+ reagents.add_reagent("tea", 30)
/obj/item/weapon/reagent_containers/food/drinks/ice
- name = "Ice Cup"
+ name = "cup of ice"
desc = "Careful, cold ice, do not chew."
icon_state = "coffee"
center_of_mass = list("x"=15, "y"=10)
- New()
- ..()
- reagents.add_reagent("ice", 30)
+/obj/item/weapon/reagent_containers/food/drinks/ice/New()
+ ..()
+ reagents.add_reagent("ice", 30)
/obj/item/weapon/reagent_containers/food/drinks/h_chocolate
- name = "Dutch Hot Coco"
+ name = "cup of Dutch hot coco"
desc = "Made in Space South America."
icon_state = "hot_coco"
item_state = "coffee"
center_of_mass = list("x"=15, "y"=13)
- New()
- ..()
- reagents.add_reagent("hot_coco", 30)
+
+/obj/item/weapon/reagent_containers/food/drinks/h_chocolate/New()
+ ..()
+ reagents.add_reagent("hot_coco", 30)
/obj/item/weapon/reagent_containers/food/drinks/dry_ramen
name = "Cup Ramen"
desc = "Just add 10ml water, self heats! A taste that reminds you of your school years."
icon_state = "ramen"
center_of_mass = list("x"=16, "y"=11)
- New()
- ..()
- reagents.add_reagent("dry_ramen", 30)
-
+/obj/item/weapon/reagent_containers/food/drinks/dry_ramen/New()
+ ..()
+ reagents.add_reagent("dry_ramen", 30)
/obj/item/weapon/reagent_containers/food/drinks/sillycup
- name = "Paper Cup"
+ name = "paper cup"
desc = "A paper water cup."
icon_state = "water_cup_e"
possible_transfer_amounts = null
volume = 10
center_of_mass = list("x"=16, "y"=12)
- New()
- ..()
- on_reagent_change()
- if(reagents.total_volume)
- icon_state = "water_cup"
- else
- icon_state = "water_cup_e"
+/obj/item/weapon/reagent_containers/food/drinks/sillycup/New()
+ ..()
+
+/obj/item/weapon/reagent_containers/food/drinks/sillycup/on_reagent_change()
+ ..()
+ if(reagents.total_volume)
+ icon_state = "water_cup"
+ else
+ icon_state = "water_cup_e"
//////////////////////////drinkingglass and shaker//
@@ -192,13 +221,16 @@
// icon states.
/obj/item/weapon/reagent_containers/food/drinks/shaker
- name = "Shaker"
+ name = "shaker"
desc = "A metal shaker to mix drinks in."
icon_state = "shaker"
amount_per_transfer_from_this = 10
volume = 120
center_of_mass = list("x"=17, "y"=10)
+/obj/item/weapon/reagent_containers/food/drinks/shaker/on_reagent_change()
+ ..()
+
/obj/item/weapon/reagent_containers/food/drinks/teapot
name = "teapot"
desc = "An elegant teapot. It simply oozes class."
@@ -208,13 +240,19 @@
volume = 120
center_of_mass = list("x"=17, "y"=7)
+/obj/item/weapon/reagent_containers/food/drinks/teapot/on_reagent_change()
+ ..()
+
/obj/item/weapon/reagent_containers/food/drinks/flask
- name = "Captain's Flask"
+ name = "\improper Captain's flask"
desc = "A metal flask belonging to the captain"
icon_state = "flask"
volume = 60
center_of_mass = list("x"=17, "y"=7)
+/obj/item/weapon/reagent_containers/food/drinks/flask/on_reagent_change()
+ ..()
+
/obj/item/weapon/reagent_containers/food/drinks/flask/shiny
name = "shiny flask"
desc = "A shiny metal flask. It appears to have a Greek symbol inscribed on it."
@@ -226,7 +264,7 @@
icon_state = "lithiumflask"
/obj/item/weapon/reagent_containers/food/drinks/flask/detflask
- name = "Detective's Flask"
+ name = "\improper Detective's flask"
desc = "A metal flask with a leather band and golden badge belonging to the detective."
icon_state = "detflask"
volume = 60
@@ -252,3 +290,7 @@
icon_state = "britcup"
volume = 30
center_of_mass = list("x"=15, "y"=13)
+
+/obj/item/weapon/reagent_containers/food/drinks/britcup/on_reagent_change()
+ ..()
+
diff --git a/code/modules/reagents/reagent_containers/food/drinks/bottle.dm b/code/modules/reagents/reagent_containers/food/drinks/bottle.dm
index c53d91675b..c0189dd1c6 100644
--- a/code/modules/reagents/reagent_containers/food/drinks/bottle.dm
+++ b/code/modules/reagents/reagent_containers/food/drinks/bottle.dm
@@ -32,7 +32,7 @@
var/throw_dist = get_dist(throw_source, loc)
if(speed >= throw_speed && smash_check(throw_dist)) //not as reliable as smashing directly
if(reagents)
- hit_atom.visible_message("The contents of the [src] splash all over [hit_atom]! ")
+ hit_atom.visible_message("The contents of \the [src] splash all over [hit_atom]! ")
reagents.splash(hit_atom, reagents.total_volume)
src.smash(loc, hit_atom)
@@ -40,7 +40,7 @@
if(!isGlass || !smash_duration)
return 0
- var/list/chance_table = list(90, 90, 85, 85, 60, 35, 15) //starting from distance 0
+ var/list/chance_table = list(100, 95, 90, 85, 75, 55, 35) //starting from distance 0
var/idx = max(distance + 1, 1) //since list indices start at 1
if(idx > chance_table.len)
return 0
@@ -137,63 +137,37 @@
else
set_light(0)
-/obj/item/weapon/reagent_containers/food/drinks/bottle/attack(mob/living/target as mob, mob/living/user as mob)
- if(!target)
+/obj/item/weapon/reagent_containers/food/drinks/bottle/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone)
+ var/blocked = ..()
+
+ if(user.a_intent != I_HURT)
return
-
- if(user.a_intent != I_HURT || !isGlass)
- return ..()
-
- var/affecting = user.zone_sel.selecting //Find what the player is aiming at
-
- var/armor_block = 0 //Get the target's armour values for normal attack damage.
- var/armor_duration = 0 //The more force the bottle has, the longer the duration.
-
- //Calculating duration and calculating damage.
- armor_block = target.run_armor_check(affecting, "melee")
-
- //force will counteract armour, but will never increase duration
- armor_duration = smash_duration + min(0, force - target.getarmor(affecting, "melee") + 10)
-
- //Apply the damage!
- target.apply_damage(force, BRUTE, affecting, armor_block, sharp=0)
+ if(!smash_check(1))
+ return //won't always break on the first hit
// You are going to knock someone out for longer if they are not wearing a helmet.
- var/do_smash = smash_check(1) //won't always break on the first hit
- var/mob/living/carbon/human/H = target
- if(do_smash && istype(H) && H.headcheck(affecting))
- //Display an attack message.
- var/obj/item/organ/O = H.get_organ(affecting)
- user.visible_message("[user] smashes [src] into [H]'s [O.name]! ")
- //Weaken the target for the duration that we calculated and divide it by 5.
- if(armor_duration)
- target.apply_effect(min(armor_duration, 5) , WEAKEN, armor_block) // Never weaken more than a flash!
+ var/weaken_duration = 0
+ if(blocked < 100)
+ weaken_duration = smash_duration + min(0, force - target.getarmor(hit_zone, "melee") + 10)
+
+ if(hit_zone == "head" && istype(target, /mob/living/carbon/))
+ user.visible_message("\The [user] smashes [src] over [target]'s head! ")
+ if(weaken_duration)
+ target.apply_effect(min(weaken_duration, 5), WEAKEN, blocked) // Never weaken more than a flash!
else
- //Default attack message and don't weaken the target.
- for(var/mob/O in viewers(user, null))
- if(target != user) O.show_message(text("\red [target] has been attacked with a bottle of [src.name], by [user]! "), 1)
- else O.show_message(text("\red [target] has attacked \himself with a bottle of [src.name]! "), 1)
+ user.visible_message("\The [user] smashes [src] into [target]! ")
- //Attack logs
- user.attack_log += text("\[[time_stamp()]\] Has attacked [target.name] ([target.ckey]) with a bottle! ")
- target.attack_log += text("\[[time_stamp()]\] Has been smashed with a bottle by [user.name] ([user.ckey]) ")
- msg_admin_attack("[user.name] ([user.ckey]) attacked [target.name] ([target.ckey]) with a bottle. (INTENT: [uppertext(user.a_intent)]) (JMP )")
+ //The reagents in the bottle splash all over the target, thanks for the idea Nodrak
+ if(reagents)
+ user.visible_message("The contents of \the [src] splash all over [target]! ")
+ reagents.splash(target, reagents.total_volume)
- if(do_smash)
- //The reagents in the bottle splash all over the target, thanks for the idea Nodrak
- if(reagents)
- user.visible_message("The contents of the [src] splash all over [target]! ")
- reagents.splash(target, reagents.total_volume)
-
- //Finally, smash the bottle. This kills (qdel) the bottle.
- var/obj/item/weapon/broken_bottle/B = src.smash(target.loc, target)
- user.put_in_active_hand(B)
-
- return
+ //Finally, smash the bottle. This kills (qdel) the bottle.
+ var/obj/item/weapon/broken_bottle/B = smash(target.loc, target)
+ user.put_in_active_hand(B)
//Keeping this here for now, I'll ask if I should keep it here.
/obj/item/weapon/broken_bottle
-
name = "Broken Bottle"
desc = "A bottle with a sharp broken bottom."
icon = 'icons/obj/drinks.dmi'
@@ -212,204 +186,225 @@
playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1)
return ..()
-
/obj/item/weapon/reagent_containers/food/drinks/bottle/gin
name = "Griffeater Gin"
desc = "A bottle of high quality gin, produced in the New London Space Station."
icon_state = "ginbottle"
center_of_mass = list("x"=16, "y"=4)
- New()
- ..()
- reagents.add_reagent("gin", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/gin/New()
+ ..()
+ reagents.add_reagent("gin", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey
name = "Uncle Git's Special Reserve"
desc = "A premium single-malt whiskey, gently matured inside the tunnels of a nuclear shelter. TUNNEL WHISKEY RULES."
icon_state = "whiskeybottle"
center_of_mass = list("x"=16, "y"=3)
- New()
- ..()
- reagents.add_reagent("whiskey", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey/New()
+ ..()
+ reagents.add_reagent("whiskey", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/specialwhiskey
name = "Special Blend Whiskey"
desc = "Just when you thought regular station whiskey was good... This silky, amber goodness has to come along and ruin everything."
icon_state = "whiskeybottle2"
center_of_mass = list("x"=16, "y"=3)
- New()
- ..()
- reagents.add_reagent("specialwhiskey", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/specialwhiskey/New()
+ ..()
+ reagents.add_reagent("specialwhiskey", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka
name = "Tunguska Triple Distilled"
desc = "Aah, vodka. Prime choice of drink AND fuel by Russians worldwide."
icon_state = "vodkabottle"
center_of_mass = list("x"=17, "y"=3)
- New()
- ..()
- reagents.add_reagent("vodka", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka/New()
+ ..()
+ reagents.add_reagent("vodka", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/tequilla
name = "Caccavo Guaranteed Quality Tequilla"
desc = "Made from premium petroleum distillates, pure thalidomide and other fine quality ingredients!"
icon_state = "tequillabottle"
center_of_mass = list("x"=16, "y"=3)
- New()
- ..()
- reagents.add_reagent("tequilla", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/tequilla/New()
+ ..()
+ reagents.add_reagent("tequilla", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing
name = "Bottle of Nothing"
desc = "A bottle filled with nothing"
icon_state = "bottleofnothing"
center_of_mass = list("x"=17, "y"=5)
- New()
- ..()
- reagents.add_reagent("nothing", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing/New()
+ ..()
+ reagents.add_reagent("nothing", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/patron
name = "Wrapp Artiste Patron"
desc = "Silver laced tequilla, served in space night clubs across the galaxy."
icon_state = "patronbottle"
center_of_mass = list("x"=16, "y"=6)
- New()
- ..()
- reagents.add_reagent("patron", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/patron/New()
+ ..()
+ reagents.add_reagent("patron", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/rum
name = "Captain Pete's Cuban Spiced Rum"
desc = "This isn't just rum, oh no. It's practically GRIFF in a bottle."
icon_state = "rumbottle"
center_of_mass = list("x"=16, "y"=8)
- New()
- ..()
- reagents.add_reagent("rum", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/rum/New()
+ ..()
+ reagents.add_reagent("rum", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/holywater
name = "Flask of Holy Water"
desc = "A flask of the chaplain's holy water."
icon_state = "holyflask"
center_of_mass = list("x"=17, "y"=10)
- New()
- ..()
- reagents.add_reagent("holywater", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/holywater/New()
+ ..()
+ reagents.add_reagent("holywater", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/vermouth
name = "Goldeneye Vermouth"
desc = "Sweet, sweet dryness~"
icon_state = "vermouthbottle"
center_of_mass = list("x"=17, "y"=3)
- New()
- ..()
- reagents.add_reagent("vermouth", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/vermouth/New()
+ ..()
+ reagents.add_reagent("vermouth", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/kahlua
name = "Robert Robust's Coffee Liqueur"
desc = "A widely known, Mexican coffee-flavoured liqueur. In production since 1936, HONK"
icon_state = "kahluabottle"
center_of_mass = list("x"=17, "y"=3)
- New()
- ..()
- reagents.add_reagent("kahlua", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/kahlua/New()
+ ..()
+ reagents.add_reagent("kahlua", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/goldschlager
name = "College Girl Goldschlager"
desc = "Because they are the only ones who will drink 100 proof cinnamon schnapps."
icon_state = "goldschlagerbottle"
center_of_mass = list("x"=15, "y"=3)
- New()
- ..()
- reagents.add_reagent("goldschlager", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/goldschlager/New()
+ ..()
+ reagents.add_reagent("goldschlager", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/cognac
name = "Chateau De Baton Premium Cognac"
desc = "A sweet and strongly alchoholic drink, made after numerous distillations and years of maturing. You might as well not scream 'SHITCURITY' this time."
icon_state = "cognacbottle"
center_of_mass = list("x"=16, "y"=6)
- New()
- ..()
- reagents.add_reagent("cognac", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/cognac/New()
+ ..()
+ reagents.add_reagent("cognac", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/wine
name = "Doublebeard Bearded Special Wine"
desc = "A faint aura of unease and asspainery surrounds the bottle."
icon_state = "winebottle"
center_of_mass = list("x"=16, "y"=4)
- New()
- ..()
- reagents.add_reagent("wine", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/wine/New()
+ ..()
+ reagents.add_reagent("wine", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe
name = "Jailbreaker Verte"
desc = "One sip of this and you just know you're gonna have a good time."
icon_state = "absinthebottle"
center_of_mass = list("x"=16, "y"=6)
- New()
- ..()
- reagents.add_reagent("absinthe", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe/New()
+ ..()
+ reagents.add_reagent("absinthe", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/melonliquor
name = "Emeraldine Melon Liquor"
desc = "A bottle of 46 proof Emeraldine Melon Liquor. Sweet and light."
icon_state = "alco-green" //Placeholder.
center_of_mass = list("x"=16, "y"=6)
- New()
- ..()
- reagents.add_reagent("melonliquor", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/melonliquor/New()
+ ..()
+ reagents.add_reagent("melonliquor", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/bluecuracao
name = "Miss Blue Curacao"
desc = "A fruity, exceptionally azure drink. Does not allow the imbiber to use the fifth magic."
icon_state = "alco-blue" //Placeholder.
center_of_mass = list("x"=16, "y"=6)
- New()
- ..()
- reagents.add_reagent("bluecuracao", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/bluecuracao/New()
+ ..()
+ reagents.add_reagent("bluecuracao", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/grenadine
name = "Briar Rose Grenadine Syrup"
desc = "Sweet and tangy, a bar syrup used to add color or flavor to drinks."
icon_state = "grenadinebottle"
center_of_mass = list("x"=16, "y"=6)
- New()
- ..()
- reagents.add_reagent("grenadine", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/grenadine/New()
+ ..()
+ reagents.add_reagent("grenadine", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/cola
name = "\improper Space Cola"
desc = "Cola. in space"
icon_state = "colabottle"
center_of_mass = list("x"=16, "y"=6)
- New()
- ..()
- reagents.add_reagent("cola", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/cola/New()
+ ..()
+ reagents.add_reagent("cola", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/space_up
name = "\improper Space-Up"
desc = "Tastes like a hull breach in your mouth."
icon_state = "space-up_bottle"
center_of_mass = list("x"=16, "y"=6)
- New()
- ..()
- reagents.add_reagent("space_up", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/space_up/New()
+ ..()
+ reagents.add_reagent("space_up", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/space_mountain_wind
name = "\improper Space Mountain Wind"
desc = "Blows right through you like a space wind."
icon_state = "space_mountain_wind_bottle"
center_of_mass = list("x"=16, "y"=6)
- New()
- ..()
- reagents.add_reagent("spacemountainwind", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/space_mountain_wind/New()
+ ..()
+ reagents.add_reagent("spacemountainwind", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/pwine
name = "Warlock's Velvet"
desc = "What a delightful packaging for a surely high quality wine! The vintage must be amazing!"
icon_state = "pwinebottle"
center_of_mass = list("x"=16, "y"=4)
- New()
- ..()
- reagents.add_reagent("pwine", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/pwine/New()
+ ..()
+ reagents.add_reagent("pwine", 100)
//////////////////////////JUICES AND STUFF ///////////////////////
@@ -420,9 +415,10 @@
item_state = "carton"
center_of_mass = list("x"=16, "y"=7)
isGlass = 0
- New()
- ..()
- reagents.add_reagent("orangejuice", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice/New()
+ ..()
+ reagents.add_reagent("orangejuice", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/cream
name = "Milk Cream"
@@ -431,9 +427,10 @@
item_state = "carton"
center_of_mass = list("x"=16, "y"=8)
isGlass = 0
- New()
- ..()
- reagents.add_reagent("cream", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/cream/New()
+ ..()
+ reagents.add_reagent("cream", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/tomatojuice
name = "Tomato Juice"
@@ -442,9 +439,10 @@
item_state = "carton"
center_of_mass = list("x"=16, "y"=8)
isGlass = 0
- New()
- ..()
- reagents.add_reagent("tomatojuice", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/tomatojuice/New()
+ ..()
+ reagents.add_reagent("tomatojuice", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/limejuice
name = "Lime Juice"
@@ -453,9 +451,10 @@
item_state = "carton"
center_of_mass = list("x"=16, "y"=8)
isGlass = 0
- New()
- ..()
- reagents.add_reagent("limejuice", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/limejuice/New()
+ ..()
+ reagents.add_reagent("limejuice", 100)
//Small bottles
/obj/item/weapon/reagent_containers/food/drinks/bottle/small
@@ -469,9 +468,10 @@
desc = "Contains only water, malt and hops."
icon_state = "beer"
center_of_mass = list("x"=16, "y"=12)
- New()
- ..()
- reagents.add_reagent("beer", 30)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/New()
+ ..()
+ reagents.add_reagent("beer", 30)
/obj/item/weapon/reagent_containers/food/drinks/bottle/small/ale
name = "\improper Magm-Ale"
@@ -479,6 +479,7 @@
icon_state = "alebottle"
item_state = "beer"
center_of_mass = list("x"=16, "y"=10)
- New()
- ..()
- reagents.add_reagent("ale", 30)
\ No newline at end of file
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/small/ale/New()
+ ..()
+ reagents.add_reagent("ale", 30)
diff --git a/code/modules/reagents/reagent_containers/food/drinks/cup.dm b/code/modules/reagents/reagent_containers/food/drinks/cup.dm
new file mode 100644
index 0000000000..087d2dec5b
--- /dev/null
+++ b/code/modules/reagents/reagent_containers/food/drinks/cup.dm
@@ -0,0 +1,39 @@
+/obj/item/weapon/reagent_containers/food/drinks/cup
+ name = "coffee cup"
+ desc = "The container of oriental luxuries."
+ icon_state = "cup_empty"
+ amount_per_transfer_from_this = 5
+ volume = 30
+ center_of_mass = list("x"=16, "y"=16)
+
+/obj/item/weapon/reagent_containers/food/drinks/cup/on_reagent_change()
+ ..()
+ if (reagents.reagent_list.len > 0)
+ var/datum/reagent/R = reagents.get_master_reagent()
+
+ if(R.cup_icon_state)
+ icon_state = R.cup_icon_state
+ else
+ icon_state = "cup_brown"
+
+ if(R.cup_name)
+ name = R.cup_name
+ else
+ name = "Cup of.. what?"
+
+ if(R.cup_desc)
+ desc = R.cup_desc
+ else
+ desc = "You can't really tell what this is."
+
+ if(R.cup_center_of_mass)
+ center_of_mass = R.cup_center_of_mass
+ else
+ center_of_mass = list("x"=16, "y"=16)
+
+ else
+ icon_state = "cup_empty"
+ name = "coffee cup"
+ desc = "The container of oriental luxuries."
+ center_of_mass = list("x"=16, "y"=16)
+ return
diff --git a/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm b/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm
index 63a467dcfd..b10feb2b59 100644
--- a/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm
+++ b/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm
@@ -8,6 +8,7 @@
volume = 30
unacidable = 1 //glass
center_of_mass = list("x"=16, "y"=10)
+ matter = list("glass" = 500)
on_reagent_change()
/*if(reagents.reagent_list.len > 1 )
@@ -107,3 +108,71 @@
..()
reagents.add_reagent("cola", 50)
on_reagent_change()
+
+/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass
+ name = "shot glass"
+ desc = "No glasses were shot in the making of this glass."
+ icon_state = "shotglass"
+ amount_per_transfer_from_this = 10
+ volume = 10
+ matter = list("glass" = 175)
+
+/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass/on_reagent_change()
+ overlays.Cut()
+
+ if(reagents.total_volume)
+ var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]1")
+
+ switch(reagents.total_volume)
+ if(0 to 3) filling.icon_state = "[icon_state]1"
+ if(4 to 7) filling.icon_state = "[icon_state]5"
+ if(8 to INFINITY) filling.icon_state = "[icon_state]12"
+
+ filling.color += reagents.get_color()
+ overlays += filling
+ name = "shot glass of " + reagents.get_master_reagent_name() //No matter what, the glass will tell you the reagent's name. Might be too abusable in the future.
+ else
+ name = "shot glass"
+
+/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask
+ name = "fitness shaker"
+ desc = "Big enough to contain enough protein to get perfectly swole. Don't mind the bits."
+ icon_state = "fitness-cup_black"
+ volume = 100
+ matter = list("plastic" = 2000)
+
+/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask/New()
+ ..()
+ icon_state = pick("fitness-cup_black", "fitness-cup_red", "fitness-cup_black")
+
+/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask/on_reagent_change()
+ overlays.Cut()
+
+ if(reagents.total_volume)
+ var/image/filling = image('icons/obj/reagentfillings.dmi', src, "fitness-cup10")
+
+ switch(reagents.total_volume)
+ if(0 to 10) filling.icon_state = "fitness-cup10"
+ if(11 to 20) filling.icon_state = "fitness-cup20"
+ if(21 to 29) filling.icon_state = "fitness-cup30"
+ if(30 to 39) filling.icon_state = "fitness-cup40"
+ if(40 to 49) filling.icon_state = "fitness-cup50"
+ if(50 to 59) filling.icon_state = "fitness-cup60"
+ if(60 to 69) filling.icon_state = "fitness-cup70"
+ if(70 to 79) filling.icon_state = "fitness-cup80"
+ if(80 to 89) filling.icon_state = "fitness-cup90"
+ if(90 to INFINITY) filling.icon_state = "fitness-cup100"
+
+ filling.color += reagents.get_color()
+ overlays += filling
+
+/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask/proteinshake
+ name = "protein shake"
+
+/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask/proteinshake/New()
+ ..()
+ reagents.add_reagent("nutriment", 30)
+ reagents.add_reagent("iron", 10)
+ reagents.add_reagent("protein", 15)
+ reagents.add_reagent("water", 45)
+ on_reagent_change()
\ No newline at end of file
diff --git a/code/modules/reagents/reagent_containers/food/lunch.dm b/code/modules/reagents/reagent_containers/food/lunch.dm
new file mode 100644
index 0000000000..794d7f69dd
--- /dev/null
+++ b/code/modules/reagents/reagent_containers/food/lunch.dm
@@ -0,0 +1,115 @@
+var/list/lunchables_lunches_ = list(/obj/item/weapon/reagent_containers/food/snacks/sandwich,
+ /obj/item/weapon/reagent_containers/food/snacks/meatbreadslice,
+ /obj/item/weapon/reagent_containers/food/snacks/tofubreadslice,
+ /obj/item/weapon/reagent_containers/food/snacks/creamcheesebreadslice,
+ /obj/item/weapon/reagent_containers/food/snacks/margheritaslice,
+ /obj/item/weapon/reagent_containers/food/snacks/meatpizzaslice,
+ /obj/item/weapon/reagent_containers/food/snacks/mushroompizzaslice,
+ /obj/item/weapon/reagent_containers/food/snacks/vegetablepizzaslice,
+ /obj/item/weapon/reagent_containers/food/snacks/tastybread,
+ /obj/item/weapon/reagent_containers/food/snacks/liquidfood,
+ /obj/item/weapon/reagent_containers/food/snacks/jellysandwich/cherry,
+ /obj/item/weapon/reagent_containers/food/snacks/tossedsalad)
+
+var/list/lunchables_snacks_ = list(/obj/item/weapon/reagent_containers/food/snacks/donut/jelly,
+ /obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly,
+ /obj/item/weapon/reagent_containers/food/snacks/muffin,
+ /obj/item/weapon/reagent_containers/food/snacks/popcorn,
+ /obj/item/weapon/reagent_containers/food/snacks/sosjerky,
+ /obj/item/weapon/reagent_containers/food/snacks/no_raisin,
+ /obj/item/weapon/reagent_containers/food/snacks/spacetwinkie,
+ /obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers,
+ /obj/item/weapon/reagent_containers/food/snacks/poppypretzel,
+ /obj/item/weapon/reagent_containers/food/snacks/carrotfries,
+ /obj/item/weapon/reagent_containers/food/snacks/candiedapple,
+ /obj/item/weapon/reagent_containers/food/snacks/applepie,
+ /obj/item/weapon/reagent_containers/food/snacks/cherrypie,
+ /obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit,
+ /obj/item/weapon/reagent_containers/food/snacks/appletart,
+ /obj/item/weapon/reagent_containers/food/snacks/carrotcakeslice,
+ /obj/item/weapon/reagent_containers/food/snacks/cheesecakeslice,
+ /obj/item/weapon/reagent_containers/food/snacks/plaincakeslice,
+ /obj/item/weapon/reagent_containers/food/snacks/orangecakeslice,
+ /obj/item/weapon/reagent_containers/food/snacks/limecakeslice,
+ /obj/item/weapon/reagent_containers/food/snacks/lemoncakeslice,
+ /obj/item/weapon/reagent_containers/food/snacks/chocolatecakeslice,
+ /obj/item/weapon/reagent_containers/food/snacks/birthdaycakeslice,
+ /obj/item/weapon/reagent_containers/food/snacks/watermelonslice,
+ /obj/item/weapon/reagent_containers/food/snacks/applecakeslice,
+ /obj/item/weapon/reagent_containers/food/snacks/pumpkinpieslice,
+ /obj/item/weapon/reagent_containers/food/snacks/skrellsnacks)
+
+var/list/lunchables_drinks_ = list(/obj/item/weapon/reagent_containers/food/drinks/cans/cola,
+ /obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle,
+ /obj/item/weapon/reagent_containers/food/drinks/cans/space_mountain_wind,
+ /obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb,
+ /obj/item/weapon/reagent_containers/food/drinks/cans/starkist,
+ /obj/item/weapon/reagent_containers/food/drinks/cans/space_up,
+ /obj/item/weapon/reagent_containers/food/drinks/cans/lemon_lime,
+ /obj/item/weapon/reagent_containers/food/drinks/cans/iced_tea,
+ /obj/item/weapon/reagent_containers/food/drinks/cans/grape_juice,
+ /obj/item/weapon/reagent_containers/food/drinks/cans/tonic,
+ /obj/item/weapon/reagent_containers/food/drinks/cans/sodawater)
+
+// This default list is a bit different, it contains items we don't want
+var/list/lunchables_drink_reagents_ = list(/datum/reagent/drink/nothing,
+ /datum/reagent/drink/doctor_delight,
+ /datum/reagent/drink/dry_ramen,
+ /datum/reagent/drink/hell_ramen,
+ /datum/reagent/drink/hot_ramen,
+ /datum/reagent/drink/nuka_cola,)
+
+// This default list is a bit different, it contains items we don't want
+var/list/lunchables_ethanol_reagents_ = list(/datum/reagent/ethanol/acid_spit,
+ /datum/reagent/ethanol/atomicbomb,
+ /datum/reagent/ethanol/beepsky_smash,
+ /datum/reagent/ethanol/coffee,
+ /datum/reagent/ethanol/hippies_delight,
+ /datum/reagent/ethanol/hooch,
+ /datum/reagent/ethanol/thirteenloko,
+ /datum/reagent/ethanol/manhattan_proj,
+ /datum/reagent/ethanol/neurotoxin,
+ /datum/reagent/ethanol/pwine,
+ /datum/reagent/ethanol/threemileisland,
+ /datum/reagent/ethanol/toxins_special)
+
+/proc/lunchables_lunches()
+ if(!(lunchables_lunches_[lunchables_lunches_[1]]))
+ lunchables_lunches_ = init_lunchable_list(lunchables_lunches_)
+ return lunchables_lunches_
+
+/proc/lunchables_snacks()
+ if(!(lunchables_snacks_[lunchables_snacks_[1]]))
+ lunchables_snacks_ = init_lunchable_list(lunchables_snacks_)
+ return lunchables_snacks_
+
+/proc/lunchables_drinks()
+ if(!(lunchables_drinks_[lunchables_drinks_[1]]))
+ lunchables_drinks_ = init_lunchable_list(lunchables_drinks_)
+ return lunchables_drinks_
+
+/proc/lunchables_drink_reagents()
+ if(!(lunchables_drink_reagents_[lunchables_drink_reagents_[1]]))
+ lunchables_drink_reagents_ = init_lunchable_reagent_list(lunchables_drink_reagents_, /datum/reagent/drink)
+ return lunchables_drink_reagents_
+
+/proc/lunchables_ethanol_reagents()
+ if(!(lunchables_ethanol_reagents_[lunchables_ethanol_reagents_[1]]))
+ lunchables_ethanol_reagents_ = init_lunchable_reagent_list(lunchables_ethanol_reagents_, /datum/reagent/ethanol)
+ return lunchables_ethanol_reagents_
+
+/proc/init_lunchable_list(var/list/lunches)
+ . = list()
+ for(var/lunch in lunches)
+ var/obj/O = lunch
+ .[initial(O.name)] = lunch
+ return sortAssoc(.)
+
+/proc/init_lunchable_reagent_list(var/list/banned_reagents, var/reagent_types)
+ . = list()
+ for(var/reagent_type in subtypesof(reagent_types))
+ if(reagent_type in banned_reagents)
+ continue
+ var/datum/reagent/reagent = reagent_type
+ .[initial(reagent.name)] = initial(reagent.id)
+ return sortAssoc(.)
diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm
index 5034c8aac0..45b0eb97b8 100644
--- a/code/modules/reagents/reagent_containers/food/snacks.dm
+++ b/code/modules/reagents/reagent_containers/food/snacks.dm
@@ -41,6 +41,8 @@
return 0
if(istype(M, /mob/living/carbon))
+ //TODO: replace with standard_feed_mob() call.
+
var/fullness = M.nutrition + (M.reagents.get_reagent_amount("nutriment") * 25)
if(M == user) //If you're eating it yourself
if(istype(M,/mob/living/carbon/human))
@@ -53,6 +55,7 @@
user << "\The [blocked] is in the way! "
return
+ user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) //puts a limit on how fast people can eat/drink things
if (fullness <= 50)
M << "You hungrily chew out a piece of [src] and gobble it! "
if (fullness > 50 && fullness <= 150)
@@ -83,6 +86,7 @@
user.visible_message("[user] cannot force anymore of [src] down [M]'s throat. ")
return 0
+ user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
if(!do_mob(user, M)) return
M.attack_log += text("\[[time_stamp()]\] Has been fed [src.name] by [user.name] ([user.ckey]) Reagents: [reagentlist(src)] ")
@@ -252,12 +256,12 @@
filling_color = "#468C00"
center_of_mass = list("x"=17, "y"=11)
- New()
- ..()
- reagents.add_reagent("nutriment", 8)
- reagents.add_reagent("doctorsdelight", 8)
- reagents.add_reagent("tricordrazine", 8)
- bitesize = 3
+/obj/item/weapon/reagent_containers/food/snacks/aesirsalad/New()
+ ..()
+ reagents.add_reagent("nutriment", 8)
+ reagents.add_reagent("doctorsdelight", 8)
+ reagents.add_reagent("tricordrazine", 8)
+ bitesize = 3
/obj/item/weapon/reagent_containers/food/snacks/candy
name = "candy"
@@ -267,22 +271,35 @@
filling_color = "#7D5F46"
center_of_mass = list("x"=15, "y"=15)
- New()
- ..()
- reagents.add_reagent("nutriment", 1)
- reagents.add_reagent("sugar", 3)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/candy/New()
+ ..()
+ reagents.add_reagent("nutriment", 1)
+ reagents.add_reagent("sugar", 3)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/candy/proteinbar
+ name = "protein bar"
+ desc = "SwoleMAX brand protein bars, guaranteed to get you feeling perfectly overconfident."
+ icon_state = "proteinbar"
+ trash = /obj/item/trash/candy/proteinbar
+
+/obj/item/weapon/reagent_containers/food/snacks/candy/proteinbar/New()
+ ..()
+ reagents.add_reagent("nutriment", 9)
+ reagents.add_reagent("protein", 4)
+ reagents.add_reagent("sugar", 4)
+ bitesize = 6
/obj/item/weapon/reagent_containers/food/snacks/candy/donor
name = "Donor Candy"
desc = "A little treat for blood donors."
trash = /obj/item/trash/candy
- New()
- ..()
- reagents.add_reagent("nutriment", 10)
- reagents.add_reagent("sugar", 3)
- bitesize = 5
+/obj/item/weapon/reagent_containers/food/snacks/candy/donor/New()
+ ..()
+ reagents.add_reagent("nutriment", 10)
+ reagents.add_reagent("sugar", 3)
+ bitesize = 5
/obj/item/weapon/reagent_containers/food/snacks/candy_corn
name = "candy corn"
@@ -291,11 +308,11 @@
filling_color = "#FFFCB0"
center_of_mass = list("x"=14, "y"=10)
- New()
- ..()
- reagents.add_reagent("nutriment", 4)
- reagents.add_reagent("sugar", 2)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/candy_corn/New()
+ ..()
+ reagents.add_reagent("nutriment", 4)
+ reagents.add_reagent("sugar", 2)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/chips
name = "chips"
@@ -305,10 +322,10 @@
filling_color = "#E8C31E"
center_of_mass = list("x"=15, "y"=15)
- New()
- ..()
- reagents.add_reagent("nutriment", 3)
- bitesize = 1
+/obj/item/weapon/reagent_containers/food/snacks/chips/New()
+ ..()
+ reagents.add_reagent("nutriment", 3)
+ bitesize = 1
/obj/item/weapon/reagent_containers/food/snacks/cookie
name = "cookie"
@@ -317,10 +334,10 @@
filling_color = "#DBC94F"
center_of_mass = list("x"=17, "y"=18)
- New()
- ..()
- reagents.add_reagent("nutriment", 5)
- bitesize = 1
+/obj/item/weapon/reagent_containers/food/snacks/cookie/New()
+ ..()
+ reagents.add_reagent("nutriment", 5)
+ bitesize = 1
/obj/item/weapon/reagent_containers/food/snacks/chocolatebar
name = "Chocolate Bar"
@@ -329,12 +346,12 @@
filling_color = "#7D5F46"
center_of_mass = list("x"=15, "y"=15)
- New()
- ..()
- reagents.add_reagent("nutriment", 2)
- reagents.add_reagent("sugar", 2)
- reagents.add_reagent("coco", 2)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/chocolatebar/New()
+ ..()
+ reagents.add_reagent("nutriment", 2)
+ reagents.add_reagent("sugar", 2)
+ reagents.add_reagent("coco", 2)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/chocolateegg
name = "Chocolate Egg"
@@ -343,12 +360,12 @@
filling_color = "#7D5F46"
center_of_mass = list("x"=16, "y"=13)
- New()
- ..()
- reagents.add_reagent("nutriment", 3)
- reagents.add_reagent("sugar", 2)
- reagents.add_reagent("coco", 2)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/chocolateegg/New()
+ ..()
+ reagents.add_reagent("nutriment", 3)
+ reagents.add_reagent("sugar", 2)
+ reagents.add_reagent("coco", 2)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/donut
name = "donut"
@@ -362,17 +379,18 @@
name = "donut"
desc = "Goes great with Robust Coffee."
icon_state = "donut1"
- New()
- ..()
- reagents.add_reagent("nutriment", 3)
- reagents.add_reagent("sprinkles", 1)
- src.bitesize = 3
- if(prob(30))
- src.icon_state = "donut2"
- src.overlay_state = "box-donut2"
- src.name = "frosted donut"
- reagents.add_reagent("sprinkles", 2)
- center_of_mass = list("x"=19, "y"=16)
+
+/obj/item/weapon/reagent_containers/food/snacks/donut/normal/New()
+ ..()
+ reagents.add_reagent("nutriment", 3)
+ reagents.add_reagent("sprinkles", 1)
+ src.bitesize = 3
+ if(prob(30))
+ src.icon_state = "donut2"
+ src.overlay_state = "box-donut2"
+ src.name = "frosted donut"
+ reagents.add_reagent("sprinkles", 2)
+ center_of_mass = list("x"=19, "y"=16)
/obj/item/weapon/reagent_containers/food/snacks/donut/chaos
name = "Chaos Donut"
@@ -380,39 +398,38 @@
icon_state = "donut1"
filling_color = "#ED11E6"
- New()
- ..()
- reagents.add_reagent("nutriment", 2)
- reagents.add_reagent("sprinkles", 1)
- bitesize = 10
- var/chaosselect = pick(1,2,3,4,5,6,7,8,9,10)
- switch(chaosselect)
- if(1)
- reagents.add_reagent("nutriment", 3)
- if(2)
- reagents.add_reagent("capsaicin", 3)
- if(3)
- reagents.add_reagent("frostoil", 3)
- if(4)
- reagents.add_reagent("sprinkles", 3)
- if(5)
- reagents.add_reagent("phoron", 3)
- if(6)
- reagents.add_reagent("coco", 3)
- if(7)
- reagents.add_reagent("slimejelly", 3)
- if(8)
- reagents.add_reagent("banana", 3)
- if(9)
- reagents.add_reagent("berryjuice", 3)
- if(10)
- reagents.add_reagent("tricordrazine", 3)
- if(prob(30))
- src.icon_state = "donut2"
- src.overlay_state = "box-donut2"
- src.name = "Frosted Chaos Donut"
- reagents.add_reagent("sprinkles", 2)
-
+/obj/item/weapon/reagent_containers/food/snacks/donut/chaos/New()
+ ..()
+ reagents.add_reagent("nutriment", 2)
+ reagents.add_reagent("sprinkles", 1)
+ bitesize = 10
+ var/chaosselect = pick(1,2,3,4,5,6,7,8,9,10)
+ switch(chaosselect)
+ if(1)
+ reagents.add_reagent("nutriment", 3)
+ if(2)
+ reagents.add_reagent("capsaicin", 3)
+ if(3)
+ reagents.add_reagent("frostoil", 3)
+ if(4)
+ reagents.add_reagent("sprinkles", 3)
+ if(5)
+ reagents.add_reagent("phoron", 3)
+ if(6)
+ reagents.add_reagent("coco", 3)
+ if(7)
+ reagents.add_reagent("slimejelly", 3)
+ if(8)
+ reagents.add_reagent("banana", 3)
+ if(9)
+ reagents.add_reagent("berryjuice", 3)
+ if(10)
+ reagents.add_reagent("tricordrazine", 3)
+ if(prob(30))
+ src.icon_state = "donut2"
+ src.overlay_state = "box-donut2"
+ src.name = "Frosted Chaos Donut"
+ reagents.add_reagent("sprinkles", 2)
/obj/item/weapon/reagent_containers/food/snacks/donut/jelly
name = "Jelly Donut"
@@ -421,17 +438,17 @@
filling_color = "#ED1169"
center_of_mass = list("x"=16, "y"=11)
- New()
- ..()
- reagents.add_reagent("nutriment", 3)
- reagents.add_reagent("sprinkles", 1)
- reagents.add_reagent("berryjuice", 5)
- bitesize = 5
- if(prob(30))
- src.icon_state = "jdonut2"
- src.overlay_state = "box-donut2"
- src.name = "Frosted Jelly Donut"
- reagents.add_reagent("sprinkles", 2)
+/obj/item/weapon/reagent_containers/food/snacks/donut/jelly/New()
+ ..()
+ reagents.add_reagent("nutriment", 3)
+ reagents.add_reagent("sprinkles", 1)
+ reagents.add_reagent("berryjuice", 5)
+ bitesize = 5
+ if(prob(30))
+ src.icon_state = "jdonut2"
+ src.overlay_state = "box-donut2"
+ src.name = "Frosted Jelly Donut"
+ reagents.add_reagent("sprinkles", 2)
/obj/item/weapon/reagent_containers/food/snacks/donut/slimejelly
name = "Jelly Donut"
@@ -440,17 +457,17 @@
filling_color = "#ED1169"
center_of_mass = list("x"=16, "y"=11)
- New()
- ..()
- reagents.add_reagent("nutriment", 3)
- reagents.add_reagent("sprinkles", 1)
- reagents.add_reagent("slimejelly", 5)
- bitesize = 5
- if(prob(30))
- src.icon_state = "jdonut2"
- src.overlay_state = "box-donut2"
- src.name = "Frosted Jelly Donut"
- reagents.add_reagent("sprinkles", 2)
+/obj/item/weapon/reagent_containers/food/snacks/donut/slimejelly/New()
+ ..()
+ reagents.add_reagent("nutriment", 3)
+ reagents.add_reagent("sprinkles", 1)
+ reagents.add_reagent("slimejelly", 5)
+ bitesize = 5
+ if(prob(30))
+ src.icon_state = "jdonut2"
+ src.overlay_state = "box-donut2"
+ src.name = "Frosted Jelly Donut"
+ reagents.add_reagent("sprinkles", 2)
/obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly
name = "Jelly Donut"
@@ -459,17 +476,17 @@
filling_color = "#ED1169"
center_of_mass = list("x"=16, "y"=11)
- New()
- ..()
- reagents.add_reagent("nutriment", 3)
- reagents.add_reagent("sprinkles", 1)
- reagents.add_reagent("cherryjelly", 5)
- bitesize = 5
- if(prob(30))
- src.icon_state = "jdonut2"
- src.overlay_state = "box-donut2"
- src.name = "Frosted Jelly Donut"
- reagents.add_reagent("sprinkles", 2)
+/obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly/New()
+ ..()
+ reagents.add_reagent("nutriment", 3)
+ reagents.add_reagent("sprinkles", 1)
+ reagents.add_reagent("cherryjelly", 5)
+ bitesize = 5
+ if(prob(30))
+ src.icon_state = "jdonut2"
+ src.overlay_state = "box-donut2"
+ src.name = "Frosted Jelly Donut"
+ reagents.add_reagent("sprinkles", 2)
/obj/item/weapon/reagent_containers/food/snacks/egg
name = "egg"
@@ -545,12 +562,12 @@
filling_color = "#FFDF78"
center_of_mass = list("x"=16, "y"=14)
- New()
- ..()
- reagents.add_reagent("protein", 3)
- reagents.add_reagent("sodiumchloride", 1)
- reagents.add_reagent("blackpepper", 1)
- bitesize = 1
+/obj/item/weapon/reagent_containers/food/snacks/friedegg/New()
+ ..()
+ reagents.add_reagent("protein", 3)
+ reagents.add_reagent("sodiumchloride", 1)
+ reagents.add_reagent("blackpepper", 1)
+ bitesize = 1
/obj/item/weapon/reagent_containers/food/snacks/boiledegg
name = "Boiled egg"
@@ -558,9 +575,9 @@
icon_state = "egg"
filling_color = "#FFFFFF"
- New()
- ..()
- reagents.add_reagent("protein", 2)
+/obj/item/weapon/reagent_containers/food/snacks/boiledegg/New()
+ ..()
+ reagents.add_reagent("protein", 2)
/obj/item/weapon/reagent_containers/food/snacks/organ
name = "organ"
@@ -570,11 +587,11 @@
filling_color = "#E00D34"
center_of_mass = list("x"=16, "y"=16)
- New()
- ..()
- reagents.add_reagent("protein", rand(3,5))
- reagents.add_reagent("toxin", rand(1,3))
- src.bitesize = 3
+/obj/item/weapon/reagent_containers/food/snacks/organ/New()
+ ..()
+ reagents.add_reagent("protein", rand(3,5))
+ reagents.add_reagent("toxin", rand(1,3))
+ src.bitesize = 3
/obj/item/weapon/reagent_containers/food/snacks/tofu
name = "Tofu"
@@ -583,10 +600,10 @@
filling_color = "#FFFEE0"
center_of_mass = list("x"=17, "y"=10)
- New()
- ..()
- reagents.add_reagent("nutriment", 3)
- src.bitesize = 3
+/obj/item/weapon/reagent_containers/food/snacks/tofu/New()
+ ..()
+ reagents.add_reagent("nutriment", 3)
+ src.bitesize = 3
/obj/item/weapon/reagent_containers/food/snacks/tofurkey
name = "Tofurkey"
@@ -595,11 +612,11 @@
filling_color = "#FFFEE0"
center_of_mass = list("x"=16, "y"=8)
- New()
- ..()
- reagents.add_reagent("nutriment", 12)
- reagents.add_reagent("stoxin", 3)
- bitesize = 3
+/obj/item/weapon/reagent_containers/food/snacks/tofurkey/New()
+ ..()
+ reagents.add_reagent("nutriment", 12)
+ reagents.add_reagent("stoxin", 3)
+ bitesize = 3
/obj/item/weapon/reagent_containers/food/snacks/stuffing
name = "Stuffing"
@@ -608,10 +625,10 @@
filling_color = "#C9AC83"
center_of_mass = list("x"=16, "y"=10)
- New()
- ..()
- reagents.add_reagent("nutriment", 3)
- bitesize = 1
+/obj/item/weapon/reagent_containers/food/snacks/stuffing/New()
+ ..()
+ reagents.add_reagent("nutriment", 3)
+ bitesize = 1
/obj/item/weapon/reagent_containers/food/snacks/carpmeat
name = "carp fillet"
@@ -620,11 +637,11 @@
filling_color = "#FFDEFE"
center_of_mass = list("x"=17, "y"=13)
- New()
- ..()
- reagents.add_reagent("protein", 3)
- reagents.add_reagent("carpotoxin", 3)
- src.bitesize = 6
+/obj/item/weapon/reagent_containers/food/snacks/carpmeat/New()
+ ..()
+ reagents.add_reagent("protein", 3)
+ reagents.add_reagent("carpotoxin", 3)
+ src.bitesize = 6
/obj/item/weapon/reagent_containers/food/snacks/fishfingers
name = "Fish Fingers"
@@ -633,11 +650,11 @@
filling_color = "#FFDEFE"
center_of_mass = list("x"=16, "y"=13)
- New()
- ..()
- reagents.add_reagent("protein", 4)
- reagents.add_reagent("carpotoxin", 3)
- bitesize = 3
+/obj/item/weapon/reagent_containers/food/snacks/fishfingers/New()
+ ..()
+ reagents.add_reagent("protein", 4)
+ reagents.add_reagent("carpotoxin", 3)
+ bitesize = 3
/obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice
name = "huge mushroom slice"
@@ -646,11 +663,11 @@
filling_color = "#E0D7C5"
center_of_mass = list("x"=17, "y"=16)
- New()
- ..()
- reagents.add_reagent("nutriment", 3)
- reagents.add_reagent("psilocybin", 3)
- src.bitesize = 6
+/obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice/New()
+ ..()
+ reagents.add_reagent("nutriment", 3)
+ reagents.add_reagent("psilocybin", 3)
+ src.bitesize = 6
/obj/item/weapon/reagent_containers/food/snacks/tomatomeat
name = "tomato slice"
@@ -659,10 +676,10 @@
filling_color = "#DB0000"
center_of_mass = list("x"=17, "y"=16)
- New()
- ..()
- reagents.add_reagent("nutriment", 3)
- src.bitesize = 6
+/obj/item/weapon/reagent_containers/food/snacks/tomatomeat/New()
+ ..()
+ reagents.add_reagent("nutriment", 3)
+ src.bitesize = 6
/obj/item/weapon/reagent_containers/food/snacks/bearmeat
name = "bear meat"
@@ -671,11 +688,11 @@
filling_color = "#DB0000"
center_of_mass = list("x"=16, "y"=10)
- New()
- ..()
- reagents.add_reagent("protein", 12)
- reagents.add_reagent("hyperzine", 5)
- src.bitesize = 3
+/obj/item/weapon/reagent_containers/food/snacks/bearmeat/New()
+ ..()
+ reagents.add_reagent("protein", 12)
+ reagents.add_reagent("hyperzine", 5)
+ src.bitesize = 3
/obj/item/weapon/reagent_containers/food/snacks/xenomeat
name = "meat"
@@ -684,11 +701,11 @@
filling_color = "#43DE18"
center_of_mass = list("x"=16, "y"=10)
- New()
- ..()
- reagents.add_reagent("protein", 6)
- reagents.add_reagent("pacid",6)
- src.bitesize = 6
+/obj/item/weapon/reagent_containers/food/snacks/xenomeat/New()
+ ..()
+ reagents.add_reagent("protein", 6)
+ reagents.add_reagent("pacid",6)
+ src.bitesize = 6
/obj/item/weapon/reagent_containers/food/snacks/meatball
name = "meatball"
@@ -697,10 +714,10 @@
filling_color = "#DB0000"
center_of_mass = list("x"=16, "y"=16)
- New()
- ..()
- reagents.add_reagent("protein", 3)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/meatball/New()
+ ..()
+ reagents.add_reagent("protein", 3)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/sausage
name = "Sausage"
@@ -709,10 +726,44 @@
filling_color = "#DB0000"
center_of_mass = list("x"=16, "y"=16)
- New()
- ..()
- reagents.add_reagent("protein", 6)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/sausage/New()
+ ..()
+ reagents.add_reagent("protein", 6)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/donkpocket
+ name = "Donk-pocket"
+ desc = "The food of choice for the seasoned traitor."
+ icon_state = "donkpocket"
+ filling_color = "#DEDEAB"
+ center_of_mass = list("x"=16, "y"=10)
+ var/warm
+ var/list/heated_reagents
+
+/obj/item/weapon/reagent_containers/food/snacks/donkpocket/New()
+ ..()
+ reagents.add_reagent("nutriment", 2)
+ reagents.add_reagent("protein", 2)
+
+ warm = 0
+ heated_reagents = list("tricordrazine" = 5)
+
+/obj/item/weapon/reagent_containers/food/snacks/donkpocket/proc/heat()
+ warm = 1
+ for(var/reagent in heated_reagents)
+ reagents.add_reagent(reagent, heated_reagents[reagent])
+ bitesize = 6
+ name = "Warm " + name
+ cooltime()
+
+/obj/item/weapon/reagent_containers/food/snacks/donkpocket/proc/cooltime()
+ if (src.warm)
+ spawn(4200)
+ src.warm = 0
+ for(var/reagent in heated_reagents)
+ src.reagents.del_reagent(reagent)
+ src.name = initial(name)
+ return
/obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket
name = "\improper Sin-pocket"
@@ -731,37 +782,6 @@
user << "You think \the [src] is ready to eat about now."
heat()
-/obj/item/weapon/reagent_containers/food/snacks/donkpocket
- name = "Donk-pocket"
- desc = "The food of choice for the seasoned traitor."
- icon_state = "donkpocket"
- filling_color = "#DEDEAB"
- center_of_mass = list("x"=16, "y"=10)
-
- New()
- ..()
- reagents.add_reagent("nutriment", 2)
- reagents.add_reagent("protein", 2)
-
- var/warm = 0
- var/list/heated_reagents = list("tricordrazine" = 5)
- proc/heat()
- warm = 1
- for(var/reagent in heated_reagents)
- reagents.add_reagent(reagent, heated_reagents[reagent])
- bitesize = 6
- name = "Warm " + name
- cooltime()
-
- proc/cooltime()
- if (src.warm)
- spawn(4200)
- src.warm = 0
- for(var/reagent in heated_reagents)
- src.reagents.del_reagent(reagent)
- src.name = initial(name)
- return
-
/obj/item/weapon/reagent_containers/food/snacks/brainburger
name = "brainburger"
desc = "A strange looking burger. It looks almost sentient."
@@ -769,11 +789,11 @@
filling_color = "#F2B6EA"
center_of_mass = list("x"=15, "y"=11)
- New()
- ..()
- reagents.add_reagent("protein", 6)
- reagents.add_reagent("alkysine", 6)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/brainburger/New()
+ ..()
+ reagents.add_reagent("protein", 6)
+ reagents.add_reagent("alkysine", 6)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/ghostburger
name = "Ghost Burger"
@@ -782,11 +802,10 @@
filling_color = "#FFF2FF"
center_of_mass = list("x"=16, "y"=11)
- New()
- ..()
- reagents.add_reagent("nutriment", 2)
- bitesize = 2
-
+/obj/item/weapon/reagent_containers/food/snacks/ghostburger/New()
+ ..()
+ reagents.add_reagent("nutriment", 2)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/human
var/hname = ""
@@ -798,10 +817,11 @@
desc = "A bloody burger."
icon_state = "hburger"
center_of_mass = list("x"=16, "y"=11)
- New()
- ..()
- reagents.add_reagent("protein", 6)
- bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/human/burger/New()
+ ..()
+ reagents.add_reagent("protein", 6)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/cheeseburger
name = "cheeseburger"
@@ -809,10 +829,10 @@
icon_state = "cheeseburger"
center_of_mass = list("x"=16, "y"=11)
- New()
- ..()
- reagents.add_reagent("protein", 2)
- reagents.add_reagent("nutriment", 2)
+/obj/item/weapon/reagent_containers/food/snacks/cheeseburger/New()
+ ..()
+ reagents.add_reagent("protein", 2)
+ reagents.add_reagent("nutriment", 2)
/obj/item/weapon/reagent_containers/food/snacks/monkeyburger
name = "burger"
@@ -821,11 +841,11 @@
filling_color = "#D63C3C"
center_of_mass = list("x"=16, "y"=11)
- New()
- ..()
- reagents.add_reagent("protein", 3)
- reagents.add_reagent("nutriment", 3)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/monkeyburger/New()
+ ..()
+ reagents.add_reagent("protein", 3)
+ reagents.add_reagent("nutriment", 3)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/fishburger
name = "Fillet -o- Carp Sandwich"
@@ -834,11 +854,11 @@
filling_color = "#FFDEFE"
center_of_mass = list("x"=16, "y"=10)
- New()
- ..()
- reagents.add_reagent("protein", 6)
- reagents.add_reagent("carpotoxin", 3)
- bitesize = 3
+/obj/item/weapon/reagent_containers/food/snacks/fishburger/New()
+ ..()
+ reagents.add_reagent("protein", 6)
+ reagents.add_reagent("carpotoxin", 3)
+ bitesize = 3
/obj/item/weapon/reagent_containers/food/snacks/tofuburger
name = "Tofu Burger"
@@ -847,10 +867,10 @@
filling_color = "#FFFEE0"
center_of_mass = list("x"=16, "y"=10)
- New()
- ..()
- reagents.add_reagent("nutriment", 6)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/tofuburger/New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/roburger
name = "roburger"
@@ -859,10 +879,10 @@
filling_color = "#CCCCCC"
center_of_mass = list("x"=16, "y"=11)
- New()
- ..()
- reagents.add_reagent("nutriment", 2)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/roburger/New()
+ ..()
+ reagents.add_reagent("nutriment", 2)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/roburgerbig
name = "roburger"
@@ -872,9 +892,9 @@
volume = 100
center_of_mass = list("x"=16, "y"=11)
- New()
- ..()
- bitesize = 0.1
+/obj/item/weapon/reagent_containers/food/snacks/roburgerbig/New()
+ ..()
+ bitesize = 0.1
/obj/item/weapon/reagent_containers/food/snacks/xenoburger
name = "xenoburger"
@@ -883,10 +903,10 @@
filling_color = "#43DE18"
center_of_mass = list("x"=16, "y"=11)
- New()
- ..()
- reagents.add_reagent("protein", 8)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/xenoburger/New()
+ ..()
+ reagents.add_reagent("protein", 8)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/clownburger
name = "Clown Burger"
@@ -895,10 +915,10 @@
filling_color = "#FF00FF"
center_of_mass = list("x"=17, "y"=12)
- New()
- ..()
- reagents.add_reagent("nutriment", 6)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/clownburger/New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/mimeburger
name = "Mime Burger"
@@ -907,10 +927,10 @@
filling_color = "#FFFFFF"
center_of_mass = list("x"=16, "y"=11)
- New()
- ..()
- reagents.add_reagent("nutriment", 6)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/mimeburger/New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/omelette
name = "Omelette Du Fromage"
@@ -920,11 +940,10 @@
filling_color = "#FFF9A8"
center_of_mass = list("x"=16, "y"=13)
- //var/herp = 0
- New()
- ..()
- reagents.add_reagent("protein", 8)
- bitesize = 1
+/obj/item/weapon/reagent_containers/food/snacks/omelette/New()
+ ..()
+ reagents.add_reagent("protein", 8)
+ bitesize = 1
/obj/item/weapon/reagent_containers/food/snacks/muffin
name = "Muffin"
@@ -933,10 +952,10 @@
filling_color = "#E0CF9B"
center_of_mass = list("x"=17, "y"=4)
- New()
- ..()
- reagents.add_reagent("nutriment", 6)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/muffin/New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/pie
name = "Banana Cream Pie"
@@ -965,11 +984,11 @@
trash = /obj/item/trash/plate
center_of_mass = list("x"=16, "y"=13)
- New()
- ..()
- reagents.add_reagent("nutriment", 4)
- reagents.add_reagent("berryjuice", 5)
- bitesize = 3
+/obj/item/weapon/reagent_containers/food/snacks/berryclafoutis/New()
+ ..()
+ reagents.add_reagent("nutriment", 4)
+ reagents.add_reagent("berryjuice", 5)
+ bitesize = 3
/obj/item/weapon/reagent_containers/food/snacks/waffles
name = "waffles"
@@ -979,10 +998,10 @@
filling_color = "#E6DEB5"
center_of_mass = list("x"=15, "y"=11)
- New()
- ..()
- reagents.add_reagent("nutriment", 8)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/waffles/New()
+ ..()
+ reagents.add_reagent("nutriment", 8)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/eggplantparm
name = "Eggplant Parmigiana"
@@ -992,10 +1011,10 @@
filling_color = "#4D2F5E"
center_of_mass = list("x"=16, "y"=11)
- New()
- ..()
- reagents.add_reagent("nutriment", 6)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/eggplantparm/New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/soylentgreen
name = "Soylent Green"
@@ -1005,10 +1024,10 @@
filling_color = "#B8E6B5"
center_of_mass = list("x"=15, "y"=11)
- New()
- ..()
- reagents.add_reagent("protein", 10)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/soylentgreen/New()
+ ..()
+ reagents.add_reagent("protein", 10)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/soylenviridians
name = "Soylen Virdians"
@@ -1018,11 +1037,10 @@
filling_color = "#E6FA61"
center_of_mass = list("x"=15, "y"=11)
- New()
- ..()
- reagents.add_reagent("nutriment", 10)
- bitesize = 2
-
+/obj/item/weapon/reagent_containers/food/snacks/soylenviridians/New()
+ ..()
+ reagents.add_reagent("nutriment", 10)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/meatpie
name = "Meat-pie"
@@ -1032,10 +1050,10 @@
filling_color = "#948051"
center_of_mass = list("x"=16, "y"=13)
- New()
- ..()
- reagents.add_reagent("protein", 10)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/meatpie/New()
+ ..()
+ reagents.add_reagent("protein", 10)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/tofupie
name = "Tofu-pie"
@@ -1045,10 +1063,10 @@
filling_color = "#FFFEE0"
center_of_mass = list("x"=16, "y"=13)
- New()
- ..()
- reagents.add_reagent("nutriment", 10)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/tofupie/New()
+ ..()
+ reagents.add_reagent("nutriment", 10)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/amanita_pie
name = "amanita pie"
@@ -1057,12 +1075,12 @@
filling_color = "#FFCCCC"
center_of_mass = list("x"=17, "y"=9)
- New()
- ..()
- reagents.add_reagent("nutriment", 5)
- reagents.add_reagent("amatoxin", 3)
- reagents.add_reagent("psilocybin", 1)
- bitesize = 3
+/obj/item/weapon/reagent_containers/food/snacks/amanita_pie/New()
+ ..()
+ reagents.add_reagent("nutriment", 5)
+ reagents.add_reagent("amatoxin", 3)
+ reagents.add_reagent("psilocybin", 1)
+ bitesize = 3
/obj/item/weapon/reagent_containers/food/snacks/plump_pie
name = "plump pie"
@@ -1071,17 +1089,17 @@
filling_color = "#B8279B"
center_of_mass = list("x"=17, "y"=9)
- New()
- ..()
- if(prob(10))
- name = "exceptional plump pie"
- desc = "Microwave is taken by a fey mood! It has cooked an exceptional plump pie!"
- reagents.add_reagent("nutriment", 8)
- reagents.add_reagent("tricordrazine", 5)
- bitesize = 2
- else
- reagents.add_reagent("nutriment", 8)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/plump_pie/New()
+ ..()
+ if(prob(10))
+ name = "exceptional plump pie"
+ desc = "Microwave is taken by a fey mood! It has cooked an exceptional plump pie!"
+ reagents.add_reagent("nutriment", 8)
+ reagents.add_reagent("tricordrazine", 5)
+ bitesize = 2
+ else
+ reagents.add_reagent("nutriment", 8)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/xemeatpie
name = "Xeno-pie"
@@ -1091,10 +1109,10 @@
filling_color = "#43DE18"
center_of_mass = list("x"=16, "y"=13)
- New()
- ..()
- reagents.add_reagent("protein", 10)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/xemeatpie/New()
+ ..()
+ reagents.add_reagent("protein", 10)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/wingfangchu
name = "Wing Fang Chu"
@@ -1104,11 +1122,10 @@
filling_color = "#43DE18"
center_of_mass = list("x"=17, "y"=9)
- New()
- ..()
- reagents.add_reagent("protein", 6)
- bitesize = 2
-
+/obj/item/weapon/reagent_containers/food/snacks/wingfangchu/New()
+ ..()
+ reagents.add_reagent("protein", 6)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/human/kabob
name = "-kabob"
@@ -1118,10 +1135,10 @@
filling_color = "#A85340"
center_of_mass = list("x"=17, "y"=15)
- New()
- ..()
- reagents.add_reagent("protein", 8)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/human/kabob/New()
+ ..()
+ reagents.add_reagent("protein", 8)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/monkeykabob
name = "Meat-kabob"
@@ -1131,10 +1148,10 @@
filling_color = "#A85340"
center_of_mass = list("x"=17, "y"=15)
- New()
- ..()
- reagents.add_reagent("protein", 8)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/monkeykabob/New()
+ ..()
+ reagents.add_reagent("protein", 8)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/tofukabob
name = "Tofu-kabob"
@@ -1144,10 +1161,10 @@
filling_color = "#FFFEE0"
center_of_mass = list("x"=17, "y"=15)
- New()
- ..()
- reagents.add_reagent("nutriment", 8)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/tofukabob/New()
+ ..()
+ reagents.add_reagent("nutriment", 8)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/cubancarp
name = "Cuban Carp"
@@ -1157,13 +1174,13 @@
filling_color = "#E9ADFF"
center_of_mass = list("x"=12, "y"=5)
- New()
- ..()
- reagents.add_reagent("protein", 3)
- reagents.add_reagent("nutriment", 3)
- reagents.add_reagent("carpotoxin", 3)
- reagents.add_reagent("capsaicin", 3)
- bitesize = 3
+/obj/item/weapon/reagent_containers/food/snacks/cubancarp/New()
+ ..()
+ reagents.add_reagent("protein", 3)
+ reagents.add_reagent("nutriment", 3)
+ reagents.add_reagent("carpotoxin", 3)
+ reagents.add_reagent("capsaicin", 3)
+ bitesize = 3
/obj/item/weapon/reagent_containers/food/snacks/popcorn
name = "Popcorn"
@@ -1174,17 +1191,17 @@
filling_color = "#FFFAD4"
center_of_mass = list("x"=16, "y"=8)
- New()
- ..()
- unpopped = rand(1,10)
- reagents.add_reagent("nutriment", 2)
- bitesize = 0.1 //this snack is supposed to be eating during looooong time. And this it not dinner food! --rastaf0
- On_Consume()
- if(prob(unpopped)) //lol ...what's the point?
- usr << "\red You bite down on an un-popped kernel!"
- unpopped = max(0, unpopped-1)
- ..()
+/obj/item/weapon/reagent_containers/food/snacks/popcorn/New()
+ ..()
+ unpopped = rand(1,10)
+ reagents.add_reagent("nutriment", 2)
+ bitesize = 0.1 //this snack is supposed to be eating during looooong time. And this it not dinner food! --rastaf0
+/obj/item/weapon/reagent_containers/food/snacks/popcorn/On_Consume()
+ if(prob(unpopped)) //lol ...what's the point?
+ usr << "\red You bite down on an un-popped kernel!"
+ unpopped = max(0, unpopped-1)
+ ..()
/obj/item/weapon/reagent_containers/food/snacks/sosjerky
name = "Scaredy's Private Reserve Beef Jerky"
@@ -1194,7 +1211,7 @@
filling_color = "#631212"
center_of_mass = list("x"=15, "y"=9)
- New()
+/obj/item/weapon/reagent_containers/food/snacks/sosjerky/New()
..()
reagents.add_reagent("protein", 4)
bitesize = 2
@@ -1207,9 +1224,9 @@
filling_color = "#343834"
center_of_mass = list("x"=15, "y"=4)
- New()
- ..()
- reagents.add_reagent("nutriment", 6)
+/obj/item/weapon/reagent_containers/food/snacks/no_raisin/New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
/obj/item/weapon/reagent_containers/food/snacks/spacetwinkie
name = "Space Twinkie"
@@ -1218,10 +1235,10 @@
filling_color = "#FFE591"
center_of_mass = list("x"=15, "y"=11)
- New()
- ..()
- reagents.add_reagent("sugar", 4)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/spacetwinkie/New()
+ ..()
+ reagents.add_reagent("sugar", 4)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers
name = "Cheesie Honkers"
@@ -1231,10 +1248,10 @@
filling_color = "#FFA305"
center_of_mass = list("x"=15, "y"=9)
- New()
- ..()
- reagents.add_reagent("nutriment", 4)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers/New()
+ ..()
+ reagents.add_reagent("nutriment", 4)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/syndicake
name = "Syndi-Cakes"
@@ -1244,11 +1261,12 @@
center_of_mass = list("x"=16, "y"=10)
trash = /obj/item/trash/syndi_cakes
- New()
- ..()
- reagents.add_reagent("nutriment", 4)
- reagents.add_reagent("doctorsdelight", 5)
- bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/syndicake/New()
+ ..()
+ reagents.add_reagent("nutriment", 4)
+ reagents.add_reagent("doctorsdelight", 5)
+ bitesize = 3
/obj/item/weapon/reagent_containers/food/snacks/loadedbakedpotato
name = "Loaded Baked Potato"
@@ -1257,11 +1275,11 @@
filling_color = "#9C7A68"
center_of_mass = list("x"=16, "y"=10)
- New()
- ..()
- reagents.add_reagent("nutriment", 3)
- reagents.add_reagent("protein", 3)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/loadedbakedpotato/New()
+ ..()
+ reagents.add_reagent("nutriment", 3)
+ reagents.add_reagent("protein", 3)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/fries
name = "Space Fries"
@@ -1271,10 +1289,10 @@
filling_color = "#EDDD00"
center_of_mass = list("x"=16, "y"=11)
- New()
- ..()
- reagents.add_reagent("nutriment", 4)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/fries/New()
+ ..()
+ reagents.add_reagent("nutriment", 4)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/soydope
name = "Soy Dope"
@@ -1284,10 +1302,10 @@
filling_color = "#C4BF76"
center_of_mass = list("x"=16, "y"=10)
- New()
- ..()
- reagents.add_reagent("nutriment", 2)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/soydope/New()
+ ..()
+ reagents.add_reagent("nutriment", 2)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/spagetti
name = "Spaghetti"
@@ -1296,10 +1314,10 @@
filling_color = "#EDDD00"
center_of_mass = list("x"=16, "y"=16)
- New()
- ..()
- reagents.add_reagent("nutriment", 1)
- bitesize = 1
+/obj/item/weapon/reagent_containers/food/snacks/spagetti/New()
+ ..()
+ reagents.add_reagent("nutriment", 1)
+ bitesize = 1
/obj/item/weapon/reagent_containers/food/snacks/cheesyfries
name = "Cheesy Fries"
@@ -1309,11 +1327,11 @@
filling_color = "#EDDD00"
center_of_mass = list("x"=16, "y"=11)
- New()
- ..()
- reagents.add_reagent("protein", 2)
- reagents.add_reagent("nutriment", 4)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/cheesyfries/New()
+ ..()
+ reagents.add_reagent("protein", 2)
+ reagents.add_reagent("nutriment", 4)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/fortunecookie
name = "Fortune cookie"
@@ -1322,10 +1340,10 @@
filling_color = "#E8E79E"
center_of_mass = list("x"=15, "y"=14)
- New()
- ..()
- reagents.add_reagent("nutriment", 3)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/fortunecookie/New()
+ ..()
+ reagents.add_reagent("nutriment", 3)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/badrecipe
name = "Burned mess"
@@ -1334,11 +1352,11 @@
filling_color = "#211F02"
center_of_mass = list("x"=16, "y"=12)
- New()
- ..()
- reagents.add_reagent("toxin", 1)
- reagents.add_reagent("carbon", 3)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/badrecipe/New()
+ ..()
+ reagents.add_reagent("toxin", 1)
+ reagents.add_reagent("carbon", 3)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/meatsteak
name = "Meat steak"
@@ -1348,12 +1366,12 @@
filling_color = "#7A3D11"
center_of_mass = list("x"=16, "y"=13)
- New()
- ..()
- reagents.add_reagent("protein", 4)
- reagents.add_reagent("sodiumchloride", 1)
- reagents.add_reagent("blackpepper", 1)
- bitesize = 3
+/obj/item/weapon/reagent_containers/food/snacks/meatsteak/New()
+ ..()
+ reagents.add_reagent("protein", 4)
+ reagents.add_reagent("sodiumchloride", 1)
+ reagents.add_reagent("blackpepper", 1)
+ bitesize = 3
/obj/item/weapon/reagent_containers/food/snacks/spacylibertyduff
name = "Spacy Liberty Duff"
@@ -1363,11 +1381,11 @@
filling_color = "#42B873"
center_of_mass = list("x"=16, "y"=8)
- New()
- ..()
- reagents.add_reagent("nutriment", 6)
- reagents.add_reagent("psilocybin", 6)
- bitesize = 3
+/obj/item/weapon/reagent_containers/food/snacks/spacylibertyduff/New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ reagents.add_reagent("psilocybin", 6)
+ bitesize = 3
/obj/item/weapon/reagent_containers/food/snacks/amanitajelly
name = "Amanita Jelly"
@@ -1377,12 +1395,12 @@
filling_color = "#ED0758"
center_of_mass = list("x"=16, "y"=5)
- New()
- ..()
- reagents.add_reagent("nutriment", 6)
- reagents.add_reagent("amatoxin", 6)
- reagents.add_reagent("psilocybin", 3)
- bitesize = 3
+/obj/item/weapon/reagent_containers/food/snacks/amanitajelly/New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ reagents.add_reagent("amatoxin", 6)
+ reagents.add_reagent("psilocybin", 3)
+ bitesize = 3
/obj/item/weapon/reagent_containers/food/snacks/poppypretzel
name = "Poppy pretzel"
@@ -1392,11 +1410,10 @@
filling_color = "#916E36"
center_of_mass = list("x"=16, "y"=10)
- New()
- ..()
- reagents.add_reagent("nutriment", 5)
- bitesize = 2
-
+/obj/item/weapon/reagent_containers/food/snacks/poppypretzel/New()
+ ..()
+ reagents.add_reagent("nutriment", 5)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/meatballsoup
name = "Meatball soup"
@@ -1406,11 +1423,11 @@
filling_color = "#785210"
center_of_mass = list("x"=16, "y"=8)
- New()
- ..()
- reagents.add_reagent("protein", 8)
- reagents.add_reagent("water", 5)
- bitesize = 5
+/obj/item/weapon/reagent_containers/food/snacks/meatballsoup/New()
+ ..()
+ reagents.add_reagent("protein", 8)
+ reagents.add_reagent("water", 5)
+ bitesize = 5
/obj/item/weapon/reagent_containers/food/snacks/slimesoup
name = "slime soup"
@@ -1418,11 +1435,11 @@
icon_state = "slimesoup" //nonexistant?
filling_color = "#C4DBA0"
- New()
- ..()
- reagents.add_reagent("slimejelly", 5)
- reagents.add_reagent("water", 10)
- bitesize = 5
+/obj/item/weapon/reagent_containers/food/snacks/slimesoup/New()
+ ..()
+ reagents.add_reagent("slimejelly", 5)
+ reagents.add_reagent("water", 10)
+ bitesize = 5
/obj/item/weapon/reagent_containers/food/snacks/bloodsoup
name = "Tomato soup"
@@ -1431,12 +1448,12 @@
filling_color = "#FF0000"
center_of_mass = list("x"=16, "y"=7)
- New()
- ..()
- reagents.add_reagent("protein", 2)
- reagents.add_reagent("blood", 10)
- reagents.add_reagent("water", 5)
- bitesize = 5
+/obj/item/weapon/reagent_containers/food/snacks/bloodsoup/New()
+ ..()
+ reagents.add_reagent("protein", 2)
+ reagents.add_reagent("blood", 10)
+ reagents.add_reagent("water", 5)
+ bitesize = 5
/obj/item/weapon/reagent_containers/food/snacks/clownstears
name = "Clown's Tears"
@@ -1445,12 +1462,12 @@
filling_color = "#C4FBFF"
center_of_mass = list("x"=16, "y"=7)
- New()
- ..()
- reagents.add_reagent("nutriment", 4)
- reagents.add_reagent("banana", 5)
- reagents.add_reagent("water", 10)
- bitesize = 5
+/obj/item/weapon/reagent_containers/food/snacks/clownstears/New()
+ ..()
+ reagents.add_reagent("nutriment", 4)
+ reagents.add_reagent("banana", 5)
+ reagents.add_reagent("water", 10)
+ bitesize = 5
/obj/item/weapon/reagent_containers/food/snacks/vegetablesoup
name = "Vegetable soup"
@@ -1460,11 +1477,11 @@
filling_color = "#AFC4B5"
center_of_mass = list("x"=16, "y"=8)
- New()
- ..()
- reagents.add_reagent("nutriment", 8)
- reagents.add_reagent("water", 5)
- bitesize = 5
+/obj/item/weapon/reagent_containers/food/snacks/vegetablesoup/New()
+ ..()
+ reagents.add_reagent("nutriment", 8)
+ reagents.add_reagent("water", 5)
+ bitesize = 5
/obj/item/weapon/reagent_containers/food/snacks/nettlesoup
name = "Nettle soup"
@@ -1474,12 +1491,12 @@
filling_color = "#AFC4B5"
center_of_mass = list("x"=16, "y"=7)
- New()
- ..()
- reagents.add_reagent("nutriment", 8)
- reagents.add_reagent("water", 5)
- reagents.add_reagent("tricordrazine", 5)
- bitesize = 5
+/obj/item/weapon/reagent_containers/food/snacks/nettlesoup/New()
+ ..()
+ reagents.add_reagent("nutriment", 8)
+ reagents.add_reagent("water", 5)
+ reagents.add_reagent("tricordrazine", 5)
+ bitesize = 5
/obj/item/weapon/reagent_containers/food/snacks/mysterysoup
name = "Mystery soup"
@@ -1489,45 +1506,45 @@
filling_color = "#F082FF"
center_of_mass = list("x"=16, "y"=6)
- New()
- ..()
- var/mysteryselect = pick(1,2,3,4,5,6,7,8,9,10)
- switch(mysteryselect)
- if(1)
- reagents.add_reagent("nutriment", 6)
- reagents.add_reagent("capsaicin", 3)
- reagents.add_reagent("tomatojuice", 2)
- if(2)
- reagents.add_reagent("nutriment", 6)
- reagents.add_reagent("frostoil", 3)
- reagents.add_reagent("tomatojuice", 2)
- if(3)
- reagents.add_reagent("nutriment", 5)
- reagents.add_reagent("water", 5)
- reagents.add_reagent("tricordrazine", 5)
- if(4)
- reagents.add_reagent("nutriment", 5)
- reagents.add_reagent("water", 10)
- if(5)
- reagents.add_reagent("nutriment", 2)
- reagents.add_reagent("banana", 10)
- if(6)
- reagents.add_reagent("nutriment", 6)
- reagents.add_reagent("blood", 10)
- if(7)
- reagents.add_reagent("slimejelly", 10)
- reagents.add_reagent("water", 10)
- if(8)
- reagents.add_reagent("carbon", 10)
- reagents.add_reagent("toxin", 10)
- if(9)
- reagents.add_reagent("nutriment", 5)
- reagents.add_reagent("tomatojuice", 10)
- if(10)
- reagents.add_reagent("nutriment", 6)
- reagents.add_reagent("tomatojuice", 5)
- reagents.add_reagent("imidazoline", 5)
- bitesize = 5
+/obj/item/weapon/reagent_containers/food/snacks/mysterysoup/New()
+ ..()
+ var/mysteryselect = pick(1,2,3,4,5,6,7,8,9,10)
+ switch(mysteryselect)
+ if(1)
+ reagents.add_reagent("nutriment", 6)
+ reagents.add_reagent("capsaicin", 3)
+ reagents.add_reagent("tomatojuice", 2)
+ if(2)
+ reagents.add_reagent("nutriment", 6)
+ reagents.add_reagent("frostoil", 3)
+ reagents.add_reagent("tomatojuice", 2)
+ if(3)
+ reagents.add_reagent("nutriment", 5)
+ reagents.add_reagent("water", 5)
+ reagents.add_reagent("tricordrazine", 5)
+ if(4)
+ reagents.add_reagent("nutriment", 5)
+ reagents.add_reagent("water", 10)
+ if(5)
+ reagents.add_reagent("nutriment", 2)
+ reagents.add_reagent("banana", 10)
+ if(6)
+ reagents.add_reagent("nutriment", 6)
+ reagents.add_reagent("blood", 10)
+ if(7)
+ reagents.add_reagent("slimejelly", 10)
+ reagents.add_reagent("water", 10)
+ if(8)
+ reagents.add_reagent("carbon", 10)
+ reagents.add_reagent("toxin", 10)
+ if(9)
+ reagents.add_reagent("nutriment", 5)
+ reagents.add_reagent("tomatojuice", 10)
+ if(10)
+ reagents.add_reagent("nutriment", 6)
+ reagents.add_reagent("tomatojuice", 5)
+ reagents.add_reagent("imidazoline", 5)
+ bitesize = 5
/obj/item/weapon/reagent_containers/food/snacks/wishsoup
name = "Wish Soup"
@@ -1537,13 +1554,13 @@
filling_color = "#D1F4FF"
center_of_mass = list("x"=16, "y"=11)
- New()
- ..()
- reagents.add_reagent("water", 10)
- bitesize = 5
- if(prob(25))
- src.desc = "A wish come true!"
- reagents.add_reagent("nutriment", 8)
+/obj/item/weapon/reagent_containers/food/snacks/wishsoup/New()
+ ..()
+ reagents.add_reagent("water", 10)
+ bitesize = 5
+ if(prob(25))
+ src.desc = "A wish come true!"
+ reagents.add_reagent("nutriment", 8)
/obj/item/weapon/reagent_containers/food/snacks/hotchili
name = "Hot Chili"
@@ -1553,14 +1570,13 @@
filling_color = "#FF3C00"
center_of_mass = list("x"=15, "y"=9)
- New()
- ..()
- reagents.add_reagent("protein", 3)
- reagents.add_reagent("nutriment", 3)
- reagents.add_reagent("capsaicin", 3)
- reagents.add_reagent("tomatojuice", 2)
- bitesize = 5
-
+/obj/item/weapon/reagent_containers/food/snacks/hotchili/New()
+ ..()
+ reagents.add_reagent("protein", 3)
+ reagents.add_reagent("nutriment", 3)
+ reagents.add_reagent("capsaicin", 3)
+ reagents.add_reagent("tomatojuice", 2)
+ bitesize = 5
/obj/item/weapon/reagent_containers/food/snacks/coldchili
name = "Cold Chili"
@@ -1570,33 +1586,14 @@
center_of_mass = list("x"=15, "y"=9)
trash = /obj/item/trash/snack_bowl
- New()
- ..()
- reagents.add_reagent("protein", 3)
- reagents.add_reagent("nutriment", 3)
- reagents.add_reagent("frostoil", 3)
- reagents.add_reagent("tomatojuice", 2)
- bitesize = 5
-/* No more of this
-/obj/item/weapon/reagent_containers/food/snacks/telebacon
- name = "Tele Bacon"
- desc = "It tastes a little odd but it is still delicious."
- icon_state = "bacon"
- var/obj/item/device/radio/beacon/bacon/baconbeacon
- bitesize = 2
- center_of_mass = list("x"=18, "y"=13)
-
- New()
- ..()
- reagents.add_reagent("nutriment", 4)
- baconbeacon = new /obj/item/device/radio/beacon/bacon(src)
-
- On_Consume()
- if(!reagents.total_volume)
- baconbeacon.loc = usr
- baconbeacon.digest_delay()
-*/
+/obj/item/weapon/reagent_containers/food/snacks/coldchili/New()
+ ..()
+ reagents.add_reagent("protein", 3)
+ reagents.add_reagent("nutriment", 3)
+ reagents.add_reagent("frostoil", 3)
+ reagents.add_reagent("tomatojuice", 2)
+ bitesize = 5
/obj/item/weapon/reagent_containers/food/snacks/monkeycube
name = "monkey cube"
@@ -1610,33 +1607,33 @@
var/wrapped = 0
var/monkey_type = "Monkey"
- New()
- ..()
- reagents.add_reagent("protein", 10)
+/obj/item/weapon/reagent_containers/food/snacks/monkeycube/New()
+ ..()
+ reagents.add_reagent("protein", 10)
- attack_self(mob/user as mob)
- if(wrapped)
- Unwrap(user)
+/obj/item/weapon/reagent_containers/food/snacks/monkeycube/attack_self(mob/user as mob)
+ if(wrapped)
+ Unwrap(user)
- proc/Expand()
- src.visible_message("\The [src] expands! ")
- var/mob/living/carbon/human/H = new(get_turf(src))
- H.set_species(monkey_type)
- H.real_name = H.species.get_random_name()
- H.name = H.real_name
- if(ismob(loc))
- var/mob/M = loc
- M.unEquip(src)
- qdel(src)
- return 1
+/obj/item/weapon/reagent_containers/food/snacks/monkeycube/proc/Expand()
+ src.visible_message("\The [src] expands! ")
+ var/mob/living/carbon/human/H = new(get_turf(src))
+ H.set_species(monkey_type)
+ H.real_name = H.species.get_random_name()
+ H.name = H.real_name
+ if(ismob(loc))
+ var/mob/M = loc
+ M.unEquip(src)
+ qdel(src)
+ return 1
- proc/Unwrap(mob/user as mob)
- icon_state = "monkeycube"
- desc = "Just add water!"
- user << "You unwrap the cube."
- wrapped = 0
- flags |= OPENCONTAINER
- return
+/obj/item/weapon/reagent_containers/food/snacks/monkeycube/proc/Unwrap(mob/user as mob)
+ icon_state = "monkeycube"
+ desc = "Just add water!"
+ user << "You unwrap the cube."
+ wrapped = 0
+ flags |= OPENCONTAINER
+ return
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/on_reagent_change()
if(reagents.has_reagent("water"))
@@ -1672,17 +1669,16 @@
name = "neaera cube"
monkey_type = "Neaera"
-
/obj/item/weapon/reagent_containers/food/snacks/spellburger
name = "Spell Burger"
desc = "This is absolutely Ei Nath."
icon_state = "spellburger"
filling_color = "#D505FF"
- New()
- ..()
- reagents.add_reagent("nutriment", 6)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/spellburger/New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/bigbiteburger
name = "Big Bite Burger"
@@ -1691,11 +1687,11 @@
filling_color = "#E3D681"
center_of_mass = list("x"=16, "y"=11)
- New()
- ..()
- reagents.add_reagent("protein", 10)
- reagents.add_reagent("nutriment", 4)
- bitesize = 3
+/obj/item/weapon/reagent_containers/food/snacks/bigbiteburger/New()
+ ..()
+ reagents.add_reagent("protein", 10)
+ reagents.add_reagent("nutriment", 4)
+ bitesize = 3
/obj/item/weapon/reagent_containers/food/snacks/enchiladas
name = "Enchiladas"
@@ -1705,12 +1701,12 @@
filling_color = "#A36A1F"
center_of_mass = list("x"=16, "y"=13)
- New()
- ..()
- reagents.add_reagent("protein", 6)
- reagents.add_reagent("nutriment",2)
- reagents.add_reagent("capsaicin", 6)
- bitesize = 4
+/obj/item/weapon/reagent_containers/food/snacks/enchiladas/New()
+ ..()
+ reagents.add_reagent("protein", 6)
+ reagents.add_reagent("nutriment",2)
+ reagents.add_reagent("capsaicin", 6)
+ bitesize = 4
/obj/item/weapon/reagent_containers/food/snacks/monkeysdelight
name = "monkey's Delight"
@@ -1720,13 +1716,13 @@
filling_color = "#5C3C11"
center_of_mass = list("x"=16, "y"=13)
- New()
- ..()
- reagents.add_reagent("protein", 10)
- reagents.add_reagent("banana", 5)
- reagents.add_reagent("blackpepper", 1)
- reagents.add_reagent("sodiumchloride", 1)
- bitesize = 6
+/obj/item/weapon/reagent_containers/food/snacks/monkeysdelight/New()
+ ..()
+ reagents.add_reagent("protein", 10)
+ reagents.add_reagent("banana", 5)
+ reagents.add_reagent("blackpepper", 1)
+ reagents.add_reagent("sodiumchloride", 1)
+ bitesize = 6
/obj/item/weapon/reagent_containers/food/snacks/baguette
name = "Baguette"
@@ -1735,12 +1731,12 @@
filling_color = "#E3D796"
center_of_mass = list("x"=18, "y"=12)
- New()
- ..()
- reagents.add_reagent("nutriment", 6)
- reagents.add_reagent("blackpepper", 1)
- reagents.add_reagent("sodiumchloride", 1)
- bitesize = 3
+/obj/item/weapon/reagent_containers/food/snacks/baguette/New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ reagents.add_reagent("blackpepper", 1)
+ reagents.add_reagent("sodiumchloride", 1)
+ bitesize = 3
/obj/item/weapon/reagent_containers/food/snacks/fishandchips
name = "Fish and Chips"
@@ -1749,12 +1745,12 @@
filling_color = "#E3D796"
center_of_mass = list("x"=16, "y"=16)
- New()
- ..()
- reagents.add_reagent("protein", 3)
- reagents.add_reagent("nutriment", 3)
- reagents.add_reagent("carpotoxin", 3)
- bitesize = 3
+/obj/item/weapon/reagent_containers/food/snacks/fishandchips/New()
+ ..()
+ reagents.add_reagent("protein", 3)
+ reagents.add_reagent("nutriment", 3)
+ reagents.add_reagent("carpotoxin", 3)
+ bitesize = 3
/obj/item/weapon/reagent_containers/food/snacks/sandwich
name = "Sandwich"
@@ -1764,11 +1760,11 @@
filling_color = "#D9BE29"
center_of_mass = list("x"=16, "y"=4)
- New()
- ..()
- reagents.add_reagent("protein", 3)
- reagents.add_reagent("nutriment", 3)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/sandwich/New()
+ ..()
+ reagents.add_reagent("protein", 3)
+ reagents.add_reagent("nutriment", 3)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/toastedsandwich
name = "Toasted Sandwich"
@@ -1778,12 +1774,12 @@
filling_color = "#D9BE29"
center_of_mass = list("x"=16, "y"=4)
- New()
- ..()
- reagents.add_reagent("protein", 3)
- reagents.add_reagent("nutriment", 3)
- reagents.add_reagent("carbon", 2)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/toastedsandwich/New()
+ ..()
+ reagents.add_reagent("protein", 3)
+ reagents.add_reagent("nutriment", 3)
+ reagents.add_reagent("carbon", 2)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/grilledcheese
name = "Grilled Cheese Sandwich"
@@ -1792,11 +1788,11 @@
trash = /obj/item/trash/plate
filling_color = "#D9BE29"
- New()
- ..()
- reagents.add_reagent("protein", 4)
- reagents.add_reagent("nutriment", 3)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/grilledcheese/New()
+ ..()
+ reagents.add_reagent("protein", 4)
+ reagents.add_reagent("nutriment", 3)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/tomatosoup
name = "Tomato Soup"
@@ -1806,11 +1802,11 @@
filling_color = "#D92929"
center_of_mass = list("x"=16, "y"=7)
- New()
- ..()
- reagents.add_reagent("nutriment", 5)
- reagents.add_reagent("tomatojuice", 10)
- bitesize = 3
+/obj/item/weapon/reagent_containers/food/snacks/tomatosoup/New()
+ ..()
+ reagents.add_reagent("nutriment", 5)
+ reagents.add_reagent("tomatojuice", 10)
+ bitesize = 3
/obj/item/weapon/reagent_containers/food/snacks/rofflewaffles
name = "Roffle Waffles"
@@ -1820,11 +1816,11 @@
filling_color = "#FF00F7"
center_of_mass = list("x"=15, "y"=11)
- New()
- ..()
- reagents.add_reagent("nutriment", 8)
- reagents.add_reagent("psilocybin", 8)
- bitesize = 4
+/obj/item/weapon/reagent_containers/food/snacks/rofflewaffles/New()
+ ..()
+ reagents.add_reagent("nutriment", 8)
+ reagents.add_reagent("psilocybin", 8)
+ bitesize = 4
/obj/item/weapon/reagent_containers/food/snacks/stew
name = "Stew"
@@ -1833,14 +1829,14 @@
filling_color = "#9E673A"
center_of_mass = list("x"=16, "y"=5)
- New()
- ..()
- reagents.add_reagent("protein", 4)
- reagents.add_reagent("nutriment", 6)
- reagents.add_reagent("tomatojuice", 5)
- reagents.add_reagent("imidazoline", 5)
- reagents.add_reagent("water", 5)
- bitesize = 10
+/obj/item/weapon/reagent_containers/food/snacks/stew/New()
+ ..()
+ reagents.add_reagent("protein", 4)
+ reagents.add_reagent("nutriment", 6)
+ reagents.add_reagent("tomatojuice", 5)
+ reagents.add_reagent("imidazoline", 5)
+ reagents.add_reagent("water", 5)
+ bitesize = 10
/obj/item/weapon/reagent_containers/food/snacks/jelliedtoast
name = "Jellied Toast"
@@ -1850,20 +1846,18 @@
filling_color = "#B572AB"
center_of_mass = list("x"=16, "y"=8)
- New()
- ..()
- reagents.add_reagent("nutriment", 1)
- bitesize = 3
+/obj/item/weapon/reagent_containers/food/snacks/jelliedtoast/New()
+ ..()
+ reagents.add_reagent("nutriment", 1)
+ bitesize = 3
-/obj/item/weapon/reagent_containers/food/snacks/jelliedtoast/cherry
- New()
- ..()
- reagents.add_reagent("cherryjelly", 5)
+/obj/item/weapon/reagent_containers/food/snacks/jelliedtoast/cherry/New()
+ ..()
+ reagents.add_reagent("cherryjelly", 5)
-/obj/item/weapon/reagent_containers/food/snacks/jelliedtoast/slime
- New()
- ..()
- reagents.add_reagent("slimejelly", 5)
+/obj/item/weapon/reagent_containers/food/snacks/jelliedtoast/slime/New()
+ ..()
+ reagents.add_reagent("slimejelly", 5)
/obj/item/weapon/reagent_containers/food/snacks/jellyburger
name = "Jelly Burger"
@@ -1872,20 +1866,18 @@
filling_color = "#B572AB"
center_of_mass = list("x"=16, "y"=11)
- New()
- ..()
- reagents.add_reagent("nutriment", 5)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/jellyburger/New()
+ ..()
+ reagents.add_reagent("nutriment", 5)
+ bitesize = 2
-/obj/item/weapon/reagent_containers/food/snacks/jellyburger/slime
- New()
- ..()
- reagents.add_reagent("slimejelly", 5)
+/obj/item/weapon/reagent_containers/food/snacks/jellyburger/slime/New()
+ ..()
+ reagents.add_reagent("slimejelly", 5)
-/obj/item/weapon/reagent_containers/food/snacks/jellyburger/cherry
- New()
- ..()
- reagents.add_reagent("cherryjelly", 5)
+/obj/item/weapon/reagent_containers/food/snacks/jellyburger/cherry/New()
+ ..()
+ reagents.add_reagent("cherryjelly", 5)
/obj/item/weapon/reagent_containers/food/snacks/milosoup
name = "Milosoup"
@@ -1894,11 +1886,11 @@
trash = /obj/item/trash/snack_bowl
center_of_mass = list("x"=16, "y"=7)
- New()
- ..()
- reagents.add_reagent("nutriment", 8)
- reagents.add_reagent("water", 5)
- bitesize = 4
+/obj/item/weapon/reagent_containers/food/snacks/milosoup/New()
+ ..()
+ reagents.add_reagent("nutriment", 8)
+ reagents.add_reagent("water", 5)
+ bitesize = 4
/obj/item/weapon/reagent_containers/food/snacks/stewedsoymeat
name = "Stewed Soy Meat"
@@ -1907,10 +1899,10 @@
trash = /obj/item/trash/plate
center_of_mass = list("x"=16, "y"=10)
- New()
- ..()
- reagents.add_reagent("nutriment", 8)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/stewedsoymeat/New()
+ ..()
+ reagents.add_reagent("nutriment", 8)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/boiledspagetti
name = "Boiled Spaghetti"
@@ -1920,10 +1912,10 @@
filling_color = "#FCEE81"
center_of_mass = list("x"=16, "y"=10)
- New()
- ..()
- reagents.add_reagent("nutriment", 2)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/boiledspagetti/New()
+ ..()
+ reagents.add_reagent("nutriment", 2)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/boiledrice
name = "Boiled Rice"
@@ -1933,10 +1925,10 @@
filling_color = "#FFFBDB"
center_of_mass = list("x"=17, "y"=11)
- New()
- ..()
- reagents.add_reagent("nutriment", 2)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/boiledrice/New()
+ ..()
+ reagents.add_reagent("nutriment", 2)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/ricepudding
name = "Rice Pudding"
@@ -1946,10 +1938,10 @@
filling_color = "#FFFBDB"
center_of_mass = list("x"=17, "y"=11)
- New()
- ..()
- reagents.add_reagent("nutriment", 4)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/ricepudding/New()
+ ..()
+ reagents.add_reagent("nutriment", 4)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/pastatomato
name = "Spaghetti"
@@ -1959,11 +1951,11 @@
filling_color = "#DE4545"
center_of_mass = list("x"=16, "y"=10)
- New()
- ..()
- reagents.add_reagent("nutriment", 6)
- reagents.add_reagent("tomatojuice", 10)
- bitesize = 4
+/obj/item/weapon/reagent_containers/food/snacks/pastatomato/New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ reagents.add_reagent("tomatojuice", 10)
+ bitesize = 4
/obj/item/weapon/reagent_containers/food/snacks/meatballspagetti
name = "Spaghetti & Meatballs"
@@ -1973,11 +1965,11 @@
filling_color = "#DE4545"
center_of_mass = list("x"=16, "y"=10)
- New()
- ..()
- reagents.add_reagent("protein", 4)
- reagents.add_reagent("nutriment", 4)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/meatballspagetti/New()
+ ..()
+ reagents.add_reagent("protein", 4)
+ reagents.add_reagent("nutriment", 4)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/spesslaw
name = "Spesslaw"
@@ -1986,11 +1978,11 @@
filling_color = "#DE4545"
center_of_mass = list("x"=16, "y"=10)
- New()
- ..()
- reagents.add_reagent("protein", 4)
- reagents.add_reagent("nutriment", 4)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/spesslaw/New()
+ ..()
+ reagents.add_reagent("protein", 4)
+ reagents.add_reagent("nutriment", 4)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/carrotfries
name = "Carrot Fries"
@@ -2000,11 +1992,11 @@
filling_color = "#FAA005"
center_of_mass = list("x"=16, "y"=11)
- New()
- ..()
- reagents.add_reagent("nutriment", 3)
- reagents.add_reagent("imidazoline", 3)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/carrotfries/New()
+ ..()
+ reagents.add_reagent("nutriment", 3)
+ reagents.add_reagent("imidazoline", 3)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/superbiteburger
name = "Super Bite Burger"
@@ -2013,11 +2005,11 @@
filling_color = "#CCA26A"
center_of_mass = list("x"=16, "y"=3)
- New()
- ..()
- reagents.add_reagent("protein", 25)
- reagents.add_reagent("nutriment", 25)
- bitesize = 10
+/obj/item/weapon/reagent_containers/food/snacks/superbiteburger/New()
+ ..()
+ reagents.add_reagent("protein", 25)
+ reagents.add_reagent("nutriment", 25)
+ bitesize = 10
/obj/item/weapon/reagent_containers/food/snacks/candiedapple
name = "Candied Apple"
@@ -2026,10 +2018,10 @@
filling_color = "#F21873"
center_of_mass = list("x"=15, "y"=13)
- New()
- ..()
- reagents.add_reagent("nutriment", 3)
- bitesize = 3
+/obj/item/weapon/reagent_containers/food/snacks/candiedapple/New()
+ ..()
+ reagents.add_reagent("nutriment", 3)
+ bitesize = 3
/obj/item/weapon/reagent_containers/food/snacks/applepie
name = "Apple Pie"
@@ -2038,11 +2030,10 @@
filling_color = "#E0EDC5"
center_of_mass = list("x"=16, "y"=13)
- New()
- ..()
- reagents.add_reagent("nutriment", 4)
- bitesize = 3
-
+/obj/item/weapon/reagent_containers/food/snacks/applepie/New()
+ ..()
+ reagents.add_reagent("nutriment", 4)
+ bitesize = 3
/obj/item/weapon/reagent_containers/food/snacks/cherrypie
name = "Cherry Pie"
@@ -2051,10 +2042,10 @@
filling_color = "#FF525A"
center_of_mass = list("x"=16, "y"=11)
- New()
- ..()
- reagents.add_reagent("nutriment", 4)
- bitesize = 3
+/obj/item/weapon/reagent_containers/food/snacks/cherrypie/New()
+ ..()
+ reagents.add_reagent("nutriment", 4)
+ bitesize = 3
/obj/item/weapon/reagent_containers/food/snacks/twobread
name = "Two Bread"
@@ -2063,10 +2054,10 @@
filling_color = "#DBCC9A"
center_of_mass = list("x"=15, "y"=12)
- New()
- ..()
- reagents.add_reagent("nutriment", 2)
- bitesize = 3
+/obj/item/weapon/reagent_containers/food/snacks/twobread/New()
+ ..()
+ reagents.add_reagent("nutriment", 2)
+ bitesize = 3
/obj/item/weapon/reagent_containers/food/snacks/jellysandwich
name = "Jelly Sandwich"
@@ -2076,29 +2067,28 @@
filling_color = "#9E3A78"
center_of_mass = list("x"=16, "y"=8)
- New()
- ..()
- reagents.add_reagent("nutriment", 2)
- bitesize = 3
+/obj/item/weapon/reagent_containers/food/snacks/jellysandwich/New()
+ ..()
+ reagents.add_reagent("nutriment", 2)
+ bitesize = 3
-/obj/item/weapon/reagent_containers/food/snacks/jellysandwich/slime
- New()
- ..()
- reagents.add_reagent("slimejelly", 5)
+/obj/item/weapon/reagent_containers/food/snacks/jellysandwich/slime/New()
+ ..()
+ reagents.add_reagent("slimejelly", 5)
-/obj/item/weapon/reagent_containers/food/snacks/jellysandwich/cherry
- New()
- ..()
- reagents.add_reagent("cherryjelly", 5)
+/obj/item/weapon/reagent_containers/food/snacks/jellysandwich/cherry/New()
+ ..()
+ reagents.add_reagent("cherryjelly", 5)
/obj/item/weapon/reagent_containers/food/snacks/boiledslimecore
name = "Boiled slime Core"
desc = "A boiled red thing."
icon_state = "boiledslimecore" //nonexistant?
- New()
- ..()
- reagents.add_reagent("slimejelly", 5)
- bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/boiledslimecore/New()
+ ..()
+ reagents.add_reagent("slimejelly", 5)
+ bitesize = 3
/obj/item/weapon/reagent_containers/food/snacks/mint
name = "mint"
@@ -2107,10 +2097,10 @@
filling_color = "#F2F2F2"
center_of_mass = list("x"=16, "y"=14)
- New()
- ..()
- reagents.add_reagent("mint", 1)
- bitesize = 1
+/obj/item/weapon/reagent_containers/food/snacks/mint/New()
+ ..()
+ reagents.add_reagent("mint", 1)
+ bitesize = 1
/obj/item/weapon/reagent_containers/food/snacks/mushroomsoup
name = "chantrelle soup"
@@ -2120,10 +2110,10 @@
filling_color = "#E386BF"
center_of_mass = list("x"=17, "y"=10)
- New()
- ..()
- reagents.add_reagent("nutriment", 8)
- bitesize = 3
+/obj/item/weapon/reagent_containers/food/snacks/mushroomsoup/New()
+ ..()
+ reagents.add_reagent("nutriment", 8)
+ bitesize = 3
/obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit
name = "plump helmet biscuit"
@@ -2132,17 +2122,17 @@
filling_color = "#CFB4C4"
center_of_mass = list("x"=16, "y"=13)
- New()
- ..()
- if(prob(10))
- name = "exceptional plump helmet biscuit"
- desc = "Microwave is taken by a fey mood! It has cooked an exceptional plump helmet biscuit!"
- reagents.add_reagent("nutriment", 8)
- reagents.add_reagent("tricordrazine", 5)
- bitesize = 2
- else
- reagents.add_reagent("nutriment", 5)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit/New()
+ ..()
+ if(prob(10))
+ name = "exceptional plump helmet biscuit"
+ desc = "Microwave is taken by a fey mood! It has cooked an exceptional plump helmet biscuit!"
+ reagents.add_reagent("nutriment", 8)
+ reagents.add_reagent("tricordrazine", 5)
+ bitesize = 2
+ else
+ reagents.add_reagent("nutriment", 5)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/chawanmushi
name = "chawanmushi"
@@ -2152,10 +2142,10 @@
filling_color = "#F0F2E4"
center_of_mass = list("x"=17, "y"=10)
- New()
- ..()
- reagents.add_reagent("protein", 5)
- bitesize = 1
+/obj/item/weapon/reagent_containers/food/snacks/chawanmushi/New()
+ ..()
+ reagents.add_reagent("protein", 5)
+ bitesize = 1
/obj/item/weapon/reagent_containers/food/snacks/beetsoup
name = "beet soup"
@@ -2165,11 +2155,11 @@
filling_color = "#FAC9FF"
center_of_mass = list("x"=15, "y"=8)
- New()
- ..()
- name = pick(list("borsch","bortsch","borstch","borsh","borshch","borscht"))
- reagents.add_reagent("nutriment", 8)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/beetsoup/New()
+ ..()
+ name = pick(list("borsch","bortsch","borstch","borsh","borshch","borscht"))
+ reagents.add_reagent("nutriment", 8)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/tossedsalad
name = "tossed salad"
@@ -2178,10 +2168,11 @@
trash = /obj/item/trash/snack_bowl
filling_color = "#76B87F"
center_of_mass = list("x"=17, "y"=11)
- New()
- ..()
- reagents.add_reagent("nutriment", 8)
- bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/tossedsalad/New()
+ ..()
+ reagents.add_reagent("nutriment", 8)
+ bitesize = 3
/obj/item/weapon/reagent_containers/food/snacks/validsalad
name = "valid salad"
@@ -2191,11 +2182,11 @@
filling_color = "#76B87F"
center_of_mass = list("x"=17, "y"=11)
- New()
- ..()
- reagents.add_reagent("protein", 2)
- reagents.add_reagent("nutriment", 6)
- bitesize = 3
+/obj/item/weapon/reagent_containers/food/snacks/validsalad/New()
+ ..()
+ reagents.add_reagent("protein", 2)
+ reagents.add_reagent("nutriment", 6)
+ bitesize = 3
/obj/item/weapon/reagent_containers/food/snacks/appletart
name = "golden apple streusel tart"
@@ -2205,11 +2196,11 @@
filling_color = "#FFFF00"
center_of_mass = list("x"=16, "y"=18)
- New()
- ..()
- reagents.add_reagent("nutriment", 8)
- reagents.add_reagent("gold", 5)
- bitesize = 3
+/obj/item/weapon/reagent_containers/food/snacks/appletart/New()
+ ..()
+ reagents.add_reagent("nutriment", 8)
+ reagents.add_reagent("gold", 5)
+ bitesize = 3
/////////////////////////////////////////////////Sliceable////////////////////////////////////////
// All the food items that can be sliced into smaller bits like Meatbread and Cheesewheels
@@ -2228,11 +2219,11 @@
filling_color = "#FF7575"
center_of_mass = list("x"=16, "y"=9)
- New()
- ..()
- reagents.add_reagent("protein", 20)
- reagents.add_reagent("nutriment", 10)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/meatbread/New()
+ ..()
+ reagents.add_reagent("protein", 20)
+ reagents.add_reagent("nutriment", 10)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/meatbreadslice
name = "meatbread slice"
@@ -2243,6 +2234,12 @@
bitesize = 2
center_of_mass = list("x"=16, "y"=13)
+/obj/item/weapon/reagent_containers/food/snacks/meatbreadslice/New()
+ ..()
+ if(!(reagents.total_volume))
+ reagents.add_reagent("protein", 4)
+ reagents.add_reagent("nutriment", 2)
+
/obj/item/weapon/reagent_containers/food/snacks/sliceable/xenomeatbread
name = "xenomeatbread loaf"
desc = "The culinary base of every self-respecting eloquent gentleman. Extra Heretical."
@@ -2252,11 +2249,11 @@
filling_color = "#8AFF75"
center_of_mass = list("x"=16, "y"=9)
- New()
- ..()
- reagents.add_reagent("protein", 20)
- reagents.add_reagent("nutriment", 10)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/xenomeatbread/New()
+ ..()
+ reagents.add_reagent("protein", 20)
+ reagents.add_reagent("nutriment", 10)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/xenomeatbreadslice
name = "xenomeatbread slice"
@@ -2267,6 +2264,12 @@
bitesize = 2
center_of_mass = list("x"=16, "y"=13)
+/obj/item/weapon/reagent_containers/food/snacks/xenomeatbreadslice/New()
+ ..()
+ if(!(reagents.total_volume))
+ reagents.add_reagent("protein", 4)
+ reagents.add_reagent("nutriment", 2)
+
/obj/item/weapon/reagent_containers/food/snacks/sliceable/bananabread
name = "Banana-nut bread"
desc = "A heavenly and filling treat."
@@ -2276,11 +2279,11 @@
filling_color = "#EDE5AD"
center_of_mass = list("x"=16, "y"=9)
- New()
- ..()
- reagents.add_reagent("banana", 20)
- reagents.add_reagent("nutriment", 20)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/bananabread/New()
+ ..()
+ reagents.add_reagent("banana", 20)
+ reagents.add_reagent("nutriment", 20)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/bananabreadslice
name = "Banana-nut bread slice"
@@ -2291,6 +2294,12 @@
bitesize = 2
center_of_mass = list("x"=16, "y"=8)
+/obj/item/weapon/reagent_containers/food/snacks/bananabreadslice/New()
+ ..()
+ if(!(reagents.total_volume))
+ reagents.add_reagent("banana", 4)
+ reagents.add_reagent("nutriment", 4)
+
/obj/item/weapon/reagent_containers/food/snacks/sliceable/tofubread
name = "Tofubread"
icon_state = "Like meatbread but for vegetarians. Not guaranteed to give superpowers."
@@ -2300,10 +2309,10 @@
filling_color = "#F7FFE0"
center_of_mass = list("x"=16, "y"=9)
- New()
- ..()
- reagents.add_reagent("nutriment", 30)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/tofubread/New()
+ ..()
+ reagents.add_reagent("nutriment", 30)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/tofubreadslice
name = "Tofubread slice"
@@ -2314,6 +2323,11 @@
bitesize = 2
center_of_mass = list("x"=16, "y"=13)
+/obj/item/weapon/reagent_containers/food/snacks/tofubreadslice/New()
+ ..()
+ if(!(reagents.total_volume))
+ reagents.add_reagent("nutriment", 6)
+
/obj/item/weapon/reagent_containers/food/snacks/sliceable/carrotcake
name = "Carrot Cake"
@@ -2324,11 +2338,11 @@
filling_color = "#FFD675"
center_of_mass = list("x"=16, "y"=10)
- New()
- ..()
- reagents.add_reagent("nutriment", 25)
- reagents.add_reagent("imidazoline", 10)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/carrotcake/New()
+ ..()
+ reagents.add_reagent("nutriment", 25)
+ reagents.add_reagent("imidazoline", 10)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/carrotcakeslice
name = "Carrot Cake slice"
@@ -2339,6 +2353,12 @@
bitesize = 2
center_of_mass = list("x"=16, "y"=14)
+/obj/item/weapon/reagent_containers/food/snacks/carrotcakeslice/New()
+ ..()
+ if(!(reagents.total_volume))
+ reagents.add_reagent("imidazoline", 2)
+ reagents.add_reagent("nutriment", 5)
+
/obj/item/weapon/reagent_containers/food/snacks/sliceable/braincake
name = "Brain Cake"
desc = "A squishy cake-thing."
@@ -2348,12 +2368,12 @@
filling_color = "#E6AEDB"
center_of_mass = list("x"=16, "y"=10)
- New()
- ..()
- reagents.add_reagent("protein", 25)
- reagents.add_reagent("nutriment", 5)
- reagents.add_reagent("alkysine", 10)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/braincake/New()
+ ..()
+ reagents.add_reagent("protein", 25)
+ reagents.add_reagent("nutriment", 5)
+ reagents.add_reagent("alkysine", 10)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/braincakeslice
name = "Brain Cake slice"
@@ -2364,6 +2384,13 @@
bitesize = 2
center_of_mass = list("x"=16, "y"=12)
+/obj/item/weapon/reagent_containers/food/snacks/braincakeslice/New()
+ ..()
+ if(!(reagents.total_volume))
+ reagents.add_reagent("protein", 5)
+ reagents.add_reagent("nutriment", 1)
+ reagents.add_reagent("alkysine", 2)
+
/obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesecake
name = "Cheese Cake"
desc = "DANGEROUSLY cheesy."
@@ -2373,11 +2400,11 @@
filling_color = "#FAF7AF"
center_of_mass = list("x"=16, "y"=10)
- New()
- ..()
- reagents.add_reagent("protein", 15)
- reagents.add_reagent("nutriment", 10)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesecake/New()
+ ..()
+ reagents.add_reagent("protein", 15)
+ reagents.add_reagent("nutriment", 10)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/cheesecakeslice
name = "Cheese Cake slice"
@@ -2388,6 +2415,12 @@
bitesize = 2
center_of_mass = list("x"=16, "y"=14)
+/obj/item/weapon/reagent_containers/food/snacks/cheesecakeslice/New()
+ ..()
+ if(!(reagents.total_volume))
+ reagents.add_reagent("protein", 3)
+ reagents.add_reagent("nutriment", 2)
+
/obj/item/weapon/reagent_containers/food/snacks/sliceable/plaincake
name = "Vanilla Cake"
desc = "A plain cake, not a lie."
@@ -2397,9 +2430,9 @@
filling_color = "#F7EDD5"
center_of_mass = list("x"=16, "y"=10)
- New()
- ..()
- reagents.add_reagent("nutriment", 20)
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/plaincake/New()
+ ..()
+ reagents.add_reagent("nutriment", 20)
/obj/item/weapon/reagent_containers/food/snacks/plaincakeslice
name = "Vanilla Cake slice"
@@ -2410,6 +2443,11 @@
bitesize = 2
center_of_mass = list("x"=16, "y"=14)
+/obj/item/weapon/reagent_containers/food/snacks/plaincakeslice/New()
+ ..()
+ if(!(reagents.total_volume))
+ reagents.add_reagent("nutriment", 4)
+
/obj/item/weapon/reagent_containers/food/snacks/sliceable/orangecake
name = "Orange Cake"
desc = "A cake with added orange."
@@ -2419,9 +2457,9 @@
filling_color = "#FADA8E"
center_of_mass = list("x"=16, "y"=10)
- New()
- ..()
- reagents.add_reagent("nutriment", 20)
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/orangecake/New()
+ ..()
+ reagents.add_reagent("nutriment", 20)
/obj/item/weapon/reagent_containers/food/snacks/orangecakeslice
name = "Orange Cake slice"
@@ -2432,6 +2470,11 @@
bitesize = 2
center_of_mass = list("x"=16, "y"=14)
+/obj/item/weapon/reagent_containers/food/snacks/orangecakeslice/New()
+ ..()
+ if(!(reagents.total_volume))
+ reagents.add_reagent("nutriment", 4)
+
/obj/item/weapon/reagent_containers/food/snacks/sliceable/limecake
name = "Lime Cake"
desc = "A cake with added lime."
@@ -2441,9 +2484,9 @@
filling_color = "#CBFA8E"
center_of_mass = list("x"=16, "y"=10)
- New()
- ..()
- reagents.add_reagent("nutriment", 20)
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/limecake/New()
+ ..()
+ reagents.add_reagent("nutriment", 20)
/obj/item/weapon/reagent_containers/food/snacks/limecakeslice
name = "Lime Cake slice"
@@ -2454,6 +2497,11 @@
bitesize = 2
center_of_mass = list("x"=16, "y"=14)
+/obj/item/weapon/reagent_containers/food/snacks/limecakeslice/New()
+ ..()
+ if(!(reagents.total_volume))
+ reagents.add_reagent("nutriment", 4)
+
/obj/item/weapon/reagent_containers/food/snacks/sliceable/lemoncake
name = "Lemon Cake"
desc = "A cake with added lemon."
@@ -2463,9 +2511,9 @@
filling_color = "#FAFA8E"
center_of_mass = list("x"=16, "y"=10)
- New()
- ..()
- reagents.add_reagent("nutriment", 20)
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/lemoncake/New()
+ ..()
+ reagents.add_reagent("nutriment", 20)
/obj/item/weapon/reagent_containers/food/snacks/lemoncakeslice
name = "Lemon Cake slice"
@@ -2476,6 +2524,11 @@
bitesize = 2
center_of_mass = list("x"=16, "y"=14)
+/obj/item/weapon/reagent_containers/food/snacks/lemoncakeslice/New()
+ ..()
+ if(!(reagents.total_volume))
+ reagents.add_reagent("nutriment", 4)
+
/obj/item/weapon/reagent_containers/food/snacks/sliceable/chocolatecake
name = "Chocolate Cake"
desc = "A cake with added chocolate"
@@ -2485,9 +2538,9 @@
filling_color = "#805930"
center_of_mass = list("x"=16, "y"=10)
- New()
- ..()
- reagents.add_reagent("nutriment", 20)
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/chocolatecake/New()
+ ..()
+ reagents.add_reagent("nutriment", 20)
/obj/item/weapon/reagent_containers/food/snacks/chocolatecakeslice
name = "Chocolate Cake slice"
@@ -2498,6 +2551,11 @@
bitesize = 2
center_of_mass = list("x"=16, "y"=14)
+/obj/item/weapon/reagent_containers/food/snacks/chocolatecakeslice/New()
+ ..()
+ if(!(reagents.total_volume))
+ reagents.add_reagent("nutriment", 4)
+
/obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesewheel
name = "Cheese wheel"
desc = "A big wheel of delcious Cheddar."
@@ -2507,10 +2565,10 @@
filling_color = "#FFF700"
center_of_mass = list("x"=16, "y"=10)
- New()
- ..()
- reagents.add_reagent("protein", 20)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesewheel/New()
+ ..()
+ reagents.add_reagent("protein", 20)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge
name = "Cheese wedge"
@@ -2529,11 +2587,11 @@
filling_color = "#FFD6D6"
center_of_mass = list("x"=16, "y"=10)
- New()
- ..()
- reagents.add_reagent("nutriment", 20)
- reagents.add_reagent("sprinkles", 10)
- bitesize = 3
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/birthdaycake/New()
+ ..()
+ reagents.add_reagent("nutriment", 20)
+ reagents.add_reagent("sprinkles", 10)
+ bitesize = 3
/obj/item/weapon/reagent_containers/food/snacks/birthdaycakeslice
name = "Birthday Cake slice"
@@ -2544,6 +2602,12 @@
bitesize = 2
center_of_mass = list("x"=16, "y"=14)
+/obj/item/weapon/reagent_containers/food/snacks/birthdaycakeslice/New()
+ ..()
+ if(!(reagents.total_volume))
+ reagents.add_reagent("nutriment", 4)
+ reagents.add_reagent("sprinkles", 2)
+
/obj/item/weapon/reagent_containers/food/snacks/sliceable/bread
name = "Bread"
icon_state = "Some plain old Earthen bread."
@@ -2553,10 +2617,10 @@
filling_color = "#FFE396"
center_of_mass = list("x"=16, "y"=9)
- New()
- ..()
- reagents.add_reagent("nutriment", 6)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/bread/New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/breadslice
name = "Bread slice"
@@ -2567,6 +2631,11 @@
bitesize = 2
center_of_mass = list("x"=16, "y"=4)
+/obj/item/weapon/reagent_containers/food/snacks/breadslice/New()
+ ..()
+ if(!(reagents.total_volume))
+ reagents.add_reagent("nutriment", 1)
+
/obj/item/weapon/reagent_containers/food/snacks/sliceable/creamcheesebread
name = "Cream Cheese Bread"
@@ -2577,11 +2646,11 @@
filling_color = "#FFF896"
center_of_mass = list("x"=16, "y"=9)
- New()
- ..()
- reagents.add_reagent("protein", 15)
- reagents.add_reagent("nutriment", 5)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/creamcheesebread/New()
+ ..()
+ reagents.add_reagent("protein", 15)
+ reagents.add_reagent("nutriment", 5)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/creamcheesebreadslice
name = "Cream Cheese Bread slice"
@@ -2592,6 +2661,11 @@
bitesize = 2
center_of_mass = list("x"=16, "y"=13)
+/obj/item/weapon/reagent_containers/food/snacks/creamcheesebreadslice/New()
+ ..()
+ if(!(reagents.total_volume))
+ reagents.add_reagent("protein", 3)
+ reagents.add_reagent("nutriment", 1)
/obj/item/weapon/reagent_containers/food/snacks/watermelonslice
name = "Watermelon Slice"
@@ -2601,6 +2675,10 @@
bitesize = 2
center_of_mass = list("x"=16, "y"=10)
+/obj/item/weapon/reagent_containers/food/snacks/watermelonslice/New()
+ ..()
+ if(!(reagents.total_volume))
+ reagents.add_reagent("watermelonjuice", 1)
/obj/item/weapon/reagent_containers/food/snacks/sliceable/applecake
name = "Apple Cake"
@@ -2611,9 +2689,9 @@
filling_color = "#EBF5B8"
center_of_mass = list("x"=16, "y"=10)
- New()
- ..()
- reagents.add_reagent("nutriment", 15)
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/applecake/New()
+ ..()
+ reagents.add_reagent("nutriment", 15)
/obj/item/weapon/reagent_containers/food/snacks/applecakeslice
name = "Apple Cake slice"
@@ -2624,6 +2702,11 @@
bitesize = 2
center_of_mass = list("x"=16, "y"=14)
+/obj/item/weapon/reagent_containers/food/snacks/applecakeslice/New()
+ ..()
+ if(!(reagents.total_volume))
+ reagents.add_reagent("nutriment", 3)
+
/obj/item/weapon/reagent_containers/food/snacks/sliceable/pumpkinpie
name = "Pumpkin Pie"
desc = "A delicious treat for the autumn months."
@@ -2633,9 +2716,9 @@
filling_color = "#F5B951"
center_of_mass = list("x"=16, "y"=10)
- New()
- ..()
- reagents.add_reagent("nutriment", 15)
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/pumpkinpie/New()
+ ..()
+ reagents.add_reagent("nutriment", 15)
/obj/item/weapon/reagent_containers/food/snacks/pumpkinpieslice
name = "Pumpkin Pie slice"
@@ -2646,6 +2729,11 @@
bitesize = 2
center_of_mass = list("x"=16, "y"=12)
+/obj/item/weapon/reagent_containers/food/snacks/pumpkinpieslice/New()
+ ..()
+ if(!(reagents.total_volume))
+ reagents.add_reagent("nutriment", 3)
+
/obj/item/weapon/reagent_containers/food/snacks/cracker
name = "Cracker"
desc = "It's a salted cracker."
@@ -2653,11 +2741,9 @@
filling_color = "#F5DEB8"
center_of_mass = list("x"=17, "y"=6)
- New()
- ..()
- reagents.add_reagent("nutriment", 1)
-
-
+/obj/item/weapon/reagent_containers/food/snacks/cracker/New()
+ ..()
+ reagents.add_reagent("nutriment", 1)
/////////////////////////////////////////////////PIZZA////////////////////////////////////////
@@ -2673,12 +2759,12 @@
slices_num = 6
center_of_mass = list("x"=16, "y"=11)
- New()
- ..()
- reagents.add_reagent("nutriment", 35)
- reagents.add_reagent("protein", 5)
- reagents.add_reagent("tomatojuice", 6)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/margherita/New()
+ ..()
+ reagents.add_reagent("nutriment", 35)
+ reagents.add_reagent("protein", 5)
+ reagents.add_reagent("tomatojuice", 6)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/margheritaslice
name = "Margherita slice"
@@ -2688,6 +2774,13 @@
bitesize = 2
center_of_mass = list("x"=18, "y"=13)
+/obj/item/weapon/reagent_containers/food/snacks/margheritaslice/New()
+ ..()
+ if(!(reagents.total_volume))
+ reagents.add_reagent("nutriment", 5)
+ reagents.add_reagent("protein", 1)
+ reagents.add_reagent("tomatojuice", 1)
+
/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/meatpizza
name = "Meatpizza"
desc = "A pizza with meat topping."
@@ -2696,11 +2789,11 @@
slices_num = 6
center_of_mass = list("x"=16, "y"=11)
- New()
- ..()
- reagents.add_reagent("protein", 44)
- reagents.add_reagent("tomatojuice", 6)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/meatpizza/New()
+ ..()
+ reagents.add_reagent("protein", 44)
+ reagents.add_reagent("tomatojuice", 6)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/meatpizzaslice
name = "Meatpizza slice"
@@ -2710,6 +2803,12 @@
bitesize = 2
center_of_mass = list("x"=18, "y"=13)
+/obj/item/weapon/reagent_containers/food/snacks/meatpizzaslice/New()
+ ..()
+ if(!(reagents.total_volume))
+ reagents.add_reagent("protein", 7)
+ reagents.add_reagent("tomatojuice", 1)
+
/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/mushroompizza
name = "Mushroompizza"
desc = "Very special pizza"
@@ -2718,11 +2817,11 @@
slices_num = 6
center_of_mass = list("x"=16, "y"=11)
- New()
- ..()
- reagents.add_reagent("nutriment", 35)
- reagents.add_reagent("protein", 5)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/mushroompizza/New()
+ ..()
+ reagents.add_reagent("nutriment", 35)
+ reagents.add_reagent("protein", 5)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/mushroompizzaslice
name = "Mushroompizza slice"
@@ -2732,6 +2831,12 @@
bitesize = 2
center_of_mass = list("x"=18, "y"=13)
+/obj/item/weapon/reagent_containers/food/snacks/mushroompizzaslice/New()
+ ..()
+ if(!(reagents.total_volume))
+ reagents.add_reagent("nutriment", 5)
+ reagents.add_reagent("protein", 1)
+
/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza
name = "Vegetable pizza"
desc = "No one of Tomato Sapiens were harmed during making this pizza"
@@ -2740,13 +2845,13 @@
slices_num = 6
center_of_mass = list("x"=16, "y"=11)
- New()
- ..()
- reagents.add_reagent("nutriment", 25)
- reagents.add_reagent("protein", 5)
- reagents.add_reagent("tomatojuice", 6)
- reagents.add_reagent("imidazoline", 12)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza/New()
+ ..()
+ reagents.add_reagent("nutriment", 25)
+ reagents.add_reagent("protein", 5)
+ reagents.add_reagent("tomatojuice", 6)
+ reagents.add_reagent("imidazoline", 12)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/vegetablepizzaslice
name = "Vegetable pizza slice"
@@ -2756,6 +2861,14 @@
bitesize = 2
center_of_mass = list("x"=18, "y"=13)
+/obj/item/weapon/reagent_containers/food/snacks/vegetablepizzaslice/New()
+ ..()
+ if(!(reagents.total_volume))
+ reagents.add_reagent("nutriment", 4)
+ reagents.add_reagent("protein", 1)
+ reagents.add_reagent("tomatojuice", 1)
+ reagents.add_reagent("imidazoline", 2)
+
/obj/item/pizzabox
name = "pizza box"
desc = "A box suited for pizzas."
@@ -2768,6 +2881,18 @@
var/list/boxes = list() // If the boxes are stacked, they come here
var/boxtag = ""
+/obj/item/pizzabox/proc/closepizzabox()
+
+ if( boxes.len > 0 )
+ return
+
+ open = !open
+
+ if( open && pizza )
+ ismessy = 1
+
+ update_icon()
+
/obj/item/pizzabox/update_icon()
overlays = list()
@@ -2846,15 +2971,12 @@
/obj/item/pizzabox/attack_self( mob/user as mob )
- if( boxes.len > 0 )
- return
+ closepizzabox()
- open = !open
+/obj/item/pizzabox/AltClick()
- if( open && pizza )
- ismessy = 1
-
- update_icon()
+ if(Adjacent(usr))
+ closepizzabox()
/obj/item/pizzabox/attackby( obj/item/I as obj, mob/user as mob )
if( istype(I, /obj/item/pizzabox/) )
@@ -2940,14 +3062,11 @@
filling_color = "#75754B"
center_of_mass = list("x"=16, "y"=7)
- New()
- ..()
- reagents.add_reagent("nutriment", 6)
- reagents.add_reagent("radium", 2)
- bitesize = 2
-
-
-
+/obj/item/weapon/reagent_containers/food/snacks/dionaroast/New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ reagents.add_reagent("radium", 2)
+ bitesize = 2
///////////////////////////////////////////
// new old food stuff from bs12
@@ -2960,10 +3079,10 @@
bitesize = 2
center_of_mass = list("x"=16, "y"=13)
- New()
- ..()
- reagents.add_reagent("protein", 1)
- reagents.add_reagent("nutriment", 3)
+/obj/item/weapon/reagent_containers/food/snacks/dough/New()
+ ..()
+ reagents.add_reagent("protein", 1)
+ reagents.add_reagent("nutriment", 3)
// Dough + rolling pin = flat dough
/obj/item/weapon/reagent_containers/food/snacks/dough/attackby(obj/item/weapon/W as obj, mob/user as mob)
@@ -2982,10 +3101,10 @@
slices_num = 3
center_of_mass = list("x"=16, "y"=16)
- New()
- ..()
- reagents.add_reagent("protein", 1)
- reagents.add_reagent("nutriment", 3)
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough/New()
+ ..()
+ reagents.add_reagent("protein", 1)
+ reagents.add_reagent("nutriment", 3)
/obj/item/weapon/reagent_containers/food/snacks/doughslice
name = "dough slice"
@@ -2997,9 +3116,9 @@
bitesize = 2
center_of_mass = list("x"=17, "y"=19)
- New()
- ..()
- reagents.add_reagent("nutriment", 1)
+/obj/item/weapon/reagent_containers/food/snacks/doughslice/New()
+ ..()
+ reagents.add_reagent("nutriment", 1)
/obj/item/weapon/reagent_containers/food/snacks/bun
name = "bun"
@@ -3009,9 +3128,9 @@
bitesize = 2
center_of_mass = list("x"=16, "y"=12)
- New()
- ..()
- reagents.add_reagent("nutriment", 4)
+/obj/item/weapon/reagent_containers/food/snacks/bun/New()
+ ..()
+ reagents.add_reagent("nutriment", 4)
/obj/item/weapon/reagent_containers/food/snacks/bun/attackby(obj/item/weapon/W as obj, mob/user as mob)
// Bun + meatball = burger
@@ -3064,10 +3183,10 @@
bitesize = 3
center_of_mass = list("x"=21, "y"=12)
- New()
- ..()
- reagents.add_reagent("protein", 3)
- reagents.add_reagent("nutriment", 4)
+/obj/item/weapon/reagent_containers/food/snacks/taco/New()
+ ..()
+ reagents.add_reagent("protein", 3)
+ reagents.add_reagent("nutriment", 4)
/obj/item/weapon/reagent_containers/food/snacks/rawcutlet
name = "raw cutlet"
@@ -3077,9 +3196,9 @@
bitesize = 1
center_of_mass = list("x"=17, "y"=20)
- New()
- ..()
- reagents.add_reagent("protein", 1)
+/obj/item/weapon/reagent_containers/food/snacks/rawcutlet/New()
+ ..()
+ reagents.add_reagent("protein", 1)
/obj/item/weapon/reagent_containers/food/snacks/cutlet
name = "cutlet"
@@ -3089,9 +3208,9 @@
bitesize = 2
center_of_mass = list("x"=17, "y"=20)
- New()
- ..()
- reagents.add_reagent("protein", 2)
+/obj/item/weapon/reagent_containers/food/snacks/cutlet/New()
+ ..()
+ reagents.add_reagent("protein", 2)
/obj/item/weapon/reagent_containers/food/snacks/rawmeatball
name = "raw meatball"
@@ -3101,9 +3220,9 @@
bitesize = 2
center_of_mass = list("x"=16, "y"=15)
- New()
- ..()
- reagents.add_reagent("protein", 2)
+/obj/item/weapon/reagent_containers/food/snacks/rawmeatball/New()
+ ..()
+ reagents.add_reagent("protein", 2)
/obj/item/weapon/reagent_containers/food/snacks/hotdog
name = "hotdog"
@@ -3112,9 +3231,9 @@
bitesize = 2
center_of_mass = list("x"=16, "y"=17)
- New()
- ..()
- reagents.add_reagent("protein", 6)
+/obj/item/weapon/reagent_containers/food/snacks/hotdog/New()
+ ..()
+ reagents.add_reagent("protein", 6)
/obj/item/weapon/reagent_containers/food/snacks/flatbread
name = "flatbread"
@@ -3124,9 +3243,9 @@
bitesize = 2
center_of_mass = list("x"=16, "y"=16)
- New()
- ..()
- reagents.add_reagent("nutriment", 3)
+/obj/item/weapon/reagent_containers/food/snacks/flatbread/New()
+ ..()
+ reagents.add_reagent("nutriment", 3)
// potato + knife = raw sticks
/obj/item/weapon/reagent_containers/food/snacks/grown/potato/attackby(obj/item/weapon/W as obj, mob/user as mob)
@@ -3145,9 +3264,9 @@
bitesize = 2
center_of_mass = list("x"=16, "y"=12)
- New()
- ..()
- reagents.add_reagent("nutriment", 3)
+/obj/item/weapon/reagent_containers/food/snacks/rawsticks/New()
+ ..()
+ reagents.add_reagent("nutriment", 3)
/obj/item/weapon/reagent_containers/food/snacks/liquidfood
name = "\improper LiquidFood Ration"
@@ -3157,12 +3276,11 @@
filling_color = "#A8A8A8"
center_of_mass = list("x"=16, "y"=15)
- New()
- ..()
- reagents.add_reagent("nutriment", 20)
- reagents.add_reagent("iron", 3)
- bitesize = 4
-
+/obj/item/weapon/reagent_containers/food/snacks/liquidfood/New()
+ ..()
+ reagents.add_reagent("nutriment", 20)
+ reagents.add_reagent("iron", 3)
+ bitesize = 4
/obj/item/weapon/reagent_containers/food/snacks/tastybread
name = "bread tube"
@@ -3172,10 +3290,10 @@
filling_color = "#A66829"
center_of_mass = list("x"=17, "y"=16)
- New()
- ..()
- reagents.add_reagent("nutriment", 6)
- bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/tastybread/New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/skrellsnacks
name = "\improper SkrellSnax"
@@ -3184,7 +3302,7 @@
filling_color = "#A66829"
center_of_mass = list("x"=15, "y"=12)
- New()
- ..()
- reagents.add_reagent("nutriment", 10)
- bitesize = 3
+/obj/item/weapon/reagent_containers/food/snacks/skrellsnacks/New()
+ ..()
+ reagents.add_reagent("nutriment", 10)
+ bitesize = 3
diff --git a/code/modules/reagents/reagent_containers/food/snacks/meat.dm b/code/modules/reagents/reagent_containers/food/snacks/meat.dm
index 7ea52765fc..9e1dc52536 100644
--- a/code/modules/reagents/reagent_containers/food/snacks/meat.dm
+++ b/code/modules/reagents/reagent_containers/food/snacks/meat.dm
@@ -5,10 +5,11 @@
health = 180
filling_color = "#FF1C1C"
center_of_mass = list("x"=16, "y"=14)
- New()
- ..()
- reagents.add_reagent("protein", 9)
- src.bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/meat/New()
+ ..()
+ reagents.add_reagent("protein", 9)
+ src.bitesize = 3
/obj/item/weapon/reagent_containers/food/snacks/meat/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W,/obj/item/weapon/material/knife))
diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm
index 9ba46eb271..d131cdf9c9 100644
--- a/code/modules/reagents/reagent_containers/glass.dm
+++ b/code/modules/reagents/reagent_containers/glass.dm
@@ -40,70 +40,77 @@
/obj/machinery/sleeper,
/obj/machinery/smartfridge/,
/obj/machinery/biogenerator,
- /obj/machinery/constructable_frame,
- /obj/machinery/radiocarbon_spectrometer
+ /obj/structure/frame,
+ /obj/machinery/radiocarbon_spectrometer,
+ /obj/machinery/xenobio2/manualinjector
)
- New()
- ..()
- base_name = name
+/obj/item/weapon/reagent_containers/glass/New()
+ ..()
+ base_name = name
- examine(var/mob/user)
- if(!..(user, 2))
+/obj/item/weapon/reagent_containers/glass/examine(var/mob/user)
+ if(!..(user, 2))
+ return
+ if(reagents && reagents.reagent_list.len)
+ user << "It contains [reagents.total_volume] units of liquid. "
+ else
+ user << "It is empty. "
+ if(!is_open_container())
+ user << "Airtight lid seals it completely. "
+
+/obj/item/weapon/reagent_containers/glass/attack_self()
+ ..()
+ if(is_open_container())
+ usr << "You put the lid on \the [src]. "
+ flags ^= OPENCONTAINER
+ else
+ usr << "You take the lid off \the [src]. "
+ flags |= OPENCONTAINER
+ update_icon()
+
+/obj/item/weapon/reagent_containers/glass/do_surgery(mob/living/carbon/M, mob/living/user)
+ if(user.a_intent != I_HELP) //in case it is ever used as a surgery tool
+ return ..()
+ afterattack(M, user, 1)
+ return 1
+
+/obj/item/weapon/reagent_containers/glass/afterattack(var/obj/target, var/mob/user, var/proximity)
+
+ if(!is_open_container() || !proximity)
+ return
+
+ for(var/type in can_be_placed_into)
+ if(istype(target, type))
return
- if(reagents && reagents.reagent_list.len)
- user << "It contains [reagents.total_volume] units of liquid. "
+
+ if(standard_splash_mob(user, target))
+ return
+ if(standard_dispenser_refill(user, target))
+ return
+ if(standard_pour_into(user, target))
+ return
+
+ if(reagents.total_volume)
+ user << "You splash the solution onto [target]. "
+ reagents.splash(target, reagents.total_volume)
+ return
+
+/obj/item/weapon/reagent_containers/glass/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ if(istype(W, /obj/item/weapon/pen) || istype(W, /obj/item/device/flashlight/pen))
+ var/tmp_label = sanitizeSafe(input(user, "Enter a label for [name]", "Label", label_text), MAX_NAME_LEN)
+ if(length(tmp_label) > 10)
+ user << "The label can be at most 10 characters long. "
else
- user << "It is empty. "
- if(!is_open_container())
- user << "Airtight lid seals it completely. "
+ user << "You set the label to \"[tmp_label]\". "
+ label_text = tmp_label
+ update_name_label()
- attack_self()
- ..()
- if(is_open_container())
- usr << "You put the lid on \the [src]. "
- flags ^= OPENCONTAINER
- else
- usr << "You take the lid off \the [src]. "
- flags |= OPENCONTAINER
- update_icon()
-
- afterattack(var/obj/target, var/mob/user, var/flag)
-
- if(!is_open_container() || !flag)
- return
-
- for(var/type in can_be_placed_into)
- if(istype(target, type))
- return
-
- if(standard_splash_mob(user, target))
- return
- if(standard_dispenser_refill(user, target))
- return
- if(standard_pour_into(user, target))
- return
-
- if(reagents.total_volume)
- user << "You splash the solution onto [target]. "
- reagents.splash(target, reagents.total_volume)
- return
-
- attackby(obj/item/weapon/W as obj, mob/user as mob)
- if(istype(W, /obj/item/weapon/pen) || istype(W, /obj/item/device/flashlight/pen))
- var/tmp_label = sanitizeSafe(input(user, "Enter a label for [name]", "Label", label_text), MAX_NAME_LEN)
- if(length(tmp_label) > 10)
- user << "The label can be at most 10 characters long. "
- else
- user << "You set the label to \"[tmp_label]\". "
- label_text = tmp_label
- update_name_label()
-
- proc/update_name_label()
- if(label_text == "")
- name = base_name
- else
- name = "[base_name] ([label_text])"
+/obj/item/weapon/reagent_containers/glass/proc/update_name_label()
+ if(label_text == "")
+ name = base_name
+ else
+ name = "[base_name] ([label_text])"
/obj/item/weapon/reagent_containers/glass/beaker
name = "beaker"
@@ -113,47 +120,47 @@
item_state = "beaker"
matter = list("glass" = 500)
- New()
- ..()
- desc += " Can hold up to [volume] units."
-
- on_reagent_change()
- update_icon()
-
- pickup(mob/user)
- ..()
- update_icon()
-
- dropped(mob/user)
- ..()
- update_icon()
-
- attack_hand()
- ..()
- update_icon()
+/obj/item/weapon/reagent_containers/glass/beaker/New()
+ ..()
+ desc += " Can hold up to [volume] units."
+/obj/item/weapon/reagent_containers/glass/beaker/on_reagent_change()
update_icon()
- overlays.Cut()
- if(reagents.total_volume)
- var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]10")
+/obj/item/weapon/reagent_containers/glass/beaker/pickup(mob/user)
+ ..()
+ update_icon()
- var/percent = round((reagents.total_volume / volume) * 100)
- switch(percent)
- if(0 to 9) filling.icon_state = "[icon_state]-10"
- if(10 to 24) filling.icon_state = "[icon_state]10"
- if(25 to 49) filling.icon_state = "[icon_state]25"
- if(50 to 74) filling.icon_state = "[icon_state]50"
- if(75 to 79) filling.icon_state = "[icon_state]75"
- if(80 to 90) filling.icon_state = "[icon_state]80"
- if(91 to INFINITY) filling.icon_state = "[icon_state]100"
+/obj/item/weapon/reagent_containers/glass/beaker/dropped(mob/user)
+ ..()
+ update_icon()
- filling.color = reagents.get_color()
- overlays += filling
+/obj/item/weapon/reagent_containers/glass/beaker/attack_hand()
+ ..()
+ update_icon()
- if (!is_open_container())
- var/image/lid = image(icon, src, "lid_[initial(icon_state)]")
- overlays += lid
+/obj/item/weapon/reagent_containers/glass/beaker/update_icon()
+ overlays.Cut()
+
+ if(reagents.total_volume)
+ var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]10")
+
+ var/percent = round((reagents.total_volume / volume) * 100)
+ switch(percent)
+ if(0 to 9) filling.icon_state = "[icon_state]-10"
+ if(10 to 24) filling.icon_state = "[icon_state]10"
+ if(25 to 49) filling.icon_state = "[icon_state]25"
+ if(50 to 74) filling.icon_state = "[icon_state]50"
+ if(75 to 79) filling.icon_state = "[icon_state]75"
+ if(80 to 90) filling.icon_state = "[icon_state]80"
+ if(91 to INFINITY) filling.icon_state = "[icon_state]100"
+
+ filling.color = reagents.get_color()
+ overlays += filling
+
+ if (!is_open_container())
+ var/image/lid = image(icon, src, "lid_[initial(icon_state)]")
+ overlays += lid
/obj/item/weapon/reagent_containers/glass/beaker/large
name = "large beaker"
@@ -194,14 +201,12 @@
possible_transfer_amounts = list(5,10,15,25)
flags = OPENCONTAINER
-/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone
- New()
- ..()
- reagents.add_reagent("cryoxadone", 30)
- update_icon()
+/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone/New()
+ ..()
+ reagents.add_reagent("cryoxadone", 30)
+ update_icon()
-/obj/item/weapon/reagent_containers/glass/beaker/sulphuric
- New()
+/obj/item/weapon/reagent_containers/glass/beaker/sulphuric/New()
..()
reagents.add_reagent("sacid", 60)
update_icon()
@@ -221,7 +226,6 @@
unacidable = 0
/obj/item/weapon/reagent_containers/glass/bucket/attackby(var/obj/D, mob/user as mob)
-
if(isprox(D))
user << "You add [D] to [src]."
qdel(D)
@@ -246,34 +250,13 @@
var/image/lid = image(icon, src, "lid_[initial(icon_state)]")
overlays += lid
-/*
-/obj/item/weapon/reagent_containers/glass/blender_jug
- name = "Blender Jug"
- desc = "A blender jug, part of a blender."
- icon = 'icons/obj/kitchen.dmi'
- icon_state = "blender_jug_e"
- volume = 100
-
- on_reagent_change()
- switch(src.reagents.total_volume)
- if(0)
- icon_state = "blender_jug_e"
- if(1 to 75)
- icon_state = "blender_jug_h"
- if(76 to 100)
- icon_state = "blender_jug_f"
-
-/obj/item/weapon/reagent_containers/glass/canister //not used apparantly
- desc = "It's a canister. Mainly used for transporting fuel."
- name = "canister"
- icon = 'icons/obj/tank.dmi'
- icon_state = "canister"
- item_state = "canister"
- m_amt = 300
- g_amt = 0
- w_class = 4.0
-
+/obj/item/weapon/reagent_containers/glass/cooler_bottle
+ desc = "A bottle for a water-cooler."
+ name = "water-cooler bottle"
+ icon = 'icons/obj/vending.dmi'
+ icon_state = "water_cooler_bottle"
+ matter = list(DEFAULT_WALL_MATERIAL = 200)
+ w_class = 3.0
amount_per_transfer_from_this = 20
- possible_transfer_amounts = list(10,20,30,60)
+ possible_transfer_amounts = list(10,20,30,60,120)
volume = 120
-*/
diff --git a/code/modules/reagents/reagent_containers/glass/bottle.dm b/code/modules/reagents/reagent_containers/glass/bottle.dm
index d05e2d23b7..5f22c3f324 100644
--- a/code/modules/reagents/reagent_containers/glass/bottle.dm
+++ b/code/modules/reagents/reagent_containers/glass/bottle.dm
@@ -12,48 +12,49 @@
flags = 0
volume = 60
- on_reagent_change()
- update_icon()
-
- pickup(mob/user)
- ..()
- update_icon()
-
- dropped(mob/user)
- ..()
- update_icon()
-
- attack_hand()
- ..()
- update_icon()
-
- New()
- ..()
- if(!icon_state)
- icon_state = "bottle-[rand(1,4)]"
-
+/obj/item/weapon/reagent_containers/glass/bottle/on_reagent_change()
update_icon()
- overlays.Cut()
- if(reagents.total_volume && (icon_state == "bottle-1" || icon_state == "bottle-2" || icon_state == "bottle-3" || icon_state == "bottle-4"))
- var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]10")
+/obj/item/weapon/reagent_containers/glass/bottle/pickup(mob/user)
+ ..()
+ update_icon()
- var/percent = round((reagents.total_volume / volume) * 100)
- switch(percent)
- if(0 to 9) filling.icon_state = "[icon_state]--10"
- if(10 to 24) filling.icon_state = "[icon_state]-10"
- if(25 to 49) filling.icon_state = "[icon_state]-25"
- if(50 to 74) filling.icon_state = "[icon_state]-50"
- if(75 to 79) filling.icon_state = "[icon_state]-75"
- if(80 to 90) filling.icon_state = "[icon_state]-80"
- if(91 to INFINITY) filling.icon_state = "[icon_state]-100"
+/obj/item/weapon/reagent_containers/glass/bottle/dropped(mob/user)
+ ..()
+ update_icon()
- filling.color = reagents.get_color()
- overlays += filling
+/obj/item/weapon/reagent_containers/glass/bottle/attack_hand()
+ ..()
+ update_icon()
+
+/obj/item/weapon/reagent_containers/glass/bottle/New()
+ ..()
+ if(!icon_state)
+ icon_state = "bottle-[rand(1,4)]"
+
+/obj/item/weapon/reagent_containers/glass/bottle/update_icon()
+ overlays.Cut()
+
+ if(reagents.total_volume && (icon_state == "bottle-1" || icon_state == "bottle-2" || icon_state == "bottle-3" || icon_state == "bottle-4"))
+ var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]10")
+
+ var/percent = round((reagents.total_volume / volume) * 100)
+ switch(percent)
+ if(0 to 9) filling.icon_state = "[icon_state]--10"
+ if(10 to 24) filling.icon_state = "[icon_state]-10"
+ if(25 to 49) filling.icon_state = "[icon_state]-25"
+ if(50 to 74) filling.icon_state = "[icon_state]-50"
+ if(75 to 79) filling.icon_state = "[icon_state]-75"
+ if(80 to 90) filling.icon_state = "[icon_state]-80"
+ if(91 to INFINITY) filling.icon_state = "[icon_state]-100"
+
+ filling.color = reagents.get_color()
+ overlays += filling
+
+ if (!is_open_container())
+ var/image/lid = image(icon, src, "lid_bottle")
+ overlays += lid
- if (!is_open_container())
- var/image/lid = image(icon, src, "lid_bottle")
- overlays += lid
/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline
name = "inaprovaline bottle"
@@ -61,10 +62,11 @@
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle-4"
- New()
- ..()
- reagents.add_reagent("inaprovaline", 60)
- update_icon()
+/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline/New()
+ ..()
+ reagents.add_reagent("inaprovaline", 60)
+ update_icon()
+
/obj/item/weapon/reagent_containers/glass/bottle/toxin
name = "toxin bottle"
@@ -72,10 +74,11 @@
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle-3"
- New()
- ..()
- reagents.add_reagent("toxin", 60)
- update_icon()
+/obj/item/weapon/reagent_containers/glass/bottle/toxin/New()
+ ..()
+ reagents.add_reagent("toxin", 60)
+ update_icon()
+
/obj/item/weapon/reagent_containers/glass/bottle/cyanide
name = "cyanide bottle"
@@ -83,10 +86,11 @@
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle-3"
- New()
- ..()
- reagents.add_reagent("cyanide", 30) //volume changed to match chloral
- update_icon()
+
+/obj/item/weapon/reagent_containers/glass/bottle/cyanide/New()
+ ..()
+ reagents.add_reagent("cyanide", 30) //volume changed to match chloral
+ update_icon()
/obj/item/weapon/reagent_containers/glass/bottle/stoxin
name = "soporific bottle"
@@ -94,10 +98,11 @@
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle-3"
- New()
- ..()
- reagents.add_reagent("stoxin", 60)
- update_icon()
+/obj/item/weapon/reagent_containers/glass/bottle/stoxin/New()
+ ..()
+ reagents.add_reagent("stoxin", 60)
+ update_icon()
+
/obj/item/weapon/reagent_containers/glass/bottle/chloralhydrate
name = "Chloral Hydrate Bottle"
@@ -105,10 +110,11 @@
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle-3"
- New()
- ..()
- reagents.add_reagent("chloralhydrate", 30) //Intentionally low since it is so strong. Still enough to knock someone out.
- update_icon()
+/obj/item/weapon/reagent_containers/glass/bottle/chloralhydrate/New()
+ ..()
+ reagents.add_reagent("chloralhydrate", 30) //Intentionally low since it is so strong. Still enough to knock someone out.
+ update_icon()
+
/obj/item/weapon/reagent_containers/glass/bottle/antitoxin
name = "dylovene bottle"
@@ -116,10 +122,11 @@
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle-4"
- New()
- ..()
- reagents.add_reagent("anti_toxin", 60)
- update_icon()
+/obj/item/weapon/reagent_containers/glass/bottle/antitoxin/New()
+ ..()
+ reagents.add_reagent("anti_toxin", 60)
+ update_icon()
+
/obj/item/weapon/reagent_containers/glass/bottle/mutagen
name = "unstable mutagen bottle"
@@ -127,10 +134,11 @@
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle-1"
- New()
- ..()
- reagents.add_reagent("mutagen", 60)
- update_icon()
+/obj/item/weapon/reagent_containers/glass/bottle/mutagen/New()
+ ..()
+ reagents.add_reagent("mutagen", 60)
+ update_icon()
+
/obj/item/weapon/reagent_containers/glass/bottle/ammonia
name = "ammonia bottle"
@@ -138,10 +146,47 @@
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle-1"
- New()
- ..()
- reagents.add_reagent("ammonia", 60)
- update_icon()
+/obj/item/weapon/reagent_containers/glass/bottle/ammonia/New()
+ ..()
+ reagents.add_reagent("ammonia", 60)
+ update_icon()
+
+
+/obj/item/weapon/reagent_containers/glass/bottle/eznutrient
+ name = "\improper EZ NUtrient bottle"
+ desc = "A small bottle."
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bottle-4"
+
+/obj/item/weapon/reagent_containers/glass/bottle/eznutrient/New()
+ ..()
+ reagents.add_reagent("eznutrient", 60)
+ update_icon()
+
+
+/obj/item/weapon/reagent_containers/glass/bottle/left4zed
+ name = "\improper Left-4-Zed bottle"
+ desc = "A small bottle."
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bottle-4"
+
+/obj/item/weapon/reagent_containers/glass/bottle/left4zed/New()
+ ..()
+ reagents.add_reagent("left4zed", 60)
+ update_icon()
+
+
+/obj/item/weapon/reagent_containers/glass/bottle/robustharvest
+ name = "\improper Robust Harvest"
+ desc = "A small bottle."
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bottle-4"
+
+/obj/item/weapon/reagent_containers/glass/bottle/robustharvest/New()
+ ..()
+ reagents.add_reagent("robustharvest", 60)
+ update_icon()
+
/obj/item/weapon/reagent_containers/glass/bottle/diethylamine
name = "diethylamine bottle"
@@ -149,47 +194,56 @@
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle-4"
- New()
- ..()
- reagents.add_reagent("diethylamine", 60)
- update_icon()
+/obj/item/weapon/reagent_containers/glass/bottle/diethylamine/New()
+ ..()
+ reagents.add_reagent("diethylamine", 60)
+ update_icon()
+
/obj/item/weapon/reagent_containers/glass/bottle/pacid
name = "Polytrinic Acid Bottle"
desc = "A small bottle. Contains a small amount of Polytrinic Acid"
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle-4"
- New()
- ..()
- reagents.add_reagent("pacid", 60)
- update_icon()
+
+/obj/item/weapon/reagent_containers/glass/bottle/pacid/New()
+ ..()
+ reagents.add_reagent("pacid", 60)
+ update_icon()
+
/obj/item/weapon/reagent_containers/glass/bottle/adminordrazine
name = "Adminordrazine Bottle"
desc = "A small bottle. Contains the liquid essence of the gods."
icon = 'icons/obj/drinks.dmi'
icon_state = "holyflask"
- New()
- ..()
- reagents.add_reagent("adminordrazine", 60)
- update_icon()
+
+
+/obj/item/weapon/reagent_containers/glass/bottle/adminordrazine/New()
+ ..()
+ reagents.add_reagent("adminordrazine", 60)
+ update_icon()
+
/obj/item/weapon/reagent_containers/glass/bottle/capsaicin
name = "Capsaicin Bottle"
desc = "A small bottle. Contains hot sauce."
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle-4"
- New()
- ..()
- reagents.add_reagent("capsaicin", 60)
- update_icon()
+
+/obj/item/weapon/reagent_containers/glass/bottle/capsaicin/New()
+ ..()
+ reagents.add_reagent("capsaicin", 60)
+ update_icon()
+
/obj/item/weapon/reagent_containers/glass/bottle/frostoil
name = "Frost Oil Bottle"
desc = "A small bottle. Contains cold sauce."
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle-4"
- New()
- ..()
- reagents.add_reagent("frostoil", 60)
- update_icon()
+
+/obj/item/weapon/reagent_containers/glass/bottle/frostoil/New()
+ ..()
+ reagents.add_reagent("frostoil", 60)
+ update_icon()
diff --git a/code/modules/reagents/reagent_containers/glass/bottle/robot.dm b/code/modules/reagents/reagent_containers/glass/bottle/robot.dm
index 3a95b3cd1c..2e2d5e4fdd 100644
--- a/code/modules/reagents/reagent_containers/glass/bottle/robot.dm
+++ b/code/modules/reagents/reagent_containers/glass/bottle/robot.dm
@@ -14,10 +14,10 @@
icon_state = "bottle-4"
reagent = "inaprovaline"
- New()
- ..()
- reagents.add_reagent("inaprovaline", 60)
- update_icon()
+/obj/item/weapon/reagent_containers/glass/bottle/robot/inaprovaline/New()
+ ..()
+ reagents.add_reagent("inaprovaline", 60)
+ update_icon()
/obj/item/weapon/reagent_containers/glass/bottle/robot/antitoxin
@@ -27,8 +27,8 @@
icon_state = "bottle-4"
reagent = "anti_toxin"
- New()
- ..()
- reagents.add_reagent("anti_toxin", 60)
- update_icon()
+/obj/item/weapon/reagent_containers/glass/bottle/robot/antitoxin/New()
+ ..()
+ reagents.add_reagent("anti_toxin", 60)
+ update_icon()
diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm
index 7632f8456f..771ce4cc27 100644
--- a/code/modules/reagents/reagent_containers/hypospray.dm
+++ b/code/modules/reagents/reagent_containers/hypospray.dm
@@ -20,6 +20,12 @@
// reagents.add_reagent("tricordrazine", 30)
// return
+/obj/item/weapon/reagent_containers/hypospray/do_surgery(mob/living/carbon/M, mob/living/user)
+ if(user.a_intent != I_HELP) //in case it is ever used as a surgery tool
+ return ..()
+ attack(M, user)
+ return 1
+
/obj/item/weapon/reagent_containers/hypospray/attack(mob/living/M as mob, mob/user as mob)
if(!reagents.total_volume)
user << "[src] is empty. "
@@ -33,10 +39,11 @@
if(!affected)
user << "\The [H] is missing that limb! "
return
- else if(affected.status & ORGAN_ROBOT)
+ else if(affected.robotic >= ORGAN_ROBOT)
user << "You cannot inject a robotic limb. "
return
+ user.setClickCooldown(DEFAULT_QUICK_COOLDOWN)
user << "You inject [M] with [src]. "
M << "You feel a tiny prick! "
diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm
index e31c009677..def1ac7f81 100644
--- a/code/modules/reagents/reagent_containers/pill.dm
+++ b/code/modules/reagents/reagent_containers/pill.dm
@@ -3,7 +3,7 @@
////////////////////////////////////////////////////////////////////////////////
/obj/item/weapon/reagent_containers/pill
name = "pill"
- desc = "a pill."
+ desc = "A pill."
icon = 'icons/obj/chemical.dmi'
icon_state = null
item_state = "pill"
@@ -12,82 +12,86 @@
slot_flags = SLOT_EARS
volume = 60
- New()
- ..()
- if(!icon_state)
- icon_state = "pill[rand(1, 20)]"
- attack(mob/M as mob, mob/user as mob, def_zone)
- if(M == user)
- if(istype(M, /mob/living/carbon/human))
- var/mob/living/carbon/human/H = M
- if(!H.check_has_mouth())
- user << "Where do you intend to put \the [src]? You don't have a mouth!"
- return
- var/obj/item/blocked = H.check_mouth_coverage()
- if(blocked)
- user << "\The [blocked] is in the way! "
- return
+/obj/item/weapon/reagent_containers/pill/New()
+ ..()
+ if(!icon_state)
+ icon_state = "pill[rand(1, 20)]"
- M << "You swallow \the [src]. "
- M.drop_from_inventory(src) //icon update
- if(reagents.total_volume)
- reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST)
- qdel(src)
- return 1
+/obj/item/weapon/reagent_containers/pill/attack(mob/M as mob, mob/user as mob, def_zone)
- else if(istype(M, /mob/living/carbon/human))
+ if(M == user)
+ if(istype(M, /mob/living/carbon/human))
var/mob/living/carbon/human/H = M
if(!H.check_has_mouth())
- user << "Where do you intend to put \the [src]? \The [H] doesn't have a mouth!"
+ user << "Where do you intend to put \the [src]? You don't have a mouth!"
return
var/obj/item/blocked = H.check_mouth_coverage()
if(blocked)
user << "\The [blocked] is in the way! "
return
- user.visible_message("[user] attempts to force [M] to swallow \the [src]. ")
+ M << "You swallow \the [src]. "
+ M.drop_from_inventory(src) //icon update
+ if(reagents.total_volume)
+ reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST)
+ qdel(src)
+ return 1
- if(!do_mob(user, M))
- return
+ else if(istype(M, /mob/living/carbon/human))
- user.drop_from_inventory(src) //icon update
- user.visible_message("[user] forces [M] to swallow \the [src]. ")
+ var/mob/living/carbon/human/H = M
+ if(!H.check_has_mouth())
+ user << "Where do you intend to put \the [src]? \The [H] doesn't have a mouth!"
+ return
+ var/obj/item/blocked = H.check_mouth_coverage()
+ if(blocked)
+ user << "\The [blocked] is in the way! "
+ return
- var/contained = reagentlist()
- M.attack_log += text("\[[time_stamp()]\] Has been fed [name] by [key_name(user)] Reagents: [contained] ")
- user.attack_log += text("\[[time_stamp()]\] Fed [name] to [key_name(M)] Reagents: [contained] ")
- msg_admin_attack("[key_name_admin(user)] fed [key_name_admin(M)] with [name] Reagents: [contained] (INTENT: [uppertext(user.a_intent)]) (JMP )")
+ user.visible_message("[user] attempts to force [M] to swallow \the [src]. ")
- if(reagents.total_volume)
- reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST)
- qdel(src)
+ user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
+ if(!do_mob(user, M))
+ return
- return 1
+ user.drop_from_inventory(src) //icon update
+ user.visible_message("[user] forces [M] to swallow \the [src]. ")
- return 0
+ var/contained = reagentlist()
+ M.attack_log += text("\[[time_stamp()]\] Has been fed [name] by [key_name(user)] Reagents: [contained] ")
+ user.attack_log += text("\[[time_stamp()]\] Fed [name] to [key_name(M)] Reagents: [contained] ")
+ msg_admin_attack("[key_name_admin(user)] fed [key_name_admin(M)] with [name] Reagents: [contained] (INTENT: [uppertext(user.a_intent)]) (JMP )")
- afterattack(obj/target, mob/user, proximity)
- if(!proximity) return
+ if(reagents.total_volume)
+ reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST)
+ qdel(src)
- if(target.is_open_container() && target.reagents)
- if(!target.reagents.total_volume)
- user << "[target] is empty. Can't dissolve \the [src]. "
- return
- user << "You dissolve \the [src] in [target]. "
+ return 1
- user.attack_log += text("\[[time_stamp()]\] Spiked \a [target] with a pill. Reagents: [reagentlist()] ")
- msg_admin_attack("[user.name] ([user.ckey]) spiked \a [target] with a pill. Reagents: [reagentlist()] (INTENT: [uppertext(user.a_intent)]) (JMP )")
+ return 0
- reagents.trans_to(target, reagents.total_volume)
- for(var/mob/O in viewers(2, user))
- O.show_message("[user] puts something in \the [target]. ", 1)
+/obj/item/weapon/reagent_containers/pill/afterattack(obj/target, mob/user, proximity)
+ if(!proximity) return
- qdel(src)
+ if(target.is_open_container() && target.reagents)
+ if(!target.reagents.total_volume)
+ user << "[target] is empty. Can't dissolve \the [src]. "
+ return
+ user << "You dissolve \the [src] in [target]. "
- return
+ user.attack_log += text("\[[time_stamp()]\] Spiked \a [target] with a pill. Reagents: [reagentlist()] ")
+ msg_admin_attack("[user.name] ([user.ckey]) spiked \a [target] with a pill. Reagents: [reagentlist()] (INTENT: [uppertext(user.a_intent)]) (JMP )")
+
+ reagents.trans_to(target, reagents.total_volume)
+ for(var/mob/O in viewers(2, user))
+ O.show_message("[user] puts something in \the [target]. ", 1)
+
+ qdel(src)
+
+ return
////////////////////////////////////////////////////////////////////////////////
/// Pills. END
@@ -98,163 +102,208 @@
name = "Anti-toxins pill"
desc = "Neutralizes many common toxins."
icon_state = "pill17"
- New()
- ..()
- reagents.add_reagent("anti_toxin", 25)
+
+/obj/item/weapon/reagent_containers/pill/antitox/New()
+ ..()
+ reagents.add_reagent("anti_toxin", 25)
+
/obj/item/weapon/reagent_containers/pill/tox
name = "Toxins pill"
desc = "Highly toxic."
icon_state = "pill5"
- New()
- ..()
- reagents.add_reagent("toxin", 50)
+
+/obj/item/weapon/reagent_containers/pill/tox/New()
+ ..()
+ reagents.add_reagent("toxin", 50)
+
/obj/item/weapon/reagent_containers/pill/cyanide
name = "Cyanide pill"
desc = "Don't swallow this."
icon_state = "pill5"
- New()
- ..()
- reagents.add_reagent("cyanide", 50)
+
+/obj/item/weapon/reagent_containers/pill/cyanide/New()
+ ..()
+ reagents.add_reagent("cyanide", 50)
+
/obj/item/weapon/reagent_containers/pill/adminordrazine
name = "Adminordrazine pill"
desc = "It's magic. We don't have to explain it."
icon_state = "pill16"
- New()
- ..()
- reagents.add_reagent("adminordrazine", 50)
+
+/obj/item/weapon/reagent_containers/pill/adminordrazine/New()
+ ..()
+ reagents.add_reagent("adminordrazine", 50)
/obj/item/weapon/reagent_containers/pill/stox
name = "Sleeping pill"
desc = "Commonly used to treat insomnia."
icon_state = "pill8"
- New()
- ..()
- reagents.add_reagent("stoxin", 15)
+
+/obj/item/weapon/reagent_containers/pill/stox/New()
+ ..()
+ reagents.add_reagent("stoxin", 15)
+
/obj/item/weapon/reagent_containers/pill/kelotane
name = "Kelotane pill"
desc = "Used to treat burns."
icon_state = "pill11"
- New()
- ..()
- reagents.add_reagent("kelotane", 15)
+
+/obj/item/weapon/reagent_containers/pill/kelotane/New()
+ ..()
+ reagents.add_reagent("kelotane", 15)
+
/obj/item/weapon/reagent_containers/pill/paracetamol
name = "Paracetamol pill"
desc = "Tylenol! A painkiller for the ages. Chewables!"
icon_state = "pill8"
- New()
- ..()
- reagents.add_reagent("paracetamol", 15)
+
+/obj/item/weapon/reagent_containers/pill/paracetamol/New()
+ ..()
+ reagents.add_reagent("paracetamol", 15)
+
/obj/item/weapon/reagent_containers/pill/tramadol
name = "Tramadol pill"
desc = "A simple painkiller."
icon_state = "pill8"
- New()
- ..()
- reagents.add_reagent("tramadol", 15)
+
+/obj/item/weapon/reagent_containers/pill/tramadol/New()
+ ..()
+ reagents.add_reagent("tramadol", 15)
/obj/item/weapon/reagent_containers/pill/methylphenidate
name = "Methylphenidate pill"
desc = "Improves the ability to concentrate."
icon_state = "pill8"
- New()
- ..()
- reagents.add_reagent("methylphenidate", 15)
+
+/obj/item/weapon/reagent_containers/pill/methylphenidate/New()
+ ..()
+ reagents.add_reagent("methylphenidate", 15)
+
/obj/item/weapon/reagent_containers/pill/citalopram
name = "Citalopram pill"
desc = "Mild anti-depressant."
icon_state = "pill8"
- New()
- ..()
- reagents.add_reagent("citalopram", 15)
+
+/obj/item/weapon/reagent_containers/pill/citalopram/New()
+ ..()
+ reagents.add_reagent("citalopram", 15)
/obj/item/weapon/reagent_containers/pill/inaprovaline
name = "Inaprovaline pill"
desc = "Used to stabilize patients."
icon_state = "pill20"
- New()
- ..()
- reagents.add_reagent("inaprovaline", 30)
+
+/obj/item/weapon/reagent_containers/pill/inaprovaline/New()
+ ..()
+ reagents.add_reagent("inaprovaline", 30)
+
/obj/item/weapon/reagent_containers/pill/dexalin
name = "Dexalin pill"
desc = "Used to treat oxygen deprivation."
icon_state = "pill16"
- New()
- ..()
- reagents.add_reagent("dexalin", 15)
+
+/obj/item/weapon/reagent_containers/pill/dexalin/New()
+ ..()
+ reagents.add_reagent("dexalin", 15)
+
/obj/item/weapon/reagent_containers/pill/dexalin_plus
name = "Dexalin Plus pill"
desc = "Used to treat extreme oxygen deprivation."
icon_state = "pill8"
- New()
- ..()
- reagents.add_reagent("dexalinp", 15)
+
+/obj/item/weapon/reagent_containers/pill/dexalin_plus/New()
+ ..()
+ reagents.add_reagent("dexalinp", 15)
+
/obj/item/weapon/reagent_containers/pill/dermaline
name = "Dermaline pill"
desc = "Used to treat burn wounds."
icon_state = "pill12"
- New()
- ..()
- reagents.add_reagent("dermaline", 15)
+
+/obj/item/weapon/reagent_containers/pill/dermaline/New()
+ ..()
+ reagents.add_reagent("dermaline", 15)
+
/obj/item/weapon/reagent_containers/pill/dylovene
name = "Dylovene pill"
desc = "A broad-spectrum anti-toxin."
icon_state = "pill13"
- New()
- ..()
- reagents.add_reagent("anti_toxin", 15)
+
+/obj/item/weapon/reagent_containers/pill/dylovene/New()
+ ..()
+ reagents.add_reagent("anti_toxin", 15)
+
/obj/item/weapon/reagent_containers/pill/inaprovaline
name = "Inaprovaline pill"
desc = "Used to stabilize patients."
icon_state = "pill20"
- New()
- ..()
- reagents.add_reagent("inaprovaline", 30)
+
+/obj/item/weapon/reagent_containers/pill/inaprovaline/New()
+ ..()
+ reagents.add_reagent("inaprovaline", 30)
+
/obj/item/weapon/reagent_containers/pill/bicaridine
name = "Bicaridine pill"
desc = "Used to treat physical injuries."
icon_state = "pill18"
- New()
- ..()
- reagents.add_reagent("bicaridine", 20)
+
+/obj/item/weapon/reagent_containers/pill/bicaridine/New()
+ ..()
+ reagents.add_reagent("bicaridine", 20)
+
/obj/item/weapon/reagent_containers/pill/happy
name = "Happy pill"
desc = "Happy happy joy joy!"
icon_state = "pill18"
- New()
- ..()
- reagents.add_reagent("space_drugs", 15)
- reagents.add_reagent("sugar", 15)
+
+/obj/item/weapon/reagent_containers/pill/happy/New()
+ ..()
+ reagents.add_reagent("space_drugs", 15)
+ reagents.add_reagent("sugar", 15)
+
/obj/item/weapon/reagent_containers/pill/zoom
name = "Zoom pill"
desc = "Zoooom!"
icon_state = "pill18"
- New()
- ..()
- reagents.add_reagent("impedrezene", 10)
- reagents.add_reagent("synaptizine", 5)
- reagents.add_reagent("hyperzine", 5)
+
+/obj/item/weapon/reagent_containers/pill/zoom/New()
+ ..()
+ reagents.add_reagent("impedrezene", 10)
+ reagents.add_reagent("synaptizine", 5)
+ reagents.add_reagent("hyperzine", 5)
+
/obj/item/weapon/reagent_containers/pill/spaceacillin
name = "Spaceacillin pill"
desc = "Contains antiviral agents."
icon_state = "pill19"
- New()
- ..()
- reagents.add_reagent("spaceacillin", 15)
+
+/obj/item/weapon/reagent_containers/pill/spaceacillin/New()
+ ..()
+ reagents.add_reagent("spaceacillin", 15)
+
+/obj/item/weapon/reagent_containers/pill/diet
+ name = "diet pill"
+ desc = "Guaranteed to get you slim!"
+ icon_state = "pill9"
+
+/obj/item/weapon/reagent_containers/pill/diet/New()
+ ..()
+ reagents.add_reagent("lipozine", 2)
\ No newline at end of file
diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm
index 741e9eccdd..87b5311be2 100644
--- a/code/modules/reagents/reagent_containers/syringes.dm
+++ b/code/modules/reagents/reagent_containers/syringes.dm
@@ -24,260 +24,267 @@
var/visible_name = "a syringe"
var/time = 30
- on_reagent_change()
- update_icon()
-
- pickup(mob/user)
- ..()
- update_icon()
-
- dropped(mob/user)
- ..()
- update_icon()
-
- attack_self(mob/user as mob)
-
- switch(mode)
- if(SYRINGE_DRAW)
- mode = SYRINGE_INJECT
- if(SYRINGE_INJECT)
- mode = SYRINGE_DRAW
- if(SYRINGE_BROKEN)
- return
- update_icon()
-
- attack_hand()
- ..()
- update_icon()
-
- attackby(obj/item/I as obj, mob/user as mob)
- return
-
- afterattack(obj/target, mob/user, proximity)
- if(!proximity || !target.reagents)
- return
-
- if(mode == SYRINGE_BROKEN)
- user << "This syringe is broken! "
- return
-
- if(user.a_intent == I_HURT && ismob(target))
- if((CLUMSY in user.mutations) && prob(50))
- target = user
- syringestab(target, user)
- return
-
-
- switch(mode)
- if(SYRINGE_DRAW)
-
- if(!reagents.get_free_space())
- user << "The syringe is full. "
- mode = SYRINGE_INJECT
- return
-
- if(ismob(target))//Blood!
- if(reagents.has_reagent("blood"))
- user << "There is already a blood sample in this syringe. "
- return
- if(istype(target, /mob/living/carbon))
- if(istype(target, /mob/living/carbon/slime))
- user << "You are unable to locate any blood. "
- return
- var/amount = reagents.get_free_space()
- var/mob/living/carbon/T = target
- if(!T.dna)
- user << "You are unable to locate any blood. (To be specific, your target seems to be missing their DNA datum). "
- return
- if(NOCLONE in T.mutations) //target done been et, no more blood in him
- user << "You are unable to locate any blood. "
- return
-
- var/datum/reagent/B
- if(istype(T, /mob/living/carbon/human))
- var/mob/living/carbon/human/H = T
- if(H.species && !H.should_have_organ(O_HEART))
- H.reagents.trans_to_obj(src, amount)
- else
- B = T.take_blood(src, amount)
- else
- B = T.take_blood(src,amount)
-
- if (B)
- reagents.reagent_list += B
- reagents.update_total()
- on_reagent_change()
- reagents.handle_reactions()
- user << "You take a blood sample from [target]. "
- for(var/mob/O in viewers(4, user))
- O.show_message("[user] takes a blood sample from [target]. ", 1)
-
- else //if not mob
- if(!target.reagents.total_volume)
- user << "[target] is empty. "
- return
-
- if(!target.is_open_container() && !istype(target, /obj/structure/reagent_dispensers) && !istype(target, /obj/item/slime_extract))
- user << "You cannot directly remove reagents from this object. "
- return
-
- var/trans = target.reagents.trans_to_obj(src, amount_per_transfer_from_this)
- user << "You fill the syringe with [trans] units of the solution. "
- update_icon()
-
- if(!reagents.get_free_space())
- mode = SYRINGE_INJECT
- update_icon()
-
- if(SYRINGE_INJECT)
- if(!reagents.total_volume)
- user << "The syringe is empty. "
- mode = SYRINGE_DRAW
- return
- if(istype(target, /obj/item/weapon/implantcase/chem))
- return
-
- if(!target.is_open_container() && !ismob(target) && !istype(target, /obj/item/weapon/reagent_containers/food) && !istype(target, /obj/item/slime_extract) && !istype(target, /obj/item/clothing/mask/smokable/cigarette) && !istype(target, /obj/item/weapon/storage/fancy/cigarettes))
- user << "You cannot directly fill this object. "
- return
- if(!target.reagents.get_free_space())
- user << "[target] is full. "
- return
-
- var/mob/living/carbon/human/H = target
- if(istype(H))
- var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting)
- if(!affected)
- user << "\The [H] is missing that limb! "
- return
- else if(affected.status & ORGAN_ROBOT)
- user << "You cannot inject a robotic limb. "
- return
-
- if(ismob(target) && target != user)
-
- var/injtime = time //Injecting through a hardsuit takes longer due to needing to find a port.
-
- if(istype(H))
- if(H.wear_suit)
- if(istype(H.wear_suit, /obj/item/clothing/suit/space))
- injtime = injtime * 2
- else if(!H.can_inject(user, 1))
- return
-
- else if(isliving(target))
-
- var/mob/living/M = target
- if(!M.can_inject(user, 1))
- return
-
- if(injtime == time)
- user.visible_message("[user] is trying to inject [target] with [visible_name]! ")
- else
- user.visible_message("[user] begins hunting for an injection port on [target]'s suit! ")
-
- if(!do_mob(user, target, injtime))
- return
-
- user.visible_message("[user] injects [target] with the syringe! ")
-
- var/trans
- if(ismob(target))
- var/contained = reagentlist()
- trans = reagents.trans_to_mob(target, amount_per_transfer_from_this, CHEM_BLOOD)
- admin_inject_log(user, target, src, contained, trans)
- else
- trans = reagents.trans_to(target, amount_per_transfer_from_this)
- user << "You inject [trans] units of the solution. The syringe now contains [src.reagents.total_volume] units. "
- if (reagents.total_volume <= 0 && mode == SYRINGE_INJECT)
- mode = SYRINGE_DRAW
- update_icon()
-
- return
-
+/obj/item/weapon/reagent_containers/syringe/on_reagent_change()
update_icon()
- overlays.Cut()
- if(mode == SYRINGE_BROKEN)
- icon_state = "broken"
+/obj/item/weapon/reagent_containers/syringe/pickup(mob/user)
+ ..()
+ update_icon()
+
+/obj/item/weapon/reagent_containers/syringe/dropped(mob/user)
+ ..()
+ update_icon()
+
+/obj/item/weapon/reagent_containers/syringe/attack_self(mob/user as mob)
+ switch(mode)
+ if(SYRINGE_DRAW)
+ mode = SYRINGE_INJECT
+ if(SYRINGE_INJECT)
+ mode = SYRINGE_DRAW
+ if(SYRINGE_BROKEN)
return
+ update_icon()
- var/rounded_vol = round(reagents.total_volume, round(reagents.maximum_volume / 3))
- if(ismob(loc))
- var/injoverlay
- switch(mode)
- if (SYRINGE_DRAW)
- injoverlay = "draw"
- if (SYRINGE_INJECT)
- injoverlay = "inject"
- overlays += injoverlay
- icon_state = "[rounded_vol]"
- item_state = "syringe_[rounded_vol]"
+/obj/item/weapon/reagent_containers/syringe/attack_hand()
+ ..()
+ update_icon()
- if(reagents.total_volume)
- filling = image('icons/obj/reagentfillings.dmi', src, "syringe10")
+/obj/item/weapon/reagent_containers/syringe/attackby(obj/item/I as obj, mob/user as mob)
+ return
- filling.icon_state = "syringe[rounded_vol]"
+/obj/item/weapon/reagent_containers/syringe/do_surgery(mob/living/carbon/M, mob/living/user)
+ if(user.a_intent == I_HURT)
+ return 0
+ if(user.a_intent != I_HELP) //in case it is ever used as a surgery tool
+ return ..()
+ afterattack(M, user, 1)
+ return 1
- filling.color = reagents.get_color()
- overlays += filling
+/obj/item/weapon/reagent_containers/syringe/afterattack(obj/target, mob/user, proximity)
+ if(!proximity || !target.reagents)
+ return
- proc/syringestab(mob/living/carbon/target as mob, mob/living/carbon/user as mob)
+ if(mode == SYRINGE_BROKEN)
+ user << "This syringe is broken! "
+ return
- if(istype(target, /mob/living/carbon/human))
+ if(user.a_intent == I_HURT && ismob(target))
+ if((CLUMSY in user.mutations) && prob(50))
+ target = user
+ syringestab(target, user)
+ return
+
+ switch(mode)
+ if(SYRINGE_DRAW)
+
+ if(!reagents.get_free_space())
+ user << "The syringe is full. "
+ mode = SYRINGE_INJECT
+ return
+
+ if(ismob(target))//Blood!
+ if(reagents.has_reagent("blood"))
+ user << "There is already a blood sample in this syringe. "
+ return
+ if(istype(target, /mob/living/carbon))
+ if(istype(target, /mob/living/carbon/slime))
+ user << "You are unable to locate any blood. "
+ return
+ var/amount = reagents.get_free_space()
+ var/mob/living/carbon/T = target
+ if(!T.dna)
+ user << "You are unable to locate any blood. (To be specific, your target seems to be missing their DNA datum). "
+ return
+ if(NOCLONE in T.mutations) //target done been et, no more blood in him
+ user << "You are unable to locate any blood. "
+ return
+
+ var/datum/reagent/B
+ if(istype(T, /mob/living/carbon/human))
+ var/mob/living/carbon/human/H = T
+ if(H.species && !H.should_have_organ(O_HEART))
+ H.reagents.trans_to_obj(src, amount)
+ else
+ B = T.take_blood(src, amount)
+ else
+ B = T.take_blood(src,amount)
+
+ if (B)
+ reagents.reagent_list += B
+ reagents.update_total()
+ on_reagent_change()
+ reagents.handle_reactions()
+ user << "You take a blood sample from [target]. "
+ for(var/mob/O in viewers(4, user))
+ O.show_message("[user] takes a blood sample from [target]. ", 1)
+
+ else //if not mob
+ if(!target.reagents.total_volume)
+ user << "[target] is empty. "
+ return
+
+ if(!target.is_open_container() && !istype(target, /obj/structure/reagent_dispensers) && !istype(target, /obj/item/slime_extract))
+ user << "You cannot directly remove reagents from this object. "
+ return
+
+ var/trans = target.reagents.trans_to_obj(src, amount_per_transfer_from_this)
+ user << "You fill the syringe with [trans] units of the solution. "
+ update_icon()
+
+ if(!reagents.get_free_space())
+ mode = SYRINGE_INJECT
+ update_icon()
+
+ if(SYRINGE_INJECT)
+ if(!reagents.total_volume)
+ user << "The syringe is empty. "
+ mode = SYRINGE_DRAW
+ return
+ if(istype(target, /obj/item/weapon/implantcase/chem))
+ return
+
+ if(!target.is_open_container() && !ismob(target) && !istype(target, /obj/item/weapon/reagent_containers/food) && !istype(target, /obj/item/slime_extract) && !istype(target, /obj/item/clothing/mask/smokable/cigarette) && !istype(target, /obj/item/weapon/storage/fancy/cigarettes))
+ user << "You cannot directly fill this object. "
+ return
+ if(!target.reagents.get_free_space())
+ user << "[target] is full. "
+ return
var/mob/living/carbon/human/H = target
+ if(istype(H))
+ var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting)
+ if(!affected)
+ user << "\The [H] is missing that limb! "
+ return
+ else if(affected.robotic >= ORGAN_ROBOT)
+ user << "You cannot inject a robotic limb. "
+ return
- var/target_zone = ran_zone(check_zone(user.zone_sel.selecting, target))
- var/obj/item/organ/external/affecting = H.get_organ(target_zone)
+ if(ismob(target) && target != user)
- if (!affecting || affecting.is_stump())
- user << "They are missing that limb! "
- return
+ var/injtime = time //Injecting through a hardsuit takes longer due to needing to find a port.
- var/hit_area = affecting.name
+ if(istype(H))
+ if(H.wear_suit)
+ if(istype(H.wear_suit, /obj/item/clothing/suit/space))
+ injtime = injtime * 2
+ else if(!H.can_inject(user, 1))
+ return
- if((user != target) && H.check_shields(7, src, user, "\the [src]"))
- return
+ else if(isliving(target))
- if (target != user && H.getarmor(target_zone, "melee") > 5 && prob(50))
- for(var/mob/O in viewers(world.view, user))
- O.show_message(text("\red [user] tries to stab [target] in \the [hit_area] with [src.name], but the attack is deflected by armor! "), 1)
- user.remove_from_mob(src)
- qdel(src)
+ var/mob/living/M = target
+ if(!M.can_inject(user, 1))
+ return
- user.attack_log += "\[[time_stamp()]\] Attacked [target.name] ([target.ckey]) with \the [src] (INTENT: HARM). "
- target.attack_log += "\[[time_stamp()]\] Attacked by [user.name] ([user.ckey]) with [src.name] (INTENT: HARM). "
- msg_admin_attack("[key_name_admin(user)] attacked [key_name_admin(target)] with [src.name] (INTENT: HARM) (JMP )")
+ if(injtime == time)
+ user.visible_message("[user] is trying to inject [target] with [visible_name]! ")
+ else
+ user.visible_message("[user] begins hunting for an injection port on [target]'s suit! ")
- return
+ user.setClickCooldown(DEFAULT_QUICK_COOLDOWN)
- user.visible_message("[user] stabs [target] in \the [hit_area] with [src.name]! ")
+ if(!do_mob(user, target, injtime))
+ return
- if(affecting.take_damage(3))
- H.UpdateDamageIcon()
+ user.visible_message("[user] injects [target] with the syringe! ")
- else
- user.visible_message("[user] stabs [target] with [src.name]! ")
- target.take_organ_damage(3)// 7 is the same as crowbar punch
+ var/trans
+ if(ismob(target))
+ var/contained = reagentlist()
+ trans = reagents.trans_to_mob(target, amount_per_transfer_from_this, CHEM_BLOOD)
+ admin_inject_log(user, target, src, contained, trans)
+ else
+ trans = reagents.trans_to(target, amount_per_transfer_from_this)
+ user << "You inject [trans] units of the solution. The syringe now contains [src.reagents.total_volume] units. "
+ if (reagents.total_volume <= 0 && mode == SYRINGE_INJECT)
+ mode = SYRINGE_DRAW
+ update_icon()
+
+ return
+
+/obj/item/weapon/reagent_containers/syringe/update_icon()
+ overlays.Cut()
+
+ if(mode == SYRINGE_BROKEN)
+ icon_state = "broken"
+ return
+
+ var/rounded_vol = round(reagents.total_volume, round(reagents.maximum_volume / 3))
+ if(ismob(loc))
+ var/injoverlay
+ switch(mode)
+ if (SYRINGE_DRAW)
+ injoverlay = "draw"
+ if (SYRINGE_INJECT)
+ injoverlay = "inject"
+ overlays += injoverlay
+ icon_state = "[rounded_vol]"
+ item_state = "syringe_[rounded_vol]"
+
+ if(reagents.total_volume)
+ filling = image('icons/obj/reagentfillings.dmi', src, "syringe10")
+
+ filling.icon_state = "syringe[rounded_vol]"
+
+ filling.color = reagents.get_color()
+ overlays += filling
+
+/obj/item/weapon/reagent_containers/syringe/proc/syringestab(mob/living/carbon/target as mob, mob/living/carbon/user as mob)
+ if(istype(target, /mob/living/carbon/human))
+
+ var/mob/living/carbon/human/H = target
+
+ var/target_zone = ran_zone(check_zone(user.zone_sel.selecting, target))
+ var/obj/item/organ/external/affecting = H.get_organ(target_zone)
+
+ if (!affecting || affecting.is_stump())
+ user << "They are missing that limb! "
+ return
+
+ var/hit_area = affecting.name
+
+ if((user != target) && H.check_shields(7, src, user, "\the [src]"))
+ return
+
+ if (target != user && H.getarmor(target_zone, "melee") > 5 && prob(50))
+ for(var/mob/O in viewers(world.view, user))
+ O.show_message(text("\red [user] tries to stab [target] in \the [hit_area] with [src.name], but the attack is deflected by armor! "), 1)
+ user.remove_from_mob(src)
+ qdel(src)
+
+ user.attack_log += "\[[time_stamp()]\] Attacked [target.name] ([target.ckey]) with \the [src] (INTENT: HARM). "
+ target.attack_log += "\[[time_stamp()]\] Attacked by [user.name] ([user.ckey]) with [src.name] (INTENT: HARM). "
+ msg_admin_attack("[key_name_admin(user)] attacked [key_name_admin(target)] with [src.name] (INTENT: HARM) (JMP )")
+
+ return
+
+ user.visible_message("[user] stabs [target] in \the [hit_area] with [src.name]! ")
+
+ if(affecting.take_damage(3))
+ H.UpdateDamageIcon()
+
+ else
+ user.visible_message("[user] stabs [target] with [src.name]! ")
+ target.take_organ_damage(3)// 7 is the same as crowbar punch
- var/syringestab_amount_transferred = rand(0, (reagents.total_volume - 5)) //nerfed by popular demand
- var/contained_reagents = reagents.get_reagents()
- var/trans = reagents.trans_to_mob(target, syringestab_amount_transferred, CHEM_BLOOD)
- if(isnull(trans)) trans = 0
- admin_inject_log(user, target, src, contained_reagents, trans, violent=1)
- break_syringe(target, user)
+ var/syringestab_amount_transferred = rand(0, (reagents.total_volume - 5)) //nerfed by popular demand
+ var/contained_reagents = reagents.get_reagents()
+ var/trans = reagents.trans_to_mob(target, syringestab_amount_transferred, CHEM_BLOOD)
+ if(isnull(trans)) trans = 0
+ admin_inject_log(user, target, src, contained_reagents, trans, violent=1)
+ break_syringe(target, user)
- proc/break_syringe(mob/living/carbon/target, mob/living/carbon/user)
- desc += " It is broken."
- mode = SYRINGE_BROKEN
- if(target)
- add_blood(target)
- if(user)
- add_fingerprint(user)
- update_icon()
+/obj/item/weapon/reagent_containers/syringe/proc/break_syringe(mob/living/carbon/target, mob/living/carbon/user)
+ desc += " It is broken."
+ mode = SYRINGE_BROKEN
+ if(target)
+ add_blood(target)
+ if(user)
+ add_fingerprint(user)
+ update_icon()
/obj/item/weapon/reagent_containers/syringe/ld50_syringe
name = "Lethal Injection Syringe"
@@ -287,13 +294,13 @@
visible_name = "a giant syringe"
time = 300
- afterattack(obj/target, mob/user, flag)
- if(mode == SYRINGE_DRAW && ismob(target)) // No drawing 50 units of blood at once
- user << "This needle isn't designed for drawing blood. "
- return
- if(user.a_intent == "hurt" && ismob(target)) // No instant injecting
- user << "This syringe is too big to stab someone with it. "
- ..()
+/obj/item/weapon/reagent_containers/syringe/ld50_syringe/afterattack(obj/target, mob/user, flag)
+ if(mode == SYRINGE_DRAW && ismob(target)) // No drawing 50 units of blood at once
+ user << "This needle isn't designed for drawing blood. "
+ return
+ if(user.a_intent == "hurt" && ismob(target)) // No instant injecting
+ user << "This syringe is too big to stab someone with it. "
+ ..()
////////////////////////////////////////////////////////////////////////////////
/// Syringes. END
@@ -302,44 +309,56 @@
/obj/item/weapon/reagent_containers/syringe/inaprovaline
name = "Syringe (inaprovaline)"
desc = "Contains inaprovaline - used to stabilize patients."
- New()
- ..()
- reagents.add_reagent("inaprovaline", 15)
- mode = SYRINGE_INJECT
- update_icon()
+
+/obj/item/weapon/reagent_containers/syringe/inaprovaline/New()
+ ..()
+ reagents.add_reagent("inaprovaline", 15)
+ mode = SYRINGE_INJECT
+ update_icon()
/obj/item/weapon/reagent_containers/syringe/antitoxin
name = "Syringe (anti-toxin)"
desc = "Contains anti-toxins."
- New()
- ..()
- reagents.add_reagent("anti_toxin", 15)
- mode = SYRINGE_INJECT
- update_icon()
+
+/obj/item/weapon/reagent_containers/syringe/antitoxin/New()
+ ..()
+ reagents.add_reagent("anti_toxin", 15)
+ mode = SYRINGE_INJECT
+ update_icon()
/obj/item/weapon/reagent_containers/syringe/antiviral
name = "Syringe (spaceacillin)"
desc = "Contains antiviral agents."
- New()
- ..()
- reagents.add_reagent("spaceacillin", 15)
- mode = SYRINGE_INJECT
- update_icon()
+
+/obj/item/weapon/reagent_containers/syringe/antiviral/New()
+ ..()
+ reagents.add_reagent("spaceacillin", 15)
+ mode = SYRINGE_INJECT
+ update_icon()
/obj/item/weapon/reagent_containers/syringe/drugs
name = "Syringe (drugs)"
desc = "Contains aggressive drugs meant for torture."
- New()
- ..()
- reagents.add_reagent("space_drugs", 5)
- reagents.add_reagent("mindbreaker", 5)
- reagents.add_reagent("cryptobiolin", 5)
- mode = SYRINGE_INJECT
- update_icon()
-/obj/item/weapon/reagent_containers/syringe/ld50_syringe/choral
- New()
- ..()
- reagents.add_reagent("chloralhydrate", 50)
- mode = SYRINGE_INJECT
- update_icon()
+/obj/item/weapon/reagent_containers/syringe/drugs/New()
+ ..()
+ reagents.add_reagent("space_drugs", 5)
+ reagents.add_reagent("mindbreaker", 5)
+ reagents.add_reagent("cryptobiolin", 5)
+ mode = SYRINGE_INJECT
+ update_icon()
+
+/obj/item/weapon/reagent_containers/syringe/ld50_syringe/choral/New()
+ ..()
+ reagents.add_reagent("chloralhydrate", 50)
+ mode = SYRINGE_INJECT
+ update_icon()
+
+/obj/item/weapon/reagent_containers/syringe/steroid
+ name = "Syringe (anabolic steroids)"
+ desc = "Contains drugs for muscle growth."
+
+/obj/item/weapon/reagent_containers/syringe/steroid/New()
+ ..()
+ reagents.add_reagent("adrenaline",5)
+ reagents.add_reagent("hyperzine",10)
diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm
index d68be94b9b..495a248c53 100644
--- a/code/modules/reagents/reagent_dispenser.dm
+++ b/code/modules/reagents/reagent_dispenser.dm
@@ -68,7 +68,7 @@
//Dispensers
/obj/structure/reagent_dispensers/watertank
name = "watertank"
- desc = "A watertank"
+ desc = "A watertank."
icon = 'icons/obj/objects.dmi'
icon_state = "watertank"
amount_per_transfer_from_this = 10
@@ -78,7 +78,7 @@
/obj/structure/reagent_dispensers/fueltank
name = "fueltank"
- desc = "A fueltank"
+ desc = "A fueltank."
icon = 'icons/obj/objects.dmi'
icon_state = "weldtank"
amount_per_transfer_from_this = 10
@@ -183,7 +183,7 @@
/obj/structure/reagent_dispensers/peppertank
name = "Pepper Spray Refiller"
- desc = "Refill pepper spray canisters."
+ desc = "Refills pepper spray canisters."
icon = 'icons/obj/objects.dmi'
icon_state = "peppertank"
anchored = 1
@@ -202,10 +202,69 @@
icon_state = "water_cooler"
possible_transfer_amounts = null
anchored = 1
- New()
- ..()
- reagents.add_reagent("water",500)
+ var/bottle = 0
+/obj/structure/reagent_dispensers/water_cooler/New()
+ if(bottle == 1)
+ ..()
+ reagents.add_reagent("water",120)
+ else
+ icon_state = "water_cooler_0"
+
+/obj/structure/reagent_dispensers/water_cooler/attackby(obj/item/I as obj, mob/user as mob)
+ if(istype(I, /obj/item/weapon/wrench))
+ src.add_fingerprint(user)
+ if(bottle)
+ playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
+ if(do_after(user, 20))
+ user << "You unfasten the jug. "
+ var/obj/item/weapon/reagent_containers/glass/cooler_bottle/G = new /obj/item/weapon/reagent_containers/glass/cooler_bottle( src.loc )
+ for(var/datum/reagent/R in reagents.reagent_list)
+ var/total_reagent = reagents.get_reagent_amount(R.id)
+ G.reagents.add_reagent(R.id, total_reagent)
+ reagents.clear_reagents()
+ bottle = 0
+ icon_state = "water_cooler_0"
+ else
+ if(anchored)
+ user.visible_message("\The [user] begins unsecuring \the [src] from the floor.", "You start unsecuring \the [src] from the floor.")
+ else
+ user.visible_message("\The [user] begins securing \the [src] to the floor.", "You start securing \the [src] to the floor.")
+ if(do_after(user, 20, src))
+ if(!src) return
+ user << "You [anchored? "un" : ""]secured \the [src]! "
+ anchored = !anchored
+ return
+
+ if(istype(I, /obj/item/weapon/screwdriver))
+ if(!bottle)
+ playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
+ user << "You take the water-cooler apart. "
+ new /obj/item/stack/material/plastic( src.loc, 4 )
+ qdel(src)
+ return
+
+ if(istype(I, /obj/item/weapon/reagent_containers/glass/cooler_bottle))
+ src.add_fingerprint(user)
+ if(!bottle)
+ if(anchored)
+ var/obj/item/weapon/reagent_containers/glass/cooler_bottle/G = I
+ user << "You start to screw the bottle onto the water-cooler. "
+ if(do_after(user, 20))
+ bottle = 1
+ icon_state = "water_cooler"
+ user << "You screw the bottle onto the water-cooler but accidently spill some! " //you spill some because it for somereason transfers 5 units to the bottle after it gets attached but before it's deleted...
+ for(var/datum/reagent/R in G.reagents.reagent_list)
+ var/total_reagent = G.reagents.get_reagent_amount(R.id)
+ reagents.add_reagent(R.id, total_reagent)
+ qdel(G)
+ else
+ user << "You need to wrench down the cooler first. "
+ else
+ user << "There is already a bottle there! "
+ return
+ else
+ return ..()
/obj/structure/reagent_dispensers/beerkeg
name = "beer keg"
@@ -225,7 +284,7 @@
/obj/structure/reagent_dispensers/virusfood
name = "Virus Food Dispenser"
- desc = "A dispenser of virus food."
+ desc = "A dispenser of virus food. Yum."
icon = 'icons/obj/objects.dmi'
icon_state = "virusfoodtank"
amount_per_transfer_from_this = 10
diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm
index 957c3b574d..6296a8b951 100644
--- a/code/modules/recycling/conveyor2.dm
+++ b/code/modules/recycling/conveyor2.dm
@@ -8,6 +8,7 @@
desc = "A conveyor belt."
layer = 2 // so they appear under stuff
anchored = 1
+ circuit = /obj/item/weapon/circuitboard/conveyor
var/operating = 0 // 1 if running forward, -1 if backwards, 0 if off
var/operable = 1 // true if can operate (no broken segments in this belt run)
var/forwards // this is the default (forward) direction, set by the map dir
@@ -37,6 +38,15 @@
operating = 1
setmove()
+ circuit = new circuit(src)
+ component_parts = list()
+ component_parts += new /obj/item/weapon/stock_parts/gear(src)
+ component_parts += new /obj/item/weapon/stock_parts/motor(src)
+ component_parts += new /obj/item/weapon/stock_parts/gear(src)
+ component_parts += new /obj/item/weapon/stock_parts/motor(src)
+ component_parts += new /obj/item/stack/cable_coil(src,5)
+ RefreshParts()
+
/obj/machinery/conveyor/proc/setmove()
if(operating == 1)
movedir = forwards
@@ -81,6 +91,23 @@
if(isrobot(user)) return //Carn: fix for borgs dropping their modules on conveyor belts
if(I.loc != user) return // This should stop mounted modules ending up outside the module.
+ if(default_deconstruction_screwdriver(user, I))
+ return
+ if(default_deconstruction_crowbar(user, I))
+ return
+
+ if(istype(I, /obj/item/device/multitool))
+ if(panel_open)
+ var/input = sanitize(input(usr, "What id would you like to give this conveyor?", "Multitool-Conveyor interface", id))
+ if(!input)
+ usr << "No input found please hang up and try your call again."
+ return
+ id = input
+ for(var/obj/machinery/conveyor_switch/C in world)
+ if(C.id == id)
+ C.conveyors += src
+ return
+
user.drop_item(get_turf(src))
return
@@ -221,6 +248,36 @@
S.position = position
S.update()
+/obj/machinery/conveyor_switch/attackby(var/obj/item/I, mob/user)
+ if(default_deconstruction_screwdriver(user, I))
+ return
+
+ if(istype(I, /obj/item/weapon/weldingtool))
+ if(panel_open)
+ var/obj/item/weapon/weldingtool/WT = I
+ if(!WT.remove_fuel(0, user))
+ user << "The welding tool must be on to complete this task."
+ return
+ playsound(src.loc, 'sound/items/Welder.ogg', 50, 1)
+ if(do_after(user, 20))
+ if(!src || !WT.isOn()) return
+ user << "You deconstruct the frame. "
+ new /obj/item/stack/material/steel( src.loc, 2 )
+ qdel(src)
+ return
+
+ if(istype(I, /obj/item/device/multitool))
+ if(panel_open)
+ var/input = sanitize(input(usr, "What id would you like to give this conveyor switch?", "Multitool-Conveyor interface", id))
+ if(!input)
+ usr << "No input found please hang up and try your call again."
+ return
+ id = input
+ for(var/obj/machinery/conveyor/C in world)
+ if(C.id == id)
+ conveyors += C
+ return
+
/obj/machinery/conveyor_switch/oneway
var/convdir = 1 //Set to 1 or -1 depending on which way you want the convayor to go. (In other words keep at 1 and set the proper dir on the belts.)
desc = "A conveyor control switch. It appears to only go in one direction."
diff --git a/code/modules/research/circuitprinter.dm b/code/modules/research/circuitprinter.dm
index 0e3858e662..e444bcb8c1 100644
--- a/code/modules/research/circuitprinter.dm
+++ b/code/modules/research/circuitprinter.dm
@@ -8,6 +8,7 @@ using metal and glass, it uses glass and reagents (usually sulphuric acid).
name = "Circuit Imprinter"
icon_state = "circuit_imprinter"
flags = OPENCONTAINER
+ circuit = /obj/item/weapon/circuitboard/circuit_imprinter
var/list/datum/design/queue = list()
var/progress = 0
@@ -23,8 +24,8 @@ using metal and glass, it uses glass and reagents (usually sulphuric acid).
/obj/machinery/r_n_d/circuit_imprinter/New()
..()
+ circuit = new circuit()
component_parts = list()
- component_parts += new /obj/item/weapon/circuitboard/circuit_imprinter(src)
component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(src)
diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm
index 05b8a82f2f..c0ecdbfc3d 100644
--- a/code/modules/research/designs.dm
+++ b/code/modules/research/designs.dm
@@ -510,7 +510,8 @@ other types of metals and chemistry for reagents).
/datum/design/item/weapon/decloner
id = "decloner"
req_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 7, TECH_BIO = 5, TECH_POWER = 6)
- materials = list("gold" = 5000,"uranium" = 10000, "mutagen" = 40)
+ materials = list("gold" = 5000,"uranium" = 10000)
+ chemicals = list("mutagen" = 40)
build_path = /obj/item/weapon/gun/energy/decloner
sort_string = "TAAAE"
@@ -651,7 +652,7 @@ other types of metals and chemistry for reagents).
name = "Positronic brain"
id = "posibrain"
req_tech = list(TECH_ENGINEERING = 4, TECH_MATERIAL = 6, TECH_BLUESPACE = 2, TECH_DATA = 4)
- build_type = PROTOLATHE | MECHFAB
+ build_type = PROTOLATHE | PROSFAB
materials = list(DEFAULT_WALL_MATERIAL = 2000, "glass" = 1000, "silver" = 1000, "gold" = 500, "phoron" = 500, "diamond" = 100)
build_path = /obj/item/device/mmi/digital/posibrain
category = "Misc"
@@ -661,7 +662,7 @@ other types of metals and chemistry for reagents).
name = "Man-machine interface"
id = "mmi"
req_tech = list(TECH_DATA = 2, TECH_BIO = 3)
- build_type = PROTOLATHE | MECHFAB
+ build_type = PROTOLATHE | PROSFAB
materials = list(DEFAULT_WALL_MATERIAL = 1000, "glass" = 500)
build_path = /obj/item/device/mmi
category = "Misc"
@@ -671,7 +672,7 @@ other types of metals and chemistry for reagents).
name = "Radio-enabled man-machine interface"
id = "mmi_radio"
req_tech = list(TECH_DATA = 2, TECH_BIO = 4)
- build_type = PROTOLATHE | MECHFAB
+ build_type = PROTOLATHE | PROSFAB
materials = list(DEFAULT_WALL_MATERIAL = 1200, "glass" = 500)
build_path = /obj/item/device/mmi/radio_enabled
category = "Misc"
@@ -726,17 +727,13 @@ CIRCUITS BELOW
/datum/design/circuit/AssembleDesignName()
..()
if(build_path)
- var/obj/item/weapon/circuitboard/C = new build_path()
- if(C && istype(C))
- if(C.board_type == "machine")
- name = "Machine circuit design ([item_name])"
- qdel(C)
- return
- else if(C.board_type == "computer")
- name = "Computer circuit design ([item_name])"
- qdel(C)
- return
- name = "Circuit design ([item_name])"
+ var/obj/item/weapon/circuitboard/C = build_path
+ if(initial(C.board_type) == "machine")
+ name = "Machine circuit design ([item_name])"
+ else if(initial(C.board_type) == "computer")
+ name = "Computer circuit design ([item_name])"
+ else
+ name = "Circuit design ([item_name])"
/datum/design/circuit/AssembleDesignDesc()
if(!desc)
@@ -756,6 +753,13 @@ CIRCUITS BELOW
build_path = /obj/item/weapon/circuitboard/arcade/orion_trail
sort_string = "MAAAA"
+/datum/design/circuit/jukebox
+ name = "jukebox"
+ id = "jukebox"
+ req_tech = list(TECH_MAGNET = 2, TECH_DATA = 1)
+ build_path = /obj/item/weapon/circuitboard/jukebox
+ sort_string = "MAAAB"
+
/datum/design/circuit/seccamera
name = "security camera monitor"
id = "seccamera"
@@ -939,6 +943,13 @@ CIRCUITS BELOW
build_path = /obj/item/weapon/circuitboard/mechfab
sort_string = "HABAE"
+/datum/design/circuit/prosfab
+ name = "prosthetics fabricator"
+ id = "prosfab"
+ req_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 3)
+ build_path = /obj/item/weapon/circuitboard/prosthetics
+ sort_string = "HABAF"
+
/datum/design/circuit/mech_recharger
name = "mech recharger"
id = "mech_recharger"
diff --git a/code/modules/research/destructive_analyzer.dm b/code/modules/research/destructive_analyzer.dm
index c6cbff2496..686a273023 100644
--- a/code/modules/research/destructive_analyzer.dm
+++ b/code/modules/research/destructive_analyzer.dm
@@ -9,17 +9,17 @@ Note: Must be placed within 3 tiles of the R&D Console
/obj/machinery/r_n_d/destructive_analyzer
name = "destructive analyzer"
icon_state = "d_analyzer"
- var/obj/item/weapon/loaded_item = null
- var/decon_mod = 0
-
+ var/obj/item/weapon/loaded_item = null
+ var/decon_mod = 0
+ circuit = /obj/item/weapon/circuitboard/destructive_analyzer
use_power = 1
idle_power_usage = 30
active_power_usage = 2500
/obj/machinery/r_n_d/destructive_analyzer/New()
..()
+ circuit = new circuit()
component_parts = list()
- component_parts += new /obj/item/weapon/circuitboard/destructive_analyzer(src)
component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
component_parts += new /obj/item/weapon/stock_parts/micro_laser(src)
@@ -39,7 +39,7 @@ Note: Must be placed within 3 tiles of the R&D Console
else
icon_state = "d_analyzer"
-/obj/machinery/r_n_d/destructive_analyzer/attackby(var/obj/O as obj, var/mob/user as mob)
+/obj/machinery/r_n_d/destructive_analyzer/attackby(var/obj/item/O as obj, var/mob/user as mob)
if(busy)
user << "\The [src] is busy right now. "
return
@@ -61,7 +61,7 @@ Note: Must be placed within 3 tiles of the R&D Console
if(!linked_console)
user << "\The [src] must be linked to an R&D console first. "
return
- if(istype(O, /obj/item) && !loaded_item)
+ if(!loaded_item)
if(isrobot(user)) //Don't put your module items in there!
return
if(!O.origin_tech)
diff --git a/code/modules/research/mechfab_designs.dm b/code/modules/research/mechfab_designs.dm
index f10e3ae472..7ebdc5fbb6 100644
--- a/code/modules/research/mechfab_designs.dm
+++ b/code/modules/research/mechfab_designs.dm
@@ -1,101 +1,8 @@
/datum/design/item/mechfab
build_type = MECHFAB
- category = "Misc"
+ category = "Other"
req_tech = list(TECH_MATERIAL = 1)
-/datum/design/item/mechfab/robot
- category = "Robot"
-
-//if the fabricator is a mech fab pass the manufacturer info over to the robot part constructor
-/datum/design/item/mechfab/robot/Fabricate(var/newloc, var/fabricator)
- if(istype(fabricator, /obj/machinery/mecha_part_fabricator))
- var/obj/machinery/mecha_part_fabricator/mechfab = fabricator
- return new build_path(newloc, mechfab.manufacturer)
- return ..()
-
-/datum/design/item/mechfab/robot/exoskeleton
- name = "Robot exoskeleton"
- id = "robot_exoskeleton"
- build_path = /obj/item/robot_parts/robot_suit
- time = 50
- materials = list(DEFAULT_WALL_MATERIAL = 50000)
-
-/datum/design/item/mechfab/robot/torso
- name = "Robot torso"
- id = "robot_torso"
- build_path = /obj/item/robot_parts/chest
- time = 35
- materials = list(DEFAULT_WALL_MATERIAL = 40000)
-
-/datum/design/item/mechfab/robot/head
- name = "Robot head"
- id = "robot_head"
- build_path = /obj/item/robot_parts/head
- time = 35
- materials = list(DEFAULT_WALL_MATERIAL = 25000)
-
-/datum/design/item/mechfab/robot/l_arm
- name = "Robot left arm"
- id = "robot_l_arm"
- build_path = /obj/item/robot_parts/l_arm
- time = 20
- materials = list(DEFAULT_WALL_MATERIAL = 18000)
-
-/datum/design/item/mechfab/robot/r_arm
- name = "Robot right arm"
- id = "robot_r_arm"
- build_path = /obj/item/robot_parts/r_arm
- time = 20
- materials = list(DEFAULT_WALL_MATERIAL = 18000)
-
-/datum/design/item/mechfab/robot/l_leg
- name = "Robot left leg"
- id = "robot_l_leg"
- build_path = /obj/item/robot_parts/l_leg
- time = 20
- materials = list(DEFAULT_WALL_MATERIAL = 15000)
-
-/datum/design/item/mechfab/robot/r_leg
- name = "Robot right leg"
- id = "robot_r_leg"
- build_path = /obj/item/robot_parts/r_leg
- time = 20
- materials = list(DEFAULT_WALL_MATERIAL = 15000)
-
-/datum/design/item/mechfab/robot/component
- time = 20
- materials = list(DEFAULT_WALL_MATERIAL = 5000)
-
-/datum/design/item/mechfab/robot/component/binary_communication_device
- name = "Binary communication device"
- id = "binary_communication_device"
- build_path = /obj/item/robot_parts/robot_component/binary_communication_device
-
-/datum/design/item/mechfab/robot/component/radio
- name = "Radio"
- id = "radio"
- build_path = /obj/item/robot_parts/robot_component/radio
-
-/datum/design/item/mechfab/robot/component/actuator
- name = "Actuator"
- id = "actuator"
- build_path = /obj/item/robot_parts/robot_component/actuator
-
-/datum/design/item/mechfab/robot/component/diagnosis_unit
- name = "Diagnosis unit"
- id = "diagnosis_unit"
- build_path = /obj/item/robot_parts/robot_component/diagnosis_unit
-
-/datum/design/item/mechfab/robot/component/camera
- name = "Camera"
- id = "camera"
- build_path = /obj/item/robot_parts/robot_component/camera
-
-/datum/design/item/mechfab/robot/component/armour
- name = "Armour plating"
- id = "armour"
- build_path = /obj/item/robot_parts/robot_component/armour
-
/datum/design/item/mechfab/ripley
category = "Ripley"
@@ -104,7 +11,7 @@
id = "ripley_chassis"
build_path = /obj/item/mecha_parts/chassis/ripley
time = 10
- materials = list(DEFAULT_WALL_MATERIAL = 20000)
+ materials = list(DEFAULT_WALL_MATERIAL = 15000)
/datum/design/item/mechfab/ripley/chassis/firefighter
name = "Firefigher chassis"
@@ -116,35 +23,35 @@
id = "ripley_torso"
build_path = /obj/item/mecha_parts/part/ripley_torso
time = 20
- materials = list(DEFAULT_WALL_MATERIAL = 40000, "glass" = 15000)
+ materials = list(DEFAULT_WALL_MATERIAL = 30000, "glass" = 11250)
/datum/design/item/mechfab/ripley/left_arm
name = "Ripley left arm"
id = "ripley_left_arm"
build_path = /obj/item/mecha_parts/part/ripley_left_arm
time = 15
- materials = list(DEFAULT_WALL_MATERIAL = 25000)
+ materials = list(DEFAULT_WALL_MATERIAL = 18750)
/datum/design/item/mechfab/ripley/right_arm
name = "Ripley right arm"
id = "ripley_right_arm"
build_path = /obj/item/mecha_parts/part/ripley_right_arm
time = 15
- materials = list(DEFAULT_WALL_MATERIAL = 25000)
+ materials = list(DEFAULT_WALL_MATERIAL = 18750)
/datum/design/item/mechfab/ripley/left_leg
name = "Ripley left leg"
id = "ripley_left_leg"
build_path = /obj/item/mecha_parts/part/ripley_left_leg
time = 15
- materials = list(DEFAULT_WALL_MATERIAL = 30000)
+ materials = list(DEFAULT_WALL_MATERIAL = 22500)
/datum/design/item/mechfab/ripley/right_leg
name = "Ripley right leg"
id = "ripley_right_leg"
build_path = /obj/item/mecha_parts/part/ripley_right_leg
time = 15
- materials = list(DEFAULT_WALL_MATERIAL = 30000)
+ materials = list(DEFAULT_WALL_MATERIAL = 22500)
/datum/design/item/mechfab/odysseus
category = "Odysseus"
@@ -154,49 +61,49 @@
id = "odysseus_chassis"
build_path = /obj/item/mecha_parts/chassis/odysseus
time = 10
- materials = list(DEFAULT_WALL_MATERIAL = 20000)
+ materials = list(DEFAULT_WALL_MATERIAL = 15000)
/datum/design/item/mechfab/odysseus/torso
name = "Odysseus torso"
id = "odysseus_torso"
build_path = /obj/item/mecha_parts/part/odysseus_torso
time = 18
- materials = list(DEFAULT_WALL_MATERIAL = 25000)
+ materials = list(DEFAULT_WALL_MATERIAL = 18750)
/datum/design/item/mechfab/odysseus/head
name = "Odysseus head"
id = "odysseus_head"
build_path = /obj/item/mecha_parts/part/odysseus_head
time = 10
- materials = list(DEFAULT_WALL_MATERIAL = 2000, "glass" = 10000)
+ materials = list(DEFAULT_WALL_MATERIAL = 1500, "glass" = 7500)
/datum/design/item/mechfab/odysseus/left_arm
name = "Odysseus left arm"
id = "odysseus_left_arm"
build_path = /obj/item/mecha_parts/part/odysseus_left_arm
time = 12
- materials = list(DEFAULT_WALL_MATERIAL = 10000)
+ materials = list(DEFAULT_WALL_MATERIAL = 7500)
/datum/design/item/mechfab/odysseus/right_arm
name = "Odysseus right arm"
id = "odysseus_right_arm"
build_path = /obj/item/mecha_parts/part/odysseus_right_arm
time = 12
- materials = list(DEFAULT_WALL_MATERIAL = 10000)
+ materials = list(DEFAULT_WALL_MATERIAL = 7500)
/datum/design/item/mechfab/odysseus/left_leg
name = "Odysseus left leg"
id = "odysseus_left_leg"
build_path = /obj/item/mecha_parts/part/odysseus_left_leg
time = 13
- materials = list(DEFAULT_WALL_MATERIAL = 15000)
+ materials = list(DEFAULT_WALL_MATERIAL = 11250)
/datum/design/item/mechfab/odysseus/right_leg
name = "Odysseus right leg"
id = "odysseus_right_leg"
build_path = /obj/item/mecha_parts/part/odysseus_right_leg
time = 13
- materials = list(DEFAULT_WALL_MATERIAL = 15000)
+ materials = list(DEFAULT_WALL_MATERIAL = 11250)
/datum/design/item/mechfab/gygax
category = "Gygax"
@@ -206,56 +113,56 @@
id = "gygax_chassis"
build_path = /obj/item/mecha_parts/chassis/gygax
time = 10
- materials = list(DEFAULT_WALL_MATERIAL = 25000)
+ materials = list(DEFAULT_WALL_MATERIAL = 18750)
/datum/design/item/mechfab/gygax/torso
name = "Gygax torso"
id = "gygax_torso"
build_path = /obj/item/mecha_parts/part/gygax_torso
time = 30
- materials = list(DEFAULT_WALL_MATERIAL = 50000, "glass" = 20000)
+ materials = list(DEFAULT_WALL_MATERIAL = 37500, "glass" = 15000)
/datum/design/item/mechfab/gygax/head
name = "Gygax head"
id = "gygax_head"
build_path = /obj/item/mecha_parts/part/gygax_head
time = 20
- materials = list(DEFAULT_WALL_MATERIAL = 20000, "glass" = 10000)
+ materials = list(DEFAULT_WALL_MATERIAL = 15000, "glass" = 7500)
/datum/design/item/mechfab/gygax/left_arm
name = "Gygax left arm"
id = "gygax_left_arm"
build_path = /obj/item/mecha_parts/part/gygax_left_arm
time = 20
- materials = list(DEFAULT_WALL_MATERIAL = 30000)
+ materials = list(DEFAULT_WALL_MATERIAL = 22500)
/datum/design/item/mechfab/gygax/right_arm
name = "Gygax right arm"
id = "gygax_right_arm"
build_path = /obj/item/mecha_parts/part/gygax_right_arm
time = 20
- materials = list(DEFAULT_WALL_MATERIAL = 30000)
+ materials = list(DEFAULT_WALL_MATERIAL = 22500)
/datum/design/item/mechfab/gygax/left_leg
name = "Gygax left leg"
id = "gygax_left_leg"
build_path = /obj/item/mecha_parts/part/gygax_left_leg
time = 20
- materials = list(DEFAULT_WALL_MATERIAL = 35000)
+ materials = list(DEFAULT_WALL_MATERIAL = 26250)
/datum/design/item/mechfab/gygax/right_leg
name = "Gygax right leg"
id = "gygax_right_leg"
build_path = /obj/item/mecha_parts/part/gygax_right_leg
time = 20
- materials = list(DEFAULT_WALL_MATERIAL = 35000)
+ materials = list(DEFAULT_WALL_MATERIAL = 26250)
/datum/design/item/mechfab/gygax/armour
name = "Gygax armour plates"
id = "gygax_armour"
build_path = /obj/item/mecha_parts/part/gygax_armour
time = 60
- materials = list(DEFAULT_WALL_MATERIAL = 50000, "diamond" = 10000)
+ materials = list(DEFAULT_WALL_MATERIAL = 37500, "diamond" = 7500)
/datum/design/item/mechfab/durand
category = "Durand"
@@ -265,129 +172,74 @@
id = "durand_chassis"
build_path = /obj/item/mecha_parts/chassis/durand
time = 10
- materials = list(DEFAULT_WALL_MATERIAL = 25000)
+ materials = list(DEFAULT_WALL_MATERIAL = 18750)
/datum/design/item/mechfab/durand/torso
name = "Durand torso"
id = "durand_torso"
build_path = /obj/item/mecha_parts/part/durand_torso
time = 30
- materials = list(DEFAULT_WALL_MATERIAL = 55000, "glass" = 20000, "silver" = 10000)
+ materials = list(DEFAULT_WALL_MATERIAL = 41250, "glass" = 15000, "silver" = 7500)
/datum/design/item/mechfab/durand/head
name = "Durand head"
id = "durand_head"
build_path = /obj/item/mecha_parts/part/durand_head
time = 20
- materials = list(DEFAULT_WALL_MATERIAL = 25000, "glass" = 10000, "silver" = 3000)
+ materials = list(DEFAULT_WALL_MATERIAL = 18750, "glass" = 7500, "silver" = 2250)
/datum/design/item/mechfab/durand/left_arm
name = "Durand left arm"
id = "durand_left_arm"
build_path = /obj/item/mecha_parts/part/durand_left_arm
time = 20
- materials = list(DEFAULT_WALL_MATERIAL = 35000, "silver" = 3000)
+ materials = list(DEFAULT_WALL_MATERIAL = 26250, "silver" = 2250)
/datum/design/item/mechfab/durand/right_arm
name = "Durand right arm"
id = "durand_right_arm"
build_path = /obj/item/mecha_parts/part/durand_right_arm
time = 20
- materials = list(DEFAULT_WALL_MATERIAL = 35000, "silver" = 3000)
+ materials = list(DEFAULT_WALL_MATERIAL = 26250, "silver" = 2250)
/datum/design/item/mechfab/durand/left_leg
name = "Durand left leg"
id = "durand_left_leg"
build_path = /obj/item/mecha_parts/part/durand_left_leg
time = 20
- materials = list(DEFAULT_WALL_MATERIAL = 40000, "silver" = 3000)
+ materials = list(DEFAULT_WALL_MATERIAL = 30000, "silver" = 2250)
/datum/design/item/mechfab/durand/right_leg
name = "Durand right leg"
id = "durand_right_leg"
build_path = /obj/item/mecha_parts/part/durand_right_leg
time = 20
- materials = list(DEFAULT_WALL_MATERIAL = 40000, "silver" = 3000)
+ materials = list(DEFAULT_WALL_MATERIAL = 30000, "silver" = 2250)
/datum/design/item/mechfab/durand/armour
name = "Durand armour plates"
id = "durand_armour"
build_path = /obj/item/mecha_parts/part/durand_armour
time = 60
- materials = list(DEFAULT_WALL_MATERIAL = 50000, "uranium" = 10000)
-
-/datum/design/item/robot_upgrade
- build_type = MECHFAB
- time = 12
- materials = list(DEFAULT_WALL_MATERIAL = 10000)
- category = "Cyborg Upgrade Modules"
-
-/datum/design/item/robot_upgrade/rename
- name = "Rename module"
- desc = "Used to rename a cyborg."
- id = "borg_rename_module"
- build_path = /obj/item/borg/upgrade/rename
-
-/datum/design/item/robot_upgrade/reset
- name = "Reset module"
- desc = "Used to reset a cyborg's module. Destroys any other upgrades applied to the robot."
- id = "borg_reset_module"
- build_path = /obj/item/borg/upgrade/reset
-
-/datum/design/item/robot_upgrade/restart
- name = "Emergency restart module"
- desc = "Used to force a restart of a disabled-but-repaired robot, bringing it back online."
- id = "borg_restart_module"
- materials = list(DEFAULT_WALL_MATERIAL = 60000, "glass" = 5000)
- build_path = /obj/item/borg/upgrade/restart
-
-/datum/design/item/robot_upgrade/vtec
- name = "VTEC module"
- desc = "Used to kick in a robot's VTEC systems, increasing their speed."
- id = "borg_vtec_module"
- materials = list(DEFAULT_WALL_MATERIAL = 80000, "glass" = 6000, "gold" = 5000)
- build_path = /obj/item/borg/upgrade/vtec
-
-/datum/design/item/robot_upgrade/tasercooler
- name = "Rapid taser cooling module"
- desc = "Used to cool a mounted taser, increasing the potential current in it and thus its recharge rate."
- id = "borg_taser_module"
- materials = list(DEFAULT_WALL_MATERIAL = 80000, "glass" = 6000, "gold" = 2000, "diamond" = 500)
- build_path = /obj/item/borg/upgrade/tasercooler
-
-/datum/design/item/robot_upgrade/jetpack
- name = "Jetpack module"
- desc = "A carbon dioxide jetpack suitable for low-gravity mining operations."
- id = "borg_jetpack_module"
- materials = list(DEFAULT_WALL_MATERIAL = 10000, "phoron" = 15000, "uranium" = 20000)
- build_path = /obj/item/borg/upgrade/jetpack
-
-/datum/design/item/robot_upgrade/syndicate
- name = "Illegal upgrade"
- desc = "Allows for the construction of lethal upgrades for cyborgs."
- id = "borg_syndicate_module"
- req_tech = list(TECH_COMBAT = 4, TECH_ILLEGAL = 3)
- materials = list(DEFAULT_WALL_MATERIAL = 10000, "glass" = 15000, "diamond" = 10000)
- build_path = /obj/item/borg/upgrade/syndicate
-
-/datum/design/item/mecha_tracking
- name = "Exosuit tracking beacon"
- build_type = MECHFAB
- time = 5
- materials = list(DEFAULT_WALL_MATERIAL = 500)
- build_path = /obj/item/mecha_parts/mecha_tracking
- category = "Misc"
+ materials = list(DEFAULT_WALL_MATERIAL = 37500, "uranium" = 7500)
/datum/design/item/mecha
build_type = MECHFAB
category = "Exosuit Equipment"
time = 10
- materials = list(DEFAULT_WALL_MATERIAL = 10000)
+ materials = list(DEFAULT_WALL_MATERIAL = 7500)
/datum/design/item/mecha/AssembleDesignDesc()
if(!desc)
desc = "Allows for the construction of \a '[item_name]' exosuit module."
+/datum/design/item/mecha/tracking
+ name = "Exosuit tracking beacon"
+ id = "mech_tracker"
+ time = 5
+ materials = list(DEFAULT_WALL_MATERIAL = 375)
+ build_path = /obj/item/mecha_parts/mecha_tracking
+
/datum/design/item/mecha/hydraulic_clamp
name = "Hydraulic clamp"
id = "hydraulic_clamp"
@@ -395,7 +247,7 @@
/datum/design/item/mecha/drill
name = "Drill"
- id = "drill"
+ id = "mech_drill"
build_path = /obj/item/mecha_parts/mecha_equipment/tool/drill
/datum/design/item/mecha/extinguisher
@@ -407,25 +259,25 @@
name = "Cable layer"
id = "mech_cable_layer"
build_path = /obj/item/mecha_parts/mecha_equipment/tool/cable_layer
-
+
/datum/design/item/mecha/flaregun
name = "Flare launcher"
id = "mecha_flare_gun"
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flare
- materials = list(DEFAULT_WALL_MATERIAL = 12500)
+ materials = list(DEFAULT_WALL_MATERIAL = 9375)
/datum/design/item/mecha/sleeper
name = "Sleeper"
id = "mech_sleeper"
build_path = /obj/item/mecha_parts/mecha_equipment/tool/sleeper
- materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 10000)
+ materials = list(DEFAULT_WALL_MATERIAL = 3750, "glass" = 7500)
/datum/design/item/mecha/syringe_gun
name = "Syringe gun"
id = "mech_syringe_gun"
build_path = /obj/item/mecha_parts/mecha_equipment/tool/syringe_gun
time = 20
- materials = list(DEFAULT_WALL_MATERIAL = 3000, "glass" = 2000)
+ materials = list(DEFAULT_WALL_MATERIAL = 2250, "glass" = 1500)
/*
/datum/design/item/mecha/syringe_gun
@@ -439,7 +291,7 @@
name = "Passenger compartment"
id = "mech_passenger"
build_path = /obj/item/mecha_parts/mecha_equipment/tool/passenger
- materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000)
+ materials = list(DEFAULT_WALL_MATERIAL = 3750, "glass" = 3750)
//obj/item/mecha_parts/mecha_equipment/repair_droid,
//obj/item/mecha_parts/mecha_equipment/jetpack, //TODO MECHA JETPACK SPRITE MISSING
@@ -499,7 +351,7 @@
desc = "A weapon that violates the Geneva Convention at 6 rounds per minute."
id = "clusterbang_launcher"
req_tech = list(TECH_COMBAT= 5, TECH_MATERIAL = 5, TECH_ILLEGAL = 3)
- materials = list(DEFAULT_WALL_MATERIAL = 20000, "gold" = 6000, "uranium" = 6000)
+ materials = list(DEFAULT_WALL_MATERIAL = 15000, "gold" = 4500, "uranium" = 4500)
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/clusterbang/limited
// *** Nonweapon modules
@@ -522,7 +374,7 @@
desc = "An exosuit-mounted rapid construction device."
id = "mech_rcd"
time = 120
- materials = list(DEFAULT_WALL_MATERIAL = 30000, "phoron" = 25000, "silver" = 20000, "gold" = 20000)
+ materials = list(DEFAULT_WALL_MATERIAL = 22500, "phoron" = 18750, "silver" = 15000, "gold" = 15000)
req_tech = list(TECH_MATERIAL = 4, TECH_BLUESPACE = 3, TECH_MAGNET = 4, TECH_POWER = 4, TECH_ENGINEERING = 4)
build_path = /obj/item/mecha_parts/mecha_equipment/tool/rcd
@@ -538,7 +390,7 @@
desc = "Automated repair droid, exosuits' best companion. BEEP BOOP"
id = "mech_repair_droid"
req_tech = list(TECH_MAGNET = 3, TECH_DATA = 3, TECH_ENGINEERING = 3)
- materials = list(DEFAULT_WALL_MATERIAL = 10000, "gold" = 1000, "silver" = 2000, "glass" = 5000)
+ materials = list(DEFAULT_WALL_MATERIAL = 7500, "gold" = 750, "silver" = 1500, "glass" = 3750)
build_path = /obj/item/mecha_parts/mecha_equipment/repair_droid
/datum/design/item/mecha/phoron_generator
@@ -546,13 +398,13 @@
id = "mech_phoron_generator"
req_tech = list(TECH_PHORON = 2, TECH_POWER= 2, TECH_ENGINEERING = 2)
build_path = /obj/item/mecha_parts/mecha_equipment/generator
- materials = list(DEFAULT_WALL_MATERIAL = 10000, "silver" = 500, "glass" = 1000)
+ materials = list(DEFAULT_WALL_MATERIAL = 7500, "silver" = 375, "glass" = 750)
/datum/design/item/mecha/energy_relay
name = "Energy relay"
id = "mech_energy_relay"
req_tech = list(TECH_MAGNET = 4, TECH_POWER = 3)
- materials = list(DEFAULT_WALL_MATERIAL = 10000, "gold" = 2000, "silver" = 3000, "glass" = 2000)
+ materials = list(DEFAULT_WALL_MATERIAL = 7500, "gold" = 1500, "silver" = 2250, "glass" = 1500)
build_path = /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay
/datum/design/item/mecha/ccw_armor
@@ -560,14 +412,14 @@
desc = "Exosuit close-combat armor booster."
id = "mech_ccw_armor"
req_tech = list(TECH_MATERIAL = 5, TECH_COMBAT = 4)
- materials = list(DEFAULT_WALL_MATERIAL = 20000, "silver" = 5000)
+ materials = list(DEFAULT_WALL_MATERIAL = 11250, "silver" = 3750)
build_path = /obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster
/datum/design/item/mecha/proj_armor
desc = "Exosuit projectile armor booster."
id = "mech_proj_armor"
req_tech = list(TECH_MATERIAL = 5, TECH_COMBAT = 5, TECH_ENGINEERING = 3)
- materials = list(DEFAULT_WALL_MATERIAL = 20000, "gold" = 5000)
+ materials = list(DEFAULT_WALL_MATERIAL = 15000, "gold" = 3750)
build_path = /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster
/datum/design/item/mecha/diamond_drill
@@ -575,7 +427,7 @@
desc = "A diamond version of the exosuit drill. It's harder, better, faster, stronger."
id = "mech_diamond_drill"
req_tech = list(TECH_MATERIAL = 4, TECH_ENGINEERING = 3)
- materials = list(DEFAULT_WALL_MATERIAL = 10000, "diamond" = 6500)
+ materials = list(DEFAULT_WALL_MATERIAL = 7500, "diamond" = 4875)
build_path = /obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill
/datum/design/item/mecha/generator_nuclear
@@ -583,7 +435,7 @@
desc = "Exosuit-held nuclear reactor. Converts uranium and everyone's health to energy."
id = "mech_generator_nuclear"
req_tech = list(TECH_POWER= 3, TECH_ENGINEERING = 3, TECH_MATERIAL = 3)
- materials = list(DEFAULT_WALL_MATERIAL = 10000, "silver" = 500, "glass" = 1000)
+ materials = list(DEFAULT_WALL_MATERIAL = 7500, "silver" = 375, "glass" = 750)
build_path = /obj/item/mecha_parts/mecha_equipment/generator/nuclear
/datum/design/item/synthetic_flash
@@ -591,6 +443,6 @@
id = "sflash"
req_tech = list(TECH_MAGNET = 3, TECH_COMBAT = 2)
build_type = MECHFAB
- materials = list(DEFAULT_WALL_MATERIAL = 750, "glass" = 750)
+ materials = list(DEFAULT_WALL_MATERIAL = 562, "glass" = 562)
build_path = /obj/item/device/flash/synthetic
category = "Misc"
\ No newline at end of file
diff --git a/code/modules/research/prosfab_designs.dm b/code/modules/research/prosfab_designs.dm
new file mode 100644
index 0000000000..9629bb31f1
--- /dev/null
+++ b/code/modules/research/prosfab_designs.dm
@@ -0,0 +1,297 @@
+/datum/design/item/prosfab
+ build_type = PROSFAB
+ category = "Misc"
+ req_tech = list(TECH_MATERIAL = 1)
+
+/datum/design/item/prosfab/pros
+ category = "Prosthetics"
+
+// Make new external organs and make 'em robotish
+/datum/design/item/prosfab/pros/Fabricate(var/newloc, var/fabricator)
+ if(istype(fabricator, /obj/machinery/pros_fabricator))
+ var/obj/machinery/pros_fabricator/prosfab = fabricator
+ var/obj/item/organ/O = new build_path(newloc)
+ O.species = all_species["Human"]
+ O.robotize(prosfab.manufacturer)
+ O.dna = new/datum/dna() //Uuughhhh... why do I have to do this?
+ O.dna.ResetUI()
+ O.dna.ResetSE()
+ spawn(10) //Limbs love to flop around. Who am I to deny them?
+ O.dir = 2
+ return O
+ return ..()
+
+// Deep Magic for the torso since it needs to be a new mob
+/datum/design/item/prosfab/pros/torso/Fabricate(var/newloc, var/fabricator)
+ if(istype(fabricator, /obj/machinery/pros_fabricator))
+ var/obj/machinery/pros_fabricator/prosfab = fabricator
+ var/mob/living/carbon/human/H = new(newloc,"Human")
+ H.stat = DEAD
+ H.gender = gender
+ for(var/obj/item/organ/external/EO in H.organs)
+ if(EO.organ_tag == BP_TORSO || EO.organ_tag == BP_GROIN)
+ continue //Roboticizing a torso does all the children and wastes time, do it later
+ else
+ EO.remove_rejuv()
+
+ for(var/obj/item/organ/external/O in H.organs)
+ O.species = all_species["Human"]
+ O.robotize(prosfab.manufacturer)
+ O.dna = new/datum/dna()
+ O.dna.ResetUI()
+ O.dna.ResetSE()
+
+ H.real_name = "Synthmorph #[rand(100,999)]"
+ H.name = H.real_name
+ H.dir = 2
+ return H
+
+//////////////////// Prosthetics ////////////////////
+/datum/design/item/prosfab/pros/torso
+ time = 35
+ materials = list(DEFAULT_WALL_MATERIAL = 45000, "glass" = 7500, "plasteel" = 1500)
+// req_tech = list(TECH_ENGINEERING = 2, TECH_MATERIAL = 3, TECH_DATA = 3) //Saving the values just in case
+ var/gender = MALE
+
+/datum/design/item/prosfab/pros/torso/male
+ name = "FBP torso (M)"
+ id = "pros_torso_m"
+ build_path = /obj/item/organ/external/chest
+ gender = MALE
+
+/obj/item/organ/external/chest/f //To satisfy Travis. :|
+
+/datum/design/item/prosfab/pros/torso/female
+ name = "FBP torso (F)"
+ id = "pros_torso_f"
+ build_path = /obj/item/organ/external/chest/f
+ gender = FEMALE
+
+/datum/design/item/prosfab/pros/head
+ name = "Prosthetic head"
+ id = "pros_head"
+ build_path = /obj/item/organ/external/head
+ time = 30
+ materials = list(DEFAULT_WALL_MATERIAL = 18750, "glass" = 3750, "plasteel" = 750)
+// req_tech = list(TECH_ENGINEERING = 2, TECH_MATERIAL = 3, TECH_DATA = 3) //Saving the values just in case
+
+/datum/design/item/prosfab/pros/l_arm
+ name = "Prosthetic left arm"
+ id = "pros_l_arm"
+ build_path = /obj/item/organ/external/arm
+ time = 20
+ materials = list(DEFAULT_WALL_MATERIAL = 13500)
+
+/datum/design/item/prosfab/pros/l_hand
+ name = "Prosthetic left hand"
+ id = "pros_l_hand"
+ build_path = /obj/item/organ/external/hand
+ time = 15
+ materials = list(DEFAULT_WALL_MATERIAL = 7500)
+
+/datum/design/item/prosfab/pros/l_leg
+ name = "Prosthetic left leg"
+ id = "pros_l_leg"
+ build_path = /obj/item/organ/external/leg
+ time = 20
+ materials = list(DEFAULT_WALL_MATERIAL = 11250)
+
+/datum/design/item/prosfab/pros/l_foot
+ name = "Prosthetic left foot"
+ id = "pros_l_foot"
+ build_path = /obj/item/organ/external/foot
+ time = 15
+ materials = list(DEFAULT_WALL_MATERIAL = 7500)
+
+/datum/design/item/prosfab/pros/r_arm
+ name = "Prosthetic right arm"
+ id = "pros_r_arm"
+ build_path = /obj/item/organ/external/arm/right
+ time = 20
+ materials = list(DEFAULT_WALL_MATERIAL = 13500)
+
+/datum/design/item/prosfab/pros/r_hand
+ name = "Prosthetic right hand"
+ id = "pros_r_hand"
+ build_path = /obj/item/organ/external/hand/right
+ time = 15
+ materials = list(DEFAULT_WALL_MATERIAL = 7500)
+
+/datum/design/item/prosfab/pros/r_leg
+ name = "Prosthetic right leg"
+ id = "pros_r_leg"
+ build_path = /obj/item/organ/external/leg/right
+ time = 20
+ materials = list(DEFAULT_WALL_MATERIAL = 11250)
+
+/datum/design/item/prosfab/pros/r_foot
+ name = "Prosthetic right foot"
+ id = "pros_r_foot"
+ build_path = /obj/item/organ/external/foot/right
+ time = 15
+ materials = list(DEFAULT_WALL_MATERIAL = 7500)
+
+/datum/design/item/prosfab/pros/cell
+ name = "Prosthetic powercell"
+ id = "pros_cell"
+ build_path = /obj/item/organ/internal/cell
+ time = 15
+ materials = list(DEFAULT_WALL_MATERIAL = 7500, "glass" = 3000, "plasteel" = 1500)
+// req_tech = list(TECH_ENGINEERING = 2, TECH_MATERIAL = 2)
+
+/datum/design/item/prosfab/pros/eyes
+ name = "Prosthetic eyes"
+ id = "pros_eyes"
+ build_path = /obj/item/organ/internal/eyes/robot
+ time = 15
+ materials = list(DEFAULT_WALL_MATERIAL = 5625, "glass" = 5625)
+// req_tech = list(TECH_ENGINEERING = 2, TECH_MATERIAL = 2)
+
+//////////////////// Cyborg Parts ////////////////////
+/datum/design/item/prosfab/cyborg
+ category = "Cyborg Parts"
+ time = 20
+ materials = list(DEFAULT_WALL_MATERIAL = 3750)
+
+/datum/design/item/prosfab/cyborg/exoskeleton
+ name = "Robot exoskeleton"
+ id = "robot_exoskeleton"
+ build_path = /obj/item/robot_parts/robot_suit
+ time = 50
+ materials = list(DEFAULT_WALL_MATERIAL = 37500)
+
+/datum/design/item/prosfab/cyborg/torso
+ name = "Robot torso"
+ id = "robot_torso"
+ build_path = /obj/item/robot_parts/chest
+ time = 35
+ materials = list(DEFAULT_WALL_MATERIAL = 30000)
+
+/datum/design/item/prosfab/cyborg/head
+ name = "Robot head"
+ id = "robot_head"
+ build_path = /obj/item/robot_parts/head
+ time = 35
+ materials = list(DEFAULT_WALL_MATERIAL = 18750)
+
+/datum/design/item/prosfab/cyborg/l_arm
+ name = "Robot left arm"
+ id = "robot_l_arm"
+ build_path = /obj/item/robot_parts/l_arm
+ time = 20
+ materials = list(DEFAULT_WALL_MATERIAL = 13500)
+
+/datum/design/item/prosfab/cyborg/r_arm
+ name = "Robot right arm"
+ id = "robot_r_arm"
+ build_path = /obj/item/robot_parts/r_arm
+ time = 20
+ materials = list(DEFAULT_WALL_MATERIAL = 13500)
+
+/datum/design/item/prosfab/cyborg/l_leg
+ name = "Robot left leg"
+ id = "robot_l_leg"
+ build_path = /obj/item/robot_parts/l_leg
+ time = 20
+ materials = list(DEFAULT_WALL_MATERIAL = 11250)
+
+/datum/design/item/prosfab/cyborg/r_leg
+ name = "Robot right leg"
+ id = "robot_r_leg"
+ build_path = /obj/item/robot_parts/r_leg
+ time = 20
+ materials = list(DEFAULT_WALL_MATERIAL = 11250)
+
+
+//////////////////// Cyborg Internals ////////////////////
+/datum/design/item/prosfab/cyborg/component
+ category = "Cyborg Internals"
+ build_type = PROSFAB
+ time = 12
+ materials = list(DEFAULT_WALL_MATERIAL = 7500)
+
+/datum/design/item/prosfab/cyborg/component/binary_communication_device
+ name = "Binary communication device"
+ id = "binary_communication_device"
+ build_path = /obj/item/robot_parts/robot_component/binary_communication_device
+
+/datum/design/item/prosfab/cyborg/component/radio
+ name = "Radio"
+ id = "radio"
+ build_path = /obj/item/robot_parts/robot_component/radio
+
+/datum/design/item/prosfab/cyborg/component/actuator
+ name = "Actuator"
+ id = "actuator"
+ build_path = /obj/item/robot_parts/robot_component/actuator
+
+/datum/design/item/prosfab/cyborg/component/diagnosis_unit
+ name = "Diagnosis unit"
+ id = "diagnosis_unit"
+ build_path = /obj/item/robot_parts/robot_component/diagnosis_unit
+
+/datum/design/item/prosfab/cyborg/component/camera
+ name = "Camera"
+ id = "camera"
+ build_path = /obj/item/robot_parts/robot_component/camera
+
+/datum/design/item/prosfab/cyborg/component/armour
+ name = "Armour plating"
+ id = "armour"
+ build_path = /obj/item/robot_parts/robot_component/armour
+
+
+//////////////////// Cyborg Modules ////////////////////
+/datum/design/item/prosfab/robot_upgrade
+ category = "Cyborg Modules"
+ build_type = PROSFAB
+ time = 12
+ materials = list(DEFAULT_WALL_MATERIAL = 7500)
+
+/datum/design/item/prosfab/robot_upgrade/rename
+ name = "Rename module"
+ desc = "Used to rename a cyborg."
+ id = "borg_rename_module"
+ build_path = /obj/item/borg/upgrade/rename
+
+/datum/design/item/prosfab/robot_upgrade/reset
+ name = "Reset module"
+ desc = "Used to reset a cyborg's module. Destroys any other upgrades applied to the robot."
+ id = "borg_reset_module"
+ build_path = /obj/item/borg/upgrade/reset
+
+/datum/design/item/prosfab/robot_upgrade/restart
+ name = "Emergency restart module"
+ desc = "Used to force a restart of a disabled-but-repaired robot, bringing it back online."
+ id = "borg_restart_module"
+ materials = list(DEFAULT_WALL_MATERIAL = 45000, "glass" = 3750)
+ build_path = /obj/item/borg/upgrade/restart
+
+/datum/design/item/prosfab/robot_upgrade/vtec
+ name = "VTEC module"
+ desc = "Used to kick in a robot's VTEC systems, increasing their speed."
+ id = "borg_vtec_module"
+ materials = list(DEFAULT_WALL_MATERIAL = 60000, "glass" = 4500, "gold" = 3750)
+ build_path = /obj/item/borg/upgrade/vtec
+
+/datum/design/item/prosfab/robot_upgrade/tasercooler
+ name = "Rapid taser cooling module"
+ desc = "Used to cool a mounted taser, increasing the potential current in it and thus its recharge rate."
+ id = "borg_taser_module"
+ materials = list(DEFAULT_WALL_MATERIAL = 60000, "glass" = 4500, "gold" = 1500, "diamond" = 375)
+ build_path = /obj/item/borg/upgrade/tasercooler
+
+/datum/design/item/prosfab/robot_upgrade/jetpack
+ name = "Jetpack module"
+ desc = "A carbon dioxide jetpack suitable for low-gravity mining operations."
+ id = "borg_jetpack_module"
+ materials = list(DEFAULT_WALL_MATERIAL = 7500, "phoron" = 11250, "uranium" = 15000)
+ build_path = /obj/item/borg/upgrade/jetpack
+
+/datum/design/item/prosfab/robot_upgrade/syndicate
+ name = "Illegal upgrade"
+ desc = "Allows for the construction of lethal upgrades for cyborgs."
+ id = "borg_syndicate_module"
+ req_tech = list(TECH_COMBAT = 4, TECH_ILLEGAL = 3)
+ materials = list(DEFAULT_WALL_MATERIAL = 7500, "glass" = 11250, "diamond" = 7500)
+ build_path = /obj/item/borg/upgrade/syndicate
\ No newline at end of file
diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm
index 8809ee2955..46b688929d 100644
--- a/code/modules/research/protolathe.dm
+++ b/code/modules/research/protolathe.dm
@@ -2,7 +2,7 @@
name = "Protolathe"
icon_state = "protolathe"
flags = OPENCONTAINER
-
+ circuit = /obj/item/weapon/circuitboard/protolathe
use_power = 1
idle_power_usage = 30
active_power_usage = 5000
@@ -19,8 +19,8 @@
/obj/machinery/r_n_d/protolathe/New()
..()
+ circuit = new circuit()
component_parts = list()
- component_parts += new /obj/item/weapon/circuitboard/protolathe(src)
component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
@@ -76,15 +76,8 @@
speed = T / 2
/obj/machinery/r_n_d/protolathe/dismantle()
- for(var/obj/I in component_parts)
- if(istype(I, /obj/item/weapon/reagent_containers/glass/beaker))
- reagents.trans_to_obj(I, reagents.total_volume)
for(var/f in materials)
- if(materials[f] >= SHEET_MATERIAL_AMOUNT)
- var/path = getMaterialType(f)
- if(path)
- var/obj/item/stack/S = new f(loc)
- S.amount = round(materials[f] / SHEET_MATERIAL_AMOUNT)
+ eject_materials(f, -1)
..()
/obj/machinery/r_n_d/protolathe/update_icon()
@@ -203,3 +196,36 @@
if(new_item.matter && new_item.matter.len > 0)
for(var/i in new_item.matter)
new_item.matter[i] = new_item.matter[i] * mat_efficiency
+
+/obj/machinery/r_n_d/protolathe/proc/eject_materials(var/material, var/amount) // 0 amount = 0 means ejecting a full stack; -1 means eject everything
+ var/recursive = amount == -1 ? 1 : 0
+ material = lowertext(material)
+ var/mattype
+ switch(material)
+ if(DEFAULT_WALL_MATERIAL)
+ mattype = /obj/item/stack/material/steel
+ if("glass")
+ mattype = /obj/item/stack/material/glass
+ if("gold")
+ mattype = /obj/item/stack/material/gold
+ if("silver")
+ mattype = /obj/item/stack/material/silver
+ if("diamond")
+ mattype = /obj/item/stack/material/diamond
+ if("phoron")
+ mattype = /obj/item/stack/material/phoron
+ if("uranium")
+ mattype = /obj/item/stack/material/uranium
+ else
+ return
+ var/obj/item/stack/material/S = new mattype(loc)
+ if(amount <= 0)
+ amount = S.max_amount
+ var/ejected = min(round(materials[material] / S.perunit), amount)
+ S.amount = min(ejected, amount)
+ if(S.amount <= 0)
+ qdel(S)
+ return
+ materials[material] -= ejected * S.perunit
+ if(recursive && materials[material] >= S.perunit)
+ eject_materials(material, -1)
\ No newline at end of file
diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm
index 9f9315eba6..186c869ad3 100644
--- a/code/modules/research/rdconsole.dm
+++ b/code/modules/research/rdconsole.dm
@@ -47,19 +47,6 @@ won't update every console in existence) but it's more of a hassle to do. Also,
req_access = list(access_research) //Data and setting manipulation requires scientist access.
-/obj/machinery/computer/rdconsole/proc/CallTechName(var/ID) //A simple helper proc to find the name of a tech with a given ID.
- var/datum/tech/check_tech
- var/return_name = null
- for(var/T in typesof(/datum/tech) - /datum/tech)
- check_tech = null
- check_tech = new T()
- if(check_tech.id == ID)
- return_name = check_tech.name
- qdel(check_tech)
- check_tech = null
- break
- return return_name
-
/obj/machinery/computer/rdconsole/proc/CallMaterialName(var/ID)
var/return_name = ID
switch(return_name)
diff --git a/code/modules/research/research.dm b/code/modules/research/research.dm
index 8dc8a12263..41c6f6978c 100644
--- a/code/modules/research/research.dm
+++ b/code/modules/research/research.dm
@@ -122,6 +122,13 @@ research holder datum.
KT.level = max(KT.level + 1, level - 1)
return
+// A simple helper proc to find the name of a tech with a given ID.
+/proc/CallTechName(var/ID)
+ for(var/T in subtypesof(/datum/tech))
+ var/datum/tech/check_tech = T
+ if(initial(check_tech.id) == ID)
+ return initial(check_tech.name)
+
/***************************************************************
** Technology Datums **
** Includes all the various technoliges and what they make. **
diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm
index efb05b90d7..bf4cab0697 100644
--- a/code/modules/research/server.dm
+++ b/code/modules/research/server.dm
@@ -13,11 +13,12 @@
idle_power_usage = 800
var/delay = 10
req_access = list(access_rd) //Only the R&D can change server settings.
+ circuit = /obj/item/weapon/circuitboard/rdserver
/obj/machinery/r_n_d/server/New()
..()
+ circuit = new circuit()
component_parts = list()
- component_parts += new /obj/item/weapon/circuitboard/rdserver(src)
component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
component_parts += new /obj/item/stack/cable_coil(src)
component_parts += new /obj/item/stack/cable_coil(src)
@@ -40,12 +41,12 @@
var/list/temp_list
if(!id_with_upload.len)
temp_list = list()
- temp_list = text2list(id_with_upload_string, ";")
+ temp_list = splittext(id_with_upload_string, ";")
for(var/N in temp_list)
id_with_upload += text2num(N)
if(!id_with_download.len)
temp_list = list()
- temp_list = text2list(id_with_download_string, ";")
+ temp_list = splittext(id_with_download_string, ";")
for(var/N in temp_list)
id_with_download += text2num(N)
@@ -310,4 +311,4 @@
name = "Core R&D Server"
id_with_upload_string = "1"
id_with_download_string = "1"
- server_id = 1
+ server_id = 1
\ No newline at end of file
diff --git a/code/modules/research/xenoarchaeology/artifact/artifact.dm b/code/modules/research/xenoarchaeology/artifact/artifact.dm
index a3256d6f53..71819efc65 100644
--- a/code/modules/research/xenoarchaeology/artifact/artifact.dm
+++ b/code/modules/research/xenoarchaeology/artifact/artifact.dm
@@ -108,10 +108,9 @@
. = ..()
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)
+ var/obj/item/weapon/pickaxe/P = H.get_inactive_hand()
+ if(istype(P))
+ src.attackby(P, H)
else if(istype(AM,/mob/living/silicon/robot))
var/mob/living/silicon/robot/R = AM
diff --git a/code/modules/research/xenoarchaeology/artifact/artifact_unknown.dm b/code/modules/research/xenoarchaeology/artifact/artifact_unknown.dm
index b0a31faecc..2f6cc45e75 100644
--- a/code/modules/research/xenoarchaeology/artifact/artifact_unknown.dm
+++ b/code/modules/research/xenoarchaeology/artifact/artifact_unknown.dm
@@ -26,7 +26,7 @@ var/list/valid_primary_effect_types = list(\
/datum/artifact_effect/forcefield,\
/datum/artifact_effect/gasoxy,\
/datum/artifact_effect/gasplasma,\
-/* /datum/artifact_effect/gassleeping,\*/
+// /datum/artifact_effect/gassleeping,\
/datum/artifact_effect/heal,\
/datum/artifact_effect/hurt,\
/datum/artifact_effect/emp,\
@@ -45,7 +45,7 @@ var/list/valid_secondary_effect_types = list(\
/datum/artifact_effect/gasnitro,\
/datum/artifact_effect/gasoxy,\
/datum/artifact_effect/gasphoron,\
-/* /datum/artifact_effect/gassleeping,\*/
+// /datum/artifact_effect/gassleeping,\
/datum/artifact_effect/goodfeeling,\
/datum/artifact_effect/heal,\
/datum/artifact_effect/hurt,\
diff --git a/code/modules/research/xenoarchaeology/finds/finds_misc.dm b/code/modules/research/xenoarchaeology/finds/finds_misc.dm
index f494505b63..90afe5a737 100644
--- a/code/modules/research/xenoarchaeology/finds/finds_misc.dm
+++ b/code/modules/research/xenoarchaeology/finds/finds_misc.dm
@@ -13,8 +13,8 @@
//large finds
/*
- /obj/machinery/syndicate_beacon
- /obj/machinery/wish_granter
+ obj/machinery/syndicate_beacon
+ obj/machinery/wish_granter
if(18)
item_type = "jagged green crystal"
additional_desc = pick("It shines faintly as it catches the light.","It appears to have a faint inner glow.","It seems to draw you inward as you look it at.","Something twinkles faintly as you look at it.","It's mesmerizing to behold.")
diff --git a/code/modules/research/xenoarchaeology/finds/finds_talkingitem.dm b/code/modules/research/xenoarchaeology/finds/finds_talkingitem.dm
index 58cfdbb031..69aaac47c0 100644
--- a/code/modules/research/xenoarchaeology/finds/finds_talkingitem.dm
+++ b/code/modules/research/xenoarchaeology/finds/finds_talkingitem.dm
@@ -44,7 +44,7 @@
/*var/l = lentext(msg)
if(findtext(msg," ",l,l+1)==0)
msg+=" "*/
- seperate = text2list(msg, " ")
+ seperate = splittext(msg, " ")
for(var/Xa = 1,XaThis spell temporarly blinds a single person and does not require wizard garb.
Subjugation (30)
This spell temporarily subjugates a target's mind and does not require wizard garb.
- Mind Transfer (60)
- This spell allows the user to switch bodies with a target. Careful to not lose your memory in the process.
Forcewall (10)
This spell creates an unbreakable wall that lasts for 30 seconds and does not need wizard garb.
Blink (2)
@@ -56,8 +54,6 @@
This spell creates your ethereal form, temporarily making you invisible and able to pass through walls.
Knock (10)
This spell opens nearby doors and does not require wizard garb.
- Curse of the Horseman (15)
- This spell will curse a person to wear an unremovable horse mask (it has glue on the inside) and speak like a horse. It does not require wizard garb.
Remove Clothes Requirement Warning: this takes away 2 spell choices.
Artefacts:
@@ -174,10 +170,10 @@
feedback_add_details("wizard_spell_learned","SJ") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
H.add_spell(new/spell/targeted/subjugation)
temp = "You have learned subjugate."
- if("mindswap")
- feedback_add_details("wizard_spell_learned","MT") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
- H.add_spell(new/spell/targeted/mind_transfer)
- temp = "You have learned mindswap."
+// if("mindswap")
+// feedback_add_details("wizard_spell_learned","MT") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
+// H.add_spell(new/spell/targeted/mind_transfer)
+// temp = "You have learned mindswap."
if("forcewall")
feedback_add_details("wizard_spell_learned","FW") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
H.add_spell(new/spell/aoe_turf/conjure/forcewall)
@@ -202,10 +198,10 @@
feedback_add_details("wizard_spell_learned","KN") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
H.add_spell(new/spell/aoe_turf/knock)
temp = "You have learned knock."
- if("horseman")
- feedback_add_details("wizard_spell_learned","HH") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
- H.add_spell(new/spell/targeted/equip_item/horsemask)
- temp = "You have learned curse of the horseman."
+// if("horseman")
+// feedback_add_details("wizard_spell_learned","HH") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
+// H.add_spell(new/spell/targeted/equip_item/horsemask)
+// temp = "You have learned curse of the horseman."
if("mentalfocus")
feedback_add_details("wizard_spell_learned","MF") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
new /obj/item/weapon/gun/energy/staff/focus(get_turf(H))
@@ -361,7 +357,7 @@
for(var/V in stored_swap.mind.special_verbs)
stored_swap.verbs -= V
- var/mob/dead/observer/ghost = stored_swap.ghostize(0)
+ var/mob/observer/dead/ghost = stored_swap.ghostize(0)
ghost.spell_list = stored_swap.spell_list
user.mind.transfer_to(stored_swap)
diff --git a/code/modules/spells/targeted/equip/horsemask.dm b/code/modules/spells/targeted/equip/horsemask.dm
index 92b85fdb36..c52f75acee 100644
--- a/code/modules/spells/targeted/equip/horsemask.dm
+++ b/code/modules/spells/targeted/equip/horsemask.dm
@@ -26,7 +26,7 @@
for(var/mob/living/target in targets)
target.visible_message( "[target]'s face lights up in fire, and after the event a horse's head takes its place! ", \
"Your face burns up, and shortly after the fire you realise you have the face of a horse! ")
- flick("e_flash", target.flash)
+ target.flash_eyes()
/spell/targeted/equip_item/horsemask/summon_item(var/new_type)
var/obj/item/new_item = new new_type
diff --git a/code/modules/spells/targeted/mind_transfer.dm b/code/modules/spells/targeted/mind_transfer.dm
index 1f20e6afbf..375328016f 100644
--- a/code/modules/spells/targeted/mind_transfer.dm
+++ b/code/modules/spells/targeted/mind_transfer.dm
@@ -47,7 +47,7 @@
for(var/V in victim.mind.special_verbs)
victim.verbs -= V
- var/mob/dead/observer/ghost = victim.ghostize(0)
+ var/mob/observer/dead/ghost = victim.ghostize(0)
ghost.spell_list += victim.spell_list//If they have spells, transfer them. Now we basically have a backup mob.
caster.mind.transfer_to(victim)
diff --git a/code/modules/surgery/bones.dm b/code/modules/surgery/bones.dm
index ff0ea12635..cc4428fcb6 100644
--- a/code/modules/surgery/bones.dm
+++ b/code/modules/surgery/bones.dm
@@ -18,7 +18,7 @@
if (!hasorgans(target))
return 0
var/obj/item/organ/external/affected = target.get_organ(target_zone)
- return affected && !(affected.status & ORGAN_ROBOT) && affected.open >= 2 && affected.stage == 0
+ return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= 2 && affected.stage == 0
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = target.get_organ(target_zone)
@@ -52,7 +52,7 @@
if (!hasorgans(target))
return 0
var/obj/item/organ/external/affected = target.get_organ(target_zone)
- return affected && affected.organ_tag != BP_HEAD && !(affected.status & ORGAN_ROBOT) && affected.open >= 2 && affected.stage == 1
+ return affected && affected.organ_tag != BP_HEAD && !(affected.robotic >= ORGAN_ROBOT) && affected.open >= 2 && affected.stage == 1
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = target.get_organ(target_zone)
@@ -91,7 +91,7 @@
if (!hasorgans(target))
return 0
var/obj/item/organ/external/affected = target.get_organ(target_zone)
- return affected && affected.organ_tag == BP_HEAD && !(affected.status & ORGAN_ROBOT) && affected.open >= 2 && affected.stage == 1
+ return affected && affected.organ_tag == BP_HEAD && (affected.robotic < ORGAN_ROBOT) && affected.open >= 2 && affected.stage == 1
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
user.visible_message("[user] is beginning to piece together [target]'s skull with \the [tool]." , \
@@ -127,7 +127,7 @@
if (!hasorgans(target))
return 0
var/obj/item/organ/external/affected = target.get_organ(target_zone)
- return affected && affected.open >= 2 && !(affected.status & ORGAN_ROBOT) && affected.stage == 2
+ return affected && affected.open >= 2 && !(affected.robotic >= ORGAN_ROBOT) && affected.stage == 2
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = target.get_organ(target_zone)
diff --git a/code/modules/surgery/encased.dm b/code/modules/surgery/encased.dm
index 1744cec3d7..81b11d12db 100644
--- a/code/modules/surgery/encased.dm
+++ b/code/modules/surgery/encased.dm
@@ -12,7 +12,7 @@
return 0
var/obj/item/organ/external/affected = target.get_organ(target_zone)
- return affected && !(affected.status & ORGAN_ROBOT) && affected.encased && affected.open >= 2
+ return affected && !(affected.robotic >= ORGAN_ROBOT) && affected.encased && affected.open >= 2
/datum/surgery_step/open_encased/saw
diff --git a/code/modules/surgery/face.dm b/code/modules/surgery/face.dm
index f4e723d0c6..744b1d56dd 100644
--- a/code/modules/surgery/face.dm
+++ b/code/modules/surgery/face.dm
@@ -10,7 +10,7 @@
if (!hasorgans(target))
return 0
var/obj/item/organ/external/affected = target.get_organ(target_zone)
- if (!affected || (affected.status & ORGAN_ROBOT))
+ if (!affected || (affected.robotic >= ORGAN_ROBOT))
return 0
return target_zone == O_MOUTH
diff --git a/code/modules/surgery/generic.dm b/code/modules/surgery/generic.dm
index 697a5cf191..e6dc9d9860 100644
--- a/code/modules/surgery/generic.dm
+++ b/code/modules/surgery/generic.dm
@@ -17,7 +17,7 @@
return 0
if (affected.is_stump())
return 0
- if (affected.status & ORGAN_ROBOT)
+ if (affected.robotic >= ORGAN_ROBOT)
return 0
return 1
diff --git a/code/modules/surgery/implant.dm b/code/modules/surgery/implant.dm
index f178a6a45b..e97d09c833 100644
--- a/code/modules/surgery/implant.dm
+++ b/code/modules/surgery/implant.dm
@@ -128,7 +128,7 @@
user.visible_message("\blue [user] puts \the [tool] inside [target]'s [get_cavity(affected)] cavity.", \
"\blue You put \the [tool] inside [target]'s [get_cavity(affected)] cavity." )
- if (tool.w_class > get_max_wclass(affected)/2 && prob(50) && !(affected.status & ORGAN_ROBOT))
+ if (tool.w_class > get_max_wclass(affected)/2 && prob(50) && (affected.robotic < ORGAN_ROBOT))
user << "\red You tear some blood vessels trying to fit such a big object in this cavity."
var/datum/wound/internal_bleeding/I = new (10)
affected.wounds += I
@@ -153,8 +153,12 @@
max_duration = 100
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- var/obj/item/organ/internal/brain/sponge = target.internal_organs_by_name["brain"]
- return ..() && (!sponge || !sponge.damage)
+ var/obj/item/organ/external/affected = target.get_organ(target_zone)
+ if(affected.organ_tag == BP_HEAD)
+ var/obj/item/organ/internal/brain/sponge = target.internal_organs_by_name["brain"]
+ return ..() && (!sponge || !sponge.damage)
+ else
+ return ..()
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = target.get_organ(target_zone)
diff --git a/code/modules/surgery/limb_reattach.dm b/code/modules/surgery/limb_reattach.dm
index aee13ede83..8e6e8da21f 100644
--- a/code/modules/surgery/limb_reattach.dm
+++ b/code/modules/surgery/limb_reattach.dm
@@ -21,6 +21,18 @@
min_duration = 50
max_duration = 70
+ can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ var/obj/item/organ/external/E = tool
+ var/obj/item/organ/external/P = target.organs_by_name[E.parent_organ]
+ if(!P)
+ user << "There's nothing to attach [E] to! "
+ return 0
+ else if((P.robotic >= ORGAN_ROBOT) && (E.robotic < ORGAN_ROBOT))
+ user << "Attaching [E] to [P] wouldn't work well. "
+ return 0
+ else
+ return 1
+
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/obj/item/organ/external/E = tool
user.visible_message("[user] starts attaching [E.name] to [target]'s [E.amputation_point].", \
@@ -28,11 +40,10 @@
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/obj/item/organ/external/E = tool
- user.visible_message("[user] has attached [target]'s [E.name] to the [E.amputation_point]. >", \
+ user.visible_message("[user] has attached [target]'s [E.name] to the [E.amputation_point]. ", \
"You have attached [target]'s [E.name] to the [E.amputation_point]. ")
user.drop_from_inventory(E)
E.replaced(target)
- E.loc = target
target.update_body()
target.updatehealth()
target.UpdateDamageIcon()
diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm
index 9b7b006759..ccb90c20d6 100644
--- a/code/modules/surgery/organs_internal.dm
+++ b/code/modules/surgery/organs_internal.dm
@@ -52,7 +52,7 @@
for(var/obj/item/organ/I in affected.internal_organs)
if(I && I.damage > 0)
- if(!(I.status & ORGAN_ROBOT))
+ if(!(I.robotic >= ORGAN_ROBOT))
user.visible_message("[user] starts treating damage to [target]'s [I.name] with [tool_name].", \
"You start treating damage to [target]'s [I.name] with [tool_name]." )
@@ -72,7 +72,7 @@
for(var/obj/item/organ/internal/I in affected.internal_organs)
if(I && I.damage > 0)
- if(!(I.status & ORGAN_ROBOT))
+ if(!(I.robotic >= ORGAN_ROBOT))
user.visible_message("[user] treats damage to [target]'s [I.name] with [tool_name]. ", \
"You treat damage to [target]'s [I.name] with [tool_name]. " )
I.damage = 0
@@ -119,7 +119,7 @@
var/obj/item/organ/external/affected = target.get_organ(target_zone)
- if(!(affected && !(affected.status & ORGAN_ROBOT)))
+ if(!(affected && !(affected.robotic >= ORGAN_ROBOT)))
return 0
target.op_stage.current_organ = null
@@ -234,7 +234,7 @@
if(!istype(O))
return 0
- if((affected.status & ORGAN_ROBOT) && !(O.status & ORGAN_ROBOT))
+ if((affected.robotic >= ORGAN_ROBOT) && !(O.robotic >= ORGAN_ROBOT))
user << "You cannot install a naked organ into a robotic body. "
return SURGERY_FAILURE
@@ -307,7 +307,7 @@
var/list/removable_organs = list()
for(var/organ in target.internal_organs_by_name)
var/obj/item/organ/I = target.internal_organs_by_name[organ]
- if(istype(I) && (I.status & ORGAN_CUT_AWAY) && !(I.status & ORGAN_ROBOT) && I.parent_organ == target_zone)
+ if(istype(I) && (I.status & ORGAN_CUT_AWAY) && !(I.robotic >= ORGAN_ROBOT) && I.parent_organ == target_zone)
removable_organs |= organ
var/organ_to_replace = input(user, "Which organ do you want to reattach?") as null|anything in removable_organs
diff --git a/code/modules/surgery/other.dm b/code/modules/surgery/other.dm
index 721f124e4e..d0ba959111 100644
--- a/code/modules/surgery/other.dm
+++ b/code/modules/surgery/other.dm
@@ -27,7 +27,7 @@
internal_bleeding = 1
break
- return affected.open >= 2 && internal_bleeding
+ return affected.open == (affected.encased ? 3 : 2) && internal_bleeding
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = target.get_organ(target_zone)
@@ -149,6 +149,7 @@
if(container.reagents.has_reagent("peridaxon"))
affected.status &= ~ORGAN_DEAD
+ affected.owner.update_body(1)
user.visible_message("\blue [user] applies [trans] units of the solution to affected tissue in [target]'s [affected.name]", \
"\blue You apply [trans] units of the solution to affected tissue in [target]'s [affected.name] with \the [tool].")
@@ -206,4 +207,4 @@
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
user.visible_message("[user]'s [tool] can't quite seem to get through the metal... ", \
- "Your [tool] can't quite seem to get through the metal. It's weakening, though - try again. ")
\ No newline at end of file
+ "Your [tool] can't quite seem to get through the metal. It's weakening, though - try again. ")
diff --git a/code/modules/surgery/robotics.dm b/code/modules/surgery/robotics.dm
index 96ff090b36..bede5263e2 100644
--- a/code/modules/surgery/robotics.dm
+++ b/code/modules/surgery/robotics.dm
@@ -17,7 +17,7 @@
return 0
if (affected.status & ORGAN_DESTROYED)
return 0
- if (!(affected.status & ORGAN_ROBOT))
+ if (!(affected.robotic >= ORGAN_ROBOT))
return 0
return 1
@@ -166,15 +166,18 @@
if(..())
var/obj/item/stack/cable_coil/C = tool
var/obj/item/organ/external/affected = target.get_organ(target_zone)
- var/limb_can_operate = ((affected && affected.open >= 3) && (affected.disfigured || affected.burn_dam > 0) && target_zone != O_MOUTH)
- if(limb_can_operate)
- if(istype(C))
- if(!C.get_amount() >= 3)
- user << "You need three or more cable pieces to repair this damage. "
- return SURGERY_FAILURE
- C.use(3)
- return 1
- return SURGERY_FAILURE
+
+ var/limb_can_operate = (affected && affected.open == 2 && affected.burn_dam > 0 && target_zone != "mouth")
+
+ if(!limb_can_operate)
+ return 0
+
+ if(istype(C))
+ if(!C.can_use(10))
+ user << "You need ten or more cable pieces to repair this damage. " //usage amount made more consistent with regular cable repair
+ return SURGERY_FAILURE
+ C.use(10)
+ return 1
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = target.get_organ(target_zone)
@@ -187,13 +190,13 @@
user.visible_message("[user] finishes splicing cable into [target]'s [affected.name]. ", \
"You finishes splicing new cable into [target]'s [affected.name]. ")
affected.heal_damage(0,rand(30,50),1,1)
+ affected.disfigured = 0
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = target.get_organ(target_zone)
user.visible_message("[user] causes a short circuit in [target]'s [affected.name]! ",
"You cause a short circuit in [target]'s [affected.name]! ")
target.apply_damage(rand(5,10), BURN, affected)
- affected.disfigured = 0
/datum/surgery_step/robotics/fix_organ_robotic //For artificial organs
allowed_tools = list(
@@ -213,7 +216,7 @@
if(!affected) return
var/is_organ_damaged = 0
for(var/obj/item/organ/I in affected.internal_organs)
- if(I.damage > 0 && (I.status & ORGAN_ROBOT))
+ if(I.damage > 0 && (I.robotic >= ORGAN_ROBOT))
is_organ_damaged = 1
break
return affected.open == 3 && is_organ_damaged
@@ -226,7 +229,7 @@
for(var/obj/item/organ/I in affected.internal_organs)
if(I && I.damage > 0)
- if(I.status & ORGAN_ROBOT)
+ if(I.robotic >= ORGAN_ROBOT)
user.visible_message("[user] starts mending the damage to [target]'s [I.name]'s mechanisms.", \
"You start mending the damage to [target]'s [I.name]'s mechanisms." )
@@ -242,7 +245,7 @@
for(var/obj/item/organ/I in affected.internal_organs)
if(I && I.damage > 0)
- if(I.status & ORGAN_ROBOT)
+ if(I.robotic >= ORGAN_ROBOT)
user.visible_message("[user] repairs [target]'s [I.name] with [tool]. ", \
"You repair [target]'s [I.name] with [tool]. " )
I.damage = 0
@@ -277,7 +280,7 @@
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = target.get_organ(target_zone)
- if(!(affected && (affected.status & ORGAN_ROBOT)))
+ if(!(affected && (affected.robotic >= ORGAN_ROBOT)))
return 0
if(affected.open < 3)
return 0
@@ -326,7 +329,7 @@
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = target.get_organ(target_zone)
- if(!(affected && (affected.status & ORGAN_ROBOT)))
+ if(!(affected && (affected.robotic >= ORGAN_ROBOT)))
return 0
if(affected.open < 3)
return 0
@@ -336,7 +339,7 @@
var/list/removable_organs = list()
for(var/organ in target.internal_organs_by_name)
var/obj/item/organ/I = target.internal_organs_by_name[organ]
- if(I && (I.status & ORGAN_CUT_AWAY) && (I.status & ORGAN_ROBOT) && I.parent_organ == target_zone)
+ if(I && (I.status & ORGAN_CUT_AWAY) && (I.robotic >= ORGAN_ROBOT) && I.parent_organ == target_zone)
removable_organs |= organ
var/organ_to_replace = input(user, "Which organ do you want to reattach?") as null|anything in removable_organs
@@ -388,12 +391,11 @@
user << "That brain is not usable. "
return SURGERY_FAILURE
- if(!(affected.status & ORGAN_ROBOT))
+ if(!(affected.robotic >= ORGAN_ROBOT))
user << "You cannot install a computer brain into a meat skull. "
return SURGERY_FAILURE
if(!target.should_have_organ("brain"))
-
user << "You're pretty sure [target.species.name_plural] don't normally have a brain. "
return SURGERY_FAILURE
@@ -425,6 +427,20 @@
if(M.brainmob && M.brainmob.mind)
M.brainmob.mind.transfer_to(target)
+ spawn(0) //Name yourself on your own damn time
+ var/new_name = ""
+ while(!new_name)
+ if(!target) return
+ var/try_name = input(target,"Pick a name for your new form!", "New Name", target.name)
+ var/clean_name = sanitizeName(try_name)
+ if(clean_name)
+ var/okay = alert(target,"New name will be '[clean_name]', ok?", "Cancel", "Ok")
+ if(okay == "Ok")
+ new_name = clean_name
+
+ target.name = new_name
+ target.real_name = target.name
+
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
user.visible_message("[user]'s hand slips. ", \
- "Your hand slips. ")
\ No newline at end of file
+ "Your hand slips. ")
diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm
index cc56b311b5..109da96b69 100644
--- a/code/modules/surgery/surgery.dm
+++ b/code/modules/surgery/surgery.dm
@@ -68,7 +68,7 @@
proc/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
return null
-proc/spread_germs_to_organ(var/obj/item/organ/external/E, var/mob/living/carbon/human/user)
+/proc/spread_germs_to_organ(var/obj/item/organ/external/E, var/mob/living/carbon/human/user)
if(!istype(user) || !istype(E)) return
var/germ_level = user.germ_level
@@ -77,7 +77,7 @@ proc/spread_germs_to_organ(var/obj/item/organ/external/E, var/mob/living/carbon/
E.germ_level = max(germ_level,E.germ_level) //as funny as scrubbing microbes out with clean gloves is - no.
-proc/do_surgery(mob/living/carbon/M, mob/living/user, obj/item/tool)
+/obj/item/proc/do_surgery(mob/living/carbon/M, mob/living/user)
if(!istype(M))
return 0
if (user.a_intent == I_HURT) //check for Hippocratic Oath
@@ -88,18 +88,18 @@ proc/do_surgery(mob/living/carbon/M, mob/living/user, obj/item/tool)
return 1
for(var/datum/surgery_step/S in surgery_steps)
//check if tool is right or close enough and if this step is possible
- if(S.tool_quality(tool))
- var/step_is_valid = S.can_use(user, M, zone, tool)
+ if(S.tool_quality(src))
+ var/step_is_valid = S.can_use(user, M, zone, src)
if(step_is_valid && S.is_valid_target(M))
if(step_is_valid == SURGERY_FAILURE) // This is a failure that already has a message for failing.
return 1
M.op_stage.in_progress += zone
- S.begin_step(user, M, zone, tool) //start on it
+ S.begin_step(user, M, zone, src) //start on it
//We had proper tools! (or RNG smiled.) and user did not move or change hands.
- if(prob(S.tool_quality(tool)) && do_mob(user, M, rand(S.min_duration, S.max_duration)))
- S.end_step(user, M, zone, tool) //finish successfully
- else if ((tool in user.contents) && user.Adjacent(M)) //or
- S.fail_step(user, M, zone, tool) //malpractice~
+ if(prob(S.tool_quality(src)) && do_mob(user, M, rand(S.min_duration, S.max_duration)))
+ S.end_step(user, M, zone, src) //finish successfully
+ else if ((src in user.contents) && user.Adjacent(M)) //or
+ S.fail_step(user, M, zone, src) //malpractice~
else // This failing silently was a pain.
user << "You must remain close to your patient to conduct surgery. "
M.op_stage.in_progress -= zone // Clear the in-progress flag.
@@ -109,11 +109,11 @@ proc/do_surgery(mob/living/carbon/M, mob/living/user, obj/item/tool)
return 1 //don't want to do weapony things after surgery
if (user.a_intent == I_HELP)
- user << "You can't see any useful way to use [tool] on [M]. "
+ user << "You can't see any useful way to use [src] on [M]. "
return 1
return 0
-proc/sort_surgeries()
+/proc/sort_surgeries()
var/gap = surgery_steps.len
var/swapped = 1
while (gap > 1 || swapped)
diff --git a/code/modules/tables/tables.dm b/code/modules/tables/tables.dm
index 1c6a9ca06d..12b9e26b48 100644
--- a/code/modules/tables/tables.dm
+++ b/code/modules/tables/tables.dm
@@ -51,8 +51,9 @@
visible_message("\The [src] breaks down! ")
return break_to_parts() // if we break and form shards, return them to the caller to do !FUN! things with
-/obj/structure/table/New()
+/obj/structure/table/initialize()
..()
+
// One table per turf.
for(var/obj/structure/table/T in loc)
if(T != src)
@@ -61,8 +62,6 @@
break_to_parts(full_return = 1)
return
-/obj/structure/table/initialize()
- ..()
// reset color/alpha, since they're set for nice map previews
color = "#ffffff"
alpha = 255
diff --git a/code/modules/virus2/admin.dm b/code/modules/virus2/admin.dm
index b36da37d6f..5769aa099e 100644
--- a/code/modules/virus2/admin.dm
+++ b/code/modules/virus2/admin.dm
@@ -21,7 +21,7 @@
. += "[E.stage]: [E.effect.name]"
return {"
[name()]
- [list2text(., " ")]
+ [jointext(., " ")]
"}
/datum/disease2/disease/get_view_variables_options()
diff --git a/code/modules/virus2/disease2.dm b/code/modules/virus2/disease2.dm
index b6e56d231b..9af07c48b6 100644
--- a/code/modules/virus2/disease2.dm
+++ b/code/modules/virus2/disease2.dm
@@ -210,7 +210,7 @@ var/global/list/virusDB = list()
Antigen: [antigens2string(antigen)]
Transmitted By: [spreadtype]
Rate of Progression: [stageprob * 10]
- Species Affected: [list2text(affected_species, ", ")]
+ Species Affected: [jointext(affected_species, ", ")]
"}
r += "Symptoms: "
diff --git a/code/modules/virus2/diseasesplicer.dm b/code/modules/virus2/diseasesplicer.dm
index 7162144861..8d88639db3 100644
--- a/code/modules/virus2/diseasesplicer.dm
+++ b/code/modules/virus2/diseasesplicer.dm
@@ -52,7 +52,7 @@
if (memorybank)
data["buffer"] = list("name" = (analysed ? memorybank.effect.name : "Unknown Symptom"), "stage" = memorybank.effect.stage)
if (species_buffer)
- data["species_buffer"] = analysed ? list2text(species_buffer, ", ") : "Unknown Species"
+ data["species_buffer"] = analysed ? jointext(species_buffer, ", ") : "Unknown Species"
if (splicing)
data["busy"] = "Splicing..."
@@ -65,7 +65,7 @@
if (dish.virus2)
if (dish.virus2.affected_species)
- data["affected_species"] = dish.analysed ? list2text(dish.virus2.affected_species, ", ") : "Unknown"
+ data["affected_species"] = dish.analysed ? jointext(dish.virus2.affected_species, ", ") : "Unknown"
if (dish.growth >= 50)
var/list/effects[0]
@@ -109,7 +109,7 @@
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.name = "[jointext(species_buffer, ", ")] GNA disk"
d.species = species_buffer
else
if (memorybank)
diff --git a/code/modules/virus2/effect.dm b/code/modules/virus2/effect.dm
index 0d6e696b5e..8ca82b96a1 100644
--- a/code/modules/virus2/effect.dm
+++ b/code/modules/virus2/effect.dm
@@ -292,7 +292,7 @@
else
data = pick("bicaridine", "kelotane", "anti_toxin", "inaprovaline", "space_drugs", "sugar",
"tramadol", "dexalin", "cryptobiolin", "impedrezene", "hyperzine", "ethylredoxrazine",
- "mindbreaker", "nutriment")
+ "mindbreaker", "glucose")
var/datum/reagent/R = chemical_reagents_list[data]
name = "[initial(name)] ([initial(R.name)])"
diff --git a/code/modules/xenobio2/_xeno_setup.dm b/code/modules/xenobio2/_xeno_setup.dm
new file mode 100644
index 0000000000..e77230b3e5
--- /dev/null
+++ b/code/modules/xenobio2/_xeno_setup.dm
@@ -0,0 +1,217 @@
+//Important definitions for xenos, traits datum.
+
+//Definitions for gene grouping.
+#define GENE_XENO_BIOCHEMISTRY "biochemistry"
+#define GENE_XENO_HEALTH "health"
+#define GENE_XENO_RESISTANCES "resistances"
+#define GENE_XENO_INTERNAL "internal"
+#define GENE_XENO_COLOR "color"
+#define GENE_XENO_GLOW "glow"
+#define GENE_XENO_LEARN "learn"
+#define GENE_XENO_SPEAK "speak"
+#define GENE_XENO_SPEED "speed"
+#define GENE_XENO_SPECIAL "special"
+
+#define ALL_XENO_GENES list(GENE_XENO_BIOCHEMISTRY, GENE_XENO_HEALTH, GENE_XENO_RESISTANCES, GENE_XENO_INTERNAL, GENE_XENO_COLOR, GENE_XENO_LEARN, GENE_XENO_SPEAK, GENE_XENO_SPEED, GENE_XENO_SPECIAL)
+
+//Definitions for traits.
+
+#define TRAIT_XENO_COLOR "color"
+#define TRAIT_XENO_CHEMISTRY "chems"
+#define TRAIT_XENO_CHEMVOL "chem_vol"
+#define TRAIT_XENO_HEALTH "health"
+#define TRAIT_XENO_HUNGER "hunger"
+#define TRAIT_XENO_STARVEDAMAGE "starvedamage"
+#define TRAIT_XENO_EATS "eats"
+#define TRAIT_XENO_CHROMATIC "chrom"
+#define TRAIT_XENO_HOSTILE "hostile"
+#define TRAIT_XENO_BIOLUMESCENT "biolum"
+#define TRAIT_XENO_BIO_COLOR "biocolor"
+#define TRAIT_XENO_GLOW_STRENGTH "biostrength"
+#define TRAIT_XENO_GLOW_RANGE "biorange"
+#define TRAIT_XENO_TOXIC_CHEMS "tox_chems"
+#define TRAIT_XENO_NUTRITIONAL_CHEMS "nutr_chems"
+#define TRAIT_XENO_HEALING_CHEMS "heal_chems"
+#define TRAIT_XENO_MUTATING_CHEMS "mut_chems"
+#define TRAIT_XENO_SPEED "speed"
+#define TRAIT_XENO_COLDRES "cold_resistance"
+#define TRAIT_XENO_HEATRES "heat_resistance"
+#define TRAIT_XENO_LEARNCHANCE "learn_chance"
+#define TRAIT_XENO_CANLEARN "can_learn"
+#define TRAIT_XENO_SPEAKCHANCE "speak_chance"
+#define TRAIT_XENO_CANSPEAK "can_speak"
+#define TRAIT_XENO_STRENGTH "melee_strength"
+#define TRAIT_XENO_STR_RANGE "melee_range"
+
+//Maleability defines.
+#define MAX_MALEABLE 2
+#define MINOR_MALEABLE 1
+#define MIN_MALEABLE 0
+
+var/global/list/xenoChemList = list("mutationtoxin",
+ "psilocybin",
+ "mindbreaker",
+ "impedrezene",
+ "cryptobiolin",
+ "space_drugs",
+ "chloralhydrate",
+ "stoxin",
+ "mutagen",
+ "lexorin",
+ "pacid",
+ "cyanide",
+ "phoron",
+ "plasticide",
+ "amatoxin",
+ "carbon",
+ "radium",
+ "sacid",
+ "sugar",
+ "kelotane",
+ "dermaline",
+ "anti_toxin",
+ "dexalin",
+ "synaptizine",
+ "alkysine",
+ "imidazoline",
+ "peridaxon",
+ "rezadone",
+ "mutationtoxin",
+ "docilitytoxin")
+
+/datum/xeno/traits
+ var/list/traits = list()
+ var/list/chemlist = list()
+ var/list/chems = list()
+ var/source = "unknown"
+
+/datum/xeno/traits/proc/set_trait(var/trait, var/newval)
+ traits["[trait]"] = newval
+ return
+
+/datum/xeno/traits/proc/get_trait(var/trait)
+ var/val = traits["[trait]"]
+ return val
+
+/datum/xeno/traits/proc/copy_traits(var/datum/xeno/traits/target)
+ target.traits = traits
+ target.chemlist = chemlist
+ target.chems = chems
+ target.source = source
+
+/datum/xeno/traits/New()
+ ..()
+ set_trait(TRAIT_XENO_COLOR, "#CACACA")
+ set_trait(TRAIT_XENO_CHEMVOL, 100)
+ set_trait(TRAIT_XENO_HEALTH, 20)
+ set_trait(TRAIT_XENO_HUNGER, 2)
+ set_trait(TRAIT_XENO_STARVEDAMAGE, 0)
+ set_trait(TRAIT_XENO_EATS, 1)
+ set_trait(TRAIT_XENO_CHROMATIC, 0)
+ set_trait(TRAIT_XENO_HOSTILE, 0)
+ set_trait(TRAIT_XENO_BIOLUMESCENT, 0)
+ set_trait(TRAIT_XENO_BIO_COLOR, "#CACACA")
+ set_trait(TRAIT_XENO_GLOW_STRENGTH, 0)
+ set_trait(TRAIT_XENO_GLOW_RANGE, 0)
+ set_trait(TRAIT_XENO_SPEED, 4)
+ set_trait(TRAIT_XENO_COLDRES, 20)
+ set_trait(TRAIT_XENO_HEATRES, 20)
+ set_trait(TRAIT_XENO_LEARNCHANCE, 100)
+ set_trait(TRAIT_XENO_CANLEARN, 1)
+ set_trait(TRAIT_XENO_SPEAKCHANCE, 1)
+ set_trait(TRAIT_XENO_CANSPEAK, 1)
+ set_trait(TRAIT_XENO_STRENGTH, 0)
+ set_trait(TRAIT_XENO_STR_RANGE, 0)
+
+/datum/xeno/traits/proc/get_gene(var/genetype)
+
+ if(!genetype) return 0
+
+ var/datum/xeno/genes/G = new()
+ G.genetype = genetype
+ G.values = list()
+
+ switch(genetype)
+ if(GENE_XENO_BIOCHEMISTRY)
+ G.values["[TRAIT_XENO_CHEMVOL]"] = get_trait(TRAIT_XENO_CHEMVOL)
+ G.chems = chems
+ if(GENE_XENO_HEALTH)
+ G.values["[TRAIT_XENO_HEALTH]"] = get_trait(TRAIT_XENO_HEALTH)
+ G.values["[TRAIT_XENO_STRENGTH]"] = get_trait(TRAIT_XENO_STRENGTH)
+ G.values["[TRAIT_XENO_STR_RANGE]"] = get_trait(TRAIT_XENO_STR_RANGE)
+ if(GENE_XENO_RESISTANCES)
+ G.values["[TRAIT_XENO_COLDRES]"] = get_trait(TRAIT_XENO_HEALTH)
+ G.values["[TRAIT_XENO_HEATRES]"] = get_trait(TRAIT_XENO_STRENGTH)
+ if(GENE_XENO_INTERNAL)
+ G.values["[TRAIT_XENO_NUTRITIONAL_CHEMS]"] = get_trait(TRAIT_XENO_NUTRITIONAL_CHEMS)
+ G.values["[TRAIT_XENO_HEALING_CHEMS]"] = get_trait(TRAIT_XENO_HEALING_CHEMS)
+ G.values["[TRAIT_XENO_TOXIC_CHEMS]"] = get_trait(TRAIT_XENO_TOXIC_CHEMS)
+ G.values["[TRAIT_XENO_MUTATING_CHEMS]"] = get_trait(TRAIT_XENO_MUTATING_CHEMS)
+ if(GENE_XENO_COLOR)
+ G.values["[TRAIT_XENO_COLOR]"] = get_trait(TRAIT_XENO_COLOR)
+ G.values["[TRAIT_XENO_BIO_COLOR]"] = get_trait(TRAIT_XENO_BIO_COLOR)
+ if(GENE_XENO_GLOW)
+ G.values["[TRAIT_XENO_BIOLUMESCENT]"] = get_trait(TRAIT_XENO_BIOLUMESCENT)
+ G.values["[TRAIT_XENO_GLOW_RANGE]"] = get_trait(TRAIT_XENO_GLOW_RANGE)
+ G.values["[TRAIT_XENO_GLOW_STRENGTH]"] = get_trait(TRAIT_XENO_GLOW_STRENGTH)
+ if(GENE_XENO_LEARN)
+ G.values["[TRAIT_XENO_LEARNCHANCE]"] = get_trait(TRAIT_XENO_LEARNCHANCE)
+ G.values["[TRAIT_XENO_CANLEARN]"] = get_trait(TRAIT_XENO_CANLEARN)
+ if(GENE_XENO_SPEAK)
+ G.values["[TRAIT_XENO_SPEAKCHANCE]"] = get_trait(TRAIT_XENO_SPEAKCHANCE)
+ G.values["[TRAIT_XENO_CANSPEAK]"] = get_trait(TRAIT_XENO_CANSPEAK)
+ if(GENE_XENO_SPEED)
+ G.values["[TRAIT_XENO_SPEED]"] = get_trait(TRAIT_XENO_SPEED)
+ if(GENE_XENO_SPECIAL)
+ G.values["[TRAIT_XENO_HOSTILE]"] = get_trait(TRAIT_XENO_HOSTILE)
+ G.values["[TRAIT_XENO_CHROMATIC]"] = get_trait(TRAIT_XENO_CHROMATIC)
+
+ return G
+
+/datum/xeno/traits/proc/apply_gene(var/datum/xeno/genes/genes)
+ if(!genes.genetype) return 0
+
+ switch(genes.genetype)
+ if(GENE_XENO_BIOCHEMISTRY)
+ set_trait(TRAIT_XENO_CHEMVOL, genes.values["[TRAIT_XENO_CHEMVOL]"])
+ for(var/reagent in genes.chems)
+ chems[reagent] = genes[reagent]
+
+ if(GENE_XENO_HEALTH)
+ set_trait(TRAIT_XENO_HEALTH, genes.values["[TRAIT_XENO_HEALTH]"])
+ set_trait(TRAIT_XENO_STRENGTH, genes.values["[TRAIT_XENO_STRENGTH]"])
+ set_trait(TRAIT_XENO_STR_RANGE, genes.values["[TRAIT_XENO_STR_RANGE]"])
+ if(GENE_XENO_RESISTANCES)
+ set_trait(TRAIT_XENO_COLDRES, genes.values["[TRAIT_XENO_COLDRES]"])
+ set_trait(TRAIT_XENO_HEATRES, genes.values["[TRAIT_XENO_HEATRES]"])
+ if(GENE_XENO_INTERNAL)
+ set_trait(TRAIT_XENO_NUTRITIONAL_CHEMS, genes.values["[TRAIT_XENO_NUTRITIONAL_CHEMS]"])
+ set_trait(TRAIT_XENO_HEALING_CHEMS, genes.values["[TRAIT_XENO_HEALING_CHEMS]"])
+ set_trait(TRAIT_XENO_TOXIC_CHEMS, genes.values["[TRAIT_XENO_TOXIC_CHEMS]"])
+ set_trait(TRAIT_XENO_MUTATING_CHEMS, genes.values["[TRAIT_XENO_MUTATING_CHEMS]"])
+ if(GENE_XENO_COLOR)
+ set_trait(TRAIT_XENO_COLOR, genes.values["[TRAIT_XENO_COLOR]"])
+ set_trait(TRAIT_XENO_BIO_COLOR, genes.values["[TRAIT_XENO_BIO_COLOR]"])
+ if(GENE_XENO_GLOW)
+ set_trait(TRAIT_XENO_BIOLUMESCENT, genes.values["[TRAIT_XENO_BIOLUMESCENT]"])
+ set_trait(TRAIT_XENO_GLOW_RANGE, genes.values["[TRAIT_XENO_GLOW_RANGE]"])
+ set_trait(TRAIT_XENO_GLOW_STRENGTH, genes.values["[TRAIT_XENO_GLOW_STRENGTH]"])
+ if(GENE_XENO_LEARN)
+ set_trait(TRAIT_XENO_LEARNCHANCE, genes.values["[TRAIT_XENO_LEARNCHANCE]"])
+ set_trait(TRAIT_XENO_CANLEARN, genes.values["[TRAIT_XENO_CANLEARN]"])
+ if(GENE_XENO_SPEAK)
+ set_trait(TRAIT_XENO_SPEAKCHANCE, genes.values["[TRAIT_XENO_SPEAKCHANCE]"])
+ set_trait(TRAIT_XENO_CANSPEAK, genes.values["[TRAIT_XENO_CANSPEAK]"])
+ if(GENE_XENO_SPEED)
+ set_trait(TRAIT_XENO_SPEED ,genes.values["[TRAIT_XENO_SPEED]"])
+ if(GENE_XENO_SPECIAL)
+ set_trait(TRAIT_XENO_HOSTILE, genes.values["[TRAIT_XENO_HOSTILE]"])
+ set_trait(TRAIT_XENO_CHROMATIC, genes.values["[TRAIT_XENO_CHROMATIC]"])
+
+/datum/xeno/genes
+ var/genetype //Label for specifying what gene is used.
+ var/list/values //What's going to be put into specific traits
+ var/list/chems
+
+
+
\ No newline at end of file
diff --git a/code/modules/xenobio2/controller.dm b/code/modules/xenobio2/controller.dm
new file mode 100644
index 0000000000..112d667c0f
--- /dev/null
+++ b/code/modules/xenobio2/controller.dm
@@ -0,0 +1,44 @@
+//Used to create the gene mask. Shamelessly stolen from the plant controller and cut down.
+
+/client/proc/show_xenobio_genes()
+ set category = "Debug"
+ set name = "Show Xenobio Genes"
+ set desc = "Prints the round's plant xenobio masks."
+
+ if(!holder) return
+
+ if(!xenobio_controller || !xenobio_controller.gene_tag_masks)
+ usr << "Gene masks not set."
+ return
+
+ for(var/mask in xenobio_controller.gene_tag_masks)
+ usr << "[mask]: [xenobio_controller.gene_tag_masks[mask]]"
+
+var/global/datum/controller/xenobio/xenobio_controller // Set in New().
+
+/datum/controller/xenobio
+
+ var/list/gene_tag_masks = list() // Gene obfuscation for delicious trial and error goodness.
+
+/datum/controller/xenobio/New()
+ if(xenobio_controller && xenobio_controller != src)
+ log_debug("Rebuilding xenobio controller.")
+ qdel(xenobio_controller)
+ xenobio_controller = src
+ setup()
+
+
+/datum/controller/xenobio/proc/setup()
+
+ var/list/used_masks = list()
+ var/list/xenobio_traits = ALL_XENO_GENES
+ while(xenobio_traits && xenobio_traits.len)
+ var/gene_tag = pick(xenobio_traits)
+ var/gene_mask = "[uppertext(num2hex(rand(0,255)))]"
+
+ while(gene_mask in used_masks)
+ gene_mask = "[uppertext(num2hex(rand(0,255)))]"
+
+ used_masks += gene_mask
+ xenobio_traits -= gene_tag
+ gene_tag_masks[gene_tag] = gene_mask
\ No newline at end of file
diff --git a/code/modules/xenobio2/machinery/core_extractor.dm b/code/modules/xenobio2/machinery/core_extractor.dm
new file mode 100644
index 0000000000..b50e42acd6
--- /dev/null
+++ b/code/modules/xenobio2/machinery/core_extractor.dm
@@ -0,0 +1,195 @@
+/*
+ Here lives the slime core extractor
+ This machine extracts slime cores at the cost of the slime itself.
+ To create more of these slimes, stick the slime core in the extractor.
+*/
+/obj/machinery/slime/extractor
+ name = "Slime extractor"
+ desc = "A machine for cutting up slimes to get to their cores."
+ icon = 'icons/obj/xenoarchaeology.dmi'
+ icon_state = "scanner_0old"
+ density = 1
+ anchored = 1
+ circuit = /obj/item/weapon/circuitboard/slimeextractor
+ var/inuse
+ var/mob/living/simple_animal/xeno/slime/occupant = null
+ var/occupiedcolor = "#22FF22"
+ var/emptycolor = "#FF2222"
+ var/operatingcolor = "#FFFF22"
+
+
+/obj/machinery/slime/extractor/New()
+ ..()
+ update_light_color()
+ circuit = new circuit(src)
+ component_parts = list()
+ component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
+ component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
+ component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
+ component_parts += new /obj/item/weapon/stock_parts/micro_laser(src)
+ component_parts += new /obj/item/weapon/stock_parts/micro_laser(src)
+ RefreshParts()
+
+/obj/machinery/slime/extractor/attackby(var/obj/item/W, var/mob/user)
+
+ //Let's try to deconstruct first.
+ if(istype(W, /obj/item/weapon/screwdriver) && !inuse)
+ default_deconstruction_screwdriver(user, W)
+ return
+
+ if(istype(W, /obj/item/weapon/crowbar))
+ default_deconstruction_crowbar(user, W)
+ return
+
+ if(panel_open)
+ user << "Close the panel first! "
+
+ var/obj/item/weapon/grab/G = W
+
+ if(!istype(G))
+ return ..()
+
+ if(G.state < 2)
+ user << "You need a better grip to do that! "
+ return
+
+ move_into_extractor(user,G.affecting)
+
+/obj/machinery/slime/extractor/MouseDrop_T(mob/target, mob/user)
+ if(user.stat || user.restrained())
+ return
+ move_into_extractor(user,target)
+
+/obj/machinery/slime/extractor/proc/move_into_extractor(var/mob/user,var/mob/living/victim)
+
+ if(src.occupant)
+ user << "The core extractor is full, empty it first! "
+ return
+
+ if(inuse)
+ user << "The core extractor is locked and running, wait for it to finish. "
+ return
+
+ if(!(istype(victim, /mob/living/simple_animal/xeno/slime)) )
+ user << "This is not a suitable subject for the core extractor! "
+ return
+
+ var/mob/living/simple_animal/xeno/slime/S = victim
+ if(S.is_child)
+ user << "This subject is not developed enough for the core extractor! "
+ return
+
+ user.visible_message("[user] starts to put [victim] into the core extractor! ")
+ src.add_fingerprint(user)
+ if(do_after(user, 30) && victim.Adjacent(src) && user.Adjacent(src) && victim.Adjacent(user) && !occupant)
+ user.visible_message("[user] stuffs [victim] into the core extractor! ")
+ if(victim.client)
+ victim.client.perspective = EYE_PERSPECTIVE
+ victim.client.eye = src
+ victim.forceMove(src)
+ src.occupant = victim
+ update_light_color()
+
+/obj/machinery/slime/extractor/proc/update_light_color()
+ if(src.occupant && !(inuse))
+ set_light(2, 2, occupiedcolor)
+ else if(src.occupant)
+ set_light(2, 2, operatingcolor)
+ else
+ set_light(2, 2, emptycolor)
+
+/obj/machinery/slime/extractor/proc/extract_cores()
+ if(!src.occupant)
+ src.visible_message("\icon[src] [src] pings unhappily.")
+ else if(inuse)
+ return
+
+ inuse = 1
+ update_light_color()
+ spawn(30)
+ icon_state = "scanner_1old"
+ for(var/i=1 to occupant.cores)
+ var/obj/item/xenoproduct/slime/core/C = new(src)
+ C.traits = new()
+ occupant.traitdat.copy_traits(C.traits)
+
+ C.nameVar = occupant.nameVar
+
+ C.create_reagents(C.traits.traits[TRAIT_XENO_CHEMVOL])
+ for(var/reagent in occupant.traitdat.chems)
+ C.reagents.add_reagent(reagent, occupant.traitdat.chems[reagent])
+
+ C.color = C.traits.traits[TRAIT_XENO_COLOR]
+ if(occupant.traitdat.get_trait(TRAIT_XENO_BIOLUMESCENT))
+ C.set_light(occupant.traitdat.get_trait(TRAIT_XENO_GLOW_STRENGTH),occupant.traitdat.get_trait(TRAIT_XENO_GLOW_RANGE), occupant.traitdat.get_trait(TRAIT_XENO_BIO_COLOR))
+
+ spawn(30)
+ icon_state = "scanner_0old"
+ qdel(occupant)
+ occupant = null //If qdel's being slow or acting up, let's make sure we can't make more cores from this one.
+ inuse = 0
+ eject_contents()
+ update_light_color()
+ src.updateUsrDialog()
+
+/obj/machinery/slime/extractor/proc/eject_slime()
+ if(occupant)
+ occupant.forceMove(loc)
+ occupant = null
+
+/obj/machinery/slime/extractor/proc/eject_core()
+ for(var/obj/thing in (contents - component_parts - circuit))
+ thing.forceMove(loc)
+
+/obj/machinery/slime/extractor/proc/eject_contents()
+ eject_core()
+ eject_slime()
+
+//Here lies the UI
+/obj/machinery/slime/extractor/attack_hand(mob/user as mob)
+ user.set_machine(src)
+ interact(user)
+
+/obj/machinery/slime/extractor/interact(mob/user as mob)
+ var/dat = ""
+ if(!inuse)
+ dat = {"
+ Slime held:
+ [occupant]
+ "}
+ if (occupant && !(stat & (NOPOWER|BROKEN)))
+ dat += "Start the core extraction. "
+ if(occupant)
+ dat += "Eject the slime "
+ else
+ dat += "Please wait..."
+ var/datum/browser/popup = new(user, "Slime Extractor", "Slime Extractor", src)
+ popup.set_content(dat)
+ popup.open()
+ return
+
+
+/obj/machinery/slime/extractor/Topic(href, href_list)
+ if(..())
+ return
+ usr.set_machine(src)
+ switch(href_list["action"])
+ if ("extract")
+ extract_cores()
+ if("eject")
+ eject_slime()
+ src.updateUsrDialog()
+ return
+
+//Circuit board below,
+/obj/item/weapon/circuitboard/slimeextractor
+ name = T_BOARD("Slime extractor")
+ build_path = "/obj/machinery/slime/extractor"
+ board_type = "machine"
+ origin_tech = list(TECH_DATA = 3, TECH_BIO = 3)
+ req_components = list(
+ /obj/item/weapon/stock_parts/manipulator = 2,
+ /obj/item/weapon/stock_parts/matter_bin = 1,
+ /obj/item/weapon/stock_parts/micro_laser = 2
+ )
+
\ No newline at end of file
diff --git a/code/modules/xenobio2/machinery/gene_manipulators.dm b/code/modules/xenobio2/machinery/gene_manipulators.dm
new file mode 100644
index 0000000000..c8bd8d374c
--- /dev/null
+++ b/code/modules/xenobio2/machinery/gene_manipulators.dm
@@ -0,0 +1,430 @@
+/*
+ This file contains:
+
+ Xenobiological disk:
+ Holds traits that can be taken from cores and transplanted into slimes.
+
+ Biological Product Destructive Analyzer:
+ Takes certain traits in gene grouping from a core and places them into a disk.
+
+ Biological genetic bombarder:
+ Takes traits from a disk and replaces/adds to the genes in a xenobiological creature.
+*/
+/obj/item/weapon/disk/xenobio
+ name = "biological data disk"
+ desc = "A small disk used for carrying data on genetics."
+ icon = 'icons/obj/hydroponics_machines.dmi'
+ icon_state = "disk"
+ w_class = 1.0
+
+ var/list/genes = list()
+ var/genesource = "unknown"
+
+/obj/item/weapon/disk/xenobio/attack_self(var/mob/user as mob)
+ if(genes.len)
+ var/choice = alert(user, "Are you sure you want to wipe the disk?", "Xenobiological Data", "No", "Yes")
+ if(src && user && genes && choice && choice == "Yes" && user.Adjacent(get_turf(src)))
+ user << "You wipe the disk data."
+ name = initial(name)
+ desc = initial(name)
+ genes = list()
+ genesource = "unknown"
+
+/obj/item/weapon/storage/box/xenobiodisk
+ name = "biological disk box"
+ desc = "A box of biological data disks, apparently."
+
+/obj/item/weapon/storage/box/xenobiodisk/New()
+ ..()
+ for(var/i = 0 to 7)
+ new /obj/item/weapon/disk/xenobio(src)
+
+/obj/machinery/xenobio
+ density = 1
+ anchored = 1
+ use_power = 1
+
+ var/obj/item/weapon/disk/xenobio/loaded_disk //Currently loaded data disk.
+
+ var/open = 0
+ var/active = 0
+ var/action_time = 5
+ var/last_action = 0
+ var/eject_disk = 0
+ var/failed_task = 0
+ var/disk_needs_genes = 0
+
+/obj/machinery/xenobio/attack_ai(mob/user as mob)
+ return attack_hand(user)
+
+/obj/machinery/xenobio/attack_hand(mob/user as mob)
+ ui_interact(user)
+
+/obj/machinery/xenobio/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ if(default_deconstruction_screwdriver(user, W))
+ return
+ if(default_deconstruction_crowbar(user, W))
+ return
+ if(istype(W,/obj/item/weapon/disk/xenobio))
+ if(loaded_disk)
+ user << "There is already a data disk loaded."
+ return
+ else
+ var/obj/item/weapon/disk/xenobio/B = W
+
+ if(B.genes && B.genes.len)
+ if(!disk_needs_genes)
+ user << "That disk already has gene data loaded."
+ return
+ else
+ if(disk_needs_genes)
+ user << "That disk does not have any gene data loaded."
+ return
+
+ user.drop_from_inventory(W)
+ W.forceMove(src)
+ loaded_disk = W
+ user << "You load [W] into [src]."
+
+ return
+ ..()
+
+/obj/machinery/xenobio/process()
+
+ ..()
+ if(!active) return
+
+ if(world.time > last_action + action_time)
+ finished_task()
+
+/obj/machinery/xenobio/proc/finished_task()
+ active = 0
+ in_use = 0
+ if(failed_task)
+ failed_task = 0
+ visible_message("\icon[src] [src] pings unhappily, flashing a red warning light.")
+ else
+ visible_message("\icon[src] [src] pings happily.")
+
+ if(eject_disk)
+ eject_disk = 0
+ if(loaded_disk)
+ loaded_disk.forceMove(get_turf(src))
+ visible_message("\icon[src] [src] beeps and spits out [loaded_disk].")
+ loaded_disk = null
+
+/obj/machinery/xenobio/extractor
+ name = "biological product destructive analyzer"
+ icon = 'icons/obj/hydroponics_machines.dmi'
+ icon_state = "traitcopier"
+ circuit = /obj/item/weapon/circuitboard/bioproddestanalyzer
+
+ var/obj/item/xenoproduct/product
+ var/datum/xeno/traits/genetics // Currently scanned xeno genetic structure.
+ var/degradation = 0 // Increments with each scan, stops allowing gene mods after a certain point.
+
+/obj/machinery/xenobio/extractor/New()
+ ..()
+ circuit = new circuit(src)
+ component_parts = list()
+ component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
+ component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
+ component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
+ component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
+ component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
+ component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
+ RefreshParts()
+
+/obj/machinery/xenobio/extractor/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ if(istype(W,/obj/item/xenoproduct))
+ if(product)
+ user << "There is already a xenobiological product loaded."
+ return
+ else
+ var/obj/item/xenoproduct/B = W
+ user.drop_from_inventory(B)
+ B.forceMove(src)
+ product = B
+ user << "You load [B] into [src]."
+
+ return
+ ..()
+
+/obj/machinery/xenobio/extractor/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
+ if(!user)
+ return
+
+ var/list/data = list()
+
+ var/list/geneMasks[0]
+ for(var/gene_tag in xenobio_controller.gene_tag_masks)
+ geneMasks.Add(list(list("tag" = gene_tag, "mask" = xenobio_controller.gene_tag_masks[gene_tag])))
+ data["geneMasks"] = geneMasks
+
+ data["activity"] = active
+ data["degradation"] = degradation
+
+ if(loaded_disk)
+ data["disk"] = 1
+ else
+ data["disk"] = 0
+
+ if(product)
+ data["loaded"] = "[product.source] [product.product]"
+ else
+ data["loaded"] = 0
+
+ if(genetics)
+ data["hasGenetics"] = 1
+ data["sourceName"] = genetics.source
+ else
+ data["hasGenetics"] = 0
+ data["sourceName"] = 0
+
+ ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
+ if (!ui)
+ ui = new(user, src, ui_key, "xenobio_isolator.tmpl", "B.P.D. Analyzer UI", 470, 450)
+ ui.set_initial_data(data)
+ ui.open()
+ ui.set_auto_update(1)
+
+/obj/machinery/xenobio/proc/eject_disk()
+ if(!loaded_disk) return
+ loaded_disk.forceMove(loc)
+ visible_message("\icon[src] [src] beeps and spits out [loaded_disk].")
+ loaded_disk = null
+
+/obj/machinery/xenobio/extractor/Topic(href, href_list)
+
+ if(..())
+ return 1
+
+ if(href_list["eject_product"])
+ if(!product) return
+
+ product.forceMove(get_turf(src))
+ visible_message("\icon[src] [src] beeps and spits out [product].")
+ product = null
+
+ if(href_list["eject_disk"])
+ eject_disk()
+
+ if(href_list["scan_genome"])
+
+ if(!product) return
+
+ last_action = world.time
+ active = 1
+
+ if(product && product.product)
+ genetics = product.traits
+ degradation = 0
+
+ qdel(product)
+ product = null
+
+ if(href_list["get_gene"])
+
+ if(!genetics || !loaded_disk) return
+
+ last_action = world.time
+ active = 1
+
+ var/datum/xeno/genes/G = genetics.get_gene(href_list["get_gene"])
+ if(!G) return
+ loaded_disk.genes += G
+
+ loaded_disk.genesource = "[genetics.source]"
+
+ loaded_disk.name += " ([xenobio_controller.gene_tag_masks[href_list["get_gene"]]], [genetics.source])"
+ loaded_disk.desc += " The label reads \'gene [xenobio_controller.gene_tag_masks[href_list["get_gene"]]], sampled from [genetics.source]\'."
+ eject_disk = 1
+
+ degradation += rand(20,60)
+ if(degradation >= 100)
+ failed_task = 1
+ genetics = null
+ degradation = 0
+
+ if(href_list["clear_buffer"])
+ if(!genetics) return
+ genetics = null
+ degradation = 0
+
+ usr.set_machine(src)
+ src.add_fingerprint(usr)
+
+ src.updateUsrDialog()
+ return
+
+/obj/machinery/xenobio/editor
+ name = "biological genetic bombarder"
+ icon = 'icons/obj/cryogenics.dmi'
+ icon_state = "cellold0"
+ disk_needs_genes = 1
+ circuit = /obj/item/weapon/circuitboard/biobombarder
+
+ var/mob/living/simple_animal/xeno/slime/occupant
+
+/obj/machinery/xenobio/editor/New()
+ ..()
+ circuit = new circuit(src)
+ component_parts = list()
+ component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
+ component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
+ component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
+ component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
+ component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
+ component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
+ RefreshParts()
+
+/obj/machinery/xenobio/editor/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ if(istype(W,/obj/item/weapon/grab))
+ var/obj/item/weapon/grab/G = W
+ if(occupant)
+ user << "There is already an organism loaded."
+ return
+ else
+ if(isxeno(G.affecting))
+ var/mob/living/simple_animal/xeno/X = G.affecting
+ if(do_after(user, 30) && X.Adjacent(src) && user.Adjacent(src) && X.Adjacent(user) && !occupant)
+ user.drop_from_inventory(G)
+ X.forceMove(src)
+ occupant = X
+ user << "You load [X] into [src]."
+ else
+ user << "This specimen is incompatible with the machinery! "
+ return
+ ..()
+
+
+/obj/machinery/xenobio/editor/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
+
+ if(!user)
+ return
+
+ var/list/data = list()
+
+ data["activity"] = active
+
+ if(occupant)
+ data["degradation"] = occupant.stability
+ else
+ data["degradation"] = 0
+
+ if(loaded_disk && loaded_disk.genes.len)
+ data["disk"] = 1
+ data["sourceName"] = loaded_disk.genesource
+ data["locus"] = ""
+
+ for(var/datum/xeno/genes/X in loaded_disk.genes)
+ if(data["locus"] != "") data["locus"] += ", "
+ data["locus"] += "[xenobio_controller.gene_tag_masks[X.genetype]]"
+
+ else
+ data["disk"] = 0
+ data["sourceName"] = 0
+ data["locus"] = 0
+
+ if(occupant)
+ data["loaded"] = "[occupant]"
+ else
+ data["loaded"] = 0
+
+ ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
+ if (!ui)
+ ui = new(user, src, ui_key, "xenobio_editor.tmpl", "biological genetic bombarder UI", 470, 450)
+ ui.set_initial_data(data)
+ ui.open()
+ ui.set_auto_update(1)
+
+/obj/machinery/xenobio/editor/Topic(href, href_list)
+
+ if(..())
+ return 1
+
+ if(href_list["apply_gene"])
+ if(!loaded_disk || !occupant) return
+
+ last_action = world.time
+ active = 1
+ occupant.nameVar = "modified"
+
+ if(prob(occupant.stability))
+ failed_task = 1
+ occupant.stability = 101
+
+ for(var/datum/xeno/genes/gene in loaded_disk.genes)
+ occupant.traitdat.apply_gene(gene)
+ occupant.stability += rand(5,10)
+ occupant.ProcessTraits()
+
+ if(href_list["eject_disk"])
+ eject_disk()
+
+ if(href_list["eject_xeno"])
+ eject_xeno()
+
+ usr.set_machine(src)
+ src.add_fingerprint(usr)
+
+/obj/machinery/xenobio/editor/MouseDrop_T(mob/target, mob/user)
+ if(user.stat || user.restrained())
+ return
+ move_into_editor(user,target)
+
+/obj/machinery/xenobio/editor/proc/move_into_editor(var/mob/user,var/mob/living/victim)
+
+ if(src.occupant)
+ user << "The [src] is full, empty it first! "
+ return
+
+ if(in_use)
+ user << "The [src] is locked and running, wait for it to finish. "
+ return
+
+ if(!(istype(victim, /mob/living/simple_animal/xeno/slime)) )
+ user << "This is not a suitable subject for the [src]! "
+ return
+
+ user.visible_message("[user] starts to put [victim] into the [src]! ")
+ src.add_fingerprint(user)
+ if(do_after(user, 30) && victim.Adjacent(src) && user.Adjacent(src) && victim.Adjacent(user) && !occupant)
+ user.visible_message("[user] stuffs [victim] into the [src]! ")
+ if(victim.client)
+ victim.client.perspective = EYE_PERSPECTIVE
+ victim.client.eye = src
+ victim.forceMove(src)
+ occupant = victim
+
+/obj/machinery/xenobio/editor/proc/eject_contents()
+ eject_disk()
+ eject_xeno()
+
+/obj/machinery/xenobio/editor/proc/eject_xeno()
+ if(occupant)
+ occupant.forceMove(loc)
+ occupant = null
+
+/obj/item/weapon/circuitboard/bioproddestanalyzer
+ name = T_BOARD("biological product destructive analyzer")
+ build_path = "/obj/machinery/xenobio/extractor"
+ board_type = "machine"
+ origin_tech = list(TECH_DATA = 4, TECH_BIO = 4)
+ req_components = list(
+ /obj/item/weapon/stock_parts/manipulator = 2,
+ /obj/item/weapon/stock_parts/matter_bin = 1,
+ /obj/item/weapon/stock_parts/scanning_module = 3
+ )
+
+/obj/item/weapon/circuitboard/biobombarder
+ name = T_BOARD("biological genetic bombarder")
+ build_path = "/obj/machinery/xenobio/editor"
+ board_type = "machine"
+ origin_tech = list(TECH_DATA = 4, TECH_BIO = 4)
+ req_components = list(
+ /obj/item/weapon/stock_parts/manipulator = 2,
+ /obj/item/weapon/stock_parts/matter_bin = 2,
+ /obj/item/weapon/stock_parts/scanning_module = 2
+ )
+
\ No newline at end of file
diff --git a/code/modules/xenobio2/machinery/injector.dm b/code/modules/xenobio2/machinery/injector.dm
new file mode 100644
index 0000000000..7b482d5c1d
--- /dev/null
+++ b/code/modules/xenobio2/machinery/injector.dm
@@ -0,0 +1,146 @@
+/*
+ This file contains:
+
+ Manual Injector:
+ Manually injects chemicals into a xenobiological creature from a linked machine.
+
+*/
+/obj/machinery/xenobio2/manualinjector
+ name = "biological injector"
+ desc = "Injects biological organisms that are inserted with the contents of an inserted beaker at the command of a remote computer."
+ density = 1
+ anchored = 1
+ use_power = 1
+ icon = 'icons/obj/biogenerator.dmi'
+ icon_state = "biogen-work"
+ var/mob/living/occupant
+ var/obj/item/weapon/reagent_containers/glass/beaker
+ var/obj/machinery/computer/xenobio2/computer
+
+ circuit = /obj/item/weapon/circuitboard/xenobioinjectormachine
+
+/obj/machinery/xenobio2/manualinjector/New()
+ ..()
+ var/datum/reagents/R = new/datum/reagents(1000)
+ reagents = R
+ R.my_atom = src
+ beaker = new /obj/item/weapon/reagent_containers/glass/beaker(src)
+ circuit = new circuit(src)
+ component_parts = list()
+ component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
+ component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
+ component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
+ component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
+ RefreshParts()
+
+/obj/machinery/xenobio2/manualinjector/update_icon()
+ if(beaker)
+ if(occupant)
+ icon_state = "biogen-stand"
+ else
+ icon_state = "biogen-work"
+ else
+ icon_state = "biogen-empty"
+
+/obj/machinery/xenobio2/manualinjector/MouseDrop_T(mob/target, mob/user)
+ if(user.stat || user.restrained())
+ return
+ move_into_injector(user,target)
+
+/obj/machinery/xenobio2/manualinjector/proc/move_into_injector(var/mob/user,var/mob/living/victim)
+ if(src.occupant)
+ user << "The injector is full, empty it first! "
+ return
+
+ if(!(istype(victim, /mob/living/simple_animal/xeno)) && !emagged)
+ user << "This is not a suitable subject for the injector! "
+ return
+
+ user.visible_message("[user] starts to put [victim] into the injector! ")
+ src.add_fingerprint(user)
+ if(do_after(user, 30) && victim.Adjacent(src) && user.Adjacent(src) && victim.Adjacent(user) && !occupant)
+ user.visible_message("[user] stuffs [victim] into the injector! ")
+ if(victim.client)
+ victim.client.perspective = EYE_PERSPECTIVE
+ victim.client.eye = src
+ victim.forceMove(src)
+ src.occupant = victim
+
+/obj/machinery/xenobio2/manualinjector/proc/eject_contents()
+ eject_xeno()
+ eject_beaker()
+ return
+
+/obj/machinery/xenobio2/manualinjector/proc/eject_xeno()
+ if(occupant)
+ occupant.forceMove(loc)
+ occupant = null
+
+/obj/machinery/xenobio2/manualinjector/proc/eject_beaker()
+ if(beaker)
+ var/obj/item/weapon/reagent_containers/glass/beaker/B = beaker
+ B.loc = loc
+ beaker = null
+
+/obj/machinery/xenobio2/manualinjector/proc/inject_reagents()
+ if(!occupant)
+ return
+ if(isxeno(occupant))
+ var/mob/living/simple_animal/xeno/X = occupant
+ beaker.reagents.trans_to_holder(X.reagents, computer.transfer_amount, 1, 0)
+ else
+ beaker.reagents.trans_to_mob(occupant, computer.transfer_amount)
+
+/obj/machinery/xenobio2/manualinjector/attackby(var/obj/item/W, var/mob/user)
+
+ //Let's try to deconstruct first.
+ if(istype(W, /obj/item/weapon/screwdriver))
+ default_deconstruction_screwdriver(user, W)
+ return
+
+ if(istype(W, /obj/item/weapon/crowbar) && !occupant)
+ default_deconstruction_crowbar(user, W)
+ return
+
+ //are you smashing a beaker in me? Well then insert that shit!
+ if(istype(W, /obj/item/weapon/reagent_containers/glass/beaker))
+ beaker = W
+ user.drop_from_inventory(W)
+ W.loc = src
+ return
+
+ //Did you want to link it?
+ if(istype(W, /obj/item/device/multitool))
+ var/obj/item/device/multitool/P = W
+ if(P.connectable)
+ if(istype(P.connectable, /obj/machinery/computer/xenobio2))
+ var/obj/machinery/computer/xenobio2/C = P.connectable
+ computer = C
+ C.injector = src
+ user << " You link the [src] to the [P.connectable]! "
+ else
+ user << " You store the [src] in the [P]'s buffer! "
+ P.connectable = src
+ return
+
+ if(panel_open)
+ user << "Close the panel first! "
+
+ var/obj/item/weapon/grab/G = W
+
+ if(!istype(G))
+ return ..()
+
+ if(G.state < 2)
+ user << "You need a better grip to do that! "
+ return
+
+ move_into_injector(user,G.affecting)
+
+
+/obj/item/weapon/circuitboard/xenobioinjectormachine
+ name = T_BOARD("biological injector")
+ build_path = "/obj/machinery/xenobio2/manualinjector"
+ board_type = "machine"
+ origin_tech = list() //To be filled,
+ req_components = list() //To be filled,
\ No newline at end of file
diff --git a/code/modules/xenobio2/machinery/injector_computer.dm b/code/modules/xenobio2/machinery/injector_computer.dm
new file mode 100644
index 0000000000..7bcccd55ca
--- /dev/null
+++ b/code/modules/xenobio2/machinery/injector_computer.dm
@@ -0,0 +1,114 @@
+/*
+ This file contains:
+
+ Manual Injector:
+ Manually injects chemicals into a xenobiological creature from a linked machine.
+
+*/
+/obj/machinery/computer/xenobio2
+ name = "injector control console"
+ desc = "Used to control mechanized biological injectors."
+ icon_keyboard = "med_key"
+ icon_screen = "dna"
+ light_color = "#315ab4"
+ use_power = 1
+ idle_power_usage = 250
+ active_power_usage = 500
+ circuit = /obj/item/weapon/circuitboard/xenobio2computer
+ var/obj/machinery/xenobio2/manualinjector/injector
+ var/transfer_amount
+ var/active
+
+/obj/machinery/computer/xenobio2/Destroy()
+ ..()
+ injector.computer = null
+
+/obj/machinery/computer/xenobio2/attack_hand(mob/user)
+ if(..())
+ return 1
+ ui_interact(user)
+
+/obj/machinery/computer/xenobio2/attackby(var/obj/item/W, var/mob/user)
+
+ //Did you want to link it?
+ if(istype(W, /obj/item/device/multitool))
+ var/obj/item/device/multitool/P = W
+ if(P.connectable)
+ if(istype(P.connectable, /obj/machinery/xenobio2/manualinjector))
+ var/obj/machinery/xenobio2/manualinjector/I = P.connectable
+ injector = I
+ I.computer = src
+ user << " You link the [src] to the [P.connectable]! "
+ else
+ user << " You store the [src] in the [P]'s buffer! "
+ P.connectable = src
+ return
+
+ ..()
+
+/obj/machinery/computer/xenobio2/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
+ if(!user)
+ return
+ if(!injector)
+ return
+
+ var/list/data = list()
+
+ data["activity"] = active
+ data["beaker"] = injector.beaker
+ if(injector.occupant)
+ data["occupied"] = 1
+ if(isxeno(injector.occupant))
+ var/mob/living/simple_animal/xeno/X = injector.occupant
+ data["compatible"] = 1
+ data["instability"] = 100 * (X.mut_level / X.mut_max)
+ else
+ data["compatible"] = null
+
+ if(injector.beaker)
+ data["reagentAmount"] = injector.beaker.reagents.total_volume
+ data["reagentMax"] = injector.beaker.reagents.maximum_volume
+ data["reagentMin"] = 0
+ else
+ data["reagentAmount"] = null
+ data["reagentMax"] = 1
+ data["reagentMin"] = 0
+
+ if(injector.occupant)
+ data["occupantHealth"] = injector.occupant.health
+ data["occupantHealthMax"] = injector.occupant.maxHealth
+ else
+ data["occupantHealth"] = null
+ data["occupantHealthMax"] = null
+
+ ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
+ if (!ui)
+ ui = new(user, src, ui_key, "xenobio_computer.tmpl", "Injector Control Console UI", 470, 450)
+ ui.set_initial_data(data)
+ ui.open()
+ ui.set_auto_update(1)
+
+/obj/machinery/computer/xenobio2/Topic(href, href_list)
+
+ if(..())
+ return 1
+
+ if(href_list["inject_target"])
+ active = 1
+ spawn(5)
+ injector.inject_reagents()
+ active = 0
+ if(href_list["eject_occupant"])
+ injector.eject_xeno()
+
+ if(href_list["eject_beaker"])
+ injector.eject_beaker()
+
+ usr.set_machine(src)
+ src.add_fingerprint(usr)
+
+/obj/item/weapon/circuitboard/xenobio2computer
+ name = T_BOARD("injector control console")
+ build_path = "/obj/item/weapon/circuitboard/xenobio2computer"
+ board_type = "computer"
+ origin_tech = list() //To be filled,
diff --git a/code/modules/xenobio2/machinery/slime_replicator.dm b/code/modules/xenobio2/machinery/slime_replicator.dm
new file mode 100644
index 0000000000..9faa4272b4
--- /dev/null
+++ b/code/modules/xenobio2/machinery/slime_replicator.dm
@@ -0,0 +1,151 @@
+/*
+ Here lives the slime replicator
+ This machine consumes cores to create a slime.
+ To create more of these cores, stick the slime core in the extractor.
+*/
+/obj/machinery/slime/replicator
+ name = "slime core growth apparatus"
+ desc = "A machine for creating slimes from cores. Amazing!"
+ icon = 'icons/obj/xenoarchaeology.dmi'
+ icon_state = "restruct_0"
+ density = 1
+ anchored = 1
+ circuit = /obj/item/weapon/circuitboard/slimereplicator
+ var/obj/item/xenoproduct/slime/core/core = null
+ var/inuse
+ var/occupiedcolor = "#22FF22"
+ var/emptycolor = "#FF2222"
+ var/operatingcolor = "#FFFF22"
+
+/obj/machinery/slime/replicator/New()
+ ..()
+ circuit = new circuit(src)
+ component_parts = list()
+ component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
+ component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
+ component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
+ component_parts += new /obj/item/weapon/stock_parts/micro_laser(src)
+ RefreshParts()
+ update_light_color()
+
+
+/obj/machinery/slime/replicator/attackby(var/obj/item/W, var/mob/user)
+ //Let's try to deconstruct first.
+ if(istype(W, /obj/item/weapon/screwdriver) && !inuse)
+ default_deconstruction_screwdriver(user, W)
+ return
+
+ if(istype(W, /obj/item/weapon/crowbar))
+ default_deconstruction_crowbar(user, W)
+ return
+
+ var/obj/item/xenoproduct/slime/core/G = W
+
+ if(!istype(G))
+ return ..()
+
+ if(core)
+ user << "[src] is already filled! "
+ return
+ if(panel_open)
+ user << "Close the panel first! "
+ core = G
+ user.drop_from_inventory(G)
+ G.forceMove(src)
+ update_light_color()
+
+/obj/machinery/slime/replicator/proc/update_light_color()
+ if(src.core && !(inuse))
+ set_light(2, 2, occupiedcolor)
+ else if(src.core)
+ set_light(2, 2, operatingcolor)
+ else
+ set_light(2, 2, emptycolor)
+
+/obj/machinery/slime/replicator/proc/replicate_slime()
+ if(!src.core)
+ src.visible_message("\icon[src] [src] pings unhappily.")
+ else if(inuse)
+ return
+
+ inuse = 1
+ update_light_color()
+ icon_state = "restruct_1"
+ spawn(30)
+ var/mob/living/simple_animal/xeno/slime/S = new(src)
+ S.traitdat = new() //New instance, so that if the core is deleted, the slime retains a trait datum.
+ S.nameVar = core.nameVar
+ S.name = "[S.nameVar] baby slime"
+ core.traits.copy_traits(S.traitdat)
+ S.ProcessTraits()
+ spawn(30)
+ qdel(core)
+ core = null //If qdel's being a bit slow or acting up, let's just make sure we can't clone the core.
+ inuse = 0
+ eject_slime()
+ icon_state = "restruct_0"
+ update_light_color()
+ src.updateUsrDialog()
+
+/obj/machinery/slime/replicator/proc/eject_slime()
+ for(var/mob/thing in contents)
+ thing.forceMove(loc)
+
+/obj/machinery/slime/replicator/proc/eject_core()
+ if(core)
+ core.forceMove(loc)
+ core = null
+
+/obj/machinery/slime/replicator/proc/eject_contents()
+ eject_slime()
+ eject_core()
+
+//Here lies the UI
+/obj/machinery/slime/replicator/attack_hand(mob/user as mob)
+ user.set_machine(src)
+ interact(user)
+
+/obj/machinery/slime/replicator/interact(mob/user as mob)
+ var/dat = ""
+ if(!inuse)
+ dat = {"
+ Slime core container holds:
+ [core]
+ "}
+ if (core && !(stat & (NOPOWER|BROKEN)))
+ dat += "Start the replication process "
+ if(core)
+ dat += "Eject the core "
+ else
+ dat += "Please wait..."
+ var/datum/browser/popup = new(user, "Slime Replicator", "Slime Replicator", src)
+ popup.set_content(dat)
+ popup.open()
+ return
+
+
+/obj/machinery/slime/replicator/Topic(href, href_list)
+ if(..())
+ return
+ usr.set_machine(src)
+ switch(href_list["action"])
+ if ("replicate")
+ replicate_slime()
+ if("eject")
+ eject_core()
+ src.updateUsrDialog()
+ return
+
+//Circuit board below,
+/obj/item/weapon/circuitboard/slimereplicator
+ name = T_BOARD("Slime replicator")
+ build_path = "/obj/machinery/slime/replicator"
+ board_type = "machine"
+ origin_tech = list(TECH_DATA = 3, TECH_BIO = 3)
+ req_components = list(
+ /obj/item/weapon/stock_parts/manipulator = 2,
+ /obj/item/weapon/stock_parts/matter_bin = 1,
+ /obj/item/weapon/stock_parts/micro_laser = 1
+ )
+
+
\ No newline at end of file
diff --git a/code/modules/xenobio2/mob/slime/slime life.dm b/code/modules/xenobio2/mob/slime/slime life.dm
new file mode 100644
index 0000000000..4853454476
--- /dev/null
+++ b/code/modules/xenobio2/mob/slime/slime life.dm
@@ -0,0 +1,55 @@
+/*
+Slime specific life events go here.
+*/
+#define HAPPYLEVEL 200
+#define ANGRYLEVEL 10
+/mob/living/simple_animal/xeno/slime/Life()
+ . = ..()
+ if(..())
+ if(health)
+ if(is_child)
+ if(nutrition >= 275)
+ growthcounter++
+ nutrition -= hunger_factor
+ if(nutrition <= 75)
+ growthcounter--
+ if(growthcounter >= growthpoint)
+ src.GrowUp()
+
+ else
+ if(nutrition < 0)
+ nutrition = 0
+ if((prob(10) && !emote_on)) //Slimes might display their food-based emotions over time.
+ var/image/I = new(src.icon)
+ I.color = "#FFFFFF"
+ I.layer = src.layer + 0.2
+ if((nutrition >= HAPPYLEVEL))
+ if((nutrition >= 1.5 * HAPPYLEVEL))
+ I.icon_state = "aslime-:33"
+ else
+ I.icon_state = "aslime-:3"
+
+ else if((nutrition > ANGRYLEVEL))
+ if((nutrition >= 10 * ANGRYLEVEL))
+ I.icon_state = "aslime-pout"
+ else if((nutrition >= 5 * ANGRYLEVEL))
+ I.icon_state = "aslime-sad"
+ else
+ I.icon_state = "aslime-angry"
+ overlays += I
+ emote_on = 1
+ spawn(30)
+ GenerateAdultIcon()
+ emote_on = null
+
+ else
+ if(is_child)
+ icon_state = "slime baby dead"
+ else
+ overlays.Cut()
+ icon_state = "slime adult dead"
+ color = traitdat.traits[TRAIT_XENO_COLOR]
+
+ return 0 //Everything worked okay
+
+ return //xeno/Life() returned 0.
\ No newline at end of file
diff --git a/code/modules/xenobio2/mob/slime/slime procs.dm b/code/modules/xenobio2/mob/slime/slime procs.dm
new file mode 100644
index 0000000000..f2ee6013b7
--- /dev/null
+++ b/code/modules/xenobio2/mob/slime/slime procs.dm
@@ -0,0 +1,129 @@
+/*
+Slime specific procs go here.
+*/
+#define SHINYOVERLAY 0
+#define LIGHTOVERLAY 1
+#define MAXOVERLAY 2 //Should be 1 + last overlay, to give the chance for matte slimes
+
+/mob/living/simple_animal/xeno/slime/RandomizeTraits()
+ traitdat.traits[TRAIT_XENO_COLDRES] = rand(30,270)
+ traitdat.traits[TRAIT_XENO_HEATRES] = rand(30,270)
+ traitdat.traits[TRAIT_XENO_CHEMVOL] = round(rand(20,40)) //Wow, a slime core with the capacity to hold 2/3rd's a beaker's worth of chemicals.
+ traitdat.traits[TRAIT_XENO_HEALTH] = round(rand(50, 75))
+ traitdat.traits[TRAIT_XENO_HUNGER] = rand(1, 20)
+ traitdat.traits[TRAIT_XENO_STARVEDAMAGE] = rand(1, 4)
+ traitdat.traits[TRAIT_XENO_EATS] = prob(95) //Odds are, that thing'll need to eat.
+ traitdat.traits[TRAIT_XENO_HOSTILE] = prob(60) //Let's increase this probabilty.
+ if(prob(10))
+ traitdat.traits[TRAIT_XENO_CHROMATIC] = 1
+ traitdat.traits[TRAIT_XENO_HOSTILE] = 0
+ traitdat.traits[TRAIT_XENO_GLOW_STRENGTH] = round(rand(1,3))
+ traitdat.traits[TRAIT_XENO_GLOW_RANGE] = round(rand(1,3))
+ traitdat.traits[TRAIT_XENO_STRENGTH] = round(rand(4,9))
+ traitdat.traits[TRAIT_XENO_STR_RANGE] =round(rand(0,2))
+ traitdat.traits[TRAIT_XENO_CANLEARN] = prob(68)
+ traitdat.traits[TRAIT_XENO_SPEED] = round(rand(-10,10))
+
+/mob/living/simple_animal/xeno/slime/RandomChemicals()
+ ..()
+ if(prob(40))
+ var/hasMutToxin
+ for(var/R in traitdat.chems)
+ if(R == "mutationtoxin")
+ hasMutToxin = 1
+ var/chemamount
+ if(hasMutToxin)
+ var/list/chemchoices = (xenoChemList - traitdat.chems)
+
+ var/chemtype = pick(chemchoices)
+ chemamount = rand(1,5)
+ traitdat.chems[chemtype] = chemamount
+ else
+ chemamount = rand(1,5)
+ traitdat.chems["mutationtoxin"] = chemamount
+
+/mob/living/simple_animal/xeno/slime/proc/GrowUp()
+ GenerateAdult()
+
+ maxHealth = traitdat.get_trait(TRAIT_XENO_HEALTH)
+ health = maxHealth
+ is_child = 0
+
+ return 1
+
+/mob/living/simple_animal/xeno/slime/Mutate()
+ ..()
+ cores = round(rand(1,9))
+ if(is_child)
+ RandomizeTraits()
+ GenerateChild()
+ else
+ GenerateAdult()
+
+/mob/living/simple_animal/xeno/slime/proc/GenerateChild()
+ overlays.Cut()
+ name = "[nameVar] baby slime"
+ real_name = "[nameVar] baby slime"
+ desc = "A shifting blob of [nameVar] goo."
+ icon_state = "slime baby"
+ icon_living = "slime baby"
+ icon_dead = "slime baby dead"
+ color = traitdat.traits[TRAIT_XENO_COLOR]
+ maxHealth = traitdat.traits[TRAIT_XENO_HEALTH]/2
+ health = maxHealth
+
+ return 1
+
+/mob/living/simple_animal/xeno/slime/proc/GenerateAdult()
+ overlays.Cut()
+ name = "[nameVar] slime"
+ real_name = "[nameVar] slime"
+ desc = "A shifting mass of [nameVar] goo."
+ color = ""
+ icon_state = ""
+ overlay = round(rand(0, MAXOVERLAY))
+ GenerateAdultIcon()
+
+/mob/living/simple_animal/xeno/slime/proc/GenerateAdultIcon() //Hack and slash adventure game to make slimes have no color on light effects later
+ overlays.Cut()
+ var/image/Img = new(src.icon)
+ Img.icon_state = "slime adult"
+ Img.color = traitdat.traits[TRAIT_XENO_COLOR]
+ Img.layer = src.layer
+ overlays += Img
+
+ switch(overlay)
+ if(SHINYOVERLAY)
+ var/image/I = new(src.icon)
+ I.icon = src.icon
+ I.icon_state = "slime shiny"
+ I.layer = src.layer + 0.1
+ I.color = "#FFFFFF"
+ overlays += I
+ if(LIGHTOVERLAY)
+ var/image/I = new(src.icon)
+ I.icon = src.icon
+ I.icon_state = ""
+ I.icon_state = "slime light"
+ I.layer = src.layer + 0.1
+ I.color = "#FFFFFF"
+ overlays += I
+
+/mob/living/simple_animal/xeno/slime/handle_reagents()
+ if(!stasis)
+ if(!reagents)
+ return
+ if(reagents.total_volume <= 0)
+ return
+ if(reagents.has_reagent("docilitytoxin")) //Toxin that makes them docile? Good for quelling angry mobs.
+ hostile = 0
+ traitdat.traits[TRAIT_XENO_HOSTILE] = 0
+ ..()
+
+/mob/living/simple_animal/xeno/slime/ProcessTraits()
+ ..()
+ if(is_child)
+ GenerateChild()
+ else
+ GenerateAdult()
+
\ No newline at end of file
diff --git a/code/modules/xenobio2/mob/slime/slime.dm b/code/modules/xenobio2/mob/slime/slime.dm
new file mode 100644
index 0000000000..65d4ad64d8
--- /dev/null
+++ b/code/modules/xenobio2/mob/slime/slime.dm
@@ -0,0 +1,94 @@
+/*
+Slime definitions, Life and New live here.
+*/
+/mob/living/simple_animal/xeno/slime //Adult values are found here
+ nameVar = "grey" //When mutated, nameVar might change.
+ desc = "A shifting, mass of goo."
+ faction = "slime"
+ speak_emote = list("garbles", "chirps", "blurbles")
+ colored = 1
+ color = "#CACACA"
+ icon = 'icons/mob/slime2.dmi'
+ icon_state = "slime adult"
+ icon_living = "slime adult"
+ icon_dead = "slime adult dead"
+ internal_vol = 200
+ mut_max = 50
+ mutable = COLORMUT
+ var/is_child = 1
+ var/cores = 3
+ var/growthcounter = 0
+ var/growthpoint = 50 //At what point they grow up.
+ var/shiny = 0
+ move_to_delay = 17 //Slimes shouldn't be able to go faster than humans.
+ default_chems = list("slimejelly" = 5)
+ attacktext = "absorbed some of"
+ response_help = "pats"
+ response_disarm = "tries to stop"
+ response_harm = "hits"
+
+ var/emote_on = null
+
+ maleable = MAX_MALEABLE
+
+ //Slimes can speak all of the languages, oh no!
+ universal_speak = 1
+ speak_chance = 1
+ speak = list("Hello?",
+ "Where is this going?",
+ "What is that?",
+ "What is in the box?",
+ "Cargo.",
+ "Transport?",
+ "Special?",
+ "Slime?")
+
+ //Overlay information
+ var/overlay = 1 // 1 = normal lighting, 0 = shiny, 2 = too shiny, -1 = no overlay
+
+ chemreact = list( "nutriment" = list("nutr" = 0.5),
+ "radium" = list("toxic" = 0.3, "mut" = 1),
+ "mutagen" = list("nutr" = 0.4, "mut" = 2),
+ "water" = list("nutr" = -0.1),
+ "milk" = list("nutr" = 0.3),
+ "sacid" = list("toxic" = 1),
+ "pacid" = list("toxic" = 2),
+ "chlorine" = list("toxic" = 0.5),
+ "ammonia" = list("toxic" = 0.5),
+ "sodawater" = list("toxic" = 0.1, "nutr" = -0.1),
+ "beer" = list("nutr" = 0.6),
+ "diethylamine" = list("nutr" = 0.9),
+ "sugar" = list("toxic" = 0.4, "nutr" = 0.2),
+ "eznutrient" = list("nutr" = 0.8),
+ "cryoxadone" = list("toxic" = 0.4),
+ "flourine" = list("toxic" = 0.1),
+ "robustharvest" = list("nutr" = 1.5),
+ "glucose" = list("nutr" = 0.5),
+ "blood" = list("nutr" = 0.75, "toxic" = 0.05, "mut" = 0.45),
+ "fuel" = list("toxic" = 0.4),
+ "toxin" = list("toxic" = 0.5),
+ "carpotoxin" = list("toxic" = 1, "mut" = 1.5),
+ "phoron" = list("toxic" = 1.5, "mut" = 0.03),
+ "virusfood" = list("nutr" = 1.5, "mut" = 0.32),
+ "cyanide" = list("toxic" = 3.5),
+ "slimejelly" = list("nutr" = 0.5),
+ "amutationtoxin" = list("toxic" = 0.1, "heal" = 1.5, "mut" = 3),
+ "mutationtoxin" = list("toxic" = 0.1, "heal" = 1, "mut" = 1.5),
+ "gold" = list("heal" = 0.3, "nutr" = 0.7, "mut" = 0.3),
+ "uranium" = list("heal" = 0.3, "toxic" = 0.7, "mut" = 1.2),
+ "glycerol" = list("nutr" = 0.6),
+ "woodpulp" = list("heal" = 0.1, "nutr" = 0.7),
+ "docilitytoxin" = list("nutr" = 0.3) )
+
+/mob/living/simple_animal/xeno/slime/New()
+ ..()
+ for(var/datum/language/L in (typesof(/datum/language) - /datum/language))
+ languages += L
+ speak += "[station_name()]?"
+ traitdat.source = "Slime"
+ resistances[BURN] = 4
+ resistances[BRUTE] = 0.2
+ resistances[TOX] = 1.5
+ GenerateChild()
+ return 1
+
\ No newline at end of file
diff --git a/code/modules/xenobio2/mob/slime/slime_core.dm b/code/modules/xenobio2/mob/slime/slime_core.dm
new file mode 100644
index 0000000000..fff19a231f
--- /dev/null
+++ b/code/modules/xenobio2/mob/slime/slime_core.dm
@@ -0,0 +1,12 @@
+/*
+Slime core lives here.
+*/
+/obj/item/xenoproduct/slime/core
+ name = "slime core"
+ desc = "Gooey."
+ icon = 'icons/mob/slime2.dmi'
+ icon_state = "slime extract"
+ source = "Slime"
+ product = "core"
+
+
\ No newline at end of file
diff --git a/code/modules/xenobio2/mob/slime/slime_monkey.dm b/code/modules/xenobio2/mob/slime/slime_monkey.dm
new file mode 100644
index 0000000000..f302f9104a
--- /dev/null
+++ b/code/modules/xenobio2/mob/slime/slime_monkey.dm
@@ -0,0 +1,65 @@
+/*
+Slime cube lives here.
+*/
+/obj/item/slime_cube
+ name = "slimy monkey cube"
+ desc = "Wonder what might come out of this."
+ icon = 'icons/mob/slime2.dmi'
+ icon_state = "slime cube"
+ var/searching = 0
+
+/obj/item/slime_cube/attack_self(mob/user as mob)
+ if(!searching)
+ user << "You stare at the slimy cube, watching as some activity occurs. "
+ icon_state = "slime cube active"
+ searching = 1
+ request_player()
+ spawn(600) reset_search()
+
+/obj/item/slime_cube/proc/request_player()
+ for(var/mob/observer/dead/O in player_list)
+ if(!O.MayRespawn())
+ continue
+ if(O.client)
+ if(O.client.prefs.be_special & BE_ALIEN)
+ question(O.client)
+
+/obj/item/slime_cube/proc/question(var/client/C)
+ spawn(0)
+ if(!C) return
+ var/response = alert(C, "Someone is requesting a soul for a promethean. Would you like to play as one?", "Promethean request", "Yes", "No", "Never for this round")
+ if(response == "Yes")
+ response = alert(C, "Are you sure you want to play as a promethean?", "Promethean request", "Yes", "No")
+ if(!C || 2 == searching) return //handle logouts that happen whilst the alert is waiting for a response, and responses issued after a brain has been located.
+ if(response == "Yes")
+ transfer_personality(C.mob)
+ else if (response == "Never for this round")
+ C.prefs.be_special ^= BE_ALIEN
+
+/obj/item/slime_cube/proc/reset_search() //We give the players sixty seconds to decide, then reset the timer.
+ icon_state = "slime cube"
+ if(searching == 1)
+ searching = 0
+ var/turf/T = get_turf_or_move(src.loc)
+ for (var/mob/M in viewers(T))
+ M.show_message("The activity in the cube dies down. Maybe it will spark another time. ")
+
+/obj/item/slime_cube/proc/transfer_personality(var/mob/candidate)
+ announce_ghost_joinleave(candidate, 0, "They are a promethean now.")
+ src.searching = 2
+ var/mob/living/carbon/human/S = new(get_turf(src))
+ S.client = candidate.client
+ S. << "You are a promethean, brought into existence on [station_name()]. "
+ S.mind.assigned_role = "Promethean"
+ S.set_species("Promethean")
+ S.shapeshifter_set_colour("#05FF9B")
+ for(var/mob/M in viewers(get_turf_or_move(loc)))
+ M.show_message("The monkey cube suddenly takes the shape of a humanoid! ")
+ var/newname = sanitize(input(S, "You are a Promethean. Would you like to change your name to something else?", "Name change") as null|text, MAX_NAME_LEN)
+ if (newname)
+ S.real_name = newname
+ S.name = S.real_name
+ S.dna.real_name = newname
+ if(S.mind) S.mind.name = S.name
+ qdel(src)
+
\ No newline at end of file
diff --git a/code/modules/xenobio2/mob/xeno procs.dm b/code/modules/xenobio2/mob/xeno procs.dm
new file mode 100644
index 0000000000..94da479f5a
--- /dev/null
+++ b/code/modules/xenobio2/mob/xeno procs.dm
@@ -0,0 +1,165 @@
+/*
+Basic definition of creatures for Xenobiology
+
+Includes:
+Proc for metabolism
+Proc for mutating
+Procs for copying speech, if applicable
+Procs for targeting
+*/
+/mob/living/simple_animal/xeno/proc/ProcessTraits()
+ if(maleable >= MAX_MALEABLE)
+ maxHealth = traitdat.get_trait(TRAIT_XENO_HEALTH)
+ health = maxHealth
+ if(traitdat.chemlist.len) //Let's make sure that this has a length.
+ chemreact = traitdat.chemlist
+ else
+ traitdat.chemlist = chemreact
+ chromatic = traitdat.traits[TRAIT_XENO_CHROMATIC]
+ if(maleable >= MINOR_MALEABLE)
+ if(colored)
+ color = traitdat.traits[TRAIT_XENO_COLOR]
+ speed = traitdat.traits[TRAIT_XENO_SPEED]
+ hunger_factor = traitdat.traits[TRAIT_XENO_HUNGER]
+ starve_damage = traitdat.traits[TRAIT_XENO_STARVEDAMAGE]
+ minbodytemp = T20C - traitdat.traits[TRAIT_XENO_COLDRES]
+ maxbodytemp = T20C + traitdat.traits[TRAIT_XENO_HEATRES]
+
+ if(traitdat.traits[TRAIT_XENO_BIOLUMESCENT])
+ set_light(traitdat.traits[TRAIT_XENO_GLOW_RANGE], traitdat.traits[TRAIT_XENO_GLOW_STRENGTH], traitdat.traits[TRAIT_XENO_BIO_COLOR])
+ else
+ set_light(0, 0, "#000000") //Should kill any light that shouldn't be there.
+
+ hostile = traitdat.traits[TRAIT_XENO_HOSTILE]
+
+ speed = traitdat.traits[TRAIT_XENO_SPEED]
+
+ if(traitdat.traits[TRAIT_XENO_CANSPEAK])
+ speak_chance = traitdat.traits[TRAIT_XENO_SPEAKCHANCE]
+ else
+ speak_chance = 0
+
+ melee_damage_lower = traitdat.get_trait(TRAIT_XENO_STRENGTH) - traitdat.get_trait(TRAIT_XENO_STR_RANGE)
+ melee_damage_upper = traitdat.traits[TRAIT_XENO_STRENGTH] + traitdat.get_trait(TRAIT_XENO_STR_RANGE)
+
+
+
+//Metabolism proc, simplified for xenos. Heavily based on botanical metabolism.
+/mob/living/simple_animal/xeno/proc/handle_reagents()
+ if(!stasis)
+ if(!reagents)
+ return
+
+ //Let's handle some chemical smoke, for scientific smoke bomb purposes.
+ for(var/obj/effect/effect/smoke/chem/smoke in view(1, src))
+ if(smoke.reagents.total_volume)
+ smoke.reagents.trans_to_mob(src, 10, CHEM_BLOOD, copy = 1)
+
+ reagents.trans_to_obj(temp_chem_holder, min(reagents.total_volume,rand(1,4)))
+ var/reagent_total
+ var/list/reagent_response = list()
+ for(var/datum/reagent/R in temp_chem_holder.reagents.reagent_list)
+
+ reagent_total = temp_chem_holder.reagents.get_reagent_amount(R.id)
+
+ reagent_response = chemreact[R.id]
+
+ if(reagent_response["toxic"])
+ adjustToxLoss(reagent_response["toxic"] * reagent_total)
+
+ if(reagent_response["heal"])
+ heal_overall_damage(reagent_response["heal"] * reagent_total)
+
+ if(reagent_response["nutr"])
+ nutrition += reagent_response["nutr"] * reagent_total
+
+ if(reagent_response["mut"])
+ mut_level += reagent_response["mut"] * reagent_total
+
+ temp_chem_holder.reagents.clear_reagents()
+
+ return 1 //Everything worked out okay.
+
+ return 0
+
+/mob/living/simple_animal/xeno/proc/Mutate()
+ nameVar = "mutated"
+ if((COLORMUT & mutable))
+ traitdat.traits[TRAIT_XENO_COLOR] = "#"
+ for(var/i=0, i<6, i++)
+ traitdat.traits[TRAIT_XENO_COLOR] += pick(hexNums)
+ traitdat.traits[TRAIT_XENO_BIO_COLOR] = "#"
+ for(var/i=0, i<6, i++)
+ traitdat.traits[TRAIT_XENO_BIO_COLOR] += pick(hexNums)
+
+ RandomChemicals()
+ //if(SPECIESMUT & mutable)
+ //Placeholder, currently no xenos that have species mutations.
+ RandomizeTraits()
+ ProcessTraits()
+ return 1
+
+/mob/living/simple_animal/xeno/proc/RandomizeTraits()
+ return
+
+/mob/living/simple_animal/xeno/hear_say(var/message, var/verb = "says", var/datum/language/language, var/alt_name = "",var/italics = 0, var/mob/speaker = null)
+ if(traitdat.traits[TRAIT_XENO_CANLEARN])
+ /*
+ Until this gets sorted out to a functioning point, or waiting on Psi's saycode update.
+ var/learned_message = say_understands(speaker, language)
+ if(!message || isxeno(speaker))
+ return
+ if(learned_message) //Is it understood?
+ var/complete_message = ",[language.key] [message]"
+ if(!(complete_message in speak))
+ speech_buffer.Add(complete_message)
+ log_debug("Added '[complete_message]'.")
+ else
+ */
+ if(!(message in speak))
+ speech_buffer.Add(message)
+ ..(message,verb,language,alt_name,italics,speaker)
+
+/mob/living/simple_animal/xeno/proc/ProcessSpeechBuffer()
+ if(speech_buffer.len)
+ if(prob(traitdat.get_trait(TRAIT_XENO_LEARNCHANCE)) && traitdat.get_trait(TRAIT_XENO_CANLEARN))
+ var/chosen = pick(speech_buffer)
+ speak.Add(chosen)
+ /* Uncoment for logging of speech list.
+ log_debug("Added [chosen] to speak list.")
+ log_debug("Speechlist cut.") */
+ speech_buffer.Cut()
+//
+/mob/living/simple_animal/xeno/proc/BuildReagentLists()
+ return
+
+/mob/living/simple_animal/xeno/bullet_act(var/obj/item/projectile/P)
+ //Shamelessly stolen from ablative armor.
+ if((traitdat.traits[TRAIT_XENO_CHROMATIC]) && istype(P, /obj/item/projectile/beam))
+ visible_message(")\The beam reflects off of the [src]! ")
+ // Find a turf near or on the original location to bounce to
+ var/new_x = P.starting.x + pick(0, -1, 1, -2, 2)
+ var/new_y = P.starting.y + pick(0, -1, 1, -2, 2)
+ var/turf/curloc = get_turf(src)
+
+ // redirect the projectile
+ P.redirect(new_x, new_y, curloc, src)
+
+ return -1
+
+ else
+ ..()
+
+/mob/living/simple_animal/xeno/proc/RandomChemicals()
+ traitdat.chems.Cut() //Clear the amount first.
+
+ var/num_chems = round(rand(1,4))
+ var/list/chemchoices = xenoChemList
+
+ for(var/i = 1 to num_chems)
+ var/chemtype = pick(chemchoices)
+ chemchoices -= chemtype
+ var/chemamount = rand(1,5)
+ traitdat.chems[chemtype] = chemamount
+
+ traitdat.chems += default_chems
diff --git a/code/modules/xenobio2/mob/xeno.dm b/code/modules/xenobio2/mob/xeno.dm
new file mode 100644
index 0000000000..6783823d6a
--- /dev/null
+++ b/code/modules/xenobio2/mob/xeno.dm
@@ -0,0 +1,101 @@
+//First we define certain flags, can be expanded upon later.
+
+/*
+Basic definition of creatures for Xenobiology
+Also includes Life and New
+*/
+
+/mob/living/simple_animal/xeno
+ name = "Xeno"
+ real_name = "Xeno"
+ faction = "xeno" //Needs to be set.
+ desc = "Something's broken, yell at someone."
+ melee_damage_lower = 0
+ melee_damage_upper = 0
+ attacktext = "hit"
+ attack_sound = null
+ friendly = "touches"
+ environment_smash = 0
+
+ var/datum/xeno/traits/traitdat //Trait datum.
+
+ var/internal_vol = 1000 //Internal volume for ingesting/injected reagents
+
+ var/obj/temp_chem_holder //Used in handle_reagents()
+
+ var/mutable = NOMUT //Flag for mutation.
+ var/nameVar = "Blah"
+ var/mut_instability = 0
+ var/stasis = 0
+ var/mut_level = 0 //How mutated a specimen is. Irrelevant while mutable = NOMUT.
+ var/mut_max = 100000
+ var/colored = 1
+ var/maleable = MIN_MALEABLE //How easy is it to manipulate traitdat.traits after it's alive.
+ var/stability = 0 //Used in gene manipulation
+
+ //Traits that might not be maleable.
+ var/list/chemreact = list()
+ var/hunger_factor = 10
+ var/chromatic = 0
+ var/starve_damage = 0
+
+ //Used for speech learning
+ var/list/speech_buffer = list()
+
+ var/list/default_chems = list()
+
+
+//Life additions
+/mob/living/simple_animal/xeno/Life()
+ if(stasis)
+ stasis--
+ if(stasis < 0)
+ stasis = 0
+ return 0
+
+ ..()
+ if(!(stat == DEAD))
+ handle_reagents()
+ if((mut_level >= mut_max) && !(mutable & NOMUT))
+ Mutate()
+ mut_level -= mut_max
+
+ ProcessSpeechBuffer()
+
+ //Have to feed the xenos somehow.
+ if(nutrition < 0)
+ nutrition = 0
+ if((nutrition > 0 ) && traitdat.traits[TRAIT_XENO_EATS])
+ if(nutrition >= 300)
+ nutrition -= hunger_factor
+ else
+ if(traitdat.traits[TRAIT_XENO_EATS])
+ health = starve_damage
+
+ return 1 //Everything worked okay.
+
+/mob/living/simple_animal/xeno/New()
+
+ traitdat = new()
+
+ ProcessTraits()
+
+ ..()
+ if(colored)
+ color = traitdat.get_trait(TRAIT_XENO_COLOR)
+ create_reagents(internal_vol)
+ temp_chem_holder = new()
+ temp_chem_holder.create_reagents(20)
+ nutrition = 350
+ for(var/R in default_chems)
+ traitdat.chems[R] = default_chems[R]
+
+ traitdat.source = name
+
+ if(!health)
+ stat = DEAD
+
+/mob/living/simple_animal/xeno/Destroy()
+ traitdat.Destroy() //Let's clean up after ourselves.
+ traitdat = null
+ ..()
\ No newline at end of file
diff --git a/code/modules/xenobio2/mob/xeno_product.dm b/code/modules/xenobio2/mob/xeno_product.dm
new file mode 100644
index 0000000000..a9989c3c45
--- /dev/null
+++ b/code/modules/xenobio2/mob/xeno_product.dm
@@ -0,0 +1,18 @@
+/*
+Xenobiological product lives here as a basic type.
+*/
+/obj/item/xenoproduct
+ name = "Xenobiological product"
+ desc = "How did this get here?."
+ icon = 'icons/mob/slime2.dmi'
+ icon_state = "slime extract"
+ var/datum/xeno/traits/traits
+ var/source = "Unknown"
+ var/product = "mess"
+ var/nameVar = "blah"
+
+/obj/item/xenoproduct/Destroy()
+ traits.Destroy() //Let's not leave any traits hanging around.
+ traits = null
+ ..()
+
\ No newline at end of file
diff --git a/code/modules/xenobio2/tools/slime_handling_tools.dm b/code/modules/xenobio2/tools/slime_handling_tools.dm
new file mode 100644
index 0000000000..b8f37a106f
--- /dev/null
+++ b/code/modules/xenobio2/tools/slime_handling_tools.dm
@@ -0,0 +1,64 @@
+/* What this file contains:
+
+ * A specialized stun prod, for handling fiesty slimes
+
+ * A specialized stun gun, for handling many fiesty slimes
+
+ * A stun projectile for handling xenomorphs.
+
+*/
+/obj/item/weapon/melee/baton/slime
+ name = "slimebaton"
+ desc = "A modified stun baton designed to stun slimes for handling."
+ icon_state = "slimebaton"
+ item_state = "slimebaton"
+ slot_flags = SLOT_BELT
+ force = 9
+ lightcolor = "#33CCFF"
+ origin_tech = list(TECH_COMBAT = 2, TECH_BIO = 4)
+ agonyforce = 10 //It's not supposed to be great at stunning human beings.
+ var/stasisforce = 60 //How much stasis it does to slimes, and 1/3rd to non-slimes.
+
+/obj/item/weapon/melee/baton/slime/attack(mob/M, mob/user)
+ if(istype(M, /mob/living/simple_animal/xeno))
+ var/mob/living/simple_animal/xeno/X = M
+ if(istype(M, /mob/living/simple_animal/xeno/slime))
+ X.stasis += stasisforce
+ else
+ X.stasis += (stasisforce / 6)
+ ..()
+
+/obj/item/weapon/melee/baton/slime/loaded/New()
+ ..()
+ bcell = new/obj/item/weapon/cell/high(src)
+ update_icon()
+ return
+
+
+// Xeno stun gun + projectile
+/obj/item/weapon/gun/energy/taser/xeno
+ name = "xeno taser gun"
+ desc = "Straight out of NT's testing laboratories, this small gun is used to subdue non-humanoid xeno life forms. While marketed towards handling slimes, it may be useful for other creatures."
+ icon_state = "taserold"
+ fire_sound = 'sound/weapons/taser2.ogg'
+ max_shots = 10
+ projectile_type = /obj/item/projectile/beam/stun/xeno
+
+/obj/item/projectile/beam/stun/xeno
+ icon_state = "omni"
+ agony = 4
+ var/stasisforce = 40
+
+ muzzle_type = /obj/effect/projectile/laser_omni/muzzle
+ tracer_type = /obj/effect/projectile/laser_omni/tracer
+ impact_type = /obj/effect/projectile/laser_omni/impact
+
+/obj/item/projectile/beam/stun/xeno/on_hit(var/atom/target, var/blocked = 0)
+ if(istype(target, /mob/living/simple_animal/xeno))
+ var/mob/living/simple_animal/xeno/X = target
+ if(istype(target, /mob/living/simple_animal/xeno/slime))
+ X.stasis += stasisforce
+ else
+ X.stasis += (stasisforce / 8)
+ else
+ ..()
\ No newline at end of file
diff --git a/code/modules/xenobio2/tools/xeno_trait_scanner.dm b/code/modules/xenobio2/tools/xeno_trait_scanner.dm
new file mode 100644
index 0000000000..565db47364
--- /dev/null
+++ b/code/modules/xenobio2/tools/xeno_trait_scanner.dm
@@ -0,0 +1,185 @@
+/obj/item/device/analyzer/xeno_analyzer
+ name = "exotic biological analyzer"
+ desc = "A device to investigate the genetic data of a biological target."
+ var/form_title
+ var/last_data
+
+/obj/item/device/analyzer/xeno_analyzer/proc/print_report_verb()
+ set name = "Print Plant Report"
+ set category = "Object"
+ set src = usr
+
+ if(usr.stat || usr.restrained() || usr.lying)
+ return
+ print_report(usr)
+
+/obj/item/device/analyzer/xeno_analyzer/Topic(href, href_list)
+ if(..())
+ return
+ if(href_list["print"])
+ print_report(usr)
+
+/obj/item/device/analyzer/xeno_analyzer/proc/print_report(var/mob/living/user)
+ if(!last_data)
+ user << "There is no scan data to print."
+ return
+ var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(get_turf(src))
+ P.name = "paper - [form_title]"
+ P.info = "[last_data]"
+ if(istype(user,/mob/living/carbon/human))
+ user.put_in_hands(P)
+ user.visible_message("\The [src] spits out a piece of paper.")
+ return
+
+/obj/item/device/analyzer/xeno_analyzer/attack_self(mob/user as mob)
+ print_report(user)
+ return 0
+
+/obj/item/device/analyzer/xeno_analyzer/afterattack(var/target, mob/user, flag)
+ if(!flag) return
+
+ var/datum/xeno/traits/trait_info
+ var/datum/reagents/prod_reagents
+ var/targetName
+ var/growth_level
+ var/growth_max
+ if(istype(target,/obj/structure/table))
+ return ..()
+ else if(istype(target,/mob/living/simple_animal/xeno))
+
+ var/mob/living/simple_animal/xeno/X = target
+ if(istype(X, /mob/living/simple_animal/xeno/slime))
+ var/mob/living/simple_animal/xeno/slime/S = X
+ if(S.is_child)
+ growth_level = S.growthcounter
+ growth_max = S.growthpoint
+
+ targetName = X.name
+ trait_info = X.traitdat
+
+ else if(istype(target,/obj/item/xenoproduct))
+
+ var/obj/item/xenoproduct/P = target
+ trait_info = P.traits
+ targetName = P.name
+ prod_reagents = P.reagents
+
+ if(!trait_info)
+ user << "[src] can tell you nothing about \the [target]. "
+ return
+
+ form_title = "[targetName]"
+ var/dat = "Biological data for [form_title] "
+ user.visible_message("[user] runs the scanner over \the [target]. ")
+
+ dat += "General Data "
+
+
+ dat += "Health: [trait_info.get_trait(TRAIT_XENO_HEALTH)] "
+
+ if(prod_reagents && prod_reagents.reagent_list && prod_reagents.reagent_list.len)
+ dat += "Reagent Data "
+
+ dat += " This sample contains: "
+ for(var/datum/reagent/R in prod_reagents.reagent_list)
+ dat += " - [R.name], [prod_reagents.get_reagent_amount(R.id)] unit(s)"
+
+ dat += "Other Data "
+
+ if(trait_info.get_trait(TRAIT_XENO_EATS))
+ dat += "This subject requires nutritional intake. "
+
+ if(trait_info.get_trait(TRAIT_XENO_HUNGER))
+ if(trait_info.get_trait(TRAIT_XENO_HUNGER) < 7)
+ dat += "It appears to have a slower metabolism. "
+ else if(trait_info.get_trait(TRAIT_XENO_HUNGER) > 15)
+ dat += "It appears to have a greater metabolism. "
+ else
+ dat += "It appears to have an average metabolism. "
+
+ if(trait_info.get_trait(TRAIT_IMMUTABLE) == -1)
+ dat += "This plant is highly mutable. "
+ else if(trait_info.get_trait(TRAIT_IMMUTABLE) > 0)
+ dat += "This plant does not possess genetics that are alterable. "
+
+ if(trait_info.get_trait(TRAIT_XENO_HEALTH))
+ if(trait_info.get_trait(TRAIT_XENO_HEALTH) < 20)
+ dat += "It bears characteristics that indicate resilience to damage. "
+ else if(trait_info.get_trait(TRAIT_XENO_HEALTH) > 10)
+ dat += "It bears characteristics that indicate susceptibility to damage. "
+ else
+ dat += "It bears no characters indicating resilience to damage. "
+
+ if(growth_max)
+ if(growth_level < 35)
+ dat += "It appears to be far to growing up. "
+ else if(growth_level > 40)
+ dat += "It appears to be close to growing up. "
+ else
+ dat += "It appears to be growing. "
+ else
+ dat += "It appears to be fully grown. "
+
+ if(trait_info.get_trait(TRAIT_XENO_COLDRES))
+ if(trait_info.get_trait(TRAIT_XENO_COLDRES) < 10)
+ dat += "It bears characteristics that indicate resilience to colder temperatures. "
+ else if(trait_info.get_trait(TRAIT_XENO_COLDRES) > 20)
+ dat += "It bears characteristics that indicate susceptibility to colder temperatures. "
+
+ if(trait_info.get_trait(TRAIT_XENO_HEATRES))
+ if(trait_info.get_trait(TRAIT_XENO_HEATRES) < 10)
+ dat += "It bears characteristics that indicate resilience to warmer temperatures. "
+ else if(trait_info.get_trait(TRAIT_XENO_HEATRES) > 20)
+ dat += "It bears characteristics that indicate susceptibility to warmer temperatures. "
+
+ if(trait_info.get_trait(TRAIT_XENO_SPEED))
+ if(trait_info.get_trait(TRAIT_XENO_SPEED) < 0)
+ dat += "It appears to be agile. "
+ else if(trait_info.get_trait(TRAIT_XENO_SPEED) > 0)
+ dat += "It appears to be slower. "
+
+ if(trait_info.get_trait(TRAIT_XENO_CANSPEAK))
+ dat += " The subject appears to be able to articulate."
+
+ if(trait_info.get_trait(TRAIT_XENO_SPEAKCHANCE))
+ if(trait_info.get_trait(TRAIT_XENO_SPEAKCHANCE) < 10)
+ dat += "The subject appears to articulate infrequently. "
+ else if(trait_info.get_trait(TRAIT_XENO_SPEAKCHANCE) > 20)
+ dat += "The subject appears to articulate frequently. "
+
+ if(trait_info.get_trait(TRAIT_XENO_CANLEARN))
+ dat += " The subject appears to have process verbal information."
+
+ if(trait_info.get_trait(TRAIT_XENO_LEARNCHANCE))
+ if(trait_info.get_trait(TRAIT_XENO_LEARNCHANCE) < 50)
+ dat += "The subject appears to comprehend verbal information infrequently. "
+ else if(trait_info.get_trait(TRAIT_XENO_LEARNCHANCE) > 51)
+ dat += "The subject appears to comprehend verbal information frequently. "
+
+ if(trait_info.get_trait(TRAIT_XENO_STRENGTH) < 5)
+ dat += "It appears to have lower average physical capacity. "
+ else if(trait_info.get_trait(TRAIT_XENO_STRENGTH) > 7)
+ dat += "It appears to have greater average physical capacity. "
+
+ if(trait_info.get_trait(TRAIT_XENO_STR_RANGE))
+ if(trait_info.get_trait(TRAIT_XENO_STR_RANGE) < 50)
+ dat += "The subject appears to have more consistent attacks. "
+ else if(trait_info.get_trait(TRAIT_XENO_STR_RANGE) > 51)
+ dat += "The subject appears to have more varied attacks. "
+
+ if(trait_info.get_trait(TRAIT_XENO_BIOLUMESCENT))
+ dat += " It is [trait_info.get_trait(TRAIT_XENO_BIO_COLOR) ? "bio-luminescent " : "bio-luminescent"]."
+
+ if(trait_info.get_trait(TRAIT_XENO_HOSTILE))
+ dat += " The subject appears to have hostile tendencies."
+
+ if(trait_info.get_trait(TRAIT_XENO_CHROMATIC))
+ dat += " The subject appears to have chromatic particles inside of it."
+
+
+ if(dat)
+ last_data = dat
+ dat += " \[print report \]"
+ user << browse(dat,"window=xeno_analyzer")
+
+ return
\ No newline at end of file
diff --git a/code/unit_tests/loadout_tests.dm b/code/unit_tests/loadout_tests.dm
new file mode 100644
index 0000000000..7ca778655a
--- /dev/null
+++ b/code/unit_tests/loadout_tests.dm
@@ -0,0 +1,23 @@
+/datum/unit_test/loadout_test_shall_have_name_cost_path
+ name = "LOADOUT: Entries shall have name, cost, and path definitions"
+
+/datum/unit_test/loadout_test_shall_have_name_cost_path/start_test()
+ var/failed = 0
+ for(var/geartype in typesof(/datum/gear) - /datum/gear)
+ var/datum/gear/G = geartype
+
+ if(!initial(G.display_name))
+ log_unit_test("[G]: Loadout - Missing display name.")
+ failed = 1
+ else if(!initial(G.cost))
+ log_unit_test("[G]: Loadout - Missing cost.")
+ failed = 1
+ else if(!initial(G.path))
+ log_unit_test("[G]: Loadout - Missing path definition.")
+ failed = 1
+
+ if(failed)
+ fail("One or more /datum/gear definitions had invalid display names, costs, or path definitions")
+ else
+ pass("All /datum/gear definitions had correct settings.")
+ return 1
diff --git a/code/unit_tests/map_tests.dm b/code/unit_tests/map_tests.dm
new file mode 100644
index 0000000000..f8f735f867
--- /dev/null
+++ b/code/unit_tests/map_tests.dm
@@ -0,0 +1,113 @@
+/datum/unit_test/apc_area_test
+ name = "MAP: Area Test APC / Scrubbers / Vents Z level 1"
+
+/datum/unit_test/apc_area_test/start_test()
+ var/list/bad_areas = list()
+ var/area_test_count = 0
+ var/list/exempt_areas = typesof(/area/space,
+ /area/syndicate_station,
+ /area/skipjack_station,
+ /area/solar,
+ /area/shuttle,
+ /area/holodeck,
+ /area/supply/station,
+ /area/mine,
+ /area/vacant/vacant_shop
+ )
+
+ var/list/exempt_from_atmos = typesof(/area/maintenance,
+ /area/storage,
+ /area/engineering/atmos/storage,
+ /area/rnd/test_area,
+ /area/construction,
+ /area/server,
+ /area/mine,
+ /area/vacant/vacant_shop,
+ /area/rnd/research_storage, // This should probably be fixed,
+ /area/security/riot_control // This should probably be fixed,
+ )
+
+ var/list/exempt_from_apc = typesof(/area/construction,
+ /area/medical/genetics,
+ /area/mine,
+ /area/vacant/vacant_shop
+ )
+
+ for(var/area/A in world)
+ if(A.z == 1 && !(A.type in exempt_areas))
+ area_test_count++
+ var/area_good = 1
+ var/bad_msg = "--------------- [A.name]([A.type])"
+
+
+ if(isnull(A.apc) && !(A.type in exempt_from_apc))
+ log_unit_test("[bad_msg] lacks an APC.")
+ area_good = 0
+
+ if(!A.air_scrub_info.len && !(A.type in exempt_from_atmos))
+ log_unit_test("[bad_msg] lacks an Air scrubber.")
+ area_good = 0
+
+ if(!A.air_vent_info.len && !(A.type in exempt_from_atmos))
+ log_unit_test("[bad_msg] lacks an Air vent.")
+ area_good = 0
+
+ if(!area_good)
+ bad_areas.Add(A)
+
+ if(bad_areas.len)
+ fail("\[[bad_areas.len]/[area_test_count]\]Some areas lacked APCs, Air Scrubbers, or Air vents.")
+ else
+ pass("All \[[area_test_count]\] areas contained APCs, Air scrubbers, and Air vents.")
+
+ return 1
+
+/datum/unit_test/wire_test
+ name = "MAP: Cable Test Z level 1"
+
+/datum/unit_test/wire_test/start_test()
+ var/wire_test_count = 0
+ var/bad_tests = 0
+ var/turf/T = null
+ var/obj/structure/cable/C = null
+ var/list/cable_turfs = list()
+ var/list/dirs_checked = list()
+
+ for(C in world)
+ T = null
+
+ T = get_turf(C)
+ if(T && T.z == 1)
+ cable_turfs |= get_turf(C)
+
+ for(T in cable_turfs)
+ var/bad_msg = "--------------- [T.name] \[[T.x] / [T.y] / [T.z]\]"
+ dirs_checked.Cut()
+ for(C in T)
+ wire_test_count++
+ var/combined_dir = "[C.d1]-[C.d2]"
+ if(combined_dir in dirs_checked)
+ bad_tests++
+ log_unit_test("[bad_msg] Contains multiple wires with same direction on top of each other.")
+ dirs_checked.Add(combined_dir)
+
+ if(bad_tests)
+ fail("\[[bad_tests] / [wire_test_count]\] Some turfs had overlapping wires going the same direction.")
+ else
+ pass("All \[[wire_test_count]\] wires had no overlapping cables going the same direction.")
+
+ return 1
+
+/datum/unit_test/active_edges
+ name = "MAP: Active edges (all maps)"
+
+/datum/unit_test/active_edges/start_test()
+
+ var/active_edges = air_master.active_edges.len
+
+ if(active_edges)
+ fail("Maps contained [active_edges] active edges at round-start.")
+ else
+ pass("No active edges.")
+
+ return 1
diff --git a/code/unit_tests/mob_tests.dm b/code/unit_tests/mob_tests.dm
new file mode 100644
index 0000000000..c6b21e5d36
--- /dev/null
+++ b/code/unit_tests/mob_tests.dm
@@ -0,0 +1,29 @@
+/datum/unit_test/space_suffocation
+ name = "MOB: human mob suffocates in space"
+
+ var/startOxyloss
+ var/endOxyloss
+ var/mob/living/carbon/human/H
+ async = 1
+
+/datum/unit_test/space_suffocation/start_test()
+ var/turf/space/T = locate()
+
+ H = new(T)
+ startOxyloss = H.getOxyLoss()
+
+ return 1
+
+/datum/unit_test/space_suffocation/check_result()
+ if(H.life_tick < 10)
+ return 0
+
+ endOxyloss = H.getOxyLoss()
+
+ if(startOxyloss < endOxyloss)
+ pass("Human mob takes oxygen damage in space. (Before: [startOxyloss]; after: [endOxyloss])")
+ else
+ fail("Human mob is not taking oxygen damage in space. (Before: [startOxyloss]; after: [endOxyloss])")
+
+ qdel(H)
+ return 1
diff --git a/code/unit_tests/research_tests.dm b/code/unit_tests/research_tests.dm
new file mode 100644
index 0000000000..93bf79a0da
--- /dev/null
+++ b/code/unit_tests/research_tests.dm
@@ -0,0 +1,72 @@
+/datum/unit_test/research_designs_shall_be_unique
+ name = "RESEARCH: Designs Shall Be Unique"
+
+/datum/unit_test/research_designs_shall_be_unique/start_test()
+ var/list/ids = list()
+ var/list/build_paths = list()
+
+ for(var/design_type in typesof(/datum/design) - /datum/design)
+ var/datum/design/design = design_type
+ if(initial(design.id) == "id")
+ continue
+
+ group_by(ids, design, initial(design.id))
+ group_by(build_paths, design, initial(design.build_path))
+
+ var/number_of_issues = number_of_issues(ids, "IDs")
+ number_of_issues += number_of_issues(build_paths, "Build Paths")
+
+ if(number_of_issues)
+ fail("[number_of_issues] issues with research designs found.")
+ else
+ pass("All research designs are unique.")
+
+ return 1
+
+/datum/unit_test/research_designs_shall_be_unique/proc/group_by(var/list/entries, var/datum/design/entry, var/value)
+ var/designs = entries[value]
+ if(!designs)
+ designs = list()
+ entries[value] = designs
+
+ designs += entry
+
+/datum/unit_test/research_designs_shall_be_unique/proc/number_of_issues(var/list/entries, var/type)
+ var/issues = 0
+ for(var/value in entries)
+ var/list/list_of_designs = entries[value]
+ if(list_of_designs.len > 1)
+ log_unit_test("[type] - The following entries have the same value - [value]: " + english_list(list_of_designs))
+ issues++
+
+ return issues
+
+/datum/unit_test/research_designs_have_valid_materials
+ name = "RESEARCH: Designs Shall Have Valid Materials and Chemicals"
+
+/datum/unit_test/research_designs_have_valid_materials/start_test()
+ var/number_of_issues = 0
+
+ for(var/design_type in typesof(/datum/design) - /datum/design)
+ var/datum/design/design = design_type
+ if(initial(design.id) == "id")
+ continue
+ design = new design_type() // Unfortunately we have to actually instantiate to get a list.
+
+ for(var/material_name in design.materials)
+ var/material/material = get_material_by_name(material_name)
+ if(!material)
+ log_unit_test("The entry [design_type] has invalid material type [material_name]")
+ number_of_issues++
+
+ for(var/reagent_name in design.chemicals)
+ if(!(reagent_name in chemical_reagents_list))
+ log_unit_test("The entry [design_type] has invalid chemical type [reagent_name]")
+ number_of_issues++
+
+ if(number_of_issues)
+ fail("[number_of_issues] issues with research designs found.")
+ else
+ pass("All research designs have valid materials.")
+
+ return 1
diff --git a/code/unit_tests/unit_test.dm b/code/unit_tests/unit_test.dm
new file mode 100644
index 0000000000..b8acf60c21
--- /dev/null
+++ b/code/unit_tests/unit_test.dm
@@ -0,0 +1,99 @@
+var/all_unit_tests_passed = 1
+var/failed_unit_tests = 0
+var/total_unit_tests = 0
+
+/datum/unit_test
+ var/name = "template"
+ var/disabled = ""
+ var/async = 0
+ var/reported = 0
+
+/datum/unit_test/proc/fail(var/message)
+ all_unit_tests_passed = 0
+ failed_unit_tests++
+ reported = 1
+ log_unit_test("[ASCII_RED]!! FAILURE !! \[[name]\]: [message][ASCII_RESET]")
+
+/datum/unit_test/proc/pass(var/message)
+ reported = 1
+ log_unit_test("[ASCII_GREEN]** SUCCESS ** \[[name]\]: [message][ASCII_RESET]")
+
+/datum/unit_test/proc/start_test()
+ fail("No test proc.")
+
+/datum/unit_test/proc/check_result()
+ fail("No check results proc.")
+ return 1
+
+
+/proc/initialize_unit_tests()
+ log_unit_test("Initializing Unit Testing")
+
+ if(!ticker)
+ crash_with("No Ticker")
+ world.Del()
+
+ var/said_msg = 0
+ while(ticker.pregame_timeleft && ticker.pregame_timeleft > 160) // Make sure the initial startup is complete.
+ if(ticker.pregame_timeleft < 175 && !said_msg)
+ said_msg = 1
+ log_unit_test("Pregame Count down has started, giving it 20 seconds to finish.")
+ sleep(1)
+
+ world.save_mode("extended")
+
+ sleep(1)
+
+ ticker.current_state = GAME_STATE_SETTING_UP
+
+ log_unit_test("Round has been started. Waiting 10 seconds to start tests.")
+ sleep(100)
+
+ var/list/test_datums = typesof(/datum/unit_test)
+
+ var/list/async_test = list()
+ var/list/started_tests = list()
+
+ log_unit_test("Testing Started.")
+
+ for(var/test in test_datums)
+ var/datum/unit_test/d = new test()
+
+ if(d.disabled)
+ d.pass("[ASCII_RED]Check Disabled: [d.disabled][ASCII_RESET]")
+ continue
+
+ if(findtext(d.name, "template"))
+ continue
+
+ if(isnull(d.start_test())) // Start the test.
+ d.fail("Test Runtimed")
+
+ if(d.async) // If it's async then we'll need to check back on it later.
+ async_test.Add(d)
+ total_unit_tests++
+
+ //
+ // Check the async tests to see if they are finished.
+ //
+
+ while(async_test.len)
+ for(var/datum/unit_test/test in async_test)
+ if(test.check_result())
+ async_test.Remove(test)
+ sleep(1)
+
+ //
+ // Make sure all Unit Tests reported a result
+ //
+
+ for(var/datum/unit_test/test in started_tests)
+ if(!test.reported)
+ test.fail("Test failed to report a result.")
+
+ if(all_unit_tests_passed)
+ log_unit_test("[ASCII_GREEN]*** All Unit Tests Passed \[[total_unit_tests]\] ***[ASCII_RESET]")
+ world.Del()
+ else
+ log_unit_test("[ASCII_RED]!!! \[[failed_unit_tests]\\[total_unit_tests]\] Unit Tests Failed !!![ASCII_RESET]")
+ world.Del()
\ No newline at end of file
diff --git a/code/unit_tests/zas_tests.dm b/code/unit_tests/zas_tests.dm
new file mode 100644
index 0000000000..a28abaa881
--- /dev/null
+++ b/code/unit_tests/zas_tests.dm
@@ -0,0 +1,119 @@
+#define UT_NORMAL 1
+#define UT_VACUUM 2
+#define UT_NORMAL_COLD 3
+
+/datum/unit_test/zas_area_test
+ name = "ZAS: Area Test Template"
+ var/area_path = null
+ var/expectation = UT_NORMAL
+
+/datum/unit_test/zas_area_test/proc/test_air_in_area(var/test_area, var/expectation = UT_NORMAL)
+ var/test_result = list("result" = 0, "msg" = "")
+
+ var/area/A = locate(test_area)
+
+ if(!istype(A, test_area))
+ test_result["msg"] = "Unable to get [test_area]"
+ return test_result
+
+ var/list/GM_checked = list()
+
+ for(var/turf/simulated/T in A)
+ if(!istype(T) || isnull(T.zone) || istype(T, /turf/simulated/floor/airless))
+ continue
+ if(T.zone.air in GM_checked)
+ continue
+
+ var/t_msg = "Turf: [T] | Location: [T.x] // [T.y] // [T.z]"
+
+ var/datum/gas_mixture/GM = T.return_air()
+ var/pressure = GM.return_pressure()
+ var/temp = GM.temperature
+
+ switch(expectation)
+
+ if(UT_VACUUM)
+ if(pressure > 10)
+ test_result["msg"] = "Pressure out of bounds: [pressure] | [t_msg]"
+ return test_result
+
+
+ if(UT_NORMAL || UT_NORMAL_COLD)
+ if(abs(pressure - ONE_ATMOSPHERE) > 10)
+ test_result["msg"] = "Pressure out of bounds: [pressure] | [t_msg]"
+ return test_result
+
+ if(expectation == UT_NORMAL)
+
+ if(abs(temp - T20C) > 10)
+ test_result["msg"] = "Temperature out of bounds: [temp] | [t_msg]"
+ return test_result
+
+ if(expectation == UT_NORMAL_COLD)
+
+ if(temp > 120)
+ test_result["msg"] = "Temperature out of bounds: [temp] | [t_msg]"
+ return test_result
+
+ GM_checked.Add(GM)
+
+ if(GM_checked.len)
+ test_result["result"] = 1
+ test_result["msg"] = "Checked [GM_checked.len] zones"
+ else
+ test_result["msg"] = "No zones checked."
+
+ return test_result
+
+/datum/unit_test/zas_area_test/start_test()
+ var/list/test = test_air_in_area(area_path, expectation)
+
+ if(isnull(test))
+ fail("Check Runtimed")
+
+ if(test["result"] == 1)
+ pass(test["msg"])
+ else
+ fail(test["msg"])
+ return 1
+
+/datum/unit_test/zas_area_test/supply_centcomm
+ name = "ZAS: Supply Shuttle (CentComm)"
+ area_path = /area/supply/dock
+
+/datum/unit_test/zas_area_test/emergency_shuttle
+ name = "ZAS: Emergency Shuttle"
+ area_path = /area/shuttle/escape/centcom
+
+/datum/unit_test/zas_area_test/ai_chamber
+ name = "ZAS: AI Chamber"
+ area_path = /area/ai
+
+/datum/unit_test/zas_area_test/mining_shuttle_at_station
+ name = "ZAS: Mining Shuttle (Station)"
+ area_path = /area/shuttle/mining/station
+
+/datum/unit_test/zas_area_test/cargo_maint
+ name = "ZAS: Cargo Maintenance"
+ area_path = /area/maintenance/cargo
+
+/datum/unit_test/zas_area_test/eng_shuttle
+ name = "ZAS: Construction Site Shuttle (Station)"
+ area_path = /area/shuttle/constructionsite/station
+
+/datum/unit_test/zas_area_test/virology
+ name = "ZAS: Virology"
+ area_path = /area/medical/virology
+
+/datum/unit_test/zas_area_test/xenobio
+ name = "ZAS: Xenobiology"
+ area_path = /area/rnd/xenobiology
+
+/datum/unit_test/zas_area_test/mining_area
+ name = "ZAS: Mining Area (Vacuum)"
+ area_path = /area/mine/explored
+ expectation = UT_VACUUM
+
+/datum/unit_test/zas_area_test/cargo_bay
+ name = "ZAS: Cargo Bay"
+ area_path = /area/quartermaster/storage
diff --git a/code/world.dm b/code/world.dm
index 3fcdf2eb42..a6d27a8850 100644
--- a/code/world.dm
+++ b/code/world.dm
@@ -64,11 +64,19 @@ var/global/datum/global_init/init = new ()
. = ..()
+#if UNIT_TEST
+ log_unit_test("Unit Tests Enabled. This will destroy the world when testing is complete.")
+ log_unit_test("If you did not intend to enable this please check code/__defines/unit_testing.dm")
+#else
sleep_offline = 1
+#endif
// Set up roundstart seed list.
plant_controller = new()
+ // Set up roundstart gene masking
+ xenobio_controller = new()
+
// This is kinda important. Set up details of what the hell things are made of.
populate_material_list()
@@ -105,6 +113,9 @@ var/global/datum/global_init/init = new ()
processScheduler.deferSetupFor(/datum/controller/process/ticker)
processScheduler.setup()
master_controller.setup()
+#if UNIT_TEST
+ initialize_unit_tests()
+#endif
spawn(3000) //so we aren't adding to the round-start lag
if(config.ToRban)
@@ -147,7 +158,7 @@ var/world_topic_spam_protect_time = world.timeofday
// This is dumb, but spacestation13.com's banners break if player count isn't the 8th field of the reply, so... this has to go here.
s["players"] = 0
s["stationtime"] = worldtime2text()
- s["roundduration"] = round_duration()
+ s["roundduration"] = round_duration_as_text()
if(input["status"] == "2")
var/list/players = list()
@@ -414,6 +425,10 @@ var/world_topic_spam_protect_time = world.timeofday
return 1
/world/proc/load_mode()
+ if(!fexists("data/mode.txt"))
+ return
+
+
var/list/Lines = file2list("data/mode.txt")
if(Lines.len)
if(Lines[1])
@@ -452,7 +467,7 @@ var/world_topic_spam_protect_time = world.timeofday
if (!text)
error("Failed to load config/mods.txt")
else
- var/list/lines = text2list(text, "\n")
+ var/list/lines = splittext(text, "\n")
for(var/line in lines)
if (!line)
continue
@@ -473,7 +488,7 @@ var/world_topic_spam_protect_time = world.timeofday
if (!text)
error("Failed to load config/mentors.txt")
else
- var/list/lines = text2list(text, "\n")
+ var/list/lines = splittext(text, "\n")
for(var/line in lines)
if (!line)
continue
@@ -535,7 +550,7 @@ var/world_topic_spam_protect_time = world.timeofday
features += "hosted by [config.hostedby] "
if (features)
- s += ": [list2text(features, ", ")]"
+ s += ": [jointext(features, ", ")]"
/* does this help? I do not know */
if (src.status != s)
@@ -546,7 +561,9 @@ var/failed_db_connections = 0
var/failed_old_db_connections = 0
/hook/startup/proc/connectDB()
- if(!setup_database_connection())
+ if(!config.sql_enabled)
+ world.log << "SQL connection disabled in config."
+ else if(!setup_database_connection())
world.log << "Your server failed to establish a connection with the feedback database."
else
world.log << "Feedback database connection established."
@@ -588,7 +605,9 @@ proc/establish_db_connection()
/hook/startup/proc/connectOldDB()
- if(!setup_old_database_connection())
+ if(!config.sql_enabled)
+ world.log << "SQL connection disabled in config."
+ else if(!setup_old_database_connection())
world.log << "Your server failed to establish a connection with the SQL database."
else
world.log << "SQL database connection established."
diff --git a/config/example/config.txt b/config/example/config.txt
index 58133a87e7..d7bf655f6e 100644
--- a/config/example/config.txt
+++ b/config/example/config.txt
@@ -58,6 +58,9 @@ LOG_ATTACK
## log pda messages
LOG_PDA
+## log world.log messages
+# LOG_WORLD_OUTPUT
+
## log all Topic() calls (for use by coders in tracking down Topic issues)
# LOG_HREFS
@@ -67,8 +70,8 @@ LOG_PDA
## log admin warning messages
##LOG_ADMINWARN ## Also duplicates a bunch of other messages.
-## sql switching
-# SQL_ENABLED
+## Enable/disable SQL connection (comment out to disable)
+SQL_ENABLED
## disconnect players who did nothing during the set amount of minutes
# KICK_INACTIVE 10
@@ -104,6 +107,9 @@ PROBABILITY TECHNOMANCER 1
PROBABILITY CHANGELING 1
PROBABILITY CULT 1
PROBABILITY EXTEND-A-TRAITORMONGOUS 6
+PROBABILITY LIZARD 1
+PROBABILITY INTRIGUE 1
+PROBABILITY VISITORS 1
## Hash out to disable random events during the round.
ALLOW_RANDOM_EVENTS
diff --git a/config/names/last.txt b/config/names/last.txt
index 5b41e53aae..6080967e2d 100644
--- a/config/names/last.txt
+++ b/config/names/last.txt
@@ -502,7 +502,6 @@ Stamos
Sagan
Hawking
Dawkins
-Goebbles
McShain
McDonohugh
Power
diff --git a/html/browser/common.css b/html/browser/common.css
index 1de45bd953..e2090f2d3d 100644
--- a/html/browser/common.css
+++ b/html/browser/common.css
@@ -23,6 +23,7 @@ a, a:link, a:visited, a:active, .linkOn, .linkOff
padding: 1px 4px 1px 4px;
margin: 0 2px 0 0;
cursor:default;
+ white-space:nowrap;
}
a:hover
@@ -77,6 +78,22 @@ a.icon img, .linkOn.icon img
height: 18px;
}
+a.icon64, .linkOn.icon64, .linkOff.icon64
+{
+ position: relative;
+ padding: 1px 4px 2px 68px;
+ font-size: 55px;
+}
+
+a.icon64 img, .linkOn.icon64 img
+{
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 66px;
+ height: 66px;
+}
+
ul
{
padding: 4px 0 0 10px;
diff --git a/html/changelog.html b/html/changelog.html
index ecdaf0b838..d47e0634cf 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -53,6 +53,290 @@
-->
+
21 June 2016
+
HarpyEagle updated:
+
+ Fixes disarm-attack dislocation chances being so low that you were very likely to break the targeted limb before it would dislocate.
+ It is now possible to disarm-attack with stunbatons like with other melee weapons. Note that this means that using a stunbaton on disarm intent will hurt people.
+ Trying to move while being grabbed will now automatically resist.
+ Small mobs are no longer able to pin larger mobs.
+ Resisting a smaller mob's grab is more likely to be successful.
+ Fixed being able to climb onto a larger mob while restrained, weakened, unconscious, or dead.
+
+
JerTheAce updated:
+
+ CentCom Fax, Admin Prayer, and CentCom emergency messages now prompt admins with a pleasing sound effect.
+ Fax machines now sound like fax machines and not polaroid cameras.
+
+
+
15 June 2016
+
Yoshax updated:
+
+ The categories for items in the cargo ordering console have been reworked. Items shoulw now be in more sensible categories. If you cannot find something, try the sensible category.
+
+
+
14 June 2016
+
Arokha updated:
+
+ Adds video-calls on communicators for existing calls
+ Adds a 'decline' to incoming communicator calls
+ New wallets that let you color them how you want
+ Fixes communicators being able to hear speech
+ Fixes deadcalls to communicators
+ Fixed dropping head/foot/glove items on limb loss
+ Suit coolers inside mecha now work
+ Fixed printing '1' to world over and over
+ Made mech tracking beacon constructable again
+ Change how emotes and LOOC propogate to nearby people
+ Rewrote how get_mobs_and_objs_in_view_fast works
+ Can now see through the red external airlock doors
+
+
Datraen updated:
+
+ Adds a chance for slimes to get mutation toxin for creation of prometheans (40%).
+ Simple animals outside of the hostile subtype won't follow you as a zombie.
+ Xeno hostility is more apparent now.
+ Slime cores can no longer create twice as many slimes through an exploit.
+
+
GinjaNinja32 updated:
+
+ Rewrote drinking glasses. There are now eight types of glass, and drink appearance is based on color and the type of glass you put it in.
+ There are now 'glass extras' you can add to drinks. Straws, drink sticks, and fruit slices (yes, all of them) all work. You can add up to two extras per glass. Add extras by clicking the glass with the extra, remove by clicking the glass with an empty hand while it's in your other hand.
+ Adding 'fizzy' things (soda water, cola, etc) or ice to a drink will make it be fizzy or have ice floating in it.
+
+
Yoshax updated:
+
+ Everything produced in Robotics is now 25% cheaper to produce.
+
+
+
08 June 2016
+
Yoshax updated:
+
+ There is now more soap on the map. The chef also gets a dropper.
+ Changes in gravity now stun for much longer.
+ Bullets now have a better chance of penetrating objects such as filing cabinets, consoles, fax machines, etc. This applies to all bullets.
+ The research outpost toxins department now has reinforced phoron windows.
+ Spears now do their correct damage instead of doing around half.
+
+
+
07 June 2016
+
Datraen updated:
+
+ Adds a trait tool for Xenobio2. It was supposed to be in the initial implementation, but fell through the cracks, sorry!
+ Fixed the xenobio smartfridge not displaying it's starting core amount.
+ Fixed an inverted check with slimes.
+
+
EmperorJon updated:
+
+ Increased loadout points from 10 back to 15. We've added so many things like lunchboxes and communicators that everyone just takes by default, so a few more points will be nice.
+
+
JerTheAce updated:
+
+ Adds a variety of new guns. Some of these guns and and their ammunition are purchasable through antag uplink, cargo, or can be spawned during Renegade or Heist modes.
+ Adds ammunition clips for reloading magazines and some guns (such as bolt-actions).
+ All magazines and ammunitions can now be produced with the autolathe.
+ New bullpup SMG is available in armory area on CentCom level.
+ Revolvers now use 6 shots. Finally.
+ Most guns that didn't use magazines before for some reason (such as the Uzi) now use magazines.
+ All casings now update icons if they have been spent.
+ Corrects Pulse Rifle charge cost consistency.
+ Corrects and improves a number of icons for guns, including a couple of energy guns, and adds fallback icons so they do not turn invisible when held or strapped to your back.
+ Made the icons for some guns look differently depending on what magazine is loaded into them.
+ Made antag uplink menu for guns and ammo more informative.
+ Machinegun magazines no longer fit in pockets.
+ Made names and descriptions for all projectile guns and ammo consistent while removing grammar and spelling errors.
+ Autolathe no longer exploitable for ammo by repeatedly recycling empty magazines.
+ Guns now check a list of compatible magazines.
+ Ranged mobs no longer drop usable .357 casings.
+ Added a variety of new gun sound effects, and swapped out the old default gun sound.
+
+
+
30 May 2016
+
EmperorJon updated:
+
+ Ports Baystation's setup screen changes, thanks to PsiOmegaDelta.
+ Includes character preview with toggleable equipment, visible loadout items, ghost character sprites, and custom colour underwear. Your underwear will have reset, so you'll need to set it back.
+
+
+
29 May 2016
+
Datraen updated:
+
+ Injecting people with mutationtoxin no longer mutates them into slime people.
+ Removes amutationtoxin.
+ Removes slime core recipies.
+ Adds slime monkey cubes, which are created by injecting monkey cubes with mutationtoxin and activating like a posibrain.
+ Maps for Xenobio2 research labs/stations.
+
+
Zuhayr updated:
+
+ Backend change: allowed accessories to be placed on any clothing item with the appropriate variables set.
+
+
+
27 May 2016
+
Yoshax updated:
+
+ Added a new preference that allows you to disable fake nanoui styling on relevant windows. However, if it is your first time loading with this new preference you will need to save your character slot, as there is a problem with satanisiation and it believes the preference is set to disable the nanoui styling.
+
+
+
25 May 2016
+
Serithi updated:
+
+
Yoshax updated:
+
+ Cables of any color can now be merged.
+ More and different colors are now available to be used by cable.
+ Adjusting your suit sensors now displays a message to other people in range that you did so. In addition, seeing someone else adjust someone's suit sensors no longer informs you to what level.
+ Added towels to the loadout. These can be worn on the head, belt or outwear slots. You can also whip people with them for a special message and sound! In addition, using them in-hand will produce an emote where your towel yourself off.
+
+
+
17 May 2016
+
SilveryFerret updated:
+
+ Changes the Death Alarms from announcing over Common channel, to announcing only over Medical and Security channels.
+
+
Yoshax updated:
+
+ Added shotglasses. These can contain 10 units. They have their whole contents swalloed in one gulp. They can be produced in the autolathe or found in the booze vending machine in the bar.
+
+
+
16 May 2016
+
Yoshax updated:
+
+ Uplinks now have a discounted item every 15 minutes. This is per uplink, and random, the discount is also random, but weighted as such that a low discount such as 10% off, or 20% off has a higher chance of happening than a high discount such as 90% of. An item will never cost less than 1.
+ Mercenaries now spawn with their own, personal uplinks.
+ Faked announcements are now once again purchasable from the uplink, and actually work.
+ Adds several new items to the uplink including tactical knives, metal foam grenades, ambrosia seeds and much more.
+
+
+
13 May 2016
+
HarpyEagle updated:
+
+ Shotgun flare illumination now lasts longer, around 3-4 minutes.
+ Fixed attack animation playing when using flashes even if the flash was not actually used due to being broken or recharging.
+ Fixed lightswitches layering over darkness. Now only the light layers above shadow. Lightswitch illumination is now much more subtle.
+
+
Yoshax updated:
+
+ Processing strata floor can now be pried up with a crowbar.
+ Blue carpet can now also be removed with a crowbar, and has had it's ability to burn and have corners restored.
+ Changelings will now store and apply the flavor text of their victims when they absorb and transform into them.
+ Gives Diona a starting funds wage the same as Tajaran and Unathi.
+ Brain damage no longer prevent implant removal surgery.
+
+
+
12 May 2016
+
Yoshax updated:
+
+ Doubles the maximum length of records and names to 6144 & 52, respectively. Also increases book length to 12288. (All numbers are in characters.)
+ Makes various services in the antag uplink purchasable once again. This includes the fake crew arrival.
+ Neckgrabs will no longer force people to the ground. In addition, weakened people can no longer resist.
+ All vending machines now have a small chance of vending an additional item.
+ Smoke from smoke bombs now lasts approximately 3 times as long and spawns some more smoke to make a heavier cloud.
+ Smoke from smoke bombs now properly does a small amount of oxygen loss damage. This damage is per cloud of smoke.
+
+
+
05 May 2016
+
Datraen updated:
+
+ Added three mixed modes, 'Mercenaries & Wizard', 'Mercenaries & Renegades', and 'Traitors & Renegades'.
+
+
Hubblenaut updated:
+
+ Hydroponics vendor and biogenerator offer full bottles of fertilizer. Prices and amount available adjusted to accomodate.
+
+
Kelenius updated:
+
+ Move delay after clicking has been removed.
+
+
PsiOmegaDelta updated:
+
+ Can now prefill the loadout flask and vacuum-flask with a relevant liquid of your choice.
+
+
Yoshax updated:
+
+ Splits gender into biological gender and gender identity. Biological gender modifies the sprite (for between male and female) and gender identity determines what pronouns show up when examined or suchlike. Both are displayed in medical records and such.
+ Smoke grenades can now have their smoke color set by using a multitool on them.
+
+
+
17 April 2016
+
Datraen updated:
+
+ Manually ports /tg/station's dark click code https://github.com/tgstation/-tg-station/pull/10272 by Razharas.
+ Teshari smocks now spawn as smocks, and not aqua jumpsuits.
+ Checks to see if new a two-handed weapon can be wielded when dropped.
+
+
EmperorJon updated:
+
+ Robotics Console now correctly shows the operational/lockdown state and button based off if it thinks the synthetic is locked down or not.
+ Autotraitor synths now behave the same as Traitor synths - they are not locked down.
+
+
Kelenius updated:
+
+ Solars now start wired.
+
+
Neerti updated:
+
+ Ports Bay's volume-based inventory system. It works off by weight classes instead of just slots, allowing you to hold more light items than you could previously.
+ Bulky items can now go in your backpack, however it will require twice the space of a normal sized item.
+ Spacesuits, RIGs, and sniper rifles made heavier.
+
+
+
07 April 2016
+
Datraen updated:
+
+ If a slice of an item is spawned independently, it will get generic settings.
+
+
Kelenius updated:
+
+ Changelings will now change appearance and species together when transforming.
+ Changelings no longer have gender honorifics in lingchat.
+ Absorbing the DNA from any source will allow you to use its name, species, and languages.
+ DNA extract sting won't produce a strange message if there's no target.
+ Cultists no longer need to research words.
+
+
+
04 April 2016
+
Kelenius updated:
+
+ Monkeys can ventcrawl once again.
+
+
Yoshax updated:
+
+ Tasks that take time to perform now have a progress bar.
+ Visibility of progress bars can be toggled in preferences. Default is on.
+
+
+
29 March 2016
+
Datraen updated:
+
+ Added Three New Mixed Gamemodes: Lizard, Changeling + Wizard; Intrigue, Traitors + Ninja; Visitors, Ninja + Wizard.
+ Created a variable for latespawning antagonist templates, for customization of autospawning antagonists in mixed game modes.
+ Fixes the buckled check limiting whether or not someone can interact while sitting.
+ Resisting while buckled and cuffed will process the hand and leg cuffs before unbuckling.
+ Removed JSON encoding of the PDA Manifest list.
+ Microwaves no longer try cooking their components while cooking.
+ Adds a check to prison breaks that makes sure the APC is on before continuing.
+ Artifacts will no longer spawn on floor turfs.
+ Stops traitorborgs from being able to hack other borgs.
+ Stops traitorAIs from being able to hack unlinked borgs.
+
+
Yoshax updated:
+
+ Player preferences has been overhauled. Please update your preferences, found at "Character Setup" > "Global" > "Preferences", as they have been reset.
+
+
+
16 March 2016
+
Datraen updated:
+
+ Harmbaton no longer causes halloss while inactive.
+
+
Kelenius updated:
+
+ Potassium and nitroglycerin explosive grenades now work.
+
+
11 March 2016
Datraen updated:
diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml
index a5163bb75e..9be7a417f6 100644
--- a/html/changelogs/.all_changelog.yml
+++ b/html/changelogs/.all_changelog.yml
@@ -2177,3 +2177,266 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
- rscadd: Hunger is a species var and Teshari get hungry faster.
- rscadd: Small mobs have a reduced climb delay.
- rscadd: Teshari gain more nutrition from meat.
+2016-03-16:
+ Datraen:
+ - bugfix: Harmbaton no longer causes halloss while inactive.
+ Kelenius:
+ - bugfix: Potassium and nitroglycerin explosive grenades now work.
+2016-03-29:
+ Datraen:
+ - rscadd: 'Added Three New Mixed Gamemodes: Lizard, Changeling + Wizard; Intrigue,
+ Traitors + Ninja; Visitors, Ninja + Wizard.'
+ - tweak: Created a variable for latespawning antagonist templates, for customization
+ of autospawning antagonists in mixed game modes.
+ - bugfix: Fixes the buckled check limiting whether or not someone can interact while
+ sitting.
+ - bugfix: Resisting while buckled and cuffed will process the hand and leg cuffs
+ before unbuckling.
+ - tweak: Removed JSON encoding of the PDA Manifest list.
+ - bugfix: Microwaves no longer try cooking their components while cooking.
+ - bugfix: Adds a check to prison breaks that makes sure the APC is on before continuing.
+ - bugfix: Artifacts will no longer spawn on floor turfs.
+ - bugfix: Stops traitorborgs from being able to hack other borgs.
+ - bugfix: Stops traitorAIs from being able to hack unlinked borgs.
+ Yoshax:
+ - tweak: Player preferences has been overhauled. Please update your preferences,
+ found at "Character Setup" > "Global" > "Preferences", as they have been reset.
+2016-04-04:
+ Kelenius:
+ - bugfix: Monkeys can ventcrawl once again.
+ Yoshax:
+ - rscadd: Tasks that take time to perform now have a progress bar.
+ - rscadd: Visibility of progress bars can be toggled in preferences. Default is
+ on.
+2016-04-07:
+ Datraen:
+ - bugfix: If a slice of an item is spawned independently, it will get generic settings.
+ Kelenius:
+ - tweak: Changelings will now change appearance and species together when transforming.
+ - tweak: Changelings no longer have gender honorifics in lingchat.
+ - rscadd: Absorbing the DNA from any source will allow you to use its name, species,
+ and languages.
+ - bugfix: DNA extract sting won't produce a strange message if there's no target.
+ - tweak: Cultists no longer need to research words.
+2016-04-17:
+ Datraen:
+ - rscadd: Manually ports /tg/station's dark click code https://github.com/tgstation/-tg-station/pull/10272
+ by Razharas.
+ - bugfix: Teshari smocks now spawn as smocks, and not aqua jumpsuits.
+ - bugfix: Checks to see if new a two-handed weapon can be wielded when dropped.
+ EmperorJon:
+ - bugfix: Robotics Console now correctly shows the operational/lockdown state and
+ button based off if it thinks the synthetic is locked down or not.
+ - bugfix: Autotraitor synths now behave the same as Traitor synths - they are not
+ locked down.
+ Kelenius:
+ - rscadd: Solars now start wired.
+ Neerti:
+ - rscadd: Ports Bay's volume-based inventory system. It works off by weight classes
+ instead of just slots, allowing you to hold more light items than you could
+ previously.
+ - rscadd: Bulky items can now go in your backpack, however it will require twice
+ the space of a normal sized item.
+ - rscdel: Spacesuits, RIGs, and sniper rifles made heavier.
+2016-05-05:
+ Datraen:
+ - rscadd: Added three mixed modes, 'Mercenaries & Wizard', 'Mercenaries & Renegades',
+ and 'Traitors & Renegades'.
+ Hubblenaut:
+ - tweak: Hydroponics vendor and biogenerator offer full bottles of fertilizer. Prices
+ and amount available adjusted to accomodate.
+ Kelenius:
+ - tweak: Move delay after clicking has been removed.
+ PsiOmegaDelta:
+ - rscadd: Can now prefill the loadout flask and vacuum-flask with a relevant liquid
+ of your choice.
+ Yoshax:
+ - tweak: 'Splits gender into biological gender and gender identity. Biological gender
+ modifies the sprite (for between male and female) and gender identity determines
+ what pronouns show up when examined or suchlike. Both are displayed in medical
+ records and such. '
+ - tweak: Smoke grenades can now have their smoke color set by using a multitool
+ on them.
+2016-05-12:
+ Yoshax:
+ - tweak: Doubles the maximum length of records and names to 6144 & 52, respectively.
+ Also increases book length to 12288. (All numbers are in characters.)
+ - bugfix: Makes various services in the antag uplink purchasable once again. This
+ includes the fake crew arrival.
+ - bugifx: Neckgrabs will no longer force people to the ground. In addition, weakened
+ people can no longer resist.
+ - rscadd: All vending machines now have a small chance of vending an additional
+ item.
+ - tweak: Smoke from smoke bombs now lasts approximately 3 times as long and spawns
+ some more smoke to make a heavier cloud.
+ - bugfix: Smoke from smoke bombs now properly does a small amount of oxygen loss
+ damage. This damage is per cloud of smoke.
+2016-05-13:
+ HarpyEagle:
+ - tweak: Shotgun flare illumination now lasts longer, around 3-4 minutes.
+ - bugfix: Fixed attack animation playing when using flashes even if the flash was
+ not actually used due to being broken or recharging.
+ - bugfix: Fixed lightswitches layering over darkness. Now only the light layers
+ above shadow. Lightswitch illumination is now much more subtle.
+ Yoshax:
+ - bugfix: Processing strata floor can now be pried up with a crowbar.
+ - bugfix: Blue carpet can now also be removed with a crowbar, and has had it's ability
+ to burn and have corners restored.
+ - rscadd: Changelings will now store and apply the flavor text of their victims
+ when they absorb and transform into them.
+ - rscadd: Gives Diona a starting funds wage the same as Tajaran and Unathi.
+ - bugfix: Brain damage no longer prevent implant removal surgery.
+2016-05-16:
+ Yoshax:
+ - rscadd: Uplinks now have a discounted item every 15 minutes. This is per uplink,
+ and random, the discount is also random, but weighted as such that a low discount
+ such as 10% off, or 20% off has a higher chance of happening than a high discount
+ such as 90% of. An item will never cost less than 1.
+ - tweak: Mercenaries now spawn with their own, personal uplinks.
+ - bugfix: Faked announcements are now once again purchasable from the uplink, and
+ actually work.
+ - rscadd: Adds several new items to the uplink including tactical knives, metal
+ foam grenades, ambrosia seeds and much more.
+2016-05-17:
+ SilveryFerret:
+ - rscadd: Changes the Death Alarms from announcing over Common channel, to announcing
+ only over Medical and Security channels.
+ Yoshax:
+ - rscadd: Added shotglasses. These can contain 10 units. They have their whole contents
+ swalloed in one gulp. They can be produced in the autolathe or found in the
+ booze vending machine in the bar.
+2016-05-25:
+ Serithi:
+ - rscadd: Adds in lavender.
+ Yoshax:
+ - tweak: Cables of any color can now be merged.
+ - tweak: More and different colors are now available to be used by cable.
+ - tweak: Adjusting your suit sensors now displays a message to other people in range
+ that you did so. In addition, seeing someone else adjust someone's suit sensors
+ no longer informs you to what level.
+ - rscadd: Added towels to the loadout. These can be worn on the head, belt or outwear
+ slots. You can also whip people with them for a special message and sound! In
+ addition, using them in-hand will produce an emote where your towel yourself
+ off.
+2016-05-27:
+ Yoshax:
+ - rscadd: Added a new preference that allows you to disable fake nanoui styling
+ on relevant windows. However, if it is your first time loading with this new
+ preference you will need to save your character slot, as there is a problem
+ with satanisiation and it believes the preference is set to disable the nanoui
+ styling.
+2016-05-29:
+ Datraen:
+ - rscdel: Injecting people with mutationtoxin no longer mutates them into slime
+ people.
+ - rscdel: Removes amutationtoxin.
+ - rscdel: Removes slime core recipies.
+ - rscadd: Adds slime monkey cubes, which are created by injecting monkey cubes with
+ mutationtoxin and activating like a posibrain.
+ - wip: Maps for Xenobio2 research labs/stations.
+ Zuhayr:
+ - tweak: 'Backend change: allowed accessories to be placed on any clothing item
+ with the appropriate variables set.'
+2016-05-30:
+ EmperorJon:
+ - rscadd: Ports Baystation's setup screen changes, thanks to PsiOmegaDelta.
+ - rscadd: Includes character preview with toggleable equipment, visible loadout
+ items, ghost character sprites, and custom colour underwear. Your underwear
+ will have reset, so you'll need to set it back.
+2016-06-07:
+ Datraen:
+ - rscadd: Adds a trait tool for Xenobio2. It was supposed to be in the initial implementation,
+ but fell through the cracks, sorry!
+ - bugfix: Fixed the xenobio smartfridge not displaying it's starting core amount.
+ - bugfix: Fixed an inverted check with slimes.
+ EmperorJon:
+ - tweak: Increased loadout points from 10 back to 15. We've added so many things
+ like lunchboxes and communicators that everyone just takes by default, so a
+ few more points will be nice.
+ JerTheAce:
+ - rscadd: Adds a variety of new guns. Some of these guns and and their ammunition
+ are purchasable through antag uplink, cargo, or can be spawned during Renegade
+ or Heist modes.
+ - rscadd: Adds ammunition clips for reloading magazines and some guns (such as bolt-actions).
+ - rscadd: All magazines and ammunitions can now be produced with the autolathe.
+ - maptweak: New bullpup SMG is available in armory area on CentCom level.
+ - tweak: Revolvers now use 6 shots. Finally.
+ - tweak: Most guns that didn't use magazines before for some reason (such as the
+ Uzi) now use magazines.
+ - tweak: All casings now update icons if they have been spent.
+ - tweak: Corrects Pulse Rifle charge cost consistency.
+ - tweak: Corrects and improves a number of icons for guns, including a couple of
+ energy guns, and adds fallback icons so they do not turn invisible when held
+ or strapped to your back.
+ - tweak: Made the icons for some guns look differently depending on what magazine
+ is loaded into them.
+ - tweak: Made antag uplink menu for guns and ammo more informative.
+ - tweak: Machinegun magazines no longer fit in pockets.
+ - spellcheck: Made names and descriptions for all projectile guns and ammo consistent
+ while removing grammar and spelling errors.
+ - bugfix: Autolathe no longer exploitable for ammo by repeatedly recycling empty
+ magazines.
+ - bugfix: Guns now check a list of compatible magazines.
+ - bugfix: Ranged mobs no longer drop usable .357 casings.
+ - soundadd: Added a variety of new gun sound effects, and swapped out the old default
+ gun sound.
+2016-06-08:
+ Yoshax:
+ - maptweak: There is now more soap on the map. The chef also gets a dropper.
+ - tweak: Changes in gravity now stun for much longer.
+ - tweak: Bullets now have a better chance of penetrating objects such as filing
+ cabinets, consoles, fax machines, etc. This applies to all bullets.
+ - maptweak: The research outpost toxins department now has reinforced phoron windows.
+ - bugfix: Spears now do their correct damage instead of doing around half.
+2016-06-14:
+ Arokha:
+ - rscadd: Adds video-calls on communicators for existing calls
+ - rscadd: Adds a 'decline' to incoming communicator calls
+ - rscadd: New wallets that let you color them how you want
+ - bugfix: Fixes communicators being able to hear speech
+ - bugfix: Fixes deadcalls to communicators
+ - bugfix: Fixed dropping head/foot/glove items on limb loss
+ - bugfix: Suit coolers inside mecha now work
+ - bugfix: Fixed printing '1' to world over and over
+ - bugfix: Made mech tracking beacon constructable again
+ - tweak: Change how emotes and LOOC propogate to nearby people
+ - tweak: Rewrote how get_mobs_and_objs_in_view_fast works
+ - tweak: Can now see through the red external airlock doors
+ Datraen:
+ - tweak: Adds a chance for slimes to get mutation toxin for creation of prometheans
+ (40%).
+ - bugfix: Simple animals outside of the hostile subtype won't follow you as a zombie.
+ - bugfix: Xeno hostility is more apparent now.
+ - bugfix: Slime cores can no longer create twice as many slimes through an exploit.
+ GinjaNinja32:
+ - rscadd: Rewrote drinking glasses. There are now eight types of glass, and drink
+ appearance is based on color and the type of glass you put it in.
+ - rscadd: There are now 'glass extras' you can add to drinks. Straws, drink sticks,
+ and fruit slices (yes, all of them) all work. You can add up to two extras per
+ glass. Add extras by clicking the glass with the extra, remove by clicking the
+ glass with an empty hand while it's in your other hand.
+ - rscadd: Adding 'fizzy' things (soda water, cola, etc) or ice to a drink will make
+ it be fizzy or have ice floating in it.
+ Yoshax:
+ - tweak: Everything produced in Robotics is now 25% cheaper to produce.
+2016-06-15:
+ Yoshax:
+ - tweak: The categories for items in the cargo ordering console have been reworked.
+ Items shoulw now be in more sensible categories. If you cannot find something,
+ try the sensible category.
+2016-06-21:
+ HarpyEagle:
+ - bugfix: Fixes disarm-attack dislocation chances being so low that you were very
+ likely to break the targeted limb before it would dislocate.
+ - bugfix: It is now possible to disarm-attack with stunbatons like with other melee
+ weapons. Note that this means that using a stunbaton on disarm intent will hurt
+ people.
+ - rscadd: Trying to move while being grabbed will now automatically resist.
+ - tweak: Small mobs are no longer able to pin larger mobs.
+ - tweak: Resisting a smaller mob's grab is more likely to be successful.
+ - bugfix: Fixed being able to climb onto a larger mob while restrained, weakened,
+ unconscious, or dead.
+ JerTheAce:
+ - rscadd: CentCom Fax, Admin Prayer, and CentCom emergency messages now prompt admins
+ with a pleasing sound effect.
+ - tweak: Fax machines now sound like fax machines and not polaroid cameras.
diff --git a/html/changelogs/Datraen-HarmBatonStunFix.yml b/html/changelogs/Datraen-HarmBatonStunFix.yml
deleted file mode 100644
index 18e4c773b9..0000000000
--- a/html/changelogs/Datraen-HarmBatonStunFix.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-author: Datraen
-
-delete-after: True
-
-changes:
- - bugfix: "Harmbaton no longer causes halloss while inactive."
diff --git a/html/changelogs/JerTheAce_HoPLoyalty.yml b/html/changelogs/JerTheAce_HoPLoyalty.yml
new file mode 100644
index 0000000000..e9daa351da
--- /dev/null
+++ b/html/changelogs/JerTheAce_HoPLoyalty.yml
@@ -0,0 +1,36 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# wip (For works in progress)
+# tweak
+# soundadd
+# sounddel
+# rscadd (general adding of nice things)
+# rscdel (general deleting of nice things)
+# imageadd
+# imagedel
+# maptweak
+# spellcheck (typo fixes)
+# experiment
+#################################
+
+# Your name.
+author: JerTheAce
+
+# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
+delete-after: True
+
+# Any changes you've made. See valid prefix list above.
+# INDENT WITH TWO SPACES. NOT TABS. SPACES.
+# SCREW THIS UP AND IT WON'T WORK.
+# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
+# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - rscadd: "Head of Personnel now has a loyalty implant."
diff --git a/html/changelogs/Kelenius-plzExplode.yml b/html/changelogs/Kelenius-plzExplode.yml
deleted file mode 100644
index 0dcc37a82e..0000000000
--- a/html/changelogs/Kelenius-plzExplode.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-author: Kelenius
-
-delete-after: True
-
-changes:
- - bugfix: "Potassium and nitroglycerin explosive grenades now work."
diff --git a/html/changelogs/Sin4_UIs.yml b/html/changelogs/Sin4_UIs.yml
new file mode 100644
index 0000000000..87c1907c43
--- /dev/null
+++ b/html/changelogs/Sin4_UIs.yml
@@ -0,0 +1,37 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# wip (For works in progress)
+# tweak
+# soundadd
+# sounddel
+# rscadd (general adding of nice things)
+# rscdel (general deleting of nice things)
+# imageadd
+# imagedel
+# maptweak
+# spellcheck (typo fixes)
+# experiment
+#################################
+
+# Your name.
+author: Sin4
+
+# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
+delete-after: True
+
+# Any changes you've made. See valid prefix list above.
+# INDENT WITH TWO SPACES. NOT TABS. SPACES.
+# SCREW THIS UP AND IT WON'T WORK.
+# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
+# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - rscadd: "Added NanoUI for Advanced Body Scanners, Arcade, Atmospherics Control Computer, Chemmaster, Cloning Console, Fax Machines, Guestpass Console, Holodeck Computer, Laptop Vendors, Operating Computer, and Photocopiers."
+ - bugfix: "Fixes chemmaster not putting pills in pill bottles."
\ No newline at end of file
diff --git a/icons/effects/progessbar.dmi b/icons/effects/progessbar.dmi
new file mode 100644
index 0000000000..99284060aa
Binary files /dev/null and b/icons/effects/progessbar.dmi differ
diff --git a/icons/misc/buildmode.dmi b/icons/misc/buildmode.dmi
index a9374db340..c294178f91 100644
Binary files a/icons/misc/buildmode.dmi and b/icons/misc/buildmode.dmi differ
diff --git a/icons/mob/animal.dmi b/icons/mob/animal.dmi
index d968c6ed57..daba63e2e9 100644
Binary files a/icons/mob/animal.dmi and b/icons/mob/animal.dmi differ
diff --git a/icons/mob/back.dmi b/icons/mob/back.dmi
index 71d8063dfc..b794295cb1 100644
Binary files a/icons/mob/back.dmi and b/icons/mob/back.dmi differ
diff --git a/icons/mob/belt.dmi b/icons/mob/belt.dmi
index af2de326ab..5f8e67691e 100644
Binary files a/icons/mob/belt.dmi and b/icons/mob/belt.dmi differ
diff --git a/icons/mob/ears.dmi b/icons/mob/ears.dmi
index eeabb79eb4..7326be690e 100644
Binary files a/icons/mob/ears.dmi and b/icons/mob/ears.dmi differ
diff --git a/icons/mob/eyes.dmi b/icons/mob/eyes.dmi
index e548ba4afd..930b8aea70 100644
Binary files a/icons/mob/eyes.dmi and b/icons/mob/eyes.dmi differ
diff --git a/icons/mob/ghost.dmi b/icons/mob/ghost.dmi
new file mode 100644
index 0000000000..34dacd25a3
Binary files /dev/null and b/icons/mob/ghost.dmi differ
diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi
index 3ac4acc6c2..64ef3ec330 100644
Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ
diff --git a/icons/mob/human.dmi b/icons/mob/human.dmi
index e7d69759aa..4f14b81e3e 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 8082f74e48..ececc9ef9a 100644
Binary files a/icons/mob/human_face.dmi and b/icons/mob/human_face.dmi differ
diff --git a/icons/mob/human_races/cyberlimbs/bishop/bishop_alt1.dmi b/icons/mob/human_races/cyberlimbs/bishop/bishop_alt1.dmi
new file mode 100644
index 0000000000..e403436daf
Binary files /dev/null and b/icons/mob/human_races/cyberlimbs/bishop/bishop_alt1.dmi differ
diff --git a/icons/mob/human_races/cyberlimbs/bishop.dmi b/icons/mob/human_races/cyberlimbs/bishop/bishop_main.dmi
similarity index 100%
rename from icons/mob/human_races/cyberlimbs/bishop.dmi
rename to icons/mob/human_races/cyberlimbs/bishop/bishop_main.dmi
diff --git a/icons/mob/human_races/cyberlimbs/bishop/bishop_monitor.dmi b/icons/mob/human_races/cyberlimbs/bishop/bishop_monitor.dmi
new file mode 100644
index 0000000000..edd2236cfb
Binary files /dev/null and b/icons/mob/human_races/cyberlimbs/bishop/bishop_monitor.dmi differ
diff --git a/icons/mob/human_races/cyberlimbs/hesphiastos/hesphiastos_alt1.dmi b/icons/mob/human_races/cyberlimbs/hesphiastos/hesphiastos_alt1.dmi
new file mode 100644
index 0000000000..3b6daa48bc
Binary files /dev/null and b/icons/mob/human_races/cyberlimbs/hesphiastos/hesphiastos_alt1.dmi differ
diff --git a/icons/mob/human_races/cyberlimbs/hesphaistos.dmi b/icons/mob/human_races/cyberlimbs/hesphiastos/hesphiastos_main.dmi
similarity index 100%
rename from icons/mob/human_races/cyberlimbs/hesphaistos.dmi
rename to icons/mob/human_races/cyberlimbs/hesphiastos/hesphiastos_main.dmi
diff --git a/icons/mob/human_races/cyberlimbs/hesphiastos/hesphiastos_monitor.dmi b/icons/mob/human_races/cyberlimbs/hesphiastos/hesphiastos_monitor.dmi
new file mode 100644
index 0000000000..5f3d72f3fc
Binary files /dev/null and b/icons/mob/human_races/cyberlimbs/hesphiastos/hesphiastos_monitor.dmi differ
diff --git a/icons/mob/human_races/cyberlimbs/ipc.dmi b/icons/mob/human_races/cyberlimbs/ipc.dmi
deleted file mode 100644
index e1e948f5b5..0000000000
Binary files a/icons/mob/human_races/cyberlimbs/ipc.dmi and /dev/null differ
diff --git a/icons/mob/human_races/cyberlimbs/morpheus/morpheus_alt1.dmi b/icons/mob/human_races/cyberlimbs/morpheus/morpheus_alt1.dmi
new file mode 100644
index 0000000000..7a0211e603
Binary files /dev/null and b/icons/mob/human_races/cyberlimbs/morpheus/morpheus_alt1.dmi differ
diff --git a/icons/mob/human_races/cyberlimbs/morpheus/morpheus_main.dmi b/icons/mob/human_races/cyberlimbs/morpheus/morpheus_main.dmi
new file mode 100644
index 0000000000..5c466d63ed
Binary files /dev/null and b/icons/mob/human_races/cyberlimbs/morpheus/morpheus_main.dmi differ
diff --git a/icons/mob/human_races/cyberlimbs/nanotrasen/nanotrasen_main.dmi b/icons/mob/human_races/cyberlimbs/nanotrasen/nanotrasen_main.dmi
new file mode 100644
index 0000000000..66a871d1b0
Binary files /dev/null and b/icons/mob/human_races/cyberlimbs/nanotrasen/nanotrasen_main.dmi differ
diff --git a/icons/mob/human_races/cyberlimbs/veymed/veymed_main.dmi b/icons/mob/human_races/cyberlimbs/veymed/veymed_main.dmi
new file mode 100644
index 0000000000..f84744fc89
Binary files /dev/null and b/icons/mob/human_races/cyberlimbs/veymed/veymed_main.dmi differ
diff --git a/icons/mob/human_races/cyberlimbs/wardtakahashi/wardtakahashi_alt1.dmi b/icons/mob/human_races/cyberlimbs/wardtakahashi/wardtakahashi_alt1.dmi
new file mode 100644
index 0000000000..10ea9c9514
Binary files /dev/null and b/icons/mob/human_races/cyberlimbs/wardtakahashi/wardtakahashi_alt1.dmi differ
diff --git a/icons/mob/human_races/cyberlimbs/wardtakahashi.dmi b/icons/mob/human_races/cyberlimbs/wardtakahashi/wardtakahashi_main.dmi
similarity index 100%
rename from icons/mob/human_races/cyberlimbs/wardtakahashi.dmi
rename to icons/mob/human_races/cyberlimbs/wardtakahashi/wardtakahashi_main.dmi
diff --git a/icons/mob/human_races/cyberlimbs/wardtakahashi/wardtakahashi_monitor.dmi b/icons/mob/human_races/cyberlimbs/wardtakahashi/wardtakahashi_monitor.dmi
new file mode 100644
index 0000000000..2777d06ff8
Binary files /dev/null and b/icons/mob/human_races/cyberlimbs/wardtakahashi/wardtakahashi_monitor.dmi differ
diff --git a/icons/mob/human_races/cyberlimbs/xion/xion_alt1.dmi b/icons/mob/human_races/cyberlimbs/xion/xion_alt1.dmi
new file mode 100644
index 0000000000..84a7fec2a9
Binary files /dev/null and b/icons/mob/human_races/cyberlimbs/xion/xion_alt1.dmi differ
diff --git a/icons/mob/human_races/cyberlimbs/xion.dmi b/icons/mob/human_races/cyberlimbs/xion/xion_main.dmi
similarity index 100%
rename from icons/mob/human_races/cyberlimbs/xion.dmi
rename to icons/mob/human_races/cyberlimbs/xion/xion_main.dmi
diff --git a/icons/mob/human_races/cyberlimbs/xion/xion_monitor.dmi b/icons/mob/human_races/cyberlimbs/xion/xion_monitor.dmi
new file mode 100644
index 0000000000..0a049fc759
Binary files /dev/null and b/icons/mob/human_races/cyberlimbs/xion/xion_monitor.dmi differ
diff --git a/icons/mob/human_races/cyberlimbs/zenghu.dmi b/icons/mob/human_races/cyberlimbs/zenghu.dmi
deleted file mode 100644
index bf50878277..0000000000
Binary files a/icons/mob/human_races/cyberlimbs/zenghu.dmi and /dev/null differ
diff --git a/icons/mob/human_races/cyberlimbs/zenghu/zenghu_main.dmi b/icons/mob/human_races/cyberlimbs/zenghu/zenghu_main.dmi
new file mode 100644
index 0000000000..8694f1b16f
Binary files /dev/null and b/icons/mob/human_races/cyberlimbs/zenghu/zenghu_main.dmi differ
diff --git a/icons/mob/human_races/r_skrell.dmi b/icons/mob/human_races/r_skrell.dmi
index bb9f0fcfed..131fe57507 100644
Binary files a/icons/mob/human_races/r_skrell.dmi and b/icons/mob/human_races/r_skrell.dmi differ
diff --git a/icons/mob/items/lefthand.dmi b/icons/mob/items/lefthand.dmi
index 7a7eb3773d..656a732756 100644
Binary files a/icons/mob/items/lefthand.dmi and b/icons/mob/items/lefthand.dmi differ
diff --git a/icons/mob/items/lefthand_backpacks.dmi b/icons/mob/items/lefthand_backpacks.dmi
index f62dd34bae..74da58f2da 100644
Binary files a/icons/mob/items/lefthand_backpacks.dmi and b/icons/mob/items/lefthand_backpacks.dmi differ
diff --git a/icons/mob/items/lefthand_guns.dmi b/icons/mob/items/lefthand_guns.dmi
index b2b3ff87ee..7d495b376d 100644
Binary files a/icons/mob/items/lefthand_guns.dmi and b/icons/mob/items/lefthand_guns.dmi differ
diff --git a/icons/mob/items/righthand.dmi b/icons/mob/items/righthand.dmi
index 5950982cd6..0b0fde8852 100644
Binary files a/icons/mob/items/righthand.dmi and b/icons/mob/items/righthand.dmi differ
diff --git a/icons/mob/items/righthand_backpacks.dmi b/icons/mob/items/righthand_backpacks.dmi
index bad540c939..77ac28ea05 100644
Binary files a/icons/mob/items/righthand_backpacks.dmi and b/icons/mob/items/righthand_backpacks.dmi differ
diff --git a/icons/mob/items/righthand_guns.dmi b/icons/mob/items/righthand_guns.dmi
index 5a6c20b633..fe2bb9e62f 100644
Binary files a/icons/mob/items/righthand_guns.dmi and b/icons/mob/items/righthand_guns.dmi differ
diff --git a/icons/mob/mask.dmi b/icons/mob/mask.dmi
index f8ce408041..6e5777e4bf 100644
Binary files a/icons/mob/mask.dmi and b/icons/mob/mask.dmi differ
diff --git a/icons/mob/monitor_icons.dmi b/icons/mob/monitor_icons.dmi
index 5dbc224fa3..542ff23fcc 100644
Binary files a/icons/mob/monitor_icons.dmi and b/icons/mob/monitor_icons.dmi differ
diff --git a/icons/mob/screen/midnight.dmi b/icons/mob/screen/midnight.dmi
index 8fbf0f1bb0..68c90e2bf6 100644
Binary files a/icons/mob/screen/midnight.dmi and b/icons/mob/screen/midnight.dmi differ
diff --git a/icons/mob/screen/minimalist.dmi b/icons/mob/screen/minimalist.dmi
new file mode 100644
index 0000000000..7d761f042e
Binary files /dev/null and b/icons/mob/screen/minimalist.dmi differ
diff --git a/icons/mob/screen1.dmi b/icons/mob/screen1.dmi
index 5a0ee2283d..9a326ac8a4 100644
Binary files a/icons/mob/screen1.dmi and b/icons/mob/screen1.dmi differ
diff --git a/icons/mob/screen1_robot.dmi b/icons/mob/screen1_robot.dmi
index 3288b58c57..ad0ac4fd77 100644
Binary files a/icons/mob/screen1_robot.dmi and b/icons/mob/screen1_robot.dmi differ
diff --git a/icons/mob/screen1_robot_minimalist.dmi b/icons/mob/screen1_robot_minimalist.dmi
new file mode 100644
index 0000000000..a620785724
Binary files /dev/null and b/icons/mob/screen1_robot_minimalist.dmi differ
diff --git a/icons/mob/screen_full.dmi b/icons/mob/screen_full.dmi
new file mode 100644
index 0000000000..e84b054695
Binary files /dev/null and b/icons/mob/screen_full.dmi differ
diff --git a/icons/mob/screen_gen.dmi b/icons/mob/screen_gen.dmi
new file mode 100644
index 0000000000..cf74d73796
Binary files /dev/null and b/icons/mob/screen_gen.dmi differ
diff --git a/icons/mob/slime2.dmi b/icons/mob/slime2.dmi
new file mode 100644
index 0000000000..33ef237cba
Binary files /dev/null and b/icons/mob/slime2.dmi differ
diff --git a/icons/mob/species/skrell/helmet.dmi b/icons/mob/species/skrell/helmet.dmi
index 2db8b5119a..f5f7445c60 100644
Binary files a/icons/mob/species/skrell/helmet.dmi and b/icons/mob/species/skrell/helmet.dmi differ
diff --git a/icons/mob/species/skrell/suit.dmi b/icons/mob/species/skrell/suit.dmi
index 47ce0a2302..b3a44eea8b 100644
Binary files a/icons/mob/species/skrell/suit.dmi and b/icons/mob/species/skrell/suit.dmi differ
diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi
index d652329659..bff1d90e1b 100644
Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ
diff --git a/icons/mob/ties.dmi b/icons/mob/ties.dmi
index 2222f74a78..33f7790f88 100644
Binary files a/icons/mob/ties.dmi and b/icons/mob/ties.dmi differ
diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi
index 064210face..e86a370ff1 100644
Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ
diff --git a/icons/obj/ammo.dmi b/icons/obj/ammo.dmi
index 1cb6952bb6..ba63e4189f 100644
Binary files a/icons/obj/ammo.dmi and b/icons/obj/ammo.dmi differ
diff --git a/icons/obj/card.dmi b/icons/obj/card.dmi
index 75d2b5ebf4..e1a2c1c2ae 100644
Binary files a/icons/obj/card.dmi and b/icons/obj/card.dmi differ
diff --git a/icons/obj/chemical.dmi b/icons/obj/chemical.dmi
index 8ceefe32cb..2fa64c7ade 100644
Binary files a/icons/obj/chemical.dmi and b/icons/obj/chemical.dmi differ
diff --git a/icons/obj/clothing/belts.dmi b/icons/obj/clothing/belts.dmi
index 1d3d0f0296..7fa721499b 100644
Binary files a/icons/obj/clothing/belts.dmi and b/icons/obj/clothing/belts.dmi differ
diff --git a/icons/obj/clothing/ears.dmi b/icons/obj/clothing/ears.dmi
index 318c17d9be..a2c81adfbe 100644
Binary files a/icons/obj/clothing/ears.dmi and b/icons/obj/clothing/ears.dmi differ
diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi
index be2ea6435c..0c2ceb1337 100644
Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ
diff --git a/icons/obj/clothing/species/seromi/hats.dmi b/icons/obj/clothing/species/seromi/hats.dmi
new file mode 100644
index 0000000000..9398f18018
Binary files /dev/null and b/icons/obj/clothing/species/seromi/hats.dmi differ
diff --git a/icons/obj/clothing/species/seromi/suits.dmi b/icons/obj/clothing/species/seromi/suits.dmi
new file mode 100644
index 0000000000..2d56f7f787
Binary files /dev/null and b/icons/obj/clothing/species/seromi/suits.dmi differ
diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi
index f0624c983f..9ea8f949ad 100644
Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ
diff --git a/icons/obj/clothing/ties.dmi b/icons/obj/clothing/ties.dmi
index cc09803419..f3ef480e1a 100644
Binary files a/icons/obj/clothing/ties.dmi and b/icons/obj/clothing/ties.dmi differ
diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi
index e35bd3f62c..5581b10644 100644
Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ
diff --git a/icons/obj/computer.dmi b/icons/obj/computer.dmi
index 5586975859..1aa366d73e 100644
Binary files a/icons/obj/computer.dmi and b/icons/obj/computer.dmi differ
diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi
index 35d7e732a1..2c2e234a3f 100644
Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ
diff --git a/icons/obj/drinks.dmi b/icons/obj/drinks.dmi
index a85c640d99..5d61df9dff 100644
Binary files a/icons/obj/drinks.dmi and b/icons/obj/drinks.dmi differ
diff --git a/icons/obj/food.dmi b/icons/obj/food.dmi
index d0364f237a..7354bd311b 100644
Binary files a/icons/obj/food.dmi and b/icons/obj/food.dmi differ
diff --git a/icons/obj/forensics.dmi b/icons/obj/forensics.dmi
index 63225c3012..f91d974309 100644
Binary files a/icons/obj/forensics.dmi and b/icons/obj/forensics.dmi differ
diff --git a/icons/obj/furniture.dmi b/icons/obj/furniture.dmi
index 952fc829fa..39dbbdcc67 100644
Binary files a/icons/obj/furniture.dmi and b/icons/obj/furniture.dmi differ
diff --git a/icons/obj/gun.dmi b/icons/obj/gun.dmi
index f9e2f6fc0f..81ad5fa391 100644
Binary files a/icons/obj/gun.dmi and b/icons/obj/gun.dmi differ
diff --git a/icons/obj/hydroponics_growing.dmi b/icons/obj/hydroponics_growing.dmi
index d8914e8cf1..8a5999ad6c 100644
Binary files a/icons/obj/hydroponics_growing.dmi and b/icons/obj/hydroponics_growing.dmi differ
diff --git a/icons/obj/hydroponics_products.dmi b/icons/obj/hydroponics_products.dmi
index 103f0c9210..3bb6cd589c 100644
Binary files a/icons/obj/hydroponics_products.dmi and b/icons/obj/hydroponics_products.dmi differ
diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi
index d8bcc7d184..53836c99c5 100644
Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ
diff --git a/icons/obj/lighting.dmi b/icons/obj/lighting.dmi
index c5f91d2ab2..5b453fbfb4 100644
Binary files a/icons/obj/lighting.dmi and b/icons/obj/lighting.dmi differ
diff --git a/icons/obj/monitors.dmi b/icons/obj/monitors.dmi
index a817a42648..940051fea1 100644
Binary files a/icons/obj/monitors.dmi and b/icons/obj/monitors.dmi differ
diff --git a/icons/obj/power.dmi b/icons/obj/power.dmi
index 099070a4fc..80d768dfe5 100644
Binary files a/icons/obj/power.dmi and b/icons/obj/power.dmi differ
diff --git a/icons/obj/radio.dmi b/icons/obj/radio.dmi
index 75196e856d..e5cd99b207 100644
Binary files a/icons/obj/radio.dmi and b/icons/obj/radio.dmi differ
diff --git a/icons/obj/reagentfillings.dmi b/icons/obj/reagentfillings.dmi
index 4799249dfc..c99de40c15 100644
Binary files a/icons/obj/reagentfillings.dmi and b/icons/obj/reagentfillings.dmi differ
diff --git a/icons/obj/robotics.dmi b/icons/obj/robotics.dmi
index c53e7823ca..85d5a8d0a0 100644
Binary files a/icons/obj/robotics.dmi and b/icons/obj/robotics.dmi differ
diff --git a/icons/obj/seeds.dmi b/icons/obj/seeds.dmi
index 617b5e1f07..b55b4cd39e 100644
Binary files a/icons/obj/seeds.dmi and b/icons/obj/seeds.dmi differ
diff --git a/icons/obj/stationobjs.dmi b/icons/obj/stationobjs.dmi
index 225705ab65..94f46b9c2c 100644
Binary files a/icons/obj/stationobjs.dmi and b/icons/obj/stationobjs.dmi differ
diff --git a/icons/obj/stock_parts.dmi b/icons/obj/stock_parts.dmi
index 920114b550..294f1f82f7 100644
Binary files a/icons/obj/stock_parts.dmi and b/icons/obj/stock_parts.dmi differ
diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi
index 5dff42780f..be5e694f22 100644
Binary files a/icons/obj/storage.dmi and b/icons/obj/storage.dmi differ
diff --git a/icons/obj/toy.dmi b/icons/obj/toy.dmi
index 37785865d1..0f56c51d23 100644
Binary files a/icons/obj/toy.dmi and b/icons/obj/toy.dmi differ
diff --git a/icons/obj/trash.dmi b/icons/obj/trash.dmi
index 18b34ee20c..9b8a5c2584 100644
Binary files a/icons/obj/trash.dmi and b/icons/obj/trash.dmi differ
diff --git a/icons/obj/vending.dmi b/icons/obj/vending.dmi
index 3cf5a6eabc..e4157037b9 100755
Binary files a/icons/obj/vending.dmi and b/icons/obj/vending.dmi differ
diff --git a/icons/obj/wallet.dmi b/icons/obj/wallet.dmi
new file mode 100644
index 0000000000..101a138156
Binary files /dev/null and b/icons/obj/wallet.dmi differ
diff --git a/icons/obj/watercloset.dmi b/icons/obj/watercloset.dmi
index 89d382c824..0a5aeb5b44 100644
Binary files a/icons/obj/watercloset.dmi and b/icons/obj/watercloset.dmi differ
diff --git a/icons/obj/weapons.dmi b/icons/obj/weapons.dmi
index f3d2b6916c..15152c2159 100644
Binary files a/icons/obj/weapons.dmi and b/icons/obj/weapons.dmi differ
diff --git a/icons/pdrink.dmi b/icons/pdrink.dmi
new file mode 100644
index 0000000000..dbbed71d51
Binary files /dev/null and b/icons/pdrink.dmi differ
diff --git a/icons/turf/areas.dmi b/icons/turf/areas.dmi
index 726b9744f3..46a14253bd 100755
Binary files a/icons/turf/areas.dmi and b/icons/turf/areas.dmi differ
diff --git a/icons/turf/overlays.dmi b/icons/turf/overlays.dmi
index 4a48975127..d4dae7101a 100644
Binary files a/icons/turf/overlays.dmi and b/icons/turf/overlays.dmi differ
diff --git a/icons/turf/snow.dmi b/icons/turf/snow.dmi
index 2a6b8625ba..8f13ef9107 100644
Binary files a/icons/turf/snow.dmi and b/icons/turf/snow.dmi differ
diff --git a/icons/turf/snow_new.dmi b/icons/turf/snow_new.dmi
new file mode 100644
index 0000000000..8a95c14bed
Binary files /dev/null and b/icons/turf/snow_new.dmi differ
diff --git a/maps/RandomZLevels/stationCollision.dm b/maps/RandomZLevels/stationCollision.dm
index 3bc32eab3b..6d87f40186 100644
--- a/maps/RandomZLevels/stationCollision.dm
+++ b/maps/RandomZLevels/stationCollision.dm
@@ -17,24 +17,24 @@
/*
* Areas
- */
- //Gateroom gets its own APC specifically for the gate
- /area/awaymission/gateroom
+*/
+//Gateroom gets its own APC specifically for the gate
+/area/awaymission/gateroom
- //Library, medbay, storage room
- /area/awaymission/southblock
+//Library, medbay, storage room
+/area/awaymission/southblock
- //Arrivals, security, hydroponics, shuttles (since they dont move, they dont need specific areas)
- /area/awaymission/arrivalblock
+//Arrivals, security, hydroponics, shuttles (since they dont move, they dont need specific areas)
+/area/awaymission/arrivalblock
- //Crew quarters, cafeteria, chapel
- /area/awaymission/midblock
+//Crew quarters, cafeteria, chapel
+/area/awaymission/midblock
- //engineering, bridge (not really north but it doesnt really need its own APC)
- /area/awaymission/northblock
+//engineering, bridge (not really north but it doesnt really need its own APC)
+/area/awaymission/northblock
- //That massive research room
- /area/awaymission/research
+//That massive research room
+/area/awaymission/research
//Syndicate shuttle
/area/awaymission/syndishuttle
diff --git a/maps/RandomZLevels/zresearchlabs.dmm b/maps/RandomZLevels/zresearchlabs.dmm
index ab02373084..c749e01a21 100644
--- a/maps/RandomZLevels/zresearchlabs.dmm
+++ b/maps/RandomZLevels/zresearchlabs.dmm
@@ -1049,7 +1049,7 @@
"ui" = (/obj/structure/closet/secure_closet/warden,/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/labs/security)
"uj" = (/obj/structure/rack,/obj/item/ammo_magazine/c45,/turf/simulated/floor{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/awaymission/labs/security)
"uk" = (/obj/structure/rack,/obj/item/ammo_magazine/c45,/obj/item/weapon/gun/projectile/silenced/sc_silenced{desc = "A sidearm commonly favored by terrestrial security forces."; icon_state = "g115 Pistol"; name = "Pistol"; silenced = 0},/turf/simulated/floor{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/awaymission/labs/security)
-"ul" = (/obj/structure/table/standard,/obj/item/weapon/storage/backpack/satchel_med,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
+"ul" = (/obj/structure/table/standard,/obj/item/weapon/storage/backpack/satchel/med,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
"um" = (/obj/machinery/computer/prisoner,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/labs/security)
"un" = (/obj/machinery/computer/security,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/labs/security)
"uo" = (/obj/structure/table/standard,/obj/item/weapon/gun/syringe/rapidsyringe,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
diff --git a/maps/overmap/example_sector1.dmm b/maps/overmap/example_sector1.dmm
index ec4ff9bf07..8621c5f558 100644
--- a/maps/overmap/example_sector1.dmm
+++ b/maps/overmap/example_sector1.dmm
@@ -2,16 +2,16 @@
"ab" = (/obj/structure/lattice,/obj/structure/grille,/turf/space,/area)
"ac" = (/obj/structure/grille,/turf/simulated/floor/plating/airless,/area)
"ad" = (/turf/simulated/wall/r_wall,/area)
-"ae" = (/turf/simulated/wall/r_wall,/area/turret_protected/tcomsat)
+"ae" = (/turf/simulated/wall/r_wall,/area/tcomsat)
"af" = (/turf/simulated/wall/r_wall,/area/tcommsat/computer)
-"ag" = (/obj/structure/lattice,/turf/space,/area/turret_protected/tcomsat)
-"ah" = (/turf/space,/area/turret_protected/tcomsat)
-"ai" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/camera{c_tag = "West Wing North"; dir = 2; network = list("Tcomsat")},/turf/space,/area/turret_protected/tcomsat)
-"aj" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
-"ak" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
-"al" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
-"am" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
-"an" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 8},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
+"ag" = (/obj/structure/lattice,/turf/space,/area/tcomsat)
+"ah" = (/turf/space,/area/tcomsat)
+"ai" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/camera{c_tag = "West Wing North"; dir = 2; network = list("Tcomsat")},/turf/space,/area/tcomsat)
+"aj" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/tcomsat)
+"ak" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor/plating,/area/tcomsat)
+"al" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/tcomsat)
+"am" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/plating,/area/tcomsat)
+"an" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 8},/turf/simulated/floor/plating,/area/tcomsat)
"ao" = (/turf/simulated/floor/engine,/area/tcommsat/computer)
"ap" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/green,/turf/simulated/floor,/area/tcommsat/computer)
"aq" = (/obj/machinery/light{dir = 1},/turf/simulated/floor,/area/tcommsat/computer)
@@ -19,36 +19,36 @@
"as" = (/obj/machinery/camera{c_tag = "Lounge"; dir = 2; network = list("Tcomsat")},/turf/simulated/floor,/area/tcommsat/computer)
"at" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/red,/turf/simulated/floor,/area/tcommsat/computer)
"au" = (/turf/simulated/floor,/area/tcommsat/computer)
-"av" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 4},/turf/space,/area/turret_protected/tcomsat)
-"aw" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
-"ax" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/meter,/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
-"ay" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
-"az" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
-"aA" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/tank/air{dir = 8},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
-"aB" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 8},/turf/space,/area/turret_protected/tcomsat)
+"av" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 4},/turf/space,/area/tcomsat)
+"aw" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor/plating,/area/tcomsat)
+"ax" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/meter,/turf/simulated/floor/plating,/area/tcomsat)
+"ay" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/tcomsat)
+"az" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plating,/area/tcomsat)
+"aA" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/tank/air{dir = 8},/turf/simulated/floor/plating,/area/tcomsat)
+"aB" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 8},/turf/space,/area/tcomsat)
"aC" = (/obj/structure/filingcabinet,/turf/simulated/floor,/area/tcommsat/computer)
"aD" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 140; on = 1; pressure_checks = 0},/obj/machinery/camera{c_tag = "Main Computer Room"; dir = 2; network = list("Tcomsat")},/obj/structure/table/standard,/obj/item/weapon/folder/yellow,/obj/item/weapon/folder/yellow,/obj/machinery/light{dir = 1},/turf/simulated/floor,/area/tcommsat/computer)
"aE" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin,/obj/item/weapon/pen/blue{pixel_x = -3; pixel_y = 2},/turf/simulated/floor,/area/tcommsat/computer)
"aF" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp,/turf/simulated/floor,/area/tcommsat/computer)
"aG" = (/obj/item/weapon/syntiflesh{name = "Cuban Pete-Meat"},/turf/simulated/floor/engine,/area/tcommsat/computer)
"aH" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = -29; pixel_y = 0},/turf/simulated/floor,/area/tcommsat/computer)
-"aI" = (/obj/structure/window/reinforced{dir = 4},/turf/space,/area/turret_protected/tcomsat)
-"aJ" = (/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = "0"},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
-"aK" = (/obj/machinery/atmospherics/valve/digital{pipe_color = "cyan"; icon_state = "valve1"; name = "Mixed Air Outlet Valve"; open = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
-"aL" = (/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
-"aM" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/closet,/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
-"aN" = (/obj/structure/window/reinforced{dir = 8},/turf/space,/area/turret_protected/tcomsat)
+"aI" = (/obj/structure/window/reinforced{dir = 4},/turf/space,/area/tcomsat)
+"aJ" = (/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = "0"},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/tcomsat)
+"aK" = (/obj/machinery/atmospherics/valve/digital{pipe_color = "cyan"; icon_state = "valve1"; name = "Mixed Air Outlet Valve"; open = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/tcomsat)
+"aL" = (/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/tcomsat)
+"aM" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/closet,/turf/simulated/floor/plating,/area/tcomsat)
+"aN" = (/obj/structure/window/reinforced{dir = 8},/turf/space,/area/tcomsat)
"aO" = (/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/turf/simulated/floor,/area/tcommsat/computer)
"aP" = (/obj/structure/stool/bed/chair/office/dark{dir = 1},/turf/simulated/floor,/area/tcommsat/computer)
"aQ" = (/obj/machinery/computer/telecomms/monitor{network = "tcommsat"},/obj/item/device/radio/intercom{anyai = 1; freerange = 1; name = "General Listening Channel"; pixel_x = 28; pixel_y = 0},/turf/simulated/floor,/area/tcommsat/computer)
"aR" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/orange,/obj/machinery/light{dir = 8},/turf/simulated/floor,/area/tcommsat/computer)
"aS" = (/obj/structure/lattice,/turf/space,/area)
-"aT" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/lattice,/turf/space,/area/turret_protected/tcomsat)
-"aU" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/space,/area/turret_protected/tcomsat)
-"aV" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
-"aW" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/space,/area/turret_protected/tcomsat)
-"aX" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/space,/area/turret_protected/tcomsat)
-"aY" = (/obj/structure/window/reinforced,/turf/space,/area/turret_protected/tcomsat)
+"aT" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/lattice,/turf/space,/area/tcomsat)
+"aU" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/space,/area/tcomsat)
+"aV" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/tcomsat)
+"aW" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/space,/area/tcomsat)
+"aX" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/space,/area/tcomsat)
+"aY" = (/obj/structure/window/reinforced,/turf/space,/area/tcomsat)
"aZ" = (/obj/structure/sign/securearea,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/wall/r_wall,/area/tcommsat/computer)
"ba" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/tcommsat/computer)
"bb" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor,/area/tcommsat/computer)
@@ -60,10 +60,10 @@
"bh" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor,/area/tcommsat/computer)
"bi" = (/obj/structure/table/standard,/obj/item/weapon/storage/fancy/cigarettes,/turf/simulated/floor,/area/tcommsat/computer)
"bj" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor,/area/tcommsat/computer)
-"bk" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat)
-"bl" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat)
-"bm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/window/reinforced,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat)
-"bn" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/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 = "vault"; dir = 5},/area/turret_protected/tcomsat)
+"bk" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/tcomsat)
+"bl" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/tcomsat)
+"bm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/window/reinforced,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/tcomsat)
+"bn" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/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 = "vault"; dir = 5},/area/tcomsat)
"bo" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/door/airlock/hatch{name = "Telecoms Control Room"; req_access_txt = "61"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor,/area/tcommsat/computer)
"bp" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/floor,/area/tcommsat/computer)
"bq" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/manifold/hidden{tag = "icon-manifold-f (NORTH)"; icon_state = "manifold-f"; dir = 1},/turf/simulated/floor,/area/tcommsat/computer)
@@ -80,10 +80,10 @@
"bB" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area)
"bC" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area)
"bD" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating/airless,/area)
-"bE" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat)
-"bF" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/space,/area/turret_protected/tcomsat)
-"bG" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/obj/machinery/light,/turf/space,/area/turret_protected/tcomsat)
-"bH" = (/obj/structure/window/reinforced{dir = 1},/turf/space,/area/turret_protected/tcomsat)
+"bE" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/tcomsat)
+"bF" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/space,/area/tcomsat)
+"bG" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/obj/machinery/light,/turf/space,/area/tcomsat)
+"bH" = (/obj/structure/window/reinforced{dir = 1},/turf/space,/area/tcomsat)
"bI" = (/obj/machinery/light{dir = 8},/obj/structure/table/standard,/obj/item/device/multitool,/obj/structure/sign/electricshock{pixel_x = -32},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor,/area/tcommsat/computer)
"bJ" = (/obj/machinery/atmospherics/unary/cold_sink/freezer{current_temperature = 80; dir = 1; on = 1},/turf/simulated/floor,/area/tcommsat/computer)
"bK" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/tcommsat/computer)
@@ -92,8 +92,8 @@
"bN" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/tcommsat/chamber)
"bO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall/r_wall,/area/tcommsat/computer)
"bP" = (/obj/machinery/door/airlock/hatch{name = "Telecoms Lounge"; req_access_txt = "61"},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/tcommsat/computer)
-"bQ" = (/obj/machinery/turret{lasers = 1; lasertype = 2},/turf/simulated/floor/plating/airless,/area/turret_protected/tcomsat)
-"bR" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/lattice,/turf/space,/area/turret_protected/tcomsat)
+"bQ" = (/obj/machinery/turret{lasers = 1; lasertype = 2},/turf/simulated/floor/plating/airless,/area/tcomsat)
+"bR" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/lattice,/turf/space,/area/tcomsat)
"bS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plating,/area/tcommsat/chamber)
"bT" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/tcommsat/chamber)
"bU" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/structure/cable,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/tcommsat/chamber)
@@ -101,11 +101,11 @@
"bW" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'."; name = "SERVER ROOM"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact-f (SOUTHWEST)"; icon_state = "intact-f"; dir = 10},/turf/simulated/wall/r_wall,/area/tcommsat/chamber)
"bX" = (/obj/machinery/door/airlock/maintenance_hatch{name = "Telecoms Server Access"; req_access_txt = "61"},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/tcommsat/chamber)
"bY" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'."; name = "SERVER ROOM"; pixel_y = 0},/turf/simulated/wall/r_wall,/area/tcommsat/chamber)
-"bZ" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/lattice,/turf/space,/area/turret_protected/tcomsat)
-"ca" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat)
-"cb" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/turf/space,/area/turret_protected/tcomsat)
-"cc" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat)
-"cd" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/space,/area/turret_protected/tcomsat)
+"bZ" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/lattice,/turf/space,/area/tcomsat)
+"ca" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/tcomsat)
+"cb" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/turf/space,/area/tcomsat)
+"cc" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/tcomsat)
+"cd" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/space,/area/tcomsat)
"ce" = (/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"cf" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"cg" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
@@ -114,37 +114,37 @@
"cj" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"ck" = (/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"cl" = (/turf/simulated/floor/plating/airless,/area)
-"cm" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; layer = 2.4; on = 1},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat)
-"cn" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/space,/area/turret_protected/tcomsat)
+"cm" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; layer = 2.4; on = 1},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/tcomsat)
+"cn" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/space,/area/tcomsat)
"co" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"cp" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
-"cq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
-"cr" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
-"cs" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
-"ct" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat)
-"cu" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/space,/area/turret_protected/tcomsat)
+"cq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plating,/area/tcomsat)
+"cr" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/tcomsat)
+"cs" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plating,/area/tcomsat)
+"ct" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/tcomsat)
+"cu" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/space,/area/tcomsat)
"cv" = (/obj/machinery/telecomms/server/presets/supply,/turf/simulated/floor{dir = 1; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"cw" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"cx" = (/obj/machinery/telecomms/server/presets/common,/turf/simulated/floor{dir = 4; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"cy" = (/obj/machinery/telecomms/server/presets/engineering,/turf/simulated/floor{dir = 4; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
-"cz" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
-"cA" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/micro_laser,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/capacitor,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/turf/simulated/floor,/area/turret_protected/tcomsat)
-"cB" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/obj/machinery/camera{c_tag = "Telecoms Storage"; network = list("Tcomsat")},/turf/simulated/floor,/area/turret_protected/tcomsat)
-"cC" = (/obj/structure/rack,/obj/item/weapon/circuitboard/telecomms/processor,/obj/item/weapon/circuitboard/telecomms/processor,/obj/item/weapon/circuitboard/telecomms/receiver,/obj/item/weapon/circuitboard/telecomms/server,/obj/item/weapon/circuitboard/telecomms/server,/obj/item/weapon/circuitboard/telecomms/bus,/obj/item/weapon/circuitboard/telecomms/bus,/obj/item/weapon/circuitboard/telecomms/broadcaster,/turf/simulated/floor,/area/turret_protected/tcomsat)
+"cz" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/tcomsat)
+"cA" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/micro_laser,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/capacitor,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/turf/simulated/floor,/area/tcomsat)
+"cB" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/obj/machinery/camera{c_tag = "Telecoms Storage"; network = list("Tcomsat")},/turf/simulated/floor,/area/tcomsat)
+"cC" = (/obj/structure/rack,/obj/item/weapon/circuitboard/telecomms/processor,/obj/item/weapon/circuitboard/telecomms/processor,/obj/item/weapon/circuitboard/telecomms/receiver,/obj/item/weapon/circuitboard/telecomms/server,/obj/item/weapon/circuitboard/telecomms/server,/obj/item/weapon/circuitboard/telecomms/bus,/obj/item/weapon/circuitboard/telecomms/bus,/obj/item/weapon/circuitboard/telecomms/broadcaster,/turf/simulated/floor,/area/tcomsat)
"cD" = (/obj/machinery/camera{c_tag = "West Solars"; dir = 8; network = list("Tcomsat")},/turf/space,/area)
-"cE" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = "0"},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat)
-"cF" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/camera{c_tag = "West Wing Middle"; dir = 8; network = list("Tcomsat")},/turf/space,/area/turret_protected/tcomsat)
+"cE" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = "0"},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/tcomsat)
+"cF" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/camera{c_tag = "West Wing Middle"; dir = 8; network = list("Tcomsat")},/turf/space,/area/tcomsat)
"cG" = (/obj/machinery/telecomms/broadcaster/preset_left,/turf/simulated/floor{dir = 1; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"cH" = (/obj/machinery/telecomms/broadcaster/preset_right,/turf/simulated/floor{dir = 4; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
-"cI" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/lattice,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/space,/area/turret_protected/tcomsat)
-"cJ" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat)
-"cK" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/space,/area/turret_protected/tcomsat)
-"cL" = (/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,/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
-"cM" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/treatment,/obj/item/weapon/stock_parts/subspace/treatment,/obj/item/weapon/stock_parts/subspace/treatment,/turf/simulated/floor,/area/turret_protected/tcomsat)
-"cN" = (/turf/simulated/floor,/area/turret_protected/tcomsat)
-"cO" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/analyzer,/obj/item/weapon/stock_parts/subspace/analyzer,/obj/item/weapon/stock_parts/subspace/analyzer,/turf/simulated/floor,/area/turret_protected/tcomsat)
+"cI" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/lattice,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/space,/area/tcomsat)
+"cJ" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/tcomsat)
+"cK" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/space,/area/tcomsat)
+"cL" = (/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,/turf/simulated/floor/plating,/area/tcomsat)
+"cM" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/treatment,/obj/item/weapon/stock_parts/subspace/treatment,/obj/item/weapon/stock_parts/subspace/treatment,/turf/simulated/floor,/area/tcomsat)
+"cN" = (/turf/simulated/floor,/area/tcomsat)
+"cO" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/analyzer,/obj/item/weapon/stock_parts/subspace/analyzer,/obj/item/weapon/stock_parts/subspace/analyzer,/turf/simulated/floor,/area/tcomsat)
"cP" = (/turf/simulated/floor/plating,/area)
-"cQ" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 8},/obj/machinery/light{dir = 4},/turf/space,/area/turret_protected/tcomsat)
+"cQ" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 8},/obj/machinery/light{dir = 4},/turf/space,/area/tcomsat)
"cR" = (/obj/structure/sign/nosmoking_2{pixel_x = -32; pixel_y = 0},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"cS" = (/obj/machinery/telecomms/processor/preset_two,/turf/simulated/floor{dir = 1; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"cT" = (/obj/machinery/telecomms/bus/preset_two,/turf/simulated/floor{dir = 1; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
@@ -154,75 +154,75 @@
"cX" = (/obj/machinery/telecomms/processor/preset_four,/turf/simulated/floor{dir = 4; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"cY" = (/obj/machinery/telecomms/bus/preset_four,/turf/simulated/floor{dir = 4; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"cZ" = (/obj/structure/sign/nosmoking_2{pixel_x = 32; pixel_y = 0},/obj/machinery/light{dir = 4},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
-"da" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/lattice,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/space,/area/turret_protected/tcomsat)
-"db" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat)
-"dc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat)
-"dd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/door/airlock/maintenance_hatch{name = "Telecoms Storage"; req_access_txt = "61"},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat)
-"de" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/amplifier,/obj/item/weapon/stock_parts/subspace/amplifier,/obj/item/weapon/stock_parts/subspace/amplifier,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = 29; pixel_y = 0},/obj/machinery/light/small{dir = 4},/turf/simulated/floor,/area/turret_protected/tcomsat)
+"da" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/lattice,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/space,/area/tcomsat)
+"db" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/tcomsat)
+"dc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/tcomsat)
+"dd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/door/airlock/maintenance_hatch{name = "Telecoms Storage"; req_access_txt = "61"},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/tcomsat)
+"de" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/amplifier,/obj/item/weapon/stock_parts/subspace/amplifier,/obj/item/weapon/stock_parts/subspace/amplifier,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = 29; pixel_y = 0},/obj/machinery/light/small{dir = 4},/turf/simulated/floor,/area/tcomsat)
"df" = (/obj/machinery/telecomms/bus/preset_one,/turf/simulated/floor{dir = 1; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"dg" = (/obj/machinery/telecomms/processor/preset_one,/turf/simulated/floor{dir = 1; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"dh" = (/obj/machinery/telecomms/receiver/preset_left,/turf/simulated/floor{dir = 1; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"di" = (/obj/machinery/telecomms/receiver/preset_right,/turf/simulated/floor{dir = 4; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"dj" = (/obj/machinery/telecomms/bus/preset_three,/turf/simulated/floor{dir = 4; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"dk" = (/obj/machinery/telecomms/processor/preset_three,/turf/simulated/floor{dir = 4; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
-"dl" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/space,/area/turret_protected/tcomsat)
-"dm" = (/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/turret_protected/tcomsat)
-"dn" = (/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor,/area/turret_protected/tcomsat)
-"do" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/ansible,/obj/item/weapon/stock_parts/subspace/ansible,/obj/item/weapon/stock_parts/subspace/ansible,/turf/simulated/floor,/area/turret_protected/tcomsat)
-"dp" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
-"dq" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/transmitter,/obj/item/weapon/stock_parts/subspace/transmitter,/turf/simulated/floor,/area/turret_protected/tcomsat)
-"dr" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/turf/simulated/floor,/area/turret_protected/tcomsat)
-"ds" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/crystal,/obj/item/weapon/stock_parts/subspace/crystal,/obj/item/weapon/stock_parts/subspace/crystal,/turf/simulated/floor,/area/turret_protected/tcomsat)
+"dl" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/space,/area/tcomsat)
+"dm" = (/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/tcomsat)
+"dn" = (/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor,/area/tcomsat)
+"do" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/ansible,/obj/item/weapon/stock_parts/subspace/ansible,/obj/item/weapon/stock_parts/subspace/ansible,/turf/simulated/floor,/area/tcomsat)
+"dp" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/tcomsat)
+"dq" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/transmitter,/obj/item/weapon/stock_parts/subspace/transmitter,/turf/simulated/floor,/area/tcomsat)
+"dr" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/turf/simulated/floor,/area/tcomsat)
+"ds" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/crystal,/obj/item/weapon/stock_parts/subspace/crystal,/obj/item/weapon/stock_parts/subspace/crystal,/turf/simulated/floor,/area/tcomsat)
"dt" = (/obj/machinery/telecomms/server/presets/science,/turf/simulated/floor{dir = 1; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"du" = (/obj/machinery/telecomms/server/presets/medical,/turf/simulated/floor{dir = 1; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"dv" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"dw" = (/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact-f (NORTHWEST)"; icon_state = "intact-f"; dir = 9},/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"dx" = (/obj/machinery/telecomms/server/presets/command,/turf/simulated/floor{dir = 4; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"dy" = (/obj/machinery/telecomms/server/presets/security,/turf/simulated/floor{dir = 4; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
-"dz" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
-"dA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
-"dB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
+"dz" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/tcomsat)
+"dA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/tcomsat)
+"dB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/tcomsat)
"dC" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 140; on = 1; pressure_checks = 0},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"dD" = (/obj/machinery/camera{c_tag = "Central Compartment South"; dir = 1; network = list("Tcomsat")},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light,/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"dE" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 120; icon_state = "in"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"dF" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/wall/r_wall,/area/tcommsat/chamber)
-"dG" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = "0"},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat)
-"dH" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/space,/area/turret_protected/tcomsat)
-"dI" = (/obj/structure/window/reinforced,/obj/structure/lattice,/obj/machinery/light{dir = 1},/turf/space,/area/turret_protected/tcomsat)
-"dJ" = (/turf/simulated/wall/r_wall,/area/turret_protected/tcomfoyer)
-"dK" = (/obj/machinery/turret{dir = 4},/obj/structure/sign/securearea{desc = "A warning sign which reads 'LETHAL TURRETS'. Enter at your own risk!"; name = "LETHAL TURRETS"; pixel_x = -32; pixel_y = 0},/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/turret_protected/tcomfoyer)
-"dL" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor{icon_state = "warningcorner"; dir = 4},/area/turret_protected/tcomfoyer)
-"dM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{icon_state = "warningcorner"; dir = 8},/area/turret_protected/tcomfoyer)
-"dN" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/turretid{ailock = 1; control_area = "\improper Telecoms Satellite"; desc = "A firewall prevents AIs from interacting with this device."; icon_state = "motion1"; lethal = 1; name = "Telecoms lethal turret control"; pixel_y = 29; req_access = list(61)},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/camera{c_tag = "Telecoms Foyer"; dir = 2; network = list("Tcomsat")},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/turret_protected/tcomfoyer)
-"dO" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor{icon_state = "warningcorner"; dir = 4},/area/turret_protected/tcomfoyer)
-"dP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor{icon_state = "warningcorner"; dir = 8},/area/turret_protected/tcomfoyer)
-"dQ" = (/obj/machinery/turret{dir = 8},/obj/structure/sign/securearea{desc = "A warning sign which reads 'LETHAL TURRETS'. Enter at your own risk!"; name = "LETHAL TURRETS"; pixel_x = 32; pixel_y = 0},/turf/simulated/floor{dir = 5; icon_state = "warning"},/area/turret_protected/tcomfoyer)
-"dR" = (/obj/structure/window/reinforced,/obj/machinery/light{dir = 1},/turf/space,/area/turret_protected/tcomsat)
-"dS" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/space,/area/turret_protected/tcomsat)
-"dT" = (/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat)
-"dU" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat)
-"dV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/airlock/hatch{name = "Telecoms West Wing"; req_access_txt = "61"},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/turret_protected/tcomfoyer)
-"dW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/turret_protected/tcomfoyer)
-"dX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/turret_protected/tcomfoyer)
-"dY" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor,/area/turret_protected/tcomfoyer)
-"dZ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/turret_protected/tcomfoyer)
-"ea" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/turf/simulated/floor,/area/turret_protected/tcomfoyer)
-"eb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor,/area/turret_protected/tcomfoyer)
-"ec" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/turret_protected/tcomfoyer)
-"ed" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/airlock/hatch{name = "Telecoms East Wing"; req_access_txt = "61"},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/turret_protected/tcomfoyer)
-"ee" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat)
-"ef" = (/obj/machinery/camera{c_tag = "East Wing South"; dir = 8; network = list("Tcomsat")},/turf/space,/area/turret_protected/tcomsat)
-"eg" = (/obj/machinery/camera{c_tag = "West Wing South"; dir = 4; network = list("Tcomsat")},/turf/space,/area/turret_protected/tcomsat)
-"eh" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/turf/space,/area/turret_protected/tcomsat)
-"ei" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'LETHAL TURRETS'. Enter at your own risk!"; name = "LETHAL TURRETS"; pixel_x = -32; pixel_y = 0},/turf/simulated/floor{dir = 10; icon_state = "warning"},/area/turret_protected/tcomfoyer)
-"ej" = (/obj/machinery/light/small,/turf/simulated/floor{icon_state = "warningcorner"; dir = 1},/area/turret_protected/tcomfoyer)
-"ek" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = "0"},/turf/simulated/floor,/area/turret_protected/tcomfoyer)
-"el" = (/turf/simulated/floor,/area/turret_protected/tcomfoyer)
-"em" = (/obj/machinery/light/small,/turf/simulated/floor{icon_state = "warningcorner"; dir = 2},/area/turret_protected/tcomfoyer)
-"en" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'LETHAL TURRETS'. Enter at your own risk!"; name = "LETHAL TURRETS"; pixel_x = 32; pixel_y = 0},/turf/simulated/floor{dir = 6; icon_state = "warning"},/area/turret_protected/tcomfoyer)
+"dG" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = "0"},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/tcomsat)
+"dH" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/space,/area/tcomsat)
+"dI" = (/obj/structure/window/reinforced,/obj/structure/lattice,/obj/machinery/light{dir = 1},/turf/space,/area/tcomsat)
+"dJ" = (/turf/simulated/wall/r_wall,/area/tcomfoyer)
+"dK" = (/obj/machinery/turret{dir = 4},/obj/structure/sign/securearea{desc = "A warning sign which reads 'LETHAL TURRETS'. Enter at your own risk!"; name = "LETHAL TURRETS"; pixel_x = -32; pixel_y = 0},/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/tcomfoyer)
+"dL" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor{icon_state = "warningcorner"; dir = 4},/area/tcomfoyer)
+"dM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{icon_state = "warningcorner"; dir = 8},/area/tcomfoyer)
+"dN" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/turretid{ailock = 1; control_area = "\improper Telecoms Satellite"; desc = "A firewall prevents AIs from interacting with this device."; icon_state = "motion1"; lethal = 1; name = "Telecoms lethal turret control"; pixel_y = 29; req_access = list(61)},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/camera{c_tag = "Telecoms Foyer"; dir = 2; network = list("Tcomsat")},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/tcomfoyer)
+"dO" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor{icon_state = "warningcorner"; dir = 4},/area/tcomfoyer)
+"dP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor{icon_state = "warningcorner"; dir = 8},/area/tcomfoyer)
+"dQ" = (/obj/machinery/turret{dir = 8},/obj/structure/sign/securearea{desc = "A warning sign which reads 'LETHAL TURRETS'. Enter at your own risk!"; name = "LETHAL TURRETS"; pixel_x = 32; pixel_y = 0},/turf/simulated/floor{dir = 5; icon_state = "warning"},/area/tcomfoyer)
+"dR" = (/obj/structure/window/reinforced,/obj/machinery/light{dir = 1},/turf/space,/area/tcomsat)
+"dS" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/space,/area/tcomsat)
+"dT" = (/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/tcomsat)
+"dU" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/tcomsat)
+"dV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/airlock/hatch{name = "Telecoms West Wing"; req_access_txt = "61"},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/tcomfoyer)
+"dW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/tcomfoyer)
+"dX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/tcomfoyer)
+"dY" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor,/area/tcomfoyer)
+"dZ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/tcomfoyer)
+"ea" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/turf/simulated/floor,/area/tcomfoyer)
+"eb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor,/area/tcomfoyer)
+"ec" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/tcomfoyer)
+"ed" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/airlock/hatch{name = "Telecoms East Wing"; req_access_txt = "61"},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/tcomfoyer)
+"ee" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/tcomsat)
+"ef" = (/obj/machinery/camera{c_tag = "East Wing South"; dir = 8; network = list("Tcomsat")},/turf/space,/area/tcomsat)
+"eg" = (/obj/machinery/camera{c_tag = "West Wing South"; dir = 4; network = list("Tcomsat")},/turf/space,/area/tcomsat)
+"eh" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/turf/space,/area/tcomsat)
+"ei" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'LETHAL TURRETS'. Enter at your own risk!"; name = "LETHAL TURRETS"; pixel_x = -32; pixel_y = 0},/turf/simulated/floor{dir = 10; icon_state = "warning"},/area/tcomfoyer)
+"ej" = (/obj/machinery/light/small,/turf/simulated/floor{icon_state = "warningcorner"; dir = 1},/area/tcomfoyer)
+"ek" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = "0"},/turf/simulated/floor,/area/tcomfoyer)
+"el" = (/turf/simulated/floor,/area/tcomfoyer)
+"em" = (/obj/machinery/light/small,/turf/simulated/floor{icon_state = "warningcorner"; dir = 2},/area/tcomfoyer)
+"en" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'LETHAL TURRETS'. Enter at your own risk!"; name = "LETHAL TURRETS"; pixel_x = 32; pixel_y = 0},/turf/simulated/floor{dir = 6; icon_state = "warning"},/area/tcomfoyer)
"eo" = (/turf/simulated/wall/r_wall,/area/tcommsat/entrance)
-"ep" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = "0"},/turf/simulated/wall/r_wall,/area/turret_protected/tcomfoyer)
-"eq" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/hatch{name = "Telecoms Satellite"; req_access_txt = "61"},/turf/simulated/floor,/area/turret_protected/tcomfoyer)
+"ep" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = "0"},/turf/simulated/wall/r_wall,/area/tcomfoyer)
+"eq" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/hatch{name = "Telecoms Satellite"; req_access_txt = "61"},/turf/simulated/floor,/area/tcomfoyer)
"er" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/tcommsat/entrance)
"es" = (/obj/machinery/power/smes/magical,/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor,/area/tcommsat/entrance)
"et" = (/obj/machinery/power/terminal{dir = 8},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/tcommsat/entrance)
diff --git a/maps/polaris-1.dmm b/maps/polaris-1.dmm
index 11615f7c53..9409c47a3b 100644
--- a/maps/polaris-1.dmm
+++ b/maps/polaris-1.dmm
@@ -3,13 +3,13 @@
"aac" = (/obj/effect/landmark{name = "carpspawn"},/turf/space,/area/space)
"aad" = (/obj/structure/lattice,/turf/space,/area/space)
"aae" = (/turf/simulated/wall/r_wall,/area/hallway/secondary/civilian_hallway_fore)
-"aaf" = (/obj/structure/lattice,/obj/machinery/light/small{dir = 8},/turf/space,/area/hallway/secondary/civilian_hallway_fore)
-"aag" = (/obj/structure/lattice,/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/space,/area/hallway/secondary/civilian_hallway_fore)
+"aaf" = (/obj/structure/lattice,/turf/space,/area/mine/unexplored/upper_level)
+"aag" = (/obj/machinery/light/small{dir = 1},/turf/simulated/mineral/floor/ignore_mapgen,/area/hallway/secondary/civilian_hallway_fore)
"aah" = (/turf/simulated/mineral,/area/mine/unexplored/upper_level)
-"aai" = (/turf/simulated/shuttle/wall{icon_state = "swall_s"; dir = 4},/area/shuttle/cryo/station)
+"aai" = (/obj/effect/floor_decal/industrial/warning/corner,/turf/simulated/floor/airless,/area/mine/unexplored/upper_level)
"aaj" = (/turf/simulated/shuttle/wall,/area/shuttle/cryo/station)
"aak" = (/turf/simulated/shuttle/wall{icon_state = "swall_t"; dir = 1},/area/shuttle/cryo/station)
-"aal" = (/turf/simulated/shuttle/wall{icon_state = "swall_s"; dir = 2},/area/shuttle/cryo/station)
+"aal" = (/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/airless,/area/mine/unexplored/upper_level)
"aam" = (/turf/simulated/shuttle/wall{icon_state = "swall_t"; dir = 8},/area/shuttle/cryo/station)
"aan" = (/turf/simulated/shuttle/wall{icon_state = "swall15"; dir = 2},/area/shuttle/cryo/station)
"aao" = (/turf/simulated/shuttle/wall{icon_state = "swall_t"; dir = 4},/area/shuttle/cryo/station)
@@ -28,8 +28,8 @@
"aaB" = (/obj/machinery/cryopod,/turf/simulated/shuttle/floor,/area/shuttle/cryo/station)
"aaC" = (/obj/machinery/hologram/holopad,/turf/simulated/shuttle/floor,/area/shuttle/cryo/station)
"aaD" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/airless,/area/shuttle/cryo/station)
-"aaE" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/closet/emcloset,/obj/machinery/light,/turf/simulated/shuttle/floor,/area/shuttle/cryo/station)
-"aaF" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/closet/emcloset,/obj/machinery/light,/turf/simulated/shuttle/floor,/area/shuttle/cryo/station)
+"aaE" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/light,/obj/structure/closet/emcloset,/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/shuttle/floor,/area/shuttle/cryo/station)
+"aaF" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/closet/emcloset,/obj/machinery/light,/obj/item/weapon/storage/toolbox/emergency,/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/shuttle/floor,/area/shuttle/cryo/station)
"aaG" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/airless,/area/shuttle/cryo/station)
"aaH" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"},/turf/space,/area/shuttle/cryo/station)
"aaI" = (/obj/structure/shuttle/engine/propulsion,/turf/space,/area/shuttle/cryo/station)
@@ -40,224 +40,224 @@
"aaN" = (/turf/simulated/wall,/area/hallway/secondary/civilian_hallway_fore)
"aaO" = (/obj/machinery/door/firedoor/glass,/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth{frequency = 1380; id_tag = "cryostorage_shuttle_berth"; name = "cryostorage shuttle berth controller"; pixel_x = -26; pixel_y = 0; tag_door = "cryostorage_shuttle_berth_hatch"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
"aaP" = (/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
-"aaQ" = (/turf/simulated/wall/r_wall,/area/crew_quarters/sleep/Dorm_1)
+"aaQ" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/unexplored/upper_level)
"aaR" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
"aaS" = (/turf/simulated/wall,/area/maintenance/locker)
-"aaT" = (/obj/structure/closet/secure_closet/personal,/turf/simulated/floor/wood,/area/crew_quarters/sleep/Dorm_1)
-"aaU" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/orange,/turf/simulated/floor/wood,/area/crew_quarters/sleep/Dorm_1)
-"aaV" = (/obj/structure/closet/secure_closet/personal,/obj/machinery/light{dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/sleep/Dorm_1)
-"aaW" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/red,/turf/simulated/floor/wood,/area/crew_quarters/sleep/Dorm_1)
-"aaX" = (/obj/structure/closet/secure_closet/personal,/obj/machinery/camera/network/civilian{c_tag = "Civ - Dorms 1"; dir = 2},/turf/simulated/floor/wood,/area/crew_quarters/sleep/Dorm_1)
-"aaY" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/blue,/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/wood,/area/crew_quarters/sleep/Dorm_1)
-"aaZ" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/brown,/obj/machinery/light{dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/sleep/Dorm_1)
-"aba" = (/obj/structure/table/woodentable,/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/floor/wood,/area/crew_quarters/sleep/Dorm_1)
+"aaT" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/airless,/area/mine/unexplored/upper_level)
+"aaU" = (/turf/simulated/floor/airless,/area/mine/unexplored/upper_level)
+"aaV" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/airless,/area/mine/unexplored/upper_level)
+"aaW" = (/obj/structure/table/rack,/turf/simulated/floor/airless,/area/mine/unexplored/upper_level)
+"aaX" = (/obj/effect/decal/cleanable/blood/oil/streak{amount = 0},/turf/simulated/floor/airless,/area/mine/unexplored/upper_level)
+"aaY" = (/obj/effect/decal/cleanable/generic,/turf/simulated/floor/airless,/area/mine/unexplored/upper_level)
+"aaZ" = (/obj/structure/table/rack{dir = 1},/obj/item/weapon/extinguisher,/obj/item/clothing/head/hardhat/red,/obj/item/device/flashlight,/turf/simulated/floor/airless,/area/mine/unexplored/upper_level)
+"aba" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/mine/unexplored/upper_level)
"abb" = (/obj/structure/sign/directions/engineering{dir = 2; pixel_y = 32; pixel_z = -8},/obj/structure/sign/directions/security{dir = 2; pixel_y = 32},/obj/structure/sign/directions/cargo{dir = 2; pixel_y = 32; pixel_z = 8},/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 1},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/civilian_hallway_fore)
"abc" = (/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
"abd" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
"abe" = (/obj/structure/sign/directions/science{dir = 2; pixel_y = 32; pixel_z = -8},/obj/structure/sign/directions/medical{dir = 2; pixel_y = 32},/obj/structure/sign/directions/evac{pixel_y = 32; pixel_z = 8},/obj/machinery/camera/network/northern_star{c_tag = "Hall - Civilian Primary Fore 1"; dir = 9},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/civilian_hallway_fore)
-"abf" = (/obj/machinery/newscaster{pixel_x = -30},/turf/simulated/floor/carpet,/area/crew_quarters/sleep/Dorm_1)
-"abg" = (/turf/simulated/floor/carpet,/area/crew_quarters/sleep/Dorm_1)
-"abh" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/carpet,/area/crew_quarters/sleep/Dorm_1)
-"abi" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/carpet,/area/crew_quarters/sleep/Dorm_1)
-"abj" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/carpet,/area/crew_quarters/sleep/Dorm_1)
-"abk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light_switch{pixel_x = 26; pixel_y = 26},/turf/simulated/floor/carpet,/area/crew_quarters/sleep/Dorm_1)
-"abl" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock{id_tag = null; name = "Dorm 1"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep/Dorm_1)
-"abm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
-"abn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
+"abf" = (/obj/structure/closet/emcloset,/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/turf/simulated/floor/airless,/area/mine/unexplored/upper_level)
+"abg" = (/obj/structure/door_assembly/door_assembly_mai,/turf/simulated/floor/airless,/area/mine/unexplored/upper_level)
+"abh" = (/obj/machinery/power/solar{id = "portsolar"; name = "Port Solar Array"},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/auxstarboard)
+"abi" = (/obj/machinery/power/solar{id = "portsolar"; name = "Port Solar Array"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/auxstarboard)
+"abj" = (/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/airless,/area/solar/auxstarboard)
+"abk" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
+"abl" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
+"abm" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
+"abn" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/power/terminal{dir = 4},/obj/machinery/light/small{dir = 1},/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/simulated/floor,/area/maintenance/auxsolarstarboard)
"abo" = (/turf/simulated/floor/tiled/dark,/area/hallway/secondary/civilian_hallway_fore)
"abp" = (/obj/machinery/door/airlock/maintenance{req_access = list(12)},/obj/machinery/door/firedoor,/turf/simulated/floor,/area/maintenance/locker)
"abq" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/maintenance/locker)
-"abr" = (/obj/machinery/light/small{dir = 1},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/maintenance/locker)
+"abr" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector,/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/turf/simulated/floor,/area/maintenance/auxsolarstarboard)
"abs" = (/obj/item/stack/material/glass/reinforced,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/maintenance/locker)
"abt" = (/turf/simulated/floor,/area/maintenance/locker)
-"abu" = (/obj/structure/closet/crate,/turf/simulated/floor/plating,/area/maintenance/locker)
+"abu" = (/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/effect/floor_decal/industrial/warning,/obj/machinery/power/smes/buildable{charge = 0; RCon_tag = "Solar - Fore Starboard"},/turf/simulated/floor,/area/maintenance/auxsolarstarboard)
"abv" = (/obj/structure/closet/wardrobe/grey,/obj/item/weapon/storage/backpack,/obj/item/weapon/storage/backpack,/turf/simulated/floor/plating,/area/maintenance/locker)
-"abw" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/tank/oxygen,/obj/item/weapon/storage/belt/utility,/obj/item/clothing/mask/breath,/turf/simulated/floor/plating,/area/maintenance/locker)
-"abx" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/extinguisher,/turf/simulated/floor/plating,/area/maintenance/locker)
-"aby" = (/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/carpet,/area/crew_quarters/sleep/Dorm_1)
-"abz" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/carpet,/area/crew_quarters/sleep/Dorm_1)
-"abA" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/carpet,/area/crew_quarters/sleep/Dorm_1)
-"abB" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock{id_tag = null; name = "Dorm 1"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/wood,/area/crew_quarters/sleep/Dorm_1)
-"abC" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
+"abw" = (/obj/structure/closet/emcloset,/turf/simulated/floor,/area/maintenance/library)
+"abx" = (/obj/machinery/power/tracker,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/airless,/area/solar/auxstarboard)
+"aby" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/airless,/area/solar/auxstarboard)
+"abz" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "solar_chapel_outer"; locked = 1; name = "Engineering External Access"; req_access = list(11,13)},/turf/simulated/floor,/area/maintenance/auxsolarstarboard)
+"abA" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "solar_chapel_airlock"; name = "exterior access button"; pixel_x = 25; pixel_y = -25; req_access = list(11,13)},/turf/simulated/floor/airless,/area/solar/auxstarboard)
+"abB" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "solar_chapel_inner"; locked = 1; name = "Engineering External Access"; req_access = list(11,13)},/turf/simulated/floor,/area/maintenance/auxsolarstarboard)
+"abC" = (/obj/effect/floor_decal/industrial/warning/full,/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "solar_tool_pump"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1379; id_tag = "solar_chapel_airlock"; pixel_x = 0; pixel_y = 28; req_access = list(13); tag_airpump = "solar_chapel_pump"; tag_chamber_sensor = "solar_chapel_sensor"; tag_exterior_door = "solar_chapel_outer"; tag_interior_door = "solar_chapel_inner"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "solar_chapel_sensor"; pixel_x = 0; pixel_y = -26},/turf/simulated/floor,/area/maintenance/auxsolarstarboard)
"abD" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
"abE" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
-"abF" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
+"abF" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor,/area/maintenance/auxsolarstarboard)
"abG" = (/obj/structure/closet/emcloset,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/civilian_hallway_fore)
"abH" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor,/area/maintenance/locker)
"abI" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/maintenance/locker)
"abJ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/locker)
"abK" = (/obj/item/weapon/material/shard{icon_state = "medium"},/obj/item/stack/rods,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/maintenance/locker)
"abL" = (/obj/machinery/floodlight,/turf/simulated/floor,/area/maintenance/locker)
-"abM" = (/obj/structure/closet/secure_closet/personal,/obj/machinery/light,/turf/simulated/floor/wood,/area/crew_quarters/sleep/Dorm_1)
-"abN" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/blue,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/sleep/Dorm_1)
-"abO" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/brown,/obj/machinery/light,/turf/simulated/floor/wood,/area/crew_quarters/sleep/Dorm_1)
-"abP" = (/obj/structure/undies_wardrobe,/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/wood,/area/crew_quarters/sleep/Dorm_1)
-"abQ" = (/obj/machinery/atm{pixel_x = -32},/obj/machinery/light,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/civilian_hallway_fore)
-"abR" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
+"abM" = (/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/obj/effect/decal/cleanable/dirt,/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "solar_chapel_airlock"; name = "interior access button"; pixel_x = -26; pixel_y = 26; req_access = list(11,13)},/turf/simulated/floor,/area/maintenance/auxsolarstarboard)
+"abN" = (/obj/machinery/door/airlock/engineering{icon_state = "door_closed"; locked = 0; name = "Fore Port Solar Access"; req_access = list(11)},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/maintenance/auxsolarstarboard)
+"abO" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/maintenance/auxsolarstarboard)
+"abP" = (/obj/structure/closet/crate,/obj/random/action_figure,/obj/random/action_figure,/obj/random/action_figure,/obj/random/action_figure,/turf/simulated/floor,/area/maintenance/library)
+"abQ" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor,/area/maintenance/library)
+"abR" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
"abS" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
"abT" = (/turf/simulated/wall,/area/crew_quarters/locker)
-"abU" = (/obj/item/weapon/cigbutt,/turf/simulated/floor,/area/maintenance/locker)
-"abV" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 6; icon_state = "intact"; tag = "icon-intact-f (SOUTHEAST)"},/obj/effect/floor_decal/industrial/warning{dir = 9},/turf/simulated/floor/plating,/area/maintenance/locker)
-"abW" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/plating,/area/maintenance/locker)
-"abX" = (/turf/simulated/wall/r_wall,/area/crew_quarters/sleep/Dorm_2)
+"abU" = (/obj/item/weapon/stool,/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/item/stack/cable_coil/yellow,/obj/item/stack/cable_coil/yellow,/turf/simulated/floor,/area/maintenance/auxsolarstarboard)
+"abV" = (/obj/structure/cable/yellow,/obj/machinery/power/solar_control{id = "auxsolareast"; name = "Fore Starboard Solar Control"; track = 0},/turf/simulated/floor,/area/maintenance/auxsolarstarboard)
+"abW" = (/obj/structure/cable,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/machinery/camera/network/engineering{c_tag = "ENG - Solar Fore Starboard"; dir = 1},/turf/simulated/floor,/area/maintenance/auxsolarstarboard)
+"abX" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/maintenance/library)
"abY" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
"abZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
-"aca" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/civilian_hallway_fore)
-"acb" = (/obj/structure/closet/wardrobe/xenos,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
-"acc" = (/obj/structure/closet/wardrobe/black,/turf/simulated/floor/tiled,/area/crew_quarters/locker)
-"acd" = (/obj/structure/closet/wardrobe/mixed,/obj/item/clothing/accessory/storage/knifeharness,/turf/simulated/floor/tiled,/area/crew_quarters/locker)
-"ace" = (/obj/structure/closet/wardrobe/white,/turf/simulated/floor/tiled,/area/crew_quarters/locker)
-"acf" = (/obj/structure/closet/wardrobe/grey,/obj/machinery/camera/network/civilian{c_tag = "Civ - Locker Room Fore"; dir = 2},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
-"acg" = (/obj/machinery/recharge_station,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
-"ach" = (/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"aca" = (/obj/effect/floor_decal/industrial/warning,/obj/structure/inflatable/door,/turf/simulated/floor,/area/maintenance/locker)
+"acb" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/airless,/area/solar/auxstarboard)
+"acc" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
+"acd" = (/obj/machinery/alarm{dir = 8; pixel_x = 25; pixel_y = 0},/turf/simulated/floor,/area/maintenance/library)
+"ace" = (/obj/structure/lattice,/obj/machinery/light/small{dir = 8},/turf/simulated/mineral/floor/ignore_mapgen,/area/hallway/secondary/civilian_hallway_fore)
+"acf" = (/obj/structure/lattice,/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/mineral/floor/ignore_mapgen,/area/hallway/secondary/civilian_hallway_fore)
+"acg" = (/turf/simulated/mineral/floor/ignore_mapgen,/turf/simulated/shuttle/wall{icon_state = "swall_c"; dir = 4},/area/shuttle/cryo/station)
+"ach" = (/turf/simulated/mineral/floor/ignore_mapgen,/turf/simulated/shuttle/wall{icon_state = "swall_c"; dir = 2; layer = 2},/area/shuttle/cryo/station)
"aci" = (/obj/machinery/lapvend,/turf/simulated/floor/tiled,/area/crew_quarters/locker)
-"acj" = (/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{dir = 8; icon_state = "map"; tag = "icon-manifold-f (WEST)"},/obj/machinery/meter,/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/simulated/floor/plating,/area/maintenance/locker)
-"ack" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 8},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/maintenance/locker)
-"acl" = (/obj/structure/closet/secure_closet/personal,/turf/simulated/floor/wood,/area/crew_quarters/sleep/Dorm_2)
-"acm" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/yellow,/turf/simulated/floor/wood,/area/crew_quarters/sleep/Dorm_2)
-"acn" = (/obj/structure/closet/secure_closet/personal,/obj/machinery/light{dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/sleep/Dorm_2)
-"aco" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/purple,/turf/simulated/floor/wood,/area/crew_quarters/sleep/Dorm_2)
-"acp" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/mime,/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/wood,/area/crew_quarters/sleep/Dorm_2)
-"acq" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/green,/obj/machinery/light{dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/sleep/Dorm_2)
-"acr" = (/obj/structure/table/woodentable,/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/floor/wood,/area/crew_quarters/sleep/Dorm_2)
-"acs" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24; pixel_y = 0},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/civilian_hallway_fore)
-"act" = (/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"acj" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/structure/inflatable/door,/turf/simulated/floor,/area/maintenance/locker)
+"ack" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/turf/simulated/floor,/area/maintenance/library)
+"acl" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/light/small{dir = 8},/turf/simulated/floor,/area/maintenance/library)
+"acm" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1; icon_state = "map"; tag = "icon-manifold-f (NORTH)"},/turf/simulated/floor,/area/maintenance/library)
+"acn" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor,/area/maintenance/library)
+"aco" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor,/area/maintenance/library)
+"acp" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/airless,/area/solar/auxstarboard)
+"acq" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5; icon_state = "intact"; tag = "icon-intact-f (NORTHEAST)"},/obj/structure/closet/emcloset,/turf/simulated/floor,/area/maintenance/library)
+"acr" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/library)
+"acs" = (/obj/machinery/floodlight,/turf/simulated/floor,/area/maintenance/library)
+"act" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/disposalpipe/junction{icon_state = "pipe-j1"; dir = 4},/turf/simulated/floor,/area/maintenance/library)
"acu" = (/turf/simulated/floor/tiled,/area/crew_quarters/locker)
-"acv" = (/obj/structure/closet/secure_closet/personal,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"acv" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor,/area/maintenance/library)
"acw" = (/obj/structure/closet/secure_closet/personal,/turf/simulated/floor/tiled,/area/crew_quarters/locker)
-"acx" = (/obj/effect/decal/cleanable/spiderling_remains,/obj/machinery/atmospherics/valve,/turf/simulated/floor/plating,/area/maintenance/locker)
+"acx" = (/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,/turf/simulated/floor/plating,/area/maintenance/library)
"acy" = (/turf/space,/area/syndicate_station/north)
"acz" = (/obj/structure/grille,/turf/space,/area/space)
"acA" = (/obj/structure/grille,/obj/structure/lattice,/turf/space,/area/space)
-"acB" = (/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/carpet,/area/crew_quarters/sleep/Dorm_2)
-"acC" = (/turf/simulated/floor/carpet,/area/crew_quarters/sleep/Dorm_2)
-"acD" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/carpet,/area/crew_quarters/sleep/Dorm_2)
-"acE" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/light_switch{pixel_x = 26; pixel_y = 26},/turf/simulated/floor/carpet,/area/crew_quarters/sleep/Dorm_2)
-"acF" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock{id_tag = null; name = "Dorm 2"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/wood,/area/crew_quarters/sleep/Dorm_2)
-"acG" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
-"acH" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
-"acI" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"acB" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/maintenance/library)
+"acC" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/maintenance/library)
+"acD" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor,/area/maintenance/library)
+"acE" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor,/area/maintenance/library)
+"acF" = (/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,/turf/simulated/floor/plating,/area/maintenance/library)
+"acG" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor,/area/maintenance/library)
+"acH" = (/obj/structure/girder,/turf/simulated/floor,/area/maintenance/locker)
+"acI" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/turf/simulated/floor,/area/maintenance/library)
"acJ" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled,/area/crew_quarters/locker)
-"acK" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/crew_quarters/locker)
-"acL" = (/obj/structure/closet/secure_closet/personal,/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
-"acM" = (/obj/machinery/atmospherics/pipe/simple/visible/universal,/turf/simulated/floor/plating,/area/maintenance/locker)
+"acK" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/library)
+"acL" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/turf/simulated/floor,/area/maintenance/library)
+"acM" = (/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor,/area/maintenance/locker)
"acN" = (/turf/space,/area/skipjack_station/northeast_solars)
"acO" = (/obj/structure/grille/broken,/obj/structure/lattice,/turf/space,/area/space)
-"acP" = (/obj/machinery/newscaster{pixel_x = -30},/turf/simulated/floor/carpet,/area/crew_quarters/sleep/Dorm_2)
-"acQ" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/carpet,/area/crew_quarters/sleep/Dorm_2)
-"acR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/carpet,/area/crew_quarters/sleep/Dorm_2)
-"acS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/carpet,/area/crew_quarters/sleep/Dorm_2)
-"acT" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock{id_tag = null; name = "Dorm 2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep/Dorm_2)
-"acU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
-"acV" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
-"acW" = (/obj/machinery/door/airlock/glass{name = "Locker Room"},/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
-"acX" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
-"acY" = (/obj/structure/table/standard,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
-"acZ" = (/obj/structure/table/standard,/obj/item/weapon/tape_roll,/turf/simulated/floor/tiled,/area/crew_quarters/locker)
-"ada" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/crew_quarters/locker)
-"adb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor,/area/maintenance/locker)
-"adc" = (/obj/machinery/power/tracker,/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/airless,/area/solar/auxstarboard)
+"acP" = (/obj/machinery/atmospherics/pipe/tank/air,/obj/effect/floor_decal/industrial/warning/corner,/turf/simulated/floor,/area/maintenance/library)
+"acQ" = (/obj/machinery/atmospherics/pipe/tank/air,/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/turf/simulated/floor,/area/maintenance/library)
+"acR" = (/obj/machinery/camera/network/civilian{c_tag = "CIV - Chapel Morgue"; dir = 4},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/tiled/dark,/area/chapel/chapel_morgue)
+"acS" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor,/area/maintenance/library)
+"acT" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/effect/decal/cleanable/dirt,/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor,/area/maintenance/library)
+"acU" = (/obj/machinery/atmospherics/pipe/manifold/hidden/cyan,/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/machinery/meter,/turf/simulated/floor,/area/maintenance/library)
+"acV" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 5; icon_state = "intact"; tag = "icon-intact-f (NORTHWEST)"},/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/simulated/floor,/area/maintenance/library)
+"acW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/universal{dir = 4},/turf/simulated/floor/plating,/area/maintenance/library)
+"acX" = (/obj/machinery/atmospherics/valve{dir = 4},/obj/effect/decal/cleanable/spiderling_remains,/turf/simulated/floor,/area/maintenance/library)
+"acY" = (/obj/structure/closet,/obj/item/device/flashlight,/obj/effect/decal/cleanable/cobweb2,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plating,/area/maintenance/library)
+"acZ" = (/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/maintenance/library)
+"ada" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor,/area/maintenance/locker)
+"adb" = (/obj/machinery/photocopier,/turf/simulated/floor/lino,/area/chapel/office)
+"adc" = (/obj/structure/extinguisher_cabinet{pixel_x = 25; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/tiled/dark,/area/chapel/chapel_morgue)
"add" = (/turf/simulated/wall,/area/maintenance/library)
-"ade" = (/obj/structure/closet/secure_closet/personal,/obj/machinery/light,/turf/simulated/floor/wood,/area/crew_quarters/sleep/Dorm_2)
-"adf" = (/obj/structure/closet/secure_closet/personal,/obj/machinery/camera/network/civilian{c_tag = "Civ - Dorms 2"; dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/sleep/Dorm_2)
-"adg" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/mime,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor/wood,/area/crew_quarters/sleep/Dorm_2)
-"adh" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/green,/obj/machinery/light,/turf/simulated/floor/wood,/area/crew_quarters/sleep/Dorm_2)
-"adi" = (/obj/structure/undies_wardrobe,/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/wood,/area/crew_quarters/sleep/Dorm_2)
-"adj" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/civilian_hallway_fore)
-"adk" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
-"adl" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/camera/network/northern_star{c_tag = "Hall - Civilian Primary Fore 2"; dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
-"adm" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/crew_quarters/locker)
-"adn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
-"ado" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
-"adp" = (/obj/structure/table/standard,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/tiled,/area/crew_quarters/locker)
-"adq" = (/obj/structure/table/standard,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/item/clothing/head/soft/grey{pixel_x = -2; pixel_y = 3},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
-"adr" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
-"ads" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/tiled,/area/crew_quarters/locker)
-"adt" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
-"adu" = (/obj/machinery/door/airlock/maintenance{req_access = list(12)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/maintenance/locker)
-"adv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/maintenance/locker)
-"adw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor,/area/maintenance/locker)
+"ade" = (/turf/space,/area/shuttle/escape_pod1/station)
+"adf" = (/turf/space,/area/shuttle/escape_pod2/station)
+"adg" = (/obj/structure/table/rack,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/clothing/glasses/sunglasses,/turf/simulated/floor/plating,/area/maintenance/library)
+"adh" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor,/area/maintenance/library)
+"adi" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor,/area/maintenance/library)
+"adj" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor,/area/maintenance/library)
+"adk" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/maintenance/library)
+"adl" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/civilian_hallway_fore)
+"adm" = (/obj/machinery/door/airlock/maintenance{req_access = list(12)},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/maintenance/library)
+"adn" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
+"ado" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
+"adp" = (/obj/structure/table/rack,/obj/item/clothing/glasses/sunglasses,/obj/item/clothing/suit/storage/hazardvest,/turf/simulated/floor/plating,/area/maintenance/locker)
+"adq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/dark,/area/chapel/chapel_morgue)
+"adr" = (/turf/simulated/wall/r_wall,/area/maintenance/library)
+"ads" = (/turf/simulated/floor/tiled/dark,/area/maintenance/substation/civilian)
+"adt" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
+"adu" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
+"adv" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/light/small{dir = 1},/turf/simulated/floor,/area/maintenance/substation/civilian)
+"adw" = (/obj/item/weapon/pickaxe/drill,/turf/simulated/floor,/area/maintenance/locker)
"adx" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless,/area/solar/auxstarboard)
"ady" = (/obj/machinery/light/small{dir = 4; pixel_y = 0},/obj/effect/floor_decal/industrial/warning/corner,/turf/simulated/floor/airless,/area/maintenance/library)
-"adz" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/effect/floor_decal/industrial/outline/yellow,/obj/machinery/atmospherics/portables_connector,/turf/simulated/floor,/area/maintenance/library)
-"adA" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
-"adB" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
+"adz" = (/obj/structure/table/steel,/obj/machinery/cell_charger,/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor,/area/maintenance/substation/civilian)
+"adA" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor,/area/maintenance/substation/civilian)
+"adB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
"adC" = (/obj/machinery/door/airlock/glass{name = "Locker Room"},/obj/machinery/door/firedoor/glass,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
-"adD" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
-"adE" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
-"adF" = (/obj/structure/table/standard,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
-"adG" = (/obj/structure/table/standard,/obj/item/weapon/coin/silver,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
-"adH" = (/obj/machinery/hologram/holopad,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
-"adI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
-"adJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"adD" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
+"adE" = (/obj/structure/disposalpipe/segment,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
+"adF" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/tank/oxygen,/obj/item/weapon/storage/belt/utility,/obj/item/clothing/mask/breath,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"adG" = (/obj/structure/closet/wardrobe/grey,/obj/item/weapon/storage/backpack,/obj/item/weapon/storage/backpack,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"adH" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/extinguisher,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"adI" = (/obj/structure/mirror{pixel_y = 25},/turf/simulated/floor,/area/maintenance/security_starboard)
+"adJ" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/mime,/obj/item/weapon/pen/crayon/mime,/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor,/area/maintenance/security_starboard)
"adK" = (/obj/machinery/vending/cola,/turf/simulated/floor/tiled,/area/crew_quarters/locker)
-"adL" = (/obj/structure/cable/yellow,/turf/simulated/floor/airless,/area/solar/auxstarboard)
+"adL" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/airless,/area/solar/starboard)
"adM" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/airless,/area/maintenance/library)
"adN" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "library_maint_outer"; locked = 1; name = "Library Maintenance EVA External Access"; req_access = list(13)},/turf/simulated/floor,/area/maintenance/library)
"adO" = (/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "library_maint_sensor"; pixel_x = 0; pixel_y = 25},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "library_maint_pump"},/obj/effect/floor_decal/industrial/warning{dir = 9},/turf/simulated/floor,/area/maintenance/library)
"adP" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1379; id_tag = "library_maint_airlock"; name = "Airlock Console"; pixel_y = 25; req_access = list(13); tag_airpump = "library_maint_pump"; tag_chamber_sensor = "library_maint_sensor"; tag_exterior_door = "library_maint_outer"; tag_interior_door = "library_maint_inner"},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1; icon_state = "map"; tag = "icon-manifold-f (NORTH)"},/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor,/area/maintenance/library)
"adQ" = (/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "library_maint_inner"; locked = 1; name = "Library Maintenance EVA Internal Access"; req_access = list(13)},/turf/simulated/floor,/area/maintenance/library)
"adR" = (/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "library_maint_airlock"; name = "interior access button"; pixel_x = 0; pixel_y = 25; req_access = list(13)},/turf/simulated/floor,/area/maintenance/library)
-"adS" = (/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/light/small{dir = 1},/turf/simulated/floor,/area/maintenance/library)
-"adT" = (/obj/machinery/atmospherics/pipe/manifold/hidden,/turf/simulated/floor,/area/maintenance/library)
-"adU" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9; icon_state = "intact"; tag = "icon-intact-f (NORTHWEST)"},/turf/simulated/floor,/area/maintenance/library)
+"adS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/maintenance/substation/civilian)
+"adT" = (/turf/simulated/floor,/area/maintenance/substation/civilian)
+"adU" = (/obj/machinery/power/terminal,/obj/structure/cable,/turf/simulated/floor,/area/maintenance/substation/civilian)
"adV" = (/turf/simulated/floor,/area/maintenance/library)
-"adW" = (/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor,/area/maintenance/library)
-"adX" = (/obj/effect/decal/cleanable/blood/oil/streak{amount = 0},/turf/simulated/floor/plating,/area/maintenance/library)
+"adW" = (/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor,/area/maintenance/substation/civilian)
+"adX" = (/obj/structure/table/steel,/turf/simulated/floor,/area/maintenance/security_starboard)
"adY" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor/plating,/area/maintenance/library)
"adZ" = (/obj/structure/table/rack{dir = 1},/obj/item/weapon/extinguisher,/obj/item/clothing/head/hardhat/red,/obj/item/device/flashlight,/turf/simulated/floor/plating,/area/maintenance/library)
"aea" = (/obj/effect/decal/cleanable/generic,/turf/simulated/floor/plating,/area/maintenance/library)
-"aeb" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor,/area/maintenance/library)
-"aec" = (/obj/structure/closet,/obj/item/device/flashlight,/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/plating,/area/maintenance/library)
-"aed" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
-"aee" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
-"aef" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"aeb" = (/obj/structure/closet,/obj/random/contraband,/obj/random/contraband,/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor,/area/maintenance/library)
+"aec" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/light{dir = 8},/turf/simulated/floor/wood,/area/library)
+"aed" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/bed/chair/comfy/black{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/carpet,/area/library)
+"aee" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/carpet,/area/library)
+"aef" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/turf/simulated/floor/wood,/area/library)
"aeg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
-"aeh" = (/obj/machinery/vending/coffee,/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
-"aei" = (/obj/machinery/power/solar{id = "auxsolareast"; name = "Port Auxiliary Solar Array"},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/auxstarboard)
-"aej" = (/turf/simulated/floor/airless,/area/solar/auxstarboard)
+"aeh" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/wood,/area/library)
+"aei" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/maintenance/substation/civilian)
+"aej" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/airless,/area/solar/starboard)
"aek" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "library_maint_airlock"; name = "exterior access button"; pixel_x = 0; pixel_y = -25; req_access = list(13)},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/airless,/area/maintenance/library)
"ael" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "library_maint_pump"},/obj/machinery/light/small,/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/simulated/floor,/area/maintenance/library)
"aem" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9; icon_state = "intact"; tag = "icon-intact-f (NORTHWEST)"},/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/machinery/camera/network/civilian{c_tag = "CIV - Library EVA"; dir = 1},/turf/simulated/floor,/area/maintenance/library)
"aen" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "library_maint_inner"; locked = 1; name = "Library Maintenance EVA Internal Access"; req_access = list(13)},/turf/simulated/floor,/area/maintenance/library)
"aeo" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor,/area/maintenance/library)
-"aep" = (/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/maintenance/library)
-"aeq" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/maintenance/library)
-"aer" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/maintenance/library)
-"aes" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light/small,/turf/simulated/floor,/area/maintenance/library)
-"aet" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/junction{icon_state = "pipe-j1"; dir = 4},/turf/simulated/floor,/area/maintenance/library)
-"aeu" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Maintenance Access"; req_one_access = list(12,37)},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/maintenance/library)
-"aev" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/civilian_hallway_fore)
-"aew" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
-"aex" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/sortjunction/flipped{dir = 4; name = "Locker Room"; sortType = "Locker Room"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
+"aep" = (/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/power/smes/buildable{charge = 0; RCon_tag = "Substation - Civilian"},/turf/simulated/floor,/area/maintenance/substation/civilian)
+"aeq" = (/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/power/sensor{name = "Powernet Sensor - Civilian"; name_tag = "Civilian Subgrid"},/obj/structure/cable/green,/turf/simulated/floor,/area/maintenance/substation/civilian)
+"aer" = (/obj/structure/disposalpipe/segment,/obj/machinery/atm{pixel_x = 32},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
+"aes" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled/dark,/area/chapel/main)
+"aet" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/turf/simulated/floor,/area/maintenance/security_starboard)
+"aeu" = (/obj/machinery/light/small{dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 9},/turf/simulated/floor,/area/maintenance/security_starboard)
+"aev" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 5},/turf/simulated/floor,/area/maintenance/security_starboard)
+"aew" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/obj/machinery/light/small{dir = 8},/obj/structure/closet/emcloset,/turf/simulated/floor,/area/maintenance/security_starboard)
+"aex" = (/obj/item/clothing/head/soft/mime,/obj/item/clothing/mask/gas/mime,/obj/item/clothing/shoes/mime,/obj/item/clothing/under/mime,/obj/structure/closet/crate,/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 5},/turf/simulated/floor,/area/maintenance/security_starboard)
"aey" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
"aez" = (/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
-"aeA" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/crew_quarters/locker)
-"aeB" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"aeA" = (/turf/simulated/mineral,/area/hallway/secondary/escape/fore_escape_pod_hallway)
+"aeB" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/maintenance{req_access = list(12)},/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/hallway/secondary/escape/fore_escape_pod_hallway)
"aeC" = (/obj/machinery/vending/snack,/turf/simulated/floor/tiled,/area/crew_quarters/locker)
-"aeD" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/airless,/area/solar/auxstarboard)
-"aeE" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/airless,/area/solar/auxstarboard)
-"aeF" = (/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/airless,/area/solar/auxstarboard)
-"aeG" = (/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/airless,/area/solar/auxstarboard)
-"aeH" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/airless,/area/solar/auxstarboard)
-"aeI" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/airless,/area/solar/auxstarboard)
-"aeJ" = (/obj/structure/closet/emcloset,/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/turf/simulated/floor,/area/maintenance/library)
-"aeK" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/maintenance/library)
+"aeD" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green{pixel_x = 1; pixel_y = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/carpet,/area/library)
+"aeE" = (/obj/structure/bed/chair/office/dark{dir = 4},/turf/simulated/floor/wood,/area/library)
+"aeF" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/airless,/area/solar/auxstarboard)
+"aeG" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/airless,/area/solar/auxstarboard)
+"aeH" = (/obj/machinery/librarypubliccomp,/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/library)
+"aeI" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
+"aeJ" = (/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/mine/explored/upper_level)
+"aeK" = (/obj/machinery/door/airlock/external{locked = 1; name = "Escape Pod"; welded = 1},/turf/simulated/floor,/area/maintenance/security_starboard)
"aeL" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/maintenance/library)
"aeM" = (/turf/simulated/wall,/area/library_conference_room)
"aeN" = (/obj/machinery/door/airlock/maintenance{name = "Library Maintenance"; req_one_access = list(12,37)},/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/library_conference_room)
"aeO" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor,/area/maintenance/library)
"aeP" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/maintenance/library)
-"aeQ" = (/obj/structure/closet/emcloset,/obj/machinery/light,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/civilian_hallway_fore)
-"aeR" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
-"aeS" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
-"aeT" = (/obj/machinery/light,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/civilian_hallway_fore)
-"aeU" = (/obj/structure/reagent_dispensers/watertank,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"aeQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/carpet,/area/library)
+"aeR" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/tank/oxygen,/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/extinguisher,/obj/machinery/alarm{dir = 8; pixel_x = 25; pixel_y = 0},/turf/simulated/floor/plating,/area/storage/emergency_storage/emergency4)
+"aeS" = (/obj/machinery/camera/network/civilian{c_tag = "CIV - Chapel Maintenance Access"; dir = 1},/turf/simulated/floor/tiled,/area/maintenance/chapel)
+"aeT" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/tiled,/area/maintenance/chapel)
+"aeU" = (/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = -32},/turf/simulated/floor/tiled,/area/maintenance/chapel)
"aeV" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/crew_quarters/locker)
-"aeW" = (/obj/machinery/camera/network/civilian{c_tag = "Civ - Locker Room Mid"; dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"aeW" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "chapel_maint_airlock"; name = "exterior access button"; pixel_x = 0; pixel_y = -25; req_access = list(13)},/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/mine/explored/upper_level)
"aeX" = (/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = -32},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
"aeY" = (/obj/machinery/vending/cigarette,/turf/simulated/floor/tiled,/area/crew_quarters/locker)
-"aeZ" = (/obj/machinery/power/solar{id = "auxsolareast"; name = "Port Auxiliary Solar Array"},/obj/structure/cable/yellow,/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/auxstarboard)
+"aeZ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/maintenance/security_starboard)
"afa" = (/obj/structure/table/woodentable,/obj/machinery/recharger{pixel_y = 0},/obj/machinery/ai_status_display{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/wood,/area/library_conference_room)
"afb" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/wood,/area/library_conference_room)
"afc" = (/turf/simulated/floor/wood,/area/library_conference_room)
@@ -265,13 +265,13 @@
"afe" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor/wood,/area/library_conference_room)
"aff" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/packageWrap,/turf/simulated/floor/wood,/area/library_conference_room)
"afg" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
-"afh" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
+"afh" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor,/area/maintenance/security_starboard)
"afi" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
-"afj" = (/obj/structure/window/reinforced,/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/tiled,/area/crew_quarters/locker)
-"afk" = (/obj/machinery/disposal,/obj/structure/window/reinforced,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"afj" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
+"afk" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/maintenance{req_access = list(12)},/turf/simulated/floor,/area/hallway/secondary/escape/fore_escape_pod_hallway)
"afl" = (/turf/simulated/wall,/area/crew_quarters/locker/locker_toilet)
"afm" = (/obj/machinery/door/airlock{name = "Unisex Restrooms"},/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/locker/locker_toilet)
-"afn" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/maintenance/library)
+"afn" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth{frequency = 1380; id_tag = "escape_pod_1_berth"; pixel_x = -25; pixel_y = 30; tag_door = "escape_pod_1_berth_hatch"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
"afo" = (/obj/structure/filingcabinet,/turf/simulated/floor/wood,/area/library_conference_room)
"afp" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/wood,/area/library_conference_room)
"afq" = (/obj/structure/bed/chair/office/dark,/turf/simulated/floor/wood,/area/library_conference_room)
@@ -281,12 +281,12 @@
"afu" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/wood,/area/library_conference_room)
"afv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
"afw" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
-"afx" = (/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/obj/machinery/washing_machine,/turf/simulated/floor/tiled/white,/area/crew_quarters/locker)
-"afy" = (/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/locker)
-"afz" = (/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/obj/structure/table/standard,/obj/item/device/communicator,/turf/simulated/floor/tiled/white,/area/crew_quarters/locker)
-"afA" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{pixel_x = -28},/obj/machinery/light_switch{pixel_y = 28},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/locker/locker_toilet)
+"afx" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
+"afy" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 22},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
+"afz" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
+"afA" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth{frequency = 1380; id_tag = "escape_pod_2_berth"; pixel_x = -25; pixel_y = 30; tag_door = "escape_pod_2_berth_hatch"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
"afB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/locker/locker_toilet)
-"afC" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/locker/locker_toilet)
+"afC" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
"afD" = (/obj/machinery/door/airlock{name = "Unit 1"},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/locker/locker_toilet)
"afE" = (/obj/machinery/light/small{dir = 4; pixel_y = 0},/obj/structure/toilet{dir = 8},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/locker/locker_toilet)
"afF" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/newscaster{pixel_x = -30},/turf/simulated/floor/wood,/area/library_conference_room)
@@ -298,7 +298,7 @@
"afL" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/wood,/area/library_conference_room)
"afM" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/library_conference_room)
"afN" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 26},/turf/simulated/floor/wood,/area/library_conference_room)
-"afO" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/structure/disposalpipe/segment,/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 26},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
+"afO" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
"afP" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{pixel_x = -28},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/locker/locker_toilet)
"afQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/locker/locker_toilet)
"afR" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/camera/network/civilian{c_tag = "Civ - Locker Room Restroom"; dir = 8},/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/locker/locker_toilet)
@@ -311,24 +311,24 @@
"afY" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/wood,/area/library_conference_room)
"afZ" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/wood,/area/library_conference_room)
"aga" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/camera/network/northern_star{c_tag = "Hall - Civilian Primary Fore 3"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
-"agb" = (/obj/structure/disposalpipe/segment,/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
-"agc" = (/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/tiled/white,/area/crew_quarters/locker)
-"agd" = (/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/obj/machinery/camera/network/civilian{c_tag = "Civ - Locker Room Aft"; dir = 1},/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/crew_quarters/locker)
-"age" = (/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/obj/structure/closet/wardrobe/suit,/turf/simulated/floor/tiled/white,/area/crew_quarters/locker)
+"agb" = (/obj/structure/disposalpipe/junction{dir = 1; icon_state = "pipe-j2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
+"agc" = (/obj/structure/bed/chair/comfy/black,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/carpet,/area/library)
+"agd" = (/obj/machinery/newscaster{pixel_x = 30},/obj/machinery/door/window/northright{name = "Library Desk Door"; req_access = list(37)},/turf/simulated/floor/wood,/area/library)
+"age" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/storage/emergency_storage/emergency4)
"agf" = (/obj/structure/undies_wardrobe,/turf/simulated/floor/tiled/freezer,/area/crew_quarters/locker/locker_toilet)
"agg" = (/turf/simulated/floor/tiled/freezer,/area/crew_quarters/locker/locker_toilet)
"agh" = (/obj/machinery/door/airlock{name = "Unit 2"},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/locker/locker_toilet)
-"agi" = (/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor,/area/maintenance/library)
-"agj" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/maintenance/library)
+"agi" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor,/area/storage/emergency_storage/emergency4)
+"agj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
"agk" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/wood,/area/library_conference_room)
"agl" = (/obj/structure/bed/chair/office/dark{dir = 1},/turf/simulated/floor/wood,/area/library_conference_room)
"agm" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/wood,/area/library_conference_room)
-"agn" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
-"ago" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
-"agp" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
+"agn" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
+"ago" = (/obj/structure/disposalpipe/segment,/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
+"agp" = (/obj/machinery/newscaster{pixel_x = 0; pixel_y = -28},/turf/simulated/floor,/area/maintenance/security_starboard)
"agq" = (/obj/machinery/door/airlock{name = "Unisex Showers"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/tiled/freezer,/area/crew_quarters/locker/locker_toilet)
-"agr" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor,/area/maintenance/library)
-"ags" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor,/area/maintenance/library)
+"agr" = (/obj/machinery/light,/turf/simulated/floor,/area/maintenance/security_starboard)
+"ags" = (/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor,/area/maintenance/security_starboard)
"agt" = (/obj/machinery/bookbinder{pixel_y = 0},/turf/simulated/floor/wood,/area/library_conference_room)
"agu" = (/obj/machinery/light,/turf/simulated/floor/wood,/area/library_conference_room)
"agv" = (/obj/machinery/camera/network/civilian{c_tag = "CIV - Library Meeting Room"; dir = 1},/turf/simulated/floor/wood,/area/library_conference_room)
@@ -344,13 +344,13 @@
"agF" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/library_conference_room)
"agG" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass{name = "Library Meeting Room"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/wood,/area/library_conference_room)
"agH" = (/turf/simulated/wall,/area/library)
-"agI" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
-"agJ" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
+"agI" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
+"agJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
"agK" = (/obj/structure/disposalpipe/segment,/obj/structure/extinguisher_cabinet{pixel_x = 25; pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
"agL" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/item/weapon/bikehorn/rubberducky,/obj/machinery/light,/turf/simulated/floor/tiled/freezer,/area/crew_quarters/locker/locker_toilet)
"agM" = (/turf/simulated/wall,/area/maintenance/substation/civilian)
"agN" = (/obj/structure/bookcase{name = "bookcase (Adult)"},/turf/simulated/floor/wood,/area/library)
-"agO" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor/wood,/area/library)
+"agO" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
"agP" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/wood,/area/library)
"agQ" = (/obj/structure/bed/chair/comfy/black{dir = 4},/turf/simulated/floor/carpet,/area/library)
"agR" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green{pixel_x = 1; pixel_y = 5},/obj/machinery/camera/network/civilian{c_tag = "CIV - Library Fore"; dir = 2},/turf/simulated/floor/carpet,/area/library)
@@ -358,10 +358,10 @@
"agT" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/wood,/area/library)
"agU" = (/turf/simulated/floor/wood,/area/library)
"agV" = (/obj/structure/bookcase{name = "bookcase (Reference)"},/turf/simulated/floor/wood,/area/library)
-"agW" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor,/area/maintenance/locker)
-"agX" = (/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor,/area/maintenance/substation/civilian)
-"agY" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/light/small{dir = 1},/turf/simulated/floor,/area/maintenance/substation/civilian)
-"agZ" = (/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/power/sensor{name = "Powernet Sensor - Civilian"; name_tag = "Civilian Subgrid"},/turf/simulated/floor,/area/maintenance/substation/civilian)
+"agW" = (/obj/structure/table/woodentable,/obj/item/weapon/paper,/obj/item/weapon/pen,/obj/machinery/newscaster{pixel_x = -30},/turf/simulated/floor/carpet,/area/library)
+"agX" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor,/area/storage/emergency_storage/emergency4)
+"agY" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
+"agZ" = (/obj/structure/disposalpipe/segment,/obj/machinery/firealarm{dir = 4; pixel_x = 26},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
"aha" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/engineering{name = "Civilian Substation"; req_one_access = list(11,24)},/turf/simulated/floor,/area/maintenance/substation/civilian)
"ahb" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/machinery/light{dir = 8},/turf/simulated/floor/wood,/area/library)
"ahc" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/library)
@@ -369,214 +369,214 @@
"ahe" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/wood,/area/library)
"ahf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/wood,/area/library)
"ahg" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/wood,/area/library)
-"ahh" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass,/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
-"ahi" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass,/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
-"ahj" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass,/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
-"ahk" = (/obj/machinery/door/firedoor,/turf/simulated/floor,/area/maintenance/locker)
-"ahl" = (/obj/machinery/power/smes/buildable{charge = 0; RCon_tag = "Substation - Civilian"},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/cable/green,/turf/simulated/floor,/area/maintenance/substation/civilian)
-"ahm" = (/obj/machinery/power/terminal{dir = 8},/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/turf/simulated/floor,/area/maintenance/substation/civilian)
-"ahn" = (/obj/structure/cable/green,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/turf/simulated/floor,/area/maintenance/substation/civilian)
+"ahh" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/maintenance/chapel)
+"ahi" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/maintenance/chapel)
+"ahj" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor,/area/maintenance/chapel)
+"ahk" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/maintenance/chapel)
+"ahl" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
+"ahm" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
+"ahn" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/wood,/area/library)
"aho" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 0},/turf/simulated/wall,/area/maintenance/substation/civilian)
-"ahp" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor,/area/maintenance/library)
+"ahp" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/carpet,/area/library)
"ahq" = (/obj/structure/bookcase{name = "bookcase (Fiction)"},/turf/simulated/floor/wood,/area/library)
"ahr" = (/turf/simulated/floor/carpet,/area/library)
"ahs" = (/obj/structure/bed/chair/comfy/brown{dir = 8},/turf/simulated/floor/carpet,/area/library)
"aht" = (/obj/structure/bookcase{name = "bookcase (Non-Fiction)"},/turf/simulated/floor/wood,/area/library)
-"ahu" = (/turf/simulated/wall,/area/hallway/secondary/civilian_hallway_mid)
-"ahv" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"ahw" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"ahx" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_x = 32; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
+"ahu" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 22},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/carpet,/area/library)
+"ahv" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
+"ahw" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor,/area/maintenance/security_starboard)
+"ahx" = (/obj/item/clothing/gloves/rainbow,/obj/item/clothing/head/soft/rainbow,/obj/item/clothing/shoes/rainbow,/obj/item/clothing/under/color/rainbow,/obj/item/weapon/bedsheet/rainbow,/obj/item/weapon/pen/crayon/rainbow,/turf/simulated/floor,/area/maintenance/security_starboard)
"ahy" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/explored/upper_level)
-"ahz" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor,/area/maintenance/locker)
+"ahz" = (/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
"ahA" = (/obj/machinery/power/breakerbox/activated{RCon_tag = "Civilian Substation Bypass"},/turf/simulated/floor,/area/maintenance/substation/civilian)
-"ahB" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/maintenance/substation/civilian)
-"ahC" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor,/area/maintenance/library)
-"ahD" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/wood,/area/library)
+"ahB" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/wood,/area/library)
+"ahC" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/wood,/area/library)
+"ahD" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/machinery/alarm{dir = 8; pixel_x = 25; pixel_y = 0},/turf/simulated/floor/carpet,/area/library)
"ahE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/wood,/area/library)
"ahF" = (/obj/structure/bed/chair/comfy/beige{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/carpet,/area/library)
-"ahG" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/carpet,/area/library)
-"ahH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/bed/chair/comfy/black{dir = 8},/turf/simulated/floor/carpet,/area/library)
-"ahI" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/wood,/area/library)
-"ahJ" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/wood,/area/library)
-"ahK" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"ahL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"ahM" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"ahN" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/civilian_hallway_mid)
+"ahG" = (/obj/machinery/sleep_console,/obj/effect/floor_decal/corner/paleblue{dir = 5},/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard)
+"ahH" = (/obj/machinery/sleeper{dir = 8},/obj/effect/floor_decal/corner/paleblue/full{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard)
+"ahI" = (/obj/structure/sign/redcross{name = "FirstAid"},/turf/simulated/wall,/area/medical/first_aid_station_starboard)
+"ahJ" = (/obj/effect/floor_decal/corner/paleblue/full{dir = 1},/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = 28},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard)
+"ahK" = (/obj/structure/bed/chair,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/civilian_hallway_fore)
+"ahL" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
+"ahM" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/wood,/area/library)
+"ahN" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/wood,/area/library)
"ahO" = (/turf/simulated/wall/r_wall,/area/security/nuke_storage)
"ahP" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/engineering{name = "Civilian Substation"; req_one_access = list(11,24)},/turf/simulated/floor,/area/maintenance/substation/civilian)
"ahQ" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/turf/simulated/floor,/area/maintenance/library)
-"ahR" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor,/area/maintenance/library)
+"ahR" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/wood,/area/library)
"ahS" = (/obj/structure/bookcase{name = "bookcase (Religious)"},/turf/simulated/floor/wood,/area/library)
"ahT" = (/obj/structure/table/woodentable,/obj/item/weapon/pen/blue{pixel_x = -5; pixel_y = -1},/obj/item/weapon/pen/red{pixel_x = -1; pixel_y = 3},/turf/simulated/floor/carpet,/area/library)
"ahU" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green{pixel_x = 1; pixel_y = 5},/turf/simulated/floor/carpet,/area/library)
"ahV" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/turf/simulated/floor/carpet,/area/library)
-"ahW" = (/obj/structure/bed/chair/office/dark,/obj/structure/extinguisher_cabinet{pixel_x = 25; pixel_y = 0},/turf/simulated/floor/wood,/area/library)
-"ahX" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"ahY" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"ahZ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/civilian_hallway_mid)
+"ahW" = (/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/green,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/wood,/area/library)
+"ahX" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/wood,/area/library)
+"ahY" = (/obj/structure/table/rack,/obj/item/weapon/storage/firstaid/adv,/obj/item/bodybag/cryobag,/obj/item/weapon/crowbar,/obj/effect/floor_decal/corner/paleblue/full{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/sign/poster{pixel_y = 32},/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard)
+"ahZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard)
"aia" = (/obj/structure/closet/crate,/obj/item/stack/material/gold,/obj/item/weapon/storage/belt/champion,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
-"aib" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
-"aic" = (/obj/structure/closet/secure_closet/freezer/money,/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
+"aib" = (/obj/effect/floor_decal/corner/paleblue{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard)
+"aic" = (/obj/machinery/door/airlock/glass_medical{name = "First-Aid Station"; req_one_access = list(5,10,63)},/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard)
"aid" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
"aie" = (/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
"aif" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor,/area/maintenance/library)
-"aig" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/maintenance/library)
-"aih" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/maintenance/library)
+"aig" = (/obj/effect/floor_decal/corner/paleblue{dir = 6},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard)
+"aih" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
"aii" = (/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/obj/machinery/light{dir = 8},/turf/simulated/floor/wood,/area/library)
"aij" = (/obj/structure/bed/chair/comfy/brown{dir = 4},/turf/simulated/floor/carpet,/area/library)
-"aik" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/carpet,/area/library)
+"aik" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
"ail" = (/obj/structure/bed/chair/comfy/green{dir = 8},/turf/simulated/floor/carpet,/area/library)
-"aim" = (/obj/machinery/librarypubliccomp,/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/library)
-"ain" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"aio" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/civilian_hallway_mid)
-"aip" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/civilian_hallway_mid)
-"aiq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/civilian_hallway_mid)
-"air" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/security/nuke_storage)
-"ais" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
-"ait" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
-"aiu" = (/obj/machinery/camera/network/command{c_tag = "COM - Vault"; dir = 9},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
-"aiv" = (/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/airless,/area/solar/auxstarboard)
+"aim" = (/obj/structure/table/glass,/obj/machinery/status_display{pixel_x = 32; pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/civilian_hallway_fore)
+"ain" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/library)
+"aio" = (/obj/structure/table/glass,/obj/item/weapon/storage/firstaid/regular,/obj/effect/floor_decal/corner/paleblue{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/newscaster{pixel_x = -31; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard)
+"aip" = (/obj/effect/floor_decal/corner/paleblue{dir = 2},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard)
+"aiq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/medical/first_aid_station_starboard)
+"air" = (/obj/structure/bed/roller,/obj/effect/floor_decal/corner/paleblue/full{dir = 4},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/green,/obj/machinery/light_switch{pixel_x = 12; pixel_y = -24},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard)
+"ais" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/civilian_hallway_fore)
+"ait" = (/obj/structure/disposalpipe/segment,/obj/item/stack/tile/wood,/turf/simulated/floor,/area/vacant/vacant_site)
+"aiu" = (/obj/structure/table/reinforced,/obj/item/device/flashlight,/turf/simulated/floor/wood,/area/vacant/vacant_site)
+"aiv" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless,/area/solar/auxport)
"aiw" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/maintenance/library)
-"aix" = (/obj/machinery/door/window/northleft{name = "Library Desk Door"; req_access = list(37)},/obj/machinery/newscaster{pixel_x = -30},/turf/simulated/floor/wood,/area/library)
+"aix" = (/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/maintenance/chapel)
"aiy" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green{pixel_x = 1; pixel_y = 5},/turf/simulated/floor/wood,/area/library)
"aiz" = (/obj/structure/table/woodentable,/obj/item/device/camera_film,/obj/item/device/camera_film,/turf/simulated/floor/wood,/area/library)
"aiA" = (/obj/structure/bed/chair/comfy/black,/turf/simulated/floor/carpet,/area/library)
-"aiB" = (/obj/structure/bed/chair/comfy/black,/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 26},/turf/simulated/floor/carpet,/area/library)
-"aiC" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"aiD" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"aiE" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"aiF" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"aiG" = (/obj/machinery/door/airlock/vault/bolted{req_access = list(53)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
-"aiH" = (/obj/effect/landmark{name = "blobstart"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
-"aiI" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
-"aiJ" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
-"aiK" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
-"aiL" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
+"aiB" = (/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,/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/hallway/secondary/escape/fore_escape_pod_hallway)
+"aiC" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass{name = "Library"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/library)
+"aiD" = (/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,/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/library)
+"aiE" = (/obj/structure/table/glass,/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 = "Medical Emergency Phone"},/obj/effect/floor_decal/corner/paleblue/full,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/firealarm{dir = 8; pixel_x = -24; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard)
+"aiF" = (/obj/effect/floor_decal/corner/paleblue/full{dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard)
+"aiG" = (/obj/structure/table/glass,/obj/item/weapon/storage/toolbox/emergency,/obj/item/device/radio{frequency = 1487; icon_state = "med_walkietalkie"; name = "Medbay Emergency Radio Link"},/obj/effect/floor_decal/corner/paleblue{dir = 10},/obj/machinery/camera/network/medbay{c_tag = "MED - FA Station Starboard"; dir = 1},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard)
+"aiH" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
+"aiI" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
+"aiJ" = (/obj/machinery/door/firedoor/glass,/obj/structure/disposalpipe/segment,/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
+"aiK" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/hallway/secondary/chapel_hallway)
+"aiL" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/medical/first_aid_station_starboard)
"aiM" = (/obj/structure/bookcase{name = "Forbidden Knowledge"},/turf/simulated/floor/carpet,/area/library)
"aiN" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/storage/briefcase{pixel_x = -2; pixel_y = -5},/obj/item/weapon/storage/briefcase{pixel_x = 3; pixel_y = 0},/obj/machinery/camera/network/civilian{c_tag = "CIV - Library Office"; dir = 2},/turf/simulated/floor/carpet,/area/library)
"aiO" = (/obj/structure/grille,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced/polarized{dir = 1; id = "library_window_tint"},/obj/structure/window/reinforced/polarized{dir = 2; id = "library_window_tint"},/obj/structure/window/reinforced/polarized{dir = 4; id = "library_window_tint"},/obj/structure/window/reinforced/polarized{dir = 8; id = "library_window_tint"},/turf/simulated/floor/plating,/area/library)
-"aiP" = (/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/library)
-"aiQ" = (/obj/structure/table/woodentable,/obj/item/weapon/paper,/obj/item/weapon/pen,/turf/simulated/floor/carpet,/area/library)
-"aiR" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green{pixel_x = 1; pixel_y = 5},/obj/machinery/newscaster{pixel_x = 30},/turf/simulated/floor/carpet,/area/library)
-"aiS" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/camera/network/northern_star{c_tag = "Hall - Civilian Primary Mid 1"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"aiT" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/civilian_hallway_mid)
-"aiU" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
-"aiV" = (/mob/living/simple_animal/mouse/brown/Tom,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
-"aiW" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
+"aiP" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/medical/first_aid_station_starboard)
+"aiQ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/medical/first_aid_station_starboard)
+"aiR" = (/obj/structure/table/woodentable,/obj/effect/decal/cleanable/dirt,/obj/item/frame,/turf/simulated/floor,/area/vacant/vacant_site)
+"aiS" = (/obj/effect/decal/cleanable/dirt,/obj/item/weapon/cigbutt/cigarbutt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/maintenance/chapel)
+"aiT" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/glass{name = "Civilian Hallway Access"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_aft)
+"aiU" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_aft)
+"aiV" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_aft)
+"aiW" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_aft)
"aiX" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor,/area/maintenance/locker)
"aiY" = (/obj/item/weapon/storage/toolbox/syndicate,/obj/structure/closet,/turf/simulated/floor,/area/maintenance/locker)
"aiZ" = (/turf/simulated/wall,/area/chapel/chapel_morgue)
-"aja" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/carpet,/area/library)
+"aja" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_aft)
"ajb" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/carpet,/area/library)
-"ajc" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/carpet,/area/library)
+"ajc" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_aft)
"ajd" = (/obj/machinery/door/morgue{dir = 2; name = "Private Study"; req_access = list(37)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/wood,/area/library)
"aje" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/wood,/area/library)
"ajf" = (/obj/structure/table/woodentable,/obj/item/weapon/pen/red{pixel_x = 2; pixel_y = 6},/obj/item/weapon/pen/blue{pixel_x = 5; pixel_y = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/wood,/area/library)
-"ajg" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/wood,/area/library)
-"ajh" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/wood,/area/library)
+"ajg" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/alarm{pixel_y = 22},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_aft)
+"ajh" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_aft)
"aji" = (/obj/structure/bed/chair/comfy/black{dir = 1},/turf/simulated/floor/carpet,/area/library)
-"ajj" = (/obj/structure/safe,/obj/item/clothing/under/color/yellow,/obj/item/key,/obj/item/toy/katana,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
-"ajk" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
-"ajl" = (/obj/item/weapon/coin/silver{pixel_x = 7; pixel_y = 12},/obj/item/weapon/coin/silver{pixel_x = 12; pixel_y = 7},/obj/item/weapon/coin/silver{pixel_x = 4; pixel_y = 8},/obj/item/weapon/coin/silver{pixel_x = -6; pixel_y = 5},/obj/item/weapon/coin/silver{pixel_x = 5; pixel_y = -8},/obj/structure/closet/crate{name = "Silver Crate"},/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
-"ajm" = (/obj/machinery/computer/secure_data/detective_computer,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
-"ajn" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/maintenance/locker)
-"ajo" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/maintenance/locker)
-"ajp" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor,/area/maintenance/locker)
-"ajq" = (/obj/structure/crematorium,/turf/simulated/floor/tiled/dark,/area/chapel/chapel_morgue)
+"ajj" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/camera/network/northern_star{c_tag = "Hall - Civilian Aft Starboard 1"; dir = 2},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_aft)
+"ajk" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/light{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_aft)
+"ajl" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_aft)
+"ajm" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_aft)
+"ajn" = (/obj/structure/disposalpipe/sortjunction{dir = 2; icon_state = "pipe-j1s"; name = "Library"; sortType = "Library"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_aft)
+"ajo" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/secondary/chapel_hallway)
+"ajp" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/chapel_hallway)
+"ajq" = (/obj/machinery/light/small{dir = 8},/obj/structure/disposalconstruct,/turf/simulated/floor,/area/vacant/vacant_site)
"ajr" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/dark,/area/chapel/chapel_morgue)
"ajs" = (/obj/structure/closet/coffin,/turf/simulated/floor/tiled/dark,/area/chapel/chapel_morgue)
-"ajt" = (/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/carpet,/area/library)
+"ajt" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/wood,/area/vacant/vacant_site)
"aju" = (/obj/structure/bed/chair/comfy/brown,/obj/effect/landmark/start{name = "Librarian"},/turf/simulated/floor/carpet,/area/library)
"ajv" = (/obj/machinery/button/windowtint{id = "library_window_tint"; pixel_x = 26; pixel_y = -26},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/carpet,/area/library)
"ajw" = (/obj/structure/table/woodentable,/obj/item/device/taperecorder,/turf/simulated/floor/wood,/area/library)
-"ajx" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/wood,/area/library)
-"ajy" = (/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/wood,/area/library)
+"ajx" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/wood,/area/vacant/vacant_site)
+"ajy" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/secondary/chapel_hallway)
"ajz" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/wood,/area/library)
-"ajA" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/wood,/area/library)
-"ajB" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/wood,/area/library)
-"ajC" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/extinguisher_cabinet{pixel_x = -27},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"ajD" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/disposalpipe/segment,/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"ajE" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/hallway/secondary/civilian_hallway_mid)
+"ajA" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/chapel_hallway)
+"ajB" = (/obj/structure/bed/chair/comfy/brown,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/vacant/vacant_site)
+"ajC" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/green,/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled,/area/hallway/secondary/chapel_hallway)
+"ajD" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/chapel_hallway)
+"ajE" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/chapel_hallway)
"ajF" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/maintenance/locker)
-"ajG" = (/obj/machinery/button/crematorium{pixel_x = -25},/turf/simulated/floor/tiled/dark,/area/chapel/chapel_morgue)
+"ajG" = (/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = -32},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/chapel_hallway)
"ajH" = (/turf/simulated/floor/tiled/dark,/area/chapel/chapel_morgue)
-"ajI" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "solar_chapel_airlock"; name = "exterior access button"; pixel_x = -25; pixel_y = -25; req_access = list(11,13)},/obj/effect/decal/cleanable/dirt,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless,/area/solar/auxstarboard)
+"ajI" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/wood,/area/vacant/vacant_site)
"ajJ" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen/invisible,/obj/item/clothing/under/suit_jacket/red,/obj/machinery/light,/obj/item/weapon/barcodescanner,/turf/simulated/floor/carpet,/area/library)
"ajK" = (/obj/structure/table/woodentable,/obj/item/device/taperecorder{pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/newscaster{pixel_x = 0; pixel_y = -28},/obj/item/device/retail_scanner/civilian{tag = "icon-retail_idle (NORTH)"; icon_state = "retail_idle"; dir = 1},/obj/item/device/camera,/turf/simulated/floor/carpet,/area/library)
"ajL" = (/obj/machinery/libraryscanner,/turf/simulated/floor/wood,/area/library)
"ajM" = (/obj/machinery/librarycomp{pixel_y = 0},/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/library)
"ajN" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/turf/simulated/floor/wood,/area/library)
-"ajO" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/turf/simulated/floor/wood,/area/library)
-"ajP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/camera/network/civilian{c_tag = "CIV - Library Aft"; dir = 1},/turf/simulated/floor/wood,/area/library)
-"ajQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/light_switch{pixel_x = 26; pixel_y = -26},/turf/simulated/floor/wood,/area/library)
-"ajR" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/wood,/area/library)
-"ajS" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/flora/pottedplant{icon_state = "plant-22"},/turf/simulated/floor/wood,/area/library)
-"ajT" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/wood,/area/library)
+"ajO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/barricade,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/vacant/vacant_site)
+"ajP" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/table/gamblingtable,/obj/effect/decal/cleanable/dirt,/obj/item/weapon/deck/cards,/turf/simulated/floor,/area/vacant/vacant_site)
+"ajQ" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/maintenance/chapel)
+"ajR" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/green,/turf/simulated/floor/wood,/area/vacant/vacant_site)
+"ajS" = (/obj/structure/table/steel,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor/tiled,/area/janitor)
+"ajT" = (/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/machinery/requests_console{department = "Janitorial"; departmentType = 1; pixel_y = 28},/obj/item/weapon/reagent_containers/spray/cleaner,/obj/structure/table/steel,/obj/item/weapon/storage/box/mousetraps,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/floor/tiled,/area/janitor)
"ajU" = (/obj/machinery/vending/coffee,/turf/simulated/floor/wood,/area/library)
-"ajV" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_x = 32; pixel_y = 0},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
+"ajV" = (/obj/structure/table/woodentable,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/recharger{pixel_y = 0},/turf/simulated/floor/carpet,/area/crew_quarters/recreation_area)
"ajW" = (/obj/structure/morgue,/turf/simulated/floor/tiled/dark,/area/chapel/chapel_morgue)
-"ajX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
-"ajY" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "solar_chapel_outer"; locked = 1; name = "Engineering External Access"; req_access = list(11,13)},/obj/effect/decal/cleanable/dirt,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
-"ajZ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor,/area/maintenance/library)
-"aka" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor,/area/maintenance/library)
+"ajX" = (/obj/structure/table/woodentable,/obj/item/weapon/coin/silver,/obj/machinery/ai_status_display{pixel_y = 32},/obj/machinery/camera/network/civilian{c_tag = "CIV - Recreation Area Fore"; dir = 2},/obj/item/clothing/glasses/threedglasses,/turf/simulated/floor/carpet,/area/crew_quarters/recreation_area)
+"ajY" = (/obj/structure/table/standard,/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/item/weapon/soap/nanotrasen,/obj/item/weapon/soap/nanotrasen,/turf/simulated/floor/tiled/freezer,/area/security/security_bathroom)
+"ajZ" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/item/weapon/stool/padded,/obj/effect/landmark/start{name = "Janitor"},/turf/simulated/floor/tiled,/area/janitor)
+"aka" = (/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 5},/obj/machinery/meter,/turf/simulated/floor,/area/maintenance/security_starboard)
"akb" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/library)
"akc" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/library)
-"akd" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass{name = "Library"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/wood,/area/library)
-"ake" = (/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,/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/library)
+"akd" = (/obj/machinery/status_display{pixel_x = 0; pixel_y = 32},/obj/structure/closet/jcloset,/obj/item/weapon/soap/nanotrasen,/turf/simulated/floor/tiled,/area/janitor)
+"ake" = (/obj/structure/girder,/turf/simulated/floor,/area/maintenance/pool)
"akf" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass{name = "Library"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/library)
-"akg" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
+"akg" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/tiled,/area/janitor)
"akh" = (/obj/machinery/button/remote/driver{id = "chapelgun"; name = "Chapel Mass Driver"; pixel_x = 32; pixel_y = 4},/turf/simulated/floor/tiled/dark,/area/chapel/chapel_morgue)
-"aki" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
-"akj" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "solar_chapel_pump"; tag_exterior_door = "solar_chapel_outer"; frequency = 1379; id_tag = "solar_chapel_airlock"; tag_interior_door = "solar_chapel_inner"; pixel_x = 25; req_access = list(13); tag_chamber_sensor = "solar_chapel_sensor"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "solar_chapel_sensor"; pixel_x = 25; pixel_y = 12},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 2; frequency = 1379; id_tag = "solar_chapel_pump"},/obj/effect/decal/cleanable/dirt,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning/full,/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
-"akk" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/maintenance/library)
-"akl" = (/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,/turf/simulated/floor/plating,/area/maintenance/library)
-"akm" = (/obj/effect/landmark{name = "blobstart"},/obj/effect/decal/cleanable/cobweb2,/obj/effect/decal/cleanable/cobweb2{icon_state = "spiderling"; name = "dead spider"; tag = "icon-spiderling"},/turf/simulated/floor,/area/maintenance/library)
-"akn" = (/turf/simulated/floor/tiled/dark,/area/hallway/secondary/civilian_hallway_mid)
-"ako" = (/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"akp" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"akq" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"akr" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"aks" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"akt" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"aku" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"akv" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"akw" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"akx" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"aky" = (/obj/structure/disposalpipe/sortjunction{dir = 2; icon_state = "pipe-j1s"; name = "Library"; sortType = "Library"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
+"aki" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/janitor)
+"akj" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/janitor)
+"akk" = (/obj/structure/extinguisher_cabinet{pixel_x = 25; pixel_y = 0},/obj/structure/janitorialcart,/turf/simulated/floor/tiled,/area/janitor)
+"akl" = (/obj/structure/window/reinforced{dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/window/northleft{name = "Janitorial Delivery"; req_access = list(26)},/turf/simulated/floor/tiled,/area/janitor)
+"akm" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/tiled,/area/janitor)
+"akn" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/tiled,/area/janitor)
+"ako" = (/obj/structure/mopbucket,/obj/item/weapon/mop,/obj/item/weapon/reagent_containers/glass/bucket,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled,/area/janitor)
+"akp" = (/obj/structure/mopbucket,/obj/item/weapon/mop,/obj/item/weapon/reagent_containers/glass/bucket,/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -26},/turf/simulated/floor/tiled,/area/janitor)
+"akq" = (/obj/effect/floor_decal/spline/plain,/obj/machinery/vending/fitness,/turf/simulated/floor/carpet,/area/crew_quarters/recreation_area)
+"akr" = (/obj/machinery/alarm{dir = 1; pixel_y = -25},/turf/simulated/floor,/area/maintenance/holodeck)
+"aks" = (/obj/structure/closet,/obj/item/weapon/beach_ball,/turf/simulated/floor,/area/maintenance/pool)
+"akt" = (/obj/structure/closet/toolcloset,/turf/simulated/floor/tiled,/area/storage/tools)
+"aku" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/random/tech_supply,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/storage/tools)
+"akv" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/door/airlock/glass{name = "Auxiliary Tool Storage"; req_access = list(12)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/storage/tools)
+"akw" = (/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{dir = 4},/turf/simulated/floor/tiled,/area/storage/tools)
+"akx" = (/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{dir = 4},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled,/area/storage/tools)
+"aky" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/storage/tools)
"akz" = (/turf/simulated/wall,/area/chapel/main)
"akA" = (/turf/simulated/wall,/area/chapel/office)
-"akB" = (/obj/item/clothing/suit/ianshirt,/turf/simulated/floor,/area/maintenance/locker)
+"akB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/storage/tools)
"akC" = (/obj/effect/decal/cleanable/generic,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/mob/living/simple_animal/mouse,/turf/simulated/floor/plating,/area/maintenance/locker)
-"akD" = (/obj/machinery/camera/network/civilian{c_tag = "CIV - Chapel Morgue"; dir = 4},/turf/simulated/floor/tiled/dark,/area/chapel/chapel_morgue)
+"akD" = (/obj/machinery/door/airlock/maintenance{req_access = list(12)},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/maintenance/pool)
"akE" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled/dark,/area/chapel/chapel_morgue)
"akF" = (/obj/machinery/door/window{dir = 8; name = "Mass Driver"; req_access = list(22)},/obj/machinery/mass_driver{dir = 4; id = "chapelgun"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/machinery/airlock_sensor{pixel_y = 25},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/plating,/area/chapel/chapel_morgue)
"akG" = (/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/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/plating,/area/chapel/chapel_morgue)
"akH" = (/obj/machinery/door/blast/regular{id = "chapelgun"; name = "Chapel Launcher Door"},/turf/simulated/floor/plating,/area/chapel/chapel_morgue)
-"akI" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
+"akI" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/light/small,/turf/simulated/floor,/area/maintenance/pool)
"akJ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
-"akK" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "solar_chapel_inner"; locked = 1; name = "Engineering External Access"; req_access = list(11,13)},/obj/machinery/atmospherics/pipe/simple/visible,/obj/effect/decal/cleanable/dirt,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
-"akL" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
-"akM" = (/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,/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
+"akK" = (/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/structure/table/steel,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/storage/tools)
+"akL" = (/obj/machinery/camera/network/civilian{c_tag = "CIV - Auxiliary Tool Storage"; dir = 4},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/storage/tools)
+"akM" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled,/area/storage/tools)
"akN" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/maintenance/library)
"akO" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/maintenance/library)
-"akP" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/maintenance/library)
+"akP" = (/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/structure/table/steel,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/storage/tools)
"akQ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/maintenance/library)
"akR" = (/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/maintenance/library)
-"akS" = (/obj/machinery/light/small,/turf/simulated/floor,/area/maintenance/library)
-"akT" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Maintenance Access"; req_one_access = list(12,37)},/turf/simulated/floor,/area/maintenance/library)
-"akU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"akV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/light,/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"akW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"akX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"akY" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"akZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/camera/network/northern_star{c_tag = "Hall - Library Access"; dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"ala" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"alb" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"alc" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"ald" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"ale" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"alf" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"alg" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
+"akS" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/turf/simulated/floor/tiled,/area/storage/tools)
+"akT" = (/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/machinery/light_switch{pixel_x = -26; pixel_y = 0},/obj/structure/cable,/turf/simulated/floor/tiled,/area/storage/tools)
+"akU" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor/tiled,/area/storage/tools)
+"akV" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/storage/tools)
+"akW" = (/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/structure/table/steel,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/machinery/recharger{pixel_y = 0},/turf/simulated/floor/tiled,/area/storage/tools)
+"akX" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation)
+"akY" = (/obj/machinery/space_heater,/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation)
+"akZ" = (/obj/machinery/atmospherics/binary/pump/high_power/on{dir = 4; name = "Pump station in"; target_pressure = 4500},/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation)
+"ala" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{tag = "icon-intact (SOUTHEAST)"; icon_state = "intact"; dir = 6},/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation)
+"alb" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 8},/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation)
+"alc" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{dir = 1},/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation)
+"ald" = (/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/obj/machinery/atmospherics/pipe/simple/visible/supply,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/engineering{name = "Pump Station"; req_one_access = list(11,24)},/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation)
+"ale" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/visible/cyan{tag = "icon-intact (SOUTHEAST)"; icon_state = "intact"; dir = 6},/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation)
+"alf" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"; tag = "icon-intact (EAST)"},/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation)
+"alg" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"; tag = "icon-intact (EAST)"},/obj/machinery/atmospherics/pipe/simple/visible/universal,/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation)
"alh" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/obj/machinery/light/small{dir = 1},/obj/item/device/radio/intercom{broadcasting = 1; dir = 1; frequency = 1480; name = "Confessional Intercom"; pixel_x = 0; pixel_y = 27},/turf/simulated/floor/tiled/dark,/area/chapel/main)
"ali" = (/obj/structure/grille,/obj/structure/window/reinforced/tinted{dir = 1},/obj/structure/window/reinforced/tinted,/obj/structure/window/reinforced/tinted{dir = 4; icon_state = "twindow"},/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"},/turf/simulated/floor/plating,/area/chapel/main)
"alj" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/light/small{dir = 1},/obj/item/device/radio/intercom{broadcasting = 1; dir = 1; frequency = 1480; name = "Confessional Intercom"; pixel_x = 0; pixel_y = 27},/turf/simulated/floor/tiled/dark,/area/chapel/main)
@@ -584,22 +584,22 @@
"all" = (/obj/machinery/newscaster{pixel_y = 32},/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for shutters."; id = "chapel"; name = "Chapel Office Shutters"; pixel_x = -24; pixel_y = 26},/turf/simulated/floor/lino,/area/chapel/office)
"alm" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/lino,/area/chapel/office)
"aln" = (/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/lino,/area/chapel/office)
-"alo" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/tiled/dark,/area/chapel/chapel_morgue)
-"alp" = (/obj/structure/extinguisher_cabinet{pixel_x = 25; pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/chapel/chapel_morgue)
+"alo" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan,/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation)
+"alp" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/machinery/portable_atmospherics/powered/pump/filled,/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation)
"alq" = (/turf/simulated/wall/r_wall,/area/maintenance/auxsolarstarboard)
-"alr" = (/obj/machinery/power/solar_control{id = "auxsolareast"; name = "Fore Starboard Solar Control"; track = 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/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/turf/simulated/floor,/area/maintenance/auxsolarstarboard)
-"als" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "solar_chapel_airlock"; name = "interior access button"; pixel_x = 25; pixel_y = 25; req_access = list(11,13)},/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/obj/effect/decal/cleanable/dirt,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor,/area/maintenance/auxsolarstarboard)
-"alt" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor,/area/maintenance/auxsolarstarboard)
-"alu" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/maintenance/library)
+"alr" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 4; icon_state = "intact"; tag = "icon-intact-f (EAST)"},/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation)
+"als" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{dir = 1},/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation)
+"alt" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 4; icon_state = "intact"; tag = "icon-intact-f (EAST)"},/turf/simulated/floor/plating,/area/maintenance/engineering/pumpstation)
+"alu" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 4; icon_state = "intact"; tag = "icon-intact-f (EAST)"},/obj/machinery/computer/station_alert,/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation)
"alv" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/maintenance/library)
-"alw" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/maintenance/library)
-"alx" = (/obj/structure/closet/emcloset,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/civilian_hallway_mid)
-"aly" = (/obj/machinery/vending/snack,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/civilian_hallway_mid)
-"alz" = (/obj/machinery/vending/cola,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/civilian_hallway_mid)
-"alA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/hallway/secondary/civilian_hallway_mid)
-"alB" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"alC" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"alD" = (/obj/machinery/door/firedoor/glass,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
+"alw" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 9},/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation)
+"alx" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/binary/passive_gate{dir = 8; target_pressure = 4500},/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation)
+"aly" = (/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation)
+"alz" = (/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/visible/supply{dir = 9},/obj/effect/decal/warning_stripes,/turf/simulated/floor,/area/maintenance/engineering/pumpstation)
+"alA" = (/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/obj/structure/closet/firecloset,/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation)
+"alB" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/machinery/portable_atmospherics/powered/pump/filled,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation)
+"alC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 9; icon_state = "intact"; tag = "icon-intact-f (NORTHWEST)"},/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation)
+"alD" = (/obj/machinery/door/airlock/glass_engineeringatmos{name = "Pump Station Atmospherics"; req_one_access = list(11,24)},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation)
"alE" = (/obj/machinery/door/morgue{dir = 2; name = "Confession Booth"},/turf/simulated/floor/tiled/dark,/area/chapel/main)
"alF" = (/obj/machinery/door/morgue{dir = 2; name = "Confession Booth (Chaplain)"; req_access = list(22)},/turf/simulated/floor/tiled/dark,/area/chapel/main)
"alG" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/light{dir = 8},/turf/simulated/floor/lino,/area/chapel/office)
@@ -607,11 +607,11 @@
"alI" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/lino,/area/chapel/office)
"alJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/lino,/area/chapel/office)
"alK" = (/obj/structure/table/woodentable,/obj/item/weapon/nullrod,/obj/item/weapon/reagent_containers/food/drinks/bottle/holywater,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/turf/simulated/floor/lino,/area/chapel/office)
-"alL" = (/obj/machinery/alarm{pixel_y = 23},/obj/structure/table/rack,/obj/item/clothing/glasses/sunglasses,/obj/item/clothing/suit/storage/hazardvest,/turf/simulated/floor/plating,/area/maintenance/locker)
+"alL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation)
"alM" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/maintenance/locker)
"alN" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/dark,/area/chapel/chapel_morgue)
"alO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/dark,/area/chapel/chapel_morgue)
-"alP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/tiled/dark,/area/chapel/chapel_morgue)
+"alP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation)
"alQ" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/chapel/chapel_morgue)
"alR" = (/obj/structure/table/standard,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor/tiled/dark,/area/chapel/chapel_morgue)
"alS" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/chapel/chapel_morgue)
@@ -621,15 +621,15 @@
"alW" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "swall_c"; dir = 4},/area/shuttle/escape_pod2/station)
"alX" = (/obj/structure/window/shuttle,/obj/structure/grille,/turf/simulated/floor,/area/shuttle/escape_pod2/station)
"alY" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "swall_c"; dir = 2; layer = 2},/area/shuttle/escape_pod2/station)
-"alZ" = (/obj/item/weapon/stool,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/item/stack/cable_coil/yellow,/obj/item/stack/cable_coil/yellow,/turf/simulated/floor,/area/maintenance/auxsolarstarboard)
-"ama" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/maintenance/auxsolarstarboard)
-"amb" = (/obj/machinery/power/terminal,/obj/machinery/light/small{dir = 4},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor,/area/maintenance/auxsolarstarboard)
-"amc" = (/obj/structure/table/rack,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/effect/decal/cleanable/cobweb,/obj/item/clothing/glasses/sunglasses,/turf/simulated/floor/plating,/area/maintenance/library)
-"amd" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/civilian_hallway_mid)
-"ame" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
+"alZ" = (/obj/machinery/atmospherics/pipe/simple/visible/universal,/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation)
+"ama" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/portable_atmospherics/canister/empty,/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation)
+"amb" = (/obj/machinery/atmospherics/pipe/simple/visible/red{tag = "icon-intact (SOUTHEAST)"; icon_state = "intact"; dir = 6},/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation)
+"amc" = (/obj/machinery/atmospherics/pipe/simple/hidden/red{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation)
+"amd" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/red{dir = 1},/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation)
+"ame" = (/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,/obj/machinery/atmospherics/pipe/simple/hidden/red{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/maintenance/engineering/pumpstation)
"amf" = (/turf/simulated/floor/tiled/dark,/area/chapel/main)
-"amg" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/dark,/area/chapel/main)
-"amh" = (/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,/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "chapel"; name = "Chapel Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/chapel/office)
+"amg" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/red{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/structure/table/steel_reinforced,/obj/random/tech_supply,/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation)
+"amh" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/visible/red{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation)
"ami" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp{pixel_y = 10},/obj/machinery/camera/network/civilian{c_tag = "CIV - Chapel Office"; dir = 4},/turf/simulated/floor/lino,/area/chapel/office)
"amj" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen/blue{pixel_x = 5; pixel_y = 5},/turf/simulated/floor/lino,/area/chapel/office)
"amk" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/fancy/crayons,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/lino,/area/chapel/office)
@@ -648,12 +648,12 @@
"amx" = (/turf/simulated/wall/r_wall,/area/hallway/secondary/escape/fore_escape_pod_hallway)
"amy" = (/turf/simulated/shuttle/wall{icon_state = "swall_straight"; dir = 1},/area/shuttle/escape_pod2/station)
"amz" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{frequency = 1380; id_tag = "escape_pod_2"; pixel_x = -25; pixel_y = 0; tag_door = "escape_pod_2_hatch"},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod2/station)
-"amA" = (/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor,/area/maintenance/auxsolarstarboard)
-"amB" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor,/area/maintenance/auxsolarstarboard)
-"amC" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/smes/buildable{charge = 0; RCon_tag = "Solar - Fore Starboard"},/obj/machinery/camera/network/engineering{c_tag = "ENG - Solar Fore Starboard"; dir = 1},/turf/simulated/floor,/area/maintenance/auxsolarstarboard)
-"amD" = (/obj/structure/table/rack,/obj/item/weapon/extinguisher,/turf/simulated/floor/plating,/area/maintenance/library)
-"amE" = (/obj/structure/disposalpipe/segment,/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 26},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"amF" = (/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,/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "chapel"; name = "Chapel Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/chapel/office)
+"amA" = (/obj/machinery/atmospherics/pipe/simple/visible/red{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation)
+"amB" = (/obj/machinery/atmospherics/binary/pump{dir = 4},/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation)
+"amC" = (/obj/machinery/atmospherics/tvalve/mirrored/digital/bypass{dir = 4},/obj/machinery/camera/network/engineering{c_tag = "ENG - Pump Station"; dir = 1},/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = -32},/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation)
+"amD" = (/obj/machinery/atmospherics/pipe/manifold/visible/red,/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation)
+"amE" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation)
+"amF" = (/obj/machinery/atmospherics/pipe/simple/hidden/red{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/light_switch{pixel_x = 12; pixel_y = -24},/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation)
"amG" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/lino,/area/chapel/office)
"amH" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/lino,/area/chapel/office)
"amI" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/lino,/area/chapel/office)
@@ -669,13 +669,13 @@
"amS" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/vending/wallmed1{layer = 3.3; name = "Emergency NanoMed"; pixel_x = -28; pixel_y = 0},/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod1/station)
"amT" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/vending/wallmed1{layer = 3.3; name = "Emergency NanoMed"; pixel_x = -28; pixel_y = 0},/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod2/station)
"amU" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 0},/turf/simulated/wall/r_wall,/area/maintenance/auxsolarstarboard)
-"amV" = (/obj/machinery/door/airlock/engineering{icon_state = "door_closed"; locked = 0; name = "Fore Starboard Solar Access"; req_access = list(11)},/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
-"amW" = (/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor,/area/maintenance/library)
+"amV" = (/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,/turf/simulated/floor/plating,/area/maintenance/engineering/pumpstation)
+"amW" = (/obj/structure/table/steel_reinforced,/obj/machinery/cell_charger,/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation)
"amX" = (/turf/simulated/wall,/area/vacant/vacant_site)
"amY" = (/turf/simulated/wall,/area/storage/primary)
-"amZ" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"ana" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"anb" = (/obj/structure/extinguisher_cabinet{pixel_x = -27},/turf/simulated/floor/tiled/dark,/area/chapel/main)
+"amZ" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/table/steel_reinforced,/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/steel{amount = 50; pixel_x = -2; pixel_y = -2},/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation)
+"ana" = (/obj/structure/table/steel_reinforced,/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 6},/turf/simulated/floor/tiled,/area/maintenance/engineering/pumpstation)
+"anb" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/engineering{name = "Pump Station"; req_one_access = list(11,24)},/turf/simulated/floor,/area/maintenance/medbay_fore)
"anc" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "chapel"; name = "Chapel Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/chapel/office)
"and" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "chapel"; name = "Chapel Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/chapel/office)
"ane" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock{name = "Chapel Office"; req_access = list(27)},/turf/simulated/floor/lino,/area/chapel/office)
@@ -693,23 +693,23 @@
"anq" = (/obj/structure/bed/chair{dir = 1},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 27},/obj/structure/closet/walllocker/emerglocker{pixel_x = -28},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod2/station)
"anr" = (/turf/simulated/wall,/area/hallway/secondary/escape/fore_escape_pod_hallway)
"ans" = (/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
-"ant" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
-"anu" = (/obj/item/clothing/gloves/rainbow,/obj/item/clothing/head/soft/rainbow,/obj/item/clothing/shoes/rainbow,/obj/item/clothing/under/rainbow,/obj/item/weapon/bedsheet/rainbow,/obj/item/weapon/pen/crayon/rainbow,/turf/simulated/floor,/area/maintenance/library)
-"anv" = (/obj/item/stack/material/glass,/turf/simulated/floor,/area/vacant/vacant_site)
+"ant" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor,/area/maintenance/medbay_fore)
+"anu" = (/obj/structure/closet/crate/freezer,/obj/effect/floor_decal/corner/lime,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"anv" = (/obj/structure/table/standard,/obj/item/roller,/obj/item/roller{pixel_y = 8},/obj/item/roller{pixel_y = 16},/obj/effect/floor_decal/corner/paleblue{dir = 9},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -22},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage)
"anw" = (/turf/simulated/floor,/area/vacant/vacant_site)
"anx" = (/obj/structure/table/reinforced,/obj/item/weapon/broken_bottle,/turf/simulated/floor,/area/vacant/vacant_site)
"any" = (/obj/machinery/smartfridge/drinks,/turf/simulated/floor/wood,/area/vacant/vacant_site)
"anz" = (/turf/simulated/floor/wood,/area/vacant/vacant_site)
-"anA" = (/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor,/area/vacant/vacant_site)
+"anA" = (/obj/effect/floor_decal/corner/paleblue{dir = 1},/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage)
"anB" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/newscaster{pixel_x = -30},/turf/simulated/floor/tiled,/area/storage/primary)
"anC" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/tiled,/area/storage/primary)
-"anD" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/requests_console{department = "Tool Storage"; departmentType = 0; pixel_y = 30},/obj/machinery/camera/network/civilian{c_tag = "CIV - Primary Tool Storage"; dir = 2},/turf/simulated/floor/tiled,/area/storage/primary)
-"anE" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/storage/primary)
+"anD" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/camera/network/medbay{c_tag = "MED - Virology Access Hallway"; dir = 1},/obj/machinery/alarm{dir = 1; pixel_y = -25},/turf/simulated/floor/tiled,/area/medical/virologyaccess)
+"anE" = (/obj/machinery/door/airlock/maintenance{name = "Resturant Maintenance"; req_one_access = list(12,28,35)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/central)
"anF" = (/obj/machinery/vending/tool,/turf/simulated/floor/tiled,/area/storage/primary)
-"anG" = (/obj/machinery/vending/assist,/turf/simulated/floor/tiled,/area/storage/primary)
-"anH" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"anI" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/structure/disposalpipe/segment,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"anJ" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/dark,/area/chapel/main)
+"anG" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/machinery/recharge_station,/turf/simulated/floor/tiled,/area/assembly/chargebay)
+"anH" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/turf/simulated/floor/plating,/area/hallway/primary/central_four)
+"anI" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/grille,/turf/simulated/floor/plating,/area/hallway/primary/central_four)
+"anJ" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor,/area/maintenance/central)
"anK" = (/obj/effect/floor_decal/chapel{tag = "icon-chapel (NORTH)"; icon_state = "chapel"; dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/chapel/main)
"anL" = (/obj/effect/floor_decal/chapel{tag = "icon-chapel (EAST)"; icon_state = "chapel"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/chapel/main)
"anM" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/carpet,/area/chapel/main)
@@ -718,7 +718,7 @@
"anP" = (/obj/effect/floor_decal/chapel{tag = "icon-chapel (NORTH)"; icon_state = "chapel"; dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/dark,/area/chapel/main)
"anQ" = (/obj/effect/floor_decal/chapel{tag = "icon-chapel (EAST)"; icon_state = "chapel"; dir = 4},/turf/simulated/floor/tiled/dark,/area/chapel/main)
"anR" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled/dark,/area/chapel/main)
-"anS" = (/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled/dark,/area/chapel/main)
+"anS" = (/obj/machinery/recharge_station,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/status_display{pixel_x = -32; pixel_y = 0},/turf/simulated/floor/tiled/neutral,/area/crew_quarters/cafeteria)
"anT" = (/turf/simulated/floor/tiled,/area/maintenance/chapel)
"anU" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled,/area/maintenance/chapel)
"anV" = (/obj/machinery/alarm{pixel_y = 22},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled,/area/maintenance/chapel)
@@ -746,20 +746,20 @@
"aor" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst,/turf/simulated/shuttle/wall{icon_state = "swall_c"; dir = 1},/area/shuttle/escape_pod2/station)
"aos" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_2_hatch"; locked = 1; name = "Escape Pod 2 Hatch"; req_access = list(13)},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod2/station)
"aot" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst,/turf/simulated/shuttle/wall{icon_state = "swall_c"; dir = 8},/area/shuttle/escape_pod2/station)
-"aou" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
-"aov" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/extinguisher_cabinet{pixel_x = 25; pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
-"aow" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/maintenance{req_access = list(12)},/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/maintenance/library)
+"aou" = (/obj/structure/extinguisher_cabinet{pixel_x = -27},/turf/simulated/floor/tiled,/area/crew_quarters/cafeteria)
+"aov" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled/neutral,/area/crew_quarters/cafeteria)
+"aow" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atm{pixel_x = 0; pixel_y = -32},/turf/simulated/floor/tiled/neutral,/area/crew_quarters/cafeteria)
"aox" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor,/area/vacant/vacant_site)
"aoy" = (/obj/structure/table,/obj/item/stack/material/steel{amount = 2},/turf/simulated/floor,/area/vacant/vacant_site)
"aoz" = (/obj/item/stack/material/wood{amount = 24},/turf/simulated/floor/wood,/area/vacant/vacant_site)
"aoA" = (/obj/structure/table/gamblingtable,/turf/simulated/floor/wood,/area/vacant/vacant_site)
-"aoB" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/tiled,/area/storage/primary)
-"aoC" = (/obj/item/weapon/stool,/obj/effect/landmark/start{name = "Assistant"},/turf/simulated/floor/tiled,/area/storage/primary)
+"aoB" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/medical_emergency_hallway)
+"aoC" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/disposalpipe/sortjunction{dir = 4; icon_state = "pipe-j1s"; name = "Primary Tool Storage"; sortType = "Primary Tool Storage"},/obj/machinery/light/small{dir = 1},/turf/simulated/floor,/area/maintenance/cargo)
"aoD" = (/turf/simulated/floor/tiled,/area/storage/primary)
-"aoE" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/storage/primary)
-"aoF" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/tiled,/area/storage/primary)
-"aoG" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/storage/primary)
-"aoH" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/civilian_hallway_mid)
+"aoE" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/secondary/medical_emergency_hallway)
+"aoF" = (/obj/effect/decal/cleanable/generic,/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/floor/plating,/area/maintenance/cargo)
+"aoG" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/maintenance/cargo)
+"aoH" = (/obj/structure/closet/crate,/obj/item/weapon/tank/emergency_oxygen/engi,/obj/item/weapon/tank/emergency_oxygen/double,/turf/simulated/floor/plating,/area/maintenance/cargo)
"aoI" = (/obj/machinery/newscaster{pixel_x = -30},/turf/simulated/floor/tiled/dark,/area/chapel/main)
"aoJ" = (/obj/effect/floor_decal/chapel{tag = "icon-chapel (WEST)"; icon_state = "chapel"; dir = 8},/turf/simulated/floor/tiled/dark,/area/chapel/main)
"aoK" = (/obj/effect/floor_decal/chapel,/turf/simulated/floor/tiled/dark,/area/chapel/main)
@@ -781,7 +781,7 @@
"apa" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1379; id_tag = "chapel_maint_airlock"; name = "Airlock Console"; pixel_y = 25; req_access = list(13); tag_airpump = "chapel_maint_pump"; tag_chamber_sensor = "chapel_maint_sensor"; tag_exterior_door = "chapel_maint_outer"; tag_interior_door = "chapel_maint_inner"},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1; icon_state = "map"; tag = "icon-manifold-f (NORTH)"},/obj/effect/floor_decal/industrial/warning{dir = 9},/turf/simulated/floor,/area/maintenance/chapel)
"apb" = (/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "chapel_maint_sensor"; pixel_x = 0; pixel_y = 25},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1379; id_tag = "chapel_maint_pump"},/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor,/area/maintenance/chapel)
"apc" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "chapel_maint_outer"; locked = 1; name = "Chapel Maintenance EVA External Access"; req_access = list(13)},/turf/simulated/floor,/area/maintenance/chapel)
-"apd" = (/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/maintenance/chapel)
+"apd" = (/obj/structure/closet/emcloset,/turf/simulated/floor,/area/maintenance/cargo)
"ape" = (/obj/machinery/computer/security/wooden_tv,/turf/simulated/floor/lino,/area/security/detectives_office)
"apf" = (/obj/structure/bed/chair/office/dark{dir = 4},/obj/effect/landmark/start{name = "Detective"},/turf/simulated/floor/carpet,/area/security/detectives_office)
"apg" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/table/woodentable,/obj/item/device/taperecorder{pixel_x = -4; pixel_y = 2},/turf/simulated/floor/carpet,/area/security/detectives_office)
@@ -798,21 +798,21 @@
"apr" = (/obj/structure/closet/emcloset,/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor/plating,/area/hallway/secondary/escape/fore_escape_pod_hallway)
"aps" = (/obj/structure/closet/emcloset,/obj/effect/floor_decal/industrial/warning{dir = 9},/turf/simulated/floor/plating,/area/hallway/secondary/escape/fore_escape_pod_hallway)
"apt" = (/obj/machinery/light/small{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor/plating,/area/hallway/secondary/escape/fore_escape_pod_hallway)
-"apu" = (/obj/machinery/newscaster{pixel_x = -30},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
-"apv" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/escape/fore_escape_pod_hallway)
+"apu" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/medical_emergency_hallway)
+"apv" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/medical_emergency_hallway)
"apw" = (/turf/simulated/floor/tiled/dark,/area/hallway/secondary/escape/fore_escape_pod_hallway)
"apx" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/escape/fore_escape_pod_hallway)
"apy" = (/obj/structure/closet/emcloset,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/escape/fore_escape_pod_hallway)
"apz" = (/turf/simulated/wall,/area/storage/emergency_storage/emergency4)
-"apA" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/vacant/vacant_site)
+"apA" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/secondary/medical_emergency_hallway)
"apB" = (/obj/structure/table/reinforced,/obj/item/stack/tile/wood,/turf/simulated/floor/wood,/area/vacant/vacant_site)
-"apC" = (/obj/structure/table/reinforced,/turf/simulated/floor/wood,/area/vacant/vacant_site)
-"apD" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_x = 4; pixel_y = 5},/obj/item/weapon/reagent_containers/food/drinks/drinkingglass,/turf/simulated/floor/wood,/area/vacant/vacant_site)
+"apC" = (/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/quartermaster/delivery)
+"apD" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/food/drinks/glass2/square{pixel_x = 4; pixel_y = 5},/obj/item/weapon/reagent_containers/food/drinks/glass2/square,/turf/simulated/floor/wood,/area/vacant/vacant_site)
"apE" = (/obj/item/stack/tile/wood,/turf/simulated/floor,/area/vacant/vacant_site)
-"apF" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/status_display{layer = 4; pixel_x = -32; pixel_y = 0},/turf/simulated/floor/tiled,/area/storage/primary)
-"apG" = (/obj/item/weapon/stool,/obj/effect/landmark/start{name = "Assistant"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/storage/primary)
-"apH" = (/obj/machinery/light_switch{pixel_x = 26; pixel_y = 0},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/storage/primary)
-"apI" = (/obj/structure/disposalpipe/segment,/obj/machinery/camera/network/northern_star{c_tag = "Hall - Civilian Primary Mid 2"; dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
+"apF" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/maintenance{req_access = list(12)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/storage/primary)
+"apG" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/hallway/secondary/medical_emergency_hallway)
+"apH" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled,/area/quartermaster/delivery)
+"apI" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/requests_console{department = "Tool Storage"; departmentType = 0; pixel_y = 30},/turf/simulated/floor/tiled,/area/storage/primary)
"apJ" = (/obj/machinery/camera/network/civilian{c_tag = "CIV - Chapel Port"; dir = 4},/turf/simulated/floor/tiled/dark,/area/chapel/main)
"apK" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled/dark,/area/chapel/main)
"apL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled/dark,/area/chapel/main)
@@ -820,17 +820,17 @@
"apN" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/tiled/dark,/area/chapel/main)
"apO" = (/obj/machinery/camera/network/civilian{c_tag = "CIV - Chapel Starboard"; dir = 8},/obj/structure/flora/pottedplant{icon_state = "plant-22"},/turf/simulated/floor/tiled/dark,/area/chapel/main)
"apP" = (/obj/structure/closet/emcloset,/turf/simulated/floor/tiled,/area/maintenance/chapel)
-"apQ" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled,/area/maintenance/chapel)
-"apR" = (/obj/machinery/camera/network/civilian{c_tag = "CIV - Chapel Maintenance Access"; dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/tiled,/area/maintenance/chapel)
-"apS" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled,/area/maintenance/chapel)
+"apQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/storage/primary)
+"apR" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/storage/primary)
+"apS" = (/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled,/area/storage/primary)
"apT" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "chapel_maint_airlock"; name = "interior access button"; pixel_x = 0; pixel_y = -25; req_access = list(13)},/turf/simulated/floor/tiled,/area/maintenance/chapel)
"apU" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "chapel_maint_inner"; locked = 1; name = "Chapel Maintenance EVA Internal Access"; req_access = list(13)},/turf/simulated/floor,/area/maintenance/chapel)
"apV" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5; icon_state = "intact"; tag = "icon-intact-f (NORTHEAST)"},/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/machinery/camera/network/civilian{c_tag = "CIV - Chapel EVA"; dir = 1},/turf/simulated/floor,/area/maintenance/chapel)
"apW" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1379; id_tag = "chapel_maint_pump"},/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/machinery/light/small,/turf/simulated/floor,/area/maintenance/chapel)
-"apX" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "chapel_maint_airlock"; name = "exterior access button"; pixel_x = 0; pixel_y = -25; req_access = list(13)},/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/maintenance/chapel)
-"apY" = (/obj/structure/closet/secure_closet/detective,/obj/item/weapon/reagent_containers/food/drinks/flask/detflask,/turf/simulated/floor/lino,/area/security/detectives_office)
+"apX" = (/obj/machinery/door/airlock/vault/bolted{req_access = list(53)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
+"apY" = (/obj/structure/closet/secure_closet/detective,/turf/simulated/floor/lino,/area/security/detectives_office)
"apZ" = (/turf/simulated/floor/carpet,/area/security/detectives_office)
-"aqa" = (/obj/structure/table/woodentable,/obj/item/clothing/glasses/sunglasses,/obj/item/weapon/paper_bin,/turf/simulated/floor/carpet,/area/security/detectives_office)
+"aqa" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/item/clothing/glasses/sunglasses,/turf/simulated/floor/carpet,/area/security/detectives_office)
"aqb" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/hologram/holopad,/turf/simulated/floor/carpet,/area/security/detectives_office)
"aqc" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/carpet,/area/security/detectives_office)
"aqd" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table/reinforced,/obj/machinery/microscope,/turf/simulated/floor/tiled/freezer,/area/security/detectives_office)
@@ -841,26 +841,26 @@
"aqi" = (/obj/structure/sign/pods,/turf/simulated/wall,/area/hallway/secondary/escape/fore_escape_pod_hallway)
"aqj" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_2_berth_hatch"; locked = 1; name = "Escape Pod 2"; req_access = list(13)},/turf/simulated/floor/plating,/area/hallway/secondary/escape/fore_escape_pod_hallway)
"aqk" = (/obj/structure/closet/emcloset,/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
-"aql" = (/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/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
-"aqm" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/sign/pods{dir = 8; pixel_y = 32},/obj/machinery/camera/network/northern_star{c_tag = "Hall - Fore Escape Pod Starboard"; dir = 2},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
-"aqn" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
-"aqo" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
-"aqp" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
+"aql" = (/obj/item/weapon/stool,/obj/effect/landmark/start{name = "Assistant"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/storage/primary)
+"aqm" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled,/area/storage/primary)
+"aqn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/storage/primary)
+"aqo" = (/obj/structure/safe,/obj/item/clothing/under/color/yellow,/obj/item/key,/obj/item/toy/katana,/obj/item/weapon/melee/chainofcommand,/obj/item/weapon/disk/nuclear{name = "authentication disk"},/obj/item/weapon/moneybag/vault,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
+"aqp" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
"aqq" = (/obj/machinery/space_heater,/turf/simulated/floor,/area/storage/emergency_storage/emergency4)
"aqr" = (/obj/structure/table/rack{dir = 1},/obj/item/clothing/suit/fire/firefighter,/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/gas,/obj/item/weapon/extinguisher,/obj/item/clothing/head/hardhat/red,/obj/item/clothing/glasses/meson,/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/storage/emergency_storage/emergency4)
-"aqs" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/tank/oxygen,/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/extinguisher,/turf/simulated/floor/plating,/area/storage/emergency_storage/emergency4)
-"aqt" = (/obj/structure/girder/displaced,/turf/simulated/floor,/area/storage/emergency_storage/emergency4)
+"aqs" = (/obj/effect/landmark{name = "blobstart"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
+"aqt" = (/obj/structure/filingcabinet/security{name = "Security Records"},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
"aqu" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/wood,/area/vacant/vacant_site)
-"aqv" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/tiled,/area/storage/primary)
+"aqv" = (/obj/structure/reagent_dispensers/fueltank,/obj/machinery/ai_status_display{pixel_x = -32; pixel_y = 0},/turf/simulated/floor/tiled,/area/storage/primary)
"aqw" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor/tiled,/area/storage/primary)
-"aqx" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/storage/primary)
-"aqy" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled,/area/storage/primary)
-"aqz" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/storage/primary)
-"aqA" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/storage/primary)
-"aqB" = (/obj/machinery/door/airlock/glass{name = "Primary Tool Storage"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/storage/primary)
-"aqC" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"aqD" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"aqE" = (/obj/structure/disposalpipe/sortjunction{dir = 2; icon_state = "pipe-j1s"; name = "Primary Tool Storage"; sortType = "Primary Tool Storage"},/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
+"aqx" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/storage/primary)
+"aqy" = (/obj/machinery/vending/assist,/obj/machinery/status_display{layer = 4; pixel_x = 32; pixel_y = 0},/turf/simulated/floor/tiled,/area/storage/primary)
+"aqz" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
+"aqA" = (/obj/structure/filingcabinet/medical{desc = "A large cabinet with hard copy medical records."; name = "Medical Records"},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
+"aqB" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/machinery/cell_charger,/turf/simulated/floor/tiled,/area/storage/primary)
+"aqC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
+"aqD" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
+"aqE" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
"aqF" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled/dark,/area/chapel/main)
"aqG" = (/obj/effect/floor_decal/chapel{tag = "icon-chapel (NORTH)"; icon_state = "chapel"; dir = 1},/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled/dark,/area/chapel/main)
"aqH" = (/obj/effect/floor_decal/chapel{tag = "icon-chapel (EAST)"; icon_state = "chapel"; dir = 4},/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled/dark,/area/chapel/main)
@@ -881,37 +881,37 @@
"aqW" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/tiled/white,/area/security/detectives_office)
"aqX" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/freezer,/area/security/detectives_office)
"aqY" = (/obj/machinery/door/airlock/maintenance{name = "Detective Maintenance"; req_access = list(4)},/obj/machinery/door/firedoor/border_only,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/security/detectives_office)
-"aqZ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
-"ara" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth{frequency = 1380; id_tag = "escape_pod_1_berth"; pixel_x = -25; pixel_y = 30; tag_door = "escape_pod_1_berth_hatch"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
-"arb" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
-"arc" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 27},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
-"ard" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
-"are" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth{frequency = 1380; id_tag = "escape_pod_2_berth"; pixel_x = -25; pixel_y = 30; tag_door = "escape_pod_2_berth_hatch"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
-"arf" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
-"arg" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
-"arh" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
-"ari" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
-"arj" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
-"ark" = (/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
-"arl" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
-"arm" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/junction{dir = 1; icon_state = "pipe-j2"},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
-"arn" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/escape/fore_escape_pod_hallway)
+"aqZ" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/mob/living/simple_animal/mouse/brown/Tom,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
+"ara" = (/obj/machinery/camera/network/command{c_tag = "COM - Vault"; dir = 9},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
+"arb" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled,/area/storage/primary)
+"arc" = (/obj/item/weapon/stool,/obj/effect/landmark/start{name = "Assistant"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/storage/primary)
+"ard" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/storage/primary)
+"are" = (/obj/item/weapon/coin/silver{pixel_x = 7; pixel_y = 12},/obj/item/weapon/coin/silver{pixel_x = 12; pixel_y = 7},/obj/item/weapon/coin/silver{pixel_x = 4; pixel_y = 8},/obj/item/weapon/coin/silver{pixel_x = -6; pixel_y = 5},/obj/item/weapon/coin/silver{pixel_x = 5; pixel_y = -8},/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/structure/closet/crate/secure{name = "Silver Crate"; req_access = list(19)},/obj/item/weapon/coin/silver{pixel_x = 4; pixel_y = 8},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
+"arf" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
+"arg" = (/obj/item/weapon/coin/gold,/obj/item/weapon/coin/gold,/obj/item/weapon/coin/gold,/obj/item/weapon/coin/gold,/obj/item/weapon/coin/gold,/obj/item/weapon/coin/gold,/obj/structure/closet/crate/secure{name = "Gold Crate"; req_access = list(19)},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
+"arh" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled,/area/storage/primary)
+"ari" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/light_switch{pixel_x = 12; pixel_y = -24},/turf/simulated/floor/tiled,/area/storage/primary)
+"arj" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "Tool Storage"},/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/storage/primary)
+"ark" = (/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/storage/primary)
+"arl" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/storage/primary)
+"arm" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/storage/primary)
+"arn" = (/obj/machinery/disposal,/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -26},/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/tiled,/area/storage/primary)
"aro" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock{name = "Emergency Storage"},/obj/machinery/door/firedoor,/turf/simulated/floor,/area/storage/emergency_storage/emergency4)
"arp" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/storage/emergency_storage/emergency4)
-"arq" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor,/area/storage/emergency_storage/emergency4)
-"arr" = (/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor,/area/storage/emergency_storage/emergency4)
-"ars" = (/obj/structure/bed/chair/comfy/brown,/turf/simulated/floor/wood,/area/vacant/vacant_site)
+"arq" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/maintenance{req_access = list(12)},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor,/area/maintenance/cargo)
+"arr" = (/obj/structure/closet/secure_closet/freezer/money,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/item/weapon/storage/secure/briefcase/money{desc = "An sleek tidy briefcase."; name = "secure briefcase"},/obj/structure/cable,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
+"ars" = (/obj/machinery/door/airlock/glass{name = "Primary Tool Storage"},/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/storage/primary)
"art" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/tiled,/area/storage/primary)
-"aru" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled,/area/storage/primary)
-"arv" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/storage/primary)
-"arw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/storage/primary)
-"arx" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/storage/primary)
-"ary" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/storage/primary)
-"arz" = (/obj/machinery/door/airlock/glass{name = "Primary Tool Storage"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/storage/primary)
-"arA" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"arB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"arC" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"arD" = (/obj/structure/disposalpipe/segment,/obj/structure/extinguisher_cabinet{pixel_x = 25; pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
+"aru" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/storage/primary)
+"arv" = (/obj/machinery/door/airlock/glass{name = "Primary Tool Storage"},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/storage/primary)
+"arw" = (/obj/structure/table/reinforced,/obj/machinery/cash_register/civilian{dir = 1},/turf/simulated/floor/tiled,/area/vacant/vacant_shop)
+"arx" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/cargo_hallway)
+"ary" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/cargo_hallway)
+"arz" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/hallway/secondary/cargo_hallway)
+"arA" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging)
+"arB" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging)
+"arC" = (/obj/structure/closet/crate,/obj/item/weapon/bedsheet/orange,/obj/item/weapon/bedsheet/orange,/obj/item/weapon/bedsheet/yellow,/obj/item/weapon/bedsheet/purple,/obj/item/weapon/bedsheet/red,/obj/item/weapon/bedsheet/brown,/obj/item/weapon/bedsheet/green,/obj/effect/floor_decal/corner/white/diagonal{tag = "icon-corner_white_diagonal (EAST)"; icon_state = "corner_white_diagonal"; dir = 4},/obj/effect/floor_decal/corner/blue,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/green,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_laundry)
+"arD" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/camera/network/engineering{c_tag = "ENG - Chief Engineer's Office"; dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief)
"arE" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/dark,/area/chapel/main)
"arF" = (/obj/effect/floor_decal/chapel{tag = "icon-chapel (WEST)"; icon_state = "chapel"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/dark,/area/chapel/main)
"arG" = (/obj/effect/floor_decal/chapel,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/dark,/area/chapel/main)
@@ -937,35 +937,35 @@
"asa" = (/obj/machinery/status_display{pixel_x = 0; pixel_y = -32},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/closet{name = "Evidence Closet"},/obj/item/weapon/storage/box/gloves,/obj/item/weapon/storage/box/evidence,/obj/item/weapon/storage/box/bodybags,/turf/simulated/floor/tiled/freezer,/area/security/detectives_office)
"asb" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/tiled/freezer,/area/security/detectives_office)
"asc" = (/obj/machinery/light,/obj/machinery/chem_master,/turf/simulated/floor/tiled/freezer,/area/security/detectives_office)
-"asd" = (/obj/machinery/camera/network/security{c_tag = "EVA Northeast"; dir = 8},/obj/machinery/photocopier,/turf/simulated/floor/tiled/freezer,/area/security/detectives_office)
-"ase" = (/obj/machinery/newscaster{pixel_x = 0; pixel_y = -28},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
-"asf" = (/obj/machinery/light,/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
-"asg" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
-"ash" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
-"asi" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/camera/network/northern_star{c_tag = "Hall - Fore Escape Pod Port"; dir = 1},/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
-"asj" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
-"ask" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
-"asl" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
-"asm" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
-"asn" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/light,/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
-"aso" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
-"asp" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
-"asq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
+"asd" = (/obj/machinery/camera/network/security{c_tag = "SEC - Forensic Office"; dir = 8},/obj/machinery/photocopier,/turf/simulated/floor/tiled/freezer,/area/security/detectives_office)
+"ase" = (/obj/machinery/portable_atmospherics/powered/pump/filled,/turf/simulated/floor/plating,/area/storage/emergency_storage/emergency5)
+"asf" = (/obj/structure/table/rack{dir = 1},/obj/item/clothing/suit/fire/firefighter,/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/gas,/obj/item/weapon/extinguisher,/obj/item/clothing/head/hardhat/red,/obj/item/clothing/glasses/meson,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor/plating,/area/storage/emergency_storage/emergency5)
+"asg" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/blue,/obj/effect/floor_decal/corner/white/diagonal{tag = "icon-corner_white_diagonal (EAST)"; icon_state = "corner_white_diagonal"; dir = 4},/obj/item/device/communicator,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging)
+"ash" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging)
+"asi" = (/obj/structure/closet/wardrobe/mixed,/obj/effect/floor_decal/corner/blue,/obj/effect/floor_decal/corner/white{dir = 8},/obj/item/clothing/accessory/storage/knifeharness,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_laundry)
+"asj" = (/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/obj/machinery/floodlight,/turf/simulated/floor,/area/storage/emergency_storage/emergency5)
+"ask" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/storage/emergency_storage/emergency5)
+"asl" = (/obj/structure/table/standard,/obj/item/device/t_scanner,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor/plating,/area/storage/emergency_storage/emergency5)
+"asm" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/storage/emergency_storage/emergency5)
+"asn" = (/obj/machinery/door/airlock/glass,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"aso" = (/obj/machinery/door/airlock/glass,/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"asp" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock{name = "Emergency Storage"},/turf/simulated/floor/plating,/area/storage/emergency_storage/emergency5)
+"asq" = (/obj/machinery/door/firedoor/glass,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/crew_quarters/locker)
"asr" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
"ass" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/storage/emergency_storage/emergency4)
-"ast" = (/obj/machinery/portable_atmospherics/canister/air,/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor,/area/storage/emergency_storage/emergency4)
+"ast" = (/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/crew_quarters/locker)
"asu" = (/obj/machinery/floodlight,/turf/simulated/floor,/area/storage/emergency_storage/emergency4)
-"asv" = (/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/vacant/vacant_site)
-"asw" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/wood,/area/vacant/vacant_site)
-"asx" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/vacant/vacant_site)
-"asy" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/wood,/area/vacant/vacant_site)
-"asz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/wood,/area/vacant/vacant_site)
-"asA" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/wood,/area/vacant/vacant_site)
-"asB" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/firealarm{dir = 8; pixel_x = -24; pixel_y = 0},/turf/simulated/floor/tiled,/area/storage/primary)
-"asC" = (/obj/item/weapon/stool,/obj/effect/landmark/start{name = "Assistant"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/storage/primary)
-"asD" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/storage/primary)
-"asE" = (/obj/structure/extinguisher_cabinet{pixel_x = 25; pixel_y = 0},/turf/simulated/floor/tiled,/area/storage/primary)
-"asF" = (/obj/machinery/light/small{dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/maintenance/chapel)
+"asv" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/starboard)
+"asw" = (/obj/structure/closet/secure_closet/personal,/obj/item/weapon/storage/backpack/dufflebag,/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"asx" = (/obj/machinery/camera/network/civilian{c_tag = "Civ - Locker Room"; dir = 2},/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"asy" = (/obj/structure/closet/secure_closet/personal,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"asz" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"asA" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard)
+"asB" = (/obj/machinery/camera/network/northern_star{c_tag = "DOCK - Hallway Starboard 3"},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/starboard)
+"asC" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"asD" = (/obj/machinery/door/airlock/glass{name = "Locker Room"},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"asE" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"asF" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled,/area/crew_quarters/locker)
"asG" = (/turf/simulated/wall/r_wall,/area/security/brig)
"asH" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "security_lockdown"; name = "Security Blast Door"; opacity = 0},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/security/brig)
"asI" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "security_lockdown"; name = "Security Blast Door"; opacity = 0},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/security/brig)
@@ -978,20 +978,20 @@
"asP" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/security/detectives_office)
"asQ" = (/turf/simulated/wall,/area/security/security_lockerroom)
"asR" = (/turf/simulated/wall,/area/security/security_bathroom)
-"asS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/escape/fore_escape_pod_hallway)
+"asS" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/starboard)
"asT" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
-"asU" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
-"asV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
-"asW" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/escape/fore_escape_pod_hallway)
-"asX" = (/obj/structure/bed/chair/comfy/brown{dir = 1},/turf/simulated/floor/wood,/area/vacant/vacant_site)
+"asU" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard)
+"asV" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"asW" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/crew_quarters/locker)
+"asX" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
"asY" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/vacant/vacant_site)
-"asZ" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/wood,/area/vacant/vacant_site)
+"asZ" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
"ata" = (/obj/structure/bed/chair/comfy/brown{dir = 1},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/vacant/vacant_site)
-"atb" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled,/area/storage/primary)
-"atc" = (/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/tiled,/area/storage/primary)
-"atd" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"ate" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"atf" = (/obj/structure/disposalpipe/segment,/obj/machinery/firealarm{dir = 4; pixel_x = 26},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
+"atb" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"atc" = (/obj/structure/table/standard,/obj/item/weapon/tape_roll,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"atd" = (/obj/structure/table/standard,/obj/item/clothing/head/soft/grey{pixel_x = -2; pixel_y = 3},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"ate" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"atf" = (/obj/structure/table/standard,/obj/item/weapon/coin/silver,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
"atg" = (/obj/effect/floor_decal/chapel{tag = "icon-chapel (NORTH)"; icon_state = "chapel"; dir = 1},/turf/simulated/floor/tiled/dark,/area/chapel/main)
"ath" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/tiled/dark,/area/chapel/main)
"ati" = (/turf/simulated/wall/r_wall,/area/security/interrogation)
@@ -1010,7 +1010,7 @@
"atv" = (/obj/effect/floor_decal/corner/red{dir = 5},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/security/main)
"atw" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/corner/red{dir = 1},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/security/main)
"atx" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled,/area/security/main)
-"aty" = (/obj/effect/floor_decal/corner/red{dir = 4},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/disposalpipe/segment,/obj/structure/table/standard,/obj/machinery/chemical_dispenser/bar_soft/full,/obj/item/weapon/storage/box/cups{pixel_x = 0; pixel_y = 0},/turf/simulated/floor/tiled,/area/security/main)
+"aty" = (/obj/effect/floor_decal/corner/red{dir = 4},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/disposalpipe/segment,/obj/structure/table/standard,/obj/machinery/chemical_dispenser/bar_soft/full,/obj/item/weapon/storage/box/glasses/square,/turf/simulated/floor/tiled,/area/security/main)
"atz" = (/obj/structure/table/standard,/obj/machinery/cell_charger,/obj/item/weapon/screwdriver{pixel_y = 15},/obj/effect/floor_decal/corner/red{dir = 5},/turf/simulated/floor/tiled,/area/security/main)
"atA" = (/obj/structure/table/standard,/obj/machinery/recharger,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/effect/floor_decal/corner/red{dir = 5},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/obj/item/weapon/storage/box/donut,/turf/simulated/floor/tiled,/area/security/main)
"atB" = (/obj/effect/floor_decal/corner/red{dir = 5},/obj/machinery/photocopier,/turf/simulated/floor/tiled,/area/security/main)
@@ -1023,26 +1023,26 @@
"atI" = (/obj/structure/table/standard,/obj/item/device/taperecorder{pixel_y = 0},/obj/item/device/megaphone,/obj/item/weapon/packageWrap,/obj/item/weapon/storage/box,/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/effect/floor_decal/corner/red/full{dir = 1},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/item/weapon/hand_labeler,/turf/simulated/floor/tiled,/area/security/security_lockerroom)
"atJ" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{pixel_x = -28},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/freezer,/area/security/security_bathroom)
"atK" = (/obj/structure/undies_wardrobe,/turf/simulated/floor/tiled/freezer,/area/security/security_bathroom)
-"atL" = (/obj/structure/table/standard,/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/item/weapon/soap,/turf/simulated/floor/tiled/freezer,/area/security/security_bathroom)
+"atL" = (/obj/structure/closet/jcloset,/obj/machinery/alarm{pixel_y = 22},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/obj/item/weapon/soap/nanotrasen,/turf/simulated/floor/tiled,/area/janitor)
"atM" = (/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"},/obj/structure/urinal{pixel_y = 32},/turf/simulated/floor/tiled/freezer,/area/security/security_bathroom)
"atN" = (/turf/simulated/wall,/area/maintenance/security_starboard)
-"atO" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/maintenance{req_access = list(12)},/turf/simulated/floor,/area/maintenance/security_starboard)
-"atP" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
+"atO" = (/obj/item/weapon/stool/padded,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"atP" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
"atQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
"atR" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
-"atS" = (/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/wood,/area/vacant/vacant_site)
-"atT" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/wood,/area/vacant/vacant_site)
-"atU" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/wood,/area/vacant/vacant_site)
-"atV" = (/obj/machinery/newscaster{pixel_x = 0; pixel_y = -28},/turf/simulated/floor/wood,/area/vacant/vacant_site)
-"atW" = (/obj/structure/bed/chair/comfy/black{dir = 4},/turf/simulated/floor/wood,/area/vacant/vacant_site)
-"atX" = (/obj/structure/table/woodentable,/obj/effect/decal/cleanable/dirt,/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/item/frame/fire_alarm,/turf/simulated/floor/wood,/area/vacant/vacant_site)
-"atY" = (/obj/structure/bed/chair/comfy/brown{dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/vacant/vacant_site)
-"atZ" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/vacant/vacant_site)
-"aua" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/structure/extinguisher_cabinet{pixel_x = -27},/turf/simulated/floor/tiled,/area/storage/primary)
-"aub" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "Tool Storage"},/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/turf/simulated/floor/tiled,/area/storage/primary)
+"atS" = (/obj/structure/table/standard,/obj/item/weapon/storage/laundry_basket,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"atT" = (/obj/machinery/vending/coffee,/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"atU" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"atV" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"atW" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"atX" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"atY" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"atZ" = (/obj/machinery/newscaster{pixel_x = 0; pixel_y = -28},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"aua" = (/obj/machinery/light,/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"aub" = (/obj/machinery/recharge_station,/turf/simulated/floor/tiled,/area/crew_quarters/locker)
"auc" = (/obj/machinery/lapvend,/turf/simulated/floor/tiled,/area/storage/primary)
-"aud" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/tiled,/area/storage/primary)
-"aue" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
+"aud" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{pixel_x = -28},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/locker/locker_toilet)
+"aue" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/light_switch{pixel_x = 11; pixel_y = 24},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/locker/locker_toilet)
"auf" = (/obj/effect/floor_decal/chapel{tag = "icon-chapel (WEST)"; icon_state = "chapel"; dir = 8},/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled/dark,/area/chapel/main)
"aug" = (/obj/effect/floor_decal/chapel,/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled/dark,/area/chapel/main)
"auh" = (/obj/effect/floor_decal/chapel{tag = "icon-chapel (WEST)"; icon_state = "chapel"; dir = 8},/obj/item/weapon/stool/padded,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/turf/simulated/floor/tiled/dark,/area/chapel/main)
@@ -1079,7 +1079,7 @@
"auM" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 27},/turf/simulated/floor/tiled/freezer,/area/security/security_bathroom)
"auN" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/maintenance/security_starboard)
"auO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
-"auP" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall,/area/vacant/vacant_site)
+"auP" = (/obj/structure/bed/chair,/turf/simulated/floor,/area/crew_quarters/locker/locker_toilet)
"auQ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/storage/primary)
"auR" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/storage/primary)
"auS" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/chapel/main)
@@ -1119,10 +1119,10 @@
"avA" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/turf/simulated/floor/tiled/freezer,/area/security/security_bathroom)
"avB" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light/small{dir = 4},/turf/simulated/floor,/area/maintenance/security_starboard)
"avC" = (/turf/simulated/wall,/area/hallway/secondary/civilian_hallway_aft)
-"avD" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_aft)
+"avD" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/chapel_hallway)
"avE" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_aft)
-"avF" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_aft)
-"avG" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/hallway/secondary/chapel_hallway)
+"avF" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/wood,/area/vacant/vacant_site)
+"avG" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/wood,/area/vacant/vacant_site)
"avH" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/chapel_hallway)
"avI" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/chapel_hallway)
"avJ" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/secondary/chapel_hallway)
@@ -1153,21 +1153,21 @@
"awi" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled/freezer,/area/security/security_bathroom)
"awj" = (/obj/machinery/door/airlock{name = "Security Restroom"},/turf/simulated/floor/tiled/freezer,/area/security/security_bathroom)
"awk" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass{name = "Civilian Hallway Access"},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
-"awl" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/glass{name = "Civilian Hallway Access"},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
+"awl" = (/obj/structure/table/gamblingtable,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/wood,/area/vacant/vacant_site)
"awm" = (/obj/machinery/door/firedoor/glass,/obj/structure/disposalpipe/segment,/obj/machinery/door/airlock/glass{name = "Civilian Hallway Access"},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway)
"awn" = (/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_aft)
-"awo" = (/obj/structure/extinguisher_cabinet{pixel_x = 25; pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_aft)
-"awp" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"awq" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"awr" = (/obj/machinery/door/firedoor/glass,/obj/structure/disposalpipe/segment,/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
+"awo" = (/obj/effect/decal/cleanable/dirt,/obj/item/weapon/cigbutt/cigarbutt,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/vacant/vacant_site)
+"awp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor,/area/vacant/vacant_site)
+"awq" = (/obj/machinery/vending/fitness,/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_port_escape_pod_hallway)
+"awr" = (/obj/effect/floor_decal/corner/paleblue{dir = 2},/obj/machinery/light,/obj/machinery/vending/fitness,/turf/simulated/floor/tiled/white,/area/medical/sleeper)
"aws" = (/turf/simulated/wall,/area/hallway/secondary/chapel_hallway)
-"awt" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/hallway/secondary/chapel_hallway)
-"awu" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/chapel_hallway)
-"awv" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/chapel_hallway)
-"aww" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/secondary/chapel_hallway)
-"awx" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor,/area/maintenance/chapel)
-"awy" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor,/area/maintenance/chapel)
-"awz" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor,/area/maintenance/chapel)
+"awt" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/atm{pixel_x = -32; pixel_y = 0},/obj/structure/table/glass,/turf/simulated/floor/tiled,/area/crew_quarters/sleep/elevator)
+"awu" = (/obj/machinery/newscaster{pixel_y = 32},/obj/machinery/firealarm{dir = 4; pixel_x = 26},/obj/structure/table/glass,/turf/simulated/floor/tiled,/area/crew_quarters/sleep/elevator)
+"awv" = (/obj/machinery/vending/fitness,/turf/simulated/floor/lino,/area/hallway/secondary/entry/docking_lounge)
+"aww" = (/obj/machinery/vending/fitness,/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"awx" = (/obj/machinery/conveyor{dir = 4; id = "garbage"},/obj/machinery/light/small{dir = 1},/obj/structure/plasticflaps/mining,/turf/simulated/floor,/area/maintenance/disposal)
+"awy" = (/obj/machinery/conveyor{dir = 2; id = "garbage"},/obj/machinery/alarm{dir = 8; pixel_x = 25; pixel_y = 0},/turf/simulated/floor,/area/maintenance/disposal)
+"awz" = (/obj/effect/floor_decal/industrial/loading,/obj/machinery/door/firedoor/border_only,/obj/structure/plasticflaps{opacity = 1},/obj/machinery/navbeacon{codes_txt = "delivery;dir=2"; freq = 1400; location = "Command"},/turf/simulated/floor/tiled,/area/bridge_hallway)
"awA" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/camera/network/security{c_tag = "SEC - Interrogation"},/turf/simulated/floor/tiled/dark,/area/security/interrogation)
"awB" = (/obj/structure/bed/chair,/turf/simulated/floor/tiled/dark,/area/security/interrogation)
"awC" = (/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/turf/simulated/floor/tiled/dark,/area/security/interrogation)
@@ -1176,7 +1176,7 @@
"awF" = (/obj/structure/closet{name = "Evidence Closet"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/dark,/area/security/evidence_storage)
"awG" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/tiled/dark,/area/security/evidence_storage)
"awH" = (/obj/structure/closet{name = "Evidence Closet"},/obj/machinery/light/small{dir = 4; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/dark,/area/security/evidence_storage)
-"awI" = (/obj/machinery/newscaster/security_unit{pixel_x = -30},/obj/machinery/camera/network/security{c_tag = "SEC - HoS' Office"; dir = 4},/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/folder/red,/obj/item/weapon/pen,/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos)
+"awI" = (/obj/machinery/newscaster/security_unit{pixel_x = -30},/obj/machinery/camera/network/security{c_tag = "SEC - HoS' Office"; dir = 4},/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/folder/red_hos,/obj/item/weapon/pen,/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos)
"awJ" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos)
"awK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/carpet,/area/crew_quarters/heads/hos)
"awL" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/bed/chair,/turf/simulated/floor/carpet,/area/crew_quarters/heads/hos)
@@ -1202,8 +1202,8 @@
"axf" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/civilian_hallway_aft)
"axg" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/civilian_hallway_aft)
"axh" = (/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,/turf/simulated/floor/plating,/area/hallway/secondary/civilian_hallway_aft)
-"axi" = (/obj/machinery/alarm{pixel_y = 22},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/civilian_hallway_aft)
-"axj" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 26},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/civilian_hallway_aft)
+"axi" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled,/area/bridge_hallway)
+"axj" = (/obj/effect/floor_decal/corner/blue{dir = 9},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/window/southleft{base_state = "left"; dir = 2; icon_state = "left"; name = "Command Delivery"; req_access = list(19)},/turf/simulated/floor/tiled,/area/bridge_hallway)
"axk" = (/obj/machinery/camera/network/northern_star{c_tag = "Hall - Civilian Aft Starboard 2"; dir = 2},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/civilian_hallway_aft)
"axl" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_aft)
"axm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_aft)
@@ -1211,7 +1211,7 @@
"axo" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/chapel_hallway)
"axp" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/chapel_hallway)
"axq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/secondary/chapel_hallway)
-"axr" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/maintenance/chapel)
+"axr" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/pros_fabricator,/turf/simulated/floor/tiled,/area/assembly/robotics)
"axs" = (/turf/simulated/wall/r_wall,/area/security/security_equiptment_storage)
"axt" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/light/small{dir = 8},/obj/item/device/radio/intercom/interrogation{dir = 8; pixel_x = -22},/turf/simulated/floor/tiled/dark,/area/security/interrogation)
"axu" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/table/standard,/obj/item/device/flashlight/lamp,/obj/item/device/taperecorder,/turf/simulated/floor/tiled/dark,/area/security/interrogation)
@@ -1240,35 +1240,35 @@
"axR" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_aft)
"axS" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_aft)
"axT" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_aft)
-"axU" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass{name = "Civilian Hallway Access"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_aft)
+"axU" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/structure/table/standard,/obj/item/device/robotanalyzer,/obj/item/device/robotanalyzer,/obj/item/device/mmi/digital/posibrain,/turf/simulated/floor/tiled,/area/assembly/robotics)
"axV" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_aft)
-"axW" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_aft)
-"axX" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_aft)
-"axY" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_aft)
-"axZ" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/camera/network/northern_star{c_tag = "Hall - Civilian Aft Starboard 1"; dir = 2},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_aft)
-"aya" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_aft)
-"ayb" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_aft)
-"ayc" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_aft)
+"axW" = (/obj/structure/table/standard,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/item/weapon/soap/nanotrasen,/turf/simulated/floor/tiled,/area/holodeck_control)
+"axX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/recreation_area_restroom)
+"axY" = (/obj/item/weapon/soap/nanotrasen,/obj/item/weapon/soap/nanotrasen,/obj/structure/table/standard,/turf/simulated/floor/tiled/freezer,/area/crew_quarters/recreation_area_restroom)
+"axZ" = (/obj/structure/mirror{pixel_x = 28},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/recreation_area_restroom)
+"aya" = (/obj/structure/table/standard,/obj/machinery/light{dir = 8},/obj/item/weapon/soap/nanotrasen,/turf/simulated/floor/tiled,/area/holodeck_control)
+"ayb" = (/obj/structure/table/standard,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/machinery/light_switch{pixel_x = -12; pixel_y = -24},/obj/effect/floor_decal/corner/purple/diagonal,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/item/weapon/soap/nanotrasen,/obj/item/weapon/soap/nanotrasen,/turf/simulated/floor/tiled/white,/area/rnd/research_restroom)
+"ayc" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/lime{dir = 6},/obj/machinery/camera/network/medbay{c_tag = "MED - Virology Quarantine Starboard"; dir = 8},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/obj/item/weapon/soap/nanotrasen,/turf/simulated/floor/tiled/white,/area/medical/virology)
"ayd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_aft)
"aye" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor/tiled,/area/hallway/secondary/chapel_hallway)
"ayf" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/chapel_hallway)
"ayg" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor/tiled,/area/hallway/secondary/chapel_hallway)
"ayh" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/chapel_hallway)
"ayi" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/camera/network/northern_star{c_tag = "Hall - Chapel Access Port"; dir = 2},/turf/simulated/floor/tiled,/area/hallway/secondary/chapel_hallway)
-"ayj" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/chapel_hallway)
-"ayk" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/chapel_hallway)
-"ayl" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/chapel_hallway)
+"ayj" = (/obj/structure/closet/secure_closet/medical3,/obj/effect/floor_decal/corner/paleblue{dir = 5},/obj/item/weapon/soap/nanotrasen,/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage)
+"ayk" = (/obj/structure/closet/secure_closet/medical3,/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = 30},/obj/effect/floor_decal/corner/paleblue/full{dir = 1},/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/obj/item/weapon/soap/nanotrasen,/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage)
+"ayl" = (/obj/structure/table/marble,/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/item/weapon/packageWrap,/obj/item/weapon/reagent_containers/food/condiment/enzyme{layer = 5},/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/dropper,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen)
"aym" = (/turf/simulated/floor/tiled,/area/hallway/secondary/chapel_hallway)
-"ayn" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/chapel_hallway)
-"ayo" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/hallway/secondary/chapel_hallway)
+"ayn" = (/obj/structure/closet/chefcloset,/obj/item/glass_jar,/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/item/device/retail_scanner/civilian,/obj/item/weapon/soap/nanotrasen,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen)
+"ayo" = (/obj/structure/table/standard,/obj/item/weapon/soap/nanotrasen,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_5)
"ayp" = (/obj/structure/closet/emcloset,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/chapel_hallway)
-"ayq" = (/obj/machinery/light/small{dir = 4; pixel_y = 0},/obj/item/weapon/stool/padded,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/maintenance/chapel)
+"ayq" = (/obj/structure/table/standard,/obj/item/weapon/soap/nanotrasen,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_6)
"ayr" = (/obj/machinery/deployable/barrier,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/security_equiptment_storage)
-"ays" = (/obj/machinery/camera/network/security{c_tag = "SEC - Secure Armory Armor"; dir = 8},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/structure/table/rack,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"ays" = (/obj/structure/table/standard,/obj/item/weapon/soap/nanotrasen,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_11)
"ayt" = (/obj/structure/table/rack,/obj/item/clothing/mask/gas{pixel_x = 3; pixel_y = 3},/obj/item/clothing/mask/gas{pixel_x = 3; pixel_y = 3},/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas{pixel_x = -3; pixel_y = -3},/obj/item/clothing/mask/gas{pixel_x = -3; pixel_y = -3},/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = 28},/turf/simulated/floor/tiled,/area/security/security_equiptment_storage)
"ayu" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/seccarts{pixel_x = 3; pixel_y = 2},/obj/item/weapon/storage/box/handcuffs,/obj/item/weapon/storage/box/flashbangs{pixel_x = -2; pixel_y = -2},/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled,/area/security/security_equiptment_storage)
-"ayv" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/table/rack,/obj/item/clothing/mask/balaclava,/obj/item/clothing/mask/balaclava,/obj/item/clothing/mask/balaclava,/obj/item/clothing/mask/balaclava,/turf/simulated/floor/tiled/dark,/area/security/armoury)
-"ayw" = (/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/obj/structure/table/standard,/obj/item/weapon/storage/laundry_basket,/turf/simulated/floor/tiled/white,/area/crew_quarters/locker)
+"ayv" = (/obj/structure/table/standard,/obj/item/weapon/soap/nanotrasen,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_12)
+"ayw" = (/obj/structure/table/standard,/obj/item/weapon/soap/nanotrasen,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_3)
"ayx" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled/dark,/area/security/interrogation)
"ayy" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/tiled/dark,/area/security/interrogation)
"ayz" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled/dark,/area/security/interrogation)
@@ -1276,7 +1276,7 @@
"ayB" = (/obj/structure/filingcabinet/filingcabinet,/obj/machinery/light_switch{pixel_x = 0; pixel_y = -26},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/tiled/dark,/area/security/evidence_storage)
"ayC" = (/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled/dark,/area/security/evidence_storage)
"ayD" = (/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/table/standard,/obj/machinery/camera/network/security{c_tag = "SEC - Evidence Storage"; dir = 8},/obj/item/weapon/storage/laundry_basket,/turf/simulated/floor/tiled/dark,/area/security/evidence_storage)
-"ayE" = (/obj/structure/closet/secure_closet/personal,/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/storage/backpack/dufflebag,/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"ayE" = (/obj/structure/table/standard,/obj/item/weapon/soap/nanotrasen,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_4)
"ayF" = (/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/green,/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos)
"ayG" = (/obj/structure/bed/chair/comfy/black{dir = 1},/obj/effect/landmark/start{name = "Head of Security"},/obj/machinery/button/remote/airlock{id = "HoSdoor"; name = "Office Door"; pixel_x = -36; pixel_y = 29},/obj/machinery/button/windowtint{pixel_x = -26; pixel_y = 30},/obj/machinery/button/remote/blast_door{id = "security_lockdown"; name = "Brig Lockdown"; pixel_x = -36; pixel_y = 39; req_access = list(2)},/turf/simulated/floor/carpet,/area/crew_quarters/heads/hos)
"ayH" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos)
@@ -1288,9 +1288,9 @@
"ayN" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled,/area/security/main)
"ayO" = (/obj/effect/floor_decal/corner/red{dir = 6},/obj/item/device/radio/intercom{broadcasting = 0; dir = 4; frequency = 1475; icon_state = "intercom"; listening = 1; name = "Station Intercom (Security)"; pixel_x = 21; pixel_y = 0},/turf/simulated/floor/tiled,/area/security/main)
"ayP" = (/turf/simulated/wall/r_wall,/area/security/security_cell_hallway)
-"ayQ" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor,/area/security/security_cell_hallway)
-"ayR" = (/obj/structure/table/standard,/obj/item/weapon/pen,/obj/item/weapon/paper,/obj/machinery/camera/network/security{c_tag = "SEC - Solitary Confinement 1"},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/plating,/area/security/security_cell_hallway)
-"ayS" = (/obj/structure/table/standard,/obj/item/weapon/pen,/obj/item/weapon/paper,/obj/machinery/camera/network/security{c_tag = "SEC - Solitary Confinement 2"; dir = 2},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/plating,/area/security/security_cell_hallway)
+"ayQ" = (/obj/machinery/cryopod,/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/simulated/floor/tiled/white,/area/security/security_cell_hallway)
+"ayR" = (/obj/machinery/camera/network/security{c_tag = "SEC - Solitary Confinement 1"},/obj/structure/cryofeed,/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/tiled/white,/area/security/security_cell_hallway)
+"ayS" = (/obj/machinery/cryopod{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/tiled/white,/area/security/security_cell_hallway)
"ayT" = (/obj/machinery/atmospherics/pipe/tank/nitrous_oxide{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 9},/turf/simulated/floor,/area/security/riot_control)
"ayU" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1; icon_state = "map"; tag = "icon-manifold-f (NORTH)"},/obj/machinery/meter,/obj/machinery/light/small{dir = 1},/turf/simulated/floor,/area/security/riot_control)
"ayV" = (/obj/machinery/atmospherics/valve{dir = 4},/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor,/area/security/riot_control)
@@ -1321,15 +1321,15 @@
"azu" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor/tiled,/area/hallway/secondary/chapel_hallway)
"azv" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/chapel_hallway)
"azw" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/chapel_hallway)
-"azx" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/chapel_hallway)
-"azy" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/chapel_hallway)
-"azz" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/secondary/chapel_hallway)
-"azA" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/secondary/chapel_hallway)
-"azB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/chapel_hallway)
-"azC" = (/turf/simulated/floor/tiled/dark,/area/hallway/secondary/chapel_hallway)
-"azD" = (/obj/machinery/door/airlock/maintenance{name = "Maintenance Access"; req_one_access = list(12,22)},/obj/machinery/door/firedoor,/turf/simulated/floor,/area/maintenance/chapel)
-"azE" = (/obj/effect/decal/cleanable/dirt,/obj/item/weapon/cigbutt/cigarbutt,/turf/simulated/floor,/area/maintenance/chapel)
-"azF" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/table/gamblingtable,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/item/weapon/deck/cards,/turf/simulated/floor,/area/maintenance/chapel)
+"azx" = (/obj/structure/table/standard,/obj/item/weapon/soap/nanotrasen,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_9)
+"azy" = (/obj/structure/table/standard,/obj/item/weapon/soap/nanotrasen,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_10)
+"azz" = (/obj/structure/table/standard,/obj/item/weapon/soap/nanotrasen,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_1)
+"azA" = (/obj/structure/table/standard,/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/item/weapon/soap/nanotrasen,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_2)
+"azB" = (/obj/structure/table/standard,/obj/item/weapon/soap/nanotrasen,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_7)
+"azC" = (/obj/structure/table/standard,/obj/item/weapon/soap/nanotrasen,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_8)
+"azD" = (/obj/machinery/light_switch{pixel_x = 0; pixel_y = -27},/obj/machinery/light_switch{pixel_x = 0; pixel_y = -27},/obj/structure/table/standard,/obj/structure/bedsheetbin,/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/item/weapon/soap/nanotrasen,/turf/simulated/floor/tiled/freezer,/area/crew_quarters/sleep/engi_wash)
+"azE" = (/obj/structure/bed/double/padded,/obj/item/weapon/bedsheet/doublebrown,/obj/machinery/newscaster{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_5)
+"azF" = (/obj/machinery/newscaster{pixel_x = 0; pixel_y = 32},/obj/structure/bed/double/padded,/obj/item/weapon/bedsheet/doublebrown,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_6)
"azG" = (/turf/space,/area/syndicate_station/northwest)
"azH" = (/turf/simulated/floor/tiled,/area/security/security_equiptment_storage)
"azI" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/tiled,/area/security/security_equiptment_storage)
@@ -1347,13 +1347,13 @@
"azU" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled,/area/security/main)
"azV" = (/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/tiled,/area/security/main)
"azW" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/effect/floor_decal/corner/red{dir = 6},/turf/simulated/floor/tiled,/area/security/main)
-"azX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor,/area/security/security_cell_hallway)
-"azY" = (/obj/machinery/light/small{dir = 4; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor,/area/security/security_cell_hallway)
+"azX" = (/obj/machinery/camera/network/security{c_tag = "SEC - Solitary Confinement 2"; dir = 2},/obj/structure/cryofeed{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/tiled/white,/area/security/security_cell_hallway)
+"azY" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/corner/red/full{dir = 8},/turf/simulated/floor/tiled,/area/security/security_cell_hallway)
"azZ" = (/obj/item/weapon/stool,/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/machinery/camera/network/security{c_tag = "SEC - Riot Control"; dir = 4},/turf/simulated/floor,/area/security/riot_control)
"aAa" = (/obj/machinery/atmospherics/valve,/turf/simulated/floor,/area/security/riot_control)
"aAb" = (/turf/simulated/floor,/area/security/riot_control)
"aAc" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/turf/simulated/floor,/area/security/riot_control)
-"aAd" = (/obj/machinery/door/airlock/atmos{name = "Riot Control Maintenance"; req_access = list(2,12,24)},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor,/area/security/riot_control)
+"aAd" = (/obj/machinery/newscaster{pixel_x = 0; pixel_y = 32},/obj/structure/bed/double/padded,/obj/item/weapon/bedsheet/doublebrown,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_11)
"aAe" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "security_lockdown"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor,/area/maintenance/security_starboard)
"aAf" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor,/area/maintenance/security_starboard)
"aAg" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor,/area/maintenance/security_starboard)
@@ -1379,14 +1379,14 @@
"aAA" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/chapel_hallway)
"aAB" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light,/turf/simulated/floor/tiled,/area/hallway/secondary/chapel_hallway)
"aAC" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor/tiled,/area/hallway/secondary/chapel_hallway)
-"aAD" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/green,/turf/simulated/floor/tiled,/area/hallway/secondary/chapel_hallway)
-"aAE" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/tiled,/area/hallway/secondary/chapel_hallway)
-"aAF" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/turf/simulated/floor/tiled,/area/hallway/secondary/chapel_hallway)
-"aAG" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/camera/network/northern_star{c_tag = "Hall - Chapel Access Starboard"; dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/chapel_hallway)
-"aAH" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/chapel_hallway)
-"aAI" = (/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = -32},/turf/simulated/floor/tiled,/area/hallway/secondary/chapel_hallway)
+"aAD" = (/obj/machinery/newscaster{pixel_x = 0; pixel_y = 32},/obj/structure/bed/double/padded,/obj/item/weapon/bedsheet/doublebrown,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_12)
+"aAE" = (/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_5)
+"aAF" = (/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_6)
+"aAG" = (/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_11)
+"aAH" = (/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_12)
+"aAI" = (/obj/machinery/camera/network/civilian{c_tag = "CIV - Visitor Room 5"; dir = 1},/obj/structure/bed/chair/comfy/beige{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_5)
"aAJ" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/maintenance/chapel)
-"aAK" = (/obj/item/weapon/stool/padded,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/maintenance/chapel)
+"aAK" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 0; pixel_y = -32},/obj/structure/table/standard,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_5)
"aAL" = (/turf/simulated/wall/r_wall,/area/security/armoury)
"aAM" = (/obj/structure/closet/bombclosetsecurity,/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/window/reinforced,/turf/simulated/floor/tiled,/area/security/security_equiptment_storage)
"aAN" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/security/security_equiptment_storage)
@@ -1410,7 +1410,7 @@
"aBf" = (/obj/machinery/vending/cigarette,/obj/effect/floor_decal/corner/red/full,/turf/simulated/floor/tiled,/area/security/main)
"aBg" = (/obj/machinery/vending/cola,/obj/effect/floor_decal/corner/red{dir = 10},/turf/simulated/floor/tiled,/area/security/main)
"aBh" = (/obj/machinery/vending/snack,/obj/effect/floor_decal/corner/red/full{dir = 4},/turf/simulated/floor/tiled,/area/security/main)
-"aBi" = (/obj/structure/bed/padded,/turf/simulated/floor,/area/security/security_cell_hallway)
+"aBi" = (/obj/machinery/light/small{dir = 4; pixel_y = 0},/obj/structure/table/standard,/obj/item/weapon/paper,/obj/item/weapon/pen,/obj/effect/floor_decal/corner/red/full{dir = 1},/turf/simulated/floor/tiled,/area/security/security_cell_hallway)
"aBj" = (/obj/machinery/computer/area_atmos/area,/turf/simulated/floor,/area/security/riot_control)
"aBk" = (/obj/machinery/atmospherics/binary/pump,/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor,/area/security/riot_control)
"aBl" = (/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/machinery/portable_atmospherics/powered/scrubber,/obj/item/weapon/wrench,/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor,/area/security/riot_control)
@@ -1456,8 +1456,8 @@
"aBZ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/security/main)
"aCa" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/security/main)
"aCb" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/security/main)
-"aCc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor,/area/security/security_cell_hallway)
-"aCd" = (/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor,/area/security/security_cell_hallway)
+"aCc" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/corner/red/full{dir = 1},/turf/simulated/floor/tiled,/area/security/security_cell_hallway)
+"aCd" = (/obj/machinery/light/small{dir = 8},/obj/structure/table/standard,/obj/item/weapon/paper,/obj/item/weapon/pen,/obj/effect/floor_decal/corner/red/full{dir = 8},/turf/simulated/floor/tiled,/area/security/security_cell_hallway)
"aCe" = (/obj/machinery/door/airlock/security{name = "Riot Control"; req_access = list(2)},/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/security/riot_control)
"aCf" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/structure/plushie/beepsky,/obj/machinery/light/small{dir = 1},/turf/simulated/floor,/area/maintenance/security_starboard)
"aCg" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/glass{name = "Civilian Hallway Access"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_aft)
@@ -1509,10 +1509,10 @@
"aDa" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/red{dir = 1},/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/tiled,/area/security/security_cell_hallway)
"aDb" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/effect/floor_decal/corner/red{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/tiled,/area/security/security_cell_hallway)
"aDc" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/red{dir = 5},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/security/security_cell_hallway)
-"aDd" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/red{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/item/device/radio/intercom{broadcasting = 0; dir = 1; frequency = 1475; icon_state = "intercom"; listening = 1; name = "Station Intercom (Security)"; pixel_x = 0; pixel_y = 21},/turf/simulated/floor/tiled,/area/security/security_cell_hallway)
-"aDe" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/security/security_cell_hallway)
+"aDd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/effect/floor_decal/corner/red{dir = 1},/turf/simulated/floor/tiled,/area/security/security_cell_hallway)
+"aDe" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/bed/chair{dir = 1},/obj/effect/floor_decal/corner/red{dir = 6},/turf/simulated/floor/tiled,/area/security/security_cell_hallway)
"aDf" = (/obj/effect/floor_decal/corner/red{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor/tiled,/area/security/security_cell_hallway)
-"aDg" = (/obj/effect/floor_decal/corner/red{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled,/area/security/security_cell_hallway)
+"aDg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/effect/floor_decal/corner/red{dir = 4},/turf/simulated/floor/tiled,/area/security/security_cell_hallway)
"aDh" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9; icon_state = "intact"; tag = "icon-intact-f (NORTHWEST)"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/security/security_cell_hallway)
"aDi" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/window/westright{name = "Security Delivery"; req_access = list(1)},/obj/structure/window/reinforced,/turf/simulated/floor/tiled,/area/security/security_cell_hallway)
"aDj" = (/obj/structure/plasticflaps{opacity = 1},/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; dir = 1; freq = 1400; location = "Security"},/obj/machinery/door/firedoor/border_only,/obj/effect/floor_decal/industrial/loading{tag = "icon-loadingarea (WEST)"; icon_state = "loadingarea"; dir = 8},/turf/simulated/floor/plating,/area/security/security_cell_hallway)
@@ -1584,13 +1584,16 @@
"aEx" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor,/area/maintenance/pool)
"aEy" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/blue{dir = 1},/obj/effect/floor_decal/corner/white{dir = 4},/obj/machinery/camera/network/civilian{c_tag = "CIV - Visitor's Dinning"; dir = 2},/obj/item/weapon/storage/laundry_basket,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_laundry)
"aEz" = (/obj/structure/closet/secure_closet/warden,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/dark,/area/security/warden)
+"aEA" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/table/steel,/obj/item/device/communicator,/obj/item/device/communicator,/obj/item/device/communicator,/obj/item/device/communicator,/obj/item/device/radio/headset,/obj/item/device/radio/headset,/obj/item/device/radio/headset,/obj/item/device/radio/headset,/turf/simulated/floor/tiled,/area/security/prison)
"aEB" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/tiled/dark,/area/security/armoury)
"aEC" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/security/security_equiptment_storage)
"aED" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/security_equiptment_storage)
"aEE" = (/obj/machinery/door/airlock/security{name = "Equipment Storage"; req_access = list(2)},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/tiled,/area/security/security_equiptment_storage)
"aEF" = (/turf/simulated/wall,/area/security/security_equiptment_storage)
+"aEG" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/medical_escape_pod_hallway)
"aEH" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/table/rack,/obj/machinery/door/window/brigdoor/northleft{name = "Weapons locker"; req_access = list(2)},/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/gun/projectile/colt/detective,/obj/item/weapon/gun/projectile/colt/detective,/obj/item/weapon/gun/projectile/colt/detective,/obj/item/weapon/gun/projectile/colt/detective,/turf/simulated/floor/tiled,/area/security/security_equiptment_storage)
"aEI" = (/obj/machinery/disposal,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/structure/disposalpipe/trunk,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/dark,/area/security/warden)
+"aEJ" = (/obj/structure/table/standard,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_3)
"aEK" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/security/security_equiptment_storage)
"aEL" = (/obj/machinery/computer/security{pixel_y = 0},/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/dark,/area/security/warden)
"aEM" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/cable/green,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/security/warden)
@@ -1630,9 +1633,9 @@
"aFu" = (/obj/structure/flora/pottedplant{icon_state = "plant-22"},/turf/simulated/floor/carpet,/area/crew_quarters/recreation_area)
"aFv" = (/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/carpet,/area/crew_quarters/recreation_area)
"aFw" = (/obj/machinery/computer/arcade,/turf/simulated/floor/carpet,/area/crew_quarters/recreation_area)
-"aFx" = (/obj/structure/table/woodentable,/obj/item/clothing/glasses/threedglasses,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/carpet,/area/crew_quarters/recreation_area)
+"aFx" = (/obj/structure/table/standard,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_4)
"aFy" = (/obj/structure/table/woodentable,/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/item/device/paicard,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/carpet,/area/crew_quarters/recreation_area)
-"aFz" = (/obj/structure/table/woodentable,/obj/item/weapon/coin/silver,/obj/machinery/ai_status_display{pixel_y = 32},/obj/machinery/camera/network/civilian{c_tag = "CIV - Recreation Area Fore"; dir = 2},/turf/simulated/floor/carpet,/area/crew_quarters/recreation_area)
+"aFz" = (/obj/structure/table/standard,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_9)
"aFA" = (/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/carpet,/area/crew_quarters/recreation_area)
"aFB" = (/obj/structure/closet/athletic_mixed,/turf/simulated/floor/tiled/freezer,/area/crew_quarters/pool)
"aFC" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled/freezer,/area/crew_quarters/pool)
@@ -1643,14 +1646,17 @@
"aFH" = (/obj/item/weapon/stool/padded,/obj/machinery/ai_status_display{pixel_y = 32},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/pool)
"aFI" = (/obj/structure/table/glass,/obj/item/inflatable{pixel_x = 6; pixel_y = 6},/obj/item/inflatable{pixel_x = 2; pixel_y = 2},/obj/item/inflatable{pixel_x = -2; pixel_y = -3},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/pool)
"aFJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/maintenance/pool)
+"aFK" = (/obj/structure/reagent_dispensers/water_cooler{bottle = 1},/turf/simulated/floor/carpet,/area/crew_quarters/recreation_area)
+"aFL" = (/obj/structure/reagent_dispensers/water_cooler{bottle = 1},/obj/effect/floor_decal/corner/paleblue{dir = 2},/turf/simulated/floor/tiled,/area/medical/surgeryobs)
+"aFM" = (/obj/structure/reagent_dispensers/water_cooler{bottle = 1},/obj/effect/floor_decal/corner/lime/full{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/virology)
"aFN" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/security/armoury)
"aFO" = (/obj/machinery/door/blast/regular{id = "Armoury"; name = "Emergency Access"},/turf/simulated/floor/tiled,/area/security/armoury)
"aFP" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor/tiled,/area/security/brig)
"aFQ" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/security/brig)
-"aFR" = (/obj/structure/mopbucket,/obj/item/weapon/mop,/obj/item/weapon/reagent_containers/glass/bucket,/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/machinery/light{dir = 1},/obj/item/weapon/mop,/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor/tiled,/area/janitor)
+"aFR" = (/obj/structure/table/standard,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_10)
"aFS" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/door/firedoor/border_only,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/security/warden)
"aFT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/security/warden)
-"aFU" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass_security{name = "Warden's Office"; req_access = list(3)},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/security/warden)
+"aFU" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass_security{name = "Warden's Office"; req_access = list(3)},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/security/warden)
"aFV" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/security/warden)
"aFW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/security/warden)
"aFX" = (/turf/simulated/wall,/area/security/warden)
@@ -1677,9 +1683,9 @@
"aGs" = (/obj/machinery/portable_atmospherics/powered/pump/filled,/turf/simulated/floor,/area/maintenance/security_starboard)
"aGt" = (/obj/machinery/atmospherics/valve,/turf/simulated/floor,/area/maintenance/security_starboard)
"aGu" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor,/area/maintenance/security_starboard)
-"aGv" = (/obj/structure/reagent_dispensers/watertank,/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/tiled,/area/janitor)
+"aGv" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/closet/l3closet/janitor,/turf/simulated/floor/tiled,/area/janitor)
"aGw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/security/brig)
-"aGx" = (/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled,/area/janitor)
+"aGx" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/brown,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_3)
"aGy" = (/obj/structure/disposalpipe/segment,/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway)
"aGz" = (/obj/structure/disposalpipe/segment,/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_aft)
"aGA" = (/obj/structure/table/reinforced,/obj/item/weapon/clipboard,/obj/item/weapon/clipboard,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/dark,/area/lawoffice)
@@ -1694,7 +1700,7 @@
"aGJ" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway)
"aGK" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway)
"aGL" = (/obj/machinery/door/firedoor/glass,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway)
-"aGM" = (/obj/structure/reagent_dispensers/water_cooler,/turf/simulated/floor/carpet,/area/crew_quarters/recreation_area)
+"aGM" = (/obj/structure/reagent_dispensers/water_cooler{bottle = 1},/obj/effect/floor_decal/corner/paleblue{dir = 10},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/turf/simulated/floor/tiled/white,/area/medical/reception)
"aGN" = (/turf/simulated/floor/carpet,/area/crew_quarters/recreation_area)
"aGO" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/carpet,/area/crew_quarters/recreation_area)
"aGP" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet,/area/crew_quarters/recreation_area)
@@ -1702,7 +1708,11 @@
"aGR" = (/turf/simulated/floor/tiled/freezer,/area/crew_quarters/pool)
"aGS" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled/freezer,/area/crew_quarters/pool)
"aGT" = (/obj/structure/extinguisher_cabinet{pixel_x = 25; pixel_y = 0},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/pool)
+"aGU" = (/obj/effect/floor_decal/corner/blue,/obj/structure/reagent_dispensers/water_cooler{bottle = 1},/turf/simulated/floor/tiled,/area/bridge_hallway)
"aGV" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"aGW" = (/obj/machinery/door/airlock/atmos{name = "Riot Control Maintenance"; req_access = newlist(); req_one_access = list(2,12,24)},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor,/area/security/riot_control)
+"aGX" = (/obj/structure/table/standard,/obj/item/weapon/clipboard,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/item/weapon/stamp/qm,/turf/simulated/floor/tiled,/area/quartermaster/qm)
+"aGY" = (/obj/structure/reagent_dispensers/water_cooler{bottle = 1},/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_dinning)
"aGZ" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/security/armoury)
"aHa" = (/obj/machinery/door/blast/regular{id = "Armoury"; name = "Emergency Access"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/security/armoury)
"aHb" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/security/brig)
@@ -1742,10 +1752,10 @@
"aHJ" = (/obj/machinery/flasher{id = "Cell 3"; pixel_x = -28; pixel_y = 0},/obj/structure/bed/padded,/turf/simulated/floor/tiled,/area/security/prison)
"aHK" = (/obj/structure/closet/secure_closet/brig{id = "Cell 3"; name = "Cell 3 Locker"},/obj/machinery/camera/network/prison{c_tag = "SEC - Brig Cell 3"; dir = 8},/obj/effect/floor_decal/corner/red{dir = 10},/turf/simulated/floor/tiled,/area/security/prison)
"aHL" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor,/area/maintenance/security_starboard)
-"aHM" = (/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor,/area/maintenance/security_starboard)
+"aHM" = (/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_3)
"aHN" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/maintenance/security_starboard)
-"aHO" = (/obj/structure/closet/l3closet/janitor,/obj/machinery/status_display{pixel_x = 0; pixel_y = 32},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/tiled,/area/janitor)
-"aHP" = (/obj/item/weapon/storage/box/lights/mixed,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/janitor)
+"aHO" = (/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_4)
+"aHP" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/janitor)
"aHQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/janitor)
"aHR" = (/obj/machinery/light_switch{pixel_x = 34; pixel_y = 1},/obj/machinery/button/remote/blast_door{id = "janitor_blast"; name = "Privacy Shutters"; pixel_x = 26; pixel_y = 0},/obj/machinery/camera/network/civilian{c_tag = "CIV - Custodial Closet"; dir = 9},/turf/simulated/floor/tiled,/area/janitor)
"aHS" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/camera/network/northern_star{c_tag = "Hall - Civilian Primary Aft 2"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_aft)
@@ -1768,6 +1778,11 @@
"aIj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/freezer,/area/crew_quarters/pool)
"aIk" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/pool)
"aIl" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/pool)
+"aIm" = (/obj/structure/frame,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos)
+"aIn" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/frame,/turf/simulated/floor/tiled,/area/engineering/workshop)
+"aIo" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/structure/bed/chair{dir = 1},/obj/effect/floor_decal/corner/red{dir = 9},/turf/simulated/floor/tiled,/area/security/security_cell_hallway)
+"aIp" = (/obj/machinery/door/airlock/glass_security{name = "Solitary Confinement 1"; req_access = list(2)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/security/security_cell_hallway)
+"aIq" = (/obj/machinery/door/airlock/glass_security{name = "Solitary Confinement 2"; req_access = list(2)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/security/security_cell_hallway)
"aIr" = (/obj/machinery/door/blast/regular{id = "Armoury"; name = "Emergency Access"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/security/armoury)
"aIs" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/button/remote/blast_door{id = "Armoury"; name = "Emergency Access"; pixel_x = 0; pixel_y = -28; req_access = list(3)},/turf/simulated/floor/tiled,/area/security/brig)
"aIt" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = -32},/turf/simulated/floor/tiled,/area/security/brig)
@@ -1803,7 +1818,7 @@
"aIX" = (/obj/machinery/door/blast/regular{dir = 1; id = "Cell 3"; name = "Cell Door"},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/prison)
"aIY" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 4},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor,/area/maintenance/security_starboard)
"aIZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 9; icon_state = "intact"; tag = "icon-intact-f (NORTHWEST)"},/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor,/area/maintenance/security_starboard)
-"aJa" = (/obj/structure/closet/jcloset,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/tiled,/area/janitor)
+"aJa" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/brown,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_4)
"aJb" = (/turf/simulated/floor/tiled,/area/janitor)
"aJc" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled,/area/janitor)
"aJd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/janitor)
@@ -1834,7 +1849,10 @@
"aJC" = (/obj/effect/floor_decal/spline/plain{dir = 1},/turf/simulated/floor/beach/water{icon_state = "seadeep"},/area/crew_quarters/pool)
"aJD" = (/obj/effect/floor_decal/spline/plain{dir = 5},/turf/simulated/floor/beach/water{icon_state = "seadeep"},/area/crew_quarters/pool)
"aJE" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/pool)
+"aJF" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/red{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/computer/cryopod{density = 0; layer = 3.3; pixel_y = 32},/turf/simulated/floor/tiled,/area/security/security_cell_hallway)
"aJG" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"aJH" = (/obj/effect/floor_decal/corner/red{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/item/device/radio/intercom{broadcasting = 0; dir = 1; frequency = 1475; icon_state = "intercom"; listening = 1; name = "Station Intercom (Security)"; pixel_x = 0; pixel_y = 21},/turf/simulated/floor/tiled,/area/security/security_cell_hallway)
+"aJI" = (/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_9)
"aJJ" = (/turf/simulated/wall/r_wall,/area/security/range)
"aJK" = (/turf/simulated/wall,/area/security/range)
"aJL" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/security/range)
@@ -1853,7 +1871,7 @@
"aJY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock{id_tag = "visitdoor"; name = "Visitation Area"; req_access = list(63)},/turf/simulated/floor/tiled,/area/security/prison)
"aJZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass_security{id_tag = "prisonexit"; name = "Brig Exit"; req_access = list(2)},/turf/simulated/floor/tiled,/area/security/prison)
"aKa" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass_security{id_tag = "prisonexit"; name = "Brig Exit"; req_access = list(2)},/turf/simulated/floor/tiled,/area/security/prison)
-"aKb" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock/glass_security{name = "Brig Control"; req_access = list(2)},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/security/prison)
+"aKb" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/brown,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_9)
"aKc" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/computer/arcade,/turf/simulated/floor/tiled,/area/security/prison)
"aKd" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/security/prison)
"aKe" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/security/prison)
@@ -1865,10 +1883,10 @@
"aKk" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled,/area/security/prison)
"aKl" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/maintenance/security_starboard)
"aKm" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "Janitor"},/obj/structure/plasticflaps{opacity = 1},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/janitor)
-"aKn" = (/obj/structure/window/reinforced,/obj/machinery/door/window/eastleft{name = "Janitorial Delivery"; req_access = list(26)},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/janitor)
-"aKo" = (/obj/item/weapon/stool,/obj/effect/landmark/start{name = "Janitor"},/turf/simulated/floor/tiled,/area/janitor)
-"aKp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/janitor)
-"aKq" = (/obj/structure/extinguisher_cabinet{pixel_x = 25; pixel_y = 0},/turf/simulated/floor/tiled,/area/janitor)
+"aKn" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/brown,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_10)
+"aKo" = (/obj/structure/janitorialcart,/turf/simulated/floor/tiled,/area/janitor)
+"aKp" = (/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_10)
+"aKq" = (/obj/machinery/newscaster{pixel_x = -32; pixel_y = 0},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_3)
"aKr" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "lawyer_blast"; name = "Privacy Shutters"; opacity = 0},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/lawoffice)
"aKs" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/dark,/area/lawoffice)
"aKt" = (/obj/structure/table/reinforced,/obj/item/weapon/pen/blue{pixel_x = -5; pixel_y = -1},/obj/item/weapon/pen/red{pixel_x = -1; pixel_y = 3},/obj/item/weapon/material/ashtray/plastic{pixel_x = 4; pixel_y = 6},/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/turf/simulated/floor/tiled/dark,/area/lawoffice)
@@ -1883,6 +1901,9 @@
"aKC" = (/turf/simulated/floor/beach/water{icon_state = "seadeep"},/area/crew_quarters/pool)
"aKD" = (/obj/effect/floor_decal/spline/plain{dir = 4},/turf/simulated/floor/beach/water{icon_state = "seadeep"},/area/crew_quarters/pool)
"aKE" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/pool)
+"aKF" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_3)
+"aKG" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_4)
+"aKH" = (/obj/machinery/newscaster{pixel_x = 32; pixel_y = 0},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_4)
"aKI" = (/turf/simulated/floor/tiled,/area/security/range)
"aKJ" = (/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/tiled,/area/security/range)
"aKK" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/security/range)
@@ -1920,11 +1941,11 @@
"aLq" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/maintenance/security_starboard)
"aLr" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/maintenance{name = "Custodial Maintenance"; req_access = list(26)},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/janitor)
"aLs" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/janitor)
-"aLt" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -26},/turf/simulated/floor/tiled,/area/janitor)
-"aLu" = (/obj/structure/janitorialcart,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/janitor)
-"aLv" = (/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/structure/table/steel,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/newscaster{pixel_x = 0; pixel_y = -28},/turf/simulated/floor/tiled,/area/janitor)
-"aLw" = (/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/machinery/requests_console{department = "Janitorial"; departmentType = 1; pixel_y = -32},/obj/item/weapon/reagent_containers/spray/cleaner,/obj/structure/table/steel,/obj/item/weapon/storage/box/mousetraps,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/janitor)
-"aLx" = (/obj/machinery/disposal,/obj/machinery/light,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/tiled,/area/janitor)
+"aLt" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_9)
+"aLu" = (/obj/machinery/newscaster{pixel_x = -32; pixel_y = 0},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_9)
+"aLv" = (/obj/machinery/newscaster{pixel_x = 32; pixel_y = 0},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_10)
+"aLw" = (/obj/item/weapon/stool/padded,/obj/effect/landmark/start{name = "Janitor"},/turf/simulated/floor/tiled,/area/janitor)
+"aLx" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_10)
"aLy" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_aft)
"aLz" = (/obj/machinery/button/remote/blast_door{id = "lawyer_blast"; name = "Privacy Shutters"; pixel_x = -26; pixel_y = 0},/obj/machinery/light_switch{pixel_x = -34; pixel_y = 0},/obj/machinery/camera/network/civilian{c_tag = "CIV - Internal Affairs"; dir = 5},/turf/simulated/floor/tiled/dark,/area/lawoffice)
"aLA" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/dark,/area/lawoffice)
@@ -1964,7 +1985,6 @@
"aMk" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/flasher{id = "permentryflash"; name = "Floor mounted flash"; pixel_x = 0},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/tiled,/area/security/prison)
"aMl" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/camera/network/prison{c_tag = "SEC - Common Brig Enterance"; dir = 8},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled,/area/security/prison)
"aMm" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/cable/green,/obj/machinery/door/firedoor/border_only,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Prison Gate"; name = "Communal Brig Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/prison)
-"aMn" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/table/steel,/obj/item/device/radio/headset,/obj/item/device/radio/headset,/obj/item/device/radio/headset,/obj/item/device/radio/headset,/turf/simulated/floor/tiled,/area/security/prison)
"aMo" = (/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/table/steel,/obj/machinery/camera/network/prison{c_tag = "SEC - Brig Observation"; dir = 1},/turf/simulated/floor/tiled,/area/security/prison)
"aMp" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/cable/green,/obj/machinery/door/firedoor/border_only,/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Prison Gate"; name = "Communal Brig Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/prison)
"aMq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/security/prison)
@@ -2064,6 +2084,7 @@
"aOm" = (/obj/effect/floor_decal/spline/plain{dir = 6},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/pool)
"aOn" = (/obj/structure/table/glass,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/pool)
"aOo" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/maintenance/pool)
+"aOq" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard)
"aOv" = (/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/security/range)
"aOw" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/security/range)
"aOx" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/range)
@@ -2099,7 +2120,6 @@
"aPb" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled/dark,/area/lawoffice)
"aPc" = (/obj/structure/table/reinforced,/obj/item/weapon/pen/blue,/obj/item/weapon/pen/red{pixel_x = -5; pixel_y = -1},/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/turf/simulated/floor/tiled/dark,/area/lawoffice)
"aPd" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/maintenance/holodeck)
-"aPe" = (/obj/machinery/alarm{dir = 8; pixel_x = 25; pixel_y = 0},/turf/simulated/floor,/area/maintenance/holodeck)
"aPf" = (/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/tiled,/area/holodeck_control)
"aPg" = (/obj/machinery/light/small,/turf/simulated/floor/tiled,/area/holodeck_control)
"aPh" = (/obj/machinery/camera/network/northern_star{c_tag = "Hall - Recreation Mid"; dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway)
@@ -2115,6 +2135,8 @@
"aPr" = (/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,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/crew_quarters/pool)
"aPs" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/pool)
"aPt" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/maintenance/pool)
+"aPu" = (/obj/structure/closet/secure_closet/paramedic,/obj/item/clothing/accessory/storage/black_vest,/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay)
+"aPw" = (/obj/structure/table/rack,/obj/effect/floor_decal/corner/blue{dir = 10},/obj/structure/window/reinforced,/obj/random/energy,/obj/random/energy,/obj/machinery/door/window/brigdoor/northleft{name = "Energy"; req_access = list(1)},/turf/simulated/floor/tiled/dark,/area/security/armoury)
"aPx" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/security/range)
"aPy" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/security/range)
"aPz" = (/obj/effect/floor_decal/industrial/warning/corner,/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/turf/simulated/floor/tiled,/area/security/range)
@@ -2143,7 +2165,7 @@
"aPW" = (/obj/structure/closet{name = "Prisoner's Locker"},/obj/random/tech_supply,/obj/item/clothing/head/flatcap,/turf/simulated/floor/tiled,/area/security/prison)
"aPX" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/shower{dir = 4; icon_state = "shower"; pixel_x = 5; pixel_y = 0},/obj/structure/curtain/open/shower/security,/turf/simulated/floor/tiled/freezer,/area/security/prison)
"aPY" = (/turf/simulated/floor/tiled/freezer,/area/security/prison)
-"aPZ" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/structure/mirror{pixel_x = 30},/obj/item/weapon/soap/nanotrasen,/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/tiled/freezer,/area/security/prison)
+"aPZ" = (/obj/item/weapon/caution/cone,/turf/simulated/floor,/area/maintenance/locker)
"aQa" = (/obj/structure/table/standard,/obj/item/device/camera,/obj/item/device/camera{pixel_x = 3; pixel_y = -4},/turf/simulated/floor/tiled,/area/storage/art)
"aQb" = (/obj/machinery/hologram/holopad,/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled,/area/storage/art)
"aQc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/storage/art)
@@ -2189,13 +2211,9 @@
"aQQ" = (/obj/machinery/camera/network/civilian{c_tag = "CIV - Art Storage"; dir = 8},/turf/simulated/floor/tiled,/area/storage/art)
"aQR" = (/obj/machinery/firealarm{dir = 4; pixel_x = 26},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_aft)
"aQS" = (/obj/machinery/newscaster{pixel_x = 0; pixel_y = -30},/turf/simulated/floor/tiled/dark,/area/lawoffice)
-"aQT" = (/obj/structure/table/standard,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/tiled,/area/holodeck_control)
"aQU" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/light{dir = 8},/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway)
"aQV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway)
"aQW" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway)
-"aQX" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/recreation_area_restroom)
-"aQY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/recreation_area_restroom)
-"aQZ" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/structure/mirror{pixel_x = 28},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/recreation_area_restroom)
"aRa" = (/obj/machinery/door/airlock{name = "Unisex Showers"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/tiled/freezer,/area/crew_quarters/recreation_area_restroom)
"aRb" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/freezer,/area/crew_quarters/pool)
"aRc" = (/obj/effect/floor_decal/spline/plain{dir = 10},/turf/simulated/floor/beach/water{icon_state = "seadeep"},/area/crew_quarters/pool)
@@ -2223,7 +2241,7 @@
"aRy" = (/obj/structure/table/standard,/obj/machinery/recharger,/obj/machinery/newscaster{pixel_x = 0; pixel_y = -28},/turf/simulated/floor/tiled,/area/storage/art)
"aRz" = (/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_aft)
"aRA" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/storage/briefcase{pixel_x = -2; pixel_y = -5},/obj/item/weapon/storage/briefcase{pixel_x = 3; pixel_y = 0},/obj/machinery/light,/turf/simulated/floor/tiled/dark,/area/lawoffice)
-"aRB" = (/obj/structure/closet/lawcloset,/obj/item/clothing/glasses/sunglasses/big,/obj/item/clothing/under/lawyer/black,/obj/item/clothing/under/lawyer/blue,/obj/item/clothing/under/lawyer/bluesuit,/obj/item/clothing/under/lawyer/female,/obj/item/clothing/under/lawyer/red,/turf/simulated/floor/tiled/dark,/area/lawoffice)
+"aRB" = (/obj/structure/closet/lawcloset,/turf/simulated/floor/tiled/dark,/area/lawoffice)
"aRC" = (/obj/structure/disposalpipe/segment,/obj/structure/extinguisher_cabinet{pixel_x = 25; pixel_y = 0},/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway)
"aRD" = (/obj/machinery/light/small{dir = 8},/obj/structure/toilet{dir = 4},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/recreation_area_restroom)
"aRE" = (/obj/machinery/door/airlock{name = "Unit 1"},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/recreation_area_restroom)
@@ -2235,7 +2253,6 @@
"aRK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/pool)
"aRL" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/pool)
"aRM" = (/obj/machinery/door/airlock/maintenance{req_access = list(12)},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor,/area/maintenance/pool)
-"aRN" = (/obj/machinery/light/small{dir = 4; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/maintenance/pool)
"aRO" = (/turf/simulated/shuttle/wall{icon_state = "swall_s"; dir = 4},/area/shuttle/large_escape_pod2/station)
"aRP" = (/turf/simulated/shuttle/wall,/area/shuttle/large_escape_pod2/station)
"aRQ" = (/obj/structure/shuttle/engine/propulsion{dir = 4; icon_state = "propulsion_r"},/turf/space,/area/shuttle/large_escape_pod2/station)
@@ -2484,13 +2501,10 @@
"aWz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway)
"aWA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway)
"aWB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway)
-"aWC" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway)
-"aWD" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway)
-"aWE" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/tiled/dark,/area/crew_quarters/recreation_area_hallway)
-"aWF" = (/obj/machinery/door/airlock/maintenance{req_access = list(12)},/obj/machinery/door/firedoor/border_only,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/maintenance/pool)
+"aWC" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway)
+"aWD" = (/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{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway)
+"aWF" = (/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{dir = 4},/turf/simulated/floor/tiled/dark,/area/crew_quarters/recreation_area_hallway)
"aWG" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/maintenance/pool)
-"aWH" = (/obj/machinery/light/small{dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/maintenance/pool)
-"aWI" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/maintenance/pool)
"aWJ" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor,/area/maintenance/pool)
"aWK" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_port_escape_pod_hallway)
"aWL" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_port_escape_pod_hallway)
@@ -2604,7 +2618,7 @@
"aYP" = (/turf/simulated/wall,/area/gateway)
"aYQ" = (/obj/structure/extinguisher_cabinet{pixel_x = -27},/turf/simulated/floor/tiled/dark,/area/gateway)
"aYR" = (/turf/simulated/floor/tiled/dark,/area/gateway)
-"aYS" = (/obj/structure/closet/emcloset,/obj/item/weapon/crowbar,/turf/simulated/floor/tiled/dark,/area/gateway)
+"aYS" = (/obj/structure/mirror{pixel_x = 28},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/recreation_area_restroom)
"aYT" = (/obj/machinery/door/firedoor/glass,/obj/structure/disposalpipe/segment,/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
"aYU" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
"aYV" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass{name = "Central Access"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
@@ -2640,10 +2654,10 @@
"aZz" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/primary/central_four)
"aZA" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/primary/central_four)
"aZB" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/primary/central_four)
-"aZC" = (/turf/simulated/wall/r_wall,/area/turret_protected/ai_server_room)
-"aZD" = (/turf/simulated/wall/r_wall,/area/turret_protected/ai_upload_foyer)
-"aZE" = (/obj/machinery/door/airlock/highsecurity{name = "AI Upload Access"; req_access = list(16)},/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
-"aZF" = (/turf/simulated/wall/r_wall,/area/turret_protected/ai_cyborg_station)
+"aZC" = (/turf/simulated/wall/r_wall,/area/ai_server_room)
+"aZD" = (/turf/simulated/wall/r_wall,/area/ai_upload_foyer)
+"aZE" = (/obj/machinery/door/airlock/highsecurity{name = "AI Upload Access"; req_access = list(16)},/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/ai_upload_foyer)
+"aZF" = (/turf/simulated/wall/r_wall,/area/ai_cyborg_station)
"aZG" = (/turf/simulated/floor,/area/maintenance/central)
"aZH" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/maintenance/central)
"aZI" = (/turf/simulated/wall,/area/hydroponics/garden)
@@ -2677,15 +2691,15 @@
"bak" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled,/area/hallway/primary/central_four)
"bal" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/primary/central_four)
"bam" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/primary/central_four)
-"ban" = (/obj/machinery/message_server,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_server_room)
-"bao" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_server_room)
-"bap" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/cyan{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_server_room)
-"baq" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/machinery/camera/network/command{c_tag = "AI - Upload Foyer"; dir = 2},/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
-"bar" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
-"bas" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/structure/sign/kiddieplaque{pixel_y = 32},/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
-"bat" = (/obj/structure/bed/chair/office/light{dir = 4},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable/cyan{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_cyborg_station)
-"bau" = (/obj/structure/table/standard,/obj/item/weapon/phone,/obj/machinery/light{dir = 1},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_cyborg_station)
-"bav" = (/obj/machinery/computer/aifixer,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_cyborg_station)
+"ban" = (/obj/machinery/message_server,/turf/simulated/floor/bluegrid,/area/ai_server_room)
+"bao" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/bluegrid,/area/ai_server_room)
+"bap" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/cyan{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/tiled/dark,/area/ai_server_room)
+"baq" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/machinery/camera/network/command{c_tag = "AI - Upload Foyer"; dir = 2},/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/turf/simulated/floor/tiled/dark,/area/ai_upload_foyer)
+"bar" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/dark,/area/ai_upload_foyer)
+"bas" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/structure/sign/kiddieplaque{pixel_y = 32},/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/turf/simulated/floor/tiled/dark,/area/ai_upload_foyer)
+"bat" = (/obj/structure/bed/chair/office/light{dir = 4},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable/cyan{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/tiled/dark,/area/ai_cyborg_station)
+"bau" = (/obj/structure/table/standard,/obj/item/weapon/phone,/obj/machinery/light{dir = 1},/turf/simulated/floor/bluegrid,/area/ai_cyborg_station)
+"bav" = (/obj/machinery/computer/aifixer,/turf/simulated/floor/bluegrid,/area/ai_cyborg_station)
"baw" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 2},/obj/structure/flora/ausbushes/sparsegrass,/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/grass,/area/hydroponics/garden)
"bax" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light/small{dir = 4},/turf/simulated/floor,/area/maintenance/central)
"bay" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hydroponics/garden)
@@ -2693,7 +2707,7 @@
"baA" = (/obj/structure/extinguisher_cabinet{pixel_x = 25},/obj/machinery/atm{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/tiled/dark,/area/hallway/primary/central_two)
"baB" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/structure/flora/pottedplant,/obj/effect/floor_decal/corner/brown/full{dir = 8},/turf/simulated/floor/tiled/white,/area/crew_quarters/coffee_shop)
"baC" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 6},/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/glass/bucket,/obj/machinery/light{dir = 1},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/grass,/area/hydroponics/garden)
-"baD" = (/obj/structure/sink/kitchen{pixel_y = 28},/turf/simulated/floor/tiled,/area/hydroponics/garden)
+"baD" = (/obj/structure/table/rack,/obj/effect/floor_decal/corner/blue/full,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/gun/energy/ionrifle,/obj/item/weapon/gun/energy/ionrifle{pixel_x = -2; pixel_y = -2},/obj/machinery/door/window/brigdoor/northleft{name = "Energy"; req_access = list(1)},/turf/simulated/floor/tiled/dark,/area/security/armoury)
"baE" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/hydroponics/garden)
"baF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hydroponics/garden)
"baG" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hydroponics/garden)
@@ -2722,7 +2736,6 @@
"bbd" = (/turf/space,/area/skipjack_station/northwest_solars)
"bbe" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/structure/closet/firecloset,/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/obj/machinery/camera/network/research{c_tag = "SCI - Research Auxiliary Access"; dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/research_foyer_auxiliary)
"bbf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/rnd/research_foyer_auxiliary)
-"bbg" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/turf/simulated/floor/tiled/white,/area/rnd/research_foyer_auxiliary)
"bbh" = (/obj/structure/window/reinforced,/obj/machinery/newscaster{pixel_x = -31; pixel_y = 0},/obj/machinery/camera/network/civilian{c_tag = "CIV - Gateway"; dir = 4},/turf/simulated/floor/tiled/dark,/area/gateway)
"bbi" = (/obj/machinery/gateway{dir = 10},/obj/effect/landmark{name = "JoinLateGateway"},/turf/simulated/floor/tiled/dark,/area/gateway)
"bbj" = (/obj/machinery/gateway,/obj/effect/landmark{name = "JoinLateGateway"},/turf/simulated/floor/tiled/dark,/area/gateway)
@@ -2734,17 +2747,17 @@
"bbp" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/turf/simulated/floor/tiled,/area/hallway/primary/central_four)
"bbq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/tiled,/area/hallway/primary/central_four)
"bbr" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled,/area/hallway/primary/central_four)
-"bbs" = (/obj/machinery/computer/message_monitor,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_server_room)
-"bbt" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_server_room)
-"bbu" = (/obj/structure/cable/cyan{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_server_room)
-"bbv" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/highsecurity{name = "Messaging Server"; req_access = list(16)},/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
-"bbw" = (/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
-"bbx" = (/obj/machinery/hologram/holopad,/obj/structure/cable/cyan{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/cyan{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
-"bby" = (/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
-"bbz" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/highsecurity{name = "AI Upload Access"; req_access = list(16)},/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
-"bbA" = (/obj/structure/cable/cyan{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_cyborg_station)
-"bbB" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_cyborg_station)
-"bbC" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_cyborg_station)
+"bbs" = (/obj/machinery/computer/message_monitor,/turf/simulated/floor/tiled/dark,/area/ai_server_room)
+"bbt" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/dark,/area/ai_server_room)
+"bbu" = (/obj/structure/cable/cyan{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled/dark,/area/ai_server_room)
+"bbv" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/highsecurity{name = "Messaging Server"; req_access = list(16)},/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/ai_upload_foyer)
+"bbw" = (/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/ai_upload_foyer)
+"bbx" = (/obj/machinery/hologram/holopad,/obj/structure/cable/cyan{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/cyan{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/ai_upload_foyer)
+"bby" = (/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/ai_upload_foyer)
+"bbz" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/highsecurity{name = "AI Upload Access"; req_access = list(16)},/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/ai_upload_foyer)
+"bbA" = (/obj/structure/cable/cyan{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled/dark,/area/ai_cyborg_station)
+"bbB" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled/dark,/area/ai_cyborg_station)
+"bbC" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/turf/simulated/floor/tiled/dark,/area/ai_cyborg_station)
"bbD" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/hydroponics/garden)
"bbE" = (/obj/machinery/portable_atmospherics/hydroponics/soil,/turf/simulated/floor/grass,/area/hydroponics/garden)
"bbF" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 6},/obj/structure/flora/ausbushes/sparsegrass,/turf/simulated/floor/grass,/area/hydroponics/garden)
@@ -2783,15 +2796,15 @@
"bcm" = (/obj/structure/disposalpipe/junction{dir = 1; icon_state = "pipe-j2"},/turf/simulated/floor/tiled,/area/hallway/primary/central_four)
"bcn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/primary/central_four)
"bco" = (/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/turf/simulated/floor/tiled,/area/hallway/primary/central_four)
-"bcp" = (/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_server_room)
-"bcq" = (/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_server_room)
-"bcr" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_server_room)
-"bcs" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/obj/machinery/turretid/stun{control_area = "\improper AI Upload Chamber"; name = "AI Upload turret control"; pixel_x = 6; pixel_y = -24},/obj/item/device/radio/intercom{broadcasting = 1; frequency = 1447; name = "Private AI Channel"; pixel_x = -12; pixel_y = -21},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
-"bct" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/cyan{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
-"bcu" = (/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/cyan{d2 = 8; icon_state = "0-8"},/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
-"bcv" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_cyborg_station)
-"bcw" = (/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_cyborg_station)
-"bcx" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_cyborg_station)
+"bcp" = (/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/tiled/dark,/area/ai_server_room)
+"bcq" = (/turf/simulated/floor/tiled/dark,/area/ai_server_room)
+"bcr" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/ai_server_room)
+"bcs" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/obj/machinery/turretid/stun{control_area = "\improper AI Upload Chamber"; name = "AI Upload turret control"; pixel_x = 6; pixel_y = -24},/obj/item/device/radio/intercom{broadcasting = 1; frequency = 1447; name = "Private AI Channel"; pixel_x = -12; pixel_y = -21},/turf/simulated/floor/tiled/dark,/area/ai_upload_foyer)
+"bct" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/cyan{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/ai_upload_foyer)
+"bcu" = (/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/cyan{d2 = 8; icon_state = "0-8"},/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled/dark,/area/ai_upload_foyer)
+"bcv" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/ai_cyborg_station)
+"bcw" = (/turf/simulated/floor/tiled/dark,/area/ai_cyborg_station)
+"bcx" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/tiled/dark,/area/ai_cyborg_station)
"bcy" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/hydroponics/garden)
"bcz" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled,/area/hydroponics/garden)
"bcA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/hydroponics/garden)
@@ -2828,14 +2841,14 @@
"bdf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/primary/central_four)
"bdg" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/primary/central_four)
"bdh" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled,/area/hallway/primary/central_four)
-"bdi" = (/obj/machinery/blackbox_recorder,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_server_room)
-"bdj" = (/obj/machinery/camera/network/command{c_tag = "AI - Messaging Server"; dir = 1},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_server_room)
-"bdk" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_server_room)
-"bdl" = (/turf/simulated/wall/r_wall,/area/turret_protected/ai_upload)
-"bdm" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/highsecurity{name = "AI Upload"; req_access = list(16)},/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload)
-"bdn" = (/obj/structure/closet/crate{name = "Camera Assembly Crate"},/obj/item/weapon/camera_assembly,/obj/item/weapon/camera_assembly,/obj/item/weapon/camera_assembly,/obj/item/weapon/camera_assembly,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_cyborg_station)
-"bdo" = (/obj/machinery/recharge_station,/obj/machinery/camera/network/command{c_tag = "AI - Cyborg Station"; dir = 1},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_cyborg_station)
-"bdp" = (/obj/machinery/recharge_station,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_cyborg_station)
+"bdi" = (/obj/machinery/blackbox_recorder,/turf/simulated/floor/bluegrid,/area/ai_server_room)
+"bdj" = (/obj/machinery/camera/network/command{c_tag = "AI - Messaging Server"; dir = 1},/turf/simulated/floor/bluegrid,/area/ai_server_room)
+"bdk" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor/tiled/dark,/area/ai_server_room)
+"bdl" = (/turf/simulated/wall/r_wall,/area/ai_upload)
+"bdm" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/highsecurity{name = "AI Upload"; req_access = list(16)},/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/ai_upload)
+"bdn" = (/obj/structure/closet/crate{name = "Camera Assembly Crate"},/obj/item/weapon/camera_assembly,/obj/item/weapon/camera_assembly,/obj/item/weapon/camera_assembly,/obj/item/weapon/camera_assembly,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled/dark,/area/ai_cyborg_station)
+"bdo" = (/obj/machinery/recharge_station,/obj/machinery/camera/network/command{c_tag = "AI - Cyborg Station"; dir = 1},/turf/simulated/floor/bluegrid,/area/ai_cyborg_station)
+"bdp" = (/obj/machinery/recharge_station,/turf/simulated/floor/bluegrid,/area/ai_cyborg_station)
"bdq" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hydroponics/garden)
"bdr" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 4},/obj/machinery/portable_atmospherics/hydroponics/soil,/obj/machinery/camera/network/civilian{c_tag = "CIV - Park Port"; dir = 4},/turf/simulated/floor/grass,/area/hydroponics/garden)
"bds" = (/obj/effect/floor_decal/spline/fancy/wood{tag = "icon-spline_fancy (SOUTHWEST)"; icon_state = "spline_fancy"; dir = 10},/obj/structure/flora/ausbushes/sparsegrass,/obj/structure/flora/ausbushes/brflowers,/turf/simulated/floor/grass,/area/hydroponics/garden)
@@ -2850,7 +2863,7 @@
"bdB" = (/obj/structure/flora/ausbushes/ppflowers,/turf/simulated/floor/grass,/area/hydroponics/garden)
"bdC" = (/obj/effect/floor_decal/corner/green{dir = 5},/turf/simulated/floor/tiled,/area/hydroponics/garden)
"bdD" = (/obj/structure/table/marble,/obj/machinery/door/firedoor/border_only,/obj/machinery/cash_register/civilian{tag = "icon-register_idle (EAST)"; icon_state = "register_idle"; dir = 4},/obj/machinery/door/blast/shutters{dir = 8; id = "coffeeshop"; layer = 3.1; name = "Cafe Shutters"},/turf/simulated/floor/tiled/yellow,/area/crew_quarters/coffee_shop)
-"bdE" = (/obj/structure/table/marble,/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_x = 8; pixel_y = 8},/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_x = 0; pixel_y = 8},/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_x = -8; pixel_y = 8},/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_x = 8; pixel_y = 4},/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_x = 0; pixel_y = 4},/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_x = -8; pixel_y = 4},/turf/simulated/floor/tiled/yellow,/area/crew_quarters/coffee_shop)
+"bdE" = (/obj/structure/table/marble,/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/item/weapon/reagent_containers/food/drinks/glass2/square{pixel_x = 8; pixel_y = 8},/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/item/weapon/reagent_containers/food/drinks/glass2/square{pixel_x = 0; pixel_y = 8},/obj/item/weapon/reagent_containers/food/drinks/glass2/square{pixel_x = -8; pixel_y = 8},/obj/item/weapon/reagent_containers/food/drinks/glass2/square{pixel_x = 8; pixel_y = 4},/obj/item/weapon/reagent_containers/food/drinks/glass2/square{pixel_x = 0; pixel_y = 4},/obj/item/weapon/reagent_containers/food/drinks/glass2/square{pixel_x = -8; pixel_y = 4},/turf/simulated/floor/tiled/yellow,/area/crew_quarters/coffee_shop)
"bdF" = (/obj/structure/cable/green,/obj/structure/flora/pottedplant,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/effect/floor_decal/corner/brown/full,/turf/simulated/floor/tiled/white,/area/crew_quarters/coffee_shop)
"bdG" = (/obj/structure/table/woodentable,/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/item/weapon/reagent_containers/food/condiment/small/sugar,/obj/effect/floor_decal/corner/brown{dir = 10},/turf/simulated/floor/tiled/white,/area/crew_quarters/coffee_shop)
"bdH" = (/obj/machinery/camera/network/northern_star{c_tag = "Hall - Recreation Aft"; dir = 4},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway)
@@ -2878,9 +2891,9 @@
"bed" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/firealarm{dir = 4; layer = 3.3; pixel_x = 26},/turf/simulated/floor/tiled,/area/hallway/primary/central_four)
"bee" = (/turf/simulated/wall/r_wall,/area/hallway/primary/central_four)
"bef" = (/turf/simulated/wall/r_wall,/area/teleporter)
-"beg" = (/obj/structure/cable/cyan{d2 = 4; icon_state = "0-4"},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload)
-"beh" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/cyan{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload)
-"bei" = (/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload)
+"beg" = (/obj/structure/cable/cyan{d2 = 4; icon_state = "0-4"},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/turf/simulated/floor/tiled/dark,/area/ai_upload)
+"beh" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/cyan{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled/dark,/area/ai_upload)
+"bei" = (/turf/simulated/floor/tiled/dark,/area/ai_upload)
"bej" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hydroponics/garden)
"bek" = (/obj/structure/table/glass,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/obj/machinery/camera/network/research{c_tag = "SCI - Break Room"; dir = 4},/turf/simulated/floor/wood,/area/rnd/research)
"bel" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled,/area/hydroponics/garden)
@@ -2892,9 +2905,9 @@
"ber" = (/obj/structure/flora/pottedplant{tag = "icon-plant-10"; icon_state = "plant-10"},/obj/machinery/alarm{pixel_y = 22},/obj/effect/floor_decal/corner/paleblue{dir = 9},/turf/simulated/floor/tiled/white,/area/medical/reception)
"bes" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/camera/network/northern_star{c_tag = "Hall - Central Primary Starboard Fore 2"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_two)
"bet" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/primary/central_two)
-"beu" = (/obj/structure/closet/crate/medical,/obj/item/weapon/surgicaldrill,/obj/item/weapon/FixOVein,/obj/item/weapon/circular_saw,/obj/item/weapon/scalpel,/obj/item/stack/medical/advanced/bruise_pack,/obj/item/weapon/retractor,/obj/item/weapon/hemostat,/obj/item/weapon/cautery,/obj/item/weapon/bonesetter,/obj/item/weapon/bonegel,/obj/item/stack/nanopaste,/turf/simulated/floor/tiled/freezer,/area/medical/surgery_storage)
+"beu" = (/turf/simulated/mineral/ignore_mapgen,/area/mine/unexplored/upper_level)
"bev" = (/turf/simulated/floor/tiled/freezer,/area/medical/surgery_storage)
-"bew" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/turf/simulated/floor/tiled/freezer,/area/medical/surgery_storage)
+"bew" = (/obj/structure/closet/emcloset,/obj/item/weapon/storage/toolbox/emergency,/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/floor/tiled/dark,/area/gateway)
"bex" = (/obj/structure/closet/crate,/obj/item/weapon/coin/silver,/obj/effect/decal/cleanable/cobweb2{tag = "icon-cobweb1"; icon_state = "cobweb1"},/turf/simulated/floor/plating,/area/maintenance/medbay_fore)
"bey" = (/obj/structure/closet/crate,/obj/item/clothing/shoes/combat,/obj/item/weapon/tank/air,/obj/item/weapon/tank/air,/obj/item/weapon/tank/air,/obj/item/clothing/mask/gas,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/medbay_fore)
"bez" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/maintenance/medbay_fore)
@@ -2916,20 +2929,19 @@
"beP" = (/obj/machinery/computer/teleporter,/turf/simulated/floor/tiled/dark,/area/teleporter)
"beQ" = (/obj/machinery/teleport/station,/turf/simulated/floor/tiled/dark,/area/teleporter)
"beR" = (/obj/machinery/teleport/hub,/turf/simulated/floor/tiled/dark,/area/teleporter)
-"beS" = (/obj/machinery/porta_turret{dir = 8},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
-"beT" = (/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
-"beU" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload)
+"beS" = (/obj/machinery/porta_turret{dir = 8},/turf/simulated/floor/bluegrid,/area/ai_upload)
+"beT" = (/turf/simulated/floor/bluegrid,/area/ai_upload)
+"beU" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/ai_upload)
"beV" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/beach/water,/area/hydroponics/garden)
"beW" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/beach/water,/area/hydroponics/garden)
"beX" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/flora/ausbushes/reedbush,/turf/simulated/floor/beach/water,/area/hydroponics/garden)
"beY" = (/obj/structure/disposalpipe/segment,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/tiled,/area/hallway/primary/central_two)
"beZ" = (/turf/simulated/wall,/area/medical/surgeryobs)
"bfa" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/cups{pixel_x = 0; pixel_y = 0},/turf/simulated/floor/tiled,/area/medical/surgeryobs)
-"bfb" = (/obj/structure/reagent_dispensers/water_cooler,/obj/effect/floor_decal/corner/paleblue{dir = 2},/turf/simulated/floor/tiled,/area/medical/surgeryobs)
+"bfb" = (/obj/structure/table/rack,/obj/effect/floor_decal/corner/blue{dir = 10},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/item/weapon/gun/energy/gun{pixel_x = 3; pixel_y = 3},/obj/item/weapon/gun/energy/gun,/obj/machinery/door/window/brigdoor/northleft{name = "Energy"; req_access = list(1)},/turf/simulated/floor/tiled/dark,/area/security/armoury)
"bfc" = (/obj/structure/table/standard,/obj/item/weapon/hemostat,/obj/item/weapon/cautery,/obj/effect/floor_decal/corner/pink/full{dir = 8},/obj/machinery/button/remote/blast_door{id = "surgeryobs2"; name = "Privacy Shutters"; pixel_x = -26; pixel_y = 0},/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/tiled/white,/area/medical/surgery2)
"bfd" = (/obj/structure/table/standard,/obj/item/stack/medical/advanced/bruise_pack,/obj/item/weapon/retractor,/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/tiled/white,/area/medical/surgery2)
"bfe" = (/obj/structure/table/standard,/obj/item/weapon/circular_saw{pixel_y = 8},/obj/item/weapon/scalpel,/obj/effect/floor_decal/corner/pink{dir = 5},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled/white,/area/medical/surgery2)
-"bff" = (/obj/structure/table/standard,/obj/item/weapon/FixOVein,/obj/item/weapon/surgicaldrill,/obj/item/weapon/reagent_containers/spray/cleaner{desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; name = "Surgery Cleaner"; pixel_x = 2; pixel_y = 2},/turf/simulated/floor/tiled/white,/area/medical/surgery2)
"bfg" = (/obj/structure/closet/secure_closet/medical2,/obj/effect/floor_decal/corner/pink/full{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/surgery2)
"bfh" = (/turf/simulated/wall,/area/medical/surgery2)
"bfi" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor/tiled/white,/area/medical/surgery_hallway)
@@ -2945,7 +2957,7 @@
"bfs" = (/obj/machinery/light/small{dir = 4},/obj/machinery/portable_atmospherics/powered/pump/filled,/turf/simulated/floor,/area/rnd/research_storage)
"bft" = (/obj/effect/floor_decal/corner/purple{dir = 9},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/tiled/white,/area/rnd/research)
"bfu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/rnd/research)
-"bfv" = (/obj/effect/floor_decal/corner/purple{dir = 6},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/rnd/research)
+"bfv" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/closet/emcloset,/obj/item/weapon/storage/toolbox/emergency,/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/floor/tiled,/area/gateway)
"bfw" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/gateway)
"bfx" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/gateway)
"bfy" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/gateway)
@@ -2956,11 +2968,11 @@
"bfD" = (/obj/item/weapon/stool/padded,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/teleporter)
"bfE" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/teleporter)
"bfF" = (/obj/effect/floor_decal/industrial/warning/corner,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/teleporter)
-"bfG" = (/obj/structure/table/standard,/obj/item/weapon/aiModule/protectStation,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
-"bfH" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload)
-"bfI" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload)
-"bfJ" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload)
-"bfK" = (/obj/structure/table/standard,/obj/item/weapon/aiModule/reset,/obj/machinery/light{dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
+"bfG" = (/obj/structure/table/standard,/obj/item/weapon/aiModule/protectStation,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/bluegrid,/area/ai_upload)
+"bfH" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled/dark,/area/ai_upload)
+"bfI" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/ai_upload)
+"bfJ" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled/dark,/area/ai_upload)
+"bfK" = (/obj/structure/table/standard,/obj/item/weapon/aiModule/reset,/obj/machinery/light{dir = 4},/turf/simulated/floor/bluegrid,/area/ai_upload)
"bfL" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 4},/obj/structure/flora/ausbushes/sparsegrass,/obj/structure/flora/ausbushes/brflowers,/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/newscaster{pixel_x = -30},/turf/simulated/floor/grass,/area/hydroponics/garden)
"bfM" = (/obj/effect/floor_decal/corner/green/full{dir = 8},/turf/simulated/floor/tiled,/area/hydroponics/garden)
"bfN" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/flora/ausbushes/reedbush,/turf/simulated/floor/beach/water,/area/hydroponics/garden)
@@ -3000,9 +3012,9 @@
"bgv" = (/turf/simulated/floor/tiled,/area/teleporter)
"bgw" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/turf/simulated/floor/tiled,/area/teleporter)
"bgx" = (/obj/structure/dispenser{phorontanks = 0},/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled/dark,/area/teleporter)
-"bgy" = (/obj/structure/table/standard,/obj/item/weapon/aiModule/freeform,/obj/machinery/camera/network/command{c_tag = "AI - Upload"; dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
-"bgz" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload)
-"bgA" = (/obj/structure/table/standard,/obj/item/weapon/aiModule/nanotrasen,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
+"bgy" = (/obj/structure/table/standard,/obj/item/weapon/aiModule/freeform,/obj/machinery/camera/network/command{c_tag = "AI - Upload"; dir = 4},/turf/simulated/floor/bluegrid,/area/ai_upload)
+"bgz" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/ai_upload)
+"bgA" = (/obj/structure/table/standard,/obj/item/weapon/aiModule/nanotrasen,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/bluegrid,/area/ai_upload)
"bgB" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 4},/obj/structure/flora/ausbushes/pointybush,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/grass,/area/hydroponics/garden)
"bgC" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/beach/water,/area/hydroponics/garden)
"bgD" = (/obj/effect/floor_decal/spline/fancy/wood{tag = "icon-spline_fancy (NORTHWEST)"; icon_state = "spline_fancy"; dir = 9},/obj/structure/flora/ausbushes/ppflowers,/turf/simulated/floor/grass,/area/hydroponics/garden)
@@ -3043,16 +3055,15 @@
"bhm" = (/obj/effect/floor_decal/corner/purple{dir = 9},/obj/structure/extinguisher_cabinet{pixel_x = -27},/turf/simulated/floor/tiled/white,/area/rnd/research)
"bhn" = (/obj/effect/floor_decal/corner/purple{dir = 6},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 26},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/camera/network/research{c_tag = "SCI - Research Auxiliary Hallway"; dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/research)
"bho" = (/turf/simulated/wall/r_wall,/area/rnd/research_restroom)
-"bhp" = (/obj/machinery/alarm{pixel_y = 23},/obj/structure/bed/chair,/turf/simulated/floor/tiled/dark,/area/hallway/primary/central_four)
"bhq" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/primary/central_four)
"bhr" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/primary/central_four)
"bhs" = (/obj/structure/closet/emcloset,/turf/simulated/floor/tiled,/area/hallway/primary/central_four)
"bht" = (/obj/machinery/light_switch{pixel_x = -26},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/camera/network/command{c_tag = "COM - Teleporter"; dir = 4},/turf/simulated/floor/tiled,/area/teleporter)
"bhu" = (/obj/machinery/suit_storage_unit/standard_unit,/turf/simulated/floor/tiled/dark,/area/teleporter)
-"bhv" = (/obj/machinery/porta_turret{dir = 8},/obj/machinery/ai_status_display{pixel_x = -32; pixel_y = 0},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
-"bhw" = (/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload)
-"bhx" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
-"bhy" = (/obj/machinery/porta_turret{dir = 8},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
+"bhv" = (/obj/machinery/porta_turret{dir = 8},/obj/machinery/ai_status_display{pixel_x = -32; pixel_y = 0},/turf/simulated/floor/bluegrid,/area/ai_upload)
+"bhw" = (/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/dark,/area/ai_upload)
+"bhx" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/bluegrid,/area/ai_upload)
+"bhy" = (/obj/machinery/porta_turret{dir = 8},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/turf/simulated/floor/bluegrid,/area/ai_upload)
"bhz" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 1},/obj/machinery/portable_atmospherics/hydroponics/soil,/obj/machinery/camera/network/civilian{c_tag = "CIV - Park Aft"; dir = 1},/turf/simulated/floor/grass,/area/hydroponics/garden)
"bhA" = (/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/grass,/area/hydroponics/garden)
"bhB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hydroponics/garden)
@@ -3104,11 +3115,11 @@
"biv" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/command{name = "Teleport Access"; req_access = list(17)},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/teleporter)
"biw" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor/tiled,/area/teleporter)
"bix" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/hologram/holopad,/obj/item/device/radio/beacon,/turf/simulated/floor/tiled,/area/teleporter)
-"biy" = (/obj/structure/table/standard,/obj/item/weapon/aiModule/asimov,/obj/item/weapon/aiModule/freeformcore,/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "Core Modules"; req_access = list(20)},/obj/item/weapon/aiModule/corp,/obj/item/weapon/aiModule/paladin,/obj/item/weapon/aiModule/robocop,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
-"biz" = (/obj/machinery/computer/aiupload,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
-"biA" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/flasher{id = "AI"; pixel_x = 22; pixel_y = -24},/obj/item/device/radio/intercom/locked{frequency = 1343; locked_frequency = 1343; name = "Private AI Channel"; pixel_x = 38; pixel_y = -21},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
-"biB" = (/obj/machinery/computer/borgupload,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
-"biC" = (/obj/structure/table/standard,/obj/item/weapon/aiModule/oxygen,/obj/item/weapon/aiModule/oneHuman,/obj/machinery/door/window{base_state = "left"; dir = 8; icon_state = "left"; name = "High-Risk Modules"; req_access = list(20)},/obj/item/weapon/aiModule/purge,/obj/item/weapon/aiModule/antimov,/obj/item/weapon/aiModule/teleporterOffline,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
+"biy" = (/obj/structure/table/standard,/obj/item/weapon/aiModule/asimov,/obj/item/weapon/aiModule/freeformcore,/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "Core Modules"; req_access = list(20)},/obj/item/weapon/aiModule/corp,/obj/item/weapon/aiModule/paladin,/obj/item/weapon/aiModule/robocop,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/bluegrid,/area/ai_upload)
+"biz" = (/obj/machinery/computer/aiupload,/turf/simulated/floor/bluegrid,/area/ai_upload)
+"biA" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/flasher{id = "AI"; pixel_x = 22; pixel_y = -24},/obj/item/device/radio/intercom/locked{frequency = 1343; locked_frequency = 1343; name = "Private AI Channel"; pixel_x = 38; pixel_y = -21},/turf/simulated/floor/bluegrid,/area/ai_upload)
+"biB" = (/obj/machinery/computer/borgupload,/turf/simulated/floor/bluegrid,/area/ai_upload)
+"biC" = (/obj/structure/table/standard,/obj/item/weapon/aiModule/oxygen,/obj/item/weapon/aiModule/oneHuman,/obj/machinery/door/window{base_state = "left"; dir = 8; icon_state = "left"; name = "High-Risk Modules"; req_access = list(20)},/obj/item/weapon/aiModule/purge,/obj/item/weapon/aiModule/antimov,/obj/item/weapon/aiModule/teleporterOffline,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/bluegrid,/area/ai_upload)
"biD" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/maintenance/central)
"biE" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 1},/obj/machinery/portable_atmospherics/hydroponics/soil,/turf/simulated/floor/grass,/area/hydroponics/garden)
"biF" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 8},/obj/structure/flora/ausbushes/brflowers,/turf/simulated/floor/grass,/area/hydroponics/garden)
@@ -3129,7 +3140,6 @@
"biU" = (/obj/machinery/iv_drip,/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/tiled/white,/area/medical/surgery2)
"biV" = (/obj/structure/bed/chair/wood{dir = 8},/obj/effect/floor_decal/corner/brown{dir = 10},/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/tiled/white,/area/crew_quarters/coffee_shop)
"biW" = (/obj/machinery/vending/wallmed1{pixel_y = -32},/obj/machinery/camera/network/medbay{c_tag = "MED - Operating Theatre 2"; dir = 1},/turf/simulated/floor/tiled/white,/area/medical/surgery2)
-"biX" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/machinery/light_switch{pixel_x = 32; pixel_y = 2},/obj/effect/floor_decal/corner/pink/full{dir = 4},/obj/machinery/button/holosign{pixel_x = 24; pixel_y = 2},/turf/simulated/floor/tiled/white,/area/medical/surgery2)
"biY" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/turf/simulated/floor/tiled/white,/area/medical/surgery_hallway)
"biZ" = (/obj/structure/table/standard,/obj/item/weapon/cane,/obj/item/weapon/cane{pixel_x = -3; pixel_y = 2},/obj/item/weapon/storage/box/rxglasses,/obj/effect/floor_decal/corner/pink{dir = 9},/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/exam_room)
"bja" = (/obj/structure/bed/chair/office/light{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/exam_room)
@@ -3180,8 +3190,8 @@
"bjT" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/teleporter)
"bjU" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/teleporter)
"bjV" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/teleporter)
-"bjW" = (/turf/simulated/wall/r_wall,/area/turret_protected/ai)
-"bjX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/vault/bolted{name = "AI core"; req_access = list(16)},/obj/machinery/door/blast/regular{id = "AICore"; name = "AI core maintenance hatch"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
+"bjW" = (/turf/simulated/wall/r_wall,/area/ai)
+"bjX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/vault/bolted{name = "AI core"; req_access = list(16)},/obj/machinery/door/blast/regular{id = "AICore"; name = "AI core maintenance hatch"},/turf/simulated/floor/bluegrid,/area/ai_upload)
"bjY" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor,/area/maintenance/central)
"bjZ" = (/obj/effect/floor_decal/spline/fancy/wood{tag = "icon-spline_fancy (SOUTHWEST)"; icon_state = "spline_fancy"; dir = 10},/obj/structure/flora/ausbushes/ppflowers,/turf/simulated/floor/grass,/area/hydroponics/garden)
"bka" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 6},/obj/structure/flora/ausbushes/ppflowers,/turf/simulated/floor/grass,/area/hydroponics/garden)
@@ -3193,7 +3203,7 @@
"bkg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/hologram/holopad,/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled,/area/medical/surgeryobs)
"bkh" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/turf/simulated/floor/tiled/freezer,/area/medical/surgery_storage)
"bki" = (/obj/machinery/status_display,/turf/simulated/wall,/area/medical/surgery2)
-"bkj" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/disposalpipe/segment,/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/surgery_hallway)
+"bkj" = (/obj/structure/closet/crate/medical,/obj/item/weapon/surgicaldrill,/obj/item/weapon/FixOVein,/obj/item/weapon/circular_saw,/obj/item/weapon/scalpel,/obj/item/stack/medical/advanced/bruise_pack,/obj/item/weapon/retractor,/obj/item/weapon/hemostat,/obj/item/weapon/cautery,/obj/item/weapon/bonesetter,/obj/item/weapon/bonegel,/obj/item/stack/nanopaste,/obj/item/weapon/autopsy_scanner,/obj/item/weapon/reagent_containers/spray/cleaner{desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; name = "Surgery Cleaner"; pixel_x = 2; pixel_y = 2},/turf/simulated/floor/tiled/freezer,/area/medical/surgery_storage)
"bkk" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/medical/surgery_hallway)
"bkl" = (/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/standard,/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/tiled/white,/area/medical/surgery_hallway)
"bkm" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/storage/pill_bottle/antitox,/obj/item/weapon/storage/pill_bottle/tramadol,/obj/structure/closet/secure_closet/medical_wall{name = "Pill Cabinet"; pixel_y = -32},/obj/effect/floor_decal/corner/pink/full,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/tiled/white,/area/medical/exam_room)
@@ -3253,13 +3263,13 @@
"blo" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/primary/central_four)
"blp" = (/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/teleporter)
"blq" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled/dark,/area/teleporter)
-"blr" = (/obj/structure/flora/pottedplant{icon_state = "plant-09"; name = "Steve"; pixel_y = 15; tag = "icon-plant-09"},/obj/structure/table/standard,/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
-"bls" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/status_display{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
-"blt" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
-"blu" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
-"blv" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
-"blw" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/ai_status_display{pixel_y = 32},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
-"blx" = (/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"blr" = (/obj/structure/flora/pottedplant{icon_state = "plant-09"; name = "Steve"; pixel_y = 15; tag = "icon-plant-09"},/obj/structure/table/standard,/turf/simulated/floor/bluegrid,/area/ai)
+"bls" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/status_display{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/bluegrid,/area/ai)
+"blt" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/bluegrid,/area/ai)
+"blu" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/bluegrid,/area/ai)
+"blv" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/bluegrid,/area/ai)
+"blw" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/ai_status_display{pixel_y = 32},/turf/simulated/floor/bluegrid,/area/ai)
+"blx" = (/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/bluegrid,/area/ai)
"bly" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 4},/obj/structure/flora/ausbushes/palebush,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/grass,/area/hydroponics/garden)
"blz" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/beach/water,/area/hydroponics/garden)
"blA" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 2},/obj/structure/flora/ausbushes/brflowers,/turf/simulated/floor/grass,/area/hydroponics/garden)
@@ -3272,7 +3282,6 @@
"blH" = (/obj/structure/table/standard,/obj/item/weapon/hemostat,/obj/item/weapon/cautery,/obj/machinery/button/remote/blast_door{id = "surgeryobs"; name = "Privacy Shutters"; pixel_x = -26; pixel_y = 0},/obj/effect/floor_decal/corner/pink/full{dir = 8},/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/tiled/white,/area/medical/surgery)
"blI" = (/obj/structure/table/standard,/obj/item/stack/medical/advanced/bruise_pack,/obj/item/weapon/retractor,/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/tiled/white,/area/medical/surgery)
"blJ" = (/obj/structure/table/standard,/obj/item/weapon/circular_saw{pixel_y = 8},/obj/item/weapon/scalpel,/obj/effect/floor_decal/corner/pink{dir = 5},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled/white,/area/medical/surgery)
-"blK" = (/obj/structure/table/standard,/obj/item/weapon/FixOVein,/obj/item/weapon/surgicaldrill,/obj/item/weapon/reagent_containers/spray/cleaner{desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; name = "Surgery Cleaner"; pixel_x = 2; pixel_y = 2},/turf/simulated/floor/tiled/white,/area/medical/surgery)
"blL" = (/obj/structure/closet/secure_closet/medical2,/obj/effect/floor_decal/corner/pink/full{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/surgery)
"blM" = (/turf/simulated/wall,/area/medical/surgery)
"blN" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/camera/network/medbay{c_tag = "MED - Surgery Hallway"; dir = 4},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/tiled/white,/area/medical/surgery_hallway)
@@ -3313,7 +3322,7 @@
"bmw" = (/obj/machinery/computer/message_monitor,/turf/simulated/floor/tiled/dark,/area/server)
"bmx" = (/obj/effect/floor_decal/corner/purple{dir = 8},/obj/structure/extinguisher_cabinet{pixel_x = -27},/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/research)
"bmy" = (/obj/effect/floor_decal/corner/purple,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 26},/turf/simulated/floor/tiled/white,/area/rnd/research)
-"bmz" = (/obj/structure/table/standard,/obj/structure/noticeboard{pixel_y = 28},/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"},/obj/effect/floor_decal/corner/paleblue/diagonal{dir = 4},/obj/machinery/light{dir = 1},/obj/item/weapon/storage/box/drinkingglasses,/turf/simulated/floor/tiled/white,/area/crew_quarters/medbreak)
+"bmz" = (/obj/structure/table/standard,/obj/structure/noticeboard{pixel_y = 28},/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"},/obj/effect/floor_decal/corner/paleblue/diagonal{dir = 4},/obj/machinery/light{dir = 1},/obj/item/weapon/storage/box/glasses/square,/turf/simulated/floor/tiled/white,/area/crew_quarters/medbreak)
"bmA" = (/obj/effect/floor_decal/corner/purple/diagonal,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/research_restroom)
"bmB" = (/obj/effect/floor_decal/corner/purple/diagonal,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/research_restroom)
"bmC" = (/obj/structure/closet/wardrobe/science_white,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/effect/floor_decal/corner/purple/diagonal,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/research_restroom)
@@ -3327,12 +3336,12 @@
"bmK" = (/obj/machinery/shieldwallgen,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/teleporter)
"bmL" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled,/area/teleporter)
"bmM" = (/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/closet/crate,/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/turf/simulated/floor/tiled,/area/teleporter)
-"bmN" = (/obj/machinery/porta_turret{dir = 4},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
-"bmO" = (/obj/structure/cable/cyan{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai)
-"bmP" = (/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
-"bmQ" = (/obj/structure/cable/cyan{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/industrial/warning,/obj/structure/cable/cyan{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/ai_slipper{icon_state = "motion0"},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai)
-"bmR" = (/obj/structure/cable/cyan{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai)
-"bmS" = (/obj/machinery/porta_turret{dir = 4},/obj/machinery/light{dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"bmN" = (/obj/machinery/porta_turret{dir = 4},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/bluegrid,/area/ai)
+"bmO" = (/obj/structure/cable/cyan{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/dark,/area/ai)
+"bmP" = (/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/bluegrid,/area/ai)
+"bmQ" = (/obj/structure/cable/cyan{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/industrial/warning,/obj/structure/cable/cyan{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/ai_slipper{icon_state = "motion0"},/turf/simulated/floor/tiled/dark,/area/ai)
+"bmR" = (/obj/structure/cable/cyan{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/dark,/area/ai)
+"bmS" = (/obj/machinery/porta_turret{dir = 4},/obj/machinery/light{dir = 4},/turf/simulated/floor/bluegrid,/area/ai)
"bmT" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 4},/obj/structure/flora/ausbushes/sparsegrass,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/grass,/area/hydroponics/garden)
"bmU" = (/obj/machinery/light,/turf/simulated/floor/tiled,/area/hydroponics/garden)
"bmV" = (/obj/effect/floor_decal/spline/fancy/wood{tag = "icon-spline_fancy (NORTHWEST)"; icon_state = "spline_fancy"; dir = 9},/obj/structure/flora/ausbushes/sunnybush,/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/turf/simulated/floor/grass,/area/hydroponics/garden)
@@ -3379,7 +3388,7 @@
"bnK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/virology)
"bnL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled/white,/area/medical/virology)
"bnM" = (/obj/item/weapon/stool/padded,/obj/effect/floor_decal/corner/lime{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology)
-"bnN" = (/obj/structure/reagent_dispensers/water_cooler,/obj/effect/floor_decal/corner/lime/full{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"bnN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock/glass_security{name = "Brig Control"; req_access = list(1)},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/security/prison)
"bnO" = (/obj/structure/lattice,/obj/machinery/light{dir = 1},/turf/simulated/mineral/floor/ignore_mapgen,/area/rnd/docking)
"bnP" = (/turf/simulated/shuttle/wall{icon_state = "swall_straight"; dir = 1},/area/shuttle/research/station)
"bnQ" = (/obj/structure/table/reinforced,/turf/simulated/shuttle/floor,/area/shuttle/research/station)
@@ -3392,7 +3401,6 @@
"bnX" = (/obj/structure/bed/chair/comfy/purp{dir = 4},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/turf/simulated/floor/wood,/area/rnd/research)
"bnY" = (/obj/structure/table/glass,/obj/machinery/newscaster{pixel_y = 32},/obj/machinery/light{dir = 1},/turf/simulated/floor/wood,/area/rnd/research)
"bnZ" = (/obj/structure/bed/chair/comfy/purp{dir = 8},/turf/simulated/floor/wood,/area/rnd/research)
-"boa" = (/obj/structure/table/standard,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/machinery/light_switch{pixel_x = -12; pixel_y = -24},/obj/effect/floor_decal/corner/purple/diagonal,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/item/weapon/soap,/turf/simulated/floor/tiled/white,/area/rnd/research_restroom)
"bob" = (/obj/effect/floor_decal/corner/purple/diagonal,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled/white,/area/rnd/research_restroom)
"boc" = (/obj/structure/undies_wardrobe,/obj/effect/floor_decal/corner/purple/diagonal,/turf/simulated/floor/tiled/white,/area/rnd/research_restroom)
"bod" = (/obj/effect/floor_decal/corner/purple/full{dir = 8},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/rnd/lab)
@@ -3404,12 +3412,12 @@
"boj" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/tiled,/area/hallway/primary/central_four)
"bok" = (/obj/structure/closet/crate,/obj/item/weapon/crowbar,/turf/simulated/floor/tiled,/area/teleporter)
"bol" = (/obj/structure/closet/crate,/turf/simulated/floor/tiled,/area/teleporter)
-"bom" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
-"bon" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
-"boo" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
-"bop" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/cyan{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/door/window/northright{name = "AI Core Door"; req_access = list(16)},/obj/machinery/flasher{id = "AI"; pixel_x = -22; pixel_y = -24},/obj/machinery/turretid/stun{check_synth = 1; name = "AI Chamber turret control"; pixel_x = -38; pixel_y = -24},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
-"boq" = (/obj/machinery/power/apc/super/critical{dir = 2; is_critical = 1; name = "south bump"; pixel_y = -24},/obj/structure/cable/cyan{d2 = 8; icon_state = "0-8"},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
-"bor" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"bom" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/bluegrid,/area/ai)
+"bon" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/bluegrid,/area/ai)
+"boo" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/bluegrid,/area/ai)
+"bop" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/cyan{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/door/window/northright{name = "AI Core Door"; req_access = list(16)},/obj/machinery/flasher{id = "AI"; pixel_x = -22; pixel_y = -24},/obj/machinery/turretid/stun{check_synth = 1; name = "AI Chamber turret control"; pixel_x = -38; pixel_y = -24},/turf/simulated/floor/bluegrid,/area/ai)
+"boq" = (/obj/machinery/power/apc/super/critical{dir = 2; is_critical = 1; name = "south bump"; pixel_y = -24},/obj/structure/cable/cyan{d2 = 8; icon_state = "0-8"},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/bluegrid,/area/ai)
+"bor" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/bluegrid,/area/ai)
"bos" = (/obj/structure/bed/chair{dir = 4},/obj/effect/floor_decal/corner/paleblue{dir = 9},/turf/simulated/floor/tiled/white,/area/medical/reception)
"bot" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/primary/central_two)
"bou" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/disposalpipe/segment,/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 26},/turf/simulated/floor/tiled,/area/hallway/primary/central_two)
@@ -3437,7 +3445,6 @@
"boQ" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/virology)
"boR" = (/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/virology)
"boS" = (/obj/effect/floor_decal/corner/lime{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/virology)
-"boT" = (/obj/structure/closet/crate/freezer,/obj/item/weapon/virusdish/random,/obj/item/weapon/virusdish/random,/obj/item/weapon/virusdish/random,/obj/effect/floor_decal/corner/lime,/turf/simulated/floor/tiled/white,/area/medical/virology)
"boU" = (/obj/structure/table/glass,/obj/machinery/computer/med_data/laptop,/obj/effect/floor_decal/corner/lime{dir = 10},/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/medical/virology)
"boV" = (/obj/machinery/disease2/diseaseanalyser,/obj/effect/floor_decal/corner/lime{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/virology)
"boW" = (/obj/machinery/atmospherics/pipe/simple/hidden/black,/turf/simulated/floor/tiled/white,/area/medical/virology)
@@ -3477,14 +3484,14 @@
"bpE" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled/white,/area/rnd/lab)
"bpF" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/lab)
"bpG" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/capacitor,/obj/item/weapon/stock_parts/capacitor,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/micro_laser,/obj/item/weapon/stock_parts/micro_laser,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/effect/floor_decal/corner/purple{dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/lab)
-"bpH" = (/obj/effect/landmark{name = "tripai"},/obj/item/device/radio/intercom{dir = 1; listening = 0; name = "Custom Channel"; pixel_x = 0; pixel_y = 20},/obj/item/device/radio/intercom{broadcasting = 0; dir = 2; frequency = 1343; name = "Private Channel"; pixel_x = 0; pixel_y = -21},/obj/item/device/radio/intercom{broadcasting = 1; dir = 8; listening = 1; name = "Common Channel"; pixel_x = -21; pixel_y = 0},/obj/structure/cable/cyan{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
-"bpI" = (/obj/machinery/door/window{dir = 4; name = "AI Core Door"; req_access = list(16)},/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
-"bpJ" = (/obj/structure/cable/cyan{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai)
-"bpK" = (/turf/simulated/wall,/area/turret_protected/ai)
-"bpL" = (/obj/effect/landmark/start{name = "AI"},/obj/structure/cable/cyan,/obj/item/device/radio/intercom{broadcasting = 1; listening = 1; name = "Common Channel"; pixel_y = -21},/obj/item/device/radio/intercom{dir = 4; listening = 0; name = "Custom Channel"; pixel_x = 21; pixel_y = -10},/obj/item/device/radio/intercom{broadcasting = 0; dir = 8; frequency = 1343; name = "Private Channel"; pixel_x = -21; pixel_y = -10},/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for the AI core maintenance door."; id = "AICore"; name = "AI Maintenance Hatch"; pixel_x = -17; pixel_y = -25; req_access = list(16)},/obj/machinery/requests_console{department = "AI"; departmentType = 5; pixel_x = 30; pixel_y = -32},/obj/machinery/newscaster/security_unit{pixel_x = -32; pixel_y = -32},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
-"bpM" = (/obj/structure/cable/cyan{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai)
-"bpN" = (/obj/machinery/door/window{base_state = "right"; dir = 8; icon_state = "right"; name = "AI Core Door"; req_access = list(16)},/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
-"bpO" = (/obj/effect/landmark{name = "tripai"},/obj/item/device/radio/intercom{dir = 1; listening = 0; name = "Custom Channel"; pixel_x = 0; pixel_y = 21},/obj/item/device/radio/intercom{broadcasting = 0; frequency = 1343; name = "Private Channel"; pixel_x = 0; pixel_y = -21},/obj/item/device/radio/intercom{broadcasting = 1; dir = 4; listening = 1; name = "Common Channel"; pixel_x = 21; pixel_y = 0},/obj/structure/cable/cyan{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"bpH" = (/obj/effect/landmark{name = "tripai"},/obj/item/device/radio/intercom{dir = 1; listening = 0; name = "Custom Channel"; pixel_x = 0; pixel_y = 20},/obj/item/device/radio/intercom{broadcasting = 0; dir = 2; frequency = 1343; name = "Private Channel"; pixel_x = 0; pixel_y = -21},/obj/item/device/radio/intercom{broadcasting = 1; dir = 8; listening = 1; name = "Common Channel"; pixel_x = -21; pixel_y = 0},/obj/structure/cable/cyan{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/bluegrid,/area/ai)
+"bpI" = (/obj/machinery/door/window{dir = 4; name = "AI Core Door"; req_access = list(16)},/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/bluegrid,/area/ai)
+"bpJ" = (/obj/structure/cable/cyan{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled/dark,/area/ai)
+"bpK" = (/turf/simulated/wall,/area/ai)
+"bpL" = (/obj/effect/landmark/start{name = "AI"},/obj/structure/cable/cyan,/obj/item/device/radio/intercom{broadcasting = 1; listening = 1; name = "Common Channel"; pixel_y = -21},/obj/item/device/radio/intercom{dir = 4; listening = 0; name = "Custom Channel"; pixel_x = 21; pixel_y = -10},/obj/item/device/radio/intercom{broadcasting = 0; dir = 8; frequency = 1343; name = "Private Channel"; pixel_x = -21; pixel_y = -10},/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for the AI core maintenance door."; id = "AICore"; name = "AI Maintenance Hatch"; pixel_x = -17; pixel_y = -25; req_access = list(16)},/obj/machinery/requests_console{department = "AI"; departmentType = 5; pixel_x = 30; pixel_y = -32},/obj/machinery/newscaster/security_unit{pixel_x = -32; pixel_y = -32},/turf/simulated/floor/bluegrid,/area/ai)
+"bpM" = (/obj/structure/cable/cyan{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/turf/simulated/floor/tiled/dark,/area/ai)
+"bpN" = (/obj/machinery/door/window{base_state = "right"; dir = 8; icon_state = "right"; name = "AI Core Door"; req_access = list(16)},/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/bluegrid,/area/ai)
+"bpO" = (/obj/effect/landmark{name = "tripai"},/obj/item/device/radio/intercom{dir = 1; listening = 0; name = "Custom Channel"; pixel_x = 0; pixel_y = 21},/obj/item/device/radio/intercom{broadcasting = 0; frequency = 1343; name = "Private Channel"; pixel_x = 0; pixel_y = -21},/obj/item/device/radio/intercom{broadcasting = 1; dir = 4; listening = 1; name = "Common Channel"; pixel_x = 21; pixel_y = 0},/obj/structure/cable/cyan{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/bluegrid,/area/ai)
"bpP" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/hallway/primary/central_two)
"bpQ" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled,/area/medical/surgeryobs)
"bpR" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/bed/chair{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/medical/surgeryobs)
@@ -3510,7 +3517,8 @@
"bql" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/sleeper)
"bqm" = (/obj/effect/floor_decal/corner/paleblue{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/sleeper)
"bqn" = (/obj/machinery/recharge_station,/obj/effect/floor_decal/corner/paleblue{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/sleeper)
-"bqo" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/bodybags{pixel_x = 1; pixel_y = 2},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/effect/floor_decal/corner/mauve{dir = 5},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/obj/machinery/light_switch{pixel_x = -36; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning)
+"bqo" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/bodybags{pixel_x = 1; pixel_y = 2},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/effect/floor_decal/corner/mauve{dir = 5},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/obj/machinery/light_switch{pixel_x = -36; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning)
+"bqp" = (/obj/machinery/camera/network/security{c_tag = "SEC - Secure Armory Armor"; dir = 8},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/tiled/dark,/area/security/armoury)
"bqq" = (/obj/structure/window/reinforced{dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/medical/genetics_cloning)
"bqr" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/camera/network/medbay{c_tag = "MED - Cloning"; dir = 2},/turf/simulated/floor/tiled,/area/medical/genetics_cloning)
"bqs" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/medical/genetics_cloning)
@@ -3528,7 +3536,6 @@
"bqE" = (/obj/effect/floor_decal/corner/lime{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/black{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology)
"bqF" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 0},/turf/simulated/wall/r_wall,/area/medical/virology)
"bqG" = (/obj/effect/floor_decal/corner/lime{dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology)
-"bqH" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/lime{dir = 6},/obj/machinery/camera/network/medbay{c_tag = "MED - Virology Quarantine Starboard"; dir = 8},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/turf/simulated/floor/tiled/white,/area/medical/virology)
"bqI" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 2; external_pressure_bound = 140; external_pressure_bound_default = 140; icon_state = "map_vent_out"; pressure_checks = 1; pressure_checks_default = 1; use_power = 1},/turf/simulated/floor/airless,/area/maintenance/disposal)
"bqJ" = (/obj/machinery/computer/shuttle_control/research{name = "research elevator control console"},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/shuttle/floor,/area/shuttle/research/station)
"bqK" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "research_shuttle_hatch"; locked = 1; name = "Shuttle Hatch"; req_access = list(13)},/turf/simulated/shuttle/floor,/area/shuttle/research/station)
@@ -3569,10 +3576,10 @@
"brt" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/structure/disposalpipe/segment,/obj/machinery/camera/network/northern_star{c_tag = "Hall - Central Primary Port Fore 2"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_four)
"bru" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_four)
"brv" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/turf/simulated/floor/tiled,/area/hallway/primary/central_four)
-"brw" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
-"brx" = (/turf/simulated/floor/tiled/dark,/area/turret_protected/ai)
-"bry" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai)
-"brz" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"brw" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/bluegrid,/area/ai)
+"brx" = (/turf/simulated/floor/tiled/dark,/area/ai)
+"bry" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/ai)
+"brz" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/bluegrid,/area/ai)
"brA" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/structure/flora/pottedplant{icon_state = "plant-22"},/turf/simulated/floor/wood,/area/rnd/research)
"brB" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 5},/obj/structure/flora/ausbushes/sparsegrass,/obj/structure/flora/ausbushes/brflowers,/turf/simulated/floor/grass,/area/hydroponics/garden)
"brC" = (/obj/effect/floor_decal/spline/fancy/wood{tag = "icon-spline_fancy (NORTHWEST)"; icon_state = "spline_fancy"; dir = 9},/obj/structure/flora/ausbushes/sparsegrass,/turf/simulated/floor/grass,/area/hydroponics/garden)
@@ -3585,7 +3592,6 @@
"brJ" = (/obj/machinery/iv_drip,/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/tiled/white,/area/medical/surgery)
"brK" = (/obj/item/weapon/stool/padded,/obj/effect/floor_decal/corner/paleblue/diagonal{dir = 4},/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; dir = 8; frequency = 1487; icon_state = "intercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = -21; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/crew_quarters/medbreak)
"brL" = (/obj/machinery/vending/wallmed1{pixel_y = -32},/obj/machinery/camera/network/medbay{c_tag = "MED - Operating Theatre 1"; dir = 1},/turf/simulated/floor/tiled/white,/area/medical/surgery)
-"brM" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/machinery/button/holosign{pixel_x = 24; pixel_y = 2},/obj/machinery/light_switch{pixel_x = 32; pixel_y = 2},/obj/effect/floor_decal/corner/pink/full{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/surgery)
"brN" = (/obj/structure/bed/chair/comfy/black{dir = 1},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/medical/surgery_hallway)
"brO" = (/obj/structure/bed/chair/comfy/black{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/surgery_hallway)
"brP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/medical/surgery_hallway)
@@ -3602,6 +3608,7 @@
"bsa" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/disposalpipe/junction{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/sleeper)
"bsb" = (/obj/machinery/door/airlock/glass_medical{id_tag = "GeneticsDoor"; name = "Cloning Laboratory"; req_access = list(66)},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor/glass,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning)
"bsc" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning)
+"bsd" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/table/rack,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/turf/simulated/floor/tiled/dark,/area/security/armoury)
"bse" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/medical/genetics_cloning)
"bsf" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/medical/genetics_cloning)
"bsg" = (/obj/structure/window/reinforced,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/medical/genetics_cloning)
@@ -3640,11 +3647,11 @@
"bsN" = (/obj/machinery/r_n_d/circuit_imprinter,/obj/item/weapon/reagent_containers/glass/beaker/sulphuric,/turf/simulated/floor/tiled,/area/rnd/lab)
"bsO" = (/obj/effect/floor_decal/corner/purple{dir = 6},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled/white,/area/rnd/lab)
"bsP" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor/plating,/area/rnd/lab)
-"bsQ" = (/obj/machinery/porta_turret{dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
-"bsR" = (/obj/machinery/power/terminal{dir = 4},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
-"bsS" = (/obj/machinery/power/smes/buildable{charge = 5e+006; input_attempt = 1; input_level = 200000; output_level = 200000},/obj/structure/cable/cyan{d2 = 4; icon_state = "0-4"},/obj/machinery/camera/xray/command{c_tag = "AI - Core"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
-"bsT" = (/obj/machinery/power/sensor{name = "Powernet Sensor - AI Subgrid"; name_tag = "AI Subgrid"},/obj/structure/cable/cyan{d2 = 8; icon_state = "0-8"},/obj/structure/cable/cyan{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
-"bsU" = (/obj/structure/cable/cyan{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai)
+"bsQ" = (/obj/machinery/porta_turret{dir = 4},/turf/simulated/floor/bluegrid,/area/ai)
+"bsR" = (/obj/machinery/power/terminal{dir = 4},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/bluegrid,/area/ai)
+"bsS" = (/obj/machinery/power/smes/buildable{charge = 5e+006; input_attempt = 1; input_level = 200000; output_level = 200000},/obj/structure/cable/cyan{d2 = 4; icon_state = "0-4"},/obj/machinery/camera/xray/command{c_tag = "AI - Core"},/turf/simulated/floor/bluegrid,/area/ai)
+"bsT" = (/obj/machinery/power/sensor{name = "Powernet Sensor - AI Subgrid"; name_tag = "AI Subgrid"},/obj/structure/cable/cyan{d2 = 8; icon_state = "0-8"},/obj/structure/cable/cyan{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/bluegrid,/area/ai)
+"bsU" = (/obj/structure/cable/cyan{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled/dark,/area/ai)
"bsV" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 5},/obj/structure/flora/ausbushes/sparsegrass,/turf/simulated/floor/grass,/area/hydroponics/garden)
"bsW" = (/obj/machinery/door/airlock/medical{id_tag = "surgery_observation"; name = "Observation Room"; req_access = newlist()},/obj/machinery/holosign/surgery,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor/border_only,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/medical/surgeryobs)
"bsX" = (/turf/simulated/wall,/area/medical/medbay_primary_storage)
@@ -3661,10 +3668,12 @@
"bti" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/effect/floor_decal/corner/paleblue{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/sleeper)
"btj" = (/obj/machinery/camera/network/medbay{c_tag = "MED - Diagnostics Starboard"; dir = 1},/turf/simulated/floor/tiled/white,/area/medical/sleeper)
"btk" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/sleeper)
-"btl" = (/obj/effect/floor_decal/corner/paleblue{dir = 2},/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/medical/sleeper)
"btm" = (/obj/machinery/vending/medical,/obj/effect/floor_decal/corner/paleblue{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/sleeper)
"btn" = (/obj/effect/floor_decal/corner/mauve{dir = 8},/obj/machinery/button/remote/airlock{desc = "A remote control switch for the medbay foyer."; id = "GeneticsDoor"; name = "Door Control"; pixel_x = -26; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning)
+"bto" = (/obj/structure/table/rack,/obj/effect/floor_decal/corner/blue{dir = 10},/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/item/clothing/suit/armor/laserproof{pixel_x = 0; pixel_y = 0},/obj/machinery/door/window/brigdoor/northleft{name = "Laser Armor"; req_access = list(1)},/obj/item/clothing/gloves/arm_guard/laserproof,/obj/item/clothing/shoes/leg_guard/laserproof,/obj/item/clothing/head/helmet/laserproof,/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"btp" = (/obj/structure/table/rack,/obj/effect/floor_decal/corner/blue/full,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/item/clothing/suit/armor/laserproof{pixel_x = 0; pixel_y = 0},/obj/machinery/door/window/brigdoor/northleft{name = "Laser Armor"; req_access = list(1)},/obj/machinery/light,/obj/item/clothing/gloves/arm_guard/laserproof,/obj/item/clothing/shoes/leg_guard/laserproof,/obj/item/clothing/head/helmet/laserproof,/turf/simulated/floor/tiled/dark,/area/security/armoury)
"btq" = (/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning)
+"btr" = (/obj/structure/table/rack,/obj/effect/floor_decal/corner/blue/full{dir = 4},/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/item/clothing/suit/armor/laserproof{pixel_x = 0; pixel_y = 0},/obj/machinery/door/window/brigdoor/northleft{name = "Laser Armor"; req_access = list(1)},/obj/item/clothing/gloves/arm_guard/laserproof,/obj/item/clothing/shoes/leg_guard/laserproof,/obj/item/clothing/head/helmet/laserproof,/turf/simulated/floor/tiled/dark,/area/security/armoury)
"bts" = (/obj/structure/table/standard,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/effect/floor_decal/corner/lime{dir = 9},/obj/machinery/light,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology)
"btt" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology)
"btu" = (/obj/machinery/door/window/westright{name = "Virology Isolation Room One"; req_access = list(39)},/obj/machinery/door/firedoor/glass,/obj/effect/floor_decal/corner/lime{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology)
@@ -3708,10 +3717,10 @@
"bug" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/lab)
"buh" = (/obj/effect/floor_decal/corner/purple{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/rnd/lab)
"bui" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor/plating,/area/rnd/lab)
-"buj" = (/obj/machinery/light,/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
-"buk" = (/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
-"bul" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
-"bum" = (/obj/machinery/porta_turret{dir = 4},/obj/machinery/flasher{id = "AI"; pixel_x = 0; pixel_y = -24},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"buj" = (/obj/machinery/light,/turf/simulated/floor/bluegrid,/area/ai)
+"buk" = (/turf/simulated/floor/bluegrid,/area/ai)
+"bul" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/bluegrid,/area/ai)
+"bum" = (/obj/machinery/porta_turret{dir = 4},/obj/machinery/flasher{id = "AI"; pixel_x = 0; pixel_y = -24},/turf/simulated/floor/bluegrid,/area/ai)
"bun" = (/obj/structure/disposalpipe/segment,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_two)
"buo" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "medbayquar"; name = "Medbay Emergency Lockdown Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/reception)
"bup" = (/obj/structure/table/standard,/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/crew_quarters/cafeteria)
@@ -3722,11 +3731,9 @@
"buu" = (/obj/structure/filingcabinet/chestdrawer{name = "Medical Forms"},/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/effect/floor_decal/corner/paleblue{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/reception)
"buv" = (/obj/structure/filingcabinet/medical{desc = "A large cabinet with hard copy medical records."; name = "Medical Records"},/obj/machinery/alarm{pixel_y = 22},/obj/effect/floor_decal/corner/paleblue/full{dir = 1},/obj/structure/extinguisher_cabinet{pixel_x = 25},/turf/simulated/floor/tiled/white,/area/medical/reception)
"buw" = (/obj/structure/table/rack,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/clothing/accessory/stethoscope,/obj/item/clothing/accessory/stethoscope,/obj/item/clothing/accessory/stethoscope,/obj/item/clothing/accessory/stethoscope,/obj/item/clothing/accessory/stethoscope,/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/effect/floor_decal/corner/paleblue/full{dir = 8},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage)
-"bux" = (/obj/structure/table/standard,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/device/flashlight/pen,/obj/item/device/flashlight/pen,/obj/item/device/flashlight/pen,/obj/item/device/flashlight/pen,/obj/item/device/flashlight/pen,/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/effect/floor_decal/corner/paleblue{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage)
+"bux" = (/obj/structure/table/standard,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/device/flashlight/pen,/obj/item/device/flashlight/pen,/obj/item/device/flashlight/pen,/obj/item/device/flashlight/pen,/obj/item/device/flashlight/pen,/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/effect/floor_decal/corner/paleblue{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage)
"buy" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/beakers,/obj/item/weapon/storage/box/syringes{pixel_x = 4; pixel_y = 4},/obj/item/weapon/storage/box/syringes,/obj/machinery/alarm{pixel_y = 22},/obj/effect/floor_decal/corner/paleblue{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage)
"buz" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/gloves{pixel_x = 4; pixel_y = 4},/obj/item/weapon/storage/box/masks{pixel_y = 0},/obj/effect/floor_decal/corner/paleblue{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage)
-"buA" = (/obj/structure/closet/secure_closet/medical3,/obj/effect/floor_decal/corner/paleblue{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage)
-"buB" = (/obj/structure/closet/secure_closet/medical3,/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = 30},/obj/effect/floor_decal/corner/paleblue/full{dir = 1},/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage)
"buC" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/medical/medbay_primary_storage)
"buD" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/sleeper)
"buE" = (/obj/structure/disposalpipe/junction{dir = 1; icon_state = "pipe-j2"},/turf/simulated/floor/tiled/white,/area/medical/sleeper)
@@ -3734,7 +3741,7 @@
"buG" = (/obj/machinery/bodyscanner{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/sleeper)
"buH" = (/obj/machinery/body_scanconsole,/turf/simulated/floor/tiled/white,/area/medical/sleeper)
"buI" = (/obj/effect/floor_decal/corner/pink{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/sleeper)
-"buJ" = (/obj/structure/extinguisher_cabinet{pixel_x = 25},/obj/effect/floor_decal/corner/paleblue{dir = 2},/obj/structure/disposalpipe/segment,/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/turf/simulated/floor/tiled/white,/area/medical/sleeper)
+"buJ" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/tiled/freezer,/area/medical/surgery_storage)
"buK" = (/turf/simulated/wall,/area/crew_quarters/heads/cmo)
"buL" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0; dir = 1; icon_state = "shutter0"; id = "cmooffice"; name = "CMO Office Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/crew_quarters/heads/cmo)
"buM" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0; dir = 1; icon_state = "shutter0"; id = "cmooffice"; name = "CMO Office Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/crew_quarters/heads/cmo)
@@ -3759,7 +3766,6 @@
"bvf" = (/obj/machinery/door/blast/regular{id = "trash"; name = "disposal mass driver"},/turf/simulated/floor/airless,/area/maintenance/disposal)
"bvg" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/disposal)
"bvh" = (/obj/machinery/disposal/deliveryChute{dir = 4},/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor,/area/maintenance/disposal)
-"bvi" = (/obj/machinery/conveyor{dir = 4; id = "garbage"},/obj/machinery/light/small{dir = 1},/obj/structure/plasticflaps{opacity = 0},/turf/simulated/floor,/area/maintenance/disposal)
"bvj" = (/obj/machinery/conveyor{dir = 4; id = "garbage"},/obj/structure/sign/vacuum{pixel_x = 0; pixel_y = 32},/turf/simulated/floor,/area/maintenance/disposal)
"bvk" = (/obj/effect/decal/cleanable/cobweb2,/obj/machinery/conveyor{dir = 4; id = "garbage"},/turf/simulated/floor,/area/maintenance/disposal)
"bvl" = (/obj/effect/floor_decal/corner/purple/full,/obj/machinery/newscaster{pixel_x = -28; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/rnd/research)
@@ -3780,7 +3786,7 @@
"bvA" = (/obj/effect/floor_decal/corner/purple{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/lab)
"bvB" = (/obj/structure/bed/chair/office/light,/obj/effect/floor_decal/corner/purple{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/landmark/start{name = "Scientist"},/turf/simulated/floor/tiled/white,/area/rnd/lab)
"bvC" = (/obj/structure/table/standard{name = "plastic table frame"},/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/clipboard,/obj/item/weapon/folder/white,/obj/item/weapon/pen,/obj/effect/floor_decal/corner/purple/full{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/rnd/lab)
-"bvD" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/wall/r_wall,/area/turret_protected/ai)
+"bvD" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/wall/r_wall,/area/ai)
"bvE" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled,/area/crew_quarters/cafeteria)
"bvF" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/flora/pottedplant{icon_state = "plant-22"},/turf/simulated/floor/tiled/dark,/area/hallway/primary/central_two)
"bvG" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 1},/obj/structure/flora/ausbushes/brflowers,/obj/machinery/light,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/grass,/area/hydroponics/garden)
@@ -3794,11 +3800,10 @@
"bvO" = (/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,/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "medbayquar"; name = "Medbay Emergency Lockdown Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/reception)
"bvP" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/obj/structure/flora/pottedplant{icon_state = "plant-22"},/turf/simulated/floor/tiled/dark,/area/hallway/primary/central_two)
"bvQ" = (/obj/effect/floor_decal/corner/paleblue{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/reception)
-"bvR" = (/obj/item/device/radio/intercom{broadcasting = 0; dir = 4; listening = 1; name = "Captain's Intercom"; pixel_x = 21; pixel_y = 0},/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/crew_quarters/captain)
+"bvR" = (/obj/structure/closet/secure_closet/CMO,/obj/effect/floor_decal/corner/paleblue{dir = 6},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo)
"bvS" = (/turf/simulated/floor/tiled/white,/area/medical/reception)
"bvT" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/white,/area/medical/reception)
"bvU" = (/obj/effect/floor_decal/corner/pink{dir = 10},/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; dir = 2; frequency = 1487; icon_state = "intercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = -21},/turf/simulated/floor/tiled/white,/area/medical/surgery)
-"bvV" = (/obj/structure/table/standard,/obj/item/roller,/obj/item/roller{pixel_y = 8},/obj/item/roller{pixel_y = 16},/obj/effect/floor_decal/corner/paleblue{dir = 9},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage)
"bvW" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage)
"bvX" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage)
"bvY" = (/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage)
@@ -3845,7 +3850,6 @@
"bwN" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass_research{name = "Research Hallway"; req_access = list(47)},/turf/simulated/floor/tiled/white,/area/rnd/research)
"bwO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/rnd/research)
"bwP" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass_research{name = "Research Hallway"; req_access = list(47)},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/rnd/research)
-"bwQ" = (/obj/machinery/atm{pixel_x = -25},/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = -32},/obj/structure/flora/pottedplant{tag = "icon-plant-01"; icon_state = "plant-01"},/turf/simulated/floor/tiled,/area/crew_quarters/cafeteria)
"bwR" = (/obj/machinery/light,/turf/simulated/floor/wood,/area/rnd/research)
"bwS" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/rnd/research)
"bwT" = (/obj/machinery/vending/snack,/turf/simulated/floor/wood,/area/rnd/research)
@@ -3864,7 +3868,7 @@
"bxg" = (/obj/structure/bed/chair/office/light{dir = 8},/obj/effect/landmark/start{name = "Medical Doctor"},/turf/simulated/floor/tiled/white,/area/medical/reception)
"bxh" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/reception)
"bxi" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 36; pixel_y = 0},/obj/effect/floor_decal/corner/paleblue{dir = 4},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/tiled/white,/area/medical/reception)
-"bxj" = (/obj/effect/floor_decal/corner/paleblue{dir = 1},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -22},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage)
+"bxj" = (/obj/machinery/light_switch{pixel_x = 32; pixel_y = 2},/obj/effect/floor_decal/corner/pink/full{dir = 4},/obj/machinery/button/holosign{pixel_x = 24; pixel_y = 2},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/surgery2)
"bxk" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage)
"bxl" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/adv{pixel_x = 5; pixel_y = 5},/obj/item/weapon/storage/firstaid/adv,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage)
"bxm" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/toxin{pixel_x = 5; pixel_y = 5},/obj/item/weapon/storage/firstaid/toxin{pixel_x = 0; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage)
@@ -3879,8 +3883,8 @@
"bxv" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo)
"bxw" = (/obj/structure/table/reinforced,/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo)
"bxx" = (/obj/structure/table/reinforced,/obj/machinery/computer/skills{pixel_y = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo)
-"bxy" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/structure/closet/l3closet/virology,/obj/machinery/power/apc{cell_type = /obj/item/weapon/cell/super; dir = 8; name = "west bump"; pixel_x = -24},/obj/item/clothing/mask/gas,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/tiled/white,/area/medical/virology)
-"bxz" = (/obj/structure/closet/secure_closet/CMO,/obj/item/clothing/mask/gas,/obj/effect/floor_decal/corner/paleblue{dir = 6},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo)
+"bxy" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/obj/item/weapon/clipboard,/obj/item/weapon/stamp/cmo,/obj/item/weapon/pen,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/item/weapon/folder/white_cmo,/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo)
+"bxz" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/structure/closet/l3closet/virology,/obj/machinery/power/apc{cell_type = /obj/item/weapon/cell/super; dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/tiled/white,/area/medical/virology)
"bxA" = (/obj/machinery/door/airlock/medical{name = "Morgue"; req_access = list(6,5)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/medical/genetics_cloning)
"bxB" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/medical/virology)
"bxC" = (/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,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/medical/virology)
@@ -3947,7 +3951,7 @@
"byL" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/airlock/command{id_tag = "cmodoor"; name = "CMO's Office"; req_access = list(40)},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo)
"byM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo)
"byN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo)
-"byO" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/obj/item/weapon/clipboard,/obj/item/weapon/folder/white{pixel_y = 0},/obj/item/weapon/stamp/cmo,/obj/item/weapon/pen,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo)
+"byO" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/effect/floor_decal/corner/blue{dir = 5},/obj/machinery/computer/guestpass{pixel_x = 0; pixel_y = 30},/obj/item/weapon/folder/blue_hop,/obj/item/weapon/pen,/turf/simulated/floor/tiled,/area/crew_quarters/heads/hop)
"byP" = (/obj/structure/bed/chair/office/light{dir = 8},/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for shutters."; id = "medbayquar"; name = "Medbay Emergency Lockdown Control"; pixel_x = -28; pixel_y = 36; req_access = list(5)},/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for shutters."; id = "virologyquar"; name = "Virology Emergency Lockdown Control"; pixel_x = -28; pixel_y = 28; req_access = list(5)},/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for shutters."; id = "cmooffice"; name = "CMO Privacy Shutters"; pixel_x = -38; pixel_y = 28},/obj/machinery/button/remote/airlock{desc = "A remote control switch for the CMO's office."; id = "cmodoor"; name = "CMO Office Door Control"; pixel_x = -38; pixel_y = 36},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/landmark/start{name = "Chief Medical Officer"},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo)
"byQ" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo)
"byR" = (/obj/structure/table/reinforced,/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/item/device/radio{frequency = 1487; name = "Medbay Emergency Radio Link"},/obj/item/device/megaphone,/obj/effect/floor_decal/corner/paleblue{dir = 6},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo)
@@ -3968,9 +3972,9 @@
"bzg" = (/obj/effect/floor_decal/corner/lime{dir = 1},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/tiled/white,/area/medical/virology)
"bzh" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal,/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology)
"bzi" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/embedded_controller/radio/airlock/access_controller{id_tag = "virologyq_airlock_control"; name = "Virology Quarantine Access Console"; pixel_x = 22; pixel_y = 0; tag_exterior_door = "virologyq_airlock_exterior"; tag_interior_door = "virologyq_airlock_interior"},/obj/effect/floor_decal/industrial/warning/corner,/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor/tiled/white,/area/medical/virology)
-"bzj" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "virologyq_airlock_control"; name = "Virology Quarantine Access Button"; pixel_x = -28; pixel_y = 0; req_access = list(39)},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"bzj" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/surgery_hallway)
"bzk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology)
-"bzl" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/obj/structure/closet/l3closet/virology,/obj/item/clothing/mask/gas,/obj/machinery/camera/network/medbay{c_tag = "MED - Virology Quarantine Airlock"; dir = 8},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"bzl" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/obj/structure/closet/l3closet/virology,/obj/machinery/camera/network/medbay{c_tag = "MED - Virology Quarantine Airlock"; dir = 8},/turf/simulated/floor/tiled/white,/area/medical/virology)
"bzm" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/maintenance/auxsolarport)
"bzn" = (/turf/simulated/wall/r_wall,/area/maintenance/auxsolarport)
"bzo" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "arrivals_inner"; locked = 1; name = "Engineering External Access"; req_access = list(13)},/turf/simulated/floor,/area/maintenance/research)
@@ -4048,7 +4052,7 @@
"bAI" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/medical/morgue)
"bAJ" = (/obj/structure/morgue{tag = "icon-morgue1 (WEST)"; icon_state = "morgue1"; dir = 8},/obj/effect/floor_decal/corner/paleblue{dir = 6},/turf/simulated/floor/tiled,/area/medical/morgue)
"bAK" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/maintenance/medbay_fore)
-"bAL" = (/obj/effect/floor_decal/corner/lime{dir = 10},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"bAL" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/disposalpipe/segment,/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor/tiled/white,/area/medical/surgery_hallway)
"bAM" = (/obj/machinery/embedded_controller/radio/airlock/access_controller{id_tag = "virology_airlock_control"; name = "Virology Access Console"; pixel_x = 8; pixel_y = -22; tag_exterior_door = "virology_airlock_exterior"; tag_interior_door = "virology_airlock_interior"},/obj/effect/floor_decal/industrial/warning/corner,/obj/effect/floor_decal/corner/lime{dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology)
"bAN" = (/obj/effect/floor_decal/industrial/warning,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/black,/obj/structure/disposalpipe/junction/yjunction,/turf/simulated/floor/tiled/white,/area/medical/virology)
"bAO" = (/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for shutters."; id = "virologyquar"; name = "Virology Emergency Lockdown Control"; pixel_x = 0; pixel_y = -28; req_access = list(5)},/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/obj/effect/floor_decal/corner/lime,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 6},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology)
@@ -4061,7 +4065,7 @@
"bAV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/medical/virology)
"bAW" = (/obj/effect/floor_decal/industrial/warning/corner,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/tiled/white,/area/medical/virology)
"bAX" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/structure/closet/secure_closet/personal/patient,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/tiled/white,/area/medical/virology)
-"bAY" = (/obj/structure/cable/yellow,/turf/simulated/floor/airless,/area/solar/auxport)
+"bAY" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/airless,/area/solar/auxport)
"bAZ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/auxsolarport)
"bBa" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/maintenance/auxsolarport)
"bBb" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/maintenance/auxsolarport)
@@ -4159,13 +4163,12 @@
"bCP" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled,/area/medical/morgue)
"bCQ" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/green,/obj/effect/floor_decal/corner/lime/full,/obj/machinery/atmospherics/pipe/simple/hidden/black,/turf/simulated/floor/tiled/white,/area/medical/virology)
"bCR" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/wall/r_wall,/area/medical/virology)
-"bCS" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/structure/closet/l3closet/virology,/obj/item/clothing/mask/gas,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"bCS" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/structure/closet/l3closet/virology,/turf/simulated/floor/tiled/white,/area/medical/virology)
"bCT" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/structure/closet/secure_closet/personal/patient,/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/medical/virology)
"bCU" = (/obj/machinery/power/tracker,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/airless,/area/solar/auxport)
"bCV" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/airless,/area/solar/auxport)
-"bCW" = (/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/airless,/area/solar/auxport)
-"bCX" = (/turf/simulated/floor/airless,/area/solar/auxport)
-"bCY" = (/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/airless,/area/solar/auxport)
+"bCW" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless,/area/solar/port)
+"bCX" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/airless,/area/solar/port)
"bCZ" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "solar_tool_airlock"; name = "exterior access button"; pixel_x = 26; pixel_y = -26; req_access = list(11,13)},/turf/simulated/floor/airless,/area/solar/auxport)
"bDa" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "solar_tool_outer"; locked = 1; name = "Engineering External Access"; req_access = list(11,13)},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/maintenance/auxsolarport)
"bDb" = (/obj/effect/floor_decal/industrial/warning/full,/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "solar_tool_pump"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1379; id_tag = "solar_tool_airlock"; pixel_x = 0; pixel_y = 28; req_access = list(13); tag_airpump = "solar_tool_pump"; tag_chamber_sensor = "solar_tool_sensor"; tag_exterior_door = "solar_tool_outer"; tag_interior_door = "solar_tool_inner"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "solar_tool_sensor"; pixel_x = 0; pixel_y = -26},/turf/simulated/floor,/area/maintenance/auxsolarport)
@@ -4249,7 +4252,7 @@
"bEB" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/effect/floor_decal/corner/paleblue{dir = 4},/obj/structure/disposalpipe/segment,/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/turf/simulated/floor/tiled/white,/area/medical/sleeper)
"bEC" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "cmooffice"; name = "CMO Office Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/crew_quarters/heads/cmo)
"bED" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/blast/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/crew_quarters/heads/cmo)
-"bEE" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/effect/floor_decal/corner/paleblue/full{dir = 8},/turf/simulated/floor/tiled,/area/medical/morgue)
+"bEE" = (/obj/machinery/button/holosign{pixel_x = 24; pixel_y = 2},/obj/machinery/light_switch{pixel_x = 32; pixel_y = 2},/obj/effect/floor_decal/corner/pink/full{dir = 4},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/surgery)
"bEF" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/effect/floor_decal/corner/paleblue{dir = 1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/medical/morgue)
"bEG" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/medical/morgue)
"bEH" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor/tiled,/area/medical/morgue)
@@ -4257,7 +4260,6 @@
"bEJ" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/obj/structure/closet/wardrobe/virology_white,/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "virology_airlock_control"; name = "Virology Access Button"; pixel_x = 8; pixel_y = 28; req_access = list(39)},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology)
"bEK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 9},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/virology)
"bEL" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/machinery/shower{dir = 8; icon_state = "shower"; pixel_x = -5; pixel_y = 0},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor/tiled/steel,/area/medical/virology)
-"bEM" = (/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/airless,/area/solar/auxport)
"bEN" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/maintenance/auxsolarport)
"bEO" = (/obj/structure/cable/yellow,/obj/machinery/power/solar_control{id = "auxsolareast"; name = "Fore Port Solar Control"; track = 0},/turf/simulated/floor,/area/maintenance/auxsolarport)
"bEP" = (/obj/item/weapon/stool,/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/item/stack/cable_coil/yellow,/obj/item/stack/cable_coil/yellow,/turf/simulated/floor,/area/maintenance/auxsolarport)
@@ -4367,19 +4369,19 @@
"bGP" = (/obj/effect/floor_decal/corner/purple{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/rdoffice)
"bGQ" = (/obj/structure/table/standard,/obj/item/device/taperecorder{pixel_x = -3},/obj/item/device/paicard{pixel_x = 4},/obj/item/weapon/circuitboard/teleporter,/obj/item/weapon/circuitboard/aicore{pixel_x = -2; pixel_y = 4},/obj/effect/floor_decal/corner/purple/full{dir = 1},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 27},/turf/simulated/floor/tiled/white,/area/rnd/rdoffice)
"bGR" = (/obj/machinery/atmospherics/pipe/simple/hidden/black,/turf/simulated/wall,/area/medical/virology)
-"bGS" = (/obj/effect/floor_decal/corner/pink{dir = 5},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
-"bGT" = (/obj/effect/floor_decal/corner/pink{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
-"bGU" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"bGS" = (/obj/effect/floor_decal/corner/pink{dir = 4},/obj/structure/closet/wardrobe/robotics_black,/obj/item/device/radio/headset/headset_sci{pixel_x = -3},/obj/item/device/radio/headset/headset_sci{pixel_x = -3},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"bGT" = (/obj/effect/floor_decal/corner/pink{dir = 1},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"bGU" = (/obj/effect/floor_decal/corner/pink{dir = 5},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/assembly/robotics)
"bGV" = (/obj/machinery/computer/rdconsole/robotics,/obj/machinery/alarm{pixel_y = 25},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
-"bGW" = (/obj/item/weapon/book/manual/robotics_cyborgs{pixel_x = 2; pixel_y = 5},/obj/item/weapon/storage/belt/utility,/obj/machinery/requests_console{department = "Robotics"; departmentType = 2; name = "Robotics RC"; pixel_y = 30},/obj/machinery/light{dir = 1},/obj/item/weapon/storage/belt/utility,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/structure/table/standard{name = "plastic table frame"},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
-"bGX" = (/obj/machinery/r_n_d/circuit_imprinter,/obj/item/weapon/reagent_containers/glass/beaker/sulphuric,/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"bGW" = (/obj/machinery/autolathe,/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"bGX" = (/obj/machinery/r_n_d/circuit_imprinter,/turf/simulated/floor/tiled/white,/area/assembly/robotics)
"bGY" = (/turf/simulated/wall/r_wall,/area/assembly/robotics)
"bGZ" = (/obj/structure/table/reinforced,/obj/machinery/door/window/southright{name = "Robotics Desk"; req_access = list(29)},/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/folder/white,/obj/item/weapon/pen,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/tiled,/area/assembly/robotics)
"bHa" = (/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/tiled,/area/hallway/primary/central_four)
"bHb" = (/obj/effect/floor_decal/industrial/loading{tag = "icon-loadingarea (WEST)"; icon_state = "loadingarea"; dir = 8},/turf/simulated/floor/tiled,/area/hallway/primary/central_four)
"bHc" = (/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/hallway/primary/central_four)
"bHd" = (/obj/structure/table/reinforced,/obj/machinery/computer/skills,/obj/effect/floor_decal/corner/blue/full{dir = 8},/turf/simulated/floor/tiled,/area/crew_quarters/heads/hop)
-"bHe" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/folder/blue,/obj/item/weapon/pen,/obj/effect/floor_decal/corner/blue{dir = 5},/obj/machinery/computer/guestpass{pixel_x = 0; pixel_y = 30},/turf/simulated/floor/tiled,/area/crew_quarters/heads/hop)
+"bHe" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/structure/closet/l3closet/virology,/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/medical/virology)
"bHf" = (/obj/structure/filingcabinet/chestdrawer,/obj/effect/floor_decal/corner/blue{dir = 5},/obj/machinery/newscaster/security_unit{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/tiled,/area/crew_quarters/heads/hop)
"bHg" = (/obj/machinery/account_database,/obj/effect/floor_decal/corner/blue/full{dir = 1},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/heads/hop)
"bHh" = (/turf/simulated/wall,/area/bridge_hallway)
@@ -4424,15 +4426,14 @@
"bHU" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 4},/turf/simulated/floor/tiled/white,/area/medical/sleeper)
"bHV" = (/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/sleeper)
"bHW" = (/obj/machinery/atmospherics/pipe/manifold/visible,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/sleeper)
-"bHX" = (/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/sleeper)
+"bHX" = (/obj/effect/floor_decal/corner/paleblue{dir = 2},/obj/structure/disposalpipe/segment,/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/sleeper)
"bHY" = (/obj/structure/filingcabinet/chestdrawer{desc = "A large drawer filled with autopsy reports."; name = "Autopsy Reports"},/obj/machinery/light_switch{pixel_x = -26; pixel_y = 0},/turf/simulated/floor/tiled,/area/medical/morgue)
"bHZ" = (/obj/structure/bed/chair/office/dark{dir = 1},/turf/simulated/floor/tiled,/area/medical/morgue)
"bIa" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/medical/morgue)
"bIb" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/medical/morgue)
"bIc" = (/obj/machinery/computer/crew,/obj/effect/floor_decal/corner/paleblue/full{dir = 4},/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; dir = 2; frequency = 1487; icon_state = "intercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = -21},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo)
-"bId" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/structure/closet/l3closet/virology,/obj/item/clothing/mask/gas,/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"bId" = (/obj/structure/table/standard,/obj/item/weapon/stamp/rd{pixel_x = 3; pixel_y = -2},/obj/item/weapon/reagent_containers/food/drinks/jar,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/item/weapon/folder/white_rd,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice)
"bIe" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/medical/virology)
-"bIf" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor/tiled/white,/area/medical/virology)
"bIg" = (/obj/structure/closet/crate,/obj/item/weapon/tank/emergency_oxygen/engi,/obj/item/weapon/tank/emergency_oxygen/double,/turf/simulated/floor/plating,/area/maintenance/research)
"bIh" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/obj/machinery/meter,/turf/simulated/floor,/area/maintenance/research)
"bIi" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/maintenance/research)
@@ -4445,15 +4446,15 @@
"bIp" = (/obj/structure/bed/chair,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/rnd/rdoffice)
"bIq" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/rdoffice)
"bIr" = (/obj/effect/floor_decal/corner/purple{dir = 6},/obj/machinery/keycard_auth{pixel_x = 24; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/rnd/rdoffice)
-"bIs" = (/obj/structure/table/standard,/obj/item/stack/material/plasteel{amount = 10},/obj/item/stack/cable_coil,/obj/item/device/flash,/turf/simulated/floor/tiled/white,/area/assembly/robotics)
-"bIt" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"bIs" = (/obj/item/weapon/book/manual/robotics_cyborgs{pixel_x = 2; pixel_y = 5},/obj/machinery/requests_console{department = "Robotics"; departmentType = 2; name = "Robotics RC"; pixel_y = 30},/obj/machinery/light{dir = 1},/obj/structure/table/standard{name = "plastic table frame"},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"bIt" = (/obj/machinery/light_switch{pixel_x = -23; pixel_y = 0},/obj/structure/filingcabinet/chestdrawer,/turf/simulated/floor/tiled/white,/area/assembly/robotics)
"bIu" = (/turf/simulated/floor/tiled/white,/area/assembly/robotics)
"bIv" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/white,/area/assembly/robotics)
"bIw" = (/obj/structure/bed/chair/office/light{dir = 1},/obj/effect/landmark/start{name = "Roboticist"},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
"bIx" = (/obj/structure/table/steel,/obj/item/weapon/autopsy_scanner,/obj/item/weapon/scalpel,/obj/effect/floor_decal/corner/paleblue/full{dir = 8},/obj/machinery/light{dir = 1},/obj/item/weapon/cautery,/turf/simulated/floor/tiled,/area/medical/morgue)
-"bIy" = (/obj/effect/floor_decal/corner/pink{dir = 5},/obj/structure/table/standard,/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/machinery/recharger{pixel_y = 0},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"bIy" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
"bIz" = (/obj/item/weapon/stool/padded,/obj/effect/floor_decal/corner/pink{dir = 5},/obj/effect/landmark/start{name = "Roboticist"},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
-"bIA" = (/obj/structure/filingcabinet/chestdrawer,/obj/effect/floor_decal/corner/pink/full{dir = 1},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"bIA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
"bIB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/hallway/primary/central_four)
"bIC" = (/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/hallway/primary/central_four)
"bID" = (/obj/structure/noticeboard{pixel_y = 27},/obj/machinery/door/firedoor/border_only,/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "hop_office_desk"; name = "HoP Office Privacy Shutters"; opacity = 0},/obj/machinery/door/window/northleft{dir = 8; icon_state = "left"; name = "Reception Window"},/obj/machinery/door/window/brigdoor/eastright{name = "Head of Personnel's Desk"; req_access = list(57)},/obj/structure/table/reinforced,/turf/simulated/floor/tiled,/area/crew_quarters/heads/hop)
@@ -4463,7 +4464,6 @@
"bIH" = (/obj/effect/floor_decal/corner/blue{dir = 5},/obj/machinery/requests_console{announcementConsole = 1; department = "Bridge"; departmentType = 5; name = "Bridge RC"; pixel_y = 28},/turf/simulated/floor/tiled,/area/crew_quarters/heads/hop)
"bII" = (/obj/structure/table/reinforced,/obj/item/weapon/packageWrap,/obj/item/weapon/hand_labeler,/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = 30},/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/crew_quarters/heads/hop)
"bIJ" = (/obj/structure/table/reinforced,/obj/machinery/photocopier/faxmachine{department = "Head of Personnel's Office"},/obj/effect/floor_decal/corner/blue/full{dir = 1},/obj/machinery/ai_status_display{pixel_x = 32; pixel_y = 0},/turf/simulated/floor/tiled,/area/crew_quarters/heads/hop)
-"bIK" = (/obj/effect/floor_decal/corner/blue{dir = 9},/turf/simulated/floor/tiled,/area/bridge_hallway)
"bIL" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/bridge_hallway)
"bIM" = (/obj/effect/floor_decal/corner/blue{dir = 6},/obj/structure/table/standard,/obj/item/weapon/storage/box/cups,/turf/simulated/floor/tiled,/area/bridge_hallway)
"bIN" = (/obj/machinery/cell_charger,/obj/structure/table/steel,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/substation/command)
@@ -4496,7 +4496,7 @@
"bJo" = (/obj/effect/floor_decal/corner/paleblue{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/sleeper)
"bJp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/medical/sleeper)
"bJq" = (/obj/structure/sign/goldenplaque{desc = "Done No Harm."; name = "Best Doctor 2552"; pixel_y = -32},/obj/effect/floor_decal/corner/paleblue,/turf/simulated/floor/tiled/white,/area/medical/sleeper)
-"bJr" = (/obj/structure/closet,/obj/item/device/flashlight,/obj/effect/decal/cleanable/cobweb2,/obj/item/weapon/storage/backpack/satchel_vir,/obj/item/weapon/storage/backpack/virology,/turf/simulated/floor/plating,/area/maintenance/medbay_fore)
+"bJr" = (/obj/structure/closet,/obj/item/device/flashlight,/obj/effect/decal/cleanable/cobweb2,/obj/item/weapon/storage/backpack/satchel/vir,/obj/item/weapon/storage/backpack/virology,/turf/simulated/floor/plating,/area/maintenance/medbay_fore)
"bJs" = (/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/effect/floor_decal/corner/paleblue{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/sleeper)
"bJt" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/corner/paleblue{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/sleeper)
"bJu" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/corner/paleblue{dir = 10},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/medical/sleeper)
@@ -4524,15 +4524,15 @@
"bJQ" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/rnd/research)
"bJR" = (/obj/structure/grille,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced/polarized{dir = 8},/obj/structure/window/reinforced/polarized,/obj/structure/window/reinforced/polarized{dir = 4},/turf/simulated/floor/plating,/area/rnd/rdoffice)
"bJS" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/purple{dir = 9},/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/device/megaphone,/obj/item/weapon/pen,/obj/item/weapon/paper/monitorkey,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice)
-"bJT" = (/obj/structure/table/standard,/obj/item/weapon/folder/white,/obj/item/weapon/stamp/rd{pixel_x = 3; pixel_y = -2},/obj/item/weapon/reagent_containers/food/drinks/jar,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled/white,/area/rnd/rdoffice)
+"bJT" = (/obj/machinery/meter,/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/machinery/atmospherics/pipe/manifold/hidden/cyan,/obj/structure/door_assembly/door_assembly_com,/turf/simulated/floor/plating,/area/maintenance/medbay_aft)
"bJU" = (/obj/structure/table/standard,/obj/machinery/computer/skills,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/rnd/rdoffice)
"bJV" = (/obj/effect/floor_decal/corner/purple{dir = 6},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/machinery/light_switch{pixel_x = 36; pixel_y = 0},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/tiled/white,/area/rnd/rdoffice)
-"bJW" = (/obj/effect/floor_decal/corner/pink{dir = 4},/obj/machinery/light_switch{pixel_x = -23; pixel_y = 0},/obj/structure/closet/wardrobe/robotics_black,/turf/simulated/floor/tiled/white,/area/assembly/robotics)
-"bJX" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
-"bJY" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
-"bJZ" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
-"bKa" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
-"bKb" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = 6},/obj/item/clothing/head/welding{pixel_x = -3; pixel_y = 5},/obj/item/clothing/head/welding{pixel_x = -3; pixel_y = 5},/obj/item/weapon/storage/toolbox/mechanical,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/effect/floor_decal/corner/pink{dir = 6},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"bJW" = (/obj/effect/floor_decal/corner/pink{dir = 5},/obj/structure/table/standard,/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/machinery/recharger{pixel_y = 0},/obj/item/device/flash,/obj/item/device/flash,/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"bJX" = (/obj/effect/floor_decal/corner/pink{dir = 4},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/table/standard,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/item/weapon/hand_labeler,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/item/weapon/reagent_containers/glass/beaker/sulphuric,/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"bJY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/closet{name = "materials"},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/glass{amount = 50; pixel_x = -2; pixel_y = 2},/obj/item/stack/material/glass{amount = 50; pixel_x = -2; pixel_y = 2},/obj/item/stack/material/glass{amount = 50; pixel_x = -2; pixel_y = 2},/obj/item/stack/material/glass{amount = 50; pixel_x = -2; pixel_y = 2},/obj/item/stack/material/plasteel{amount = 10},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"bJZ" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"bKa" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/table/standard,/obj/machinery/computer/med_data/laptop,/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"bKb" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
"bKc" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor/plating,/area/assembly/robotics)
"bKd" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/hallway/primary/central_four)
"bKe" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/hallway/primary/central_four)
@@ -4569,7 +4569,7 @@
"bKJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/medical/chemistry)
"bKK" = (/obj/effect/floor_decal/corner/paleblue{dir = 10},/obj/machinery/newscaster{pixel_y = -30},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/reception)
"bKL" = (/obj/effect/floor_decal/corner/paleblue{dir = 10},/obj/machinery/camera/network/medbay{c_tag = "MED - Diagnostics Aft"; dir = 1},/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; dir = 2; frequency = 1487; icon_state = "intercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = -21},/turf/simulated/floor/tiled/white,/area/medical/sleeper)
-"bKM" = (/obj/structure/reagent_dispensers/water_cooler,/obj/effect/floor_decal/corner/paleblue{dir = 10},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/turf/simulated/floor/tiled/white,/area/medical/reception)
+"bKM" = (/obj/structure/sink/kitchen{pixel_y = 28},/obj/effect/floor_decal/corner/green{dir = 9},/turf/simulated/floor/tiled,/area/hydroponics/garden)
"bKN" = (/turf/simulated/wall,/area/medical/medbay_emt_bay)
"bKO" = (/obj/machinery/door/airlock/multi_tile/glass{id_tag = "MedbayFoyerPort"; req_access = list(5)},/obj/machinery/door/firedoor/glass,/obj/effect/floor_decal/corner/pink{dir = 9},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay)
"bKP" = (/obj/machinery/door/firedoor/glass,/obj/effect/floor_decal/corner/pink{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay)
@@ -4608,12 +4608,12 @@
"bLw" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice)
"bLx" = (/obj/effect/floor_decal/corner/purple{dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/rdoffice)
"bLy" = (/obj/structure/table/standard,/obj/item/weapon/cartridge/signal/science,/obj/item/weapon/cartridge/signal/science{pixel_x = -4; pixel_y = 2},/obj/item/weapon/cartridge/signal/science{pixel_x = 4; pixel_y = 6},/obj/item/clothing/glasses/welding/superior,/obj/machinery/requests_console{announcementConsole = 1; department = "Research Director's Desk"; departmentType = 5; name = "Research Director RC"; pixel_x = 30; pixel_y = -2},/turf/simulated/floor/tiled/dark,/area/rnd/rdoffice)
-"bLz" = (/obj/effect/floor_decal/corner/pink{dir = 4},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/table/standard,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/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/item/device/mmi/digital/posibrain,/obj/item/device/robotanalyzer,/turf/simulated/floor/tiled/white,/area/assembly/robotics)
-"bLA" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/assembly/robotics)
-"bLB" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled,/area/assembly/robotics)
-"bLC" = (/obj/machinery/mecha_part_fabricator,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bLz" = (/obj/structure/closet{name = "robotics parts"},/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000; pixel_x = 5; pixel_y = -5},/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000; pixel_x = 5; pixel_y = -5},/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000; pixel_x = 5; pixel_y = -5},/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000; pixel_x = 5; pixel_y = -5},/obj/item/weapon/storage/firstaid/regular{empty = 1; name = "First-Aid (empty)"},/obj/item/weapon/storage/firstaid/regular{empty = 1; name = "First-Aid (empty)"},/obj/item/weapon/storage/firstaid/regular{empty = 1; name = "First-Aid (empty)"},/obj/item/device/healthanalyzer,/obj/item/device/healthanalyzer,/obj/item/device/healthanalyzer,/obj/effect/floor_decal/corner/pink{dir = 6},/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/item/stack/cable_coil,/obj/item/stack/cable_coil,/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"bLA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/assembly/robotics)
+"bLB" = (/obj/structure/disposalpipe/segment,/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"bLC" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/table/standard,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/item/weapon/pen/red,/obj/item/weapon/pen/blue,/turf/simulated/floor/tiled/white,/area/assembly/robotics)
"bLD" = (/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 = list(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 = list(39)},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/black,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/medical/virology)
-"bLE" = (/obj/structure/reagent_dispensers/acid{density = 0; pixel_x = -32},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/camera/network/research{c_tag = "SCI - Robotics Port"; dir = 4},/obj/structure/table/standard,/obj/item/stack/material/glass{amount = 50; pixel_x = -2; pixel_y = 2},/obj/item/stack/material/glass{amount = 50; pixel_x = -2; pixel_y = 2},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"bLE" = (/obj/effect/floor_decal/corner/pink{dir = 6},/obj/structure/closet{name = "welding equipment"},/obj/item/clothing/head/welding{pixel_x = -3; pixel_y = 5},/obj/item/clothing/head/welding{pixel_x = -3; pixel_y = 5},/obj/item/clothing/glasses/welding,/obj/item/clothing/glasses/welding,/turf/simulated/floor/tiled/white,/area/assembly/robotics)
"bLF" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor/plating,/area/assembly/robotics)
"bLG" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/hallway/primary/central_four)
"bLH" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = -32},/obj/structure/cable/green,/obj/structure/window/reinforced/polarized,/obj/structure/window/reinforced/polarized{dir = 4},/obj/structure/window/reinforced/polarized{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/heads/hop)
@@ -4705,7 +4705,7 @@
"bNp" = (/turf/simulated/floor/tiled,/area/assembly/robotics)
"bNq" = (/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/assembly/robotics)
"bNr" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled,/area/assembly/robotics)
-"bNs" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bNs" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/assembly/robotics)
"bNt" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_four)
"bNu" = (/obj/structure/closet/secure_closet/hop2,/obj/effect/floor_decal/corner/blue{dir = 9},/turf/simulated/floor/tiled,/area/crew_quarters/heads/hop)
"bNv" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/folder/blue,/obj/item/weapon/folder/red,/obj/item/weapon/pen,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/carpet,/area/crew_quarters/heads/hop)
@@ -4714,11 +4714,10 @@
"bNy" = (/obj/effect/floor_decal/corner/blue,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/tiled,/area/crew_quarters/heads/hop)
"bNz" = (/obj/effect/floor_decal/corner/blue{dir = 8},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/bridge_hallway)
"bNA" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled,/area/bridge_hallway)
-"bNB" = (/obj/effect/floor_decal/corner/blue,/obj/structure/reagent_dispensers/water_cooler,/turf/simulated/floor/tiled,/area/bridge_hallway)
+"bNB" = (/obj/effect/floor_decal/corner/pink{dir = 10},/obj/structure/closet/secure_closet/paramedic,/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay)
"bNC" = (/turf/simulated/wall/r_wall,/area/crew_quarters/captain)
"bND" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen)
"bNE" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen)
-"bNF" = (/obj/structure/table/marble,/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/item/weapon/packageWrap,/obj/item/weapon/reagent_containers/food/condiment/enzyme{layer = 5},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen)
"bNG" = (/obj/structure/table/woodentable,/obj/machinery/light,/obj/item/weapon/reagent_containers/food/condiment/small/sugar,/obj/effect/floor_decal/corner/brown{dir = 10},/turf/simulated/floor/tiled/white,/area/crew_quarters/coffee_shop)
"bNH" = (/obj/structure/sink/kitchen{pixel_y = 28},/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen)
"bNI" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/structure/table/marble,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen)
@@ -4739,7 +4738,7 @@
"bNX" = (/obj/effect/floor_decal/corner/beige{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/chemistry)
"bNY" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/corner/beige{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/chemistry)
"bNZ" = (/obj/effect/floor_decal/corner/green{dir = 9},/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = -32},/obj/structure/table/standard,/obj/item/weapon/storage/box/syringes,/obj/item/weapon/storage/box/gloves{pixel_x = 4; pixel_y = 4},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
-"bOa" = (/obj/structure/closet/secure_closet/paramedic,/obj/item/clothing/accessory/storage/black_vest,/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay)
+"bOa" = (/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/obj/structure/closet/l3closet/medical,/turf/simulated/floor/tiled/dark,/area/medical/biostorage)
"bOb" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/flora/pottedplant{icon_state = "plant-22"},/turf/simulated/floor/tiled,/area/quartermaster/foyer)
"bOc" = (/obj/machinery/smartfridge/secure/medbay{req_one_access = list(33,66)},/turf/simulated/wall/r_wall,/area/medical/chemistry)
"bOd" = (/obj/structure/table/glass,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/effect/floor_decal/corner/paleblue{dir = 5},/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; dir = 1; frequency = 1487; icon_state = "intercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = 21},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
@@ -4801,10 +4800,10 @@
"bPh" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/tiled/white,/area/rnd/rdoffice)
"bPi" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/rdoffice)
"bPj" = (/obj/structure/closet/secure_closet/RD,/turf/simulated/floor/tiled/dark,/area/rnd/rdoffice)
-"bPk" = (/obj/structure/table/standard,/obj/item/weapon/circular_saw,/obj/item/weapon/scalpel{pixel_y = 12},/obj/item/weapon/hemostat,/obj/item/weapon/retractor,/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/structure/window/reinforced/tinted{dir = 1},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"bPk" = (/obj/structure/reagent_dispensers/acid{density = 0; pixel_x = -32},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/camera/network/research{c_tag = "SCI - Robotics Port"; dir = 4},/obj/structure/table/standard,/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/item/weapon/storage/box/bodybags{pixel_x = -1; pixel_y = -2},/turf/simulated/floor/tiled,/area/assembly/robotics)
"bPl" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
"bPm" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
-"bPn" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/light{dir = 8},/obj/structure/table/standard,/obj/item/weapon/crowbar,/obj/item/device/radio/headset/headset_sci{pixel_x = -3},/obj/item/device/radio/headset/headset_sci{pixel_x = -3},/obj/item/clothing/glasses/welding,/obj/item/clothing/glasses/welding,/obj/item/device/multitool{pixel_x = 3},/obj/item/device/multitool{pixel_x = 3},/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bPn" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/mecha_part_fabricator,/turf/simulated/floor/tiled,/area/assembly/robotics)
"bPo" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/hallway/primary/central_four)
"bPp" = (/obj/effect/floor_decal/corner/blue{dir = 1},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/tiled,/area/crew_quarters/heads/hop)
"bPq" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/carpet,/area/crew_quarters/heads/hop)
@@ -4817,7 +4816,7 @@
"bPx" = (/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)
"bPy" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green,/obj/machinery/alarm{pixel_y = 23},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/carpet,/area/crew_quarters/captain)
"bPz" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/captain,/obj/machinery/light{dir = 1},/turf/simulated/floor/carpet,/area/crew_quarters/captain)
-"bPA" = (/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/carpet,/area/crew_quarters/captain)
+"bPA" = (/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/obj/structure/closet/wardrobe/captain,/turf/simulated/floor/carpet,/area/crew_quarters/captain)
"bPB" = (/obj/item/weapon/soap/deluxe,/obj/item/weapon/bikehorn/rubberducky,/obj/machinery/shower{pixel_y = 2},/obj/machinery/door/window/southright{name = "Shower"},/obj/structure/curtain/open/shower,/turf/simulated/floor/tiled/freezer,/area/crew_quarters/captain)
"bPC" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/structure/extinguisher_cabinet{pixel_x = -27},/obj/machinery/camera/network/civilian{c_tag = "CIV - Kitchen Port"; dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen)
"bPD" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen)
@@ -4865,13 +4864,12 @@
"bQt" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
"bQu" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/effect/floor_decal/corner/paleblue{dir = 10},/obj/structure/disposalpipe/junction{icon_state = "pipe-j2"; dir = 4},/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
"bQv" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/corner/paleblue{dir = 8},/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = -32},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
-"bQw" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/effect/floor_decal/corner/lime{dir = 6},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"bQw" = (/obj/effect/floor_decal/corner/paleblue{dir = 6},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/sleeper)
"bQx" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/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/tiled,/area/medical/virologyaccess)
"bQy" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = -32},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/camera/network/medbay{c_tag = "MED - Virology Access"; dir = 1},/turf/simulated/floor/tiled,/area/medical/virologyaccess)
"bQz" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/corner/lime{dir = 6},/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/turf/simulated/floor/tiled,/area/medical/virologyaccess)
"bQA" = (/obj/structure/table/marble,/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{pixel_x = -3; pixel_y = 0},/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{pixel_x = 3},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen)
"bQB" = (/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/green,/turf/simulated/floor/tiled,/area/medical/virologyaccess)
-"bQC" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/camera/network/medbay{c_tag = "MED - Virology Access Hallway"; dir = 1},/turf/simulated/floor/tiled,/area/medical/virologyaccess)
"bQD" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/medical/virologyaccess)
"bQE" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/medical/virologyaccess)
"bQF" = (/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/mining/station)
@@ -4900,12 +4898,11 @@
"bRc" = (/obj/machinery/computer/mecha,/obj/effect/floor_decal/corner/purple{dir = 10},/obj/machinery/ai_status_display{pixel_y = -32},/obj/machinery/camera/network/research{c_tag = "SCI - RD's Office"; dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/rdoffice)
"bRd" = (/obj/effect/floor_decal/corner/purple/full{dir = 4},/obj/machinery/alarm{dir = 1; pixel_y = -22},/mob/living/simple_animal/slime/science,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice)
"bRe" = (/obj/structure/table/rack,/obj/item/weapon/rig/hazmat/equipped,/obj/structure/extinguisher_cabinet{pixel_x = 25; pixel_y = 0},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/tiled/dark,/area/rnd/rdoffice)
-"bRf" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/bodybags{pixel_x = -1; pixel_y = -2},/obj/item/weapon/pen,/obj/item/weapon/tank/anesthetic,/obj/item/clothing/mask/breath/medical,/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"bRf" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/assembly/robotics)
"bRg" = (/obj/machinery/optable{name = "Robotics Operating Table"},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
-"bRh" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/structure/window/reinforced/tinted{dir = 4; icon_state = "twindow"},/obj/machinery/computer/operating{name = "Robotics Operating Computer"},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
-"bRi" = (/obj/structure/reagent_dispensers/fueltank,/obj/effect/floor_decal/corner/pink{dir = 6},/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/assembly/robotics)
-"bRj" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/assembly/robotics)
-"bRk" = (/obj/structure/table/standard,/obj/machinery/cell_charger,/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/obj/effect/floor_decal/corner/pink{dir = 4},/obj/item/device/robotanalyzer,/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bRi" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bRj" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/storage/toolbox/mechanical,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/effect/floor_decal/corner/pink{dir = 6},/obj/item/weapon/storage/toolbox/mechanical,/obj/item/device/multitool{pixel_x = 3},/obj/item/device/multitool{pixel_x = 3},/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = 6},/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = 6},/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bRk" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/assembly/robotics)
"bRl" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/assembly/robotics)
"bRm" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/hallway/primary/central_four)
"bRn" = (/obj/effect/floor_decal/industrial/loading{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_four)
@@ -4926,7 +4923,6 @@
"bRC" = (/obj/machinery/door/airlock{name = "Private Restroom"},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/captain)
"bRD" = (/turf/simulated/floor/tiled/freezer,/area/crew_quarters/captain)
"bRE" = (/obj/structure/toilet{dir = 8},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/captain)
-"bRF" = (/obj/structure/closet/chefcloset,/obj/item/glass_jar,/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/item/device/retail_scanner/civilian,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen)
"bRG" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen)
"bRH" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/machinery/light,/obj/machinery/button/remote/blast_door{id = "kitchen"; name = "Kitchen Shutters Control"; pixel_x = -1; pixel_y = -24; req_access = list(28)},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen)
"bRI" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen)
@@ -4989,17 +4985,17 @@
"bSN" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/rnd/xenobiology/xenoflora)
"bSO" = (/obj/effect/floor_decal/corner/white{dir = 5},/obj/machinery/door/airlock/glass_research{name = "Xenoflora Research"; req_access = list(55)},/obj/machinery/door/firedoor/glass,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/hydro,/area/rnd/xenobiology/xenoflora)
"bSP" = (/obj/structure/sign/biohazard,/turf/simulated/wall/r_wall,/area/rnd/xenobiology/xenoflora)
-"bSQ" = (/turf/simulated/wall,/area/assembly/robotics)
-"bSR" = (/obj/machinery/ai_status_display{pixel_x = 0; pixel_y = 0},/turf/simulated/wall,/area/assembly/robotics)
-"bSS" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass_research{name = "Mech Bay"; req_access = list(29)},/turf/simulated/floor/tiled,/area/assembly/robotics)
-"bST" = (/obj/machinery/status_display,/turf/simulated/wall,/area/assembly/robotics)
-"bSU" = (/obj/machinery/door/airlock/research{name = "Mech Bay"; req_access = list(29)},/obj/machinery/door/firedoor/border_only,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"bSQ" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bSR" = (/obj/machinery/light{dir = 8},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bSS" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bST" = (/obj/structure/reagent_dispensers/fueltank,/obj/effect/floor_decal/corner/pink{dir = 6},/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bSU" = (/obj/structure/table/standard,/obj/machinery/cell_charger,/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/obj/effect/floor_decal/corner/pink{dir = 4},/turf/simulated/floor/tiled,/area/assembly/robotics)
"bSV" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/primary/central_four)
"bSW" = (/obj/machinery/door/airlock/command{name = "Head of Personnel"; req_access = list(57)},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/wood,/area/crew_quarters/heads/hop)
"bSX" = (/obj/effect/floor_decal/corner/blue{dir = 9},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/bridge_hallway)
"bSY" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/corner/blue,/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled,/area/bridge_hallway)
"bSZ" = (/obj/effect/floor_decal/corner/blue/full{dir = 4},/obj/machinery/vending/coffee,/turf/simulated/floor/tiled,/area/bridge_hallway)
-"bTa" = (/obj/structure/closet/secure_closet/captains,/obj/item/clothing/head/beret/centcom/captain{desc = "A white captain's beret"},/turf/simulated/floor/carpet,/area/crew_quarters/captain)
+"bTa" = (/obj/structure/closet/secure_closet/captains,/turf/simulated/floor/carpet,/area/crew_quarters/captain)
"bTb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/carpet,/area/crew_quarters/captain)
"bTc" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/camera/network/command{c_tag = "COM - Captain's Bedroom"; dir = 1},/turf/simulated/floor/carpet,/area/crew_quarters/captain)
"bTd" = (/obj/structure/displaycase,/turf/simulated/floor/carpet,/area/crew_quarters/captain)
@@ -5048,8 +5044,8 @@
"bTU" = (/obj/structure/bed/chair/wheelchair,/turf/simulated/floor/tiled/dark,/area/medical/biostorage)
"bTV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/medical/biostorage)
"bTW" = (/obj/machinery/iv_drip,/turf/simulated/floor/tiled/dark,/area/medical/biostorage)
-"bTX" = (/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,/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled/dark,/area/medical/biostorage)
-"bTY" = (/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/tiled/dark,/area/medical/biostorage)
+"bTX" = (/obj/structure/closet/l3closet/medical,/turf/simulated/floor/tiled/dark,/area/medical/biostorage)
+"bTY" = (/obj/item/device/radio/intercom{broadcasting = 0; dir = 4; listening = 1; name = "Captain's Intercom"; pixel_x = 21; pixel_y = 0},/obj/structure/table/woodentable,/obj/item/weapon/folder/blue_captain,/turf/simulated/floor/wood,/area/crew_quarters/captain)
"bTZ" = (/obj/structure/bedsheetbin,/obj/structure/table/steel,/turf/simulated/floor/tiled/dark,/area/medical/biostorage)
"bUa" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/floodlight,/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor,/area/maintenance/medbay_aft)
"bUb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/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"},/turf/simulated/floor,/area/maintenance/medbay_aft)
@@ -5080,7 +5076,7 @@
"bUA" = (/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/bluegrid,/area/assembly/chargebay)
"bUB" = (/turf/simulated/floor/tiled,/area/assembly/chargebay)
"bUC" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/assembly/chargebay)
-"bUD" = (/obj/machinery/recharge_station,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/assembly/chargebay)
+"bUD" = (/obj/structure/table/standard,/obj/item/weapon/circular_saw,/obj/item/weapon/scalpel{pixel_y = 12},/obj/item/weapon/hemostat,/obj/item/weapon/retractor,/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
"bUE" = (/turf/simulated/wall/r_wall,/area/assembly/chargebay)
"bUF" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/hallway/primary/central_four)
"bUG" = (/turf/simulated/wall/r_wall,/area/bridge/meeting_room)
@@ -5187,7 +5183,6 @@
"bWD" = (/obj/machinery/keycard_auth{pixel_x = 0; pixel_y = 24},/turf/simulated/floor/wood,/area/crew_quarters/captain)
"bWE" = (/obj/structure/table/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},/turf/simulated/floor/wood,/area/crew_quarters/captain)
"bWF" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor,/area/maintenance/central)
-"bWG" = (/obj/machinery/door/airlock/maintenance{name = "Resturant Maintenance"; req_one_access = list(12,28,35)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/crew_quarters/cafeteria)
"bWH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/cafeteria)
"bWI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/tiled/neutral,/area/crew_quarters/cafeteria)
"bWJ" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled,/area/crew_quarters/cafeteria)
@@ -5200,7 +5195,7 @@
"bWQ" = (/obj/structure/bed/chair,/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/green,/turf/simulated/floor/tiled/neutral,/area/crew_quarters/cafeteria)
"bWR" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "chemwindow"; name = "Chemistry Window Shutters"; opacity = 0},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/medical/chemistry)
"bWS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "chemwindow"; name = "Chemistry Window Shutters"; opacity = 0},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/medical/chemistry)
-"bWT" = (/obj/effect/floor_decal/corner/pink{dir = 10},/obj/structure/closet/secure_closet/paramedic,/obj/item/clothing/accessory/storage/black_vest,/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay)
+"bWT" = (/obj/structure/table/rack,/obj/item/bodybag/cryobag,/obj/effect/floor_decal/corner/paleblue/full{dir = 8},/obj/item/weapon/storage/toolbox/emergency,/obj/item/weapon/storage/firstaid/regular,/turf/simulated/floor/tiled/white,/area/medical/first_aid_station)
"bWU" = (/obj/effect/floor_decal/corner/pink{dir = 9},/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay)
"bWV" = (/obj/effect/floor_decal/corner/pink{dir = 6},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay)
"bWW" = (/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; dir = 2; frequency = 1487; icon_state = "intercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = -21},/turf/simulated/floor/tiled,/area/medical/virologyaccess)
@@ -5252,8 +5247,8 @@
"bXQ" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/assembly/chargebay)
"bXR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/assembly/chargebay)
"bXS" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/tiled,/area/assembly/chargebay)
-"bXT" = (/obj/machinery/cryopod/robot{dir = 4},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/assembly/chargebay)
-"bXU" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/central_four)
+"bXT" = (/obj/structure/table/standard,/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/machinery/camera/network/research{c_tag = "SCI - Robotics Starboard"; dir = 8},/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bXU" = (/obj/structure/table/standard,/obj/machinery/light,/obj/structure/closet/secure_closet/medical_wall{name = "anesthetic closet"; pixel_x = -32; req_access = list(29)},/obj/item/weapon/tank/anesthetic,/obj/item/weapon/tank/anesthetic,/obj/item/weapon/tank/anesthetic,/obj/item/clothing/mask/breath/medical,/obj/item/clothing/mask/breath/medical,/obj/item/clothing/mask/breath/medical,/obj/item/weapon/storage/box/gloves,/turf/simulated/floor/tiled/white,/area/assembly/robotics)
"bXV" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_four)
"bXW" = (/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/primary/central_four)
"bXX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/cable/green,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "heads_meeting"; name = "Meeting Room Window Shutters"; opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/meeting_room)
@@ -5309,7 +5304,7 @@
"bYV" = (/obj/machinery/botany/extractor,/turf/simulated/floor/tiled/hydro,/area/rnd/xenobiology/xenoflora)
"bYW" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled,/area/assembly/chargebay)
"bYX" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/assembly/chargebay)
-"bYY" = (/obj/machinery/computer/cryopod/robot{pixel_x = 30; pixel_y = 0},/obj/effect/floor_decal/industrial/warning/corner,/obj/effect/landmark{name = "JoinLateCyborg"},/obj/machinery/camera/network/research{c_tag = "SCI - Mech Bay Starboard"; dir = 8},/turf/simulated/floor/tiled,/area/assembly/chargebay)
+"bYY" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/machinery/computer/operating{name = "Robotics Operating Computer"},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
"bYZ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/primary/central_four)
"bZa" = (/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,/turf/simulated/floor/plating,/area/hallway/primary/central_four)
"bZb" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/primary/central_four)
@@ -5327,7 +5322,7 @@
"bZn" = (/obj/structure/table/woodentable,/obj/item/weapon/book/manual/security_space_law,/obj/item/device/taperecorder,/turf/simulated/floor/carpet,/area/crew_quarters/captain)
"bZo" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/wood,/area/crew_quarters/captain)
"bZp" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green,/turf/simulated/floor/wood,/area/crew_quarters/captain)
-"bZq" = (/obj/structure/table/woodentable,/obj/item/weapon/folder/blue,/obj/item/weapon/stamp/captain,/turf/simulated/floor/wood,/area/crew_quarters/captain)
+"bZq" = (/obj/structure/table/woodentable,/obj/item/weapon/stamp/captain,/turf/simulated/floor/wood,/area/crew_quarters/captain)
"bZr" = (/obj/structure/table/woodentable,/obj/machinery/computer/skills,/obj/item/weapon/hand_tele,/turf/simulated/floor/wood,/area/crew_quarters/captain)
"bZs" = (/obj/machinery/door/window/southright{name = "Captain's Desk Door"; req_access = list(20)},/turf/simulated/floor/wood,/area/crew_quarters/captain)
"bZt" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/folder/blue,/obj/item/weapon/pen,/obj/item/device/megaphone,/obj/machinery/requests_console{announcementConsole = 1; department = "Captain's Desk"; departmentType = 5; name = "Captain RC"; pixel_x = 30; pixel_y = 0},/obj/structure/window/reinforced,/turf/simulated/floor/wood,/area/crew_quarters/captain)
@@ -5390,7 +5385,6 @@
"cay" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/captain)
"caz" = (/obj/structure/filingcabinet,/obj/machinery/light{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/captain)
"caA" = (/obj/machinery/recharge_station,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled,/area/crew_quarters/cafeteria)
-"caB" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/machinery/light/small{dir = 4},/turf/simulated/floor,/area/maintenance/central)
"caC" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled/neutral,/area/crew_quarters/cafeteria)
"caD" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/cafeteria)
"caE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled/neutral,/area/crew_quarters/cafeteria)
@@ -5449,7 +5443,7 @@
"cbF" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/machinery/button/remote/blast_door{dir = 2; id = "Skynet_launch"; name = "Mech Bay Door Control"; pixel_x = 0; pixel_y = -26; req_access = list(29)},/turf/simulated/floor/tiled,/area/assembly/chargebay)
"cbG" = (/obj/machinery/light,/turf/simulated/floor/tiled,/area/hallway/primary/central_four)
"cbH" = (/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = -32},/turf/simulated/floor/tiled,/area/hallway/primary/central_four)
-"cbI" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/hallway/primary/central_four)
+"cbI" = (/obj/structure/table/standard,/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/item/weapon/screwdriver,/obj/item/weapon/crowbar,/obj/item/weapon/circular_saw,/obj/item/weapon/hemostat,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
"cbJ" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/wood,/area/bridge/meeting_room)
"cbK" = (/obj/machinery/requests_console{announcementConsole = 1; department = "Bridge"; departmentType = 5; name = "Bridge RC"; pixel_y = -30},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/wood,/area/bridge/meeting_room)
"cbL" = (/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = -32},/turf/simulated/floor/wood,/area/bridge/meeting_room)
@@ -5471,7 +5465,6 @@
"ccb" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/crew_quarters/cafeteria)
"ccc" = (/obj/structure/table/rack,/obj/item/clothing/suit/radiation,/obj/item/clothing/head/radiation,/obj/item/weapon/storage/toolbox/emergency,/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; dir = 2; frequency = 1487; icon_state = "intercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = -21},/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor/tiled/dark,/area/medical/biostorage)
"ccd" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_two)
-"cce" = (/obj/machinery/recharge_station,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled/neutral,/area/crew_quarters/cafeteria)
"ccf" = (/obj/effect/floor_decal/corner/pink{dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/medical_emergency_hallway)
"ccg" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/corner/pink{dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/medical_emergency_hallway)
"cch" = (/obj/effect/floor_decal/corner/pink/full,/obj/machinery/computer/med_data/laptop,/obj/structure/table/glass,/obj/machinery/light,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/tiled/white,/area/medical/patient_e)
@@ -5483,7 +5476,7 @@
"ccn" = (/obj/effect/floor_decal/corner/pink{dir = 10},/obj/structure/table/glass,/obj/item/weapon/paper_bin,/obj/item/weapon/clipboard,/obj/item/weapon/pen,/turf/simulated/floor/tiled/white,/area/medical/patient_d)
"cco" = (/obj/machinery/computer/med_data/laptop,/obj/structure/table/glass,/obj/effect/floor_decal/corner/pink/full{dir = 4},/obj/machinery/light,/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/turf/simulated/floor/tiled/white,/area/medical/patient_d)
"ccp" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/medical_escape_pod_hallway)
-"ccq" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/medical_escape_pod_hallway)
+"ccq" = (/obj/machinery/sleeper{dir = 4},/obj/effect/floor_decal/corner/paleblue/full{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station)
"ccr" = (/obj/structure/closet/emcloset,/obj/effect/floor_decal/industrial/warning{dir = 5},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/medical_escape_pod_hallway)
"ccs" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area/hallway/secondary/escape/medical_escape_pod_hallway)
"cct" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/mine/explored/upper_level)
@@ -5552,7 +5545,6 @@
"cdE" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/dark,/area/hallway/primary/central_three)
"cdF" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/dark,/area/hallway/primary/central_three)
"cdG" = (/turf/simulated/floor/tiled/dark,/area/hallway/primary/central_three)
-"cdH" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/neutral,/area/crew_quarters/cafeteria)
"cdI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/crew_quarters/cafeteria)
"cdJ" = (/obj/structure/table/standard,/obj/item/weapon/material/kitchen/utensil/fork,/obj/item/weapon/material/kitchen/utensil/spoon{pixel_x = 2},/turf/simulated/floor/tiled,/area/crew_quarters/cafeteria)
"cdK" = (/obj/structure/table/standard,/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/tiled/neutral,/area/crew_quarters/cafeteria)
@@ -5682,7 +5674,6 @@
"cge" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/medical_emergency_hallway)
"cgf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/medical_emergency_hallway)
"cgg" = (/obj/structure/closet/emcloset,/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/medical_emergency_hallway)
-"cgh" = (/obj/effect/decal/cleanable/cobweb2{icon_state = "spiderling"; name = "dead spider"; tag = "icon-spiderling"},/obj/effect/decal/cleanable/cobweb2{tag = "icon-cobweb1"; icon_state = "cobweb1"},/turf/simulated/floor,/area/maintenance/medbay_aft)
"cgi" = (/obj/structure/closet,/obj/item/clothing/glasses/welding,/obj/item/weapon/weldingtool,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/medbay_aft)
"cgj" = (/obj/machinery/space_heater,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/medbay_aft)
"cgk" = (/obj/machinery/portable_atmospherics/powered/scrubber,/turf/simulated/floor,/area/maintenance/medbay_aft)
@@ -5875,7 +5866,6 @@
"cjP" = (/obj/machinery/photocopier,/obj/effect/floor_decal/corner/brown/full{dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/office)
"cjQ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/quartermaster/miningdock)
"cjR" = (/obj/machinery/door/airlock/mining{id_tag = "cargodoor"; name = "Mining Dock"; req_access = list(50)},/obj/machinery/door/firedoor/border_only,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/quartermaster/miningdock)
-"cjS" = (/obj/structure/disposaloutlet,/obj/structure/disposalpipe/trunk{dir = 8},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/quartermaster/delivery)
"cjT" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 27},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/quartermaster/delivery)
"cjU" = (/obj/machinery/conveyor{dir = 1; id = "packageSort1"},/turf/simulated/floor,/area/quartermaster/delivery)
"cjV" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor,/area/maintenance/substation/cargo)
@@ -5907,7 +5897,6 @@
"ckv" = (/obj/machinery/door/airlock/glass_mining{name = "Delivery Office"; req_access = list(50)},/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/delivery)
"ckw" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/delivery)
"ckx" = (/obj/effect/floor_decal/corner/brown{dir = 5},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/delivery)
-"cky" = (/obj/effect/floor_decal/industrial/loading,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled,/area/quartermaster/delivery)
"ckz" = (/obj/effect/floor_decal/industrial/warning/corner,/obj/machinery/firealarm{dir = 4; pixel_x = 26},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/quartermaster/delivery)
"ckA" = (/obj/structure/plasticflaps{opacity = 0},/obj/machinery/conveyor{dir = 1; id = "packageSort1"},/turf/simulated/floor,/area/quartermaster/delivery)
"ckB" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning/corner,/obj/machinery/light/small{dir = 8},/turf/simulated/floor,/area/maintenance/substation/cargo)
@@ -5918,7 +5907,7 @@
"ckG" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/storage/tech)
"ckH" = (/obj/item/weapon/module/power_control,/obj/item/weapon/airlock_electronics,/obj/structure/table/steel,/turf/simulated/floor/plating,/area/storage/tech)
"ckI" = (/turf/simulated/floor,/area/storage/tech)
-"ckJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/shutters{dir = 2; id = "port_first_aid"; layer = 3.1; name = "Security Shutters"},/turf/simulated/floor/plating,/area/medical/first_aid_station)
+"ckJ" = (/obj/machinery/sleep_console{dir = 4},/obj/machinery/alarm{pixel_y = 23},/obj/effect/floor_decal/corner/paleblue{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station)
"ckK" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/firedoor/border_only,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/storage/tech)
"ckL" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/primary/central_three)
"ckM" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/primary/central_three)
@@ -5958,7 +5947,7 @@
"clu" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/rdconsole,/obj/item/weapon/circuitboard/destructive_analyzer,/obj/item/weapon/circuitboard/protolathe,/obj/item/weapon/circuitboard/rdserver{pixel_x = 3; pixel_y = -3},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/storage/tech)
"clv" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor,/area/storage/tech)
"clw" = (/obj/machinery/requests_console{department = "Tech storage"; pixel_x = 28; pixel_y = 0},/turf/simulated/floor,/area/storage/tech)
-"clx" = (/obj/structure/flora/pottedplant{tag = "icon-plant-10"; icon_state = "plant-10"},/obj/effect/floor_decal/corner/paleblue/full,/turf/simulated/floor/tiled/white,/area/medical/first_aid_station)
+"clx" = (/obj/structure/extinguisher_cabinet{pixel_x = -27},/obj/effect/floor_decal/corner/paleblue/full,/obj/machinery/light,/obj/structure/bed/roller,/turf/simulated/floor/tiled/white,/area/medical/first_aid_station)
"cly" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/primary/central_four)
"clz" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/primary/central_four)
"clA" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/primary/central_four)
@@ -5999,9 +5988,6 @@
"cmj" = (/turf/simulated/wall,/area/storage/emergency_storage/emergency6)
"cmk" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/tiled,/area/storage/tools)
"cml" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/tiled,/area/storage/tools)
-"cmm" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/random/tech_supply,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = 22},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/storage/tools)
-"cmn" = (/obj/structure/closet/toolcloset,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/storage/tools)
-"cmo" = (/obj/structure/closet/toolcloset,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled,/area/storage/tools)
"cmp" = (/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,/turf/simulated/floor/plating,/area/hallway/primary/central_three)
"cmq" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/crew{pixel_x = -1; pixel_y = 1},/obj/item/weapon/circuitboard/card{pixel_x = 2; pixel_y = -2},/obj/item/weapon/circuitboard/communications{pixel_x = 5; pixel_y = -5},/obj/machinery/light/small{dir = 8},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/storage/tech)
"cmr" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/storage/tech)
@@ -6011,7 +5997,7 @@
"cmv" = (/obj/machinery/hologram/holopad,/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/storage/tech)
"cmw" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/security/mining,/obj/item/weapon/circuitboard/autolathe{pixel_x = 3; pixel_y = -3},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/storage/tech)
"cmx" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor,/area/storage/tech)
-"cmy" = (/obj/structure/table/glass,/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 = "Medical Emergency Phone"},/obj/effect/floor_decal/corner/paleblue{dir = 10},/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/medical/first_aid_station)
+"cmy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/effect/floor_decal/corner/paleblue{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station)
"cmz" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor/tiled,/area/hallway/primary/central_four)
"cmA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/tiled,/area/hallway/primary/central_three)
"cmB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_three)
@@ -6050,9 +6036,6 @@
"cni" = (/obj/machinery/floodlight,/turf/simulated/floor,/area/storage/emergency_storage/emergency6)
"cnj" = (/obj/structure/table/rack{dir = 1},/obj/item/clothing/suit/fire/firefighter,/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/gas,/obj/item/weapon/extinguisher,/obj/item/clothing/head/hardhat/red,/obj/item/clothing/glasses/meson,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor/plating,/area/storage/emergency_storage/emergency6)
"cnk" = (/obj/machinery/portable_atmospherics/powered/pump/filled,/turf/simulated/floor/plating,/area/storage/emergency_storage/emergency6)
-"cnl" = (/turf/simulated/floor/tiled,/area/storage/tools)
-"cnm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/storage/tools)
-"cnn" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/tiled,/area/storage/tools)
"cno" = (/obj/structure/closet/wardrobe/grey,/obj/item/weapon/storage/backpack,/obj/item/weapon/storage/backpack,/turf/simulated/floor/plating,/area/maintenance/cargo)
"cnp" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/robotics{pixel_x = -2; pixel_y = 2},/obj/item/weapon/circuitboard/mecha_control{pixel_x = 1; pixel_y = -1},/turf/simulated/floor/tiled/dark,/area/storage/tech)
"cnq" = (/turf/simulated/floor/tiled/dark,/area/storage/tech)
@@ -6100,9 +6083,6 @@
"cog" = (/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/turf/simulated/floor,/area/storage/emergency_storage/emergency6)
"coh" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/storage/emergency_storage/emergency6)
"coi" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor,/area/storage/emergency_storage/emergency6)
-"coj" = (/obj/machinery/camera/network/civilian{c_tag = "CIV - Auxiliary Tool Storage"; dir = 4},/turf/simulated/floor/tiled,/area/storage/tools)
-"cok" = (/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/structure/table/steel,/turf/simulated/floor/tiled,/area/storage/tools)
-"col" = (/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/table/steel,/turf/simulated/floor/tiled,/area/storage/tools)
"com" = (/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/cell_charger,/obj/structure/table/steel,/obj/structure/extinguisher_cabinet{pixel_x = 25},/turf/simulated/floor/tiled,/area/storage/tools)
"con" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor,/area/maintenance/cargo)
"coo" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/quartermaster/delivery)
@@ -6148,12 +6128,7 @@
"cpc" = (/obj/structure/disposalpipe/trunk,/obj/structure/disposaloutlet{dir = 1},/turf/simulated/floor/plating,/area/quartermaster/delivery)
"cpd" = (/obj/structure/table/standard,/obj/item/device/t_scanner,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor/plating,/area/storage/emergency_storage/emergency6)
"cpe" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/storage/emergency_storage/emergency6)
-"cpf" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/turf/simulated/floor/tiled,/area/storage/tools)
-"cpg" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled,/area/storage/tools)
-"cph" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled,/area/storage/tools)
-"cpi" = (/obj/machinery/light_switch{pixel_y = -28},/turf/simulated/floor/tiled,/area/storage/tools)
"cpj" = (/turf/simulated/wall,/area/hallway/primary/port)
-"cpk" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/maintenance{req_access = list(12)},/turf/simulated/floor,/area/maintenance/cargo)
"cpl" = (/obj/machinery/cell_charger{pixel_y = 5},/obj/item/device/multitool,/obj/structure/table/steel,/turf/simulated/floor/plating,/area/storage/tech)
"cpm" = (/obj/machinery/light/small,/turf/simulated/floor,/area/storage/tech)
"cpn" = (/obj/machinery/light_switch{pixel_x = 0; pixel_y = -26},/obj/effect/floor_decal/industrial/warning/corner,/turf/simulated/floor,/area/storage/tech)
@@ -6195,7 +6170,6 @@
"cpX" = (/turf/simulated/wall,/area/hallway/secondary/cargo_hallway)
"cpY" = (/obj/machinery/door/airlock{name = "Cargo Emergency Storage"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/storage/emergency_storage/emergency6)
"cpZ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/storage/tools)
-"cqa" = (/obj/machinery/door/airlock/glass{name = "Auxiliary Tool Storage"; req_access = list(12)},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/storage/tools)
"cqb" = (/obj/structure/bed/chair,/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; dir = 1; frequency = 1487; icon_state = "intercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = 21},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/large_escape_pod1/station)
"cqc" = (/obj/structure/table/rack,/obj/item/clothing/glasses/sunglasses,/obj/item/clothing/suit/storage/hazardvest,/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor/plating,/area/maintenance/medbay_aft)
"cqd" = (/obj/structure/closet/emcloset,/turf/simulated/floor/tiled/dark,/area/hallway/primary/port)
@@ -6248,23 +6222,20 @@
"cqY" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/cargo_hallway)
"cqZ" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor/tiled,/area/hallway/secondary/cargo_hallway)
"cra" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/cargo_hallway)
-"crb" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/cargo_hallway)
-"crc" = (/obj/machinery/light{dir = 1},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/cargo_hallway)
"crd" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/cargo_hallway)
-"cre" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = 22},/turf/simulated/floor/tiled,/area/hallway/secondary/cargo_hallway)
"crf" = (/turf/simulated/floor/tiled,/area/hallway/secondary/cargo_hallway)
"crg" = (/obj/effect/floor_decal/corner/brown{dir = 5},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/tiled,/area/hallway/secondary/cargo_hallway)
"crh" = (/obj/machinery/door/airlock/glass{name = "Cargo Access"},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/hallway/secondary/cargo_hallway)
"cri" = (/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/hallway/primary/port)
"crj" = (/obj/structure/sign/directions/engineering{dir = 2; pixel_y = 32; pixel_z = -8},/obj/structure/sign/directions/security{dir = 4; pixel_y = 32},/obj/structure/sign/directions/cargo{dir = 8; pixel_y = 32; pixel_z = 8},/turf/simulated/floor/tiled,/area/hallway/primary/port)
"crk" = (/obj/structure/bed/chair,/turf/simulated/floor/tiled/dark,/area/hallway/primary/central_four)
-"crl" = (/obj/structure/table/rack,/obj/item/bodybag/cryobag,/obj/effect/floor_decal/corner/paleblue/full{dir = 8},/obj/item/weapon/storage/toolbox/emergency,/obj/item/weapon/storage/firstaid,/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard)
+"crl" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/effect/floor_decal/corner/paleblue{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station)
"crm" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/tiled,/area/hallway/primary/port)
"crn" = (/obj/structure/sign/directions/science{dir = 4; pixel_y = 32; pixel_z = -8},/obj/structure/sign/directions/medical{dir = 4; pixel_y = 32},/obj/structure/sign/directions/evac{dir = 4; pixel_y = 32; pixel_z = 8},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/tiled,/area/hallway/primary/port)
"cro" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/tiled,/area/hallway/primary/port)
"crp" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/tiled,/area/hallway/primary/port)
-"crq" = (/obj/machinery/sleeper{dir = 4},/obj/effect/floor_decal/corner/paleblue/full{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard)
-"crr" = (/obj/machinery/sleep_console{dir = 4},/obj/machinery/alarm{pixel_y = 23},/obj/effect/floor_decal/corner/paleblue{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard)
+"crq" = (/obj/structure/bed/chair/office/light,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/effect/floor_decal/corner/paleblue/full{dir = 1},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/obj/machinery/newscaster{pixel_x = 28; pixel_y = 1},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station)
+"crr" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/first_aid_station)
"crs" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/hallway/primary/port)
"crt" = (/obj/machinery/camera/network/northern_star{c_tag = "Hall - Port Primary 2"; dir = 2},/turf/simulated/floor/tiled,/area/hallway/primary/port)
"cru" = (/turf/simulated/floor/tiled,/area/hallway/primary/port)
@@ -6358,18 +6329,14 @@
"cte" = (/obj/machinery/computer/arcade,/turf/simulated/floor/wood,/area/crew_quarters/bar)
"ctf" = (/obj/structure/curtain/open/shower,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/window/southright{name = "Shower"},/obj/machinery/shower{pixel_y = 3},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_5)
"ctg" = (/obj/structure/toilet,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_5)
-"cth" = (/obj/structure/table/standard,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_5)
"cti" = (/obj/effect/floor_decal/corner/white{dir = 8},/obj/effect/floor_decal/corner/blue{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/closet/emcloset,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging)
"ctj" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging)
-"ctk" = (/obj/structure/table/standard,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_6)
"ctl" = (/obj/structure/toilet,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_6)
"ctm" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/crew_quarters/sleep/elevator)
"ctn" = (/obj/structure/curtain/open/shower,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/window/southright{name = "Shower"},/obj/machinery/shower{pixel_y = 3},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_11)
"cto" = (/obj/structure/toilet,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_11)
-"ctp" = (/obj/structure/table/standard,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_11)
"ctq" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging)
"ctr" = (/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue,/obj/structure/closet/emcloset,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging)
-"cts" = (/obj/structure/table/standard,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_12)
"ctt" = (/obj/structure/toilet,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_12)
"ctu" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/docking_hallway)
"ctv" = (/obj/structure/table/standard,/obj/item/weapon/tape_roll,/obj/item/weapon/storage/firstaid/regular{pixel_x = 6; pixel_y = -5},/obj/effect/floor_decal/corner/brown/full,/turf/simulated/floor/tiled,/area/quartermaster/office)
@@ -6424,8 +6391,6 @@
"cus" = (/obj/effect/floor_decal/corner/white/diagonal{tag = "icon-corner_white_diagonal (EAST)"; icon_state = "corner_white_diagonal"; dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/obj/structure/flora/pottedplant{icon_state = "plant-22"},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging)
"cut" = (/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/obj/machinery/atm{pixel_y = 30},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging)
"cuu" = (/obj/structure/closet/secure_closet/personal,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_5)
-"cuv" = (/obj/structure/table/standard,/obj/machinery/newscaster{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_5)
-"cuw" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_5)
"cux" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_5)
"cuy" = (/obj/effect/floor_decal/corner/lime{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/smartfridge/drying_rack,/turf/simulated/floor/tiled,/area/hydroponics)
"cuz" = (/obj/effect/floor_decal/corner/white{dir = 8},/obj/effect/floor_decal/corner/blue{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging)
@@ -6434,19 +6399,15 @@
"cuC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_6)
"cuD" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_6)
"cuE" = (/obj/structure/closet/secure_closet/personal,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_6)
-"cuF" = (/obj/structure/table/standard,/obj/machinery/newscaster{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_6)
"cuG" = (/obj/structure/closet/secure_closet/personal,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_11)
-"cuH" = (/obj/structure/table/standard,/obj/machinery/newscaster{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_11)
-"cuI" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_11)
+"cuI" = (/obj/item/frame/light,/obj/structure/table/reinforced,/turf/simulated/floor/tiled,/area/vacant/vacant_shop)
"cuJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_11)
-"cuK" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/mirror{pixel_x = 28},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_5)
"cuL" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/corner/white{dir = 8},/obj/effect/floor_decal/corner/blue{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging)
"cuM" = (/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging)
"cuN" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/structure/mirror{pixel_x = -28},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_6)
"cuO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_12)
"cuP" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_12)
"cuQ" = (/obj/structure/closet/secure_closet/personal,/obj/item/clothing/head/kitty,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_12)
-"cuR" = (/obj/structure/table/standard,/obj/machinery/newscaster{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_12)
"cuS" = (/turf/simulated/wall,/area/quartermaster/storage)
"cuT" = (/obj/structure/curtain/open/shower,/obj/machinery/door/window/southright{name = "Shower"},/obj/structure/window/reinforced{dir = 8},/obj/machinery/shower{pixel_y = 3},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_12)
"cuU" = (/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,/turf/simulated/floor/plating,/area/quartermaster/storage)
@@ -6477,21 +6438,16 @@
"cvt" = (/obj/machinery/atm{pixel_x = 0; pixel_y = -32},/turf/simulated/floor/lino,/area/hallway/secondary/entry/docking_lounge)
"cvu" = (/obj/structure/bed/chair/wood/wings,/turf/simulated/floor/wood,/area/crew_quarters/bar)
"cvv" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass_engineeringatmos{name = "Engineering Break Room"; req_one_access = list(10)},/turf/simulated/floor/tiled,/area/engineering/break_room)
-"cvw" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/brown,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_5)
"cvx" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_5)
"cvy" = (/obj/machinery/door/airlock{name = "Restroom"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_5)
-"cvz" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/mirror{pixel_x = 28},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_11)
"cvA" = (/obj/effect/floor_decal/corner/white{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging)
"cvB" = (/obj/machinery/door/airlock{name = "Restroom"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_6)
-"cvC" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/brown,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_6)
"cvD" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_6)
-"cvE" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/brown,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_11)
"cvF" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_11)
"cvG" = (/obj/machinery/door/airlock{name = "Restroom"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_11)
"cvH" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/corner/blue{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging)
"cvI" = (/obj/effect/floor_decal/corner/white{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging)
"cvJ" = (/obj/machinery/door/airlock{name = "Restroom"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_12)
-"cvK" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/brown,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_12)
"cvL" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_12)
"cvM" = (/turf/space,/area/supply/station)
"cvN" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/obj/machinery/camera/network/northern_star{c_tag = "Hall - Port Primary 1"; dir = 4},/turf/simulated/floor/tiled/dark,/area/hallway/primary/port)
@@ -6502,8 +6458,8 @@
"cvS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/quartermaster/storage)
"cvT" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/quartermaster/storage)
"cvU" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "QM #3"},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/quartermaster/storage)
-"cvV" = (/obj/structure/extinguisher_cabinet{pixel_x = -27},/obj/effect/floor_decal/corner/paleblue/full,/obj/machinery/light,/obj/structure/bed/roller,/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard)
-"cvW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/effect/floor_decal/corner/paleblue{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard)
+"cvV" = (/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/camera/network/medbay{c_tag = "MED - FA Station Port"; dir = 1},/obj/machinery/light_switch{pixel_x = -36; pixel_y = 0},/obj/effect/floor_decal/corner/paleblue{dir = 9},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station)
+"cvW" = (/obj/structure/table/reinforced,/obj/effect/floor_decal/corner/paleblue{dir = 6},/obj/item/device/radio{frequency = 1487; icon_state = "med_walkietalkie"; name = "Medbay Emergency Radio Link"},/obj/machinery/vending/wallmed1{name = "NanoMed Wall"; pixel_x = 25; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station)
"cvX" = (/obj/machinery/status_display/supply_display,/turf/simulated/wall,/area/quartermaster/qm)
"cvY" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor/tiled,/area/quartermaster/qm)
"cvZ" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/quartermaster/qm)
@@ -6589,13 +6545,12 @@
"cxB" = (/obj/machinery/door/airlock/glass_command{name = "E.V.A."; req_one_access = list(18)},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/ai_monitored/storage/eva)
"cxC" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_three)
"cxD" = (/obj/machinery/door/airlock/glass_command{name = "E.V.A."; req_one_access = list(18)},/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/ai_monitored/storage/eva)
-"cxE" = (/obj/structure/closet/emcloset,/turf/simulated/floor/tiled/dark,/area/crew_quarters/sleep/elevator)
+"cxE" = (/obj/effect/floor_decal/corner/purple{dir = 6},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/rnd/research)
"cxF" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled/dark,/area/crew_quarters/sleep/elevator)
"cxG" = (/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = -32},/turf/simulated/floor/tiled/dark,/area/crew_quarters/sleep/elevator)
"cxH" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/dark,/area/crew_quarters/sleep/elevator)
"cxI" = (/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/tiled/dark,/area/crew_quarters/sleep/elevator)
"cxJ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/dark,/area/crew_quarters/sleep/elevator)
-"cxK" = (/obj/structure/closet/emcloset,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled/dark,/area/crew_quarters/sleep/elevator)
"cxL" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/structure/disposalpipe/segment,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/secondary/docking_hallway)
"cxM" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/secondary/docking_hallway)
"cxN" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/quartermaster/storage)
@@ -6605,10 +6560,9 @@
"cxR" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/wood,/area/crew_quarters/bar)
"cxS" = (/obj/structure/table/woodentable,/obj/item/clothing/head/cakehat,/obj/machinery/atm{pixel_y = 30},/obj/machinery/newscaster{pixel_x = -30},/turf/simulated/floor/wood,/area/crew_quarters/bar)
"cxT" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/wood,/area/crew_quarters/bar)
-"cxU" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/door/airlock/command{name = "Chief Engineer"; req_access = list(56)},/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief)
+"cxU" = (/obj/structure/table/reinforced,/turf/simulated/floor/tiled,/area/vacant/vacant_shop)
"cxV" = (/obj/structure/bed/chair/comfy/beige{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_5)
-"cxW" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/effect/floor_decal/corner/paleblue{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard)
-"cxX" = (/obj/structure/bed/chair/comfy/beige{dir = 8},/obj/machinery/camera/network/civilian{c_tag = "CIV - Visitor Room 5"; dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_5)
+"cxW" = (/obj/machinery/door/airlock/glass_medical{name = "First-Aid Station"; req_one_access = list(5,10,63)},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/first_aid_station)
"cxY" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 2},/obj/machinery/light,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_5)
"cxZ" = (/obj/structure/table/standard,/obj/machinery/microwave,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_5)
"cya" = (/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_11)
@@ -6620,10 +6574,10 @@
"cyg" = (/obj/structure/table/standard,/obj/machinery/microwave,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_6)
"cyh" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 2},/obj/machinery/light,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_6)
"cyi" = (/obj/structure/bed/chair/comfy/beige{dir = 4},/obj/machinery/camera/network/civilian{c_tag = "CIV - Visitor Room 6"; dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_6)
-"cyj" = (/obj/structure/bed/chair/office/light,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/effect/floor_decal/corner/paleblue/full{dir = 1},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/obj/machinery/newscaster{pixel_x = 28; pixel_y = 1},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard)
+"cyj" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/medical/first_aid_station)
"cyk" = (/obj/structure/bed/chair/comfy/beige{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_6)
"cyl" = (/obj/structure/bed/chair/comfy/beige{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_11)
-"cym" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard)
+"cym" = (/obj/effect/floor_decal/corner/red{dir = 5},/obj/structure/closet/secure_closet/security,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/security/checkpoint2)
"cyn" = (/obj/structure/bed/chair/comfy/beige{dir = 8},/obj/machinery/camera/network/civilian{c_tag = "CIV - Visitor Room 11"; dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_11)
"cyo" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 2},/obj/machinery/light,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_11)
"cyp" = (/obj/structure/table/standard,/obj/machinery/microwave,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_11)
@@ -6636,7 +6590,7 @@
"cyw" = (/obj/structure/table/standard,/obj/machinery/microwave,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_12)
"cyx" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 2},/obj/machinery/light,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_12)
"cyy" = (/obj/structure/bed/chair/comfy/beige{dir = 4},/obj/machinery/camera/network/civilian{c_tag = "CIV - Visitor Room 12"; dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_12)
-"cyz" = (/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/camera/network/medbay{c_tag = "MED - FA Station Port"; dir = 1},/obj/machinery/light_switch{pixel_x = -36; pixel_y = 0},/obj/effect/floor_decal/corner/paleblue{dir = 9},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard)
+"cyz" = (/obj/structure/table/reinforced,/obj/item/weapon/stamp/ce,/obj/item/weapon/pen,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/flame/lighter/zippo,/obj/item/device/megaphone,/obj/item/weapon/folder/yellow_ce,/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief)
"cyA" = (/obj/structure/bed/chair/comfy/beige{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_12)
"cyB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/sign/securearea,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/ai_monitored/storage/eva)
"cyC" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/quartermaster/storage)
@@ -6650,7 +6604,7 @@
"cyK" = (/obj/machinery/door/airlock/glass_mining{name = "Quartermaster"; req_access = list(41)},/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/qm)
"cyL" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/quartermaster/qm)
"cyM" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled,/area/quartermaster/qm)
-"cyN" = (/obj/structure/table/standard,/obj/item/weapon/clipboard,/obj/item/weapon/stamp{name = "Quartermaster's stamp"; pixel_x = 0; pixel_y = 0},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/quartermaster/qm)
+"cyN" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/closet/secure_closet/engineering_welding,/turf/simulated/floor/tiled,/area/engineering/workshop)
"cyO" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled,/area/quartermaster/qm)
"cyP" = (/obj/machinery/computer/security/mining,/turf/simulated/floor/tiled,/area/quartermaster/qm)
"cyQ" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/turf/simulated/floor,/area/maintenance/apmaint)
@@ -6726,21 +6680,17 @@
"cAi" = (/turf/simulated/wall,/area/crew_quarters/sleep/vistor_room_3)
"cAj" = (/obj/structure/curtain/open/shower,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/window/southright{name = "Shower"},/obj/machinery/shower{pixel_y = 3},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_3)
"cAk" = (/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/disposal,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_6)
-"cAl" = (/obj/structure/table/standard,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_3)
"cAm" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/corner/white{dir = 8},/obj/effect/floor_decal/corner/blue{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging)
"cAn" = (/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging)
"cAo" = (/turf/simulated/wall,/area/crew_quarters/sleep/vistor_room_4)
-"cAp" = (/obj/structure/table/standard,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_4)
"cAq" = (/obj/structure/cable/green,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_11)
"cAr" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/quartermaster/qm)
"cAs" = (/turf/simulated/wall,/area/crew_quarters/sleep/vistor_room_9)
"cAt" = (/obj/structure/curtain/open/shower,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/window/southright{name = "Shower"},/obj/machinery/shower{pixel_y = 3},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_9)
"cAu" = (/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/disposal,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_11)
-"cAv" = (/obj/structure/table/standard,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_9)
"cAw" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/corner/white{dir = 8},/obj/effect/floor_decal/corner/blue{dir = 1},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging)
"cAx" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/corner/blue,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/junction{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging)
"cAy" = (/turf/simulated/wall,/area/crew_quarters/sleep/vistor_room_10)
-"cAz" = (/obj/structure/table/standard,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_10)
"cAA" = (/obj/structure/toilet,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_10)
"cAB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/ai_monitored/storage/eva)
"cAC" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "cargo_bay_door"; locked = 1; name = "Cargo Docking Hatch"; req_access = list(13)},/turf/simulated/floor/plating,/area/quartermaster/storage)
@@ -6809,7 +6759,7 @@
"cBN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
"cBO" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
"cBP" = (/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/machinery/camera/network/engineering{c_tag = "ENG - Solar Aft Port"; dir = 1},/turf/simulated/floor/plating,/area/maintenance/portsolar)
-"cBQ" = (/obj/effect/floor_decal/corner/red{dir = 5},/obj/structure/closet/secure_closet/security,/obj/item/device/flashlight/flare,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/security/checkpoint2)
+"cBQ" = (/obj/structure/closet/secure_closet/engineering_personal,/turf/simulated/floor/tiled/yellow,/area/engineering/locker_room)
"cBR" = (/obj/effect/floor_decal/corner/red{dir = 5},/obj/structure/closet/wardrobe/red,/turf/simulated/floor/tiled,/area/security/checkpoint2)
"cBS" = (/turf/simulated/floor/tiled/dark,/area/hallway/secondary/docking_hallway)
"cBT" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/quartermaster/qm)
@@ -6818,24 +6768,16 @@
"cBW" = (/obj/machinery/atmospherics/pipe/tank/air,/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor,/area/maintenance/bar)
"cBX" = (/obj/structure/table/rack{dir = 4},/obj/item/clothing/mask/gas,/turf/simulated/floor/plating,/area/maintenance/bar)
"cBY" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/lime{dir = 10},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/tiled/white,/area/medical/virology)
-"cBZ" = (/obj/structure/table/standard,/obj/machinery/newscaster{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_3)
-"cCa" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/brown,/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_3)
"cCb" = (/obj/structure/closet/secure_closet/personal,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_3)
"cCc" = (/obj/structure/toilet,/obj/machinery/light{dir = 1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_4)
"cCd" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/corner/blue{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging)
"cCe" = (/obj/machinery/door/airlock{name = "Restroom"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_4)
"cCf" = (/obj/structure/closet/secure_closet/personal,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_4)
-"cCg" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/brown,/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_4)
-"cCh" = (/obj/structure/table/standard,/obj/machinery/newscaster{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_4)
-"cCi" = (/obj/structure/table/standard,/obj/machinery/newscaster{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_9)
-"cCj" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/brown,/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_9)
"cCk" = (/obj/structure/closet/secure_closet/personal,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_9)
"cCl" = (/obj/structure/toilet,/obj/machinery/light{dir = 1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_9)
"cCm" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging)
"cCn" = (/obj/machinery/door/airlock{name = "Restroom"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_10)
"cCo" = (/obj/structure/closet/secure_closet/personal,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_10)
-"cCp" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/brown,/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_10)
-"cCq" = (/obj/structure/table/standard,/obj/machinery/newscaster{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_10)
"cCr" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/simulated/floor/tiled,/area/quartermaster/storage)
"cCs" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/vehicle/train/cargo/trolley,/obj/machinery/camera/network/cargo{c_tag = "CRG - Cargo Bay Starboard"; dir = 8; name = "security camera"},/turf/simulated/floor/tiled,/area/quartermaster/storage)
"cCt" = (/turf/simulated/wall,/area/quartermaster/warehouse)
@@ -6848,9 +6790,9 @@
"cCA" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor,/area/maintenance/apmaint)
"cCB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/meter,/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/maintenance/apmaint)
"cCC" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/portable_atmospherics/powered/scrubber,/turf/simulated/floor,/area/maintenance/apmaint)
-"cCD" = (/obj/structure/closet/secure_closet/engineering_personal,/obj/item/weapon/tank/emergency_oxygen/engi,/turf/simulated/floor/tiled/yellow,/area/engineering/locker_room)
+"cCD" = (/obj/structure/closet/secure_closet/atmos_personal,/turf/simulated/floor/tiled/yellow,/area/engineering/locker_room)
"cCE" = (/turf/simulated/floor/tiled/yellow,/area/engineering/locker_room)
-"cCF" = (/obj/structure/closet/secure_closet/atmos_personal,/obj/item/weapon/tank/emergency_oxygen/engi,/turf/simulated/floor/tiled/yellow,/area/engineering/locker_room)
+"cCF" = (/obj/structure/closet/secure_closet/engineering_personal,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/tiled/yellow,/area/engineering/locker_room)
"cCG" = (/turf/simulated/wall,/area/crew_quarters/sleep/engi_wash)
"cCH" = (/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/turf/simulated/floor/tiled,/area/hallway/secondary/engineering_hallway)
"cCI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/secondary/engineering_hallway)
@@ -6865,7 +6807,7 @@
"cCR" = (/obj/structure/table/reinforced,/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/ai_monitored/storage/eva)
"cCS" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/security/checkpoint2)
"cCT" = (/obj/structure/table/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/tiled/dark,/area/ai_monitored/storage/eva)
-"cCU" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/rig/unathi,/obj/item/clothing/mask/breath,/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"cCU" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/rig/breacher,/obj/item/clothing/mask/breath,/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
"cCV" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor,/area/maintenance/evahallway)
"cCW" = (/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{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/maintenance/evahallway)
"cCX" = (/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{dir = 4},/turf/simulated/floor,/area/maintenance/evahallway)
@@ -6884,7 +6826,7 @@
"cDk" = (/obj/machinery/atmospherics/pipe/manifold/hidden/cyan,/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor,/area/maintenance/bar)
"cDl" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 4; icon_state = "intact"; tag = "icon-intact-f (EAST)"},/obj/machinery/meter,/turf/simulated/floor,/area/maintenance/bar)
"cDm" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 10; icon_state = "intact"; tag = "icon-intact-f (NORTHWEST)"},/obj/machinery/floodlight,/turf/simulated/floor,/area/maintenance/bar)
-"cDn" = (/obj/item/stack/tile/floor,/turf/simulated/floor,/area/vacant/vacant_shop)
+"cDn" = (/obj/item/weapon/crowbar,/turf/simulated/floor/tiled,/area/vacant/vacant_shop)
"cDo" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar)
"cDp" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/wood,/area/crew_quarters/bar)
"cDq" = (/obj/structure/table/woodentable,/obj/item/weapon/material/ashtray/glass,/turf/simulated/floor/wood,/area/crew_quarters/bar)
@@ -6894,7 +6836,6 @@
"cDu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_3)
"cDv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_3)
"cDw" = (/obj/machinery/alarm{pixel_y = 22},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_3)
-"cDx" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/mirror{pixel_x = 28},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_3)
"cDy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_3)
"cDz" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock{name = "Room 3"},/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_3)
"cDA" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging)
@@ -6910,7 +6851,6 @@
"cDK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_9)
"cDL" = (/obj/machinery/alarm{pixel_y = 22},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_9)
"cDM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_9)
-"cDN" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/mirror{pixel_x = 28},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_9)
"cDO" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock{name = "Room 9"},/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_9)
"cDP" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock{name = "Room 10"},/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_10)
"cDQ" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_10)
@@ -6979,9 +6919,9 @@
"cFb" = (/obj/machinery/floor_light{anchored = 1},/obj/machinery/light{dir = 4},/turf/simulated/floor,/area/crew_quarters/bar)
"cFc" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar)
"cFd" = (/obj/machinery/floor_light{anchored = 1},/turf/simulated/floor,/area/crew_quarters/bar)
-"cFe" = (/obj/item/stack/tile/floor,/obj/item/frame/light,/turf/simulated/floor,/area/vacant/vacant_shop)
+"cFe" = (/obj/machinery/alarm{dir = 8; pixel_x = 25; pixel_y = 0},/turf/simulated/floor/tiled,/area/vacant/vacant_shop)
"cFf" = (/obj/structure/bed/chair/comfy/beige{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_3)
-"cFg" = (/obj/structure/table/reinforced,/obj/effect/floor_decal/corner/paleblue{dir = 6},/obj/item/device/radio{frequency = 1487; icon_state = "med_walkietalkie"; name = "Medbay Emergency Radio Link"},/obj/machinery/vending/wallmed1{name = "NanoMed Wall"; pixel_x = 25; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard)
+"cFg" = (/obj/structure/closet/secure_closet/engineering_personal,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/machinery/camera/network/engineering{c_tag = "ENG - Locker Room"; dir = 4},/turf/simulated/floor/tiled/yellow,/area/engineering/locker_room)
"cFh" = (/obj/structure/bed/chair/comfy/beige{dir = 8},/obj/machinery/camera/network/civilian{c_tag = "CIV - Visitor Room 3"; dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_3)
"cFi" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 2},/obj/machinery/light,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_3)
"cFj" = (/obj/structure/table/standard,/obj/machinery/microwave,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_3)
@@ -7006,7 +6946,7 @@
"cFC" = (/obj/structure/table/standard,/obj/machinery/microwave,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_10)
"cFD" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 2},/obj/machinery/light,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_10)
"cFE" = (/obj/structure/bed/chair/comfy/beige{dir = 4},/obj/machinery/camera/network/civilian{c_tag = "CIV - Visitor Room 10"; dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_10)
-"cFF" = (/obj/machinery/door/airlock/glass_medical{name = "First-Aid Station"; req_one_access = list(5,10,63)},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard)
+"cFF" = (/obj/structure/closet/wardrobe/engineering_yellow,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/machinery/firealarm{dir = 4; layer = 3.3; pixel_x = 26},/turf/simulated/floor/tiled/yellow,/area/engineering/locker_room)
"cFG" = (/obj/structure/bed/chair/comfy/beige{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_10)
"cFH" = (/obj/machinery/door/firedoor/border_only,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/ai_monitored/storage/eva)
"cFI" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/quartermaster/storage)
@@ -7022,7 +6962,7 @@
"cFS" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled,/area/quartermaster/warehouse)
"cFT" = (/obj/machinery/light/small{dir = 4; pixel_y = 0},/obj/structure/closet/crate,/turf/simulated/floor/tiled,/area/quartermaster/warehouse)
"cFU" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/meter,/turf/simulated/floor,/area/maintenance/apmaint)
-"cFV" = (/obj/structure/closet/secure_closet/engineering_personal,/obj/item/weapon/tank/emergency_oxygen/engi,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/tiled/yellow,/area/engineering/locker_room)
+"cFV" = (/obj/structure/closet/secure_closet/bar{req_access = list(25)},/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/item/weapon/storage/secure/safe{pixel_z = 30},/turf/simulated/floor/wood,/area/crew_quarters/bar)
"cFW" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/sleep/engi_wash)
"cFX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/security/checkpoint2)
"cFY" = (/obj/machinery/door/airlock{name = "Unit 1"},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/sleep/engi_wash)
@@ -7035,7 +6975,7 @@
"cGf" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/hallway/secondary/docking_hallway)
"cGg" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
"cGh" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
-"cGi" = (/obj/structure/table/standard,/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000; pixel_x = 5; pixel_y = -5},/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/item/weapon/storage/toolbox/mechanical,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/machinery/camera/network/research{c_tag = "SCI - Robotics Starboard"; dir = 8},/turf/simulated/floor/tiled,/area/assembly/robotics)
+"cGi" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/machinery/light,/obj/machinery/computer/operating{name = "Robotics Operating Computer"},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
"cGj" = (/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},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/quartermaster/storage)
"cGk" = (/obj/machinery/suit_storage_unit/standard_unit,/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
"cGl" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/maintenance/evahallway)
@@ -7067,9 +7007,9 @@
"cGL" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/closet/crate,/turf/simulated/floor/tiled/steel,/area/quartermaster/warehouse)
"cGM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/effect/floor_decal/industrial/warning,/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/maintenance/apmaint)
"cGN" = (/obj/effect/floor_decal/industrial/warning,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light/small{dir = 4},/turf/simulated/floor,/area/maintenance/apmaint)
-"cGO" = (/obj/structure/closet/secure_closet/engineering_personal,/obj/item/weapon/tank/emergency_oxygen/engi,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/machinery/camera/network/engineering{c_tag = "ENG - Locker Room"; dir = 4},/turf/simulated/floor/tiled/yellow,/area/engineering/locker_room)
+"cGO" = (/obj/structure/closet/wardrobe/atmospherics_yellow,/turf/simulated/floor/tiled/yellow,/area/engineering/locker_room)
"cGP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/tiled/yellow,/area/engineering/locker_room)
-"cGQ" = (/obj/structure/table/standard,/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"},/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/item/weapon/screwdriver,/obj/item/weapon/crowbar,/obj/item/weapon/circular_saw,/obj/item/weapon/hemostat,/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"cGQ" = (/obj/structure/table/standard,/obj/machinery/newscaster{pixel_x = 28; pixel_y = 1},/obj/machinery/cell_charger,/turf/simulated/floor/tiled,/area/assembly/robotics)
"cGR" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{pixel_x = -28; pixel_y = 0},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/sleep/engi_wash)
"cGS" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/security/checkpoint2)
"cGT" = (/turf/simulated/floor/tiled,/area/hallway/secondary/engineering_hallway)
@@ -7106,7 +7046,6 @@
"cHy" = (/turf/simulated/wall,/area/crew_quarters/sleep/vistor_room_1)
"cHz" = (/obj/structure/curtain/open/shower,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/window/southright{name = "Shower"},/obj/machinery/shower{pixel_y = 3},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_1)
"cHA" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_4)
-"cHB" = (/obj/structure/table/standard,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_1)
"cHC" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/corner/white{dir = 8},/obj/effect/floor_decal/corner/blue{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging)
"cHD" = (/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging)
"cHE" = (/turf/simulated/wall,/area/crew_quarters/sleep/vistor_room_2)
@@ -7116,11 +7055,9 @@
"cHI" = (/turf/simulated/wall,/area/crew_quarters/sleep/vistor_room_7)
"cHJ" = (/obj/structure/curtain/open/shower,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/window/southright{name = "Shower"},/obj/machinery/shower{pixel_y = 3},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_7)
"cHK" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_9)
-"cHL" = (/obj/structure/table/standard,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_7)
"cHM" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/corner/white{dir = 8},/obj/effect/floor_decal/corner/blue{dir = 1},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging)
"cHN" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging)
"cHO" = (/turf/simulated/wall,/area/crew_quarters/sleep/vistor_room_8)
-"cHP" = (/obj/structure/table/standard,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_8)
"cHQ" = (/obj/structure/toilet,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_8)
"cHR" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/sleep/engi_wash)
"cHS" = (/obj/machinery/door/firedoor/border_only,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/ai_monitored/storage/eva)
@@ -7137,7 +7074,7 @@
"cId" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/disposalpipe/segment,/obj/machinery/door/blast/regular{density = 0; dir = 1; icon_state = "pdoor0"; id = "atmoslockdown"; name = "Atmospherics Lockdown"; opacity = 0},/turf/simulated/floor,/area/maintenance/apmaint)
"cIe" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/door/blast/regular{density = 0; dir = 1; icon_state = "pdoor0"; id = "atmoslockdown"; name = "Atmospherics Lockdown"; opacity = 0},/turf/simulated/floor,/area/maintenance/apmaint)
"cIf" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/yellow,/area/engineering/locker_room)
-"cIg" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/machinery/light,/obj/machinery/computer/operating{name = "Robotics Operating Computer"},/obj/structure/window/reinforced/tinted{dir = 4; icon_state = "twindow"},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"cIg" = (/obj/machinery/ai_status_display{pixel_x = 0; pixel_y = 0},/turf/simulated/wall,/area/assembly/chargebay)
"cIh" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{pixel_x = -28; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/sleep/engi_wash)
"cIi" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/sleep/engi_wash)
"cIj" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/table/standard,/turf/simulated/floor/tiled/freezer,/area/crew_quarters/sleep/engi_wash)
@@ -7183,7 +7120,7 @@
"cIX" = (/obj/machinery/status_display/supply_display,/turf/simulated/wall,/area/quartermaster/warehouse)
"cIY" = (/obj/structure/closet/crate/medical,/obj/effect/floor_decal/corner/brown/full,/turf/simulated/floor/tiled,/area/quartermaster/warehouse)
"cIZ" = (/turf/simulated/floor/tiled/steel,/area/quartermaster/warehouse)
-"cJa" = (/turf/simulated/floor,/area/vacant/vacant_shop)
+"cJa" = (/obj/random/tech_supply,/turf/simulated/floor/tiled,/area/vacant/vacant_shop)
"cJb" = (/obj/structure/closet/crate/freezer,/obj/effect/floor_decal/corner/brown/full{dir = 4},/turf/simulated/floor/tiled/steel,/area/quartermaster/warehouse)
"cJc" = (/turf/simulated/floor/reinforced/airless,/area/engineering/atmos)
"cJd" = (/obj/machinery/camera/network/engineering{c_tag = "Atmos Tank - Gas Mixing"; dir = 2},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/reinforced/airless,/area/engineering/atmos)
@@ -7247,7 +7184,6 @@
"cKj" = (/turf/simulated/wall/r_wall,/area/engineering/atmos/monitoring)
"cKk" = (/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/tiled/yellow,/area/engineering/locker_room)
"cKl" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/firstaid/regular,/obj/item/bodybag/cryobag{pixel_x = 6},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/light_switch{pixel_x = 0; pixel_y = -27},/turf/simulated/floor/tiled/yellow,/area/engineering/locker_room)
-"cKm" = (/obj/machinery/light_switch{pixel_x = 0; pixel_y = -27},/obj/machinery/light_switch{pixel_x = 0; pixel_y = -27},/obj/structure/table/standard,/obj/structure/bedsheetbin,/obj/item/weapon/soap,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/sleep/engi_wash)
"cKn" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/sleep/engi_wash)
"cKo" = (/obj/machinery/shower{dir = 1},/obj/machinery/door/window/northleft{name = "Shower"; req_access = list()},/obj/structure/curtain/open/shower/engineering,/obj/structure/window/basic{dir = 8},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/sleep/engi_wash)
"cKp" = (/obj/machinery/shower{dir = 1},/obj/machinery/door/window/northright{dir = 1; name = "Shower"; req_access = list()},/obj/structure/curtain/open/shower/engineering,/obj/structure/window/basic{dir = 8},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/sleep/engi_wash)
@@ -7284,7 +7220,6 @@
"cKU" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock{name = "Room 1"},/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_1)
"cKV" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock{name = "Room 2"},/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_2)
"cKW" = (/obj/structure/toilet,/obj/machinery/light{dir = 1},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_2)
-"cKX" = (/obj/structure/table/standard,/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_2)
"cKY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_2)
"cKZ" = (/obj/machinery/alarm{pixel_y = 22},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_2)
"cLa" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_2)
@@ -7308,7 +7243,7 @@
"cLs" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; external_pressure_bound = 0; external_pressure_bound_default = 0; frequency = 1441; icon_state = "map_vent_in"; id_tag = "waste_out"; initialize_directions = 1; internal_pressure_bound = 4000; internal_pressure_bound_default = 4000; pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0; use_power = 1},/turf/simulated/floor/reinforced/airless,/area/engineering/atmos)
"cLt" = (/obj/machinery/power/smes/buildable{charge = 2e+006; RCon_tag = "Substation - Atmospherics"},/obj/structure/cable/cyan{d2 = 4; icon_state = "0-4"},/turf/simulated/floor,/area/engineering/atmos/storage)
"cLu" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor,/area/engineering/atmos/storage)
-"cLv" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/medical/first_aid_station_starboard)
+"cLv" = (/obj/effect/decal/cleanable/blood/oil/streak{amount = 0},/turf/simulated/floor/tiled,/area/vacant/vacant_shop)
"cLw" = (/obj/machinery/computer/general_air_control{frequency = 1443; level = 3; name = "Distribution and Waste Monitor"; sensors = list("mair_in_meter" = "Mixed Air In", "air_sensor" = "Mixed Air Supply Tank", "mair_out_meter" = "Mixed Air Out", "dloop_atm_meter" = "Distribution Loop", "wloop_atm_meter" = "Engine Waste")},/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring)
"cLx" = (/obj/machinery/firealarm{pixel_y = 24},/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring)
"cLy" = (/obj/structure/bed/chair/office/dark{dir = 4},/obj/machinery/button/remote/blast_door{id = "atmoslockdown"; name = "Atmospherics Lockdown"; pixel_x = 0; pixel_y = 24; req_access = newlist(); req_one_access = list(10,24)},/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring)
@@ -7353,11 +7288,9 @@
"cMl" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 2},/obj/machinery/light,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_1)
"cMm" = (/obj/structure/table/standard,/obj/machinery/microwave,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_1)
"cMn" = (/obj/structure/cable/green,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_1)
-"cMo" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/mirror{pixel_x = 28},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_1)
"cMp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_1)
"cMq" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/structure/mirror{pixel_x = -28},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_2)
"cMr" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_7)
-"cMs" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/mirror{pixel_x = 28},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_7)
"cMt" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/structure/mirror{pixel_x = -28},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_8)
"cMu" = (/obj/machinery/door/airlock{name = "Restroom"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_1)
"cMv" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall,/area/crew_quarters/sleep/vistor_room_2)
@@ -7396,12 +7329,12 @@
"cNc" = (/turf/simulated/floor/tiled,/area/engineering/foyer)
"cNd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/foyer)
"cNe" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/engineering/foyer)
-"cNf" = (/obj/item/weapon/crowbar,/turf/simulated/floor,/area/vacant/vacant_shop)
+"cNf" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_5)
"cNg" = (/obj/machinery/door/firedoor/border_only,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/ai_monitored/storage/eva)
"cNh" = (/obj/machinery/computer/atmos_alert,/obj/effect/floor_decal/corner/blue/full{dir = 8},/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief)
"cNi" = (/obj/machinery/computer/station_alert/all,/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief)
"cNj" = (/obj/structure/table/reinforced,/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/machinery/light{dir = 1},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 27},/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief)
-"cNk" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/regular{empty = 1; name = "First-Aid (empty)"},/obj/item/weapon/storage/firstaid/regular{empty = 1; name = "First-Aid (empty)"},/obj/item/weapon/storage/firstaid/regular{empty = 1; name = "First-Aid (empty)"},/obj/item/device/healthanalyzer,/obj/item/device/healthanalyzer,/obj/item/device/healthanalyzer,/obj/machinery/newscaster{pixel_x = 28; pixel_y = 1},/turf/simulated/floor/tiled,/area/assembly/robotics)
+"cNk" = (/turf/simulated/wall,/area/assembly/chargebay)
"cNl" = (/obj/machinery/button/remote/driver{id = "enginecore"; name = "Emergency Core Eject"; pixel_x = 0; pixel_y = 21},/obj/structure/window/basic,/turf/simulated/floor/tiled/freezer,/area/crew_quarters/heads/chief)
"cNm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/maintenance/engineering)
"cNn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/meter,/turf/simulated/floor,/area/maintenance/engineering)
@@ -7424,8 +7357,6 @@
"cNE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/lino,/area/hallway/secondary/entry/docking_lounge)
"cNF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/lino,/area/hallway/secondary/entry/docking_lounge)
"cNG" = (/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = 30},/turf/simulated/floor/lino,/area/hallway/secondary/entry/docking_lounge)
-"cNH" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/atm{pixel_x = -32; pixel_y = 0},/obj/structure/table/standard,/turf/simulated/floor/tiled,/area/crew_quarters/sleep/elevator)
-"cNI" = (/obj/machinery/newscaster{pixel_y = 32},/obj/machinery/firealarm{dir = 4; pixel_x = 26},/obj/structure/table/standard,/turf/simulated/floor/tiled,/area/crew_quarters/sleep/elevator)
"cNJ" = (/obj/structure/table/reinforced,/obj/machinery/door/blast/shutters{dir = 1; id = "bar"; layer = 3.1; name = "Bar Shutters"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/lino,/area/crew_quarters/bar)
"cNK" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/maintenance{name = "Bar Maintenance"; req_access = list(25)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/crew_quarters/bar)
"cNL" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar)
@@ -7463,7 +7394,6 @@
"cOr" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/effect/floor_decal/corner/yellow,/turf/simulated/floor/tiled,/area/engineering/foyer)
"cOs" = (/obj/machinery/atmospherics/pipe/simple/visible/green,/obj/structure/lattice,/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/explored/upper_level)
"cOt" = (/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief)
-"cOu" = (/obj/structure/table/reinforced,/obj/item/weapon/folder/yellow,/obj/item/weapon/stamp/ce,/obj/item/weapon/pen,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/flame/lighter/zippo,/obj/item/device/megaphone,/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief)
"cOv" = (/obj/machinery/computer/security/telescreen{desc = "Used to monitor the engine room."; layer = 3.3; name = "Engine Monitor"; network = list("Engine"); pixel_x = 0; pixel_y = 28},/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief)
"cOw" = (/obj/machinery/keycard_auth{pixel_x = 0; pixel_y = 24},/obj/machinery/button/remote/airlock{desc = "A remote control-switch for the engine core airlock hatch bolts."; id = "engine_access_hatch"; name = "Engine Hatch Bolt Control"; pixel_x = -6; pixel_y = 32; req_access = newlist(); specialfunctions = 4},/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for engine core."; id = "EngineVent"; name = "Engine Ventillatory Control"; pixel_x = 6; pixel_y = 32; req_access = newlist()},/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,/obj/machinery/newscaster{layer = 3.3; pixel_x = 27; pixel_y = 0},/obj/effect/floor_decal/corner/blue/full{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief)
"cOx" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/meter,/obj/effect/decal/cleanable/dirt,/obj/machinery/light/small{dir = 8},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor,/area/maintenance/engineering)
@@ -7478,7 +7408,6 @@
"cOG" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor,/area/maintenance/evahallway)
"cOH" = (/obj/structure/closet,/obj/item/clothing/glasses/welding,/obj/item/weapon/weldingtool,/obj/effect/decal/cleanable/dirt,/obj/item/clothing/shoes/workboots,/turf/simulated/floor/plating,/area/maintenance/apmaint)
"cOI" = (/obj/structure/table/reinforced,/obj/item/stack/material/plasteel{amount = 10},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/ai_monitored/storage/eva)
-"cOJ" = (/obj/structure/closet/wardrobe/engineering_yellow,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/machinery/firealarm{dir = 4; layer = 3.3; pixel_x = 26},/obj/item/clothing/shoes/workboots,/turf/simulated/floor/tiled/yellow,/area/engineering/locker_room)
"cOK" = (/obj/machinery/newscaster{pixel_x = -30},/turf/simulated/floor/lino,/area/hallway/secondary/entry/docking_lounge)
"cOL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/lino,/area/hallway/secondary/entry/docking_lounge)
"cOM" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow,/obj/structure/lattice,/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/explored/upper_level)
@@ -7487,12 +7416,11 @@
"cOP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/docking_lounge)
"cOQ" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/docking_lounge)
"cOR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/lino,/area/hallway/secondary/entry/docking_lounge)
-"cOS" = (/obj/structure/closet/wardrobe/atmospherics_yellow,/obj/item/clothing/shoes/workboots,/turf/simulated/floor/tiled/yellow,/area/engineering/locker_room)
+"cOS" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_11)
"cOT" = (/obj/effect/decal/cleanable/blood/oil,/obj/effect/decal/remains/robot,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/bar)
"cOU" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=2"; freq = 1400; location = "Bar"},/obj/structure/plasticflaps{opacity = 1},/obj/machinery/door/firedoor/border_only,/obj/effect/floor_decal/industrial/loading{tag = "icon-loadingarea (WEST)"; icon_state = "loadingarea"; dir = 8},/turf/simulated/floor/tiled,/area/crew_quarters/bar)
"cOV" = (/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 32; pixel_y = 0},/turf/simulated/floor/carpet,/area/crew_quarters/bar)
"cOW" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/bar)
-"cOX" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/structure/sign/securearea{desc = "Under the painting a plaque reads: 'While the meat grinder may not have spared you, fear not. Not one part of you has gone to waste... You were delicious.'"; icon_state = "monkey_painting"; name = "Mr. Deempisi portrait"; pixel_x = 28; pixel_y = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar)
"cOY" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/lino,/area/crew_quarters/bar)
"cOZ" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/primary/port)
"cPa" = (/obj/structure/table/woodentable,/obj/item/device/camera,/obj/machinery/newscaster{pixel_x = 31; pixel_y = 3},/turf/simulated/floor/carpet,/area/crew_quarters/bar)
@@ -7503,25 +7431,26 @@
"cPf" = (/obj/machinery/vending/coffee,/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_dinning)
"cPg" = (/obj/machinery/vending/snack,/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_dinning)
"cPh" = (/obj/machinery/vending/cigarette,/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/obj/machinery/camera/network/civilian{c_tag = "CIV - Visitor's Dinning"; dir = 2},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_dinning)
-"cPi" = (/obj/structure/reagent_dispensers/water_cooler,/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_dinning)
+"cPi" = (/obj/item/frame,/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/turf/simulated/floor/tiled,/area/vacant/vacant_shop)
"cPj" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/cups,/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_dinning)
"cPk" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_dinning)
"cPl" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging)
"cPm" = (/obj/machinery/door/firedoor/glass,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging)
"cPn" = (/turf/simulated/wall,/area/crew_quarters/visitor_lodging)
-"cPo" = (/obj/random/tech_supply,/turf/simulated/floor,/area/vacant/vacant_shop)
+"cPo" = (/obj/item/stack/cable_coil/green,/turf/simulated/floor/tiled,/area/vacant/vacant_shop)
"cPp" = (/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging)
"cPq" = (/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging)
"cPr" = (/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/obj/machinery/camera/network/civilian{c_tag = "CIV - Visitor's Lodging"; dir = 2},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging)
"cPs" = (/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/bed/chair/office/dark,/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging)
"cPt" = (/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging)
"cPu" = (/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging)
-"cPv" = (/obj/effect/decal/cleanable/blood/oil/streak{amount = 0},/turf/simulated/floor,/area/vacant/vacant_shop)
+"cPv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_5)
"cPw" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging)
"cPx" = (/turf/simulated/wall,/area/crew_quarters/visitor_laundry)
"cPy" = (/obj/machinery/washing_machine,/obj/effect/floor_decal/corner/blue{dir = 1},/obj/effect/floor_decal/corner/white{dir = 4},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_laundry)
"cPz" = (/obj/machinery/washing_machine,/obj/effect/floor_decal/corner/blue{dir = 1},/obj/effect/floor_decal/corner/white{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_laundry)
"cPA" = (/obj/effect/floor_decal/corner/blue{dir = 1},/obj/effect/floor_decal/corner/white{dir = 4},/obj/structure/undies_wardrobe,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_laundry)
+"cPB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_11)
"cPC" = (/obj/machinery/recharge_station,/obj/effect/floor_decal/corner/blue{dir = 1},/obj/effect/floor_decal/corner/white{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_laundry)
"cPD" = (/obj/structure/closet/wardrobe/pjs,/obj/effect/floor_decal/corner/blue{dir = 1},/obj/effect/floor_decal/corner/white{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_laundry)
"cPE" = (/obj/structure/closet/wardrobe/pjs,/obj/effect/floor_decal/corner/blue/diagonal,/obj/effect/floor_decal/corner/white{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_laundry)
@@ -7559,7 +7488,7 @@
"cQk" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/mask/breath,/obj/item/weapon/rig/ce/equipped,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief)
"cQl" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/maintenance/engineering)
"cQm" = (/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable,/turf/simulated/floor,/area/maintenance/evahallway)
-"cQn" = (/obj/structure/closet/secure_closet/engineering_chief,/obj/item/weapon/tank/emergency_oxygen/engi,/obj/effect/floor_decal/corner/blue/full{dir = 1},/obj/item/clothing/shoes/workboots,/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief)
+"cQn" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/vacant/vacant_shop)
"cQo" = (/obj/structure/bed/chair,/turf/simulated/floor/carpet,/area/hallway/secondary/entry/docking_lounge)
"cQp" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/lino,/area/hallway/secondary/entry/docking_lounge)
"cQq" = (/obj/structure/bed/chair,/obj/effect/landmark/start{name = "Assistant"},/turf/simulated/floor/carpet,/area/hallway/secondary/entry/docking_lounge)
@@ -7598,7 +7527,6 @@
"cQX" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging)
"cQY" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging)
"cQZ" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging)
-"cRa" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging)
"cRb" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_laundry)
"cRc" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_laundry)
"cRd" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_laundry)
@@ -7675,7 +7603,6 @@
"cSw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_laundry)
"cSx" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_laundry)
"cSy" = (/turf/simulated/floor/tiled,/area/crew_quarters/visitor_laundry)
-"cSz" = (/obj/structure/cable/green,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/effect/floor_decal/corner/white/diagonal{tag = "icon-corner_white_diagonal (EAST)"; icon_state = "corner_white_diagonal"; dir = 4},/obj/effect/floor_decal/corner/blue,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_laundry)
"cSA" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/regular{density = 0; dir = 1; icon_state = "pdoor0"; id = "atmoslockdown"; name = "Atmospherics Lockdown"; opacity = 0},/turf/simulated/floor,/area/engineering/atmos)
"cSB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/atmos)
"cSC" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled,/area/engineering/atmos)
@@ -7705,9 +7632,9 @@
"cTa" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "ceoffice"; name = "CE Office Privacy Shutters"; opacity = 0},/obj/structure/cable/green,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/crew_quarters/heads/chief)
"cTb" = (/obj/structure/flora/pottedplant{icon_state = "plant-20"; tag = "icon-plant-22"},/obj/effect/floor_decal/corner/blue/full,/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief)
"cTc" = (/obj/machinery/light,/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief)
-"cTd" = (/obj/effect/floor_decal/corner/blue{dir = 10},/obj/machinery/camera/network/engineering{c_tag = "ENG - CE's Office"; dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief)
+"cTd" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/tiled,/area/vacant/vacant_shop)
"cTe" = (/obj/machinery/light_switch{pixel_x = -12; pixel_y = -24},/obj/structure/cable/green,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief)
-"cTf" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief)
+"cTf" = (/obj/structure/closet/secure_closet/engineering_chief,/obj/effect/floor_decal/corner/blue/full{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief)
"cTg" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/obj/structure/extinguisher_cabinet{pixel_x = 25},/obj/effect/floor_decal/corner/blue/full{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief)
"cTh" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 8; icon_state = "map"; tag = "icon-manifold-f (WEST)"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/maintenance/evahallway)
"cTi" = (/obj/structure/bed/chair{dir = 1},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/turf/simulated/floor/carpet,/area/hallway/secondary/entry/docking_lounge)
@@ -7736,10 +7663,8 @@
"cTF" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging)
"cTG" = (/obj/effect/floor_decal/corner/blue,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging)
"cTH" = (/obj/structure/bed/chair{dir = 1},/obj/effect/floor_decal/corner/blue,/obj/effect/floor_decal/corner/white{dir = 8},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging)
-"cTI" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/blue,/obj/effect/floor_decal/corner/white/diagonal{tag = "icon-corner_white_diagonal (EAST)"; icon_state = "corner_white_diagonal"; dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging)
"cTJ" = (/obj/structure/closet/wardrobe/suit,/obj/effect/floor_decal/corner/blue,/obj/effect/floor_decal/corner/white{dir = 8},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_laundry)
"cTK" = (/obj/structure/closet/wardrobe/xenos,/obj/effect/floor_decal/corner/blue,/obj/effect/floor_decal/corner/white{dir = 8},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_laundry)
-"cTL" = (/obj/structure/closet/wardrobe/mixed,/obj/effect/floor_decal/corner/blue,/obj/effect/floor_decal/corner/white{dir = 8},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_laundry)
"cTM" = (/obj/structure/closet/wardrobe/white,/obj/effect/floor_decal/corner/blue,/obj/effect/floor_decal/corner/white{dir = 8},/obj/machinery/light,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_laundry)
"cTN" = (/obj/structure/closet/wardrobe/grey,/obj/effect/floor_decal/corner/blue,/obj/effect/floor_decal/corner/white{dir = 8},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_laundry)
"cTO" = (/obj/structure/closet/wardrobe/black,/obj/effect/floor_decal/corner/white/diagonal{tag = "icon-corner_white_diagonal (EAST)"; icon_state = "corner_white_diagonal"; dir = 4},/obj/effect/floor_decal/corner/blue,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_laundry)
@@ -7767,7 +7692,7 @@
"cUk" = (/turf/simulated/wall,/area/crew_quarters/heads/chief)
"cUl" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/engineering/atmos/monitoring)
"cUm" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "ceoffice"; name = "CE Office Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/crew_quarters/heads/chief)
-"cUn" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "ceoffice"; name = "CE Office Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/crew_quarters/heads/chief)
+"cUn" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled,/area/vacant/vacant_shop)
"cUo" = (/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,/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "ceoffice"; name = "CE Office Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/crew_quarters/heads/chief)
"cUp" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor,/area/maintenance/engineering)
"cUq" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor,/area/maintenance/evahallway)
@@ -7805,7 +7730,7 @@
"cUW" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/engineering/atmos)
"cUX" = (/obj/machinery/pipedispenser,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/tiled,/area/engineering/atmos)
"cUY" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/crew_quarters/visitor_lodging)
-"cUZ" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/structure/table/reinforced,/obj/item/weapon/storage/box/drinkingglasses,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 2},/turf/simulated/floor/tiled,/area/engineering/break_room)
+"cUZ" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/structure/table/reinforced,/obj/item/weapon/storage/box/glasses/square,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 2},/turf/simulated/floor/tiled,/area/engineering/break_room)
"cVa" = (/obj/structure/bed/chair/office/dark,/turf/simulated/floor/carpet,/area/engineering/break_room)
"cVb" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/effect/floor_decal/corner/white{tag = "icon-corner_white (NORTH)"; icon_state = "corner_white"; dir = 1},/obj/effect/floor_decal/corner/blue{dir = 8},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/obj/machinery/portable_atmospherics/powered/pump/filled,/turf/simulated/floor/tiled,/area/engineering/foyer)
"cVc" = (/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/foyer)
@@ -7900,7 +7825,7 @@
"cWN" = (/obj/structure/cable/cyan{d2 = 8; icon_state = "0-8"},/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 36; pixel_y = 0},/obj/machinery/power/apc/super{dir = 4; name = "east bump"; pixel_x = 24},/turf/simulated/floor/tiled,/area/engineering/atmos)
"cWO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/hallway/secondary/escape/dock_escape_pod_hallway_port)
"cWP" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/engineering/break_room)
-"cWQ" = (/obj/item/frame/light,/turf/simulated/floor,/area/vacant/vacant_shop)
+"cWQ" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/maintenance/bar)
"cWR" = (/obj/item/frame/light,/turf/simulated/floor/tiled,/area/vacant/vacant_shop)
"cWS" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/engineering/break_room)
"cWT" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/effect/floor_decal/corner/red{dir = 9},/obj/machinery/portable_atmospherics/powered/scrubber,/turf/simulated/floor/tiled,/area/engineering/foyer)
@@ -7938,7 +7863,6 @@
"cXz" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/entry/starboard)
"cXA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/entry/starboard)
"cXB" = (/obj/structure/closet/emcloset,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/starboard)
-"cXC" = (/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/starboard)
"cXD" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard)
"cXE" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard)
"cXF" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard)
@@ -8021,9 +7945,6 @@
"cZe" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard)
"cZf" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10; icon_state = "intact"; tag = "icon-intact-f (SOUTHWEST)"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard)
"cZg" = (/obj/structure/reagent_dispensers/fueltank,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor,/area/maintenance/bar)
-"cZh" = (/obj/machinery/space_heater,/turf/simulated/floor,/area/storage/emergency_storage/emergency5)
-"cZi" = (/obj/structure/table/rack{dir = 1},/obj/item/clothing/suit/fire/firefighter,/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/gas,/obj/item/weapon/extinguisher,/obj/item/clothing/head/hardhat/red,/obj/item/clothing/glasses/meson,/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/storage/emergency_storage/emergency5)
-"cZj" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/tank/oxygen,/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/extinguisher,/turf/simulated/floor/plating,/area/storage/emergency_storage/emergency5)
"cZk" = (/turf/simulated/floor/reinforced/oxygen,/area/engineering/atmos)
"cZl" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 4; frequency = 1441; icon_state = "map_injector"; id = "o2_in"; use_power = 1},/turf/simulated/floor/reinforced/oxygen,/area/engineering/atmos)
"cZm" = (/obj/structure/grille,/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/visible/red{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/wall/r_wall,/area/engineering/atmos)
@@ -8052,7 +7973,7 @@
"cZJ" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled,/area/engineering/foyer)
"cZK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/engineering/foyer)
"cZL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/window/westleft{name = "Engineering Reception Desk"; req_access = list(10); req_one_access = newlist()},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/engineering/foyer)
-"cZM" = (/obj/item/frame/fire_alarm,/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/turf/simulated/floor,/area/vacant/vacant_shop)
+"cZM" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor,/area/maintenance/bar)
"cZN" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/engineering/foyer)
"cZO" = (/obj/machinery/door/airlock/glass_engineeringatmos{name = "Engineering Monitoring Room"; req_one_access = list(11,24)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/engineering/engineering_monitoring)
"cZP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/engineering/engineering_monitoring)
@@ -8090,11 +8011,6 @@
"dav" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard)
"daw" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard)
"dax" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard)
-"day" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard)
-"daz" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/starboard)
-"daA" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock{name = "Emergency Storage"},/obj/machinery/door/firedoor,/turf/simulated/floor,/area/storage/emergency_storage/emergency5)
-"daB" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/storage/emergency_storage/emergency5)
-"daC" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor,/area/storage/emergency_storage/emergency5)
"daD" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor,/area/storage/emergency_storage/emergency5)
"daE" = (/obj/machinery/light/small{dir = 8},/obj/machinery/camera/network/engineering{c_tag = "Atmos Tank - Oxygen"; dir = 4},/turf/simulated/floor/reinforced/oxygen,/area/engineering/atmos)
"daF" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/reinforced/oxygen,/area/engineering/atmos)
@@ -8106,7 +8022,6 @@
"daL" = (/obj/machinery/atmospherics/pipe/manifold/visible/green{tag = "icon-map (EAST)"; icon_state = "map"; dir = 4},/obj/machinery/meter,/turf/simulated/floor/tiled,/area/engineering/atmos)
"daM" = (/obj/machinery/atmospherics/unary/freezer{dir = 2; icon_state = "freezer"},/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos)
"daN" = (/obj/machinery/atmospherics/unary/heater{dir = 2; icon_state = "heater"},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos)
-"daO" = (/obj/machinery/constructable_frame/machine_frame,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos)
"daP" = (/obj/machinery/atmospherics/pipe/simple/visible/red,/obj/machinery/meter,/turf/simulated/floor/tiled,/area/engineering/atmos)
"daQ" = (/obj/machinery/atmospherics/binary/pump{dir = 1; name = "Port to Waste"},/turf/simulated/floor/tiled,/area/engineering/atmos)
"daR" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/tiled,/area/engineering/atmos)
@@ -8169,9 +8084,6 @@
"dbW" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard)
"dbX" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard)
"dbY" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/starboard)
-"dbZ" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/storage/emergency_storage/emergency5)
-"dca" = (/obj/machinery/portable_atmospherics/canister/air,/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor,/area/storage/emergency_storage/emergency5)
-"dcb" = (/obj/machinery/floodlight,/turf/simulated/floor,/area/storage/emergency_storage/emergency5)
"dcc" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; external_pressure_bound = 0; external_pressure_bound_default = 0; frequency = 1441; icon_state = "map_vent_in"; id_tag = "o2_out"; initialize_directions = 1; internal_pressure_bound = 4000; internal_pressure_bound_default = 4000; pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0; use_power = 1},/turf/simulated/floor/reinforced/oxygen,/area/engineering/atmos)
"dcd" = (/obj/structure/grille,/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/visible/green{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/wall/r_wall,/area/engineering/atmos)
"dce" = (/obj/structure/cable/green,/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/power/apc/super/critical{dir = 2; is_critical = 1; name = "south bump"; pixel_y = -24},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port)
@@ -8200,14 +8112,14 @@
"dcB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/engineering)
"dcC" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/engineering)
"dcD" = (/obj/machinery/atmospherics/pipe/simple/visible/green{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/structure/lattice,/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/explored/upper_level)
-"dcE" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/vacant/vacant_shop)
+"dcE" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/door/airlock/command{name = "Chief Engineer"; req_access = list(56)},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief)
"dcF" = (/obj/machinery/portable_atmospherics/powered/pump/filled,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/engineering/engine_eva)
"dcG" = (/obj/machinery/portable_atmospherics/powered/pump/filled,/turf/simulated/floor/tiled,/area/engineering/engine_eva)
"dcH" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/engineering/engine_eva)
"dcI" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/engineering/engine_eva)
"dcJ" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow{tag = "icon-map (NORTH)"; icon_state = "map"; dir = 1},/obj/machinery/meter,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{density = 0; dir = 1; icon_state = "pdoor0"; id = "atmoslockdown"; name = "Atmospherics Lockdown"; opacity = 0},/turf/simulated/floor,/area/engineering/workshop)
"dcK" = (/obj/structure/table/rack{dir = 8; layer = 2.6},/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/tank/jetpack/carbondioxide,/obj/machinery/door/window/southright{name = "Jetpack Storage"; req_one_access = list(11,24)},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/engineering/engine_eva)
-"dcL" = (/obj/item/stack/cable_coil/green,/turf/simulated/floor,/area/vacant/vacant_shop)
+"dcL" = (/obj/machinery/door/airlock/command{name = "Chief Engineer"; req_access = list(56)},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief)
"dcM" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/maintenance{req_access = null; req_one_access = list(12,47)},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor,/area/maintenance/engineering)
"dcN" = (/obj/structure/closet,/obj/item/weapon/lipstick/purple,/turf/simulated/floor/plating,/area/maintenance/engineering)
"dcO" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/maintenance/engineering)
@@ -8220,7 +8132,7 @@
"dcV" = (/turf/simulated/wall/r_wall,/area/hallway/secondary/entry/port)
"dcW" = (/turf/simulated/wall/r_wall,/area/hallway/secondary/entry/D1)
"dcX" = (/turf/simulated/wall,/area/hallway/secondary/entry/D1)
-"dcY" = (/obj/item/frame/apc,/turf/simulated/floor,/area/vacant/vacant_shop)
+"dcY" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "tox_sensor"},/turf/simulated/floor/reinforced/phoron,/area/engineering/atmos)
"dcZ" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1)
"dda" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/tiled,/area/vacant/vacant_shop)
"ddb" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/engineering/workshop)
@@ -8239,7 +8151,7 @@
"ddo" = (/turf/simulated/wall/r_wall,/area/hallway/secondary/entry/D4)
"ddp" = (/obj/structure/table/steel,/obj/item/weapon/tank/emergency_oxygen/engi,/obj/random/tech_supply,/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor,/area/construction)
"ddq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor,/area/maintenance/bar)
-"ddr" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/maintenance/bar)
+"ddr" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 1; frequency = 1441; icon_state = "map_injector"; id = "tox_in"; use_power = 1; pixel_y = 1},/turf/simulated/floor/reinforced/phoron,/area/engineering/atmos)
"dds" = (/turf/simulated/wall,/area/hallway/secondary/entry/D4)
"ddt" = (/obj/structure/table/rack{dir = 8; layer = 2.6},/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/tank/jetpack/carbondioxide,/obj/machinery/door/window/southleft{name = "Jetpack Storage"; req_access = newlist(); req_one_access = list(11,24)},/turf/simulated/floor/tiled,/area/engineering/engine_eva)
"ddu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/binary/pump{dir = 4; name = "O2 to Connector"},/turf/simulated/floor/tiled,/area/engineering/atmos)
@@ -8368,7 +8280,7 @@
"dfN" = (/obj/item/clothing/shoes/magboots,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/void/engineering,/obj/structure/table/rack{dir = 8; layer = 2.6},/obj/item/clothing/suit/space/void/engineering,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/window/northright{name = "Engineering Hardsuits"; req_access = list(11)},/obj/machinery/light,/turf/simulated/floor/tiled,/area/engineering/engine_eva)
"dfO" = (/obj/structure/bed/chair,/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{frequency = 1380; id_tag = "escape_pod_6"; pixel_x = 25; pixel_y = 0; tag_door = "escape_pod_6_hatch"},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = -32; pixel_y = 0},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod6/station)
"dfP" = (/obj/structure/bed/chair,/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{frequency = 1380; id_tag = "escape_pod_5"; pixel_x = 25; pixel_y = 0; tag_door = "escape_pod_5_hatch"},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = -32; pixel_y = 0},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod5/station)
-"dfQ" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/constructable_frame/machine_frame,/turf/simulated/floor/tiled,/area/engineering/workshop)
+"dfQ" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 0; external_pressure_bound_default = 0; frequency = 1441; icon_state = "map_vent_in"; id_tag = "tox_out"; initialize_directions = 1; internal_pressure_bound = 4000; internal_pressure_bound_default = 4000; use_power = 1; pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0},/turf/simulated/floor/reinforced/phoron,/area/engineering/atmos)
"dfR" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/entry/D1)
"dfS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/entry/D1)
"dfT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/entry/D1)
@@ -8594,9 +8506,9 @@
"dkf" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 1; frequency = 1441; icon_state = "map_injector"; id = "co2_in"; use_power = 1; pixel_y = 1},/turf/simulated/floor/reinforced/carbon_dioxide,/area/engineering/atmos)
"dkg" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "co2_sensor"},/turf/simulated/floor/reinforced/carbon_dioxide,/area/engineering/atmos)
"dkh" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 0; external_pressure_bound_default = 0; frequency = 1441; icon_state = "map_vent_in"; id_tag = "co2_out"; initialize_directions = 1; internal_pressure_bound = 4000; internal_pressure_bound_default = 4000; use_power = 1; pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0},/turf/simulated/floor/reinforced/carbon_dioxide,/area/engineering/atmos)
-"dki" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 1; frequency = 1441; icon_state = "map_injector"; id = "tox_in"; use_power = 1; pixel_y = 1},/turf/simulated/floor/reinforced/airmix,/area/engineering/atmos)
-"dkj" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "tox_sensor"},/turf/simulated/floor/reinforced/airmix,/area/engineering/atmos)
-"dkk" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 0; external_pressure_bound_default = 0; frequency = 1441; icon_state = "map_vent_in"; id_tag = "tox_out"; initialize_directions = 1; internal_pressure_bound = 4000; internal_pressure_bound_default = 4000; use_power = 1; pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0},/turf/simulated/floor/reinforced/airmix,/area/engineering/atmos)
+"dki" = (/obj/machinery/portable_atmospherics/canister/phoron,/turf/simulated/floor/reinforced/phoron,/area/engineering/atmos)
+"dkj" = (/turf/simulated/floor/reinforced/phoron,/area/engineering/atmos)
+"dkk" = (/obj/machinery/light/small,/obj/machinery/camera/network/engineering{c_tag = "Atmospherics Tank - Phoron"; dir = 1},/turf/simulated/floor/reinforced/phoron,/area/engineering/atmos)
"dkl" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 1; frequency = 1441; icon_state = "map_injector"; id = "n2o_in"; use_power = 1; pixel_y = 1},/turf/simulated/floor/reinforced/n20,/area/engineering/atmos)
"dkm" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "n2o_sensor"},/turf/simulated/floor/reinforced/n20,/area/engineering/atmos)
"dkn" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 0; external_pressure_bound_default = 0; frequency = 1441; icon_state = "map_vent_in"; id_tag = "n2o_out"; initialize_directions = 1; internal_pressure_bound = 4000; internal_pressure_bound_default = 4000; use_power = 1; pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0},/turf/simulated/floor/reinforced/n20,/area/engineering/atmos)
@@ -8628,8 +8540,8 @@
"dkN" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/entry/D2)
"dkO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/entry/D2)
"dkP" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2)
-"dkQ" = (/obj/machinery/light{dir = 1},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/shuttle/floor,/area/shuttle/arrival/station)
-"dkR" = (/obj/machinery/requests_console{department = "Arrival shuttle"; pixel_y = 26},/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/arrival/station)
+"dkQ" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "virologyq_airlock_control"; name = "Virology Quarantine Access Button"; pixel_x = -28; pixel_y = 0; req_access = list(39)},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/structure/disposalpipe/segment,/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"dkR" = (/obj/effect/floor_decal/corner/lime{dir = 10},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor/tiled/white,/area/medical/virology)
"dkS" = (/obj/machinery/status_display{pixel_y = 30},/turf/simulated/shuttle/floor,/area/shuttle/arrival/station)
"dkT" = (/obj/effect/floor_decal/industrial/warning/corner,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
"dkU" = (/obj/machinery/atmospherics/pipe/simple/visible/red{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/explored/upper_level)
@@ -8647,7 +8559,6 @@
"dlg" = (/obj/machinery/power/solar{id = "portsolar"; name = "Port Solar Array"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/port)
"dlh" = (/turf/simulated/floor/reinforced/carbon_dioxide,/area/engineering/atmos)
"dli" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/turf/simulated/floor/reinforced/carbon_dioxide,/area/engineering/atmos)
-"dlj" = (/obj/machinery/portable_atmospherics/canister/phoron,/turf/simulated/floor/reinforced/airmix,/area/engineering/atmos)
"dlk" = (/turf/simulated/floor/reinforced/n20,/area/engineering/atmos)
"dll" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/reinforced/n20,/area/engineering/atmos)
"dlm" = (/obj/machinery/recharge_station,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
@@ -8704,7 +8615,6 @@
"dml" = (/obj/machinery/vending/snack,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D4)
"dmm" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/airless,/area/solar/port)
"dmn" = (/obj/machinery/light/small,/obj/machinery/camera/network/engineering{c_tag = "Atmospherics Tank - Carbon Dioxide"; dir = 1},/turf/simulated/floor/reinforced/carbon_dioxide,/area/engineering/atmos)
-"dmo" = (/obj/machinery/light/small,/obj/machinery/camera/network/engineering{c_tag = "Atmospherics Tank - Phoron"; dir = 1},/turf/simulated/floor/reinforced/airmix,/area/engineering/atmos)
"dmp" = (/obj/machinery/light/small,/obj/machinery/camera/network/engineering{c_tag = "Atmospherics Tank - Nitrous Oxide"; dir = 1},/turf/simulated/floor/reinforced/n20,/area/engineering/atmos)
"dmq" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor,/area/engineering/drone_fabrication)
"dmr" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
@@ -8822,7 +8732,6 @@
"doz" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
"doA" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D4)
"doB" = (/turf/space,/area/syndicate_station/southeast)
-"doC" = (/obj/structure/cable/yellow,/turf/simulated/floor/airless,/area/solar/port)
"doD" = (/obj/structure/lattice,/obj/item/stack/cable_coil/yellow{pixel_x = 2; pixel_y = 2},/obj/item/stack/cable_coil/yellow,/turf/space,/area/space)
"doE" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/turf/simulated/floor/plating,/area/hallway/secondary/entry/D3)
"doF" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/airless,/area/maintenance/portsolar)
@@ -8879,9 +8788,9 @@
"dpE" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D4)
"dpF" = (/obj/machinery/power/tracker,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/airless,/area/solar/port)
"dpG" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/airless,/area/solar/port)
-"dpH" = (/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/airless,/area/solar/port)
-"dpI" = (/turf/simulated/floor/airless,/area/solar/port)
-"dpJ" = (/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/airless,/area/solar/port)
+"dpH" = (/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiavulgaris,/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiavulgaris,/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiavulgaris,/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiavulgaris,/turf/simulated/floor,/area/maintenance/security_starboard)
+"dpI" = (/obj/item/tape/atmos,/obj/machinery/door/airlock/maintenance{req_access = list(12)},/turf/simulated/floor,/area/maintenance/security_starboard)
+"dpJ" = (/obj/item/seeds/poppyseed,/obj/item/seeds/poppyseed,/obj/item/seeds/poppyseed,/turf/simulated/floor,/area/maintenance/security_starboard)
"dpK" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; layer = 3.3; master_tag = "robotics_solar_airlock"; name = "exterior access button"; pixel_x = 25; pixel_y = 25; req_access = list(11,13)},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/airless,/area/solar/port)
"dpL" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "robotics_solar_outer"; locked = 1; name = "Engineering External Access"; req_access = list(11,13)},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/portsolar)
"dpM" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "robotics_solar_pump"},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "robotics_solar_pump"; tag_exterior_door = "robotics_solar_outer"; frequency = 1379; id_tag = "robotics_solar_airlock"; tag_interior_door = "robotics_solar_inner"; layer = 3.3; pixel_x = 0; pixel_y = -25; req_access = list(13); tag_chamber_sensor = "robotics_solar_sensor"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "robotics_solar_sensor"; layer = 3.3; pixel_x = 12; pixel_y = -25},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/industrial/warning/full,/turf/simulated/floor/plating,/area/maintenance/portsolar)
@@ -8929,7 +8838,7 @@
"dqC" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D4)
"dqD" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D4)
"dqE" = (/turf/simulated/wall,/area/hallway/secondary/escape/dock_escape_pod_hallway_starboard)
-"dqF" = (/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/airless,/area/solar/port)
+"dqF" = (/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor,/area/maintenance/security_starboard)
"dqG" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/airless,/area/maintenance/portsolar)
"dqH" = (/obj/machinery/power/solar_control{id = "portsolar"; name = "Aft Port Solar Control"; track = 0},/obj/structure/cable/yellow,/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/turf/simulated/floor/plating,/area/maintenance/portsolar)
"dqI" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock/glass{name = "Dock"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1)
@@ -9457,7 +9366,7 @@
"dAK" = (/obj/machinery/power/generator{anchored = 1; dir = 4},/obj/structure/cable/yellow,/turf/simulated/floor/plating,/area/engineering/engine_room)
"dAL" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/machinery/atmospherics/pipe/simple/visible/black{dir = 6},/turf/simulated/floor/plating,/area/engineering/engine_room)
"dAM" = (/obj/machinery/atmospherics/pipe/simple/visible/black{dir = 9},/turf/simulated/floor/plating,/area/engineering/engine_room)
-"dAN" = (/obj/structure/cable/yellow,/turf/simulated/floor/airless,/area/solar/starboard)
+"dAN" = (/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor,/area/maintenance/security_starboard)
"dAO" = (/obj/machinery/atmospherics/pipe/manifold/visible/black{dir = 8},/obj/machinery/meter,/turf/simulated/floor,/area/engineering/engine_room)
"dAP" = (/obj/machinery/atmospherics/pipe/simple/visible/black{dir = 10},/turf/simulated/floor,/area/engineering/engine_room)
"dAQ" = (/obj/structure/grille,/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{tag = "icon-phoronrwindow (EAST)"; icon_state = "phoronrwindow"; dir = 4},/obj/structure/window/phoronreinforced{tag = "icon-phoronrwindow (WEST)"; icon_state = "phoronrwindow"; dir = 8},/obj/machinery/door/blast/regular{dir = 1; id = "SupermatterPort"; layer = 3.3; name = "Reactor Blast Door"},/turf/simulated/floor/plating,/area/engineering/engine_room)
@@ -9470,7 +9379,7 @@
"dAX" = (/obj/machinery/atmospherics/valve/digital{dir = 4; name = "Emergency Cooling Valve 2"},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/plating,/area/engineering/engine_room)
"dAY" = (/obj/machinery/atmospherics/pipe/manifold/visible/black,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/plating,/area/engineering/engine_room)
"dAZ" = (/obj/machinery/atmospherics/pipe/simple/visible/black{dir = 9},/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/turf/simulated/floor/plating,/area/engineering/engine_room)
-"dBa" = (/turf/simulated/floor/airless,/area/solar/starboard)
+"dBa" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/effect/floor_decal/corner/paleblue/full{dir = 8},/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor/tiled,/area/medical/morgue)
"dBb" = (/obj/machinery/atmospherics/pipe/simple/visible/black,/turf/simulated/wall/r_wall,/area/engineering/engine_room)
"dBc" = (/obj/machinery/atmospherics/pipe/simple/visible/black,/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_x = 0; pixel_y = 0},/turf/simulated/wall/r_wall,/area/engineering/engine_room)
"dBd" = (/obj/machinery/door/blast/regular{icon_state = "pdoor1"; id = "EngineVent"; name = "Reactor Vent"; p_open = 0},/turf/simulated/floor/reinforced,/area/engineering/engine_room)
@@ -9480,8 +9389,8 @@
"dBh" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EJECTION/VENTING PORT'."; name = "\improper EJECTION/VENTING PORT"; pixel_y = 32},/turf/space,/area/space)
"dBi" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/airless,/area/solar/starboard)
"dBj" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/airless,/area/solar/starboard)
-"dBk" = (/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/airless,/area/solar/starboard)
-"dBl" = (/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/airless,/area/solar/starboard)
+"dBk" = (/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/sleeper)
+"dBl" = (/obj/item/clothing/gloves/boxing/blue,/turf/simulated/floor,/area/maintenance/pool)
"dBm" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/airless,/area/solar/starboard)
"dBn" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/airless,/area/solar/starboard)
"dBo" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging,/obj/structure/lattice,/turf/space,/area/space)
@@ -9489,7 +9398,7 @@
"dBq" = (/obj/machinery/power/solar{id = "starboardsolar"; name = "Starboard Solar Array"},/obj/structure/cable/yellow,/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/starboard)
"dBr" = (/obj/effect/landmark{name = "carpspawn"},/turf/space,/area/skipjack_station/southwest_solars)
"dBs" = (/turf/space,/area/skipjack_station/southeast_solars)
-"dBt" = (/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/airless,/area/solar/starboard)
+"dBt" = (/obj/item/weapon/caution/cone,/turf/simulated/floor,/area/maintenance/pool)
"dBu" = (/obj/machinery/power/tracker,/obj/structure/cable/yellow,/turf/simulated/floor/airless,/area/solar/starboard)
"dBv" = (/turf/space,/area/syndicate_station/south)
"dBw" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "EngineRadiatorViewport"; name = "Engine Radiator Viewport Shutter"; opacity = 0},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/visible/green{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/engineering/engine_room)
@@ -9515,7 +9424,6 @@
"dBQ" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{pixel_x = -3; pixel_y = 0},/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{pixel_x = 3},/obj/item/weapon/material/kitchen/utensil/fork,/obj/item/weapon/material/kitchen/utensil/spoon{pixel_x = 2},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/tiled/neutral,/area/crew_quarters/cafeteria)
"dBR" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{pixel_x = -3; pixel_y = 0},/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{pixel_x = 3},/turf/simulated/floor/tiled/neutral,/area/crew_quarters/cafeteria)
"dBS" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/window/southleft,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/bar)
-"dBT" = (/obj/structure/closet/secure_closet/bar{req_access = list(25)},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/wood,/area/crew_quarters/bar)
"dBU" = (/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{pixel_x = 2; pixel_y = 6},/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{pixel_x = -2; pixel_y = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar)
"dBV" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/wood,/area/crew_quarters/bar)
"dBW" = (/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/disposal,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_1)
@@ -9573,7 +9481,6 @@
"dCW" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light/small{dir = 4; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4; icon_state = "map"; tag = "icon-manifold-f (EAST)"},/turf/simulated/floor,/area/maintenance/bar)
"dCX" = (/obj/machinery/camera/network/northern_star{c_tag = "DOCK - Hallway Mid 1"; dir = 2},/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/port)
"dCY" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard)
-"dCZ" = (/obj/machinery/camera/network/northern_star{c_tag = "DOCK - Hallway Starboard 3"},/obj/machinery/alarm{dir = 8; pixel_x = 25; pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/starboard)
"dDa" = (/obj/structure/closet/wardrobe/black,/obj/item/clothing/shoes/combat,/turf/simulated/floor,/area/maintenance/engineering)
"dDb" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "dock_three_fore_airlock"; name = "interior access button"; pixel_x = 26; pixel_y = 26; req_one_access = list(13)},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
"dDc" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4; icon_state = "map"; tag = "icon-manifold-f (EAST)"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "dock_four_fore_airlock"; name = "interior access button"; pixel_x = -26; pixel_y = 26; req_one_access = list(13)},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D4)
@@ -9626,45 +9533,18 @@
"dDX" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/item/clothing/glasses/sunglasses,/obj/structure/closet/crate,/turf/simulated/floor,/area/maintenance/engineering)
"dDY" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/hallway/secondary/entry/starboard)
"dDZ" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard)
-"dEa" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/closet/secure_closet/engineering_welding,/obj/item/clothing/glasses/welding,/obj/item/clothing/glasses/welding,/obj/item/clothing/glasses/welding,/turf/simulated/floor/tiled,/area/engineering/workshop)
"dEb" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/space_heater,/turf/simulated/floor,/area/engineering/storage)
"dEc" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 28},/obj/machinery/space_heater,/turf/simulated/floor,/area/engineering/storage)
"dEd" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/portable_atmospherics/canister/phoron,/turf/simulated/floor,/area/engineering/storage)
"dEe" = (/obj/item/weapon/storage/box/matches,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/deck/cards,/obj/machinery/light_switch{pixel_x = 28; pixel_y = 0},/obj/structure/table/steel,/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
-"dEf" = (/obj/machinery/door/airlock/glass_security{name = "Solitary Confinement 1"; req_access = list(2)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/security/security_cell_hallway)
-"dEg" = (/obj/machinery/door/airlock/glass_security{name = "Solitary Confinement 2"; req_access = list(2)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/security/security_cell_hallway)
"dEh" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/tiled,/area/security/security_cell_hallway)
"dEi" = (/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/tiled,/area/security/security_cell_hallway)
-"dEj" = (/obj/structure/table/glass,/obj/effect/floor_decal/corner/paleblue{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station)
-"dEk" = (/obj/structure/table/glass,/obj/structure/table/glass,/obj/effect/floor_decal/corner/paleblue/full{dir = 4},/obj/structure/extinguisher_cabinet{pixel_x = 25; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station)
"dEl" = (/turf/simulated/wall,/area/medical/first_aid_station)
-"dEm" = (/obj/structure/table/glass,/obj/machinery/alarm{dir = 8; pixel_x = 25; pixel_y = 0},/obj/effect/floor_decal/corner/paleblue{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station)
-"dEn" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled/white,/area/medical/first_aid_station)
-"dEo" = (/turf/simulated/floor/tiled/white,/area/medical/first_aid_station)
-"dEp" = (/obj/effect/floor_decal/corner/paleblue{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station)
-"dEq" = (/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/green,/obj/effect/floor_decal/corner/paleblue/full,/obj/machinery/light_switch{pixel_x = -25},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station)
-"dEr" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"dEs" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"dEt" = (/obj/machinery/door/airlock/medical{name = "First-Aid Station"; req_access = list(5)},/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station)
-"dEu" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid)
-"dEv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station)
-"dEw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/effect/floor_decal/corner/paleblue{dir = 9},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station)
-"dEx" = (/obj/effect/floor_decal/corner/paleblue{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station)
-"dEy" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station)
-"dEz" = (/obj/structure/table/rack,/obj/item/weapon/storage/firstaid/adv,/obj/item/bodybag/cryobag,/obj/item/weapon/crowbar,/obj/effect/floor_decal/corner/paleblue/full{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station)
-"dEA" = (/obj/machinery/firealarm{dir = 4; pixel_x = 26},/obj/machinery/sleep_console{tag = "icon-sleeperconsole (NORTH)"; icon_state = "sleeperconsole"; dir = 1},/obj/effect/floor_decal/corner/paleblue{dir = 6},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station)
-"dEB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/first_aid_station)
-"dEC" = (/obj/machinery/computer/crew,/obj/effect/floor_decal/corner/paleblue{dir = 9},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station)
-"dED" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/obj/structure/sign/redcross{name = "FirstAid"},/obj/machinery/door/blast/shutters{dir = 8; id = "port_first_aid"; layer = 3.1; name = "Security Shutters"},/turf/simulated/floor/plating,/area/medical/first_aid_station)
-"dEE" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/effect/floor_decal/corner/paleblue{dir = 5},/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station)
-"dEF" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/effect/floor_decal/corner/paleblue/full{dir = 8},/obj/machinery/button/remote/blast_door{id = "port_first_aid"; name = "Security Shutters"; pixel_y = 25},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station)
-"dEG" = (/obj/machinery/sleeper,/obj/effect/floor_decal/corner/paleblue/full{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station)
-"dEH" = (/obj/effect/floor_decal/corner/paleblue{dir = 5},/obj/structure/sign/poster{pixel_y = 32},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station)
-"dEI" = (/obj/structure/table/reinforced,/obj/machinery/door/window{name = "First-Aid Station"; req_access = list(5)},/obj/machinery/door/window/westleft,/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/shutters{dir = 8; id = "port_first_aid"; layer = 3.1; name = "Security Shutters"},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station)
+"dEo" = (/turf/simulated/wall,/area/maintenance/engineering/pumpstation)
+"dEB" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/machinery/portable_atmospherics/powered/scrubber,/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation)
"dEJ" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "QM #1"},/obj/effect/floor_decal/industrial/outline/yellow,/mob/living/bot/mulebot,/turf/simulated/floor/tiled,/area/quartermaster/storage)
"dEK" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "QM #2"},/obj/effect/floor_decal/industrial/outline/yellow,/mob/living/bot/mulebot,/turf/simulated/floor/tiled,/area/quartermaster/storage)
"dEL" = (/turf/simulated/mineral,/area/mine/explored/upper_level)
-"dEM" = (/obj/structure/table/standard,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_5)
"dEN" = (/obj/structure/table/standard,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_6)
"dEO" = (/turf/simulated/wall,/area/medical/first_aid_station_starboard)
"dEP" = (/obj/structure/table/standard,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_11)
@@ -9683,7 +9563,6 @@
"dFc" = (/obj/structure/table/reinforced,/obj/machinery/cash_register/civilian{tag = "icon-register_idle (WEST)"; icon_state = "register_idle"; dir = 8},/obj/machinery/door/blast/shutters{dir = 4; id = "bar"; layer = 3.1; name = "Bar Shutters"},/turf/simulated/floor/lino,/area/crew_quarters/bar)
"dFd" = (/obj/structure/closet/gmcloset{icon_closed = "black"; icon_state = "black"; name = "formal wardrobe"},/obj/item/glass_jar,/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/item/device/retail_scanner/civilian,/obj/item/device/retail_scanner/civilian,/turf/simulated/floor/wood,/area/crew_quarters/bar)
"dFe" = (/obj/machinery/vending/coffee,/obj/effect/floor_decal/corner/paleblue{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
-"dFf" = (/obj/machinery/meter,/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/machinery/atmospherics/pipe/manifold/hidden/cyan,/turf/simulated/floor/plating,/area/maintenance/medbay_aft)
"dFm" = (/obj/machinery/flasher/portable,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/security_equiptment_storage)
"dFn" = (/obj/machinery/flasher/portable,/obj/machinery/camera/network/security{c_tag = "Armoury"},/obj/machinery/light{dir = 1},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/security_equiptment_storage)
"dFo" = (/obj/item/device/radio/intercom{broadcasting = 0; dir = 1; frequency = 1475; icon_state = "intercom"; listening = 1; name = "Station Intercom (Security)"; pixel_x = 0; pixel_y = 21},/turf/simulated/floor/tiled,/area/security/security_equiptment_storage)
@@ -9720,9 +9599,6 @@
"dFU" = (/obj/machinery/light,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/tiled/dark,/area/security/armoury)
"dFV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/security/armoury)
"dFW" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/window/brigdoor/northleft{name = "Weapons locker"; req_access = list(2)},/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/window/reinforced{dir = 4},/obj/item/clothing/suit/storage/vest/heavy/officer,/obj/item/clothing/suit/storage/vest/heavy/officer,/obj/item/clothing/suit/storage/vest/heavy/officer,/obj/item/clothing/suit/storage/vest/heavy/officer,/turf/simulated/floor/tiled,/area/security/security_equiptment_storage)
-"dFX" = (/obj/structure/table/rack,/obj/effect/floor_decal/corner/blue{dir = 10},/obj/structure/window/reinforced,/obj/random/energy,/obj/random/energy,/obj/machinery/door/window/brigdoor/northleft{name = "Energy"; req_access = list(2)},/turf/simulated/floor/tiled/dark,/area/security/armoury)
-"dFY" = (/obj/structure/table/rack,/obj/effect/floor_decal/corner/blue/full,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/gun/energy/ionrifle,/obj/item/weapon/gun/energy/ionrifle{pixel_x = -2; pixel_y = -2},/obj/machinery/door/window/brigdoor/northleft{name = "Energy"; req_access = list(2)},/turf/simulated/floor/tiled/dark,/area/security/armoury)
-"dFZ" = (/obj/structure/table/rack,/obj/effect/floor_decal/corner/blue{dir = 10},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/item/weapon/gun/energy/gun{pixel_x = 3; pixel_y = 3},/obj/item/weapon/gun/energy/gun,/obj/machinery/door/window/brigdoor/northleft{name = "Energy"; req_access = list(2)},/turf/simulated/floor/tiled/dark,/area/security/armoury)
"dGa" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/dark,/area/security/armoury)
"dGb" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/security/armoury)
"dGc" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled/dark,/area/security/armoury)
@@ -9744,9 +9620,50 @@
"dGu" = (/obj/structure/table/rack,/obj/effect/floor_decal/corner/green/full{dir = 4},/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/machinery/door/window/brigdoor/westleft{name = "Bullet Armor"; req_access = list(1)},/obj/item/clothing/gloves/arm_guard/bulletproof,/obj/item/clothing/shoes/leg_guard/bulletproof,/obj/item/clothing/suit/armor/bulletproof/alt,/obj/item/clothing/head/helmet/bulletproof,/turf/simulated/floor/tiled/dark,/area/security/armoury)
"dGv" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled/dark,/area/security/armoury)
"dGw" = (/obj/machinery/light,/turf/simulated/floor/tiled/dark,/area/security/armoury)
-"dGx" = (/obj/structure/table/rack,/obj/effect/floor_decal/corner/blue{dir = 10},/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/item/clothing/suit/armor/laserproof{pixel_x = 0; pixel_y = 0},/obj/machinery/door/window/brigdoor/northleft{name = "Laser Armor"; req_access = list(2)},/obj/item/clothing/gloves/arm_guard/laserproof,/obj/item/clothing/shoes/leg_guard/laserproof,/obj/item/clothing/head/helmet/laserproof,/turf/simulated/floor/tiled/dark,/area/security/armoury)
-"dGy" = (/obj/structure/table/rack,/obj/effect/floor_decal/corner/blue/full,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/item/clothing/suit/armor/laserproof{pixel_x = 0; pixel_y = 0},/obj/machinery/door/window/brigdoor/northleft{name = "Laser Armor"; req_access = list(2)},/obj/machinery/light,/obj/item/clothing/gloves/arm_guard/laserproof,/obj/item/clothing/shoes/leg_guard/laserproof,/obj/item/clothing/head/helmet/laserproof,/turf/simulated/floor/tiled/dark,/area/security/armoury)
-"dGz" = (/obj/structure/table/rack,/obj/effect/floor_decal/corner/blue/full{dir = 4},/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/item/clothing/suit/armor/laserproof{pixel_x = 0; pixel_y = 0},/obj/machinery/door/window/brigdoor/northleft{name = "Laser Armor"; req_access = list(2)},/obj/item/clothing/gloves/arm_guard/laserproof,/obj/item/clothing/shoes/leg_guard/laserproof,/obj/item/clothing/head/helmet/laserproof,/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"dGG" = (/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,/area/maintenance/medbay_fore)
+"dGH" = (/obj/structure/closet,/obj/item/stack/material/steel{amount = 4},/obj/item/stack/rods{amount = 2},/turf/simulated/floor,/area/maintenance/pool)
+"dGI" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor,/area/maintenance/pool)
+"dGJ" = (/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor,/area/maintenance/pool)
+"dGK" = (/obj/item/clothing/gloves/boxing/yellow,/turf/simulated/floor,/area/maintenance/pool)
+"dGL" = (/obj/structure/mirror{pixel_x = 30},/obj/item/weapon/soap/nanotrasen,/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/tiled/freezer,/area/security/prison)
+"dGM" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/mirror{pixel_x = 28},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_5)
+"dGN" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/turf/simulated/floor/tiled/white,/area/rnd/research_foyer_auxiliary)
+"dGO" = (/obj/structure/table/standard,/obj/item/weapon/surgicaldrill,/obj/item/weapon/autopsy_scanner,/obj/item/weapon/reagent_containers/spray/cleaner{desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; name = "Surgery Cleaner"; pixel_x = 2; pixel_y = 2},/obj/item/weapon/FixOVein,/turf/simulated/floor/tiled/white,/area/medical/surgery2)
+"dGP" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"dGQ" = (/obj/structure/table/standard,/obj/item/weapon/surgicaldrill,/obj/item/weapon/autopsy_scanner,/obj/item/weapon/reagent_containers/spray/cleaner{desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; name = "Surgery Cleaner"; pixel_x = 2; pixel_y = 2},/obj/item/weapon/FixOVein,/turf/simulated/floor/tiled/white,/area/medical/surgery)
+"dGR" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/effect/floor_decal/corner/lime{dir = 6},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"dGS" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay)
+"dGT" = (/obj/effect/decal/cleanable/cobweb2{tag = "icon-cobweb1"; icon_state = "cobweb1"},/obj/effect/decal/cleanable/cobweb2{icon_state = "spiderling"; name = "dead spider"; tag = "icon-spiderling"},/turf/simulated/floor,/area/maintenance/medbay_aft)
+"dGU" = (/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor,/area/maintenance/medbay_aft)
+"dGW" = (/obj/effect/decal/cleanable/vomit,/obj/item/weapon/stool/padded,/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor,/area/maintenance/medbay_aft)
+"dGX" = (/obj/item/weapon/broken_bottle,/turf/simulated/floor,/area/maintenance/medbay_aft)
+"dGY" = (/obj/item/weapon/caution/cone,/turf/simulated/floor,/area/maintenance/medbay_aft)
+"dGZ" = (/obj/structure/table/woodentable,/obj/item/weapon/material/ashtray/plastic,/obj/item/weapon/cigbutt/cigarbutt,/turf/simulated/floor,/area/maintenance/medbay_aft)
+"dHa" = (/obj/structure/door_assembly/door_assembly_mhatch,/turf/simulated/floor,/area/maintenance/medbay_aft)
+"dHb" = (/obj/structure/closet/crate,/obj/item/stack/cable_coil/random,/obj/item/stack/cable_coil/random,/obj/item/weapon/crowbar,/obj/item/weapon/wirecutters,/turf/simulated/floor,/area/maintenance/medbay_aft)
+"dHc" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/mirror{pixel_x = 28},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_11)
+"dHd" = (/obj/structure/closet/emcloset,/obj/item/weapon/storage/toolbox/emergency,/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/floor/tiled/dark,/area/crew_quarters/sleep/elevator)
+"dHe" = (/obj/structure/closet/emcloset,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/item/weapon/storage/toolbox/emergency,/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/floor/tiled/dark,/area/crew_quarters/sleep/elevator)
+"dHf" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/mirror{pixel_x = 28},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_3)
+"dHg" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/mirror{pixel_x = 28},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_9)
+"dHh" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/mirror{pixel_x = 28},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_1)
+"dHi" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/mirror{pixel_x = 28},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_7)
+"dHj" = (/obj/structure/sign/securearea{desc = "Under the painting a plaque reads: 'While the meat grinder may not have spared you, fear not. Not one part of you has gone to waste... You were delicious.'"; icon_state = "monkey_painting"; name = "Mr. Deempisi portrait"; pixel_x = 28; pixel_y = 4},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"dHk" = (/obj/structure/flora/pottedplant{tag = "icon-plant-06"; icon_state = "plant-06"},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/starboard)
+"dHl" = (/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/arrival/station)
+"dHm" = (/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/shuttle/floor,/area/shuttle/arrival/station)
+"dHn" = (/obj/machinery/requests_console{department = "Arrival shuttle"; pixel_y = 26},/turf/simulated/shuttle/floor,/area/shuttle/arrival/station)
+"dHo" = (/obj/machinery/vending/snack,/turf/simulated/shuttle/floor,/area/shuttle/arrival/station)
+"dHp" = (/obj/machinery/vending/coffee,/turf/simulated/shuttle/floor,/area/shuttle/arrival/station)
+"dHq" = (/obj/machinery/vending/cola,/turf/simulated/shuttle/floor,/area/shuttle/arrival/station)
+"dHr" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass_research{name = "Mech Bay"; req_access = list(29)},/turf/simulated/floor/tiled,/area/assembly/chargebay)
+"dHs" = (/obj/machinery/status_display,/turf/simulated/wall,/area/assembly/chargebay)
+"dHt" = (/obj/machinery/door/airlock/research{name = "Mech Bay"; req_access = list(29)},/obj/machinery/door/firedoor/border_only,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/assembly/chargebay)
+"dHw" = (/obj/machinery/cryopod/robot{dir = 4},/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/landmark{name = "JoinLateCyborg"},/turf/simulated/floor/tiled,/area/assembly/chargebay)
+"dHy" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/central_four)
+"dHz" = (/obj/machinery/computer/cryopod/robot{pixel_x = 30; pixel_y = 0},/obj/effect/floor_decal/industrial/warning/corner,/obj/machinery/camera/network/research{c_tag = "SCI - Mech Bay Starboard"; dir = 8},/turf/simulated/floor/tiled,/area/assembly/chargebay)
+"dHA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/hallway/primary/central_four)
+"dHB" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/hallway/primary/central_four)
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -9780,205 +9697,205 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaaaaaaaaaaaaaaaaaaaaaaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaeaafaadaadaadaadaaaaadaadaagaaeaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaeaaaaaiaajaakaajaakaajaalaaaaaeaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaaeaaaaamaajaanaajaanaajaaoaaaaaeaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaaeaaiaapaajaapaajaapaajaapaalaaeaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaaeaaqaaraasaataauaavaawaaxaaqaaeaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaaeaaqaaraayaazaaAaazaaBaaxaaqaaeaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaaeaaqaaraayaazaaCaazaaBaaxaaqaaeaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaaeaaqaaraayaazaaAaazaaBaaxaaqaaeaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaaeaaqaaDaaEaaAaaAaaAaaFaaGaaqaaeaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaaeaaHaaIaajaaJaaJaaJaajaaIaaKaaeaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaaeaaeaaeaaeaaLaaMaaMaaeaaeaaeaaeaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaaNaaOaaPaaPaaNaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaaQaaQaaQaaQaaQaaQaaQaaQaaQaaQaaQaaeaaRaaRaaRaaNaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaaQaaTaaUaaVaaWaaXaaYaaTaaZabaaaQabbabcabdabcabeaaSaaSaaSaaSaaSaaSaaSaaSaaSaaSaaSaaSaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaaQabfabgabgabhabgabiabjabjabkablabmabmabnabcaboabpabqabrabsabqabqabtabtabuabvabwabxaaSaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaabaabaabaabaabaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaaQabyabgabgabgabgabzabgabgabAabBabCabDabEabFabGaaSabHabIabJabKabqabqabtabtabtabtabtabLaaSaaSaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaabaabaabaabaabaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaaQaaTaaUabMaaWaaTabNaaTabOabPaaQabQabRabSabcaaNabTabTabTabTabTabTabTabTabTabTabUabtabVabWaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahabXabXabXabXabXabXabXabXabXabXabXaaeabYabZabcacaabTacbaccacdaceacfacgachaciabTaaSabtacjackaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahabXaclacmacnacoaclacpaclacqacrabXacsabYabZabcaboabTactacuacuacuacuacvacuacuacwaaSabtacxaaSaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaczaczacAaczaczaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahabXacBacCacCacCacCacDacCacCacEacFabCacGabZabcaboabTacHacuacIacJacuacvacuacKacLaaSabtacMaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaacNaaaaaaacNaaaaaaaaaacNaaaaaaaaaaaaaaaacNaaaaaaaaaacNaaaaaaacNaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczaaaaadaaaacOaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahabXacPacCacCacQacCacRacSacSacSacTabmacUacVabCabCacWacXacuacYacZacuayEacuadaacwaaSabtadbaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaacNacNacNacNaaaaaaaaaacNacNacNacNacNacNacNaaaaaaaaaacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadadcaadacAaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaddaddaddabXaclacmadeacoadfadgacladhadiabXadjabYadkabmadladmadnadoadpadqadoadradoadsadtaduadvadwaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaacNacNacNacNaaaaaaacNacNacNacNacNacNacNacNacNaaaaaaacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczaczaczacAacAaaaaaaaaaadxaaaaaaaaaacAacAaczaczaczaaaaaaadyaddaddaddaddaddaddadzadzabXabXabXabXabXabXabXabXabXabXabXaaeabYadAadBadBadCadDadEadFadGadHadIacuadJadKaaSabtaaSaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaacNacNacNacNaaaaaaacNacNacNacNacNacNacNacNacNaaaaaaacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczaaaaaaaaaaadaaaaaaaaaadLaadaadaaaaadaaaaaaaaaaczaaaaaaadMadNadOadPadQadRadSadTadUadVadWadXadYadZaeaadVadVaebaecaddaboaedaeeabcaboabTacuacuaefacJacuaegacuadJaehaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeiaeiaeiaeiaeiaadaejaadaeiaeiaeiaeiaeiaadacAaaaaaaaekadNaelaemaenaeoaepaeqaeqaeraesaeraetaeraeraeraeraeraeraeuaevaewaexaeyaboabTaezacuaeAacuacuaegacuaeBaeCaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeDaeEaeEaeEaeEaeFaejaeGaeHaeHaeHaeHaeIaadacAaaaaaaaddaddaddaddaddaeJaeKaeLaeMaeMaeMaeMaeNaeMaeMaeMaeMaeOaePaddaeQabYaeRaeSaeTabTaeUacuaeVacuaeWaegacuaeXaeYaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeZaeZaeZaeZaeZaadaejaadaeZaeZaeZaeZaeZaadacAaaaaaaaahaahaahaahaddaddaeKaeMaeMafaafbafcafdafeafbaffaeMaeMaddaddaaNafgafhafiaaNabTafjacuafkaflaflafmaflaflaflaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczaaaaaaaaaaadaaaaaaaaaaejaaaaaaaaaaadaaaaaaaaaacOaaaaaaaahaahaahaahaahaddafnaeMafoafcafpafqafrafsaftaftafuaeMaahaahaaNabYafvafwaaNafxafyafyafzaflafAafBafCafDafEaaSabtaaSaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeiaeiaeiaeiaeiaadaejaadaeiaeiaeiaeiaeiaadacAaaaaahaahaahaahaahaahaddafnaeMafFafGafHafIafJafKafLafMafNaeMaahaahaaNabYaeRafOaaNafxafyafyaywaflafPafQafRaflaflaaSabtabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeDaeEaeEaeEaeEaeFaejaeGaeHaeHaeHaeHaeIaadacAaaaaahaahaahaahaahaddaddafnaeMafSafTafUafVafWafXafYafcafZaeMaahaahaaNagaafvagbaaNafxagcagdageaflagfaggaggaghafEaaSabtabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeZaeZaeZaeZaeZaadaejaadaeZaeZaeZaeZaeZaadacAaaaaahaahaahaahaahaddagiagjaeMafcafcagkaglaglaglagmafcafcaeMaahaahaaNagnagoagpaaNabTabTabTabTaflaflagqaflaflaflaaSaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczaaaaaaaaaaadaaaaaaaaaaejaaaaaaaaaaadaaaaaaaaaaczaaaaahaahaahaahaahaddagragsaeMagtaguagkafcagvafcagwaguagxaeMaahaahaaNabYafvafwaaNaahaahaahaahaflagyaggagzaflagAagBaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeiaeiaeiaeiaeiaadaejaadaeiaeiaeiaeiaeiaadacAaaaaahaahaahaahaahaddafnaddaeMaeMaeMagCagDagEagFagGaeMaeMaeMagHaahaaNagIagJagKaaNaahaahaahaahaflagyagLagzaflaflaflaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeDaeEaeEaeEaeEaeFaejaeGaeHaeHaeHaeHaeIaadacAaaaaahagMagMagMagMagMafnaddagNagNagOagPagQagRagSagTagUagVagVagHaahaaNabYafvafwaaNaahaahaahaahaflaflaflaflaflaahaahaaSagWaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOaaaaeZaeZaeZaeZaeZaadaejaadaeZaeZaeZaeZaeZaaaacAaaaaahagMagXagYagZahaagjaddahbahcahcahdahcahcahcaheahfahfahgagHaahaaNahhahiahjaaNaahaahaahaahaahaahaahaahaahaahaahaaSahkaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczaaaaaaaaaaadaaaaaaaaaaejaaaaaaaaaaadaaaaaaaaaaczaaaaahagMahlahmahnahoahpaddahqahqagUagPagQahrahsagTagUahtahtagHaahahuahvahwahxahuaahahyaahaahaahaahaahaahaahaahaahaaSahzaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeiaeiaeiaeiaeiaadaejaadaeiaeiaeiaeiaeiaadacAaaaaahagMahAahBagMagMahCaddahDahfahfahEahFahGahHahIahcahcahJagHaahahuahKahLahMahNahyahyahOahOahOahOahOahOahOaahaahaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeDaeEaeEaeEaeEaeFaejaeGaeHaeHaeHaeHaeIaadacAaaaaahagMahoahPagMahQahRaddahSahSagUagPahTahUahVagTagUagUahWagHaahahuahXahYahMahZahyahyahOaiaaibaicaidaieahOaahaahaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOaaaaeZaeZaeZaeZaeZaadaejaadaeZaeZaeZaeZaeZaaaacAaaaaahaddaifaigaihaihagsaddaiiagUagUagPaijaikailagTagUagUaimagHaahahuainahYahMaioaipaiqairaisaitaieaieaiuahOaahaahaaSabtaaSaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaaaaaaaaaaaaaaaaaaaivaaaaaaaaaaaaaaaaaaaaaacAaaaaahaddaiwaddaddaddaddaddaixaiyaizagPagQahragSagTagUaiAaiBagHaahahuaiCaiDaiEaiFaiFaiFaiGaiHaiIaiJaiKaiLahOaahaahaaSabtabvaaSaaSaahaahaaSaaSaaSaaSaaSaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAacAacAacAacAaadaadaadadxaadaadaadacAacAacAacAacAaaaaahaddaiwaddaiMaiMaiNaiOagUagUaiPagPagUagUagUagTagUaiQaiRagHaahahuaiSahYahMaiTaipaiqairaieaiUaieaiVaiWahOaahaahaaSabtabtaiXaaSaaSaaSaaSaiYabtabHaiZaiZaiZaiZaiZaiZaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaaaaadxaaaaaaaaaaaaaaaaadaadaaaaaaaahaddaiwaddajaajbajcajdajeajeajfajgajeajeajeajhagUajiajiagHaahahuahvahYahMahZahyahyahOajjajkajlaieajmahOaahaahaaSaaSabtajnajoajoajoajoajoajpabIaiZajqajrajsajsaiZaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaadxaaaaaaaaaaaaaadaadaaaaaaaaaaahaddaiwaddajtajuajvaiOagUagUajwajxajyajzajzajAajzajzajBagHaahahuajCahwajDajEahyahyahOahOahOahOahOahOahOaahaahaahaaSaaSaaSaaSaaSaaSaaSaaSajFaiZaiZajGajHajsajsaiZaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyaaaacyacyacyacyacyaaaacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaajIaaaaaaaaaaadaadaaaaaaaaaaahaahaddaiwaddagHajJajKagHajLajMajNajOagPajPajQajRajSajTajUagHaahahuahKahLajVahuahyaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaSajFaiZajWajHajHajsajsaiZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacyacyacyacyacyaaaacyacyacyacyacyaaaacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaajXajYajXaaaaadaadaaaaaaaaaaahaahaahaddajZakaagHagHagHagHagHakbakcagHakdakeakfagHakbakcagHagHahuahuakgahYahMahuaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaSaaSaaSajFaiZajWajHakhaiZaiZaiZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadakiakjakiaadaadaaaaddakkakladdaddaddaddaiwadVadWakmaddaknakoakpakoakoakqakraksaktaktakuaktaktakvaktakwakxakyahuaahaahaahaahaahaahaahaahakzakzakzakzakAakAakAakAakAakAakBaaSakCaiZakDakEajHakFakGakHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakIakJakKakLakMaaaaddaddakNakOakPakQakQakQakRadVakSadVakTaknakoakUakVakWakXakYakZalaalbalcaldalaalealaalfalgahMahuaahaahaahaahaahaahaahaahakzalhalialjakAalkallalmalnakAakAaaSajFaiZaloajHalpaiZaiZaiZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyahyaahaahaahaahalqalralsaltalqaddaddalualvalwaddaddaddaddaddaddaddaddaddalxalyalzahuahuahuahuahuahuahuahuahuahualAahualBalCalDahuaahaahaahaahaahaahaahaahakzalEakzalFakAalGalHalIalJalKakAalLalMaiZalNalOalPalQalRalSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalTalUalVaaaalWalXalYahyahyaahaahaahaahaahalqalZamaambalqamcaifakRaddaddaddaahaahaahaahaahaahaahahuahuahuahuahuaahaahaahaahaahaahaahahyahyahyamdahvameahMahuaahaahaahaahaahaahaahaahakzamfamgamfamhamiamjamkamlammakAamnamoaiZaiZampamqamramsamtahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamuamvamwamvamxamyamzamyamxaahaahaahaahaahaahalqamAamBamCalqamDaiwadVaddaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahZahvameamEahuaahaahaahaahaahaahaahaahakzamfamfamfamFamlamGamHamIamJakAabqamKamLaiZajHamMamNamsamOahyahyahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamPamQamQamRaaaamuamvamSamvamxamyamTamyamxaahaahaahaahaahaahalqamUamValqalqaddaiwamWaddaahaahaahaahamXamXamXamXamXamXamXamXamXamXamYamYamYamYamYamYamYamYahyahyahZamZanaahMahuaahaahaahaahaahaahaahaahakzanbamfamfakAancandaneancandakAakzaaSanfaiZaiZangaiZaiZaiZaahahyahyahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamuanhaniamuamuamuanjankamuamuanlanmannanoamuamuamvanpamvamxamyanqamyamxaahaahaahaahaahaahanransantanranuaddaiwadVaddaahaahaahamXamXanvanwanxanyanwanzanzanwanAamYanBanCanDanEanFanGamYamYahyahZahXanHanIahuaahaahaahaahaahaahaahaahakzanJanKanLanManNanOanPanQanRanSakzanTanUanVanWanXanYanYanZanZanZanZaoaahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyamuamuaobaocaodaoeaofaogaohaoiaojaokaolaolaomaonamuaooaopaoqamxaoraosaotamxaahaahaahaahaahaahanraouaovanraddaddaowaddaddaahaahaahamXaoxaoyaozanzanzanzanzaoAaoAanwamYaoBaoCaoDaoEaoDaoDaoFaoGahyaoHahvameahMahuaahaahaahaahaahaahaahaahakzaoIaoJaoKaoLaoMaoNaoOaoPaoQaoRaoSaoTaoTaoUaoVaoWaoXaoYaoZapaapbapcapdahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyahyamuapeapfapgaphapiaphapjapkapeaplapmapmapmapnapoamuappapqapramxapsapqaptamxanranranraahaahaahanrapuantanrapvapwapxapyapzapzapzapzapzapAapBapCapCapDanzapEaoAaoAanzamYapFaoDaoDapGaoDaoDapHamYaoGahuahvameapIahuaahaahaahaahaahaahaahaahakzapJamfamfapKapLapMapNamfamfapOakzapPanTapQapRapSanTapTapUapVapWapcapXahyahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyahyahyamuapYapZaqaapZaqbaqcaqaapZapYaqdapnaqeapmaqfaqgamuanraqhaqiamxanraqjaqiamxaqkaqkanranranranranransaqlaqmaqnaqoaqpapwapzaqqaqraqsaqtanzanzaquaquaquanzapEapEanzanzamYaqvaoDaqwaqxaqwaqyaqzaqAaqBakvaqCaqDaqEahuaahaahaahaahaahaahaahaahakzaqFaqGaqHaqIaqJaqKaqGaqHaqFakzakzanZanZanZanZaqLanZanZanZanZanZanZanZahyahyaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyahyahyahyahyahyahyahyahyahyahyamuaqMapZapZaqNaqOaqPaqQaqQaqRaqSaqTaqUaqVaqWaqXaqYaqZaraarbarcardarearfargarharhariarharharharharharjarharkarlarmarnaroarparqarrapzarsanzanzanzanzanzanzanzanzarsamYartaoDaqwaruarvarwarxaryarzarAarBarCarDahuaahaahaahaahaahaahaahaahakzarEarFarGarHarIarJarKarLarMakzaahaahaahaahanZarNarOanZaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyahyahyahyahyahyahyahyahyahyahyahyamuarParQarRarSarTarUarVarWarXarYarZasaasbascasdamuansaseasfasgashasiashashasjaskaslaskasmaskasnaskasoashaspasqasrapwapzassastasuapzasvaswasxasyaszasAanzanzanzasvamYasBaoDaoDasCaoDasDasEamYaoGahuahvameatfahudEldEldEldEldElaahaahaahakzaqFaqFaqFaqIaqJaqKaqFaqFaqFakzaahaahaahaahanZasFarOanZaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyahyahyahyasGasGasGasHasIasJasIasKasGasGamuasLasLasMasNasOasPasNasLasLamuamuamuamuamuamuasLasQasRasRasRasRasRanrapwasSapwanranranranranranranranrasTasUasVasWapzapzapzapzapzasXanzasYasZanzanzanzanzasYataamYaoBaoDaoDatbaoDasDatcaoGahyalAatdateahMdEIdEFdEEdEHdEGdElaahaahaahakzamfatganQaqIaqJaqKatganQathakzaahaahaahaahanZarNanZanZaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyahyatiatiatiatiatjatkatlatmatnatoatpatqatratsattatuatvatwatxatyatzatAatBatCatDatEatFatGatHatIasQatJatKatLatMasRanratNatOatNanraahaahaahaahaahaahanratPatQatRanranraahaahaahamXamXatSatTatUanzatVatWatXatYatZamYauaaubaoDaoDaucaudamYamYaahahuahvahwauedEDdECdEBdEodEAdEldElaahaahakzaqFaufaugaqIaqJaqKauhaugaqFakzaahaahaahaahanZarNanZaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyahyatiatiauiaujaukaulaumaunauoaupauqaurausautauuauvauwauxauyauzauAauBauCauBauDauEauFauGauHauGauIasQauJauKauLauMasRaahatNauNatNaahaahaahaahaahaahaahanrasTauOasranraahaahaahaahaahamXamXamXauPamXamXamXamXamXamXamYamYamYauQauRamYamYamYaahaahahudEsdErdEudEtdEwdEvdEydExdEzdElaahaahakzauSauTakzauUauVauWakzauSauTakzahyaahaahanZanZarNanZaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahahyahyahyahyahyatiauXauYauZatiavaavbavcavdaveavdavfavfavgavhaviavjavkavfavlavmavnavoavpavqatDavravsavtavuavvavwavxavyavzavAasRaahatNavBatNaahaahaahaahaahaahaahanrasTauOasranraahaahaahaahaahaahavCavDavEavFavCaahaahaahaahaahahyahyahyahyaahaahaahaahaahahuahvameahMahudEqdEpdEodEndEmdElaahaahahyahyahyavGavHavIavJavGahyahyahyahyahyanZanZarOarNanZaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaxsaxsaxsaxsaxsaxsaxsaxsaahatiavKavLavMatiavNavOavdavdavPavQavfavRavSavTavUavTavVavWavXavYavZawaawbawcawdaweaweawfaweawgasQawhawiasRawjasRaahatNauNatNaahaahaahaahaahaahanranrawkawlawmanranrahyahyahyahyavCavCawnavEawoavCavCaahaahaahaahaahahyahyahyahyaahaahaahavCahuawpawqawrahuawsclxdEjcmydEkdElaahaahahyahyahyawtawuawvawwawtahyahyahyaahaahanZawxawyawzanZaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyahyaahaahaahaahaahaahaahaahaxsdFmdFnazHdFoaytayuaxsaahatiawAawBawCatiawDawEavdawFawGawHavfawIawJawKawLawMawNawOawPavmawQawQawRawSatDatEawTawUawVawWasQawXawYasRawZasRaahatNauNatNaahaahaahaahaahatNavCaxaaxbaxcaxdaxeavCavCaxfaxgaxhavCaxiawnavEawnaxjavCavCavCavCavCavCaxfaxgaxhavCavCavCavCavCaxkaxlaxmaxdaxnawsawsckJawsawsawsawsawsawsaxoaxpawsavHaxqavJawsaxoaxpawsawsanZanZaxrarNanZanZaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyaahaahaahaALaALaALaALaALaALaALaxsdFqdFqazHazHdFrdFraxsaahatiaxtaxuaxvaxwaxxaxyavdavQaxzaxAavfaxBaxCaxDaxEaxFaxGavfawPaxHaxIawQawRaxJaxKaxKaxKaxKaxKaxKaxKaxLaxLaxLaxLaxLaahatNauNatNatNatNatNatNatNatNaxMawnaxNaxOaxPaxQaxRaxSaxTaxQaxQaxUaxVaxQaxWaxQaxQaxRaxQaxQaxXaxYaxQaxQaxZaxQaxTayaaxQaxQaxRaxQaybaycaxPaydayeayfayfaygayhayiayfayjayfayfaykayfaylaxqavJaymaynayoaymaypanZarOarOayqanZaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaALaALaALaALaALaALaALaALaxsdFsdFsazHazHdFtdFuaxsaahatiayxayyayzatiayAavbavdayBayCayDavfaEqayFavTayGavTayHayIayJayKayLayMayNayOayPayQayRayPaySayQayPayTayUayVayWayXatNatNauNayYayZayZayZazaazbazcazdawnaxlazeazfazgazhaziazjazjazgazkaziazjazlazjazgazmaznaznaznazoaznaznazpaznazqaznaznaznazmazqazpazrazsaztazuazvazvazvazwazvazvazxazyazvazvazvazvazzazAazvazvazBaymazCazDarOazEazFanZaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaALaALaALdFwdFvdFxaALdFzdFyaxsayrayraBCazHazHazIaxsazJazJazJazJazJazJazKazLazMazMazNazMazMazMazMazOazPazQazRazSazTazUazVavqavqazWayPazXazYayPaCdaCcayPazZaAaaAbaAcaAdaAeaAfauNaAgatNatNatNaAhazbatNaAiawnaxlaxmaxdaAjaAkaAlawnaAmaAnaAoaApawnaAqawnaAraAkawnawnawnaApawnawnaAsawnaAtawnaAuawnaAkaAvaxlaAwaAxaAyaAzaAAaAAaAAaABaACaAAaADaAEaAAaAAaAAaAAaAFaAGaymaymaAHaAIazCanZaAJaAJaAKanZaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaALaALaALdFAaDxaDxaDxdFBdFDdFCaALayrayrazHazHaAMaAMaANaAOaAPaAQaARaASaATaAUaAVaAWaAXaAYaAZaBaaBbazMavfavfavfavfavfaBcaBdaBeaBfaBgaBhayPaDeaBiayPaBiaDeayPaBjaBkaBlayXayXaBmaBnaBoatNatNaahatNatNatNatNavCaBpaxlaxmaxdaBqavCavCaxfaxgaxhavCavCaBraBsaAiavCavCaBtaBuaBuaBuaBvavCavCavCavCavCavCavCavCaBwaxlaAwaxdaBxawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsanZanZaByaBzanZaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaALaALdFEaDxdFGdFFdFHdFFdFJdFIaALaBAaBBazHazHaBDaBEaBFaBGaBGaBHaBGaBIaBJaBKaBLaBMaBNaBOaBPaBQaBRazMaBSaBTaBUaBVaBWaBXaBYaBeaBZaCaaCbayPdEfayPayPayPdEgayPayXaCeayXayXaAeaCfayZauNatNaahaahaahaahaahaahavCavCaCgaChaCiavCavCahyahyahyahyahyaCjaCjaCkaCjaCjahyahyahyahyahyahyahyaahaahaahaahaahaahaClaClaCmaCnaCoaClawsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahanZanZaCpanZanZaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaALaALdFKaDxaJGdFLdFNdFMdFPdFOaALaCvaCwaCxaCyaCzazHaCAaCBaCCaCDaCEaCFaCGaCHaCIaCJaCKaCLaCMaCNaCNaCOaCPaCQaCRaCSaCTaCUaCVaCWaCXaCYaCZaDadEhaDbaDcaDddEiaDfaDgaDhaDiaDjaAeaDkaDlauNatNaahaahaahaahaahaahaahavCaxlaxmaxdavCahyahyahyahyahyahyahyaCjaDmaDnaCjahyahyahyahyahyahyahyahyaahaahaahaahaahaDoaDpaDqaDraDsaClaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaDtaDuaDvaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaALaALdFQaDxaGVdFRdFSdFRdFTaDxaDyazHaDzaDAaDBazHazHaDCaBGaBGaDDaBGaDEaDGaDHaDIaDJaDKaDLaDMaDNaDOazMaDPaDQaDRaBVaDSaDTaDUaDVaDWaDXaDYaDZaEaaEbaEcaEdaEaaEeaEfaEgaEhaEiaEjaEkaElaEmatNaahaahaahaahaahaahaahavCaxlaxmaEnavCahyahyahyahyahyahyahyaCjaEoaDnaCjahyahyahyahyahyahyahyahyahyahyaahaahaahaEpaEtaEraEsaGyaClaEuaEuaEuaEuaEuaEuaEuaEuaEuaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEwaExaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaALaALaALdFUaDxaDxaDxaDxdFVaEBaALaECaEDaEEaEFdFWaEHaEFaEIaEzaDDaDFaELaEMaENaEOaEPaEQaERaESaETaEUazMaBVaEVaBVaEWaEXaEYaEZaFaaFbaFcaFdaFaaFeaFfaFeaFaaFeaFgaFeaFhayPaFiatNaFjaFkaFlatNaahaahaahaFmaFmaFmaFmaFmaFnaxcaxdaFoaFoaFoaFoaFoahyahyahyaCjaDmaCjaCjahyahyahyahyahyahyahyahyahyahyahyaahaahaFpaFqaFraFsaFtaClaFuaFvaFwaFxaFyaFzaLgaFAaFuaEvaFBaFBaFCaFDaFEaFFaFGaFFaFHaFDaFCaFIaEvaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaALaALaALaALdFYdFXdFZaDxdGaaFNaFOaFPaCIaFQaEFaECaEKaEFaFSaFTaFUaFVaFWaFXaFYaFZazMaGaaGbaGcaGdaGeazMaGfaGgaGhaGiaGjaGkaGlaFaaGmaGnaGoaFaaGpaGqaGraFaaGpaGnaGraFhaahaahatNaGsaGtaGuatNaahaahaFmaFmaGvaFRaGxaKwaxlaxmaGzaFoaGAaGBaGCaFoaFoahyahyaCjaDmaCjahyahyaGDaGDaGEaGFaGFaGFaGGaGFaGFaGFaGFaGHaGDaGIaGJaGKaGLaClaGMaGNaGOaGNaGPaGNaGOaGNaGQaEvaGRaGSaGRaGRaGRaGRaGRaGRaGRaGRaGRaGRaGTaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALaALaALaALaALdGbdGcaGZaHaaHbaHcaHdaHeaHfaGwaHhaHiaHjaHkaHlaHmaHnaHoaHpaHqaHraHsaHtaHlaHuaHvaHwaHxaHyaHzaHAaHBaHCaFaaHDaHEaHFaFaaHGaHHaHIaFaaHJaHEaHKaFhaahaahatNaHLaHMaHNatNaahaFmaFmaHOaHPaHQaHRaFmaHSaxmaxdaFoaHTaHUaHVaHWaFoaFoahyaCjaDmaCjahyahyaGDaHXaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaHZaIaaIbaIcaIdaClaIeaGNaGNaIfaIgaIhaGNaGNaIiaEvaGRaIjaIkaIkaIkaIkaIkaIkaIkaIkaIkaIlaGRaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALaALdGedGddGfaDxdGadGgaIraIsaItaIuaIvaIwaHgaIyaIzaIAaIBaICaIDaIEaIFaIGaIHaIIaIHaIJaIKaILaIMaINaIOaBXaIPaIQaGkaIRaFaaISaITaIUaFaaIVaIWaIVaFaaIVaIXaIVaFhaahaahatNaIYaIZaHNatNaFmaFmaJaaJbaJcaJdaJeaJfaJgaJhaJiaJjaJkaJlaJmaJnaJoaFoahyaCjaDmaCjahyahyaGDaJpaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaJqaJraFraFsaQkaClaJsaGNaJtaJuaJvaJwaJxaGNaJyaEvaJzaJAaJBaJCaJCaJCaJCaJCaJCaJCaJDaGRaJEaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALaALdGhaGVdFRdFRdFRdGjdGiaALaJJaJKaJKaJKaJLaJMaJKaJNaJKaJOaJPaJKaJQaJRaJSaJTaJQaJUaJVaJWaFaaJXaJYaFaaJZaKaaFaaKbaFaaFaaKcaKdaKeaKfaKgaKhbjdaKjaKiaKdaKkaFhaFhaahatNatNaKlaHNayZaKmaKnaJbaJbaKoaKpaKqaFmaxlaxmaxdaKraJkaKsaKtaJkaKuaFoahyaCjaDmaCjaGDaGDaGDaGDaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaJqaKvaIbaIcaLJaDoaKyaGNaJtaJuaJvaJwaJxaGNaLKaKzaKAaJAaKBaKCaKCaKCaKCaKCaKCaKCaKDaGRaKEaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALdGkaDxaDxaDxaDxaDxdFPaysaALaJJaKIaKIaKJaKIaKKaKLaKMaKNaKOaKPaKQaJQaKRaKSaKTaKUaKVaKWaKXaFaaKYaKZaFaaLaaLbaLcaLdaLeaLfboJaLhaLiaLjaLkaLlboJaLmaLmaLmaLmaLnaFhaahaahatNaLoaLpaLqaLraLsaLtaLuaLvaLwaLxaFmaLyaxmaxdaFoaLzaLAaJkaJkaLBaFoahyaCjaLCaLDaGDaLEaLFaLGaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaLHaLIaIbaIcaLJaFpaLLaLLaLLaLMaLNaLOaLLaLLaLLaLQaLRaJAaKBaKCaKCaKCaKCaKCaKCaKCaKDaGRaJEaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALdGmaDxaDxdGndGoaDxdFPayvaALaJJaLUaKIaKIaKIaLVaLWaLXaLYaLZaMaaMbaMcaMdaKSaKSaMeaMfaMgaMhaFaaMiaMjaFaaMkaMlaMmaMnaMoaMpaLmaMqaMraMsaMtaLmaLmaMsaLmaLmaLmaLnaFhaahaahatNaMuaHNatNaFmaFmaFmaFmaFmaFmaFmaFmaMvaMwaMxaMyaMzaMAaMBaJkaMCaFoahyaCjaMDaMEaGDaMFaMGaMHaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaMIaLIaMJaEsaMKaMLaMMaMMaMMaMNaMOaMPaMMaMMaMMaMQaMRaJAaKBaKCaKCaMSaMTaMUaKCaKCaKDaGRaMVaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaadaadaaaaaaaaaaaaaaaaaaaaaaadaadaadaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahahyaaaaaaaaaaaaaaaaaaaaaaaaahyahyahyaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahahyahyahyahyaaaaaaaaaaaaahyahyahyahyaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahahyahyahyahyahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahahyahyahyahyahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahahyahyahyahyahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahahyahyahyahyahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahahyahyahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahahyahyahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaabaabaabaabaabaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaabaabaabaabaabaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaacNaaaaaaacNaaaaaaaaaacNaaaaaaaaaaaaaaaacNaaaaaaaaaacNaaaaaaacNaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaacNacNacNacNaaaaaaaaaacNacNacNacNacNacNacNaaaaaaaaaacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaTWaTWaTWaTWaahaahaahaahaahaahaahaahahyahyahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaacNacNacNacNaaaaaaacNacNacNacNacNacNacNacNacNaaaaaaacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiaTWaTWaTWaTWaTWaTWaalaalaTWaTWaTWaTWaTWaTWaTWaTWaTWahyahyahyahyahyahyahyahyahyaaQaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaacNacNacNacNaaaaaaacNacNacNacNacNacNacNacNacNaaaaaaacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTaaUaaUaaUaaUaaVaaUaaUaaUaaUaaUaaXaaWaaZaaYaaUaaUahyahyahyahyahyahyahyahyahyahyaaQaaQaahaahaahaahaahaahbeubeuaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAacOacAacAacAacAacAacAacAacOacAacAacAacAaaaaaaacAacAacAaaaaaaaaaaaaaaaaaaaaaaaTaaUaaUaaUaaUaaVabaabaabaabaabaaaUaaUaaUaaUaaUaaUahyahyahyahyahyahyahyahyahyahyaaQaaQaahaahaahaahaahaahbeuadwaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaadaaaaaaaaaaaaaadaadaaaaadaadaadaaaaadaadaadaaaacAaadaaaaaaaaaaaaaaaaaaaTWaTWaTWaTWaTWabfabaabaaTWaTWaTWaTWabgaTWaTWaTWaTWahyahyahyahyahyahyahyahyahyahyaaQaahaahaahaahaahaahaahaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaabhabjabiaaaabhabjabiaaaabhabjabiaaaabhabjabiaaaacAaadaadaaaaaaaaaaaaaaabeubeuaahaahaahaahabaaTWaTWaahaahaahaahaahaahaahaahahyahyahyahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahaaSaPZaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadabhaeGabiaadabhaeGabiaadabhaeGabiaadabhaeGabiaadacOaaaaadaadaaaaaaaaaahyaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaQahyahyahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahaaSabtaaSaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaabhaeGabiaaaabhaeGabiaaaabhaeGabiaaaabhaeGabiaaaaadaaaaaaaadaadaaaaaabeuaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahaaSabtabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaacAaaaabhaeGabiaaaabhaeGabiaaaabhaeGabiaaaabhaeGabiaaaaadaaaaaaaaaaadaadaaabeubeubeuaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahaaSabtabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAacAacAaadaaaabhaeGabiaaaabhaeGabiaaaabhaeGabiaaaabhaeGabiaaaaadaaaaaaaaaaaaaadabkalqalqalqalqaddaddaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahaaSabLabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaadaaaaaaaadadxaadaaaaadadxaadaaaaadadxaadaaaaadadxaadaaaaadaaaaaaaaaablabmakJabrabnabuamUabwaddaddaahaahaahaahaahaahaahaahaahaahaahaahahyahyahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahaaSaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadabxaeFaeFaeFabyaeFaeFaeFabyaeFaeFaeFabyaeFaeFaeFabyaeFaeFaeFaeFaeFabAabzabCabBabMabFabOabNabQabPaddaahaahaahaahaahaahaahaahaahaahaahaahahyahyahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahaahaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaadaaaaaaaadadxaadaaaaadadxaadaaaaadadxaadaaaaadadxaadaaaaadaaaaaaaaaablabmabRabVabUabWalqabXadVaddaahaahaahaahaahaahaahaahaahaahaahaahahyahyahyahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahaaSacaaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAacAacAaadaadabhacbabiaaaabhacbabiaaaabhacbabiaaaabhacbabiaaaaadaaaaaaaaaaaaaadaccalqalqalqalqabXacdaddaahaahaahaahaahaahaahaahaahaahaahaaeacebkQbkQbkQbkQahybkQbkQacfaaeaahaahaahaahaahaahaahaahaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabhacbabiaaaabhacbabiaaaabhacbabiaaaabhacbabiaaaaadaaaaaaaaaaadaadahybeubeubeuaddabXadVaddaahaahaahaahaahaahaahaahaahaahaahaaeahyacgaajaakaajaakaajachahyaaeaahaahaahaahaahaahaahaahaaSacjaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaabhacbabiaaaabhacbabiaaaabhacbabiaaaabhacbabiaaaacAaaaaaaaadaadadyaddaddaddaddaddaclackaddaddaahaahaahaahaahaahaahaahaahaahaaeahyaamaajaanaajaanaajaaoahyaaeaahaahaahaahaahaahaahaahaaSaPZaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadabhacbabiaadabhacbabiaadabhacbabiaadabhacbabiaadacAaaaaadaadaaaadMadNadOadPadQadRacnacmacoaddaahaahaahaahaahaahaahaahaahaahaaeacgaapaajaapaajaapaajaapachaaeaahaahaahaahaahaahaahaahaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOaaaabhacpabiaaaabhacpabiaaaabhacpabiaaaabhacpabiaaaaadaadaadaaaaaaaekadNaelaemaenaeoabXacqacoaddaddaddaddaddaddaahaahaahaahaahaaeaaqaaraasaataauaavaawaaxaaqaaeaahaahaahaahaahaahaahaahaaSabtaaSaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaadaaaaaaaaaaadaadaadaaaaaaaaaaaaaaaaaaaaaaadaaaaadaadaaaaaaaddaddaddaddaddaddahQabXacraddaddadYadZaeaacsaddaddaahaahaahaahaaeaaqaaraayaazaaAaazaaBaaxaaqaaeaahaahaahaahaahaahaahaahaaSabtabtaaSaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczaczacAaczaczacOacAaadaadaadaadaaaaaaaaaaadaadaadacOaadaaaaaaaaaaddaifakQakQakQakQakQactakQakQakQakQakQakQakQacvaddaddaahaahaahaaeaaqaaraayaazaaCaazaaBaaxaaqaaeaahaahaahaahaahaahaahaahaaSabtabtabtaaSaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxaiwaeLaeMaeMaeMaeMaeNaeMaeMaeMaeMaeOaePadVacBabQaddaahaahaahaaeaaqaaraayaazaaAaazaaBaaxaaqaaeaahaahaahaahaahaahaahaahaaSaaSabtabtabHaaSaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacCaiwaddaeMafaafbafcafdafeafbaffaeMagHaddaddacEacDaddaahaahaahaaeaaqaaDaaEaaAaaAaaAaaFaaGaaqaaeaahaahaahaahaahaahaahaahaahaaSabtabtabIaiZaiZaiZaiZaiZaiZaahaahaahaahaahahyaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyaaaacyacyacyacyacyaaaacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFacGaeMafoafcafpafqafrafsaftaftafuaeMaahaddaddacGaddaahaahaahaaeaaHaaIaajaaJaaJaaJaajaaIaaKaaeaahaahaahaahaahaahaahaahaaSaaSacHaaSaiZaiZajHajrajsajsaiZahyahyahyahyahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacyacyacyacyacyaaaacyacyacyacyacyaaaacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaddacIaeMafFafGafHafIafJafKafLafMafNaeMaahaahaddacIaddaahaahaahaaeaaeaaeaaeaaLaaMaaMaaeaaeaaeaaeaahaaSaaSaaSaaSaaSaaSaaSaaSaiYabtaiXaiZajWajHajHajsajsaiZahyahyaaaahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaddacKaddacLaeMafSafTafUafVafWafXafYafcafZaeMaahaahaddacLaddaddaddaahaahaahaahaaNaaOaaPaaPaaNaahaahaahaaSaaSabtabtabtacMabtabtabtabtabtajFakAajWajHakhaiZaiZaiZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaddaddakNakOakRaeMafcafcagkaglaglaglagmafcafcaeMaahaahaddaiwacQacPaddaddaddaddaddaaeaaRaaRaaRaaNaaSaaSaaSaaSabtabtakAakAakAakAakAakAakAabtakCakAacRakEajHakFakGakHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaddaddacSalvacTadVaeMagtaguagkafcagvafcagwaguagxaeMaahaahaddaiwacVacUacXacWacZacYaddabbabcabdabcabeaaSabtadaabsabKabqakAalkallalmalnadbakAabtajFakAalNalOadcaiZaiZaiZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadeadeadeaaaadfadfadfahyahyaaQaahaaaalTalUalVaaaalWalXalYaddaifakRadgaddaddaeMaeMaeMagCagDagEagFagGaeMaeMaeMaahaahaddadhadiakQakQakQadkadjadmadladoadnaeyaboabpabtabtabJabHabIakAalGalHalIalJalKakAadpalMakAaiZajHadqalQalRalSaaaahyahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamuadeadeadeaBmadfadfadfaBmaahaahaahamxamvamwamvamxamyamzamyadraiwadVaddaddaahagHagNagNagPagQagRagSagTahtahtagHaahaahaddaddaddaddaddahoahPagMagMadsabcadtaduabGaaSaaSakzakzakzakzakAamiamjamkamlammakAamnamoabqaiZampamqamramsamtahyahyahyahyahyaaaaaaahyahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamPamQamQamRaaaamuatNatNatNaBmatNatNatNaBmaahaahaahamxamvamSamvamxamyamTamyadraiwadVaddaahaahagHahbahcahdahcahcahcaheahfahgagHaahaahaahaahaahaahagMadvadAadzagMagMadDadBadEaaNaTWaahakzalhalialjakAamlamGamHamIamJakAabvamKamLaiZajHamMamNamsamOahyahyahyahyahyahyahyahyahyahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamuanhaniamuamuamuanjankamuamuanlanmannanoamuamuadGadFadHaBmadIayZadJaBmaahaahaahamxamvanpamvamxamyanqamyadraiwadVaddaahaahagHahqahqagPagQahrahsagTagVagVagHaahaahaahaahaahaahagMadSadUadTadWahoabcabZafwaaNaahaahakzalEakzalFakAancandaneancandakzakzaaSanfaiZaiZangaiZaiZaiZahyahyahyahyahyahyahyahyahyahyahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyamuamuaobaocaodaoeaofaogaohaoiaojaokaolaolaomaonamuayZayZayZaBmadXayZayZaBmaahaahaahamxaooaopaoqamxaoraosaotadraiwaebaddaahaahagHaecahfahEahFaeeaedaefahcaehagHaahaahaahaahaahaahagMahAaepaeiaeqahaabDabZaeraaNaahaahakzaesanKanLanManNanOanPanQanRamfakzanTanUanVanWanXanYanYanZanZanZanZaoaahyahyahyahyahyahyahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyahyamuapeapfapgaphapiaphapjapkapeaplapmapmapmapnapoamuaeuaetaevaBmaewaetaexaBmaeAaeAaeAamxappapqapramxapsapqaptamxaeBanranraahagHagHahSahSagPahTaeDahVagUaeEaeHagHagHaahaahaahaahaahagMagMagMagMagMapzafgaeIafiaaNaahaahakzaoIaoJaoKaoLaoMaoNaoOaoPaoQaoRaoSaoTaoTaoUaoVaoWaoXaoYaoZapaapbapcaeJahyahyahyahyahyahyahyahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyahyahyamuapYapZaqaapZaqbaqcaqaapZapYaqdapnaqeapmaqfaqgamuatNayZatNaBmatNaeKatNaBmatNatNanramxanraqhaqiamxanraqjaqiamxapxapyanraahagHaiiagUagUagPaijaeQailagUagUagUagUagHaahaahaahaahaahaahapzaqqaqraeRapzabYabZagKaaNaahaahakzapJamfamfapKapLapMapNamfamfapOakzapPanTaeTaeSaeUanTapTapUapVapWapcaeWahyahyahyahyahyahyahyahyaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyahyahyahyahyahyahyahyahyahyahyamuaqMapZapZaqNaqOaqPaqQaqQaqRaqSaqTaqUaqVaqWaqXaqYaLqaLqaLqaLqaLqaLqaLqaLqafhaeZafkafjafxafnafzafyafxafAafOafCagbapwanraahagHagcaiAagUagPagQaeQagSagUaizaiyagdagHagHagHagHagHaahaahapzagiagearparoagnagjagoaaNaahaahakzaqFaqGaqHaqIaqJaqKaqGaqHaqFakzakzanZanZaqLanZanZanZanZanZanZanZanZanZanZaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyahyahyahyahyahyahyahyahyahyahyahyamuarParQarRarSarTarUarVarWarXarYarZasaasbascasdamuayZagpagrayZayZagsayZayZauNayZanransansansansagIansansagOagJasrapwanraahagHagWahUagUagPagUagTagUagUaiyagUagUaiOaiNaiMaiMagHaahaahapzassagXasuapzagYabZagZaaNaahaahakzarEarFarGarHarIarJarKarLarMakzaahaahanZahiahhahhahhahhahhahkahjanZaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyahyahyahyasGasGasGasHasIasJasIasKasGasGamuasLasLasMasNasOasPasNasLasLamuamuamuamuamuamuasLasQasRasRasRasRasRatNayZauNatNanranraqkaqkanranranranransahlahmanranraahagHajiajiagUagPagUahnajeajeajfajeajeajdahpajbahuagHaahaahdEOdEOdEOdEOapzahvabSafwaaNaaNaahakzaqFaqFaqFaqIaqJaqKaqFaqFaqFakzaahaahanZaAJarOanZanZanZanZaAJarNanZaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyahyatiatiatiatiatjatkatlatmatnatoatpatqatratsattatuatvatwatxatyatzatAatBatCatDatEatFatGatHatIasQatJatKajYatMasRatNatNahwatNahxanranranranraahaahanrahzatQatRanraeAaahagHagUagUagUahBajzahCagUagUajwagUagUaiOajvajuahDagHaahdEOdEOahHahGahJahIagaabEahLahKaaNaahakzamfatganQaqIaqJaqKatganQathakzaahamXamXamXamXamXanyanxanZanZarNanZaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyahyatiatiauiaujaukaulaumaunauoaupauqaurausautauuauvauwauxauyauzauAauBauCauBauDauEauFauGauHauGauIasQauJauKauLauMasRaahatNauNatNatNanraahaahaahaahaahanrasTauOasranraahaahagHajUahNahMahWahRahXagUagUajNajMajLagHajKajJagHagHaahdEOahYaibahZaigaicaikaihafwaimaaNaahakzaqFaufaugaqIaqJaqKauhaugaqFakzaahamXaoxanzanzaoyaozanzapEanZarNanZaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahahyahyahyahyahyatiauXauYauZatiavaavbavcavdaveavdavfavfavgavhaviavjavkavfavlavmavnavoavpavqatDavravsavtavuavvavwavxavyavzavAasRaahatNavBatNaahaahaahaahaahaahaahanrasTauOasranraahaahagHagHakbakcagHainahXagUagHakbakcagHagHagHagHagHahyahydEOaioaOqaipairaiqabYafvafwaisaaNaahakzauSauTakzauUauVauWakzauSauTakzaahamXaitanzanzapBaiuapDapEanZaixanZaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaxsaxsaxsaxsaxsaxsaxsaxsaahatiavKavLavMatiavNavOavdavdavPavQavfavRavSavTavUavTavVavWavXavYavZawaawbawcawdaweaweawfaweawgasQawhawiasRawjasRaahatNauNatNaahaahaahaahaahaahanranrawkaiBawmanranrahyahyahyahyahyagHaiCaiDakfagHahyahyahyaahaahaahahyahyahydEOaiEaiGaiFdEOaaNaiIaiHaiJaaNaaNahyahyahyahyaiKavHavIavJaiKahyahyahyaahamXanwanzanzaquaquaquapEanZarNanZaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyahyaahaahaahaahaahaahaahaahaxsdFmdFnazHdFoaytayuaxsaahatiawAawBawCatiawDawEavdawFawGawHavfawIawJawKawLawMawNawOawPavmawQawQawRawSatDatEawTawUawVawWasQawXawYasRawZasRaahatNauNatNaahaahaahaahaahatNavCaxaaxbaxcaxdaxeavCavCaxfaxgaxhavCavCaxdavEawnavCavCavCavCavCavCavCaxfaxgaxhavCaiLaiQaiPavCaxkaxlaxmaxdaxnawsawsawsaxoaxpawsavHaxqavJawsaxoaxpawsawsamXaiRanwanwanwanwanwapEanZaiSanZaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyaahaahaahaALaALaALaALaALaALaALaxsdFqdFqazHazHdFrdFraxsaahatiaxtaxuaxvaxwaxxaxyavdavQaxzaxAavfaxBaxCaxDaxEaxFaxGavfawPaxHaxIawQawRaxJaxKaxKaxKaxKaxKaxKaxKaxLaxLaxLaxLaxLaahatNauNatNatNatNatNatNatNatNaxMawnaxNaxOaxPaxQaiTaxSaxTaxQaxQaxRaxVaiUaiWaiVaiVajaaiVaiVajgajcajhaiVajjaiVajkaiVaiVaiVajaaiVajmajlajnaydayeaygayfayfayhayiajpajoavJaymaymaymaymaypamXajqajtanzanzajxanwanZanZarNanZaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaALaALaALaALaALaALaALaALaxsdFsdFsazHazHdFtdFuaxsaahatiayxayyayzatiayAavbavdayBayCayDavfaEqayFavTayGavTayHayIayJayKayLayMayNayOayPayQayRayPazXaySayPayTayUayVayWayXatNatNauNayYayZayZayZazaazbazcazdawnaxlazeazfazgazkaziazjazjazgazhaziazjazlazjazgazmaznaznaznazoaznaznazpaznazqaznaznaznazmazqazpazrazsaztazuazvazvazvazwazvazvajyajAazvazvazvazvavDavGavFawoawlawlawpajBanZarOarNanZaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaALaALaALdFwdFvdFxaALdFzdFyaxsayrayraBCazHazHazIaxsazJazJazJazJazJazJazKazLazMazMazNazMazMazMazMazOazPazQazRazSazTazUazVavqavqazWayPazYaBiayPaCdaCcayPazZaAaaAbaAcaGWaAeaAfauNaAgatNatNatNaAhazbatNaAiawnaxlaxmaxdaAjaAoaAlawnaAmaAnaAkaApawnaAqawnaAraAkawnawnawnaApawnawnaAsawnaAtawnaAuawnaAkaAvaxlaAwaAxaAyaAzaAAaAAaAAaAAaACaABajCajDayfayfayfajGajEajOajIasYaoAaoAanzajPanZarOajQanZaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaALaALaALdFAaDxaDxaDxdFBdFDdFCaALayrayrazHazHaAMaAMaANaAOaAPaAQaARaASaATaAUaAVaAWaAXaAYaAZaBaaBbazMavfavfavfavfavfaBcaBdaBeaBfaBgaBhayPaDdaDeayPaIoaDgayPaBjaBkaBlayXayXaBmaBnaBoatNatNaKlatNatNatNatNavCaBpaxlaxmaxdaBqavCavCaxfaxgaxhavCavCaBraBsaAiavCavCaBtaBuaBuaBuaBvavCavCavCavCavCavCavCavCaBwaxlaAwaxdaBxawsawsawsawsawsawsawsawsawsawsawsawsawsawsamXajRanzataanzanzataanZaByaBzanZaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaALaALdFEaDxdFGdFFdFHdFFdFJdFIaALaBAaBBazHazHaBDaBEaBFaBGaBGaBHaBGaBIaBJaBKaBLaBMaBNaBOaBPaBQaBRazMaBSaBTaBUaBVaBWaBXaBYaBeaBZaCaaCbayPaIpayPayPayPaIqayPayXaCeayXayXaAeaCfayZauNdpIayZayZayZdpHayZayZavCavCaCgaChaCiavCavCahyahyahyahyahyaCjaCjaCkaCjaCjahyahyahyahyahyahyahyaahaahaahaahaahaahaClaClaCmaCnaCoaClawsaahaahaahaahaahaahaahaahaahaahaahaahaahamXamXamXamXamXamXamXanZanZaCpanZanZaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaALaALdFKaDxaJGdFLdFNdFMdFPdFOaALaCvaCwaCxaCyaCzazHaCAaCBaCCaCDaCEaCFaCGaCHaCIaCJaCKaCLaCMaCNaCNaCOaCPaCQaCRaCSaCTaCUaCVaCWaCXaCYaCZaDadEhaDbaDcaJFdEiaDfaJHaDhaDiaDjaAeaDkaDlauNatNdpJayZayZayZayZayZayZaFmaxlaxmaxdavCahyahyahyahyahyahyahyaCjaDmaDnaCjahyahyahyahyahyahyahyahyaahaahaahaahaahaDoaDpaDqaDraDsaClaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaDtaDuaDvaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaALaALdFQaDxaGVdFRdFSdFRdFTaDxaDyazHaDzaDAaDBazHazHaDCaBGaBGaDDaBGaDEaDGaDHaDIaDJaDKaDLaDMaDNaDOazMaDPaDQaDRaBVaDSaDTaDUaDVaDWaDXaDYaDZaEaaEbaEcaEdaEaaEeaEfaEgaEhaEiaEjaEkaElaEmatNayZayZdqFaFmaFmaFmaFmaFmaxlaxmaEnavCahyahyahyahyahyahyahyaCjaEoaDnaCjahyahyahyahyahyahyahyahyahyahyaahaahaahaEpaEtaEraEsaGyaClaEuaEuaEuaEuaEuaEuaEuaEuaEuaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEwaExaDtaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaALaALaALdFUaDxaDxaDxaDxdFVaEBaALaECaEDaEEaEFdFWaEHaEFaEIaEzaDDaDFaELaEMaENaEOaEPaEQaERaESaETaEUazMaBVaEVaBVaEWaEXaEYaEZaFaaFbaFcaFdaFaaFeaFfaFeaFaaFeaFgaFeaFhayPaFiatNaFjaFkaFlatNdANdqFaFmaFmaGvajSajTaFmaFnaxcaxdaFoaFoaFoaFoaFoahyahyahyaCjaDmaCjaCjahyahyahyahyahyahyahyahyahyahyahyaahaahaFpaFqaFraFsaFtaClaFuaFvaFwajVaFyajXaLgaFAaFuaEvaFBaFBaFCaFDaFEaFFaFGaFFaFHaFDaFCaFIaEvaDtaFJaYeaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaALaALaALaALbaDaPwbfbaDxdGaaFNaFOaFPaCIaFQaEFaECaEKaEFaFSaFTaFUaFVaFWaFXaFYaFZazMaGaaGbaGcaGdaGeazMaGfaGgaGhaGiaGjaGkaGlaFaaGmaGnaGoaFaaGpaGqaGraFaaGpaGnaGraFhaahaahatNaGsaGtaGuatNayZaFmaFmakdaHPajZaLwaKwaxlaxmaGzaFoaGAaGBaGCaFoaFoahyahyaCjaDmaCjahyahyaGDaGDaGEaGFaGFaGFaGGaGFaGFaGFaGFaGHaGDaGIaGJaGKaGLaClaFKaGNaGOaGNaGPaGNaGOaGNaGQaEvaGRaGSaGRaGRaGRaGRaGRaGRaGRaGRaGRaGRaGTaDtaFJaYdaDtaDtaDtaDtaDtaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALaALaALaALaALdGbdGcaGZaHaaHbaHcaHdaHeaHfaGwaHhaHiaHjaHkaHlaHmaHnaHoaHpaHqaHraHsaHtaHlaHuaHvaHwaHxaHyaHzaHAaHBaHCaFaaHDaHEaHFaFaaHGaHHaHIaFaaHJaHEaHKaFhaahaahatNaHLakaaHNatNayZaFmatLaJbaHPaHQaHRaFmaHSaxmaxdaFoaHTaHUaHVaHWaFoaFoahyaCjaDmaCjahyahyaGDaHXaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaHZaIaaIbaIcaIdaClaIeaGNaGNaIfaIgaIhaGNaGNaIiaEvaGRaIjaIkaIkaIkaIkaIkaIkaIkaIkaIkaIlaGRaDtaFJdGHakedBlaVCaVCaDtaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALaALdGedGddGfaDxdGadGgaIraIsaItaIuaIvaIwaHgaIyaIzaIAaIBaICaIDaIEaIFaIGaIHaIIaIHaIJaIKaILaIMaINaIOaBXaIPaIQaGkaIRaFaaISaITaIUaFaaIVaIWaIVaFaaIVaIXaIVaFhaahaahatNaIYaIZaHNatNaFmaFmakgaJbaJcaJdaJeaJfaJgaJhaJiaJjaJkaJlaJmaJnaJoaFoahyaCjaDmaCjahyahyaGDaJpaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaJqaJraFraFsaQkaClaJsaGNaJtaJuaJvaJwaJxaGNaJyaEvaJzaJAaJBaJCaJCaJCaJCaJCaJCaJCaJDaGRaJEaDtaFJdBtaVCaVCdGIdGJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALaALdGhaGVdFRdFRdFRdGjdGiaALaJJaJKaJKaJKaJLaJMaJKaJNaJKaJOaJPaJKaJQaJRaJSaJTaJQaJUaJVaJWaFaaJXaJYaFaaJZaKaaFabnNaFaaFaaKcaKdaKeaKfaKgaKhbjdaKjaKiaKdaKkaFhaFhaahatNatNaKlaLpaLqaLraLsakiaJbaJbakjakkaFmaxlaxmaxdaKraJkaKsaKtaJkaKuaFoahyaCjaDmaCjaGDaGDaGDaGDaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaJqaKvaIbaIcaLJaDoaKyaGNaJtaJuaJvaJwaJxaGNaLKaKzaKAaJAaKBaKCaKCaKCaKCaKCaKCaKCaKDaGRaKEaDtaFJaVCaDtdGIaVCdGKaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALdGkaDxaDxaDxaDxaDxdFPbqpaALaJJaKIaKIaKJaKIaKKaKLaKMaKNaKOaKPaKQaJQaKRaKSaKTaKUaKVaKWaKXaFaaKYaKZaFaaLaaLbaLcaLdaLeaLfboJaLhaLiaLjaLkaLlboJaLmaLmaLmaLmaLnaFhaahaahatNaLoaHNayZaKmaklaknakmakpakoaKoaFmaLyaxmaxdaFoaLzaLAaJkaJkaLBaFoahyaCjaLCaLDaGDaLEaLFaLGaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaLHaLIaIbaIcaLJaFpakqaLLaLLaLMaLNaLOaLLaLLaLLaLQaLRaJAaKBaKCaKCaKCaKCaKCaKCaKCaKDaGRaJEaDtaFJaDtaDtaDtaDtaDtaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALdGmaDxaDxdGndGoaDxdFPbsdaALaJJaLUaKIaKIaKIaLVaLWaLXaLYaLZaMaaMbaMcaMdaKSaKSaMeaMfaMgaMhaFaaMiaMjaFaaMkaMlaMmaEAaMoaMpaLmaMqaMraMsaMtaLmaLmaMsaLmaLmaLmaLnaFhaahaahatNaMuaHNatNaFmaFmaFmaFmaFmaFmaFmaFmaMvaMwaMxaMyaMzaMAaMBaJkaMCaFoahyaCjaMDaMEaGDaMFaMGaMHaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaMIaLIaMJaEsaMKaMLaMMaMMaMMaMNaMOaMPaMMaMMaMMaMQaMRaJAaKBaKCaKCaMSaMTaMUaKCaKCaKDaGRaMVaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALdGmaDxaDxdGqdGraDxdFPdGsaALaJJaNcaNdaNeaNeaNeaNfaNgaNhaNiaNjaNkaNlaNmaNnaNoaNpaNqaNraNsaFaaNtaNuaFaaNvaNwaFaaNxaNyaFaaLmaNzaNAaNBaNCaNDaNEaNFaNEaLmaNGaFhaFhaahaahatNaNHaNIatNaahaNJaNKaNLaNMaNNaNOaNPaxlaxmawnaFoaNQaNRaJkaJkaNSaFoahyaCjaNTaNUaNVaNWaNXaNYaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaMIaLIaNZaOaaObaOcaOdaOdaOdaOeaOdaOfaOdaOgaOdaOhaOiaOjaKBaKCaKCaOkaOlaOmaKCaKCaKDaGRaOnaDtaOoaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALdGtaDxaJGaDxaDxaDxdGvdGuaALaJJaLUaOvaOwaOwaOxaOyaOzaOAaOBaOCaODaOEaOFaMdaOGaOHaKSaOIaOJaOKaOLaOMaFaaONaOOaOPaLmaLmaOQaLmaORaFhaOSaOTaOTaOUaFaaFaaOVaFaaFaaahaahaahatNatNaNIatNaahaNJaOWaOXaOYaOZaOXaPaaxlaxmawnaJjaJkaPbaPcaJkaKuaFoahyaCjaPdaPeaGDaPfaPgaLGaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaHZaPhaLIaIcaPiaPjaPlaPlaPlaPmaPnaPoaPlaPpaPlaPraPsaJAaKBaKCaKCaKCaKCaKCaKCaKCaKDaGRaJEaDtaPtaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALaALdGwaDxaDxaDxaDxaDxaALaALaJJaKIaPxaKIaKIaKIaPyaPzaPAaPBaPCaPDaJQaKVaPEaPFaPFaPFaPGaPHaPIaPJaPKaPLaPMaPNaPOaPNaPPaPQaPNaPRaPSaKxaPUaPTaPWaFaaPXaPYaPZaFaaahaahaahaahatNaHNatNaahaNJaQaaOXaQbaQcaQdaQeaQfaQgaQhaKraJkaQiaJmaJnaQjaFoahyaCjaPdaCjaGDaGDaGDaGDaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaJqaKvaLIaIcaQmaQlaLPaQnaQnaQoaQnaQnaQpaQqaPkaLQaQsaJAaKBaKCaKCaKCaKCaKCaKCaKCaKDaGRaKEaDtaOoaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALaALdGydGxdGxdGzaALaALaahaJJaJJaPxaKIaQtaQuaQvaLXaQwaQxaQyaQzaJQaQAaQBaQCaKSaQCaQDaQEaFhaFhaFhaFhaQFboJaQGaQHaQHaMtaLmaQIaQJaPNaPPaQKaQLaFaaQMaPYaQNaFaaahaahaahaahatNaHNatNaahaNJaNJaQOaOXaQPaQQaNPawnaxmaQRaFoaJkaJkaHVaQSaFoaFoahyaCjaPdaCjaahaahaGDaQTaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaJqaQUaQVaDraQWaClaQnaQnaQXaQYaQZaQnaQnaRaaQnaQnaRbaJAaRcaRdaRdaRdaRdaRdaRdaRdaReaGRaJEaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahahyaRfaRfaRfaRfaRfaRfaRfaRfaRfaRfaRfaRfaahaahaahaALaALaALaALaALaALaALaALaahaahaRgaRhaRgaRgaJJaJJaJJaJJaJJaJJaJJaRiaRiaRiaPqaRkaPqaRiaRiaRiaahaahaFhaFhaRlaRmaPVaRoaRpaRqaRraPSaKxaRsaRnaRuaFhaFaaFaaRvaFaaahaahaahatNatNaHNatNaahaahaNJaNJaRwaRxaRyaPaawnaxmaRzaFoaRAaRBaGCaFoaFoahyahyaCjaPdaCjaahaahaGDaHXaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaLHaIaaLIaIcaRCaClbZuaREaRFaRGaQZaQnaRHaRGaRIaQnaRbaRJaRKaRKaRKaRKaRKaRKaRKaRKaRKaRLaGRaRMaRNaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaROaRPaRPaRPaRPaRPaRPaRPaRPaRPaRQaRfaahaahaahaahaALaALaALaALaALaALaahaahaahaRgaRRaRSaRTahyahyahyahyahyahyahyahyahyaRUaRVaRVaRVaRUahyahyaahaahaahaFhaFhaRWaRXaRXaRYaFhaFhaFhaFhaFhaFhaFhaFhaahaFaaRZaFaaahaahaahatNaSaaSbatNaahaahahyaNJaNJaNJaNJaNJaScaSdawnaFoaFoaFoaFoaFoahyahyahyaCjaPdaCjaCjaahaGDaGDaGEaGFaGFaGFaSeaGFaGFaGFaGFaGHaGDaGIaSfaGKaGLaClaQnaQnaSgaShaSiaSjaSkaSlaSmaSjaRbaSnaGRaGRaGRaGRaGRaGRaGRaGRaGRaGRaGRaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaROaRPaSoaSpaSqaSraSsaStaSoaSuaSvaSwaRfaahaahaahaahaahaahaahaahaahaSxaSxaSxaSxaSxaSyaSzaRTahyahyahyahyahyahyahyahyahyaSAaSBaSCaSDaSAahyahyaahaahaahaahahyahyahyahyahyahyahyahyahyahyahyaahaahaahaFaaFaaFaaahaahaahatNaSEaSFatNaahaahahyahyahyahyahyaSGawnaxmawnaSGahyahyahyahyahyahyahyaCjaSHaSIaCjaahaahahyahyahyahyahyahyahyahyahyahyahyaDoaFqaSJaFsaFtaClaRDaSKaSLaSMaSNaQnaRHaSOaRIaQnaSPaGRaFCaSQaSRaFFaSSaFFaSTaSQaFCaSUaEvaDtaOoaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALdGtaDxaJGaDxaDxaDxdGvdGuaALaJJaLUaOvaOwaOwaOxaOyaOzaOAaOBaOCaODaOEaOFaMdaOGaOHaKSaOIaOJaOKaOLaOMaFaaONaOOaOPaLmaLmaOQaLmaORaFhaOSaOTaOTaOUaFaaFaaOVaFaaFaaahaahaahatNatNaNIatNaahaNJaOWaOXaOYaOZaOXaPaaxlaxmawnaJjaJkaPbaPcaJkaKuaFoahyaCjaPdakraGDaPfaPgaLGaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaHZaPhaLIaIcaPiaPjaPlaPlaPlaPmaPnaPoaPlaPpaPlaPraPsaJAaKBaKCaKCaKCaKCaKCaKCaKCaKDaGRaJEaDtaPtaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALaALdGwaDxaDxaDxaDxaDxaALaALaJJaKIaPxaKIaKIaKIaPyaPzaPAaPBaPCaPDaJQaKVaPEaPFaPFaPFaPGaPHaPIaPJaPKaPLaPMaPNaPOaPNaPPaPQaPNaPRaPSaKxaPUaPTaPWaFaaPXaPYdGLaFaaahaahaahaahatNaHNatNaahaNJaQaaOXaQbaQcaQdaQeaQfaQgaQhaKraJkaQiaJmaJnaQjaFoahyaCjaPdaCjaGDaGDaGDaGDaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaJqaKvaLIaIcaQmaQlaLPaQnaQnaQoaQnaQnaQpaQqaPkaLQaQsaJAaKBaKCaKCaKCaKCaKCaKCaKCaKDaGRaKEaDtaOoaDtaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALaALbtpbtobtobtraALaALaahaJJaJJaPxaKIaQtaQuaQvaLXaQwaQxaQyaQzaJQaQAaQBaQCaKSaQCaQDaQEaFhaFhaFhaFhaQFboJaQGaQHaQHaMtaLmaQIaQJaPNaPPaQKaQLaFaaQMaPYaQNaFaaahaahaahaahatNaHNatNaahaNJaNJaQOaOXaQPaQQaNPawnaxmaQRaFoaJkaJkaHVaQSaFoaFoahyaCjaPdaCjaahaahaGDaxWaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaJqaQUaQVaDraQWaClaQnaQnaxYaxXaxZaQnaQnaRaaQnaQnaRbaJAaRcaRdaRdaRdaRdaRdaRdaRdaReaGRaJEaDtaFJaksaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahahyaRfaRfaRfaRfaRfaRfaRfaRfaRfaRfaRfaRfaahaahaahaALaALaALaALaALaALaALaALaahaahaRgaRhaRgaRgaJJaJJaJJaJJaJJaJJaJJaRiaRiaRiaPqaRkaPqaRiaRiaRiaahaahaFhaFhaRlaRmaPVaRoaRpaRqaRraPSaKxaRsaRnaRuaFhaFaaFaaRvaFaaahaahaahatNatNaHNatNaahaahaNJaNJaRwaRxaRyaPaawnaxmaRzaFoaRAaRBaGCaFoaFoahyahyaCjaPdaCjaahaahaGDayaaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaLHaIaaLIaIcaRCaClbZuaREaRFaRGaYSaQnaRHaRGaRIaQnaRbaRJaRKaRKaRKaRKaRKaRKaRKaRKaRKaRLaGRaRMaFJdGJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaROaRPaRPaRPaRPaRPaRPaRPaRPaRPaRQaRfaahaahaahaahaALaALaALaALaALaALaahaahaahaRgaRRaRSaRTahyahyahyahyahyahyahyahyahyaRUaRVaRVaRVaRUahyahyaahaahaahaFhaFhaRWaRXaRXaRYaFhaFhaFhaFhaFhaFhaFhaFhaahaFaaRZaFaaahaahaahatNaSaaSbatNaahaahahyaNJaNJaNJaNJaNJaScaSdawnaFoaFoaFoaFoaFoahyahyahyaCjaPdaCjaCjaahaGDaGDaGEaGFaGFaGFaSeaGFaGFaGFaGFaGHaGDaGIaSfaGKaGLaClaQnaQnaSgaShaSiaSjaSkaSlaSmaSjaRbaSnaGRaGRaGRaGRaGRaGRaGRaGRaGRaGRaGRaDtaFJaVCaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaROaRPaSoaSpaSqaSraSsaStaSoaSuaSvaSwaRfaahaahaahaahaahaahaahaahaahaSxaSxaSxaSxaSxaSyaSzaRTahyahyahyahyahyahyahyahyahyaSAaSBaSCaSDaSAahyahyaahaahaahaahahyahyahyahyahyahyahyahyahyahyahyaahaahaahaFaaFaaFaaahaahaahatNaSEaSFatNaahaahahyahyahyahyahyaSGawnaxmawnaSGahyahyahyahyahyahyahyaCjaSHaSIaCjaahaahahyahyahyahyahyahyahyahyahyahyahyaDoaFqaSJaFsaFtaClaRDaSKaSLaSMaSNaQnaRHaSOaRIaQnaSPaGRaFCaSQaSRaFFaSSaFFaSTaSQaFCaSUaEvaDtaOoaDtaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSVaSWaSXaSXaSXaSXaSXaSXaSXaSYaSvaSwaRfaahaahaahaahaahaahaahaahaahaSxaSZaTaaTbaTcaTdaTeaRTahyahyahyaTfaTgaThaTiaTfahyaTjaTkaTlaTkaTjahyahyaahaahaahaahaahahyahyahyahyahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahatNaHNaTmatNaahaahahyahyahyahyahyaTnawnaxmawnaTnahyaToaTpaTqaTraToahyaCjaPdaDnaCjaahaahahyahyahyahyahyahyahyahyahyahyahyaEpbdHaLIaIcaLJaClaQnaQnaQnaQnaQnaQnaQnaQnaQnaQnaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaTtaOoaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTuaRPaTvaTwaTwaSXaTxaTyaTzaTAaSvaSwaRfaahaahaahaahaahaahaahaahaahaSxaTBaTCaTDaTEaTFaTGaRTahyahyaTfaTfaQraTIaQraTfaTfaTfaTJaTKaTJaTfaTfahyahyaahaahaahaahahyahyahyahyahyahyahyahyahyaTfaTfaTfaTfaTfaahaahaahaahaTfatNaTLatNaTfaahaahaahahyahyahyavCavCaTMaTNaTMavCaToaToaTOaTPaTQaToaToaCjaTRaCjaCjaahaahaahaahahyahyahyahyahyahyahyahyahyaFpaDpaQVaDraQkaClaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaDtaTSaTTaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTuaRPaRPaRPaTUaTUaRPaRPaRPaRPaTVaRfaahaahaahaahaahaTWaTWaTWaTWaSxaTXaTYaTZaSxaRTaUaaRTaUbaUcaTfaUdaTkaTkaTkaUeaTfaUfaTkaUgaTkaUhaTfaUiaUjaTfaTfaTfaTfaTgaThaThaThaThaThaThaThaTiaTfaUkaUlaUmaTfaTfaTfaTfaTfaTfaUnaUoaUpaTfaTfaTfaTfaTfaUqaUraTfaUsaTkaTlaTkaUtaToaUuaUvaUvaUwaUxaToaUyaUzaUAaClaClaClaClaClaClaUBaUCaUCaUCaUCaUCaUCaUDaClaGIaUEaCnaCoaClaClaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaTWaDtaDtaUFaUGaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaRfaRfaRfaRfaUHaUHaRfaRfaRfaRfaRfaRfaUIaUIaUIaUIaUIaUIaUJaUKaULaSxaTcaUMaSxaSxaUNaUOaUPaUNaUNaUQaTkaURaUSaUTaUTaUUaUVaUTaUWaUTaUTaUUaUTaUTaUTaUXaUYaUTaUZaUTaUTaUTaUTaUSaUTaUTaUTaUUaUTaVaaUSaUUaUTaUTaVbaVcaVdaUTaVeaTkaTJaTkaVfaTkaVgaTkaTkaVhaTkaTkaTlaTkaTkaViaVjaUvaUvaVkaVlaVmaVnaVoaVnaVpaVqaVraZQaVsaVtaVnaVnaVuaVvaVnaVnaVwaVxaVyaVnaVnaVzaVAaLIaUAaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaVBaVCaFJaDtaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaRfaVDaVEaVFaVGaVHaVIaVJaVKaVLaVMaVNaVOaVPaVQaVKaVKaVRaVSaVTaVKaVUaVKaVPaVVaVWaVVaVRaVKaVXaVYaVZaIxaVYaVYaWbaWcaWdaWeaWdaWfaWbaWdaWdaWdaWgaWhaWdaWdaWiaWdaWdaWfaWcaWdaWdaWaaWbaWdaWjaWcaWbaWqaWdaWgaWdaWkaWhaWlaWdaWbaWdaWiaWdaWcaWdaWdaWmaWdaWfaWnaTkaTkaViaWoaWpbhcaWraWsaWtaWuaWvaWuaWwaWuaWuaWuaWuaWxaWyaWuaObaWuaWuaWuaWzaWAaWAaWAaWBaWCaWDaWDaWEaWFaWGaWHaWIaWIaWIaWGaWGaWGaWGaWGaWGaWGaWGaWGaWGaWGaWGaWGaWGaWGaWGaWJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGaaaazGazGazGazGazGaaaazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaRfaWKaWLaWMaWNaWLaWOaWPaUNaWQaUNaWRaUNaWSaUNaWTaWUaWVaWWaWXaWYaWZaXaaXbaXcaXdaXeaXfaXgaXhaXiaXjaXkaXlaXmaXnaXmaXmaXmaXmaXoaXnaXmaXmaXpaXmaXqaXmaXmaXraXmaXmaXsaXtaXuaXmaXvaXnaXwaXxaXyaXzaXyaXyaXyaXAaXBaXCaXDaXEaXFaXGaXHaXmaXIaXtaXJaXKaTkaXLaTkaTkaTkaViaUvaXMaXNaXOaXPaXQaXRaXSaLIaLIaXTaLIaLIaXVaSfaXWaLIaLJaLIaXXaLIaXYaXZaXVaXUaYaaYbaLIaLIaUyaDtaYcaYdaYeaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGaaaazGazGazGazGazGaaaazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaRfaRfaYfaYgaYhaYiaYjaRfaRfaRfaRfaYkaYlaYmaRfaUIaUIaUIaUIaUIaUIaUbaYnaYnaYnaUcaUIaUIaYhaTfaYoaYpaYqaYraYsaTfaYtaTkaTkaTkaYuaTfaTfaTfaTfaTfaTfaYvaYwaUgaYxaYvaTfaTfaTfaTfaTfaTfaYyaYzaYAaTfaUqaYBaUraTfaTfaUqaYBaUraTfaYCaYDaYEaTfaUqaYBaUraTfaTfaUqaYBaUraToaRjaYGaYHaUwaYIaToaClaYJaYKaYLaClaYJaYKaYLaClaClaClaYMaUAaClaClaClaClaClaClaUAaYNaUAaClaClaDtaDtaDtaDtaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaRfaRfaRfaRfaRfaRfaRfaahaahaRfaYOaYOaYOaRfaahaahaahaahaYPaYQaYRaYRaYRaYRaYRaYSaYPahyaTfaTfaYTaYUaYVaTfaTfaTfaYWaYXaYYaTfaTfaahaahaahaahaahaYZaZaaZbaZcaYZaahaahaahaahaahaTfaZdaZeaZdaTfahyahyahyahyahyahyahyahyaZfaZgaZhaZiaZfahyahyahyahyahyahyahyahyaToaToaZjaZkaZlaToaToahyahyahyahyahyahyahyahyahyahyaClaYMaUAaClaahaahaahaahaZmaZmaZnaZmaZmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaZoaZpaZqaZraZoaahaahaahaahaYPaZsaZtaZuaZvaZwaZxaYRaYPahyahyaZyaZzaZAaZBaZyahyaTfaUiaThaTiaTfaahaahaZCaZCaZCaZCaZDaZDaZEaZDaZDaZFaZFaZFaZFaahaZdaZGaZHaZdahyahyahyahyaZIaZJaZKaZLaZIaZIaZMaZNaZOaZIaZIaZJaZKaZLaZIahyahyahyahyaZPaYGaYHaUwbaAaZRaZRaZSaZTaZUaZRaZSaZTaZUaZRaZRaZRaZVaZRaZRaahaahaahaahaahaZmaZWaZXaZmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaZoaZYaZZbaaaZoaahaahaahaahaYPbabbacbadbaebafbagbahaYPahyahybaibajbakbalbamahyahyahyahyahyaahaahaahaZCbanbaobapaZDbaqbarbasaZDbatbaubavaZFaahaZdaZGbaxaZdahyahyahybayaZLbKzaYFaTHbaCbaDbaEbaFbaGbaHbaIbawbazbhAaZJbaMahyahyahybaNaYGaYHaUwbdwbaLbaBbaPbaObaRbaQbaPbaSbaRbaTbaWbaVbcPbaXaZRaZRaahaahaahaahaZmbbbbbcaZmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdaaaaaabbdaaaaaaaaabbdaaaaaaaaaaaaaaabbdaaaaaaaaabbdaaaaaabbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaZobbebbfbbgaZoaahaahaahaahaYPbbhbacbbibbjbbkbagbblaYPbbmbbnbbobbpbbqbbrbamahyahyahyaahaahaahaahaahaZCbbsbbtbbubbvbbwbbxbbybbzbbAbbBbbCaZFaahaZdaZdaZHaZdahyahybaybbDbbEbMcbfMbdCbdCbbGbbGbbHbbGbgHccSblCdCpbbLbbEbbMbaMahyahybbNbbObbPbbQbbRbbabaYbbTbbSbbTbbUbbWbbVbbWbcabcIbbXbbYbbZbcJaZRaahaahaahaahaZmaZWbcbaZmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdaaaaaaaaabbdbbdbbdbbdbbdbbdbbdaaaaaaaaabbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaZobccbcdbceaZoaahaahaahaahaYPbcfbcgbchbchbchbcibchbcjbckbclbclbcmbcnbcobamahyahyaahaahaahaahaahaahaZCbcpbcqbcraZDbcsbctbcuaZDbcvbcwbcxaZFaahaahaZdaZHaZdahyaZIbcybbEbbFbfMdCqbbGbbGbczbcAbcBbcCbcDbbGbbGbgHdCrbbLbbEbcyaZIahyaTobcEbcFbcGbcHbcLbcKbcNbcMbcNbcQbdzbdybdzdCsbdDbcObaZdCtbdEaZRbcRbcRbcRbcRaZmbcSbcTaZmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaabbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaZoaZpbcUaZoaZoaahaahaahaahaYPbcVbcWbcXbcYbcZbdabdbbdcbddbdebdebdfbdgbdhbaiahyahyaahaahaahaahaahaahaZCbdibdjbdkbdlbdlbdmbdlbdlbdnbdobdpaZFaahaahaZdaZHaZdahybdqbaJbbFbfMdCqbbGbbGbbGbbGbbGbbGbbGbbGbbGbbGbbGbgHdCrbdsbaKbdqahyaTobdubdvaUwbdwbaLbdFbfkbdGbLZbdIbWObNGbiVbYuaZRccRcsWdCucwuaZRbdJbdKbdLbcRbdMbdNbdOaZmaahaahaZmaZmaZmaZmaZmaZmaZmaZmaZmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaabbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbdPbdPbdPbdPbdPbdQbdRbdSbdTaahaahaahaahaYPaRtbdVbdWbdXbdYbdXbdZbeabebbecbecaZzbcnbedbeebefbefbefbefbefaahaahaahaZCaZCaZCaZCbdlbegbehbeibdlaZFaZFaZFaZFaahaahaZdaZHaZdahybejbiHbfMdCqbbGbelbbGbembenbbGbbGbbGbeobepbbGbelbbGbgHdCvbiFbejahyaZPbesbetaUwaToaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRbeubevbewbcRbdMbdNbdOaZmaahaZmaZmbexbeybdObdObdObezbeAaZmaZmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbdPbeBbeCbeDbdPbeEbeFbeGbdTaahaahaahaahaYPaYPbeHbeIbeJbeKbeLaYPaYPbbmbbnbbobeMbcnbeNbeebeObePbeQbeRbefaahaahaahaahaahbdlbdlbeSbeTbeUbeTbeSbdlbdlaahaahaahaahaZdaZHaZdahybcybiHdCwbeqbbGbbGbeVbeWbbGbbGbbGbbGbbGbeXbepbbGbbGbbGdCxbiFbcyahybaNbbObetbeYaToaahaahbeZbeZbfabfbbeZbfcbfdbfebffbfgbfhbfibfjbcRbkhbevbevbflbdMbdNbfmaZmaZmaZmbfnbfobfobfobfobfobfobfobfpaZmaZmaZmaZmaZmaZmaZmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbdPbfqbfrbfsbdPbftbfubfvbdTaahaahaahaahaahaYPaYPbfwbfxbfyaYPaYPahyahyahybfzbfAbcnbfBbeebfCbfDbfEbfFbefbefaahaahaahaahbdlbfGbeTbfHbfIbfJbeTbfKbdlaahaahaahaahaZdaZHaZdahyaZIbfLdCybbJbbGbeVbfNbfObbGdCzdCzdCzbbGbjlbfPbfQbbGbbGdCAbfSaZIahybbNaYGbetaUwaToaahaahbeZbfTbfUbfVbfWbfXbfYbfZbfZbgabgbbgcbgdbgebgfbggbghbcRbdMbgibfobfobfobfobgjbgkbgkbgkbgkbgkbgkbgkbglbfobfobfobfobfobfpaZmaZmaahaahaahaahaahaahbgmbgmbgmbgmbgmbgmbgmaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTuaRPaRPaRPaTUaTUaRPaRPaRPaRPaTVaRfaahaahaahaahaahaTWaTWaTWaTWaSxaTXaTYaTZaSxaRTaUaaRTaUbaUcaTfaUdaTkaTkaTkaUeaTfaUfaTkaUgaTkaUhaTfaUiaUjaTfaTfaTfaTfaTgaThaThaThaThaThaThaThaTiaTfaUkaUlaUmaTfaTfaTfaTfaTfaTfaUnaUoaUpaTfaTfaTfaTfaTfaUqaUraTfaUsaTkaTlaTkaUtaToaUuaUvaUvaUwaUxaToaUyaUzaUAaClaClaClaClaClaClaUBaUCaUCaUCaUCaUCaUCaUDaClaGIaUEaCnaCoaClaClcllcllcllcllcllcllaDtaDtaDtaDtaDtaDtaahaahaahaahaahaahaahaTWaDtaDtaUFaUGaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaRfaRfaRfaRfaUHaUHaRfaRfaRfaRfaRfaRfaUIaUIaUIaUIaUIaUIaUJaUKaULaSxaTcaUMaSxaSxawqaUOaUPaUNaUNaUQaTkaURaUSaUTaUTaUUaUVaUTaUWaUTaUTaUUaUTaUTaUTaUXaUYaUTaUZaUTaUTaUTaUTaUSaUTaUTaUTaUUaUTaVaaUSaUUaUTaUTaVbaVcaVdaUTaVeaTkaTJaTkaVfaTkaVgaTkaTkaVhaTkaTkaTlaTkaTkaViaVjaUvaUvaVkaVlaVmaVnaVoaVnaVpaVqaVraZQaVsaVtaVnaVnaVuaVvaVnaVnaVwaVxaVyaVnaVnaVzaVAaLIaUAcpZcmkcmlakuaktaktaDtaVCaYcaYdaYeaDtaDtaDtaDtaDtaDtaDtaDtaDtaVBaVCaFJaDtaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaRfaVDaVEaVFaVGaVHaVIaVJaVKaVLaVMaVNaVOaVPaVQaVKaVKaVRaVSaVTaVKaVUaVKaVPaVVaVWaVVaVRaVKaVXaVYaVZaIxaVYaVYaWbaWcaWdaWeaWdaWfaWbaWdaWdaWdaWgaWhaWdaWdaWiaWdaWdaWfaWcaWdaWdaWaaWbaWdaWjaWcaWbaWqaWdaWgaWdaWkaWhaWlaWdaWbaWdaWiaWdaWcaWdaWdaWmaWdaWfaWnaTkaTkaViaWoaWpbhcaWraWsaWtaWuaWvaWuaWwaWuaWuaWuaWuaWxaWyaWuaObaWuaWuaWuaWzaWAaWAaWAaWBaWCaWDaWDaWFakvakxakwakBakyakyakDaWGakIaWGaWGaWGaWGaWGaWGaWGaWGaWGaWGaWGaWGaWGaWJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGaaaazGazGazGazGazGaaaazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaRfaWKaWLaWMaWNaWLaWOaWPaUNaWQaUNaWRaUNaWSaUNaWTaWUaWVaWWaWXaWYaWZaXaaXbaXcaXdaXeaXfaXgaXhaXiaXjaXkaXlaXmaXnaXmaXmaXmaXmaXoaXnaXmaXmaXpaXmaXqaXmaXmaXraXmaXmaXsaXtaXuaXmaXvaXnaXwaXxaXyaXzaXyaXyaXyaXAaXBaXCaXDaXEaXFaXGaXHaXmaXIaXtaXJaXKaTkaXLaTkaTkaTkaViaUvaXMaXNaXOaXPaXQaXRaXSaLIaLIaXTaLIaLIaXVaSfaXWaLIaLJaLIaXXaLIaXYaXZaXVaXUaYaaYbaLIaLIaUAcpZakLakKakPakMcomaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGaaaazGazGazGazGazGaaaazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaRfaRfaYfaYgaYhaYiaYjaRfaRfaRfaRfaYkaYlaYmaRfaUIaUIaUIaUIaUIaUIaUbaYnaYnaYnaUcaUIaUIaYhaTfaYoaYpaYqaYraYsaTfaYtaTkaTkaTkaYuaTfaTfaTfaTfaTfaTfaYvaYwaUgaYxaYvaTfaTfaTfaTfaTfaTfaYyaYzaYAaTfaUqaYBaUraTfaTfaUqaYBaUraTfaYCaYDaYEaTfaUqaYBaUraTfaTfaUqaYBaUraToaRjaYGaYHaUwaYIaToaClaYJaYKaYLaClaYJaYKaYLaClaClaClaYMaUAaClaClaClaClaClaClaUAaYNaUAaClaClcllakTakSakVakUakWdEoakYakXalaakZalcalbdEoaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaRfaRfaRfaRfaRfaRfaRfaahaahaRfaYOaYOaYOaRfaahaahaahaahaYPaYQaYRaYRaYRaYRaYRbewaYPahyaTfaTfaYTaYUaYVaTfaTfaTfaYWaYXaYYaTfaTfaahaahaahaahaahaYZaZaaZbaZcaYZaahaahaahaahaahaTfaZdaZeaZdaTfahyahyahyahyahyahyahyahyaZfaZgaZhaZiaZfahyahyahyahyahyahyahyahyaToaToaZjaZkaZlaToaToahyahyahyahyahyahyahyahyahyahyaClaYMaUAaClaahaahaahaahaZmaZmaZnaZmaZmaahcllclldEoalddEodEodEoakYalealgalfaloalbdEoaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaZoaZpaZqaZraZoaahaahaahaahaYPaZsaZtaZuaZvaZwaZxaYRaYPahyahyaZyaZzaZAaZBaZyahyaTfaUiaThaTiaTfaahaahaZCaZCaZCaZCaZDaZDaZEaZDaZDaZFaZFaZFaZFaahaZdaZGaZHaZdahyahyahyahyaZIaZJaZKaZLaZIaZIaZMaZNaZOaZIaZIaZJaZKaZLaZIahyahyahyahyaZPaYGaYHaUwbaAaZRaZRaZSaZTaZUaZRaZSaZTaZUaZRaZRaZRaZVaZRaZRaahaahaahaahaahaZmaZWaZXaZmaahaahdEoalpalsalralualtalxalwalzalyalyalAdEoaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaZoaZYaZZbaaaZoaahaahaahaahaYPbabbacbadbaebafbagbahaYPahyahybaibajbakbalbamahyahyahyahyahyaahaahaahaZCbanbaobapaZDbaqbarbasaZDbatbaubavaZFaahaZdaZGbaxaZdahyahyahybayaZLbKzaYFaTHbaCbKMbaEbaFbaGbaHbaIbawbazbhAaZJbaMahyahyahybaNaYGaYHaUwbdwbaLbaBbaPbaObaRbaQbaPbaSbaRbaTbaWbaVbcPbaXaZRaZRaahaahaahaahaZmbbbbbcaZmaahaahdEoalBalCalyalLalDalyalPalZalyambamadEoaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdaaaaaabbdaaaaaaaaabbdaaaaaaaaaaaaaaabbdaaaaaaaaabbdaaaaaabbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaZobbebbfdGNaZoaahaahaahaahaYPbbhbacbbibbjbbkbagbblaYPbbmbbnbbobbpbbqbbrbamahyahyahyaahaahaahaahaahaZCbbsbbtbbubbvbbwbbxbbybbzbbAbbBbbCaZFaahaZdaZdaZHaZdahyahybaybbDbbEbMcbfMbdCbdCdCqbbGbbHbbGbgHccSblCdCpbbLbbEbbMbaMahyahybbNbbObbPbbQbbRbbabaYbbTbbSbbTbbUbbWbbVbbWbcabcIbbXbbYbbZbcJaZRaahaahaahaahaZmaZWbcbaZmaahaahdEodEBamdamcamgameamAamhamCamBamDamadEoaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdaaaaaaaaabbdbbdbbdbbdbbdbbdbbdaaaaaaaaabbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaZobccbcdbceaZoaahaahaahaahaYPbcfbcgbchbchbchbcibfvbcjbckbclbclbcmbcnbcobamahyahyaahaahaahaahaahaahaZCbcpbcqbcraZDbcsbctbcuaZDbcvbcwbcxaZFaahaahaZdaZHaZdahyaZIbcybbEbbFbfMdCqbbGbbGbczbcAbcBbcCbcDbbGbbGbgHdCrbbLbbEbcyaZIahyaTobcEbcFbcGbcHbcLbcKbcNbcMbcNbcQbdzbdybdzdCsbdDbcObaZdCtbdEaZRbcRbcRbcRbcRaZmbcSbcTaZmaahaahdEodEBamFamEamWamVanaamZdEodEodEodEodEoaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaabbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaZoaZpbcUaZoaZoaahaahaahaahaYPbcVbcWbcXbcYbcZbdabdbbdcbddbdebdebdfbdgbdhbaiahyahyaahaahaahaahaahaahaZCbdibdjbdkbdlbdlbdmbdlbdlbdnbdobdpaZFaahaahaZdaZHaZdahybdqbaJbbFbfMdCqbbGbbGbbGbbGbbGbbGbbGbbGbbGbbGbbGbgHdCrbdsbaKbdqahyaTobdubdvaUwbdwbaLbdFbfkbdGbLZbdIbWObNGbiVbYuaZRccRcsWdCucwuaZRbdJbdKbdLbcRbdMbdNbdOaZmaahaahaZmaZmaZmanbaZmaZmaZmaZmaZmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaabbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbdPbdPbdPbdPbdPbdQbdRbdSbdTaahaahaahaahaYPaRtbdVbdWbdXbdYbdXbdZbeabebbecbecaZzbcnbedbeebefbefbefbefbefaahaahaahaZCaZCaZCaZCbdlbegbehbeibdlaZFaZFaZFaZFaahaahaZdaZHaZdahybejbiHbfMdCqbbGbelbbGbembenbbGbbGbbGbeobepbbGbelbbGbgHdCvbiFbejahyaZPbesbetaUwaToaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRbkjbevbuJbcRbdMbdNbdOaZmaahaZmaZmbexbeyaZWantbdObezbeAaZmaZmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbdPbeBbeCbeDbdPbeEbeFbeGbdTaahaahaahaahaYPaYPbeHbeIbeJbeKbeLaYPaYPbbmbbnbbobeMbcnbeNbeebeObePbeQbeRbefaahaahaahaahaahbdlbdlbeSbeTbeUbeTbeSbdlbdlaahaahaahaahaZdaZHaZdahybcybiHdCwbeqbbGbbGbeVbeWbbGbbGbbGbbGbbGbeXbepbbGbbGbbGdCxbiFbcyahybaNbbObetbeYaToaahaahbeZbeZbfaaFLbeZbfcbfdbfedGObfgbfhbfibfjbcRbkhbevbevbflbdMbdNbfmaZmaZmaZmbfnbfobfodGGbfobfobfobfobfpaZmaZmaZmaZmaZmaZmaZmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbdPbfqbfrbfsbdPbftbfucxEbdTaahaahaahaahaahaYPaYPbfwbfxbfyaYPaYPahyahyahybfzbfAbcnbfBbeebfCbfDbfEbfFbefbefaahaahaahaahbdlbfGbeTbfHbfIbfJbeTbfKbdlaahaahaahaahaZdaZHaZdahyaZIbfLdCybbJbbGbeVbfNbfObbGdCzdCzdCzbbGbjlbfPbfQbbGbbGdCAbfSaZIahybbNaYGbetaUwaToaahaahbeZbfTbfUbfVbfWbfXbfYbfZbfZbgabgbbgcbgdbgebgfbggbghbcRbdMbgibfobfobfobfobgjbgkbgkbgkbgkbgkbgkbgkbglbfobfobfobfobfobfpaZmaZmaahaahaahaahaahaahbgmbgmbgmbgmbgmbgmbgmaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbdPbgnbfrbgobdPbgpbgqbgrbdTaahaahaahaahahyahyahyahyahyahyahyahyahyahybbobbobgsbcnbgtbeebefbgubgvbgwbgxbefaahaahaahaahbdlbgybeTbeibgzbeibeTbgAbdlaahaahaahaZdaZdaZHaZdahyaZIbgBdCBbfRbbGbgCbbGbbGdCCbgDbgEbgFdCDbbGbbGbgCbbGbgGbgHdCEaZIaZfaTobgIbgJbgKaToaToaahbeZbgLbgMbgNbgObgPbgQbgRbgSbgTbgUbgVbgWbgXbgYbgYbgYbgYbgYbgYbgZbgZbgZbgZbgZbgkbhabhbbmzbhdbhebgkbhfbhfbhfbhfbhfbhfbglbfpaZmaahaahaahaahaahbgmbgmbhgbhhbhibhhbhjbgmbgmaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbdPbhkbhlbhkbdPbhmbfubhnbhobhobhobhoaahaahaahahyahyahyahyahyahyahyahyaZybhpbajbhqbhrbhsbefbhtbgvbgwbhubefaahaahaahaahbdlbhvbeTbhwbhxbhwbeTbhybdlaahaahaahaZdaZGaZHaZdahybdqbaUdCFbbGbbGbbGbbGdCGbgDbhAbhAbhAbgFdCFbbGbbGbbGbhBbbGbhCbhDbhEbhFbhGbetaUwbhHaToaahbeZbhIbhJbgNbhKbhLbhLbhLbhLbhMbhNbgVbhObhPbgYbhQbhRbhSbhTbgYbhUbhVbhVbhWbgZbhXbhYbhYbhZbhZbhYbiabhfbibbicbidbiebhfbdOaZWaZmaahaahaahaahaahbgmbifbigbihbiibijbikbifbgmaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyaahaahaahaahaahaahaahaahaahaahaahaahbilbilbilbilbilbilbilbilbilbimbinbiobipbeEbfubinbhobiqbirbhobhobhoaahaahahyahyahyahyahyahyahybambisaZzbitbiubdebivbiwbixbgwbhubefaahaahaahaahbdlbiybeTbizbiAbiBbeTbiCbdlaahaahaahaZdbiDaZHaZdahybejbdrdCFbbGbbGbbGbbGdCGbiFbhAbdtbhAbiHdCFbbGbbGbbGbiIbiJbiJbiKbiLbiMbiNbiObiPbiQaToaahbeZbfTbiRbiSbeZbiTbiUblObiWbiXbfhbgVbhObiYbgYbiZbjabjbbjcbgYbSjbjebjfbjgbgZbjhbjibjjbjkbpybjmbjnbhfbibbjobjpbjqbhfbjrbjsaZmaahaahaahaahaahbgmbjtbjubjvbjwbjvbjubjxbgmaahaahbgmbgmbgmbgmbgmaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahbilbjybjzbjAbjBbjCbjDbjEbilbjFbjGbjHbjIbjJbjKbjLbhobjMbjNbjObjPbhoaahaahaahahyahyahyahyahyahybaibjQbjRbjSbhrbecbjTbjUbjVbgwbhubefaahaahaahaahbjWbjWbjWbjWbjXbjWbjWbjWbjWaahaahaahaZdbjYaZHaZdahybcybaUdCFbbGbbGbbGbbGdCGbjZbhAbhAbhAbkadCFbbGbbGbbGbkbbbGbbGbkcaZibkdaYGbetaUwbkeaToaahbeZbkfbkgblRbeZbfhbfhbfhbfhbkibfhbkjbkkbklbgYbkmbknbkobkpbgYbkqbkrbksbktbgZbkubkvbkwbkxbkybkzbkAbkBbkCbkDbkEbkFbhfbdObkGaZmaahaahbgmbgmbgmbgmbkHbkIbkHbkJbkHbkKbkHbgmbgmbgmbgmbkLbkMbkNbgmbgmaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkObkPbkRbkQbkSbkPbkPahyaahaahaahaahaahaahaahaahaahbilbkTbkUbkVbkWbkXbkYbkZblablbblcbldbleblfblgblhbhoblibljblkblkbhobllbllbllbllahyahyahyahyahybbobboblmblnblobeebefblpbjVbgwblqbefaahaahaahaahbjWblrblsbltblublvblwblxbjWaahaahaahaZdaZdaZHaZdahyaZIblydCwbeqbbGblzbbGbbGdCrbjZblAbkabfMbbGbbGblzbbGblBdCHdCIaZIaZfaToaZjblDaZlaToaToaahbeZblEblFblGbeZblHblIblJblKblLblMblNbhOblWbgYbgYblPblQbpabgYblSblTblUblVbgZbrKbhZbhYblXbhYbhYblYbhfblZbmabhfbmbbhfbmcaZWaZmaahbgmbgmbifbmdbkHbmebmfbmgbmhbmibmfbmgbmjbkJbmkbmlbmibmmbmgbmnbgmbgmaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkPbmobmpbmqbmpbmobkRahyahyaahbkPbkPbkPbkPaahaahaahbilbmrbmsbjAbmtbmubmvbmwbilbmxbfubmybdTbrebdTbrebhoblibmAbmBbmCblkbmDbmEbmFbllbmGbmHbmIbllahyahyaZyaZzbcnbhrbeebmJbmKbmLbmMbefbefaahaahaahaahbjWbmNbmObmPbmQbmPbmRbmSbjWaahaahaahaahaZdaZHaZdahyaZIbmTdCJbbJbbGbfPbfQbmUbbGbdCbdCbdCbbGbmUbeVbfNbbGbbGdCKbmVaZIahyaZPaYGaYHaUwaToaahaahbeZbmWbmXbmYbmZbnabnbbncbncbndbnebnfbngbnhbnibgYbnjbnkbnlbgYbnmbnnbnobnpbgZbnqbnrbhYbnsbhYbntbnubhfbnvbnwbhfbnxbhfbnyaZWaZmaahbgmbnzbnAbnBbnCbnDbnEbnDbnFbnDbnGbihbnHbkJbnIbnJbnKbnLbihbnMbnNbgmaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabnObnPbnQbnRbnRbnPbnSbnTbkPbkPbkPbnUbnVbkPbkPbkPbkPbkPbkPbkPbkPbkPbkPbkPbkPbkPbftbfubnWbdTbnXbnYbnZblkblkboabobbocblkbodboeboebofbogbohboibllahyahybamaZzbcnbojbeebmKbmKbokbolbefaahaahaahaahbjWbjWbombonboobopboqbonborbjWbjWaahaahaahaZdaZHaZdahybdqbiHdCBbfRbbGbbGbfPbfQbbGbbGbbGbbGbbGbembeWbbGbbGbbGdCxbdxbdqahybaNbbObotbouaToaahaahbeZbgLbovbgNbowboxboybozboAboBboCbgVbhOboDboEbgYboFboGboFbgYboHboIbTzboKbgZbgkboLboMbdAboLboMboOboOboOboOboOboOboOboOaZWaZmaahbgmboPboQboRbkHboSbmfboTboUboVboWbmmbmgbkHbmibmmboXboYboSboZbuPbgmaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkQbmqbpbbpcbpcbmqbpdbpebpfbpgbphbpibpjbpkbplbpmbpnbpobppbpqbprbprbpsbprbptbpubpvbpwbpxbMKbpzbpzbpzbpAblkblkbpBblkblkbpCbpDbpEbpEbpEbpFbpGbllahyahybamaZzbcnbfBbeebefbefbefbefbefaahaahaahaahbjWbpHbpIbpJbpKbpLbpKbpMbpNbpObjWaahaahaahaZdaZHaZdahybejbiHdCDdCLbbGbelbbGbfPbenbbGbbGbbGbeobeWbbGbelbbGdCHdCMbdxbejahybbNaYGaYHaUwbpPahyaahbeZbpQbpRbgNbpSbpTbpUbpVbpVbpWbpXbpYbpZbqabqabqbbqcbqdbqcbqebqcbqfbqgbqhbqibqjbqkbqhbqlbqmbqnboObqoaCqbqqbqrbqsbqtboOaZWaZmaahbgmbqubqvbqwbkJbqxbqybqzbgmbqAbqBbqCbqCbqDbsnbqCbqEbqFbqGboZbqHbgmaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaacAacOacAacAacAacAacAacAacAacOacAacAacAacAaaaaaaacAacAacAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqIaadahybkQbnPbqJbpcbpcbqKbqLbqMbqNbqObqPbqQbqRbqSbqTbqUbqVbqTbqWbqXbqTbqYbqZbrabrbbrcbrdbgqbinbMNbrfbrgbpzbrhbrebribrjbrkbrlbrmbrnbrobrpbrqbrrbrsbllahyahybambrtbrubrvaZyahyahyahyahyahyahyaahaahaahbjWbjWbrwbrxbpKbpKbpKbrybrzbjWbjWaahaahaahaZdaZHaZdahybcyaTsbrBdCDdCLbbGbbGbbGbbGbbGbbGbbGbbGbbGbbGbbGdCHdCCbrCbdBbcyahyaTobrEaYHbrFbrGahyahybeZbfTblFbrHbeZbrIbrJbvUbrLbrMblMbrNbrObrPbrQbrRbrSbrTbrSbrSbrSbrUbrVbrWbrXbrYbrZbrYbsabrYbrYbsbbscaCrbsebsfbsgbsgboOaZWaZmaahbgmboPbshboRbkHbmibsibsjbskbslbmmbmmbsmbkHbuYbmmbsobspbmiboZbsqbgmaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaacAaaaaadaaaaaaaaaaaaaadaadaaaaadaadaadaaaaadaadaadaaaacAaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsrahyahybssbmqbstbpcbpcbmqbsubsvbswbsxbsybszbsAbkPbkPbkPbkPbkPbkPbkPbkPbkPbkPbkPbkPbkPbsBbfubsCbdTbekbsEbsFbsFbsGbsHbsIbsJbrlbsKbrnbsLbsMbsNbrrbsObsPahyahybamaZzbcnbhrbamahyahyahyahyahyahyaahaahaahaahbjWbsQbrxbsRbsSbsTbsUbsQbjWaahaahaahaahaZdaZHaZdahyaZIbdqbbEbsVdCDdCLbbIbbJbbKbbGbbGbbGbbIbbJbbKdCHdCCbrCbbEbdqaZIahyaZPaYGbetaUwbrGahyahybeZbeZbsWbeZbeZblMblMblMbsXbsXbsXbsXbsYbsZbsXbsXbtabtbbtcbtdbtdbtebtfbtbbtgbthbtibtjbtkbtlbtmboObtnaCsaCuaCtaCuaDwboOaZWaZmaahbgmbtsbttbnBbtubnDbtvbnDbtwbmmbtxbmmbtybkJbyTbijbtzbtAbtBbtCbtDbgmaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaacAaaabtEbtFbtGaaabtEbtFbtGaaabtEbtFbtGaaabtEbtFbtGaaaacAaadaadaaaaaaaaaaaaaaaaaabtHbtIbtJbtKaaaaaabtLbtMbtNbtLbtLbtObnPbnQbtPbtQbnPbtRbnTbkPbkPbkPbtSbnTbkPaahaahaahaahaahaahaahaahaahaahaahbdTbtTbtUbtVbMKbtWbtXbtYbpzbtZbeEbuabubbucbudbuebufbufbufbugbuhbuiahyahybamaZzbcnbhrbamahyahyahyahyahyaahaahaahaahaahbjWbujbukbulbumbukbukbujbjWaahaahaahaahaZdaZHaZdahyahybbMbaMbbEbsVdCDdCNdCPdCOdCzdCzdCzdCNdCPdCOdCCbrCbbEbaybbDahyahybaNbdubdvbunbrGahyahybuoberbuqburbusbutbuubuvbsXbuwbuxbuybuzbuAbuBbuCbuDbuEbuFbuGbuHbuIbtfbuJbuKbuLbuMbuNbuObuLbuNboObwxbuQbuRbuSbuTbuUboOaZWaZmaahbgmbgmbifbuVbkHboSbuWbmmbmfbmmbmmbtCbuXbkJbCQbwubuZbvabsmbvbbgmbgmaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaacAaadbtEbvcbtGaadbtEbvcbtGaadbtEbvcbtGaadbtEbvcbtGaadacOaaaaadaadaaaaaaaaaaaaaaabtHbtHbvdbvebtHbvfbvgbvhbvibvjbvkbkPbmobmpbmqbmpbmobkRahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahaahbdTbvlbvmbvnbMNbvobvpbvqbvrbMKbvsbvtbvubvvbvwbvxbvybvzbvAbvBbvCbllahyahybaiaZzbMObhrbaiahyahyahyaahaahaahaahaahaahaahbjWbjWbjWbvDbjWbjWbjWbjWbjWaahaahaahaahaZdaZHaZdahyahyahybbMaZLbaJbgEbgEbvGbvHbiEbhzbiEbvKbvLbgEbgEbiGaZJbbDahyahyahybbNaYGbRLaUwbvNahyahybvObosbuqbvQboNbvSbvTbxbbsXbvVbvWbvXbvYbvYbvZbwabwbbwcbwdbwebwebwfbwgbwhbwibwjbwkbwlbwmbwnbwoboObwpbwqbwrbtqbwsbwtboOaZWaZmaahaahbgmbgmbgmbgmbAQbwvbwwbmfbyUbwybwzbkJbkJbGRbkJbwAbwBbwCbgmbgmaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaaaadaaaaaaaadaadaaaaaaaaaaaabtHbwDbwEbwFbtHbwGbwHbwIbwJbwKbwLbkObkPbkRbkQbkSbkPbkPaahaahahyahyahyahyahyahyaahaahbwMbwMbwMbwMbwMbwMbwMbwMbwMbwNbwObwPbdTbrAbwRbwSbwTbMNbwUbuabsCbucbwVbwWbwXbllbwYbwZbwYbllahybeebeeblmblnblobboahyahyaahaahaahaahaahaahaahaahaahaahaahbxaaahaahaahaahaahaahaahaahaZdaZdaZHaZdaZdahyahyahyaZIaZJaZKaZLaZIaZIaZJaZKaZLaZIaZIaZJaZKaZLaZIahyahyahyahyaToaZjblDaZlaToaToahybxcbxdbxebvSbxfbxgbxhbxibsXbxjbxkbxlbxmbvYbvYbxnbqhbxpbxqbthbthbxrbtfbxsbxtbxubxvbxwbxxbADbxzboOboOboOboObxAboOboOboOaZWaZmaahaahaahaahaahbgmbxBbxCbkJbxDbkJbxBbxEbkJbxFbxGbkJbxHbxIbkJbgmaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaaaadaaaaaaaaaaadaadaaaaaaaaabtHbxJbxKbxLbtHdDfbxMbxNbxObxPbxQbtLaahaahaahahyahyaahaahahyahyahyahyaahaahaahaahbwMbwMbxRbxSbxTbxUbxVbxWbxXbwMbxYbxZbyabdTbybbycbydbyebdTbyfbuabygbyhbyhbyhbyhbyhbyibyjbykbyhbfzbeebylaZzbcnbymbboaZdaahaahaahaahaahaahaahaahaahaahaahaahbxaaahaahaahaahaahaahaahaZdaZdaZGaZHaZGaZdaZdahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyaZdaTobbObynbiPbyoaTobypbyqbyrbysbytbyubyvbywbyxbyybyzbyAbyBbyCbvYbxobsXbyEbtbbyFbyGbyHbyIbyJbyKbyLbyMbyNbyObyPbyQbyRbySbIxbCLbyVbyWbyXbyYbySaZWaZmaahaahaahaahaahbgmbyZbzabzbbzcbzdbzebzfbzgbzhbzibkJbzjbzkbzlbgmaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAacAacAaadaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaaaadaaaaaaaaaaaaaadbzmbznbznbznbznbzobtHbtHbtLbzpbzqbzrbzsbztbtLaahaahaahaahahyahyahyahyahyahyaahaahaahaahaahbwMbzubzvbzwbzxbzybzzbzAbzBbzCbzDbzEbzFbzGbzHbzIbzJbzKbzLbzMbzNbzObzPbzQbzRbzSbzPbzTbzUbzVbzWbzXbzYbecbajbhqbhrbzZaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaahaahaahbxaaahaahaZdaZdaZdaZdaZdaZdbAabAbbAcbAdaZGaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdbAebAfbAgbAhaUvbAibAjbAkbvSbAlbvSbAmbxgbAnbAobuCbApbAqbArbAsbAtbAubuCbAvbAwbqmbAxbAxbAybtfbAzbwibAAbABbACbADbAEbAFbySbAGbAHbAIbyWbyWbAJbySbAKaZmaahaahaahaahaahbgmbgmbALbAMbANbAObAPcBYbARbASbATbAUbAVbAWbAXbgmaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaadaaaaaaaadbAYaadaaaaadbAYaadaaaaadbAYaadaaaaadbAYaadaaaaadaaaaaaaaabAZbBabBbbBcbBdbBebBfbBgbBhbBibtLbBjbBkbBlbBmbztbtLaahaahaahaahaahahyahyahyahyaahaahaahaahaahaahbwMbBnbzwbBobBpbBqbBrbBsbBrbBtbBubBvbBwbBxbjJbBybjJbBzbjJbjJbBAbBBbBCbBDbBEbBFbBGbBHbBIbBJbBKbBLbBMbBNbBObBPbBQbBRbBSbBTbBUbBUbBUbBUbBVbBUbBWaZdaZdaZdaZdbBXaZdaZdaZdbBYbBZbBZbBZbBZbBZbCabCbbCcbCdbCdbCdbCdbCdbCdbCdbCebCdbCdbCdbCfbCgbCgbCgbCgbCgbCgbCgbCgbChbCgbCibCjbCkbClbCmbbRbCnbCobCpbCqbCrbvQbCsbvSbCtbCubwabCvbCwbCxbCzbyDbCybwabCBbCCbCDbCEbCEbCFbCGbwhbxtbCHbCIbCJbCKbIcbySbySbCMbCNbCObCPbyWbAJbySbAKaZmaahaahaahaahaahaahbgmbgmbgmbJJbCRbgmbgmbgmbgmbgmbgmbCSbCTbgmbgmaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadbCUbCVbCWbCXbCXbCXbCXbCXbCXbCXbCXbCXbCXbCXbCXbCXbCXbCXbCYbCVbCVbCVbCZbDabDbbDcbDdbDebDfbDgbDhbDibDjbtLbtLbDkbtLbtLbDlbtLaahaahaahaahaahaahaahahyahyaahaahaahaahaahaahbwMbDmbDnbDobDpbDqbDrbDsbDtbwMbDubDvbDwbDxbDybDzbDAbDBbDCbDDbDEbDFbyhbDGbDHbDIbDJbDKbDLbzVbzWbzXbzYbecbecbDMbDNbDOaZdbDPbDQbDRbDSbDTbDUbDVbDWbDXbDYbDZbEabEbbBUbBUbBUbEcaZdaZdaZdaZdaZGbEdbEebEfbEgbEgbEgbEgbEgbEgbEgbEhbEgbEgbEgbEibEjbEjbEjbEjbEjbEjbEjbEkbiDbjYaZdbElaYGbetbEmaVlbEnbEobEpbEqbErbEsbEtbEubEvbEwbsXbsYbsZbExbsYbEybsZbsXbEzbtbbyFbyGbyHbEAbtfbEBbuKbECbEDbuKbySbySbySbEEbEFbEGbEHbEIbyWbAJbySbAKaZmaahaahaahaahaahaahaahbgmbEJbEKbELbgmaahaahaahaahbgmbgmbgmbgmaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaadaaaaaaaadbEMaadaaaaadbEMaadaaaaadbEMaadaaaaadbEMaadaaaaadaaaaaaaaabAZbBabENbEObEPbEQbznbERbESbETbEUbEUbEVbEWbtHbEXbtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbwMbEYbEZbFabFbbFcbFdbFebFfbwMbFgbfubFhbFibFjbFkbFlbFmbFibFnbFobFnbyhbyhbyhbyhbyhbrDbFqbFrbyhbfzbeebFsbecbcnbFtbboaZdbFubFubFubFubFubFubFvbFwaZdbFxbFybFxaZdbFzbFAbFBbFCaZdaahaahaZdaZdaZGaZHaZGbFDbFEbFFbFGbEgbFHbFIbFJbFJbFKbFLbFMbFObFNbFPbFNbHvbHubEjbFQbEjaZdaZdaTobFRbgJaUvbFSaTobypbyqbFTbAlbFUbFVbFWbFXbEqbFYbFZbGabGbbGcbGdbGebGfbGgbGhbGibGjbGjbGkbGlbtbbGmbGnbGobGpbySbGqbGrbGsbGtbGubGvbGwbyWbAJbySaZWaZmaZmaahaahaahaahaahaahbgmbxybGybGzbgmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAacAacAaadaadbtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaaaadaaaaaaaaaaaaaaabGBbznbznbznbznbtHbtHbGCbGDbDibGEbGFbGGbGHbtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbwMbwMbwMbGIbGJbGJbGJbwMbwMbwMbGKbGLbyfbGMbGNbGObGPbGQbFibJWbGSbGTbGUbGVbGWbGXbGYbFnbGZbFnbGYahybeebeebHabcnbecbHbbHcbFubHdbHebHfbHgbFubFubFubFubHhbHibHhbHjbHjbHkbHlbHjbHmaahaahaahaZdaZdaZHbEgbEgbHnbHobHpbEgbHqbHrbHsbHsbHsbHtbHwbHybHxbHxbHzbKBbJbbHAbHBbEjahyahyaToaZjblDbHCaToaToahybxcbHDbHEbCqbHFbHGbHHbCqbHIbHJbHKbHLbHMbHNbHMbHObHPbHPbHQbHPbHPbHRbHSbHTbHUbHVbHWbHXbySbHYbHZbIabGtbGubGvbIbbyWbAJbySbbbbJraZmaahaahaahaahaahaahbgmbIdbIebIfbgmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaaaadaaaaaaaaaaahaahaahaahaahaahaahaahbtHbtHbtHbtHbtHbIgbIhbIibtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbwMbIjbGJbGIbGJbGJbGJbGJbIkbwMbIlbfubImbInbIobIpbIqbIrbFibIsbItbIubIvbIubIwbIubLzbIybIzbIAbGYahyahybIBbecbRQbecbICbHcbIDbIEbIFbIFbIGbIHbIIbIJbFubIKbILbIMbHjbINbIObIPbHjaahaahaahaahaZdaZGaZHbEgbIQbIRbISbITbEgbIUbIVbIWbFJbFJbIXbIYbIZbJabJabJabJabJabJbbJcbJdahyahybJeaYGbRSaUvbpPahyahybuobosbvSbvSbJfbJgbvSbvSbJhbJibJjbJkbxqbJlbJmbJnbthbJobJpbJqbKLbJsbJtbJubJvbJwbJxbJybJzbJAbJBbJCbJDbJEbJFbJGbJHbJIbySbglbfpaZmaahaahaahaahaahaahbgmbgmbLDbJKbgmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaaacAaaaaaaaahaahahyahyahyahyahyahyahyahyaahaahaahbtHbtHbJLbIibtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbwMbJMbGJbJNbJObGJbGJbGJbIkbwMbJPbtUbJQbJRbJSbJTbJUbJVbFibGYbLEbJXbJYbJXbJXbJXbJZbJYbKabKbbKcahyahybKdbecbcnbecbKebHcbKfbKgbKhbKibKjbKhbKhbKkbFubKlbILbKmbHjbKnbKobKpbHjaahaahaahaahaZdbKqaZHbEgbIQbKrbKsbKtbEgbKubKvbKwbFJbKxbKycuybKAbJabJabJabJabJabKBbKCbKDahyahybrGbKEbynbKFbrGahyahybvObsDbKHbKHbKIbKKbMHbKMbKNbKNbKObKPbKQbKRbKNbKSbKTbKUbKVbKSbKWbKWbKWbKWbKWbKXbKYbKZbLabySbySbySbySbySbySbySbySbySbySbLbbLcaZmbLdbLebLebLebLdbLdbLfbLgbLhbLibLfbLdaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadbtEbGAbtGaadbtEbGAbtGaadbtEbGAbtGaadbtEbGAbtGaadacAaaabLjaahbLkbLkbLlbkQbkQbkQbLmbLkbLkahyaahaahaahbtHbLnbIibtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbwMbLobLpbLqbGJbLrbGJbLsbwMbwMbLtbfubImbFibLubLvbLwbLxbLybGYbPnbNsbLBbLCbLCbLAbLAbLBbRjbRibLFahyahybKdbLGbhqbecbKebHcbLHbLIbKhbLJbLKbLLbLMbLNbLObLPbLQbLRbLSbLTbLUbLVbHjaahaahaahaahaZdaZdaZHbEgbEgbLWbEgbEgbEgbLXbLYcAgbMabKxbMbcuBbMdbMebMfbMgbMhbKBbKBbMibKDahyahybvNbMjbgJaUvbvNahyahybMkbMlbMmbKJbOcbMkbMkbMkbMkbOabMqbMrbMsbMtbMsbKSbMubMvbMwbMxbKWbMybMzbMAbMBbMCbMDbMEbMFbMGbOdbMIbMJbRXbMLbMMdFecbabUSbMQbMRbMSbMTbMUbMVbMWbMXbMYbMZbNabNbbNabNcbLdaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOaaabtEbNdbtGaaabtEbNdbtGaaabtEbNdbtGaaabtEbNdbtGaaaaadaadbLjaahbLkbNebNfbNgbNfbNgbNfbNebLkahyahyaahaahbtHbNhbIibtHbtHaahaahaahaahaahaahaahaahaahaahaahbtHbtHbtHbwMbwMbwMbwMbwMbwMbwMbwMbwMbNibNjbfubyfbGMbNkbNlbNmbLxbNnbGYbNobNpbNpbNqbNqbNrbNqbNqbRlbRkbGYahyahybKdbecbDMbDNbKebNtbFubNubKhbNvbNwbNxbKhbNybFubNzbNAbNBbNCbNCbNCbNCbNCbNCbNCbNCaahaahaZdaZHbEgbNDbNEbNFbQAbNHbFJbFJbNIbFJbNJbEgbNKbNLbNMbNNbNObKBbNPbNQbNRbNSahyahyaTobNTbetbNUaToahyahybMkbNVbNWbNXbNYbSkbUXbMnbMobWTbMqbMrbOebOfbOgbKSbOhbOibOjbOkbKWbOlbOmbOnbOobOpbOqbOrbOsbOtbOtbOubOvbOqbOtbOwbOtbOxbOybOzbOAbOBbOCbODbOEbOEbOFbOEbOGbOHbOIbOJbOKbLdaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaadaaaaaaaaaaadaadaadaaaaaaaaaaaaaaaaaaaaaaadaaaaadaadaahaahaahbOLbOMbONbOObOPbOQbOLbORahyahyaahaahbtHbOSbIibOTbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbOUbOVbOWbOXbOYbOZbzHbPabPbbPcbPdbPebPfbPgbImbInbIobPhbPibLxbPjbGYbPkbPlbPmbNpbNpbSzcpCcpubRlcGibGYahyahybKdbecbcnbecbPobHcbFubPpbKhbPqbPrbPsbKhbPtbFubPubPvbPwbNCbPxbPybPzbPAbNCbPBbNCbNCaahaZdaZHbEgbPCbPDbPEbPEbPFbPEbPEbPGbFJbPHbEgbPIbPJbPKbPLbPMbPNbPIbPJbPKbEjbPObPPaToaZjblDbHCaToaToahybMkbPQbPRbPSbPTbPUbPVbPWbPXbPYbPZbQabQbbQcbQdbKSbQebQfbQgbQhbKWbQibQjbQkbMBbQlbQmbQnbQobQpbQqbQrbQsbQtbQpbQubQvbQwbMPbMQbQxbQybQzbMUbMVbWWbQBbOJbQCbQDbQEbOJcAfbLdaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczaczacAaczaczacOacAaadaadaadaadaaaaaaaaaaadaadaadacOaadaaaaahaahaahbNgbQFbQGbQHbQHbQIbNgahyahyahyaahaahbtHbQJbQKbQLbQLbQLbQLbQLbQLbQLbQLbQLbQLbQLbQLbQLbQLbQMbQNbQObQPbQQbQRbQSbQTbQUbQVbQWbQXbQYbQZbyfbJRbRabRbbRcbRdbRebGYbRfbRgbRhbNpbNpcGQbRgcIgbRlcNkbGYahyahybKdbecbcnbRmbRnbRobRpbRqbRrbRsbRtbRubRvbRwbFubRxbPvbRybNCbRzbRAbRBbRBbRCbRDbREbNCaahaZdaZHbEgbRFbRGbFJbRHbRIbFJbFJbFJbFJbRJbEgbupbTlbTkbRNbRObRPbRObRPbvEbRTbRUbRUbRVbRWbetaUvbvFaToahybMkbRYbRZbSabNWbSbbScbSdbSebSfbSgbShbSibMpbvIbKSbXibQfbSlbSmbKWbKWbKWbKWbKWbSnbSobSpbSpbSpbSpbSpbSqbSrbSqbSqbSqbSqbSqbSsbStbSubSvbSwbSwbSwbLdbLdbSxbSycNtbSxbLdbLdaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahbOLbSAbQGbQHbQHbSBbOLbORahyahyaahaahbtHbSCbIibSDbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbSEbSEbSFbSGbSEbSHbSIbSJbSKbSLbSMbSNbSObSPbSLbSLbSLbSLbSLbSLbSQbSRbSQbSSbSSbSQbSTbSQbSUbSQbGYahyahybKdbecbcnbSVbbobbobFubFubFubFubFubFubSWbFubFubSXbSYbSZbNCbTabTbbTcbTdbNCbTebTfbNCaahaZdaZHbEgbFLbvJbEgbEgbThbTibTibTibTibEgbEgbTjbTkbTlbTmbTnbTkbTlbTkbTobTpaUvaUvaUvaUvbTqbTrbTsaToahybMkbGxbTubTvbTubTtbScbTxbTybVhbTAbTBbTCbTDbTEbKSbTFbTGbTHbTIbTJbTKbTLbTMbTNbTObTPbTQbTRbTSbTTbSpbTUbTVbTWbTXbTYbTZbSqbUabUbbSubUcbUdbUebSuaahaahbSxbUfbUgbSxaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahbLkbNebNfbNgbUhbNgbNfbNebLkahyahyaahaahbtHbtHbIibtHbtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahbSEbUibUjbUkbUlbSEbUmbUnbUnbUobUpbUqbUrbUsbUtbUubUvbUwbUxbSLbUybUzbUAbUBbUBbUybUzbUybUCbUDbUEahyahybKdbecbcnaZzbUFahybUGbUHbUIbUJbUKbULbULbUMbUGbUNbUObUPbNCbNCbUQbNCbNCbNCbNCbNCbNCaahaZdaZHbURbvMbUTbUUbUVbUWbUWbUWbUWbUWbYobUYbTkbTlbUZbVabVbbVcbTkbTlbVdbVeaUvaUvbVfbVgbdvaUvbvPaToahybMkbVibVjbVkbVlbVmbVnbVobVpbVqbVrbVsbMpbKNbKNbKSbKSbKSbKSbKSbTJbVtbVubVvbVwbVxbVybVzbVAbVBbVCbSpbVDbVEbVFbVGbVGbVHbSqbVIbVJbSubVKbVLbVMbSuaahaahbSxbVNcAhbSxaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahbLkbLlbVPbVQbVRbVSbVTbLmbLkahyaahaahaahaahbtHbIibtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbSEbVUbVVbVWbVXbVYbVZbWabWbbWcbWdbWebWfbWgbWhbWibWibWjbWkbSLbWlbWmbWlbWnbUBbWlbWmbWlbUCbUDbUEahyahybKdbWobcnaZzbamahybWpbWqbULbWrbWsbWsbWtbWubUGbWvbWwbUPbWxbWybWzbWAbWBbWCbWDbWEbNCaahaZdbWFbWGbWHbWIbWJclZbWLbWKbTwbWKbWLbWKbWJbTlbTkbWNdBObVabWPbTlbTkbWQbURbPObPPaTobHCblDbHCaToaToahybMkbWRbWSbMkbWRbWSbMkbMkbMkbYAbWUbWVbCAbKNaahaahaahaahaahaahbTJbWXbWYbWZbTNbXabXbbTQbXcbXdbXebSpbXfbXgbXhcccbXjbXkbSqbXlbXmbXnbXobXpbSubSuaahaahbSxbXqbXrbSxbSxaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahahyahybXsbXtbXubXvbXsahyahyahyaahaahaahaahbtHbIibtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbSEbXwbXxbXybXzbXAbXBbXCbXDbXEbXFbXGbXHbXIbXJbXKbXLbXMbXNbSLbXObUBbUBbXPbXQbXRbXRbXRbXSbXTbUEahyahybXUbXVbhqbXWbamahybXXbXYbXZbYabYbbYcbYdbYebYfbYgbYhbYibYjbYjbYkcqEbYmbYnbYnbvRbNCaahaZdbYpbURbYqbTkbTlbWJbYrbWJbYrbWJbYrbWJbYsbTkbTlbUZbYtbVbbVcbTkbTlcgwbURahyahyaTobYvbetbYwaToahyahyahyahyahyahyahyahyahyahybKNbKNbYxbYybKNbKNaahaahaahaahaahaahbTJbTJbTJbTJbTJbYzciWbSpbSpbSpbSpbSpbSqbSqbSqbSqbSqbSqbSqbYBbYCbSubSubSubSuaahaahaahbSxbYDbVObYEbSxaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahahybYFbYGbYHbYIbYFahyahyahyaahaahaahaahbtHbYJbtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbSEbYKbYLbYMbYNbYObYPbXMbYQbYRbYSbYTbYUbYRbYQbXMbXMbXMbYVbSLbWlbWmbWlbYWbUBbWlbWmbWlbYXbYYbUEbYZbZabeebecbDMbZbbamahybZcbZdbZebZfbZgbZhbZibZjbUGbWvbZkbZlbZmbZnbZobZpbZqbZrbZsbZtbNCaahaZdbYpbURcaAbTlbTkbTlbTkbTlbTkbTlbTkbTlbTkbTlbTkbTlbZvbTjbZwbTlbTkbTjbZybZxahybJeaUvbetaUvbJeahyahyahyahyahyahyahyahyahyahyahybZzbZAbZBbZzaahaahaahaahaahaahaahbZCbZDbZEbZFbZGbTObTPbZHbZIbZJbZKbZLaahaahaahaahaahaahbZMbZNbZObZPbZQbZMaahaahaahaahbSxbZRbZSbZTbSxaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahahybZUbZVbZWbZUbZUahyahyaahaahaahaahaahbZXbZYbZXaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbSEbZZcaacabcacbSEcadcaecaecaecafcagcahcaicaecaecaecajcakbSLbUybUybUybUBbUBbUybUybUybYXcalcamcanbecbecbecbcnaZzbamahycaocapbZecaqcarcarcasbULbUGbWvcatcaucavcavcawcaxcaybYnbYncazbNCaahaZdcaBaZdccebTkbTlbTkbTlbTkbTlbTkbTlbTkbTlbTkbTlbTkcaCcaDcaEcaFcaGcaHcaIahyahybrGaUvbetcaJbrGahyahyahyahyahyahyahyahyahyahyahycaKcaLcaMcaNaahaahaahaahaahaahaahbZCcaOcaPcaQcaRcaScaTcaUcaVcaWcaXbZLaahaahaahaahaahaahbZMcaYcaZdFfcbbbZMaahaahaahaahcbccbdcbecbfcbcaahahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahahycbgcbhcbicbjcbgahyahyaahaahaahaahaahbZXbZYbZXaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbSEcbkcblcbmcbnbSEbNZcbpcbqcbrcbscbtcbucbvcbwcbxcbycbzcbAbSLcbBcbCbUBbUBbUBbUBcbDbUBcbEcbFcamcancbGcbHbecbcnaZzcbIahybUGcbJcbKcbLcbMbULcbNbUGcbOcbPcbQcbObNCcbRcbScbTcbUcbVcbWcbXbNCaahaZdbYpaZdcDsbTlbTkbYsbTmbTnbTkbTlbTkcbZbTmbTlbTkbTlccabTnccbbTlbTkdBQcaIahyahybrGccdbgJaUvbrGahyahyahyahyahyahyahyahyahyahyahyccBccfccgcaNaahaahaahaahaahaahaahbZCcchcciccjbZGcckcclbZHccmccnccobZLaahaahaahaahaahaahbZMbZNbZMbZMbZMbZMaahaahaahaahcbcccpccqccrccscctccuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahahyahybXsccvccwccxbXsahyahyaahaahaahbZXbZXbZXbZYbZXaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbSEbSEccycczbSEbSEbSLbSLbSLbSLbSLccAbSLbSLbSLccEccCccDbSLbSLbUEbUEcdPccFccFccGbUEbUEbUEbUEbUEbYZbZabeeccHblnblmbeeahybUGbUGbUGbUGbUGbUGbUGbUGccIccJccKccLbNCbNCccMbNCbNCbNCccNccObNCccPaZdccQaZdbURbwQbTlbUZdBRbVbbVcccTccUbVbbVaccVccWbUZbVadBOccXbTkbTlcbYcaIahyahybrGaUvbetaUvbvNahyahyahyahyahyahyahyahyahyahyahyccBccYccZcaNaahaahaahaahaahaahaahbZCbZCbZCbZCbZCcdacdbbZLbZLbZLbZLbZLaahaahaahaahaahaahbZMbZNbZMaahaahaahaahaahaahaahcbccdccddcdecdfcdgcdhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahahyahybYFcdiccwcdjbYFahyahyaahaahaahbZXcdkcdlcdmbZXbZXbZXbZXaahaahaahaahaahaahaahaahaahaahaahaahaahbSEbSEbSEbSEaahaahaahaahbZXcdncdobZXahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyaZybecbcnaZzcbOcbOcbOcbOcdpcdqcdrcdscdtbFpcdvcdwcdxcdycdzcdAcdBcdCcdDcbOcbOcbOcbOcbOcdEcdFcdGbURbURbTkccUbVbbYtccVcdHbUZbYtdBObVccdIccUcdJcdKcdLcdMcdNcdOcdSahyahybrGcdQbetcdRaTocaNahyahyahyahyahyahyahyahyahyahycelcdTcdUcaNaahaahaahaahaahaahaahaahaahaahaahbZMcdVcdWbZMaahaahaahaahaahaahaahaahaahaahbZMbZNbZMaahaahcbccbccbccbccbccbccdXcdXcbccbccbccbcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahbZUbVSbVQbZUcdYccwcdZbZUbVSbVQbZUbZUbZXbZXceacebceccedceecefbZXaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZXcegcehceiceiceiceiceiahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahybaicejbjSaZzcekceLcemcbOcenceocepceocencencenccJccKcencencencdBceqcercescbOcetceLceucevcewcexceycezceAceBceCceDceAceEceAceFceCceBceGceBceCceHceIbTkbTlceJbURahyahybvNaUvbetaUvceKcaNcgqceMceMceMceMceMceMceMceMceNcaNceOcePcaNbZMbZMbZMbZMaahaahaahaahaahbZMbZMbZMceQceRbZMaahaahaahaahaahaahaahaahaahbZMbZMbZNbZMaahaahcbcceSceTceTceTceTceUceUceVceTceTceWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahbZUceXceYceXceZcfacfbcfccfdcfecffcfgcfhcficfjcfkcflcfmcfncfobZXaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZXcfpcfqcfrcfscftcfuceiahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahybbocfvcfwcfxcfycfzcfAcfBcfCcfDcfEcfFcfFcfFcfFcfGcfHcfFcfFcfFcfIcfJcfDcfKcfLcfMcfNcfOcfPcfQcfRcfSbTpcfTbTlbTkbTlbTkcfUbTkbTlbTkbTlcfVbTlbTkcfWbTkbTlbTkcfXbZyahyahyaTocfYbyncfZaVlcgacgbcgbcgbcgccgbcgbcgdcgbcgbcgbcgbcgecgfcggbZMcghcgibZMbZMbZMbZMbZMbZMbZMcgjcgkcglcgmbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMcgnbZNbZMaahaahcbccgocgpcgTcgrcgscgtcgucgvcqbcgxceTceWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahbZUcgycgzcgAccwcgBccwccwcgCccwcgDbZUcgEcgFcgEcgGcgHcgIcgJbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXcgKcgLceicgMcgNcgOceiahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyaZycgPcgQcgRcgSchucgUcbOcgVcgWcgXcgYcgZchacgWcgWchbcgWchcchdchechfcgWchgcbOcgUchuchhchichjcevcevchkcdMcdNcdMcdNchlchmcdMchncdMcdNchochpcdMchqchrchschtchLchvahyahybJechwchxbbQbbRchychzchzchzchAchzchzchBchzchzchzchzchCchDchEchFchGchHchGchGchGchGchGchGchGchGchGchIchJchJchJchJchJchJchJchJchJchJchJchJchJchKbZMaahaahcbccgocgpciscgucgucgucgucgucgucguchMchNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahbZUchOchPchQchRchSchTchUccwchVchWbZUchXchYchZchYciacibciccidcidcidcidcidcidcidcidcidcidcidcidcidcidcidcidcidcidcidcidciecifcidcidcigcihciicijcikcilceiahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahybamcimbcnbeccbOcbOcbOcbOcinciocipciqcirciwcitciucivciAcixciycizciGciBciCcbOcbOcbOcbOciDcfQciEciFbURbURciXciHciHciHciHciHciHciHciHciHciHciHciHciIbURciXchvahyahyahybrGciJciKciLciKciMciNciNciOciNciNciNciPciNciNciNciOciQciRciSbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMciTciUciVcqcbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMaahaahcbccgocgpcjAciYciZcjacjbcjccjdcjeceTcjfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahcjgcjgbZUbZUcjhcjicjjcgBcjkcjlcjlcjmbZUbZUcjnchYcjochYcjpcjqcjrcjsbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXcjtcjucjvcjvcjwcjxcjyceiceiceiceiahyahycjzcjzcjzcjzcjzcjzcjzahyahyahyahyahyahyahybaicimbcnbeccjBahyahycbOcbOcbOcjHcjCcjDcjEcjDcjDcjFcjDcjEcjDcjCcjGcbOcbOcbOahyahyckhcjIcjJcjKciFaahaahahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahybvNaUvaUvcjLcjMcaNcgqceMceMceMceMceMceMceMceMceNcaNcaNcaNcaNbZMaahaahaahaahaahaahaahaahbZMbZMbZMciVbZMbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahcbccjNceTceTceTceTceTceTceVceTceTcjfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahcjgcjgcjOcjPcjgbVScjQbVQcjRbVScjQbVQbZUchYcjScjTchYcjUchYcjVcjWcjXcjqaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZXbZXcjucjYbZXcjZbYlbZXaahahyahyahyahycjzcjzckbckcckdckeckfcjzcjzahyahyahyahyahybbobbockgblnccHbbobboahyahyahyckEahyahyahyahyahyahyahyahyahyahyahyahyckEahyahyahyciFciFckicfQcfRciFciFaahaahaahahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyciFciFckjckjckkciFciFahyahyahyahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZMciVbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahcbccbccbccbccbccbccbccbccbccbccbccbcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahcjgcjgcklckmcknckockpckqckrckscktckuckvckwckxckyckzchYckAchYckBckCckDcjqaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZXcjubZXbZXbZXbZXbZXahyahyckKckFckFckGckHckIckIckIckIckIckIcjzahyahyahyahybbobbodETcimbcnbecbDObboclmckLckMciFclmckLckLckLckLckLckLckLckLckLckLckMciFclmckLckMciFckNckOckPcfRckQciFciFciFciFciFclmckLckLckLckLckLckLckLckLckLckLckRciFclmckLckRciFckScfRcfRckTckUciFciFahyahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZMciVbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahyahyahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahcjgckVckmcknckWckXckYckZclaclbchVclccldclecleclfclgclhcjUchYclicljclkcjqaahaahaahaahaahaahaahaahaahcllcllcllcllcllcllcllaahaahaahbZXcjubZXaahaahaahaahahyahyclYclncloclpclqclrclscltcluclvclwcjzahyahyahyahyaZycrkbecclyclzclAclAclBclCclCclCclDclCclEclCclCclFcfRcfRcfRcfRclGclHclIclJclIclIclIclKclLclMclNclIclIclKclIclOclIclPclIclQclIclIclIclIclIclQclRclIclSclIclTclIclQclIclKclIclUclUclVclWbKGcmpahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZMciVbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahyahyahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahcjgcsTcknckncmacmbcmcbZUbZUcmdbZUbZUchYcmeclecmfcmgcmhcmichYcjqcjqcjqcjqaahaahaahaahaahcmjcmjcmjcmjcllcmkcmlcmmcmncmocllaahaahbZXbZXcjubZXdEOdEOdEOdEOahyahycmRcmqcmrcmscmtcmtcmucmvcmwcmtcmxcjzahyahyahyahybambisbeccimcsUbecbeccmzcfRcfRcfRcfRcmAcmBcmBcmBcmCcmDcmDcmDcmEcmDcmFcmDcmGcmDcmDcsVcmHcmIcmJcmKcmDcmDcmHcsZcmDcmDcmLcmDcmDcmDcmMcmDcmDcmDcmDcmGcmDcmDcmDcmEcmDcmDcmDcmHcmNcmBctacmOcmPcmQcncahyahyaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZMbZMciVbZMbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahyahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahcjgcmScmTcmUcmVcmWcjgcmXbObcmZcnacnbcnScndcnecnfcngcnhcmichYaahaahaahaahaahaahaahaahaahcmjcnicnjcnkcllcnlcnlcnmcnlcnncllaahaahbZXcnocjubZXcrlcrrcrqdEOdEOahyclYcnpcnqcnrcnsckIcntcnucnvckIcnwcjzahyahyahyahybaibjQbeccimbDMbDNbeccmzcfRcnxcfRcnycnzcnAcnBcfRcnCcnxcfRcfRcnDcnxcnEcfRcnFcfRcnxcfRcjKcnGchicnHcevcevcnIcevcnJcevcnKcnMcevcnLcxCcevcnJcevcevcevcevcnJcevcnNcevcevcevcnIcnOcnQcnPcnRcfRbKGcodahyaahaahaahaahaahaahaahaahaahaahaahaahaahbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMcnTciVcgnbZMbZMbZMbZMbZMbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadbLjaahaahcjgcnUckXcnVcnWcnXcnYcnZcoacobcoacoccoocoecleclecofchYbRKchYaahaahaahaahaahaahaahaahaahcmjcogcohcoicllcojcokcolcnlcomcllaahaahbZXconcjubZXcvVcxWcvWcyjdEOahycowckFckFcopcoqckIckIcorckIckIcoscjzahyahyahyahybbobbocotcimbcnbeccoAbboclmckLckMciFclmckMciFcovcoGcoxcoycozcoScoxcoBcovciFclmckLckMciFcoCckicoDcmBcoEciFclmckLckMciFciFclmckLckMczAclmckLckMciFciFdCQckMciFclmckLckMciFcoFckickicfRcoXciFciFaahaahaahaahaahaahaahaahaahaahaahaahaahbZMbZMcoHcoIcoJcoJcoJcoJcoJcoJcoJcoJcoKcoLcoLcoLcoMcoNcoObZMbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadbLjaahaahcjgcoPckncoQcmacoRcpqcoTcoUcoVcoacoWcpPcoYcoZcpacpbchYcpcchYaahaahaahaahaahaahaahaahaahcmjcpdcohcpecllcpfcpgcphcpicokcllaahaahcpjbZXcpkbZXcpjcyzcymcFgdEOahyahyahyahycjzcplcpmcpncpocppcpTcprcjzahyahyahyahyahybbobbocpscptcmzbbobboahyahyahyahyahyahycovcNHcpvcpwcpxcpycpzcpAcpBcNIcovahyahyahyciFciFcpDcpEckjciFciFahyahyahyczZcDncDncDncEvcEvcEvcEVcEVcEWczZahyahyahyahyahyahyciFciFcjIcjIcjKciFciFaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZMcpFcpGcpHbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMcpIcoMcpJbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaahaahaahcjgcpKcpLcpMcpNcpOcqecpQcoacpRcoacpSchYcqzcpUcqzcpVcpWchZchYcpXcpXcpXcpXcpXcpXcpXcpXcpXcmjcmjcpYcmjcllcllcpZcqacllcpZcllcpXcpjcpjcFucFrcqdcpjdEOcFFcLvdEOcrIcqfcqfcqgcjzcjzcjzcjzcqhcjzcjzcjzcjzcrIcqfcqfcqfcqgcpjcqicqjcqkcqlcqmcpjcpjahyahyahyahyahycovcqncqocqpcqqcqrcqscrJcpBcqucovahyahyahyahycqvcqwcqxcqycqvahyahyahyahyczZcFecEVcEVcEvcEvcEVcEVcEVcIFczZahyahyahyahyahyahyahycrNckicqAcqBciFaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZMcqCcgnbZMbZMaahaahaahaahaahaahaahaahaahaahaahbZMbZMcgncqDbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaahaahaahcjgctxckncqFcqGcqHcqIcqJcqJcqKcqLcqMcqNcqOcqOcqPcqQcqRcqScqTcqUcqVcqWcqXcqYcqYcqYcqOcqZcracqYcrbcrccqYcqYcqOcrdcrecrfcrgcrhcricrjcMIcMjcrmcrncrocOZcrudBNcrscrtcrucrucrvcrucricrwcrxcrycrzcrAcrBcrAcrCcrAcrDcrAcrzcrAcrEcrFcrGcrucrHcrRahyahyahyahyahycrWcqtcrKcrLcrLcrMcrLcrLcpBcqtcrWahyahyahyahycsKcrOcrPcqycsKahyahyahyahycIHcJacJacEVcEVcEVcEVcEVcEVcJKcrQcrQcrQcsLcrScrTcrUcrQcrQctccsNctccrQcrQcrQcrQaahaahaahaahaahaahaahcrXcrXcrXcrXcrXbZMcrYcrZcrZcrZcrZcrZaahaahaahaahaahaahaahcsacsacsacsacsacsbbZMcsccsccsccsccscaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaaahaahcjgcsdcknckncsecsfcsgcshcshcsicshcsjcskcslcsmcsncsncsncsocspcsqcsrcsqcsqcsqcsscsqcsqcsqcstcsqcsqcsqcsscsqcsqcsqcstcsqcsqcsucsvcswcsxcsycswcswcsvdBPcswcswcszcsAcsBcrucrucrucricrucsCcswcsDcswcsEcswcswcswcsFcswcsvcswcsGcsHcsIcrucsJcsRahyahyahyahyahyctmcqtcrKcrLcsMcsMcsMcrLcpBcqtctmahyahyahyctucsOcrOcsPcsQcumcsSahyahyahycMYcJacJacNfcEVcEVcEVcEVcEVcrQcrQcwtctdcsXcwtcwvcsXcsYcwwctbcsYctbctecxOcwxcrQcrQaahaahcrXcrXcrXcrXcrXctfctgcthcrXctictjcrZctkctlcurcrZcrZcrZcrZcrZcsacsacsacsactnctoctpcsactqctrcscctscttcuTcsccsccsccsccscaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaaaabLjbLjcjgctvctwcALctycmacjgbRMctActBctCctDctEctFctGctHcrfcrfcrfctIctJctKcrfctLctMctNcrfctFctOcrfcrfctPctQctRctSctTctQctQctUctVctWcrocrpctXctYctZcuacubdCbcuadCfcuacuccudcuacuacuacubcuecufcuacubcuacugcuacuhcuicuacuacubcuacujcrucukcruculcuYahyahyahyahyahyctmcuncuocrLcsMcupcsMcrLcuqcunctmahyahyahycvacqycrOcrPcqycqycvaahyahyahycMYcPocJacPvcJacQdcEVcEVcEVcrQcxScsYcwrcwscwscwscwscwscwsczmczlczoczncPbcPbcBjcrQaahaahcrXcuucuvcuucrXcuwcuxcuKcrXcuzcuAcrZcuNcuCcuDcrZcuEcuFcuEcrZcuGcuHcuGcsacuIcuJcvzcsacuLcuMcsccwEcuOcuPcsccuQcuRcuQcscaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaadaadaadaadaadcuScuScvgcuUcuScuVcuWcuScuScuScuXcvocuZcuXcvrcvbcuXcvccvdcvecvfcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpjcvNcvhcrFcvicvjcpjcpjcpjcpjcrIcqfcqfcqfcqfcqgcpjbRRcvlcqdcpjcrIcqfcqgcpjcrIcqfcqgcpjcvmcrucrucrGcvncpjcpjahyahyahyahyahycwjcvpcuocrLcrLcrLcrLcrLcuqcvqcwjahyahyahycqvcwqcrOcrPcqycvscqvahyahyahycRUcWQcJacJacJacJacEVcEVcWRcrQcBkcsYcsYcsYcvucvucvucvucvuctbcDpcwzcsYcsYcsYcducrQaahaahcrXcvwcvxcvwcrXcrXcvycrXcrXcwFcwGcrZcrZcvBcrZcrZcvCcvDcvCcrZcvEcvFcvEcsacsacvGcsacsacvHcvIcsccsccvJcsccsccvKcvLcvKcscaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMaadaaacxfcvOcvPcvQcvRcvScvTcvUdEKdEJcvXcvYcvZcwacwbcwccuXcpXcpXcpXcpXcpXaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahcpjcwdcwecwfcwgcwdcpjdELdELdELahyahyahyahyahyahycpjcwhcwicwhcpjahyahyahyahyahyahyahycxAcqicqicqicwkcqicxAahyahyahyahyahyahycovcuncwlcwmcwncwocuncuncuqcwpcovahyahyahycsKcqycrOcrPcqycqycsKahyahyahyczZcZMcJacJadcEdcLcDncEVcEVcrQcvucvucsYcsYcBicDqdBUcxPbdUctbcxRcsYcFdcFdcFdcFdcrQaahaahcrXcwBcwCcwDcwDcwDcwJcwHcwLcwKcwUcwTcwXcwVcwMcwNcwMcwOcwPcrZcwQcwRcwScwScwScyacyecybcyqcyfcwYcwZcxacxbcxccxbcxdcxecscaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMaadaaacxNcxgcxgcxgcxgcvScvTcxhcxhcxicuXcxjcxkcxlcxmcxncuXcxocxpcxqcxraahaahaahaahaahcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxscxtcxucxvcxwcwhcwhcwhcwhcwhcwhcwhcwhcwhcwhcwhcxxcxycwhahyahyahyahyahyahyahyahycxzcyBcxBczkcxDcyBcxzahyahyahyahyahyahycovcovcxEcxFcxGcxHcxIcxJcxKcovcovahyahyahycumcsScxLcxMcqyctucsOahyahyahyczZczZdcYdcEdcEdcEcJacDnddacrQcEFcxPcsYcsYcxQcxQcxQcxQcxQctbcxRcsYcFdcFdcFdcFbcrQaahaahcrXcxVdEMcxXcxYcxZcytcyrcrXcyccydcrZcAkcyucygcyhcyidENcykcrZcyldEPcyncyocypcAqcAucsacyscAxcBocBncyvcywcyxcyydEQcyAcscaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMczTcyCcyDcyEcyFcxgcxgcvScyGcyHcyIcyJcyKcyLcyMcyNcyOcyPcuXcxqcxqcxqcxrcxrcxrcxrcxrcxrcxrcyQcyRcyScyScyScyScyScyScyScyScyScyScyScyTcyScyUcyVcyWcyXcyYcyVcyZczaczbczaczaczaczaczaczaczaczaczaczccwhahyahyahyahyahycxzcxzcxzcxzczdczebTgczgczhcxzcxzcxzcxzahyahyahyahycovcovcovcziczjczicovcovcovahyahyahyahyahycvacrOcrPcqycvaahyahyahyahyahyczZczZczZczZddeczZczZczZcrQcxQcxQcDocwycwycwycFccHvcHrcJzcHxcsYcFdcFdcFdcFdcrQaahaahcrXcrXcrXcrXcrXcrXcBqcrXcrXczpcuAcrZcrZcBrcrZcrZcrZcrZcrZcrZcsacsacsacsacsacBucsacsacuLcBvcsccsccsccsccsccsccsccsccscaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMczrczsczrczscztczuczvczwczxczyczzcxgcArczBczCczDczEcuXcuXczFczGczGczGczGczGczGczGczGczGczGczHcxqcxrcxrcxrcxrcxrczIczIczJcxrcOHczKcxqcxrczLczMczNczOczPcwhczQczQddgddmddkczQczQcwhcwhcwhcwhczRcwhahyahyahyahyahycxzczSczScABczUczVczWczXczYcAIcAacAacxzaahahyahyahyahyaahaahczicAbcziaahaahaahahyahyahyahyahycqvcAccAdcAecqvahyahyahyahyahyahyahyahycBgcQzcBgahyaahcrQcJNcxTcKMcxTcxTcFacFacKNcxTcxTcMecDrcFdcFdcFdcmYcrQaahaahaahaahaahaahcAicAjcBxcAlcAicAmcAncAocApcCccBbcAoaahaahaahaahaahaahaahcAscAtcClcAvcAscAwcCmcAycAzcAAcBAcAyaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMcACcADcACcAEcAFcxgcxgcvScvTcAGczzcAHcBTcAJcAKcMdbWMcuXcxqcANcxqcxqcxrcxrcxrcxrcxrcxrcxrcxrcAOcxrcxraahaahaahcxrcAPcAPcAPcxrcxrcxrcxrcwdcwdcAQcARcAScwdcwdcwhcwhcwhcwhcwhczQcwhcwhaahaahcwhczRcwhaahahyahyahyahycxzcATczecAUcAVczeczeczgcAWcAXczecAYcxzaahahyahyaahaahaahaahczicAZcziaahaahaahcBacCScBccBacqvcqvcBdcBecBfcqvcBgcBgcBgcBgcBgahyahyahycBgcQzcBgaahaahcrQcvucvucMXcGzcGAcGAcGAcNJcGAcGzcNMcsYcNVcNVcNWcNXcrQaahaahcAicAicAicAicAicBmcDycDxcAiczpcBpcAocDDcDCcBscAocAocAocAocAocAscAscAscAscBtcDMcDNcAscBwcBvcAycFkcBycBzcAycAycAycAycAyaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMcEBcyCcBBcBCcxgcxgcxgcBDcvTcAGczzcBEcuXcvrcvbcuXcuXcuXcxrcANcBFcxrcxraahaahaahaahaahaahcxrcBGcBHcxraahaahaahcBIcBIcBJcBIcBIaahaahaahaahcwdcBKcxucxvcwdaahaahaahaahaahcwhczQcwhaahaahaahcwhczRcwhaahaahaahahyahycxzcxzcxzcxzcBLcBMcBNcBOcbocxzcxzcxzcxzaahaahaahaahaahaahaahczicAbczicziczicBacBacBQcBRcBacBScEIcrOcrPcqycBUcBgcBVcBWcBXcBgcBgahyahycBgcQzcBgaTWaahcrQcNRcxPcMXcGzcHscHtcHucNUdFccGzcNMcsYcPccPccPccOVcrQaahaahcAicBZcCacCbcAicAicFlcAicAicCdcvAcAocFmcCecAocAocCfcCgcChcAocCicCjcCkcAscAscFncAscAscvHcFycAycAycCncAycAycCocCpcCqcAyaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMcACcADcACcCrcyFcxgcxgcvScvTcAGczzcCscCtcCucCvcCwcCxcCycCzcCAcxrcxraahaahaahaahaahaahaahcxrcCBcCCcxrcxraahaahcBIcCDcCEcCFcBIcCGcCGcCGaahcwdcCHcCIcCJcCKcCKcCKcCKcCKcCKcCKcCLcCKcCKaahahycwhczRcwhaahaahaahaahahycxzcCMcCNcABcCOczVcCPcCQcCRcEKcCTcCUcxzaahaahaahaahaahaahaahczicCVcCWcCXcCXcCYcCZcDacDbcDccDdcDecDfcDgcDhcDicBgcDjcDkcDlcDmcBgcBgcBgcBgcQzcQzcBgcBgcrQclXcxQcMXcGzcHscHtcIGcOYcHwcGzcNMcsYcQHcQHdERcPacrQaahaahcAicDtcDucDvcDwcDvcFAcFzcDzcDAcwIcDBcHFcHAcDEcDFcDEcDGcDHcAocDIcDJcDKcDLcDKcHGcHKcDOcwWcHNcDPcDQcDRcDScDTcDScDUcDVcAyaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMcDWcDXcDWcDYcDZcEacEbcEccEdcEeczzcEfcCtcEgcEhcEicEjcEkcCtcxrcxraahaahaahaahaahaahaahaahcxrcElcEmcxqcxraahaahcBIcCDcCEcCFcBIcEncEocCGcCGcwdcEpcEqcErcCKcEscEtcEuddpcEwcEwcEwcExcCKahyahycwhczRcwhaahaahaahaahaahcxzcATczecEycAVczecEzczgcEAcFHczeczecxzaahaahaahaahaahaahaahczicECcEDcEEcEDcBackacEGcEHcFXcEJcGfcELcEMcENcEOcEPcEQcERcERcEScETcEUcEUcQeddrcEXcQfcEYcEZcxTcxTcQgcQhcHscJLcJMcQFcHwcGzcNMcQIcQGcQGcQGcQGcQGaahaahcAicFfdEScFhcFicFjcIKcIJcAicyccydcAocIPcILcFocFpcFqdEUcFscAocFtdEVcFvcFwcFxcIQcIRcAscyscAxcKacJRcFBcFCcFDcFEdEWcFGcAyaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMcGjcFIcFJcFKcDZcxgcxgcvScFLcyHcFMcFNcFOcFPcFQcFRcFScFTcCtaahaahaahaahaahaahaahaahaahaahcxrcElcFUcxqcxraahaahcBIcFVcCEcCFcBIcFWcGpcFYcFZcwdcGacGbcGccCKcGdcGecEwcEwcEwcEwcEwcEwcCKahyahycwhczRcwhaahaahaahaahaahcxzcxzcxzcxzcGqczecGgcGhcOIcGBczecGkcxzaahaahaahaahaahaahaahczicECcGlcziczicBacGmcGncGocGScEJcHccGrcrPcqycGscBgcGtcGucGvcGwcBgcBgcBgcGxcXdcERcERddqcrQcrQcrQcrQcrQcKJcKKcKLdhfcHwcGzcNMcQGcQGdkBdkBdlCcQGaahaahcAicAicAicAicAicAicKbcAicAiczpcuAcAocAocFmcAocAocAocAocAocAocAscAscAscAscAscKScAscAscuLcBvcAycAycAycAycAycAycAycAycAyaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMaadaaacHHcGCcGDcGEcGEcGFcGGcGGcGGcGGcGHcGIcGIcGJcGKcGLcCtbkQbkQahyahyahybkQbkQaahaahaahcxrcGMcGNcxrcxraahaahcBIcGOcGPcOJcBIcGRcHRcCGcCGcwdcGTcCIcGUcGVcGWcGWcGWcGXcGXcGXcGXcGYcCKahyahycwhczRcwhaahaahaahaahaahcxzcGZczecABcHaczVcCPcCQcHbcHSczecGkcxzaahaahaahaahaahaahaahczicAbczicziaahcBacHdcHedmEcHgcHfcHccHicHjcHkcHlcHmcHncHocHmcHpcHmaahcBgcBgcHqcGxcGxdnjcOUdBSdBTcMfcrQcrQcMgcMhdhfcHwcGzdBVdDhdDgdDjdDidDkcQGaahaahaahaahaahaahcHycHzcKTcHBcHycHCcHDcHEcKXcKWcIzcHEaahaahaahaahaahaahaahcHIcHJcLgcHLcHIcHMcLhcHOcHPcHQcJtcHOaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMaadaaacJwcGCcDXcHTcDXcHUcHVcxgcxgcHWcCtcHXcGKcHYcHZcIacCtbkQcIbcIccIccIccIcbkQaahaahaahcxrcIdcIecxraahaahaahcBIcCDcIfcOScBIcIhcIicIjcIkcwdcIlcImcIncCKcGecIocGecEwcGecEwcEwcEwcCKahyahycwhczRcwhaahaahaahaahaahcxzcIpczecIqcAVcIrcIscItcAWcIuczecGkcxzaahaahaahaahaahaahaahczicAbcziaahaahcBacIvcIwcHhcFXcIycKDcrOcrPcIAcDicHmcIBcICcIDcIEcHmaahaahcBgcHqcBgcOTdDlcNKcNTcNLcNNctzcNOcNPcNQdDmcNScNTdDncQGdDodDqdDpdDrcQGaahaahcHycHycHycHycHycIIcMpcMocHyczpcuAcHEcMqcIMcINcHEcHEcHEcHEcHEcHIcHIcHIcHIcIOcMrcMscHIcuLcBvcHOcMtcIScITcHOcHOcHOcHOcHOaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadcvMcvMcvMcvMcvMaadaadaadcuScuScuScuScuScuScuScIUcIVcIWcIXcIYcIZddOcJbcCtcCtahycIccJccJdcJccIcahyahyaahcJecJecJfcJgcJeaahaahaahcBIcCDcJhcJicJjcJkcJlcJmcJmcwdcJncJocJpcCKcJqcGecEwcEwcEwcEwcJrcExcCKahyahycwhczRcwhaahaahaahaahaahcxzcJsczecMLcJuczVcJvczXczYcNgczeczecxzaahaahaahaahaahaahaahczicAbcziaahaahcBacJxcJycIxcGScJAcJBcJCcJDcJEcJFcHmcJGcJHcJIcJJcHmaahaahcBgcGycBgcBgcBgcrQdFdcsYcOWcOXcrQcHtdDscOYdDtcsYdDucQGdDvcQGdDwcQGcQGaahaahcHycJOcJPcJQcHycHycMucHycHycJScvAcHEcMvcJTcHEcHEcJUcJVcJWcHEcJXcJYcJZcHIcHIcMwcHIcHIcvHcMxcHOcHOcKccHOcHOcKdcKecKfcHOaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaadaadaaaaadbkQaahaahaahaahaahcuScuScuScuScCtcCtcCtcCtcCtcCtaahahycIccJccJccJccIcahyahyaahcJecKgcKhcKicJecKjcKjcKjcBIcBIcKkcKlcBIcKmcKncKocKpcKqcKrcKscKtcKqcKucGedeccKvcEwcKwcKwcKwcCKahyahycwhczRcwhaahaahaahaahaahcxzcKxczecHScKyczecKzczgcKAcHScKBcKBcxzaahaahaahaahaahaahaahczicAbcziaahcKCcKCcNYcKEcKFcKCcKCcKCcKGcKHcKIcKCcKCcKCcKCcKCcKCcKCcKCaahcBgcHqcBgaahaahcrQcrQcQAcQBcQCcrQcQDcQEdDydDxcsYcsYcQGdDzcQGdDAcQGaahaahaahcHycKOcKPcKQcKRcKQcMzcMycKUcDAcwIcKVcMBcMAcKYcKZcKYcLacLbcHEcLccLdcLecLfcLecMCcMDcLicwWcHNcLjcLkcLlcLmcLncLmcLocLpcHOaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaahyaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahycIccLqcLrcLscIcahyaahaahcJecLtcLudEXcJecLwcLxcLycLzcBIcLAcBIcCGcCGcLBcCGcLCcKqcLDcLEcLFcKqcLGcLGcLGcLGcLGcLGcLGcLGahyahyahycwhczRcwhcziaahaahaahaahcxzcxzcxzcxzcLHcLIcLJcLKcLLcxzcxzcxzcxzaahaahaahaahaahaahcziczicAbczicKCcKCcLMcLNcLOcLPcLQcLRcLScLTcLUcLVcLWcLXcLYcLZcMacMbcMccKCcKCcBgcHqcBgahyaahaahcrQcrQcrQcrQcrQcrQcrQcrQcrQdDCdDBcQGcQGcQGcQGcQGaahaahaahcHycMidEYcMkcMlcMmcMndBWcHycyccydcHEdBYdBXdCadBZdCcdEZdCedCddCgdFadCidChdCkdCjdClcHIcysdCmdCodCncMEcMFcMGcMHdFbcMJcHOaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahybkQcIccMKcNZcMMcIcbkQcMNcMNcMNcMNcMPcMOcKjcMQcMRcMScMTcMUcMVcMWdDDcoucMZcNacMUcNbcNccNdcNecrVcOpcNhcNicNjcQncLGcNlcLGcLGahyahycwhcNmcNncziczicziczicziczicNocNpcxzcNqcxzcNrcxzcNqcxzcEDcEDcziczicziczicziczicziczicUqcXxcUucKCcNucLPcLPcNvcNwcNwcNxcNycNzcNAcNBcNCcNDcNEcNEcNEcNFcLPcNGcKCcZgdDEcBgahyahyaahaahaahaahaahaahaahaahcWudDFdbMdbMdDGcWuaahaahaahaahaahaahcHycHycHycHycHycHycHycHycHyczpcuAcHEcHEcHEcHEcHEcHEcHEcHEcHEcHIcHIcHIcHIcHIcHIcHIcHIcuLczqcHOcHOcHOcHOcHOcHOcHOcHOcHOaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahybkQbkQcOsahycOMbkQbkQcMNcOacObcOccOdcOecOfcOgcOhcOicMTcOjcOkcOlcOlcOmcOncOocPFcOqcNccNdcNecOrcPPcOtcOtcOudDHcOvcOtcOwcLGahyahycwhcOxcOycOzcOAcOBcOCcOCcOCcOCcOAcOAcOAcODcOEcOFcOAcOCcOCcOGcOCcOCcOCcOCcOCcOCcOCcOCdlDdBIdBHcKCcOKcLPcLPcOLcLPcLPcPYcONcOOcOPcOQcONcPYcLPcLPcLPcORcLPcLPcKCdBJcHqcBgahyahyahyaahaahaahaahaahaahaahcWudDIdbMdbMdDJcWuaahaahaahaahaahaahcPdcPecPfcPgcPhcPicPjcPkcPdcPlcPmcPncuscPpcPpcPqcPpcutcPrcPscPpcPtcPpcPucPpcPpcvkcPncPwcPlcPxcPycPzcPAaEycPCcPDcPEcPxaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahycQscPGcPGcPHcPGcPIcPJcPKcMNcPLcPMcPMcPNcPOcRfcPQcPRcPScMTcPTcPUcOocPVcPWcOocPXcRucPZcNccQacQbcQccxUdDKdDMdDLdDNcQicQjcQkcLGahyahycwhcQlczQczicziczicziczicziczicziczicEDcEDcEEcNscEDczicziczicziczicziczicziczicziczicQmcEDdBKcKCcQocQocLPcQpcQqcQrcRJcQtcOOcQucQvcQwcRJcQxcQocLPcQycQqcQocKCdCRcHqcBgahyahyahyahyaahaahaahaahaahaahcWucWudDPdDOcWucWuaahaahaahaahaahaahcPdcQJcQKcQKcQLcQKcQKcQMcQNcQOcQPcQQcQRcQRcQRcQScQRcQTcQUcQVcQWcQXcQRcQYcQRcQRcQRcQQcQZcRacRbcRccRccRccRdcRccRccRecPxaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadbLjbLjaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahycSAcRgcRhcRicRjcRkcRlcRmcRncRocRpcRqcRrcRscRtcSLcRvcRwcRxcMTcRycPUcRzcRAcRBcRCcOlcRDcREcRFcRGcRHcRIcTadDQcRKcRLcRMcRNcROcRPcLGahyahycwhcRQcwhcziahyahyahyahyahyahyahycziczicziczicziczicziaahaahaahaahaahaahaahaahaahcziczicRRdCScKCcRTcRWcRVcLPcRWcRXcRJcRYcOOcOPcOQcRZcRJcRTcRWcLPcRVcRWcSacKCdCTcSccBgahyahyahyahyahyaahaahaahaahaahahydDRdbMdDScWuaahaahaahaahaahaahaahcPdcSdcSecSfcSgcShcSicSjcSjcSkcSlcSmcSlcSlcSlcSncSlcSlcSlcSocSpcSqcSqcSrcSqcSqcSqcSscStcSkcSucSucSvcSwcSxcSycSycSzcPxaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahbLjbLjaahaahaahaahaahaahaahaahaahbkQbkQahyahyahybkQbkQcTZcSBcSCcPMcSDcPMcSEcSFcSGcSHcPMcPMcSIcSJcSKcUlcSMcSNcSOcMTcSPcSQcSRcSScSTcSUcSVcSWcSXcSYcSZcNecRIcUscTbcOtcTccTdcTecTfcTgcLGahyahycwhcRQcwhahyahyahyahyahyahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahaahaahaahczicThcRScKCcTicTjcTkcLPcTlcTjcRJcTmcTncTocOQcTmcRJcTjcTjcTpcLPcTlcTqcKCcSbcTrcBgahyahyahyahyahyahyahyahyahyahyahydDTdbMdDUcWuaahaahaahaahaahaahaahcPdcPdcTscTtcTucTvcTwcTxcPdcPncPncPncTycTzcTzcTAcTBcTCcTDcTEcTFcTGdCUcTHcTzcTzcTIcPncPncPncPxcTJcTKcTLcTMcTNcTOcPxcPxaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahbkQcIccIccIccIccIcbkQcTZcSBcTPcTQcTRcTScTTcTUcTVcTWcPMcPMcTXcSIcTYcKjcUvcUacUvcMTcUbcUccUdcUecUecUfcPXcPFcUgcUhcUicUjcRIcUkcUycUmcUncUocUkcUkcUkcLGahyahycwhcUpcwhahyahyahyahyahyahyahyahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahahyczidCVcRScKCcUrcLPcORcLPcLPcLPcUHcONcOOcOPcOQcONcUHcLPcLPcOLcLPcLPcUtcKCcSbdCWcBgahyahyahyahyahyahyahyahyahyahyahycWudDWdDVcWuaahaahaahaahaahaahaahaahcPdcUIcUwcUwcUwcUxcPdcPdaahaahcPncPncUYcUzcUzcUAcPncUBcUCcUDcPncPncPncPncPncPncPnaahaahcPxcPxcPxcPxcPxcPxcPxcPxaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahahycIccUEcUEcUFcUGcVucVgcUJcUKcULcUMcPMcUMcUNcUOcUPcUQcURcUScUTcUUcUVcRqcUWcUXcVQcUZcOocOocOocOocOocVacRucVbcUhcVccNecVdcVecVfcWicVhcVicVjcVkcVlcVmahyahycwhcRQcwhahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyaahaahaahahyahyahyahyahyahyczicVncEDcKCcLPcLPcVocNEcNEcNEcNDcNCcVpcVqcVrcNycNxcNwcNwcVscLPcLPcLPcKCcGxcVtcBgahyahyahyahyahyahyahyahyahyahyahydDRdbMdbScWuaahaahaahaahaahaahaahaahahyahyahyahyahyahyahyaahaahaahaahahyahyahyahyahycWvcVvcVwcVxcPnaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahahycIccVycVzcVAcNZahycTZcVBcVCcVDcVEcVFcUMcVGcVHcVIcVJcVKcVKcVLcVMcVNcPMcVOcVPcWBcVRcVScVScVTcOocVUcVVcMTcVWcVXcVYcNecVZcWacWbcWicWccWdcWecWfcWgcVmcwhcwhcwhcRQcwhcWhcWhcWOcWjcWkcWhcWhcWOcWjcWkcWhcWhahyahyahyahyahyahyahyahyahyahyahyahycziczicWlczicKCcWmcWncWocWpcvtcLPcLRcONcOOcOOcOQcONcLRcLPcvtcWpcWqcWrcWscKCcBgcWtcBgcBgahyahyahyahyahyahyahyahyahyahydDTdbMdbScWuaahcWucWucWucWucWuaahaahahyahyahyahyahyaahaahaahaahaahaahaahahyahyahyahycXncWwcWxcWycWuaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahbkQcIccUEcUEcWzcWAcVucXucWCcWDcWEcWFcWGcWHcWIcWJcWJcWJcWFcWFcWFcWKcWLcPMcWMcWNcMTcMTcXycWPcwAcvvcXycWPcWScWTcWUcVYcNecWVcWWcWXcWicWYcWZcXacXbcXccVmdDXcXecXecXfczQcWhcXgcXhcXicXjcXkcXlcXhcXmcXhcXhcWhcWhcXHcXocXocXocXocXocXpcXqcXHcXpcXqcXqcXrcXscXtcKCcKCcNYcKEcKFcKCcKCcKCcYfcXvcXvcKIcYfcKCcKCcKCcNYcKEcKFcKCcKCcXtcXwdCXcXqcXqcZncXzcXzcXzcXAcWucWucWudDYcWucWwdDZcWucWucWucXBcXCcXCcWucWucWucWucZncXzcXzcXAcWucWucWucWucWucWucWucZncXzcXzcXAcWucXDcXEcXFcWucXGcXGcXGcXGcXGaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahbkQcIccIccIccIccIcbkQcZocXIcXJcVDcXKcXLcUMcUNcXMcXMcXNcUOcVEcXOcXPcWFcXQcXRcXScXTcXUcXVcXWcXXcXYcXZcYacYbcYacYccYdcNecYecWacNcdaTcYgcYhcYicYjcYkcVmcRQczQcYlczQczQcYmcYncYocYpcYqcYncYrcYpcYscYtcYucYvcYwcYxcYycYxcYxcYzcYxcYAcYBcYxcYxcYCcYDcYEcYFcYGcYHcYCcYxcYIcYxcYycYJcYKcYxcYxcYxcYLcYxcYMcYNcYycYxcYxcYxcYCcYxcYGcYOcYPcYPcYQcYRcYScYRcYTcYRcYUcYVdCYcYRcYScYWcYRcYRcYXcYScYYcYRcYZdCYcYXcYRcZacYRcYRcZbcYRcYRcZccYUdCYcYRcYRcZdcYRcYRcYScYRcYXcZecZfcXFdCZcXGcZhcZicZjcXGaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahbkQcIccZkcZkcZlcZmdbDdbdcZpcZqcVMcZrcPMcUMcUNcZscZtcZucVGcVHcZvcZqcZwcZxcZycZqcZzcZAcZBcZCcZDcZEcZFcZGcZHcZGcZIcZJcZKcZLdmbcZNcZOcZPcZQcZRcZScZTcVmcRQcwhcwhcZUcwhcZVcZWcZXcWhcZVcZWcZYcWhcZVcZZdaadabdacdaddaddaddaedaddaddafdaddaddaddagdaedahdaidajdakdagdaddajdaddaddaddaedaddaddaddaddaddafdaddaddaddaddaddagdakdajdaldaddaedagdamdamdamdandamdamdaodamdamdamdapdamdamdaqdaodardasdatdaudaqdamdandamdamdaodamdamdamdamdamdamdamdavdamdamdaudamdaqdawdaxdaydazdaAdaBdaCdaDcXGaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahahycIcdaEdaFdaGcNZahycTZdaHdaIdaJdaKcTSdaLcUNdaMdaNdaOcUNcPMdaPcPMdaQcPMcPMdaRdaSdaSdbIdaUdaVdaWdbIdaUdaSdaXdaYdaZdbadbbdbcdbNdbedbfdbgdbNdbedbcdbccRQcwhdbhdbidbjcZVdbkdbldbmcWhdbndbldbocZVcWhdbpcXhdbqdbrdbrdbrdbsdbtdbrdbrdbudbrdbrdbvdbwdbxdbydbzdbAdbBdbCdcedbCdbCdbEdbFdbCdbCdbGdbCdbCdbCdbHdbCdbCdcfdbCdbBdbJdbzdbydbKdbLdbvdbMdbMdcrdbMdbMdbMdbOdbMdbMdbMdbPdbMdbMcWwdbQdbRdbScXEdbTcWwdbMdcrdbMdbMdbUdbMdbVdbMdbMdbMdbVdbMdbMdbMdbMdbWdbMcWwdbWdbXcXFdbYcXGdbZdcadcbcXGaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahbkQcIccZkcZkdccdcddcDdczdcgdchdcidaPcPMcUMdcjdckdcldcmdcndcodcpcTQdcpdcmdcodcqdcJdcsdctdcudcvdcwdcxdcydcxddbdcAdcBdcCddndmkdcFdcGdcHdcIddtdcKczfdbcdcMcwhdcNdbidcOcZVdcPdcQdcRcWhdcSdcTdcUcZVcWhcWhcWhcWhcXHcXocXocXocXocXocXpdcVcXHcXpdcWdcXdpPdqIdpQdcXdcWddDdcVcXHcXocXocXocXocXpdcVcXHcXocXocXocXocXpdcVddDddcddddskdtrdstddddddcZncXAddhcZncXzcXAddhcZncXzcXAddhcZncXAddiddjdBAdBCdBBddjddiddPddhcZncXzcXzcXzcXzcXAddhcZncXzcXzcXzcXzcXAddhddPddodBEdBDdBFddscXGcXGcXGcXGcXGaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahbkQcIccIccIccIccIcbkQddWdducXJddvddwcTSddxcPMcUOcVFcVEcPMcPMddyddzcWLddAddBddCdeedcsdcudcudcvdcwddEddEddFddGddHddIdcCddJddKddKddKddLddMddNddNdBGdbccRQcwhdekddQddRcZVddSddTddScWhddUddVddUcZVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadeqddXddYddZdeadebdeqaaaaaaaaaaaaaaadeddeddeddeddeddeddedaaaaaaaaaaaaaaadeWdefdegdehdeidejdeWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfbdeldemdendeodepdfbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfcderdesdetdeuddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahbkQcIcdevdevdewcZmdbDdbddexcZqdeydezcVNcUMcPMdcjdclcVHcSHcPMcWLcWLcVIcVJdeAdeBdeCdeDdcudeEdeFdeGdeHdeIdeJdeKdeLdeMdeNddJddKddKdeOdePdeQdeRddKdeSdbccRQcwhahyahyahycZVddSdeTddScWhddUdeUddUcZVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVaaaaaadfhdeXdeYdeZdeadfadfmaaaaaaaaaaaadeddeddeddeddeddeddeddeddedaaaaaaaaaaaadfBdfddegdfedffdfgdfBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfIdfidfjdfkdeodfldfIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfLderdesdfndfoddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahahycIcdfpdfqdfrcNZahycTZdfscPMcUMcWLcVIdeydftcZqdfucZqdftcZqdfvcWLcPMcPMdfwdfxdfydfzdcudcudfAdfQdfCdfDdfEddbdfFdfGdfHddndfXdfJdfKdfYdfMdfYdfNdbcdbccRQcwhahyahyahyahyddSdfOddScZVddUdfPddUdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdgwdfRdfSdfTdfUdfVdfWdhgdcWaaaaaaaaadeddeddeddeddeddeddeddeddeddeddedaaaaaaaaaddcdhudfZdgadgbdgcddcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaddidgddemdgedgfdggddiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaddodghdgidgjdgkddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahahycIcdevdevdgldcddcDdczdgmcTSdgncWLcPMdgocTTcTSdgpcTScTScTSdgpdgpdgqcPMdgrdgsdaSdgtdcudgudgvdhzdgxdfDdgydgzdgAddIdgBdgCdgCdgCdgCdgCdgCdgCdgCdbcdgDdgEcwhcwhahyahyahydgFdgGdgHaaadgIdgJdgKdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdgLdgMdgNdgOdgPdgQdgRdfadeqaaaaaaaaadeddeddeddeddeddeddeddeddeddeddedaaaaaaaaadeWdfddgSdgTdeidfgdeWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfbdfidemdgUdgVdfldfbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfcderdgWdgjdgXddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahbkQcIccIccIccIccIcbkQddWdgYcXJcPMcWLcPMcPMdgZdhacWLcPMcPMdhacWLcWLdhbdhadhcdhddaSdhedcudcudEadhEdfCdhhdhidgzdhjdfGdhkdhldhmdhndhodhpdhqdhrdhsczQczQdhtczQcwhahyahyaaaaaaaaaaaaaaaaaaaaaaaadeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdhIdfRdhvdfTdhwdhxdgRdhydfhaaaaaaaaadeddeddeddeddeddeddeddeddeddeddedaaaaaaaaadhMdhAdhBdgadhCdhDdhMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadifdhFdemdgedhGdhHdifaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadiydhJdesdhKdhLddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahbkQbkQahyahyahybkQbkQdiLdhNdhOdhPcVIdhQdhRdhSdhTdhUdhVdhWdhXdhYdhZdiadibdicdiddaSdiedcudcudEadiYdfCdfDdigdgzdfFdihdgBdiidijdikdildimdindiodipcXecXediqdircwhahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVaaaaaadfmdeXddYddZdgRdfadfmaaaaaaaaadeddeddeddeddeddeddeddeddeddeddedaaaaaaaaadfBdfddgSdehdeidfgdfBaaaaaaaaadisditdiudiudiudivdiwaaaaaaaaadfIdfidemdendhGdfldfIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfLderdesdixdgXddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahahyahyahyahyahydjtdizdiAdiBdiCdiBdiDdiEdiCdiBdiFdiEdiCdiCdiDdiGcMNcMNdaSdiHdiIdiJdiKdjudiMdiNdiOdgzdfFdihdgBdiidijdiPdiQdiRdijdhrdiSdiTdiUdiVdiWcwhahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadiXdcWdjvdiZdjadcXdcXdcXdcXdcXdcWdjwddYdjcdjddjedcWaaaaaaaaadeddeddeddeddeddeddeddeddeddeddedaaaaaaaaaddcdjfdjgdjhdeidjiddcaaaaaaaaadjjdjkdjkdjkdjkdjkdjjaaaaaaaaaddidjldemdjmdjndjoddiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaddodjpdjqdjrdjsddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaaaaaaaaaahydkCdjxdbDdbDdkJdjxdkLdbDdkJdjxdkLdbDdkJdkUcOsbkQbkQahydaSdgzdgzdgzdgzdgzdjydgzdgzdgzdjzdjAdjBdjCdjCdjCdjCdjCdjCdjCdjCdjCcxxdhtcwhcwhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadeqdeXddYddZdgRdfadeqaaaaaaaaadeddeddeddeddeddeddeddeddeddeddedaaaaaaaaadeWdfddgSdehdeidfgdeWaaaaaaaaadjjdjDdjEdjkdjEdjDdjjaaaaaaaaadfbdfidemdendhGdfldfbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfcderdesdixdgXddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAacAacAacAacAacAacAacAacAacAacAacAacAacAacAacAacAacAacAaaadjFaaabkQcIcdjGcNZcMKcIcdjGcNZcMKcIcdjGcNZcMKcIcbkQaahdjHdjHdjIdjJdjKdjLdjMdjNdjOdjPdjQdjRdjSdjCdjTdjUdjVdjWdjXdjYdjZdjCdjCdhtcwhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadgwdfRdfSdkadfUddZdgRdebdfhaaaaaadeddeddeddeddeddeddeddeddeddeddeddeddedaaaaaadhMdejdgSdehdeidgSdhMaaaaaadisdkbdkcdkcdkddkcdkcdkbdiwaaaaaadifdhGdemdendhGdepdifaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadiyderdesdixdgXddsddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaadaadaadaaaaadaadaadaaaaadaadaadaaaaadaadaadaaaacAaaddkeaadbkQcIcdkfdkgdkhcIcdkidkjdkkcIcdkldkmdkncIcaahaahdjHdkodkpdkqdkrdksdktdkqdkudjPdkvdkwdkxdjCdkydkydkzdjXdjXdkAdkAdEbdjCdhtcwhdkYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadkDdkEdkFdkGdkHddZdkIdlEdfSdfRdkKdeddeddeddeddeddeddeddeddeddeddeddeddeddlUdkMdkNdkOdkPdehdeidfgdhMaaaaaadjjdjkdkQdjkdjkdjkdkRdkSdjjaaaaaadifdfidemdendkTdlYdkVdkWdkXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmGdkZdladlbdlcdixdgXdldddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaadledlfdlgaaadledlfdlgaaadledlfdlgaaadledlfdlgaaaacAaadaadaaaaaacIcdlhdlidlhcIccUEdljcUEcIcdlkdlldlkcIcaahaahdjHdlmdlndkqdlodlpdlqdlrdlsdltdludlvdlwdlxdlydlzdlAdlzdlzdlBdlzdEcdjCdhtdDadoidlFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadhIdfRdhvdkadlGdlHdlIdlJdlKdlLdlMdeddeddeddeddeddeddeddeddeddeddeddeddeddlNdlOdlPdlQdlRdlSdlTdokdkNdkMdlVdjjdlWdjkdjkdjkdjkdjkdlXdjjdoEdkWdkVdkXdlZdmadDbdmcdmddmedmfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmgdmhdmidmjdDcdixdgXdmlddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaddledmmdlgaaddledmmdlgaaddledmmdlgaaddledmmdlgaadacOaaaaadaadaaacIcdlhdmndlhcIccUEdmocUEcIcdlkdmpdlkcIcaahaahdjHdlmdmqdkqdlpdlpdmrdmsdmtdmudmvdmwdmxdmydmzdmAdmBdmCdmCdmDdlzdEddjCdhtczQdmFdppaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfmdeXddYddZdmHdmIdmJdmKdmLdeddeddeddeddeddeddeddeddeddeddeddeddeddmMdmNdmOdmPdmQdehdmRdmSdmTdgSdmSdkddjkdmUdmUdjkdmUdmUdjkdkddmVdhGdmWdmVdmXdendmYdmZdnadnbdncaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadnddnednfdngdnhdixdgXdniddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbdPbhkbhlbhkbdPbhmbfubhnbhobhobhobhoaahaahaahahyahyahyahyahyahyahyahyaZycrkbajbhqbhrbhsbefbhtbgvbgwbhubefaahaahaahaahbdlbhvbeTbhwbhxbhwbeTbhybdlaahaahaahaZdaZGaZHaZdahybdqbaUdCFbbGbbGbbGbbGdCGbgDbhAbhAbhAbgFdCFbbGbbGbbGbhBbbGbhCbhDbhEbhFbhGbetaUwbhHaToaahbeZbhIbhJbgNbhKbhLbhLbhLbhLbhMbhNbgVbhObhPbgYbhQbhRbhSbhTbgYbhUbhVbhVbhWbgZbhXbhYbhYbhZbhZbhYbiabhfbibbicbidbiebhfbdOaZWaZmaahaahaahaahaahbgmbifbigbihbiibijbikbifbgmaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyaahaahaahaahaahaahaahaahaahaahaahaahbilbilbilbilbilbilbilbilbilbimbinbiobipbeEbfubinbhobiqbirbhobhobhoaahaahahyahyahyahyahyahyahybambisaZzbitbiubdebivbiwbixbgwbhubefaahaahaahaahbdlbiybeTbizbiAbiBbeTbiCbdlaahaahaahaZdbiDaZHaZdahybejbdrdCFbbGbbGbbGbbGdCGbiFbhAbdtbhAbiHdCFbbGbbGbbGbiIbiJbiJbiKbiLbiMbiNbiObiPbiQaToaahbeZbfTbiRbiSbeZbiTbiUblObiWbxjbfhbzjbhObiYbgYbiZbjabjbbjcbgYbSjbjebjfbjgbgZbjhbjibjjbjkbpybjmbjnbhfbibbjobjpbjqbhfbjrbjsaZmaahaahaahaahaahbgmbjtbjubjvbjwbjvbjubjxbgmaahaahbgmbgmbgmbgmbgmaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahbilbjybjzbjAbjBbjCbjDbjEbilbjFbjGbjHbjIbjJbjKbjLbhobjMbjNbjObjPbhoaahaahaahahyahyahyahyahyahybaibjQbjRbjSbhrbecbjTbjUbjVbgwbhubefaahaahaahaahbjWbjWbjWbjWbjXbjWbjWbjWbjWaahaahaahaZdbjYaZHaZdahybcybaUdCFbbGbbGbbGbbGdCGbjZbhAbhAbhAbkadCFbbGbbGbbGbkbbbGbbGbkcaZibkdaYGbetaUwbkeaToaahbeZbkfbkgblRbeZbfhbfhbfhbfhbkibfhbALbkkbklbgYbkmbknbkobkpbgYbkqbkrbksbktbgZbkubkvbkwbkxbkybkzbkAbkBbkCbkDbkEbkFbhfbdObkGaZmaahaahbgmbgmbgmbgmbkHbkIbkHbkJbkHbkKbkHbgmbgmbgmbgmbkLbkMbkNbgmbgmaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkObkPbkRbkQbkSbkPbkPahyaahaahaahaahaahaahaahaahaahbilbkTbkUbkVbkWbkXbkYbkZblablbblcbldbleblfblgblhbhoblibljblkblkbhobllbllbllbllahyahyahyahyahybbobboblmblnblobeebefblpbjVbgwblqbefaahaahaahaahbjWblrblsbltblublvblwblxbjWaahaahaahaZdaZdaZHaZdahyaZIblydCwbeqbbGblzbbGbbGdCrbjZblAbkabfMbbGbbGblzbbGblBdCHdCIaZIaZfaToaZjblDaZlaToaToaahbeZblEblFblGbeZblHblIblJdGQblLblMblNbhOblWbgYbgYblPblQbpabgYblSblTblUblVbgZbrKbhZbhYblXbhYbhYblYbhfblZbmabhfbmbbhfbmcaZWaZmaahbgmbgmbifbmdbkHbmebmfbmgbmhbmibmfbmgbmjbkJbmkbmlbmibmmbmgbmnbgmbgmaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkPbmobmpbmqbmpbmobkRahyahyaahbkPbkPbkPbkPaahaahaahbilbmrbmsbjAbmtbmubmvbmwbilbmxbfubmybdTbrebdTbrebhoblibmAbmBbmCblkbmDbmEbmFbllbmGbmHbmIbllahyahyaZyaZzbcnbhrbeebmJbmKbmLbmMbefbefaahaahaahaahbjWbmNbmObmPbmQbmPbmRbmSbjWaahaahaahaahaZdaZHaZdahyaZIbmTdCJbbJbbGbfPbfQbmUbbGbdCbdCbdCbbGbmUbeVbfNbbGbbGdCKbmVaZIahyaZPaYGaYHaUwaToaahaahbeZbmWbmXbmYbmZbnabnbbncbncbndbnebnfbngbnhbnibgYbnjbnkbnlbgYbnmbnnbnobnpbgZbnqbnrbhYbnsbhYbntbnubhfbnvbnwbhfbnxbhfbnyaZWaZmaahbgmbnzbnAbnBbnCbnDbnEbnDbnFbnDbnGbihbnHbkJbnIbnJbnKbnLbihbnMaFMbgmaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabnObnPbnQbnRbnRbnPbnSbnTbkPbkPbkPbnUbnVbkPbkPbkPbkPbkPbkPbkPbkPbkPbkPbkPbkPbkPbftbfubnWbdTbnXbnYbnZblkblkaybbobbocblkbodboeboebofbogbohboibllahyahybamaZzbcnbojbeebmKbmKbokbolbefaahaahaahaahbjWbjWbombonboobopboqbonborbjWbjWaahaahaahaZdaZHaZdahybdqbiHdCBbfRbbGbbGbfPbfQbbGbbGbbGbbGbbGbembeWbbGbbGbbGdCxbdxbdqahybaNbbObotbouaToaahaahbeZbgLbovbgNbowboxboybozboAboBboCbgVbhOboDboEbgYboFboGboFbgYboHboIbTzboKbgZbgkboLboMbdAboLboMboOboOboOboOboOboOboOboOaZWaZmaahbgmboPboQboRbkHboSbmfanuboUboVboWbmmbmgbkHbmibmmboXboYboSboZbuPbgmaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkQbmqbpbbpcbpcbmqbpdbpebpfbpgbphbpibpjbpkbplbpmbpnbpobppbpqbprbprbpsbprbptbpubpvbpwbpxbMKbpzbpzbpzbpAblkblkbpBblkblkbpCbpDbpEbpEbpEbpFbpGbllahyahybamaZzbcnbfBbeebefbefbefbefbefaahaahaahaahbjWbpHbpIbpJbpKbpLbpKbpMbpNbpObjWaahaahaahaZdaZHaZdahybejbiHdCDdCLbbGbelbbGbfPbenbbGbbGbbGbeobeWbbGbelbbGdCHdCMbdxbejahybbNaYGaYHaUwbpPahyaahbeZbpQbpRbgNbpSbpTbpUbpVbpVbpWbpXbpYbpZbqabqabqbbqcbqdbqcbqebqcbqfbqgbqhbqibqjbqkbqhbqlbqmbqnboObqoaCqbqqbqrbqsbqtboOaZWaZmaahbgmbqubqvbqwbkJbqxbqybqzbgmbqAbqBbqCbqCbqDbsnbqCbqEbqFbqGboZaycbgmaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaacAacOacAacAacAacAacAacAacAacOacAacAacAacAaaaaaaacAacAacAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqIaadahybkQbnPbqJbpcbpcbqKbqLbqMbqNbqObqPbqQbqRbqSbqTbqUbqVbqTbqWbqXbqTbqYbqZbrabrbbrcbrdbgqbinbMNbrfbrgbpzbrhbrebribrjbrkbrlbrmbrnbrobrpbrqbrrbrsbllahyahybambrtbrubrvaZyahyahyahyahyahyahyaahaahaahbjWbjWbrwbrxbpKbpKbpKbrybrzbjWbjWaahaahaahaZdaZHaZdahybcyaTsbrBdCDdCLbbGbbGbbGbbGbbGbbGbbGbbGbbGbbGbbGdCHdCCbrCbdBbcyahyaTobrEaYHbrFbrGahyahybeZbfTblFbrHbeZbrIbrJbvUbrLbEEblMbrNbrObrPbrQbrRbrSbrTbrSbrSbrSbrUbrVbrWbrXbrYbrZbrYbsabrYbrYbsbbscaCrbsebsfbsgbsgboOaZWaZmaahbgmboPbshboRbkHbmibsibsjbskbslbmmbmmbsmbkHbuYbmmbsobspbmiboZbsqbgmaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaacAaaaaadaaaaaaaaaaaaaadaadaaaaadaadaadaaaaadaadaadaaaacAaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsrahyahybssbmqbstbpcbpcbmqbsubsvbswbsxbsybszbsAbkPbkPbkPbkPbkPbkPbkPbkPbkPbkPbkPbkPbkPbsBbfubsCbdTbekbsEbsFbsFbsGbsHbsIbsJbrlbsKbrnbsLbsMbsNbrrbsObsPahyahybamaZzbcnbhrbamahyahyahyahyahyahyaahaahaahaahbjWbsQbrxbsRbsSbsTbsUbsQbjWaahaahaahaahaZdaZHaZdahyaZIbdqbbEbsVdCDdCLbbIbbJbbKbbGbbGbbGbbIbbJbbKdCHdCCbrCbbEbdqaZIahyaZPaYGbetaUwbrGahyahybeZbeZbsWbeZbeZblMblMblMbsXbsXbsXbsXbsYbsZbsXbsXbtabtbbtcbtdbtdbtebtfbtbbtgbthbtibtjbtkawrbtmboObtnaCsaCuaCtaCuaDwboOaZWaZmaahbgmbtsbttbnBbtubnDbtvbnDbtwbmmbtxbmmbtybkJbyTbijbtzbtAbtBbtCbtDbgmaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaacAaaabtEbtFbtGaaabtEbtFbtGaaabtEbtFbtGaaabtEbtFbtGaaaacAaadaadaaaaaaaaaaaaaaaaaabtHbtIbtJbtKaaaaaabtLbtMbtNbtLbtLbtObnPbnQbtPbtQbnPbtRbnTbkPbkPbkPbtSbnTbkPaahaahaahaahaahaahaahaahaahaahaahbdTbtTbtUbtVbMKbtWbtXbtYbpzbtZbeEbuabubbucbudbuebufbufbufbugbuhbuiahyahybamaZzbcnbhrbamahyahyahyahyahyaahaahaahaahaahbjWbujbukbulbumbukbukbujbjWaahaahaahaahaZdaZHaZdahyahybbMbaMbbEbsVdCDdCNdCPdCOdCzdCzdCzdCNdCPdCOdCCbrCbbEbaybbDahyahybaNbdubdvbunbrGahyahybuoberbuqburbusbutbuubuvbsXbuwbuxbuybuzayjaykbuCbuDbuEbuFbuGbuHbuIbtfbHXbuKbuLbuMbuNbuObuLbuNboObwxbuQbuRbuSbuTbuUboOaZWaZmaahbgmbgmbifbuVbkHboSbuWbmmbmfbmmbmmbtCbuXbkJbCQbwubuZbvabsmbvbbgmbgmaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaacAaadbtEbvcbtGaadbtEbvcbtGaadbtEbvcbtGaadbtEbvcbtGaadacOaaaaadaadaaaaaaaaaaaaaaabtHbtHbvdbvebtHbvfbvgbvhawxbvjbvkbkPbmobmpbmqbmpbmobkRahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahaahbdTbvlbvmbvnbMNbvobvpbvqbvrbMKbvsbvtbvubvvbvwbvxbvybvzbvAbvBbvCbllahyahybaiaZzbMObhrbaiahyahyahyaahaahaahaahaahaahaahbjWbjWbjWbvDbjWbjWbjWbjWbjWaahaahaahaahaZdaZHaZdahyahyahybbMaZLbaJbgEbgEbvGbvHbiEbhzbiEbvKbvLbgEbgEbiGaZJbbDahyahyahybbNaYGbRLaUwbvNahyahybvObosbuqbvQboNbvSbvTbxbbsXanvbvWbvXbvYbvYbvZbwabwbbwcbwdbwebwebwfbwgbQwbwibwjbwkbwlbwmbwnbwoboObwpbwqbwrbtqbwsbwtboOaZWaZmaahaahbgmbgmbgmbgmbAQbwvbwwbmfbyUbwybwzbkJbkJbGRbkJbwAbwBbwCbgmbgmaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaaaadaaaaaaaadaadaaaaaaaaaaaabtHbwDbwEbwFbtHbwGbwHbwIbwJbwKbwLbkObkPbkRbkQbkSbkPbkPaahaahahyahyahyahyahyahyaahaahbwMbwMbwMbwMbwMbwMbwMbwMbwMbwNbwObwPbdTbrAbwRbwSbwTbMNbwUbuabsCbucbwVbwWbwXbllbwYbwZbwYbllahybeebeeblmblnblobboahyahyaahaahaahaahaahaahaahaahaahaahaahbxaaahaahaahaahaahaahaahaahaZdaZdaZHaZdaZdahyahyahyaZIaZJaZKaZLaZIaZIaZJaZKaZLaZIaZIaZJaZKaZLaZIahyahyahyahyaToaZjblDaZlaToaToahybxcbxdbxebvSbxfbxgbxhbxibsXanAbxkbxlbxmbvYbvYbxnbqhbxpbxqbthbthbxrbtfbxsbxtbxubxvbxwbxxbADbvRboOboOboOboObxAboOboOboOaZWaZmaahaahaahaahaahbgmbxBbxCbkJbxDbkJbxBbxEbkJbxFbxGbkJbxHbxIbkJbgmaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaaaadaaaaaaaaaaadaadaaaaaaaaabtHbxJbxKbxLbtHdDfbxMbxNbxObxPbxQbtLaahaahaahahyahyaahaahahyahyahyahyaahaahaahaahbwMbwMbxRbxSbxTbxUbxVbxWbxXbwMbxYbxZbyabdTbybbycbydbyebdTbyfbuabygbyhbyhbyhbyhbyhbyibyjbykbyhbfzbeebylaZzbcnbymbboaZdaahaahaahaahaahaahaahaahaahaahaahaahbxaaahaahaahaahaahaahaahaZdaZdaZGaZHaZGaZdaZdahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyaZdaTobbObynbiPbyoaTobypbyqbyrbysbytbyubyvbywbyxbyybyzbyAbyBbyCbvYbxobsXbyEbtbbyFbyGbyHbyIbyJbyKbyLbyMbyNbxybyPbyQbyRbySbIxbCLbyVbyWbyXbyYbySaZWaZmaahaahaahaahaahbgmbyZbzabzbbzcbzdbzebzfbzgbzhbzibkJdkQbzkbzlbgmaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAacAacAaadaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaaaadaaaaaaaaaaaaaadbzmbznbznbznbznbzobtHbtHbtLbzpbzqbzrbzsawybtLaahaahaahaahahyahyahyahyahyahyaahaahaahaahaahbwMbzubzvbzwbzxbzybzzbzAbzBbzCbzDbzEbzFbzGbzHbzIbzJbzKbzLbzMbzNbzObzPbzQbzRbzSbzPbzTbzUbzVbzWbzXbzYbecbajbhqbhrbzZaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaahaahaahbxaaahaahaZdaZdaZdaZdaZdaZdbAabAbbAcbAdaZGaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdbAebAfbAgbAhaUvbAibAjbAkbvSbAlbvSbAmbxgbAnbAobuCbApbAqbArbAsbAtbAubuCbAvbAwbqmbAxbAxbAybtfbAzbwibAAbABbACbADbAEbAFbySbAGbAHbAIbyWbyWbAJbySbAKaZmaahaahaahaahaahbgmbgmdkRbAMbANbAObAPcBYbARbASbATbAUbAVbAWbAXbgmaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaadaaaaaaaadaivaadaaaaadaivaadaaaaadaivaadaaaaadaivaadaaaaadaaaaaaaaabAZbBabBbbBcbBdbBebBfbBgbBhbBibtLbBjbBkbBlbBmbztbtLaahaahaahaahaahahyahyahyahyaahaahaahaahaahaahbwMbBnbzwbBobBpbBqbBrbBsbBrbBtbBubBvbBwbBxbjJbBybjJbBzbjJbjJbBAbBBbBCbBDbBEbBFbBGbBHbBIbBJbBKbBLbBMbBNbBObBPbBQbBRbBSbBTbBUbBUbBUbBUbBVbBUbBWaZdaZdaZdaZdbBXaZdaZdaZdbBYbBZbBZbBZbBZbBZbCabCbbCcbCdbCdbCdbCdbCdbCdbCdbCebCdbCdbCdbCfbCgbCgbCgbCgbCgbCgbCgbCgbChbCgbCibCjbCkbClbCmbbRbCnbCobCpbCqbCrbvQbCsbvSbCtbCubwabCvbCwbCxbCzbyDbCybwabCBbCCbCDbCEbCEbCFbCGbwhbxtbCHbCIbCJbCKbIcbySbySbCMbCNbCObCPbyWbAJbySbAKaZmaahaahaahaahaahaahbgmbgmbgmbJJbCRbgmbgmbgmbgmbgmbgmbCSbCTbgmbgmaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadbCUbCVbCVbCVbAYbCVbCVbCVbAYbCVbCVbCVbAYbCVbCVbCVbAYbCVbCVbCVbCVbCVbCZbDabDbbDcbDdbDebDfbDgbDhbDibDjbtLbtLbDkbtLbtLbDlbtLaahaahaahaahaahaahaahahyahyaahaahaahaahaahaahbwMbDmbDnbDobDpbDqbDrbDsbDtbwMbDubDvbDwbDxbDybDzbDAbDBbDCbDDbDEbDFbyhbDGbDHbDIbDJbDKbDLbzVbzWbzXbzYbecbecbDMbDNbDOaZdbDPbDQbDRbDSbDTbDUbDVbDWbDXbDYbDZbEabEbbBUbBUbBUbEcaZdaZdaZdaZdaZGbEdbEebEfbEgbEgbEgbEgbEgbEgbEgbEhbEgbEgbEgbEibEjbEjbEjbEjbEjbEjbEjbEkbiDbjYaZdbElaYGbetbEmaVlbEnbEobEpbEqbErbEsbEtbEubEvbEwbsXbsYbsZbExbsYbEybsZbsXbEzbtbbyFbyGbyHbEAbtfbEBbuKbECbEDbuKbySbySbySdBabEFbEGbEHbEIbyWbAJbySbAKaZmaahaahaahaahaahaahaahbgmbEJbEKbELbgmaahaahaahaahbgmbgmbgmbgmaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaadaaaaaaaadaivaadaaaaadaivaadaaaaadaivaadaaaaadaivaadaaaaadaaaaaaaaabAZbBabENbEObEPbEQbznbERbESbETbEUbEUbEVbEWbtHbEXbtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbwMbEYbEZbFabFbbFcbFdbFebFfbwMbFgbfubFhbFibFjbFkbFlbFmbFibFnbFobFnbyhbyhbyhbyhbyhbrDbFqbFrbyhbfzbeebFsbecbcnbFtbboaZdbFubFubFubFubFubFubFvbFwaZdbFxbFybFxaZdbFzbFAbFBbFCaZdaahaahaZdaZdaZGaZHaZGbFDbFEbFFbFGbEgbFHbFIbFJbFJbFKbFLbFMbFObFNbFPbFNbHvbHubEjbFQbEjaZdaZdaTobFRbgJaUvbFSaTobypbyqbFTbAlbFUbFVbFWbFXbEqbFYbFZbGabGbbGcbGdbGebGfbGgbGhbGibGjbGjbGkbGlbtbbGmbGnbGobGpbySbGqbGrbGsbGtbGubGvbGwbyWbAJbySaZWaZmaZmaahaahaahaahaahaahbgmbxzbGybGzbgmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAacAacAaadaadbtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaaaadaaaaaaaaaaaaaaabGBbznbznbznbznbtHbtHbGCbGDbDibGEbGFbGGbGHbtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbwMbwMbwMbGIbGJbGJbGJbwMbwMbwMbGKbGLbyfbGMbGNbGObGPbGQbFibGSbGUbGTbGWbGVbIsbGXbGYbFnbGZbFnbGYahybeebeebHabcnbecbHbbHcbFubHdbyObHfbHgbFubFubFubFuawzbHibHhbHjbHjbHkbHlbHjbHmaahaahaahaZdaZdaZHbEgbEgbHnbHobHpbEgbHqbHrbHsbHsbHsbHtbHwbHybHxbHxbHzbKBbJbbHAbHBbEjahyahyaToaZjblDbHCaToaToahybxcbHDbHEbCqbHFbHGbHHbCqbHIbHJbHKbHLbHMbHNbHMbHObHPbHPbHQbHPbHPbHRbHSbHTbHUbHVbHWdBkbySbHYbHZbIabGtbGubGvbIbbyWbAJbySbbbbJraZmaahaahaahaahaahaahbgmbHebIedGPbgmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaaaadaaaaaaaaaaahaahaahaahaahaahaahaahbtHbtHbtHbtHbtHbIgbIhbIibtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbwMbIjbGJbGIbGJbGJbGJbGJbIkbwMbIlbfubImbInbIobIpbIqbIrbFibItbIAbIybIubIubIwbIubJXbJWbIzbJYbKcahyahybIBbecbRQbecbICbHcbIDbIEbIFbIFbIGbIHbIIbIJbFuaxjaxibIMbHjbINbIObIPbHjaahaahaahaahaZdaZGaZHbEgbIQbIRbISbITbEgbIUbIVbIWbFJbFJbIXbIYbIZbJabJabJabJabJabJbbJcbJdahyahybJeaYGbRSaUvbpPahyahybuobosbvSbvSbJfbJgbvSbvSbJhbJibJjbJkbxqbJlbJmbJnbthbJobJpbJqbKLbJsbJtbJubJvbJwbJxbJybJzbJAbJBbJCbJDbJEbJFbJGbJHbJIbySbglbfpaZmaahaahaahaahaahaahbgmbgmbLDbJKbgmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaaacAaaaaaaaahaahahyahyahyahyahyahyahyahyaahaahaahbtHbtHbJLbIibtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbwMbJMbGJbJNbJObGJbGJbGJbIkbwMbJPbtUbJQbJRbJSbIdbJUbJVbFibGYbKabJZbIubIubIubIubKbbIubIubLzbLAahyahybKdbecbcnbecbKebHcbKfbKgbKhbKibKjbKhbKhbKkbFubKlbILbKmbHjbKnbKobKpbHjaahaahaahaahaZdbKqaZHbEgbIQbKrbKsbKtbEgbKubKvbKwbFJbKxbKycuybKAbJabJabJabJabJabKBbKCbKDahyahybrGbKEbynbKFbrGahyahybvObsDbKHbKHbKIbKKbMHaGMbKNbKNbKObKPbKQbKRbKNbKSbKTbKUbKVbKSbKWbKWbKWbKWbKWbKXbKYbKZbLabySbySbySbySbySbySbySbySbySbySbLbbLcaZmbLdbLebLebLebLdbLdbLfbLgbLhbLibLfbLdaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadbtEbGAbtGaadbtEbGAbtGaadbtEbGAbtGaadbtEbGAbtGaadacAaaabLjaahbLkbLkbLlbkQbkQbkQbLmbLkbLkahyaahaahaahbtHbLnbIibtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbwMbLobLpbLqbGJbLrbGJbLsbwMbwMbLtbfubImbFibLubLvbLwbLxbLybGYbLCbLBbIvbIubIubIubKbbIvbIubLEbLAahyahybKdbLGbhqbecbKebHcbLHbLIbKhbLJbLKbLLbLMbLNbLObLPbLQbLRbLSbLTbLUbLVbHjaahaahaahaahaZdaZdaZHbEgbEgbLWbEgbEgbEgbLXbLYcAgbMabKxbMbcuBbMdbMebMfbMgbMhbKBbKBbMibKDahyahybvNbMjbgJaUvbvNahyahybMkbMlbMmbKJbOcbMkbMkbMkbMkaPubMqbMrbMsbMtbMsbKSbMubMvbMwbMxbKWbMybMzbMAbMBbMCbMDbMEbMFbMGbOdbMIbMJbRXbMLbMMdFecbabUSbMQbMRbMSbMTbMUbMVbMWbMXbMYbMZbNabNbbNabNcbLdaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOaaabtEbNdbtGaaabtEbNdbtGaaabtEbNdbtGaaabtEbNdbtGaaaaadaadbLjaahbLkbNebNfbNgbNfbNgbNfbNebLkahyahyaahaahbtHbNhbIibtHbtHaahaahaahaahaahaahaahaahaahaahaahbtHbtHbtHbwMbwMbwMbwMbwMbwMbwMbwMbwMbNibNjbfubyfbGMbNkbNlbNmbLxbNnbGYbPkbNsbRfbPnaxraxUbRibRfbRkbRjbLFahyahybKdbecbDMbDNbKebNtbFubNubKhbNvbNwbNxbKhbNybFubNzbNAaGUbNCbNCbNCbNCbNCbNCbNCbNCaahaahaZdaZHbEgbNDbNEaylbQAbNHbFJbFJbNIbFJbNJbEgbNKbNLbNMbNNbNObKBbNPbNQbNRbNSahyahyaTobNTbetbNUaToahyahybMkbNVbNWbNXbNYbSkbUXbMnbMobNBbMqbMrbOebOfbOgbKSbOhbOibOjbOkbKWbOlbOmbOnbOobOpbOqbOrbOsbOtbOtbOubOvbOqbOtbOwbOtbOxbOybOzbOAbOBbOCbODbOEbOEbOFbOEbOGbOHbOIbOJbOKbLdaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaadaaaaaaaaaaadaadaadaaaaaaaaaaaaaaaaaaaaaaadaaaaadaadaahaahaahbOLbOMbONbOObOPbOQbOLbORahyahyaahaahbtHbOSbIibOTbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbOUbOVbOWbOXbOYbOZbzHbPabPbbPcbPdbPebPfbPgbImbInbIobPhbPibLxbPjbGYbSRbSQbSSbNqbNqbNrbNpbSSbRlbSTbGYahyahybKdbecbcnbecbPobHcbFubPpbKhbPqbPrbPsbKhbPtbFubPubPvbPwbNCbPxbPybPzbPAbNCbPBbNCbNCaahaZdaZHbEgbPCbPDbPEbPEbPFbPEbPEbPGbFJbPHbEgbPIbPJbPKbPLbPMbPNbPIbPJbPKbEjbPObPPaToaZjblDbHCaToaToahybMkbPQbPRbPSbPTbPUbPVbPWbPXbPYbPZbQabQbbQcbQdbKSbQebQfbQgbQhbKWbQibQjbQkbMBbQlbQmbQnbQobQpbQqbQrbQsbQtbQpbQubQvdGRbMPbMQbQxbQybQzbMUbMVbWWbQBbOJanDbQDbQEbOJcAfbLdaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczaczacAaczaczacOacAaadaadaadaadaaaaaaaaaaadaadaadacOaadaaaaahaahaahbNgbQFbQGbQHbQHbQIbNgahyahyahyaahaahbtHbQJbQKbQLbQLbQLbQLbQLbQLbQLbQLbQLbQLbQLbQLbQLbQLbQMbQNbQObQPbQQbQRbQSbQTbQUbQVbQWbQXbQYbQZbyfbJRbRabRbbRcbRdbRebGYbNobNpbNpbNpbNpbNpbNpbNpbRlbSUbGYahyahybKdbecbcnbRmbRnbRobRpbRqbRrbRsbRtbRubRvbRwbFubRxbPvbRybNCbRzbRAbRBbRBbRCbRDbREbNCaahaZdaZHbEgaynbRGbFJbRHbRIbFJbFJbFJbFJbRJbEgbupbTlbTkbRNbRObRPbRObRPbvEbRTbRUbRUbRVbRWbetaUvbvFaToahybMkbRYbRZbSabNWbSbbScbSdbSebSfbSgbShbSibMpbvIbKSbXibQfbSlbSmbKWbKWbKWbKWbKWbSnbSobSpbSpbSpbSpbSpbSqbSrbSqbSqbSqbSqbSqbSsbStbSubSvbSwbSwbSwbLdbLdbSxbSycNtbSxbLdbLdaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahbOLbSAbQGbQHbQHbSBbOLbORahyahyaahaahbtHbSCbIibSDbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbSEbSEbSFbSGbSEbSHbSIbSJbSKbSLbSMbSNbSObSPbSLbSLbSLbSLbSLbGYbUDbPlbPmbNpbNpbSzcpCcpubRlbXTbGYahyahybKdbecbcnbSVbbobbobFubFubFubFubFubFubSWbFubFubSXbSYbSZbNCbTabTbbTcbTdbNCbTebTfbNCaahaZdaZHbEgbFLbvJbEgbEgbThbTibTibTibTibEgbEgbTjbTkbTlbTmbTnbTkbTlbTkbTobTpaUvaUvaUvaUvbTqbTrbTsaToahybMkbGxbTubTvbTubTtbScbTxbTybVhbTAbTBbTCbTDbTEbKSbTFbTGbTHbTIbTJbTKbTLbTMbTNbTObTPbTQbTRbTSbTTbSpbTUbTVbTWbOabTXbTZbSqbUabUbbSubUcbUdbUebSuaahaahbSxbUfbUgbSxaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahbLkbNebNfbNgbUhbNgbNfbNebLkahyahyaahaahbtHbtHbIibtHbtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahbSEbUibUjbUkbUlbSEbUmbUnbUnbUobUpbUqbUrbUsbUtbUubUvbUwbUxbGYbXUbRgbYYbNpbNpcbIbRgcGibRlcGQbGYahyahybKdbecbcnaZzbUFahybUGbUHbUIbUJbUKbULbULbUMbUGbUNbUObUPbNCbNCbUQbNCbNCbNCbNCbNCbNCaahaZdaZHaZdbvMbUTbUUbUVbUWbUWbUWbUWbUWbYobUYbTkbTlbUZbVabVbbVcbTkbTlbVdbVeaUvaUvbVfbVgbdvaUvbvPaToahybMkbVibVjbVkbVlbVmbVnbVobVpbVqbVrbVsdGSbKNbKNbKSbKSbKSbKSbKSbTJbVtbVubVvbVwbVxbVybVzbVAbVBbVCbSpbVDbVEbVFbVGbVGbVHbSqbVIbVJbSubVKbVLbVMbSuaahaahbSxbVNcAhbSxaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahbLkbLlbVPbVQbVRbVSbVTbLmbLkahyaahaahaahaahbtHbIibtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbSEbVUbVVbVWbVXbVYbVZbWabWbbWcbWdbWebWfbWgbWhbWibWibWjbWkbUEcNkcIgcNkdHrdHrcNkdHscNkdHtcNkbUEahyahybKdbWobcnaZzbamahybWpbWqbULbWrbWsbWsbWtbWubUGbWvbWwbUPbWxbWybWzbWAbWBbWCbWDbWEbNCaahaZdbWFanEbWHbWIbWJclZbWLbWKbTwbWKbWLbWKbWJbTlbTkbWNdBObVabWPbTlbTkbWQbURbPObPPaTobHCblDbHCaToaToahybMkbWRbWSbMkbWRbWSbMkbMkbMkbYAbWUbWVbCAbKNaahaahaahaahaahaahbTJbWXbWYbWZbTNbXabXbbTQbXcbXdbXebSpbXfbXgbXhcccbXjbXkbSqbXlbXmbXnbXobXpbSubSuaahaahbSxbXqbXrbSxbSxaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahahyahybXsbXtbXubXvbXsahyahyahyaahaahaahaahbtHbIibtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbSEbXwbXxbXybXzbXAbXBbXCbXDbXEbXFbXGbXHbXIbXJbXKbXLbXMbXNbUEbUybUzbUAbUBbUBbUybUzbUybUCanGbUEahyahybKdbXVbhqbXWbamahybXXbXYbXZbYabYbbYcbYdbYebYfbYgbYhbYibYjbYjbYkcqEbYmbYnbYnbTYbNCaahaZdbYpaZdbYqbTkbTlbWJbYrbWJbYrbWJbYrbWJbYsbTkbTlbUZbYtbVbbVcbTkbTlcgwbURahyahyaTobYvbetbYwaToahyahyahyahyahyahyahyahyahyahybKNbKNbYxbYybKNbKNaahaahaahaahaahaahbTJbTJbTJbTJbTJbYzciWbSpbSpbSpbSpbSpbSqbSqbSqbSqbSqbSqbSqbYBbYCbSubSubSubSuaahaahaahbSxbYDbVObYEbSxaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahahybYFbYGbYHbYIbYFahyahyahyaahaahaahaahbtHbYJbtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbSEbYKbYLbYMbYNbYObYPbXMbYQbYRbYSbYTbYUbYRbYQbXMbXMbXMbYVbUEbWlbWmbWlbWnbUBbWlbWmbWlbUCanGbUEahyahyanHbecbDMbZbbamahybZcbZdbZebZfbZgbZhbZibZjbUGbWvbZkbZlbZmbZnbZobZpbZqbZrbZsbZtbNCaahaZdbYpaZdaZdbTlbTkbTlbTkbTlbTkbTlbTkbTlbTkbTlbTkbTlbZvbTjbZwbTlbTkbTjbZybZxahybJeaUvbetaUvbJeahyahyahyahyahyahyahyahyahyahyahybZzbZAbZBbZzbeubeubeubeubeubeuaahbZCbZDbZEbZFbZGbTObTPbZHbZIbZJbZKbZLaahaahaahaahaahaahbZMbZNbZObZPbZQbZMaahaahaahaahbSxbZRbZSbZTbSxaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahahybZUbZVbZWbZUbZUahyahyaahaahaahaahaahbZXbZYbZXaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbSEbZZcaacabcacbSEcadcaecaecaecafcagcahcaicaecaecaecajcakbUEbXObUBbUBbXPbXQbXRbXRbXRbXSdHwbUEahyahyanIbecbcnaZzdHyahycaocapbZecaqcarcarcasbULbUGbWvcatcaucavcavcawcaxcaybYnbYncazbNCaahaZdbYpanJaZdcaAbTlbTkbTlbTkbTlbTkbTlbTkbTlbTkbTlbTkcaCcaDcaEcaFcaGcaHcaIahyahybrGaUvbetcaJbrGahyahyahyahyahyahyahyahyahyahyahycaKcaLcaMcaNbeubZMbZMbZMbZMbeuaahbZCcaOcaPcaQcaRcaScaTcaUcaVcaWcaXbZLaahaahaahaahaahaahbZMcaYcaZbJTcbbbZMaahaahaahaahcbccbdcbecbfcbcaahahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahahycbgcbhcbicbjcbgahyahyaahaahaahaahaahbZXbZYbZXaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbSEcbkcblcbmcbnbSEbNZcbpcbqcbrcbscbtcbucbvcbwcbxcbycbzcbAbUEbWlbWmbWlbYWbUBbWlbWmbWlbYXdHzbUEbYZbZabeeccHdHAdHBbeeahybUGcbJcbKcbLcbMbULcbNbUGcbOcbPcbQcbObNCcbRcbScbTcbUcbVcbWcbXbNCaahaZdbYpaZGaZdanSbTkbTlbTmbTnbTkbTlbTkcbZbTmbTlbTkbTlccabTnccbbTlbTkdBQcaIahyahybrGccdbgJaUvbrGahyahyahyahyahyahyahyahyahyahyahyccBccfccgcaNbeudGTcgndGUbZMbeuaahbZCcchcciccjbZGcckcclbZHccmccnccobZLaahaahaahaahaahaahbZMbZNbZMbZMbZMbZMaahaahaahaahcbcccpaEGccrccscctccuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahahyahybXsccvccwccxbXsahyahyaahaahaahbZXbZXbZXbZYbZXaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbSEbSEccycczbSEbSEbSLbSLbSLbSLbSLccAbSLbSLbSLccEccCccDbSLbUEbUybUybUybUBbUBbUybUybUybYXcalcamcanbecbecbecbcnaZzbeeahybUGbUGbUGbUGbUGbUGbUGbUGccIccJccKccLbNCbNCccMbNCbNCbNCccNccObNCccPaZdccQaZdaZdcDsbTlbUZdBRbVbbVcccTccUbVbbVaccVccWbUZbVadBOccXbTkbTlcbYcaIahyahybrGaUvbetaUvbvNahyahyahyahyahyahyahyahyahyahyahyccBccYccZcaNbeucgncgndGWbZMbeuaahbZCbZCbZCbZCbZCcdacdbbZLbZLbZLbZLbZLaahaahaahaahaahaahbZMbZNbZMaahaahaahaahaahaahaahcbccdccddcdecdfcdgcdhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahahyahybYFcdiccwcdjbYFahyahyaahaahaahbZXcdkcdlcdmbZXbZXbZXbZXaahaahaahaahaahaahaahaahaahaahaahaahaahbSEbSEbSEbSEaahaahaahaahbZXcdncdobZXahyahyahyahyahyahybUEcbBcbCbUBbUBbUBbUBcbDbUBcbEcbFcamcancbGcbHbecbcnaZzcbOcbOcbOcbOcdpcdqcdrcdscdtbFpcdvcdwcdxcdycdzcdAcdBcdCcdDcbOcbOcbOcbOcbOcdEcdFcdGbURbURaouccUbVbbYtccVaovbUZbYtdBObVccdIccUcdJcdKcdLcdMcdNcdOcdSahyahybrGcdQbetcdRaTocaNahyahyahyahyahyahyahyahyahyahycelcdTcdUcaNbeudGYdGXdGZbZMbeuaahaahaahaahaahbZMcdVcdWbZMaahaahaahaahaahaahaahaahaahaahbZMbZNbZMaahaahcbccbccbccbccbccbccdXcdXcbccbccbccbcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahbZUbVSbVQbZUcdYccwcdZbZUbVSbVQbZUbZUbZXbZXceacebceccedceecefbZXaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZXcegcehceiceiceiceiceiahyahybUEbUEbUEcdPccFccFccGbUEbUEbUEbUEbUEbYZbZabeecejbjSaZzcekceLcemcbOcenceocepceocencencenccJccKcencencencdBceqcercescbOcetceLceucevcewcexceycezceAceBceCceDceAceEceAceFceCceBceGceBceCceHceIbTkbTlceJbURahyahybvNaUvbetaUvceKcaNcgqceMceMceMceMceMceMceMceMceNcaNceOcePcaNbZMdHabZMbZMaTWbeuaahaahaahbZMbZMbZMceQceRbZMaahaahaahaahaahaahaahaahaahbZMbZMbZNbZMaahaahcbcceSceTceTceTceTceUceUceVceTceTceWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahbZUceXceYceXceZcfacfbcfccfdcfecffcfgcfhcficfjcfkcflcfmcfncfobZXaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZXcfpcfqcfrcfscftcfuceiahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahybbocfvcfwcfxcfycfzcfAcfBcfCcfDcfEcfFcfFcfFcfFcfGcfHcfFcfFcfFcfIcfJcfDcfKcfLcfMcfNcfOcfPcfQcfRcfSbTpcfTbTlbTkbTlbTkcfUbTkbTlbTkbTlcfVbTlbTkcfWbTkbTlbTkcfXbZyahyahyaTocfYbyncfZaVlcgacgbcgbcgbcgccgbcgbcgdcgbcgbcgbcgbcgecgfcggbZMdGYcgicgnbZMbZMbZMbZMbZMbZMcgjcgkcglcgmbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMdHbbZNbZMaahaahcbccgocgpcgTcgrcgscgtcgucgvcqbcgxceTceWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahbZUcgycgzcgAccwcgBccwccwcgCccwcgDbZUcgEcgFcgEcgGcgHcgIcgJbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXcgKcgLceicgMcgNcgOceiahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyaZycgPcgQcgRcgSchucgUcbOcgVcgWcgXcgYcgZchacgWcgWchbcgWchcchdchechfcgWchgcbOcgUchuchhchichjcevcevchkaowcdNcdMcdNchlchmcdMchncdMcdNchochpcdMchqchrchschtchLchvahyahybJechwchxbbQbbRchychzchzchzchAchzaoBchBchzchzchzchzchCchDchEchFchGchHchGchGchGchGchGchGchGchGchGchIchJchJchJchJchJchJchJchJchJchJchJchJchJchKbZMaahaahcbccgocgpciscgucgucgucgucgucgucguchMchNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahbZUchOchPchQchRchSchTchUccwchVchWbZUchXchYchZchYciacibciccidcidcidcidcidcidcidaoCcidcidcidcidcidcidcidcidcidcidcidcidciecifcidcidcigcihciicijcikcilceiahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahybamcimbcnbeccbOcbOcbOcbOcinciocipciqcirciwcitciucivciAcixciycizciGciBciCcbOcbOcbOcbOciDcfQciEciFbURbURciXciHciHciHciHciHciHciHciHciHciHciHciHciIbURciXchvahyahyahybrGciJciKciLciKciMciNciNciOciNciNaoEciPciNciNciNciOciQciRciSbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMciTciUciVcqcbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMaahaahcbccgocgpcjAciYciZcjacjbcjccjdcjeceTcjfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahcjgcjgbZUbZUcjhcjicjjcgBcjkcjlcjlcjmbZUbZUcjnchYcjochYcjpcjqcjrcjsbZXbZXbZXaoFcjvcjvaoGcjvaoHapdbZXbZXbZXbZXbZXbZXbZXbZXbZXcjtcjucjvcjvcjwcjxcjyceiceiceiceiahyahycjzcjzcjzcjzcjzcjzcjzahyahyahyahyahyahyahybaicimbcnbeccjBahyahycbOcbOcbOcjHcjCcjDcjEcjDcjDcjFcjDcjEcjDcjCcjGcbOcbOcbOahyahyckhcjIcjJcjKciFaahaahahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahybvNaUvaUvcjLcjMcaNcgqceMceMceMapuapAapvceMceMceNcaNcaNcaNcaNbZMaahaahaahaahaahaahaahaahbZMbZMbZMciVbZMbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahcbccjNceTceTceTceTceTceTceVceTceTcjfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahcjgcjgcjOcjPcjgbVScjQbVQcjRbVScjQbVQbZUchYapCcjTchYcjUchYcjVcjWcjXcjqaahaahamYamYamYamYapFamYamYamYamYaahaahaahaahaahaahaahbZXbZXcjucjYbZXcjZbYlbZXaahahyahyahyahycjzcjzckbckcckdckeckfcjzcjzahyahyahyahyahybbobbockgblnccHbbobboahyahyahyckEahyahyahyahyahyahyahyahyahyahyahyahyckEahyahyahyciFciFckicfQcfRciFciFaahaahaahahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyciFciFckjckjckkciFciFahyahyahyahyapGapAapGahyahyahyaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZMciVbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahcbccbccbccbccbccbccbccbccbccbccbccbcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahcjgcjgcklckmcknckockpckqckrckscktckuckvckwckxapHckzchYckAchYckBckCckDcjqaahaahamYaqwapIapRapQapSanCaqwamYaahaahaahaahaahaahaahaahbZXcjubZXbZXbZXbZXbZXahyahyckKckFckFckGckHckIckIckIckIckIckIcjzahyahyahyahybbobbodETcimbcnbecbDObboclmckLckMciFclmckLckLckLckLckLckLckLckLckLckLckMciFclmckLckMciFckNckOckPcfRckQciFciFciFciFciFclmckLckLckLckLckLckLckLckLckLckLckRciFclmckLckRciFckScfRcfRckTckUciFciFahyahOahOahOapXahOahOahOaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZMciVbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahyahyahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahcjgckVckmcknckWckXckYckZclaclbchVclccldclecleclfclgclhcjUchYclicljclkcjqaahaahamYaqwaoDaoDaqlaqnaqmaucamYaahaahaahaahaahaahaahaahbZXcjubZXaahaahaahaahahyahyclYclncloclpclqclrclscltcluclvclwcjzahyahyahyahyaZycrkbecclyclzclAclAclBclCclCclCclDclCclEclCclCclFcfRcfRcfRcfRclGclHclIclJclIclIclIclKclLclMclNclIclIclKclIclOclIclPclIclQclIclIclIclIclIclQclRclIclSclIclTclIclQclIclKclIclUclUclVclWbKGcmpahyahOaqoaieaqsaqpaqtahOaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZMciVbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahyahyahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahcjgcsTcknckncmacmbcmcbZUbZUcmdbZUbZUchYcmeclecmfcmgcmhcmichYcjqcjqcjqcjqaahaahamYaqvaoDaqwaqxaqwaoDaqyamYcmjcmjcmjcmjaahaahaahbZXbZXcjubZXdEldEldEldElahyahycmRcmqcmrcmscmtcmtcmucmvcmwcmtcmxcjzahyahyahyahybambisbeccimcsUbecbeccmzcfRcfRcfRcfRcmAcmBcmBcmBcmCcmDcmDcmDcmEcmDcmFcmDcmGcmDcmDcsVcmHcmIcmJcmKcmDcmDcmHcsZcmDcmDcmLcmDcmDcmDcmMcmDcmDcmDcmDcmGcmDcmDcmDcmEcmDcmDcmDcmHcmNcmBctacmOcmPcmQcncahyahOaieaieaqzaieaqAahOaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZMbZMciVbZMbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahyahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahcjgcmScmTcmUcmVcmWcjgcmXbObcmZcnacnbcnScndcnecnfcngcnhcmichYaahaahaahaahaahaahamYartaoDaqwaqBaqwaoDanFamYcnicnjcnkcmjaahaahaahbZXcnocjubZXbWTckJccqdEldElahyclYcnpcnqcnrcnsckIcntcnucnvckIcnwcjzahyahyahyahybaibjQbeccimbDMbDNbeccmzcfRcnxcfRcnycnzcnAcnBcfRcnCcnxcfRcfRcnDcnxcnEcfRcnFcfRcnxcfRcjKcnGchicnHcevcevcnIcevcnJcevcnKcnMcevcnLcxCcevcnJcevcevcevcevcnJcevcnNcevcevcevcnIcnOcnQcnPcnRcfRbKGcodahyahOaqDaqCaqZaqEaraahOaahaahaahaahaahaahbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMcnTciVcgnbZMbZMbZMbZMbZMbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadbLjaahaahcjgcnUckXcnVcnWcnXcnYcnZcoacobcoacoccoocoecleclecofchYbRKchYaahaahaahaahaahaahamYanBarbardarcaoDaoDaqwamYcogcohcoicmjaahaahaahbZXconcjubZXclxcrlcmycrqdElahycowckFckFcopcoqckIckIcorckIckIcoscjzahyahyahyahybbobbocotcimbcnbeccoAbboclmckLckMciFclmckMciFcovcoGcoxcoycozcoScoxcoBcovciFclmckLckMciFcoCckicoDcmBcoEciFclmckLckMciFciFclmckLckMczAclmckLckMciFciFdCQckMciFclmckLckMciFcoFckickicfRcoXciFciFaahahOareaiearfaieargahOaahaahaahaahaahbZMbZMcoHcoIcoJcoJcoJcoJcoJcoJcoJcoJcoKcoLcoLcoLcoMcoNcoObZMbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadbLjaahaahcjgcoPckncoQcmacoRcpqcoTcoUcoVcoacoWcpPcoYcoZcpacpbchYcpcchYaahaahaahaahaahaahamYariarharkarjarmarlarnamYcpdcohcpecmjaahaahaahcpjbZXarqbZXcpjcvVcrrcvWdElahyahyahyahycjzcplcpmcpncpocppcpTcprcjzahyahyahyahyahybbobbocpscptcmzbbobboahyahyahyahyahyahycovawtcpvcpwcpxcpycpzcpAcpBawucovahyahyahyciFciFcpDcpEckjciFciFahyahyahyczZcEVcEVcEVcEvcEvcEvcEVcEVcEWczZahyahyahyahyahyahyciFciFcjIcjIcjKciFciFaahaahahOahOaiaarraidahOahOaahaahaahaahaahbZMcpFcpGcpHbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMcpIcoMcpJbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaahaahaahcjgcpKcpLcpMcpNcpOcqecpQcoacpRcoacpSchYcqzcpUcqzcpVcpWchZchYcpXcpXcpXcpXcpXcpXamYamYarsauQaruauRarvamYamYcmjcpYcmjcmjcpXcpXcpjcpjcFucFrcqdcpjdElcxWcyjdElcrIcqfcqfcqgcjzcjzcjzcjzcqhcjzcjzcjzcjzcrIcqfcqfcqfcqgcpjcqicqjcqkcqlcqmcpjcpjahyahyahyahyahycovcqncqocqpcqqcqrcqscrJcpBcqucovahyahyahyahycqvcqwcqxcqycqvahyahyahyahyczZcuIarwcxUcEvcEvcEVcEVcEVcIFczZahyahyahyahyahyahyahycrNckicqAcqBciFaahaahaahaahahOahOahOahOahOaahaahaahaahaahaahbZMcqCcgnbZMbZMaahaahaahaahaahaahaahaahaahaahaahbZMbZMcgncqDbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaahaahaahcjgctxckncqFcqGcqHcqIcqJcqJcqKcqLcqMcqNcqOcqOcqPcqQcqRcqScqTcqUcqVcqWcqXcqYcqYcqZcqOarxcracqYcqYcqYcqYarycqOcrdarzcrfcrgcrhcricrjcMIcMjcrmcrncrocOZcrudBNcrscrtcrucrucrvcrucricrwcrxcrycrzcrAcrBcrAcrCcrAcrDcrAcrzcrAcrEcrFcrGcrucrHcrRahyahyahyahyahycrWcqtcrKcrLcrLcrMcrLcrLcpBcqtcrWahyahyahyahycsKcrOcrPcqycsKahyahyahyahycIHcEVcEVcEVcEVcEVcEVcEVcEVcJKcrQcrQcrQcsLcrScrTcrUcrQcrQctccsNctccrQcrQcrQcrQaahaahaahaahaahaahaahcrXcrXcrXcrXcrXbZMcrYcrZcrZcrZcrZcrZaahaahaahaahaahaahaahcsacsacsacsacsacsbbZMcsccsccsccsccscaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaaahaahcjgcsdcknckncsecsfcsgcshcshcsicshcsjcskcslcsmcsncsncsncsocspcsqcsrcsqcsqcsqcsscsqcsqcsqcstcsqcsqcsqcsscsqcsqcsqcstcsqcsqcsucsvcswcsxcsycswcswcsvdBPcswcswcszcsAcsBcrucrucrucricrucsCcswcsDcswcsEcswcswcswcsFcswcsvcswcsGcsHcsIcrucsJcsRahyahyahyahyahyctmcqtcrKcrLcsMcsMcsMcrLcpBcqtctmahyahyahyctucsOcrOcsPcsQcumcsSahyahyahycMYcEVcEVcDncEVcEVcEVcEVcFecrQcrQcwtctdcsXcwtcwvcsXcsYcwwctbcsYctbctecxOcwxcrQcrQaahaahcrXcrXcrXcrXcrXctfctgayocrXctictjcrZayqctlcurcrZcrZcrZcrZcrZcsacsacsacsactnctoayscsactqctrcscayvcttcuTcsccsccsccsccscaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaaaabLjbLjcjgctvctwcALctycmacjgbRMctActBctCctDctEctFctGctHcrfcrfcrfctIctJctKcrfctLctMctNcrfctFctOcrfcrfctPctQctRctSctTctQctQctUctVctWcrocrpctXctYctZcuacubdCbcuadCfcuacuccudcuacuacuacubcuecufcuacubcuacugcuacuhcuicuacuacubcuacujcrucukcruculcuYahyahyahyahyahyctmcuncuocrLcsMcupcsMcrLcuqcunctmahyahyahycvacqycrOcrPcqycqycvaahyahyahycMYcJacEVcLvcEVcQdcEVcEVcEVcrQcxScsYcwrcwscwscwscwscwscwsczmczlczoczncPbcPbcBjcrQaahaahcrXcuuazEcuucrXcNfcuxdGMcrXcuzcuAcrZcuNcuCcuDcrZcuEazFcuEcrZcuGaAdcuGcsacOScuJdHccsacuLcuMcsccwEcuOcuPcsccuQaADcuQcscaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaadaadaadaadaadcuScuScvgcuUcuScuVcuWcuScuScuScuXcvocuZcuXcvrcvbcuXcvccvdcvecvfcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpjcvNcvhcrFcvicvjcpjcpjcpjcpjcrIcqfcqfcqfcqfcqgcpjbRRcvlcqdcpjcrIcqfcqgcpjcrIcqfcqgcpjcvmcrucrucrGcvncpjcpjahyahyahyahyahycwjcvpcuocrLcrLcrLcrLcrLcuqcvqcwjahyahyahycqvcwqcrOcrPcqycvscqvahyahyahycRUcWRcEVcEVcEVcEVcEVcEVcWRcrQcBkcsYcsYcsYcvucvucvucvucvuctbcDpcwzcsYcsYcsYcducrQaahaahcrXaAEcvxaAEcrXcrXcvycrXcrXcwFcwGcrZcrZcvBcrZcrZaAFcvDaAFcrZaAGcvFaAGcsacsacvGcsacsacvHcvIcsccsccvJcsccscaAHcvLaAHcscaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMaadaaacxfcvOcvPcvQcvRcvScvTcvUdEKdEJcvXcvYcvZcwacwbcwccuXcpXcpXcpXcpXcpXaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahcpjcwdcwecwfcwgcwdcpjdELdELdELahyahyahyahyahyahycpjcwhcwicwhcpjahyahyahyahyahyahyahycxAcqicqicqicwkcqicxAahyahyahyahyahyahycovcuncwlcwmcwncwocuncuncuqcwpcovahyahyahycsKcqycrOcrPcqycqycsKahyahyahyczZcPicEVcEVcEvcPocEVcEVcEVcrQcvucvucsYcsYcBicDqdBUcxPbdUctbcxRcsYcFdcFdcFdcFdcrQaahaahcrXcwBcwCcwDcPvcwDcwJcwHcwLcwKcwUcwTcwXcwVcwMcwNcwMcwOcwPcrZcwQcwRcwScPBcwScyacyecybcyqcyfcwYcwZcxacxbcxccxbcxdcxecscaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMaadaaacxNcxgcxgcxgcxgcvScvTcxhcxhcxicuXcxjcxkcxlcxmcxncuXcxocxpcxqcxraahaahaahaahaahcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxscxtcxucxvcxwcwhcwhcwhcwhcwhcwhcwhcwhcwhcwhcwhcxxcxycwhahyahyahyahyahyahyahyahycxzcyBcxBczkcxDcyBcxzahyahyahyahyahyahycovcovdHdcxFcxGcxHcxIcxJdHecovcovahyahyahycumcsScxLcxMcqyctucsOahyahyahyczZczZcEVcTdcQncUncEVcEVddacrQcEFcxPcsYcsYcxQcxQcxQcxQcxQctbcxRcsYcFdcFdcFdcFbcrQaahaahcrXcxVaAKaAIcxYcxZcytcyrcrXcyccydcrZcAkcyucygcyhcyidENcykcrZcyldEPcyncyocypcAqcAucsacyscAxcBocBncyvcywcyxcyydEQcyAcscaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMczTcyCcyDcyEcyFcxgcxgcvScyGcyHcyIcyJcyKcyLcyMaGXcyOcyPcuXcxqcxqcxqcxrcxrcxrcxrcxrcxrcxrcyQcyRcyScyScyScyScyScyScyScyScyScyScyScyTcyScyUcyVcyWcyXcyYcyVcyZczaczbczaczaczaczaczaczaczaczaczaczccwhahyahyahyahyahycxzcxzcxzcxzczdczebTgczgczhcxzcxzcxzcxzahyahyahyahycovcovcovcziczjczicovcovcovahyahyahyahyahycvacrOcrPcqycvaahyahyahyahyahyczZczZczZczZddeczZczZczZcrQcxQcxQcDocwycwycwycFccHvcHrcJzcHxcsYcFdcFdcFdcFdcrQaahaahcrXcrXcrXcrXcrXcrXcBqcrXcrXczpcuAcrZcrZcBrcrZcrZcrZcrZcrZcrZcsacsacsacsacsacBucsacsacuLcBvcsccsccsccsccsccsccsccsccscaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMczrczsczrczscztczuczvczwczxczyczzcxgcArczBczCczDczEcuXcuXczFczGczGczGczGczGczGczGczGczGczGczHcxqcxrcxrcxrcxrcxrczIczIczJcxrcOHczKcxqcxrczLczMczNczOczPcwhczQczQddgddmddkczQczQcwhcwhcwhcwhczRcwhahyahyahyahyahycxzczSczScABczUczVczWczXczYcAIcAacAacxzaahahyahyahyahyaahaahczicAbcziaahaahaahahyahyahyahyahycqvcAccAdcAecqvahyahyahyahyahyahyahyahycBgcWQcBgahyaahcrQcJNcxTcKMcxTcxTcFacFacKNcxTcxTcMecDrcFdcFdcFdcmYcrQaahaahcAicCbaEJcCbcAicAjcBxaywcAicAmcAncAoayEcCccBbcAocCfaFxcCfcAocCkaFzcCkcAscAtcClazxcAscAwcCmcAyazycAAcBAcAycCoaFRcCocAyaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMcACcADcACcAEcAFcxgcxgcvScvTcAGczzcAHcBTcAJcAKcMdbWMcuXcxqcANcxqcxqcxrcxrcxrcxrcxrcxrcxrcxrcAOcxrcxraahaahaahcxrcAPcAPcAPcxrcxrcxrcxrcwdcwdcAQcARcAScwdcwdcwhcwhcwhcwhcwhczQcwhcwhaahaahcwhczRcwhaahahyahyahyahycxzcATczecAUcAVczeczeczgcAWcAXczecAYcxzaahahyahyaahaahaahaahczicAZcziaahaahaahcBacCScBccBacqvcqvcBdcBecBfcqvcBgcBgcBgcBgcBgahyahyahycBgcWQcBgaahaahcrQcvucvucMXcGzcGAcGAcGAcNJcGAcGzcNMcsYcNVcNVcNWcNXcrQaahaahcAiaGxaHMaGxcAicBmcDydHfcAiczpcBpcAocDDcDCcBscAoaJaaHOaJacAoaKbaJIaKbcAscBtcDMdHgcAscBwcBvcAycFkcBycBzcAyaKnaKpaKncAyaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMcEBcyCcBBcBCcxgcxgcxgcBDcvTcAGczzcBEcuXcvrcvbcuXcuXcuXcxrcANcBFcxrcxraahaahaahaahaahaahcxrcBGcBHcxraahaahaahcBIcBIcBJcBIcBIaahaahaahaahcwdcBKcxucxvcwdaahaahaahaahaahcwhczQcwhaahaahaahcwhczRcwhaahaahaahahyahycxzcxzcxzcxzcBLcBMcBNcBOcbocxzcxzcxzcxzaahaahaahaahaahaahaahczicAbczicziczicBacBacymcBRcBacBScEIcrOcrPcqycBUcBgcBVcBWcBXcBgcBgahyahycBgcWQcBgaTWaahcrQcNRcxPcMXcGzcHscHtcHucNUdFccGzcNMcsYcPccPccPccOVcrQaahaahcAiaKqaKFaHMcAicAicFlcAicAicCdcvAcAocFmcCecAocAoaHOaKGaKHcAoaLuaLtaJIcAscAscFncAscAscvHcFycAycAycCncAycAyaKpaLxaLvcAyaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMcACcADcACcCrcyFcxgcxgcvScvTcAGczzcCscCtcCucCvcCwcCxcCycCzcCAcxrcxraahaahaahaahaahaahaahcxrcCBcCCcxrcxraahaahcBIcBQcCEcCDcBIcCGcCGcCGaahcwdcCHcCIcCJcCKcCKcCKcCKcCKcCKcCKcCLcCKcCKaahahycwhczRcwhaahaahaahaahahycxzcCMcCNcABcCOczVcCPcCQcCRcEKcCTcCUcxzaahaahaahaahaahaahaahczicCVcCWcCXcCXcCYcCZcDacDbcDccDdcDecDfcDgcDhcDicBgcDjcDkcDlcDmcBgcBgcBgcBgcWQcQzcBgcBgcrQclXcxQcMXcGzcHscHtcIGcOYcHwcGzcNMcsYcQHcQHdERcPacrQaahaahcAicDtcDucDvcDwcDvcFAcFzcDzcDAcwIcDBcHFcHAcDEcDFcDEcDGcDHcAocDIcDJcDKcDLcDKcHGcHKcDOcwWcHNcDPcDQcDRcDScDTcDScDUcDVcAyaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMcDWcDXcDWcDYcDZcEacEbcEccEdcEeczzcEfcCtcEgcEhcEicEjcEkcCtcxrcxraahaahaahaahaahaahaahaahcxrcElcEmcxqcxraahaahcBIcBQcCEcCDcBIcEncEocCGcCGcwdcEpcEqcErcCKcEscEtcEuddpcEwcEwcEwcExcCKahyahycwhczRcwhaahaahaahaahaahcxzcATczecEycAVczecEzczgcEAcFHczeczecxzaahaahaahaahaahaahaahczicECcEDcEEcEDcBackacEGcEHcFXcEJcGfcELcEMcENcEOcEPcEQcERcERcEScETcEUcEUcQecZMcEXcQfcEYcEZcxTcxTcQgcQhcHscJLcJMcQFcHwcGzcNMcQIcQGcQGcQGcQGcQGaahaahcAicFfdEScFhcFicFjcIKcIJcAicyccydcAocIPcILcFocFpcFqdEUcFscAocFtdEVcFvcFwcFxcIQcIRcAscyscAxcKacJRcFBcFCcFDcFEdEWcFGcAyaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMcGjcFIcFJcFKcDZcxgcxgcvScFLcyHcFMcFNcFOcFPcFQcFRcFScFTcCtaahaahaahaahaahaahaahaahaahaahcxrcElcFUcxqcxraahaahcBIcCFcCEcCDcBIcFWcGpcFYcFZcwdcGacGbcGccCKcGdcGecEwcEwcEwcEwcEwcEwcCKahyahycwhczRcwhaahaahaahaahaahcxzcxzcxzcxzcGqczecGgcGhcOIcGBczecGkcxzaahaahaahaahaahaahaahczicECcGlcziczicBacGmcGncGocGScEJcHccGrcrPcqycGscBgcGtcGucGvcGwcBgcBgcBgcGxcXdcERcERddqcrQcrQcrQcrQcrQcKJcKKcKLdhfcHwcGzcNMcQGcQGdkBdkBdlCcQGaahaahcAicAicAicAicAicAicKbcAicAiczpcuAcAocAocFmcAocAocAocAocAocAocAscAscAscAscAscKScAscAscuLcBvcAycAycAycAycAycAycAycAycAyaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMaadaaacHHcGCcGDcGEcGEcGFcGGcGGcGGcGGcGHcGIcGIcGJcGKcGLcCtbkQbkQahyahyahybkQbkQaahaahaahcxrcGMcGNcxrcxraahaahcBIcFgcGPcFFcBIcGRcHRcCGcCGcwdcGTcCIcGUcGVcGWcGWcGWcGXcGXcGXcGXcGYcCKahyahycwhczRcwhaahaahaahaahaahcxzcGZczecABcHaczVcCPcCQcHbcHSczecGkcxzaahaahaahaahaahaahaahczicAbczicziaahcBacHdcHedmEcHgcHfcHccHicHjcHkcHlcHmcHncHocHmcHpcHmaahcBgcBgcHqcGxcGxdnjcOUdBScFVcMfcrQcrQcMgcMhdhfcHwcGzdBVdDhdDgdDjdDidDkcQGaahaahaahaahaahaahcHycHzcKTazzcHycHCcHDcHEazAcKWcIzcHEaahaahaahaahaahaahaahcHIcHJcLgazBcHIcHMcLhcHOazCcHQcJtcHOaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMaadaaacJwcGCcDXcHTcDXcHUcHVcxgcxgcHWcCtcHXcGKcHYcHZcIacCtbkQcIbcIccIccIccIcbkQaahaahaahcxrcIdcIecxraahaahaahcBIcBQcIfcGOcBIcIhcIicIjcIkcwdcIlcImcIncCKcGecIocGecEwcGecEwcEwcEwcCKahyahycwhczRcwhaahaahaahaahaahcxzcIpczecIqcAVcIrcIscItcAWcIuczecGkcxzaahaahaahaahaahaahaahczicAbcziaahaahcBacIvcIwcHhcFXcIycKDcrOcrPcIAcDicHmcIBcICcIDcIEcHmaahaahcBgcHqcBgcOTdDlcNKcNTcNLcNNctzcNOcNPcNQdDmcNScNTdDncQGdDodDqdDpdDrcQGaahaahcHycHycHycHycHycIIcMpdHhcHyczpcuAcHEcMqcIMcINcHEcHEcHEcHEcHEcHIcHIcHIcHIcIOcMrdHicHIcuLcBvcHOcMtcIScITcHOcHOcHOcHOcHOaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadcvMcvMcvMcvMcvMaadaadaadcuScuScuScuScuScuScuScIUcIVcIWcIXcIYcIZddOcJbcCtcCtahycIccJccJdcJccIcahyahyaahcJecJecJfcJgcJeaahaahaahcBIcBQcJhcJicJjcJkcJlcJmcJmcwdcJncJocJpcCKcJqcGecEwcEwcEwcEwcJrcExcCKahyahycwhczRcwhaahaahaahaahaahcxzcJsczecMLcJuczVcJvczXczYcNgczeczecxzaahaahaahaahaahaahaahczicAbcziaahaahcBacJxcJycIxcGScJAcJBcJCcJDcJEcJFcHmcJGcJHcJIcJJcHmaahaahcBgcGycBgcBgcBgcrQdFdcsYcOWdHjcrQcHtdDscOYdDtcsYdDucQGdDvcQGdDwcQGcQGaahaahcHycJOcJPcJQcHycHycMucHycHycJScvAcHEcMvcJTcHEcHEcJUcJVcJWcHEcJXcJYcJZcHIcHIcMwcHIcHIcvHcMxcHOcHOcKccHOcHOcKdcKecKfcHOaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaadaadaaaaadbkQaahaahaahaahaahcuScuScuScuScCtcCtcCtcCtcCtcCtaahahycIccJccJccJccIcahyahyaahcJecKgcKhcKicJecKjcKjcKjcBIcBIcKkcKlcBIazDcKncKocKpcKqcKrcKscKtcKqcKucGedeccKvcEwcKwcKwcKwcCKahyahycwhczRcwhaahaahaahaahaahcxzcKxczecHScKyczecKzczgcKAcHScKBcKBcxzaahaahaahaahaahaahaahczicAbcziaahcKCcKCcNYcKEcKFcKCcKCcKCcKGcKHcKIcKCcKCcKCcKCcKCcKCcKCcKCaahcBgcHqcBgaahaahcrQcrQcQAcQBcQCcrQcQDcQEdDydDxcsYcsYcQGdDzcQGdDAcQGaahaahaahcHycKOcKPcKQcKRcKQcMzcMycKUcDAcwIcKVcMBcMAcKYcKZcKYcLacLbcHEcLccLdcLecLfcLecMCcMDcLicwWcHNcLjcLkcLlcLmcLncLmcLocLpcHOaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaahyaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahycIccLqcLrcLscIcahyaahaahcJecLtcLudEXcJecLwcLxcLycLzcBIcLAcBIcCGcCGcLBcCGcLCcKqcLDcLEcLFcKqcLGcLGcLGcLGcLGcLGcLGcLGahyahyahycwhczRcwhcziaahaahaahaahcxzcxzcxzcxzcLHcLIcLJcLKcLLcxzcxzcxzcxzaahaahaahaahaahaahcziczicAbczicKCcKCcLMcLNcLOawvcLQcLRcLScLTcLUcLVcLWcLXcLYcLZcMacMbcMccKCcKCcBgcHqcBgahyaahaahcrQcrQcrQcrQcrQcrQcrQcrQcrQdDCdDBcQGcQGcQGcQGcQGaahaahaahcHycMidEYcMkcMlcMmcMndBWcHycyccydcHEdBYdBXdCadBZdCcdEZdCedCddCgdFadCidChdCkdCjdClcHIcysdCmdCodCncMEcMFcMGcMHdFbcMJcHOaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahybkQcIccMKcNZcMMcIcbkQcMNcMNcMNcMNcMPcMOcKjcMQcMRcMScMTcMUcMVcMWdDDcoucMZcNacMUcNbcNccNdcNecrVcOpcNhcNicNjcTfcLGcNlcLGcLGahyahycwhcNmcNncziczicziczicziczicNocNpcxzcNqcxzcNrcxzcNqcxzcEDcEDcziczicziczicziczicziczicUqcXxcUucKCcNucLPcLPcNvcNwcNwcNxcNycNzcNAcNBcNCcNDcNEcNEcNEcNFcLPcNGcKCcZgdDEcBgahyahyaahaahaahaahaahaahaahaahcWudDFdbMdbMdDGcWuaahaahaahaahaahaahcHycHycHycHycHycHycHycHycHyczpcuAcHEcHEcHEcHEcHEcHEcHEcHEcHEcHIcHIcHIcHIcHIcHIcHIcHIcuLczqcHOcHOcHOcHOcHOcHOcHOcHOcHOaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahybkQbkQcOsahycOMbkQbkQcMNcOacObcOccOdcOecOfcOgcOhcOicMTcOjcOkcOlcOlcOmcOncOocPFcOqcNccNdcNecOrcPPcOtcOtcyzdDHcOvcOtcOwcLGahyahycwhcOxcOycOzcOAcOBcOCcOCcOCcOCcOAcOAcOAcODcOEcOFcOAcOCcOCcOGcOCcOCcOCcOCcOCcOCcOCcOCdlDdBIdBHcKCcOKcLPcLPcOLcLPcLPcPYcONcOOcOPcOQcONcPYcLPcLPcLPcORcLPcLPcKCdBJcHqcBgahyahyahyaahaahaahaahaahaahaahcWudDIdbMdbMdDJcWuaahaahaahaahaahaahcPdcPecPfcPgcPhaGYcPjcPkcPdcPlcPmcPncuscPpcPpcPqcPpcutcPrcPscPpcPtcPpcPucPpcPpcvkcPncPwcPlcPxcPycPzcPAaEycPCcPDcPEcPxaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahycQscPGcPGcPHcPGcPIcPJcPKcMNcPLcPMcPMcPNcPOcRfcPQcPRcPScMTcPTcPUcOocPVcPWcOocPXcRucPZcNccQacQbcQcdcEdDKdDMdDLdDNcQicQjcQkcLGahyahycwhcQlczQczicziczicziczicziczicziczicEDcEDcEEcNscEDczicziczicziczicziczicziczicziczicQmcEDdBKcKCcQocQocLPcQpcQqcQrcRJcQtcOOcQucQvcQwcRJcQxcQocLPcQycQqcQocKCdCRcHqcBgahyahyahyahyaahaahaahaahaahaahcWucWudDPdDOcWucWuaahaahaahaahaahaahcPdcQJcQKcQKcQLcQKcQKcQMcQNcQOcQPcQQcQRcQRcQRcQScQRcQTcQUcQVcQWcQXcQRcQYcQRcQRcQRcQQcQZarAcRbcRccRccRccRdcRccRccRecPxaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadbLjbLjaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahycSAcRgcRhcRicRjcRkcRlcRmcRncRocRpcRqcRrcRscRtcSLcRvcRwcRxcMTcRycPUcRzcRAcRBcRCcOlcRDcREcRFcRGcRHcRIcTadDQcRKcRLcRMcRNcROcRPcLGahyahycwhcRQcwhcziahyahyahyahyahyahyahycziczicziczicziczicziaahaahaahaahaahaahaahaahaahcziczicRRdCScKCcRTcRWcRVcLPcRWcRXcRJcRYcOOcOPcOQcRZcRJcRTcRWcLPcRVcRWcSacKCdCTcSccBgahyahyahyahyahyaahaahaahaahaahahydDRdbMdDScWuaahaahcXGcXGcXGcXGaahcPdcSdcSecSfcSgcShcSicSjcSjcSkcSlcSmcSlcSlcSlcSncSlcSlcSlcSocSpcSqcSqcSrcSqcSqcSqcSscStarBcSucSucSvcSwcSxcSycSyarCcPxaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahbLjbLjaahaahaahaahaahaahaahaahaahbkQbkQahyahyahybkQbkQcTZcSBcSCcPMcSDcPMcSEcSFcSGcSHcPMcPMcSIcSJcSKcUlcSMcSNcSOcMTcSPcSQcSRcSScSTcSUcSVcSWcSXcSYcSZcNecRIcUscTbcOtcTccOtcTearDcTgcLGahyahycwhcRQcwhahyahyahyahyahyahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahaahaahaahczicThcRScKCcTicTjcTkcLPcTlcTjcRJcTmcTncTocOQcTmcRJcTjcTjcTpcLPcTlcTqcKCcSbcTrcBgahyahyahyahyahyahyahyahyahyahyahydDTdbMdDUcWuaahcXGcXGasfasecXGaahcPdcPdcTscTtcTucTvcTwcTxcPdcPncPncPncTycTzcTzcTAcTBcTCcTDcTEcTFcTGdCUcTHcTzcTzasgcPncTDashcPxcTJcTKasicTMcTNcTOcPxcPxaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahbkQcIccIccIccIccIcbkQcTZcSBcTPcTQcTRcTScTTcTUcTVcTWcPMcPMcTXcSIcTYcKjcUvcUacUvcMTcUbcUccUdcUecUecUfcPXcPFcUgcUhcUicUjcRIcUkcUycUmcUodcLcUkcUkcUkcLGahyahycwhcUpcwhahyahyahyahyahyahyahyahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahahyczidCVcRScKCcUrcLPcORcLPcLPcLPcUHcONcOOcOPcOQcONcUHcLPcLPcOLcLPcLPcUtcKCcSbdCWcBgahyahyahyahyahyahyahyahyahyahyahycWudDWdDVcWuaahcXGasjaskdaDcXGaahaahcPdcUIcUwcUwcUwcUxcPdcPdaahaahcPncPncUYcUzcUzcUAcPncUBcUCcUDcPncPncPncPncPncPncPncUBcPmcPxcPxcPxcPxcPxcPxcPxcPxaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahahycIccUEcUEcUFcUGcVucVgcUJcUKcULcUMcPMcUMcUNcUOcUPcUQcURcUScUTcUUcUVcRqcUWcUXcVQcUZcOocOocOocOocOocVacRucVbcUhcVccNecVdcVecVfcWicVhcVicVjcVkcVlcVmahyahycwhcRQcwhahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyaahaahaahahyahyahyahyahyahyczicVncEDcKCcLPcLPcVocNEcNEcNEcNDcNCcVpcVqcVrcNycNxcNwcNwcVscLPcLPcLPcKCcGxcVtcBgahyahyahyahyahyahyahyahyahyahyahydDRdbMdbScWuaahcXGaslaskasmcXGaahaahahyahyahyahyahyahyahyaahaahaahaahahyahyahyahyahycWvcVvcVwcVxcPnaahaahaahaahaahabTasoasnabTaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahahycIccVycVzcVAcNZahycTZcVBcVCcVDcVEcVFcUMcVGcVHcVIcVJcVKcVKcVLcVMcVNcPMcVOcVPcWBcVRcVScVScVTcOocVUcVVcMTcVWcVXcVYcNecVZcWacWbcWicWccWdcWecWfcWgcVmcwhcwhcwhcRQcwhcWhcWhcWOcWjcWkcWhcWhcWOcWjcWkcWhcWhahyahyahyahyahyahyahyahyahyahyahyahycziczicWlczicKCcWmcWncWocWpcvtcLPcLRcONcOOcOOcOQcONcLRcLPcvtcWpcWqcWrcWscKCcBgcWtcBgcBgahyahyahyahyahyahyahyahyahyahydDTdbMdbScWuaahcXGcXGaspcXGcXGaahaahahyahyahyahyahyaahaahaahaahaahaahaahahyahyahyahycXncWwcWxcWycWuaahabTabTabTabTabTastasqabTabTabTabTabTaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahbkQcIccUEcUEcWzcWAcVucXucWCcWDcWEcWFcWGcWHcWIcWJcWJcWJcWFcWFcWFcWKcWLcPMcWMcWNcMTcMTcXycWPcwAcvvcXycWPcWScWTcWUcVYcNecWVcWWcWXcWicWYcWZcXacXbcXccVmdDXcXecXecXfczQcWhcXgcXhcXicXjcXkcXlcXhcXmcXhcXhcWhcWhcXHcXocXocXocXocXocXpcXqcXHcXpcXqcXqcXrcXscXtcKCcKCcNYcKEcKFcKCcKCcKCcYfcXvcXvcKIcYfcKCcKCcKCcNYcKEcKFcKCcKCcXtcXwdCXcXqcXqcZncXzcXzcXzcXAcWucWucWudDYcWucWwdDZcWucWucWucXBasvdHkcWucWucWucWucZncXzcXzcXAcWucWucWucWucWucWucWucZncXzcXzcXAcWucXDcXEcXFcWuabTabTaswacwacwasxacuaeVaszasyacwacwabTabTaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahbkQcIccIccIccIccIcbkQcZocXIcXJcVDcXKcXLcUMcUNcXMcXMcXNcUOcVEcXOcXPcWFcXQcXRcXScXTcXUcXVcXWcXXcXYcXZcYacYbcYacYccYdcNecYecWacNcdaTcYgcYhcYicYjcYkcVmcRQczQcYlczQczQcYmcYncYocYpcYqcYncYrcYpcYscYtcYucYvcYwcYxcYycYxcYxcYzcYxcYAcYBcYxcYxcYCcYDcYEcYFcYGcYHcYCcYxcYIcYxcYycYJcYKcYxcYxcYxcYLcYxcYMcYNcYycYxcYxcYxcYCcYxcYGcYOcYPcYPcYQcYRcYScYRcYTcYRcYUcYVdCYcYRcYScYWcYRcYRcYXcYScYYasAcYZdCYcYXcYRcZacYRcYRcZbcYRcYRcZccYUdCYcYRcYRcZdcYRcYRcYScYRcYXcZecZfcXFasBasDasCacuacuacuasEasFaeVacuacuacuacuawwabTaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahbkQcIccZkcZkcZlcZmdbDdbdcZpcZqcVMcZrcPMcUMcUNcZscZtcZucVGcVHcZvcZqcZwcZxcZycZqcZzcZAcZBcZCcZDcZEcZFcZGcZHcZGcZIcZJcZKcZLdmbcZNcZOcZPcZQcZRcZScZTcVmcRQcwhcwhcZUcwhcZVcZWcZXcWhcZVcZWcZYcWhcZVcZZdaadabdacdaddaddaddaedaddaddafdaddaddaddagdaedahdaidajdakdagdaddajdaddaddaddaedaddaddaddaddaddafdaddaddaddaddaddagdakdajdaldaddaedagdamdamdamdandamdamdaodamdamdamdapdamdamdaqdaodardasdatdaudaqdamdandamdamdaodamdamdamdamdamdamdamdavdamdamdaudamdaqdawdaxasUasSasWasVasXasXatbasZatdatcacJacuacuacuadKabTaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahahycIcdaEdaFdaGcNZahycTZdaHdaIdaJdaKcTSdaLcUNdaMdaNaImcUNcPMdaPcPMdaQcPMcPMdaRdaSdaSdbIdaUdaVdaWdbIdaUdaSdaXdaYdaZdbadbbdbcdbNdbedbfdbgdbNdbedbcdbccRQcwhdbhdbidbjcZVdbkdbldbmcWhdbndbldbocZVcWhdbpcXhdbqdbrdbrdbrdbsdbtdbrdbrdbudbrdbrdbvdbwdbxdbydbzdbAdbBdbCdcedbCdbCdbEdbFdbCdbCdbGdbCdbCdbCdbHdbCdbCdcfdbCdbBdbJdbzdbydbKdbLdbvdbMdbMdcrdbMdbMdbMdbOdbMdbMdbMdbPdbMdbMcWwdbQdbRdbScXEdbTcWwdbMdcrdbMdbMdbUdbMdbVdbMdbMdbMdbVdbMdbMdbMdbMdbWdbMcWwdbWdbXcXFdbYadCacuacuateatOatfatSatPacJacuacuacuatTabTaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahbkQcIccZkcZkdccdcddcDdczdcgdchdcidaPcPMcUMdcjdckdcldcmdcndcodcpcTQdcpdcmdcodcqdcJdcsdctdcudcvdcwdcxdcydcxddbdcAdcBdcCddndmkdcFdcGdcHdcIddtdcKczfdbcdcMcwhdcNdbidcOcZVdcPdcQdcRcWhdcSdcTdcUcZVcWhcWhcWhcWhcXHcXocXocXocXocXocXpdcVcXHcXpdcWdcXdpPdqIdpQdcXdcWddDdcVcXHcXocXocXocXocXpdcVcXHcXocXocXocXocXpdcVddDddcddddskdtrdstddddddcZncXAddhcZncXzcXAddhcZncXzcXAddhcZncXAddiddjdBAdBCdBBddjddiddPddhcZncXzcXzcXzcXzcXAddhcZncXzcXzcXzcXzcXAddhddPddodBEdBDdBFddsabTaezacuaeVacuacuatVatUacuacuacuacuaeCabTaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahbkQcIccIccIccIccIcbkQddWdducXJddvddwcTSddxcPMcUOcVFcVEcPMcPMddyddzcWLddAddBddCdeedcsdcudcudcvdcwddEddEddFddGddHddIdcCddJddKddKddKddLddMddNddNdBGdbccRQcwhdekddQddRcZVddSddTddScWhddUddVddUcZVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadeqddXddYddZdeadebdeqaaaaaaaaaaaaaaadeddeddeddeddeddeddedaaaaaaaaaaaaaaadeWdefdegdehdeidejdeWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfbdeldemdendeodepdfbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfcderdesdetdeuddsatWatYatXauaatZaegacuaeXaubaciaeYabTabTaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahbkQcIcdevdevdewcZmdbDdbddexcZqdeydezcVNcUMcPMdcjdclcVHcSHcPMcWLcWLcVIcVJdeAdeBdeCdeDdcudeEdeFdeGdeHdeIdeJdeKdeLdeMdeNddJddKddKdeOdePdeQdeRddKdeSdbccRQcwhahyahyahycZVddSdeTddScWhddUdeUddUcZVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVaaaaaadfhdeXdeYdeZdeadfadfmaaaaaaaaaaaadeddeddeddeddeddeddeddeddedaaaaaaaaaaaadfBdfddegdfedffdfgdfBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfIdfidfjdfkdeodfldfIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfLderdesdfndfoddsabTabTabTaflaflafmaflaflabTabTabTabTaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahahycIcdfpdfqdfrcNZahycTZdfscPMcUMcWLcVIdeydftcZqdfucZqdftcZqdfvcWLcPMcPMdfwdfxdfydfzdcudcudfAaIndfCdfDdfEddbdfFdfGdfHddndfXdfJdfKdfYdfMdfYdfNdbcdbccRQcwhahyahyahyahyddSdfOddScZVddUdfPddUdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdgwdfRdfSdfTdfUdfVdfWdhgdcWaaaaaaaaadeddeddeddeddeddeddeddeddeddeddedaaaaaaaaaddcdhudfZdgadgbdgcddcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaddidgddemdgedgfdggddiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaddodghdgidgjdgkddsaahaflagBaflaudafBaueafDafEaflaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahahycIcdevdevdgldcddcDdczdgmcTSdgncWLcPMdgocTTcTSdgpcTScTScTSdgpdgpdgqcPMdgrdgsdaSdgtdcudgudgvdhzdgxdfDdgydgzdgAddIdgBdgCdgCdgCdgCdgCdgCdgCdgCdbcdgDdgEcwhcwhahyahyahydgFdgGdgHaaadgIdgJdgKdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdgLdgMdgNdgOdgPdgQdgRdfadeqaaaaaaaaadeddeddeddeddeddeddeddeddeddeddedaaaaaaaaadeWdfddgSdgTdeidfgdeWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfbdfidemdgUdgVdfldfbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfcderdgWdgjdgXddsaahaflauPaflafPafQafRaflaflaflaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahbkQcIccIccIccIccIcbkQddWdgYcXJcPMcWLcPMcPMdgZdhacWLcPMcPMdhacWLcWLdhbdhadhcdhddaSdhedcudcucyNdhEdfCdhhdhidgzdhjdfGdhkdhldhmdhndhodhpdhqdhrdhsczQczQdhtczQcwhahyahyaaaaaaaaaaaaaaaaaaaaaaaadeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdhIdfRdhvdfTdhwdhxdgRdhydfhaaaaaaaaadeddeddeddeddeddeddeddeddeddeddedaaaaaaaaadhMdhAdhBdgadhCdhDdhMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadifdhFdemdgedhGdhHdifaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadiydhJdesdhKdhLddsaahaflagAaflagfaggaggaghafEaflaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahbkQbkQahyahyahybkQbkQdiLdhNdhOdhPcVIdhQdhRdhSdhTdhUdhVdhWdhXdhYdhZdiadibdicdiddaSdiedcudcucyNdiYdfCdfDdigdgzdfFdihdgBdiidijdikdildimdindiodipcXecXediqdircwhahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVaaaaaadfmdeXddYddZdgRdfadfmaaaaaaaaadeddeddeddeddeddeddeddeddeddeddedaaaaaaaaadfBdfddgSdehdeidfgdfBaaaaaaaaadisditdiudiudiudivdiwaaaaaaaaadfIdfidemdendhGdfldfIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfLderdesdixdgXddsaahaflaflaflaflagqaflaflaflaflaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahahyahyahyahyahydjtdizdiAdiBdiCdiBdiDdiEdiCdiBdiFdiEdiCdiCdiDdiGcMNcMNdaSdiHdiIdiJdiKdjudiMdiNdiOdgzdfFdihdgBdiidijdiPdiQdiRdijdhrdiSdiTdiUdiVdiWcwhahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadiXdcWdjvdiZdjadcXdcXdcXdcXdcXdcWdjwddYdjcdjddjedcWaaaaaaaaadeddeddeddeddeddeddeddeddeddeddedaaaaaaaaaddcdjfdjgdjhdeidjiddcaaaaaaaaadjjdjkdjkdjkdjkdjkdjjaaaaaaaaaddidjldemdjmdjndjoddiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaddodjpdjqdjrdjsddsaahaahaahaflagyaggagzaflaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaaaaaaaaaahydkCdjxdbDdbDdkJdjxdkLdbDdkJdjxdkLdbDdkJdkUcOsbkQbkQahydaSdgzdgzdgzdgzdgzdjydgzdgzdgzdjzdjAdjBdjCdjCdjCdjCdjCdjCdjCdjCdjCcxxdhtcwhcwhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadeqdeXddYddZdgRdfadeqaaaaaaaaadeddeddeddeddeddeddeddeddeddeddedaaaaaaaaadeWdfddgSdehdeidfgdeWaaaaaaaaadjjdjDdjEdjkdjEdjDdjjaaaaaaaaadfbdfidemdendhGdfldfbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfcderdesdixdgXddsaahaahaahaflagyagLagzaflaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAacAacAacAacAacAacAacAacAacAacAacAacAacAacAacAacAacAacAaaadjFaaabkQcIcdjGcNZcMKcIcdjGcNZcMKcIcdjGcNZcMKcIcbkQaahdjHdjHdjIdjJdjKdjLdjMdjNdjOdjPdjQdjRdjSdjCdjTdjUdjVdjWdjXdjYdjZdjCdjCdhtcwhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadgwdfRdfSdkadfUddZdgRdebdfhaaaaaadeddeddeddeddeddeddeddeddeddeddeddeddedaaaaaadhMdejdgSdehdeidgSdhMaaaaaadisdkbdkcdkcdkddkcdkcdkbdiwaaaaaadifdhGdemdendhGdepdifaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadiyderdesdixdgXddsddsaahaahaflaflaflaflaflaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaadaadaadaaaaadaadaadaaaaadaadaadaaaaadaadaadaaaacAaaddkeaadbkQcIcdkfdkgdkhcIcddrdcYdfQcIcdkldkmdkncIcaahaahdjHdkodkpdkqdkrdksdktdkqdkudjPdkvdkwdkxdjCdkydkydkzdjXdjXdkAdkAdEbdjCdhtcwhdkYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadkDdkEdkFdkGdkHddZdkIdlEdfSdfRdkKdeddeddeddeddeddeddeddeddeddeddeddeddeddlUdkMdkNdkOdkPdehdeidfgdhMaaaaaadjjdjkdHmdHldjkdHldHndkSdjjaaaaaadifdfidemdendkTdlYdkVdkWdkXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmGdkZdladlbdlcdixdgXdldddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaadledlfdlgaaadledlfdlgaaadledlfdlgaaadledlfdlgaaaacAaadaadaaaaaacIcdlhdlidlhcIcdkjdkidkjcIcdlkdlldlkcIcaahaahdjHdlmdlndkqdlodlpdlqdlrdlsdltdludlvdlwdlxdlydlzdlAdlzdlzdlBdlzdEcdjCdhtdDadoidlFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadhIdfRdhvdkadlGdlHdlIdlJdlKdlLdlMdeddeddeddeddeddeddeddeddeddeddeddeddeddlNdlOdlPdlQdlRdlSdlTdokdkNdkMdlVdjjdlWdjkdjkdjkdjkdjkdlXdjjdoEdkWdkVdkXdlZdmadDbdmcdmddmedmfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmgdmhdmidmjdDcdixdgXdmlddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaddledmmdlgaaddledmmdlgaaddledmmdlgaaddledmmdlgaadacOaaaaadaadaaacIcdlhdmndlhcIcdkjdkkdkjcIcdlkdmpdlkcIcaahaahdjHdlmdmqdkqdlpdlpdmrdmsdmtdmudmvdmwdmxdmydmzdmAdmBdmCdmCdmDdlzdEddjCdhtczQdmFdppaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfmdeXddYddZdmHdmIdmJdmKdmLdeddeddeddeddeddeddeddeddeddeddeddeddeddmMdmNdmOdmPdmQdehdmRdmSdmTdgSdmSdkddjkdmUdmUdjkdmUdmUdjkdkddmVdhGdmWdmVdmXdendmYdmZdnadnbdncaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadnddnednfdngdnhdixdgXdniddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaadledmmdlgaaadledmmdlgaaadledmmdlgaaadledmmdlgaaaaadaaaaaaaadaadcIccIccIccIccIccIccIccIccIccIccIccIccIcaahaahdjHdkodkpdkqdlodlpdktdkqdEedjPdfFdihdnkdjCdnldnmdnndnodnpdnqdnrdnsdjCdntczQdnudppaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadiXdcWdjvdiZdjadcXdcXdcXdcXdcXdcWdnvddYddZdnwdlEdhvdfRdfTdeddeddeddeddeddeddeddeddeddeddeddeddeddokdkMdnxdkOdnydehdnzdokdnxdkMdkOdjjdjkdjkdjkdjkdjkdjkdjkdjjdlYdkWdnAdkXdnBdendnCdlYdnAdkWdkXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmGdkZdnDdlbdnEdixdgXdnFddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaadledmmdlgaaadledmmdlgaaadledmmdlgaaadledmmdlgaaaaadaaaaaaaaaaadaadaadaadaaaaaaaadaadaadaaabkQdnGdnGdnGdnGdnGdjHdjHdnHdnIdnJdnKdnLdnMdjHdjHdnNdnOdnPdjCdjCdnQdnodnRdnSdnTdnrdjCdjCdhtczQdnudppaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdnUaaaaaaaaadeqdeXdnVdnWdgRdeXdfhaaaaaadeddeddeddeddeddeddeddeddeddeddeddeddedaaaaaadhMdnXdgSdnYdnZdnXdhMaaaaaadoadjkdmUdmUdobdmUdmUdjkdoaaaaaaadifdocdoddoedhGdocdifaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadiydofdesdogdohddsddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAacAacAaadaaadledmmdlgaaadledmmdlgaaadledmmdlgaaadledmmdlgaaaaadaaaaaaaaaaaaaaddqrdojdojdojdojdnGdqLdoldnGdnGdomdomdondoodopdjHdjHdjHdjHdjHdjHdjHdjHdoqdordosdotdoudjCdjCdjCdjCdjCdjCdjCdjCdjCdhtczQdovdppaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdgwdfRdfSdkadfUddZdgRdhydfhaaaaaadeddeddeddeddeddeddeddeddeddeddeddeddedaaaaaadhMdhAdgSdehdeidowdhMaaaaaadoxdjkdjkdjkdoydjkdjkdjkdoxaaaaaadifdozdemdendhGdhHdifaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadiydhJdesdixdoAddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaadaaaaaaaaddoCaadaaaaaddoCaadaaaaaddoCaadaaaaaddoCaadaaadoDaaaaaaaaadqNdoFdoGdoHdoIdoJdoKdoLdoMdoNdoOdoPdoQdoQdoRdoSdoTdoUdoVdoWdoRdoOdoXdoYdoZdpadpbdpcdpddpedpfdpgdphdpidpjdpkdpldpmdpndhtdpodqTdpqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdprdpsdptdpudpvdpwdpxdeXdfhaaaaaadeddeddeddeddeddeddeddeddeddeddeddeddedaaaaaadhMdnXdpydpzdeidnXdhMaaaaaadpAdjkdmUdmUdjkdmUdmUdjkdpAaaaaaadifdocdemdpBdpCdocdifaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadiydofdpDdpEdgXddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaddpFdpGdpHdpIdpIdpIdpIdpIdpIdpIdpIdpIdpIdpIdpIdpIdpIdpIdpJdpGdpGdpGdpKdpLdpMdpNdpOcBhcAMdpRdpSdpTdpUdpVdpWdpXdpYdpZdqadqbdqcdqddqedoudoudqfdoudqgdoudqhdqidoudoudqjdoudqfdqkdqldqmdqndqodqpdqqcwhdqYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdhIdfRdhvdkadqsdcZdqtdlEdfSdfRdfTdeddeddeddeddeddeddeddeddeddeddeddeddeddokdkMdkNdkOdquddfdqvdokdkNdkMdkOdjjdqwdjkdjkdjkdjkdjkdqxdjjdlYdkWdkVdkXdqyddldqzdlYdkVdkWdkXaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAaaaaaadmGdkZdladlbdqBdqCdqDddsaahaahaahdqEdqEdqEdqEdqEdqEdqEaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaadaaaaaaaaddqFaadaaaaaddqFaadaaaaaddqFaadaaaaaddqFaadaaaaadaaaaaaaaadqNdoFdqGdqHcBPcBldojdnGdqJdqKdnGdnGdrxdoldqMdnGdrAdqOdqOdqPdqOdqQdqRdqQdqSdrBdqUdqVdrBdqUdqSdqWdqXdsLdnGdqZdqZdnGdnGcwhcwhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdnUaaaaaaaaadfmdeXddYddZdmHdradrbdrcdrddeddeddeddeddeddeddeddeddeddeddeddeddeddredrfdrgdrhdmQdehdmRdmSdridgSdmSdkddjkdmUdmUdjkdmUdmUdjkdkddmVdhGdrjdmVdmXdendmYdrkdrldrmdrnaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAaaadrodrpdrqdrrdnhdixdgXddsdqEdqEdqEdqEdrsdrtdrudrvdrsdqEdqEdqEdqEdqEdqEdqEdqEdqEdqEdqEdqEaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaadaaaaaaaadbCWaadaaaaadbCWaadaaaaadbCWaadaaaaadbCWaadaaadoDaaaaaaaaadqNdoFdoGdoHdoIdoJdoKdoLdoMdoNdoOdoPdoQdoQdoRdoSdoTdoUdoVdoWdoRdoOdoXdoYdoZdpadpbdpcdpddpedpfdpgdphdpidpjdpkdpldpmdpndhtdpodqTdpqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdprdpsdptdpudpvdpwdpxdeXdfhaaaaaadeddeddeddeddeddeddeddeddeddeddeddeddedaaaaaadhMdnXdpydpzdeidnXdhMaaaaaadpAdjkdmUdmUdjkdmUdmUdjkdpAaaaaaadifdocdemdpBdpCdocdifaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadiydofdpDdpEdgXddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaddpFdpGdpGdpGbCXdpGdpGdpGbCXdpGdpGdpGbCXdpGdpGdpGbCXdpGdpGdpGdpGdpGdpKdpLdpMdpNdpOcBhcAMdpRdpSdpTdpUdpVdpWdpXdpYdpZdqadqbdqcdqddqedoudoudqfdoudqgdoudqhdqidoudoudqjdoudqfdqkdqldqmdqndqodqpdqqcwhdqYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdhIdfRdhvdkadqsdcZdqtdlEdfSdfRdfTdeddeddeddeddeddeddeddeddeddeddeddeddeddokdkMdkNdkOdquddfdqvdokdkNdkMdkOdjjdqwdjkdjkdjkdjkdjkdqxdjjdlYdkWdkVdkXdqyddldqzdlYdkVdkWdkXaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAaaaaaadmGdkZdladlbdqBdqCdqDddsaahaahaahdqEdqEdqEdqEdqEdqEdqEaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaadaaaaaaaadbCWaadaaaaadbCWaadaaaaadbCWaadaaaaadbCWaadaaaaadaaaaaaaaadqNdoFdqGdqHcBPcBldojdnGdqJdqKdnGdnGdrxdoldqMdnGdrAdqOdqOdqPdqOdqQdqRdqQdqSdrBdqUdqVdrBdqUdqSdqWdqXdsLdnGdqZdqZdnGdnGcwhcwhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdnUaaaaaaaaadfmdeXddYddZdmHdradrbdrcdrddeddeddeddeddeddeddeddeddeddeddeddeddeddredrfdrgdrhdmQdehdmRdmSdridgSdmSdkddjkdmUdmUdjkdmUdmUdjkdkddmVdhGdrjdmVdmXdendmYdrkdrldrmdrnaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAaaadrodrpdrqdrrdnhdixdgXddsdqEdqEdqEdqEdrsdrtdrudrvdrsdqEdqEdqEdqEdqEdqEdqEdqEdqEdqEdqEdqEaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAacAacAaadaaddledrwdlgaaadledrwdlgaaadledrwdlgaaadledrwdlgaaaaadaaaaaaaaaaaaaaddtkdojdojdojdojdnGdrydrzdtIaaadtXdrCdrDdrEdrFdqOdrGdrHdrIdqQdrJdrKdrLdrMdrNdrOdrPdrQdrLdrRdrSdrTdnGdrUdrVdrWdtIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadiXdcWdjvdiZdjadcXdcXdcXdcXdcXdcWdjbdrXdlHdrYdrZdsadsbdscdeddeddeddeddeddeddeddeddeddeddeddeddeddsddsedsfdsgdshdlSdsidokdnxdkMdlVdjjdlWdjkdjkdjkdjkdjkdlXdjjdoEdkWdnAdkXdsjdmadDddsldsmdsndsoaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAaaadspdsqdsrdssdDedsudsvdswdBLdsydsydsydszdsAdszdsBdszdsydsxdsydsydsydsCdsDdsEdsFdsGdsHdqEdqEaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaadledrwdlgaaadledrwdlgaaadledrwdlgaaadledrwdlgaaaaadaaaaaaaaaaadaadaaaaaaaaaaaaaaadnGdsJdsKdtZaaddtXdsMdsNdsOdsPdqOdsQdsRdsSdqQdsTdsUdrLdsVdsWdsXdsYdsZdrLdtadtbdtcdnGdtddtedtfdtZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadeqdeXddYddZdtgdlEdhvdfRdkKdeddeddeddeddeddeddeddeddeddeddeddeddeddlUdkMdnxdkOdthdehdeidfgdhMaaaaaadjjdtidtjdjkdjkdjkdtjdwfdjjaaaaaadifdfidemdendtldlYdnAdkWdkXaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAaaadmGdkZdtmdtndtodtpdtqdtqdBMdtsdttdtudtvdtwdtxdtydtzdtwdtAdtBdtCdtDdtEdtBdtBdtBdtBdtFdtGdqEaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaadledrwdlgaaadledrwdlgaaadledrwdlgaaadledrwdlgaaaaadaaaaaaaaaaadaadaaaaaaaaaaaaaaadnGdsJdsKdtZaaddtXdsMdsNdsOdsPdqOdsQdsRdsSdqQdsTdsUdrLdsVdsWdsXdsYdsZdrLdtadtbdtcdnGdtddtedtfdtZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadeqdeXddYddZdtgdlEdhvdfRdkKdeddeddeddeddeddeddeddeddeddeddeddeddeddlUdkMdnxdkOdthdehdeidfgdhMaaaaaadjjdtidtjdHodHqdHpdtjdwfdjjaaaaaadifdfidemdendtldlYdnAdkWdkXaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAaaadmGdkZdtmdtndtodtpdtqdtqdBMdtsdttdtudtvdtwdtxdtydtzdtwdtAdtBdtCdtDdtEdtBdtBdtBdtBdtFdtGdqEaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaadledrwdlgaaadledrwdlgaaadledrwdlgaaadledrwdlgaaaacAaaaaaaaadaadaaaaaaaaaaaaaaaaaadnGdtHdtHdnGahydxKdoldtJdqLdoldqOdtKdtLdtMdtNdtOdtPdtQdtRdtSdtTdtUdtVdtWdxNdtYdxOduadubducdnGdnGaaddudduedueduedueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadgwdfRdfSdkadufddZdgRdugdfhaaaaaadeddeddeddeddeddeddeddeddeddeddeddeddedaaaaaadhMduhdgSdehdeiduidhMaaaaaadujdukduldumdumdumduldukdunaaaaaadifduodemdendhGdupdifaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaadiyduqdixdurddsdqEdqEdusdutduudqEdusdutduvdqEdusdqEdqEdqEdqEdqEdqEdqEdtBdtFdtBdqEaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaddledrwdlgaaddledrwdlgaaddledrwdlgaaddledrwdlgaadacAaaaaadaadaaaaaaaaaaaaaaaaaaaaaduwduxduyduwbkQduzduAduBduAduzdqOduCduDduEdqQduFduGdrLduHduIduJduIduKdrLduLduMduNduaduOduPduQduRaaaaadaadaaaaaadueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaduSduTduUduVduWduXdjddfadfmaaaaaadeddeddeddeddeddeddeddeddeddeddeddeddedaaaaaadfBdfddjgduYdeidfgdfBaaaaaaaaaaaadujdukdukdukdunaaaaaaaaaaaadfIdfidemduZdjndfldfIaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaadfLdvadvbdvcddsaahaahdqEdvddvedvfdqEdvgdvhdvidqEaahaahaahaahaahaahdvjdvjdvkdvjdvjaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOaaadledvldlgaaadledvldlgaaadledvldlgaaadledvldlgaaaaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkQdvmdvndvodvpdvmdvqdvrdvsdvtdqQdvudvvdrLdvwdvxdvydvzdvAdrLdvBdvCdvDduadvEdvFduQdvGaaaaadaadaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadhIdfRdhvdkadvHdvIdgRdvJdcWaaaaaadeddeddeddeddeddeddeddeddeddeddeddeddedaaaaaaddcdvKdgSdvLdeidjiddcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaddidjldemdvMdhGdvNddiaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaddodvOdvPdvQddsaahaahdqEdvRdvSdvTdqEdvUdvVdvWdqEaahaahaahaahaahaahdvjdvXdvYdvZdvjaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -9990,24 +9907,24 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIds
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRaaaaaaaaadyRdyRdyRdyRdyRdyRdyRaaaaaaaaadyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadzvdnGdzNbkQdzNdnGduadzwdxzdzxdzydzzdwUdzAdzBdzCdzDdzEdzFdzGdzHdzIdzJdzKdzLdzMdBwdzhdwldwXdwYdwldyudueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadBxdfTdzPdzQdfmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfBdzRdzSdokdzTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadBydkXdzVdzWdfIaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdmGdkZdzXdkZdkZdzYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaadzZaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaadyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahydBzahyahyduadAbdyTdAcdAddAedwUdAfduadAgdAhdAiduadAjdAkdAldAmdAndAodApduadwkdwldwZdwWdwldwndueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaadaadaaaaaaaaaaaadAraaaaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaadyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaaahyduadAsdwUdAtdAudAudwUdAvdAwdAxdAydAzdAwdAAdABdzbdzcdACdADdAEduadwWdwmdwXdwYdwmdwZdueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaaaadAraaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaaaaaduadwUdwUdzydAFdAFdwUdAvdAGdAHdAIdAJdAGdAAdAvdzIdAKdzKdALdAMduadwkdwldwZdwWdwldwndueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaduedueduedudaadaadaadaaddANaadaadaadaadaadacOduedueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaaaaaduaduadwUdAOdAddAddAPdAvdAQdARdASdATdAQdAUdAVdAWdAXdAYdAZduaduadytdwldwXdwYdwldyudueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaaaadaaaaadaaaaaaaaadBaaaaaadaadaaaaaaaaaaaadueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadudaaaaaaaaaduaduadBbdBcdBbdBbduaduaduadBdduaduaduaduaduadBeduaduaduaaaddwYdwmdwZdwWdwmdwXdueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaadBfdBfdBfdBfdBfaaddBaaaddBfdBfdBfdBfdBfaaadueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaduedueaaaaaaaaaaaadBgdBgdBgdBgaadaaddBhaaadBhaadaaaaadaaaaaaaadaaaaaaaaddytdwldwXdwYdwldyudueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaddBidBjdBjdBjdBjdBkdBadBldBmdBmdBmdBmdBnaaddueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaduedueaaaaaaaaadBodBpdBpdBoaaadudaaaaaaaaaaaddwkdwXdwkdwndwYdwndwkdwXdwkdwndBodBodwkdwndueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaddBqdBqdBqdBqdBqaaadBaaaadBqdBqdBqdBqdBqaaddueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdBrdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaduedueaadaaddBodBodBodBoaaddueaaaaaaaaaduddBpdBodBpdBpdBodBpdBpdBodBpdBpdBodBodBpdBpaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaaaadaaaaadaadaadaaadBaaaaaadaaaaadaaaaadaaadueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaadueaaaaaadBodBpdBpdBoaaadueaaaaaaaaaduedBodwWdwZdwWdwZdwWdwZdwWdwZdwWdwZdwWdwZdBoaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaadBfdBfdBfdBfdBfaaddBaaaddBfdBfdBfdBfdBfaaddueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaadaaddBodBodBodBoaaddueaaaaaaaaaduedBodwYdwXdwYdwXdwYdwXdwYdwXdwYdwXdwYdwXdBodudaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaddBidBjdBjdBjdBjdBkdBadBldBmdBmdBmdBmdBnaaddueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBaaadoBdoBdoBdoBdoBaaadoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadudaaaaaadwWdyudytdwZaaadueaaaaaaaaaduedBpdBodBpdBpdBodBpdBpdBodBpdBpdBpdBpdBpdBpdueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaddBqdBqdBqdBqdBqaaadBaaaddBqdBqdBqdBqdBqaaadueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBaaadoBdoBdoBdoBdoBaaadoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaduedueaaaaadaaaaaaaadaaadueaaaaaaaaaduedytdwZdytdyudwWdyudytdwZdytdyudytdyudytdyudueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAaaadqAdqAdqAdqAdqAaaadqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadudaaaaadaaaaadaaaaadaaadBaaaaaadaaaaadaadaadaaddueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaduedueduedueduedueaaddueaaaaaaaaadudduedueduedueaadduedueduedueduedueduddueduedueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAaaadqAdqAdqAdqAdqAaaadqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaadBfdBfdBfdBfdBfaaddBaaaddBfdBfdBfdBfdBfaaddueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaddBidBjdBjdBjdBjdBkdBadBldBmdBmdBmdBmdBnaaddueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIaaadsIdsIdsIdsIdsIaaadsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaddBqdBqdBqdBqdBqaaadBaaaddBqdBqdBqdBqdBqaaadueaaadBsaaaaaadBsaaaaaaaaadBsaaaaaaaaaaaaaaadBsaaaaaaaaadBsaaaaaadBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIaaadsIdsIdsIdsIdsIaaadsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadudaaaaadaaaaadaaaaadaaadBaaaaaadaaaaadaadaadaaddueaaadBsdBsdBsdBsaaaaaaaaadBsdBsdBsdBsdBsdBsdBsaaaaaaaaadBsdBsdBsdBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaadBfdBfdBfdBfdBfaaddBaaaddBfdBfdBfdBfdBfaaddueaaadBsdBsdBsdBsaaaaaadBsdBsdBsdBsdBsdBsdBsdBsdBsaaaaaadBsdBsdBsdBsaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaddBidBjdBjdBjdBjdBkdBadBldBmdBmdBmdBmdBnaaddueaaadBsdBsdBsdBsaaaaaadBsdBsdBsdBsdBsdBsdBsdBsdBsaaaaaadBsdBsdBsdBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaddBqdBqdBqdBqdBqaaadBaaaadBqdBqdBqdBqdBqaaadueaaadBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaadueaaaaaaaadaadaadaaaaaadBtaadaaaaaaaadaadaaaaaadueaaadBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaaaaaduadwUdwUdzydAFdAFdwUdAvdAGdAHdAIdAJdAGdAAdAvdzIdAKdzKdALdAMduadwkdwldwZdwWdwldwndueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaduedueduedudaadaadaadaaddAraadaadaadaadaadacOduedueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaaaaaduaduadwUdAOdAddAddAPdAvdAQdARdASdATdAQdAUdAVdAWdAXdAYdAZduaduadytdwldwXdwYdwldyudueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaaaadaaaaadaaaaaaaaadAraaaaadaadaaaaaaaaaaaadueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadudaaaaaaaaaduaduadBbdBcdBbdBbduaduaduadBdduaduaduaduaduadBeduaduaduaaaddwYdwmdwZdwWdwmdwXdueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaadBfdBfdBfdBfdBfaaddAraaddBfdBfdBfdBfdBfaaadueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaduedueaaaaaaaaaaaadBgdBgdBgdBgaadaaddBhaaadBhaadaaaaadaaaaaaaadaaaaaaaaddytdwldwXdwYdwldyudueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaddBidBjdBjdBjdBjadLaejadLdBmdBmdBmdBmdBnaaddueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaduedueaaaaaaaaadBodBpdBpdBoaaadudaaaaaaaaaaaddwkdwXdwkdwndwYdwndwkdwXdwkdwndBodBodwkdwndueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaddBqdBqdBqdBqdBqaaadAraaadBqdBqdBqdBqdBqaaddueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdBrdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaduedueaadaaddBodBodBodBoaaddueaaaaaaaaaduddBpdBodBpdBpdBodBpdBpdBodBpdBpdBodBodBpdBpaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaaaadaaaaadaadaadaaadAraaaaadaaaaadaaaaadaaadueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaadueaaaaaadBodBpdBpdBoaaadueaaaaaaaaaduedBodwWdwZdwWdwZdwWdwZdwWdwZdwWdwZdwWdwZdBoaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaadBfdBfdBfdBfdBfaaddAraaddBfdBfdBfdBfdBfaaddueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaadaaddBodBodBodBoaaddueaaaaaaaaaduedBodwYdwXdwYdwXdwYdwXdwYdwXdwYdwXdwYdwXdBodudaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaddBidBjdBjdBjdBjadLaejadLdBmdBmdBmdBmdBnaaddueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBaaadoBdoBdoBdoBdoBaaadoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadudaaaaaadwWdyudytdwZaaadueaaaaaaaaaduedBpdBodBpdBpdBodBpdBpdBodBpdBpdBpdBpdBpdBpdueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaddBqdBqdBqdBqdBqaaadAraaddBqdBqdBqdBqdBqaaadueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBaaadoBdoBdoBdoBdoBaaadoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaduedueaaaaadaaaaaaaadaaadueaaaaaaaaaduedytdwZdytdyudwWdyudytdwZdytdyudytdyudytdyudueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAaaadqAdqAdqAdqAdqAaaadqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadudaaaaadaaaaadaaaaadaaadAraaaaadaaaaadaadaadaaddueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaduedueduedueduedueaaddueaaaaaaaaadudduedueduedueaadduedueduedueduedueduddueduedueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAaaadqAdqAdqAdqAdqAaaadqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaadBfdBfdBfdBfdBfaaddAraaddBfdBfdBfdBfdBfaaddueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaddBidBjdBjdBjdBjadLaejadLdBmdBmdBmdBmdBnaaddueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIaaadsIdsIdsIdsIdsIaaadsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaddBqdBqdBqdBqdBqaaadAraaddBqdBqdBqdBqdBqaaadueaaadBsaaaaaadBsaaaaaaaaadBsaaaaaaaaaaaaaaadBsaaaaaaaaadBsaaaaaadBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIaaadsIdsIdsIdsIdsIaaadsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadudaaaaadaaaaadaaaaadaaadAraaaaadaaaaadaadaadaaddueaaadBsdBsdBsdBsaaaaaaaaadBsdBsdBsdBsdBsdBsdBsaaaaaaaaadBsdBsdBsdBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaadBfdBfdBfdBfdBfaaddAraaddBfdBfdBfdBfdBfaaddueaaadBsdBsdBsdBsaaaaaadBsdBsdBsdBsdBsdBsdBsdBsdBsaaaaaadBsdBsdBsdBsaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaddBidBjdBjdBjdBjadLaejadLdBmdBmdBmdBmdBnaaddueaaadBsdBsdBsdBsaaaaaadBsdBsdBsdBsdBsdBsdBsdBsdBsaaaaaadBsdBsdBsdBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaddBqdBqdBqdBqdBqaaadAraaadBqdBqdBqdBqdBqaaadueaaadBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaadueaaaaaaaadaadaadaaaaaadAraadaaaaaaaadaadaaaaaadueaaadBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueduedueduedueaaaaaaaaadAraaaaaaaaadueduedueduddueaaadBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaddBuaaddueaaaaaaaaaaaaaaaaaaaaadBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadBvdBvdBvdBvdBvdBvdBvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaaaadaaadueaaaaaaaaaaaaaaaaaaaaadBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/maps/polaris-2.dmm b/maps/polaris-2.dmm
index 9a96880e0b..91f9006b6b 100644
--- a/maps/polaris-2.dmm
+++ b/maps/polaris-2.dmm
@@ -432,7 +432,7 @@
"ip" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1; name = "escapeshuttle_leave"; teleport_x = 25; teleport_x_offset = 245; teleport_y = 25; teleport_y_offset = 245; teleport_z = 6; teleport_z_offset = 6},/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1; name = "escapeshuttle_leave"; teleport_x = 25; teleport_x_offset = 245; teleport_y = 25; teleport_y_offset = 245; teleport_z = 6; teleport_z_offset = 6},/turf/space/transit/north/shuttlespace_ns12,/area/space)
"iq" = (/turf/space/transit/north/shuttlespace_ns12,/area/syndicate_station/transit)
"ir" = (/turf/space/transit/north/shuttlespace_ns15,/area/syndicate_station/transit)
-"is" = (/obj/machinery/sleeper{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
+"is" = (/obj/structure/table/standard,/obj/machinery/microwave,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"it" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1; direction = 2; name = "thrower_throwdown"; tiles = 0},/turf/space,/area/space)
"iu" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/syndicate_mothership/elite_squad)
"iv" = (/turf/space/transit/north/shuttlespace_ns3,/area/skipjack_station/transit)
@@ -530,7 +530,7 @@
"kj" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows2"; dir = 1},/area/syndicate_mothership)
"kk" = (/obj/structure/sign/double/map/left{pixel_y = 32},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"kl" = (/obj/structure/sign/double/map/right{pixel_y = 32},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
-"km" = (/obj/structure/table/standard,/obj/machinery/microwave,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
+"km" = (/obj/machinery/teleport/station,/turf/simulated/floor/plating,/area/syndicate_mothership{name = "\improper Ninja Base"})
"kn" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"ko" = (/obj/structure/sink/kitchen{pixel_y = 28},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"kp" = (/turf/space/transit/north/shuttlespace_ns11,/area/shuttle/escape_pod6/transit)
@@ -620,8 +620,8 @@
"lV" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_r"},/turf/space,/area/syndicate_mothership)
"lW" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/plating,/area/syndicate_mothership{name = "\improper Ninja Base"})
"lX" = (/obj/machinery/computer/teleporter,/turf/simulated/floor/plating,/area/syndicate_mothership{name = "\improper Ninja Base"})
-"lY" = (/obj/machinery/teleport/station,/turf/simulated/floor/plating,/area/syndicate_mothership{name = "\improper Ninja Base"})
-"lZ" = (/obj/machinery/teleport/hub,/turf/simulated/floor/plating,/area/syndicate_mothership{name = "\improper Ninja Base"})
+"lY" = (/obj/machinery/teleport/hub,/turf/simulated/floor/plating,/area/syndicate_mothership{name = "\improper Ninja Base"})
+"lZ" = (/obj/machinery/teleport/hub,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"ma" = (/turf/unsimulated/wall,/area)
"mb" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/airless,/area/syndicate_mothership{name = "\improper Ninja Base"})
"mc" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1; direction = 2; name = "thrower_throwdown"; tiles = 0},/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1; name = "escapeshuttle_leave"; teleport_x = 25; teleport_x_offset = 245; teleport_y = 25; teleport_y_offset = 245; teleport_z = 6; teleport_z_offset = 6},/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1; name = "escapeshuttle_leave"; teleport_x = 25; teleport_x_offset = 245; teleport_y = 25; teleport_y_offset = 245; teleport_z = 6; teleport_z_offset = 6},/turf/space,/area/space)
@@ -647,7 +647,7 @@
"mw" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table/rack,/obj/item/weapon/gun/projectile/automatic/wt550,/obj/item/weapon/gun/projectile/automatic/wt550,/obj/item/weapon/gun/projectile/automatic/wt550,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"mx" = (/obj/structure/table/rack,/obj/item/ammo_magazine/mc9mmt,/obj/item/ammo_magazine/mc9mmt,/obj/item/ammo_magazine/mc9mmt,/obj/item/ammo_magazine/mc9mmt,/obj/item/ammo_magazine/mc9mmt,/obj/item/ammo_magazine/mc9mmt,/obj/item/ammo_magazine/mc9mmt,/obj/item/ammo_magazine/mc9mmt,/obj/item/ammo_magazine/mc9mmt,/obj/item/ammo_magazine/mc9mmt/rubber,/obj/item/ammo_magazine/mc9mmt/rubber,/obj/item/ammo_magazine/mc9mmt/rubber,/obj/item/ammo_magazine/mc9mmt/rubber,/obj/item/ammo_magazine/mc9mmt/rubber,/obj/item/ammo_magazine/mc9mmt/rubber,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"my" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/gun/launcher/grenade,/obj/item/weapon/gun/launcher/grenade,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
-"mz" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/flashbangs,/obj/item/weapon/storage/box/flashbangs,/obj/item/weapon/storage/box/emps{pixel_x = 4; pixel_y = 4},/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/grenade/smokebomb,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/storage/box/frags,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"mz" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/flashbangs,/obj/item/weapon/storage/box/flashbangs,/obj/item/weapon/storage/box/emps{pixel_x = 4; pixel_y = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/storage/box/frags,/obj/item/weapon/storage/box/smokes,/obj/item/weapon/storage/box/smokes,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"mA" = (/obj/machinery/vending/security,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"mB" = (/turf/simulated/shuttle/wall{dir = 8; icon_state = "wall3_t"},/area/centcom/specops)
"mC" = (/obj/structure/sign/securearea,/turf/simulated/shuttle/wall{dir = 9; icon_state = "wall3_wall"; tag = "icon-swall (NORTHWEST)"},/area/centcom/specops)
@@ -655,14 +655,14 @@
"mE" = (/obj/structure/table/rack,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"mF" = (/obj/structure/table/rack,/obj/item/weapon/gun/projectile/automatic/z8,/obj/item/weapon/gun/projectile/automatic/z8,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"mG" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/sniperrifle,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
-"mH" = (/obj/structure/table/rack,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"mH" = (/obj/structure/table/rack,/obj/item/ammo_magazine/p90,/obj/item/ammo_magazine/p90,/obj/item/ammo_magazine/p90,/obj/item/ammo_magazine/p90,/obj/item/weapon/gun/projectile/automatic/p90,/obj/item/weapon/gun/projectile/automatic/p90,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"mI" = (/obj/structure/table/rack,/obj/item/ammo_magazine/a762,/obj/item/ammo_magazine/a762,/obj/item/ammo_magazine/a762,/obj/item/ammo_magazine/a762,/obj/item/weapon/gun/projectile/automatic/l6_saw,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"mJ" = (/obj/structure/table/rack,/obj/item/rig_module/device/rcd,/obj/item/rig_module/device/rcd,/obj/item/rig_module/device/plasmacutter,/obj/item/rig_module/device/plasmacutter,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"mK" = (/obj/structure/table/rack,/obj/item/rig_module/chem_dispenser/combat,/obj/item/rig_module/chem_dispenser/combat,/obj/item/rig_module/chem_dispenser/injector,/obj/item/rig_module/chem_dispenser/injector,/obj/item/rig_module/device/healthscanner,/obj/item/rig_module/device/healthscanner,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"mL" = (/obj/structure/table/rack,/obj/item/rig_module/mounted/egun,/obj/item/rig_module/mounted/egun,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"mM" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
"mN" = (/obj/structure/closet/crate,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/weapon/storage/box,/obj/item/weapon/storage/box,/obj/item/weapon/storage/box,/obj/item/weapon/storage/box,/obj/item/weapon/storage/box,/obj/item/weapon/storage/box,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
-"mO" = (/obj/machinery/autolathe{desc = "Your typical Autolathe. It appears to have much more options than your regular one, however..."; hacked = 1; name = "Unlocked Autolathe"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"mO" = (/obj/machinery/teleport/station,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"mP" = (/obj/structure/table/reinforced,/obj/item/device/megaphone,/obj/item/weapon/storage/box/trackimp,/obj/item/weapon/storage/box/cdeathalarm_kit,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"mQ" = (/obj/structure/table/rack,/obj/item/clothing/suit/armor/vest/ert/command,/obj/item/clothing/head/helmet/ert/command,/obj/item/weapon/storage/backpack/ert/commander,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"mR" = (/obj/structure/table/rack,/obj/item/clothing/accessory/holster/waist,/obj/item/clothing/accessory/holster/waist,/obj/item/clothing/accessory/holster/waist,/obj/item/clothing/accessory/holster/waist,/obj/item/clothing/accessory/holster/waist,/obj/item/clothing/accessory/holster/waist,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
@@ -681,12 +681,12 @@
"ne" = (/obj/structure/table/rack,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"nf" = (/obj/machinery/deployable/barrier,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"ng" = (/obj/structure/table/reinforced,/obj/item/device/pda/ert,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
-"nh" = (/obj/machinery/door/airlock/centcom{name = "Special Operations"; opacity = 1; req_access = list(103)},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"nh" = (/obj/effect/floor_decal/corner/green{dir = 6},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"ni" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/specops)
"nj" = (/turf/unsimulated/wall{icon = 'icons/misc/title.dmi'; icon_state = "title"},/area)
"nk" = (/turf/unsimulated/wall,/area/centcom/specops)
"nl" = (/obj/machinery/mech_recharger,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
-"nm" = (/obj/mecha/combat/gygax/dark,/obj/machinery/camera/network/ert{c_tag = "Assault Armor North"},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
+"nm" = (/obj/structure/table/steel_reinforced,/obj/item/clothing/mask/balaclava/tactical,/obj/item/clothing/mask/balaclava,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_mothership{name = "\improper Ninja Base"})
"nn" = (/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
"no" = (/obj/item/device/radio/intercom{broadcasting = 1; dir = 1; frequency = 1441; listening = 0; name = "Spec Ops Intercom"; pixel_y = 28},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
"np" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/flashshells,/obj/item/weapon/storage/box/flashshells,/obj/item/weapon/storage/box/stunshells,/obj/item/weapon/storage/box/stunshells,/obj/item/weapon/storage/box/beanbags,/obj/item/weapon/storage/box/beanbags,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
@@ -705,7 +705,7 @@
"nC" = (/obj/structure/lattice,/obj/structure/grille,/turf/space,/area/space)
"nD" = (/obj/effect/landmark{name = "Marauder Exit"},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
"nE" = (/obj/machinery/door/blast/regular{icon_state = "pdoor1"; id = "ASSAULT3"; name = "Launch Bay #3"; p_open = 0},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
-"nF" = (/obj/machinery/mass_driver{dir = 8; id = "ASSAULT3"; name = "gravpult"},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
+"nF" = (/obj/machinery/autolathe{desc = "Your typical Autolathe. It appears to have much more options than your regular one, however..."; hacked = 1; name = "Unlocked Autolathe"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"nG" = (/obj/structure/table/reinforced,/obj/item/mecha_parts/mecha_equipment/weapon/energy/ion,/obj/item/mecha_parts/mecha_equipment/weapon/energy/taser,/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster,/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
"nH" = (/obj/structure/table/rack,/obj/item/taperoll/police,/obj/item/taperoll/police,/obj/item/taperoll/police,/obj/item/taperoll/police,/obj/item/taperoll/police,/obj/item/taperoll/police,/obj/item/device/flash,/obj/item/device/flash,/obj/item/device/flash,/obj/item/device/flash,/obj/item/device/flash,/obj/item/device/flash,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"nI" = (/turf/simulated/shuttle/wall{dir = 9; icon_state = "wall3_wall"; tag = "icon-swall (NORTHWEST)"},/area/centcom/specops)
@@ -722,7 +722,7 @@
"nT" = (/obj/effect/floor_decal/corner/yellow{dir = 5},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"nU" = (/obj/structure/table/rack,/obj/item/clothing/accessory/holster/hip,/obj/item/clothing/accessory/holster/hip,/obj/item/clothing/accessory/holster/hip,/obj/item/clothing/accessory/holster/hip,/obj/item/clothing/accessory/holster/hip,/obj/item/clothing/accessory/holster/hip,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"nV" = (/obj/structure/table/rack,/obj/item/clothing/accessory/holster/armpit,/obj/item/clothing/accessory/holster/armpit,/obj/item/clothing/accessory/holster/armpit,/obj/item/clothing/accessory/holster/armpit,/obj/item/clothing/accessory/holster/armpit,/obj/item/clothing/accessory/holster/armpit,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
-"nW" = (/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = 32},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"nW" = (/obj/machinery/mass_driver{dir = 8; id = "ASSAULT3"; name = "gravpult"},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
"nX" = (/obj/structure/table/reinforced,/obj/item/weapon/crowbar,/obj/item/weapon/screwdriver,/obj/item/weapon/wrench,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"nY" = (/obj/machinery/porta_turret{anchored = 0; check_records = 0; enabled = 0; req_one_access = list(103); use_power = 0},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"nZ" = (/obj/machinery/vending/snack{name = "hacked Getmore Chocolate Corp"; prices = list()},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
@@ -731,11 +731,11 @@
"oc" = (/obj/structure/urinal{pixel_y = 32},/obj/structure/window/reinforced/tinted{dir = 4; icon_state = "twindow"},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/specops)
"od" = (/obj/structure/urinal{pixel_y = 32},/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/specops)
"oe" = (/obj/item/weapon/bikehorn/rubberducky,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/specops)
-"of" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp{pixel_x = 4; pixel_y = 8},/obj/item/clothing/glasses/regular,/turf/unsimulated/floor{icon_state = "lino"},/area/syndicate_mothership)
+"of" = (/obj/structure/table/reinforced,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"og" = (/obj/structure/table/standard,/obj/item/device/radio/headset/syndicate/alt,/obj/item/device/radio/headset/syndicate/alt,/obj/item/device/radio/headset/syndicate/alt,/obj/item/device/radio/headset/syndicate/alt,/turf/unsimulated/floor{icon_state = "lino"},/area/syndicate_mothership)
"oh" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 8},/obj/item/weapon/pen{pixel_y = 4},/turf/unsimulated/floor{icon_state = "lino"},/area/syndicate_mothership)
"oi" = (/obj/mecha/medical/odysseus/loaded,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
-"oj" = (/obj/machinery/recharge_station,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
+"oj" = (/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = 32},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"ok" = (/obj/structure/table/rack,/obj/item/ammo_casing/rocket,/obj/item/ammo_casing/rocket,/obj/item/ammo_casing/rocket,/obj/item/ammo_casing/rocket,/obj/item/ammo_casing/rocket,/obj/item/ammo_casing/rocket,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"ol" = (/obj/structure/table/rack,/obj/item/weapon/gun/launcher/rocket,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"om" = (/obj/structure/table/rack,/obj/item/weapon/rig/ert/assetprotection,/obj/item/weapon/rig/ert/assetprotection,/obj/item/weapon/rig/ert/assetprotection,/obj/item/weapon/rig/ert/assetprotection,/obj/item/weapon/rig/ert/assetprotection,/obj/item/weapon/rig/ert/assetprotection,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
@@ -759,8 +759,8 @@
"oE" = (/obj/effect/landmark{name = "Syndicate-Spawn"},/turf/unsimulated/floor{icon_state = "lino"},/area/syndicate_mothership)
"oF" = (/turf/unsimulated/floor{icon_state = "lino"},/area/syndicate_mothership)
"oG" = (/obj/machinery/door/blast/regular{icon_state = "pdoor1"; id = "ASSAULT2"; name = "Launch Bay #2"; p_open = 0},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
-"oH" = (/obj/machinery/mass_driver{dir = 8; id = "ASSAULT2"; name = "gravpult"},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
-"oI" = (/obj/structure/table/reinforced,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"oH" = (/obj/machinery/recharge_station,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
+"oI" = (/obj/structure/undies_wardrobe,/turf/unsimulated/floor{icon_state = "lino"},/area/syndicate_mothership)
"oJ" = (/obj/item/weapon/stool/padded,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
"oK" = (/obj/machinery/door/airlock,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/specops)
"oL" = (/obj/mecha/working/ripley/firefighter,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
@@ -773,7 +773,7 @@
"oS" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/donut,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"oT" = (/obj/structure/bed/chair{dir = 8},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"oU" = (/obj/machinery/door/blast/regular{icon_state = "pdoor1"; id = "ASSAULT1"; name = "Launch Bay #1"; p_open = 0},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
-"oV" = (/obj/machinery/mass_driver{dir = 8; id = "ASSAULT1"; name = "gravpult"},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
+"oV" = (/obj/machinery/mass_driver{dir = 8; id = "ASSAULT2"; name = "gravpult"},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
"oW" = (/obj/structure/sign/securearea{name = "ENGINEERING ACCESS"; pixel_y = -32},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"oX" = (/obj/structure/sign/redcross{pixel_y = -32},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"oY" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
@@ -783,10 +783,10 @@
"pc" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{pixel_x = -28},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/specops)
"pd" = (/obj/machinery/door/airlock{name = "Unit 1"},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/specops)
"pe" = (/obj/machinery/door/airlock{name = "Unit 2"},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/specops)
-"pf" = (/obj/item/device/pda/syndicate,/turf/unsimulated/floor{icon_state = "lino"},/area/syndicate_mothership)
+"pf" = (/obj/structure/table/standard,/obj/item/device/pda/syndicate,/turf/unsimulated/floor{icon_state = "lino"},/area/syndicate_mothership)
"pg" = (/obj/mecha/working/hoverpod,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
"ph" = (/obj/item/mecha_parts/mecha_equipment/tool/sleeper,/obj/item/mecha_parts/mecha_equipment/tool/sleeper,/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun,/obj/structure/table/steel_reinforced,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
-"pi" = (/obj/machinery/door/airlock/centcom{name = "Special Operations"; opacity = 1; req_access = list(103)},/obj/effect/floor_decal/corner/blue{dir = 9},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"pi" = (/obj/effect/floor_decal/corner/blue{dir = 9},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"pj" = (/obj/structure/table/reinforced,/obj/item/weapon/stamp/centcomm,/obj/item/weapon/pen,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"pk" = (/obj/structure/table/reinforced,/obj/item/device/paicard,/obj/item/device/paicard,/obj/item/device/paicard,/obj/item/device/paicard,/obj/item/device/paicard,/obj/item/device/paicard,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"pl" = (/obj/structure/table/reinforced,/obj/item/weapon/cell/high,/obj/item/weapon/cell/high,/obj/item/weapon/cell/high,/obj/item/weapon/cell/high,/obj/item/weapon/cell/high,/obj/item/weapon/cell/high,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
@@ -794,7 +794,7 @@
"pn" = (/obj/machinery/vending/cola{name = "hacked Robust Softdrinks"; prices = list()},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
"po" = (/obj/structure/toilet{dir = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/specops)
"pp" = (/obj/machinery/door/blast/regular{icon_state = "pdoor1"; id = "ASSAULT0"; name = "Launch Bay #0"; p_open = 0},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
-"pq" = (/obj/machinery/mass_driver{dir = 8; id = "ASSAULT0"; name = "gravpult"},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
+"pq" = (/obj/machinery/mass_driver{dir = 8; id = "ASSAULT1"; name = "gravpult"},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
"pr" = (/obj/item/mecha_parts/mecha_equipment/teleporter,/obj/item/mecha_parts/mecha_tracking,/obj/item/mecha_parts/mecha_tracking,/obj/item/mecha_parts/mecha_tracking,/obj/item/mecha_parts/mecha_tracking,/obj/structure/table/steel_reinforced,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
"ps" = (/obj/machinery/vending/assist,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"pt" = (/obj/structure/table/rack,/obj/item/clothing/suit/armor/vest/ert/engineer,/obj/item/clothing/suit/armor/vest/ert/engineer,/obj/item/clothing/suit/armor/vest/ert/engineer,/obj/item/clothing/suit/armor/vest/ert/engineer,/obj/item/clothing/head/helmet/ert/engineer,/obj/item/clothing/head/helmet/ert/engineer,/obj/item/clothing/head/helmet/ert/engineer,/obj/item/clothing/head/helmet/ert/engineer,/obj/item/weapon/storage/backpack/ert/engineer,/obj/item/weapon/storage/backpack/ert/engineer,/obj/item/weapon/storage/backpack/ert/engineer,/obj/item/weapon/storage/backpack/ert/engineer,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
@@ -805,8 +805,8 @@
"py" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/autoinjectors,/obj/item/weapon/storage/box/beakers,/obj/item/weapon/storage/box/gloves,/obj/item/weapon/storage/box/pillbottles,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/item/weapon/reagent_containers/glass/beaker/large,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"pz" = (/obj/machinery/chemical_dispenser/ert,/obj/item/weapon/reagent_containers/glass/beaker/large,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"pA" = (/obj/machinery/chem_master,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
-"pB" = (/obj/structure/table/rack,/obj/item/weapon/rig/ert/medical,/obj/item/clothing/accessory/storage/black_vest,/obj/item/weapon/rig/ert/medical,/obj/item/clothing/accessory/storage/black_vest,/obj/item/weapon/rig/ert/medical,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
-"pC" = (/obj/structure/table/reinforced,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"pB" = (/obj/structure/table/rack,/obj/item/weapon/rig/ert/medical,/obj/item/weapon/rig/ert/medical,/obj/item/weapon/rig/ert/medical,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"pC" = (/obj/structure/table/reinforced,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/effect/floor_decal/industrial/outline/blue,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"pD" = (/turf/simulated/shuttle/wall{icon_state = "wall3_wall15"},/area/centcom/specops)
"pE" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/syndicate_mothership)
"pF" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/syndicate_mothership)
@@ -817,15 +817,15 @@
"pK" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/stunrevolver,/obj/item/weapon/gun/energy/stunrevolver,/obj/item/device/flash,/obj/item/device/flash,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"pL" = (/obj/item/weapon/stool/padded,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"pM" = (/obj/structure/table/rack,/obj/item/clothing/suit/armor/vest/ert/medical,/obj/item/clothing/suit/armor/vest/ert/medical,/obj/item/clothing/suit/armor/vest/ert/medical,/obj/item/clothing/suit/armor/vest/ert/medical,/obj/item/clothing/head/helmet/ert/medical,/obj/item/clothing/head/helmet/ert/medical,/obj/item/clothing/head/helmet/ert/medical,/obj/item/clothing/head/helmet/ert/medical,/obj/item/weapon/storage/backpack/ert/medical,/obj/item/weapon/storage/backpack/ert/medical,/obj/item/weapon/storage/backpack/ert/medical,/obj/item/weapon/storage/backpack/ert/medical,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
-"pN" = (/obj/structure/table/rack,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
-"pO" = (/obj/structure/table/rack,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
-"pP" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"pN" = (/obj/structure/table/rack,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/effect/floor_decal/industrial/outline/blue,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"pO" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/effect/floor_decal/industrial/outline/blue,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"pP" = (/obj/structure/table/rack,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/effect/floor_decal/industrial/outline/blue,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"pQ" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "specops_centcom_dock"; name = "docking port controller"; pixel_x = 0; pixel_y = -25; req_one_access = list(103); tag_door = "specops_centcom_dock_door"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"pR" = (/obj/structure/closet/secure_closet/bar{req_access = list(25)},/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/obj/effect/floor_decal/corner/red/diagonal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/specops)
"pS" = (/obj/structure/reagent_dispensers/beerkeg,/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/obj/effect/floor_decal/corner/red/diagonal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/specops)
"pT" = (/obj/machinery/vending/boozeomat,/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/obj/effect/floor_decal/corner/red/diagonal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/specops)
"pU" = (/obj/structure/table/marble,/obj/machinery/chemical_dispenser/bar_soft/full,/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/obj/effect/floor_decal/corner/red/diagonal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/specops)
-"pV" = (/obj/structure/table/marble,/obj/item/weapon/storage/box/drinkingglasses,/obj/item/weapon/storage/box/drinkingglasses,/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/obj/effect/floor_decal/corner/red/diagonal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/specops)
+"pV" = (/obj/structure/table/marble,/obj/item/weapon/storage/box/glasses/square,/obj/item/weapon/storage/box/glasses/square,/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/obj/effect/floor_decal/corner/red/diagonal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/specops)
"pW" = (/obj/structure/kitchenspike,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/specops)
"pX" = (/obj/machinery/gibber,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/specops)
"pY" = (/turf/space,/turf/simulated/shuttle/wall{dir = 8; icon_state = "diagonalWall3"},/area/syndicate_station/start)
@@ -839,7 +839,7 @@
"qg" = (/obj/structure/sign/double/map/right{pixel_y = 32},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/syndicate_mothership)
"qh" = (/obj/machinery/vending/snack{name = "hacked Getmore Chocolate Corp"; prices = list()},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/syndicate_mothership)
"qi" = (/obj/structure/table/standard,/obj/machinery/chemical_dispenser/bar_soft/full,/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership)
-"qj" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/drinkingglasses{pixel_x = 1; pixel_y = 4},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership)
+"qj" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/glasses/square{pixel_x = 1; pixel_y = 4},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership)
"qk" = (/obj/structure/sink/kitchen{pixel_y = 28},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership)
"ql" = (/obj/structure/closet/secure_closet/freezer/fridge,/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership)
"qm" = (/obj/effect/landmark{name = "Nuclear-Code"},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/syndicate_mothership)
@@ -858,15 +858,15 @@
"qz" = (/obj/structure/closet/secure_closet/freezer/meat,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/specops)
"qA" = (/obj/machinery/chem_master/condimaster{name = "CondiMaster Neo"; pixel_x = -5},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/specops)
"qB" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/syndicate_station/start)
-"qC" = (/obj/structure/table/standard,/obj/machinery/recharger,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"qC" = (/obj/machinery/mass_driver{dir = 8; id = "ASSAULT0"; name = "gravpult"},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
"qD" = (/obj/machinery/computer/security/nuclear,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"qE" = (/obj/machinery/computer/shuttle_control/multi/syndicate,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
-"qF" = (/obj/structure/computerframe,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"qF" = (/obj/structure/frame{frame_type = "computer"; icon_state = "computer_0"},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"qG" = (/obj/structure/table/standard,/obj/machinery/button/remote/blast_door{id = "syndieshutters"; name = "remote shutter control"; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"qH" = (/obj/structure/bed/chair/comfy/black,/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/syndicate_mothership)
"qI" = (/obj/machinery/door/airlock/centcom{name = "Kitchen"; opacity = 1; req_access = list(150)},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership)
"qJ" = (/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership)
-"qK" = (/obj/structure/table/reinforced,/obj/machinery/microwave{pixel_x = -1; pixel_y = 8},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership)
+"qK" = (/obj/structure/table/standard,/obj/machinery/recharger,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"qL" = (/obj/machinery/vending/engineering,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"qM" = (/obj/item/weapon/circuitboard/aiupload,/obj/item/weapon/circuitboard/borgupload,/obj/item/weapon/circuitboard/smes,/obj/item/weapon/aiModule/nanotrasen,/obj/item/weapon/aiModule/reset,/obj/item/weapon/aiModule/freeformcore,/obj/item/weapon/aiModule/protectStation,/obj/item/weapon/aiModule/quarantine,/obj/item/weapon/aiModule/paladin,/obj/item/weapon/aiModule/robocop,/obj/item/weapon/aiModule/safeguard,/obj/structure/table/steel_reinforced,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"qN" = (/obj/item/clothing/glasses/welding/superior,/obj/item/clothing/glasses/welding/superior,/obj/item/clothing/glasses/welding/superior,/obj/item/clothing/glasses/welding/superior,/obj/item/clothing/glasses/welding/superior,/obj/structure/table/steel_reinforced,/obj/item/clothing/glasses/welding/superior,/obj/item/weapon/grenade/chem_grenade/metalfoam,/obj/item/weapon/grenade/chem_grenade/metalfoam,/obj/item/weapon/grenade/chem_grenade/metalfoam,/obj/item/weapon/grenade/chem_grenade/metalfoam,/obj/item/weapon/grenade/chem_grenade/metalfoam,/obj/item/weapon/grenade/chem_grenade/metalfoam,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
@@ -882,7 +882,7 @@
"qX" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/drinks/shaker,/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/obj/effect/floor_decal/corner/red/diagonal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/specops)
"qY" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/obj/effect/floor_decal/corner/red/diagonal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/specops)
"qZ" = (/obj/machinery/door/airlock/freezer,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/specops)
-"ra" = (/obj/structure/table/standard,/obj/machinery/microwave{pixel_x = -1; pixel_y = 2},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"ra" = (/obj/structure/table/reinforced,/obj/machinery/microwave{pixel_x = -1; pixel_y = 8},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership)
"rb" = (/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"rc" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"rd" = (/obj/structure/bed/chair/comfy/black{dir = 4},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/syndicate_mothership)
@@ -904,13 +904,13 @@
"rt" = (/obj/structure/bed/chair,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom)
"ru" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "specops_shuttle_port"; name = "port docking hatch controller"; pixel_x = 0; pixel_y = 25; tag_door = "specops_shuttle_port_hatch"},/obj/structure/bed/chair,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom)
"rv" = (/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom)
-"rw" = (/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = 32},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom)
+"rw" = (/obj/structure/table/standard,/obj/machinery/microwave{pixel_x = -1; pixel_y = 2},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"rx" = (/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = 32},/obj/machinery/vending/wallmed1{layer = 3.3; name = "Emergency NanoMed"; pixel_x = 28; pixel_y = 0},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom)
"ry" = (/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/obj/effect/floor_decal/corner/red/diagonal,/obj/machinery/door/airlock/glass,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/specops)
"rz" = (/obj/item/weapon/stool/padded,/obj/effect/floor_decal/corner/red/diagonal,/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/specops)
"rA" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets{pixel_x = 2; pixel_y = 3},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"rB" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
-"rC" = (/obj/structure/computerframe,/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"rC" = (/obj/structure/frame{frame_type = "computer"; icon_state = "computer_0"},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"rD" = (/obj/structure/bed/chair/comfy/black{dir = 1},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/syndicate_mothership)
"rE" = (/obj/machinery/vending/cola{name = "hacked Robust Softdrinks"; prices = list()},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/syndicate_mothership)
"rF" = (/obj/structure/closet/secure_closet/freezer/kitchen{req_access = list(150)},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership)
@@ -947,7 +947,7 @@
"sk" = (/obj/machinery/shower{pixel_y = 32},/obj/structure/window/basic{dir = 8},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership)
"sl" = (/obj/machinery/shower{pixel_y = 32},/obj/item/weapon/soap/syndie,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership)
"sm" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
-"sn" = (/obj/structure/table/rack,/obj/item/clothing/suit/storage/vest/heavy/merc{pixel_x = 2; pixel_y = 2},/obj/item/clothing/suit/storage/vest/heavy/merc{pixel_x = -2; pixel_y = -2},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
+"sn" = (/obj/structure/table/rack,/obj/item/clothing/mask/balaclava/tactical,/obj/item/clothing/mask/balaclava/tactical,/obj/item/clothing/mask/balaclava/tactical,/obj/item/clothing/mask/balaclava/tactical,/obj/item/clothing/mask/balaclava/tactical,/obj/item/clothing/mask/balaclava/tactical,/obj/item/clothing/mask/balaclava,/obj/item/clothing/mask/balaclava,/obj/item/clothing/mask/balaclava,/obj/item/clothing/mask/balaclava,/obj/item/clothing/mask/balaclava,/obj/item/clothing/mask/balaclava,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"so" = (/obj/machinery/shieldgen,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"sp" = (/obj/machinery/portable_atmospherics/powered/scrubber,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"sq" = (/obj/machinery/portable_atmospherics/powered/pump/filled,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
@@ -965,9 +965,9 @@
"sC" = (/obj/machinery/vending/dinnerware,/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/obj/effect/floor_decal/corner/red/diagonal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/specops)
"sD" = (/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/obj/effect/floor_decal/corner/red/diagonal,/obj/machinery/computer/arcade,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/specops)
"sE" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/food/condiment/enzyme,/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/obj/effect/floor_decal/corner/red/diagonal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/specops)
-"sF" = (/obj/structure/table/standard,/obj/machinery/microwave{pixel_x = -3; pixel_y = 6},/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/obj/effect/floor_decal/corner/red/diagonal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/specops)
+"sF" = (/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = 32},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom)
"sG" = (/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/command)
-"sH" = (/obj/structure/closet/secure_closet/medical_wall{pixel_x = -32; pixel_y = 0; req_access = list(150)},/obj/item/stack/medical/splint,/obj/item/stack/medical/ointment,/obj/item/stack/medical/ointment,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/bruise_pack,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"sH" = (/obj/structure/table/rack,/obj/item/clothing/suit/storage/vest/heavy/merc{pixel_x = 2; pixel_y = 2},/obj/item/clothing/suit/storage/vest/heavy/merc{pixel_x = -2; pixel_y = -2},/obj/item/clothing/suit/storage/vest/heavy/merc,/obj/item/clothing/suit/storage/vest/heavy/merc,/obj/item/clothing/suit/storage/vest/heavy/merc,/obj/item/clothing/suit/storage/vest/heavy/merc,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"sI" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"sJ" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"sK" = (/obj/structure/closet/hydrant{pixel_y = 32},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
@@ -979,7 +979,7 @@
"sQ" = (/obj/machinery/shield_capacitor,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"sR" = (/turf/unsimulated/wall{desc = "That looks like it doesn't open easily."; dir = 8; icon = 'icons/obj/doors/rapid_pdoor.dmi'; icon_state = "pdoor1"; name = "Shuttle Bay Blast Door"},/area/centcom/specops)
"sS" = (/obj/machinery/door/blast/regular{icon_state = "pdoor1"; id = "CREED"; name = "Ready Room"; p_open = 0},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
-"sT" = (/obj/machinery/recharger/wallcharger{pixel_x = -25},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"sT" = (/obj/structure/table/standard,/obj/machinery/microwave{pixel_x = -3; pixel_y = 6},/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/obj/effect/floor_decal/corner/red/diagonal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/specops)
"sU" = (/obj/structure/bed/chair{dir = 8},/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"sV" = (/obj/structure/closet,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"sW" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/syndicate_mothership)
@@ -993,17 +993,17 @@
"te" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/shuttle/administration/centcom)
"tf" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "admin_shuttle_hatch"; locked = 1; name = "Shuttle Hatch"; req_access = list(13)},/turf/simulated/floor/plating,/area/shuttle/administration/centcom)
"tg" = (/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/turf/simulated/shuttle/wall{dir = 1; icon_state = "diagonalWall3"},/area/shuttle/administration/centcom)
-"th" = (/obj/machinery/recharger/wallcharger{pixel_x = -25},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"th" = (/obj/machinery/recharger/wallcharger{pixel_x = -25},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"ti" = (/obj/structure/closet,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"tj" = (/obj/structure/lattice,/obj/structure/grille,/obj/structure/lattice,/turf/space,/area/space)
-"tk" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/ionrifle,/obj/machinery/recharger/wallcharger{pixel_x = 5; pixel_y = 32},/obj/item/weapon/gun/energy/ionrifle,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
+"tk" = (/obj/machinery/recharger/wallcharger{pixel_x = -25},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"tl" = (/obj/structure/table/rack,/obj/item/ammo_magazine/a10mm,/obj/item/ammo_magazine/a10mm,/obj/item/ammo_magazine/a10mm,/obj/item/ammo_magazine/a10mm,/obj/item/ammo_magazine/a10mm,/obj/item/ammo_magazine/a10mm,/obj/item/weapon/gun/projectile/automatic/c20r,/obj/item/weapon/gun/projectile/automatic/c20r,/obj/item/weapon/gun/projectile/automatic/c20r,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"tm" = (/obj/structure/table/rack,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/obj/item/weapon/gun/projectile/automatic/sts35,/obj/item/weapon/gun/projectile/automatic/sts35,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"tn" = (/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/specops)
"to" = (/obj/machinery/vending/boozeomat,/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/shuttle/administration/centcom)
"tp" = (/obj/machinery/vending/coffee,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
"tq" = (/obj/machinery/vending/cigarette,/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
-"tr" = (/obj/machinery/microwave,/obj/structure/table/reinforced,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
+"tr" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/ionrifle,/obj/machinery/recharger/wallcharger{pixel_x = 5; pixel_y = 32},/obj/item/weapon/gun/energy/ionrifle,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"ts" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "admin_shuttle"; pixel_x = -25; pixel_y = 0; req_one_access = list(101); tag_door = "admin_shuttle_hatch"},/turf/simulated/floor/plating,/area/shuttle/administration/centcom)
"tt" = (/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/plating,/area/shuttle/administration/centcom)
"tu" = (/obj/item/device/multitool,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/structure/table/reinforced,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
@@ -1017,7 +1017,7 @@
"tC" = (/obj/machinery/suit_cycler/syndicate{locked = 0},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"tD" = (/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
"tE" = (/obj/machinery/door/airlock/centcom{name = "General Access"; opacity = 1; req_access = list(101)},/turf/simulated/floor/plating,/area/shuttle/administration/centcom)
-"tF" = (/obj/structure/table/standard,/obj/machinery/recharger{pixel_y = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
+"tF" = (/obj/structure/table/rack,/obj/machinery/recharger/wallcharger{pixel_x = 5; pixel_y = 32},/obj/item/weapon/material/hatchet/tacknife/combatknife,/obj/item/weapon/material/hatchet/tacknife/combatknife,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"tG" = (/obj/machinery/cell_charger,/obj/structure/table/reinforced,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
"tH" = (/obj/structure/toilet{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/syndicate_station/start)
"tI" = (/obj/machinery/flasher{id = "syndieflash"; pixel_x = 0; pixel_y = 28},/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/syndicate_station/start)
@@ -1045,22 +1045,22 @@
"ue" = (/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/syndicate_station/start)
"uf" = (/obj/item/weapon/cigbutt,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/syndicate_station/start)
"ug" = (/obj/machinery/door/window{dir = 2; name = "Seating"; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
-"uh" = (/obj/structure/table/standard,/obj/machinery/computer/pod/old/syndicate{id = "smindicate"},/obj/machinery/door/window{dir = 4; name = "Blast Door Control"; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"uh" = (/obj/structure/table/rack,/obj/item/device/megaphone,/obj/item/device/megaphone,/obj/item/device/megaphone,/obj/item/device/megaphone,/obj/item/device/megaphone,/obj/item/device/megaphone,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"ui" = (/obj/machinery/atmospherics/pipe/manifold4w/visible,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"uj" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1331; id_tag = "merc_shuttle_pump"},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
-"uk" = (/obj/structure/table/rack,/obj/machinery/recharger/wallcharger{pixel_x = 5; pixel_y = 32},/obj/item/weapon/material/hatchet/tacknife/combatknife,/obj/item/weapon/material/hatchet/tacknife/combatknife,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
+"uk" = (/obj/machinery/microwave,/obj/structure/table/reinforced,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
"ul" = (/obj/structure/table/rack,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/jetpack/oxygen,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"um" = (/obj/structure/table/rack,/obj/item/weapon/tank/jetpack/carbondioxide,/obj/item/weapon/tank/jetpack/carbondioxide,/obj/item/weapon/tank/jetpack/carbondioxide,/obj/item/weapon/tank/jetpack/carbondioxide,/obj/item/weapon/tank/jetpack/carbondioxide,/obj/item/weapon/tank/jetpack/carbondioxide,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
-"un" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
+"un" = (/obj/structure/table/rack,/obj/item/device/camera_film,/obj/item/device/camera_film,/obj/item/device/camera_film,/obj/item/device/camera_film,/obj/item/device/camera_film,/obj/item/device/camera_film,/obj/item/device/camera,/obj/item/device/camera,/obj/item/device/camera,/obj/item/device/camera,/obj/item/device/camera,/obj/item/device/camera,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"uo" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"; dir = 8},/turf/space,/area/shuttle/administration/centcom)
"up" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 8},/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/shuttle/administration/centcom)
"uq" = (/obj/machinery/vending/snack,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
"ur" = (/obj/item/weapon/stool,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
"us" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
"ut" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
-"uu" = (/obj/machinery/recharge_station,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
+"uu" = (/obj/structure/table/standard,/obj/machinery/recharger{pixel_y = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
"uv" = (/obj/machinery/robotic_fabricator,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
-"uw" = (/obj/machinery/autolathe{desc = "Your typical Autolathe. It appears to have much more options than your regular one, however..."; hacked = 1; name = "Thunderdome Autolathe"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
+"uw" = (/obj/machinery/recharge_station,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
"ux" = (/obj/structure/dispenser,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
"uy" = (/obj/machinery/door/window{dir = 1; name = "Cell"; req_access = list(150)},/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Syndicate Intercom"; pixel_x = -32; subspace_transmission = 1; syndie = 1},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"uz" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
@@ -1069,10 +1069,10 @@
"uC" = (/obj/machinery/door/airlock/external{frequency = 1331; id_tag = "merc_shuttle_inner"; name = "Ship External Access"; req_access = list(0)},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"uD" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/turf/space,/area/space)
"uE" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/syndicate_mothership)
-"uF" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/handcuffs{pixel_x = 4; pixel_y = 2},/obj/item/weapon/storage/box/flashbangs,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/grenade/smokebomb,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
+"uF" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/handcuffs{pixel_x = 4; pixel_y = 2},/obj/item/weapon/storage/box/flashbangs,/obj/item/weapon/storage/box/smokes,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"uG" = (/obj/structure/table/rack,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
-"uH" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/obj/machinery/recharger/wallcharger{pixel_x = 5; pixel_y = -32},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
-"uI" = (/obj/structure/table/rack,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
+"uH" = (/obj/machinery/autolathe{desc = "Your typical Autolathe. It appears to have much more options than your regular one, however..."; hacked = 1; name = "Thunderdome Autolathe"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
+"uI" = (/obj/structure/table/rack,/obj/item/device/flashlight/maglight,/obj/item/device/flashlight/maglight,/obj/item/device/flashlight/maglight,/obj/item/device/flashlight/maglight,/obj/item/device/flashlight/maglight,/obj/item/device/flashlight/maglight,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"uJ" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion_r (WEST)"; icon_state = "propulsion_r"; dir = 8},/turf/space,/area/shuttle/administration/centcom)
"uK" = (/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area/shuttle/administration/centcom)
"uL" = (/obj/machinery/vending/cigarette{name = "hacked cigarette machine"; prices = list(); products = list(/obj/item/weapon/storage/fancy/cigarettes = 10, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/flame/lighter/zippo = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
@@ -1102,7 +1102,7 @@
"vj" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/syndicate{pixel_x = -1; pixel_y = 3},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"vk" = (/obj/machinery/dna_scannernew,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom)
"vl" = (/obj/machinery/computer/cloning,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom)
-"vm" = (/obj/machinery/clonepod,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom)
+"vm" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/obj/machinery/recharger/wallcharger{pixel_x = 5; pixel_y = -32},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"vn" = (/obj/machinery/computer/scan_consolenew,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom)
"vo" = (/obj/machinery/computer/shuttle_control{req_access = list(101); shuttle_tag = "Administration"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
"vp" = (/turf/simulated/shuttle/wall{icon_state = "swall_s"; dir = 4},/area/supply/dock)
@@ -1111,10 +1111,10 @@
"vs" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom)
"vt" = (/turf/simulated/shuttle/wall{icon_state = "swall_straight"; dir = 1},/area/supply/dock)
"vu" = (/turf/simulated/shuttle/floor,/area/supply/dock)
-"vv" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/obj/machinery/sleeper{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
+"vv" = (/obj/machinery/clonepod,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom)
"vw" = (/obj/machinery/sleep_console,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
-"vx" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/structure/sign/nosmoking_1{pixel_y = 32},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
-"vy" = (/obj/structure/table/standard,/obj/item/roller{pixel_y = 8},/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
+"vx" = (/obj/structure/table/rack,/obj/item/weapon/crowbar/red,/obj/item/weapon/crowbar/red,/obj/item/weapon/crowbar/red,/obj/item/weapon/crowbar/red,/obj/item/weapon/crowbar/red,/obj/item/weapon/crowbar/red,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
+"vy" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
"vz" = (/obj/structure/table/standard,/obj/structure/closet/secure_closet/medical_wall{pixel_y = 32; req_access = list(150)},/obj/item/bodybag,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/glass/bottle/antitoxin{pixel_x = -4; pixel_y = 8},/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline{pixel_x = 4; pixel_y = 7},/obj/item/weapon/reagent_containers/syringe,/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
"vA" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Syndicate Intercom"; pixel_x = -32; subspace_transmission = 1; syndie = 1},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"vB" = (/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
@@ -1138,8 +1138,8 @@
"vT" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Syndicate Intercom"; pixel_x = -32; subspace_transmission = 1; syndie = 1},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"vU" = (/obj/structure/table/standard,/obj/item/weapon/screwdriver,/obj/effect/spawner/newbomb/timer/syndicate,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"vV" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0; dir = 4; icon_state = "shutter0"; id = "syndieshutters_workshop"; name = "Blast Shutters"; opacity = 0},/turf/simulated/shuttle/plating,/area/syndicate_station/start)
-"vW" = (/obj/structure/table/rack,/obj/item/device/suit_cooling_unit,/obj/item/device/suit_cooling_unit,/obj/item/device/suit_cooling_unit,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
-"vX" = (/obj/structure/table/rack,/obj/item/weapon/rig/merc/empty,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
+"vW" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
+"vX" = (/obj/structure/table/rack,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"vY" = (/obj/structure/flora/ausbushes/brflowers,/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/terminal)
"vZ" = (/obj/structure/flora/ausbushes/ppflowers,/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/terminal)
"wa" = (/obj/machinery/porta_turret/crescent,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
@@ -1153,10 +1153,10 @@
"wi" = (/obj/structure/table/standard,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom)
"wj" = (/obj/structure/table/standard,/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/item/weapon/reagent_containers/glass/beaker/large,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom)
"wk" = (/obj/structure/table/standard,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
-"wl" = (/obj/machinery/conveyor{dir = 4; id = "QMLoad2"},/turf/simulated/shuttle/floor,/area/supply/dock)
-"wm" = (/obj/machinery/conveyor{dir = 4; id = "QMLoad2"},/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "supply_shuttle_hatch"; locked = 1; name = "Shuttle Hatch"; req_access = list(13)},/turf/simulated/shuttle/plating,/area/supply/dock)
+"wl" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/obj/machinery/sleeper{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
+"wm" = (/obj/machinery/conveyor{dir = 4; id = "QMLoad2"},/turf/simulated/shuttle/floor,/area/supply/dock)
"wn" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "syndieshutters_infirmary"; name = "Blast Shutters"; opacity = 0},/turf/simulated/shuttle/plating,/area/syndicate_station/start)
-"wo" = (/obj/machinery/bodyscanner{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
+"wo" = (/obj/machinery/conveyor{dir = 4; id = "QMLoad2"},/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "supply_shuttle_hatch"; locked = 1; name = "Shuttle Hatch"; req_access = list(13)},/turf/simulated/shuttle/plating,/area/supply/dock)
"wp" = (/obj/machinery/body_scanconsole,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
"wq" = (/obj/machinery/door/window{dir = 4; name = "Infirmary"; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
"wr" = (/obj/machinery/door/window/westright{name = "Tool Storage"; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
@@ -1176,7 +1176,7 @@
"wF" = (/obj/machinery/chem_master,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom)
"wG" = (/obj/machinery/chemical_dispenser/ert,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom)
"wH" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "supply_shuttle"; pixel_x = 25; pixel_y = 0; req_one_access = list(13,31); tag_door = "supply_shuttle_hatch"},/turf/simulated/shuttle/floor,/area/supply/dock)
-"wI" = (/obj/machinery/button/remote/blast_door{id = "syndieshutters_infirmary"; name = "remote shutter control"; pixel_x = -25},/obj/structure/mopbucket,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
+"wI" = (/obj/machinery/computer/card,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command)
"wJ" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Syndicate Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
"wK" = (/obj/machinery/door/window{dir = 1; name = "Secure Storage"; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"wL" = (/obj/structure/table/rack,/obj/item/weapon/storage/belt/utility/full,/obj/item/device/multitool,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
@@ -1184,63 +1184,63 @@
"wN" = (/obj/machinery/button/remote/blast_door{id = "syndieshutters_telebay"; name = "remote shutter control"; pixel_x = 0; pixel_y = -25; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"wO" = (/obj/machinery/button/remote/blast_door{id = "syndieshutters_workshop"; name = "remote shutter control"; pixel_x = 25},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"wP" = (/turf/unsimulated/wall,/area/centcom/security)
-"wQ" = (/obj/machinery/door/airlock/centcom{name = "Creed's Office"; opacity = 1; req_access = list(108)},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/centcom/command)
+"wQ" = (/obj/structure/closet/secure_closet/medical_wall{pixel_x = -32; pixel_y = 0; req_access = list(150)},/obj/item/stack/medical/splint,/obj/item/stack/medical/ointment,/obj/item/stack/medical/ointment,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/bruise_pack,/obj/item/weapon/storage/belt/medical/emt,/obj/item/weapon/storage/belt/medical/emt,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"wR" = (/obj/effect/floor_decal/corner/yellow/diagonal,/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
"wS" = (/obj/structure/table/standard,/obj/effect/floor_decal/carpet{dir = 1},/obj/effect/floor_decal/carpet{dir = 4},/obj/effect/floor_decal/carpet{dir = 5},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command)
"wT" = (/obj/effect/floor_decal/carpet{dir = 8},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command)
-"wU" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/standard,/obj/item/weapon/bonesetter,/obj/item/weapon/bonegel,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
+"wU" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/standard,/obj/item/weapon/surgicaldrill,/obj/item/weapon/cautery,/obj/item/weapon/retractor,/obj/item/stack/nanopaste,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
"wV" = (/obj/machinery/door/window{dir = 1; name = "Surgery"; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
-"wW" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/iv_drip,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
-"wX" = (/obj/structure/table/standard,/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/storage/firstaid/toxin{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/firstaid/adv{pixel_x = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
-"wY" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/o2{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/firstaid/fire{pixel_x = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
+"wW" = (/obj/structure/table/rack,/obj/item/device/suit_cooling_unit,/obj/item/device/suit_cooling_unit,/obj/item/device/suit_cooling_unit,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
+"wX" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1331; id_tag = "merc_shuttle_pump"},/obj/machinery/button/remote/blast_door{id = "smindicate"; name = "ship lockdown control"; pixel_x = -25},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"wY" = (/obj/structure/table/rack,/obj/item/weapon/rig/merc/empty,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"wZ" = (/obj/item/weapon/weldingtool,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
-"xa" = (/obj/structure/sign/securearea{name = "\improper CAUTION"; pixel_x = 32},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"xa" = (/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command)
"xb" = (/obj/machinery/telecomms/allinone{intercept = 1},/obj/machinery/door/window/northright{name = "Telecoms Mainframe"; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"xc" = (/obj/machinery/door/blast/regular{id = "syndieshutters_telebay"; name = "Outer Airlock"},/turf/simulated/shuttle/plating,/area/syndicate_station/start)
-"xd" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security)
+"xd" = (/obj/structure/bed/chair/office/dark{dir = 8},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command)
"xe" = (/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
-"xf" = (/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security)
+"xf" = (/obj/effect/floor_decal/corner/orange{dir = 5},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
"xg" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/security)
-"xh" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/orange,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
-"xi" = (/obj/structure/closet{name = "Prisoner's Locker"},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security)
-"xj" = (/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/centcom/command)
-"xk" = (/obj/machinery/computer/security/telescreen{name = "Spec. Ops. Monitor"; network = list("ERT")},/obj/structure/table/woodentable{dir = 5},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/centcom/command)
-"xl" = (/obj/machinery/computer/card/centcom,/obj/item/weapon/card/id/centcom,/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/centcom/command)
+"xh" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/effect/floor_decal/corner/orange/full{dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
+"xi" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/orange,/obj/effect/floor_decal/corner/orange{dir = 5},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
+"xj" = (/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/command)
+"xk" = (/obj/machinery/computer/card/centcom,/obj/item/weapon/card/id/centcom,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/command)
+"xl" = (/obj/machinery/computer/security/telescreen{name = "Spec. Ops. Monitor"; network = list("ERT")},/obj/structure/table/woodentable{dir = 5},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/command)
"xm" = (/obj/machinery/vending/cola,/obj/effect/floor_decal/corner/yellow/diagonal,/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
"xn" = (/obj/machinery/vending/cigarette,/obj/effect/floor_decal/corner/yellow/diagonal,/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
"xo" = (/obj/effect/floor_decal/carpet{dir = 4},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command)
-"xp" = (/obj/machinery/conveyor{dir = 4; id = "QMLoad"},/turf/simulated/shuttle/floor,/area/supply/dock)
-"xq" = (/obj/machinery/conveyor{dir = 4; id = "QMLoad"},/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "supply_shuttle_hatch"; locked = 1; name = "Shuttle Hatch"; req_access = list(13)},/turf/simulated/shuttle/plating,/area/supply/dock)
-"xr" = (/obj/structure/table/standard,/obj/item/weapon/scalpel,/obj/item/weapon/circular_saw{pixel_y = 8},/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
-"xs" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/obj/item/weapon/reagent_containers/syringe,/obj/item/clothing/mask/surgical,/obj/item/clothing/gloves/latex,/obj/item/weapon/surgicaldrill,/obj/structure/closet/secure_closet/medical_wall{pixel_x = 32; pixel_y = 0; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
+"xp" = (/obj/machinery/bodyscanner{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
+"xq" = (/obj/machinery/conveyor{dir = 4; id = "QMLoad"},/turf/simulated/shuttle/floor,/area/supply/dock)
+"xr" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/standard,/obj/item/weapon/circular_saw,/obj/item/weapon/FixOVein{pixel_x = -6; pixel_y = 1},/obj/item/weapon/hemostat,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
+"xs" = (/obj/machinery/door/window{tag = "icon-right"; name = "Seating"; icon_state = "right"; dir = 2; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"xt" = (/obj/item/weapon/crowbar,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"xu" = (/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"xv" = (/obj/structure/sign/nosmoking_2{pixel_x = 32},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"xw" = (/obj/machinery/door/airlock/external,/obj/effect/forcefield{desc = "You can't get in. Heh."; layer = 1; name = "Blocker"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/terminal)
"xx" = (/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/terminal)
"xy" = (/obj/machinery/door/airlock/external,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/terminal)
-"xz" = (/obj/machinery/portable_atmospherics/hydroponics,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
+"xz" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/orange,/obj/effect/floor_decal/corner/orange/full{dir = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
"xA" = (/obj/structure/bed/chair,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
-"xB" = (/obj/structure/bed/chair,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security)
+"xB" = (/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/command)
"xC" = (/obj/machinery/door/airlock/glass{name = "Brig Dormitories"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
-"xD" = (/obj/machinery/telecomms/relay/preset/centcom,/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/centcom/command)
+"xD" = (/obj/machinery/telecomms/relay/preset/centcom,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/command)
"xE" = (/obj/item/weapon/stool/padded,/obj/effect/floor_decal/corner/yellow/diagonal,/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
"xF" = (/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{pixel_x = 2; pixel_y = 6},/obj/structure/table/standard,/obj/effect/floor_decal/corner/yellow/diagonal,/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
"xG" = (/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/structure/table/standard,/obj/effect/floor_decal/corner/yellow/diagonal,/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
"xH" = (/obj/structure/bed/chair/comfy/teal,/obj/effect/floor_decal/carpet{dir = 1},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command)
"xI" = (/obj/effect/floor_decal/carpet{dir = 1},/obj/effect/floor_decal/carpet{dir = 8},/obj/effect/floor_decal/carpet{dir = 9},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command)
-"xJ" = (/obj/structure/table/standard,/obj/item/weapon/cautery,/obj/item/weapon/hemostat,/obj/item/weapon/FixOVein,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
+"xJ" = (/obj/structure/table/standard,/obj/item/roller,/obj/item/roller,/obj/item/roller,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
"xK" = (/obj/machinery/optable,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
-"xL" = (/obj/structure/table/standard,/obj/item/stack/medical/advanced/bruise_pack,/obj/item/weapon/retractor,/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Syndicate Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
+"xL" = (/obj/structure/flora/pottedplant{tag = "icon-plant-10"; icon_state = "plant-10"},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"xM" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/airless,/area/syndicate_station/start)
-"xN" = (/obj/machinery/teleport/station,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"xN" = (/obj/machinery/conveyor{dir = 4; id = "QMLoad"},/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "supply_shuttle_hatch"; locked = 1; name = "Shuttle Hatch"; req_access = list(13)},/turf/simulated/shuttle/plating,/area/supply/dock)
"xO" = (/obj/machinery/teleport/hub,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
-"xP" = (/obj/machinery/portable_atmospherics/hydroponics,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security)
+"xP" = (/obj/structure/table/reinforced,/obj/item/device/taperecorder,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
"xQ" = (/obj/structure/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
-"xR" = (/obj/structure/table/reinforced,/obj/item/device/taperecorder,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security)
+"xR" = (/obj/structure/table/rack,/obj/item/weapon/storage/secure/briefcase,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/flame/lighter/zippo,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/backpack/satchel,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/command)
"xS" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
-"xT" = (/obj/structure/bed/chair{dir = 8},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security)
-"xU" = (/obj/structure/table/rack,/obj/item/weapon/storage/secure/briefcase,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/flame/lighter/zippo,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/backpack/satchel,/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/centcom/command)
+"xT" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/pill_bottle/dice,/obj/item/weapon/deck/cards,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
+"xU" = (/obj/structure/table/woodentable{dir = 5},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/command)
"xV" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/yellow/diagonal,/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
"xW" = (/obj/effect/floor_decal/carpet{dir = 4},/obj/effect/floor_decal/carpet{dir = 1},/obj/effect/floor_decal/carpet{dir = 5},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command)
"xX" = (/obj/structure/table/woodentable{dir = 5},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command)
@@ -1254,32 +1254,32 @@
"yf" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"},/turf/space,/area/syndicate_station/start)
"yg" = (/obj/structure/shuttle/engine/propulsion,/turf/space,/area/syndicate_station/start)
"yh" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_r"},/turf/space,/area/syndicate_station/start)
-"yi" = (/obj/structure/bed/chair{dir = 4},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security)
+"yi" = (/obj/structure/closet{name = "Prisoner's Locker"},/obj/effect/floor_decal/corner/orange{dir = 5},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
"yj" = (/obj/structure/table/reinforced,/obj/item/weapon/book/manual/security_space_law,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
"yk" = (/obj/structure/bed/chair/comfy/teal{dir = 4},/obj/effect/floor_decal/carpet{dir = 8},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command)
"yl" = (/obj/structure/bed/chair{dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
-"ym" = (/obj/structure/table/woodentable{dir = 5},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/centcom/command)
+"ym" = (/obj/structure/table/woodentable{dir = 10},/obj/machinery/button/remote/blast_door{name = "Spec Ops Ready Room"; pixel_y = 15; req_access = list(11); id = "CREED"},/obj/machinery/button/remote/blast_door{name = "Mech Storage"; icon_state = "doorctrl0"; pixel_y = 0; req_access = list(11); id = "ASSAULT"},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/command)
"yn" = (/obj/structure/device/piano{dir = 4},/obj/effect/floor_decal/corner/yellow/diagonal,/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
"yo" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "mining_shuttle_hatch"; locked = 1; name = "Shuttle Hatch"},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/command)
"yp" = (/turf/simulated/shuttle/wall{icon_state = "swall_s"; dir = 1},/area/supply/dock)
"yq" = (/turf/simulated/shuttle/wall{icon_state = "swall15"; dir = 2},/area/supply/dock)
"yr" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/airless,/area/supply/dock)
"ys" = (/turf/simulated/shuttle/wall{icon_state = "swall_s"; dir = 8},/area/supply/dock)
-"yt" = (/obj/structure/table/reinforced,/obj/item/weapon/material/minihoe,/obj/item/device/analyzer/plant_analyzer,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security)
-"yu" = (/obj/structure/bed/chair{dir = 1},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security)
+"yt" = (/obj/machinery/computer/pod{id = "NTrasen"; name = "Hull Door Control"},/obj/item/device/radio/intercom{broadcasting = 1; dir = 1; frequency = 1441; name = "Spec Ops Intercom"; pixel_y = 28},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/command)
+"yu" = (/obj/structure/bed/chair/office/dark{dir = 1},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/command)
"yv" = (/obj/structure/bed/chair{dir = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
-"yw" = (/obj/structure/table/woodentable{dir = 10},/obj/machinery/button/remote/blast_door{name = "Spec Ops Ready Room"; pixel_y = 15; req_access = list(11); id = "CREED"},/obj/machinery/button/remote/blast_door{name = "Mech Storage"; icon_state = "doorctrl0"; pixel_y = 0; req_access = list(11); id = "ASSAULT"},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/centcom/command)
-"yx" = (/obj/structure/bed/chair/office/dark{dir = 1},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/centcom/command)
-"yy" = (/obj/machinery/computer/pod{id = "NTrasen"; name = "Hull Door Control"},/obj/item/device/radio/intercom{broadcasting = 1; dir = 1; frequency = 1441; name = "Spec Ops Intercom"; pixel_y = 28},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/centcom/command)
-"yz" = (/obj/machinery/door/airlock/centcom{name = "Courthouse"; opacity = 1},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/centcom/command)
+"yw" = (/obj/machinery/door/airlock/centcom{name = "Courthouse"; opacity = 1},/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/command)
+"yx" = (/obj/structure/closet/secure_closet/hos,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/command)
+"yy" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/effect/floor_decal/corner/orange{dir = 9},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
+"yz" = (/obj/effect/floor_decal/corner/orange{dir = 6},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
"yA" = (/obj/structure/shuttle/engine/propulsion{icon_state = "burst_l"},/turf/space,/area/supply/dock)
"yB" = (/obj/structure/shuttle/engine/propulsion,/turf/space,/area/supply/dock)
"yC" = (/obj/structure/shuttle/engine/propulsion{icon_state = "burst_r"},/turf/space,/area/supply/dock)
-"yD" = (/obj/structure/table/reinforced,/obj/item/clothing/head/greenbandana,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
-"yE" = (/obj/structure/closet/secure_closet/hos,/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/centcom/command)
+"yD" = (/obj/effect/floor_decal/corner/orange,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
+"yE" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/orange,/obj/effect/floor_decal/corner/orange{dir = 10},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
"yF" = (/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{pixel_x = -6},/obj/structure/table/standard,/obj/effect/floor_decal/corner/yellow/diagonal,/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
-"yG" = (/obj/machinery/vending/hydronutrients,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security)
-"yH" = (/obj/machinery/vending/hydroseeds,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
+"yG" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/orange,/obj/effect/floor_decal/corner/orange/full{dir = 4},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
+"yH" = (/obj/structure/closet{name = "Prisoner's Locker"},/obj/effect/floor_decal/corner/orange{dir = 10},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
"yI" = (/turf/unsimulated/wall,/area/centcom/restaurant)
"yJ" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/storage/briefcase,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command)
"yK" = (/obj/structure/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
@@ -1298,26 +1298,26 @@
"yX" = (/obj/machinery/vending/dinnerware,/obj/effect/floor_decal/corner/white/diagonal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/restaurant)
"yY" = (/obj/effect/floor_decal/corner/white/diagonal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/restaurant)
"yZ" = (/obj/structure/table/marble,/obj/machinery/chemical_dispenser/bar_soft/full,/obj/effect/floor_decal/corner/white/diagonal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/restaurant)
-"za" = (/obj/structure/table/marble,/obj/item/weapon/storage/box/drinkingglasses,/obj/item/weapon/storage/box/drinkingglasses,/obj/effect/floor_decal/corner/white/diagonal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/restaurant)
+"za" = (/obj/structure/table/marble,/obj/item/weapon/storage/box/glasses/square,/obj/item/weapon/storage/box/glasses/square,/obj/effect/floor_decal/corner/white/diagonal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/restaurant)
"zb" = (/obj/machinery/door/airlock/centcom{name = "Living Quarters"; opacity = 1; req_access = list(105)},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command)
"zc" = (/obj/machinery/computer/security,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
"zd" = (/obj/machinery/computer/crew,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
"ze" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/item/device/radio/intercom{broadcasting = 1; dir = 1; frequency = 1443; listening = 0; name = "Spec Ops Intercom"; pixel_y = 28},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
"zf" = (/obj/machinery/door/window{dir = 2; name = "AI Core Door"; req_access = list(109)},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
"zg" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
-"zh" = (/obj/structure/closet/wardrobe/orange,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security)
-"zi" = (/obj/structure/closet/wardrobe/orange,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
-"zj" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/donkpockets,/obj/item/weapon/storage/box/donkpockets,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
-"zk" = (/obj/structure/table/steel,/obj/item/device/camera{desc = "A one use - polaroid camera. 30 photos left."; name = "detectives camera"; pictures_left = 30; pixel_x = 2; pixel_y = 3},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security)
-"zl" = (/obj/structure/table/steel,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security)
-"zm" = (/obj/structure/table/steel,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security)
+"zh" = (/obj/structure/table/reinforced,/obj/item/weapon/material/minihoe,/obj/item/device/analyzer/plant_analyzer,/obj/effect/floor_decal/corner/orange{dir = 9},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
+"zi" = (/obj/effect/floor_decal/corner/orange{dir = 4},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
+"zj" = (/obj/machinery/computer/card/centcom,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command)
+"zk" = (/obj/structure/table/reinforced,/obj/item/clothing/head/greenbandana,/obj/effect/floor_decal/corner/orange{dir = 9},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
+"zl" = (/obj/machinery/vending/hydroseeds,/obj/effect/floor_decal/corner/orange{dir = 10},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
+"zm" = (/obj/machinery/vending/hydronutrients,/obj/effect/floor_decal/corner/orange/full,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
"zn" = (/obj/machinery/chem_master/condimaster{name = "CondiMaster Neo"; pixel_x = -5},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/restaurant)
"zo" = (/obj/structure/table/marble,/obj/effect/floor_decal/corner/white/diagonal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/restaurant)
"zp" = (/obj/item/weapon/stool/padded,/obj/effect/floor_decal/corner/white/diagonal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/restaurant)
"zq" = (/obj/structure/filingcabinet/filingcabinet,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
"zr" = (/obj/machinery/door/airlock/glass_security{name = "Spaceport Security Airlock"; req_access = list(63)},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
-"zs" = (/obj/structure/table/reinforced,/obj/machinery/microwave,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security)
-"zt" = (/obj/structure/table/steel,/obj/item/weapon/folder/red,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security)
+"zs" = (/obj/effect/floor_decal/corner/orange{dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
+"zt" = (/obj/effect/floor_decal/corner/orange{dir = 10},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
"zu" = (/obj/machinery/door/airlock/freezer,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/restaurant)
"zv" = (/obj/structure/table/marble,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/material/kitchen/rollingpin,/obj/effect/floor_decal/corner/white/diagonal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/restaurant)
"zw" = (/obj/structure/bed/chair{dir = 4},/obj/effect/floor_decal/corner/white/diagonal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/restaurant)
@@ -1327,7 +1327,7 @@
"zA" = (/obj/structure/table/reinforced,/obj/item/device/pda/captain,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
"zB" = (/obj/structure/table/reinforced,/obj/item/weapon/card/id/captains_spare,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
"zC" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
-"zD" = (/obj/structure/table/reinforced,/obj/machinery/recharger{pixel_y = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
+"zD" = (/obj/machinery/teleport/station,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"zE" = (/turf/simulated/shuttle/wall{dir = 4; icon_state = "swall_s"},/area/shuttle/transport1/centcom)
"zF" = (/turf/simulated/shuttle/wall{icon_state = "swall_straight"; dir = 4},/area/shuttle/transport1/centcom)
"zG" = (/turf/simulated/shuttle/wall{icon_state = "swall_s"; dir = 2},/area/shuttle/transport1/centcom)
@@ -1337,12 +1337,12 @@
"zK" = (/turf/simulated/shuttle/wall{icon_state = "swall_t"; dir = 1},/area/shuttle/transport1/centcom)
"zL" = (/obj/structure/shuttle/engine/propulsion{icon_state = "burst_r"; dir = 4},/turf/space,/area/shuttle/transport1/centcom)
"zM" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "centcom_shuttle_bay"; name = "shuttle bay controller"; pixel_x = -24; pixel_y = 0; tag_door = "centcom_shuttle_bay_door"},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
-"zN" = (/obj/machinery/door/airlock/glass_security{name = "Spaceport Security Airlock"; req_access = list(63)},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security)
-"zO" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security)
-"zP" = (/obj/structure/table/reinforced,/obj/machinery/newscaster{layer = 3.3; pixel_x = 27; pixel_y = 0},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
-"zQ" = (/obj/structure/table/steel,/obj/item/device/taperecorder,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security)
+"zN" = (/obj/effect/floor_decal/corner/orange{dir = 9},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
+"zO" = (/obj/machinery/computer/arcade/orion_trail,/obj/effect/floor_decal/corner/orange{dir = 6},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
+"zP" = (/obj/structure/closet/wardrobe/orange,/obj/effect/floor_decal/corner/orange{dir = 5},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
+"zQ" = (/obj/structure/closet/wardrobe/orange,/obj/effect/floor_decal/corner/orange/full{dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
"zR" = (/obj/structure/closet/secure_closet/freezer/meat,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/restaurant)
-"zS" = (/obj/structure/table/standard,/obj/machinery/microwave{pixel_x = -3; pixel_y = 6},/obj/effect/floor_decal/corner/white/diagonal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/restaurant)
+"zS" = (/obj/structure/table/reinforced,/obj/machinery/microwave,/obj/effect/floor_decal/corner/orange{dir = 6},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
"zT" = (/obj/structure/table/marble,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/food/condiment/enzyme,/obj/effect/floor_decal/corner/white/diagonal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/restaurant)
"zU" = (/obj/machinery/door/airlock/centcom{name = "Teleporter Bay"; opacity = 1; req_access = list(107)},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
"zV" = (/obj/structure/bed/chair,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
@@ -1354,9 +1354,9 @@
"Ab" = (/obj/structure/bed/chair,/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom)
"Ac" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/airless,/area/shuttle/transport1/centcom)
"Ad" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"; dir = 4},/turf/space,/area/shuttle/transport1/centcom)
-"Ae" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/simulated/shuttle/plating,/area/centcom/security)
-"Af" = (/obj/structure/closet{name = "Evidence Closet"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
-"Ag" = (/obj/structure/table/steel,/obj/item/weapon/storage/box/evidence,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
+"Ae" = (/obj/effect/floor_decal/corner/orange{dir = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
+"Af" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/donkpockets,/obj/item/weapon/storage/box/donkpockets,/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 30},/obj/effect/floor_decal/corner/orange{dir = 6},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
+"Ag" = (/obj/item/device/camera{desc = "A one use - polaroid camera. 30 photos left."; name = "detectives camera"; pictures_left = 30; pixel_x = 2; pixel_y = 3},/obj/effect/floor_decal/corner/red/full{dir = 8},/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
"Ah" = (/obj/structure/closet/secure_closet/bar,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/restaurant)
"Ai" = (/obj/machinery/computer/ordercomp,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
"Aj" = (/obj/machinery/button/remote/blast_door{id = "crescent_checkpoint_access"; name = "Crescent Checkpoint Access"; pixel_x = -6; pixel_y = -24; req_access = list(101)},/obj/machinery/button/remote/blast_door{id = "crescent_thunderdome"; name = "Thunderdome Access"; pixel_x = 6; pixel_y = -24; req_access = list(101)},/obj/machinery/button/remote/blast_door{id = "crescent_vip_shuttle"; name = "VIP Shuttle Access"; pixel_x = 6; pixel_y = -34; req_access = list(101)},/obj/machinery/turretid{pixel_x = 28; pixel_y = -28; req_access = list(101)},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
@@ -1382,8 +1382,8 @@
"AD" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/light,/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom)
"AE" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/airless,/area/shuttle/transport1/centcom)
"AF" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_r"; dir = 4},/turf/space,/area/shuttle/transport1/centcom)
-"AG" = (/obj/item/weapon/stool/padded,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security)
-"AH" = (/obj/machinery/computer/secure_data,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
+"AG" = (/obj/structure/table/standard,/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/storage/firstaid/toxin{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/firstaid/adv{pixel_x = 1},/obj/item/weapon/storage/firstaid/fire{pixel_x = 1},/obj/item/weapon/storage/firstaid/o2{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/firstaid/regular,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
+"AH" = (/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/effect/floor_decal/corner/red{dir = 5},/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
"AI" = (/obj/machinery/telecomms/receiver/preset_cent,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
"AJ" = (/obj/machinery/telecomms/bus/preset_cent,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
"AK" = (/obj/machinery/telecomms/processor/preset_cent,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
@@ -1404,13 +1404,13 @@
"AZ" = (/turf/simulated/shuttle/wall{icon_state = "swall_s"; dir = 8},/area/shuttle/transport1/centcom)
"Ba" = (/turf/simulated/shuttle/wall{icon_state = "swall_t"; dir = 2},/area/shuttle/transport1/centcom)
"Bb" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-burst_l (EAST)"; icon_state = "burst_l"; dir = 4},/turf/space,/area/shuttle/transport1/centcom)
-"Bc" = (/obj/machinery/computer/security,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security)
+"Bc" = (/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
"Bd" = (/obj/structure/bed/chair,/obj/effect/floor_decal/corner/white/diagonal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/restaurant)
"Be" = (/obj/machinery/gateway{dir = 8},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/main_hall)
"Bf" = (/obj/machinery/gateway/centerstation,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/main_hall)
"Bg" = (/obj/machinery/gateway{dir = 4},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/main_hall)
"Bh" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1; direction = 2; name = "thrower_throwdown"; tiles = 0},/obj/effect/step_trigger/thrower{affect_ghosts = 1; direction = 2; name = "thrower_throwdown"; tiles = 0},/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1; name = "escapeshuttle_leave"; teleport_x = 25; teleport_x_offset = 245; teleport_y = 25; teleport_y_offset = 245; teleport_z = 6; teleport_z_offset = 6},/turf/space,/area/space)
-"Bi" = (/obj/structure/table/reinforced,/obj/item/weapon/folder/red,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security)
+"Bi" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/structure/closet/secure_closet/medical_wall{pixel_x = 32; pixel_y = 0; req_access = list(150)},/obj/item/weapon/tank/anesthetic,/obj/item/clothing/mask/breath/medical,/obj/item/clothing/mask/surgical,/obj/item/clothing/gloves/latex,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
"Bj" = (/obj/structure/table/reinforced,/obj/item/weapon/folder/red,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
"Bk" = (/obj/machinery/door/airlock/centcom{name = "Arrivals Processing"; opacity = 1; req_access = list(101)},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall)
"Bl" = (/obj/machinery/computer/card,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall)
@@ -1424,18 +1424,18 @@
"Bt" = (/obj/machinery/telecomms/broadcaster/preset_cent,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
"Bu" = (/obj/machinery/telecomms/hub/preset_cent,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
"Bv" = (/obj/machinery/computer/rdservercontrol{badmin = 1; name = "Master R&D Server Controller"},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
-"Bw" = (/obj/machinery/r_n_d/server/centcom,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
+"Bw" = (/obj/structure/table/reinforced,/obj/machinery/recharger{pixel_y = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
"Bx" = (/obj/machinery/door/blast/regular{id = "CentComPort"; name = "Security Doors"},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
"By" = (/obj/machinery/computer/secure_data,/obj/machinery/camera/network/crescent{c_tag = "Crescent Arrivals North"; dir = 8},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall)
"Bz" = (/obj/structure/bed/chair/office/dark,/obj/machinery/button/remote/blast_door{desc = "A remote control switch for port-side blast doors."; id = "CentComPort"; name = "Security Doors"; pixel_x = -12; pixel_y = -25; req_access = list(101)},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall)
"BA" = (/obj/machinery/computer/teleporter,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
-"BB" = (/obj/machinery/teleport/station,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
-"BC" = (/obj/machinery/teleport/hub,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
+"BB" = (/obj/structure/table/standard,/obj/machinery/microwave{pixel_x = -3; pixel_y = 6},/obj/effect/floor_decal/corner/white/diagonal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/restaurant)
+"BC" = (/obj/machinery/r_n_d/server/centcom,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
"BD" = (/obj/machinery/porta_turret/crescent,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/tram)
"BE" = (/obj/machinery/door/airlock/external,/obj/effect/floor_decal/industrial/warning,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/tram)
"BF" = (/obj/machinery/door/airlock/glass{name = "Arrivals Processing"},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
"BG" = (/obj/machinery/door/airlock/security{name = "Equipment Storage"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
-"BH" = (/obj/machinery/door/airlock/security{name = "Equipment Storage"},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security)
+"BH" = (/obj/machinery/iv_drip,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
"BI" = (/obj/machinery/account_database{name = "CentComm Accounts database"},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
"BJ" = (/obj/structure/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/tram)
"BK" = (/turf/simulated/shuttle/wall{tag = "icon-swall (SOUTHEAST)"; icon_state = "swall"; dir = 6},/area/centcom/tram)
@@ -1450,9 +1450,9 @@
"BT" = (/obj/effect/floor_decal/corner/white,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
"BU" = (/obj/effect/floor_decal/corner/white{dir = 5},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
"BV" = (/obj/effect/floor_decal/corner/white{dir = 8},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
-"BW" = (/obj/machinery/door/airlock/glass_security{name = "Security Processing"; req_access = list(1)},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security)
-"BX" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/brigdoor{dir = 4; name = "Weapons locker"},/obj/structure/table/rack,/obj/item/clothing/suit/armor/riot,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/shield/riot,/obj/item/clothing/head/helmet/riot,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
-"BY" = (/obj/structure/closet/secure_closet/security,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security)
+"BW" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Syndicate Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/obj/structure/table/standard,/obj/item/weapon/scalpel,/obj/item/weapon/bonesetter,/obj/item/weapon/bonegel{pixel_x = 4; pixel_y = 3},/obj/item/stack/medical/advanced/bruise_pack,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
+"BX" = (/obj/structure/closet{name = "Evidence Closet"},/obj/effect/floor_decal/corner/red/full{dir = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
+"BY" = (/obj/machinery/door/airlock/glass,/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/tram)
"BZ" = (/turf/simulated/shuttle/wall{tag = "icon-swall (NORTHWEST)"; icon_state = "swall"; dir = 9},/area/centcom/tram)
"Ca" = (/obj/structure/bed/chair,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/tram)
"Cb" = (/obj/structure/bed/chair,/obj/structure/closet/walllocker/emerglocker{pixel_x = 0; pixel_y = 28},/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/tram)
@@ -1463,8 +1463,8 @@
"Cg" = (/obj/effect/floor_decal/corner/white{dir = 6; icon_state = "corner_white"; tag = "icon-corner_white (NORTHWEST)"},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
"Ch" = (/obj/effect/floor_decal/corner/white/diagonal{tag = "icon-corner_white_diagonal (EAST)"; icon_state = "corner_white_diagonal"; dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
"Ci" = (/obj/effect/floor_decal/corner/white{dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
-"Cj" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window/brigdoor{dir = 4; name = "Weapons locker"},/obj/structure/table/rack,/obj/item/clothing/suit/armor/riot,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/shield/riot,/obj/item/clothing/head/helmet/riot,/obj/structure/window/reinforced,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security)
-"Ck" = (/obj/structure/closet/secure_closet/security,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
+"Cj" = (/obj/structure/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/tram)
+"Ck" = (/obj/machinery/teleport/hub,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
"Cl" = (/obj/machinery/porta_turret/crescent,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall)
"Cm" = (/obj/machinery/porta_turret/crescent,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall)
"Cn" = (/obj/structure/grille,/obj/structure/window/shuttle{icon_state = "window2"},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/tram)
@@ -1472,11 +1472,11 @@
"Cp" = (/obj/structure/bed/chair{dir = 8},/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/tram)
"Cq" = (/obj/effect/floor_decal/spline/plain{dir = 1},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/tram)
"Cr" = (/obj/effect/floor_decal/corner/white{tag = "icon-corner_white (NORTH)"; icon_state = "corner_white"; dir = 1},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
-"Cs" = (/obj/machinery/computer/card,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security)
-"Ct" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window/brigdoor{dir = 4; name = "Weapons locker"},/obj/structure/table/rack,/obj/item/clothing/suit/armor/riot,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/shield/riot,/obj/item/clothing/head/helmet/riot,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
-"Cu" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/restaurant)
-"Cv" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/restaurant)
-"Cw" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/restaurant)
+"Cs" = (/obj/structure/bed/chair{dir = 8},/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/tram)
+"Ct" = (/obj/item/weapon/storage/box/evidence,/obj/item/weapon/folder/red,/obj/effect/floor_decal/corner/red{dir = 9},/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
+"Cu" = (/obj/machinery/door/airlock/centcom{name = "Administrative Office"; opacity = 1; req_access = list(108)},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command)
+"Cv" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"; name = "Clothing Storage"},/obj/item/weapon/storage/box/syndie_kit/chameleon,/obj/item/weapon/stamp/chameleon,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command)
+"Cw" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/weapon/card/id/centcom,/obj/item/weapon/card/id/syndicate,/obj/item/weapon/card/id,/obj/item/weapon/card/id/gold,/obj/item/weapon/card/id/silver,/obj/item/device/pda/captain,/obj/item/device/pda/ert,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command)
"Cx" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/machinery/door/airlock/glass,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/restaurant)
"Cy" = (/obj/structure/flora/grass/brown,/obj/effect/floor_decal/spline/fancy/wood{tag = "icon-spline_fancy (NORTHWEST)"; icon_state = "spline_fancy"; dir = 9},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
"Cz" = (/obj/structure/flora/ausbushes/ppflowers,/obj/effect/floor_decal/spline/fancy/wood/cee{dir = 4},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
@@ -1490,14 +1490,14 @@
"CH" = (/obj/structure/bed/chair{dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/terminal)
"CI" = (/obj/structure/table/woodentable{dir = 5},/obj/structure/flora/pottedplant{pixel_y = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/terminal)
"CJ" = (/obj/structure/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/terminal)
-"CK" = (/obj/structure/table/standard,/obj/structure/flora/pottedplant{icon_state = "plant-06"; pixel_y = 8; tag = "icon-plant-06"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
-"CL" = (/obj/structure/bed/chair/office/dark,/obj/machinery/button/remote/blast_door{desc = "A remote control switch for port-side blast doors."; id = "CentComPort"; name = "Security Doors"; pixel_x = -12; pixel_y = -25; req_access = list(101)},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security)
-"CM" = (/obj/machinery/computer/secure_data,/obj/machinery/camera/network/crescent{c_tag = "Crescent Arrivals North"; dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
+"CK" = (/obj/effect/floor_decal/corner/red{dir = 6},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
+"CL" = (/obj/structure/bed/chair{dir = 1},/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/tram)
+"CM" = (/obj/machinery/computer/arcade/battle,/obj/effect/floor_decal/corner/orange{dir = 10},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
"CN" = (/obj/structure/flora/ausbushes/fernybush,/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
"CO" = (/obj/structure/flora/ausbushes/brflowers,/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
"CP" = (/obj/structure/flora/ausbushes/ppflowers,/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
-"CQ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/main_hall)
-"CR" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/main_hall)
+"CQ" = (/obj/structure/sign/nosmoking_1{pixel_y = 32},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
+"CR" = (/obj/machinery/button/remote/blast_door{id = "syndieshutters_infirmary"; name = "remote shutter control"; pixel_x = -25},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
"CS" = (/obj/structure/flora/bush,/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
"CT" = (/obj/structure/flora/ausbushes/sparsegrass,/obj/structure/flora/ausbushes/ppflowers,/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
"CU" = (/obj/structure/flora/ausbushes/ywflowers,/obj/effect/floor_decal/spline/fancy/wood{tag = "icon-spline_fancy (NORTHWEST)"; icon_state = "spline_fancy"; dir = 9},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
@@ -1512,17 +1512,17 @@
"Dd" = (/obj/structure/bed/chair{dir = 1},/obj/structure/closet/walllocker/emerglocker{pixel_x = 0; pixel_y = -30},/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/tram)
"De" = (/obj/structure/bed/chair{dir = 1},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -30},/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/tram)
"Df" = (/obj/structure/table/woodentable{dir = 5},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/terminal)
-"Dg" = (/obj/structure/table/reinforced,/obj/machinery/computer/skills,/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security)
-"Dh" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/obj/machinery/door/window/southright{name = "Arrivals Processing"; req_access = list(101)},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
-"Di" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/main_hall)
-"Dj" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/main_hall)
-"Dk" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/main_hall)
-"Dl" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/main_hall)
-"Dm" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/main_hall)
+"Dg" = (/obj/structure/bed/chair,/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/tram)
+"Dh" = (/obj/structure/table/reinforced,/obj/machinery/newscaster{layer = 3.3; pixel_x = 27; pixel_y = 0},/obj/effect/floor_decal/corner/orange/full{dir = 4},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
+"Di" = (/obj/machinery/door/airlock/centcom{name = "Administrative Office"; opacity = 1; req_access = list(108)},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/command)
+"Dj" = (/obj/structure/sign/securearea{name = "\improper CAUTION"; pixel_x = 32},/obj/machinery/light{dir = 4},/obj/structure/mopbucket,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"Dk" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"Dl" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/effect/floor_decal/corner/orange{dir = 10},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
+"Dm" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/restaurant)
"Dn" = (/obj/structure/flora/ausbushes/brflowers,/obj/effect/floor_decal/spline/fancy/wood{tag = "icon-spline_fancy (NORTHWEST)"; icon_state = "spline_fancy"; dir = 9},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
"Do" = (/obj/structure/flora/ausbushes/ppflowers,/obj/effect/floor_decal/spline/fancy/wood{dir = 6},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
"Dp" = (/obj/structure/flora/ausbushes/ppflowers,/obj/effect/floor_decal/spline/fancy/wood{tag = "icon-spline_fancy (SOUTHWEST)"; icon_state = "spline_fancy"; dir = 10},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
-"Dq" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/pill_bottle/dice,/obj/item/weapon/deck/cards,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security)
+"Dq" = (/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/tram)
"Dr" = (/obj/structure/bed/chair/office/dark,/obj/machinery/button/remote/blast_door{desc = "A remote control switch for port-side blast doors."; id = "CentComPortEast"; name = "Security Doors"; pixel_x = -12; pixel_y = -25; req_access = list(101)},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/tram)
"Ds" = (/obj/machinery/computer/secure_data,/obj/machinery/camera/network/crescent{c_tag = "Crescent Arrivals North"; dir = 8},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/tram)
"Dt" = (/obj/machinery/door/window/northright,/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/terminal)
@@ -1581,28 +1581,28 @@
"Eu" = (/obj/structure/window/reinforced,/turf/unsimulated/beach/sand{tag = "icon-seashallow"; icon_state = "seashallow"},/area/centcom/main_hall)
"Ev" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/beach/sand{tag = "icon-seashallow"; icon_state = "seashallow"},/area/centcom/main_hall)
"Ew" = (/obj/structure/flora/ausbushes/brflowers,/obj/effect/floor_decal/spline/fancy/wood/cee{dir = 1},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
-"Ex" = (/obj/machinery/door/airlock/glass,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/tram)
+"Ex" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/firstaid/regular,/obj/effect/floor_decal/corner/green{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"Ey" = (/turf/unsimulated/wall,/area/centcom/medical)
"Ez" = (/obj/machinery/door/airlock/glass_medical{name = "Arrivals Medbay"},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"EA" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/medical)
-"EB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/main_hall)
-"EC" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/main_hall)
+"EB" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/bar)
+"EC" = (/obj/structure/table/standard,/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = -30},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall)
"ED" = (/obj/structure/flora/ausbushes/ywflowers,/obj/effect/floor_decal/spline/fancy/wood{tag = "icon-spline_fancy (SOUTHWEST)"; icon_state = "spline_fancy"; dir = 10},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
"EE" = (/obj/structure/flora/grass/brown,/obj/effect/floor_decal/spline/fancy/wood{dir = 5},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
"EF" = (/obj/structure/flora/ausbushes/ppflowers,/obj/effect/floor_decal/spline/fancy/wood{tag = "icon-spline_fancy (NORTHWEST)"; icon_state = "spline_fancy"; dir = 9},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
"EG" = (/obj/structure/flora/ausbushes/ywflowers,/obj/effect/floor_decal/spline/fancy/wood{dir = 6},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
-"EH" = (/obj/machinery/vending/cigarette,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/tram)
-"EI" = (/obj/machinery/vending/cola,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/tram)
-"EJ" = (/obj/machinery/vending/snack,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/tram)
-"EK" = (/obj/machinery/vending/coffee,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/tram)
-"EL" = (/obj/structure/table/standard,/obj/structure/flora/pottedplant{pixel_y = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"EH" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/glass,/obj/item/weapon/storage/box/monkeycubes,/obj/effect/floor_decal/corner/green/full{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"EI" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/bed/chair{dir = 4},/obj/effect/floor_decal/corner/green{dir = 9},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"EJ" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/effect/floor_decal/corner/green{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"EK" = (/obj/item/weapon/bedsheet/rd,/obj/structure/bed/padded,/turf/unsimulated/floor{icon_state = "lino"},/area/wizard_station)
+"EL" = (/obj/machinery/camera/network/ert{c_tag = "Assault Armor North"},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
"EM" = (/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"EN" = (/obj/structure/table/standard,/obj/item/roller,/obj/item/roller{pixel_y = 8},/obj/item/roller{pixel_y = 16},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"EO" = (/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"EP" = (/obj/structure/table/standard,/obj/item/stack/material/phoron,/obj/item/stack/material/phoron,/obj/item/stack/material/phoron,/obj/item/stack/material/phoron,/obj/item/stack/material/phoron,/obj/item/stack/material/phoron,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"EQ" = (/obj/structure/table/standard,/obj/machinery/reagentgrinder,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"ER" = (/obj/machinery/chem_master,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"ES" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/main_hall)
+"EN" = (/obj/mecha/combat/gygax/dark,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
+"EO" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp{pixel_x = 4; pixel_y = 8},/obj/item/clothing/glasses/sunglasses/prescription,/obj/item/clothing/glasses/sunglasses/prescription,/turf/unsimulated/floor{icon_state = "lino"},/area/syndicate_mothership)
+"EP" = (/obj/structure/table/standard,/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 30},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall)
+"EQ" = (/obj/effect/floor_decal/carpet{dir = 8},/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = -30},/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/centcom/bar)
+"ER" = (/obj/structure/table/standard,/obj/structure/flora/pottedplant{pixel_y = 8},/obj/effect/floor_decal/corner/green{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"ES" = (/obj/effect/floor_decal/corner/green{dir = 5},/obj/item/weapon/stool/padded,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"ET" = (/obj/structure/flora/ausbushes,/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
"EU" = (/obj/structure/flora/ausbushes/brflowers,/obj/effect/floor_decal/spline/fancy/wood{tag = "icon-spline_fancy (SOUTHWEST)"; icon_state = "spline_fancy"; dir = 10},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
"EV" = (/obj/structure/flora/ausbushes/ppflowers,/obj/effect/floor_decal/spline/fancy/wood{dir = 5},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
@@ -1610,11 +1610,11 @@
"EX" = (/obj/structure/flora/bush,/obj/structure/flora/ausbushes/sparsegrass,/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
"EY" = (/obj/effect/floor_decal/corner/white{dir = 9; icon_state = "corner_white"; tag = "icon-corner_white (NORTHWEST)"},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
"EZ" = (/obj/item/weapon/stool/padded,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"Fa" = (/obj/machinery/chemical_dispenser/ert,/obj/item/weapon/reagent_containers/glass/beaker/large,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Fa" = (/obj/effect/floor_decal/corner/green{dir = 4},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"Fb" = (/turf/unsimulated/wall,/area/centcom/bar)
-"Fc" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/bar)
-"Fd" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/bar)
-"Fe" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/bar)
+"Fc" = (/obj/effect/floor_decal/corner/green/full{dir = 8},/obj/machinery/computer/arcade/orion_trail,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Fd" = (/obj/effect/floor_decal/corner/purple{dir = 9},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"Fe" = (/obj/effect/floor_decal/corner/red{dir = 10},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"Ff" = (/obj/machinery/door/airlock/glass,/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/bar)
"Fg" = (/obj/effect/floor_decal/spline/plain,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/main_hall)
"Fh" = (/turf/unsimulated/wall,/area/centcom/bathroom)
@@ -1624,16 +1624,16 @@
"Fl" = (/obj/structure/window/shuttle{icon_state = "window12"},/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom)
"Fm" = (/obj/structure/window/shuttle{icon_state = "window8"},/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom)
"Fn" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s"; icon_state = "swall_s"},/area/shuttle/escape/centcom)
-"Fo" = (/obj/structure/bed/chair{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"Fp" = (/obj/structure/bed/chair{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"Fq" = (/obj/structure/closet/secure_closet/chemical,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"Fr" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/item/weapon/reagent_containers/glass/beaker/large,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Fo" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/green{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Fp" = (/obj/structure/table/standard,/obj/item/roller,/obj/item/roller{pixel_y = 8},/obj/item/roller{pixel_y = 16},/obj/effect/floor_decal/corner/green{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Fq" = (/obj/effect/floor_decal/corner/green{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Fr" = (/obj/effect/floor_decal/corner/green,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"Fs" = (/obj/structure/table/woodentable{dir = 5},/obj/structure/flora/pottedplant{pixel_y = 8},/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/bar)
"Ft" = (/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/bar)
"Fu" = (/obj/structure/table/steel,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bathroom)
"Fv" = (/obj/structure/closet/secure_closet/personal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bathroom)
"Fw" = (/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bathroom)
-"Fx" = (/obj/structure/bed/chair{dir = 8},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/tram)
+"Fx" = (/obj/structure/table/rack,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"Fy" = (/turf/simulated/shuttle/wall{tag = "icon-swall (NORTHWEST)"; icon_state = "swall"; dir = 9},/area/shuttle/escape/centcom)
"Fz" = (/obj/machinery/computer/secure_data,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
"FA" = (/obj/machinery/computer/station_alert,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
@@ -1641,7 +1641,7 @@
"FC" = (/obj/machinery/computer/communications,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
"FD" = (/obj/machinery/computer/med_data,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
"FE" = (/turf/simulated/shuttle/wall{tag = "icon-swall (NORTHEAST)"; icon_state = "swall"; dir = 5},/area/shuttle/escape/centcom)
-"FF" = (/obj/structure/closet/secure_closet/medical1,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"FF" = (/obj/item/device/taperecorder,/obj/effect/floor_decal/corner/red/full,/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
"FG" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/extinguisher,/obj/machinery/camera/network/crescent{c_tag = "Shuttle Bridge West"},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
"FH" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
"FI" = (/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
@@ -1662,9 +1662,9 @@
"FX" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/beetsoup,/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/bar)
"FY" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/stuffing,/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/bar)
"FZ" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/soylenviridians,/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/bar)
-"Ga" = (/obj/structure/table/standard,/obj/machinery/computer/security/telescreen/entertainment{pixel_x = -30},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall)
+"Ga" = (/obj/structure/table/standard,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor3"},/area/centcom/evac)
"Gb" = (/obj/item/weapon/stool/padded,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall)
-"Gc" = (/obj/structure/table/standard,/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 30},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall)
+"Gc" = (/obj/structure/table/rack,/obj/item/weapon/grenade/empgrenade,/obj/item/weapon/grenade/flashbang,/obj/item/weapon/grenade/spawnergrenade/manhacks,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start)
"Gd" = (/turf/simulated/shuttle/wall{tag = "icon-swall_straight"; icon_state = "swall_straight"},/area/shuttle/escape/centcom)
"Ge" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
"Gf" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
@@ -1674,19 +1674,19 @@
"Gj" = (/obj/machinery/computer/crew,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
"Gk" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
"Gl" = (/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
-"Gm" = (/obj/machinery/smartfridge/chemistry,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"Gn" = (/obj/structure/closet/secure_closet/medical3,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Gm" = (/obj/effect/floor_decal/corner/red{dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
+"Gn" = (/obj/effect/floor_decal/corner/red{dir = 9},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
"Go" = (/obj/machinery/door/airlock/glass_command{name = "Escape Shuttle Cockpit"; req_access = list(19)},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
"Gp" = (/turf/simulated/shuttle/wall{tag = "icon-swall (SOUTHEAST)"; icon_state = "swall"; dir = 6},/area/shuttle/escape/centcom)
"Gq" = (/turf/simulated/shuttle/wall{tag = "icon-swall_t"; icon_state = "swall_t"},/area/shuttle/escape/centcom)
"Gr" = (/turf/simulated/shuttle/wall{tag = "icon-swall_straight (EAST)"; icon_state = "swall_straight"; dir = 4},/area/shuttle/escape/centcom)
"Gs" = (/turf/simulated/shuttle/wall{tag = "icon-swall (SOUTHWEST)"; icon_state = "swall"; dir = 10},/area/shuttle/escape/centcom)
"Gt" = (/obj/machinery/door/airlock/multi_tile/glass{id_tag = "MedbayFoyerPort"; req_access = newlist()},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"Gu" = (/obj/structure/table/glass,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"Gv" = (/obj/structure/table/glass,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"Gw" = (/obj/structure/table/glass,/obj/machinery/computer/med_data/laptop,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"Gx" = (/obj/structure/table/glass,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"Gy" = (/obj/structure/table/glass,/obj/machinery/computer/med_data/laptop,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Gu" = (/obj/effect/floor_decal/corner/red/full{dir = 4},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
+"Gv" = (/obj/effect/floor_decal/corner/green{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Gw" = (/obj/effect/floor_decal/corner/red,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
+"Gx" = (/obj/effect/floor_decal/corner/red{dir = 5},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
+"Gy" = (/obj/structure/bed/chair{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/corner/green{dir = 9},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"Gz" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/bloodsoup,/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/bar)
"GA" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/tofukabob,/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/bar)
"GB" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/poppypretzel,/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/bar)
@@ -1696,10 +1696,10 @@
"GF" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/floor4,/area/shuttle/escape/centcom)
"GG" = (/obj/machinery/status_display{pixel_y = 30},/obj/machinery/camera/network/crescent{c_tag = "Shuttle Cell"},/turf/simulated/shuttle/floor4,/area/shuttle/escape/centcom)
"GH" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 30},/obj/structure/bed/chair{dir = 8},/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/floor4,/area/shuttle/escape/centcom)
-"GI" = (/obj/machinery/computer/crew,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"GI" = (/obj/structure/bed/chair{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/effect/floor_decal/corner/green{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"GJ" = (/obj/structure/bed/chair/office/light{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"GK" = (/obj/machinery/computer/med_data,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"GL" = (/obj/machinery/iv_drip,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"GK" = (/obj/effect/floor_decal/corner/red{dir = 4},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
+"GL" = (/obj/effect/floor_decal/corner/red/full{dir = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
"GM" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/spesslaw,/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/bar)
"GN" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/candiedapple,/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/bar)
"GO" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/mushroomsoup,/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/bar)
@@ -1714,7 +1714,7 @@
"GX" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor4,/area/shuttle/escape/centcom)
"GY" = (/obj/machinery/hologram/holopad,/turf/simulated/shuttle/floor4,/area/shuttle/escape/centcom)
"GZ" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor4,/area/shuttle/escape/centcom)
-"Ha" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/medical,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Ha" = (/obj/effect/floor_decal/corner/red{dir = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
"Hb" = (/obj/structure/window/shuttle{icon_state = "window1"},/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom)
"Hc" = (/turf/simulated/shuttle/floor4,/area/shuttle/escape/centcom)
"Hd" = (/obj/item/weapon/stool/padded,/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/bar)
@@ -1735,7 +1735,7 @@
"Hs" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/flame/lighter/zippo,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/material/ashtray/bronze{pixel_x = -1; pixel_y = 1},/obj/machinery/camera/network/crescent{c_tag = "Crescent Bar East"; dir = 4},/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/bar)
"Ht" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/flame/lighter/zippo,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/material/ashtray/bronze{pixel_x = -1; pixel_y = 1},/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/bar)
"Hu" = (/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/bar)
-"Hv" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/drinks/drinkingglass,/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/bar)
+"Hv" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/drinks/glass2/square,/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/bar)
"Hw" = (/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome)
"Hx" = (/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome)
"Hy" = (/obj/structure/toilet{dir = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/bathroom)
@@ -1744,9 +1744,9 @@
"HB" = (/obj/machinery/status_display{pixel_y = 30},/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
"HC" = (/obj/machinery/camera/network/crescent{c_tag = "Shuttle Center"},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
"HD" = (/obj/machinery/vending/medical,/turf/unsimulated/wall,/area/centcom/medical)
-"HE" = (/obj/machinery/vending/medical,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"HF" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/blood/AMinus,/obj/item/weapon/reagent_containers/blood/APlus,/obj/item/weapon/reagent_containers/blood/BMinus,/obj/item/weapon/reagent_containers/blood/BPlus,/obj/item/weapon/reagent_containers/blood/OPlus,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"HG" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"HE" = (/obj/effect/floor_decal/corner/green{dir = 9},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"HF" = (/obj/item/weapon/stool/padded,/obj/effect/floor_decal/corner/red{dir = 5},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
+"HG" = (/obj/machinery/computer/secure_data,/obj/effect/floor_decal/corner/red/full{dir = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
"HH" = (/obj/structure/bed/chair/comfy/brown,/obj/effect/floor_decal/carpet{dir = 8},/obj/effect/floor_decal/carpet{dir = 1},/obj/effect/floor_decal/carpet{dir = 9},/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/centcom/bar)
"HI" = (/obj/structure/bed/chair/comfy/brown,/obj/effect/floor_decal/carpet{dir = 1},/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/centcom/bar)
"HJ" = (/obj/structure/bed/chair/comfy/brown,/obj/effect/floor_decal/carpet{dir = 4},/obj/effect/floor_decal/carpet{dir = 1},/obj/effect/floor_decal/carpet{dir = 5},/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/centcom/bar)
@@ -1756,17 +1756,17 @@
"HN" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome)
"HO" = (/obj/structure/bed/chair{dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome)
"HP" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_shuttle_hatch"; locked = 1; name = "Shuttle Hatch"; req_access = list(13)},/obj/machinery/mech_sensor{dir = 8; frequency = 1380; id_tag = "shuttle_dock_north_mech"; pixel_y = -19},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
-"HQ" = (/obj/machinery/sleeper{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"HQ" = (/obj/machinery/teleport/station,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
"HR" = (/obj/machinery/sleep_console,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"HS" = (/obj/effect/floor_decal/carpet{dir = 8},/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/centcom/bar)
+"HS" = (/obj/machinery/computer/security,/obj/effect/floor_decal/corner/red{dir = 6},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
"HT" = (/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/centcom/bar)
"HU" = (/obj/effect/floor_decal/carpet{dir = 4},/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/centcom/bar)
"HV" = (/obj/structure/curtain/open/shower,/obj/machinery/shower,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/bathroom)
"HW" = (/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/bathroom)
"HX" = (/obj/structure/bed/chair{dir = 4},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/obj/machinery/camera/network/crescent{c_tag = "Shuttle West"; dir = 4},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
"HY" = (/obj/structure/bed/chair{dir = 8},/obj/structure/closet/walllocker/emerglocker{pixel_x = 28},/obj/machinery/camera/network/crescent{c_tag = "Shuttle East"; dir = 8},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
-"HZ" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/adv,/obj/item/weapon/storage/firstaid/adv,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"Ia" = (/obj/machinery/atmospherics/unary/cryo_cell,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"HZ" = (/obj/effect/floor_decal/corner/red{dir = 10},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
+"Ia" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/brigdoor{dir = 4; name = "Weapons locker"},/obj/structure/table/rack,/obj/item/clothing/suit/armor/riot,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/shield/riot,/obj/item/clothing/head/helmet/riot,/obj/effect/floor_decal/corner/red{dir = 9},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
"Ib" = (/obj/structure/bed/chair/comfy/brown{dir = 1},/obj/effect/floor_decal/carpet{dir = 8},/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{dir = 10},/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/centcom/bar)
"Ic" = (/obj/structure/bed/chair/comfy/brown{dir = 1},/obj/effect/floor_decal/carpet,/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/centcom/bar)
"Id" = (/obj/structure/bed/chair/comfy/brown{dir = 1},/obj/effect/floor_decal/carpet{dir = 4},/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{dir = 6},/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/centcom/bar)
@@ -1775,35 +1775,35 @@
"Ig" = (/obj/structure/table/woodentable{dir = 5},/obj/machinery/chemical_dispenser/bar_soft/full,/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/bar)
"Ih" = (/obj/structure/table/woodentable{dir = 5},/obj/machinery/chemical_dispenser/bar_alc/full,/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/bar)
"Ii" = (/obj/structure/window/shuttle{icon_state = "window3"},/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom)
-"Ij" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/fire,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Ij" = (/obj/structure/closet/secure_closet/security,/obj/effect/floor_decal/corner/red{dir = 6},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
"Ik" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5; icon_state = "intact"; tag = "icon-intact-f (NORTHEAST)"},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"Il" = (/obj/machinery/atmospherics/pipe/manifold/hidden,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"Im" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4; icon_state = "map"; tag = "icon-manifold-f (EAST)"},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Im" = (/obj/effect/floor_decal/corner/green{dir = 10},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"In" = (/obj/structure/curtain/open/shower,/obj/machinery/shower{dir = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/bathroom)
"Io" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "centcom_dock"; name = "docking port controller"; pixel_x = 25; pixel_y = 0; req_one_access = list(13); tag_door = "centcom_dock_airlock"},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
-"Ip" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/toxin,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Ip" = (/obj/structure/table/standard,/obj/structure/flora/pottedplant{pixel_y = 8},/obj/effect/floor_decal/corner/green/full{dir = 4},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"Iq" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"Ir" = (/obj/structure/morgue,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"Is" = (/obj/structure/morgue{tag = "icon-morgue1 (WEST)"; icon_state = "morgue1"; dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Ir" = (/obj/machinery/smartfridge/chemistry,/obj/effect/floor_decal/corner/green/full{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Is" = (/obj/structure/closet/secure_closet/medical3,/obj/effect/floor_decal/corner/green/full{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"It" = (/obj/machinery/door/airlock/centcom{name = "General Access"; opacity = 1; req_access = list(101)},/obj/machinery/door/blast/regular{id = "crescent_thunderdome"; name = "Thunderdome"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome)
-"Iu" = (/obj/structure/bed/roller,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/structure/closet/secure_closet/medical_wall{name = "O- Blood Locker"; pixel_x = -32},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"Iv" = (/obj/machinery/bodyscanner{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Iu" = (/obj/structure/table/glass,/obj/effect/floor_decal/corner/green{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Iv" = (/obj/machinery/sleeper{dir = 8},/obj/effect/floor_decal/corner/green{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"Iw" = (/obj/machinery/body_scanconsole,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"Ix" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/o2,/obj/item/weapon/storage/firstaid/o2,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"Iy" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 5; pixel_y = 5},/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 0; pixel_y = 0},/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 7; pixel_y = 1},/obj/item/weapon/wrench,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"Iz" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/oxygen/prechilled,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Ix" = (/obj/structure/table/glass,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/corner/green/full{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Iy" = (/obj/structure/table/glass,/obj/structure/window/reinforced{dir = 1},/obj/effect/floor_decal/corner/green{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Iz" = (/obj/structure/table/glass,/obj/machinery/computer/med_data/laptop,/obj/structure/window/reinforced{dir = 1},/obj/effect/floor_decal/corner/green{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"IA" = (/obj/machinery/door/airlock/centcom{name = "General Access"; opacity = 1; req_access = list(101)},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome)
"IB" = (/obj/structure/bed/chair{dir = 4},/obj/structure/closet/walllocker/emerglocker{pixel_x = -28},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
"IC" = (/obj/structure/bed/chair{dir = 8},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 26},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
-"ID" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid,/obj/item/weapon/storage/firstaid,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"ID" = (/obj/structure/table/glass,/obj/machinery/computer/med_data/laptop,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/effect/floor_decal/corner/green/full{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"IE" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{id_tag = "GeneticsDoor"; name = "Cloning Laboratory"; req_access = list(66)},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"IF" = (/obj/structure/closet/secure_closet/bar,/turf/unsimulated/floor{icon_state = "white"},/area/tdome)
"IG" = (/turf/unsimulated/floor{icon_state = "white"},/area/tdome)
"IH" = (/obj/machinery/gibber,/turf/unsimulated/floor{icon_state = "white"},/area/tdome)
"II" = (/obj/machinery/door/airlock/command{name = "Thunderdome"},/obj/machinery/door/blast/regular{id = "crescent_thunderdome"; name = "Thunderdome"},/turf/unsimulated/floor{icon_state = "lino"},/area/tdome)
"IJ" = (/obj/machinery/door/airlock/medical{name = "Virology Access"; req_access = list(5)},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"IK" = (/obj/structure/closet/crate/freezer,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"IL" = (/obj/structure/filingcabinet/chestdrawer{desc = "A large drawer filled with autopsy reports."; name = "Autopsy Reports"},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"IK" = (/obj/structure/closet/secure_closet/medical3,/obj/effect/floor_decal/corner/green{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"IL" = (/obj/machinery/computer/crew,/obj/effect/floor_decal/corner/green{dir = 4},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"IM" = (/obj/machinery/vending/cigarette,/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeobserve)
"IN" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer,/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer,/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer,/obj/item/weapon/flame/lighter/zippo,/obj/item/weapon/storage/fancy/cigarettes,/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeobserve)
"IO" = (/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeobserve)
@@ -1813,11 +1813,11 @@
"IS" = (/obj/machinery/status_display{pixel_y = -30},/obj/machinery/light,/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
"IT" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_shuttle_hatch"; locked = 1; name = "Shuttle Hatch"; req_access = list(13)},/obj/machinery/mech_sensor{dir = 8; frequency = 1380; id_tag = "shuttle_dock_south_starboard_mech"; pixel_y = -19},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
"IU" = (/obj/machinery/door/airlock/medical{name = "Observation Room"},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"IV" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"IW" = (/obj/structure/closet/l3closet/virology,/obj/item/clothing/mask/gas,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"IV" = (/obj/machinery/computer/med_data,/obj/effect/floor_decal/corner/green{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"IW" = (/obj/machinery/iv_drip,/obj/effect/floor_decal/corner/green{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"IX" = (/obj/machinery/door/airlock/medical{name = "Morgue"; req_access = list(6,5)},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"IY" = (/obj/machinery/optable,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"IZ" = (/obj/item/device/camera{name = "Autopsy Camera"; pixel_x = -2; pixel_y = 7},/obj/item/weapon/paper_bin{pixel_y = -6},/obj/item/weapon/pen/red{pixel_x = -1; pixel_y = -9},/obj/item/weapon/pen/blue{pixel_x = 3; pixel_y = -5},/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"IZ" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/medical,/obj/effect/floor_decal/corner/green{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"Ja" = (/obj/structure/closet/secure_closet/freezer/meat,/turf/unsimulated/floor{icon_state = "white"},/area/tdome)
"Jb" = (/obj/structure/closet/secure_closet/freezer/fridge,/turf/unsimulated/floor{icon_state = "white"},/area/tdome)
"Jc" = (/obj/structure/bed/chair,/obj/effect/landmark{name = "tdomeobserve"},/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeobserve)
@@ -1828,16 +1828,16 @@
"Jh" = (/turf/simulated/shuttle/wall{icon_state = "swall_t"; dir = 1},/area/shuttle/escape/centcom)
"Ji" = (/obj/machinery/door/airlock/glass_medical{name = "Escape Shuttle Infirmary"; req_access = list(5)},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
"Jj" = (/turf/simulated/shuttle/wall{icon_state = "swall_t"; dir = 4},/area/shuttle/escape/centcom)
-"Jk" = (/obj/machinery/shower{dir = 4; icon_state = "shower"; pixel_x = 0; pixel_y = 0},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"Jl" = (/obj/machinery/clonepod,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"Jm" = (/obj/machinery/computer/cloning,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"Jn" = (/obj/machinery/dna_scannernew,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"Jo" = (/obj/structure/closet/wardrobe/white,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"Jp" = (/obj/structure/table/standard,/obj/item/weapon/book/manual/medical_cloning,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"Jq" = (/obj/item/weapon/storage/box/bodybags,/obj/item/weapon/storage/box/bodybags,/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"Jr" = (/obj/item/weapon/autopsy_scanner,/obj/item/weapon/scalpel,/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Jk" = (/obj/effect/floor_decal/corner/green{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Jl" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/blood/AMinus,/obj/item/weapon/reagent_containers/blood/APlus,/obj/item/weapon/reagent_containers/blood/BMinus,/obj/item/weapon/reagent_containers/blood/BPlus,/obj/item/weapon/reagent_containers/blood/OPlus,/obj/effect/floor_decal/corner/green{dir = 10},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Jm" = (/obj/machinery/vending/medical,/obj/effect/floor_decal/corner/green{dir = 10},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Jn" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/effect/floor_decal/corner/green/full{dir = 4},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Jo" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/green{dir = 9},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Jp" = (/obj/effect/floor_decal/corner/green{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Jq" = (/obj/machinery/sleep_console,/obj/effect/floor_decal/corner/green{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Jr" = (/obj/machinery/sleeper{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"Js" = (/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "white"},/area/tdome)
-"Jt" = (/obj/structure/table/standard,/obj/machinery/microwave,/turf/unsimulated/floor{icon_state = "white"},/area/tdome)
+"Jt" = (/obj/machinery/bodyscanner{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"Ju" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "white"},/area/tdome)
"Jv" = (/obj/machinery/computer/security/telescreen,/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeobserve)
"Jw" = (/obj/item/device/camera,/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeobserve)
@@ -1851,17 +1851,17 @@
"JE" = (/obj/structure/closet/crate/medical,/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/weapon/storage/firstaid/o2{layer = 2.8; pixel_x = 4; pixel_y = 6},/obj/item/weapon/storage/box/masks{pixel_x = 0; pixel_y = 0},/obj/item/weapon/storage/box/gloves{pixel_x = 3; pixel_y = 4},/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/fire{layer = 2.9; pixel_x = 2; pixel_y = 3},/obj/item/weapon/storage/firstaid/adv{pixel_x = -2},/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
"JF" = (/obj/structure/closet/hydrant{pixel_x = -30; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape/centcom)
"JG" = (/obj/structure/closet/walllocker/emerglocker{pixel_x = 28},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape/centcom)
-"JH" = (/obj/structure/bed/chair,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"JH" = (/obj/structure/table/standard,/obj/item/roller,/obj/item/roller{pixel_y = 8},/obj/item/roller{pixel_y = 16},/obj/effect/floor_decal/corner/green/full{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"JI" = (/obj/structure/bed/chair,/obj/structure/disposalpipe/segment,/obj/effect/landmark{name = "tdomeobserve"},/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeobserve)
"JJ" = (/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape/centcom)
"JK" = (/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/obj/machinery/camera/network/crescent{c_tag = "Shuttle Medical"; dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
"JL" = (/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
"JM" = (/obj/machinery/vending/wallmed1{layer = 3.3; name = "Emergency NanoMed"; pixel_x = 28; pixel_y = 0},/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
"JN" = (/obj/machinery/door/airlock/medical{name = "Operating Theatre"; req_access = list(45)},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"JO" = (/obj/machinery/disease2/incubator,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"JP" = (/obj/item/weapon/storage/box/syringes{pixel_x = 4; pixel_y = 4},/obj/item/weapon/storage/box/beakers,/obj/item/weapon/reagent_containers/dropper,/obj/structure/table/glass,/obj/structure/reagent_dispensers/virusfood{pixel_x = 0; pixel_y = 28},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"JQ" = (/obj/machinery/disease2/isolator,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"JR" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/green,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"JO" = (/obj/effect/floor_decal/corner/blue{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"JP" = (/obj/effect/floor_decal/corner/blue{dir = 9},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"JQ" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/adv,/obj/item/weapon/storage/firstaid/adv,/obj/effect/floor_decal/corner/green{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"JR" = (/obj/effect/floor_decal/corner/blue{dir = 4},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"JS" = (/obj/structure/table/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/brown,/obj/item/weapon/melee/energy/axe,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome)
"JT" = (/obj/effect/forcefield{desc = "You can't get in. Heh."; layer = 1; name = "Blocker"},/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
"JU" = (/obj/effect/forcefield{desc = "You can't get in. Heh."; layer = 1; name = "Blocker"},/obj/structure/disposalpipe/segment,/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
@@ -1872,11 +1872,11 @@
"JZ" = (/obj/machinery/hologram/holopad,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
"Ka" = (/obj/structure/bed/roller,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
"Kb" = (/obj/structure/bed/roller,/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 26},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
-"Kc" = (/obj/machinery/recharge_station,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape/centcom)
-"Kd" = (/obj/machinery/recharge_station,/obj/machinery/camera/network/crescent{c_tag = "Shuttle East Storage"; dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape/centcom)
-"Ke" = (/obj/structure/table/standard,/obj/item/weapon/FixOVein{pixel_x = -6; pixel_y = 1},/obj/item/stack/medical/advanced/bruise_pack,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"Kf" = (/obj/structure/table/standard,/obj/item/weapon/retractor{pixel_x = 0; pixel_y = 6},/obj/item/weapon/scalpel,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"Kg" = (/obj/structure/table/standard,/obj/item/weapon/surgicaldrill,/obj/item/weapon/circular_saw,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Kc" = (/obj/machinery/clonepod,/obj/effect/floor_decal/corner/blue/full,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Kd" = (/obj/structure/table/standard,/obj/machinery/microwave,/turf/unsimulated/floor{icon_state = "white"},/area/tdome)
+"Ke" = (/obj/machinery/atmospherics/unary/cryo_cell,/obj/effect/floor_decal/corner/blue{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Kf" = (/obj/machinery/atmospherics/unary/cryo_cell,/obj/effect/floor_decal/corner/blue/full{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Kg" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/fire,/obj/effect/floor_decal/corner/green{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"Kh" = (/obj/machinery/door/blast/regular{id = "thunderdomeaxe"; name = "Axe Supply"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome)
"Ki" = (/obj/machinery/igniter,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
"Kj" = (/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
@@ -1885,8 +1885,8 @@
"Km" = (/obj/machinery/suit_cycler/syndicate{locked = 0},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/syndicate_mothership{name = "\improper Raider Base"})
"Kn" = (/obj/machinery/sleep_console,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
"Ko" = (/obj/machinery/sleep_console{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
-"Kp" = (/obj/machinery/sleeper{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
-"Kq" = (/obj/structure/table/standard,/obj/item/weapon/cautery{pixel_y = 4},/obj/item/weapon/hemostat{pixel_y = 4},/obj/item/stack/nanopaste,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Kp" = (/obj/machinery/recharge_station,/obj/machinery/camera/network/crescent{c_tag = "Shuttle East Storage"; dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape/centcom)
+"Kq" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4; icon_state = "map"; tag = "icon-manifold-f (EAST)"},/obj/effect/floor_decal/corner/blue{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"Kr" = (/obj/machinery/door/airlock/glass_medical{name = "Virology Laboratory"},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"Ks" = (/obj/structure/table/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/tdome/red,/obj/item/clothing/head/helmet/thunderdome,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/energy/sword/red,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome)
"Kt" = (/obj/machinery/door/blast/regular{id = "thunderdomegen"; name = "General Supply"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome)
@@ -1898,32 +1898,32 @@
"Kz" = (/obj/structure/shuttle/engine/propulsion,/turf/space,/area/shuttle/escape/centcom)
"KA" = (/turf/simulated/shuttle/wall{icon_state = "swall_t"; dir = 2},/area/shuttle/escape/centcom)
"KB" = (/turf/simulated/shuttle/wall{icon_state = "swall_s"; dir = 8},/area/shuttle/escape/centcom)
-"KC" = (/obj/structure/table/standard,/obj/item/weapon/bonesetter,/obj/item/weapon/bonegel{pixel_x = 4; pixel_y = 3},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"KD" = (/obj/machinery/computer/operating,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"KE" = (/obj/machinery/computer/centrifuge,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"KF" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"KG" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/glass,/obj/item/weapon/storage/box/monkeycubes,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"KH" = (/obj/machinery/recharger{pixel_y = 4},/obj/effect/landmark{name = "tdome2"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome/tdome2)
-"KI" = (/obj/machinery/recharger{pixel_y = 4},/obj/effect/landmark{name = "tdome1"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome/tdome1)
-"KJ" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/machinery/vending/wallmed1{name = "Emergency NanoMed"; pixel_x = 28},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"KK" = (/obj/machinery/smartfridge/chemistry/virology,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"KL" = (/obj/structure/bed/chair/office/dark,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"KM" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"KN" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"KO" = (/obj/machinery/vending/snack,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"KP" = (/obj/machinery/vending/coffee,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"KQ" = (/obj/machinery/computer/arcade,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"KC" = (/obj/machinery/iv_drip,/obj/effect/floor_decal/corner/green{dir = 9},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"KD" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/toxin,/obj/effect/floor_decal/corner/green{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"KE" = (/obj/effect/floor_decal/corner/blue{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"KF" = (/obj/structure/morgue,/obj/effect/floor_decal/corner/blue/full{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"KG" = (/obj/structure/table/rack,/obj/item/device/binoculars,/obj/item/device/binoculars,/obj/item/device/binoculars,/obj/item/device/binoculars,/obj/item/device/binoculars,/obj/item/device/binoculars,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
+"KH" = (/obj/machinery/recharge_station,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape/centcom)
+"KI" = (/obj/machinery/sleeper{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
+"KJ" = (/obj/structure/morgue{tag = "icon-morgue1 (WEST)"; icon_state = "morgue1"; dir = 8},/obj/effect/floor_decal/corner/blue/full{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"KK" = (/obj/structure/bed/roller,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/structure/closet/secure_closet/medical_wall{name = "O- Blood Locker"; pixel_x = -32},/obj/effect/floor_decal/corner/green{dir = 9},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"KL" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/o2,/obj/item/weapon/storage/firstaid/o2,/obj/effect/floor_decal/corner/green{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"KM" = (/obj/structure/table/rack,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/radio,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
+"KN" = (/obj/structure/table/rack,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
+"KO" = (/obj/effect/floor_decal/corner/blue{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"KP" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 5; pixel_y = 5},/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 0; pixel_y = 0},/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 7; pixel_y = 1},/obj/item/weapon/wrench,/obj/effect/floor_decal/corner/blue/full,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"KQ" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/oxygen/prechilled,/obj/effect/floor_decal/corner/blue,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"KR" = (/obj/effect/landmark{name = "tdome2"},/obj/machinery/camera/network/thunder{c_tag = "Thunderdome - Red Team"; invisibility = 101},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome/tdome2)
"KS" = (/obj/machinery/flasher{id = "flash"; name = "Thunderdome Flash"},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
"KT" = (/obj/effect/landmark{name = "tdome1"},/obj/machinery/camera/network/thunder{c_tag = "Green Team"; invisibility = 101},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome/tdome1)
-"KU" = (/obj/structure/closet/secure_closet/medical2,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"KV" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/blood/OPlus{pixel_x = 4; pixel_y = 2},/obj/item/weapon/reagent_containers/blood/OPlus{pixel_x = 4; pixel_y = 2},/obj/item/weapon/reagent_containers/blood/OMinus{pixel_x = -5; pixel_y = -1},/obj/item/weapon/reagent_containers/blood/OMinus{pixel_x = -5; pixel_y = -1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"KW" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/gloves{pixel_x = 3; pixel_y = 4},/obj/item/weapon/storage/box/masks,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"KX" = (/obj/structure/table/glass,/obj/machinery/computer/med_data/laptop,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"KY" = (/obj/item/weapon/storage/box/gloves{pixel_x = 4; pixel_y = 4},/obj/item/weapon/storage/box/masks,/obj/structure/table/glass,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"KZ" = (/obj/machinery/disease2/diseaseanalyser,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"La" = (/obj/machinery/computer/diseasesplicer,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"Lb" = (/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"KU" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/oxygen/prechilled,/obj/effect/floor_decal/corner/blue/full{dir = 4},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"KV" = (/obj/structure/morgue,/obj/effect/floor_decal/corner/blue{dir = 9},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"KW" = (/obj/structure/morgue{tag = "icon-morgue1 (WEST)"; icon_state = "morgue1"; dir = 8},/obj/effect/floor_decal/corner/blue{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"KX" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window/brigdoor{dir = 4; name = "Weapons locker"},/obj/structure/table/rack,/obj/item/clothing/suit/armor/riot,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/shield/riot,/obj/item/clothing/head/helmet/riot,/obj/structure/window/reinforced,/obj/effect/floor_decal/corner/red{dir = 9},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
+"KY" = (/obj/effect/floor_decal/corner/green/full{dir = 4},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"KZ" = (/obj/effect/floor_decal/corner/blue{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"La" = (/obj/effect/floor_decal/corner/blue/full{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Lb" = (/obj/structure/closet/crate/freezer,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/effect/floor_decal/corner/blue{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"Lc" = (/obj/machinery/atmospherics/pipe/vent,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
"Ld" = (/obj/machinery/camera/network/thunder{c_tag = "Thunderdome Arena"; invisibility = 101},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
"Le" = (/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
@@ -1948,7 +1948,7 @@
"Lx" = (/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/disposal,/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeadmin)
"Ly" = (/obj/machinery/door/airlock/centcom{name = "General Access"; opacity = 1; req_access = list(101)},/turf/unsimulated/floor{icon_state = "lino"},/area/tdome)
"Lz" = (/obj/structure/bed/chair,/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeadmin)
-"LA" = (/obj/structure/table/standard,/obj/machinery/recharger{pixel_y = 4},/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeadmin)
+"LA" = (/obj/machinery/sleeper{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
"LB" = (/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeadmin)
"LC" = (/obj/machinery/computer/pod{id = "thunderdomeaxe"; name = "Thunderdome Axe Supply"},/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeadmin)
"LD" = (/obj/machinery/computer/pod{id = "thunderdomegen"; name = "Thunderdome General Supply"},/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeadmin)
@@ -1975,14 +1975,14 @@
"LY" = (/turf/simulated/shuttle/wall{icon_state = "swall_s"; dir = 2},/area/centcom/evac)
"LZ" = (/turf/simulated/shuttle/wall{icon_state = "swall_straight"; dir = 4},/area/centcom/evac)
"Ma" = (/obj/structure/table/standard,/obj,/obj,/obj,/obj,/obj,/obj,/obj,/turf/unsimulated/beach/sand,/area/beach)
-"Mb" = (/obj/structure/table/standard,/obj/item/clothing/under/rainbow,/obj/item/clothing/glasses/sunglasses,/obj/item/clothing/head/collectable/petehat{pixel_y = 5},/turf/unsimulated/beach/sand,/area/beach)
+"Mb" = (/obj/structure/table/standard,/obj/item/clothing/under/color/rainbow,/obj/item/clothing/glasses/sunglasses,/obj/item/clothing/head/collectable/petehat{pixel_y = 5},/turf/unsimulated/beach/sand,/area/beach)
"Mc" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s (EAST)"; icon_state = "swall_s"; dir = 4},/area/centcom/evac)
"Md" = (/turf/simulated/shuttle/wall{icon_state = "swall_t"; dir = 1},/area/centcom/evac)
"Me" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/centcom/evac)
"Mf" = (/turf/simulated/shuttle/wall{icon_state = "swall_straight"; dir = 1},/area/centcom/evac)
"Mg" = (/turf/simulated/shuttle/plating,/area/centcom/evac)
"Mh" = (/turf/simulated/shuttle/plating,/area/shuttle/large_escape_pod2/centcom)
-"Mi" = (/obj/machinery/clonepod,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor3"},/area/centcom/evac)
+"Mi" = (/obj/machinery/recharger{pixel_y = 4},/obj/effect/landmark{name = "tdome2"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome/tdome2)
"Mj" = (/obj/machinery/computer/cloning,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor3"},/area/centcom/evac)
"Mk" = (/obj/machinery/dna_scannernew,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor3"},/area/centcom/evac)
"Ml" = (/obj/machinery/atmospherics/unary/cryo_cell{layer = 3.3},/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor3"},/area/centcom/evac)
@@ -2012,7 +2012,7 @@
"MJ" = (/obj/structure/shuttle/engine/propulsion{dir = 8},/turf/space,/area/centcom/evac)
"MK" = (/obj/structure/closet/emcloset,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor2"},/area/centcom/evac)
"ML" = (/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor2"},/area/centcom/evac)
-"MM" = (/obj/machinery/bodyscanner{dir = 8},/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor3"},/area/centcom/evac)
+"MM" = (/obj/machinery/recharger{pixel_y = 4},/obj/effect/landmark{name = "tdome1"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome/tdome1)
"MN" = (/obj/machinery/body_scanconsole,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor3"},/area/centcom/evac)
"MO" = (/obj/machinery/optable,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor3"},/area/centcom/evac)
"MP" = (/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/evac)
@@ -2020,11 +2020,11 @@
"MR" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/fire{pixel_x = -2; pixel_y = 4},/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor3"},/area/centcom/evac)
"MS" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 0},/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor3"},/area/centcom/evac)
"MT" = (/obj/machinery/computer/crew,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor3"},/area/centcom/evac)
-"MU" = (/obj/machinery/sleeper{dir = 8},/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor3"},/area/centcom/evac)
+"MU" = (/obj/structure/table/standard,/obj/machinery/recharger{pixel_y = 4},/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeadmin)
"MV" = (/obj/machinery/sleep_console,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor3"},/area/centcom/evac)
"MW" = (/obj/structure/closet/crate/freezer,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor3"},/area/centcom/evac)
"MX" = (/obj/structure/closet/crate/medical,/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/weapon/storage/firstaid/o2{layer = 2.8; pixel_x = 4; pixel_y = 6},/obj/item/weapon/storage/box/masks{pixel_x = 0; pixel_y = 0},/obj/item/weapon/storage/box/gloves{pixel_x = 3; pixel_y = 4},/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/fire{layer = 2.9; pixel_x = 2; pixel_y = 3},/obj/item/weapon/storage/firstaid/adv{pixel_x = -2},/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor3"},/area/centcom/evac)
-"MY" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor3"},/area/centcom/evac)
+"MY" = (/obj/machinery/computer/card,/obj/effect/floor_decal/corner/red{dir = 6},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
"MZ" = (/obj/structure/morgue{tag = "icon-morgue1 (WEST)"; icon_state = "morgue1"; dir = 8},/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor3"},/area/centcom/evac)
"Na" = (/obj/structure/bed/chair,/obj/effect/landmark{name = "endgame_exit"},/obj/item/toy/plushie/mouse{desc = "A plushie of a small fuzzy rodent."; name = "Woodrat"},/turf/unsimulated/beach/sand,/area/beach)
"Nb" = (/obj/structure/bed/chair,/obj/effect/landmark{name = "endgame_exit"},/turf/unsimulated/beach/sand,/area/beach)
@@ -2120,12 +2120,12 @@
"ON" = (/obj/structure/bed/chair,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor2"},/area/centcom/evac)
"OO" = (/obj/machinery/door/airlock/glass_security{name = "Escape Shuttle Cell"; req_access = list(1)},/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor4"},/area/centcom/evac)
"OP" = (/turf/unsimulated/floor{tag = "icon-asteroid"; icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
-"OQ" = (/obj/item/tape/engineering{tag = "icon-engineering_v"; icon_state = "engineering_v"},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"OQ" = (/obj/structure/filingcabinet/chestdrawer{desc = "A large drawer filled with autopsy reports."; name = "Autopsy Reports"},/obj/effect/floor_decal/corner/blue{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"OR" = (/obj/structure/table/standard,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor2"},/area/centcom/evac)
"OS" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/orange,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor4"},/area/centcom/evac)
-"OT" = (/obj/item/tape/engineering{tag = "icon-engineering_v"; icon_state = "engineering_v"},/turf/unsimulated/floor{tag = "icon-asteroid"; icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
-"OU" = (/obj/structure/table/reinforced,/obj/item/weapon/tray{pixel_y = 5},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership{name = "\improper Raider Base"})
-"OV" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/drinkingglasses{pixel_x = 1; pixel_y = 4},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"OT" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"OU" = (/obj/machinery/vending/cola,/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/tram)
+"OV" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/glasses/square{pixel_x = 1; pixel_y = 4},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership{name = "\improper Raider Base"})
"OW" = (/obj/machinery/portable_atmospherics/powered/pump,/turf/simulated/shuttle/plating,/area/centcom/evac)
"OX" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/shuttle/plating,/area/centcom/evac)
"OY" = (/obj/structure/reagent_dispensers/watertank,/obj/item/weapon/reagent_containers/glass/bucket{amount_per_transfer_from_this = 50},/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/evac)
@@ -2135,10 +2135,10 @@
"Pc" = (/obj/structure/table/standard,/obj/machinery/chemical_dispenser/bar_soft/full,/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership{name = "\improper Raider Base"})
"Pd" = (/turf/simulated/shuttle/wall{icon_state = "swall_f"; dir = 4},/area/centcom/evac)
"Pe" = (/obj/item/weapon/bedsheet/orange,/obj/effect/decal/cleanable/cobweb2{tag = "icon-cobweb1"; icon_state = "cobweb1"},/obj/structure/bed/padded,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"})
-"Pf" = (/obj/structure/table/reinforced,/obj/machinery/microwave{pixel_x = -1; pixel_y = 8},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Pf" = (/obj/machinery/vending/cigarette,/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/tram)
"Pg" = (/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"})
"Ph" = (/obj/structure/closet/secure_closet/freezer/kitchen,/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership{name = "\improper Raider Base"})
-"Pi" = (/obj/item/tape/engineering{tag = "icon-engineering_h"; icon_state = "engineering_h"},/turf/unsimulated/floor{tag = "icon-asteroid"; icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Pi" = (/obj/structure/closet/l3closet/virology,/obj/item/clothing/mask/gas,/obj/effect/floor_decal/industrial/warning{dir = 9},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"Pj" = (/obj/structure/urinal{pixel_y = 32},/obj/item/weapon/soap/syndie,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership{name = "\improper Raider Base"})
"Pk" = (/obj/structure/urinal{pixel_y = 32},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership{name = "\improper Raider Base"})
"Pl" = (/obj/structure/closet/secure_closet/freezer/fridge,/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership{name = "\improper Raider Base"})
@@ -2148,7 +2148,7 @@
"Pp" = (/obj/machinery/gibber,/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership{name = "\improper Raider Base"})
"Pq" = (/obj/structure/kitchenspike,/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership{name = "\improper Raider Base"})
"Pr" = (/obj/item/clothing/head/xenos,/turf/unsimulated/floor{tag = "icon-asteroid"; icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
-"Ps" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Ps" = (/obj/machinery/vending/coffee,/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/tram)
"Pt" = (/obj/structure/table/rack,/obj/item/weapon/gun/launcher/spikethrower,/turf/unsimulated/floor{tag = "icon-asteroid"; icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
"Pu" = (/obj/item/clothing/mask/gas/swat{desc = "A close-fitting mask clearly not made for a human face."; name = "\improper alien mask"},/turf/unsimulated/floor{tag = "icon-asteroid"; icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
"Pv" = (/obj/item/xenos_claw,/turf/unsimulated/floor{tag = "icon-asteroid"; icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
@@ -2213,21 +2213,21 @@
"QC" = (/obj/machinery/door/airlock/hatch{frequency = 1331; icon_state = "door_closed"; id_tag = "vox_southeast_lock"; locked = 0; req_access = list(150)},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
"QD" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/machinery/access_button{command = "cycle_interior"; frequency = 1331; master_tag = "vox_west_control"; pixel_x = -22; req_one_access = list(150)},/turf/simulated/shuttle/plating,/area/skipjack_station/start)
"QE" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/ionrifle,/obj/item/weapon/material/harpoon,/obj/item/clothing/suit/space/void/merc,/obj/item/clothing/head/helmet/space/void/merc,/obj/item/clothing/head/helmet/space/void/engineering,/obj/item/clothing/suit/space/void/engineering,/obj/item/weapon/tank/oxygen,/obj/item/weapon/tank/oxygen,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/weapon/rig/light/stealth,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
-"QF" = (/obj/machinery/microwave{pixel_x = -1; pixel_y = 8},/obj/structure/table/steel,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"QF" = (/obj/machinery/clonepod,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor3"},/area/centcom/evac)
"QG" = (/obj/item/seeds/potatoseed,/obj/item/seeds/potatoseed,/obj/item/seeds/ambrosiavulgarisseed,/obj/item/weapon/material/minihoe,/obj/item/weapon/beartrap,/obj/structure/table/steel,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
"QH" = (/obj/machinery/vending/hydroseeds,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
"QI" = (/obj/structure/table/rack,/obj/item/weapon/melee/energy/sword/pirate,/obj/item/clothing/suit/space/pirate,/obj/item/clothing/suit/space/pirate,/obj/item/weapon/tank/oxygen,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start)
"QJ" = (/obj/structure/table/rack,/obj/item/weapon/storage/belt/utility/full,/obj/item/weapon/storage/belt/utility/full,/obj/item/device/multitool,/obj/item/device/multitool,/obj/item/clothing/shoes/magboots,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
-"QK" = (/obj/machinery/washing_machine,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"QK" = (/obj/machinery/bodyscanner{dir = 8},/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor3"},/area/centcom/evac)
"QL" = (/obj/structure/table/standard,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/flame/lighter/zippo,/obj/item/clothing/gloves/yellow,/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/weapon/card/emag,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
"QM" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/sniperrifle,/obj/item/clothing/suit/space/void/mining,/obj/item/clothing/head/helmet/space/void/mining,/obj/item/clothing/head/helmet/space/void/atmos,/obj/item/clothing/suit/space/void/atmos,/obj/item/weapon/tank/oxygen,/obj/item/weapon/tank/oxygen,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
"QN" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/machinery/access_button{command = "cycle_interior"; frequency = 1331; master_tag = "vox_east_control"; pixel_x = 22; req_access = list(150)},/turf/simulated/shuttle/plating,/area/skipjack_station/start)
"QO" = (/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
"QP" = (/turf/simulated/shuttle/plating,/area/skipjack_station/start)
"QQ" = (/obj/structure/reagent_dispensers/watertank,/obj/machinery/light/small{dir = 4},/turf/simulated/shuttle/plating,/area/skipjack_station/start)
-"QR" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{id = "skipjackshutters"; name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start)
-"QS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/regular{id = "skipjackshutters"; name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start)
-"QT" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/regular{id = "skipjackshutters"; name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start)
+"QR" = (/obj/machinery/button/remote/blast_door{id = "smindicate"; name = "ship lockdown control"; pixel_x = -25},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"QS" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window/brigdoor{dir = 4; name = "Weapons locker"},/obj/structure/table/rack,/obj/item/clothing/suit/armor/riot,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/shield/riot,/obj/item/clothing/head/helmet/riot,/obj/structure/window/reinforced{dir = 1},/obj/effect/floor_decal/corner/red{dir = 9},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
+"QT" = (/obj/structure/table/standard,/obj/structure/flora/pottedplant{icon_state = "plant-06"; pixel_y = 8; tag = "icon-plant-06"},/obj/effect/floor_decal/corner/red{dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
"QU" = (/obj/machinery/door/airlock/hatch{req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start)
"QV" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/engie,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/engie,/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/plating,/area/skipjack_station/start)
"QW" = (/obj/item/robot_parts/head,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
@@ -2237,8 +2237,8 @@
"Ra" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
"Rb" = (/obj/machinery/floodlight,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
"Rc" = (/obj/structure/table/rack,/obj/item/weapon/gun/launcher/crossbow,/obj/item/stack/rods{amount = 10},/obj/machinery/light/small{dir = 8},/obj/item/weapon/beartrap,/obj/item/weapon/beartrap,/obj/item/weapon/beartrap,/obj/item/weapon/beartrap,/obj/item/weapon/beartrap,/obj/item/weapon/beartrap,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start)
-"Rd" = (/obj/structure/table/rack,/obj/item/weapon/grenade/empgrenade,/obj/item/weapon/grenade/flashbang,/obj/item/weapon/grenade/spawnergrenade,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start)
-"Re" = (/obj/structure/table/steel,/obj/machinery/recharger,/obj/machinery/light/small{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start)
+"Rd" = (/obj/structure/bed/chair/office/dark,/obj/machinery/button/remote/blast_door{desc = "A remote control switch for port-side blast doors."; id = "CentComPort"; name = "Security Doors"; pixel_x = -12; pixel_y = -25; req_access = list(101)},/obj/effect/floor_decal/corner/red,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
+"Re" = (/obj/machinery/sleeper{dir = 8},/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor3"},/area/centcom/evac)
"Rf" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
"Rg" = (/obj/item/robot_parts/robot_suit,/obj/item/robot_parts/r_leg,/obj/item/robot_parts/r_arm,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
"Rh" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{id = "skipjackshutters"; name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/plating,/area/skipjack_station/start)
@@ -2256,7 +2256,7 @@
"Rt" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start)
"Ru" = (/obj/structure/reagent_dispensers/beerkeg/fakenuke,/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership)
"Rv" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start)
-"Rw" = (/obj/machinery/bodyscanner{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/skipjack_station/start)
+"Rw" = (/obj/machinery/microwave{pixel_x = -1; pixel_y = 8},/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership{name = "\improper Raider Base"})
"Rx" = (/obj/machinery/light/small{dir = 1},/obj/machinery/body_scanconsole,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/skipjack_station/start)
"Ry" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/skipjack_station/start)
"Rz" = (/obj/structure/toilet{dir = 4},/turf/simulated/shuttle/plating,/area/skipjack_station/start)
@@ -2282,6 +2282,7 @@
"RT" = (/obj/structure/mirror{pixel_y = 28},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/wizard_station)
"RU" = (/obj/structure/shuttle/engine/propulsion,/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/skipjack_station/start)
"RV" = (/obj/structure/table/standard,/obj/item/weapon/legcuffs,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/skipjack_station/start)
+"RW" = (/obj/item/device/camera{name = "Autopsy Camera"; pixel_x = -2; pixel_y = 7},/obj/item/weapon/paper_bin{pixel_y = -6},/obj/item/weapon/pen/red{pixel_x = -1; pixel_y = -9},/obj/item/weapon/pen/blue{pixel_x = 3; pixel_y = -5},/obj/structure/table/standard,/obj/effect/floor_decal/corner/blue{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"RX" = (/obj/machinery/light/small,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start)
"RY" = (/obj/structure/table/standard,/obj/item/weapon/circular_saw{pixel_y = 8},/obj/item/weapon/hemostat,/obj/item/weapon/scalpel,/obj/item/stack/medical/advanced/bruise_pack,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/skipjack_station/start)
"RZ" = (/obj/structure/simple_door/wood{tag = "icon-wood"; icon_state = "wood"},/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
@@ -2297,10 +2298,10 @@
"Sj" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/skipjack_station/start)
"Sk" = (/obj/item/weapon/bedsheet/rainbow,/obj/structure/bed/padded,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start)
"Sl" = (/obj/item/weapon/bedsheet/hos,/obj/structure/bed/padded,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start)
-"Sm" = (/obj/structure/table/standard,/obj/item/weapon/bonesetter,/obj/item/weapon/bonegel,/obj/item/weapon/FixOVein,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/skipjack_station/start)
+"Sm" = (/obj/machinery/vending/snack,/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/tram)
"Sn" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/bag/cash,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
"So" = (/turf/unsimulated/floor{icon_state = "lino"},/area/wizard_station)
-"Sp" = (/obj/structure/bed,/obj/item/weapon/bedsheet/rd,/turf/unsimulated/floor{icon_state = "lino"},/area/wizard_station)
+"Sp" = (/obj/machinery/porta_turret/crescent,/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/tram)
"Sq" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/suit/wizrobe/red,/obj/item/clothing/shoes/sandal,/obj/item/clothing/head/wizard/red,/obj/item/weapon/staff,/turf/unsimulated/floor{icon_state = "lino"},/area/wizard_station)
"Sr" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/suit/wizrobe/marisa,/obj/item/clothing/shoes/sandal/marisa,/obj/item/clothing/head/wizard/marisa,/obj/item/weapon/staff/broom,/turf/unsimulated/floor{icon_state = "lino"},/area/wizard_station)
"Ss" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/suit/wizrobe/magusblue,/obj/item/clothing/head/wizard/magus,/obj/item/weapon/staff,/turf/unsimulated/floor{icon_state = "lino"},/area/wizard_station)
@@ -2309,7 +2310,7 @@
"Sv" = (/obj/item/weapon/bedsheet/orange,/obj/structure/bed/padded,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start)
"Sw" = (/obj/item/weapon/bedsheet/green,/obj/machinery/light/small{dir = 4},/obj/structure/bed/padded,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start)
"Sx" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/skipjack_station/start)
-"Sy" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/adv{pixel_x = 1},/obj/item/weapon/storage/firstaid/toxin{pixel_x = 3; pixel_y = 3},/obj/machinery/light/small{dir = 4},/obj/structure/closet/secure_closet/medical_wall{pixel_x = 32; pixel_y = 0; req_access = list(150)},/obj/item/weapon/storage/firstaid/fire{pixel_x = 1},/obj/item/weapon/storage/firstaid/o2{pixel_x = 3; pixel_y = 3},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/skipjack_station/start)
+"Sy" = (/obj/item/weapon/tray{pixel_y = 5},/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership{name = "\improper Raider Base"})
"Sz" = (/obj/structure/bookcase,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
"SA" = (/obj/machinery/vending/magivend,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
"SB" = (/obj/structure/simple_door/wood{tag = "icon-wood"; icon_state = "wood"},/turf/unsimulated/floor{icon_state = "lino"},/area/wizard_station)
@@ -2331,7 +2332,7 @@
"SR" = (/obj/item/target,/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/wizard_station)
"SS" = (/obj/item/target/syndicate,/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/wizard_station)
"ST" = (/obj/item/target/alien,/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/wizard_station)
-"SU" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows2"; dir = 1},/area/wizard_station)
+"SU" = (/obj/machinery/microwave{pixel_x = -1; pixel_y = 8},/obj/structure/table/steel,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
"SV" = (/obj/structure/table/rack,/obj/item/weapon/material/knife/ritual,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
"SW" = (/obj/structure/kitchenspike,/obj/structure/table/marble,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
"SX" = (/obj/structure/table/woodentable,/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/snacks/milosoup,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
@@ -2365,26 +2366,95 @@
"Tz" = (/obj/structure/table/reinforced,/obj/machinery/computer/skills,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall)
"TA" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall)
"TB" = (/obj/machinery/computer/teleporter,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
-"TC" = (/obj/machinery/teleport/hub,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
-"TD" = (/obj/machinery/teleport/station,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"TC" = (/obj/machinery/washing_machine,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"TD" = (/obj/structure/table/steel,/obj/machinery/recharger,/obj/machinery/light/small{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start)
"TE" = (/obj/structure/table/steel,/obj/item/clothing/glasses/regular,/obj/item/clothing/glasses/regular,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start)
"TF" = (/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/pipe/tank/air{dir = 1; start_pressure = 740},/turf/simulated/shuttle/plating,/area/skipjack_station/start)
"TG" = (/obj/machinery/light/small{dir = 4},/obj/machinery/atmospherics/pipe/tank/air{dir = 1; start_pressure = 740},/turf/simulated/shuttle/plating,/area/skipjack_station/start)
"TH" = (/obj/structure/table/woodentable,/obj/item/weapon/paper{info = "\[center]\[b]LIST OF SPELLS AVAILABLE\[/b]\[/center]\[br]\[br]Magic Missile:\[br]This spell fires several, slow moving, magic projectiles at nearby targets. If they hit a target, it is paralyzed and takes minor damage.\[br]\[br]Fireball:\[br]This spell fires a fireball at a target and does not require wizard garb. Be careful not to fire it at people that are standing next to you.\[br]\[br]Disintegrate:\[br]This spell instantly kills somebody adjacent to you with the vilest of magick. It has a long cooldown.\[br]\[br]Disable Technology:\[br]This spell disables all weapons, cameras and most other technology in range.\[br]\[br]Smoke:\[br]This spell spawns a cloud of choking smoke at your location and does not require wizard garb.\[br]\[br]Blind:\[br]This spell temporarly blinds a single person and does not require wizard garb.\[br]Forcewall:\[br]This spell creates an unbreakable wall that lasts for 30 seconds and does not require wizard garb.\[br]\[br]Blink:\[br]This spell randomly teleports you a short distance. Useful for evasion or getting into areas if you have patience.\[br]\[br]Teleport:\[br]This spell teleports you to a type of area of your selection. Very useful if you are in danger, but has a decent cooldown, and is unpredictable.\[br]\[br]Mutate:\[br]This spell causes you to turn into a hulk, and gain telekinesis for a short while.\[br]\[br]Ethereal Jaunt:\[br]This spell creates your ethereal form, temporarily making you invisible and able to pass through walls.\[br]\[br]Knock:\[br]This spell opens nearby doors and does not require wizard garb.\[br]"; name = "List of Available Spells (READ)"},/obj/item/clothing/glasses/regular,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
-"TI" = (/obj/machinery/door/airlock/centcom{name = "Special Operations"; opacity = 1; req_access = list(103)},/obj/effect/floor_decal/corner/red{dir = 10},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
-"TJ" = (/obj/effect/floor_decal/corner/red{dir = 10},/obj/machinery/door/airlock/centcom{name = "Special Operations"; opacity = 1; req_access = list(103)},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
-"TK" = (/obj/machinery/computer/arcade/orion_trail,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security)
+"TI" = (/obj/structure/table/standard,/obj/item/weapon/bonesetter,/obj/item/weapon/bonegel,/obj/item/weapon/FixOVein,/obj/item/stack/nanopaste,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/skipjack_station/start)
+"TJ" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/adv{pixel_x = 1},/obj/item/weapon/storage/firstaid/toxin{pixel_x = 3; pixel_y = 3},/obj/machinery/light/small{dir = 4},/obj/structure/closet/secure_closet/medical_wall{pixel_x = 32; pixel_y = 0; req_access = list(150)},/obj/item/weapon/storage/firstaid/fire{pixel_x = 1},/obj/item/weapon/storage/firstaid/o2{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/firstaid/regular,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/skipjack_station/start)
+"TK" = (/obj/machinery/computer/secure_data,/obj/machinery/camera/network/crescent{c_tag = "Crescent Arrivals North"; dir = 8},/obj/effect/floor_decal/corner/red/full{dir = 4},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
"TL" = (/obj/effect/floor_decal/corner/white{dir = 5},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"TM" = (/obj/structure/table/reinforced,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"TN" = (/obj/structure/table/reinforced,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"TO" = (/obj/structure/bed/chair/comfy/teal{dir = 1},/obj/effect/floor_decal/carpet,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command)
"TP" = (/obj/effect/floor_decal/carpet{dir = 4},/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{dir = 6},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command)
-"TQ" = (/obj/machinery/computer/arcade/battle,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
+"TQ" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window/brigdoor{dir = 4; name = "Weapons locker"},/obj/structure/table/rack,/obj/item/clothing/suit/armor/riot,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/shield/riot,/obj/item/clothing/head/helmet/riot,/obj/structure/window/reinforced,/obj/effect/floor_decal/corner/red/full,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
"TR" = (/obj/machinery/door/airlock/centcom{name = "General Access"; opacity = 1; req_access = list(101)},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall)
"TS" = (/obj/structure/table/woodentable{dir = 5},/obj/machinery/cash_register/civilian,/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/bar)
"TT" = (/obj/structure/table/woodentable,/obj/item/weapon/spacecash/c1,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
"TU" = (/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/obj/effect/floor_decal/corner/red/diagonal,/obj/machinery/computer/arcade/orion_trail,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/specops)
-
+"TV" = (/obj/effect/floor_decal/corner/pink{dir = 9},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"TW" = (/obj/effect/floor_decal/corner/pink{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"TX" = (/obj/effect/floor_decal/corner/pink{dir = 4},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"TY" = (/obj/effect/floor_decal/corner/pink/full{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"TZ" = (/obj/machinery/shower{dir = 4; icon_state = "shower"; pixel_x = 0; pixel_y = 0},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Ua" = (/obj/structure/closet/l3closet/virology,/obj/item/clothing/mask/gas,/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Ub" = (/obj/machinery/computer/cloning,/obj/effect/floor_decal/corner/blue{dir = 10},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Uc" = (/obj/machinery/bodyscanner{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/skipjack_station/start)
+"Ud" = (/obj/structure/closet/wardrobe/white,/obj/effect/floor_decal/corner/blue{dir = 10},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Ue" = (/obj/machinery/dna_scannernew,/obj/effect/floor_decal/corner/blue{dir = 10},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Uf" = (/obj/structure/table/standard,/obj/item/weapon/book/manual/medical_cloning,/obj/effect/floor_decal/corner/blue{dir = 10},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Ug" = (/obj/effect/floor_decal/corner/blue{dir = 10},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Uh" = (/obj/item/weapon/storage/box/bodybags,/obj/item/weapon/storage/box/bodybags,/obj/structure/table/standard,/obj/effect/floor_decal/corner/blue{dir = 10},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Ui" = (/obj/item/weapon/autopsy_scanner,/obj/item/weapon/scalpel,/obj/structure/table/standard,/obj/effect/floor_decal/corner/blue/full{dir = 4},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Uj" = (/obj/structure/bed/chair,/obj/effect/floor_decal/corner/pink{dir = 10},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Uk" = (/obj/effect/floor_decal/corner/pink,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Ul" = (/obj/structure/bed/chair,/obj/effect/floor_decal/corner/pink/full{dir = 4},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Um" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Un" = (/obj/structure/closet/l3closet/virology,/obj/item/clothing/mask/gas,/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Uo" = (/obj/item/weapon/storage/box/syringes{pixel_x = 4; pixel_y = 4},/obj/item/weapon/storage/box/beakers,/obj/item/weapon/reagent_containers/dropper,/obj/structure/table/glass,/obj/structure/reagent_dispensers/virusfood{pixel_x = 0; pixel_y = 28},/obj/effect/floor_decal/corner/green{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Up" = (/obj/machinery/disease2/incubator,/obj/effect/floor_decal/corner/green/full{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Uq" = (/obj/machinery/disease2/isolator,/obj/effect/floor_decal/corner/green/full{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Ur" = (/obj/structure/closet/secure_closet/security,/obj/effect/floor_decal/corner/red/full{dir = 4},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
+"Us" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/green,/obj/effect/floor_decal/corner/green{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Ut" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/green,/obj/effect/floor_decal/corner/green/full{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Uu" = (/obj/structure/table/standard,/obj/item/weapon/FixOVein{pixel_x = -6; pixel_y = 1},/obj/item/stack/medical/advanced/bruise_pack,/obj/effect/floor_decal/corner/pink{dir = 9},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Uv" = (/obj/structure/table/standard,/obj/item/weapon/retractor{pixel_x = 0; pixel_y = 6},/obj/item/weapon/scalpel,/obj/effect/floor_decal/corner/pink{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Uw" = (/obj/structure/table/standard,/obj/item/weapon/surgicaldrill,/obj/item/weapon/circular_saw,/obj/effect/floor_decal/corner/pink/full{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Ux" = (/obj/structure/table/standard,/obj/item/weapon/cautery{pixel_y = 4},/obj/item/weapon/hemostat{pixel_y = 4},/obj/item/stack/nanopaste,/obj/effect/floor_decal/corner/pink{dir = 9},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Uy" = (/obj/effect/floor_decal/corner/pink{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Uz" = (/obj/structure/table/standard,/obj/item/weapon/bonesetter,/obj/item/weapon/bonegel{pixel_x = 4; pixel_y = 3},/obj/effect/floor_decal/corner/pink{dir = 9},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"UA" = (/obj/machinery/computer/operating,/obj/effect/floor_decal/corner/pink{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"UB" = (/obj/machinery/computer/centrifuge,/obj/effect/floor_decal/corner/green{dir = 9},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"UC" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/corner/green/full{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"UD" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/machinery/vending/wallmed1{name = "Emergency NanoMed"; pixel_x = 28},/obj/effect/floor_decal/corner/pink{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"UE" = (/obj/machinery/smartfridge/chemistry/virology,/obj/effect/floor_decal/corner/green{dir = 9},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"UF" = (/obj/structure/bed/chair/office/dark,/obj/effect/floor_decal/corner/green{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"UG" = (/obj/machinery/vending/coffee,/obj/effect/floor_decal/corner/green{dir = 10},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"UH" = (/obj/machinery/vending/snack,/obj/effect/floor_decal/corner/green/full,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"UI" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/green,/obj/effect/floor_decal/corner/green{dir = 10},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"UJ" = (/obj/machinery/computer/arcade,/obj/effect/floor_decal/corner/green{dir = 10},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"UK" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/green,/obj/effect/floor_decal/corner/green/full{dir = 4},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"UL" = (/obj/machinery/iv_drip,/obj/effect/floor_decal/corner/pink{dir = 10},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"UM" = (/obj/structure/closet/secure_closet/medical2,/obj/effect/floor_decal/corner/pink/full,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"UN" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/blood/OPlus{pixel_x = 4; pixel_y = 2},/obj/item/weapon/reagent_containers/blood/OPlus{pixel_x = 4; pixel_y = 2},/obj/item/weapon/reagent_containers/blood/OMinus{pixel_x = -5; pixel_y = -1},/obj/item/weapon/reagent_containers/blood/OMinus{pixel_x = -5; pixel_y = -1},/obj/effect/floor_decal/corner/pink{dir = 10},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"UO" = (/obj/effect/floor_decal/corner/pink{dir = 10},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"UP" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/gloves{pixel_x = 3; pixel_y = 4},/obj/item/weapon/storage/box/masks,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/effect/floor_decal/corner/pink/full{dir = 4},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"UQ" = (/obj/item/weapon/storage/box/gloves{pixel_x = 4; pixel_y = 4},/obj/item/weapon/storage/box/masks,/obj/structure/table/glass,/obj/effect/floor_decal/corner/green{dir = 10},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"UR" = (/obj/structure/table/glass,/obj/machinery/computer/med_data/laptop,/obj/effect/floor_decal/corner/green/full,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"US" = (/obj/machinery/computer/diseasesplicer,/obj/effect/floor_decal/corner/green/full{dir = 4},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"UT" = (/obj/machinery/disease2/diseaseanalyser,/obj/effect/floor_decal/corner/green{dir = 10},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"UU" = (/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/corner/green/full,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"UV" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/obj/machinery/door/window/southright{name = "Arrivals Processing"; req_access = list(101)},/obj/structure/window/reinforced{dir = 4},/obj/effect/floor_decal/corner/red/full{dir = 4},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
+"UW" = (/obj/structure/table/reinforced,/obj/machinery/computer/skills,/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/corner/red/full,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
+"UX" = (/obj/structure/table/standard,/obj/item/stack/material/phoron,/obj/item/stack/material/phoron,/obj/item/stack/material/phoron,/obj/item/stack/material/phoron,/obj/item/stack/material/phoron,/obj/item/stack/material/phoron,/obj/effect/floor_decal/corner/beige/full{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"UY" = (/obj/effect/floor_decal/corner/beige{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"UZ" = (/obj/structure/table/standard,/obj/machinery/reagentgrinder,/obj/effect/floor_decal/corner/beige{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Va" = (/obj/machinery/chem_master,/obj/effect/floor_decal/corner/beige/full{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Vb" = (/obj/effect/floor_decal/corner/beige{dir = 9},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Vc" = (/obj/machinery/chemical_dispenser/ert,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/effect/floor_decal/corner/beige{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Vd" = (/obj/structure/closet/secure_closet/chemical,/obj/effect/floor_decal/corner/beige{dir = 9},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Ve" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/effect/floor_decal/corner/beige{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Vf" = (/obj/structure/closet/secure_closet/medical1,/obj/effect/floor_decal/corner/beige{dir = 9},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Vg" = (/obj/structure/closet/secure_closet/medical1,/obj/effect/floor_decal/corner/beige/full,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Vh" = (/obj/effect/floor_decal/corner/beige,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Vi" = (/obj/effect/floor_decal/corner/beige{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Vj" = (/obj/machinery/chem_master,/obj/effect/floor_decal/corner/beige/full{dir = 4},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Vk" = (/obj/effect/floor_decal/corner/beige{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Vl" = (/obj/structure/table/reinforced,/obj/effect/floor_decal/corner/red{dir = 5},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
+
(1,1,1) = {"
aaabacadaeafagahaaaiajakalamanaoagafajacadahakaeamaiaoalahajapaqarasatauavawaxayaaabacadaeafagahaaaiajakalamanaoagafajacadahakazaAaBaCaDaEaFaGaHaIaJaKaLaMaNaOaAaBaCaDaEaFaGaHaIaJazaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaQaQaQaQaQaQaQaQaQaQaQaQaQaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRaSaSaSaSaSaSaSaSaSaSaRaSaSaSaSaSaSaSaSaSaSaRaSaSaSaSaSaSaSaSaSaSaRaSaSaSaSaSaSaSaSaSaSaRaSaSaSaSaSaSaSaSaSaSaRaSaSaSaSaSaSaSaSaSaSaRaSaSaSaSaSaSaSaSaSaSaR
ajaTaUaVaWaXaYaZbabbbcbdbebfbgbhaYaXbcaUaVaZbdaWbfbbbhbeaZbcabauavawbibjbkblbmbeaXbfaZbcbbbhbeaXbfaZbcbbbhbhbeaXbfaZbcbbbhbhbmazaEbnbobpaqarasatauavawbibjbkblbqbnbobpaqarasatauaNazaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaQbrbsaQbrbsaQbrbsaQbrbsaQaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPbtbubububvbububububububwbxbybxbybxbxbybxbybxbwbzbAbAbAbAbAbAbAbAbAbwbBbCbDbDbDbDbDbDbDbDbwbEbEbEbEbEbEbEbEbEbEbwbFbFbFbFbFbFbFbFbFbFbwbGbHbIbJbKbKbKbKbKbLbM
@@ -2441,7 +2511,7 @@ acbeaXbfaZbcbbbhbcbeaXbfaZbcbbbhbcbbbhbeaXbfaZbcbbbhbhaaaPaPaPbaagbdaVbbjxhQhZiq
aibhbgaVaYbfaXaTbfbhbgaVaYbfaXaTbfaXaTbhbgaVaYbfaXaTaTajaPaPaPbcacbabeaXjHiaidhZichRhTiehZhSiqhUhQibhRhTiehZeBbcbbbhaabcaUazhsaZbebebdaZbbbbbbbbbbfmiwjgjhiwivivivivivivivivivfmaPaPaPaPbdaZbebdaZbebehsazaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPjwjzjzjzjzjzjIhCjJjKjKjKjLhCjMjzjzjzjzjFjzjzjAjzjAjzjBjzjBjwaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
afaTcGiBiCiDflaXayiEiFdIaxaXaXcGiBiCiDflbcayiEiFdIaxaWamaPaPaPbfaibcbhbgjNhPhTidhRhUhQiridichZieiahVhUhQirideMbfaXaTajbfbbazhsaYbhbhbaaYbbbbbbbbbbfmiGixjriGivivivivivivivivivfmaPaPaPaPbaaYbhbaaYbhbhhsazaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPjwjzjzjzjzjzhCjOjOjOjOjOjOjOhCjPjzjzjGjGjGjGjGjGjGjGjQjRjGjwaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
aobfhqjSjTjUcjbghgjVjWjXbmbgbghqjYjZkacjaZhgkbkckdbmbaacaPaPaPaVafbfaTbdifhShQhThUieiaibhThRidirhPiqieiaibhTfmaVbgaWamaVbgazhsaUaTaTbcaUbbbbbbbbbbfmfmfmivivivivivivivivivfmfmfmaPaPaPaPbcaUaTbcaUaTaThsazaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPjwjzjzjzjzjzhCjOjOjOjOjOjOjOhCjPjzkekfkgkgkhjwjwjwjwjwjwjwjwaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
-abaThqjSjTjUcjbghgjVjWjXbmbgbghqjYjZkacjaZhgkbkckdbmbcaiaPaPaPbeanaVaWbakiiciahQiehSirhUiqibhRhZiaicirhPhVhQfAbebdaZadbebdazhsbbaWaWbfbbaWaPaPaPaPaPaPititjEjEjEjEjEjEjEititaPaPaPaPaPaPbfbbaWbfbbaWaWhsazaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPjwjzjzjzjzjzhCjOjOjOjOjOjOjOhCjPjFkekjioioiokkkljwkmknkojwaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+abaThqjSjTjUcjbghgjVjWjXbmbgbghqjYjZkacjaZhgkbkckdbmbcaiaPaPaPbeanaVaWbakiiciahQiehSirhUiqibhRhZiaicirhPhVhQfAbebdaZadbebdazhsbbaWaWbfbbaWaPaPaPaPaPaPititjEjEjEjEjEjEjEititaPaPaPaPaPaPbfbbaWbfbbaWaWhsazaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPjwjzjzjzjzjzhCjOjOjOjOjOjOjOhCjPjFkekjioioiokkkljwisknkojwaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
aebcbmkpkqkrcHbdcFksktkubNbdbdbmkvkwkxcHaYcFkykzkAbNbfafaPaPaPbhakbeaZbckBhRhPiairicibiehZhVhUidhPhRibhSiqiafKbhbaaYalbhbaazhsaXaZaZaVaXaZaVaXaZaVaXaZaVfAeljNfAfAeleljNfAaZaVaXaZaVaXaZaVaXaZaVaXaZaZhsazaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPjwjzjzjzjzjzkChChChCjOhChChCkDjzjzkEkjioiokFioiokGioioiojwaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
ahaUbNkHkIjTaybahqkJkKkLbYbababNkMkNjZayaUhqkOkPkQbYaVanaPaPaPaTaabhaYbfhphUhShPibhRhViridiqiehThShUhVichZhPfJaTbcaUaoaTbcazhsbgaYaYbebgaYbebgaYbebgaYbebgaYbebgbgaYaYbebgaYbebgaYbebgaYbebgaYbebgaYaYhsazaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPjwjzjzjzjzjzjzjzhCjOjOjOhCkRjGjGjGkSkTiokUkVkWiojwiokXkXjwaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
agbbbYjUkYkqcDbcbmkZjXlacjbcbcbYkalbkwcDbbbmlckdldcjbeakaPaPaPaWajaTaUaVdGieichShVhUiqibhThZirhQicieiqhRidhSdJaWbfbbabaWbfazhsbdaUaUbhbdaUbhbdaUbhbdaUbhbdaUbhbdbdaUaUbhbdaUbhbdaUbhbdaUbhbdaUbhbdaUaUhsazaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPjwjzjzjzjzjzjzjzhCjOjOjOhCkfkgkgkgkhjwiokUlekWiojwjwjwjwaRaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
@@ -2454,12 +2524,12 @@ aVbgaTbbbfaUbbbfaUbgaTbbbfaUbgaTbbbfaUbgaTbbbfaUbhbdaZaPaPaPaPbgahakadaiaaaoamaj
bebdaWaXaVbbaXaVbbbdaWaXaVbbbdaWaXaVbbbdaWaXaVbbaTbaaYaPaPaPaPazazazazazazazazazazazazazazazazazazazazazazazazazazazazazazazhshshshshshshshshshshshshshshshshshshshshshshshshshshshshshshshshshshshshshsazaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPjwjzjIhChChChChChCjOjOjOhChChChChChCjMkekTlulvlvjwaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
azazazazazazazazazazazazazazazazazazazazazazazazazazazaPaPaPaPazaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPazazazazazazazazazazazazazazazazazazazazazazazazazazazazazazazazazazazazazazazazaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPlylylylylylylylyaPaPjwjzhClzlzlzlzlzhCjOjOjOhCjOjOjOjOjOhClAjwlulvlvjwaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPlylBlBlBlylBlBlyaPaPjwjzhClzlzlzlzlzlzjOjOjOjOjOjOjOjOjOhClAjwjwjwjwjwaPaPaPaPaPaPaPaPaPlClDlElDlFaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPlylBlGlBlHlBlBlyaPaPjwjzhClzlzlzlzlzlzjOjOjOjOjOjOjOjOjOhCjPjzjwaPaPaPaPaPaPaPaPaPaPaPaPlDlIlJlKlDaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPlylBlGlBlHlBlBlyaPaPjwjzhClzlzlzlzlzlzjOjOjOjOjOjOjOjOjOhCjPjzjwaPaPaPaPaPaPaPaPaPaPaPaPlDlInmlKlDaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPlylLlLlLlylBlBlyaPaPjwjzhClzlzlzlzlzhClzlzlzhCjOhCjOhChChClMjzjwaPaPaPaPaPaPaPaPaPaPaPaPlNlJlOlJlNaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPlPlPlPlPlylylylylylylBlBlyaPaPjwjzhClzlzlzhChChClzlzlzhChChCjOjOjOhCjPjzjwaPaPaPaPaPaPaPaPaPaPaPaPlQlJlJlJlQaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPlPlPlPlPlHlBlHlBlBlBlBlBlyaPaPjwjzhClzlzlzhCjzhClRlRlRhCjzhCjOjOjOhCjPjzjwaPaPaPaPaPaPaPaPaPaPaPaPlQlJlJlJlQaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPlPlPlPlPlylylylylBlBlBlSlyaPaPjwjzhClRlRlRhCjzkClTlUlVkDjzhClRlRlRhCjPjzjwaPaPaPaPaPaPaPaPaPaPaPaPlWlJlJlJlWaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPlylLlBlBlSlyaPaPjwjzkClTlUlVkDjzjzjzjzjzjzjzkClTlUlVkDjzjzjwaPaPaPaPaPaPaPaPaPaPaPaPlDlXlYlZlDaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPlylLlBlBlSlyaPaPjwjzkClTlUlVkDjzjzjzjzjzjzjzkClTlUlVkDjzjzjwaPaPaPaPaPaPaPaPaPaPaPaPlDlXkmlYlDaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
mamamamamamamamamamamamamamamaaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPlylLlBlBlSlyaPaPjwjzjzjzjzjzjzjzjzjzjzjzjzjzjzjzjzjzjzjzjzjwaPaPaPaPaPaPaPaPaPaPaPaPlDmbmbmblDaPaPaPaPaPaPaPaPaPaPaPaPmcmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmd
mamamamamamamamamamamamamamamaaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPlylylylylylyaPaPjwjwjwjwjwjwjwjwjwjwjwjwjwjwjwjwjwjwjwjwjwjwaPaPaPaPaPaPaPaPaPaPaPaPmemfmgmhmiaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
mamamamamamamamamamamamamamamaaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
@@ -2467,111 +2537,111 @@ mamamamamamamamamamamamamamamaaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
mamamamamamamamamamamamamamamaaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
mamamamamamamamamamamamamamamaaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmj
mamamamamamamamamamamamamamamaaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmlmmmmmmmnaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmj
-mamamamamamamamkmamamamamamamaaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmoTBTDTCmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmj
+mamamamamamamamkmamamamamamamaaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmoTBmOlZmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmj
mamamamamamamamamamamamamamamaaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmompmpmpmoaPaPaPaPmlmmmmmnaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjaPaPaPaPaPaPaPaPmjmjmjmjmjmjaPaPaPaPaPaPaPmjmjmjaPaPaPaPaPmjmjmjmjmjmjmj
mamamamamamamamamamamamamamamaaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmlmmmmmmmmmmmmmmmmmmmqmmmmmmmrmpmpmpmoaPaPaPaPmompmpmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjaPaPaPmjmjmjmjmjmjmjmjmjaPmjmjmjmjmjmjmjmj
mamamamamamamamamamamamamamamaaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmlmmmmmqmmmmmqmmmmmrmsmtmumvmwmxmymzmAmomJmKmLnJnPmVnRnKmmmmmmmqmCmDmDmWmnaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj
-mamamamamamamamamamamamamamamaaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmomEmFmomGmGmomHmImompmpmpmpmpmpmpmpmpmompmpmpmMmNmpmOmMmPmQoYmompmpmpmpmBmmmmmmmnaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjaPaPaPaPaPaPmSaPmTmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj
-mamamamamamamamamamamamamamamaaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmUmVmVmUmVmVmUmVmVmUmpmpmpmpmpmpmpmpmpmoQhmpmpmpmpmpmppimpmpmXmompmpmpmpozmYmZnamoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjaPaPaPaPaPaPmSmTmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj
-mamamamamamamamamamamamamamamaaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmlmmmmmmmmmmmrmpmpmpmpmpmpmpmpmVmpmpnbncndnempmpnfmompmpmpmpmpmpmppimpmpngmompmpmpmpnhmYmYnimoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjaPaPaPaPaPaPmSaPmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj
-njmamamamamamamamamamamamamamaaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnknknknknknknknknknkmUnlnmnnnonnmompmpmpmpmpmpmpmpmVmpmpnpnqnrnsmpmpnfmontnunvmMmpmpmpmMnwnxnymompmpmpmppbnznAnBmoaPaPaPaPmlmmmmmmmnaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjaPaPaPaPaPaPnCmTmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnDnnnnnnnnnEnnnnnnnnnnnEnFnnnnnnnGmompmpmpmpmpmpmpmpmVmpmpmpmpmpmpmpmpnHmBnPmMmMmUmpmpmpmUmMmMnRmrmpmpmpmpmBmmmmmmnKmmmqmmmmmrnLnMnNmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjaPaPaPaPaPaPnOaPmTmjmjjwjwjwjwjwmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnknknknknknknknknknkmUmmnPnQnRmmmUmVmVmUmVmVmUmVmVmUmpmpmpmpmpmpmpmpnSmMmRnUnVnWmpmpmpnWnXnYnYoympmpmpmpoznZoaoaoaobmoocodmonLoenNmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPjwjwofogohjwjwmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnknknknknknknknknknkmUnloinnnnojmookolmoomonmoooopmooqorosotouovmpmpowmMoxmpmpmpmpmpmpmpmpmpmpmpmpmpmpmpmYmYoAoAoAmYoznMnMozoBnMoCmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPlwoDoEoFoEoDjwmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnDnnnnnnnnoGnnnnnnnnnnoGoHnnnnnnojnJmmmmnKmmmmnKmmmmnKmMmMmMmMmMnPTITJnRnIoImpmpmpmpmpmpmpmpmpmpmpmpmpmpmpmYmYoJoJoJmYoKnMnMnMnMnMnMmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPkjoDoEoFoEoDjwmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj
+mamamamamamamamamamamamamamamaaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPozmEmFozmGmGozmHmIozmpmpmpmpmpmpmpmpmpmompmpmpmMmNmpnFmMmPmQoYmompmpmpmpmBmmmmmmmnaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjaPaPaPaPaPaPmSaPmTmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj
+mamamamamamamamamamamamamamamaaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmlmmmmmmmmnPmUmVmVmUmVmVmUmVmVmUmpmpmpmpmpmpmpmpmpmoQhmpmpnhmpmpmppimpmpmXmompmpmpmpozmYmZnamoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjaPaPaPaPaPaPmSmTmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj
+mamamamamamamamamamamamamamamaaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPoznnnnELnonnpbmpmpmpmpmpmpmpmpmVmpmpnbncndnempmpnfmompmpmpnhmpmpmppimpmpngmompmpmpmpFdmYmYnimoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjaPaPaPaPaPaPmSaPmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj
+njmamamamamamamamamamamamamamaaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnknknknknknknknknknkmUnlENnnnnnnmompmpmpmpmpmpmpmpmVmpmpnpnqnrnsmpmpnfmontnunvmMmpmpmpmMnwnxnymompmpmpmppbnznAnBmoaPaPaPaPmlmmmmmmmnaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjaPaPaPaPaPaPnCmTmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnDnnnnnnnnnEnnnnnnnnnnnEnWnnnnnnnGozmpmpmpmpmpmpmpmpmVmpmpmpmpmpmpmpmpnHnJnPmMmMmUmpmpmpmUmMmMnRmrmpmpmpmpmBmmmmmmnKmmmqmmmmmrnLnMnNmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjaPaPaPaPaPaPnOaPmTmjmjjwjwjwjwjwmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnknknknknknknknknknkmUnRnPnQnRnPmUmVmVmUmVmVmUmVmVmUmpmpmpmpmpmpmpmpnSmMmRnUnVojmpmpmpojnXnYnYoympmpmpmpoznZoaoaoaobmoocodmonLoenNmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPjwjwEOogohjwjwmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnknknknknknknknknknkmUnloinnnnoHpbokolpbomonpboooppboqorosotouovmpmpowmMoxmpmpmpmpmpmpmpmpmpmpmpmpmpmpmpmYmYoAoAoAmYoznMnMozoBnMoCmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPlwoDoEoFoEoDjwmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnDnnnnnnnnoGnnnnnnnnnnoGoVnnnnnnoHnJmmmmnKmmmmnKmmmmnImMmMmMmMmMmUFeFenRnPofmpmpmpmpmpmpmpmpmpmpmpmpmpmpmpmYmYoJoJoJmYoKnMnMnMnMnMnMmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPkjoDoEoFoEoDjwmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj
aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnknknknknknknknknknkmUnloLnnnnnnoMmpmpmpmpmpmpmpmpmpmpmpmpmpmpoNmpmpoNoOmpmpmpoPoQoYoSoTmpmpmpmpmpmpmpmpmYmYoJoJoJmYoKnMnMnMnMnMnMmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPkToDoEoFoEoDjwmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnDnnnnnnnnoUnnnnnnnnnnoUoVnnnnnnnnoMmpmpoWmpmpoWmpmpmpmpmpmpmpmpoXmpmpoXmpmpmpmpoPpjoYoYoTmpmpmpmpmpmpmpmpmYmYoAoAoAmYpbpcnMpbpdpbpemoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPmjmjaPaPaPaPaPaPaPaPmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPjwjwoFoFpfjwjwmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnknknknknknknknknknkmUnlpgnnnnphmlmMmMnPnTnTnRmMmMmqmMmMmMmMmMnPTLTLnRmnmpmpmpoPTMTNpkoTmpmpoZpampmpmpmppbpmoaoaoapnmopcnMmopomopomoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPmjmjmjmjmjaPaPaPaPaPaPmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPjwoFoFoFjwmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnDnnnnnnnnppnnnnnnnnnnpppqnnnnnnprmopsmpmpmpmpmpptpumopvpwpxpypzpAmpmppBmMpCmpmpmpmpmpmpmpmpmpplmompmpmpmpmBmmmmmmmmmmnKmqmmnKmmpDmmnIaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPpEpFpFpGjwjwpHjwjwjwjwjwjwjwjwjwjwjwjwmjmjmjmjmjmjmjmjmj
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnknknknknknknknknknkmUnnnnnnnnpImopJmpmpmpmpmpmppKmompmpmpmppLmpmpmppMmMpNpOpPpQmpmpmppPpOpNpCmompmpmpmpmMpRpSpSpTpUpVmopWnMpXmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPpYpZqaqaqaqbqcaPaPqdqeqfqgqeqeqeqhjwqiqjqkqljwqmioqnqojwmjmjmjmjmjmjmjmjmj
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmonnqpqqqrqsmoqtmpmpquqvmpmpqwmompmpmpmpmpmpmpmpmlnKmmmMmMnPqxqxnRmmmmmmmmmrmpmpmpmpmMqyqyqyqyqyqymoqznMqAmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPmjmjmjmjmjaPaPaPaPaPaPaPaPaPpYqBqCqDqEqFqGqBqcaPqdqeqHqHqeqeqeqeqIqJqJqJqKjwjwjwjwjwjwmjmjmjmjmjmjmjmjmj
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnJmmmmmmmmmmmrqLmpmpqMqNmpmpqOmompmpqPqQqRmpmpqSmoqTqUqUqUqUqVqVqUqUqUqWaPmompmpmpmpozqyqXqYqYqYqYnJnPqZnRmraPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPaPaPaPaPaPqBrarbrbrcrbrbqFqBaPqdrdrerfrgqeqeqejwqJqJqJrhjwriioiorjjwmjmjmjmjmjmjmjmjmj
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmompmpmprkrlmpmpmpmompmprmrnrompmprpmorqrrrsrtrurvrvrvrwrxqUqWmompmpmpmpryqyrzrzrzrzrzqyqyqyqYmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPmjmjaPaPaPaPaPaPaPaPaPaPqBrArbrbrbrbrBrCqBaPqdqerDrDqeqeqerEjwrFRurGrHjwrIioiorJjwmjmjmjmjmjmjmjmjmj
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmompmpmpmpmpmpmpmpmompmpmpmpmpmpmprKmorqrLrMrvrvrvrvrvrvrvrNrOmompmpmpmpryqyqyqyrPqyqyqyqyqyqYmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBrQrbrbrRrbrbrSqBaPqdqeqeqeqeqeqerTjwjwjwjwjwjwrUioiorVjwmjmjmjmjmjmjmjmjmj
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmompmpmpmpmpmpmpmpmompmpmpmpmpmpmpmpmorqrLrWrXrYrYrYrYrYrZqUsamompmpmpmppbqyqysbsbqyqyscqyqyqYmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsesesesesesesesesesesesesesesesesesesesesesesdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsfqBsgqBqBqBqBqBshaPsipFpFsjjwqoqoqojwlhlhsksljwsmioiosnjwmjmjmjmjmjmjmjmjmj
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmompmpsospsqsrssstmosusvswsxsyszmpsAmosBqUqUqUqUqUqUqUqUqUsaaPmompmpmpmpmosCqyTUsDqyqysEqyqysFmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBsHsIsJsKsLqBaPaPaPaPaPaPsMqoqoqosNlilisOsOjwsmioiosnjwmjmjmjmjmjmjmjmjmj
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmosPsQsospsqsrssstmBmmmmmmmmmmmmmmmmnKsRsRsRsRsRsRsRsRsRsRsRsRpDmUsSsSmUpDmmmmmmmmmmmmmmmmmmmmnIaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBsTsUrBrbsVqBaPaPaPaPaPaPsWqoqoqojwsXlijwjwjwsYsZsZsYjwjwjwjwmjmjmjmjmjmj
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnJmmmmmmmmmmmmmmmmnIaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPtamUtbtbmUtcaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGsGsGsGtdtetetetetftftetetetetgsGsGsGsGsGsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPpYqBthsIrBrbtiqBqcaPaPnOnCtjjwqoqoqojwjwjwjwuktkioioioiotltltmjwjwmjmjmjmjmj
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGsGsGtdtotptqtrtetstttetutvtetetetgsGsGsGsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPpYqBqBqBqBtwsIrBrbtxqBqBqBqBqctytyjwtzqoqoqojwtAtBioioioioioioioioiotCjwmjmjmjmjmj
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGsGtdtetDtDtDtDtetEtEtetDtDtFtGtetetgsGsGsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBtHtItJqBrbtKrbtLqBqBtMtNtOtPtQtRtQqoqoqoqotSioioioioioiotTioioioiotUjwmjmjmjmjmj
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGtdtetetVtWtXtYtetZtDuatDtDtDtDubuctesGsGsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPmjmjaPaPaPaPudueufueqBqBqBugqBqBuhtMuiujtPtQQbtQqoqoqoqojwulumioioioioioioioioiounjwmjmjmjmjmj
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGuoupuqtDurururtetDtDteusutuuuvuwuxtesGsGsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPmjmjmjaPaPaPaPqBqBuduyqBqBuzrbuAqBqBuBuCuBqBuDuDjwuEpFsjjwjwjwjwuFuGioioioiouHuHuIjwjwmjmjmjmjmj
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnktntnnkaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGuJuptDtDtDtDtDuatDtDteteteteteteteuKsGsGsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPqBuLrbrbuMqBrbuNrbqBuOuPuQuRqBmTaPmTaPaPaPaPmjmjjwjwjwsYuSuSsYjwjwjwjwmjmjmjmjmjmj
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGuTtetDtDtDuUtDtetDtDtDuVuWsGsGsGsGsGsGsGuXuXuXuXuXuXuXuXuXuXuXaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPqBuYrbrbrbuZrbrbrbvarbrbrbvbqBnCnCnCnCaPaPaPaPmjmjmjjwvcioiovcjwmjmjmjmjmjmjmjmjmj
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGsGtetetetetetetetZtDvdtDuWsGsGsGsGsGsGsGuXvevevevevevevevevevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPmjmjmjmjmjaPaPaPaPqBvgrbrbrbvhrbrbrbvirbrbrbvjqBaPaPaPaPaPaPaPaPaPmjmjjwvcioiovcjwmjmjmjmjmjmjmjmjmj
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGtdtevkvlvmvkvntetDtDtDvouWsGsGsGsGsGsGsGuXvevpvqvqvqvqvqvrvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPpYqBqBqBqBqBqBrbrbrbqBqBqBqBqBqBqcaPaPaPaPaPmSaPmTmjmjjwvcioiovcjwmjmjmjmjmjmjmjmjmj
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsdsdsdsdsGsGuoupvsvsvsvsvsuatDtDtetetetetetetetgsGsGuXvevtvuvuvuvuvuvtvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPqBvvvwvxvyvzqBvArbvBqBvCvDvDvEvFqBaPaPaPaPaPmSmTmjmjmjjwvcioiovcjwmjmjmjmjmjmjmjmjmj
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGvGvGvHvHvHvHvGvGvGvGvHvIvIvHsdvJvJsdsdvJvJsdsdvJvJvJvJsdsdsdsdvJvJvJvJsdsdsdsdvJvJsdsdsdsdsdsdvKvKvLsdsGsGuJupvMvsvsvsvstetDtDtDtDtDtetDvNvOtesGsGuXvevtvPvuvuvuvQvtvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPmjmjmjaPaPaPaPaPvRvSvSvSvSvSqBrbrbrbqBvTrbrbrbvUvVaPaPaPaPaPnOaPmjmjmjjwjwvWvXjwjwmjmjmjmjmjmjmjmjmj
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvYvZvYvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvYvYvYvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGwawbwbwbwbwbwbwbwbwbwbwbwbwbwbwcvJvKvKvKvKvKvKvJvKvKvKvKvKvKwdvKvKvKvKvKvKvKvKwdvKvKvKwevKvKvKvKvKvKvKvKwfsGsGuTtetewgwhwiwjtetZwkwkwktDuatDtDtDtesGsGuXvevtvuvuwlwlwlwmvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPmjmjaPaPaPaPaPaPwnwowpvSvSvSwqrbrbrbwrrbrbrbwswtwuaPaPaPaPaPmSmTmTmjmjmjjwjwjwjwmjmjmjmjmjmjmjmjmjmj
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnDnnnnnnnnoUnnnnnnnnnnoUpqnnnnnnnnoMmpmpoWmpmpoWmpmpmpmpmpmpmpmpoXmpmpoXmpmpmpmpoPpjoYoYoTmpmpmpmpmpmpmpmpmYmYoAoAoAmYpbpcnMpbpdpbpemoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPmjmjaPaPaPaPaPaPaPaPmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPjwjwoFoFoFjwjwmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnknknknknknknknknknkmUnlpgnnnnphpbmMmMmUnTnTmUmMmMpbmMmMmMmMmMmUTLTLnRnPmpmpmpoPTMTNpkoTmpmpoZpampmpmpmppbpmoaoaoapnmopcnMmopomopomoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPmjmjmjmjmjaPaPaPaPaPaPmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPjwoIoFpfjwmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnDnnnnnnnnppnnnnnnnnnnppqCnnnnnnprmopsmpmpmpmpmpptpumopvpwpxpypzpAmpmppBmMpCmpmpmpmpmpmpmpmpmpplmompmpmpmpnJmmmmmmmmmmnKmqmmnKmmpDmmnIaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPpEpFpFpGjwjwpHjwjwjwjwjwjwjwmjmjmjjwjwjwjwjwjwmjmjmjmjmj
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnknknknknknknknknknkmUnnnnnnnnpImopJmpmpmpmpmpmppKmompmpmpmppLmpmpmppMmMpNpPpOpQmpmpmppOpPpNpCmompmpmpmpmMpRpSpSpTpUpVmopWnMpXmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPpYpZqaqaqaqbqcaPaPqdqeqfqgqeqeqeqhjwqiqjqkqljwmjmjmjjwqmioqnqojwmjmjmjmjmj
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPpbnnqpqqqrqsmoqtmpmpquqvmpmpqwmompmpmpmpmpmpmpmpmlmmnPmMmMmUqxqxnRmmmmmmmmmrmpmpmpmpmMqyqyqyqyqyqymoqznMqAmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPmjmjmjmjmjaPaPaPaPaPaPaPaPaPpYqBqKqDqEqFqGqBqcaPqdqeqHqHqeqeqeqeqIqJqJqJrajwmjmjmjjwjwjwjwjwjwmjmjmjmjmj
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnJmmmmmmmmmmmrqLmpmpqMqNmpmpqOmompmpqPqQqRmpmpqSmoqTqUqUqUqUqVqVqUqUqUqWaPmompmpmpmpmUqyqXqYqYqYqYnJnPqZnRmraPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPaPaPaPaPaPqBrwrbrbrcrbrbqFqBaPqdrdrerfrgqeqeqejwqJqJqJrhjwmjmjmjjwriioiorjjwmjmjmjmjmj
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmompmpmprkrlmpmpmpmompmprmrnrompmprpmorqrrrsrtrurvrvrvsFrxqUqWmompmpmpmpryqyrzrzrzrzrzqyqyqyqYmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPmjmjaPaPaPaPaPaPaPaPaPaPqBrArbrbrbrbrBrCqBaPqdqerDrDqeqeqerEjwrFRurGrHjwmjmjmjjwrIioiorJjwmjmjmjmjmj
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmompmpmpmpmpmpmpmpmompmpmpmpmpmpmprKmorqrLrMrvrvrvrvrvrvrvrNrOmompmpmpmpryqyqyqyrPqyqyqyqyqyqYmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBrQrbrbrRrbrbrSqBaPqdqeqeqeqeqeqerTjwjwjwjwjwjwmjmjmjjwrUioiorVjwmjmjmjmjmj
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmompmpmpmpmpmpmpmpmompmpmpmpmpmpmpmpmorqrLrWrXrYrYrYrYrYrZqUsamompmpmpmppbqyqysbsbqyqyscqyqyqYmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsesesesesesesesesesesesesesesesesesesesesesesdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsfqBsgqBqBqBqBqBshaPsipFpFsjjwqoqoqojwlhlhsksljwmjmjmjjwsmioiosnjwmjmjmjmjmj
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmompmpsospsqsrssstmosusvswsxsyszmpsAmosBqUqUqUqUqUqUqUqUqUsaaPmompmpmpmpmosCqyTUsDqyqysEqyqysTmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBwQsIsJsKsLqBaPaPaPaPaPaPsMqoqoqosNlilisOsOjwmjmjmjjwsmioiosHjwmjmjmjmjmj
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmosPsQsospsqsrssstmBmmmmmmmmmmmmmmmmnIsRsRsRsRsRsRsRsRsRsRsRsRozmUsSsSmUnJmmmmmmmmmmmmmmmmmmmmnIaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBthsUrBrbsVqBaPaPaPaPaPaPsWqoqoqojwsXlijwjwjwjwjwjwjwsYsZsZsYjwjwjwjwmjmj
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnJmmmmmmmmmmmmmmmmnIaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPtamUtbtbmUtcaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGsGsGsGtdtetetetetftftetetetetgsGsGsGsGsGsdsdsdsdsdsdsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPpYqBtksIrBrbtiqBqcaPaPnOnCtjjwqoqoqojwjwjwjwtFtrvxuhuIunioioioiotltltmjwjwmj
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGsGsGtdtotptquktetstttetutvtetetetgsGsGsGsdwIxdxaxaxasdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPpYqBqBqBqBtwsIrBrbtxqBqBqBqBqctytyjwtzqoqoqojwuFuGioioioioioioioioioioioioiotCjwmj
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGsGtdtetDtDtDtDtetEtEtetDtDuutGtetetgsGsGsdzjxaxaxaxasdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBtHtItJqBtKrbrbtLqBqBwXtNtOtPtQtRtQqoqoqoqotSioioioioioioqoiotTioioioioioiotUjwmj
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGtdtetetVtWtXtYtetZtDuatDtDtDtDubuctesGsGCuxaxaxaxaxasdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPmjmjaPaPaPaPudueufueqBqBugxsqBqBxLtMuiujtPtQQbtQqoqoqoqojwulumioioioioioioioioioioioioiovWjwmj
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGuoupuqtDurururtetDtDteusutuwuvuHuxtesGsGsdxaxaxaxaxasdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPmjmjmjaPaPaPaPqBqBuduyqBqBuzrbuAqBqBuBuCuBqBuDuDjwuEpFsjjwjwjwjwtAtBFxKGKNKMioioioiovmvmvXjwjwmj
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnktntnnkaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGuJuptDtDtDtDtDuatDtDteteteteteteteuKsGsGsdCvxXxaxXCwsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPqBuLrbrbuMqBQRuNrbqBuOuPuQuRqBmTaPmTaPaPaPaPmjmjjwjwjwjwjwjwjwsYuSuSsYjwjwjwjwmjmj
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGuTtetDtDtDuUtDtetDtDtDuVuWsGsGsGsGsGsGsGuXuXuXuXuXuXuXuXuXuXuXaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPqBuYrbrbrbuZrbrbrbvarbrbrbvbqBnCnCnCnCaPaPaPaPmjmjmjmjmjmjmjjwvcioiovcjwmjmjmjmjmj
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGsGtetetetetetetetZtDvdtDuWsGsGsGsGsGsGsGuXvevevevevevevevevevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPmjmjmjmjmjaPaPaPaPqBvgrbrbrbvhrbrbrbvirbrbrbvjqBaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjjwvcioiovcjwmjmjmjmjmj
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGtdtevkvlvvvkvntetDtDtDvouWsGsGsGsGsGsGsGuXvevpvqvqvqvqvqvrvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPpYqBqBqBqBqBqBrbrbrbqBqBqBqBqBqBqcaPaPaPaPaPmSaPmTmjmjmjmjmjmjjwvcioiovcjwmjmjmjmjmj
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsdsdsdsdsGsGuoupvsvsvsvsvsuatDtDtetetetetetetetgsGsGuXvevtvuvuvuvuvuvtvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPqBwlvwCQvyvzqBvArbvBqBvCvDvDvEvFqBaPaPaPaPaPmSmTmjmjmjmjmjmjmjjwvcioiovcjwmjmjmjmjmj
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGvGvGvHvHvHvHvGvGvGvGvHvIvIvHsdvJvJsdsdvJvJsdsdvJvJvJvJsdsdsdsdvJvJvJvJsdsdsdsdvJvJsdsdsdsdsdsdvKvKvLsdsGsGuJupvMvsvsvsvstetDtDtDtDtDtetDvNvOtesGsGuXvevtvPvuvuvuvQvtvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPmjmjmjaPaPaPaPaPvRvSvSvSvSvSqBrbrbrbqBvTrbrbrbvUvVaPaPaPaPaPnOaPmjmjmjmjmjmjmjjwjwwWwYjwjwmjmjmjmjmj
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvYvZvYvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvYvYvYvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGwawbwbwbwbwbwbwbwbwbwbwbwbwbwbwcvJvKvKvKvKvKvKvJvKvKvKvKvKvKwdvKvKvKvKvKvKvKvKwdvKvKvKwevKvKvKvKvKvKvKvKwfsGsGuTtetewgwhwiwjtetZwkwkwktDuatDtDtDtesGsGuXvevtvuvuwmwmwmwovevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPmjmjaPaPaPaPaPaPwnxpwpvSvSvSwqrbrbrbwrrbrbrbwswtwuaPaPaPaPaPmSmTmTmjmjmjmjmjmjmjjwjwjwjwmjmjmjmjmjmj
aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPwvvGvGvGwvaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPwvvGvGvGwvvHvHvHvHwvaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwwvKvKvKvKvKvKwwvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKwevKvKvKvKvKvKvKvKwfsGsGsGuTtevsvsvsvstetDwkwkwktDtewxteteuKsGsGuXvevtvuvuvuvuvuwyvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPwzvSvSvSvSvSwArbrbrbwBrbrbrbrbwCwDaPaPaPaPaPmSaPaPmTmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHmTmTmTmTaPaPaPaPaPaPaPaPaPmTmTmTmTvHwbwbwbvHmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTaPvGwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwwvKvKvKvKvKvKwwvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKsdsdsdsdsdsdsdsdsdsdsGsGsGsGuTtewEwFwGtetDtDtDtDtDteteteuKsGsGsGuXvevtvuvuvuvuwHvtvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBwIvSvSvSwJqBuBwKuBqBwLwMwNrbwOqBaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPmTmTmTmTmTmTmTmTmTmTmTaPaPaPvHwbwbwbvHmTaPaPaPaPaPaPaPaPaPaPaPaPaPaPmTmTvHwbwbwbwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPvJvJwQvJvJsdvJvJvJvJvJwRwRvJvJsdsdvJvJvJvJsdsdvKvKsdoRwSsdoRwSsdoRwSsdsGsGsGsGsGuTteteteteteteteteteteuKsGsGsGsGsGuXvevtvuvuvuvuvuwyvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBwUwVwWwXwYqBwZrbxaqBxbqBqBxcqBqBaPaPaPaPaPaPaPmSaPmTmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbwPxdxexfxexfxexfxexfxexgxhxixhwPxjxjxjxkxlsdwRwRwRwRwRwRwRxmxnsdxjxjxjxjxjxjsdvKvKsdwTxosdwTxosdwTxosdsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGuXvevtvuvuxpxpxpxqvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBxrvSxsqBqBqBrbrbxtqBqBqBxurbxvqBaPaPaPaPaPaPaPmSmTmTmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbxwxxxyaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbwPxzxfxexfxAxBxexfxexfxCxfxexfwPxDxjxjxjxjsdwRxExFxGxEwRwRwRwRsdxjxIxHxHxWxjvJvKvKsdxZyasdxZyasdxZyasdsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGuXvevtvPvuvuvuvQvtvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBxJxKxLqBaPqBxMxMxMqBaPqBqFxNxOqBaPaPaPaPaPaPaPmSaPmTaPmjmjmjmjmjmjmjmjmjmjmjmjmjmj
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbxwxxxyaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxywbwbwbwPxPxexfxQxRxSxTxexfxexgxhxixhwPxUxjxjxjxjsdwRxExVxVxEwRwRwRwRsdxjykxXxYyTxjvJvKvKsdzbsdsdzbsdsdzbsdsdsdsdsdsdsdsdsdsdsdsdsdsdsdsdsdsdsdsdsdsdsdsduXveybycvuvuvuydyevevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBxMxMxMqBaPsfyfygyhshaPqBxMxMxMqBaPaPaPaPaPaPaPmSmTmTmTmTmTmjmjmjmjmjmjmjmjmjmjmjmj
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbwPxzxfxeyiyjDqylxfxexfwPwPwPwPwPymymymxjxjsdwRwRwRwRwRwRwRynxEsdxjykxXxXyTxjsdvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKyosGsGyovfveypyqyryryryqysvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPmjmjaPaPaPsfyfygyhshaPaPaPaPaPaPaPsfyfygyhshaPaPaPaPaPaPaPmSaPmTaPmTaPaPmjmjmjmjmjmjmjmjmjmjmj
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHmTaPaPaPaPaPaPaPaPaPaPaPaPaPaPmTmTvHwbwbwbwPytxexfxeyuyvxfxexfxexgxhxixhwPywyxyyxjxjsdwRxExVxGxEwRwRwRwRsdxjykxXxXyTxjyzvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKyosGsGyovfveveyAyByByByCvevevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmjmjmj
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTvHwbwbwbvHmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTaPvGwbwbwbwPyDxfxexfxexfxexfxexfxCxfxexfwPyExjxjxjxjsdwRxExVyFxEwRwRwRwRsdxjykxXxXyTxjsdvKvKsdvJvJvJvJvJvJvJvJvJsdsdsdsdsdsdsdsdsdsdsdsdvKvKsdsdsdsdsdsdsdsduXvevevevevevevevevevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmjmjmj
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHvHvHvHvHwvaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbwPyGyHxfxexfxexfxexfxexgxhxixhyIyIyIyIyIyIyIyIyIyIyIyIyIyIyIyIsdxjykxXyJyTxjvJvKvKsdvKyKyLyMyNvKyOyPyQsdyRyRyRyRyRyRyRyRyRyRsdvKvKsdaPaPaPaPaPaPaPuXuXuXuXuXuXuXuXuXuXuXaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmjmjmj
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbvHmTaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbwPwPwPwPxfxexfySTKwPwPwPwPwPwPyIyUyVyWyIyXyYyYyYyYyYyYyYyYyZzasdxjxZTOTOTPxjvJvKvKvJvKyKzczdyNvKzezfzgsdyRyRyRyRyRyRyRyRyRyRsdvKvKsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmjmjmj
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbxwxxxyaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbvHmTaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbwPzhzixgxexfxexfzjwPzkzlzmzmzmyIyUyVznyIyYyYyYyYzozpyYyYyYyYyYsdxjxjxjxjxjxjsdvKvKvJvKvKvKvKvKvKvKvKzqsdsdsdsdsdsdsdsdsdyRyRsdvKvKsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmjmj
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbxwxxxyaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbvHvHvHvHvHwvmTmTmTmTmTmTmTmTmTmTmTaPvGwbwbwbwPxexfzrxfxexfySzswPztxexexexeyIyVyVyVzuyYyYzvyYzozpyYzwzxzyyYsdsdvJvJvJvJsdsdvKvKzzvKvKvKvKzAzBzCvKvKsdvKvKvKvKvKvKzDsdyRyRsdvKvKsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmj
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbvHmTaPaPzEzFzGzEzFzFzHzIzJzFzKzLmTmTvHzMwbwbwPxfxezNxexfTQzOzPwPzQxexAxexeyIyVyVzRyIzSyYzTyYzozpyYzwzxzyyYyIvKvKvKvKvKvKvKvKvKvJvKvKvKvKzCzCzDvKvKzUvKzVvKvKzVvKzCsdyRyRsdvKvKsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmj
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvGaPaPzEzWzXzYzZAaAbAaAaAaAbAcAdvGvGvGwbwbwbwPzrzNxgxgxgxgxgxgwPAeAfxexeAgyIAhyVzRyIzSyYyYyYTezpyYzwRpzyyYyIvKvKvKvKvKvKvKvKvKvJAiyNvKvKvKvKvKAjvKsdzcAkAlzCAmvKzqsdyRyRsdvKvKsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmj
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvGaPaPAnAoApAoAqAoAoAoAoAoAoAoArAsxxAswbwbwbwPxfxexfxexfxexfxexfAeAeAtAeAeyIyIyIyIyIzozozozozozpyYzwRBzyyYyIvJvJAuvJvJsdwdvKvKsdAvyNvKvKvKvKvKsdsdsdsdvJvJvJvJvJsdsdAwAwsdvKvKsdaPaPaPaPAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmj
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHmTmTmTaPaPaPaPaPaPaPaPaPaPaPmTmTmTvHwbwbwbvGaPaPAyAzAAABzZACADACACACADAEAFvGvGvGwbwbwbwPxexfxexfxexfxexfxexfxexfxeAGAHyIyYyYyYzpzpzpzpzpyYyYyYyYyYyYyIAIAJvKAKALsdAMANAOAwAwBkAwsdvJAPvJsdAQAQAQARASATAUAVAQAQAQAwwdvKvKsdaPaPaPAxAxAWAWAWAWAWAWAXAXAXAWAWAWAWAXAXAXAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmj
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGaPaPmTaPaPaPaPaPaPaPaPaPaPaPmTaPaPvGwbwbwbvHmTaPaPAyzFAZAyzFzFzHzIzJzFBaBbmTmTvHwbwbwbwPxfxexfySAGySAGySxfxexfxexfySBcyIBdyYyYyYyYyYyYyYyYyYyYyYyYBdyIvKvKvKvKvKsdvKvKvKEaAQAQBlsdvKvKvKsdAQAQAQARBeBfBgAVAQAQAQAwvKvKvKsdaPaPaPAxAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPBhaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmj
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGaPaPmTaPaPaPaPaPaPaPaPaPaPaPmTaPaPvGwbwbwbvHvHvHvHvHwvmTmTmTmTmTmTmTmTmTmTmTaPvGwbwbwbwPxexfxeBiBjBiBjBixexfxexfxexfxeyIzxyYzwzxzxzyyYyYzwzxzxzyyYzxyIvKvKvKvKvKsdvKvKvKEaBmBzBysdvKvKvKsdAQAQAQBnBoBpBqBrAQAQAQAwvKvKvKsdaPaPaPAxAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmj
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGaPaPmTaPaPaPaPaPaPaPaPaPaPaPmTaPaPvGwbwbwbvHmTaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbwPxfxexfyjxfxexfxSxfxexfxexfxexfyIBsyYzwRBRpzyyYyYzwRBRpzyyYBsyIvKBtBuBvBwsdvJBxvJAwTzTAAwsdBABBBCsdAQAQAQAQAQAQAQAQAQAQAQAwvKvKvKsdaPaPaPAxAWAWAWBDAxAxAxAYAYAYAxBEBEAxAYAYAYAxAxAxAxAYAYAYAxAxAYAYAYAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmj
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHBFBFBFvHvHaPmTaPaPaPaPaPaPaPaPaPaPaPmTaPvHvHBFBFBFvHvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHvHBFBFBFwPxexfxexfxexfxexfxexfwPwPBGBHwPyIBdyYyYyYyYyYyYyYyYyYyYyYyYBdyIBIsdsdsdsdsdAQAQAQAwEaEaAwsdsdsdsdsdAQAQAQAQAQAQAQAQAQAQAQAwvKvKvKsdaPaPaPAxBJAWAWAxAxBKBLBMBLBMBNBOBOBPBMBLBMBLBQBRBRBRBRBRBRBRBRBRBRAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPmj
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbBSwbwbvHvHmTaPaPaPaPaPaPaPaPaPaPaPmTvHvHwbBTBUBVwbvHvHaPaPaPaPaPaPaPaPaPaPaPaPaPvHvHwbwbBUBVwPxfxexfwPBWAtwPwPxfxewPBXxfxeBYyIzxyYzwzxzxzyyYyYzwzxzxzyyYzxyIsdsdAQAQAQAQAQAQAQAQAQAQAQAwAwsdsdAwAQAQAQAQAQAQAQAQAQAQAQAwvKvKvKsdaPaPaPAxBJAWAWAxBKBZCaCaCaCaCbCcCcCdCaCaCaCbCeBQCfCfCfCfCfCfCfCfCfAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbCgwbwbwavHvHaPaPaPaPaPaPaPaPaPaPaPvHvHwawbwbChwbwbwavHvHaPaPaPaPaPaPaPaPaPaPaPvHvHwawbwbCiBVzNxexfxewPxexfxewPxexfwPCjxexfCkyIBsyYzwRBRpzyyYyYzwRBRpzyyYBsyIsdClAQAQAQAQAQAQAQAQAQAQAQClAwAwsdAwCmAQAQAQAQAQAQAQAQAQCmAwwdvKvKAxAxAxAxAxBJAWAWAYCnCoCcCcCcCcCcCcCcCcCcCcCcCcCpCnCqCqCqCqCqCqCqCqCqAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGwbCiwbwbwbwbvHvHvHvHvGvGvGvGvGvHvHvHvHwbwbwbCiBUCrwbwbwbvHvHvHvHvGvGvGvGvGvHvHvHvHwbwbwbwbBUwbzrxfxexfwPxfxeCswPxfxewPCtxfxeBYyIyICuCvCvCwyICxCxyICuCvCvCwyIyIAQAQAQAQCyCzCACACACBCCAQAQAQAQAwAwAwAwAwAwAwAQAQAQAwAwAwAwAwsdvKvKCDAWAWAWAxBJAWAWAYCECoCcCcCcCcCcCcCcCcCcCcCcCcCpCECfCfCfCfCfCfCfCfCfAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbwbwbwbwbCFxxCGCFxxCHCICJxxCGCFxxCGwbwbwbwbwbwbwbwbwbCFxxCGCFxxCHCICJxxCGCFxxCGwbwbwbwbwbwbwPCKxfxexgxeCLCMxgxexfwPCjxexfCkwPCNCOCPCOCPCQAQAQCRCOCSCOCOCTAwAQAQAQCUCVCWCWCWCWCWCXCYAQAQAQAwCOCPCOCNCPCQAQAQAQCRCPCOCOCZsdvKvKAxDaAWDbAYBJAWAWAxCeBQDcDcDcDcDdCcCcDeDcDcDcDdBKBZCqCqCqCqCqCqCqCqCqAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbwbwbwbwbCFxxCGCFxxCHDfCJxxCGCFxxCGwbwbwbwbwbwbwbwbwbCFxxCGCFxxCHDfCJxxCGCFxxCGwbwbwbwbwbwbwPwPzrzNxgDgDhxgxgzNzrwPwPwPwPwPwPDiDjDjDjDjDkAQAQDlDjDjDjDjDmAwAQAQDnDoCWCWCWCWCWCWCWDpCCAQAQAwDiDjDjDjDjDkAQAQAQDlDjDjDjDmAwTRTRAxAWDrDsAYBJAWAWAxAxCeBLBMBLBMBNBOBOBPBMBLBMBLBZBRBRBRBRBRBRBRBRBRBRAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHmTmTmTmTaPaPaPaPaPaPaPaPaPmTmTmTmTvHwbwbwbvHmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTaPvGwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwwvKvKvKvKvKvKwwvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKsdsdsdsdsdsdsdsdsdsdsGsGsGsGuTtewEwFwGtetDtDtDtDtDteteteuKsGsGsGuXvevtvuvuvuvuwHvtvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBCRvSvSvSwJqBuBwKuBqBwLwMwNrbwOqBaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPmTmTmTmTmTmTmTmTmTmTmTaPaPaPvHwbwbwbvHmTaPaPaPaPaPaPaPaPaPaPaPaPaPaPmTmTvHwbwbwbwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPvJvJDivJvJsdvJvJvJvJvJwRwRvJvJsdsdvJvJvJvJsdsdvKvKsdoRwSsdoRwSsdoRwSsdsGsGsGsGsGuTteteteteteteteteteteuKsGsGsGsGsGuXvevtvuvuvuvuvuwyvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBwUwVxrAGxJqBwZrbDjqBxbqBqBxcqBqBaPaPaPaPaPaPaPmSaPmTmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbwPxhxfxfxfxfxfxfxfxfxfxgxiyixzwPxjxjxjxlxksdwRwRwRwRwRwRwRxmxnsdxBxBxBxBxBxBsdvKvKsdwTxosdwTxosdwTxosdsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGuXvevtvuvuxqxqxqxNvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBBcvSBiqBqBqBDkrbxtqBqBqBxurbxvqBaPaPaPaPaPaPaPmSmTmTmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbxwxxxyaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbwPyyxexexexAxAxexexexexCxexeyzwPxDxjxjxjxjsdwRxExFxGxEwRwRwRwRsdxBxIxHxHxWxBvJvKvKsdxZyasdxZyasdxZyasdsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGuXvevtvPvuvuvuvQvtvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBBHxKBWqBaPqBxMxMxMqBaPqBqFzDxOqBaPaPaPaPaPaPaPmSaPmTaPmjmjmjmjmjmjmjmjmjmjmjmjmjmj
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbxwxxxyaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxywbwbwbwPyyxexexQxPxSylxexeyDxgyEyHyGwPxRxjxjxjxjsdwRxExVxVxEwRwRwRwRsdxBykxXxYyTxBvJvKvKsdzbsdsdzbsdsdzbsdsdsdsdsdsdsdsdsdsdsdsdsdsdsdsdsdsdsdsdsdsdsdsduXveybycvuvuvuydyevevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBxMxMxMqBaPsfyfygyhshaPqBxMxMxMqBaPaPaPaPaPaPaPmSmTmTmTmTmTmjmjmjmjmjmjmjmjmjmjmjmj
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbwPyyxexexQxSxSylxexeyzwPwPwPwPwPxUxUxUxjxjsdwRwRwRwRwRwRwRynxEsdxBykxXxXyTxBsdvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKyosGsGyovfveypyqyryryryqysvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPmjmjaPaPaPsfyfygyhshaPaPaPaPaPaPaPsfyfygyhshaPaPaPaPaPaPaPmSaPmTaPmTaPaPmjmjmjmjmjmjmjmjmjmjmj
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHmTaPaPaPaPaPaPaPaPaPaPaPaPaPaPmTmTvHwbwbwbwPzhxexexQyjxTylxexezixgxiyixzwPymyuytxjxjsdwRxExVxGxEwRwRwRwRsdxBykxXxXyTxBywvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKyosGsGyovfveveyAyByByByCvevevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmjmjmj
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTvHwbwbwbvHmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTaPvGwbwbwbwPzkxexexeyvyvxexexexexCxexeyzwPyxxjxjxjxjsdwRxExVyFxEwRwRwRwRsdxBykxXxXyTxBsdvKvKsdvJvJvJvJvJvJvJvJvJsdsdsdsdsdsdsdsdsdsdsdsdvKvKsdsdsdsdsdsdsdsduXvevevevevevevevevevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmjmjmj
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHvHvHvHvHwvaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbwPzmzlztzsxexexeyDztztxgyEyHyGyIyIyIyIyIyIyIyIyIyIyIyIyIyIyIyIsdxBykxXyJyTxBvJvKvKsdvKyKyLyMyNvKyOyPyQsdyRyRyRyRyRyRyRyRyRyRsdvKvKsdaPaPaPaPaPaPaPuXuXuXuXuXuXuXuXuXuXuXaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmjmjmj
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbvHmTaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbwPwPwPwPzNxexeySzOwPwPwPwPwPwPyIyUyVyWyIyXyYyYyYyYyYyYyYyYyZzasdxBxZTOTOTPxBvJvKvKvJvKyKzczdyNvKzezfzgsdyRyRyRyRyRyRyRyRyRyRsdvKvKsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmjmjmj
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbxwxxxyaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbvHmTaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbwPzQzPxgAexexexeAfwPAgAHVlVlBXyIyUyVznyIyYyYyYyYzozpyYyYyYyYyYsdxBxBxBxBxBxBsdvKvKvJvKvKvKvKvKvKvKvKzqsdsdsdsdsdsdsdsdsdyRyRsdvKvKsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmjmj
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbxwxxxyaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbvHvHvHvHvHwvmTmTmTmTmTmTmTmTmTmTmTaPvGwbwbwbwPzNxezrxexexeySzSwPCtxQxSylCKyIyVyVyVzuyYyYzvyYzozpyYzwzxzyyYsdsdvJvJvJvJsdsdvKvKzzvKvKvKvKzAzBzCvKvKsdvKvKvKvKvKvKBwsdyRyRsdvKvKsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmj
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbvHmTaPaPzEzFzGzEzFzFzHzIzJzFzKzLmTmTvHzMwbwbwPAexezryDztCMDlDhwPFFGmxSxeCKyIyVyVzRyIBByYzTyYzozpyYzwzxzyyYyIvKvKvKvKvKvKvKvKvKvJvKvKvKvKzCzCBwvKvKzUvKzVvKvKzVvKzCsdyRyRsdvKvKsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmj
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvGaPaPzEzWzXzYzZAaAbAaAaAaAbAcAdvGvGvGwbwbwbwPzrzrxgxgxgxgxgxgwPxgGnxeGwGuyIAhyVzRyIBByYyYyYTezpyYzwRpzyyYyIvKvKvKvKvKvKvKvKvKvJAiyNvKvKvKvKvKAjvKsdzcAkAlzCAmvKzqsdyRyRsdvKvKsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmj
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvGaPaPAnAoApAoAqAoAoAoAoAoAoAoArAsxxAswbwbwbwPGmxeGKGxGxGxGxGxGLxgxgAtxgxgyIyIyIyIyIzozozozozozpyYzwRBzyyYyIvJvJAuvJvJsdwdvKvKsdAvyNvKvKvKvKvKsdsdsdsdvJvJvJvJvJsdsdAwAwsdvKvKsdaPaPaPaPAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmj
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHmTmTmTaPaPaPaPaPaPaPaPaPaPaPmTmTmTvHwbwbwbvGaPaPAyAzAAABzZACADACACACADAEAFvGvGvGwbwbwbwPGnxexexexexexexeGKGxHaxeGKHFHGyIyYyYyYzpzpzpzpzpyYyYyYyYyYyYyIAIAJvKAKALsdAMANAOAwAwBkAwsdvJAPvJsdAQAQAQARASATAUAVAQAQAQAwwdvKvKsdaPaPaPAxAxAWAWAWAWAWAWAXAXAXAWAWAWAWAXAXAXAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmj
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGaPaPmTaPaPaPaPaPaPaPaPaPaPaPmTaPaPvGwbwbwbvHmTaPaPAyzFAZAyzFzFzHzIzJzFBaBbmTmTvHwbwbwbwPGnxexeySySySySySxexexexexeySHSyIBdyYyYyYyYyYyYyYyYyYyYyYyYBdyIvKvKvKvKvKsdvKvKvKEaAQAQBlsdvKvKvKsdAQAQAQARBeBfBgAVAQAQAQAwvKvKvKsdaPaPaPAxAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPBhaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmj
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGaPaPmTaPaPaPaPaPaPaPaPaPaPaPmTaPaPvGwbwbwbvHvHvHvHvHwvmTmTmTmTmTmTmTmTmTmTmTaPvGwbwbwbwPGnxexeBjBjBjBjBjxexexexexexeCKyIzxyYzwzxzxzyyYyYzwzxzxzyyYzxyIvKvKvKvKvKsdvKvKvKEaBmBzBysdvKvKvKsdAQAQAQBnBoBpBqBrAQAQAQAwvKvKvKsdaPaPaPAxAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmj
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGaPaPmTaPaPaPaPaPaPaPaPaPaPaPmTaPaPvGwbwbwbvHmTaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbwPGnxexeyjxexexeyjxeGwHZGmxexeCKyIBsyYzwRBRpzyyYyYzwRBRpzyyYBsyIvKBtBuBvBCsdvJBxvJAwTzTAAwsdBAHQCksdAQAQAQAQAQAQAQAQAQAQAQAwvKvKvKsdaPaPaPAxAWAWAWBDAxAxAxAYAYAYAxBEBEAxAYAYAYAxAxAxAxAYAYAYAxAxAYAYAYAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmj
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHBFBFBFvHvHaPmTaPaPaPaPaPaPaPaPaPaPaPmTaPvHvHBFBFBFvHvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHvHBFBFBFwPGnxeGwGmxexeGwHZGmCKwPwPBGBGwPyIBdyYyYyYyYyYyYyYyYyYyYyYyYBdyIBIsdsdsdsdsdAQAQAQAwEaEaAwsdsdsdsdsdAQAQAQAQAQAQAQAQAQAQAQAwvKvKvKsdaPaPaPAxBJAWAWAxAxBKBLBMBLBMBNBOBOBPBMBLBMBLBQBRBRBRBRBRBRBRBRBRBRAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPmj
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbBSwbwbvHvHmTaPaPaPaPaPaPaPaPaPaPaPmTvHvHwbBTBUBVwbvHvHaPaPaPaPaPaPaPaPaPaPaPaPaPvHvHwbwbBUBVwPHaxeCKwPAtAtwPwPGnCKwPIaxexeIjyIzxyYzwzxzxzyyYyYzwzxzxzyyYzxyIsdsdAQAQAQAQAQAQAQAQAQAQAQAwAwsdsdAwAQAQAQAQAQAQAQAQAQAQAQAwvKvKvKsdaPaPaPAxBJAWAWAxBKBZCaCaCaCaCbCcCcCdCaCaCaCbCeBQCfCfCfCfCfCfCfCfCfAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbCgwbwbwavHvHaPaPaPaPaPaPaPaPaPaPaPvHvHwawbwbChwbwbwavHvHaPaPaPaPaPaPaPaPaPaPaPvHvHwawbwbCiBVzrxexeCKwPGmxeCKwPGnCKwPKXxexeIjyIBsyYzwRBRpzyyYyYzwRBRpzyyYBsyIsdClAQAQAQAQAQAQAQAQAQAQAQClAwAwsdAwCmAQAQAQAQAQAQAQAQAQCmAwwdvKvKAxAxAxAxAxBJAWAWAYCnCoCcCcCcCcCcCcCcCcCcCcCcCcCpCnCqCqCqCqCqCqCqCqCqAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGwbCiwbwbwbwbvHvHvHvHvGvGvGvGvGvHvHvHvHwbwbwbCiBUCrwbwbwbvHvHvHvHvGvGvGvGvGvHvHvHvHwbwbwbwbBUwbzrxexeCKwPGnxeMYwPGnCKwPQSxexeIjyIyIDmDmDmDmyICxCxyIDmDmDmDmyIyIAQAQAQAQCyCzCACACACBCCAQAQAQAQAwAwAwAwAwAwAwAQAQAQAwAwAwAwAwsdvKvKCDAWAWAWAxBJAWAWAYCECoCcCcCcCcCcCcCcCcCcCcCcCcCpCECfCfCfCfCfCfCfCfCfAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbwbwbwbwbCFxxCGCFxxCHCICJxxCGCFxxCGwbwbwbwbwbwbwbwbwbCFxxCGCFxxCHCICJxxCGCFxxCGwbwbwbwbwbwbwPQTxeGKxgGnRdTKxgHaGKwPTQHZHZUrwPCNCOCPCOCPEaAQAQEaCOCSCOCOCTAwAQAQAQCUCVCWCWCWCWCWCXCYAQAQAQAwCOCPCOCNCPEaAQAQAQEaCPCOCOCZsdvKvKAxDaAWDbAYBJAWAWAxCeBQDcDcDcDcDdCcCcDeDcDcDcDdBKBZCqCqCqCqCqCqCqCqCqAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbwbwbwbwbCFxxCGCFxxCHDfCJxxCGCFxxCGwbwbwbwbwbwbwbwbwbCFxxCGCFxxCHDfCJxxCGCFxxCGwbwbwbwbwbwbwPwPzrzrxgUWUVxgxgzrzrwPwPwPwPwPwPEaEaEaEaEaEaAQAQEaEaEaEaEaEaAwAQAQDnDoCWCWCWCWCWCWCWDpCCAQAQAwEaEaEaEaEaEaAQAQAQEaEaEaEaEaAwTRTRAxAWDrDsAYBJAWAWAxAxCeBLBMBLBMBNBOBOBPBMBLBMBLBZBRBRBRBRBRBRBRBRBRBRAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGDtDuvGwbwbwbwbDvDwDxDvDwDyDzDADwDxDvDwDxwbwbvGDBDtDuvGwbwbDvDwDxDvDwDyDzDADwDxDvDwDxwbwbwbwbwbwbwbwbwbwbAQAQAQAQDCAQAQDCAQAQAQClAwClAQAQAQAQAQAQAQAQAQAQAQAQClAwAQAQDDCWCWCWDEDFDGCWCWCWDDAQAQAwCmAQAQAQAQAQAQAQAQAQAQAQAQCmAwAQAQAYDHDIAYAxAWAWAWBDAxAxAxAYAYAYAxDJDJAxAYAYAYAxAxAxAxAYAYAYAxAxAYAYAYAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGDKxxDLwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbDMDNDKxxDOwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbAQAQAQAQDCAQAQDCAQAQAQAQDPAQAQAQAQAQAQAQAQAQAQAQAQAQAQDPAQAQDQCWCWDEDRDRDRDGCWCWDSAQAQDPAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQDTAWAWAWDUAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPDVmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdBhmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmd
aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGxxxxDWwbwbwbwbwbwbwbwbwbwbDXwbwbwbwbwbwbwbwbDYDZvHxxDWwbwbwbwbwbwbwbwbDXwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbEaAQAQAQAwAQAQAwAQAQAQAQDPAQAQAQAQAQAQAQAQAQAQAQAQAQAQDPAQAQDQCWCWEbDREcDREdCWCWDSAQAQDPAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQAYAWAWAWAYAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGEexxEfwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbEgxxEexxEfwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbAQAQAQAQDCAQAQDCAQAQAQAQDPAQAQAQAQAQAQAQAQAQAQAQAQAQAQDPAQAQDQCWCWEhDRDRDREiCWCWDSAQAQDPAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQDTAWAWAWDUAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGEjEkvGwbwbwbwbElEmEnElEmEoEpEqEmEnElEmEnwbwbvGErEjEsvGwbwbElEmEnElEmEoEpEqEmEnElEmEnwbwbwbwbwbwbwbwbwbwbAQAQAQAQDCAQAQDCAQAQAQClAwClAQAQAQAQAQAQAQAQAQAQAQAQClAwAQAQEtCWCWCWEhEuEvCWCWCWEwAQAQAwCmAQAQAQAQAQAQAQAQAQAQAQAQCmAxExExAxAxAxAxAxAWAWAWBDAxAxAxAYAYAYAxBEBEAxAYAYAYAxAxAxAxAYAYAYAxAxAYAYAYAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbwbwbwbwbCFxxCGCFxxCHDfCJxxCGCFxxCGwbwbwbwbwbwbwbwbwbCFxxCGCFxxCHDfCJxxCGCFxxCGwbwbwbwbwbwbEyEyEzEzEyEAEAEAEyEzEzEyEyEAEAEyEyDiDjDjDjDjEBAQAQECDjDjDjDjDmAwAQAQEDEECWCWCWCWCWCWCWEFEGAQAQAwDiDjDjDjDjEBAQAQECDjDjDjDjDmAxAWAWEHEIEJEKAYBJAWAWAxAxBKBLBMBLBMBNBOBOBPBMBLBMBLBQBRBRBRBRBRBRBRBRBRBRAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbwbwbwbwbCFxxCGCFxxCHCICJxxCGCFxxCGwbwbwbwbwbwbwbwbwbCFxxCGCFxxCHCICJxxCGCFxxCGwbwbwbwbwbwbEyELEMEMEMENEOEOEMEMEMEyEPEQEMEREyCSCNCOCPCPESAQAQESCZETCPCOCOAwAQAQAQEUEVCWCWCWCWCWEFCVAQAQAQAwEWCOCNCOCPESAQAQESCOCPCOEXETAxAWAWAWAWAWAWAYBJAWAWAxBKBZCaCaCaCaCbCcCcCdCaCaCaCbCeBQCfCfCfCfCfCfCfCfCfAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGwbEYEYwbwbwbvHvHvHvHvGvGvGvGvGvHvHvHvHwbwbwbCgBUCrwbwbwbvHvHvHvHvGvGvGvGvGvHvHvHvHwbwbwbBTBUwbEzEMEMEMEMEMEMEMEMEMEMEyEMEMEZFaEyFbFcFdFdFeFbFfFfFbFcFdFdFeFbFbAQAQAQAQEDCzFgFgFgCBEGAQAQAQAQFhFhFhFhFhFhFhFiFiFhFhFhFhFhFhAxAWAWAWAWAWAWAxBJAWAWAYCnCoCcCcCcCcCcCcCcCcCcCcCcCcCpCnCqCqCqCqCqCqCqCqCqAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbBUEYwbwavHvHaPaPaPaPaPaPaPaPaPaPaPvHvHwawbCiBUBVwbwavHvHaPaPFjFkFlFlFlFmFnaPaPvHvHwawbCgBUBVEzEMEMFoFpEMEMFoFpEMEMEyFqEMEMFrEyFsFtFtFtFtFtFtFtFtFtFtFtFtFsFbAwClAQAQAQAQAQAQAQAQAQAQAQClAwFhFuFvFvFvFvFwFwFwFwFvFvFvFvFuAxAWAWFxBJAWFxAYBJAWAWAYCECoCcCcCcCcCcCcCcCcCcCcCcCcCpCECfCfCfCfCfCfCfCfCfAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbCrwbvHvHmTaPaPaPaPaPaPaPaPaPaPaPmTvHvHwbCiBUwbwbvHvHmTaPFjFyFzFAFBFCFDFEFnaPmTvHvHwbwbBUwbEyEMEMFoFpEMEMFoFpEMEMEyFFEMEZFaEyFtFtFtFtFtFtFtFtFtFtFtFtFtFtFbAwAwAQAQAQAQAQAQAQAQAQAQAQAwAwFhFwFwFwFwFwFwFwFwFwFwFwFwFwFwAxAWAWFxBJAWFxAYBJAWAWAxCeBQDcDcDcDcDdCcCcDeDcDcDcDdBKBZCqCqCqCqCqCqCqCqCqAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHBFBFBFvHvHaPmTaPaPaPaPaPaPaPaPaPaPaPmTaPvHvHBFBFBFvHvHaPmTFjFyFGFHFIFHFIFHFJFEFnmTaPvHvHBFBFBFEyEMEMFoFpEMEMFoFpEMEMEyFFEMEMEREyFtFtFKFLFMFNFtFtFKFOFPFNFtFtFbaPAwAwAwAwAwAQAwAQAwAwAwAwAwaPFhFwFQFQFQFQFwFwFwFwFQFQFQFQFwAxAWAWFxBJAWFxAxBJAWAWAxAxCeBLBMBLBMBNBOBOBPBMBLBMBLBZBRBRBRBRBRBRBRBRBRBRAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGaPaPmTaPaPaPaPaPaPaPaPaPaPaPmTaPaPvGwbwbwbvGaPaPmTFRFIFIFIFSFTFUFIFIFIFRmTaPaPvGwbwbwbEyEMEMEMEMEMEMEMEMEMEMEyEyEMEMFVEyFtFtFKFWFXFNFtFtFKFYFZFNFtFtFbaPaPAwGaGbAQAQCWAQAQGbGcAwaPaPFhFwFwFwFwFwFwFwFwFwFwFwFwFwFwAxAWAWFxBJAWFxAYAWAWAWBDAxAxAxAYAYAYAxDJDJAxAYAYAYAxAxAxAxAYAYAYAxAxAYAYAYAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGaPaPmTaPaPaPaPaPaPaPaPaPaPaPmTaPaPvGwbwbwbvGaPaPmTGdGeGfGgGhGiGhGjGkGlGdmTaPaPvGwbwbwbEyEMEMEMEMEMEMEMEMEMELEyGmEMEMGnEyFtFtFtFtFtFtFtFtFtFtFtFtFtFtFbaPaPAwGaGbAQAQCWAQAQGbGcAwaPaPFhFuFvFvFvFvFwFwFwFwFvFvFvFvFuAxAWAWFxBJAWFxAYAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGaPaPmTaPaPaPaPaPaPaPaPaPaPaPmTaPaPvGwbwbwbvGaPaPmTGdGoFRGpGqGrGqGsFRGoGdmTaPaPvGwbwbwbEyEAGtEMEyGuGvGwGxGvGyEyEMEMEMGnEyFtFtFKGzGAFNFtFtFKGBGCFNFtFtFbaPaPAwGDAQAQAQCWAQAQAQGEAwaPaPFhFhFhFhFhFhFhFiFiFhFhFhFhFhFhAxAWAWFxBJAWFxAxAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHmTmTmTaPaPaPaPaPaPaPaPaPaPaPmTmTmTvHwbwbwbvHmTmTmTGdFIGkGdGFGGGHGdGfFIGdmTmTmTvHwbwbwbEyEMEMEMGIEMGJEMEMGJEMGKEMEMEMGLEyFtFtFKGMGNFNFtFtFKGOGPFNFtFtFbaPaPAwGaGbAQAQCWAQAQGbGcAwaPaPFhGQGRGRGRGRGQGQGQGQGSGTGTGTGUAxAWAWFxBJAWFxAxAxAWAWAWAWAWAWGVGVGVAWAWAWAWGVGVGVAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPFRFIGkGWGXGYGZGWGfFIFRaPaPaPvHwbwbwbEyEMEMEMEMEMEMEMEMEMEMEMEMEMEMHaEyFtFtFtFtFtFtFtFtFtFtFtFtFtFtFbaPaPAwGaGbAQAQCWAQAQGbGcAwaPaPFhGQGQGQGQGQGQGQGQGQGQGQGQGQGQAxAWAWAWAWAWAWAxAxAxAYAYAYAxAYAYAYAxAYAYAYAxAYAYAYAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPFjFyGeGkHbGXHcGZHbGfGlFEFnaPaPvHwbwbwbEyEMEMEMEMEMEMEMEMEMEMEMEMEMEMGLEyFtFtFtFtFtFtHdHdHdHdHdHdHdHdFbaPaPHeHeHeHfHfHgHfHfHeHeHeaPaPFhHhFhHiFhHjFhGQGQFhHkFhHlFhHmAxAWAWAWAWAWAWAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbvGvGvGHnHoFIGkHpFRHqFRHrGfFIHoHnvGvGvGwbwbwbEyEMEMEMEMEMEMEMEMEMEMEMEMEMEMHaEyHsHtHtFtFtHuHvHvHvTSHvHvHvHvFbaPaPHeHwHxHfHxHxHxHfHxHwHeaPaPFhHyFhHyFhHyFhGQGQFhHyFhHyFhHyAxAWAWGVGVGVGVAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbxwxxxyaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbHzxxHzHAFIFIFIHBHCFIFIHBFIFIFIHAHzxxHzwbwbwbEyEAEMEMEAEAEAEMEMHDFVEMEMHEHFHGEyHHHIHJFtFtHuHKHLHLHLHLHLHLHLFbaPaPHeHxHMHNHxHxHxHNHOHxHeaPaPFhFhFhFhFhFhFhGQGQFhFhFhFhFhFhAxAWAWAXAXAXAXAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbxwxxxyaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbHzxxHzHPFIFIFIFIFIFIFIFIFIFIFIHPHzxxHzwbwbwbEyEOEMEMEMHQHREMEMENEyEMEMEyEyEyEyHSHTHUFtFtHuHLHLHLHLHLHLHLHLFbaPaPHeHfHxHfHxHxHxHfHxHfHeaPaPFhHVGQHVGQHVGSGQGQHWHVGQHVGQHVAxAWAWAWAWAWAWAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbvGvGvGHnHXFIGkGWGfFIGkGWGfFIHYHnvGvGvGwbwbwbEyEOEMEMEMEMEMEMEMHZEyEMEMIaIaIaEyIbIcIdFtFtHLHLHLIeIfIhIgHLHLFbaPaPHeHxHxHxHxHxHxHxHxHxHeaPaPFhGQGQGQGQGQGQGQGQGQGQGQGQGQGQAxBDAWAWAWAWAYAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPGWGfFIGkIiGfFIGkIiGfFIGkGWaPaPvHwbwbwbEyEOEMEMEMHQHREMEMIjEyEMEMIkIlImEyFbFbFbFbFbFbFbFbFbFbFbFbFbFbFbHeHeHeHxHxHxHxHxHxHxHxHxHeHeHeFhInGQInGQInGSGQGQHWInGQInGQInAxAYAYAYAYAYAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTvHwbwbIovHaPaPIiGfFIGkIiGfFTGkIiGfFIGkIiaPaPvHwbwbwbEyGLEMEMEMEMEMEMEMIpEyEMEMEMIqImEyIrEMEMEMIsHeHxHxHxHxHxHxHxHxHxHxHxHeHeItHeHeHxHeHeItHeHeHxHxHeHeHeFhFhFhFhFhFhFhFhFhFhFhFhFhaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPHbGfFIGkIiGfFIGkIiGfFIGkHbaPaPvHwbwbwbEyIuEMEMEMIvIwEMEMIxEyIyEMEMIzIzEyIrEMEMEMIsHeHxHeHeHeHeIAHeHeHeHxHxHxHxHxHxHeHxHeHxHxHxHxHxHxHxHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbvGvGvGHnIBFIGkHbGfFIGkHbGfFIICHnvGvGvGwbwbwbEyEMEMEMEMEMEMEMEMIDEyEyEyIEEyEyEyIrEMEMEMIsHeHxHeIFIGIGIGIGIHHeHeHeHeHeHeHeHeIIHeHeHeHeHeHeHeHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbxwxxxyaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbHzxxHzHAFIFIFIFIFIFIFIFIFIFIFIHAHzxxHzwbwbwbEyEMEMEMEMEMEyEyIJEyEyEMEMEMEMIKEyEMEMEMEMILHeHxHeIFIGIGIGIGIHHeIMINIOINIPIQIQIQIQIQIPIQIPIQIRHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbxwxxxyaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbHzxxHzHPFIFIISFIFIFIFIFIISFIFIITHzxxHzwbwbwbEyEyIUEyHDEyEyIVEMIWEyEMEMEMEMEMIXEMEMIYEMIZHeHxHeJaIGIGIGIGJbHeIQJcJcJcJcJcIQIQIQJcJcJcJcJdJeHeHxHeHeHeHeHeHeHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbvGvGvGJfFRJgJhFkFmJiFkFmJhJgFRJjvGvGvGwbwbwbEyEMEMEMEMEMEyJkEMIWEyJlJmJnJoJpEyJqEMEMEMJrHeHxHeJaJsJtJtIGIGJuIQIQJvJwJvIQIQIQIQIQJvJwJvJxIQHeHxHxHxHxHxHxHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPmTmTmTmTmTmTmTmTmTmTmTaPaPaPvHwbwbwbvHaPaPHnJyJzHnJAJBJCJDJEHnJFJGHnaPaPvHvIvIvIEyEMEMEMJHJHEyIVEMIWEyEyEyEyEyEyEyEyEyEyEyHeHeHxHeHeHeHeHeHeHeHeIQJcJcJcJcJcIQIQIQJcJcJcJcJIIQHeHeHeHeHeHeHeHxHeHeHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHmTmTmTmTaPaPaPaPaPaPaPaPaPmTmTmTmTvHwbwbwbvHmTmTHnJJJJHnJKJLJCJCJMHnJJJJHnmTmTvHwbwbwbEyEyJNEyEAEAEyEyIJEyEyJOJPJQEAEMEMEMJRJRJRHeHxHxHeHeJSJSJSJSJSHeJTJTJTJTJTJTJTJTJTJTJTJTJTJUJTHeJVJVJVJVJVHeHxHxHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPwvvGvGvGwvaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPwvvGvGvGwvaPaPHnJWJXHnJYJCJZKaKbHnKcKdHnaPaPwvwbwbwbEyKeEMEMKfKgEyEMEMEMEMEMEMEMEAEMEMEMEMEMEMHeHxHeHeHeKhKhKhKhKhHeKiKjKjKjKjKjKjKjKjKjKjKjKjKkKiHeKhKhKhKhKhHeHeHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvYvZvYvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvYvYvYvGaPaPJfKlKlHnisKnJCKoKpHnKlKlJjaPaPvGwbwbwbEyKqEMEMEMEMEyEMEMEMEMEMEMEMKrEMEMEMEMEMEMHeHxHeKsKtKuKuKuKuKuKvKjKjKjKjKjKjKjKjKjKjKjKjKjKkKjKvKwKwKwKwKwKtKxHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGvGvGaPaPKyKzKzKAJhKlKlKlJhKAKzKzKBaPaPvGwbwbwbEyKCEMEMIYKDEyKEEMEMEMKFEMKGEAEMEMEZEMEMEMHeHxHeKsKtKuKHKuKHKuKvKjKjKjKjKjKjKjKjKjKjKjKjKjKkKjKvKwKIKwKIKwKtKxHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPKyKzKzKzKBaPaPaPaPaPaPvHwbwbwbEyEMEMEMEMKJEyKKEMEMKLKMEMKNEAKOKPKQJRJRJRHeHxHeKsKtKuKuKRKuKuKvKjKjKjKjKjKjKjKSKjKjKjKjKjKkKjKvKwKwKTKwKwKtKxHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbEyKUGLEMKVKWEyKXKYKZLaLbEMEMEyEyEyEyEyEyEyHeHxHeKsKtKuKuKuKuKuKvKjKjKjKjKjKjLcLdLcKjKjKjKjKkKjKvKwKwKwKwKwKtKxHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbEyEyEyEyEyEyEyEyEyEyEyEyEyEyEyaPaPaPaPaPaPHeHxHeKsKtKuKHKuKHKuKvKjKjKjKjKjKjLeLfLgKjKjKjKjKkKjKvKwKIKwKIKwKtKxHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGEjEkvGwbwbwbwbElEmEnElEmEoEpEqEmEnElEmEnwbwbvGErEjEsvGwbwbElEmEnElEmEoEpEqEmEnElEmEnwbwbwbwbwbwbwbwbwbwbAQAQAQAQDCAQAQDCAQAQAQClAwClAQAQAQAQAQAQAQAQAQAQAQAQClAwAQAQEtCWCWCWEhEuEvCWCWCWEwAQAQAwCmAQAQAQAQAQAQAQAQAQAQAQAQCmAxBYBYAxAxAxAxAxAWAWAWBDAxAxAxAYAYAYAxBEBEAxAYAYAYAxAxAxAxAYAYAYAxAxAYAYAYAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbwbwbwbwbCFxxCGCFxxCHDfCJxxCGCFxxCGwbwbwbwbwbwbwbwbwbCFxxCGCFxxCHDfCJxxCGCFxxCGwbwbwbwbwbwbEyEyEzEzEyEAEAEAEyEzEzEyEyEAEAEyEyEaEaEaEaEaEaAQAQEaEaEaEaEaEaAwAQAQEDEECWCWCWCWCWCWCWEFEGAQAQAwEaEaEaEaEaEaAQAQEaEaEaEaEaEaAxDqDqPfOUSmPsAYBJAWAWAxAxBKBLBMBLBMBNBOBOBPBMBLBMBLBQBRBRBRBRBRBRBRBRBRBRAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbwbwbwbwbCFxxCGCFxxCHCICJxxCGCFxxCGwbwbwbwbwbwbwbwbwbCFxxCGCFxxCHCICJxxCGCFxxCGwbwbwbwbwbwbEyEREMEMFaFpFoFoFqEMFrEyUXUZUYVaEyCSCNCOCPCPEaAQAQEaCZETCPCOCOAwAQAQAQEUEVCWCWCWCWCWEFCVAQAQAQAwEWCOCNCOCPEaAQAQEaCOCPCOEXETAxDqDqDqDqDqDqAYBJAWAWAxBKBZCaCaCaCaCbCcCcCdCaCaCaCbCeBQCfCfCfCfCfCfCfCfCfAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGwbEYEYwbwbwbvHvHvHvHvGvGvGvGvGvHvHvHvHwbwbwbCgBUCrwbwbwbvHvHvHvHvGvGvGvGvGvHvHvHvHwbwbwbBTBUwbEzEMEMEMEMEMEMEMEMEMGvEyVbEMEZVcEyFbEBEBEBEBFbFfFfFbEBEBEBEBFbFbAQAQAQAQEDCzFgFgFgCBEGAQAQAQAQFhFhFhFhFhFhFhFiFiFhFhFhFhFhFhAxDqDqDqDqDqDqAxBJAWAWAYCnCoCcCcCcCcCcCcCcCcCcCcCcCcCpCnCqCqCqCqCqCqCqCqCqAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbBUEYwbwavHvHaPaPaPaPaPaPaPaPaPaPaPvHvHwawbCiBUBVwbwavHvHaPaPFjFkFlFlFlFmFnaPaPvHvHwawbCgBUBVEzEMEMGIGyEMEMGIGyEMGvEyVdEMEMVeEyFsFtFtFtFtFtFtFtFtFtFtFtFtFsFbAwClAQAQAQAQAQAQAQAQAQAQAQClAwFhFuFvFvFvFvFwFwFwFwFvFvFvFvFuAxDqDqCsCjDqCsAYBJAWAWAYCECoCcCcCcCcCcCcCcCcCcCcCcCcCpCECfCfCfCfCfCfCfCfCfAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbCrwbvHvHmTaPaPaPaPaPaPaPaPaPaPaPmTvHvHwbCiBUwbwbvHvHmTaPFjFyFzFAFBFCFDFEFnaPmTvHvHwbwbBUwbEyJkEMGIGyEMEMGIGyEMGvEyVfEMEZVcEyFtFtFtFtFtFtFtFtFtFtFtFtFtFtFbAwAwAQAQAQAQAQAQAQAQAQAQAQAwAwFhFwFwFwFwFwFwFwFwFwFwFwFwFwFwAxDqDqCsCjDqCsAYBJAWAWAxCeBQDcDcDcDcDdCcCcDeDcDcDcDdBKBZCqCqCqCqCqCqCqCqCqAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHBFBFBFvHvHaPmTaPaPaPaPaPaPaPaPaPaPaPmTaPvHvHBFBFBFvHvHaPmTFjFyFGFHFIFHFIFHFJFEFnmTaPvHvHBFBFBFEyHEEMGIGyEMEMGIGyEMGvEyVgViVhVjEyFtFtFKFLFMFNFtFtFKFOFPFNFtFtFbaPAwAwAwAwAwAQAwAQAwAwAwAwAwaPFhFwFQFQFQFQFwFwFwFwFQFQFQFQFwAxDqDqCsCjDqCsAxBJAWAWAxAxCeBLBMBLBMBNBOBOBPBMBLBMBLBZBRBRBRBRBRBRBRBRBRBRAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGaPaPmTaPaPaPaPaPaPaPaPaPaPaPmTaPaPvGwbwbwbvGaPaPmTFRFIFIFIFSFTFUFIFIFIFRmTaPaPvGwbwbwbEyHEEMEMEMEMEMEMEMEMGvEyEyVbVkFVEyFtFtFKFWFXFNFtFtFKFYFZFNFtFtFbaPaPAwECGbAQAQCWAQAQGbEPAwaPaPFhFwFwFwFwFwFwFwFwFwFwFwFwFwFwAxDqDqCsCjDqCsAYAWAWAWBDAxAxAxAYAYAYAxDJDJAxAYAYAYAxAxAxAxAYAYAYAxAxAYAYAYAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGaPaPmTaPaPaPaPaPaPaPaPaPaPaPmTaPaPvGwbwbwbvGaPaPmTGdGeGfGgGhGiGhGjGkGlGdmTaPaPvGwbwbwbEyHEEMEMFrImImImImImIpEyIrFqFaIsEyFtFtFtFtFtFtFtFtFtFtFtFtFtFtFbaPaPAwECGbAQAQCWAQAQGbEPAwaPaPFhFuFvFvFvFvFwFwFwFwFvFvFvFvFuAxDqDqCsCjDqCsAYAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGaPaPmTaPaPaPaPaPaPaPaPaPaPaPmTaPaPvGwbwbwbvGaPaPmTGdGoFRGpGqGrGqGsFRGoGdmTaPaPvGwbwbwbEyEAGtEMEyIxIuIzIyIuIDEyHEEMEMIKEyFtFtFKGzGAFNFtFtFKGBGCFNFtFtFbaPaPAwGDAQAQAQCWAQAQAQGEAwaPaPFhFhFhFhFhFhFhFiFiFhFhFhFhFhFhAxDqDqCsCjDqCsAxAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHmTmTmTaPaPaPaPaPaPaPaPaPaPaPmTmTmTvHwbwbwbvHmTmTmTGdFIGkGdGFGGGHGdGfFIGdmTmTmTvHwbwbwbEyHEEMEMILFqGJEMEMGJFaIVFqEMEMIWEyFtFtFKGMGNFNFtFtFKGOGPFNFtFtFbaPaPAwECGbAQAQCWAQAQGbEPAwaPaPFhGQGRGRGRGRGQGQGQGQGSGTGTGTGUAxDqDqCsCjDqCsAxAxAWAWAWAWAWAWGVGVGVAWAWAWAWGVGVGVAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPFRFIGkGWGXGYGZGWGfFIFRaPaPaPvHwbwbwbEyHEEMEMEMEMEMEMEMEMEMEMEMEMEMIZEyFtFtFtFtFtFtFtFtFtFtFtFtFtFtFbaPaPAwECGbAQAQCWAQAQGbEPAwaPaPFhGQGQGQGQGQGQGQGQGQGQGQGQGQGQAxDqDqDqDqDqDqAxAxAxAYAYAYAxAYAYAYAxAYAYAYAxAYAYAYAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPFjFyGeGkHbGXHcGZHbGfGlFEFnaPaPvHwbwbwbEyHEEMEMEMEMEMEMEMEMEMEMEMEMEMIWEyFtFtFtFtFtFtHdHdHdHdHdHdHdHdFbaPaPHeHeHeHfHfHgHfHfHeHeHeaPaPFhHhFhHiFhHjFhGQGQFhHkFhHlFhHmAxDqDqDqDqDqDqAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbvGvGvGHnHoFIGkHpFRHqFRHrGfFIHoHnvGvGvGwbwbwbEyHEEMFrImImImJkFrImImJkEMEMEMIZEyHsHtHtFtFtHuHvHvHvTSHvHvHvHvFbaPaPHeHwHxHfHxHxHxHfHxHwHeaPaPFhHyFhHyFhHyFhGQGQFhHyFhHyFhHyAxDqDqCLCLCLCLAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbxwxxxyaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbHzxxHzHAFIFIFIHBHCFIFIHBFIFIFIHAHzxxHzwbwbwbEyEAEMGvEAEAEAHEGvHDFVHEFrJmJlJnEyHHHIHJFtFtHuHKHLHLHLHLHLHLHLFbaPaPHeHxHMHNHxHxHxHNHOHxHeaPaPFhFhFhFhFhFhFhGQGQFhFhFhFhFhFhAxDqDqDgDgDgDgAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbxwxxxyaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbHzxxHzHPFIFIFIFIFIFIFIFIFIFIFIHPHzxxHzwbwbwbEyJoEMFaJpIvJqFqFaJHEyJPJOEyEyEyEyEQHTHUFtFtHuHLHLHLHLHLHLHLHLFbaPaPHeHfHxHfHxHxHxHfHxHfHeaPaPFhHVGQHVGQHVGSGQGQHWHVGQHVGQHVAxDqDqDqDqDqDqAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbvGvGvGHnHXFIGkGWGfFIGkGWGfFIHYHnvGvGvGwbwbwbEyJoEMEMEMEMEMEMEMJQEyJPJRKeKeKfEyIbIcIdFtFtHLHLHLIeIfIhIgHLHLFbaPaPHeHxHxHxHxHxHxHxHxHxHeaPaPFhGQGQGQGQGQGQGQGQGQGQGQGQGQGQAxSpDqDqDqDqAYAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPGWGfFIGkIiGfFIGkIiGfFIGkGWaPaPvHwbwbwbEyJoEMEMEMJrHREMEMKgEyJPEMIkIlKqEyFbFbFbFbFbFbFbFbFbFbFbFbFbFbFbHeHeHeHxHxHxHxHxHxHxHxHxHeHeHeFhInGQInGQInGSGQGQHWInGQInGQInAxAYAYAYAYAYAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTvHwbwbIovHaPaPIiGfFIGkIiGfFTGkIiGfFIGkIiaPaPvHwbwbwbEyKCEMEMEMEMEMEMEMKDEyJPEMEMIqKqEyKFKEKEKEKJHeHxHxHxHxHxHxHxHxHxHxHxHeHeItHeHeHxHeHeItHeHeHxHxHeHeHeFhFhFhFhFhFhFhFhFhFhFhFhFhaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPHbGfFIGkIiGfFIGkIiGfFIGkHbaPaPvHwbwbwbEyKKEMEMEMJtIwEMEMKLEyKPKOEMKQKUEyKVEMEMEMKWHeHxHeHeHeHeIAHeHeHeHxHxHxHxHxHxHeHxHeHxHxHxHxHxHxHxHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbvGvGvGHnIBFIGkHbGfFIGkHbGfFIICHnvGvGvGwbwbwbEyHEEMEMEMFrImJkEMExEyEyEyIEEyEyEyKVEMEMEMKWHeHxHeIFIGIGIGIGIHHeHeHeHeHeHeHeHeIIHeHeHeHeHeHeHeHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbxwxxxyaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbHzxxHzHAFIFIFIFIFIFIFIFIFIFIFIHAHzxxHzwbwbwbEyHEEMFrImKYEyEyIJEyEyLaKZEMJRLbEyKZEMEMEMOQHeHxHeIFIGIGIGIGIHHeIMINIOINIPIQIQIQIQIQIPIQIPIQIRHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbxwxxxyaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbHzxxHzHPFIFIISFIFIFIFIFIISFIFIITHzxxHzwbwbwbEyEyIUEyHDEyEyOTEMPiEyJPEMEMEMEMIXEMEMIYEMRWHeHxHeJaIGIGIGIGJbHeIQJcJcJcJcJcIQIQIQJcJcJcJcJdJeHeHxHeHeHeHeHeHeHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbvGvGvGJfFRJgJhFkFmJiFkFmJhJgFRJjvGvGvGwbwbwbEyTVEMTXTWTYEyTZEMUaEyKcUbUeUdUfEyUhUgUgUgUiHeHxHeJaJsKdKdIGIGJuIQIQJvJwJvIQIQIQIQIQJvJwJvJxIQHeHxHxHxHxHxHxHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPmTmTmTmTmTmTmTmTmTmTmTaPaPaPvHwbwbwbvHaPaPHnJyJzHnJAJBJCJDJEHnJFJGHnaPaPvHvIvIvIEyTVEMUkUjUlEyUmEMUnEyEyEyEyEyEyEyEyEyEyEyHeHeHxHeHeHeHeHeHeHeHeIQJcJcJcJcJcIQIQIQJcJcJcJcJIIQHeHeHeHeHeHeHeHxHeHeHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHmTmTmTmTaPaPaPaPaPaPaPaPaPmTmTmTmTvHwbwbwbvHmTmTHnJJJJHnJKJLJCJCJMHnJJJJHnmTmTvHwbwbwbEyEyJNEyEAEAEyEyIJEyEyUpUoUqEAFcESJpUsUsUtHeHxHxHeHeJSJSJSJSJSHeJTJTJTJTJTJTJTJTJTJTJTJTJTJUJTHeJVJVJVJVJVHeHxHxHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPwvvGvGvGwvaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPwvvGvGvGwvaPaPHnJWJXHnJYJCJZKaKbHnKHKpHnaPaPwvwbwbwbEyUuEMTXUvUwEyHEEMFaJpFqEMFaEAFqEMEMEMEMGvHeHxHeHeHeKhKhKhKhKhHeKiKjKjKjKjKjKjKjKjKjKjKjKjKkKiHeKhKhKhKhKhHeHeHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvYvZvYvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvYvYvYvGaPaPJfKlKlHnKIKnJCKoLAHnKlKlJjaPaPvGwbwbwbEyUxEMEMEMUyEyHEEMEMFrImEMEMKrEMEMEMEMEMGvHeHxHeKsKtKuKuKuKuKuKvKjKjKjKjKjKjKjKjKjKjKjKjKjKkKjKvKwKwKwKwKwKtKxHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGvGvGaPaPKyKzKzKAJhKlKlKlJhKAKzKzKBaPaPvGwbwbwbEyUzEMEMIYUAEyUBEMEMGvUCEMEHEAJkEMEZEMEMGvHeHxHeKsKtKuMiKuMiKuKvKjKjKjKjKjKjKjKjKjKjKjKjKjKkKjKvKwMMKwMMKwKtKxHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPKyKzKzKzKBaPaPaPaPaPaPvHwbwbwbEyTVEMEMEMUDEyUEEMEMUFEIEMEJEAUHUGUJUIUIUKHeHxHeKsKtKuKuKRKuKuKvKjKjKjKjKjKjKjKSKjKjKjKjKjKkKjKvKwKwKTKwKwKtKxHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbEyUMULUOUNUPEyURUQUTUSUUImKYEyEyEyEyEyEyEyHeHxHeKsKtKuKuKuKuKuKvKjKjKjKjKjKjLcLdLcKjKjKjKjKkKjKvKwKwKwKwKwKtKxHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbEyEyEyEyEyEyEyEyEyEyEyEyEyEyEyaPaPaPaPaPaPHeHxHeKsKtKuMiKuMiKuKvKjKjKjKjKjKjLeLfLgKjKjKjKjKkKjKvKwMMKwMMKwKtKxHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbvHaPaPaPaPaPaPHeHxHeHxKtKuKuKuKuKuKvKjKjKjKjKjKjKjLhKjKjKjKjKjKkKjKvKwKwKwKwKwKtHxHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbvHaPaPaPaPaPaPHeHxHeLiHeLjLjLjLjLjHeKiKjKjKjKjKjKjLhKjKjKjKjKjKkKiHeLjLjLjLjLjHeLiHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGwcwbwbwbwbwbwbwbwbwbwbwbwbwbwbwcvHaPaPaPaPaPaPHeHxHxHxHeLkLkLkLkLkHeJTJTJTJTJTJTLlLmLlJTJTJTJTJUJTHeLnLnLnLnLnHeHxHxHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGvGvGvHvHvHvHvGvGvGvGvHLoLovHvHaPaPaPaPaPaPHeHeHeHxHeHeHeHeHeHeHeLpLqLqLqLqLqLrLsLpLqLqLqLqLtLpHeHeHeHeHeHeHeHxHeHeHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHvIvIvHaPaPaPaPaPaPaPaPaPHeHxHxHxHxHxHxHxHeLpLpLuLpLuLpLpLvLwLpLuLpLuLxLpHeHxHxHxHxHxHxHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbvGaPaPaPaPaPaPaPaPaPHeHeHeHeHeHeHeHxLyLpLpLpLzLzLzLpLpLpLzLzLzLzLzLpLyHxHeHeHeHeHeHeHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaR
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPHeHeHeLALALALBLCLDLELpLFLGLHLILJLKLLHeHeHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMaR
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPHeHeHeMUMUMULBLCLDLELpLFLGLHLILJLKLLHeHeHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMLMaR
aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPHeHeHeHeHeHeHeHeHeHeHeHeHeHeHeHeHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRLMLNLNLOLNLNLNLPLPLPLNLNLPLPLPLNLNLNLNLNLMaR
aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRLMLQLNLNLNLNLNLNLNLNLNLNLNLNLNLNLNLNLNLRLMaR
aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRLMLNLNLNLNLNLNLNLNLNLNLNLNLNLSLNLNLNLNLNLMaR
@@ -2579,13 +2649,13 @@ aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPLTLTLTLTLTLTLTaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRLMLNLNLNLNLULSLNLNLNLNLNLNLNLNLNLNLNLNLNLMaR
aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPLTLTLTLTLTLTLTaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRLMLNLNLNLNLNLVLVLNLNLNLNLNLNLNLNLNLNLNLNLMaR
aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPLTLTLTLTLTLTLTLTLTaPLWLXLXLXLXLXLXLXLXLXLXLXLXLYvGwbwbvGLWLZLZLZLZLZLZLZLZLYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRLMLNLNLNLNLVMaMbLVLNLNLNLNLNLNLNLNLNLNLNLMaR
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPMcLZLZLZLZMdLXLXLXMdLXLXLXMdMeLTLTLTLTLTLTLTLTLTMeMfMgMhMhMhMhMhMhMhMhMhMhMhMfvHvIvIvHMfMiMjMkMlMlMmMnMoMpLYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRLMLNLNLNLNLVMqMrLVLNLNLULNMsLNLNLNLNLNLNLMaR
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPMcLZLZLZLZMdLXLXLXMdLXLXLXMdMeLTLTLTLTLTLTLTLTLTMeMfMgMhMhMhMhMhMhMhMhMhMhMhMfvHvIvIvHMfQFMjMkMlMlMmMnMoMpLYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRLMLNLNLNLNLVMqMrLVLNLNLULNMsLNLNLNLNLNLNLMaR
aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPMtMuMgMvMwMfMxMxMxMfMyMyMyMfMeMzMzMzMzMzMzMzMzMzMeMfMhMhMhMhMhMhMhMhMhMhMhMhMAMBMCMCMBMDMEMEMEMFMGMHMEMEMIMfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRLMLNLNLNLNLNLVLVLNLNLNLNLNLNLNLNLNLNLNLNLMaR
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPMJMuMgMgMgMfMxMxMxMfMyMyMyMfMeMzMzMzMzMzMzMzMzMzMeMfMhMhMhMhMhMhMhMhMhMhMhMhMfMKMLMLMKMfMMMNMEMEMEMEMEMEMOMfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRLMLNLNLSLNLNLNLNLNLNLNLNLNLNLNLNLNLQLNLNLMaR
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPMJMuMgMgMgMfMxMxMxMfMyMyMyMfMeMzMzMzMzMzMzMzMzMzMeMfMhMhMhMhMhMhMhMhMhMhMhMhMfMKMLMLMKMfQKMNMEMEMEMEMEMEMOMfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRLMLNLNLSLNLNLNLNLNLNLNLNLNLNLNLNLNLQLNLNLMaR
aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPMJMuMgMgMgMfMxMxMxMfMyMyMyMfMeMzMzMzMzMzMzMzMzMzMeMfMhMhMhMhMhMhMhMhMhMhMhMhMfMLMPMPMLMfMEMEMEMQMRMSMEMEMTMBLZLZLYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRLMLNLNLULSLNLNLNLNLNLNLNLNLNLNLNLNLSLNLNLMaR
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPMJMuMgMgMgMfMxMxMxMfMyMyMyMfMeMzMzMzMzMzMzMzMzMzMeMfMgMhMhMhMhMhMhMhMhMhMhMhMfMLMPMPMLMfMUMVMEMWMXMYMEMEMEMEMEMZMfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRLMLNLNLNLNLNLNLNNaLNNbLNNbLNNcLNLNLNLNLNLMaR
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPMJMuMgMgMgMfMxMxMxMfMyMyMyMfMeMzMzMzMzMzMzMzMzMzMeMfMgMhMhMhMhMhMhMhMhMhMhMhMfMLMPMPMLMfReMVMEMWMXGaMEMEMEMEMEMZMfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRLMLNLNLNLNLNLNLNNaLNNbLNNbLNNcLNLNLNLNLNLMaR
aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPNdMuMgMgMgMfMxMxMxMfMyMyMyMfMeMzMzMzMzMzMzMzMzMzMeMALZLZLZLZMBNeNeMBLZLZLZLZMDMLMPMPMLMfNfMEMEMEMEMEMEMEMEMEMEMZMfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRLMLNLNLNNgLNLNLNLNLNLNLNLNLNLNLNLNLNLNLNLMaR
-aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPMcLZLZMBNhMBNiMBNjMBNiMBNkMBNiMBMeMBNiMBNlMBNiMBMeMBMDNmMLMLMLMLNnMLMLMLMLMLMKMfMLMPMPMLMfMUMVMEMENoNoNpNqNqNrMBLZNsLZLYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRLMNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtLMaR
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPMcLZLZMBNhMBNiMBNjMBNiMBNkMBNiMBMeMBNiMBNlMBNiMBMeMBMDNmMLMLMLMLNnMLMLMLMLMLMKMfMLMPMPMLMfReMVMEMENoNoNpNqNqNrMBLZNsLZLYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRLMNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtLMaR
aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPNuMKMLMLMLMLMLMLNvMLMLMLNwMLMLMLMLMLMLMLNxMLMLNyNzNAMBMLMPMPMPMPMPMPMPMPMPMPMLMBMLMPMPMLMBNBNCNDNDNBNENCMBLZLZMDNFMPNGNHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRNINJNJNJNJNJNJNJNJNJNJNJNJNJNJNJNJNJNJNJNIaR
aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPNuMLMPMPMPMPMPMPMPMPMPMPMPMPMPMPMPMPMPMPMPMPMPMPMPMLNKMLMPNLNLNLNLNLNLNLNLMPMLNKMLMPMPMLNKMLMLMLMLMLMLMLMLMLMLNMNNNONPNQaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRNRNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNRaR
aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPNuMLMPMPMPMPMPMPMPMPMPMPMPMPMPMPMPMPMPMPMPMPMPMPMPMPNTMPMPNUNUNUNUNUNUNUNUMPMPNTMPMPMPMPNTMPMPMPMPMPMPMPMPMPMLNVMLMPNWNQaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRNRNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNRaR
@@ -2595,16 +2665,16 @@ aRaRaRaRaRaRaRaRaRaRaROgOgOgOgOgOgOgOgOgOgOgOgOgOgOgOgOgOgOgOgOgaRaRaRaRaRaRaRmd
aRmjmjmjmjmjmjmjmjmjmjOvOvOvOvOvOgOwOxOyOgOvOvOvOvOvOvOvOvOvOvOvmjmjaRmjmjmjmjmdaPaPaPaPaPaPaPaPaPaPaPMtMuMgMgMgMfOzOzOzOAOBOBOBOAOCOCOCOAODODODMfMPMPMPMALZLZLZLZMBOEOEMBLZLZLZLZMDMLMPMPMLMfOFOqOqOqOFMfOGMPMPMPMPOHMfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRNRNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNRaR
aRmjmjmjmjmjmjmjmjmjmjOvOvOvOvOvOgOIOxOxOgOvOvOvOvOvOvOvOvOvOvOvmjmjaRmjmjmjmjmdaPaPaPaPaPaPaPaPaPaPaPMJMuMgMgMgMfOzOzOzOAOBOBOBOAOCOCOCOAODODODMfMPMPMPMfOJOJOJOJOJOJOJOJOJOJOJMgMfMLMPMPMLMfOKOLOqOqOqMfOtMPMPOtMPOtMfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRNRNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNRaR
aRmjmjmjmjmjmjOvOvOvOgOgOgOgOvOgOgOgOgOMOgOgOgOgOgOgOgOvOvOvOvOvmjmjaRmjmjmjmjmdaPaPaPaPaPaPaPaPaPaPaPMJMuMgMgMgMfOzOzOzOAOBOBOBOAOCOCOCOAODODODMfMPMPMPMfOJOJOJOJOJOJOJOJOJOJOJOJMfONNLNLONMfNBNCOONBNCMfOGMPOtMBLZLZOuaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRNRNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNRaR
-aRmjmjmjOvOvOvOvOPOQOxOxOxOxOxOxOxOxOxOxOxOxOxOxOxOxOgOvOvOvOvOvmjmjaRmjmjmjmjmdaPaPaPaPaPaPaPaPaPaPaPMJMuMgMgMgMfOzOzOzOAOBOBOBOAOCOCOCOAODODODMfMPMPMPMfOJOJOJOJOJOJOJOJOJOJOJOJMfORORORORMfOSOqOqOqOSMfOtMPOGMfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRNRNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNRaR
-aRmjmjmjOvOvOxOTOPOTOxOxOxOxOxOxOxOxOxOxOxOxOxOxOxOxOgOUOVOvOvOvmjmjaRmjmjmjmjmdaPaPaPaPaPaPaPaPaPaPaPNdMuMgOWOXMfOzOzOzOAOBOBOBOAOCOCOCOAODODODMfOYOZPaMfOJOJOJOJOJOJOJOJOJOJOJOJMAMBNBNCMBMDOqOqOqOqOqMfOGMPOtMfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRNRNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNRaR
-aRmjmjmjOvOvOPOTOPOvOvOvOgOgOgOgOMOgOgOgOgOMOgOxOxOxOMPbPcOvOvOvmjmjaRmjmjmjmjmdaPaPaPaPaPaPaPaPaPaPaPOhLZLZLZLZNiLXLXLXNiLXLXLXNiLXLXLXNiLXLXLXNiMeMeMeMfOJOJOJOJOJOJOJOJOJOJOJMgMfaPaPaPaPMfOSOqOSOqOSMfOtMPPdOuaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRNRNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNRaR
-aRmjmjmjOvOPOPOvOvOvOvOvOvOvOvOgOxOxOIOgPeOxOgOxOxOxOMPbPfOvOvOgmjmjaRmjmjmjmjmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPOhLXLXLXLXLXLXLXLXLXLXLXLXOuaPaPaPaPOhLZLZLZLZLZNiLZLZOuaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRNRNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNRaR
+aRmjmjmjOvOvOvOvOPOxOxOxOxOxOxOxOxOxOxOxOxOxOxOxOxOxOgOvOvOvOvOvmjmjaRmjmjmjmjmdaPaPaPaPaPaPaPaPaPaPaPMJMuMgMgMgMfOzOzOzOAOBOBOBOAOCOCOCOAODODODMfMPMPMPMfOJOJOJOJOJOJOJOJOJOJOJOJMfORORORORMfOSOqOqOqOSMfOtMPOGMfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRNRNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNRaR
+aRmjmjmjOvOvOxOPOPOPOxOxOxOxOxOxOxOxOxOxOxOxOxOxOxOxOgSyOVOvOvOvmjmjaRmjmjmjmjmdaPaPaPaPaPaPaPaPaPaPaPNdMuMgOWOXMfOzOzOzOAOBOBOBOAOCOCOCOAODODODMfOYOZPaMfOJOJOJOJOJOJOJOJOJOJOJOJMAMBNBNCMBMDOqOqOqOqOqMfOGMPOtMfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRNRNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNRaR
+aRmjmjmjOvOvOPOPOPOvOvOvOgOgOgOgOMOgOgOgOgOMOgOxOxOxOMPbPcOvOvOvmjmjaRmjmjmjmjmdaPaPaPaPaPaPaPaPaPaPaPOhLZLZLZLZNiLXLXLXNiLXLXLXNiLXLXLXNiLXLXLXNiMeMeMeMfOJOJOJOJOJOJOJOJOJOJOJMgMfaPaPaPaPMfOSOqOSOqOSMfOtMPPdOuaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRNRNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNRaR
+aRmjmjmjOvOPOPOvOvOvOvOvOvOvOvOgOxOxOIOgPeOxOgOxOxOxOMPbRwOvOvOgmjmjaRmjmjmjmjmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPOhLXLXLXLXLXLXLXLXLXLXLXLXOuaPaPaPaPOhLZLZLZLZLZNiLZLZOuaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRNRNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNRaR
aRmjmjmjOvOPOvOvOvmjmjOvOgOgOgOgPgOxOwOgPgOwOgOxOxOxOgPbPbPbPhOgmjmjaRmjmjmjaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRNRNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNRaR
-aRmjmjmjOvPiPiOvmjmjmjOvPjPkPkOgOgOgOgOgOgOgOgOxOxOxOgPbPbPbPlOgmjmjaRmjmjmjaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRNRNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNRaR
+aRmjmjmjOvOPOPOvmjmjmjOvPjPkPkOgOgOgOgOgOgOgOgOxOxOxOgPbPbPbPlOgmjmjaRmjmjmjaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRNRNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNRaR
aRmjOvOPOPOPOPOvOvmjmjOvPmPnPmOMOxOxOxOxOxOxOxOxOxOxOgPoPpPqOgOgmjmjaRmjmjmjaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRaR
-aRmjPrOPOPOPOPOPOvmjmjOgPsPmPmOMOxOxOxOxOxOxOxOxOxOxOgOvOvOvOvOvmjmjaRmjmjmjaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaR
-aRmjPuPvPtOPPtOPOPmjmjOgPyPzOgOgOgOgOgOgOgOgOgOgOMOgOgOgOgOgOgOgOgOgOgmjmjaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
-aRmjPAOPPwOPPtOPOPmjmjOvOvOvOgOxOxOxOxOxOxOgPCPDPDPDPEOgOxOxOxOxOxOxOgmjaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aRmjPrOPOPOPOPOPOvmjmjOgPyPmPmOMOxOxOxOxOxOxOxOxOxOxOgOvOvOvOvOvmjmjaRmjmjmjaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaR
+aRmjPuPvPwOPPtOPOPmjmjOgPyPzOgOgOgOgOgOgOgOgOgOgOMOgOgOgOgOgOgOgOgOgOgmjmjaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aRmjPAOPPwOPPwOPOPmjmjOvOvOvOgOxOxOxOxOxOxOgPCPDPDPDPEOgOxOxOxOxOxOxOgmjaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
aRmjOvOPPwOPPxOPOPmjmjaPaPmjOgOxOwOxOxOxOxOgPDPDPHPDPDOgOxOxOxOxOwOxOgmjaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
aRmjOvPIOPOPOPPKOPmjmjaPaPmjOgOxOxOxOxOxOxOMPDPDPLPDPDOMOxOxOxOxOxOxOgmjaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
aRmjOvOvOPOPOPOPOvmjmjmSaPaPOgOxOxOgPMPNPOOgPDPPPBPDKmOgPMPNPOOgOxOxOgaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
@@ -2617,26 +2687,26 @@ aRmjmjmjmjmjaPaPaPaPaPaPaPaPPFPGQcPFaPaPaPPFQdQeQeQeQfPFaPaPaPPFQgPJPFaPaPaPaPmd
aRmjmjmjmjmjaPaPaPaPaPaPaPaPPFQiQjPFaPaPPYPFPFQkPQQmQaPFPZaPaPPFQoQpPFaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
aRmjmjmjmjmjaPaPaPaPaPaPaPaPPFQqQrPFaPaPPFPFQsQtQuQtQvPFPFaPaPPFQwQxPFaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
aRmjmjmjmjmjaPaPaPaPaPaPaPaPPFQyPFPFPFPFPFQzQAQAQAQAQAQBPFPFPFPFPFQCPFaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
-aRmjmjmjmjmjaPaPaPaPaPaPaPaPPFQDQEQFQGQHPFQIQAQAQAQAQAQIPFQJQKQLQMQNPFaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
-aRmjmjaPaPaPaPaPaPaPaPaPaPaPPFQOQPQPQPQQPFQRQSQTQUQRQSQTPFQVQPQPQWQOPFaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aRmjmjmjmjmjaPaPaPaPaPaPaPaPPFQDQESUQGQHPFQIQAQAQAQAQAQIPFQJTCQLQMQNPFaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aRmjmjaPaPaPaPaPaPaPaPaPaPaPPFQOQPQPQPQQPFQdQeQfQUQdQeQfPFQVQPQPQWQOPFaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
aRmjmjaPaPaPaPaPaPaPaPaPaPaPQXQOQPQPQPQPQUQAQAQAQAQAQAQAQUQPQPQYQPQOQXaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
-aRmjmjmjaPaPaPaPaPaPaPaPaPaPQZRaQPRbRPQPPFRcRdQAQAQAQARePFQPRfQPRgQOQZaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aRmjmjmjaPaPaPaPaPaPaPaPaPaPQZRaQPRbRPQPPFRcGcQAQAQAQATDPFQPRfQPRgQOQZaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
aRmjmjmjaPaPaPaPaPaPaPaPaPaPRhRaQPQPPFRiPFPFPFRjTERlPFPFPFRiPFRmRnRoRhaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
-aRmjmjmjaPaPaPaPaPaPaPaPaPPYPFTFRqRqPFRrRsRrQXRtQlRvQXRwRxRyPFRzRATGPFPZaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRCRCRCRCRCRCRCRCRCRCRCRCRDRCRCRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
-aRmjmjmjaPaPaPaPmjmjaPaPaPREPFRFRFPFPFRrRrRrQZRtRkRvQZRyRyRGPFPFRFRFPFRHaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRIRJRKRLRMRNRCROTHRQRCRRRSRTRCRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
-aRmjmjmjaPaPaPaPmjmjaPaPaPaPRERURURHPFRVQnRrRhRXQARXRhRyRyRYPFRERURURHaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRKRKRKRKRKRKRZSaSbSaScRSRSSdRCRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aRmjmjmjaPaPaPaPaPaPaPaPaPPYPFTFRqRqPFRrRsRrQXRtQlRvQXUcRxRyPFRzRATGPFPZaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRCRCRCRCRCRCRCRCRCRCRCRCRDRCRCRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aRmjmjmjaPaPaPaPmjmjaPaPaPREPFRFRFPFPFRrRrRrQZRtRkRvQZRyRyRGPFPFRFRFPFRHaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRIRJRKRLRMRNRCROTHRQRCRRRSRSRTRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aRmjmjmjaPaPaPaPmjmjaPaPaPaPRERURURHPFRVQnRrRhRXQARXRhRyRyRYPFRERURURHaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRKRKRKRKRKRKRZSaSbSaScRSRSRSSdRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
aRmjmjmjaPaPaPaPmjmjaPaPaPaPaPaPaPaPPFRrRrRrPFPFQUPFPFSeRySfPFaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCSgSgRKRKRKShRCSaSaSiRCRCRCRCRCRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
-aRmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPPFRrRrSjPFSkQASlPFRyRySmPFaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRKRKRKRKRKSnRCSoSoSpRCSqSrSsStRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
-aRmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPPFPFSuRrPFSvQASwPFSxSyPFPFaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCSzSzRKRKRKSARCSoSoSoSBSoSoSoSCRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aRmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPPFRrRrSjPFSkQASlPFRyRyTIPFaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRKRKRKRKRKSnRCSoSoEKRCSqSrSsStRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aRmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPPFPFSuRrPFSvQASwPFSxTJPFPFaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCSzSzRKRKRKSARCSoSoSoSBSoSoSoSCRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
aRmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPREPFPFPFPFSDSESFPFPFPFPFRHaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRKRKRKRKRKSGRCSHSISJRCSKSLSMStRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
aRmjmjmjmjmjaPaPaPaPmjmjaPaPaPaPaPaPaPaPREPFRFRFRFRFRFPFRHaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRKRKRKRKRKShRCRCRCRCRCRCRCRCRCRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
-aRmjmjmjmjmjaPaPaPaPmjmjmjaPaPaPaPaPaPaPaPRERURURURURURHaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRKSNSOSPSQRKSRSSSTSRSUSVSWSWSVRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aRmjmjmjmjmjaPaPaPaPmjmjmjaPaPaPaPaPaPaPaPRERURURURURURHaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRKSNSOSPSQRKSRSSSTSRTkSVSWSWSVRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
aRmjmjmjmjmjaPaPaPaPmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRKSNSXSYSQRKSZSZSZSZTaSaSaSaSaRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
aRmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRKSNTbTcSQRKSZSZSZSZSZSZSZSZSZRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
aRmjmjmjaPaPaPaPaPaPaPaPaPaPmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRKSNTdTTSQRKSZSZSZSZSZSZTfTgThRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
aRmjmjmjaPaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRKRKRKRKRKRKSZSZSZSZSZSZSZSZSZRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
-aRmjmjmjaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCTiTjTjTkTjTjTjTkTjTjTjTkTjTjTlRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
-aRmjaPaPaPaPaPaPaPaPaPaPmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCTmTnTnSUToTpToSUTqTqTrSUTsTtRSRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aRmjmjmjaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCTiTjTjTjTjTjTjTjTjTjTjTjTjTjTlRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aRmjaPaPaPaPaPaPaPaPaPaPmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCTmTnTnTkToTpToTkTqTqTrTkTsTtRSRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
aRmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCTnTuTmTaToToToTaTvTwTqTaTxRSTyRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
mdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
diff --git a/maps/polaris-3.dmm b/maps/polaris-3.dmm
index 016a2b79fc..7b303c6b86 100644
--- a/maps/polaris-3.dmm
+++ b/maps/polaris-3.dmm
@@ -5,7 +5,7 @@
"ae" = (/turf/simulated/shuttle/wall{icon_state = "swall_s"; dir = 2},/area/derelict/ship)
"af" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/turf/simulated/shuttle/wall{icon_state = "swall_c"; dir = 8},/area/derelict/ship)
"ag" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
-"ah" = (/obj/machinery/sleeper,/obj/machinery/light{dir = 1},/obj/effect/decal/remains/human,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
+"ah" = (/obj/machinery/sleep_console,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
"ai" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/turf/simulated/shuttle/wall{icon_state = "swall_c"; dir = 1},/area/derelict/ship)
"aj" = (/turf/simulated/shuttle/wall{icon_state = "swall_t"; dir = 2},/area/derelict/ship)
"ak" = (/obj/structure/shuttle/engine/propulsion{icon_state = "burst_r"; dir = 4},/turf/space,/area/derelict/ship)
@@ -20,7 +20,7 @@
"at" = (/obj/item/weapon/scalpel,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
"au" = (/turf/simulated/shuttle/wall{icon_state = "swall_t"; dir = 8},/area/derelict/ship)
"av" = (/turf/simulated/shuttle/plating,/area/derelict/ship)
-"aw" = (/obj/structure/computerframe{anchored = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
+"aw" = (/obj/structure/frame{anchored = 1; frame_type = "computer"; icon_state = "computer_0"},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
"ax" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/shuttle/plating,/area/derelict/ship)
"ay" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/shuttle/plating,/area/derelict/ship)
"az" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/shuttle/plating,/area/derelict/ship)
@@ -40,7 +40,7 @@
"aN" = (/obj/machinery/light_switch{pixel_x = 27},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
"aO" = (/obj/machinery/portable_atmospherics/powered/scrubber,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
"aP" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/shuttle/plating,/area/derelict/ship)
-"aQ" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
+"aQ" = (/obj/machinery/light{dir = 1},/obj/machinery/sleeper{dir = 8},/obj/effect/decal/remains/human,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
"aR" = (/obj/machinery/door/window,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
"aS" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
"aT" = (/obj/structure/lattice,/turf/space,/area/space)
@@ -50,38 +50,38 @@
"aX" = (/obj/structure/table/standard,/obj/item/weapon/tank/oxygen,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
"aY" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/shuttle/plating,/area/derelict/ship)
"aZ" = (/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
-"ba" = (/turf/simulated/shuttle/wall{icon_state = "swall_s"; dir = 4},/area/space)
-"bb" = (/turf/simulated/shuttle/wall{icon_state = "swall_t"; dir = 1},/area/space)
-"bc" = (/turf/simulated/shuttle/wall{icon_state = "swall_straight"; dir = 4},/area/space)
-"bd" = (/turf/simulated/shuttle/wall{icon_state = "swall_s"; dir = 2},/area/space)
+"ba" = (/obj/item/weapon/bedsheet,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/bed/padded,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
+"bb" = (/obj/item/weapon/bedsheet,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/bed/padded,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
+"bc" = (/obj/structure/table,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
+"bd" = (/obj/machinery/power/solar,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/tcomsat)
"be" = (/obj/structure/table/standard,/obj/item/device/analyzer,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
"bf" = (/obj/structure/bed/chair{dir = 8},/obj/effect/decal/remains/human,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
"bg" = (/obj/machinery/door/airlock/glass{name = "Living Module"},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
"bh" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
-"bi" = (/turf/simulated/shuttle/wall{icon_state = "swall_t"; dir = 8},/area/space)
-"bj" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/turf/simulated/shuttle/wall{icon_state = "swall_c"; dir = 8},/area/space)
-"bk" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space)
-"bl" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/turf/simulated/shuttle/wall{icon_state = "swall_c"; dir = 1},/area/space)
-"bm" = (/turf/simulated/shuttle/wall{icon_state = "swall_t"; dir = 4},/area/space)
+"bi" = (/obj/machinery/power/solar,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/tcomsat)
+"bj" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless,/area/tcomsat)
+"bk" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/airless,/area/tcomsat)
+"bl" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/airless,/area/tcomsat)
+"bm" = (/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/airless,/area/tcomsat)
"bn" = (/obj/machinery/door/window/northright,/obj/effect/decal/remains/human,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
-"bo" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
+"bo" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/airless,/area/tcomsat)
"bp" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
-"bq" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space)
+"bq" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless,/area/tcomsat)
"br" = (/turf/simulated/shuttle/wall{icon_state = "swall_s"; dir = 8},/area/derelict/ship)
"bs" = (/turf/simulated/shuttle/wall{icon_state = "swall_s"; dir = 1},/area/derelict/ship)
-"bt" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/turf/simulated/shuttle/wall{icon_state = "swall_c"; dir = 2},/area/space)
-"bu" = (/obj/structure/table,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space)
-"bv" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/turf/simulated/shuttle/wall{icon_state = "swall_c"; dir = 4},/area/space)
+"bt" = (/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/airless,/area/tcomsat)
+"bu" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/camera/network/telecom{c_tag = "Telecoms - Solar North"; dir = 1},/turf/simulated/floor/airless,/area/tcomsat)
+"bv" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/airless,/area/tcomsat)
"bw" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/shuttle/plating,/area/derelict/ship)
"bx" = (/obj/machinery/light_switch{pixel_x = 27},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
-"by" = (/turf/simulated/shuttle/wall{icon_state = "swall_s"; dir = 1},/area/space)
-"bz" = (/turf/simulated/shuttle/wall{icon_state = "swall_t"; dir = 2},/area/space)
-"bA" = (/turf/simulated/shuttle/wall{icon_state = "swall_s"; dir = 8},/area/space)
+"by" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area/tcomsat)
+"bz" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless,/area/tcomsat)
+"bA" = (/obj/structure/disposaloutlet{dir = 4},/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/airless,/area/tcomsat)
"bB" = (/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
"bC" = (/obj/item/weapon/material/shard,/obj/structure/bed/chair,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
"bD" = (/obj/structure/bed/chair,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
-"bE" = (/obj/structure/cable,/obj/structure/computerframe{anchored = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
-"bF" = (/obj/structure/cable,/obj/structure/computerframe{anchored = 1},/obj/item/stack/cable_coil/cut,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
+"bE" = (/obj/structure/cable,/obj/structure/frame{anchored = 1; frame_type = "computer"; icon_state = "computer_0"},/obj/item/stack/cable_coil/cut,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
+"bF" = (/obj/structure/cable,/obj/structure/frame{anchored = 1; frame_type = "computer"; icon_state = "computer_0"},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
"bG" = (/obj/structure/table/rack,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/tank/emergency_oxygen,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
"bH" = (/obj/structure/table/rack,/obj/item/clothing/suit/space/syndicate,/obj/item/clothing/head/helmet/space/syndicate,/obj/item/clothing/mask/breath,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
"bI" = (/obj/structure/table/rack,/obj/item/weapon/storage/toolbox/syndicate,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
@@ -101,28 +101,28 @@
"bW" = (/obj/structure/table/standard,/obj/item/device/radio/off,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
"bX" = (/turf/simulated/shuttle/wall{tag = "icon-swall_t"; icon_state = "swall_t"},/area/derelict/ship)
"bY" = (/obj/structure/lattice,/obj/structure/grille,/turf/space,/area/space)
-"bZ" = (/obj/machinery/power/solar,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/space)
-"ca" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless,/area/space)
-"cb" = (/obj/machinery/power/solar,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/space)
-"cc" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/airless,/area/space)
-"cd" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/airless,/area/space)
-"ce" = (/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/airless,/area/space)
-"cf" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/airless,/area/space)
-"cg" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless,/area/space)
-"ch" = (/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/airless,/area/space)
-"ci" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/camera/network/telecom{c_tag = "Telecoms - Solar North"; dir = 1},/turf/simulated/floor/airless,/area/space)
-"cj" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/airless,/area/space)
-"ck" = (/turf/simulated/wall/r_wall,/area/space)
-"cl" = (/turf/simulated/wall/r_wall,/area/turret_protected/tcomsat)
+"bZ" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/airless,/area/tcomsat)
+"ca" = (/obj/machinery/power/solar,/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/tcomsat)
+"cb" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/airless,/area/tcomsat)
+"cc" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/airless,/area/tcomsat)
+"cd" = (/obj/machinery/power/solar,/obj/structure/cable/yellow,/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/tcomsat)
+"ce" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/airless,/area/tcomsat)
+"cf" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/camera/network/telecom{c_tag = "Telecoms - Solar West"; dir = 8},/turf/simulated/floor/airless,/area/tcomsat)
+"cg" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/tcomsat)
+"ch" = (/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/camera/network/telecom{c_tag = "Telecoms - Solar East"; dir = 4},/turf/simulated/floor/airless,/area/tcomsat)
+"ci" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/airless,/area/tcomsat)
+"cj" = (/turf/simulated/floor/airless,/area/tcomsat)
+"ck" = (/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/power/tracker,/turf/simulated/floor/airless,/area/tcomsat)
+"cl" = (/turf/simulated/wall/r_wall,/area/tcomsat)
"cm" = (/turf/simulated/wall/r_wall,/area/tcommsat/computer)
-"cn" = (/obj/structure/lattice,/turf/space,/area/turret_protected/tcomsat)
-"co" = (/turf/space,/area/turret_protected/tcomsat)
-"cp" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/camera/network/telecom{c_tag = "Telecoms West Wing North"},/turf/space,/area/turret_protected/tcomsat)
-"cq" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
-"cr" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 6; icon_state = "intact"; tag = "icon-intact-f (SOUTHEAST)"},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
-"cs" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/valve/digital/open{dir = 4; name = "Mixed Air Outlet Valve"},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
-"ct" = (/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{dir = 1; icon_state = "map"; tag = "icon-manifold-f (NORTH)"},/obj/machinery/meter,/obj/machinery/firealarm{dir = 2; layer = 3.3; pixel_x = 0; pixel_y = 26},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
-"cu" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 8},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
+"cn" = (/obj/structure/lattice,/turf/space,/area/tcomsat)
+"co" = (/turf/space,/area/tcomsat)
+"cp" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/camera/network/telecom{c_tag = "Telecoms West Wing North"},/turf/space,/area/tcomsat)
+"cq" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/turf/simulated/floor/plating,/area/tcomsat)
+"cr" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 6; icon_state = "intact"; tag = "icon-intact-f (SOUTHEAST)"},/turf/simulated/floor/plating,/area/tcomsat)
+"cs" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/valve/digital/open{dir = 4; name = "Mixed Air Outlet Valve"},/turf/simulated/floor/plating,/area/tcomsat)
+"ct" = (/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{dir = 1; icon_state = "map"; tag = "icon-manifold-f (NORTH)"},/obj/machinery/meter,/obj/machinery/firealarm{dir = 2; layer = 3.3; pixel_x = 0; pixel_y = 26},/turf/simulated/floor/plating,/area/tcomsat)
+"cu" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 8},/turf/simulated/floor/plating,/area/tcomsat)
"cv" = (/obj/item/weapon/bedsheet/green,/obj/structure/bed/padded,/turf/simulated/floor/tiled,/area/tcommsat/computer)
"cw" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/tcommsat/computer)
"cx" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/purple,/turf/simulated/floor/tiled,/area/tcommsat/computer)
@@ -130,13 +130,13 @@
"cz" = (/obj/item/weapon/bedsheet/brown,/obj/structure/bed/padded,/turf/simulated/floor/tiled,/area/tcommsat/computer)
"cA" = (/obj/item/weapon/bedsheet/red,/obj/structure/bed/padded,/turf/simulated/floor/tiled,/area/tcommsat/computer)
"cB" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/canister/air/airlock,/turf/simulated/floor/tiled/dark,/area/tcommsat/computer)
-"cC" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 4},/turf/space,/area/turret_protected/tcomsat)
-"cD" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
-"cE" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal,/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
-"cF" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
-"cG" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 5; icon_state = "intact"; tag = "icon-intact-f (NORTHWEST)"},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
-"cH" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/tank/air{dir = 8},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
-"cI" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 8},/turf/space,/area/turret_protected/tcomsat)
+"cC" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 4},/turf/space,/area/tcomsat)
+"cD" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/plating,/area/tcomsat)
+"cE" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal,/turf/simulated/floor/plating,/area/tcomsat)
+"cF" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/tcomsat)
+"cG" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 5; icon_state = "intact"; tag = "icon-intact-f (NORTHWEST)"},/turf/simulated/floor/plating,/area/tcomsat)
+"cH" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/tank/air{dir = 8},/turf/simulated/floor/plating,/area/tcomsat)
+"cI" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 8},/turf/space,/area/tcomsat)
"cJ" = (/obj/structure/table/standard,/obj/item/weapon/folder/yellow,/obj/item/weapon/folder/yellow,/obj/machinery/light{dir = 1},/obj/machinery/camera/network/telecom{c_tag = "Telecoms Main Computer Room"},/obj/machinery/firealarm{dir = 2; layer = 3.3; pixel_x = 0; pixel_y = 26},/turf/simulated/floor/tiled/dark,/area/tcommsat/computer)
"cK" = (/obj/structure/filingcabinet,/turf/simulated/floor/tiled/dark,/area/tcommsat/computer)
"cL" = (/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/turf/simulated/floor/tiled/dark,/area/tcommsat/computer)
@@ -145,13 +145,13 @@
"cO" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp,/turf/simulated/floor/tiled/dark,/area/tcommsat/computer)
"cP" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = -29; pixel_y = 0},/turf/simulated/floor/tiled,/area/tcommsat/computer)
"cQ" = (/obj/machinery/computer/telecomms/monitor{network = "tcommsat"},/obj/item/device/radio/intercom{name = "General Listening Channel"; pixel_x = 28; pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/tcommsat/computer)
-"cR" = (/obj/structure/window/reinforced{dir = 4},/turf/space,/area/turret_protected/tcomsat)
-"cS" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
-"cT" = (/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
-"cU" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
-"cV" = (/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
-"cW" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/closet,/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
-"cX" = (/obj/structure/window/reinforced{dir = 8},/turf/space,/area/turret_protected/tcomsat)
+"cR" = (/obj/structure/window/reinforced{dir = 4},/turf/space,/area/tcomsat)
+"cS" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plating,/area/tcomsat)
+"cT" = (/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/plating,/area/tcomsat)
+"cU" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plating,/area/tcomsat)
+"cV" = (/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/tcomsat)
+"cW" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/closet,/turf/simulated/floor/plating,/area/tcomsat)
+"cX" = (/obj/structure/window/reinforced{dir = 8},/turf/space,/area/tcomsat)
"cY" = (/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5; icon_state = "intact"; tag = "icon-intact-f (NORTHEAST)"},/turf/simulated/floor/tiled,/area/tcommsat/computer)
"cZ" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4; icon_state = "intact"; tag = "icon-intact-f (EAST)"},/turf/simulated/floor/tiled,/area/tcommsat/computer)
"da" = (/obj/structure/bed/chair/office/dark{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4; icon_state = "intact"; tag = "icon-intact-f (EAST)"},/turf/simulated/floor/tiled,/area/tcommsat/computer)
@@ -159,12 +159,12 @@
"dc" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10; icon_state = "intact"; tag = "icon-intact-f (SOUTHWEST)"},/turf/simulated/floor/tiled,/area/tcommsat/computer)
"dd" = (/obj/item/weapon/bedsheet/orange,/obj/machinery/light{dir = 8},/obj/structure/bed/padded,/turf/simulated/floor/tiled,/area/tcommsat/computer)
"de" = (/obj/machinery/firealarm{dir = 4; pixel_x = 26},/turf/simulated/floor/tiled,/area/tcommsat/computer)
-"df" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/turf/space,/area/turret_protected/tcomsat)
-"dg" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/turf/space,/area/turret_protected/tcomsat)
-"dh" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
-"di" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/space,/area/turret_protected/tcomsat)
-"dj" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/space,/area/turret_protected/tcomsat)
-"dk" = (/obj/structure/window/reinforced,/turf/space,/area/turret_protected/tcomsat)
+"df" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/turf/space,/area/tcomsat)
+"dg" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/turf/space,/area/tcomsat)
+"dh" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/tcomsat)
+"di" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/space,/area/tcomsat)
+"dj" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/space,/area/tcomsat)
+"dk" = (/obj/structure/window/reinforced,/turf/space,/area/tcomsat)
"dl" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/tcommsat/computer)
"dm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/tiled,/area/tcommsat/computer)
"dn" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled,/area/tcommsat/computer)
@@ -176,11 +176,11 @@
"dt" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/tiled,/area/tcommsat/computer)
"du" = (/obj/structure/bed/chair{dir = 8},/obj/structure/sign/deathsposal{pixel_x = 32},/turf/simulated/floor/tiled,/area/tcommsat/computer)
"dv" = (/obj/structure/table/standard,/obj/item/weapon/storage/fancy/cigarettes,/turf/simulated/floor/tiled,/area/tcommsat/computer)
-"dw" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/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/tiled,/area/turret_protected/tcomsat)
-"dx" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled,/area/turret_protected/tcomsat)
-"dy" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/turret_protected/tcomsat)
-"dz" = (/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/tiled,/area/turret_protected/tcomsat)
-"dA" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/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/tiled,/area/turret_protected/tcomsat)
+"dw" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/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/tiled,/area/tcomsat)
+"dx" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled,/area/tcomsat)
+"dy" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/tcomsat)
+"dz" = (/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/tiled,/area/tcomsat)
+"dA" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/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/tiled,/area/tcomsat)
"dB" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/door/airlock/hatch{name = "Telecoms Control Room"; req_access = list(61)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/tcommsat/computer)
"dC" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor/tiled,/area/tcommsat/computer)
"dD" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/tiled,/area/tcommsat/computer)
@@ -194,14 +194,14 @@
"dL" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/computer)
"dM" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/tiled,/area/tcommsat/computer)
"dN" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area/tcommsat/computer)
-"dO" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area/space)
-"dP" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless,/area/space)
-"dQ" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/airless,/area/space)
-"dR" = (/obj/structure/disposaloutlet{dir = 4},/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/airless,/area/space)
-"dS" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/turret_protected/tcomsat)
-"dT" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/space,/area/turret_protected/tcomsat)
-"dU" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/obj/machinery/light,/turf/space,/area/turret_protected/tcomsat)
-"dV" = (/obj/structure/window/reinforced{dir = 1},/turf/space,/area/turret_protected/tcomsat)
+"dO" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/airless,/area/tcomsat)
+"dP" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/camera/network/telecom{c_tag = "Telecoms - Solar South"},/turf/simulated/floor/airless,/area/tcomsat)
+"dQ" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless,/area/tcomsat)
+"dR" = (/obj/structure/frame{frame_type = "computer"; icon_state = "computer_0"},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/airless,/area/AIsattele)
+"dS" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/tcomsat)
+"dT" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/space,/area/tcomsat)
+"dU" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/obj/machinery/light,/turf/space,/area/tcomsat)
+"dV" = (/obj/structure/window/reinforced{dir = 1},/turf/space,/area/tcomsat)
"dW" = (/obj/machinery/light{dir = 8},/obj/structure/table/standard,/obj/item/device/multitool,/obj/structure/sign/electricshock{pixel_x = -32},/turf/simulated/floor/tiled/dark,/area/tcommsat/computer)
"dX" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/tcommsat/computer)
"dY" = (/obj/machinery/atmospherics/unary/freezer{dir = 2; icon_state = "freezer_1"; set_temperature = 73; use_power = 1},/turf/simulated/floor/tiled/dark,/area/tcommsat/computer)
@@ -210,19 +210,19 @@
"eb" = (/obj/machinery/airlock_sensor{frequency = 1381; id_tag = "server_access_sensor"; pixel_x = 12; pixel_y = 25},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1381; id_tag = "server_access_pump"},/obj/machinery/embedded_controller/radio/airlock/advanced_airlock_controller{frequency = 1381; id_tag = "server_access_airlock"; name = "Server Access Airlock"; pixel_x = 0; pixel_y = 25; tag_airpump = "server_access_pump"; tag_chamber_sensor = "server_access_sensor"; tag_exterior_door = "server_access_outer"; tag_exterior_sensor = "server_access_ex_sensor"; tag_interior_door = "server_access_inner"; tag_interior_sensor = "server_access_in_sensor"; tag_secure = 1},/turf/simulated/floor/plating,/area/tcommsat/chamber)
"ec" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/tcommsat/chamber)
"ed" = (/obj/machinery/door/airlock/hatch{name = "Telecoms Lounge"; req_access = list(61)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/tcommsat/computer)
-"ee" = (/obj/machinery/porta_turret/stationary,/turf/simulated/floor/airless,/area/turret_protected/tcomsat)
-"ef" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/lattice,/turf/space,/area/turret_protected/tcomsat)
+"ee" = (/obj/machinery/porta_turret/stationary,/turf/simulated/floor/airless,/area/tcomsat)
+"ef" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/lattice,/turf/space,/area/tcomsat)
"eg" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 6},/turf/simulated/floor/plating,/area/tcommsat/chamber)
"eh" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/black,/turf/simulated/floor/plating,/area/tcommsat/chamber)
"ei" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/structure/cable,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 4},/turf/simulated/floor/plating,/area/tcommsat/chamber)
"ej" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 4},/turf/simulated/floor/plating,/area/tcommsat/chamber)
"ek" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 10},/turf/simulated/floor/plating,/area/tcommsat/chamber)
"el" = (/obj/machinery/door/airlock/maintenance_hatch{frequency = 1381; icon_state = "door_locked"; id_tag = "server_access_inner"; locked = 1; name = "Telecoms Server Access"; req_access = list(61)},/turf/simulated/floor/plating,/area/tcommsat/chamber)
-"em" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/turret_protected/tcomsat)
-"en" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/turf/space,/area/turret_protected/tcomsat)
-"eo" = (/obj/machinery/power/solar,/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/space)
-"ep" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/turret_protected/tcomsat)
-"eq" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/space,/area/turret_protected/tcomsat)
+"em" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/tcomsat)
+"en" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/turf/space,/area/tcomsat)
+"eo" = (/obj/machinery/exonet_node{anchored = 1},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
+"ep" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/tcomsat)
+"eq" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/space,/area/tcomsat)
"er" = (/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"es" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"et" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/black,/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
@@ -233,43 +233,42 @@
"ey" = (/obj/machinery/airlock_sensor/airlock_interior{frequency = 1381; id_tag = "server_access_in_sensor"; name = "interior sensor"; pixel_y = 25},/obj/structure/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'."; name = "SERVER ROOM"; pixel_y = 32},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"ez" = (/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"eA" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'."; name = "SERVER ROOM"; pixel_y = 32},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
-"eB" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/airless,/area/space)
-"eC" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/turret_protected/tcomsat)
-"eD" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/space,/area/turret_protected/tcomsat)
+"eB" = (/obj/machinery/pda_multicaster/prebuilt,/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
+"eC" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/tcomsat)
+"eD" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/space,/area/tcomsat)
"eE" = (/obj/machinery/atmospherics/pipe/simple/hidden/black,/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
-"eF" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
-"eG" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
-"eH" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
-"eI" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/turret_protected/tcomsat)
-"eJ" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/airless,/area/space)
-"eK" = (/obj/machinery/power/solar,/obj/structure/cable/yellow,/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/space)
-"eL" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
-"eM" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/space,/area/turret_protected/tcomsat)
+"eF" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/tcomsat)
+"eG" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/tcomsat)
+"eH" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/tcomsat)
+"eI" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/tcomsat)
+"eJ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/table/standard,/obj/machinery/recharger,/turf/simulated/floor/plating,/area/tcommsat/powercontrol)
+"eK" = (/obj/machinery/teleport/station,/turf/simulated/floor/tiled/dark,/area/tcommsat/entrance)
+"eL" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/tcomsat)
+"eM" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/space,/area/tcomsat)
"eN" = (/obj/machinery/telecomms/server/presets/service,/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"eO" = (/obj/machinery/telecomms/server/presets/supply,/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"eP" = (/obj/machinery/telecomms/server/presets/unused,/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
-"eQ" = (/obj/structure/table/rack,/obj/item/weapon/circuitboard/telecomms/processor,/obj/item/weapon/circuitboard/telecomms/processor,/obj/item/weapon/circuitboard/telecomms/receiver,/obj/item/weapon/circuitboard/telecomms/server,/obj/item/weapon/circuitboard/telecomms/server,/obj/item/weapon/circuitboard/telecomms/bus,/obj/item/weapon/circuitboard/telecomms/bus,/obj/item/weapon/circuitboard/telecomms/broadcaster,/obj/item/weapon/circuitboard/telecomms/exonet_node,/turf/simulated/floor,/area/turret_protected/tcomsat)
+"eQ" = (/obj/structure/table/rack,/obj/item/weapon/circuitboard/telecomms/processor,/obj/item/weapon/circuitboard/telecomms/processor,/obj/item/weapon/circuitboard/telecomms/receiver,/obj/item/weapon/circuitboard/telecomms/server,/obj/item/weapon/circuitboard/telecomms/server,/obj/item/weapon/circuitboard/telecomms/bus,/obj/item/weapon/circuitboard/telecomms/bus,/obj/item/weapon/circuitboard/telecomms/broadcaster,/obj/item/weapon/circuitboard/telecomms/exonet_node,/turf/simulated/floor,/area/tcomsat)
"eR" = (/obj/machinery/telecomms/server/presets/common,/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"eS" = (/obj/machinery/telecomms/server/presets/engineering,/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
-"eT" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/space,/area/turret_protected/tcomsat)
-"eU" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor/tiled,/area/turret_protected/tcomsat)
-"eV" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/turret_protected/tcomsat)
-"eW" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/micro_laser,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/capacitor,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/turf/simulated/floor,/area/turret_protected/tcomsat)
-"eX" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/camera/network/telecom{c_tag = "Telecoms Storage"},/turf/simulated/floor,/area/turret_protected/tcomsat)
-"eY" = (/obj/machinery/exonet_node,/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
-"eZ" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/camera/network/telecom{c_tag = "Telecoms West Wing Central"; dir = 8},/turf/space,/area/turret_protected/tcomsat)
-"fa" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
-"fb" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/lattice,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/space,/area/turret_protected/tcomsat)
-"fc" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled,/area/turret_protected/tcomsat)
-"fd" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/space,/area/turret_protected/tcomsat)
-"fe" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/analyzer,/obj/item/weapon/stock_parts/subspace/analyzer,/obj/item/weapon/stock_parts/subspace/analyzer,/obj/machinery/firealarm{dir = 4; pixel_x = 26},/turf/simulated/floor,/area/turret_protected/tcomsat)
-"ff" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/treatment,/obj/item/weapon/stock_parts/subspace/treatment,/obj/item/weapon/stock_parts/subspace/treatment,/turf/simulated/floor,/area/turret_protected/tcomsat)
-"fg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/turret_protected/tcomsat)
+"eT" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/space,/area/tcomsat)
+"eU" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor/tiled,/area/tcomsat)
+"eV" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/tcomsat)
+"eW" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/micro_laser,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/capacitor,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/turf/simulated/floor,/area/tcomsat)
+"eX" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/camera/network/telecom{c_tag = "Telecoms Storage"},/turf/simulated/floor,/area/tcomsat)
+"eY" = (/obj/machinery/teleport/hub,/turf/simulated/floor/tiled/dark,/area/tcommsat/entrance)
+"eZ" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/camera/network/telecom{c_tag = "Telecoms West Wing Central"; dir = 8},/turf/space,/area/tcomsat)
+"fa" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/tcomsat)
+"fb" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/lattice,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/space,/area/tcomsat)
+"fc" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled,/area/tcomsat)
+"fd" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/space,/area/tcomsat)
+"fe" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/analyzer,/obj/item/weapon/stock_parts/subspace/analyzer,/obj/item/weapon/stock_parts/subspace/analyzer,/obj/machinery/firealarm{dir = 4; pixel_x = 26},/turf/simulated/floor,/area/tcomsat)
+"ff" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/treatment,/obj/item/weapon/stock_parts/subspace/treatment,/obj/item/weapon/stock_parts/subspace/treatment,/turf/simulated/floor,/area/tcomsat)
+"fg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/tcomsat)
"fh" = (/obj/machinery/telecomms/hub/preset,/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
-"fi" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/airless,/area/space)
-"fj" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/space)
-"fk" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/camera/network/telecom{c_tag = "Telecoms - Solar West"; dir = 8},/turf/simulated/floor/airless,/area/space)
-"fl" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 8},/obj/machinery/light{dir = 4},/turf/space,/area/turret_protected/tcomsat)
+"fi" = (/obj/machinery/teleport/station,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/airless,/area/AIsattele)
+"fj" = (/obj/machinery/teleport/hub,/turf/simulated/floor/airless,/area/AIsattele)
+"fl" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 8},/obj/machinery/light{dir = 4},/turf/space,/area/tcomsat)
"fm" = (/obj/structure/sign/nosmoking_2{pixel_x = -32; pixel_y = 0},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"fn" = (/obj/machinery/telecomms/bus/preset_two,/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"fo" = (/obj/machinery/telecomms/processor/preset_two,/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
@@ -279,27 +278,25 @@
"fs" = (/obj/machinery/telecomms/relay/preset/station,/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"ft" = (/obj/machinery/telecomms/processor/preset_four,/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"fu" = (/obj/structure/sign/nosmoking_2{pixel_x = 32; pixel_y = 0},/obj/machinery/light{dir = 4},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
-"fv" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/lattice,/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/space,/area/turret_protected/tcomsat)
-"fw" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/tiled,/area/turret_protected/tcomsat)
+"fv" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/lattice,/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/space,/area/tcomsat)
+"fw" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/tiled,/area/tcomsat)
"fx" = (/obj/machinery/telecomms/receiver/preset_right,/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
-"fy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/turret_protected/tcomsat)
-"fz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor,/area/turret_protected/tcomsat)
-"fA" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/amplifier,/obj/item/weapon/stock_parts/subspace/amplifier,/obj/item/weapon/stock_parts/subspace/amplifier,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = 29; pixel_y = 0},/obj/machinery/light/small{dir = 4},/turf/simulated/floor,/area/turret_protected/tcomsat)
-"fB" = (/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/camera/network/telecom{c_tag = "Telecoms - Solar East"; dir = 4},/turf/simulated/floor/airless,/area/space)
-"fC" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/airless,/area/space)
+"fy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/tcomsat)
+"fz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor,/area/tcomsat)
+"fA" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/amplifier,/obj/item/weapon/stock_parts/subspace/amplifier,/obj/item/weapon/stock_parts/subspace/amplifier,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = 29; pixel_y = 0},/obj/machinery/light/small{dir = 4},/turf/simulated/floor,/area/tcomsat)
"fD" = (/obj/machinery/telecomms/processor/preset_one,/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"fE" = (/obj/machinery/telecomms/bus/preset_one,/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"fF" = (/obj/machinery/telecomms/processor/preset_three,/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"fG" = (/obj/machinery/telecomms/bus/preset_three,/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
-"fH" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/space,/area/turret_protected/tcomsat)
-"fI" = (/obj/machinery/door/airlock/maintenance_hatch{name = "Telecoms Storage"; req_access = list(61)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/turret_protected/tcomsat)
-"fJ" = (/turf/simulated/floor,/area/turret_protected/tcomsat)
-"fK" = (/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor,/area/turret_protected/tcomsat)
-"fL" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
-"fM" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/ansible,/obj/item/weapon/stock_parts/subspace/ansible,/obj/item/weapon/stock_parts/subspace/ansible,/obj/machinery/alarm{dir = 8; pixel_x = 25; pixel_y = 0},/turf/simulated/floor,/area/turret_protected/tcomsat)
-"fN" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/transmitter,/obj/item/weapon/stock_parts/subspace/transmitter,/turf/simulated/floor,/area/turret_protected/tcomsat)
-"fO" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/turf/simulated/floor,/area/turret_protected/tcomsat)
-"fP" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/crystal,/obj/item/weapon/stock_parts/subspace/crystal,/obj/item/weapon/stock_parts/subspace/crystal,/turf/simulated/floor,/area/turret_protected/tcomsat)
+"fH" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/space,/area/tcomsat)
+"fI" = (/obj/machinery/door/airlock/maintenance_hatch{name = "Telecoms Storage"; req_access = list(61)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/tcomsat)
+"fJ" = (/turf/simulated/floor,/area/tcomsat)
+"fK" = (/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor,/area/tcomsat)
+"fL" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/tcomsat)
+"fM" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/ansible,/obj/item/weapon/stock_parts/subspace/ansible,/obj/item/weapon/stock_parts/subspace/ansible,/obj/machinery/alarm{dir = 8; pixel_x = 25; pixel_y = 0},/turf/simulated/floor,/area/tcomsat)
+"fN" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/transmitter,/obj/item/weapon/stock_parts/subspace/transmitter,/turf/simulated/floor,/area/tcomsat)
+"fO" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/turf/simulated/floor,/area/tcomsat)
+"fP" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/crystal,/obj/item/weapon/stock_parts/subspace/crystal,/obj/item/weapon/stock_parts/subspace/crystal,/turf/simulated/floor,/area/tcomsat)
"fQ" = (/obj/machinery/telecomms/server/presets/medical,/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"fR" = (/obj/machinery/telecomms/server/presets/science,/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"fS" = (/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 9},/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
@@ -308,43 +305,43 @@
"fV" = (/obj/machinery/telecomms/server/presets/command,/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"fW" = (/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 10},/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"fX" = (/obj/machinery/telecomms/server/presets/security,/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
-"fY" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
+"fY" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/tcomsat)
"fZ" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 140; external_pressure_bound_default = 140; icon_state = "map_vent_out"; use_power = 1; pressure_checks = 0; pressure_checks_default = 0},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"ga" = (/obj/machinery/light,/obj/machinery/camera/network/telecom{c_tag = "Telecoms Central Compartment South"; dir = 1},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"gb" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 0; external_pressure_bound_default = 0; icon_state = "map_vent_in"; initialize_directions = 1; internal_pressure_bound = 4000; internal_pressure_bound_default = 4000; use_power = 1; pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
-"gc" = (/obj/machinery/porta_turret{dir = 6},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/tiled/dark,/area/turret_protected/tcomfoyer)
-"gd" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/space,/area/turret_protected/tcomsat)
-"ge" = (/obj/structure/window/reinforced,/obj/structure/lattice,/obj/machinery/light{dir = 1},/turf/space,/area/turret_protected/tcomsat)
-"gf" = (/turf/simulated/wall/r_wall,/area/turret_protected/tcomfoyer)
-"gg" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'LETHAL TURRETS'. Enter at your own risk!"; name = "LETHAL TURRETS"; pixel_x = -32; pixel_y = 0},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/tiled/dark,/area/turret_protected/tcomfoyer)
-"gh" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/turretid/lethal{ailock = 1; check_synth = 1; control_area = "\improper Telecoms Satellite"; desc = "A firewall prevents AIs from interacting with this device."; name = "Telecoms lethal turret control"; pixel_y = 29; req_access = list(61)},/obj/machinery/camera/network/telecom{c_tag = "Telecoms Foyer"},/turf/simulated/floor/tiled/dark,/area/turret_protected/tcomfoyer)
-"gi" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/tiled/dark,/area/turret_protected/tcomfoyer)
-"gj" = (/obj/machinery/porta_turret{dir = 10},/turf/simulated/floor/tiled/dark,/area/turret_protected/tcomfoyer)
-"gk" = (/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer)
-"gl" = (/turf/simulated/floor/tiled/dark,/area/turret_protected/tcomfoyer)
-"gm" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'LETHAL TURRETS'. Enter at your own risk!"; name = "LETHAL TURRETS"; pixel_x = 32; pixel_y = 0},/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/turf/simulated/floor/tiled/dark,/area/turret_protected/tcomfoyer)
-"gn" = (/obj/structure/window/reinforced,/obj/machinery/light{dir = 1},/turf/space,/area/turret_protected/tcomsat)
-"go" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/space,/area/turret_protected/tcomsat)
-"gp" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled,/area/turret_protected/tcomsat)
-"gq" = (/obj/machinery/door/airlock/hatch{name = "Telecoms West Wing"; req_access = list(61)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer)
-"gr" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer)
-"gs" = (/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/tiled,/area/turret_protected/tcomfoyer)
-"gt" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer)
-"gu" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor/tiled,/area/turret_protected/tcomsat)
-"gv" = (/obj/machinery/camera/network/telecom{c_tag = "Telecoms East Wing South"; dir = 8},/turf/space,/area/turret_protected/tcomsat)
-"gw" = (/obj/machinery/camera/network/telecom{c_tag = "Telecoms West Wing South"; dir = 4},/turf/space,/area/turret_protected/tcomsat)
-"gx" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/turf/space,/area/turret_protected/tcomsat)
-"gy" = (/obj/machinery/door/airlock/hatch{name = "Telecoms East Wing"; req_access = list(61)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer)
-"gz" = (/obj/machinery/light/small,/turf/simulated/floor/tiled/dark,/area/turret_protected/tcomfoyer)
-"gA" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer)
+"gc" = (/obj/machinery/porta_turret{dir = 6},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/tiled/dark,/area/tcomfoyer)
+"gd" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/space,/area/tcomsat)
+"ge" = (/obj/structure/window/reinforced,/obj/structure/lattice,/obj/machinery/light{dir = 1},/turf/space,/area/tcomsat)
+"gf" = (/turf/simulated/wall/r_wall,/area/tcomfoyer)
+"gg" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'LETHAL TURRETS'. Enter at your own risk!"; name = "LETHAL TURRETS"; pixel_x = -32; pixel_y = 0},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/tiled/dark,/area/tcomfoyer)
+"gh" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/turretid/lethal{ailock = 1; check_synth = 1; control_area = "\improper Telecoms Satellite"; desc = "A firewall prevents AIs from interacting with this device."; name = "Telecoms lethal turret control"; pixel_y = 29; req_access = list(61)},/obj/machinery/camera/network/telecom{c_tag = "Telecoms Foyer"},/turf/simulated/floor/tiled/dark,/area/tcomfoyer)
+"gi" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/tiled/dark,/area/tcomfoyer)
+"gj" = (/obj/machinery/porta_turret{dir = 10},/turf/simulated/floor/tiled/dark,/area/tcomfoyer)
+"gk" = (/turf/simulated/floor/tiled,/area/tcomfoyer)
+"gl" = (/turf/simulated/floor/tiled/dark,/area/tcomfoyer)
+"gm" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'LETHAL TURRETS'. Enter at your own risk!"; name = "LETHAL TURRETS"; pixel_x = 32; pixel_y = 0},/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/turf/simulated/floor/tiled/dark,/area/tcomfoyer)
+"gn" = (/obj/structure/window/reinforced,/obj/machinery/light{dir = 1},/turf/space,/area/tcomsat)
+"go" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/space,/area/tcomsat)
+"gp" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled,/area/tcomsat)
+"gq" = (/obj/machinery/door/airlock/hatch{name = "Telecoms West Wing"; req_access = list(61)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/tcomfoyer)
+"gr" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/tcomfoyer)
+"gs" = (/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/tiled,/area/tcomfoyer)
+"gt" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled,/area/tcomfoyer)
+"gu" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor/tiled,/area/tcomsat)
+"gv" = (/obj/machinery/camera/network/telecom{c_tag = "Telecoms East Wing South"; dir = 8},/turf/space,/area/tcomsat)
+"gw" = (/obj/machinery/camera/network/telecom{c_tag = "Telecoms West Wing South"; dir = 4},/turf/space,/area/tcomsat)
+"gx" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/turf/space,/area/tcomsat)
+"gy" = (/obj/machinery/door/airlock/hatch{name = "Telecoms East Wing"; req_access = list(61)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/tcomfoyer)
+"gz" = (/obj/machinery/light/small,/turf/simulated/floor/tiled/dark,/area/tcomfoyer)
+"gA" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/tcomfoyer)
"gB" = (/turf/simulated/wall/r_wall,/area/tcommsat/entrance)
-"gC" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'LETHAL TURRETS'. Enter at your own risk!"; name = "LETHAL TURRETS"; pixel_x = -32; pixel_y = 0},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/tiled/dark,/area/turret_protected/tcomfoyer)
-"gD" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'LETHAL TURRETS'. Enter at your own risk!"; name = "LETHAL TURRETS"; pixel_x = 32; pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/turret_protected/tcomfoyer)
+"gC" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'LETHAL TURRETS'. Enter at your own risk!"; name = "LETHAL TURRETS"; pixel_x = -32; pixel_y = 0},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/tiled/dark,/area/tcomfoyer)
+"gD" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'LETHAL TURRETS'. Enter at your own risk!"; name = "LETHAL TURRETS"; pixel_x = 32; pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/tcomfoyer)
"gE" = (/turf/simulated/floor/tiled,/area/tcommsat/entrance)
"gF" = (/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_y = 20},/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/tiled,/area/tcommsat/entrance)
"gG" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/tcommsat/entrance)
"gH" = (/obj/machinery/turretid/stun{ailock = 1; check_synth = 1; control_area = "\improper Telecoms Foyer"; desc = "A firewall prevents AIs from interacting with this device."; name = "Telecoms Foyer turret control"; pixel_y = 29; req_access = list(61)},/turf/simulated/floor/tiled,/area/tcommsat/entrance)
-"gI" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/hatch{name = "Telecoms Satellite"; req_access = list(61)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer)
+"gI" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/hatch{name = "Telecoms Satellite"; req_access = list(61)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/tcomfoyer)
"gJ" = (/turf/simulated/floor/tiled/dark,/area/tcommsat/entrance)
"gK" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/tcommsat/entrance)
"gL" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/tcommsat/entrance)
@@ -384,26 +381,18 @@
"ht" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/simulated/floor/plating,/area/tcommsat/powercontrol)
"hu" = (/obj/machinery/bluespace_beacon,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled,/area/tcommsat/entrance)
"hv" = (/obj/machinery/light{dir = 8},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/dark,/area/tcommsat/entrance)
-"hw" = (/turf/simulated/floor/airless,/area/space)
"hx" = (/obj/machinery/power/terminal{dir = 4},/obj/structure/cable/yellow,/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/tcommsat/powercontrol)
"hy" = (/obj/machinery/power/smes/buildable{charge = 2.5e+006; input_attempt = 1; input_level = 250000; inputting = 1; output_level = 250000; RCon_tag = "Telecommunications Satellite"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/tcommsat/powercontrol)
-"hz" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/table/standard,/obj/machinery/recharger,/turf/simulated/floor/plating,/area/tcommsat/powercontrol)
"hA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/dark,/area/tcommsat/entrance)
"hB" = (/obj/structure/sign/electricshock,/turf/simulated/wall/r_wall,/area/tcommsat/powercontrol)
"hC" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/turf/simulated/floor/tiled/dark,/area/tcommsat/entrance)
"hD" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/tiled/dark,/area/tcommsat/entrance)
"hE" = (/obj/item/weapon/cell,/turf/simulated/floor/tiled/dark,/area/tcommsat/entrance)
-"hF" = (/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/power/tracker,/turf/simulated/floor/airless,/area/space)
-"hG" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/airless,/area/space)
"hH" = (/obj/structure/closet/malf/suits,/turf/simulated/floor/tiled/dark,/area/tcommsat/entrance)
"hI" = (/obj/machinery/door/airlock/hatch{name = "Power Control"; req_access = list(61)},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/tcommsat/powercontrol)
"hJ" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21; pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/tcommsat/entrance)
-"hK" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/camera/network/telecom{c_tag = "Telecoms - Solar South"},/turf/simulated/floor/airless,/area/space)
-"hL" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless,/area/space)
"hM" = (/turf/space,/area/syndicate_station/commssat)
"hN" = (/turf/simulated/wall/r_wall,/area/AIsattele)
-"hO" = (/obj/structure/computerframe,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/airless,/area/AIsattele)
-"hP" = (/obj/machinery/teleport/station,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/airless,/area/AIsattele)
"hQ" = (/turf/simulated/floor/airless,/area/AIsattele)
"hR" = (/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/floor/airless,/area/AIsattele)
"hS" = (/obj/structure/cable,/turf/simulated/floor/airless,/area/AIsattele)
@@ -422,10 +411,7 @@
"if" = (/obj/structure/closet/crate,/obj/item/clothing/glasses/night,/turf/simulated/floor/tiled/dark,/area/tcommsat/entrance)
"ig" = (/obj/structure/closet/crate,/obj/item/device/aicard,/obj/item/device/multitool,/obj/machinery/camera/network/telecom{c_tag = "Telecoms Entrance South"; dir = 1},/turf/simulated/floor/tiled/dark,/area/tcommsat/entrance)
"ih" = (/obj/machinery/light{dir = 4},/obj/structure/closet/emcloset,/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/tiled/dark,/area/tcommsat/entrance)
-"ii" = (/obj/machinery/teleport/station,/turf/simulated/floor/tiled/dark,/area/tcommsat/entrance)
"ij" = (/obj/machinery/computer/teleporter,/turf/simulated/floor/tiled/dark,/area/tcommsat/entrance)
-"ik" = (/obj/machinery/teleport/hub,/turf/simulated/floor/tiled/dark,/area/tcommsat/entrance)
-"il" = (/obj/machinery/teleport/hub,/turf/simulated/floor/airless,/area/AIsattele)
"im" = (/obj/item/weapon/circuitboard/teleporter,/turf/space,/area/space)
(1,1,1) = {"
@@ -454,21 +440,21 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacadaeaaaaaaaaaaaaaaabaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacafagagahagaiajadaeaaaaaaaaabajakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacafagagaQahaiajadaeaaaaaaaaabajakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabalamagagagagagaganaiaoaeaaaaabapaqaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaoajasagagagagatagagagauaoaeabapavaqaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaoafawaiacadaxayazacacaAajajajalavavaqaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBafagaCagaDaBaEagaFagagagagagagaGavaHacaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBagagagagaDaBagagagagagagagagagauacaoaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJagagagagaKaBagagaLaMacacasagaNaBaOaiajadaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPagagagagagaBagagaBagaQaRaBagagaBaSagagaiaoaeaaabadacacacacacacacadaeaaaaaTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPaUaDagagagaVagagaBaWaXaNaBagagaYagagagagaiaoacaoafagagagaZagagagaialaTaaaababbbcbcbcbcbcbcbcbbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPbebfagagagaMagagaBagagagaBagagbgagagagagagbhagbhagagagagagagagagagbhaTaaaTbibjbkbkbkbkbkbkbkblbmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPaDaDagagagaVagagaBbnboagaBagagaYagagagagaLaoacaoasagagagagagagbpaLalaTaTaTbqbkbkbkbkbkbkbkbkbkbqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPagagagagagaBagagaiacacaMafagagaBagagagaLaobraabsajacacacacacacacajbraaaaaTbibtbkbkbkbkbubkbkbvbmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwagagagagbxauasagagagagagagagagaBagaLadajbraaaaaaaaaaaaaaaaaaaaaaaaaaaaaTaabybzbcbcbcbcbcbcbcbzbAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPagagagagagaBagagaBagbaaRaBagagaBaSagagaiaoaeaaabadacacacacacacacadaeaaaaaTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPaUaDagagagaVagagaBaWaXaNaBagagaYagagagagaiaoacaoafagagagaZagagagaialaTaaaaabadacacacacacacacadaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPbebfagagagaMagagaBagagagaBagagbgagagagagagbhagbhagagagagagagagagagbhaTaaaTauafagagagagagagagaialaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPaDaDagagagaVagagaBbnbbagaBagagaYagagagagaLaoacaoasagagagagagagbpaLalaTaTaTbhagagagagagagagagagbhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPagagagagagaBagagaiacacaMafagagaBagagagaLaobraabsajacacacacacacacajbraaaaaTauasagagagagbcagagaLalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwagagagagbxauasagagagagagagagagaBagaLadajbraaaaaaaaaaaaaaaaaaaaaaaaaaaaaTaabsajacacacacacacacajbraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBbBbCbDagaLaoajacacadasagagagagauacaobraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBagbEbFaLaoafbGbHbIaialbJbKaFbLaGavbMadakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBagbFbEaLaoafbGbHbIaialbJbKaFbLaGavbMadakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsacadacaoafagagagagagaBagagaLadalavavaqaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabObPbQagagagagagagbRbSaLaobrbsbTavaqaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsacalbUagagagagagauadaobraaaabsbTaqaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -527,67 +513,67 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYbYbYbYbYbYbYbYbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTaaaaaaaaaaaTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabZcacbaaaaaabZcacbaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaTbZcacbaTaTaTbZcacbaTbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabZcacbaaaTaabZcacbaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabZcacbaaaTaabZcacbaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabZcacbaaaTaabZcacbaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabZcacbaaaTaabZcacbaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabZcacbaaaTaabZcacbaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabZcacbaaaTaabZcacbaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaTbZcacbaTaTaTbZcacbaTbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabZcacbaaaTaabZcacbaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYbYbYbYbYbYbYbYbYaaaaaaaacccdcdcecdcdcfaaaaaaaabYbYbYbYbYbYbYbYbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYbYaaaaaaaaaaaaaTaaaaaaaaaaaTaaaacgaaaaaTaaaaaaaaaaaTaaaaaaaaaaaabYbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYbYaaaachcdcdcdcdcdcdcdcdcdcdcdcdcdcicdcdcdcdcdcdcdcdcdcdcdcdcdcjaaaabYbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaaaachcfckckckckckckckckckckckckckckckckckckckckckckckckckckckcccjaaaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaachcfckckclclclclclclclclclckckckckckckckckckcmcmcmcmcmcmcmcmckcccjaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaacgckckclcncocpcqcrcsctcuclcmcmcmcmcmcmcmcmcvcNcxcwczcycAcNcmckckcgaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaacgckclcncncncCcDcEcFcGcHcIcmcBcKcJcMcLcOcmcPcNcNcNcNcNcNcNcmckckcgaTbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaTcgckclcocncocRcScTcUcVcWcXcmcYcZdadbdccQcmddcNcNcNcNcNcNdecmckckcgaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaacgckclcocncocodfdgdhdidjdkdldmdncNcNdodpcmdrdqdqdqdtdsdvducmckckcgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacgckclcocncocRdxdwdzdAdAdAdBdCdDdEdDdFdGdGdGcmdIdHdKdJdMdLdNdOdOdPdQdRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYbYbYbYbYbYbYbYbYbYaaaacgckclcocncocRdSdTdUdVdVdVcmdWdYdXcNdZeaebeccmcmcmedcmcmcmcmckckcgaaaaaabYbYbYbYbYbYbYbYbYbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTaaaaaaaaaaaaaTaaaaaacgckclcneecnefdScIdGdGdGdGdGegeheiejekdGdGeldGdGefemencneecnclckcgaaaaaaaaaTaaaaaaaaaaaaaTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaaeoeoeoeoeoeoeoeoeoeoaaaacgckclcocncocRepeqdGererereseteueverewexeyezeAdGefemcXcocncoclckcccjaaaaeoeoeoeoeoeoeoeoeoeoaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaTeBeBeBeBeBeBeBeBeBeBcjaTcgckclcocncocReCeDdGerezezezeEezezezeEezezezerdGefemcXeGeFeHclckckcgaTcheJeJeJeJeJeJeJeJeJeJaTbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaaeKeKeKeKeKeKeKeKeKeKcgaacgckclcocncocReIeMdGereOeNePeEezerezeEezeReSerdGeTeUcXeLeWeXeQclckcgaacgeKeKeKeKeKeKeKeKeKeKaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaaaaaTaaaaaaaaaaaaaTaacgaacgckclcocncocReVeZdGerezezezeEezeYezeEezezezerdGfbfcfdfafffgfeclckcgaacgaaaTaaaaaaaaaaaaaTaaaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaaaaaTaTaTaTaTaTaTaTaTfifjfkckclcncncnefdSfldGfmfofnfpewfqfhfxewfsfrftfudGfvfwdyfIfyfzfAclckfBfjfCaTaTaTaTaTaTaTaTaTaaaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaaaaaTaaaaaaaaaaaaaTaacgaacgckclcocncocRdScXdGerfEfDezeEezerezeEezfFfGerdGcRemfHfLfJfKfMclckcgaacgaaaTaaaaaaaaaaaaaTaaaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaaeoeoeoeoeoeoeoeoeoeocgaacgckclcocncocReVcXdGerezezezeEezerezeEezezezerdGcRemcXeLfNfOfPclckcgaacgeoeoeoeoeoeoeoeoeoeoaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaTeBeBeBeBeBeBeBeBeBeBcfaTcgckclcocncocRdScXdGerfRfQfTfSezezezfUfWfVfXerdGcRemcXfYeFeHclckckcgaTcceJeJeJeJeJeJeJeJeJeJaTbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaaeKeKeKeKeKeKeKeKeKeKaaaacgckclcocncocRdScXdGerererfZerergaerergberererdGcRemcXcocncoclckchcfaaaaeKeKeKeKeKeKeKeKeKeKaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTaaaaaaaaaaaaaTaaaaaacgckclcneecnefeVcIdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGefemcIcneecnclckcgaaaaaaaaaTaaaaaaaaaaaaaTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYbYbYbYbYbYbYbYbYbYaaaacgckclcocncocReVgdgedkdkgfgggcgighglgjgmgfdkdkgngoemcXcocncoclckcgaaaaaabYbYbYbYbYbYbYbYbYbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacgckclcocncocRgpdwdwdwdwgqgsgsgsgtgrgrgrgydydydydygucXcocngvclckcgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaacgckclgwcncocodVdVgxdVdVgfgCgzgkgAgkgzgDgfdVdVdVdVdVcococncoclckcgaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaTcgckclcocncococococncogBgfgfgfgfgIgfgfgfgfgBcococococococncoclckcgaTbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaacgckclcncncncncncncncngKgJgJgBgFgGgHgBgJgJgMcncncncncncncncnclckcgaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaacgckckclcncocococococlgBgJgQgPgEgGgEgRgTgJgBclcocococococnclckckcgaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaacccjckckclclclclclclclgBgBgBgBgLgUgLgBgBgBgBclclclclclclclckckchcfaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaaaacccjckgNgOgNgNgNgNgNgNgNgBgBgJgGgXgBgBgBckckckckckckckckckchcfaaaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYbYaaaacccjgNhcgYgShdhggVgWgNgBgBhlgGgJgBgBgBchcdcdcdcdcdcdcdcdcfaaaabYbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYbYaaaacggNhthngNgZhahahbgNgBhvhAhehDhCgBgBcgaaaaaaaaaaaaaaaTaaaabYbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYbYaacggNhhgNgNhihjhjhkgNgJhEgEhmgEgJhHgBcgaabYbYbYbYbYbYbYbYbYbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaacchohphqgNhrhjhjhshIhDhfhfhugEgEhJgBcgaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaThwhwcghwgNhxhyhziehBifgJgEgEgEgJhHgBcgaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaahwhwcghwgNgNgNgNgNgNgBiggJgJgJihgBgBcgaTbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahFcdhGcdcdcdcdcdcdcjgBgBijiiikgBgBchcfaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTaaaaaaaTaaaacccjgBgBgBgBgBchcfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYbYbYbYbYbYbYaaaacccdcdhKcdcdcfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTaaaacgaaaaaTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaachcdcdhGcdcdcjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabZhLcbaaaTaabZhLcbaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaTbZhLcbaTaTaTbZhLcbaTbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabZhLcbaaaTaabZhLcbaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabZhLcbaaaTaabZhLcbaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabZhLcbaaaTaabZhLcbaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabZhLcbaaaTaabZhLcbaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabZhLcbaaaTaabZhLcbaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabZhLcbaaaTaabZhLcbaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaTbZhLcbaTaTaTbZhLcbaTbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabZhLcbaaaaaabZhLcbaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabdbjbiaaaaaabdbjbiaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaTbdbjbiaTaTaTbdbjbiaTbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabdbjbiaaaTaabdbjbiaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabdbjbiaaaTaabdbjbiaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabdbjbiaaaTaabdbjbiaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabdbjbiaaaTaabdbjbiaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabdbjbiaaaTaabdbjbiaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabdbjbiaaaTaabdbjbiaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaTbdbjbiaTaTaTbdbjbiaTbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabdbjbiaaaTaabdbjbiaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYbYbYbYbYbYbYbYbYaaaaaaaablbkbkbmbkbkboaaaaaaaabYbYbYbYbYbYbYbYbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYbYaaaaaaaaaaaaaTaaaaaaaaaaaTaaaabqaaaaaTaaaaaaaaaaaTaaaaaaaaaaaabYbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYbYaaaabtbkbkbkbkbkbkbkbkbkbkbkbkbkbubkbkbkbkbkbkbkbkbkbkbkbkbkbvaaaabYbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaaaabtboclclclclclclclclclclclclclclclclclclclclclclclclclclclblbvaaaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabtboclclclclclclclclclclclclclclclclclclclclcmcmcmcmcmcmcmcmclblbvaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabqclclclcncocpcqcrcsctcuclcmcmcmcmcmcmcmcmcvcNcxcwczcycAcNcmclclbqaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabqclclcncncncCcDcEcFcGcHcIcmcBcKcJcMcLcOcmcPcNcNcNcNcNcNcNcmclclbqaTbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaTbqclclcocncocRcScTcUcVcWcXcmcYcZdadbdccQcmddcNcNcNcNcNcNdecmclclbqaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabqclclcocncocodfdgdhdidjdkdldmdncNcNdodpcmdrdqdqdqdtdsdvducmclclbqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqclclcocncocRdxdwdzdAdAdAdBdCdDdEdDdFdGdGdGcmdIdHdKdJdMdLdNbybybzbZbAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYbYbYbYbYbYbYbYbYbYaaaabqclclcocncocRdSdTdUdVdVdVcmdWdYdXcNdZeaebeccmcmcmedcmcmcmcmclclbqaaaaaabYbYbYbYbYbYbYbYbYbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTaaaaaaaaaaaaaTaaaaaabqclclcneecnefdScIdGdGdGdGdGegeheiejekdGdGeldGdGefemencneecnclclbqaaaaaaaaaTaaaaaaaaaaaaaTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaacacacacacacacacacacaaaaabqclclcocncocRepeqdGererereseteueverewexeyezeAdGefemcXcocncoclclblbvaaaacacacacacacacacacacaaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaTcbcbcbcbcbcbcbcbcbcbbvaTbqclclcocncocReCeDdGerezezezeEezezezeEezezezerdGefemcXeGeFeHclclclbqaTbtccccccccccccccccccccaTbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaacdcdcdcdcdcdcdcdcdcdbqaabqclclcocncocReIeMdGereOeNePeEezerezeEezeReSerdGeTeUcXeLeWeXeQclclbqaabqcdcdcdcdcdcdcdcdcdcdaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaaaaaTaaaaaaaaaaaaaTaabqaabqclclcocncocReVeZdGerezezezeEezeoezeEezezezerdGfbfcfdfafffgfeclclbqaabqaaaTaaaaaaaaaaaaaTaaaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaaaaaTaTaTaTaTaTaTaTaTcecgcfclclcncncnefdSfldGfmfofnfpewfqfhfxewfsfrftfudGfvfwdyfIfyfzfAclclchcgciaTaTaTaTaTaTaTaTaTaaaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaaaaaTaaaaaaaaaaaaaTaabqaabqclclcocncocRdScXdGerfEfDezeEezerezeEezfFfGerdGcRemfHfLfJfKfMclclbqaabqaaaTaaaaaaaaaaaaaTaaaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaacacacacacacacacacacabqaabqclclcocncocReVcXdGerezezezeEezerezeEezezezerdGcRemcXeLfNfOfPclclbqaabqcacacacacacacacacacaaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaTcbcbcbcbcbcbcbcbcbcbboaTbqclclcocncocRdScXdGerfRfQfTfSezeBezfUfWfVfXerdGcRemcXfYeFeHclclclbqaTblccccccccccccccccccccaTbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaacdcdcdcdcdcdcdcdcdcdaaaabqclclcocncocRdScXdGerererfZerergaerergberererdGcRemcXcocncoclclbtboaaaacdcdcdcdcdcdcdcdcdcdaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTaaaaaaaaaaaaaTaaaaaabqclclcneecnefeVcIdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGefemcIcneecnclclbqaaaaaaaaaTaaaaaaaaaaaaaTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYbYbYbYbYbYbYbYbYbYaaaabqclclcocncocReVgdgedkdkgfgggcgighglgjgmgfdkdkgngoemcXcocncoclclbqaaaaaabYbYbYbYbYbYbYbYbYbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqclclcocncocRgpdwdwdwdwgqgsgsgsgtgrgrgrgydydydydygucXcocngvclclbqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabqclclgwcncocodVdVgxdVdVgfgCgzgkgAgkgzgDgfdVdVdVdVdVcococncoclclbqaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaTbqclclcocncococococncogBgfgfgfgfgIgfgfgfgfgBcococococococncoclclbqaTbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabqclclcncncncncncncncngKgJgJgBgFgGgHgBgJgJgMcncncncncncncncnclclbqaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabqclclclcncocococococlgBgJgQgPgEgGgEgRgTgJgBclcocococococnclclclbqaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaablbvclclclclclclclclclgBgBgBgBgLgUgLgBgBgBgBclclclclclclclclclbtboaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaaaablbvclgNgOgNgNgNgNgNgNgNgBgBgJgGgXgBgBgBclclclclclclclclclbtboaaaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYbYaaaablbvgNhcgYgShdhggVgWgNgBgBhlgGgJgBgBgBbtbkbkbkbkbkbkbkbkboaaaabYbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYbYaaaabqgNhthngNgZhahahbgNgBhvhAhehDhCgBgBbqaaaaaaaaaaaaaaaTaaaabYbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYbYaabqgNhhgNgNhihjhjhkgNgJhEgEhmgEgJhHgBbqaabYbYbYbYbYbYbYbYbYbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaablhohphqgNhrhjhjhshIhDhfhfhugEgEhJgBbqaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaTcjcjbqcjgNhxhyeJiehBifgJgEgEgEgJhHgBbqaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaacjcjbqcjgNgNgNgNgNgNgBiggJgJgJihgBgBbqaTbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaackbkdObkbkbkbkbkbkbvgBgBijeKeYgBgBbtboaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTaaaaaaaTaaaablbvgBgBgBgBgBbtboaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYbYbYbYbYbYbYaaaablbkbkdPbkbkboaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTaaaabqaaaaaTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtbkbkdObkbkbvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabddQbiaaaTaabddQbiaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaTbddQbiaTaTaTbddQbiaTbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabddQbiaaaTaabddQbiaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabddQbiaaaTaabddQbiaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabddQbiaaaTaabddQbiaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabddQbiaaaTaabddQbiaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabddQbiaaaTaabddQbiaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabddQbiaaaTaabddQbiaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaTbddQbiaTaTaTbddQbiaTbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabddQbiaaaaaabddQbiaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTaaaaaaaaaaaTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYbYbYbYbYbYbYbYbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -614,7 +600,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahMhMhMhMhMhMhMhMhMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahMhMhMhMhMhMhMhMhMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahMhMhMhMhMhMhMhMhMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahNhNhNhNhNaTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahMhMhMhMhMhMhMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTaThNhNhOhPilhNhNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahMhMhMhMhMhMhMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTaThNhNdRfifjhNhNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahMhMhMhMhMhMhMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTaTaThNhNhRhQhShQhThNhNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahMhMhMhMhMhMhMhMhMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUhVhQhWhXhQhQhYhNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahMhMhMhMhMhMhMhMhMhMhMhMhMhMhMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahQhQhQhZhZhZhQhQhNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/maps/polaris-4.dmm b/maps/polaris-4.dmm
index 96b900afc0..1eca616230 100644
--- a/maps/polaris-4.dmm
+++ b/maps/polaris-4.dmm
@@ -8,7 +8,7 @@
"ah" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/explored)
"ai" = (/obj/item/weapon/circuitboard/teleporter,/turf/simulated/floor/airless,/area/mine/explored)
"aj" = (/obj/structure/girder,/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/explored)
-"ak" = (/obj/structure/computerframe,/turf/simulated/floor/airless,/area/mine/explored)
+"ak" = (/obj/structure/frame{frame_type = "computer"; icon_state = "computer_0"},/turf/simulated/floor/airless,/area/mine/explored)
"al" = (/obj/machinery/teleport/station,/turf/simulated/floor/airless,/area/mine/explored)
"am" = (/obj/machinery/teleport/hub,/turf/simulated/floor/airless,/area/mine/explored)
"an" = (/turf/simulated/floor/tiled/white/airless,/area/mine/explored)
@@ -19,9 +19,9 @@
"as" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/mine/explored)
"at" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/mine/explored)
"au" = (/obj/machinery/light,/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/mine/explored)
-"av" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "eoutpost_main_airlock"; name = "exterior access button"; pixel_x = 25; pixel_y = -25; req_access = list(10)},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/outpost/engineering/hallway)
+"av" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "eoutpost_main_airlock"; name = "exterior access button"; pixel_x = 25; pixel_y = -25; req_access = list(10)},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/mine/explored)
"aw" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/mine/explored)
-"ax" = (/turf/simulated/wall/r_wall,/area/mine/unexplored)
+"ax" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "eoutpost_solar_airlock"; name = "exterior access button"; pixel_x = 25; pixel_y = 25; req_access = list(10)},/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/mine/explored)
"ay" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/outpost/engineering/hallway)
"az" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "eoutpost_main_outer"; locked = 1; name = "Engineering Outpost"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway)
"aA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/outpost/engineering/hallway)
@@ -29,7 +29,7 @@
"aC" = (/turf/simulated/wall/r_wall,/area/outpost/engineering/storage)
"aD" = (/obj/machinery/cell_charger,/obj/structure/table/steel,/obj/structure/cable,/obj/item/frame/apc,/obj/item/weapon/module/power_control,/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/mine/explored)
"aE" = (/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/structure/table/steel,/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/mine/explored)
-"aF" = (/turf/simulated/floor/tiled/white/airless,/area/outpost/engineering/hallway)
+"aF" = (/obj/machinery/autolathe,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/tiled,/area/outpost/engineering/storage)
"aG" = (/turf/simulated/wall/r_wall,/area/outpost/engineering/hallway)
"aH" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 2; frequency = 1379; id_tag = "eoutpost_main_pump"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "eoutpost_main_sensor"; pixel_x = -25; pixel_y = 0},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway)
"aI" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway)
@@ -61,7 +61,7 @@
"bi" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/outpost/engineering/hallway)
"bj" = (/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/turf/simulated/floor/tiled,/area/outpost/engineering/storage)
"bk" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/outpost/engineering/storage)
-"bl" = (/obj/machinery/autolathe,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/tiled,/area/outpost/engineering/storage)
+"bl" = (/obj/machinery/recharge_station,/turf/simulated/floor,/area/outpost/engineering/atmospherics)
"bm" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{tag = "icon-intact (SOUTHEAST)"; icon_state = "intact"; dir = 6},/turf/simulated/floor,/area/outpost/engineering/atmospherics)
"bn" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{dir = 1},/turf/simulated/floor,/area/outpost/engineering/atmospherics)
"bo" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/machinery/atmospherics/binary/pump/on{dir = 4},/turf/simulated/floor,/area/outpost/engineering/atmospherics)
@@ -88,7 +88,7 @@
"bJ" = (/obj/structure/table/rack,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/item/stack/cable_coil/yellow,/obj/item/stack/cable_coil,/obj/item/weapon/module/power_control,/obj/item/weapon/module/power_control,/obj/item/clothing/gloves/yellow,/turf/simulated/floor/tiled,/area/outpost/engineering/storage)
"bK" = (/obj/structure/table/rack,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/item/stack/cable_coil/yellow,/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor/tiled,/area/outpost/engineering/storage)
"bL" = (/obj/structure/dispenser/oxygen,/turf/simulated/floor/tiled,/area/outpost/engineering/storage)
-"bM" = (/obj/machinery/recharge_station,/turf/simulated/floor,/area/outpost/engineering/atmospherics)
+"bM" = (/obj/structure/table/standard,/obj/machinery/microwave,/turf/simulated/floor/tiled,/area/outpost/engineering/kitchen)
"bN" = (/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -28},/obj/machinery/atmospherics/pipe/simple/visible/cyan{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/simulated/floor,/area/outpost/engineering/atmospherics)
"bO" = (/obj/machinery/atmospherics/binary/pump/on{dir = 8},/turf/simulated/floor,/area/outpost/engineering/atmospherics)
"bP" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{tag = "icon-intact (SOUTHEAST)"; icon_state = "intact"; dir = 6},/obj/machinery/meter,/turf/simulated/floor,/area/outpost/engineering/atmospherics)
@@ -244,12 +244,12 @@
"eJ" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "eoutpost_solar_inner"; locked = 1; name = "Solar Access"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/cyan,/turf/simulated/floor,/area/outpost/engineering/solars)
"eK" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/outpost/engineering/solars)
"eL" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/outpost/engineering/solars)
-"eM" = (/obj/structure/table/standard,/obj/machinery/microwave,/turf/simulated/floor/tiled,/area/outpost/engineering/kitchen)
+"eM" = (/obj/machinery/sleeper{dir = 8},/turf/simulated/floor/tiled,/area/outpost/engineering/rest)
"eN" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets,/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -28},/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer,/turf/simulated/floor/tiled,/area/outpost/engineering/kitchen)
"eO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/outpost/engineering/hallway)
"eP" = (/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,/turf/simulated/floor/plating,/area/outpost/engineering/hallway)
"eQ" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "edock_inner"; locked = 1; name = "Engineering Dock Airlock"},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway)
-"eR" = (/turf/simulated/floor/tiled,/area/space)
+"eR" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/mine/explored)
"eS" = (/obj/machinery/computer/crew,/turf/simulated/floor/tiled,/area/outpost/engineering/rest)
"eT" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/outpost/engineering/solars)
"eU" = (/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{dir = 8; icon_state = "map"; tag = "icon-manifold-f (WEST)"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/outpost/engineering/solars)
@@ -261,7 +261,6 @@
"fa" = (/obj/structure/closet/emcloset,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway)
"fb" = (/obj/machinery/atmospherics/pipe/manifold/hidden,/turf/simulated/floor/tiled,/area/outpost/engineering/hallway)
"fc" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10; icon_state = "intact"; tag = "icon-intact-f (SOUTHWEST)"},/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "eoutpost_solar_sensor"; pixel_x = 25; pixel_y = 0},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway)
-"fd" = (/obj/machinery/sleeper{dir = 8},/turf/simulated/floor/tiled,/area/outpost/engineering/rest)
"fe" = (/obj/machinery/sleep_console,/turf/simulated/floor/tiled,/area/outpost/engineering/rest)
"ff" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/outpost/engineering/rest)
"fg" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 5; icon_state = "intact"; tag = "icon-intact-f (NORTHWEST)"},/turf/simulated/floor,/area/outpost/engineering/solars)
@@ -275,9 +274,8 @@
"fo" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "edock_outer"; locked = 1; name = "Engineering Dock Airlock"},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "edock_airlock"; name = "exterior access button"; pixel_x = -26; pixel_y = 0; req_access = list(10)},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway)
"fp" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/outpost/engineering/hallway)
"fq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/turf/simulated/floor/plating,/area/outpost/engineering/hallway)
-"fr" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/outpost/engineering/hallway)
-"fs" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "eoutpost_solar_airlock"; name = "exterior access button"; pixel_x = 25; pixel_y = 25; req_access = list(10)},/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/outpost/engineering/solars)
-"ft" = (/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/outpost/engineering/hallway)
+"fr" = (/obj/machinery/light{dir = 4},/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/explored)
+"fs" = (/obj/machinery/light{dir = 8},/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/explored)
"fu" = (/turf/simulated/wall,/area/outpost/engineering/hallway)
"fv" = (/turf/space,/area/shuttle/constructionsite/site)
"fw" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/mine/explored)
@@ -291,10 +289,7 @@
"fE" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/outpost/engineering/solarsoutside/aft)
"fF" = (/obj/machinery/power/solar{id = "starboardsolar"; name = "Starboard Solar Array"},/obj/structure/cable/yellow,/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/outpost/engineering/solarsoutside/aft)
"fG" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/outpost/engineering/solarsoutside/aft)
-"fH" = (/turf/space,/area/mine/explored)
"fI" = (/obj/structure/lattice,/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/explored)
-"fJ" = (/obj/machinery/light{dir = 4},/turf/simulated/mineral/floor/ignore_mapgen,/area/outpost/engineering/hallway)
-"fK" = (/obj/machinery/light{dir = 8},/turf/simulated/mineral/floor/ignore_mapgen,/area/outpost/engineering/hallway)
"fL" = (/obj/structure/grille,/turf/space,/area/space)
"fM" = (/obj/structure/lattice,/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/space,/area/space)
"fN" = (/obj/structure/lattice,/obj/structure/grille,/turf/space,/area/space)
@@ -490,37 +485,37 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababab
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababahahahahahahabababababababahahahahahananananananananacahahahabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababaqarasasasataqahahahabababababahahahahajanananahahahananananahahabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababauaqavaqauaqawaqaqahahahababababahahahahahananananananananananahahahahahahahahabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababaxayazaAaBaCaDaEaqaqahahahahajajahahanahananaFananananananananahahahahahahahahababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababaGaGaGaxaHaIaJaKaCaCaCaqaqaqaqahahananananahanahananananananananananacahahahahahahahahahahahababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababaLaLaGaMaNaxaOaPaQaKaRaSaCaTaCaqaqaqahaUananahananananananahahanananananajahahahabababahahahahahabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababaLaLaLaVaWaXaxayaYaAaZbababbbcaCaCaqaqaqbdananananananananananahanananananajahahahabababahahahahahahahahababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababaLaLbeaLaGbfaGaxbgbhbiaxbjbkbabablaCaCaqahajajacahanahananaFananananananananacahahahabababababababahahahahababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababaGayazaAaBaCaDaEaqaqahahahahajajahahanahanananananananananananahahahahahahahahababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababaGaGaGaGaHaIaJaKaCaCaCaqaqaqaqahahananananahanahananananananananananacahahahahahahahahahahahababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababaLaLaGaMaNaGaOaPaQaKaRaSaCaTaCaqaqaqahaUananahananananananahahanananananajahahahabababahahahahahabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababaLaLaLaVaWaXaGayaYaAaZbababbbcaCaCaqaqaqbdananananananananananahanananananajahahahabababahahahahahahahahababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababaLaLbeaLaGbfaGaGbgbhbiaCbjbkbabaaFaCaCaqahajajacahanahanananananananananananacahahahabababababababahahahahababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababaLbPbnbobpbqbrbsbtbubvbwbxbybabababzaCaqabababahahahahacananananananananahahahahahahabababababababahahahahababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababaLaLbAbBbmbnbCbDaLbEbFbGaCbHbIbJbKbabLaCaCabababahahahahacajajahahahahahahahahahahababababababababababahahabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababaLbMbNbOcKbQbQbQaLbRbSbTaCbUbabababababVaCabababahahahahahahahahahahahahahahabababababababababababababahahabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababaLblbNbOcKbQbQbQaLbRbSbTaCbUbabababababVaCabababahahahahahahahahahahahahahahabababababababababababababahahabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababaLaLaLaLbWbXaLaLaLaLbYbZcaaCaCcbccbabacdaCaCaCababababababababababababababababababababababababababababahahahabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababaLcecfcgchcicjcjaLckclbFbGcmaCaCaCcncnaCaCcocpcpcpcpcpcpabababababababababababababababababababababababahahababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababaqaqaLcqcrcsctcucvcwcxcycAczcPbibYclcBclclcCclclcpcDcEcFcGcpcpababababababababababababababababababababababahahabababababaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababcHcIcIcIcIcIcIcIcJcJcJdfcLcMbOcNcOeGcQaxcRcScTbtbtbtbtcUbtcVcWcXcYcZdadbcpababababababababababababababababababababababahahahaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababcHcIcIcIcIcIcIcIcJcJcJdfcLcMbOcNcOeGcQaGcRcScTbtbtbtbtcUbtcVcWcXcYcZdadbcpababababababababababababababababababababababahahahaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcababababababaqaLdddecsfQdgfRdhcxdidjdkdldmbYdnclclcldoclaIcpdpdqdrdsdtcpabababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaLdudvdwdxdydzdzaLckclfPbGdAdBdBdBdCdCdBdBdDcpcpcpdEdFdGcpabababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababdHdHdHdHdHdHdHdHdHdHbYbZcadBdBdIdJdKdKdLdBdBdBabcpdMdFdpcpababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababdHdNdOdPdPdQdPdRdHbRbSbTdBdSdTdUdKdKdKdVdBababcpdWdXdYcpababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabahahababababdHdHdHdPdZeaebecdHedbFeedBefdKegdKdKdLdBdBababcpehdXdYcpababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeiejejejejejejekelemdPdZeneoepeqbtereseteuevewdKdKexdBabababcpeyezeAcpabababababababababahahahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahahahahahabdHdHeBdPeCdPdPeDcleEeFdCdKdKeHeReIdBdBababahcpeJeKeLcpabababababababababahahahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahahahahahahdHdHeMeNdPdPeOePeQaAaBdKdKfSeSdBdBabababaheTeUeVeWabababababababahahahahahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahahahahahahahdHeXdHeYeZaKfafbfcaKfdfedBffdBabababahaheWfgfheWababababababahahahahahahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahahahahahabdHdHeBdPeCdPdPeDcleEeFdCdKdKeHdKeIdBdBababahcpeJeKeLcpabababababababababahahahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahahahahahahdHdHbMeNdPdPeOePeQaAaBdKdKfSeSdBdBabababaheTeUeVeWabababababababahahahahahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahahahahahahahdHeXdHeYeZaKfafbfcaKeMfedBffdBabababahaheWfgfheWababababababahahahahahahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahahahahahahahahdHdHdHaKficlfjaKdBdBdBaqaqahahahahahfkfleKfmahahahahahahahahahahahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahahahahahahahahahaxfnePfofpfqaxaqaqaqahahahahahahfrfsftahahahahahahahahahahahahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahahahahahahahahahaGfnePfofpfqaGaqaqaqahahahahahaheRaxaqahahahahahahahahahahahahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahahahahahahahahfufvfvfvfvfvfuahahahahahahahahahahfwahahahahahahahadahahahahahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahahahahahahahahfrfvfvfvfvfvfrahahadahfxfxfxfxfxahfwahfxfxfxfxfxahadahahahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahahahahahahahaheRfvfvfvfvfveRahahadahfxfxfxfxfxahfwahfxfxfxfxfxahadahahahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahahahahahahahahaqfvfvfvfvfvaqahahadfyfzfAfAfAfAfBfCfBfDfDfDfDfEfyadahahahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahahahahahahaqfvfvfvfvfvaqahahadahfFfFfFfFfFahfGahfFfFfFfFfFahadahahahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahahahahfHfvfvfvfvfvaqahahadahahahahahahahfGahahahahfyahahfIahahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahahfHfHfvfvfvfvfvaqahahadahfxfxfxfxfxahfGahfxfxfxfxfxahadahahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahfJfufvfvfvfvfvfufKahfyfyfzfAfAfAfAfBfCfBfDfDfDfDfEfyadahahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahfyfuaqaqaqfufyahahadahfFfFfFfFfFahfGahfFfFfFfFfFahadahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahahahahaafvfvfvfvfvaqahahadahahahahahahahfGahahahahfyahahfIahahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahahaaaafvfvfvfvfvaqahahadahfxfxfxfxfxahfGahfxfxfxfxfxahadahahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahfracfvfvfvfvfvacfsahfyfyfzfAfAfAfAfBfCfBfDfDfDfDfEfyadahahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahfyacaqaqaqacfyahahadahfFfFfFfFfFahfGahfFfFfFfFfFahadahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahahahahahahahahadahahahahahahahfGahahahahfyahahfyahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahahahahahahadahfxfxfxfxfxahfGahfxfxfxfxfxahadahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahahahahahadfyfzfAfAfAfAfBfCfBfDfDfDfDfEfyadahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/maps/polaris-5.dmm b/maps/polaris-5.dmm
index 6c81b5d41a..284c6cf9c1 100644
--- a/maps/polaris-5.dmm
+++ b/maps/polaris-5.dmm
@@ -29,26 +29,26 @@
"aC" = (/obj/machinery/portable_atmospherics/canister/phoron,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/dark,/area/outpost/research/tox_store)
"aD" = (/obj/machinery/portable_atmospherics/canister/phoron,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled/dark,/area/outpost/research/tox_store)
"aE" = (/obj/machinery/light{dir = 1},/obj/machinery/camera/network/research{c_tag = "Research - Toxins Test Chamber North"; network = list("Research","Toxins Test Area")},/turf/simulated/floor/tiled/airless,/area/outpost/research/test_area)
-"aF" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/outpost/research/mixing)
-"aG" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/outpost/research/mixing)
+"aF" = (/obj/structure/grille,/obj/structure/window/phoronreinforced{tag = "icon-phoronrwindow (WEST)"; icon_state = "phoronrwindow"; dir = 8},/obj/structure/window/phoronreinforced{tag = "icon-phoronrwindow (NORTH)"; icon_state = "phoronrwindow"; dir = 1},/turf/simulated/floor/plating,/area/outpost/research/mixing)
+"aG" = (/obj/structure/grille,/obj/structure/window/phoronreinforced{tag = "icon-phoronrwindow (NORTH)"; icon_state = "phoronrwindow"; dir = 1},/obj/structure/window/phoronreinforced{tag = "icon-phoronrwindow (EAST)"; icon_state = "phoronrwindow"; dir = 4},/obj/structure/window/phoronreinforced,/turf/simulated/floor/plating,/area/outpost/research/mixing)
"aH" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/powered/pump,/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled/white,/area/outpost/research/mixing)
"aI" = (/turf/simulated/floor/tiled/white,/area/outpost/research/mixing)
"aJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/outpost/research/mixing)
-"aK" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/outpost/research/mixing)
+"aK" = (/obj/structure/grille,/obj/structure/window/phoronreinforced{tag = "icon-phoronrwindow (WEST)"; icon_state = "phoronrwindow"; dir = 8},/obj/structure/window/phoronreinforced{tag = "icon-phoronrwindow (NORTH)"; icon_state = "phoronrwindow"; dir = 1},/obj/structure/window/phoronreinforced{tag = "icon-phoronrwindow (EAST)"; icon_state = "phoronrwindow"; dir = 4},/turf/simulated/floor/plating,/area/outpost/research/mixing)
"aL" = (/obj/machinery/portable_atmospherics/powered/pump,/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/corner/purple{dir = 9},/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway/toxins_hallway)
"aM" = (/turf/simulated/floor/tiled/white,/area/outpost/research/hallway/toxins_hallway)
"aN" = (/obj/machinery/door/airlock/research{name = "Toxins Storage"; req_access = list(8)},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/tiled,/area/outpost/research/tox_store)
"aO" = (/turf/simulated/floor/tiled,/area/outpost/research/tox_store)
"aP" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/outpost/research/tox_store)
"aQ" = (/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway/toxins_hallway)
-"aR" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/outpost/research/mixing)
+"aR" = (/obj/structure/grille,/obj/structure/window/phoronreinforced{tag = "icon-phoronrwindow (WEST)"; icon_state = "phoronrwindow"; dir = 8},/obj/structure/window/phoronreinforced{tag = "icon-phoronrwindow (EAST)"; icon_state = "phoronrwindow"; dir = 4},/obj/structure/window/phoronreinforced,/turf/simulated/floor/plating,/area/outpost/research/mixing)
"aS" = (/obj/machinery/atmospherics/portables_connector,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled/white,/area/outpost/research/mixing)
"aT" = (/obj/machinery/atmospherics/pipe/manifold/visible/red{tag = "icon-map (WEST)"; icon_state = "map"; dir = 8},/turf/simulated/floor/tiled/white,/area/outpost/research/mixing)
"aU" = (/obj/machinery/atmospherics/pipe/manifold/visible/red{tag = "icon-map (NORTH)"; icon_state = "map"; dir = 1},/obj/machinery/meter,/turf/simulated/floor/tiled/white,/area/outpost/research/mixing)
"aV" = (/obj/machinery/atmospherics/pipe/simple/visible/red{tag = "icon-intact (SOUTHWEST)"; icon_state = "intact"; dir = 10},/turf/simulated/floor/tiled/white,/area/outpost/research/mixing)
"aW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled/white,/area/outpost/research/mixing)
"aX" = (/obj/structure/closet/secure_closet/scientist,/obj/effect/floor_decal/industrial/outline/yellow,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/outpost/research/mixing)
-"aY" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/outpost/research/mixing)
+"aY" = (/obj/structure/grille,/obj/structure/window/phoronreinforced{tag = "icon-phoronrwindow (WEST)"; icon_state = "phoronrwindow"; dir = 8},/obj/structure/window/phoronreinforced{tag = "icon-phoronrwindow (NORTH)"; icon_state = "phoronrwindow"; dir = 1},/obj/structure/window/phoronreinforced{tag = "icon-phoronrwindow (EAST)"; icon_state = "phoronrwindow"; dir = 4},/obj/structure/window/phoronreinforced,/turf/simulated/floor/plating,/area/outpost/research/mixing)
"aZ" = (/obj/machinery/portable_atmospherics/powered/scrubber,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/obj/effect/floor_decal/corner/purple{dir = 9},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway/toxins_hallway)
"ba" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway/toxins_hallway)
"bb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/blue{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway/toxins_hallway)
@@ -115,21 +115,20 @@
"ck" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/airlock_sensor{pixel_y = 25},/turf/simulated/floor/airless,/area/outpost/research/toxins_launch)
"cl" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/airless,/area/outpost/research/toxins_launch)
"cm" = (/obj/machinery/door/blast/regular{id = "toxinsdriver"; name = "Toxins Launcher Bay Door"},/turf/simulated/floor/airless,/area/outpost/research/toxins_launch)
-"cn" = (/turf/simulated/floor/airless,/area/mine/explored)
+"cn" = (/turf/simulated/floor/airless,/area/outpost/research/toxins_launch)
"co" = (/obj/machinery/door/blast/regular{id = "toxinsdriver"; name = "Toxins Launcher Bay Door"},/turf/simulated/floor/airless,/area/outpost/research/test_area)
"cp" = (/turf/simulated/floor/airless,/area/outpost/research/test_area)
"cq" = (/obj/machinery/light{dir = 4},/obj/machinery/camera/network/research{c_tag = "Research Toxins Test Chamber East"; dir = 8; network = list("Research","Toxins Test Area")},/turf/simulated/floor/tiled/airless,/area/outpost/research/test_area)
"cr" = (/obj/machinery/door/blast/regular{id = "mixvent"; name = "Mixer Room Vent"},/turf/simulated/floor/reinforced,/area/outpost/research/mixing)
-"cs" = (/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/pipe/simple/heat_exchanging/junction,/turf/simulated/floor/reinforced,/area/outpost/research/mixing)
-"ct" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction,/turf/simulated/floor/reinforced,/area/outpost/research/mixing)
-"cu" = (/obj/machinery/sparker{dir = 2; id = "mixingsparker"; pixel_x = 25},/obj/machinery/atmospherics/unary/outlet_injector{dir = 4; frequency = 1443; icon_state = "map_injector"; id = "air_in"; use_power = 1},/turf/simulated/floor/reinforced,/area/outpost/research/mixing)
+"cs" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction,/turf/simulated/floor/reinforced/airless,/area/outpost/research/mixing)
+"ct" = (/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/pipe/simple/heat_exchanging/junction,/turf/simulated/floor/reinforced/airless,/area/outpost/research/mixing)
+"cu" = (/obj/machinery/sparker{dir = 2; id = "mixingsparker"; pixel_x = 25},/obj/machinery/atmospherics/unary/outlet_injector{dir = 4; frequency = 1443; icon_state = "map_injector"; id = "air_in"; use_power = 1},/turf/simulated/floor/reinforced/airless,/area/outpost/research/mixing)
"cv" = (/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/wall/r_wall,/area/outpost/research/mixing)
"cw" = (/obj/machinery/airlock_sensor{id_tag = "tox_airlock_sensor"; master_tag = "tox_airlock_control"; pixel_y = 24},/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/binary/pump{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/reinforced,/area/outpost/research/mixing)
"cx" = (/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall/r_wall,/area/outpost/research/mixing)
"cy" = (/obj/machinery/embedded_controller/radio/airlock/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"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/tvalve/bypass{dir = 8},/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/tiled/white,/area/outpost/research/mixing)
"cz" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/meter,/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled/white,/area/outpost/research/mixing)
"cA" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled/white,/area/outpost/research/mixing)
-"cB" = (/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/door/firedoor/border_only,/turf/simulated/floor/plating,/area/outpost/research/mixing)
"cC" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/corner/purple{dir = 1},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway/toxins_hallway)
"cD" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/effect/floor_decal/corner/purple,/turf/simulated/floor/tiled/white,/area/outpost/research/hallway/toxins_hallway)
"cE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/effect/floor_decal/corner/purple{dir = 10},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway/toxins_hallway)
@@ -144,8 +143,8 @@
"cN" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/outpost/research/toxins_launch)
"cO" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/simulated/floor/tiled/airless,/area/outpost/research/test_area)
"cP" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/tiled/airless,/area/outpost/research/test_area)
-"cQ" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging,/turf/simulated/floor/reinforced,/area/outpost/research/mixing)
-"cR" = (/obj/machinery/air_sensor{frequency = 1430; id_tag = "toxins_mixing_exterior"; output = 63},/turf/simulated/floor/reinforced,/area/outpost/research/mixing)
+"cQ" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging,/turf/simulated/floor/reinforced/airless,/area/outpost/research/mixing)
+"cR" = (/obj/machinery/air_sensor{frequency = 1430; id_tag = "toxins_mixing_exterior"; output = 63},/turf/simulated/floor/reinforced/airless,/area/outpost/research/mixing)
"cS" = (/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 = list(7)},/turf/simulated/floor/reinforced,/area/outpost/research/mixing)
"cT" = (/obj/machinery/atmospherics/binary/dp_vent_pump/high_volume{dir = 2; frequency = 1379; id = "tox_airlock_pump"},/obj/machinery/air_sensor{frequency = 1430; id_tag = "toxins_mixing_interior"; output = 63; pixel_x = -8; pixel_y = -18},/turf/simulated/floor/reinforced,/area/outpost/research/mixing)
"cU" = (/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 = list(7)},/turf/simulated/floor/reinforced,/area/outpost/research/mixing)
@@ -168,9 +167,9 @@
"dl" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/explored)
"dm" = (/obj/effect/landmark{name = "carpspawn"},/turf/space,/area/space)
"dn" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/airless,/area/outpost/research/test_area)
-"do" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 5},/turf/simulated/floor/reinforced,/area/outpost/research/mixing)
-"dp" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor/reinforced,/area/outpost/research/mixing)
-"dq" = (/obj/machinery/sparker{dir = 2; id = "mixingsparker"; pixel_x = 25},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; external_pressure_bound = 0; external_pressure_bound_default = 0; icon_state = "map_vent_in"; initialize_directions = 1; internal_pressure_bound = 4000; internal_pressure_bound_default = 4000; use_power = 1; pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0},/turf/simulated/floor/reinforced,/area/outpost/research/mixing)
+"do" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor/reinforced/airless,/area/outpost/research/mixing)
+"dp" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 5},/turf/simulated/floor/reinforced/airless,/area/outpost/research/mixing)
+"dq" = (/obj/machinery/sparker{dir = 2; id = "mixingsparker"; pixel_x = 25},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; external_pressure_bound = 0; external_pressure_bound_default = 0; icon_state = "map_vent_in"; initialize_directions = 1; internal_pressure_bound = 4000; internal_pressure_bound_default = 4000; use_power = 1; pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0},/turf/simulated/floor/reinforced/airless,/area/outpost/research/mixing)
"dr" = (/obj/structure/sign/fire{pixel_y = -32},/obj/machinery/atmospherics/binary/pump{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/reinforced,/area/outpost/research/mixing)
"ds" = (/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall/r_wall,/area/outpost/research/mixing)
"dt" = (/obj/machinery/button/remote/blast_door{id = "mixvent"; name = "Mixing Room Vent Control"; pixel_x = -25; pixel_y = 5; req_access = list(7)},/obj/machinery/button/ignition{id = "mixingsparker"; pixel_x = -25; pixel_y = -5},/obj/machinery/atmospherics/valve{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 1},/turf/simulated/floor/tiled/white,/area/outpost/research/mixing)
@@ -273,7 +272,7 @@
"fm" = (/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 6},/obj/machinery/light,/turf/simulated/floor/plating,/area/outpost/research/toxins_misc_lab)
"fn" = (/obj/structure/table/standard,/obj/machinery/microwave,/obj/machinery/status_display{layer = 4; pixel_x = -32; pixel_y = 0},/turf/simulated/floor/tiled,/area/outpost/research/toxins_misc_lab)
"fo" = (/obj/machinery/atmospherics/pipe/simple/hidden/purple,/turf/simulated/wall/r_wall,/area/outpost/research/toxins_misc_lab)
-"fp" = (/mob/living/carbon/slime,/turf/simulated/floor/reinforced,/area/outpost/research/xenobiology)
+"fp" = (/obj/machinery/xenobio2/manualinjector,/turf/simulated/floor/reinforced,/area/outpost/research/xenobiology)
"fq" = (/obj/structure/disposalpipe/segment,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/reinforced,/area/outpost/research/xenobiology)
"fr" = (/obj/machinery/portable_atmospherics/canister,/turf/simulated/floor/plating,/area/outpost/research/hallway/toxins_hallway)
"fs" = (/obj/structure/table/rack,/obj/item/weapon/storage/toolbox/emergency,/obj/item/clothing/accessory/armband/science,/obj/item/clothing/glasses/science,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/obj/item/device/suit_cooling_unit,/turf/simulated/floor/plating,/area/outpost/research/hallway/toxins_hallway)
@@ -290,7 +289,7 @@
"fD" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway/toxins_hallway)
"fE" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction,/turf/space,/area/space)
"fF" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging,/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/explored)
-"fG" = (/obj/structure/table/standard,/obj/item/weapon/scalpel{pixel_y = 12},/obj/item/weapon/circular_saw,/obj/machinery/vending/wallmed1{name = "Emergency NanoMed"; pixel_x = -7; pixel_y = 32},/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology)
+"fG" = (/obj/machinery/vending/wallmed1{name = "Emergency NanoMed"; pixel_x = -7; pixel_y = 32},/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology)
"fH" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/outpost/research/xenobiology)
"fI" = (/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/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio1"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/cable/blue{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/outpost/research/xenobiology)
"fJ" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio1"; name = "Containment Blast Doors"; opacity = 0},/obj/machinery/door/window/southright{dir = 1; name = "Containment Pen"; req_access = list(47)},/turf/simulated/floor/reinforced,/area/outpost/research/xenobiology)
@@ -299,17 +298,17 @@
"fM" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio2"; name = "Containment Blast Doors"; opacity = 0},/obj/machinery/door/window/southright{dir = 1; name = "Containment Pen"; req_access = list(47)},/turf/simulated/floor/reinforced,/area/outpost/research/xenobiology)
"fN" = (/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/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio2"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/disposalpipe/segment,/obj/structure/cable/blue{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/outpost/research/xenobiology)
"fO" = (/turf/simulated/floor/tiled,/area/outpost/research/xenobiology)
-"fP" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology)
+"fP" = (/obj/machinery/xenobio/editor,/turf/simulated/floor/reinforced,/area/outpost/research/xenobiology)
"fQ" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/outpost/research/hallway/toxins_hallway)
"fR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/research{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "toxins_airlock_exterior"; locked = 1; name = "Toxins External Airlock"; req_access = list(7)},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "toxins_airlock_control"; name = "Toxins Access Button"; pixel_x = 26; pixel_y = 0; req_access = list(7)},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway/toxins_hallway)
"fS" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging,/turf/space,/area/space)
"fT" = (/obj/structure/sink{pixel_x = 0; pixel_y = 28},/turf/simulated/floor/tiled,/area/outpost/research/xenobiology)
"fU" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology)
-"fV" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Xenobiology Fore Port"; dir = 2},/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor/tiled,/area/outpost/research/xenobiology)
+"fV" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Xenobiology Fore Port"; dir = 2},/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/machinery/computer/xenobio2,/turf/simulated/floor/tiled,/area/outpost/research/xenobiology)
"fW" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/machinery/button/remote/blast_door{id = "xenobio1"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access = list(55)},/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology)
"fX" = (/obj/machinery/door/window/southright{name = "Containment Pen"; req_access = list(47)},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology)
"fY" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology)
-"fZ" = (/obj/structure/closet/l3closet/scientist,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/outpost/research/xenobiology)
+"fZ" = (/obj/effect/floor_decal/industrial/warning,/obj/machinery/computer/xenobio2,/turf/simulated/floor/tiled,/area/outpost/research/xenobiology)
"ga" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning,/obj/machinery/button/remote/blast_door{id = "xenobio2"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access = list(55)},/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology)
"gb" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology)
"gc" = (/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Xenobiology Fore Starboard"; dir = 2},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/outpost/research/xenobiology)
@@ -320,9 +319,9 @@
"gh" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/blue{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Toxins Exterior"; dir = 2},/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/turf/simulated/floor/tiled,/area/outpost/research/hallway/catwalk)
"gi" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/airless,/area/mine/explored)
"gj" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/outpost/research/xenobiology)
-"gk" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/weapon/extinguisher,/turf/simulated/floor/tiled/dark,/area/outpost/research/xenobiology)
-"gl" = (/obj/machinery/optable{name = "Xenobiology Operating Table"},/turf/simulated/floor/tiled,/area/outpost/research/xenobiology)
-"gm" = (/obj/machinery/computer/operating{name = "Xenobiology Operating Computer"},/turf/simulated/floor/tiled,/area/outpost/research/xenobiology)
+"gk" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/device/flashlight,/obj/item/device/flashlight,/turf/simulated/floor/tiled/dark,/area/outpost/research/xenobiology)
+"gl" = (/obj/machinery/slime/extractor,/turf/simulated/floor/tiled,/area/outpost/research/xenobiology)
+"gm" = (/obj/machinery/computer/xenobio2,/turf/simulated/floor/tiled,/area/outpost/research/xenobiology)
"gn" = (/obj/structure/cable/blue{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology)
"go" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/outpost/research/xenobiology)
"gp" = (/obj/structure/cable/blue{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/outpost/research/xenobiology)
@@ -337,7 +336,7 @@
"gy" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 5},/turf/space,/area/space)
"gz" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/space,/area/space)
"gA" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/outpost/research/xenobiology)
-"gB" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/tiled/dark,/area/outpost/research/xenobiology)
+"gB" = (/obj/machinery/recharger/wallcharger{pixel_x = -22},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/outpost/research/xenobiology)
"gC" = (/obj/structure/extinguisher_cabinet{pixel_x = 7; pixel_y = -32},/turf/simulated/floor/tiled,/area/outpost/research/xenobiology)
"gD" = (/obj/machinery/light,/turf/simulated/floor/tiled,/area/outpost/research/xenobiology)
"gE" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology)
@@ -370,7 +369,7 @@
"hf" = (/obj/machinery/shower{pixel_y = 3},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled/freezer,/area/outpost/research/xenobiology)
"hg" = (/obj/structure/table/standard,/obj/machinery/reagentgrinder,/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology)
"hh" = (/obj/machinery/smartfridge/secure/extract,/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology)
-"hi" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/syringes,/obj/item/glass_jar,/obj/item/glass_jar,/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology)
+"hi" = (/obj/machinery/slime/replicator,/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology)
"hj" = (/obj/structure/cable/blue{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/outpost/research/xenobiology)
"hk" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology)
"hl" = (/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/structure/cable/blue{d2 = 8; icon_state = "0-8"},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio3"; name = "Containment Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/outpost/research/xenobiology)
@@ -394,7 +393,7 @@
"hD" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable/blue{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/embedded_controller/radio/airlock/access_controller{id_tag = "xeno_airlock_control"; name = "Xenobiology Access Console"; pixel_x = -26; pixel_y = -28; tag_exterior_door = "xeno_airlock_exterior"; tag_interior_door = "xeno_airlock_interior"},/obj/machinery/light_switch{pixel_x = -26; pixel_y = 26},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/outpost/research/xenobiology)
"hE" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology)
"hF" = (/obj/structure/cable/blue{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/blue{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled,/area/outpost/research/xenobiology)
-"hG" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/item/device/slime_scanner,/obj/item/device/slime_scanner,/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology)
+"hG" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/table/standard,/obj/item/device/multitool,/obj/item/weapon/gun/energy/taser/xeno,/obj/item/weapon/gun/energy/taser/xeno,/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology)
"hH" = (/obj/machinery/status_display,/turf/simulated/wall/r_wall,/area/outpost/research/xenobiology)
"hI" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/beakers{pixel_x = 2; pixel_y = 2},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/tiled,/area/outpost/research/xenobiology)
"hJ" = (/obj/structure/cable/blue{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled,/area/outpost/research/xenobiology)
@@ -411,9 +410,9 @@
"hU" = (/obj/structure/closet/emcloset,/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology)
"hV" = (/obj/structure/closet/l3closet/scientist,/obj/effect/floor_decal/industrial/warning,/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Xenobiology Access"; dir = 1},/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology)
"hW" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/structure/sign/deathsposal{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/tiled,/area/outpost/research/xenobiology)
-"hX" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology)
+"hX" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped,/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology)
"hY" = (/obj/structure/table/standard,/obj/item/clothing/gloves/latex,/obj/item/weapon/hand_labeler,/turf/simulated/floor/tiled,/area/outpost/research/xenobiology)
-"hZ" = (/obj/structure/table/standard,/obj/item/stack/material/phoron{amount = 5},/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology)
+"hZ" = (/obj/structure/table/standard,/obj/item/glass_jar,/obj/item/glass_jar,/obj/item/weapon/storage/box/syringes,/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology)
"ia" = (/obj/structure/cable/blue{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/outpost/research/xenobiology)
"ib" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced,/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/button/remote/blast_door{id = "xenobio4"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access = list(55)},/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology)
"ic" = (/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/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio4"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/cable/blue{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/outpost/research/xenobiology)
@@ -432,8 +431,8 @@
"ip" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/outpost/research/hallway/catwalk)
"iq" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/explored)
"ir" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin{pixel_x = -2; pixel_y = 5},/obj/item/weapon/pen/blue{pixel_x = -5; pixel_y = -1},/obj/item/weapon/pen/red{pixel_x = -1; pixel_y = 3},/turf/simulated/floor/tiled/dark,/area/outpost/research/xenobiology)
-"is" = (/obj/machinery/requests_console{department = "Science"; departmentType = 2; name = "Science Requests Console"; pixel_x = 0; pixel_y = 30},/turf/simulated/floor/tiled,/area/outpost/research/xenobiology)
-"it" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/outpost/research/xenobiology)
+"is" = (/obj/machinery/chemical_dispenser/full{density = 1},/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology)
+"it" = (/obj/machinery/vending/hydronutrients,/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology)
"iu" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology)
"iv" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology)
"iw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology)
@@ -444,24 +443,24 @@
"iB" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light/small,/turf/simulated/floor/reinforced,/area/outpost/research/xenobiology)
"iC" = (/obj/structure/disposaloutlet{dir = 1},/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/reinforced,/area/outpost/research/xenobiology)
"iD" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/outpost/research/hallway/catwalk)
-"iE" = (/obj/structure/table/standard,/obj/item/weapon/clipboard,/obj/item/weapon/folder,/obj/item/weapon/pen,/turf/simulated/floor/tiled/dark,/area/outpost/research/xenobiology)
-"iF" = (/obj/structure/bed/chair/office/light{dir = 8},/turf/simulated/floor/tiled,/area/outpost/research/xenobiology)
+"iE" = (/obj/machinery/requests_console{department = "Science"; departmentType = 2; name = "Science Requests Console"; pixel_x = 0; pixel_y = 30},/turf/simulated/floor/tiled,/area/outpost/research/xenobiology)
+"iF" = (/obj/structure/table/standard,/obj/item/weapon/clipboard,/obj/item/weapon/folder,/obj/item/weapon/pen,/obj/item/weapon/melee/baton/slime/loaded,/obj/item/device/analyzer/xeno_analyzer,/turf/simulated/floor/tiled/dark,/area/outpost/research/xenobiology)
"iG" = (/obj/structure/cable/blue{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology)
"iH" = (/obj/structure/cable/blue{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/outpost/research/xenobiology)
"iI" = (/obj/structure/cable/blue{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/blue{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for a door to space."; id = "xenobioout6"; name = "Containment Release Switch"; pixel_x = 0; pixel_y = -28; req_access = list(55)},/turf/simulated/floor/tiled,/area/outpost/research/xenobiology)
"iJ" = (/obj/structure/cable/blue{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology)
-"iK" = (/obj/structure/table/standard,/obj/item/weapon/folder/red{pixel_y = 3},/obj/item/weapon/folder/blue{pixel_x = 5},/turf/simulated/floor/tiled,/area/outpost/research/xenobiology)
+"iK" = (/obj/structure/bed/chair/office/light,/turf/simulated/floor/tiled,/area/outpost/research/xenobiology)
"iL" = (/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Xenobiology Aft Port"; dir = 1},/turf/simulated/floor/tiled,/area/outpost/research/xenobiology)
"iM" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 9},/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology)
"iN" = (/obj/machinery/door/window/southright{dir = 1; name = "Containment Pen"; req_access = list(47)},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology)
"iO" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table/reinforced,/obj/machinery/button/remote/blast_door{id = "xenobio6"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access = list(55)},/obj/effect/floor_decal/industrial/warning{dir = 5},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology)
"iP" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology)
"iQ" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table/reinforced,/obj/machinery/button/remote/blast_door{id = "xenobio5"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access = list(55)},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology)
-"iR" = (/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Xenobiology Aft Starboard"; dir = 1},/obj/machinery/newscaster{pixel_y = -32},/obj/machinery/light,/turf/simulated/floor/tiled,/area/outpost/research/xenobiology)
-"iS" = (/obj/structure/table/steel,/obj/item/clothing/glasses/science,/obj/item/weapon/extinguisher,/turf/simulated/floor/tiled/dark,/area/outpost/research/xenobiology)
+"iR" = (/obj/structure/table/standard,/obj/item/weapon/folder/red{pixel_y = 3},/obj/item/weapon/folder/blue{pixel_x = 5},/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/floor/tiled,/area/outpost/research/xenobiology)
+"iS" = (/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Xenobiology Aft Starboard"; dir = 1},/obj/machinery/newscaster{pixel_y = -32},/obj/machinery/light,/obj/machinery/computer/xenobio2,/turf/simulated/floor/tiled,/area/outpost/research/xenobiology)
"iT" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled,/area/outpost/research/hallway/catwalk)
"iU" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/outpost/research/hallway/catwalk)
-"iV" = (/obj/structure/filingcabinet/chestdrawer,/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology)
+"iV" = (/obj/structure/table/steel,/obj/item/clothing/glasses/science,/obj/item/device/analyzer/xeno_analyzer,/turf/simulated/floor/tiled/dark,/area/outpost/research/xenobiology)
"iW" = (/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/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio6"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/disposalpipe/segment,/obj/structure/cable/blue,/turf/simulated/floor/plating,/area/outpost/research/xenobiology)
"iX" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio6"; name = "Containment Blast Doors"; opacity = 0},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/window/southright{name = "Containment Pen"; req_access = list(47)},/turf/simulated/floor/reinforced,/area/outpost/research/xenobiology)
"iY" = (/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/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio6"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/cable/blue,/turf/simulated/floor/plating,/area/outpost/research/xenobiology)
@@ -469,9 +468,9 @@
"ja" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio5"; name = "Containment Blast Doors"; opacity = 0},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/window/southright{name = "Containment Pen"; req_access = list(47)},/turf/simulated/floor/reinforced,/area/outpost/research/xenobiology)
"jb" = (/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/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio5"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/cable/blue,/turf/simulated/floor/plating,/area/outpost/research/xenobiology)
"jc" = (/obj/structure/extinguisher_cabinet{pixel_x = 25; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology)
-"jd" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/floor/tiled/dark,/area/outpost/research/xenobiology)
+"jd" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/xenobiodisk,/obj/item/weapon/melee/baton/slime/loaded,/obj/item/device/analyzer/xeno_analyzer,/turf/simulated/floor/tiled/white,/area/outpost/research/xenobiology)
"je" = (/turf/simulated/wall,/area/outpost/research/xenobiology)
-"jf" = (/obj/structure/closet,/obj/item/toy/figure/scientist,/obj/item/clothing/accessory/armband/science,/turf/simulated/floor/tiled/dark,/area/outpost/research/xenobiology)
+"jf" = (/obj/structure/closet,/obj/item/toy/figure/scientist,/obj/item/clothing/accessory/armband/science,/obj/item/device/analyzer/xeno_analyzer,/turf/simulated/floor/tiled/dark,/area/outpost/research/xenobiology)
"jg" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/outpost/research/hallway/catwalk)
"jh" = (/obj/machinery/light/small{dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/reinforced,/area/outpost/research/xenobiology)
"ji" = (/obj/structure/disposaloutlet{dir = 4},/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/reinforced,/area/outpost/research/xenobiology)
@@ -602,7 +601,7 @@
"lD" = (/obj/structure/sign/greencross,/turf/simulated/wall/r_wall,/area/outpost/research/medical)
"lE" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/effect/floor_decal/corner/purple{dir = 9},/turf/simulated/floor/tiled/white,/area/outpost/research/dock)
"lF" = (/obj/effect/floor_decal/corner/purple,/turf/simulated/floor/tiled/white,/area/outpost/research/dock)
-"lG" = (/obj/structure/reagent_dispensers/water_cooler,/turf/simulated/floor/wood,/area/outpost/research/dorms)
+"lG" = (/obj/structure/reagent_dispensers/water_cooler{bottle = 1},/turf/simulated/floor/wood,/area/outpost/research/dorms)
"lH" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/wood,/area/outpost/research/dorms)
"lI" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/wood,/area/outpost/research/dorms)
"lJ" = (/obj/structure/table/glass,/obj/item/weapon/tape_roll,/turf/simulated/floor/wood,/area/outpost/research/dorms)
@@ -657,7 +656,7 @@
"mG" = (/obj/structure/table/standard,/obj/item/weapon/material/ashtray/glass,/obj/item/weapon/reagent_containers/food/drinks/coffee,/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/outpost/research/dock)
"mH" = (/obj/effect/floor_decal/corner/purple{dir = 6},/turf/simulated/floor/tiled/white,/area/outpost/research/dock)
"mI" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets,/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/wood,/area/outpost/research/dorms)
-"mJ" = (/obj/structure/table/glass,/obj/item/weapon/storage/box/cups,/obj/item/weapon/storage/box/drinkingglasses{pixel_x = 1; pixel_y = 4},/obj/machinery/light,/turf/simulated/floor/wood,/area/outpost/research/dorms)
+"mJ" = (/obj/structure/table/glass,/obj/item/weapon/storage/box/cups,/obj/item/weapon/storage/box/glasses/square{pixel_x = 1; pixel_y = 4},/obj/machinery/light,/turf/simulated/floor/wood,/area/outpost/research/dorms)
"mK" = (/obj/structure/table/glass,/obj/item/device/camera_film{pixel_x = 2; pixel_y = 2},/obj/item/device/camera,/turf/simulated/floor/wood,/area/outpost/research/dorms)
"mL" = (/obj/item/weapon/bedsheet/purple,/obj/structure/bed/padded,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/carpet/blue,/area/outpost/research/dorms)
"mM" = (/obj/structure/table/standard,/obj/machinery/alarm{dir = 1; pixel_y = -25},/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/carpet/blue,/area/outpost/research/dorms)
@@ -1046,7 +1045,7 @@
"uf" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/mine/explored)
"ug" = (/turf/simulated/wall,/area/outpost/mining_main/north_hall)
"uh" = (/obj/structure/lattice,/turf/simulated/mineral/floor/ignore_mapgen,/area/outpost/mining_main/north_hall)
-"ui" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/space)
+"ui" = (/obj/effect/floor_decal/industrial/warning/dust{tag = "icon-warning_dust (NORTH)"; icon_state = "warning_dust"; dir = 1},/turf/simulated/floor/tiled/asteroid_steel/airless,/area/outpost/mining_main/refinery)
"uj" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/shuttle/mining/outpost)
"uk" = (/obj/machinery/atmospherics/pipe/simple/visible/supply{dir = 6},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{dir = 6; icon_state = "intact-scrubbers"; tag = "icon-intact-scrubbers (NORTHWEST)"},/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/mine/explored)
"ul" = (/obj/machinery/atmospherics/pipe/simple/visible/supply{tag = "icon-intact-supply (NORTHWEST)"; icon_state = "intact-supply"; dir = 9},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{dir = 9; icon_state = "intact-scrubbers"; tag = "icon-intact-scrubbers (NORTHWEST)"},/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/mine/explored)
@@ -1225,7 +1224,7 @@
"xC" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 0},/turf/simulated/wall,/area/outpost/mining_main/maintenance)
"xD" = (/obj/machinery/light/small,/obj/structure/cable/blue{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/outpost/mining_main/maintenance)
"xE" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/blue{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/outpost/mining_main/maintenance)
-"xF" = (/obj/effect/floor_decal/industrial/warning/dust{tag = "icon-warning_dust (NORTH)"; icon_state = "warning_dust"; dir = 1},/obj/machinery/light/small,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/mine/explored)
+"xF" = (/obj/effect/floor_decal/industrial/warning/dust{tag = "icon-warning_dust (NORTH)"; icon_state = "warning_dust"; dir = 1},/obj/machinery/light/small,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/outpost/mining_main/refinery)
"xG" = (/obj/machinery/floodlight,/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/unexplored)
"xH" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/machinery/portable_atmospherics/canister/air/airlock,/turf/simulated/floor/tiled,/area/outpost/engineering/mining/hallway)
"xI" = (/obj/effect/floor_decal/industrial/warning,/obj/structure/cable/blue{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled,/area/outpost/research/anomaly)
@@ -1325,8 +1324,8 @@
"zy" = (/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery)
"zz" = (/obj/structure/cable/blue{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery)
"zA" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/outpost/mining_main/refinery)
-"zB" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled/asteroid_steel/airless,/area/mine/explored)
-"zC" = (/obj/structure/ore_box,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/mine/explored)
+"zB" = (/obj/effect/floor_decal/industrial/warning/dust{tag = "icon-warning_dust (NORTHEAST)"; icon_state = "warning_dust"; dir = 5},/obj/structure/ore_box,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/outpost/mining_main/refinery)
+"zC" = (/obj/effect/floor_decal/industrial/warning/dust,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/outpost/mining_main/refinery)
"zD" = (/obj/machinery/conveyor_switch{id = "mining_external"},/turf/simulated/floor/tiled/asteroid_steel/airless,/area/outpost/mining_main/refinery)
"zE" = (/obj/machinery/telecomms/relay/preset/mining,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/tiled/dark,/area/outpost/engineering/mining/telecomms)
"zF" = (/obj/structure/cable/blue{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/dark,/area/outpost/engineering/mining/telecomms)
@@ -1383,7 +1382,7 @@
"AE" = (/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery)
"AF" = (/obj/machinery/mineral/processing_unit_console,/turf/simulated/wall/r_wall,/area/outpost/mining_main/refinery)
"AG" = (/obj/machinery/mineral/processing_unit,/turf/simulated/floor/tiled/dark,/area/outpost/mining_main/refinery)
-"AH" = (/obj/effect/floor_decal/industrial/warning/dust{tag = "icon-warning_dust (EAST)"; icon_state = "warning_dust"; dir = 4},/obj/machinery/mining/brace,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/mine/explored)
+"AH" = (/obj/effect/floor_decal/industrial/warning/dust{tag = "icon-warning_dust (SOUTHEAST)"; icon_state = "warning_dust"; dir = 6},/turf/simulated/floor/tiled/asteroid_steel/airless,/area/outpost/mining_main/refinery)
"AI" = (/obj/machinery/newscaster{pixel_x = 0; pixel_y = -30},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/wood,/area/outpost/mining_main/break_room)
"AJ" = (/obj/structure/cable/blue{d2 = 4; icon_state = "0-4"},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor/plating,/area/outpost/engineering/mining/power)
"AK" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/blue{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/plating,/area/outpost/engineering/mining/power)
@@ -1404,7 +1403,7 @@
"AZ" = (/obj/structure/closet/crate,/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery)
"Ba" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery)
"Bb" = (/obj/machinery/conveyor{dir = 2; id = "mining_internal"},/obj/machinery/mineral/output,/turf/simulated/floor/tiled/dark,/area/outpost/mining_main/refinery)
-"Bc" = (/obj/structure/table/steel,/obj/item/weapon/screwdriver,/obj/item/weapon/crowbar,/obj/item/weapon/wrench,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/mine/explored)
+"Bc" = (/obj/effect/floor_decal/industrial/warning/dust{tag = "icon-warning_dust (NORTHEAST)"; icon_state = "warning_dust"; dir = 5},/turf/simulated/floor/tiled/asteroid_steel/airless,/area/outpost/mining_main/refinery)
"Bd" = (/obj/structure/closet/crate,/obj/item/stack/material/phoron{amount = 50},/obj/item/stack/material/phoron{amount = 50},/obj/item/stack/material/phoron{amount = 50},/turf/simulated/floor/plating,/area/outpost/engineering/mining/power)
"Be" = (/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/structure/cable/yellow,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/power/sensor{long_range = 1; name_tag = "Asteroid Main Grid"},/turf/simulated/floor/plating,/area/outpost/engineering/mining/power)
"Bf" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/outpost/engineering/mining/power)
@@ -1419,7 +1418,7 @@
"Bo" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/outpost/mining_main/refinery)
"Bp" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/outpost/mining_main/refinery)
"Bq" = (/obj/machinery/mineral/stacking_unit_console,/turf/simulated/wall/r_wall,/area/outpost/mining_main/refinery)
-"Br" = (/obj/structure/table/steel,/obj/item/weapon/cell/high,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/mine/explored)
+"Br" = (/obj/structure/ore_box,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/outpost/mining_main/refinery)
"Bs" = (/obj/structure/table/steel,/obj/item/weapon/storage/toolbox/mechanical,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/outpost/engineering/mining/power)
"Bt" = (/obj/machinery/power/smes/buildable{charge = 1.5e+007; cur_coils = 3; input_attempt = 1; input_level = 750000; input_level_max = 750000; output_level = 750000; output_level_max = 750000; RCon_tag = "Outpost - Main Power Unit 1"},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/outpost/engineering/mining/power)
"Bu" = (/obj/machinery/light/small{dir = 4; pixel_y = 0},/obj/machinery/floodlight,/turf/simulated/floor/plating,/area/outpost/engineering/mining/power)
@@ -1433,8 +1432,8 @@
"BC" = (/obj/machinery/conveyor{dir = 8; id = "mining_internal"},/obj/machinery/mineral/output,/turf/simulated/floor/tiled/dark,/area/outpost/mining_main/refinery)
"BD" = (/obj/machinery/mineral/stacking_machine,/turf/simulated/floor/tiled/dark,/area/outpost/mining_main/refinery)
"BE" = (/obj/machinery/conveyor{dir = 5; icon_state = "conveyor0"; id = "mining_internal"},/obj/machinery/mineral/input,/turf/simulated/floor/tiled/dark,/area/outpost/mining_main/refinery)
-"BF" = (/obj/structure/table/steel,/obj/machinery/cell_charger,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/mine/explored)
-"BG" = (/obj/effect/floor_decal/industrial/warning/dust/corner,/obj/machinery/light/small,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/mine/explored)
+"BF" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled/asteroid_steel/airless,/area/outpost/mining_main/refinery)
+"BG" = (/obj/effect/floor_decal/industrial/warning/dust{tag = "icon-warning_dust (EAST)"; icon_state = "warning_dust"; dir = 4},/turf/simulated/floor/tiled/asteroid_steel/airless,/area/outpost/mining_main/refinery)
"BH" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/outpost/engineering/mining/power)
"BI" = (/obj/machinery/power/smes/buildable{charge = 1.5e+007; cur_coils = 3; input_attempt = 1; input_level = 750000; input_level_max = 750000; output_level = 750000; output_level_max = 750000; RCon_tag = "Outpost - Main Power Unit 2"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/outpost/engineering/mining/power)
"BJ" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/outpost/engineering/mining/power)
@@ -1543,7 +1542,7 @@
"DI" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/landmark{name = "bluespacerift"},/turf/simulated/floor/tiled,/area/outpost/mining_main/north_hall)
"DJ" = (/obj/effect/landmark{name = "bluespacerift"},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
"DK" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/effect/landmark{name = "bluespacerift"},/turf/simulated/floor/tiled,/area/outpost/mining_main/south_hall)
-"DL" = (/obj/effect/floor_decal/industrial/warning/dust{tag = "icon-warning_dust (NORTHEAST)"; icon_state = "warning_dust"; dir = 5},/obj/structure/ore_box,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/mine/explored)
+"DL" = (/turf/simulated/floor/tiled/asteroid_steel/airless,/area/outpost/mining_main/refinery)
"DM" = (/obj/structure/disposalpipe/segment,/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/turf/simulated/floor/tiled,/area/outpost/mining_main/dorms)
"DN" = (/obj/machinery/alarm{pixel_y = 24},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/tiled/dark,/area/outpost/mining_main/refinery)
"DO" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/turf/simulated/floor/tiled,/area/outpost/engineering/mining/hallway)
@@ -1579,7 +1578,19 @@
"Es" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/wood,/area/outpost/research/dorms)
"Et" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/wood,/area/outpost/research/dorms)
"Eu" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/obj/machinery/computer/crew,/turf/simulated/floor/tiled/white,/area/outpost/mining_main/medbay)
-
+"Ev" = (/obj/machinery/mining/brace,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/outpost/mining_main/refinery)
+"Ew" = (/obj/effect/floor_decal/industrial/warning/dust{tag = "icon-warning_dust (EAST)"; icon_state = "warning_dust"; dir = 4},/obj/machinery/mining/brace,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/outpost/mining_main/refinery)
+"Ex" = (/obj/machinery/mining/drill,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/outpost/mining_main/refinery)
+"Ey" = (/obj/structure/table/steel,/obj/item/weapon/screwdriver,/obj/item/weapon/crowbar,/obj/item/weapon/wrench,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/outpost/mining_main/refinery)
+"Ez" = (/obj/structure/table/steel,/obj/item/weapon/cell/high,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/outpost/mining_main/refinery)
+"EA" = (/obj/structure/table/steel,/obj/machinery/cell_charger,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/outpost/mining_main/refinery)
+"EB" = (/obj/effect/floor_decal/industrial/warning/dust/corner,/obj/machinery/light/small,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/outpost/mining_main/refinery)
+"EC" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled,/area/outpost/research/xenobiology)
+"ED" = (/obj/machinery/xenobio/extractor,/turf/simulated/floor/tiled/dark,/area/outpost/research/xenobiology)
+"EE" = (/obj/structure/bed/chair/office/light{dir = 1},/turf/simulated/floor/tiled,/area/outpost/research/xenobiology)
+"EF" = (/obj/machinery/recharger/wallcharger{pixel_x = 32},/turf/simulated/floor/tiled,/area/outpost/research/xenobiology)
+"EG" = (/obj/machinery/light{dir = 1},/obj/machinery/vending/hydronutrients,/turf/simulated/floor/tiled,/area/outpost/research/xenobiology)
+
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -1652,37 +1663,37 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadanaoagapaqarakasasafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalalalatauatalalalacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadavawaxayagazaAazakaBasaCaDafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalalatatataEatatatalalacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFaGaHaIaIaJaIaKaLaMaQaNaOaPaDaDcdafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalalatatatatatatatatatalalacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaSaTaUaVaWaXaYaZbabbbcbdbebfaOaObgafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalalatatatatatatatatatatatalalacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaSaTaUaVaWaXaRaZbabbbcbdbebfaOaObgafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalalatatatatatatatatatatatalalacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadbhbibjbkblbmadbnbobpafbqaObraOaOcIafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalatatatbsatatatatatbtatatatalacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadbubvbwbxbybzbAadbBbCbDafbEbFbGbHbIbgakafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalalatatatatbsatatatbtatatatatalalacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadbJbKbLbMbNbObPadadbQbRbSafafbFbTbHbUbUbUbUbUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalatbVbVbVbVatbsbWbtatatatatatatalacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabXbYbZcaadadadcbcccKadcecfcgchciafafafakbUcjckclcmcncnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacocpcpcpcpcpcpcpcpauatatatatcqauamacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHdJcJdQbUcLcMcNbUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalatbWbWbWbWatcObVcPatatatatatatalacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrctcscucvcwcxcyczcAaYcCcDcEcFcGcHdJcJdQbUcLcMcNbUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalatbWbWbWbWatcObVcPatatatatatatalacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrcQcQcRcScTcUcVcWcWcXcYcZaedadbdcdddedfdgdhdidjdkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadldHdnalalatatatatcOatatatcPatatatatalalacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrdodpdqcvdrdsdtczducBdvdwdxdydzcHdAdBdCbUdDdEdFdGdldlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadldldlDDcpcpdIatatatcOatatatatatcPatatatalacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrdpdodqcvdrdsdtczduaYdvdwdxdydzcHdAdBdCbUdDdEdFdGdldlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadldldlDDcpcpdIatatatcOatatatatatcPatatatalacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabXadadadadadadewdKdLaddMdNdOdPfjdRdRdRdSbUdTdUdVdWdXdYdlaaaaaadldZdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXeaebcpalalatatatatatatatatatatatalalacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadecedeeefegeheiadadbQejekdRdRelemenbUbUbUbUbUffeodXdXdXdXdXepacacacacacacacacacacacacacacacaceqeqereqalalatatatatatatatatatalalacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadedeeeseseseeetadbBeuevdRfnexeyezeADXpEDZDYEaoVacacacacacacacacacacacacacacacacacacacacacacacacacacacalalatatateDatatatalalacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadeEeFeGeHeIetadeJeKeLdReMeBeBeNeOEbdRdRdRacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacalalalatauatalalalacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadeQejeReSeTeBeCeUeCePdRacacacacacacacacaceVeVeVeVeVeVeVeVeVacacacacacacacacacacacacacacacacalalalalamacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeeWaqeXaiaqeYeZfafbfcfdeCeUfeEcfgdRacacacacacacacacaceVfhfhfieVfhfhfieVacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaefsfkaqaqaeaeflaeaeeTeBfmfyfofoacacacacacacacaceVeVeVfhfpfqeVfhfpfqeVeVeVacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaefrfraegYftfuaefvfwfofofofxdldlacacdlacaceVeVjeeVfhfhfzeVfhfhfzeVfAeVeVacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlaeaeaeaefBfCfDaedRdRfofEfxfFdldldldldlaceVeVfGhWeVfIfJfKeVfLfMfNeVfOfPeVeVacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaefsfkaqaqaeaeflaeaeeTeBfmfyfofoacacacacacacacaceVeVeVfhfhfqeVfhfhfqeVeVeVacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaefrfraegYftfuaefvfwfofofofxdldlacacdlacaceVeVjeeVfpfhfzeVfpfhfzeVfAeVeVacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlaeaeaeaefBfCfDaedRdRfofEfxfFdldldldldlaceVeVfGhWeVfIfJfKeVfLfMfNeVfOiteVeVacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadldldlaeaefQfRaeaedRaafEfSfFfFdldldldldleVeVfTfOfUfVfWfXfYfZgafXgbgcgdfOfAeVacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadldlgegfggghgiaaaafSfSfSfSaadldldldlgjgkfOglgmfHgngogpgqgrgogsfOfOeVeVeVeVeVacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlgtgugvgwgxaaaagygzgygzaaaaaaaadlgAgBgCgDgdgEgFgGgGgHgGgGgGgIgJgKfhgLfheVacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadldlgegfggghgiaaaafSfSfSfSaadldldldlgjgkfOglfOfHgngogpgqgrgogsfOgmeVeVeVeVeVacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlgtgugvgwgxaaaagygzgygzaaaaaaaadlgAfAgCgDgdgEgFgGgGgHgGgGgGgIgJgKfpgLfheVacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlgNgMgOgwgxgPaaaaaaaaaaaaaagPgQgReVeVeVeVeVgSgTgUgogVfOfOgdgWgXiofhfhfheVacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagtgZgvgwhagQgQgQgQgQgQgQgQhbgZhceVhdhehfeVfHgTgWhghhhifOgdhjhkhlhmhmhneVacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagtgZgvgwhagQgQgQgQgQgQgQgQhbgZhceVhdhehfeVgBgTgWhghhhifOgdhjhkhlhmhmhneVacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahohphqhrhshshthuhshshshvhshshwhxhyhzhAhBhChDhEhFhGhHhIhJhKhLkkeVhNhNhNeVacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahOguorhPhQhQhQhRhQhQhQhShQhQhQhTeVhUhVkreVgWgTgWhXhYhZgWgdiaibicididideVacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagPieifigiiihijijijijijijijijijikeVeVeVeVeVilgTimgoingogVgdgWgXmrfhfhfheVacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahOipiUiqdldlaaaaaaaaaaaaaaaaaagjirisitgdiuiviwiwixiwiwiwiyhkiziAiBiCeVacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahOiDiUiqdldldlaaaaaaaaaaaaaaaagAiEiFfOfOfOiGgoiHiIingoiJfOfOeVeVeVeVeVacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahOiDiUiqdldldlaaaaaaaaaaaaaaaaeVeViKfOgdiLiMiNiOhMiPiNiQiRgdfOiSeVacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahOiTjgiqdldldlaaaaaaaaaaaaaaaaaaeVeViVfOeViWiXiYeViZjajbeVfOjceVeVacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagtiDiUiqdldldlaaaaaaaaaaaaaaaaaaaaeVeVjdeVfzfhfhjefzfhfheVjfeVeVacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlgtiDjpiqdldldldldlaaaaaaaaaaaaaaaaaaeVeVeVjhfhfhjejhfhfheVeVeVacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagPieifigiiihijijijijijijijijijikeVeVeVeVeVilgTimgoingogVgdgWgXmrfhfPfheVacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahOipiUiqdldlaaaaaaaaaaaaaaaaaagjiriEEGisiuiviwiwixiwiwiwiyhkiziAiBiCeVacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahOiDiUiqdldldlaaaaaaaaaaaaaaaagAiFfOfOEEfOiGgoiHiIingoiJfOEFeVeVeVeVeVacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahOiDiUiqdldldlaaaaaaaaaaaaaaaaeVeViRiKgdiLiMiNiOhMiPiNiQiSgdfOiVeVacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahOiTjgiqdldldlaaaaaaaaaaaaaaaaaaeVeVjdECeViWiXiYeViZjajbeVfOjceVeVacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagtiDiUiqdldldlaaaaaaaaaaaaaaaaaaaaeVeVEDeVfzfhfhjefzfhfpeVjfeVeVacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlgtiDjpiqdldldldldlaaaaaaaaaaaaaaaaaaeVeVeVjhfPfhjejhfhfheVeVeVacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlgtiDiUiqdldldldldlaaaaaaaaaaaaaaaaaaaaaaeVjifhfhjejifhfheVacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlgtiDiUiqdldldldldlaaaaaaaaaaaaaaaaaaaaaaeVjjjjjjeVeVeVeVeVacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagtifigiqdldldldldlaaaaaaaaaaaaaaaaaaaaaajkjkjkjkjkacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -1716,7 +1727,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadldldldldldlpMpMpMsAtFtGtHpSpRpRpRuducxIpRuducxIpRuducxIpRpRpRtjtKtLtMtjqdqdqdoVoVoVoVacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacdldldldldldldldldldldldldldldldldldldlacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadldldlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadldldldldldldldlpMpMpRpWpRpRpRdlpRtNtOtPpRtQtOyepRtStOtTpRdlpRtUtUtVtUtUqdoVoVoVoVoVacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacjWtWdldldldldldldldldldldldldldldldlacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadldldldldldldlaaaaaaaaaaaaaaaaaaaaaaaaaadlaadldldldldldldldldldldldldlpRtXygyOpRtXygyOpRubtXEjpRdldldldlueufoVoVoVoVoVacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacdldldldldldldldldldldldldldldldlacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagNuguhgNdlgNuhuggNdlaaaaaaaaaaaaaaaaaaaaaaaaaaaadldldldldldldldldldldluidlpRpRpRpRpRpRpRpRpRpRpRpRpRdldldldlueoVoVoVoVdlacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacdldldldldldldldldldlacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagNuguhgNdlgNuhuggNdlaaaaaaaaaaaaaaaaaaaaaaaaaaaadldldldldldldldldldldldldlpRpRpRpRpRpRpRpRpRpRpRpRpRdldldldlueoVoVoVoVdlacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacdldldldldldldldldldlacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlugujujujujujujujugdldlaaaaaaaaaaaaaaaaaaaaaaaaaadldldldldldldldldldldldldldldldldldldldldldldldldldldldldldlueoVoVdlacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacdldldldldldldldlacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadldldldlwaujujujujujujujwadldldldlaaaaaaaaaaaaaaaaaaaaaaaadldldldldldldldldldldldldldldldldldldldldldldldldldldldlukuloVdldlacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacdldldldlacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadldldlumgNujujujujujujujgNundldldldlaaaaaaaaaaaaaaaaaaaaaaaadldldldldldldldldldldldldldldldldldldldldldldldldldloVueoVdldldlacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -1730,16 +1741,16 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlumumvIvJvKvLvMEu
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlumwbwbwbwcwdwewfwgwhvbvbvbwiununvSvTwjwkwkwkwldldluedloVoVdldldldldlvVvXwmwnwmvXwowpwowqwrmbdlwsdldlxGacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadldlvtwtwuugwvwwwxwxwyvbwzwAwBwCwCwDwEwFwGwkwHwIwldldluedloVoVdldldldlvWvWvWwJwKwLwMwMwMwMwMwMwMwMwMwMwMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadldlugwNwOwPwQwRwSwSwTwSwUvtwVwSwWwXwYwZxaxbxcxdxeuououldloVoVdldldlvWvWxfvWvXxgvXwMxhxixjxkxlxmxnxoxowMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlvtxpxqugxrxsxtxtxuvbxvxwxxvbxyxzxAxAxBxCxDxEwlxFktktDLoVoVdlDAvWvWxHEkxJxKxLxMwMxNxOxPxQxRxRxRxSxTwMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlxUxVxVxVxVxVxUxUxUBvxXDIxZyaybybybycycybycycybycqiqiqjoVoVdldlvWydEmElEoEnEpyhyiyjykylymynyoypyqxTwMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlvtxpxqugxrxsxtxtxuvbxvxwxxvbxyxzxAxAxBxCxDxEwlxFuiuizBoVoVdlDAvWvWxHEkxJxKxLxMwMxNxOxPxQxRxRxRxSxTwMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlxUxVxVxVxVxVxUxUxUBvxXDIxZyaybybybycycybycycybyczCzCAHoVoVdldlvWydEmElEoEnEpyhyiyjykylymynyoypyqxTwMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlxUyrysxVytCgxVyvxUxUywyxyyybybyzyAyByCyDyEyFyGyHyIyIyIoVoVdlyJyJyJyJyKyfyLyMCUwMEqyPDeyRySyTyRyUyUwMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlxVyVDixVyXyYxVyZzazbzczdDMybDNzgycycyczhziybybycktktkvoVoVdlyJzjzkyJzlyfyfwnzmwMwMwMwMwMwMwMwMwMwMwMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadldlxVxVznxVxVzoxVzpzqzrzsztzuzvzwzwzxzyzzzAziybzCzBzCzDmboVoVDAyJzEzFzGzHzIzJzKDOzMzNzOzPzQzMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadldlacxVzRzSzTzUzVzWzXzYzZAaAbAcAdAdAeAdAfAgAhybzCkZkZkZmboVoVdlyJDPAjyJzMzMAkAlAkzMAmAnAozQzMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlacacxVApAqArAsDQAuAvAwAxAsAyAzAAABACADAEAFAGybzCkZwowpAHoVoVdlyJyJyJyJDRAJAKALAMANAOAPAQzMzMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlacxVxVARxVxVASxVATyZzbAUAVAWzvAXAXAYAZBazhBbybBckZkZkZmboVoVdlaczMBdBdAoAoAoBeBfBfBfBgBhzMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacxVBiBjxVBiBkxVyZBlzrzczUBmybBnzgBoBpBqAgziybBrkZwowpAHoVoVdlaczMzMBsAoAoBtBJBIAoAoBuzMzMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacxUytDSxVytDSxVBwxUxUBxzUByybybBzBABBBCBDBEycBFBGqiqiqjoVoVdlacaczMzMBHAoBKDFDEAoBLzMzMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlxVyVDixVyXyYxVyZzazbzczdDMybDNzgycycyczhziybybycuiuiBcoVoVdlyJzjzkyJzlyfyfwnzmwMwMwMwMwMwMwMwMwMwMwMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadldlxVxVznxVxVzoxVzpzqzrzsztzuzvzwzwzxzyzzzAziybBrBFBrzDBGoVoVDAyJzEzFzGzHzIzJzKDOzMzNzOzPzQzMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadldlacxVzRzSzTzUzVzWzXzYzZAaAbAcAdAdAeAdAfAgAhybBrDLDLDLBGoVoVdlyJDPAjyJzMzMAkAlAkzMAmAnAozQzMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlacacxVApAqArAsDQAuAvAwAxAsAyAzAAABACADAEAFAGybBrDLEvExEwoVoVdlyJyJyJyJDRAJAKALAMANAOAPAQzMzMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlacxVxVARxVxVASxVATyZzbAUAVAWzvAXAXAYAZBazhBbybEyDLDLDLBGoVoVdlaczMBdBdAoAoAoBeBfBfBfBgBhzMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacxVBiBjxVBiBkxVyZBlzrzczUBmybBnzgBoBpBqAgziybEzDLEvExEwoVoVdlaczMzMBsAoAoBtBJBIAoAoBuzMzMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacxUytDSxVytDSxVBwxUxUBxzUByybybBzBABBBCBDBEycEAEBzCzCAHoVoVdlacaczMzMBHAoBKDFDEAoBLzMzMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacxUxVxVxVxVxVxUxUxUBMzczdzeBNBOBOBOBPBPBPBPBPBOBPtWdloVoVoVdldlacaczMzMzMBQBRBQzMzMzMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaadmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacBSBSBTBTBTBUBVBUBSBSBWBXBYBOBOBZCaBZCbCbCcCdCeCckvoVoVoVdldldlacacacaczMzMzMzMzMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacBSCfCfCfCfCfCfDTChCiCjCkClCmEeCoEgEfCpCqCrCsCtCuoVoVdldldldlacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/nano/css/icons.css b/nano/css/icons.css
index be288fc1e8..b2eacc0ab8 100644
--- a/nano/css/icons.css
+++ b/nano/css/icons.css
@@ -172,6 +172,7 @@
.uiIcon16.icon-video { background-position: -224px -128px; }
.uiIcon16.icon-script { background-position: -240px -128px; }
.uiIcon16.icon-alert { background-position: 0 -144px; }
+.uiIcon16.icon-alert-red { background-image: url(uiIcons16Red.png); background-position: 0 -144px; }
.uiIcon16.icon-info { background-position: -16px -144px; }
.uiIcon16.icon-notice { background-position: -32px -144px; }
.uiIcon16.icon-help { background-position: -48px -144px; }
@@ -181,6 +182,9 @@
.uiIcon16.icon-radio-off { background-position: -112px -144px; }
.uiIcon16.icon-pin-w { background-position: -128px -144px; }
.uiIcon16.icon-pin-s { background-position: -144px -144px; }
+.uiIcon16.icon-phone { background-position: -160px -144px; }
+.uiIcon16.icon-list { background-position: -176px -144px; }
+.uiIcon16.icon-syringe { background-position: -192px -144px; }
.uiIcon16.icon-play { background-position: 0 -160px; }
.uiIcon16.icon-pause { background-position: -16px -160px; }
.uiIcon16.icon-seek-next { background-position: -32px -160px; }
@@ -196,6 +200,7 @@
.uiIcon16.icon-power { background-position: 0 -176px; }
.uiIcon16.icon-signal-diag { background-position: -16px -176px; }
.uiIcon16.icon-signal { background-position: -32px -176px; }
+.uiIcon16.icon-signal-green { background-image: url(uiIcons16Green.png); background-position: -32px -176px; }
.uiIcon16.icon-battery-0 { background-position: -48px -176px; }
.uiIcon16.icon-battery-1 { background-position: -64px -176px; }
.uiIcon16.icon-battery-2 { background-position: -80px -176px; }
@@ -229,6 +234,42 @@
.uiIcon16.icon-batt_full { background-image: url(c_max.gif); background-position: 0px 0px }
.uiIcon16.icon-batt_disc { background-image: url(c_discharging.gif); background-position: 0px 0px }
.uiIcon16.icon-batt_chrg { background-image: url(c_charging.gif); background-position: 0px 0px }
+/*yes, defining these all like this is awful, but unless the javascript for icon handling is sorted out this will have to do*/
+.uiIcon16.icon-empty64 { background-image: url(uiIcons64.png); background-position: 0 0; width: 64px; height: 64px; }
+.uiIcon16.icon-phone64 { background-image: url(uiIcons64.png); background-position: -64px 0; width: 64px; height: 64px; }
+.uiIcon16.icon-comment64 { background-image: url(uiIcons64.png); background-position: -128px 0; width: 64px; height: 64px; }
+.uiIcon16.icon-list64 { background-image: url(uiIcons64.png); background-position: -192px 0; width: 64px; height: 64px; }
+.uiIcon16.icon-gear64 { background-image: url(uiIcons64.png); background-position: -256px 0; width: 64px; height: 64px; }
+.uiIcon16.icon-person64 { background-image: url(uiIcons64.png); background-position: -320px 0; width: 64px; height: 64px; }
+.uiIcon16.icon-newspaper64 { background-image: url(uiIcons64.png); background-position: 0 -64px; width: 64px; height: 64px; }
+.uiIcon16.icon-note64 { background-image: url(uiIcons64.png); background-position: -64px -64px; width: 64px; height: 64px; }
+.uiIcon16.icon-close64 { background-image: url(uiIcons64.png); background-position: -128px -64px; width: 64px; height: 64px; }
+
+.uiIcon16.icon-pill { background-image: url(pills32.png); width: 32px; height: 32px;}
+.uiIcon16.icon-pill.pill1 { background-position: 0 0; }
+.uiIcon16.icon-pill.pill2 { background-position: -32px 0; }
+.uiIcon16.icon-pill.pill3 { background-position: -64px 0; }
+.uiIcon16.icon-pill.pill4 { background-position: -96px 0; }
+.uiIcon16.icon-pill.pill5 { background-position: -128px 0; }
+.uiIcon16.icon-pill.pill6 { background-position: 0 -32px; }
+.uiIcon16.icon-pill.pill7 { background-position: -32px -32px; }
+.uiIcon16.icon-pill.pill8 { background-position: -64px -32px; }
+.uiIcon16.icon-pill.pill9 { background-position: -96px -32px; }
+.uiIcon16.icon-pill.pill10 { background-position: -128px -32px; }
+.uiIcon16.icon-pill.pill11 { background-position: 0 -64px; }
+.uiIcon16.icon-pill.pill12 { background-position: -32px -64px; }
+.uiIcon16.icon-pill.pill13 { background-position: -64px -64px; }
+.uiIcon16.icon-pill.pill14 { background-position: -96px -64px; }
+.uiIcon16.icon-pill.pill15 { background-position: -128px -64px; }
+.uiIcon16.icon-pill.pill16 { background-position: 0 -96px; }
+.uiIcon16.icon-pill.pill17 { background-position: -32px -96px; }
+.uiIcon16.icon-pill.pill18 { background-position: -64px -96px; }
+.uiIcon16.icon-pill.pill19 { background-position: -96px -96px; }
+.uiIcon16.icon-pill.pill20 { background-position: -128px -96px; }
+.uiIcon16.icon-pill.bottle1 { background-position: 0 -128px; }
+.uiIcon16.icon-pill.bottle2 { background-position: -32px -128px; }
+.uiIcon16.icon-pill.bottle3 { background-position: -64px -128px; }
+.uiIcon16.icon-pill.bottle4 { background-position: -96px -128px; }
.mapIcon16 {
position: absolute;
diff --git a/nano/css/shared.css b/nano/css/shared.css
index 14a6c5c55d..8728102b08 100644
--- a/nano/css/shared.css
+++ b/nano/css/shared.css
@@ -45,6 +45,19 @@ hr {
white-space: nowrap;
}
+.link32 {
+ float: left;
+ min-width: 15px;
+ max-width: 31px;
+ height: 31px;
+ text-align: center;
+ text-decoration: none;
+ background: #40628a;
+ border: 1px solid #161616;
+ margin: 0 2px 2px 0;
+ cursor: default;
+}
+
.hasIcon {
padding: 0px 4px 4px 0px;
}
@@ -246,9 +259,10 @@ div.notice {
width: 100%;
margin: 4px 0 0 0;
clear: both;
+ overflow: auto;
}
-.itemContentNarrow, .itemContent {
+.itemContentNarrow, .itemContent, .itemContentWide, .itemContentSmall, .itemContentMedium {
float: left;
}
@@ -286,17 +300,14 @@ div.notice {
}
.itemContentWide {
- float: left;
width: 79%;
}
.itemContentSmall {
- float: left;
width: 33%;
}
.itemContentMedium {
- float: left;
width: 55%;
}
@@ -306,6 +317,7 @@ div.notice {
border: 1px solid #40628a;
padding: 4px;
margin: 3px 0;
+ overflow: hidden;
}
.statusDisplayRecords {
@@ -318,6 +330,19 @@ div.notice {
overflow-y: auto;
}
+.statusDisplayComm {
+ width: 100%;
+ background: rgba(0, 0, 0, 0.5);
+ color: #ffffff;
+ padding-bottom: 4px;
+ border-top: 0 none;
+ border-left: 0 none;
+ border-right: 0 none;
+ border-bottom: 2px inset #40628a;
+ margin: 3px 0;
+ overflow: hidden;
+}
+
.statusLabel {
width: 138px;
float: left;
@@ -351,7 +376,7 @@ div.notice {
background: #000000;
}
-.displayBarText {
+.displayBarText, .displayBarVerticalText, .displayBarBeakerText{
position: absolute;
top: -2px;
left: 5px;
@@ -369,6 +394,48 @@ div.notice {
float: left;
}
+.displayBarVertical {
+ position: relative;
+ width: 16px;
+ height: 200px;
+ border: 1px solid #666666;
+ float: left;
+ margin: 0 5px 0 0;
+ overflow: hidden;
+ background: #40628a;
+}
+
+.displayBarVerticalFill {
+ width: 100%;
+ height: 0%;
+ overflow: hidden;
+ float: left;
+ background: #000000;
+}
+
+/*used in xenobio2 computer*/
+
+.displayBarBeaker {
+ position: relative;
+ width: 100px;
+ height: 110px;
+ border-right: 2px solid rgb(102, 179, 255);
+ border-left: 2px solid rgb(102, 179, 255);
+ border-bottom: 2px solid rgb(102, 179, 255);
+ float: left;
+ margin: 0 5px 0 0;
+ overflow: hidden;
+ background: #40628a;
+}
+
+.displayBarBeakerFill {
+ width: 100%;
+ height: 0%;
+ overflow: hidden;
+ float: left;
+ background: rgba(153, 204, 255, 0.3);
+}
+
.displayBarFill.alignRight {
float: right;
}
@@ -446,6 +513,10 @@ div.notice {
float: right;
}
+.floatLeft {
+ float: left;
+}
+
/* Used in PDA */
.wholeScreen {
@@ -588,10 +659,118 @@ th.misc {
}
.oxyloss {
- color: blue;
+ color: #4444FF;
}
/* 75px width used in power monitoring console buttons */
.width75btn {
width: 75px;
+}
+
+/*Communicator Homescreen*/
+div.homeContainer {
+ width: 100%;
+ text-align: center;
+ margin: auto;
+ padding-top: 5px;
+}
+
+div.homeScreen {
+ padding: 0 20px 0 20px;
+}
+
+.link64 {
+ float: left;
+ min-width: 15px;
+ max-width: 68px;
+ height: 64px;
+ text-align: center;
+ color: #ffffff;
+ text-decoration: none;
+ background: rgba(64, 98, 138, 0.6);
+ border: 1px solid #161616;
+ padding: 0 0 4px 0;
+ margin: 0 0 30px 5.5%;
+ cursor: default;
+ border-radius: 10px;
+}
+
+.link64:hover {
+ font-size: 13px;
+}
+
+/*Communicator Dialing*/
+.dialPad {
+ clear: both;
+ text-align: center;
+ margin: auto;
+}
+
+.dialPadKeys {
+ float: left;
+ width: 47px;
+ height: 47px;
+ font-size: 32px;
+ text-align: center;
+ color: #ffffff;
+ text-decoration: none;
+ background: rgba(64, 98, 138, 0.15);
+ border: 1px inset rgba(100, 100, 100, 0.25);
+ cursor: default;
+ line-height: 47px;
+}
+
+.dialPadKeys:hover {
+ background: rgba(80, 122, 172, 0.5);
+}
+
+.dialPadButtons {
+ float: left;
+ width: 63.2px;
+ height: 63.2px;
+ text-align: center;
+ color: #ffffff;
+ text-decoration: none;
+ background: rgba(64, 98, 138, 0.15);
+ border: 1px inset rgba(100, 100, 100, 0.25);
+ padding: 0 0 4px 0;
+ cursor: default;
+ margin-bottom: 25px;
+}
+
+.dialPadButtons:hover {
+ background: rgba(80, 122, 172, 0.5);
+ font-size: 13px;
+
+}
+
+.dialPadAddress {
+ float: left;
+ width: 192px;
+ height: 18px;
+ background: rgba(64, 98, 138, 0.15);
+ color: #ffffff;
+ border-left: 1px inset #40628a;
+ border-top: 1px inset #40628a;
+ border-bottom: 1px inset #40628a;
+
+}
+
+.dialPadAddress:hover{
+ background: rgba(80, 122, 172, 0.5);
+}
+
+.dialPadClear {
+ float: left;
+ width: 19%;
+ height: 18px;
+ background: rgba(64, 98, 138, 0.15);
+ color: #ffffff;
+ border-right: 1px inset #40628a;
+ border-top: 1px inset #40628a;
+ border-bottom: 1px inset #40628a;
+}
+
+.dialPadClear:hover{
+ background: rgba(80, 122, 172, 0.5);
}
\ No newline at end of file
diff --git a/nano/images/nanomap_z1.png b/nano/images/nanomap_z1.png
index f67a0fad68..e4a045bf82 100644
Binary files a/nano/images/nanomap_z1.png and b/nano/images/nanomap_z1.png differ
diff --git a/nano/images/pills32.png b/nano/images/pills32.png
new file mode 100644
index 0000000000..61459093c1
Binary files /dev/null and b/nano/images/pills32.png differ
diff --git a/nano/images/source/uiIcons64.xcf b/nano/images/source/uiIcons64.xcf
new file mode 100644
index 0000000000..c167e3b686
Binary files /dev/null and b/nano/images/source/uiIcons64.xcf differ
diff --git a/nano/images/uiIcons16.png b/nano/images/uiIcons16.png
index 7257f307ec..2017c88d6c 100644
Binary files a/nano/images/uiIcons16.png and b/nano/images/uiIcons16.png differ
diff --git a/nano/images/uiIcons64.png b/nano/images/uiIcons64.png
new file mode 100644
index 0000000000..b58eb78f62
Binary files /dev/null and b/nano/images/uiIcons64.png differ
diff --git a/nano/js/libraries-old.min.js b/nano/js/libraries-old.min.js
new file mode 100644
index 0000000000..fabe4e7dc5
--- /dev/null
+++ b/nano/js/libraries-old.min.js
@@ -0,0 +1 @@
+(function(e,t){function H(e){var t=e.length,n=w.type(e);if(w.isWindow(e)){return false}if(e.nodeType===1&&t){return true}return n==="array"||n!=="function"&&(t===0||typeof t==="number"&&t>0&&t-1 in e)}function j(e){var t=B[e]={};w.each(e.match(S)||[],function(e,n){t[n]=true});return t}function q(e,n,r,i){if(!w.acceptData(e)){return}var s,o,u=w.expando,a=e.nodeType,f=a?w.cache:e,l=a?e[u]:e[u]&&u;if((!l||!f[l]||!i&&!f[l].data)&&r===t&&typeof n==="string"){return}if(!l){if(a){l=e[u]=c.pop()||w.guid++}else{l=u}}if(!f[l]){f[l]=a?{}:{toJSON:w.noop}}if(typeof n==="object"||typeof n==="function"){if(i){f[l]=w.extend(f[l],n)}else{f[l].data=w.extend(f[l].data,n)}}o=f[l];if(!i){if(!o.data){o.data={}}o=o.data}if(r!==t){o[w.camelCase(n)]=r}if(typeof n==="string"){s=o[n];if(s==null){s=o[w.camelCase(n)]}}else{s=o}return s}function R(e,t,n){if(!w.acceptData(e)){return}var r,i,s=e.nodeType,o=s?w.cache:e,u=s?e[w.expando]:w.expando;if(!o[u]){return}if(t){r=n?o[u]:o[u].data;if(r){if(!w.isArray(t)){if(t in r){t=[t]}else{t=w.camelCase(t);if(t in r){t=[t]}else{t=t.split(" ")}}}else{t=t.concat(w.map(t,w.camelCase))}i=t.length;while(i--){delete r[t[i]]}if(n?!z(r):!w.isEmptyObject(r)){return}}}if(!n){delete o[u].data;if(!z(o[u])){return}}if(s){w.cleanData([e],true)}else if(w.support.deleteExpando||o!=o.window){delete o[u]}else{o[u]=null}}function U(e,n,r){if(r===t&&e.nodeType===1){var i="data-"+n.replace(I,"-$1").toLowerCase();r=e.getAttribute(i);if(typeof r==="string"){try{r=r==="true"?true:r==="false"?false:r==="null"?null:+r+""===r?+r:F.test(r)?w.parseJSON(r):r}catch(s){}w.data(e,n,r)}else{r=t}}return r}function z(e){var t;for(t in e){if(t==="data"&&w.isEmptyObject(e[t])){continue}if(t!=="toJSON"){return false}}return true}function it(){return true}function st(){return false}function ot(){try{return o.activeElement}catch(e){}}function ct(e,t){do{e=e[t]}while(e&&e.nodeType!==1);return e}function ht(e,t,n){if(w.isFunction(t)){return w.grep(e,function(e,r){return!!t.call(e,r,e)!==n})}if(t.nodeType){return w.grep(e,function(e){return e===t!==n})}if(typeof t==="string"){if(ut.test(t)){return w.filter(t,e,n)}t=w.filter(t,e)}return w.grep(e,function(e){return w.inArray(e,t)>=0!==n})}function pt(e){var t=dt.split("|"),n=e.createDocumentFragment();if(n.createElement){while(t.length){n.createElement(t.pop())}}return n}function Mt(e,t){return w.nodeName(e,"table")&&w.nodeName(t.nodeType===1?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function _t(e){e.type=(w.find.attr(e,"type")!==null)+"/"+e.type;return e}function Dt(e){var t=Ct.exec(e.type);if(t){e.type=t[1]}else{e.removeAttribute("type")}return e}function Pt(e,t){var n,r=0;for(;(n=e[r])!=null;r++){w._data(n,"globalEval",!t||w._data(t[r],"globalEval"))}}function Ht(e,t){if(t.nodeType!==1||!w.hasData(e)){return}var n,r,i,s=w._data(e),o=w._data(t,s),u=s.events;if(u){delete o.handle;o.events={};for(n in u){for(r=0,i=u[n].length;r ").css("cssText","display:block !important")).appendTo(t.documentElement);t=(It[0].contentWindow||It[0].contentDocument).document;t.write("");t.close();n=fn(e,t);It.detach()}Qt[e]=n}return n}function fn(e,t){var n=w(t.createElement(e)).appendTo(t.body),r=w.css(n[0],"display");n.remove();return r}function vn(e,t,n,r){var i;if(w.isArray(t)){w.each(t,function(t,i){if(n||cn.test(e)){r(e,i)}else{vn(e+"["+(typeof i==="object"?t:"")+"]",i,n,r)}})}else if(!n&&w.type(t)==="object"){for(i in t){vn(e+"["+i+"]",t[i],n,r)}}else{r(e,t)}}function _n(e){return function(t,n){if(typeof t!=="string"){n=t;t="*"}var r,i=0,s=t.toLowerCase().match(S)||[];if(w.isFunction(n)){while(r=s[i++]){if(r[0]==="+"){r=r.slice(1)||"*";(e[r]=e[r]||[]).unshift(n)}else{(e[r]=e[r]||[]).push(n)}}}}}function Dn(e,t,n,r){function o(u){var a;i[u]=true;w.each(e[u]||[],function(e,u){var f=u(t,n,r);if(typeof f==="string"&&!s&&!i[f]){t.dataTypes.unshift(f);o(f);return false}else if(s){return!(a=f)}});return a}var i={},s=e===An;return o(t.dataTypes[0])||!i["*"]&&o("*")}function Pn(e,n){var r,i,s=w.ajaxSettings.flatOptions||{};for(i in n){if(n[i]!==t){(s[i]?e:r||(r={}))[i]=n[i]}}if(r){w.extend(true,e,r)}return e}function Hn(e,n,r){var i,s,o,u,a=e.contents,f=e.dataTypes;while(f[0]==="*"){f.shift();if(s===t){s=e.mimeType||n.getResponseHeader("Content-Type")}}if(s){for(u in a){if(a[u]&&a[u].test(s)){f.unshift(u);break}}}if(f[0]in r){o=f[0]}else{for(u in r){if(!f[0]||e.converters[u+" "+f[0]]){o=u;break}if(!i){i=u}}o=o||i}if(o){if(o!==f[0]){f.unshift(o)}return r[o]}}function Bn(e,t,n,r){var i,s,o,u,a,f={},l=e.dataTypes.slice();if(l[1]){for(o in e.converters){f[o.toLowerCase()]=e.converters[o]}}s=l.shift();while(s){if(e.responseFields[s]){n[e.responseFields[s]]=t}if(!a&&r&&e.dataFilter){t=e.dataFilter(t,e.dataType)}a=s;s=l.shift();if(s){if(s==="*"){s=a}else if(a!=="*"&&a!==s){o=f[a+" "+s]||f["* "+s];if(!o){for(i in f){u=i.split(" ");if(u[1]===s){o=f[a+" "+u[0]]||f["* "+u[0]];if(o){if(o===true){o=f[i]}else if(f[i]!==true){s=u[0];l.unshift(u[1])}break}}}}if(o!==true){if(o&&e["throws"]){t=o(t)}else{try{t=o(t)}catch(c){return{state:"parsererror",error:o?c:"No conversion from "+a+" to "+s}}}}}}}return{state:"success",data:t}}function zn(){try{return new e.XMLHttpRequest}catch(t){}}function Wn(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}function Yn(){setTimeout(function(){Xn=t});return Xn=w.now()}function Zn(e,t,n){var r,i=(Gn[t]||[]).concat(Gn["*"]),s=0,o=i.length;for(;s)[^>]*|#([\w-]*))$/,N=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,C=/^[\],:{}\s]*$/,k=/(?:^|:|,)(?:\s*\[)+/g,L=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,A=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,O=/^-ms-/,M=/-([\da-z])/gi,_=function(e,t){return t.toUpperCase()},D=function(e){if(o.addEventListener||e.type==="load"||o.readyState==="complete"){P();w.ready()}},P=function(){if(o.addEventListener){o.removeEventListener("DOMContentLoaded",D,false);e.removeEventListener("load",D,false)}else{o.detachEvent("onreadystatechange",D);e.detachEvent("onload",D)}};w.fn=w.prototype={jquery:h,constructor:w,init:function(e,n,r){var i,s;if(!e){return this}if(typeof e==="string"){if(e.charAt(0)==="<"&&e.charAt(e.length-1)===">"&&e.length>=3){i=[null,e,null]}else{i=T.exec(e)}if(i&&(i[1]||!n)){if(i[1]){n=n instanceof w?n[0]:n;w.merge(this,w.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:o,true));if(N.test(i[1])&&w.isPlainObject(n)){for(i in n){if(w.isFunction(this[i])){this[i](n[i])}else{this.attr(i,n[i])}}}return this}else{s=o.getElementById(i[2]);if(s&&s.parentNode){if(s.id!==i[2]){return r.find(e)}this.length=1;this[0]=s}this.context=o;this.selector=e;return this}}else if(!n||n.jquery){return(n||r).find(e)}else{return this.constructor(n).find(e)}}else if(e.nodeType){this.context=this[0]=e;this.length=1;return this}else if(w.isFunction(e)){return r.ready(e)}if(e.selector!==t){this.selector=e.selector;this.context=e.context}return w.makeArray(e,this)},selector:"",length:0,toArray:function(){return v.call(this)},get:function(e){return e==null?this.toArray():e<0?this[this.length+e]:this[e]},pushStack:function(e){var t=w.merge(this.constructor(),e);t.prevObject=this;t.context=this.context;return t},each:function(e,t){return w.each(this,e,t)},ready:function(e){w.ready.promise().done(e);return this},slice:function(){return this.pushStack(v.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n0){return}n.resolveWith(o,[w]);if(w.fn.trigger){w(o).trigger("ready").off("ready")}},isFunction:function(e){return w.type(e)==="function"},isArray:Array.isArray||function(e){return w.type(e)==="array"},isWindow:function(e){return e!=null&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){if(e==null){return String(e)}return typeof e==="object"||typeof e==="function"?l[g.call(e)]||"object":typeof e},isPlainObject:function(e){var n;if(!e||w.type(e)!=="object"||e.nodeType||w.isWindow(e)){return false}try{if(e.constructor&&!y.call(e,"constructor")&&!y.call(e.constructor.prototype,"isPrototypeOf")){return false}}catch(r){return false}if(w.support.ownLast){for(n in e){return y.call(e,n)}}for(n in e){}return n===t||y.call(e,n)},isEmptyObject:function(e){var t;for(t in e){return false}return true},error:function(e){throw new Error(e)},parseHTML:function(e,t,n){if(!e||typeof e!=="string"){return null}if(typeof t==="boolean"){n=t;t=false}t=t||o;var r=N.exec(e),i=!n&&[];if(r){return[t.createElement(r[1])]}r=w.buildFragment([e],t,i);if(i){w(i).remove()}return w.merge([],r.childNodes)},parseJSON:function(t){if(e.JSON&&e.JSON.parse){return e.JSON.parse(t)}if(t===null){return t}if(typeof t==="string"){t=w.trim(t);if(t){if(C.test(t.replace(L,"@").replace(A,"]").replace(k,""))){return(new Function("return "+t))()}}}w.error("Invalid JSON: "+t)},parseXML:function(n){var r,i;if(!n||typeof n!=="string"){return null}try{if(e.DOMParser){i=new DOMParser;r=i.parseFromString(n,"text/xml")}else{r=new ActiveXObject("Microsoft.XMLDOM");r.async="false";r.loadXML(n)}}catch(s){r=t}if(!r||!r.documentElement||r.getElementsByTagName("parsererror").length){w.error("Invalid XML: "+n)}return r},noop:function(){},globalEval:function(t){if(t&&w.trim(t)){(e.execScript||function(t){e["eval"].call(e,t)})(t)}},camelCase:function(e){return e.replace(O,"ms-").replace(M,_)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,s=e.length,o=H(e);if(n){if(o){for(;is.cacheLength){delete t[e.shift()]}return t[n]=r}var e=[];return t}function at(e){e[b]=true;return e}function ft(e){var t=h.createElement("div");try{return!!e(t)}catch(n){return false}finally{if(t.parentNode){t.parentNode.removeChild(t)}t=null}}function lt(e,t){var n=e.split("|"),r=e.length;while(r--){s.attrHandle[n[r]]=t}}function ct(e,t){var n=t&&e,r=n&&e.nodeType===1&&t.nodeType===1&&(~t.sourceIndex||O)-(~e.sourceIndex||O);if(r){return r}if(n){while(n=n.nextSibling){if(n===t){return-1}}}return e?1:-1}function ht(e){return function(t){var n=t.nodeName.toLowerCase();return n==="input"&&t.type===e}}function pt(e){return function(t){var n=t.nodeName.toLowerCase();return(n==="input"||n==="button")&&t.type===e}}function dt(e){return at(function(t){t=+t;return at(function(n,r){var i,s=e([],n.length,t),o=s.length;while(o--){if(n[i=s[o]]){n[i]=!(r[i]=n[i])}}})})}function vt(){}function mt(e,t){var n,r,i,o,u,a,f,l=N[e+" "];if(l){return t?0:l.slice(0)}u=e;a=[];f=s.preFilter;while(u){if(!n||(r=X.exec(u))){if(r){u=u.slice(r[0].length)||u}a.push(i=[])}n=false;if(r=V.exec(u)){n=r.shift();i.push({value:n,type:r[0].replace(W," ")});u=u.slice(n.length)}for(o in s.filter){if((r=G[o].exec(u))&&(!f[o]||(r=f[o](r)))){n=r.shift();i.push({value:n,type:o,matches:r});u=u.slice(n.length)}}if(!n){break}}return t?u.length:u?ot.error(e):N(e,a).slice(0)}function gt(e){var t=0,n=e.length,r="";for(;t1?function(t,n,r){var i=e.length;while(i--){if(!e[i](t,n,r)){return false}}return true}:e[0]}function wt(e,t,n,r,i){var s,o=[],u=0,a=e.length,f=t!=null;for(;u-1){s[f]=!(o[f]=c)}}}}else{g=wt(g===o?g.splice(d,g.length):g);if(i){i(null,o,g,a)}else{H.apply(o,g)}}})}function St(e){var t,n,r,i=e.length,o=s.relative[e[0].type],u=o||s.relative[" "],a=o?1:0,l=yt(function(e){return e===t},u,true),c=yt(function(e){return j.call(t,e)>-1},u,true),h=[function(e,n,r){return!o&&(r||n!==f)||((t=n).nodeType?l(e,n,r):c(e,n,r))}];for(;a1&&bt(h),a>1&>(e.slice(0,a-1).concat({value:e[a-2].type===" "?"*":""})).replace(W,"$1"),n,a0,o=e.length>0,u=function(u,a,l,c,p){var d,v,m,g=[],y=0,b="0",w=u&&[],E=p!=null,x=f,T=u||o&&s.find["TAG"]("*",p&&a.parentNode||a),N=S+=x==null?1:Math.random()||.1;if(E){f=a!==h&&a;i=n}for(;(d=T[b])!=null;b++){if(o&&d){v=0;while(m=e[v++]){if(m(d,a,l)){c.push(d);break}}if(E){S=N;i=++n}}if(r){if(d=!m&&d){y--}if(u){w.push(d)}}}y+=b;if(r&&b!==y){v=0;while(m=t[v++]){m(w,g,a,l)}if(u){if(y>0){while(b--){if(!(w[b]||g[b])){g[b]=D.call(c)}}}g=wt(g)}H.apply(c,g);if(E&&!u&&g.length>0&&y+t.length>1){ot.uniqueSort(c)}}if(E){S=N;f=x}return w};return r?at(u):u}function Tt(e,t,n){var r=0,i=t.length;for(;r2&&(f=u[0]).type==="ID"&&r.getById&&t.nodeType===9&&d&&s.relative[u[1].type]){t=(s.find["ID"](f.matches[0].replace(rt,it),t)||[])[0];if(!t){return n}e=e.slice(u.shift().value.length)}o=G["needsContext"].test(e)?0:u.length;while(o--){f=u[o];if(s.relative[l=f.type]){break}if(c=s.find[l]){if(i=c(f.matches[0].replace(rt,it),$.test(u[0].type)&&t.parentNode||t)){u.splice(o,1);e=i.length&>(u);if(!e){H.apply(n,i);return n}break}}}}}a(e,h)(i,t,!d,n,$.test(e));return n}var n,r,i,s,o,u,a,f,l,c,h,p,d,v,m,g,y,b="sizzle"+ -(new Date),E=e.document,S=0,x=0,T=ut(),N=ut(),C=ut(),k=false,L=function(e,t){if(e===t){k=true;return 0}return 0},A=typeof t,O=1<<31,M={}.hasOwnProperty,_=[],D=_.pop,P=_.push,H=_.push,B=_.slice,j=_.indexOf||function(e){var t=0,n=this.length;for(;t+~]|"+I+")"+I+"*"),$=new RegExp(I+"*[+~]"),J=new RegExp("="+I+"*([^\\]'\"]*)"+I+"*\\]","g"),K=new RegExp(z),Q=new RegExp("^"+R+"$"),G={ID:new RegExp("^#("+q+")"),CLASS:new RegExp("^\\.("+q+")"),TAG:new RegExp("^("+q.replace("w","w*")+")"),ATTR:new RegExp("^"+U),PSEUDO:new RegExp("^"+z),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+I+"*(even|odd|(([+-]|)(\\d*)n|)"+I+"*(?:([+-]|)"+I+"*(\\d+)|))"+I+"*\\)|)","i"),bool:new RegExp("^(?:"+F+")$","i"),needsContext:new RegExp("^"+I+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+I+"*((?:-\\d)?\\d*)"+I+"*\\)|)(?=[^-]|$)","i")},Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,et=/^(?:input|select|textarea|button)$/i,tt=/^h\d$/i,nt=/'|\\/g,rt=new RegExp("\\\\([\\da-f]{1,6}"+I+"?|("+I+")|.)","ig"),it=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,r&1023|56320)};try{H.apply(_=B.call(E.childNodes),E.childNodes);_[E.childNodes.length].nodeType}catch(st){H={apply:_.length?function(e,t){P.apply(e,B.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]){}e.length=n-1}}}u=ot.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?t.nodeName!=="HTML":false};r=ot.support={};c=ot.setDocument=function(e){var t=e?e.ownerDocument||e:E,n=t.defaultView;if(t===h||t.nodeType!==9||!t.documentElement){return h}h=t;p=t.documentElement;d=!u(t);if(n&&n.attachEvent&&n!==n.top){n.attachEvent("onbeforeunload",function(){c()})}r.attributes=ft(function(e){e.className="i";return!e.getAttribute("className")});r.getElementsByTagName=ft(function(e){e.appendChild(t.createComment(""));return!e.getElementsByTagName("*").length});r.getElementsByClassName=ft(function(e){e.innerHTML="
";e.firstChild.className="i";return e.getElementsByClassName("i").length===2});r.getById=ft(function(e){p.appendChild(e).id=b;return!t.getElementsByName||!t.getElementsByName(b).length});if(r.getById){s.find["ID"]=function(e,t){if(typeof t.getElementById!==A&&d){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}};s.filter["ID"]=function(e){var t=e.replace(rt,it);return function(e){return e.getAttribute("id")===t}}}else{delete s.find["ID"];s.filter["ID"]=function(e){var t=e.replace(rt,it);return function(e){var n=typeof e.getAttributeNode!==A&&e.getAttributeNode("id");return n&&n.value===t}}}s.find["TAG"]=r.getElementsByTagName?function(e,t){if(typeof t.getElementsByTagName!==A){return t.getElementsByTagName(e)}}:function(e,t){var n,r=[],i=0,s=t.getElementsByTagName(e);if(e==="*"){while(n=s[i++]){if(n.nodeType===1){r.push(n)}}return r}return s};s.find["CLASS"]=r.getElementsByClassName&&function(e,t){if(typeof t.getElementsByClassName!==A&&d){return t.getElementsByClassName(e)}};m=[];v=[];if(r.qsa=Y.test(t.querySelectorAll)){ft(function(e){e.innerHTML=" ";if(!e.querySelectorAll("[selected]").length){v.push("\\["+I+"*(?:value|"+F+")")}if(!e.querySelectorAll(":checked").length){v.push(":checked")}});ft(function(e){var n=t.createElement("input");n.setAttribute("type","hidden");e.appendChild(n).setAttribute("t","");if(e.querySelectorAll("[t^='']").length){v.push("[*^$]="+I+"*(?:''|\"\")")}if(!e.querySelectorAll(":enabled").length){v.push(":enabled",":disabled")}e.querySelectorAll("*,:x");v.push(",.*:")})}if(r.matchesSelector=Y.test(g=p.webkitMatchesSelector||p.mozMatchesSelector||p.oMatchesSelector||p.msMatchesSelector)){ft(function(e){r.disconnectedMatch=g.call(e,"div");g.call(e,"[s!='']:x");m.push("!=",z)})}v=v.length&&new RegExp(v.join("|"));m=m.length&&new RegExp(m.join("|"));y=Y.test(p.contains)||p.compareDocumentPosition?function(e,t){var n=e.nodeType===9?e.documentElement:e,r=t&&t.parentNode;return e===r||!!(r&&r.nodeType===1&&(n.contains?n.contains(r):e.compareDocumentPosition&&e.compareDocumentPosition(r)&16))}:function(e,t){if(t){while(t=t.parentNode){if(t===e){return true}}}return false};L=p.compareDocumentPosition?function(e,n){if(e===n){k=true;return 0}var i=n.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(n);if(i){if(i&1||!r.sortDetached&&n.compareDocumentPosition(e)===i){if(e===t||y(E,e)){return-1}if(n===t||y(E,n)){return 1}return l?j.call(l,e)-j.call(l,n):0}return i&4?-1:1}return e.compareDocumentPosition?-1:1}:function(e,n){var r,i=0,s=e.parentNode,o=n.parentNode,u=[e],a=[n];if(e===n){k=true;return 0}else if(!s||!o){return e===t?-1:n===t?1:s?-1:o?1:l?j.call(l,e)-j.call(l,n):0}else if(s===o){return ct(e,n)}r=e;while(r=r.parentNode){u.unshift(r)}r=n;while(r=r.parentNode){a.unshift(r)}while(u[i]===a[i]){i++}return i?ct(u[i],a[i]):u[i]===E?-1:a[i]===E?1:0};return t};ot.matches=function(e,t){return ot(e,null,null,t)};ot.matchesSelector=function(e,t){if((e.ownerDocument||e)!==h){c(e)}t=t.replace(J,"='$1']");if(r.matchesSelector&&d&&(!m||!m.test(t))&&(!v||!v.test(t))){try{var n=g.call(e,t);if(n||r.disconnectedMatch||e.document&&e.document.nodeType!==11){return n}}catch(i){}}return ot(t,h,null,[e]).length>0};ot.contains=function(e,t){if((e.ownerDocument||e)!==h){c(e)}return y(e,t)};ot.attr=function(e,n){if((e.ownerDocument||e)!==h){c(e)}var i=s.attrHandle[n.toLowerCase()],o=i&&M.call(s.attrHandle,n.toLowerCase())?i(e,n,!d):t;return o===t?r.attributes||!d?e.getAttribute(n):(o=e.getAttributeNode(n))&&o.specified?o.value:null:o};ot.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)};ot.uniqueSort=function(e){var t,n=[],i=0,s=0;k=!r.detectDuplicates;l=!r.sortStable&&e.slice(0);e.sort(L);if(k){while(t=e[s++]){if(t===e[s]){i=n.push(s)}}while(i--){e.splice(n[i],1)}}return e};o=ot.getText=function(e){var t,n="",r=0,i=e.nodeType;if(!i){for(;t=e[r];r++){n+=o(t)}}else if(i===1||i===9||i===11){if(typeof e.textContent==="string"){return e.textContent}else{for(e=e.firstChild;e;e=e.nextSibling){n+=o(e)}}}else if(i===3||i===4){return e.nodeValue}return n};s=ot.selectors={cacheLength:50,createPseudo:at,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:true}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:true},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){e[1]=e[1].replace(rt,it);e[3]=(e[4]||e[5]||"").replace(rt,it);if(e[2]==="~="){e[3]=" "+e[3]+" "}return e.slice(0,4)},CHILD:function(e){e[1]=e[1].toLowerCase();if(e[1].slice(0,3)==="nth"){if(!e[3]){ot.error(e[0])}e[4]=+(e[4]?e[5]+(e[6]||1):2*(e[3]==="even"||e[3]==="odd"));e[5]=+(e[7]+e[8]||e[3]==="odd")}else if(e[3]){ot.error(e[0])}return e},PSEUDO:function(e){var n,r=!e[5]&&e[2];if(G["CHILD"].test(e[0])){return null}if(e[3]&&e[4]!==t){e[2]=e[4]}else if(r&&K.test(r)&&(n=mt(r,true))&&(n=r.indexOf(")",r.length-n)-r.length)){e[0]=e[0].slice(0,n);e[2]=r.slice(0,n)}return e.slice(0,3)}},filter:{TAG:function(e){var t=e.replace(rt,it).toLowerCase();return e==="*"?function(){return true}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=T[e+" "];return t||(t=new RegExp("(^|"+I+")"+e+"("+I+"|$)"))&&T(e,function(e){return t.test(typeof e.className==="string"&&e.className||typeof e.getAttribute!==A&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=ot.attr(r,e);if(i==null){return t==="!="}if(!t){return true}i+="";return t==="="?i===n:t==="!="?i!==n:t==="^="?n&&i.indexOf(n)===0:t==="*="?n&&i.indexOf(n)>-1:t==="$="?n&&i.slice(-n.length)===n:t==="~="?(" "+i+" ").indexOf(n)>-1:t==="|="?i===n||i.slice(0,n.length+1)===n+"-":false}},CHILD:function(e,t,n,r,i){var s=e.slice(0,3)!=="nth",o=e.slice(-4)!=="last",u=t==="of-type";return r===1&&i===0?function(e){return!!e.parentNode}:function(t,n,a){var f,l,c,h,p,d,v=s!==o?"nextSibling":"previousSibling",m=t.parentNode,g=u&&t.nodeName.toLowerCase(),y=!a&&!u;if(m){if(s){while(v){c=t;while(c=c[v]){if(u?c.nodeName.toLowerCase()===g:c.nodeType===1){return false}}d=v=e==="only"&&!d&&"nextSibling"}return true}d=[o?m.firstChild:m.lastChild];if(o&&y){l=m[b]||(m[b]={});f=l[e]||[];p=f[0]===S&&f[1];h=f[0]===S&&f[2];c=p&&m.childNodes[p];while(c=++p&&c&&c[v]||(h=p=0)||d.pop()){if(c.nodeType===1&&++h&&c===t){l[e]=[S,p,h];break}}}else if(y&&(f=(t[b]||(t[b]={}))[e])&&f[0]===S){h=f[1]}else{while(c=++p&&c&&c[v]||(h=p=0)||d.pop()){if((u?c.nodeName.toLowerCase()===g:c.nodeType===1)&&++h){if(y){(c[b]||(c[b]={}))[e]=[S,h]}if(c===t){break}}}}h-=i;return h===r||h%r===0&&h/r>=0}}},PSEUDO:function(e,t){var n,r=s.pseudos[e]||s.setFilters[e.toLowerCase()]||ot.error("unsupported pseudo: "+e);if(r[b]){return r(t)}if(r.length>1){n=[e,e,"",t];return s.setFilters.hasOwnProperty(e.toLowerCase())?at(function(e,n){var i,s=r(e,t),o=s.length;while(o--){i=j.call(e,s[o]);e[i]=!(n[i]=s[o])}}):function(e){return r(e,0,n)}}return r}},pseudos:{not:at(function(e){var t=[],n=[],r=a(e.replace(W,"$1"));return r[b]?at(function(e,t,n,i){var s,o=r(e,null,i,[]),u=e.length;while(u--){if(s=o[u]){e[u]=!(t[u]=s)}}}):function(e,i,s){t[0]=e;r(t,null,s,n);return!n.pop()}}),has:at(function(e){return function(t){return ot(e,t).length>0}}),contains:at(function(e){return function(t){return(t.textContent||t.innerText||o(t)).indexOf(e)>-1}}),lang:at(function(e){if(!Q.test(e||"")){ot.error("unsupported lang: "+e)}e=e.replace(rt,it).toLowerCase();return function(t){var n;do{if(n=d?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang")){n=n.toLowerCase();return n===e||n.indexOf(e+"-")===0}}while((t=t.parentNode)&&t.nodeType===1);return false}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===p},focus:function(e){return e===h.activeElement&&(!h.hasFocus||h.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===false},disabled:function(e){return e.disabled===true},checked:function(e){var t=e.nodeName.toLowerCase();return t==="input"&&!!e.checked||t==="option"&&!!e.selected},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling){if(e.nodeName>"@"||e.nodeType===3||e.nodeType===4){return false}}return true},parent:function(e){return!s.pseudos["empty"](e)},header:function(e){return tt.test(e.nodeName)},input:function(e){return et.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return t==="input"&&e.type==="button"||t==="button"},text:function(e){var t;return e.nodeName.toLowerCase()==="input"&&e.type==="text"&&((t=e.getAttribute("type"))==null||t.toLowerCase()===e.type)},first:dt(function(){return[0]}),last:dt(function(e,t){return[t-1]}),eq:dt(function(e,t,n){return[n<0?n+t:n]}),even:dt(function(e,t){var n=0;for(;n=0;){e.push(r)}return e}),gt:dt(function(e,t,n){var r=n<0?n+t:n;for(;++r ";return e.firstChild.getAttribute("href")==="#"})){lt("type|href|height|width",function(e,t,n){if(!n){return e.getAttribute(t,t.toLowerCase()==="type"?1:2)}})}if(!r.attributes||!ft(function(e){e.innerHTML=" ";e.firstChild.setAttribute("value","");return e.firstChild.getAttribute("value")===""})){lt("value",function(e,t,n){if(!n&&e.nodeName.toLowerCase()==="input"){return e.defaultValue}})}if(!ft(function(e){return e.getAttribute("disabled")==null})){lt(F,function(e,t,n){var r;if(!n){return(r=e.getAttributeNode(t))&&r.specified?r.value:e[t]===true?t.toLowerCase():null}})}w.find=ot;w.expr=ot.selectors;w.expr[":"]=w.expr.pseudos;w.unique=ot.uniqueSort;w.text=ot.getText;w.isXMLDoc=ot.isXML;w.contains=ot.contains})(e);var B={};w.Callbacks=function(e){e=typeof e==="string"?B[e]||j(e):w.extend({},e);var n,r,i,s,o,u,a=[],f=!e.once&&[],l=function(t){r=e.memory&&t;i=true;o=u||0;u=0;s=a.length;n=true;for(;a&&o-1){a.splice(r,1);if(n){if(r<=s){s--}if(r<=o){o--}}}})}return this},has:function(e){return e?w.inArray(e,a)>-1:!!(a&&a.length)},empty:function(){a=[];s=0;return this},disable:function(){a=f=r=t;return this},disabled:function(){return!a},lock:function(){f=t;if(!r){c.disable()}return this},locked:function(){return!f},fireWith:function(e,t){if(a&&(!i||f)){t=t||[];t=[e,t.slice?t.slice():t];if(n){f.push(t)}else{l(t)}}return this},fire:function(){c.fireWith(this,arguments);return this},fired:function(){return!!i}};return c};w.extend({Deferred:function(e){var t=[["resolve","done",w.Callbacks("once memory"),"resolved"],["reject","fail",w.Callbacks("once memory"),"rejected"],["notify","progress",w.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){i.done(arguments).fail(arguments);return this},then:function(){var e=arguments;return w.Deferred(function(n){w.each(t,function(t,s){var o=s[0],u=w.isFunction(e[t])&&e[t];i[s[1]](function(){var e=u&&u.apply(this,arguments);if(e&&w.isFunction(e.promise)){e.promise().done(n.resolve).fail(n.reject).progress(n.notify)}else{n[o+"With"](this===r?n.promise():this,u?[e]:arguments)}})});e=null}).promise()},promise:function(e){return e!=null?w.extend(e,r):r}},i={};r.pipe=r.then;w.each(t,function(e,s){var o=s[2],u=s[3];r[s[1]]=o.add;if(u){o.add(function(){n=u},t[e^1][2].disable,t[2][2].lock)}i[s[0]]=function(){i[s[0]+"With"](this===i?r:this,arguments);return this};i[s[0]+"With"]=o.fireWith});r.promise(i);if(e){e.call(i,i)}return i},when:function(e){var t=0,n=v.call(arguments),r=n.length,i=r!==1||e&&w.isFunction(e.promise)?r:0,s=i===1?e:w.Deferred(),o=function(e,t,n){return function(r){t[e]=this;n[e]=arguments.length>1?v.call(arguments):r;if(n===u){s.notifyWith(t,n)}else if(!--i){s.resolveWith(t,n)}}},u,a,f;if(r>1){u=new Array(r);a=new Array(r);f=new Array(r);for(;ta ";n=p.getElementsByTagName("*")||[];r=p.getElementsByTagName("a")[0];if(!r||!r.style||!n.length){return t}u=o.createElement("select");f=u.appendChild(o.createElement("option"));s=p.getElementsByTagName("input")[0];r.style.cssText="top:1px;float:left;opacity:.5";t.getSetAttribute=p.className!=="t";t.leadingWhitespace=p.firstChild.nodeType===3;t.tbody=!p.getElementsByTagName("tbody").length;t.htmlSerialize=!!p.getElementsByTagName("link").length;t.style=/top/.test(r.getAttribute("style"));t.hrefNormalized=r.getAttribute("href")==="/a";t.opacity=/^0.5/.test(r.style.opacity);t.cssFloat=!!r.style.cssFloat;t.checkOn=!!s.value;t.optSelected=f.selected;t.enctype=!!o.createElement("form").enctype;t.html5Clone=o.createElement("nav").cloneNode(true).outerHTML!=="<:nav>";t.inlineBlockNeedsLayout=false;t.shrinkWrapBlocks=false;t.pixelPosition=false;t.deleteExpando=true;t.noCloneEvent=true;t.reliableMarginRight=true;t.boxSizingReliable=true;s.checked=true;t.noCloneChecked=s.cloneNode(true).checked;u.disabled=true;t.optDisabled=!f.disabled;try{delete p.test}catch(d){t.deleteExpando=false}s=o.createElement("input");s.setAttribute("value","");t.input=s.getAttribute("value")==="";s.value="t";s.setAttribute("type","radio");t.radioValue=s.value==="t";s.setAttribute("checked","t");s.setAttribute("name","t");a=o.createDocumentFragment();a.appendChild(s);t.appendChecked=s.checked;t.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;if(p.attachEvent){p.attachEvent("onclick",function(){t.noCloneEvent=false});p.cloneNode(true).click()}for(h in{submit:true,change:true,focusin:true}){p.setAttribute(l="on"+h,"t");t[h+"Bubbles"]=l in e||p.attributes[l].expando===false}p.style.backgroundClip="content-box";p.cloneNode(true).style.backgroundClip="";t.clearCloneStyle=p.style.backgroundClip==="content-box";for(h in w(t)){break}t.ownLast=h!=="0";w(function(){var n,r,s,u="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",a=o.getElementsByTagName("body")[0];if(!a){return}n=o.createElement("div");n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px";a.appendChild(n).appendChild(p);p.innerHTML="";s=p.getElementsByTagName("td");s[0].style.cssText="padding:0;margin:0;border:0;display:none";c=s[0].offsetHeight===0;s[0].style.display="";s[1].style.display="none";t.reliableHiddenOffsets=c&&s[0].offsetHeight===0;p.innerHTML="";p.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;";w.swap(a,a.style.zoom!=null?{zoom:1}:{},function(){t.boxSizing=p.offsetWidth===4});if(e.getComputedStyle){t.pixelPosition=(e.getComputedStyle(p,null)||{}).top!=="1%";t.boxSizingReliable=(e.getComputedStyle(p,null)||{width:"4px"}).width==="4px";r=p.appendChild(o.createElement("div"));r.style.cssText=p.style.cssText=u;r.style.marginRight=r.style.width="0";p.style.width="1px";t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)}if(typeof p.style.zoom!==i){p.innerHTML="";p.style.cssText=u+"width:1px;padding:1px;display:inline;zoom:1";t.inlineBlockNeedsLayout=p.offsetWidth===3;p.style.display="block";p.innerHTML="
";p.firstChild.style.width="5px";t.shrinkWrapBlocks=p.offsetWidth!==3;if(t.inlineBlockNeedsLayout){a.style.zoom=1}}a.removeChild(n);n=p=s=r=null});n=u=a=f=r=s=null;return t}({});var F=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,I=/([A-Z])/g;w.extend({cache:{},noData:{applet:true,embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){e=e.nodeType?w.cache[e[w.expando]]:e[w.expando];return!!e&&!z(e)},data:function(e,t,n){return q(e,t,n)},removeData:function(e,t){return R(e,t)},_data:function(e,t,n){return q(e,t,n,true)},_removeData:function(e,t){return R(e,t,true)},acceptData:function(e){if(e.nodeType&&e.nodeType!==1&&e.nodeType!==9){return false}var t=e.nodeName&&w.noData[e.nodeName.toLowerCase()];return!t||t!==true&&e.getAttribute("classid")===t}});w.fn.extend({data:function(e,n){var r,i,s=null,o=0,u=this[0];if(e===t){if(this.length){s=w.data(u);if(u.nodeType===1&&!w._data(u,"parsedAttrs")){r=u.attributes;for(;o1?this.each(function(){w.data(this,e,n)}):u?U(u,e,w.data(u,e)):null},removeData:function(e){return this.each(function(){w.removeData(this,e)})}});w.extend({queue:function(e,t,n){var r;if(e){t=(t||"fx")+"queue";r=w._data(e,t);if(n){if(!r||w.isArray(n)){r=w._data(e,t,w.makeArray(n))}else{r.push(n)}}return r||[]}},dequeue:function(e,t){t=t||"fx";var n=w.queue(e,t),r=n.length,i=n.shift(),s=w._queueHooks(e,t),o=function(){w.dequeue(e,t)};if(i==="inprogress"){i=n.shift();r--}if(i){if(t==="fx"){n.unshift("inprogress")}delete s.stop;i.call(e,o,s)}if(!r&&s){s.empty.fire()}},_queueHooks:function(e,t){var n=t+"queueHooks";return w._data(e,n)||w._data(e,n,{empty:w.Callbacks("once memory").add(function(){w._removeData(e,t+"queue");w._removeData(e,n)})})}});w.fn.extend({queue:function(e,n){var r=2;if(typeof e!=="string"){n=e;e="fx";r--}if(arguments.length1)},removeAttr:function(e){return this.each(function(){w.removeAttr(this,e)})},prop:function(e,t){return w.access(this,w.prop,e,t,arguments.length>1)},removeProp:function(e){e=w.propFix[e]||e;return this.each(function(){try{this[e]=t;delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,s,o=0,u=this.length,a=typeof e==="string"&&e;if(w.isFunction(e)){return this.each(function(t){w(this).addClass(e.call(this,t,this.className))})}if(a){t=(e||"").match(S)||[];for(;o=0){r=r.replace(" "+i+" "," ")}}n.className=e?w.trim(r):""}}}return this},toggleClass:function(e,t){var n=typeof e;if(typeof t==="boolean"&&n==="string"){return t?this.addClass(e):this.removeClass(e)}if(w.isFunction(e)){return this.each(function(n){w(this).toggleClass(e.call(this,n,this.className,t),t)})}return this.each(function(){if(n==="string"){var t,r=0,s=w(this),o=e.match(S)||[];while(t=o[r++]){if(s.hasClass(t)){s.removeClass(t)}else{s.addClass(t)}}}else if(n===i||n==="boolean"){if(this.className){w._data(this,"__className__",this.className)}this.className=this.className||e===false?"":w._data(this,"__className__")||""}})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;n=0){return true}}return false},val:function(e){var n,r,i,s=this[0];if(!arguments.length){if(s){r=w.valHooks[s.type]||w.valHooks[s.nodeName.toLowerCase()];if(r&&"get"in r&&(n=r.get(s,"value"))!==t){return n}n=s.value;return typeof n==="string"?n.replace($,""):n==null?"":n}return}i=w.isFunction(e);return this.each(function(n){var s;if(this.nodeType!==1){return}if(i){s=e.call(this,n,w(this).val())}else{s=e}if(s==null){s=""}else if(typeof s==="number"){s+=""}else if(w.isArray(s)){s=w.map(s,function(e){return e==null?"":e+""})}r=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()];if(!r||!("set"in r)||r.set(this,s,"value")===t){this.value=s}})}});w.extend({valHooks:{option:{get:function(e){var t=w.find.attr(e,"value");return t!=null?t:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,s=e.type==="select-one"||i<0,o=s?null:[],u=s?i+1:r.length,a=i<0?u:s?i:0;for(;a=0){n=true}}if(!n){e.selectedIndex=-1}return s}}},attr:function(e,n,r){var s,o,u=e.nodeType;if(!e||u===3||u===8||u===2){return}if(typeof e.getAttribute===i){return w.prop(e,n,r)}if(u!==1||!w.isXMLDoc(e)){n=n.toLowerCase();s=w.attrHooks[n]||(w.expr.match.bool.test(n)?X:W)}if(r!==t){if(r===null){w.removeAttr(e,n)}else if(s&&"set"in s&&(o=s.set(e,r,n))!==t){return o}else{e.setAttribute(n,r+"");return r}}else if(s&&"get"in s&&(o=s.get(e,n))!==null){return o}else{o=w.find.attr(e,n);return o==null?t:o}},removeAttr:function(e,t){var n,r,i=0,s=t&&t.match(S);if(s&&e.nodeType===1){while(n=s[i++]){r=w.propFix[n]||n;if(w.expr.match.bool.test(n)){if(Y&&G||!Q.test(n)){e[r]=false}else{e[w.camelCase("default-"+n)]=e[r]=false}}else{w.attr(e,n,"")}e.removeAttribute(G?n:r)}}},attrHooks:{type:{set:function(e,t){if(!w.support.radioValue&&t==="radio"&&w.nodeName(e,"input")){var n=e.value;e.setAttribute("type",t);if(n){e.value=n}return t}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(e,n,r){var i,s,o,u=e.nodeType;if(!e||u===3||u===8||u===2){return}o=u!==1||!w.isXMLDoc(e);if(o){n=w.propFix[n]||n;s=w.propHooks[n]}if(r!==t){return s&&"set"in s&&(i=s.set(e,r,n))!==t?i:e[n]=r}else{return s&&"get"in s&&(i=s.get(e,n))!==null?i:e[n]}},propHooks:{tabIndex:{get:function(e){var t=w.find.attr(e,"tabindex");return t?parseInt(t,10):J.test(e.nodeName)||K.test(e.nodeName)&&e.href?0:-1}}}});X={set:function(e,t,n){if(t===false){w.removeAttr(e,n)}else if(Y&&G||!Q.test(n)){e.setAttribute(!G&&w.propFix[n]||n,n)}else{e[w.camelCase("default-"+n)]=e[n]=true}return n}};w.each(w.expr.match.bool.source.match(/\w+/g),function(e,n){var r=w.expr.attrHandle[n]||w.find.attr;w.expr.attrHandle[n]=Y&&G||!Q.test(n)?function(e,n,i){var s=w.expr.attrHandle[n],o=i?t:(w.expr.attrHandle[n]=t)!=r(e,n,i)?n.toLowerCase():null;w.expr.attrHandle[n]=s;return o}:function(e,n,r){return r?t:e[w.camelCase("default-"+n)]?n.toLowerCase():null}});if(!Y||!G){w.attrHooks.value={set:function(e,t,n){if(w.nodeName(e,"input")){e.defaultValue=t}else{return W&&W.set(e,t,n)}}}}if(!G){W={set:function(e,n,r){var i=e.getAttributeNode(r);if(!i){e.setAttributeNode(i=e.ownerDocument.createAttribute(r))}i.value=n+="";return r==="value"||n===e.getAttribute(r)?n:t}};w.expr.attrHandle.id=w.expr.attrHandle.name=w.expr.attrHandle.coords=function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&i.value!==""?i.value:null};w.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&r.specified?r.value:t},set:W.set};w.attrHooks.contenteditable={set:function(e,t,n){W.set(e,t===""?false:t,n)}};w.each(["width","height"],function(e,t){w.attrHooks[t]={set:function(e,n){if(n===""){e.setAttribute(t,"auto");return n}}}})}if(!w.support.hrefNormalized){w.each(["href","src"],function(e,t){w.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}})}if(!w.support.style){w.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}}if(!w.support.optSelected){w.propHooks.selected={get:function(e){var t=e.parentNode;if(t){t.selectedIndex;if(t.parentNode){t.parentNode.selectedIndex}}return null}}}w.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){w.propFix[this.toLowerCase()]=this});if(!w.support.enctype){w.propFix.enctype="encoding"}w.each(["radio","checkbox"],function(){w.valHooks[this]={set:function(e,t){if(w.isArray(t)){return e.checked=w.inArray(w(e).val(),t)>=0}}};if(!w.support.checkOn){w.valHooks[this].get=function(e){return e.getAttribute("value")===null?"on":e.value}}});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;w.event={global:{},add:function(e,n,r,s,o){var u,a,f,l,c,h,p,d,v,m,g,y=w._data(e);if(!y){return}if(r.handler){l=r;r=l.handler;o=l.selector}if(!r.guid){r.guid=w.guid++}if(!(a=y.events)){a=y.events={}}if(!(h=y.handle)){h=y.handle=function(e){return typeof w!==i&&(!e||w.event.triggered!==e.type)?w.event.dispatch.apply(h.elem,arguments):t};h.elem=e}n=(n||"").match(S)||[""];f=n.length;while(f--){u=rt.exec(n[f])||[];v=g=u[1];m=(u[2]||"").split(".").sort();if(!v){continue}c=w.event.special[v]||{};v=(o?c.delegateType:c.bindType)||v;c=w.event.special[v]||{};p=w.extend({type:v,origType:g,data:s,handler:r,guid:r.guid,selector:o,needsContext:o&&w.expr.match.needsContext.test(o),namespace:m.join(".")},l);if(!(d=a[v])){d=a[v]=[];d.delegateCount=0;if(!c.setup||c.setup.call(e,s,m,h)===false){if(e.addEventListener){e.addEventListener(v,h,false)}else if(e.attachEvent){e.attachEvent("on"+v,h)}}}if(c.add){c.add.call(e,p);if(!p.handler.guid){p.handler.guid=r.guid}}if(o){d.splice(d.delegateCount++,0,p)}else{d.push(p)}w.event.global[v]=true}e=null},remove:function(e,t,n,r,i){var s,o,u,a,f,l,c,h,p,d,v,m=w.hasData(e)&&w._data(e);if(!m||!(l=m.events)){return}t=(t||"").match(S)||[""];f=t.length;while(f--){u=rt.exec(t[f])||[];p=v=u[1];d=(u[2]||"").split(".").sort();if(!p){for(p in l){w.event.remove(e,p+t[f],n,r,true)}continue}c=w.event.special[p]||{};p=(r?c.delegateType:c.bindType)||p;h=l[p]||[];u=u[2]&&new RegExp("(^|\\.)"+d.join("\\.(?:.*\\.|)")+"(\\.|$)");a=s=h.length;while(s--){o=h[s];if((i||v===o.origType)&&(!n||n.guid===o.guid)&&(!u||u.test(o.namespace))&&(!r||r===o.selector||r==="**"&&o.selector)){h.splice(s,1);if(o.selector){h.delegateCount--}if(c.remove){c.remove.call(e,o)}}}if(a&&!h.length){if(!c.teardown||c.teardown.call(e,d,m.handle)===false){w.removeEvent(e,p,m.handle)}delete l[p]}}if(w.isEmptyObject(l)){delete m.handle;w._removeData(e,"events")}},trigger:function(n,r,i,s){var u,a,f,l,c,h,p,d=[i||o],v=y.call(n,"type")?n.type:n,m=y.call(n,"namespace")?n.namespace.split("."):[];f=h=i=i||o;if(i.nodeType===3||i.nodeType===8){return}if(nt.test(v+w.event.triggered)){return}if(v.indexOf(".")>=0){m=v.split(".");v=m.shift();m.sort()}a=v.indexOf(":")<0&&"on"+v;n=n[w.expando]?n:new w.Event(v,typeof n==="object"&&n);n.isTrigger=s?2:3;n.namespace=m.join(".");n.namespace_re=n.namespace?new RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null;n.result=t;if(!n.target){n.target=i}r=r==null?[n]:w.makeArray(r,[n]);c=w.event.special[v]||{};if(!s&&c.trigger&&c.trigger.apply(i,r)===false){return}if(!s&&!c.noBubble&&!w.isWindow(i)){l=c.delegateType||v;if(!nt.test(l+v)){f=f.parentNode}for(;f;f=f.parentNode){d.push(f);h=f}if(h===(i.ownerDocument||o)){d.push(h.defaultView||h.parentWindow||e)}}p=0;while((f=d[p++])&&!n.isPropagationStopped()){n.type=p>1?l:c.bindType||v;u=(w._data(f,"events")||{})[n.type]&&w._data(f,"handle");if(u){u.apply(f,r)}u=a&&f[a];if(u&&w.acceptData(f)&&u.apply&&u.apply(f,r)===false){n.preventDefault()}}n.type=v;if(!s&&!n.isDefaultPrevented()){if((!c._default||c._default.apply(d.pop(),r)===false)&&w.acceptData(i)){if(a&&i[v]&&!w.isWindow(i)){h=i[a];if(h){i[a]=null}w.event.triggered=v;try{i[v]()}catch(g){}w.event.triggered=t;if(h){i[a]=h}}}}return n.result},dispatch:function(e){e=w.event.fix(e);var n,r,i,s,o,u=[],a=v.call(arguments),f=(w._data(this,"events")||{})[e.type]||[],l=w.event.special[e.type]||{};a[0]=e;e.delegateTarget=this;if(l.preDispatch&&l.preDispatch.call(this,e)===false){return}u=w.event.handlers.call(this,e,f);n=0;while((s=u[n++])&&!e.isPropagationStopped()){e.currentTarget=s.elem;o=0;while((i=s.handlers[o++])&&!e.isImmediatePropagationStopped()){if(!e.namespace_re||e.namespace_re.test(i.namespace)){e.handleObj=i;e.data=i.data;r=((w.event.special[i.origType]||{}).handle||i.handler).apply(s.elem,a);if(r!==t){if((e.result=r)===false){e.preventDefault();e.stopPropagation()}}}}}if(l.postDispatch){l.postDispatch.call(this,e)}return e.result},handlers:function(e,n){var r,i,s,o,u=[],a=n.delegateCount,f=e.target;if(a&&f.nodeType&&(!e.button||e.type!=="click")){for(;f!=this;f=f.parentNode||this){if(f.nodeType===1&&(f.disabled!==true||e.type!=="click")){s=[];for(o=0;o=0:w.find(r,this,null,[f]).length}if(s[r]){s.push(i)}}if(s.length){u.push({elem:f,handlers:s})}}}}if(a1?w.unique(n):n);n.selector=this.selector?this.selector+" "+e:e;return n},has:function(e){var t,n=w(e,this),r=n.length;return this.filter(function(){for(t=0;t-1:n.nodeType===1&&w.find.matchesSelector(n,e))){n=s.push(n);break}}}return this.pushStack(s.length>1?w.unique(s):s)},index:function(e){if(!e){return this[0]&&this[0].parentNode?this.first().prevAll().length:-1}if(typeof e==="string"){return w.inArray(this[0],w(e))}return w.inArray(e.jquery?e[0]:e,this)},add:function(e,t){var n=typeof e==="string"?w(e,t):w.makeArray(e&&e.nodeType?[e]:e),r=w.merge(this.get(),n);return this.pushStack(w.unique(r))},addBack:function(e){return this.add(e==null?this.prevObject:this.prevObject.filter(e))}});w.each({parent:function(e){var t=e.parentNode;return t&&t.nodeType!==11?t:null},parents:function(e){return w.dir(e,"parentNode")},parentsUntil:function(e,t,n){return w.dir(e,"parentNode",n)},next:function(e){return ct(e,"nextSibling")},prev:function(e){return ct(e,"previousSibling")},nextAll:function(e){return w.dir(e,"nextSibling")},prevAll:function(e){return w.dir(e,"previousSibling")},nextUntil:function(e,t,n){return w.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return w.dir(e,"previousSibling",n)},siblings:function(e){return w.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return w.sibling(e.firstChild)},contents:function(e){return w.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:w.merge([],e.childNodes)}},function(e,t){w.fn[e]=function(n,r){var i=w.map(this,t,n);if(e.slice(-5)!=="Until"){r=n}if(r&&typeof r==="string"){i=w.filter(r,i)}if(this.length>1){if(!lt[e]){i=w.unique(i)}if(at.test(e)){i=i.reverse()}}return this.pushStack(i)}});w.extend({filter:function(e,t,n){var r=t[0];if(n){e=":not("+e+")"}return t.length===1&&r.nodeType===1?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,function(e){return e.nodeType===1}))},dir:function(e,n,r){var i=[],s=e[n];while(s&&s.nodeType!==9&&(r===t||s.nodeType!==1||!w(s).is(r))){if(s.nodeType===1){i.push(s)}s=s[n]}return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling){if(e.nodeType===1&&e!==t){n.push(e)}}return n}});var dt="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|"+"header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",vt=/ jQuery\d+="(?:null|\d+)"/g,mt=new RegExp("<(?:"+dt+")[\\s/>]","i"),gt=/^\s+/,yt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,wt=/\s*$/g,Lt={option:[1,""," "],legend:[1,""," "],area:[1,""," "],param:[1,""," "],thead:[1,""],tr:[2,""],col:[2,""],td:[3,""],_default:w.support.htmlSerialize?[0,"",""]:[1,"X","
"]},At=pt(o),Ot=At.appendChild(o.createElement("div"));Lt.optgroup=Lt.option;Lt.tbody=Lt.tfoot=Lt.colgroup=Lt.caption=Lt.thead;Lt.th=Lt.td;w.fn.extend({text:function(e){return w.access(this,function(e){return e===t?w.text(this):this.empty().append((this[0]&&this[0].ownerDocument||o).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var t=Mt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var t=Mt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){if(this.parentNode){this.parentNode.insertBefore(e,this)}})},after:function(){return this.domManip(arguments,function(e){if(this.parentNode){this.parentNode.insertBefore(e,this.nextSibling)}})},remove:function(e,t){var n,r=e?w.filter(e,this):this,i=0;for(;(n=r[i])!=null;i++){if(!t&&n.nodeType===1){w.cleanData(jt(n))}if(n.parentNode){if(t&&w.contains(n.ownerDocument,n)){Pt(jt(n,"script"))}n.parentNode.removeChild(n)}}return this},empty:function(){var e,t=0;for(;(e=this[t])!=null;t++){if(e.nodeType===1){w.cleanData(jt(e,false))}while(e.firstChild){e.removeChild(e.firstChild)}if(e.options&&w.nodeName(e,"select")){e.options.length=0}}return this},clone:function(e,t){e=e==null?false:e;t=t==null?e:t;return this.map(function(){return w.clone(this,e,t)})},html:function(e){return w.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t){return n.nodeType===1?n.innerHTML.replace(vt,""):t}if(typeof e==="string"&&!St.test(e)&&(w.support.htmlSerialize||!mt.test(e))&&(w.support.leadingWhitespace||!gt.test(e))&&!Lt[(bt.exec(e)||["",""])[1].toLowerCase()]){e=e.replace(yt,"<$1>$2>");try{for(;r")){s=e.cloneNode(true)}else{Ot.innerHTML=e.outerHTML;Ot.removeChild(s=Ot.firstChild)}if((!w.support.noCloneEvent||!w.support.noCloneChecked)&&(e.nodeType===1||e.nodeType===11)&&!w.isXMLDoc(e)){r=jt(s);u=jt(e);for(o=0;(i=u[o])!=null;++o){if(r[o]){Bt(i,r[o])}}}if(t){if(n){u=u||jt(e);r=r||jt(s);for(o=0;(i=u[o])!=null;o++){Ht(i,r[o])}}else{Ht(e,s)}}r=jt(s,"script");if(r.length>0){Pt(r,!a&&jt(e,"script"))}r=u=i=null;return s},buildFragment:function(e,t,n,r){var i,s,o,u,a,f,l,c=e.length,h=pt(t),p=[],d=0;for(;d$2>")+l[2];i=l[0];while(i--){u=u.lastChild}if(!w.support.leadingWhitespace&>.test(s)){p.push(t.createTextNode(gt.exec(s)[0]))}if(!w.support.tbody){s=a==="table"&&!wt.test(s)?u.firstChild:l[1]===""&&!wt.test(s)?u:0;i=s&&s.childNodes.length;while(i--){if(w.nodeName(f=s.childNodes[i],"tbody")&&!f.childNodes.length){s.removeChild(f)}}}w.merge(p,u.childNodes);u.textContent="";while(u.firstChild){u.removeChild(u.firstChild)}u=h.lastChild}}}if(u){h.removeChild(u)}if(!w.support.appendChecked){w.grep(jt(p,"input"),Ft)}d=0;while(s=p[d++]){if(r&&w.inArray(s,r)!==-1){continue}o=w.contains(s.ownerDocument,s);u=jt(h.appendChild(s),"script");if(o){Pt(u)}if(n){i=0;while(s=u[i++]){if(Nt.test(s.type||"")){n.push(s)}}}}u=null;return h},cleanData:function(e,t){var n,r,s,o,u=0,a=w.expando,f=w.cache,l=w.support.deleteExpando,h=w.event.special;for(;(n=e[u])!=null;u++){if(t||w.acceptData(n)){s=n[a];o=s&&f[s];if(o){if(o.events){for(r in o.events){if(h[r]){w.event.remove(n,r)}else{w.removeEvent(n,r,o.handle)}}}if(f[s]){delete f[s];if(l){delete n[a]}else if(typeof n.removeAttribute!==i){n.removeAttribute(a)}else{n[a]=null}c.push(s)}}}}},_evalUrl:function(e){return w.ajax({url:e,type:"GET",dataType:"script",async:false,global:false,"throws":true})}});w.fn.extend({wrapAll:function(e){if(w.isFunction(e)){return this.each(function(t){w(this).wrapAll(e.call(this,t))})}if(this[0]){var t=w(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){t.insertBefore(this[0])}t.map(function(){var e=this;while(e.firstChild&&e.firstChild.nodeType===1){e=e.firstChild}return e}).append(this)}return this},wrapInner:function(e){if(w.isFunction(e)){return this.each(function(t){w(this).wrapInner(e.call(this,t))})}return this.each(function(){var t=w(this),n=t.contents();if(n.length){n.wrapAll(e)}else{t.append(e)}})},wrap:function(e){var t=w.isFunction(e);return this.each(function(n){w(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){if(!w.nodeName(this,"body")){w(this).replaceWith(this.childNodes)}}).end()}});var It,qt,Rt,Ut=/alpha\([^)]*\)/i,zt=/opacity\s*=\s*([^)]*)/,Wt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Vt=/^margin/,$t=new RegExp("^("+E+")(.*)$","i"),Jt=new RegExp("^("+E+")(?!px)[a-z%]+$","i"),Kt=new RegExp("^([+-])=("+E+")","i"),Qt={BODY:"block"},Gt={position:"absolute",visibility:"hidden",display:"block"},Yt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];w.fn.extend({css:function(e,n){return w.access(this,function(e,n,r){var i,s,o={},u=0;if(w.isArray(n)){s=qt(e);i=n.length;for(;u1)},show:function(){return rn(this,true)},hide:function(){return rn(this)},toggle:function(e){if(typeof e==="boolean"){return e?this.show():this.hide()}return this.each(function(){if(nn(this)){w(this).show()}else{w(this).hide()}})}});w.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Rt(e,"opacity");return n===""?"1":n}}}},cssNumber:{columnCount:true,fillOpacity:true,fontWeight:true,lineHeight:true,opacity:true,order:true,orphans:true,widows:true,zIndex:true,zoom:true},cssProps:{"float":w.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(!e||e.nodeType===3||e.nodeType===8||!e.style){return}var s,o,u,a=w.camelCase(n),f=e.style;n=w.cssProps[a]||(w.cssProps[a]=tn(f,a));u=w.cssHooks[n]||w.cssHooks[a];if(r!==t){o=typeof r;if(o==="string"&&(s=Kt.exec(r))){r=(s[1]+1)*s[2]+parseFloat(w.css(e,n));o="number"}if(r==null||o==="number"&&isNaN(r)){return}if(o==="number"&&!w.cssNumber[a]){r+="px"}if(!w.support.clearCloneStyle&&r===""&&n.indexOf("background")===0){f[n]="inherit"}if(!u||!("set"in u)||(r=u.set(e,r,i))!==t){try{f[n]=r}catch(l){}}}else{if(u&&"get"in u&&(s=u.get(e,false,i))!==t){return s}return f[n]}},css:function(e,n,r,i){var s,o,u,a=w.camelCase(n);n=w.cssProps[a]||(w.cssProps[a]=tn(e.style,a));u=w.cssHooks[n]||w.cssHooks[a];if(u&&"get"in u){o=u.get(e,true,r)}if(o===t){o=Rt(e,n,i)}if(o==="normal"&&n in Yt){o=Yt[n]}if(r===""||r){s=parseFloat(o);return r===true||w.isNumeric(s)?s||0:o}return o}});if(e.getComputedStyle){qt=function(t){return e.getComputedStyle(t,null)};Rt=function(e,n,r){var i,s,o,u=r||qt(e),a=u?u.getPropertyValue(n)||u[n]:t,f=e.style;if(u){if(a===""&&!w.contains(e.ownerDocument,e)){a=w.style(e,n)}if(Jt.test(a)&&Vt.test(n)){i=f.width;s=f.minWidth;o=f.maxWidth;f.minWidth=f.maxWidth=f.width=a;a=u.width;f.width=i;f.minWidth=s;f.maxWidth=o}}return a}}else if(o.documentElement.currentStyle){qt=function(e){return e.currentStyle};Rt=function(e,n,r){var i,s,o,u=r||qt(e),a=u?u[n]:t,f=e.style;if(a==null&&f&&f[n]){a=f[n]}if(Jt.test(a)&&!Wt.test(n)){i=f.left;s=e.runtimeStyle;o=s&&s.left;if(o){s.left=e.currentStyle.left}f.left=n==="fontSize"?"1em":a;a=f.pixelLeft+"px";f.left=i;if(o){s.left=o}}return a===""?"auto":a}}w.each(["height","width"],function(e,t){w.cssHooks[t]={get:function(e,n,r){if(n){return e.offsetWidth===0&&Xt.test(w.css(e,"display"))?w.swap(e,Gt,function(){return un(e,t,r)}):un(e,t,r)}},set:function(e,n,r){var i=r&&qt(e);return sn(e,n,r?on(e,t,r,w.support.boxSizing&&w.css(e,"boxSizing",false,i)==="border-box",i):0)}}});if(!w.support.opacity){w.cssHooks.opacity={get:function(e,t){return zt.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=w.isNumeric(t)?"alpha(opacity="+t*100+")":"",s=r&&r.filter||n.filter||"";n.zoom=1;if((t>=1||t==="")&&w.trim(s.replace(Ut,""))===""&&n.removeAttribute){n.removeAttribute("filter");if(t===""||r&&!r.filter){return}}n.filter=Ut.test(s)?s.replace(Ut,i):s+" "+i}}}w(function(){if(!w.support.reliableMarginRight){w.cssHooks.marginRight={get:function(e,t){if(t){return w.swap(e,{display:"inline-block"},Rt,[e,"marginRight"])}}}}if(!w.support.pixelPosition&&w.fn.position){w.each(["top","left"],function(e,t){w.cssHooks[t]={get:function(e,n){if(n){n=Rt(e,t);return Jt.test(n)?w(e).position()[t]+"px":n}}}})}});if(w.expr&&w.expr.filters){w.expr.filters.hidden=function(e){return e.offsetWidth<=0&&e.offsetHeight<=0||!w.support.reliableHiddenOffsets&&(e.style&&e.style.display||w.css(e,"display"))==="none"};w.expr.filters.visible=function(e){return!w.expr.filters.hidden(e)}}w.each({margin:"",padding:"",border:"Width"},function(e,t){w.cssHooks[e+t]={expand:function(n){var r=0,i={},s=typeof n==="string"?n.split(" "):[n];for(;r<4;r++){i[e+Zt[r]+t]=s[r]||s[r-2]||s[0]}return i}};if(!Vt.test(e)){w.cssHooks[e+t].set=sn}});var ln=/%20/g,cn=/\[\]$/,hn=/\r?\n/g,pn=/^(?:submit|button|image|reset|file)$/i,dn=/^(?:input|select|textarea|keygen)/i;w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=w.prop(this,"elements");return e?w.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!w(this).is(":disabled")&&dn.test(this.nodeName)&&!pn.test(e)&&(this.checked||!xt.test(e))}).map(function(e,t){var n=w(this).val();return n==null?null:w.isArray(n)?w.map(n,function(e){return{name:t.name,value:e.replace(hn,"\r\n")}}):{name:t.name,value:n.replace(hn,"\r\n")}}).get()}});w.param=function(e,n){var r,i=[],s=function(e,t){t=w.isFunction(t)?t():t==null?"":t;i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(n===t){n=w.ajaxSettings&&w.ajaxSettings.traditional}if(w.isArray(e)||e.jquery&&!w.isPlainObject(e)){w.each(e,function(){s(this.name,this.value)})}else{for(r in e){vn(r,e[r],n,s)}}return i.join("&").replace(ln,"+")};w.each(("blur focus focusin focusout load resize scroll unload click dblclick "+"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave "+"change select submit keydown keypress keyup error contextmenu").split(" "),function(e,t){w.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}});w.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return arguments.length===1?this.off(e,"**"):this.off(t,e||"**",n)}});var mn,gn,yn=w.now(),bn=/\?/,wn=/#.*$/,En=/([?&])_=[^&]*/,Sn=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,xn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Tn=/^(?:GET|HEAD)$/,Nn=/^\/\//,Cn=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,kn=w.fn.load,Ln={},An={},On="*/".concat("*");try{gn=s.href}catch(Mn){gn=o.createElement("a");gn.href="";gn=gn.href}mn=Cn.exec(gn.toLowerCase())||[];w.fn.load=function(e,n,r){if(typeof e!=="string"&&kn){return kn.apply(this,arguments)}var i,s,o,u=this,a=e.indexOf(" ");if(a>=0){i=e.slice(a,e.length);e=e.slice(0,a)}if(w.isFunction(n)){r=n;n=t}else if(n&&typeof n==="object"){o="POST"}if(u.length>0){w.ajax({url:e,type:o,dataType:"html",data:n}).done(function(e){s=arguments;u.html(i?w("