diff --git a/baystation12.dme b/baystation12.dme index ae5be95d282..39b90d88b69 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -207,6 +207,7 @@ #include "code\game\gamemodes\blob\blobs\factory.dm" #include "code\game\gamemodes\blob\blobs\node.dm" #include "code\game\gamemodes\blob\blobs\shield.dm" +#include "code\game\gamemodes\calamity\calamity.dm" #include "code\game\gamemodes\changeling\changeling.dm" #include "code\game\gamemodes\changeling\changeling_powers.dm" #include "code\game\gamemodes\changeling\modularchangling.dm" @@ -1038,6 +1039,7 @@ #include "code\modules\mob\living\silicon\robot\laws.dm" #include "code\modules\mob\living\silicon\robot\life.dm" #include "code\modules\mob\living\silicon\robot\login.dm" +#include "code\modules\mob\living\silicon\robot\photos.dm" #include "code\modules\mob\living\silicon\robot\robot.dm" #include "code\modules\mob\living\silicon\robot\robot_damage.dm" #include "code\modules\mob\living\silicon\robot\robot_items.dm" @@ -1115,6 +1117,7 @@ #include "code\modules\paperwork\pen.dm" #include "code\modules\paperwork\photocopier.dm" #include "code\modules\paperwork\photography.dm" +#include "code\modules\paperwork\silicon_photography.dm" #include "code\modules\paperwork\stamps.dm" #include "code\modules\power\apc.dm" #include "code\modules\power\batteryrack.dm" diff --git a/code/WorkInProgress/Ported/policetape.dm b/code/WorkInProgress/Ported/policetape.dm index 12059c63edd..6b40b370ca7 100644 --- a/code/WorkInProgress/Ported/policetape.dm +++ b/code/WorkInProgress/Ported/policetape.dm @@ -97,8 +97,8 @@ //is_blocked_turf(var/turf/T) usr << "\blue You finish placing the [src]." //Git Test -/obj/item/taperoll/afterattack(var/atom/A, mob/user as mob) - if (istype(A, /obj/machinery/door/airlock)) +/obj/item/taperoll/afterattack(var/atom/A, mob/user as mob, proximity) + if (proximity && 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) diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm index 0ca515486b4..e7a6bbba964 100644 --- a/code/__HELPERS/icons.dm +++ b/code/__HELPERS/icons.dm @@ -634,20 +634,60 @@ as a single icon. Useful for when you want to manipulate an icon via the above a The _flatIcons list is a cache for generated icon files. */ -proc - getFlatIcon(atom/A, dir) // 1 = use cache, 2 = override cache, 0 = ignore cache +proc // Creates a single icon from a given /atom or /image. Only the first argument is required. + getFlatIcon(image/A, defdir=A.dir, deficon=A.icon, defstate=A.icon_state, defblend=A.blend_mode) + // We start with a blank canvas, otherwise some icon procs crash silently + var/icon/flat = icon('icons/effects/effects.dmi', "icon_state"="nothing") // Final flattened icon + if(!A) + return flat + if(A.alpha <= 0) + return flat + var/noIcon = FALSE + + var/curicon + if(A.icon) + curicon = A.icon + else + curicon = deficon + + if(!curicon) + noIcon = TRUE // Do not render this object. + + var/curstate + if(A.icon_state) + curstate = A.icon_state + else + curstate = defstate + + if(!noIcon && !(curstate in icon_states(curicon))) + if("" in icon_states(curicon)) + curstate = "" + else + noIcon = TRUE // Do not render this object. + + var/curdir + if(A.dir != 2) + curdir = A.dir + else + curdir = defdir + + var/curblend + if(A.blend_mode == BLEND_DEFAULT) + curblend = defblend + else + curblend = A.blend_mode + // Layers will be a sorted list of icons/overlays, based on the order in which they are displayed var/list/layers = list() - - // Add the atom's icon itself - if(A.icon) - // Make a copy without pixel_x/y settings - var/image/copy = image(icon=A.icon,icon_state=A.icon_state,layer=A.layer,dir=A.dir) + var/image/copy + // Add the atom's icon itself, without pixel_x/y offsets. + if(!noIcon) + copy = image(icon=curicon, icon_state=curstate, layer=A.layer, dir=curdir) + copy.color = A.color + copy.alpha = A.alpha + copy.blend_mode = curblend layers[copy] = A.layer - // dir defaults to A's dir - if(!dir) dir = A.dir - // Loop through the underlays, then overlays, sorting them into the layers list var/list/process = A.underlays // Current list being processed var/pSet=0 // Which list is being processed: 0 = underlays, 1 = overlays @@ -662,7 +702,7 @@ proc if(!current) continue currentLayer = current:layer if(currentLayer<0) // Special case for FLY_LAYER - if(currentLayer <= -1000) return 0 + if(currentLayer <= -1000) return flat if(pSet == 0) // Underlay currentLayer = A.layer+currentLayer/1000 else // Overlay @@ -688,8 +728,6 @@ proc else // All done break - // We start with a blank canvas, otherwise some icon procs crash silently - var/icon/flat = icon('icons/effects/effects.dmi', "icon_state"="nothing") // Final flattened icon var/icon/add // Icon of overlay being added // Current dimensions of flattened icon @@ -699,24 +737,33 @@ proc for(var/I in layers) - if(I:icon) - if(I:icon_state) - // Has icon and state set - add = icon(I:icon, I:icon_state) - else - if(A.icon_state in icon_states(I:icon)) - // Inherits icon_state from atom - add = icon(I:icon, A.icon_state) - else - // Uses default state ("") - add = icon(I:icon) - else if(I:icon_state) - // Inherits icon from atom - add = icon(A.icon, I:icon_state) - else - // Unknown + if(I:alpha == 0) continue + if(I == copy) // 'I' is an /image based on the object being flattened. + curblend = BLEND_OVERLAY + add = icon(I:icon, I:icon_state, I:dir) + // This checks for a silent failure mode of the icon routine. If the requested dir + // doesn't exist in this icon state it returns a 32x32 icon with 0 alpha. + if (I:dir != SOUTH && add.Width() == 32 && add.Height() == 32) + // Check every pixel for blank (computationally expensive, but the process is limited + // by the amount of film on the station, only happens when we hit something that's + // turned, and bails at the very first pixel it sees. + var/blankpixel; + for(var/y;y<=32;y++) + for(var/x;x<32;x++) + blankpixel = isnull(add.GetPixel(x,y)) + if(!blankpixel) + break + if(!blankpixel) + break + // If we ALWAYS returned a null (which happens when GetPixel encounters something with alpha 0) + if (blankpixel) + // Pull the default direction. + add = icon(I:icon, I:icon_state) + else // 'I' is an appearance object. + add = getFlatIcon(new/image(I), curdir, curicon, curstate, curblend) + // Find the new dimensions of the flat icon to fit the added overlay addX1 = min(flatX1, I:pixel_x+1) addX2 = max(flatX2, I:pixel_x+add.Width()) @@ -730,9 +777,14 @@ proc flatY1=addY1;flatY2=addY2 // Blend the overlay into the flattened icon - flat.Blend(add,ICON_OVERLAY,I:pixel_x+2-flatX1,I:pixel_y+2-flatY1) + flat.Blend(add, blendMode2iconMode(curblend), I:pixel_x + 2 - flatX1, I:pixel_y + 2 - flatY1) - return flat + if(A.color) + flat.Blend(A.color, ICON_MULTIPLY) + if(A.alpha < 255) + flat.Blend(rgb(255, 255, 255, A.alpha), ICON_MULTIPLY) + + return icon(flat, "", SOUTH) getIconMask(atom/A)//By yours truly. Creates a dynamic mask for a mob/whatever. /N var/icon/alpha_mask = new(A.icon,A.icon_state)//So we want the default icon and icon state of A. @@ -783,4 +835,23 @@ proc/adjust_brightness(var/color, var/value) RGB[1] = Clamp(RGB[1]+value,0,255) RGB[2] = Clamp(RGB[2]+value,0,255) RGB[3] = Clamp(RGB[3]+value,0,255) - return rgb(RGB[1],RGB[2],RGB[3]) \ No newline at end of file + return rgb(RGB[1],RGB[2],RGB[3]) + +proc/sort_atoms_by_layer(var/list/atoms) + // Comb sort icons based on levels + var/list/result = atoms.Copy() + var/gap = result.len + var/swapped = 1 + while (gap > 1 || swapped) + swapped = 0 + if(gap > 1) + gap = round(gap / 1.3) // 1.3 is the emperic comb sort coefficient + if(gap < 1) + gap = 1 + for(var/i = 1; gap + i <= result.len; i++) + var/atom/l = result[i] //Fucking hate + var/atom/r = result[gap+i] //how lists work here + if(l.layer > r.layer) //no "result[i].layer" for me + result.Swap(i, gap + i) + swapped = 1 + return result diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm index af77addeab0..d29bb84bc98 100644 --- a/code/__HELPERS/text.dm +++ b/code/__HELPERS/text.dm @@ -303,4 +303,15 @@ proc/checkhtml(var/t) var/new_text = "" for(var/i = length(text); i > 0; i--) new_text += copytext(text, i, i+1) - return new_text + return new_text + +//Used in preferences' SetFlavorText and human's set_flavor verb +//Previews a string of len or less length +proc/TextPreview(var/string,var/len=40) + if(lentext(string) <= len) + if(!lentext(string)) + return "\[...\]" + else + return string + else + return "[copytext(string, 1, 37)]..." \ No newline at end of file diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm index 885de82c44b..8c188d0d180 100644 --- a/code/__HELPERS/type2type.dm +++ b/code/__HELPERS/type2type.dm @@ -298,6 +298,13 @@ proc/tg_list2text(list/list, glue=",") /proc/angle2text(var/degree) return dir2text(angle2dir(degree)) +//Converts a blend_mode constant to one acceptable to icon.Blend() +/proc/blendMode2iconMode(blend_mode) + switch(blend_mode) + if(BLEND_MULTIPLY) return ICON_MULTIPLY + if(BLEND_ADD) return ICON_ADD + if(BLEND_SUBTRACT) return ICON_SUBTRACT + else return ICON_OVERLAY //Converts a rights bitfield into a string /proc/rights2text(rights,seperator="") diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm index 037cde56083..c6078c10ac8 100644 --- a/code/_onclick/ai.dm +++ b/code/_onclick/ai.dm @@ -53,6 +53,11 @@ return next_move = world.time + 9 + if(aiCamera.in_camera_mode) + aiCamera.camera_mode_off() + aiCamera.captureimage(A, usr) + return + /* AI restrained() currently does nothing if(restrained()) @@ -122,8 +127,8 @@ src.enabled = !src.enabled src.updateTurrets() -/atom/proc/AIAltClick() - return +/atom/proc/AIAltClick(var/atom/A) + AltClick(A) /obj/machinery/door/airlock/AIAltClick() // Electrifies doors. if(!secondsElectrified) @@ -137,10 +142,10 @@ /obj/machinery/turretid/AIAltClick() //toggles lethal on turrets src.lethal = !src.lethal src.updateTurrets() - + /atom/proc/AIMiddleClick() return - + /obj/machinery/door/airlock/AIMiddleClick() // Toggles door bolt lights. if(!src.lights) Topic("aiEnable=10", list("aiEnable"="10"), 1) // 1 meaning no window (consistency!) diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index c3660d53bd2..2840f187543 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -250,7 +250,7 @@ /atom/proc/AltClick(var/mob/user) var/turf/T = get_turf(src) if(T && user.TurfAdjacent(T)) - if(user. == T) + if(user.listed_turf == T) user.listed_turf = null else user.listed_turf = T @@ -298,7 +298,17 @@ // Simple helper to face what you clicked on, in case it should be needed in more than one place /mob/proc/face_atom(var/atom/A) - if( stat || (buckled && !buckled.movable) || !A || !x || !y || !A.x || !A.y ) return + + // Snowflake for space vines. + var/is_buckled = 0 + if(buckled) + if(istype(buckled)) + if(!buckled.movable) + is_buckled = 1 + else + is_buckled = 0 + + if( stat || is_buckled || !A || !x || !y || !A.x || !A.y ) return var/dx = A.x - x var/dy = A.y - y if(!dx && !dy) return diff --git a/code/_onclick/cyborg.dm b/code/_onclick/cyborg.dm index d86faacbd1f..04682c76ad9 100644 --- a/code/_onclick/cyborg.dm +++ b/code/_onclick/cyborg.dm @@ -37,6 +37,14 @@ face_atom(A) // change direction to face what you clicked on + if(aiCamera.in_camera_mode) + aiCamera.camera_mode_off() + if(is_component_functioning("camera")) + aiCamera.captureimage(A, usr) + else + src << "Your camera isn't functional." + return + /* cyborg restrained() currently does nothing if(restrained()) diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 22c8a113009..9e05a1e39aa 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -24,15 +24,13 @@ /obj/item/proc/attack(mob/living/M as mob, mob/living/user as mob, def_zone) if (!istype(M)) // not sure if this is the right thing... - return + return 0 var/messagesource = M if (can_operate(M)) //Checks if mob is lying down on table for surgery if (do_surgery(M,user,src)) - return + return 0 if (istype(M,/mob/living/carbon/brain)) messagesource = M:container - if (hitsound) - playsound(loc, hitsound, 50, 1, -1) ///////////////////////// user.lastattacked = M M.lastattacker = user @@ -140,8 +138,13 @@ if(istype(M, /mob/living/carbon/human)) - return M:attacked_by(src, user, def_zone) + var/hit = M:attacked_by(src, user, def_zone) + if (hit && hitsound) + playsound(loc, hitsound, 50, 1, -1) + return hit else + if (hitsound) + playsound(loc, hitsound, 50, 1, -1) switch(damtype) if("brute") if(istype(src, /mob/living/carbon/slime)) diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index 98da4a58ded..a1a626313b6 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -119,7 +119,7 @@ L.fields["b_dna"] = H.dna.unique_enzymes L.fields["enzymes"] = H.dna.SE // Used in respawning L.fields["identity"] = H.dna.UI // " - L.fields["image"] = getFlatIcon(H,0) //This is god-awful + L.fields["image"] = getFlatIcon(H) //This is god-awful locked += L return diff --git a/code/datums/mind.dm b/code/datums/mind.dm index b749bfb07e7..621b1b6bb99 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -564,7 +564,7 @@ datum/mind current << "\red Revolution has been disappointed of your leader traits! You are a regular revolutionary now!" else if(!(src in ticker.mode.revolutionaries)) current << "\red You are now a revolutionary! Help your cause. Do not harm your fellow freedom fighters. You can identify your comrades by the red \"R\" icons, and your leaders by the blue \"R\" icons. Help them kill the heads to win the revolution!" - current << "Within the rules, try to act as an opposing force to the crew. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonists." + show_objectives(src) else return ticker.mode.revolutionaries += src @@ -577,7 +577,7 @@ datum/mind ticker.mode.revolutionaries -= src ticker.mode.update_rev_icons_removed(src) current << "\red You have proved your devotion to revoltion! You are a head revolutionary now!" - current << "Within the rules, try to act as an opposing force to the crew. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonists." + show_objectives(src) else if(!(src in ticker.mode.head_revolutionaries)) current << "\blue You are a member of the revolutionaries' leadership now!" else @@ -656,11 +656,11 @@ datum/mind special_role = "Cultist" current << "You catch a glimpse of the Realm of Nar-Sie, The Geometer of Blood. You now see how flimsy the world is, you see that it should be open to the knowledge of Nar-Sie." current << "Assist your new compatriots in their dark dealings. Their goal is yours, and yours is theirs. You serve the Dark One above all else. Bring It back." - current << "Within the rules, try to act as an opposing force to the crew. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonists." var/datum/game_mode/cult/cult = ticker.mode if (istype(cult)) if(!config.objectives_disabled) cult.memorize_cult_objectives(src) + show_objectives(src) log_admin("[key_name_admin(usr)] has cult'ed [current].") if("tome") var/mob/living/carbon/human/H = current @@ -701,7 +701,7 @@ datum/mind special_role = "Wizard" //ticker.mode.learn_basic_spells(current) current << "\red You are the Space Wizard!" - current << "Within the rules, try to act as an opposing force to the crew. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonists." + show_objectives(src) log_admin("[key_name_admin(usr)] has wizard'ed [current].") if("lair") current.loc = pick(wizardstart) @@ -732,8 +732,7 @@ datum/mind ticker.mode.grant_changeling_powers(current) special_role = "Changeling" current << "Your powers are awoken. A flash of memory returns to us...we are a changeling!" - if(config.objectives_disabled) - current << "Within the rules, try to act as an opposing force to the crew. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonists." + show_objectives(src) log_admin("[key_name_admin(usr)] has changeling'ed [current].") if("autoobjectives") if(!config.objectives_disabled) @@ -774,10 +773,7 @@ datum/mind current.real_name = "[syndicate_name()] Operative #[ticker.mode.syndicates.len-1]" special_role = "Syndicate" current << "\blue You are a [syndicate_name()] agent!" - if(config.objectives_disabled) - current << "Within the rules, try to act as an opposing force to the crew. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonists." - else - ticker.mode.forge_syndicate_objectives(src) + ticker.mode.forge_syndicate_objectives(src) ticker.mode.greet_syndicate(src) log_admin("[key_name_admin(usr)] has nuke op'ed [current].") if("lair") @@ -829,8 +825,8 @@ datum/mind special_role = "traitor" current << "\red You are a traitor!" log_admin("[key_name_admin(usr)] has traitor'ed [current].") - if (config.objectives_disabled) - current << "You have been turned into an antagonist- Within the rules, try to act as an opposing force to the crew- This can be via corporate payoff, personal motives, or maybe just being a dick. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonist." + show_objectives() + if(istype(current, /mob/living/silicon)) var/mob/living/silicon/A = current call(/datum/game_mode/proc/add_law_zero)(A) diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index 74da3c321fd..1e267e524f3 100755 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -266,7 +266,10 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /obj/item/weapon/minihoe, /obj/item/device/analyzer/plant_analyzer, /obj/item/clothing/gloves/botanic_leather, - /obj/item/clothing/suit/apron) // Updated with new things + /obj/item/clothing/suit/apron, + /obj/item/weapon/minihoe, + /obj/item/weapon/storage/box/botanydisk + ) // Updated with new things cost = 15 containertype = /obj/structure/closet/crate/hydroponics containername = "Hydroponics crate" diff --git a/code/game/gamemodes/autotraitor/autotraitor.dm b/code/game/gamemodes/autotraitor/autotraitor.dm index 882f161842c..898378543d2 100644 --- a/code/game/gamemodes/autotraitor/autotraitor.dm +++ b/code/game/gamemodes/autotraitor/autotraitor.dm @@ -136,14 +136,9 @@ newtraitor << "You are now a traitor." newtraitor.mind.special_role = "traitor" newtraitor.hud_updateflag |= 1 << SPECIALROLE_HUD - var/obj_count = 1 - newtraitor << "\blue Your current objectives:" - if(!config.objectives_disabled) - for(var/datum/objective/objective in newtraitor.mind.objectives) - newtraitor << "Objective #[obj_count]: [objective.explanation_text]" - obj_count++ - else - newtraitor << "You have been selected this round as an antagonist- Within the rules, try to act as an opposing force to the crew- This can be via corporate payoff, personal motives, or maybe just being a dick. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonist." + newtraitor << "You have been selected this round as an antagonist!" + show_objectives(newtraitor.mind) + //else //message_admins("No new traitor being added.") //else @@ -194,14 +189,9 @@ traitors += character.mind character << "\red You are the traitor." character.mind.special_role = "traitor" - if (config.objectives_disabled) - character << "You have been selected this round as an antagonist- Within the rules, try to act as an opposing force to the crew- This can be via corporate payoff, personal motives, or maybe just being a dick. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonist." - else - var/obj_count = 1 - character << "\blue Your current objectives:" - for(var/datum/objective/objective in character.mind.objectives) - character << "Objective #[obj_count]: [objective.explanation_text]" - obj_count++ + character << "You have been selected this round as an antagonist!" + show_objectives(character.mind) + //else //message_admins("New traitor roll failed. No new traitor.") //else diff --git a/code/game/gamemodes/calamity/calamity.dm b/code/game/gamemodes/calamity/calamity.dm new file mode 100644 index 00000000000..c2ab3202f4f --- /dev/null +++ b/code/game/gamemodes/calamity/calamity.dm @@ -0,0 +1,449 @@ +/* + * This roundtype is a replacement for the meteor round on upstream BS12 - players + * expressed the desire for quick, chaotic and violent rounds, preferrably without + * dependancy on other players. + * I wanted to call it clusterfuck, but I figure that's a bit too overt. Think of + * the children. + * ~ Zuhayr + */ + +/datum/game_mode/calamity + name = "calamity" + config_tag = "calamity" + required_players = 1 + votable = 0 //Remove after testing. + + uplink_welcome = "Syndicate Uplink Console:" + uplink_uses = 10 + + //Possible roundstart antag types. + var/list/atypes = list("syndi","ling","tater","wiz","ninja","vox","slug","cult") + var/list/chosen_atypes = list() + var/list/chosen_candidates = list() + var/list/already_assigned_candidates = list() + + //At one antagonist group per 10 players we are just going to go with tiny groups. + var/max_antags = 3 // Antag groups spawn with this many members. + var/antag_type_ratio = 10 // 1 antag type per this many players. + + var/const/waittime_l = 600 + var/const/waittime_h = 1800 + +/datum/game_mode/calamity/announce() + world << "The current game mode is - Calamity!" + world << "This must be a Thursday. You never could get the hang of Thursdays..." + +/datum/game_mode/calamity/can_start() + + if(!..()) + return 0 + + var/antag_count = player_list.len/antag_type_ratio + + if(!antag_count) + return 1 + + for(var/i=0;i" + + for(var/datum/mind/P in L) + text += "
[P.key] was [P.name] (" + if(P.current) + if(P.current.stat == DEAD) + text += "died" + else + text += "survived" + if(P.current.real_name != P.name) + text += " as [P.current.real_name]" + else + text += "body destroyed" + text += ")" + + if(M.objectives.len) + text += "
Their objectives were:" + var/num = 1 + for(var/datum/objective/O in M.objectives) + text += "
Objective [num]: [O.explanation_text]" + num++ + + //Single antag objective completion. + for(var/list/L in list(src.changelings, src.ninjas, src.borers, src.traitors)) + + if(L.len) + var/datum/mind/M = L[1] + text = "
The [M.special_role][L.len == 1 ? " was" : "s were"]:" + for(var/datum/mind/P in L) + var/num = 1 + text += "
[P.key] was [P.name]." + if(P.objectives.len) + for(var/datum/objective/O in P.objectives) + text += "
Objective [num]: [O.explanation_text]" + num++ + ..() + return 1 + +//Converts chosen atype to an actual role string. +/datum/game_mode/calamity/proc/get_candidate_role_text(var/role) + + var/role_text + + switch(role) + if("syndi") + role_text = "Syndicate Operative" + if("ling") + role_text = "Changeling" + if("tater") + role_text = "Traitor" + if("wiz") + role_text = "Cabalist" + if("ninja") + role_text = "Ninja" + if("vox") + role_text = "Vox Raider" + if("slug") + role_text = "Cortical Borer" + if("cult") + role_text = "Cultist" + + return role_text + +//Grabs candidate lists for various atypes. +/datum/game_mode/calamity/proc/get_role_candidates(var/role) + + var/list/possible_antags = list() + switch(role) + if("syndi") + possible_antags = get_players_for_role(BE_OPERATIVE) + if("ling") + possible_antags = get_players_for_role(BE_CHANGELING) + if("tater") + possible_antags = get_players_for_role(BE_TRAITOR) + if("wiz") + possible_antags = get_players_for_role(BE_WIZARD) + if("ninja") + possible_antags = get_players_for_role(BE_NINJA) + if("vox") + possible_antags = get_players_for_role(BE_RAIDER) + if("slug") + possible_antags = get_players_for_role(BE_ALIEN) + if("cult") + possible_antags = get_players_for_role(BE_CULTIST) + + var/list/filtered_antags = list() + if(possible_antags) + for(var/datum/mind/candidate in possible_antags) + if(!(candidate in already_assigned_candidates)) + filtered_antags |= candidate + already_assigned_candidates |= candidate + + if(filtered_antags && islist(filtered_antags)) + return filtered_antags + else + return list(filtered_antags) + +//Spawning procs for the various antag types. +//A LOT OF THE FOLLOWING IS COPYPASTED FROM OTHER MODES AND NEEDS +//TO BE FIXED UP. NINJA, NUKE AND CULT IN PARTICULAR ARE FUCKING AWFUL. ~ Z +/datum/game_mode/calamity/proc/spawn_syndicate(var/list/candidates) + + var/obj/effect/landmark/uplinklocker = locate("landmark*Syndicate-Uplink") + var/obj/effect/landmark/nuke_spawn = locate("landmark*Nuclear-Bomb") + + var/nuke_code = "[rand(10000, 99999)]" + var/leader_selected = 0 + var/spawnpos = 1 + + for(var/datum/mind/player in candidates) + + syndicates += player + + if(spawnpos > synd_spawn.len) + spawnpos = 1 + player.current.loc = synd_spawn[spawnpos] + + player.current.real_name = "[syndicate_name()] Operative" + spawn(0) + NukeNameAssign(player) + + forge_syndicate_objectives(player) + greet_syndicate(player) + equip_syndicate(player.current) + + if(!leader_selected) + prepare_syndicate_leader(player, nuke_code) + leader_selected = 1 + + spawnpos++ + update_synd_icons_added(player) + + update_all_synd_icons() + + if(uplinklocker) + new /obj/structure/closet/syndicate/nuclear(uplinklocker.loc) + if(nuke_spawn && synd_spawn.len > 0) + var/obj/machinery/nuclearbomb/the_bomb = new /obj/machinery/nuclearbomb(nuke_spawn.loc) + the_bomb.r_code = nuke_code + +/datum/game_mode/calamity/proc/spawn_changelings(var/list/candidates) + + for(var/datum/mind/player in candidates) + + changelings += player + grant_changeling_powers(player.current) + player.special_role = "Changeling" + + if(!config.objectives_disabled) + player.objectives += new /datum/objective/escape() + player.objectives += new /datum/objective/survive() + + show_objectives(player) + greet_changeling(player) + +/datum/game_mode/calamity/proc/spawn_traitors(var/list/candidates) + + for(var/datum/mind/player in candidates) + traitors += player + + if(!config.objectives_disabled) + player.objectives += new /datum/objective/escape() + player.objectives += new /datum/objective/survive() + + show_objectives(player) + + finalize_traitor(player) + greet_traitor(player) + +/datum/game_mode/calamity/proc/spawn_cabal(var/list/candidates) + + for(var/datum/mind/player in candidates) + wizards += player + + if(!config.objectives_disabled) + player.objectives += new /datum/objective/escape() + player.objectives += new /datum/objective/survive() + + show_objectives(player) + + player.current.loc = pick(wizardstart) + + equip_wizard(player.current) + name_wizard(player.current) + greet_wizard(player) + +/datum/game_mode/calamity/proc/spawn_ninja(var/list/candidates) + + //I hate that this is necessary. ~Z + for(var/obj/effect/landmark/L in landmarks_list) + if(L.name == "carpspawn") + ninjastart.Add(L) + + for(var/datum/mind/player in candidates) + ninjas += player + + player.current << browse(null, "window=playersetup") + player.current = create_space_ninja(pick(ninjastart)) + player.current.ckey = player.key + + if(player.current && !(istype(player.current,/mob/living/carbon/human))) return 0 + + //Ninja intro crawl goes here. + + if(!config.objectives_disabled) + player.objectives += new /datum/objective/ninja_highlander() + player.objectives += new /datum/objective/survive() + + show_objectives(player) + + //Ninja objective announcement goes here. + + //Set ninja internals. + var/mob/living/carbon/human/N = player.current + N.internal = N.s_store + N.internals.icon_state = "internal1" + if(N.wear_suit && istype(N.wear_suit,/obj/item/clothing/suit/space/space_ninja)) + var/obj/item/clothing/suit/space/space_ninja/S = N.wear_suit + S:randomize_param() + +/datum/game_mode/calamity/proc/spawn_vox_raiders(var/list/candidates) + + //Create objectives. + var/list/raid_objectives = forge_vox_objectives() + + //Create raiders. + for(var/datum/mind/player in candidates) + raiders += player + + //Place them on the shuttle. + var/index = 1 + if(index > raider_spawn.len) + index = 1 + player.current.loc = raider_spawn[index] + index++ + + if(!config.objectives_disabled) + player.objectives = raid_objectives + + //Equip them. + create_vox(player) + greet_vox(player) + + player.current << "Your crew is transporting cortical stacks and critical resources back to the Shoal.\ + No delay or concession can be tolerated. Even putting holes in the station pales in comparison to failure." + + spawn (rand(waittime_l, waittime_h)) + send_intercept() + ..() + +/datum/game_mode/calamity/proc/spawn_borers(var/list/candidates) + + var/list/possible_hosts = list() + for(var/mob/living/carbon/human/H in mob_list) + if(!(H.species.flags & IS_SYNTHETIC)) + possible_hosts += H + + for(var/datum/mind/player in candidates) + + if(!possible_hosts || possible_hosts.len) + break + + borers += player + var/mob/living/carbon/human/target_host = pick(possible_hosts) + possible_hosts -= target_host + + var/mob/living/simple_animal/borer/roundstart/B = new(target_host) + + player.current = B + B.mind = player + B.key = player.key + player.assigned_role = "Cortical Borer" + player.special_role = "Cortical Borer" + + B.host = target_host + B.host_brain.name = target_host.name + B.host_brain.real_name = target_host.real_name + + var/datum/organ/external/head = target_host.get_organ("head") + head.implants += B + + player.current << "\blue You are a cortical borer! You are a brain slug that worms its way \ + into the head of its victim, lurking out of sight until it needs to take control." + player.current << "You can speak to your victim with say, to other borers with say ;, and use your Alien tab for abilities." + + if(!config.objectives_disabled) + player.objectives += new /datum/objective/borer_survive() + player.objectives += new /datum/objective/borer_reproduce() + player.objectives += new /datum/objective/escape() + + show_objectives(player) + +/datum/game_mode/calamity/proc/spawn_cultists(var/list/candidates) + + //Prune the list. + var/list/jobs_to_skip = list("Chaplain","AI", "Cyborg", "Lawyer", "Head of Security", "Captain") + if(config.protect_roles_from_antagonist) + jobs_to_skip += list("Security Officer", "Warden", "Detective") + + //Make cult objectives. + var/cult_objectives = list() + cult_objectives += new /datum/objective/cult_summon() + + //Actually spawn cultists. + for(var/datum/mind/player in candidates) + + for(var/job in jobs_to_skip) + if(player.assigned_role == job) + continue + + cult += player + equip_cultist(player.current) + grant_runeword(player.current) + update_cult_icons_added(player) + player.current << "\blue You are a member of the cult! Your dark masters have sent you forth to serve their vile will." + player.current << "\red This station sails above a weeping tear in the Cosmos. Bring the Geometer of Blood forth." + + if(!config.objectives_disabled) + + for(var/datum/objective/O in cult_objectives) + player.objectives += O + + player.objectives += new /datum/objective/escape() + player.objectives += new /datum/objective/survive() + + show_objectives(player) + player.special_role = "Cultist" \ No newline at end of file diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm index 03780adf361..c3079bf3d52 100644 --- a/code/game/gamemodes/changeling/changeling.dm +++ b/code/game/gamemodes/changeling/changeling.dm @@ -125,23 +125,13 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon" changeling.current << "\red You are a changeling!" changeling.current << "\red Use say \":g message\" to communicate with your fellow changelings. Remember: you get all of their absorbed DNA if you absorb them." - if(config.objectives_disabled) - changeling.current << "Within the rules, try to act as an opposing force to the crew. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonists." - - if (!config.objectives_disabled) - changeling.current << "You must complete the following tasks:" + show_objectives(changeling) if (changeling.current.mind) if (changeling.current.mind.assigned_role == "Clown") changeling.current << "You have evolved beyond your clownish nature, allowing you to wield weapons without harming yourself." changeling.current.mutations.Remove(CLUMSY) - if (!config.objectives_disabled) - var/obj_count = 1 - for(var/datum/objective/objective in changeling.objectives) - changeling.current << "Objective #[obj_count]: [objective.explanation_text]" - obj_count++ - return /*/datum/game_mode/changeling/check_finished() var/changelings_alive = 0 diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index 285a2ac0e3a..771b43caa57 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -100,8 +100,7 @@ cult_mind.current << "\blue You are a member of the cult!" if(!config.objectives_disabled) memorize_cult_objectives(cult_mind) - else - cult_mind.current << "Within the rules, try to act as an opposing force to the crew. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonists." + show_objectives(cult_mind) cult_mind.special_role = "Cultist" spawn (rand(waittime_l, waittime_h)) diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm index d55417c5f5e..1d2ae0061b7 100644 --- a/code/game/gamemodes/cult/cult_items.dm +++ b/code/game/gamemodes/cult/cult_items.dm @@ -35,6 +35,7 @@ desc = "A hood worn by the followers of Nar-Sie." flags_inv = HIDEFACE flags = FPRINT|TABLEPASS|HEADCOVERSEYES + body_parts_covered = HEAD|EYES armor = list(melee = 30, bullet = 10, laser = 5,energy = 5, bomb = 0, bio = 0, rad = 0) cold_protection = HEAD min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE @@ -68,6 +69,7 @@ desc = "A helm worn by the followers of Nar-Sie." flags_inv = HIDEFACE flags = FPRINT|TABLEPASS|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR + body_parts_covered = HEAD|FACE|EYES armor = list(melee = 30, bullet = 30, laser = 30,energy = 20, bomb = 0, bio = 0, rad = 0) siemens_coefficient = 0 @@ -77,7 +79,7 @@ icon_state = "magusred" item_state = "magusred" flags = FPRINT | TABLEPASS - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS allowed = list(/obj/item/weapon/tome,/obj/item/weapon/melee/cultblade) armor = list(melee = 50, bullet = 30, laser = 50,energy = 20, bomb = 25, bio = 10, rad = 0) flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT @@ -92,6 +94,7 @@ armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) siemens_coefficient = 0 + /obj/item/clothing/suit/space/cult name = "cult armour" icon_state = "cult_armour" @@ -101,4 +104,5 @@ allowed = list(/obj/item/weapon/tome,/obj/item/weapon/melee/cultblade,/obj/item/weapon/tank/emergency_oxygen,/obj/item/device/suit_cooling_unit) slowdown = 1 armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) - siemens_coefficient = 0 \ No newline at end of file + siemens_coefficient = 0 + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS \ No newline at end of file diff --git a/code/game/gamemodes/events/holidays/Christmas.dm b/code/game/gamemodes/events/holidays/Christmas.dm index 72d42318e60..9203fa15e9d 100644 --- a/code/game/gamemodes/events/holidays/Christmas.dm +++ b/code/game/gamemodes/events/holidays/Christmas.dm @@ -59,5 +59,6 @@ desc = "A crappy paper hat that you are REQUIRED to wear." flags_inv = 0 flags = FPRINT|TABLEPASS + body_parts_covered = 0 armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) diff --git a/code/game/gamemodes/events/space_ninja.dm b/code/game/gamemodes/events/space_ninja.dm index 03d9c6a8cd1..57ec2bc7aec 100644 --- a/code/game/gamemodes/events/space_ninja.dm +++ b/code/game/gamemodes/events/space_ninja.dm @@ -375,12 +375,7 @@ Malf AIs/silicons aren't added. Monkeys aren't added. Messes with objective comp var/directive = generate_ninja_directive(side) new_ninja << "\blue \nYou are an elite mercenary assassin of the Spider Clan, [new_ninja.real_name]. The dreaded \red SPACE NINJA!\blue You have a variety of abilities at your disposal, thanks to your nano-enhanced cyber armor. Remember your training (initialize your suit by right clicking on it)! \nYour current directive is: \red [directive]" new_ninja.mind.store_memory("Directive: \red [directive]
") - - var/obj_count = 1 - new_ninja << "\blue Your current objectives:" - for(var/datum/objective/objective in ninja_mind.objectives) - new_ninja << "Objective #[obj_count]: [objective.explanation_text]" - obj_count++ + show_objectives(new_ninja.mind) sent_ninja_to_station = 1//And we're done. return new_ninja//Return the ninja in case we need to reference them later. diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 415d1362be7..a566c2d101c 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -481,3 +481,28 @@ proc/get_nt_opposed() dudes += man if(dudes.len == 0) return null return pick(dudes) + +//Announces objectives/generic antag text. +/proc/show_generic_antag_text(var/datum/mind/player) + if(player.current) + player.current << \ + "You are an antagonist! Within the rules, \ + try to act as an opposing force to the crew. Further RP and try to make sure \ + other players have fun! If you are confused or at a loss, always adminhelp, \ + and before taking extreme actions, please try to also contact the administration! \ + Think through your actions and make the roleplay immersive! Please remember all \ + rules aside from those without explicit exceptions apply to antagonists." + +/proc/show_objectives(var/datum/mind/player) + + if(!player || !player.current) return + + if(config.objectives_disabled) + show_generic_antag_text(player) + return + + var/obj_count = 1 + player.current << "\blue Your current objectives:" + for(var/datum/objective/objective in player.objectives) + player.current << "Objective #[obj_count]: [objective.explanation_text]" + obj_count++ \ No newline at end of file diff --git a/code/game/gamemodes/heist/heist.dm b/code/game/gamemodes/heist/heist.dm index 8b49a4574a2..320e89d9b2f 100644 --- a/code/game/gamemodes/heist/heist.dm +++ b/code/game/gamemodes/heist/heist.dm @@ -2,8 +2,12 @@ VOX HEIST ROUNDTYPE */ +var/global/list/raider_spawn = list() +var/global/list/obj/cortical_stacks = list() //Stacks for 'leave nobody behind' objective. Clumsy, rewrite sometime. + /datum/game_mode/ var/list/datum/mind/raiders = list() //Antags. + var/list/raid_objectives = list() //Raid objectives /datum/game_mode/heist name = "heist" @@ -16,9 +20,6 @@ VOX HEIST ROUNDTYPE var/const/waittime_l = 600 //lower bound on time before intercept arrives (in tenths of seconds) var/const/waittime_h = 1800 //upper bound on time before intercept arrives (in tenths of seconds) - var/list/raid_objectives = list() //Raid objectives. - var/list/obj/cortical_stacks = list() //Stacks for 'leave nobody behind' objective. - /datum/game_mode/heist/announce() world << "The current game mode is - Heist!" world << "An unidentified bluespace signature has slipped past the Icarus and is approaching [station_name()]!" @@ -59,15 +60,6 @@ VOX HEIST ROUNDTYPE /datum/game_mode/heist/post_setup() - //Build a list of spawn points. - var/list/turf/raider_spawn = list() - - for(var/obj/effect/landmark/L in landmarks_list) - if(L.name == "voxstart") - raider_spawn += get_turf(L) - del(L) - continue - //Generate objectives for the group. if(!config.objectives_disabled) raid_objectives = forge_vox_objectives() @@ -83,49 +75,57 @@ VOX HEIST ROUNDTYPE raider.current.loc = raider_spawn[index] index++ - var/sounds = rand(2,8) - var/i = 0 - var/newname = "" - - while(i<=sounds) - i++ - newname += pick(list("ti","hi","ki","ya","ta","ha","ka","ya","chi","cha","kah")) - - var/mob/living/carbon/human/vox = raider.current - - vox.real_name = capitalize(newname) - vox.name = vox.real_name - raider.name = vox.name - vox.age = rand(12,20) - vox.dna.mutantrace = "vox" - vox.set_species("Vox") - vox.languages = list() // Removing language from chargen. - vox.flavor_text = "" - vox.add_language("Vox-pidgin") - vox.h_style = "Short Vox Quills" - vox.f_style = "Shaved" - for(var/datum/organ/external/limb in vox.organs) - limb.status &= ~(ORGAN_DESTROYED | ORGAN_ROBOT) - - //Now apply cortical stack. - var/datum/organ/external/E = vox.get_organ("head") - var/obj/item/weapon/implant/cortical/I = new(vox) - I.imp_in = vox - I.implanted = 1 - I.part = E - E.implants += I - cortical_stacks += I - - vox.equip_vox_raider() - vox.regenerate_icons() - - raider.objectives = raid_objectives + create_vox(raider) greet_vox(raider) + if(!config.objectives_disabled && raid_objectives) + raider.objectives = raid_objectives + spawn (rand(waittime_l, waittime_h)) send_intercept() -/datum/game_mode/heist/proc/is_raider_crew_safe() +/datum/game_mode/proc/create_vox(var/datum/mind/newraider) + + + var/sounds = rand(2,8) + var/i = 0 + var/newname = "" + + while(i<=sounds) + i++ + newname += pick(list("ti","hi","ki","ya","ta","ha","ka","ya","chi","cha","kah")) + + var/mob/living/carbon/human/vox = newraider.current + + vox.real_name = capitalize(newname) + vox.name = vox.real_name + newraider.name = vox.name + vox.age = rand(12,20) + vox.dna.mutantrace = "vox" + vox.set_species("Vox") + vox.languages = list() // Removing language from chargen. + vox.flavor_text = "" + vox.add_language("Vox-pidgin") + vox.h_style = "Short Vox Quills" + vox.f_style = "Shaved" + + for(var/datum/organ/external/limb in vox.organs) + limb.status &= ~(ORGAN_DESTROYED | ORGAN_ROBOT) + + //Generate cortical stack. + var/datum/organ/external/affected = vox.get_organ("head") + + var/obj/item/weapon/implant/cortical/I = new(vox) + I.imp_in = vox + I.implanted = 1 + affected.implants += I + I.part = affected + cortical_stacks += I + + vox.equip_vox_raider() + vox.regenerate_icons() + +/datum/game_mode/proc/is_raider_crew_safe() if(cortical_stacks.len == 0) return 0 @@ -135,7 +135,7 @@ VOX HEIST ROUNDTYPE return 0 return 1 -/datum/game_mode/heist/proc/is_raider_crew_alive() +/datum/game_mode/proc/is_raider_crew_alive() for(var/datum/mind/raider in raiders) if(raider.current) @@ -143,7 +143,7 @@ VOX HEIST ROUNDTYPE return 1 return 0 -/datum/game_mode/heist/proc/forge_vox_objectives() +/datum/game_mode/proc/forge_vox_objectives() var/i = 1 var/max_objectives = pick(2,2,2,2,3,3,3,4) @@ -171,20 +171,13 @@ VOX HEIST ROUNDTYPE return objs -/datum/game_mode/heist/proc/greet_vox(var/datum/mind/raider) +/datum/game_mode/proc/greet_vox(var/datum/mind/raider) raider.current << "\blue You are a Vox Raider, fresh from the Shoal!" raider.current << "\blue The Vox are a race of cunning, sharp-eyed nomadic raiders and traders endemic to the frontier and much of the unexplored galaxy. You and the crew have come to the Exodus for plunder, trade or both." raider.current << "\blue Vox are cowardly and will flee from larger groups, but corner one or find them en masse and they are vicious." raider.current << "\blue Use :V to voxtalk, :H to talk on your encrypted channel, and don't forget to turn on your nitrogen internals!" raider.current << "\red IF YOU HAVE NOT PLAYED A VOX BEFORE, REVIEW THIS THREAD: http://baystation12.net/forums/viewtopic.php?f=6&t=8657." - var/obj_count = 1 - if(!config.objectives_disabled) - for(var/datum/objective/objective in raider.objectives) - raider.current << "Objective #[obj_count]: [objective.explanation_text]" - obj_count++ - else - raider.current << "Within the rules, try to act as an opposing force to the crew or come up with other fun ideas. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonists." - + show_objectives(raider) /datum/game_mode/heist/declare_completion() @@ -292,6 +285,6 @@ datum/game_mode/proc/auto_declare_completion_heist() var/area/skipjack = locate(/area/shuttle/vox/station) for (var/mob/living/M in skipjack.contents) //maybe send the player a message that they've gone home/been kidnapped? Someone responsible for vox lore should write that. - Del(M) + del(M) for (var/obj/O in skipjack.contents) - Del(O) //no hiding in lockers or anything + del(O) //no hiding in lockers or anything \ No newline at end of file diff --git a/code/game/gamemodes/meme/meme.dm b/code/game/gamemodes/meme/meme.dm index 71781c48e8e..ae4e2dce8f5 100644 --- a/code/game/gamemodes/meme/meme.dm +++ b/code/game/gamemodes/meme/meme.dm @@ -131,11 +131,7 @@ /datum/game_mode/proc/greet_meme(var/datum/mind/meme, var/you_are=1) if (you_are) meme.current << "\red You are a meme!" - - var/obj_count = 1 - for(var/datum/objective/objective in meme.objectives) - meme.current << "Objective #[obj_count]: [objective.explanation_text]" - obj_count++ + show_objectives(meme) return /datum/game_mode/meme/check_finished() diff --git a/code/game/gamemodes/mutiny/directives/alien_fraud_directive.dm b/code/game/gamemodes/mutiny/directives/alien_fraud_directive.dm index 55a61a6f591..6df5a22050c 100644 --- a/code/game/gamemodes/mutiny/directives/alien_fraud_directive.dm +++ b/code/game/gamemodes/mutiny/directives/alien_fraud_directive.dm @@ -11,7 +11,7 @@ datum/directive/terminations/alien_fraud datum/directive/terminations/alien_fraud/get_crew_to_terminate() var/list/aliens[0] for(var/mob/M in player_list) - if (M.is_ready() && is_alien(M)) + if (M.is_ready() && is_alien(M) && M != mode.head_loyalist.current) aliens.Add(M) return aliens diff --git a/code/game/gamemodes/mutiny/directives/bluespace_contagion_directive.dm b/code/game/gamemodes/mutiny/directives/bluespace_contagion_directive.dm index 1e31eca7b6f..1ea28852fdc 100644 --- a/code/game/gamemodes/mutiny/directives/bluespace_contagion_directive.dm +++ b/code/game/gamemodes/mutiny/directives/bluespace_contagion_directive.dm @@ -6,7 +6,7 @@ datum/directive/bluespace_contagion proc/get_infection_candidates() var/list/candidates[0] for(var/mob/M in player_list) - if (M.is_ready() && !M.is_mechanical()) + if (M.is_ready() && !M.is_mechanical() && M != mode.head_loyalist.current) candidates.Add(M) return candidates diff --git a/code/game/gamemodes/ninja/ninja.dm b/code/game/gamemodes/ninja/ninja.dm index 33810a2e5bf..10cff5eccb5 100644 --- a/code/game/gamemodes/ninja/ninja.dm +++ b/code/game/gamemodes/ninja/ninja.dm @@ -56,8 +56,8 @@ if(ninja.current && !(istype(ninja.current,/mob/living/carbon/human))) return 0 if(!config.objectives_disabled) forge_ninja_objectives(ninja) - else - ninja.current << "Within the rules, try to act as an opposing force to the crew. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonists." + show_objectives(ninja) + var/mob/living/carbon/human/N = ninja.current N.internal = N.s_store N.internals.icon_state = "internal1" @@ -139,11 +139,7 @@ ninja.current << "You are an elite mercenary assassin of the Spider Clan, [ninja.current.real_name]. You have a variety of abilities at your disposal, thanks to your nano-enhanced cyber armor.\nYour current directive is: \red [directive]\n \blue Try your best to adhere to this." ninja.store_memory("Directive: \red [directive]
") - var/obj_count = 1 - ninja.current << "\blue Your current objectives:" - for(var/datum/objective/objective in ninja.objectives) - ninja.current << "Objective #[obj_count]: [objective.explanation_text]" - obj_count++ + show_objectives(ninja) /datum/game_mode/proc/auto_declare_completion_ninja() if(ninjas.len) diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index 53fbcba2f41..8aa8cf3fa6e 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -1,3 +1,10 @@ +/* + NUCLEAR EMERGENCY ROUNDTYPE +*/ + +var/global/list/turf/synd_spawn = list() + + /datum/game_mode var/list/datum/mind/syndicates = list() @@ -116,14 +123,6 @@ /datum/game_mode/nuclear/post_setup() - var/list/turf/synd_spawn = list() - - for(var/obj/effect/landmark/A in landmarks_list) - if(A.name == "Syndicate-Spawn") - synd_spawn += get_turf(A) - del(A) - continue - var/obj/effect/landmark/uplinkdevice = locate("landmark*Syndicate-Uplink") //i will be rewriting this shortly var/obj/effect/landmark/nuke_spawn = locate("landmark*Nuclear-Bomb") @@ -139,8 +138,8 @@ synd_mind.current.real_name = "[syndicate_name()] Operative" // placeholder while we get their actual name spawn(0) NukeNameAssign(synd_mind) - if(!config.objectives_disabled) - forge_syndicate_objectives(synd_mind) + + forge_syndicate_objectives(synd_mind) greet_syndicate(synd_mind) equip_syndicate(synd_mind.current) @@ -188,25 +187,18 @@ /datum/game_mode/proc/forge_syndicate_objectives(var/datum/mind/syndicate) + if (config.objectives_disabled) return + var/datum/objective/nuclear/syndobj = new syndobj.owner = syndicate syndicate.objectives += syndobj - /datum/game_mode/proc/greet_syndicate(var/datum/mind/syndicate, var/you_are=1) if (you_are) syndicate.current << "\blue You are a [syndicate_name()] agent!" - var/obj_count = 1 - if(!config.objectives_disabled) - for(var/datum/objective/objective in syndicate.objectives) - syndicate.current << "Objective #[obj_count]: [objective.explanation_text]" - obj_count++ - else - syndicate.current << "Within the rules, try to act as an opposing force to the crew. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonists." - return - + show_objectives(syndicate) /datum/game_mode/proc/random_radio_frequency() return 1337 // WHY??? -- Doohl diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 3d1f8140948..82619c2796f 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -930,4 +930,42 @@ datum/objective/heist/inviolate_death explanation_text = "Follow the Inviolate. Minimise death and loss of resources." check_completion() if(vox_kills > MAX_VOX_KILLS) return 0 - return 1 \ No newline at end of file + return 1 + +//Borer objective(s). + +/datum/objective/borer_survive + explanation_text = "Survive in a host until the end of the round." + +/datum/objective/borer_survive/check_completion() + if(owner) + var/mob/living/simple_animal/borer/B = owner + if(istype(B) && B.stat < 2 && B.host && B.host.stat < 2) return 1 + return 0 + +/datum/objective/borer_reproduce + explanation_text = "Reproduce at least once." + +/datum/objective/borer_reproduce/check_completion() + if(owner && owner.current) + var/mob/living/simple_animal/borer/B = owner.current + if(istype(B) && B.has_reproduced) return 1 + return 0 + +/datum/objective/ninja_highlander + explanation_text = "You aspire to be a Grand Master of the Spider Clan. Kill all of your fellow acolytes." + +/datum/objective/ninja_highlander/check_completion() + if(owner) + for(var/datum/mind/ninja in ticker.mode.ninjas) + if(ninja != owner) + if(ninja.current.stat < 2) return 0 + return 1 + return 0 + +/datum/objective/cult_summon + explanation_text = "Summon Nar-Sie via the use of the appropriate rune (Hell join self). It will only work if nine cultists stand on and around it." + +/datum/objective/cult_summon/check_completion() + if(locate(/obj/machinery/singularity/narsie/large) in machines) return 1 + return 0 \ No newline at end of file diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm index 2f04f8266b1..fd774975d0f 100644 --- a/code/game/gamemodes/revolution/revolution.dm +++ b/code/game/gamemodes/revolution/revolution.dm @@ -118,16 +118,13 @@ rev_mind.objectives += rev_obj /datum/game_mode/proc/greet_revolutionary(var/datum/mind/rev_mind, var/you_are=1) - var/obj_count = 1 + + rev_mind.special_role = "Head Revolutionary" + if (you_are) rev_mind.current << "\blue You are a member of the revolutionaries' leadership!" - if(!config.objectives_disabled) - for(var/datum/objective/objective in rev_mind.objectives) - rev_mind.current << "Objective #[obj_count]: [objective.explanation_text]" - rev_mind.special_role = "Head Revolutionary" - obj_count++ - else - rev_mind.current << "Within the rules, try to act as an opposing force to the crew. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonists." + + show_objectives(rev_mind) ///////////////////////////////////////////////////////////////////////////////// //This are equips the rev heads with their gear, and makes the clown not clumsy// @@ -198,8 +195,7 @@ revolutionaries += rev_mind rev_mind.current << "\red You are now a revolutionary! Help your cause. Do not harm your fellow freedom fighters. You can identify your comrades by the red \"R\" icons, and your leaders by the blue \"R\" icons. Help them kill the heads to win the revolution!" rev_mind.special_role = "Revolutionary" - if(config.objectives_disabled) - rev_mind.current << "Within the rules, try to act as an opposing force to the crew. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonists." + show_objectives(rev_mind) update_rev_icons_added(rev_mind) return 1 ////////////////////////////////////////////////////////////////////////////// diff --git a/code/game/gamemodes/revolution/rp-revolution.dm b/code/game/gamemodes/revolution/rp-revolution.dm index 2fdf8af27c7..282864a3fea 100644 --- a/code/game/gamemodes/revolution/rp-revolution.dm +++ b/code/game/gamemodes/revolution/rp-revolution.dm @@ -87,11 +87,8 @@ update_rev_icons_added(rev_mind) for(var/datum/mind/rev_mind in head_revolutionaries) - var/obj_count = 1 rev_mind.current << "\blue You are a member of the revolutionaries' leadership!" - for(var/datum/objective/objective in rev_mind.objectives) - rev_mind.current << "Objective #[obj_count]: [objective.explanation_text]" - obj_count++ + show_objectives(rev_mind) spawn (rand(waittime_l, waittime_h)) send_intercept() diff --git a/code/game/gamemodes/revolution/rp_revolution.dm b/code/game/gamemodes/revolution/rp_revolution.dm index 71c34c0d04e..cbfe9772304 100644 --- a/code/game/gamemodes/revolution/rp_revolution.dm +++ b/code/game/gamemodes/revolution/rp_revolution.dm @@ -78,16 +78,10 @@ send_intercept() /datum/game_mode/revolution/rp_revolution/greet_revolutionary(var/datum/mind/rev_mind, var/you_are=1) - var/obj_count = 1 + rev_mind.special_role = "Head Revolutionary" if (you_are) rev_mind.current << "\blue You are a member of the revolutionaries' leadership!" - if(!config.objectives_disabled) - for(var/datum/objective/objective in rev_mind.objectives) - rev_mind.current << "Objective #[obj_count]: [objective.explanation_text]" - rev_mind.special_role = "Head Revolutionary" - obj_count++ - else - rev_mind.current << "Within the rules, try to act as an opposing force to the crew. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonists." + show_objectives(rev_mind) // Show each head revolutionary up to 3 candidates var/list/already_considered = list() @@ -113,8 +107,7 @@ revolutionaries += rev_mind rev_mind.current << "\red You are now a revolutionary! Help your cause. Do not harm your fellow freedom fighters. You can identify your comrades by the red \"R\" icons, and your leaders by the blue \"R\" icons. Help them kill, capture or convert the heads to win the revolution!" rev_mind.special_role = "Revolutionary" - if(config.objectives_disabled) - rev_mind.current << "Within the rules, try to act as an opposing force to the crew. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonists." + show_objectives(rev_mind) update_rev_icons_added(rev_mind) H.hud_updateflag |= 1 << SPECIALROLE_HUD return 1 diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index 71076aaf284..0c0928dbc1a 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -135,14 +135,7 @@ /datum/game_mode/proc/greet_traitor(var/datum/mind/traitor) traitor.current << "You are the traitor." - if (!config.objectives_disabled) - var/obj_count = 1 - for(var/datum/objective/objective in traitor.objectives) - traitor.current << "Objective #[obj_count]: [objective.explanation_text]" - obj_count++ - else - traitor.current << "You have been selected this round as an antagonist- Within the rules, try to act as an opposing force to the crew- This can be via corporate payoff, personal motives, or maybe just being a dick. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonist." - return + show_objectives(traitor) /datum/game_mode/proc/finalize_traitor(var/datum/mind/traitor) diff --git a/code/game/gamemodes/wizard/rightandwrong.dm b/code/game/gamemodes/wizard/rightandwrong.dm index 23a04161120..ccce7f9bff6 100644 --- a/code/game/gamemodes/wizard/rightandwrong.dm +++ b/code/game/gamemodes/wizard/rightandwrong.dm @@ -13,10 +13,8 @@ survive.owner = H.mind H.mind.objectives += survive H << "You are the survivor! Your own safety matters above all else, trust no one and kill anyone who gets in your way. However, armed as you are, now would be the perfect time to settle that score or grab that pair of yellow gloves you've been eyeing..." - var/obj_count = 1 - for(var/datum/objective/OBJ in H.mind.objectives) - H << "Objective #[obj_count]: [OBJ.explanation_text]" - obj_count++ + show_objectives(H.mind) + var/randomize = pick("taser","egun","laser","revolver","detective","smg","nuclear","deagle","gyrojet","pulse","silenced","cannon","doublebarrel","shotgun","combatshotgun","mateba","smg","uzi","crossbow","saw") switch (randomize) if("taser") diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm index d28238e28f7..b79fe4ba303 100644 --- a/code/game/gamemodes/wizard/wizard.dm +++ b/code/game/gamemodes/wizard/wizard.dm @@ -135,16 +135,7 @@ /datum/game_mode/proc/greet_wizard(var/datum/mind/wizard, var/you_are=1) if (you_are) wizard.current << "\red You are the Space Wizard!" - wizard.current << "The Space Wizards Federation has given you the following tasks:" - if(!config.objectives_disabled) - var/obj_count = 1 - for(var/datum/objective/objective in wizard.objectives) - wizard.current << "Objective #[obj_count]: [objective.explanation_text]" - obj_count++ - else - wizard.current << "Within the rules, try to act as an opposing force to the crew. Further RP and try to make sure other players have fun! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! Please remember all rules aside from those without explicit exceptions apply to antagonists." - return - + show_objectives(wizard) /*/datum/game_mode/proc/learn_basic_spells(mob/living/carbon/human/wizard_mob) if (!istype(wizard_mob)) diff --git a/code/game/jobs/job/medical.dm b/code/game/jobs/job/medical.dm index 0eccf03f3c5..08e231741eb 100644 --- a/code/game/jobs/job/medical.dm +++ b/code/game/jobs/job/medical.dm @@ -211,21 +211,25 @@ minimal_access = list(access_medical, access_psychiatrist) alt_titles = list("Psychologist") - equip(var/mob/living/carbon/human/H) if(!H) return 0 H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_med(H), slot_l_ear) switch(H.backbag) - if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/medic(H), slot_back) - if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_med(H), slot_back) + if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back) + if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back) if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/device/pda/medical(H), slot_belt) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes) + if (H.mind.role_alt_title) + switch(H.mind.role_alt_title) + if("Psychiatrist") + H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/psych(H), slot_w_uniform) + if("Psychologist") + H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/psych/turtleneck(H), slot_w_uniform) + else + H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat(H), slot_wear_suit) - H.equip_to_slot_or_del(new /obj/item/device/flashlight/pen(H), slot_s_store) + H.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(H), slot_shoes) + H.equip_to_slot_or_del(new /obj/item/device/pda/medical(H), slot_belt) if(H.backbag == 1) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand) else - H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack) - return 1 + H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack) \ No newline at end of file diff --git a/code/game/machinery/camera/tracking.dm b/code/game/machinery/camera/tracking.dm index 6ca6257cc2c..a80d687f4d7 100644 --- a/code/game/machinery/camera/tracking.dm +++ b/code/game/machinery/camera/tracking.dm @@ -93,8 +93,8 @@ /mob/living/silicon/ai/proc/ai_remove_location(loc in sorted_stored_locations()) set category = "AI Commands" - set name = "Remove Camera Location" - set desc = "Removes the selected camera location" + set name = "Delete Camera Location" + set desc = "Deletes the selected camera location" if (!(loc in stored_locations)) src << "\red Location [loc] not found" diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index b1783b1707c..fba49279470 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -748,16 +748,27 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co /obj/machinery/newscaster/proc/AttachPhoto(mob/user as mob) if(photo) - photo.loc = src.loc - user.put_in_inactive_hand(photo) + if(!issilicon(user)) + photo.loc = src.loc + user.put_in_inactive_hand(photo) photo = null if(istype(user.get_active_hand(), /obj/item/weapon/photo)) photo = user.get_active_hand() user.drop_item() photo.loc = src + else if(istype(user,/mob/living/silicon)) + var/mob/living/silicon/tempAI = user + var/obj/item/device/camera/siliconcam/camera = tempAI.aiCamera + if(!camera) + return + var/datum/picture/selection = camera.selectpicture() + if (!selection) + return - + var/obj/item/weapon/photo/P = new/obj/item/weapon/photo() + P.construct(selection) + photo = P //######################################################################################################################## diff --git a/code/game/machinery/syndicatebeacon.dm b/code/game/machinery/syndicatebeacon.dm index 59e24ad3e9c..2be8fabf28c 100644 --- a/code/game/machinery/syndicatebeacon.dm +++ b/code/game/machinery/syndicatebeacon.dm @@ -86,11 +86,7 @@ M << "You have joined the ranks of the Syndicate and become a traitor to the station!" message_admins("[N]/([N.ckey]) has accepted a traitor objective from a syndicate beacon.") - - var/obj_count = 1 - for(var/datum/objective/OBJ in M.mind.objectives) - M << "Objective #[obj_count]: [OBJ.explanation_text]" - obj_count++ + show_objectives(M.mind) src.add_fingerprint(usr) src.updateUsrDialog() diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 28efdb90874..eed623620b8 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -1,9 +1,14 @@ +#define CAT_NORMAL 0 +#define CAT_HIDDEN 1 +#define CAT_COIN 2 + /datum/data/vending_product var/product_name = "generic" var/product_path = null var/amount = 0 var/price = 0 var/display_color = "blue" + var/category = CAT_NORMAL @@ -16,6 +21,7 @@ anchored = 1 density = 1 var/active = 1 //No sales pitches if off! + var/delay_product_spawn // If set, uses sleep() in product spawn proc (mostly for seeds to retrieve correct names). var/vend_ready = 1 //Are we ready to vend?? Is it time?? var/vend_delay = 10 //How long does it take to vend? var/datum/data/vending_product/currently_vending = null // A /datum/data/vending_product instance of what we're paying for right now. @@ -111,18 +117,28 @@ var/atom/temp = new typepath(null) var/datum/data/vending_product/R = new /datum/data/vending_product() - R.product_name = temp.name + R.product_path = typepath R.amount = amount R.price = price R.display_color = pick("red","blue","green") if(hidden) + R.category=CAT_HIDDEN hidden_records += R else if(req_coin) + R.category=CAT_COIN coin_records += R else + R.category=CAT_NORMAL product_records += R + + if(delay_product_spawn) + sleep(1) + R.product_name = temp.name + else + R.product_name = temp.name + // world << "Added: [R.product_name]] - [R.amount] - [R.product_path]" return @@ -251,6 +267,31 @@ /obj/machinery/vending/attack_ai(mob/user as mob) return attack_hand(user) +/obj/machinery/vending/proc/GetProductIndex(var/datum/data/vending_product/P) + var/list/plist + switch(P.category) + if(CAT_NORMAL) + plist=product_records + if(CAT_HIDDEN) + plist=hidden_records + if(CAT_COIN) + plist=coin_records + else + warning("UNKNOWN CATEGORY [P.category] IN TYPE [P.product_path] INSIDE [type]!") + return plist.Find(P) + +/obj/machinery/vending/proc/GetProductByID(var/pid, var/category) + switch(category) + if(CAT_NORMAL) + return product_records[pid] + if(CAT_HIDDEN) + return hidden_records[pid] + if(CAT_COIN) + return coin_records[pid] + else + warning("UNKNOWN PRODUCT: PID: [pid], CAT: [category] INSIDE [type]!") + return null + /obj/machinery/vending/attack_hand(mob/user as mob) if(stat & (BROKEN|NOPOWER)) return @@ -283,12 +324,11 @@ dat += "No product loaded!" else var/list/display_records = src.product_records + if(src.extended_inventory) - display_records = src.product_records + src.hidden_records + display_records += src.hidden_records if(src.coin) - display_records = src.product_records + src.coin_records - if(src.coin && src.extended_inventory) - display_records = src.product_records + src.hidden_records + src.coin_records + display_records += src.coin_records for (var/datum/data/vending_product/R in display_records) dat += "[R.product_name]:" @@ -296,7 +336,8 @@ if(R.price) dat += " (Price: [R.price])" if (R.amount > 0) - dat += " (Vend)" + var/idx=GetProductIndex(R) + dat += " (Vend)" else dat += " SOLD OUT" dat += "
" @@ -380,7 +421,10 @@ flick(src.icon_deny,src) return - var/datum/data/vending_product/R = locate(href_list["vend"]) + var/idx=text2num(href_list["vend"]) + var/cat=text2num(href_list["cat"]) + + var/datum/data/vending_product/R = GetProductByID(idx,cat) if (!R || !istype(R) || !R.product_path || R.amount <= 0) return @@ -804,7 +848,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/nutrient/ez = 35,/obj/item/nutrient/l4z = 25,/obj/item/nutrient/rh = 15,/obj/item/weapon/plantspray/pests = 20, + 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, /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) @@ -814,6 +858,8 @@ product_slogans = "THIS'S WHERE TH' SEEDS LIVE! GIT YOU SOME!;Hands down the best seed selection on the station!;Also certain mushroom varieties available, more for experts! Get certified today!" product_ads = "We like plants!;Grow some crops!;Grow, baby, growww!;Aw h'yeah son!" icon_state = "seeds" + delay_product_spawn = 1 + products = list(/obj/item/seeds/bananaseed = 3,/obj/item/seeds/berryseed = 3,/obj/item/seeds/carrotseed = 3,/obj/item/seeds/chantermycelium = 3,/obj/item/seeds/chiliseed = 3, /obj/item/seeds/cornseed = 3, /obj/item/seeds/eggplantseed = 3, /obj/item/seeds/potatoseed = 3, /obj/item/seeds/replicapod = 3,/obj/item/seeds/soyaseed = 3, /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, diff --git a/code/game/machinery/wishgranter.dm b/code/game/machinery/wishgranter.dm index 786468c0c47..2720a1c3187 100644 --- a/code/game/machinery/wishgranter.dm +++ b/code/game/machinery/wishgranter.dm @@ -66,11 +66,7 @@ silence.owner = user.mind user.mind.objectives += silence - var/obj_count = 1 - for(var/datum/objective/OBJ in user.mind.objectives) - user << "Objective #[obj_count]: [OBJ.explanation_text]" - obj_count++ - + show_objectives(user.mind) user << "You have a very bad feeling about this." return \ No newline at end of file diff --git a/code/game/mecha/mech_sensor.dm b/code/game/mecha/mech_sensor.dm index ac8bc9a30fa..d7e1937715f 100644 --- a/code/game/mecha/mech_sensor.dm +++ b/code/game/mecha/mech_sensor.dm @@ -25,6 +25,14 @@ return 1 /obj/machinery/mech_sensor/proc/is_blocked(O as obj) + if(istype(O, /obj/mecha/medical/odysseus)) + var/obj/mecha/medical/odysseus/M = O + for(var/obj/item/mecha_parts/mecha_equipment/ME in M.equipment) + if(istype(ME, /obj/item/mecha_parts/mecha_equipment/tool/sleeper)) + var/obj/item/mecha_parts/mecha_equipment/tool/sleeper/S = ME + if(S.occupant != null) + return 0 + return istype(O, /obj/mecha) || istype(O, /obj/vehicle) /obj/machinery/mech_sensor/proc/give_feedback(O as obj) diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index e287ee845d6..514a5b38f9f 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -81,6 +81,14 @@ ninjastart += loc del(src) + if("voxstart") + raider_spawn += loc + del(src) + + if("Syndicate-Spawn") + synd_spawn += loc + del(src) + landmarks_list += src return 1 diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 935760efdb1..5a78b702d04 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -552,6 +552,8 @@ ) if(istype(M, /mob/living/carbon/human)) var/datum/organ/internal/eyes/eyes = H.internal_organs_by_name["eyes"] + if(!eyes) + return eyes.damage += rand(3,4) if(eyes.damage >= eyes.min_bruised_damage) if(M.stat != 2) @@ -631,4 +633,3 @@ var/obj/item/I = get_active_hand() if(I && !I.abstract) I.showoff(src) - diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm index a7c6056f44b..9858616386c 100644 --- a/code/game/objects/items/weapons/cigs_lighters.dm +++ b/code/game/objects/items/weapons/cigs_lighters.dm @@ -71,6 +71,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM var/lastHolder = null var/smoketime = 300 var/chem_volume = 15 + body_parts_covered = 0 /obj/item/clothing/mask/cigarette/New() ..() diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm index 7424c666bec..4089a586ca0 100644 --- a/code/game/objects/items/weapons/handcuffs.dm +++ b/code/game/objects/items/weapons/handcuffs.dm @@ -14,83 +14,59 @@ origin_tech = "materials=1" var/dispenser = 0 var/breakouttime = 1200 //Deciseconds = 120s = 2 minutes + var/cuff_sound = 'sound/weapons/handcuffs.ogg' /obj/item/weapon/handcuffs/attack(mob/living/carbon/C as mob, mob/user as mob) - if(istype(src, /obj/item/weapon/handcuffs/cyborg) && isrobot(user)) - if(!C.handcuffed) - var/turf/p_loc = user.loc - var/turf/p_loc_m = C.loc - playsound(src.loc, 'sound/weapons/handcuffs.ogg', 30, 1, -2) - for(var/mob/O in viewers(user, null)) - O.show_message("\red [user] is trying to put handcuffs on [C]!", 1) - spawn(30) - if(!C) return - if(p_loc == user.loc && p_loc_m == C.loc) - C.handcuffed = new /obj/item/weapon/handcuffs(C) - C.update_inv_handcuffed() - - else - if ((CLUMSY in usr.mutations) && prob(50)) - usr << "\red Uh ... how do those things work?!" - if (istype(C, /mob/living/carbon/human)) - if(!C.handcuffed) - var/obj/effect/equip_e/human/O = new /obj/effect/equip_e/human( ) - O.source = user - O.target = user - O.item = user.get_active_hand() - O.s_loc = user.loc - O.t_loc = user.loc - O.place = "handcuff" - C.requests += O - spawn( 0 ) - O.process() + if (!istype(user, /mob/living/carbon/human)) + user << "\red You don't have the dexterity to do this!" + return + if ((CLUMSY in usr.mutations) && prob(50)) + user << "\red Uh ... how do those things work?!" + place_handcuffs(user, user) + return + if(!C.handcuffed) + //check for an aggressive grab + for (var/obj/item/weapon/grab/G in C.grabbed_by) + if (G.loc == user && G.state == GRAB_AGGRESSIVE) + place_handcuffs(C, user) return - return - if (!(istype(usr, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey") - usr << "\red You don't have the dexterity to do this!" - return - if (istype(C, /mob/living/carbon/human)) - if(!C.handcuffed) + user << "\red You need to have a firm grip on [C] before you can put \the [src] on!" - C.attack_log += text("\[[time_stamp()]\] Has been handcuffed (attempt) by [user.name] ([user.ckey])") - user.attack_log += text("\[[time_stamp()]\] Attempted to handcuff [C.name] ([C.ckey])") - msg_admin_attack("[key_name(user)] attempted to handcuff [key_name(C)]") +/obj/item/weapon/handcuffs/proc/place_handcuffs(var/mob/living/carbon/target, var/mob/user) + playsound(src.loc, cuff_sound, 30, 1, -2) - var/obj/effect/equip_e/human/O = new /obj/effect/equip_e/human( ) - O.source = user - O.target = C - O.item = user.get_active_hand() - O.s_loc = user.loc - O.t_loc = C.loc - O.place = "handcuff" - C.requests += O - spawn( 0 ) - if(istype(src, /obj/item/weapon/handcuffs/cable)) - feedback_add_details("handcuffs","C") - playsound(src.loc, 'sound/weapons/cablecuff.ogg', 30, 1, -2) - else - feedback_add_details("handcuffs","H") - playsound(src.loc, 'sound/weapons/handcuffs.ogg', 30, 1, -2) - O.process() - return - else - if(!C.handcuffed) - var/obj/effect/equip_e/monkey/O = new /obj/effect/equip_e/monkey( ) - O.source = user - O.target = C - O.item = user.get_active_hand() - O.s_loc = user.loc - O.t_loc = C.loc - O.place = "handcuff" - C.requests += O - spawn( 0 ) - if(istype(src, /obj/item/weapon/handcuffs/cable)) - playsound(src.loc, 'sound/weapons/cablecuff.ogg', 30, 1, -2) - else - playsound(src.loc, 'sound/weapons/handcuffs.ogg', 30, 1, -2) - O.process() - return - return + if (ishuman(target)) + var/mob/living/carbon/human/H = target + H.attack_log += text("\[[time_stamp()]\] Has been handcuffed (attempt) by [user.name] ([user.ckey])") + user.attack_log += text("\[[time_stamp()]\] Attempted to handcuff [H.name] ([H.ckey])") + msg_admin_attack("[key_name(user)] attempted to handcuff [key_name(H)]") + + var/obj/effect/equip_e/human/O = new /obj/effect/equip_e/human( ) + O.source = user + O.target = H + O.item = user.get_active_hand() + O.s_loc = user.loc + O.t_loc = H.loc + O.place = "handcuff" + H.requests += O + spawn( 0 ) + feedback_add_details("handcuffs","H") + O.process() + return + + if (ismonkey(target)) + var/mob/living/carbon/monkey/M = target + var/obj/effect/equip_e/monkey/O = new /obj/effect/equip_e/monkey( ) + O.source = user + O.target = M + O.item = user.get_active_hand() + O.s_loc = user.loc + O.t_loc = M.loc + O.place = "handcuff" + M.requests += O + spawn( 0 ) + O.process() + return var/last_chew = 0 /mob/living/carbon/human/RestrainedClickOn(var/atom/A) @@ -122,6 +98,7 @@ var/last_chew = 0 desc = "Looks like some cables tied together. Could be used to tie something up." icon_state = "cuff_white" breakouttime = 300 //Deciseconds = 30s + cuff_sound = 'sound/weapons/cablecuff.ogg' /obj/item/weapon/handcuffs/cable/red color = "#DD0000" @@ -162,3 +139,15 @@ var/last_chew = 0 /obj/item/weapon/handcuffs/cyborg dispenser = 1 + +/obj/item/weapon/handcuffs/cyborg/attack(mob/living/carbon/C as mob, mob/user as mob) + if(!C.handcuffed) + var/turf/p_loc = user.loc + var/turf/p_loc_m = C.loc + playsound(src.loc, cuff_sound, 30, 1, -2) + user.visible_message("\red [user] is trying to put handcuffs on [C]!") + spawn(30) + if(!C) return + if(p_loc == user.loc && p_loc_m == C.loc) + C.handcuffed = new /obj/item/weapon/handcuffs(C) + C.update_inv_handcuffed() \ 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 b64a109dff0..e3b5b8d0c5e 100644 --- a/code/game/objects/items/weapons/stunbaton.dm +++ b/code/game/objects/items/weapons/stunbaton.dm @@ -12,10 +12,11 @@ w_class = 3 origin_tech = "combat=2" attack_verb = list("beaten") - var/stunforce = 7 - var/status = 0 - var/obj/item/weapon/cell/high/bcell = null - var/hitcost = 1000 + var/stunforce = 0 + var/agonyforce = 60 + var/status = 0 //whether the thing is on or not + var/obj/item/weapon/cell/bcell = null + var/hitcost = 1000 //oh god why do power cells carry so much charge? We probably need to make a distinction between "industrial" sized power cells for APCs and power cells for everything else. /obj/item/weapon/melee/baton/suicide_act(mob/user) user.visible_message("[user] is putting the live [name] in \his mouth! It looks like \he's trying to commit suicide.") @@ -26,10 +27,9 @@ update_icon() return - /obj/item/weapon/melee/baton/loaded/New() //this one starts with a cell pre-installed. ..() - bcell = new(src) + bcell = new/obj/item/weapon/cell/high(src) update_icon() return @@ -103,64 +103,75 @@ deductcharge(hitcost) return - if(isrobot(M)) ..() return - var/mob/living/carbon/human/H = M + var/agony = agonyforce + var/stun = stunforce + var/mob/living/L = M + var/target_zone = check_zone(user.zone_sel.selecting) if(user.a_intent == "hurt") - if(!..()) return - H.visible_message("[M] has been beaten with the [src] by [user]!") - - user.attack_log += "\[[time_stamp()]\] Beat [H.name] ([H.ckey]) with [src.name]" - H.attack_log += "\[[time_stamp()]\] Beaten by [user.name] ([user.ckey]) with [src.name]" - msg_admin_attack("[user.name] ([user.ckey]) beat [H.name] ([H.ckey]) with [src.name] (JMP)") - - playsound(src.loc, "swing_hit", 50, 1, -1) - - else if(!status) - H.visible_message("[H] has been prodded with [src] by [user]. Luckily it was off.") - return - - var/stunroll = (rand(1,100)) - - if(status) - user.lastattacked = H - H.lastattacker = user - if(user == H) // Attacking yourself can't miss - stunroll = 100 - if(stunroll < 40) - H.visible_message("\red [user] misses [H] with \the [src]!") - msg_admin_attack("[key_name(user)] attempted to stun [key_name(H)] with the [src].") - return - H.Stun(stunforce) - H.Weaken(stunforce) - H.apply_effect(STUTTER, stunforce) - - H.visible_message("[H] has been stunned with [src] by [user]!") - playsound(loc, 'sound/weapons/Egloves.ogg', 50, 1, -1) - - msg_admin_attack("[key_name(user)] stunned [key_name(H)] with the [src].") - - user.attack_log += "\[[time_stamp()]\] Stunned [H.name] ([H.ckey]) with [src.name]" - H.attack_log += "\[[time_stamp()]\] Stunned by [user.name] ([user.ckey]) with [src.name]" - - if(isrobot(loc)) - var/mob/living/silicon/robot/R = loc - if(R && R.cell) - R.cell.use(hitcost) + if (!..()) //item/attack() does it's own messaging and logs + return 0 // item/attack() will return 1 if they hit, 0 if they missed. + agony *= 0.5 //whacking someone causes a much poorer contact than prodding them. + stun *= 0.5 + //we can't really extract the actual hit zone from ..(), unfortunately. Just act like they attacked the area they intended to. + 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("\red [user] misses [L] with \the [src]!") + return 0 + + var/mob/living/carbon/human/H = L + var/datum/organ/external/affecting = H.get_organ(target_zone) + if (affecting) + if(!status) + L.visible_message("[L] has been prodded in the [affecting.display_name] with [src] by [user]. Luckily it was off.") + return 1 + else + H.visible_message("[L] has been prodded in the [affecting.display_name] with [src] by [user]!") else - deductcharge(hitcost) + 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]!") + + //stun effects + L.stun_effect_act(stun, agony, target_zone, 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) + + return 1 /obj/item/weapon/melee/baton/emp_act(severity) if(bcell) - deductcharge(1000 / severity) - if(bcell.reliability != 100 && prob(50/severity)) - bcell.reliability -= 10 / severity + bcell.emp_act(severity) //let's not duplicate code everywhere if we don't have to please. ..() +//secborg stun baton module +/obj/item/weapon/melee/baton/robot/attack_self(mob/user) + //try to find our power cell + var/mob/living/silicon/robot/R = loc + if (istype(R)) + bcell = R.cell + return ..() + +/obj/item/weapon/melee/baton/robot/attackby(obj/item/weapon/W, mob/user) + return + //Makeshift stun baton. Replacement for stun gloves. /obj/item/weapon/melee/baton/cattleprod name = "stunprod" @@ -169,6 +180,8 @@ item_state = "prod" force = 3 throwforce = 5 - stunforce = 5 + stunforce = 0 + agonyforce = 60 //same force as a stunbaton, but uses way more charge. hitcost = 2500 + attack_verb = list("poked") slot_flags = null diff --git a/code/game/objects/items/weapons/swords_axes_etc.dm b/code/game/objects/items/weapons/swords_axes_etc.dm index 3e679259947..739ad8f6946 100644 --- a/code/game/objects/items/weapons/swords_axes_etc.dm +++ b/code/game/objects/items/weapons/swords_axes_etc.dm @@ -91,7 +91,7 @@ */ if (user.a_intent == "hurt") if(!..()) return - playsound(src.loc, "swing_hit", 50, 1, -1) + //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) @@ -177,7 +177,7 @@ user.take_organ_damage(2*force) return if(..()) - playsound(src.loc, "swing_hit", 50, 1, -1) + //playsound(src.loc, "swing_hit", 50, 1, -1) return else return ..() diff --git a/code/game/objects/weapons.dm b/code/game/objects/weapons.dm index f9404c18259..b62efa1c049 100644 --- a/code/game/objects/weapons.dm +++ b/code/game/objects/weapons.dm @@ -1,6 +1,7 @@ /obj/item/weapon name = "weapon" icon = 'icons/obj/weapons.dmi' + hitsound = "swing_hit" /obj/item/weapon/Bump(mob/M as mob) spawn(0) diff --git a/code/game/sound.dm b/code/game/sound.dm index 3f89ea4d18d..b5a4006e345 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -9,7 +9,7 @@ var/list/hiss_sound = list('sound/voice/hiss1.ogg','sound/voice/hiss2.ogg','soun var/list/page_sound = list('sound/effects/pageturn1.ogg', 'sound/effects/pageturn2.ogg','sound/effects/pageturn3.ogg') //var/list/gun_sound = list('sound/weapons/Gunshot.ogg', 'sound/weapons/Gunshot2.ogg','sound/weapons/Gunshot3.ogg','sound/weapons/Gunshot4.ogg') -/proc/playsound(var/atom/source, soundin, vol as num, vary, extrarange as num, falloff) +/proc/playsound(var/atom/source, soundin, vol as num, vary, extrarange as num, falloff, var/is_global) soundin = get_sfx(soundin) // same sound for everyone @@ -25,28 +25,17 @@ var/list/page_sound = list('sound/effects/pageturn1.ogg', 'sound/effects/pagetur var/mob/M = P if(!M || !M.client) continue - + var/distance = get_dist(M, turf_source) if(distance <= (world.view + extrarange) * 3) var/turf/T = get_turf(M) - + if(T && T.z == turf_source.z) - //check that the air can transmit sound - var/datum/gas_mixture/environment = T.return_air() - if (!environment || environment.return_pressure() < SOUND_MINIMUM_PRESSURE) - if (distance > 1) - continue - - var/new_frequency = 32000 + (frequency - 32000)*0.125 //lower the frequency. very rudimentary - var/new_volume = vol*0.15 //muffle the sound, like we're hearing through contact - M.playsound_local(turf_source, soundin, new_volume, vary, new_frequency, falloff) - else - M.playsound_local(turf_source, soundin, vol, vary, frequency, falloff) + M.playsound_local(turf_source, soundin, vol, vary, frequency, falloff, is_global) -var/const/FALLOFF_SOUNDS = 2 -var/const/SURROUND_CAP = 255 +var/const/FALLOFF_SOUNDS = 0.5 -/mob/proc/playsound_local(var/turf/turf_source, soundin, vol as num, vary, frequency, falloff) +/mob/proc/playsound_local(var/turf/turf_source, soundin, vol as num, vary, frequency, falloff, is_global) if(!src.client || ear_deaf > 0) return soundin = get_sfx(soundin) @@ -54,8 +43,7 @@ var/const/SURROUND_CAP = 255 S.wait = 0 //No queue S.channel = 0 //Any channel S.volume = vol - S.environment = 2 - + S.environment = -1 if (vary) if(frequency) S.frequency = frequency @@ -65,20 +53,43 @@ var/const/SURROUND_CAP = 255 if(isturf(turf_source)) // 3D sounds, the technology is here! var/turf/T = get_turf(src) - S.volume -= get_dist(T, turf_source) * 0.75 - if (S.volume < 0) - S.volume = 0 + + //sound volume falloff with distance + var/distance = get_dist(T, turf_source) + + S.volume -= max(distance - world.view, 0) * 2 //multiplicative falloff to add on top of natural audio falloff. + + //sound volume falloff with pressure + var/pressure_factor = 1.0 + + var/datum/gas_mixture/hearer_env = T.return_air() + var/datum/gas_mixture/source_env = turf_source.return_air() + + if (hearer_env && source_env) + var/pressure = min(hearer_env.return_pressure(), source_env.return_pressure()) + + if (pressure < ONE_ATMOSPHERE) + pressure_factor = max((pressure - SOUND_MINIMUM_PRESSURE)/(ONE_ATMOSPHERE - SOUND_MINIMUM_PRESSURE), 0) + else //in space + pressure_factor = 0 + + if (distance <= 1) + pressure_factor = max(pressure_factor, 0.15) //hearing through contact + + S.volume *= pressure_factor + + if (S.volume <= 0) + return //no volume means no sound + var/dx = turf_source.x - T.x // Hearing from the right/left - - S.x = round(max(-SURROUND_CAP, min(SURROUND_CAP, dx)), 1) - + S.x = dx var/dz = turf_source.y - T.y // Hearing from infront/behind - S.z = round(max(-SURROUND_CAP, min(SURROUND_CAP, dz)), 1) - + S.z = dz // The y value is for above your head, but there is no ceiling in 2d spessmens. S.y = 1 S.falloff = (falloff ? falloff : FALLOFF_SOUNDS) - + if(!is_global) + S.environment = 2 src << S /client/proc/playtitlemusic() diff --git a/code/game/supplyshuttle.dm b/code/game/supplyshuttle.dm index 0b042eeb7b2..1ef29b5065e 100644 --- a/code/game/supplyshuttle.dm +++ b/code/game/supplyshuttle.dm @@ -21,14 +21,14 @@ var/list/mechtoys = list( ) /area/supply/station //DO NOT TURN THE lighting_use_dynamic STUFF ON FOR SHUTTLES. IT BREAKS THINGS. - name = "supply shuttle" + name = "Supply Shuttle" icon_state = "shuttle3" luminosity = 1 lighting_use_dynamic = 0 requires_power = 0 /area/supply/dock //DO NOT TURN THE lighting_use_dynamic STUFF ON FOR SHUTTLES. IT BREAKS THINGS. - name = "supply shuttle" + name = "Supply Shuttle" icon_state = "shuttle3" luminosity = 1 lighting_use_dynamic = 0 @@ -54,7 +54,10 @@ var/list/mechtoys = list( if (istype(A, /obj/structure/stool/bed) && B.buckled_mob)//if it's a bed/chair and someone is buckled, it will not pass return 0 - else if(istype(A, /mob/living)) // You Shall Not Pass! + if(istype(A, /obj/vehicle)) //no vehicles + return 0 + + if(istype(A, /mob/living)) // You Shall Not Pass! var/mob/living/M = A if(!M.lying && !istype(M, /mob/living/carbon/monkey) && !istype(M, /mob/living/carbon/slime) && !istype(M, /mob/living/simple_animal/mouse) && !istype(M, /mob/living/silicon/robot/drone)) //If your not laying down, or a small creature, no pass. return 0 @@ -455,7 +458,7 @@ var/list/mechtoys = list( if ("undocking") dat += "Undocking from station [shuttle.can_force()? "Force Launch" : ""]
" else dat += "Station
" - + if (shuttle.can_launch()) dat += "Send away" else if (shuttle.can_cancel()) @@ -472,14 +475,14 @@ var/list/mechtoys = list( else dat += "*Shuttle is busy*" dat += "
\n
" - - + + dat += {"
\nSupply points: [supply_controller.points]
\n
\nOrder items
\n
\nView requests
\n
\nView orders
\n
\nClose"} - + user << browse(dat, "window=computer;size=575x450") onclose(user, "computer") @@ -520,13 +523,13 @@ var/list/mechtoys = list( shuttle.launch(src) temp = "The supply shuttle has been called and will arrive in approximately [round(supply_controller.movetime/600,1)] minutes.

OK" post_signal("supply") - + if (href_list["force_send"]) shuttle.force_launch(src) if (href_list["cancel_send"]) shuttle.cancel_launch(src) - + else if (href_list["order"]) //if(!shuttle.idle()) return //this shouldn't be necessary it seems if(href_list["order"] == "categories") diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index ac67a624e35..0a83ce49030 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -481,6 +481,9 @@ if(ticker.mode.traitors.len) dat += check_role_table("Traitors", ticker.mode.traitors, src) + if(ticker.mode.borers.len) + dat += check_role_table("Cortical Borers", ticker.mode.borers, src) + var/datum/game_mode/mutiny/mutiny = get_mutiny_mode() if(mutiny) dat += mutiny.check_antagonists_ui(src) diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm index fc147e04fda..95fbc615c8a 100644 --- a/code/modules/admin/verbs/one_click_antag.dm +++ b/code/modules/admin/verbs/one_click_antag.dm @@ -533,7 +533,7 @@ client/proc/one_click_antag() if(ticker.mode && ( istype( ticker.mode,/datum/game_mode/heist ) ) ) var/datum/game_mode/heist/M = ticker.mode - M.cortical_stacks += I + cortical_stacks += I M.raiders[new_vox.mind] = I ticker.mode.traitors += new_vox.mind diff --git a/code/modules/admin/verbs/onlyone.dm b/code/modules/admin/verbs/onlyone.dm index 822043720d7..aa99b4bd469 100644 --- a/code/modules/admin/verbs/onlyone.dm +++ b/code/modules/admin/verbs/onlyone.dm @@ -20,10 +20,7 @@ H.mind.objectives += hijack_objective H << "You are the traitor." - var/obj_count = 1 - for(var/datum/objective/OBJ in H.mind.objectives) - H << "Objective #[obj_count]: [OBJ.explanation_text]" - obj_count++ + show_objectives(H.mind) for (var/obj/item/I in H) if (istype(I, /obj/item/weapon/implant)) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index e947e4ff75d..0aee3c0cf33 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -107,7 +107,8 @@ datum/preferences var/list/organ_data = list() var/list/player_alt_titles = new() // the default name of a job like "Medical Doctor" - var/flavor_text = "" + var/list/flavor_texts = list() + var/med_record = "" var/sec_record = "" var/gen_record = "" @@ -386,14 +387,7 @@ datum/preferences dat += "\tSet Skills ([GetSkillClass(used_skillpoints)][used_skillpoints > 0 ? " [used_skillpoints]" : "0"])
" - dat += "Set Flavor Text
" - if(lentext(flavor_text) <= 40) - if(!lentext(flavor_text)) - dat += "\[...\]" - else - dat += "[flavor_text]" - else - dat += "[copytext(flavor_text, 1, 37)]...
" + dat += "Set Flavor Text
" dat += "
" dat += "
Hair
" @@ -558,24 +552,15 @@ datum/preferences HTML += "Medical Records
" - if(lentext(med_record) <= 40) - HTML += "[med_record]" - else - HTML += "[copytext(med_record, 1, 37)]..." + HTML += TextPreview(med_record,40) HTML += "

Employment Records
" - if(lentext(gen_record) <= 40) - HTML += "[gen_record]" - else - HTML += "[copytext(gen_record, 1, 37)]..." + HTML += TextPreview(gen_record,40) HTML += "

Security Records
" - if(lentext(sec_record) <= 40) - HTML += "[sec_record]
" - else - HTML += "[copytext(sec_record, 1, 37)]...
" + HTML += TextPreview(sec_record,40) HTML += "
" HTML += "\[Done\]" @@ -603,7 +588,44 @@ datum/preferences user << browse(HTML, "window=antagoptions") return - + proc/SetFlavorText(mob/user) + var/HTML = "" + HTML += "
" + HTML += "Set Flavour Text
" + HTML += "
" + HTML += "General: " + HTML += TextPreview(flavor_texts["general"]) + HTML += "
" + HTML += "Head: " + HTML += TextPreview(flavor_texts["head"]) + HTML += "
" + HTML += "Face: " + HTML += TextPreview(flavor_texts["face"]) + HTML += "
" + HTML += "Eyes: " + HTML += TextPreview(flavor_texts["eyes"]) + HTML += "
" + HTML += "Body: " + HTML += TextPreview(flavor_texts["torso"]) + HTML += "
" + HTML += "Arms: " + HTML += TextPreview(flavor_texts["arms"]) + HTML += "
" + HTML += "Hands: " + HTML += TextPreview(flavor_texts["hands"]) + HTML += "
" + HTML += "Legs: " + HTML += TextPreview(flavor_texts["legs"]) + HTML += "
" + HTML += "Feet: " + HTML += TextPreview(flavor_texts["feet"]) + HTML += "
" + HTML += "
" + HTML +="\[Done\]" + HTML += "" + user << browse(null, "window=preferences") + user << browse(HTML, "window=flavor_text;size=430x300") + return proc/GetPlayerAltTitle(datum/job/job) return player_alt_titles.Find(job.title) > 0 \ @@ -805,6 +827,72 @@ datum/preferences SetSkills(user) return 1 + else if (href_list["preference"] == "loadout") + + if(href_list["task"] == "input") + + var/list/valid_gear_choices = list() + + for(var/gear_name in gear_datums) + var/datum/gear/G = gear_datums[gear_name] + if(G.whitelisted && !is_alien_whitelisted(user, G.whitelisted)) + continue + valid_gear_choices += gear_name + + var/choice = input(user, "Select gear to add: ") as null|anything in valid_gear_choices + + if(choice && gear_datums[choice]) + + var/total_cost = 0 + + if(isnull(gear) || !islist(gear)) gear = list() + + if(gear && gear.len) + for(var/gear_name in gear) + if(gear_datums[gear_name]) + var/datum/gear/G = gear_datums[gear_name] + total_cost += G.cost + + var/datum/gear/C = gear_datums[choice] + total_cost += C.cost + if(C && total_cost <= MAX_GEAR_COST) + gear += choice + user << "\blue Added [choice] for [C.cost] points ([MAX_GEAR_COST - total_cost] points remaining)." + else + user << "\red That item will exceed the maximum loadout cost of [MAX_GEAR_COST] points." + + else if(href_list["task"] == "remove") + var/to_remove = href_list["gear"] + if(!to_remove) return + for(var/gear_name in gear) + if(gear_name == to_remove) + gear -= gear_name + break + + else if(href_list["preference"] == "flavor_text") + switch(href_list["task"]) + if("open") + SetFlavorText(user) + return + if("done") + user << browse(null, "window=flavor_text") + ShowChoices(user) + return + if("general") + var/msg = input(usr,"Give a general description of your character. This will be shown regardless of clothing, and may include OOC notes and preferences.","Flavor Text",html_decode(flavor_texts[href_list["task"]])) as message + if(msg != null) + msg = copytext(msg, 1, MAX_MESSAGE_LEN) + msg = html_encode(msg) + flavor_texts[href_list["task"]] = msg + else + var/msg = input(usr,"Set the flavor text for your [href_list["task"]].","Flavor Text",html_decode(flavor_texts[href_list["task"]])) as message + if(msg != null) + msg = copytext(msg, 1, MAX_MESSAGE_LEN) + msg = html_encode(msg) + flavor_texts[href_list["task"]] = msg + SetFlavorText(user) + return + else if(href_list["preference"] == "records") if(text2num(href_list["record"]) >= 1) SetRecords(user) @@ -943,11 +1031,13 @@ datum/preferences if("input") switch(href_list["preference"]) if("name") - var/new_name = reject_bad_name( input(user, "Choose your character's name:", "Character Preference") as text|null ) - if(new_name) - real_name = new_name - else - user << "Invalid name. Your name should be at least 2 and at most [MAX_NAME_LEN] characters long. It may only contain the characters A-Z, a-z, -, ' and ." + var/raw_name = input(user, "Choose your character's name:", "Character Preference") as text|null + if (!isnull(raw_name)) // Check to ensure that the user entered text (rather than cancel.) + var/new_name = reject_bad_name(raw_name) + if(new_name) + real_name = new_name + else + user << "Invalid name. Your name should be at least 2 and at most [MAX_NAME_LEN] characters long. It may only contain the characters A-Z, a-z, -, ' and ." if("age") var/new_age = input(user, "Choose your character's age:\n([AGE_MIN]-[AGE_MAX])", "Character Preference") as num|null @@ -1152,15 +1242,6 @@ datum/preferences if(new_relation) nanotrasen_relation = new_relation - if("flavor_text") - var/msg = input(usr,"Set the flavor text in your 'examine' verb. This can also be used for OOC notes and preferences!","Flavor Text",html_decode(flavor_text)) as message - - if(msg != null) - msg = copytext(msg, 1, MAX_MESSAGE_LEN) - msg = html_encode(msg) - - flavor_text = msg - if("disabilities") if(text2num(href_list["disabilities"]) >= -1) if(text2num(href_list["disabilities"]) >= 0) @@ -1356,7 +1437,16 @@ datum/preferences if(character.dna) character.dna.real_name = character.real_name - character.flavor_text = flavor_text + character.flavor_texts["general"] = flavor_texts["general"] + character.flavor_texts["head"] = flavor_texts["head"] + character.flavor_texts["face"] = flavor_texts["face"] + character.flavor_texts["eyes"] = flavor_texts["eyes"] + character.flavor_texts["torso"] = flavor_texts["torso"] + character.flavor_texts["arms"] = flavor_texts["arms"] + character.flavor_texts["hands"] = flavor_texts["hands"] + character.flavor_texts["legs"] = flavor_texts["legs"] + character.flavor_texts["feet"] = flavor_texts["feet"] + character.med_record = med_record character.sec_record = sec_record character.gen_record = gen_record diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index ef3b8e5c035..896be32bace 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -143,8 +143,18 @@ S["job_engsec_med"] >> job_engsec_med S["job_engsec_low"] >> job_engsec_low + //Flavour Text + S["flavor_texts_general"] >> flavor_texts["general"] + S["flavor_texts_head"] >> flavor_texts["head"] + S["flavor_texts_face"] >> flavor_texts["face"] + S["flavor_texts_eyes"] >> flavor_texts["eyes"] + S["flavor_texts_torso"] >> flavor_texts["torso"] + S["flavor_texts_arms"] >> flavor_texts["arms"] + S["flavor_texts_hands"] >> flavor_texts["hands"] + S["flavor_texts_legs"] >> flavor_texts["legs"] + S["flavor_texts_feet"] >> flavor_texts["feet"] + //Miscellaneous - S["flavor_text"] >> flavor_text S["med_record"] >> med_record S["sec_record"] >> sec_record S["gen_record"] >> gen_record @@ -264,8 +274,18 @@ S["job_engsec_med"] << job_engsec_med S["job_engsec_low"] << job_engsec_low + //Flavour Text + S["flavor_texts_general"] << flavor_texts["general"] + S["flavor_texts_head"] << flavor_texts["head"] + S["flavor_texts_face"] << flavor_texts["face"] + S["flavor_texts_eyes"] << flavor_texts["eyes"] + S["flavor_texts_torso"] << flavor_texts["torso"] + S["flavor_texts_arms"] << flavor_texts["arms"] + S["flavor_texts_hands"] << flavor_texts["hands"] + S["flavor_texts_legs"] << flavor_texts["legs"] + S["flavor_texts_feet"] << flavor_texts["feet"] + //Miscellaneous - S["flavor_text"] << flavor_text S["med_record"] << med_record S["sec_record"] << sec_record S["gen_record"] << gen_record diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 558bb9dcb77..38f39edff56 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -188,6 +188,7 @@ BLIND // can't see anything icon = 'icons/obj/clothing/masks.dmi' body_parts_covered = HEAD slot_flags = SLOT_MASK + body_parts_covered = FACE|EYES sprite_sheets = list("Vox" = 'icons/mob/species/vox/masks.dmi') /obj/item/clothing/mask/proc/filter_air(datum/gas_mixture/air) @@ -213,6 +214,7 @@ BLIND // can't see anything name = "suit" var/fire_resist = T0C+100 flags = FPRINT | TABLEPASS + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS allowed = list(/obj/item/weapon/tank/emergency_oxygen) armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) slot_flags = SLOT_OCLOTHING @@ -232,6 +234,7 @@ BLIND // can't see anything permeability_coefficient = 0.01 armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50) flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE + body_parts_covered = HEAD|FACE|EYES cold_protection = HEAD min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE siemens_coefficient = 0.9 diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index 8ae0d2aa63c..712265bbb25 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -9,6 +9,7 @@ //var/darkness_view = 0//Base human is 2 //var/invisa_view = 0 var/prescription = 0 + body_parts_covered = EYES /obj/item/clothing/glasses/meson name = "Optical Meson Scanner" @@ -42,12 +43,14 @@ desc = "Yarr." icon_state = "eyepatch" item_state = "eyepatch" + body_parts_covered = 0 /obj/item/clothing/glasses/monocle name = "monocle" desc = "Such a dapper eyepiece!" icon_state = "monocle" item_state = "headset" // lol + body_parts_covered = 0 /obj/item/clothing/glasses/material name = "Optical Material Scanner" @@ -63,6 +66,7 @@ icon_state = "glasses" item_state = "glasses" prescription = 1 + body_parts_covered = 0 /obj/item/clothing/glasses/regular/hipster name = "Prescription Glasses" @@ -75,12 +79,14 @@ name = "3D glasses" icon_state = "3d" item_state = "3d" + body_parts_covered = 0 /obj/item/clothing/glasses/gglasses name = "Green Glasses" desc = "Forest green glasses, like the kind you'd wear when hatching a nasty scheme." icon_state = "gglasses" item_state = "gglasses" + body_parts_covered = 0 /obj/item/clothing/glasses/sunglasses desc = "Strangely ancient technology used to help provide rudimentary eye cover. Enhanced shielding blocks many flashes." @@ -111,12 +117,14 @@ src.up = !src.up src.flags |= GLASSESCOVERSEYES flags_inv |= HIDEEYES + body_parts_covered |= EYES icon_state = initial(icon_state) usr << "You flip \the [src] down to protect your eyes." else src.up = !src.up src.flags &= ~HEADCOVERSEYES flags_inv &= ~HIDEEYES + body_parts_covered &= ~EYES icon_state = "[initial(icon_state)]up" usr << "You push \the [src] up out of your face." @@ -193,12 +201,14 @@ desc = "A monocle thermal." icon_state = "thermoncle" flags = null //doesn't protect eyes because it's a monocle, duh + body_parts_covered = 0 /obj/item/clothing/glasses/thermal/eyepatch name = "Optical Thermal Eyepatch" desc = "An eyepatch with built-in thermal optics" icon_state = "eyepatch" item_state = "eyepatch" + body_parts_covered = 0 /obj/item/clothing/glasses/thermal/jensen name = "Optical Thermal Implants" diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index f541c837e6a..1f252e4b28e 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -14,7 +14,7 @@ name = "Health Scanner HUD" desc = "A heads-up display that scans the humans in view and provides accurate data about their health status." icon_state = "healthhud" - + body_parts_covered = 0 /obj/item/clothing/glasses/hud/health/process_hud(var/mob/M) @@ -32,7 +32,8 @@ name = "Security HUD" desc = "A heads-up display that scans the humans in view and provides accurate data about their ID status and security records." icon_state = "securityhud" - var/global/list/jobs[0] + body_parts_covered = 0 + var/global/list/jobs[0] /obj/item/clothing/glasses/hud/security/jensenshades name = "Augmented shades" diff --git a/code/modules/clothing/head/collectable.dm b/code/modules/clothing/head/collectable.dm index c944fbd63b6..bf20b3e9528 100644 --- a/code/modules/clothing/head/collectable.dm +++ b/code/modules/clothing/head/collectable.dm @@ -15,50 +15,58 @@ name = "collectable slime cap!" desc = "It just latches right in place!" icon_state = "slime" + body_parts_covered = 0 /obj/item/clothing/head/collectable/xenom name = "collectable xenomorph helmet!" desc = "Hiss hiss hiss!" icon_state = "xenom" + body_parts_covered = HEAD|FACE|EYES /obj/item/clothing/head/collectable/chef name = "collectable chef's hat" desc = "A rare Chef's Hat meant for hat collectors!" - icon_state = "chef" + icon_state = "hats" item_state = "chefhat" /obj/item/clothing/head/collectable/paper name = "collectable paper hat" desc = "What looks like an ordinary paper hat, is actually a rare and valuable collector's edition paper hat. Keep away from water, fire and Librarians." icon_state = "paper" + body_parts_covered = 0 /obj/item/clothing/head/collectable/tophat name = "collectable top hat" desc = "A top hat worn by only the most prestigious hat collectors." icon_state = "tophat" item_state = "that" + body_parts_covered = 0 /obj/item/clothing/head/collectable/captain name = "collectable captain's hat" desc = "A Collectable Hat that'll make you look just like a real comdom!" icon_state = "captain" item_state = "caphat" + body_parts_covered = 0 /obj/item/clothing/head/collectable/police name = "collectable police officer's hat" desc = "A Collectable Police Officer's Hat. This hat emphasizes that you are THE LAW." icon_state = "policehelm" + body_parts_covered = 0 /obj/item/clothing/head/collectable/beret name = "collectable beret" desc = "A Collectable red Beret. It smells faintly of Garlic." icon_state = "beret" + body_parts_covered = 0 /obj/item/clothing/head/collectable/welding name = "collectable welding helmet" desc = "A Collectable Welding Helmet. Now with 80% less lead! Not for actual welding. Any welding done while wearing this Helmet is done so at the owner's own risk!" icon_state = "welding" item_state = "welding" + body_parts_covered = HEAD|FACE|EYES /obj/item/clothing/head/collectable/slime name = "collectable slime hat" @@ -77,18 +85,21 @@ desc = "You'd make a great Dread Syndie Roberts!" icon_state = "pirate" item_state = "pirate" + body_parts_covered = 0 /obj/item/clothing/head/collectable/kitty name = "collectable kitty ears" desc = "The fur feels.....a bit too realistic." icon_state = "kitty" item_state = "kitty" + body_parts_covered = 0 /obj/item/clothing/head/collectable/rabbitears name = "collectable rabbit ears" desc = "Not as lucky as the feet!" icon_state = "bunny" item_state = "bunny" + body_parts_covered = 0 /obj/item/clothing/head/collectable/wizard name = "collectable wizard's hat" @@ -100,11 +111,13 @@ desc = "WARNING! Offers no real protection, or luminosity, but it is damn fancy!" icon_state = "hardhat0_yellow" item_state = "hardhat0_yellow" + body_parts_covered = 0 /obj/item/clothing/head/collectable/HoS name = "collectable HoS hat" desc = "Now you can beat prisoners, set silly sentences and arrest for no reason too!" icon_state = "hoscap" + body_parts_covered = 0 /obj/item/clothing/head/collectable/thunderdome name = "collectable Thunderdome helmet" diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 9b1bdc1e14d..ba795dc06f1 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -18,6 +18,7 @@ desc = "It's a special helmet issued to the Warden of a securiy force. Protects the head from impacts." icon_state = "policehelm" flags_inv = 0 + body_parts_covered = 0 /obj/item/clothing/head/helmet/riot name = "riot helmet" @@ -67,6 +68,7 @@ icon_state = "swathelm" item_state = "helmet" flags = FPRINT|TABLEPASS|HEADCOVERSEYES + armor = list(melee = 62, bullet = 50, laser = 50,energy = 35, bomb = 10, bio = 2, rad = 0) flags_inv = HIDEEARS siemens_coefficient = 0.7 \ No newline at end of file diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index 692cc90b637..83a34e5c9a7 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -25,9 +25,11 @@ icon_state = "capcap" flags = FPRINT|TABLEPASS flags_inv = 0 + body_parts_covered = 0 cold_protection = HEAD min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE siemens_coefficient = 0.9 + body_parts_covered = 0 //Chaplain /obj/item/clothing/head/chaplain_hood @@ -36,6 +38,7 @@ icon_state = "chaplain_hood" flags = FPRINT|TABLEPASS|HEADCOVERSEYES|BLOCKHAIR siemens_coefficient = 0.9 + body_parts_covered = HEAD|EYES //Chaplain /obj/item/clothing/head/nun_hood @@ -52,6 +55,7 @@ icon_state = "beret" flags = FPRINT | TABLEPASS siemens_coefficient = 0.9 + body_parts_covered = 0 //Security /obj/item/clothing/head/beret/sec diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index 32f01a10c8e..cf5530b306a 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -7,6 +7,7 @@ flags = FPRINT|TABLEPASS item_state = "centhat" siemens_coefficient = 0.9 + body_parts_covered = 0 /obj/item/clothing/head/hairflower name = "hair flower pin" @@ -14,6 +15,7 @@ desc = "Smells nice." item_state = "hairflower" flags = FPRINT|TABLEPASS + body_parts_covered = 0 /obj/item/clothing/head/powdered_wig name = "powdered wig" @@ -28,18 +30,21 @@ item_state = "that" flags = FPRINT|TABLEPASS siemens_coefficient = 0.9 + body_parts_covered = 0 /obj/item/clothing/head/redcoat name = "redcoat's hat" icon_state = "redcoat" desc = "'I guess it's a redhead.'" flags = FPRINT | TABLEPASS + body_parts_covered = 0 /obj/item/clothing/head/mailman name = "mailman's hat" icon_state = "mailman" desc = "'Right-on-time' mail service head wear." flags = FPRINT | TABLEPASS + body_parts_covered = 0 /obj/item/clothing/head/plaguedoctorhat name = "plague doctor's hat" @@ -48,12 +53,14 @@ flags = FPRINT | TABLEPASS permeability_coefficient = 0.01 siemens_coefficient = 0.9 + body_parts_covered = 0 /obj/item/clothing/head/hasturhood name = "hastur's hood" desc = "It's unspeakably stylish" icon_state = "hasturhood" flags = FPRINT|TABLEPASS|HEADCOVERSEYES|BLOCKHAIR + body_parts_covered = HEAD|FACE|EYES /obj/item/clothing/head/nursehat name = "nurse's hat" @@ -61,6 +68,7 @@ icon_state = "nursehat" flags = FPRINT|TABLEPASS siemens_coefficient = 0.9 + body_parts_covered = 0 /obj/item/clothing/head/syndicatefake name = "red space-helmet replica" @@ -70,6 +78,7 @@ flags = FPRINT | TABLEPASS | BLOCKHAIR flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE siemens_coefficient = 2.0 + body_parts_covered = HEAD|FACE|EYES /obj/item/clothing/head/cueball name = "cueball helmet" @@ -78,15 +87,7 @@ flags = FPRINT|TABLEPASS|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR item_state="cueball" flags_inv = 0 - -/obj/item/clothing/head/that - name = "sturdy top-hat" - desc = "It's an amish looking armored top hat." - icon_state = "tophat" - item_state = "that" - flags = FPRINT|TABLEPASS - flags_inv = 0 - + body_parts_covered = HEAD|FACE|EYES /obj/item/clothing/head/greenbandana name = "green bandana" @@ -95,6 +96,7 @@ item_state = "greenbandana" flags = FPRINT|TABLEPASS flags_inv = 0 + body_parts_covered = 0 /obj/item/clothing/head/cardborg name = "cardborg helmet" @@ -103,6 +105,7 @@ item_state = "cardborg_h" flags = FPRINT | TABLEPASS | HEADCOVERSEYES | HEADCOVERSMOUTH flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE + body_parts_covered = HEAD|FACE|EYES /obj/item/clothing/head/justice name = "justice hat" @@ -132,6 +135,7 @@ desc = "Wearing these makes you looks useless, and only good for your sex appeal." icon_state = "bunny" flags = FPRINT | TABLEPASS + body_parts_covered = 0 /obj/item/clothing/head/flatcap name = "flat cap" @@ -145,12 +149,14 @@ desc = "Yarr." icon_state = "pirate" item_state = "pirate" + body_parts_covered = 0 /obj/item/clothing/head/hgpiratecap name = "pirate hat" desc = "Yarr." icon_state = "hgpiratecap" item_state = "hgpiratecap" + body_parts_covered = 0 /obj/item/clothing/head/bandana name = "pirate bandana" @@ -164,6 +170,7 @@ icon_state = "bowler" item_state = "bowler" flags = FPRINT | TABLEPASS + body_parts_covered = 0 //stylish bs12 hats @@ -173,6 +180,7 @@ item_state = "bowler_hat" desc = "For the gentleman of distinction." flags = FPRINT|TABLEPASS + body_parts_covered = 0 /obj/item/clothing/head/beaverhat name = "beaver hat" @@ -226,6 +234,7 @@ item_state = "chickensuit" flags = FPRINT | TABLEPASS | BLOCKHAIR siemens_coefficient = 2.0 + body_parts_covered = HEAD|FACE|EYES /obj/item/clothing/head/bearpelt name = "bear pelt hat" @@ -243,3 +252,4 @@ flags = FPRINT | TABLEPASS | BLOCKHAIR flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE siemens_coefficient = 2.0 + body_parts_covered = HEAD|FACE|EYES diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index 59d6bb36c37..f76819bc2e1 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -21,6 +21,7 @@ var/up = 0 armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) flags_inv = (HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE) + body_parts_covered = HEAD|FACE|EYES icon_action_button = "action_welding" siemens_coefficient = 0.9 w_class = 3 @@ -62,6 +63,7 @@ var/status = 0 var/fire_resist = T0C+1300 //this is the max temp it can stand before you start to cook. although it might not burn away, you take damage var/processing = 0 //I dont think this is used anywhere. + body_parts_covered = EYES /obj/item/clothing/head/cakehat/process() if(!onfire) @@ -123,6 +125,7 @@ item_color = "pumpkin" flags = FPRINT | TABLEPASS | HEADCOVERSEYES | HEADCOVERSMOUTH | BLOCKHAIR flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE + body_parts_covered = HEAD|EYES var/brightness_on = 2 //luminosity when on var/on = 0 w_class = 3 @@ -158,6 +161,7 @@ desc = "A pair of kitty ears. Meow!" icon_state = "kitty" flags = FPRINT | TABLEPASS + body_parts_covered = 0 var/icon/mob var/icon/mob2 siemens_coefficient = 1.5 diff --git a/code/modules/clothing/head/soft_caps.dm b/code/modules/clothing/head/soft_caps.dm index 65f265f23f4..320791888ec 100644 --- a/code/modules/clothing/head/soft_caps.dm +++ b/code/modules/clothing/head/soft_caps.dm @@ -7,6 +7,7 @@ item_color = "cargo" var/flipped = 0 siemens_coefficient = 0.9 + body_parts_covered = 0 dropped() src.icon_state = "[item_color]soft" diff --git a/code/modules/clothing/masks/boxing.dm b/code/modules/clothing/masks/boxing.dm index 7a94a7bc943..0a3b8e08b72 100644 --- a/code/modules/clothing/masks/boxing.dm +++ b/code/modules/clothing/masks/boxing.dm @@ -5,6 +5,7 @@ item_state = "balaclava" flags = FPRINT|TABLEPASS|BLOCKHAIR flags_inv = HIDEFACE + body_parts_covered = FACE w_class = 2 /obj/item/clothing/mask/balaclava/tactical @@ -23,6 +24,7 @@ item_state = "luchag" flags = FPRINT|TABLEPASS|BLOCKHAIR flags_inv = HIDEFACE + body_parts_covered = HEAD|FACE w_class = 2 siemens_coefficient = 3.0 diff --git a/code/modules/clothing/masks/breath.dm b/code/modules/clothing/masks/breath.dm index f4609c4ed51..220f1daf7c6 100644 --- a/code/modules/clothing/masks/breath.dm +++ b/code/modules/clothing/masks/breath.dm @@ -4,6 +4,7 @@ icon_state = "breath" item_state = "breath" flags = FPRINT | TABLEPASS | MASKCOVERSMOUTH | MASKINTERNALS + body_parts_covered = 0 w_class = 2 gas_transfer_coefficient = 0.10 permeability_coefficient = 0.50 diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index 841c233f559..4014b59dece 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -4,6 +4,7 @@ icon_state = "gas_alt" flags = FPRINT | TABLEPASS | MASKCOVERSMOUTH | MASKCOVERSEYES | BLOCK_GAS_SMOKE_EFFECT | MASKINTERNALS flags_inv = HIDEEARS|HIDEEYES|HIDEFACE + body_parts_covered = FACE|EYES w_class = 3.0 item_state = "gas_alt" gas_transfer_coefficient = 0.01 @@ -32,12 +33,14 @@ icon_state = "plaguedoctor" item_state = "gas_mask" armor = list(melee = 0, bullet = 0, laser = 2,energy = 2, bomb = 0, bio = 75, rad = 0) + body_parts_covered = HEAD|FACE /obj/item/clothing/mask/gas/swat name = "\improper SWAT mask" desc = "A close-fitting tactical mask that can be connected to an air supply." icon_state = "swat" siemens_coefficient = 0.7 + body_parts_covered = FACE|EYES /obj/item/clothing/mask/gas/syndicate name = "syndicate mask" @@ -84,6 +87,7 @@ desc = "A mask used when acting as a monkey." icon_state = "monkeymask" item_state = "monkeymask" + body_parts_covered = HEAD|FACE|EYES /obj/item/clothing/mask/gas/sexymime name = "sexy mime mask" diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm index 57420bbfe0f..8cc12fb172f 100644 --- a/code/modules/clothing/masks/miscellaneous.dm +++ b/code/modules/clothing/masks/miscellaneous.dm @@ -4,6 +4,7 @@ icon_state = "muzzle" item_state = "muzzle" flags = FPRINT|TABLEPASS|MASKCOVERSMOUTH + body_parts_covered = 0 w_class = 2 gas_transfer_coefficient = 0.90 @@ -23,6 +24,7 @@ item_state = "sterile" w_class = 2 flags = FPRINT|TABLEPASS|MASKCOVERSMOUTH + body_parts_covered = 0 gas_transfer_coefficient = 0.90 permeability_coefficient = 0.01 armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 25, rad = 0) @@ -33,6 +35,7 @@ icon_state = "fake-moustache" flags = FPRINT|TABLEPASS flags_inv = HIDEFACE + body_parts_covered = 0 /obj/item/clothing/mask/snorkel name = "Snorkel" @@ -40,6 +43,7 @@ icon_state = "snorkel" flags = FPRINT|TABLEPASS flags_inv = HIDEFACE + body_parts_covered = 0 //scarves (fit in in mask slot) @@ -89,6 +93,7 @@ flags_inv = HIDEFACE w_class = 2 siemens_coefficient = 0.9 + body_parts_covered = HEAD|FACE|EYES /obj/item/clothing/mask/horsehead name = "horse head mask" @@ -97,6 +102,7 @@ item_state = "horsehead" flags = FPRINT|TABLEPASS|BLOCKHAIR flags_inv = HIDEFACE + body_parts_covered = HEAD|FACE|EYES w_class = 2 var/voicechange = 0 - siemens_coefficient = 0.9 + siemens_coefficient = 0.9 \ No newline at end of file diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index 766cc96f05a..3f3fbbd8776 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -56,11 +56,13 @@ name = "sandals" icon_state = "wizard" species_restricted = null + body_parts_covered = 0 /obj/item/clothing/shoes/sandal/marisa desc = "A pair of magic, black shoes." name = "magic shoes" icon_state = "black" + body_parts_covered = FEET /obj/item/clothing/shoes/galoshes desc = "Rubber boots" diff --git a/code/modules/clothing/spacesuits/alien.dm b/code/modules/clothing/spacesuits/alien.dm index 3719f0c7dba..1b5d33c100f 100644 --- a/code/modules/clothing/spacesuits/alien.dm +++ b/code/modules/clothing/spacesuits/alien.dm @@ -120,6 +120,7 @@ icon_state = "vox-carapace" item_state = "vox-carapace" desc = "A glowing visor, perhaps stolen from a depressed Cylon." + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS /obj/item/clothing/suit/space/vox/carapace name = "alien carapace armour" @@ -161,6 +162,7 @@ icon_state = "vox-casual-1" item_color = "vox-casual-1" item_state = "vox-casual-1" + body_parts_covered = LEGS /obj/item/clothing/under/vox/vox_robes name = "alien robes" diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm index cdecadd6c81..9aa180912c4 100644 --- a/code/modules/clothing/spacesuits/miscellaneous.dm +++ b/code/modules/clothing/spacesuits/miscellaneous.dm @@ -22,7 +22,7 @@ allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy, /obj/item/weapon/gun/projectile, /obj/item/ammo_magazine, /obj/item/ammo_casing, /obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs) slowdown = 1.5 armor = list(melee = 65, bullet = 50, laser = 50, energy = 25, bomb = 50, bio = 100, rad = 50) - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL + flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE siemens_coefficient = 0.7 @@ -50,6 +50,7 @@ desc = "Ho ho ho. Merrry X-mas!" icon_state = "santahat" flags = FPRINT | TABLEPASS | HEADCOVERSEYES | BLOCKHAIR | STOPSPRESSUREDMAGE + body_parts_covered = HEAD /obj/item/clothing/suit/space/santa name = "Santa's suit" @@ -69,6 +70,7 @@ item_state = "pirate" armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) flags = FPRINT | TABLEPASS | HEADCOVERSEYES | BLOCKHAIR | STOPSPRESSUREDMAGE + body_parts_covered = 0 siemens_coefficient = 0.9 /obj/item/clothing/suit/space/pirate @@ -81,5 +83,6 @@ slowdown = 0 armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) siemens_coefficient = 0.9 + body_parts_covered = UPPER_TORSO|ARMS diff --git a/code/modules/clothing/spacesuits/ninja.dm b/code/modules/clothing/spacesuits/ninja.dm index c51594e0e69..f10e55168f0 100644 --- a/code/modules/clothing/spacesuits/ninja.dm +++ b/code/modules/clothing/spacesuits/ninja.dm @@ -7,6 +7,7 @@ armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 25) siemens_coefficient = 0.2 species_restricted = null + body_parts_covered = HEAD|FACE /obj/item/clothing/suit/space/space_ninja name = "ninja suit" @@ -18,6 +19,7 @@ armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) siemens_coefficient = 0.2 species_restricted = null //Workaround for spawning alien ninja without internals. + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS //Important parts of the suit. var/mob/living/carbon/affecting = null//The wearer. diff --git a/code/modules/clothing/suits/alien.dm b/code/modules/clothing/suits/alien.dm index 539efcaacc9..54141e99948 100644 --- a/code/modules/clothing/suits/alien.dm +++ b/code/modules/clothing/suits/alien.dm @@ -5,7 +5,7 @@ desc = "A traditional Unathi garment." icon_state = "robe-unathi" item_state = "robe-unathi" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS /obj/item/clothing/suit/unathi/mantle name = "hide mantle" @@ -21,9 +21,10 @@ desc = "A traditional Zhan-Khazan garment." icon_state = "zhan_furs" item_state = "zhan_furs" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS /obj/item/clothing/head/tajaran/scarf name = "headscarf" desc = "A scarf of coarse fabric. Seems to have ear-holes." - icon_state = "zhan_scarf" \ No newline at end of file + icon_state = "zhan_scarf" + body_parts_covered = HEAD|FACE \ No newline at end of file diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 39ff06677cc..a51fc8ab850 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -31,6 +31,7 @@ desc = "An armoured jacket with silver rank pips and livery." icon_state = "warden_jacket" item_state = "armor" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS /obj/item/clothing/suit/armor/riot @@ -38,7 +39,7 @@ desc = "A suit of armor with heavy padding to protect against melee attacks. Looks like it might impair movement." icon_state = "riot" item_state = "swat_suit" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS slowdown = 1 armor = list(melee = 80, bullet = 10, laser = 10, energy = 10, bomb = 0, bio = 0, rad = 0) flags_inv = HIDEJUMPSUIT @@ -71,7 +72,7 @@ gas_transfer_coefficient = 0.01 permeability_coefficient = 0.01 flags = FPRINT | TABLEPASS - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen) slowdown = 1 armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 0, rad = 0) @@ -88,6 +89,7 @@ item_state = "det_suit" blood_overlay_type = "coat" flags_inv = 0 + body_parts_covered = UPPER_TORSO|ARMS /obj/item/clothing/suit/armor/det_suit diff --git a/code/modules/clothing/suits/bio.dm b/code/modules/clothing/suits/bio.dm index 64a989d6a28..e2c6ee65fa7 100644 --- a/code/modules/clothing/suits/bio.dm +++ b/code/modules/clothing/suits/bio.dm @@ -7,6 +7,7 @@ flags = FPRINT|TABLEPASS|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 20) flags_inv = HIDEMASK|HIDEEARS|HIDEEYES + body_parts_covered = HEAD|FACE|EYES siemens_coefficient = 0.9 /obj/item/clothing/suit/bio_suit @@ -29,10 +30,11 @@ //Standard biosuit, orange stripe /obj/item/clothing/head/bio_hood/general icon_state = "bio_general" + body_parts_covered = HEAD|FACE|EYES /obj/item/clothing/suit/bio_suit/general icon_state = "bio_general" - + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS //Virology biosuit, green stripe /obj/item/clothing/head/bio_hood/virology @@ -40,7 +42,7 @@ /obj/item/clothing/suit/bio_suit/virology icon_state = "bio_virology" - + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS //Security biosuit, grey with red stripe across the chest /obj/item/clothing/head/bio_hood/security @@ -48,7 +50,7 @@ /obj/item/clothing/suit/bio_suit/security icon_state = "bio_security" - + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS //Janitor's biosuit, grey with purple arms /obj/item/clothing/head/bio_hood/janitor @@ -56,6 +58,7 @@ /obj/item/clothing/suit/bio_suit/janitor icon_state = "bio_janitor" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS //Scientist's biosuit, white with a pink-ish hue @@ -64,11 +67,12 @@ /obj/item/clothing/suit/bio_suit/scientist icon_state = "bio_scientist" - + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS //CMO's biosuit, blue stripe /obj/item/clothing/suit/bio_suit/cmo icon_state = "bio_cmo" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS /obj/item/clothing/head/bio_hood/cmo icon_state = "bio_cmo" diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index 8ad2e7751eb..acba8dc9293 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -9,8 +9,8 @@ icon_state = "apron" item_state = "apron" blood_overlay_type = "armor" - body_parts_covered = UPPER_TORSO|LOWER_TORSO - allowed = list (/obj/item/weapon/reagent_containers/spray/plantbgone,/obj/item/device/analyzer/plant_analyzer,/obj/item/seeds,/obj/item/nutrient,/obj/item/weapon/minihoe) + body_parts_covered = 0 + allowed = list (/obj/item/weapon/reagent_containers/spray/plantbgone,/obj/item/device/analyzer/plant_analyzer,/obj/item/seeds,/obj/item/weapon/reagent_containers/glass/fertilizer,/obj/item/weapon/minihoe) sprite_sheets = list("Vox" = 'icons/mob/species/vox/suit.dmi') //Captain /obj/item/clothing/suit/captunic @@ -18,7 +18,7 @@ desc = "Worn by a Captain to show their class." icon_state = "captunic" item_state = "bio_suit" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + body_parts_covered = UPPER_TORSO|ARMS flags_inv = HIDEJUMPSUIT sprite_sheets = list("Vox" = 'icons/mob/species/vox/suit.dmi') @@ -36,7 +36,7 @@ desc = "This suit says to you 'hush'!" icon_state = "chaplain_hoodie" item_state = "chaplain_hoodie" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + body_parts_covered = UPPER_TORSO|ARMS sprite_sheets = list("Vox" = 'icons/mob/species/vox/suit.dmi') //Chaplain @@ -45,7 +45,7 @@ desc = "Maximum piety in this star system." icon_state = "nun" item_state = "nun" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS flags_inv = HIDESHOES|HIDEJUMPSUIT sprite_sheets = list("Vox" = 'icons/mob/species/vox/suit.dmi') @@ -68,7 +68,7 @@ icon_state = "apronchef" item_state = "apronchef" blood_overlay_type = "armor" - body_parts_covered = UPPER_TORSO|LOWER_TORSO + body_parts_covered = 0 //Detective /obj/item/clothing/suit/storage/det_suit @@ -77,7 +77,7 @@ icon_state = "detective" item_state = "det_suit" blood_overlay_type = "coat" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + body_parts_covered = UPPER_TORSO|ARMS allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter,/obj/item/device/detective_scanner,/obj/item/device/taperecorder) armor = list(melee = 50, bullet = 10, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0) sprite_sheets = list("Vox" = 'icons/mob/species/vox/suit.dmi') @@ -90,7 +90,7 @@ name = "jacket" desc = "A forensics technician jacket." item_state = "det_suit" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS + body_parts_covered = UPPER_TORSO|ARMS allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/device/detective_scanner,/obj/item/device/taperecorder) armor = list(melee = 10, bullet = 10, laser = 15, energy = 10, bomb = 0, bio = 0, rad = 0) @@ -114,6 +114,7 @@ allowed = list (/obj/item/device/analyzer, /obj/item/device/flashlight, /obj/item/device/multitool, /obj/item/device/pipe_painter, /obj/item/device/radio, /obj/item/device/t_scanner, \ /obj/item/weapon/crowbar, /obj/item/weapon/screwdriver, /obj/item/weapon/weldingtool, /obj/item/weapon/wirecutters, /obj/item/weapon/wrench, /obj/item/weapon/tank/emergency_oxygen, \ /obj/item/clothing/mask/gas, /obj/item/taperoll/engineering) + body_parts_covered = UPPER_TORSO sprite_sheets = list("Vox" = 'icons/mob/species/vox/suit.dmi') @@ -172,6 +173,7 @@ blood_overlay_type = "armor" allowed = list(/obj/item/stack/medical, /obj/item/weapon/reagent_containers/dropper, /obj/item/weapon/reagent_containers/hypospray, /obj/item/weapon/reagent_containers/syringe, \ /obj/item/device/healthanalyzer, /obj/item/device/flashlight, /obj/item/device/radio, /obj/item/weapon/tank/emergency_oxygen) + body_parts_covered = UPPER_TORSO|ARMS verb/toggle() set name = "Toggle Jacket Buttons" @@ -196,4 +198,5 @@ desc = "They suspend the illusion of the mime's play." icon = 'icons/obj/clothing/belts.dmi' icon_state = "suspenders" - blood_overlay_type = "armor" //it's the less thing that I can put here \ No newline at end of file + blood_overlay_type = "armor" //it's the less thing that I can put here + body_parts_covered = 0 \ No newline at end of file diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm index 4cb25f57cf9..c230d7defaa 100644 --- a/code/modules/clothing/suits/labcoat.dm +++ b/code/modules/clothing/suits/labcoat.dm @@ -4,7 +4,7 @@ icon_state = "labcoat_open" item_state = "labcoat" blood_overlay_type = "coat" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS + body_parts_covered = UPPER_TORSO|ARMS allowed = list(/obj/item/device/analyzer,/obj/item/stack/medical,/obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray,/obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/storage/pill_bottle,/obj/item/weapon/paper) armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 50, rad = 0) sprite_sheets = list("Vox" = 'icons/mob/species/vox/suit.dmi') @@ -91,7 +91,7 @@ src.icon_state = "labgreen_open" usr << "You unbutton the labcoat." else - usr << "You attempt to button-up the velcro on your [src], before promptly realising how retarded you are." + usr << "You attempt to button-up the velcro on your [src], before promptly realising how silly you are." return usr.update_inv_wear_suit() //so our overlays update diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index c8abf979756..09726bb3d36 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -14,7 +14,7 @@ icon_state = "bluetag" item_state = "bluetag" blood_overlay_type = "armor" - body_parts_covered = UPPER_TORSO|LOWER_TORSO + body_parts_covered = UPPER_TORSO allowed = list (/obj/item/weapon/gun/energy/laser/bluetag) siemens_coefficient = 3.0 @@ -24,7 +24,7 @@ icon_state = "redtag" item_state = "redtag" blood_overlay_type = "armor" - body_parts_covered = UPPER_TORSO|LOWER_TORSO + body_parts_covered = UPPER_TORSO allowed = list (/obj/item/weapon/gun/energy/laser/redtag) siemens_coefficient = 3.0 @@ -37,6 +37,7 @@ icon_state = "pirate" item_state = "pirate" flags = FPRINT | TABLEPASS + body_parts_covered = UPPER_TORSO|ARMS /obj/item/clothing/suit/hgpirate @@ -46,6 +47,7 @@ item_state = "hgpirate" flags = FPRINT | TABLEPASS flags_inv = HIDEJUMPSUIT + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS /obj/item/clothing/suit/cyborg_suit @@ -81,6 +83,7 @@ item_state = "justice" flags = FPRINT | TABLEPASS flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|HANDS|LEGS|FEET /obj/item/clothing/suit/judgerobe @@ -120,14 +123,14 @@ flags = FPRINT | TABLEPASS allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/toy) flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|HANDS|LEGS|FEET /obj/item/clothing/suit/hastur name = "Hastur's Robes" desc = "Robes not meant to be worn by man" icon_state = "hastur" item_state = "hastur" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT @@ -136,7 +139,7 @@ desc = "Have YOU killed a xenos today?" icon_state = "imperium_monk" item_state = "imperium_monk" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + body_parts_covered = HEAD|UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS flags_inv = HIDESHOES|HIDEJUMPSUIT @@ -186,7 +189,7 @@ desc = "A suit that completely restrains the wearer." icon_state = "straight_jacket" item_state = "straight_jacket" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL /obj/item/clothing/suit/ianshirt @@ -194,6 +197,7 @@ desc = "A worn out, curiously comfortable t-shirt with a picture of Ian. You wouldn't go so far as to say it feels like being hugged when you wear it but it's pretty close. Good for sleeping in." icon_state = "ianshirt" item_state = "ianshirt" + body_parts_covered = UPPER_TORSO|ARMS //Blue suit jacket toggle /obj/item/clothing/suit/suit/verb/toggle() @@ -258,6 +262,8 @@ flags = FPRINT | TABLEPASS //stripper +/obj/item/clothing/under/stripper + body_parts_covered = 0 /obj/item/clothing/under/stripper/stripper_pink name = "pink swimsuit" @@ -299,12 +305,13 @@ desc = "A suit made out of chitinous alien hide." icon_state = "xenos" item_state = "xenos_helm" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT siemens_coefficient = 2.0 //swimsuit /obj/item/clothing/under/swimsuit/ siemens_coefficient = 1 + body_parts_covered = 0 /obj/item/clothing/under/swimsuit/black name = "black swimsuit" diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm index 033ce884191..91153fee0fa 100644 --- a/code/modules/clothing/suits/utility.dm +++ b/code/modules/clothing/suits/utility.dm @@ -50,6 +50,7 @@ flags = FPRINT|TABLEPASS|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 100, bio = 0, rad = 0) flags_inv = HIDEMASK|HIDEEARS|HIDEEYES + body_parts_covered = HEAD|FACE|EYES siemens_coefficient = 0 @@ -62,7 +63,6 @@ gas_transfer_coefficient = 0.01 permeability_coefficient = 0.01 flags = FPRINT | TABLEPASS - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS slowdown = 2 armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 100, bio = 0, rad = 0) flags_inv = HIDEJUMPSUIT|HIDETAIL @@ -74,12 +74,13 @@ /obj/item/clothing/head/bomb_hood/security icon_state = "bombsuitsec" item_state = "bombsuitsec" - + body_parts_covered = HEAD /obj/item/clothing/suit/bomb_suit/security icon_state = "bombsuitsec" item_state = "bombsuitsec" allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs) + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS /* * Radiation protection @@ -89,6 +90,7 @@ icon_state = "rad" desc = "A hood with radiation protective properties. Label: Made with lead, do not eat insulation" flags = FPRINT|TABLEPASS|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR + body_parts_covered = HEAD|FACE|EYES armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 60, rad = 100) @@ -100,7 +102,7 @@ w_class = 4//bulky item gas_transfer_coefficient = 0.90 permeability_coefficient = 0.50 - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/clothing/head/radiation,/obj/item/clothing/mask/gas) slowdown = 1.5 armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 60, rad = 100) diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm index d168edc4c1c..03240b2f3c2 100644 --- a/code/modules/clothing/suits/wiz_robe.dm +++ b/code/modules/clothing/suits/wiz_robe.dm @@ -4,6 +4,7 @@ icon_state = "wizard" //Not given any special protective value since the magic robes are full-body protection --NEO siemens_coefficient = 0.8 + body_parts_covered = 0 /obj/item/clothing/head/wizard/red name = "red wizard hat" @@ -15,6 +16,7 @@ name = "wizard hat" desc = "It has WIZZARD written across it in sequins. Comes with a cool beard." icon_state = "wizard-fake" + body_parts_covered = HEAD|FACE /obj/item/clothing/head/wizard/marisa name = "Witch Hat" @@ -28,6 +30,7 @@ icon_state = "magus" item_state = "magus" siemens_coefficient = 0.8 + body_parts_covered = HEAD|FACE|EYES /obj/item/clothing/head/wizard/amp name = "psychic amplifier" @@ -48,7 +51,6 @@ item_state = "wizrobe" gas_transfer_coefficient = 0.01 // IT'S MAGICAL OKAY JEEZ +1 TO NOT DIE permeability_coefficient = 0.01 - body_parts_covered = FULL_BODY //It's magic, I ain't gotta explain shit. --NEO armor = list(melee = 30, bullet = 20, laser = 20,energy = 20, bomb = 20, bio = 20, rad = 20) allowed = list(/obj/item/weapon/teleportation_scroll) flags_inv = HIDEJUMPSUIT @@ -72,12 +74,14 @@ desc = "A set of armoured robes that seem to radiate a dark power" icon_state = "magusblue" item_state = "magusblue" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|HANDS|LEGS|FEET /obj/item/clothing/suit/wizrobe/magusred name = "Magus Robe" desc = "A set of armoured robes that seem to radiate a dark power" icon_state = "magusred" item_state = "magusred" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|HANDS|LEGS|FEET /obj/item/clothing/suit/wizrobe/psypurple name = "purple robes" @@ -90,13 +94,13 @@ desc = "A heavy threaded twead gray jacket. For a different sort of Gentleman." icon_state = "gentlecoat" item_state = "gentlecoat" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS /obj/item/clothing/suit/wizrobe/fake name = "wizard robe" desc = "A rather dull, blue robe meant to mimick real wizard robes." icon_state = "wizard-fake" item_state = "wizrobe" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) siemens_coefficient = 1.0 diff --git a/code/modules/clothing/under/chameleon.dm b/code/modules/clothing/under/chameleon.dm index fe9da8744d0..1cb79699c99 100644 --- a/code/modules/clothing/under/chameleon.dm +++ b/code/modules/clothing/under/chameleon.dm @@ -48,6 +48,7 @@ icon_state = A.icon_state item_state = A.item_state item_color = A.item_color + body_parts_covered = A.body_parts_covered if(usr) usr.update_inv_w_uniform() //so our overlays update. @@ -62,6 +63,7 @@ item_color = "grey" desc = "It looks like a plain hat, but upon closer inspection, there's an advanced holographic array installed inside. It seems to have a small dial inside." origin_tech = "syndicate=3" + body_parts_covered = 0 var/list/clothing_choices = list() New() @@ -101,6 +103,7 @@ item_state = A.item_state item_color = A.item_color flags_inv = A.flags_inv + body_parts_covered = A.body_parts_covered if(usr) usr.update_inv_head() //so our overlays update. @@ -154,6 +157,7 @@ item_state = A.item_state item_color = A.item_color flags_inv = A.flags_inv + body_parts_covered = A.body_parts_covered if(usr) usr.update_inv_wear_suit() //so our overlays update. @@ -356,6 +360,7 @@ icon_state = A.icon_state item_state = A.item_state flags_inv = A.flags_inv + body_parts_covered = A.body_parts_covered if(usr) usr.update_inv_wear_mask() //so our overlays update. diff --git a/code/modules/clothing/under/jobs/civilian.dm b/code/modules/clothing/under/jobs/civilian.dm index 0798c11bf56..dc6149562d8 100644 --- a/code/modules/clothing/under/jobs/civilian.dm +++ b/code/modules/clothing/under/jobs/civilian.dm @@ -33,6 +33,7 @@ item_state = "lb_suit" item_color = "cargo" flags = FPRINT | TABLEPASS + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS /obj/item/clothing/under/rank/chaplain diff --git a/code/modules/clothing/under/jobs/medsci.dm b/code/modules/clothing/under/jobs/medsci.dm index 3d7db9613da..8a09e0ce57a 100644 --- a/code/modules/clothing/under/jobs/medsci.dm +++ b/code/modules/clothing/under/jobs/medsci.dm @@ -26,7 +26,7 @@ item_color = "dress_rd" armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) flags = FPRINT | TABLEPASS - + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS /obj/item/clothing/under/rank/scientist desc = "It's made of a special fiber that provides minor protection against biohazards. It has markings that denote the wearer as a scientist." @@ -87,6 +87,7 @@ item_color = "nursesuit" permeability_coefficient = 0.50 armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) + body_parts_covered = UPPER_TORSO|LOWER_TORSO /obj/item/clothing/under/rank/nurse desc = "A dress commonly worn by the nursing staff in the medical department." @@ -96,6 +97,7 @@ item_color = "nurse" permeability_coefficient = 0.50 armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) + body_parts_covered = UPPER_TORSO|LOWER_TORSO /obj/item/clothing/under/rank/orderly desc = "A white suit to be worn by orderly people who love orderly things." @@ -137,7 +139,21 @@ item_color = "scrubspurple" flags = FPRINT | TABLEPASS +/obj/item/clothing/under/rank/psych + desc = "A basic white jumpsuit. It has turqouise markings that denote the wearer as a psychiatrist." + name = "psychiatrist's jumpsuit" + icon_state = "psych" + item_state = "w_suit" + item_color = "psych" + flags = FPRINT | TABLEPASS +/obj/item/clothing/under/rank/psych/turtleneck + desc = "A turqouise turtleneck and a pair of dark blue slacks, belonging to a psychologist." + name = "psychologist's turtleneck" + icon_state = "psychturtle" + item_state = "b_suit" + item_color = "psychturtle" + flags = FPRINT | TABLEPASS /* diff --git a/code/modules/clothing/under/jobs/security.dm b/code/modules/clothing/under/jobs/security.dm index 5b37f507194..93db4210358 100644 --- a/code/modules/clothing/under/jobs/security.dm +++ b/code/modules/clothing/under/jobs/security.dm @@ -36,6 +36,7 @@ item_color = "dispatch" armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) flags = FPRINT | TABLEPASS + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS siemens_coefficient = 0.9 /obj/item/clothing/under/rank/security2 @@ -105,6 +106,7 @@ allowed = list(/obj/item/weapon/reagent_containers/food/snacks/candy_corn, /obj/item/weapon/pen) armor = list(melee = 50, bullet = 5, laser = 25,energy = 10, bomb = 0, bio = 0, rad = 0) siemens_coefficient = 0.9 + body_parts_covered = 0 /obj/item/clothing/head/det_hat/black icon_state = "detective2" @@ -134,8 +136,8 @@ icon_state = "hoscap" flags = FPRINT | TABLEPASS | HEADCOVERSEYES armor = list(melee = 80, bullet = 60, laser = 50,energy = 10, bomb = 25, bio = 10, rad = 0) - flags_inv = 0 flags_inv = HIDEEARS + body_parts_covered = 0 siemens_coefficient = 0.8 /obj/item/clothing/suit/armor/hos @@ -171,4 +173,5 @@ icon_state = "jensencoat" item_state = "jensencoat" flags_inv = 0 - siemens_coefficient = 0.6 \ No newline at end of file + siemens_coefficient = 0.6 + body_parts_covered = UPPER_TORSO|ARMS \ No newline at end of file diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index 3e4cf1a3d1b..094d76b32c7 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -54,6 +54,7 @@ icon_state = "sexyclown" item_state = "sexyclown" item_color = "sexyclown" + body_parts_covered = UPPER_TORSO|LOWER_TORSO /obj/item/clothing/under/rank/vice name = "vice officer's jumpsuit" @@ -137,6 +138,7 @@ icon_state = "psysuit" item_state = "psysuit" item_color = "psysuit" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS /obj/item/clothing/under/gentlesuit name = "Gentlemans Suit" @@ -200,7 +202,7 @@ icon_state = "schoolgirl" item_state = "schoolgirl" item_color = "schoolgirl" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS + body_parts_covered = UPPER_TORSO|LOWER_TORSO /obj/item/clothing/under/overalls name = "laborer's overalls" @@ -215,6 +217,7 @@ icon_state = "pirate" item_state = "pirate" item_color = "pirate" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS /obj/item/clothing/under/soviet name = "soviet uniform" @@ -252,9 +255,11 @@ icon_state = "gladiator" item_state = "gladiator" item_color = "gladiator" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS + body_parts_covered = LOWER_TORSO //dress +/obj/item/clothing/under/dress/ + body_parts_covered = UPPER_TORSO|LOWER_TORSO /obj/item/clothing/under/dress/dress_fire name = "flame dress" @@ -298,18 +303,21 @@ desc = "Feminine fashion for the style concious captain." icon_state = "dress_cap" item_color = "dress_cap" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS /obj/item/clothing/under/dress/dress_hop name = "head of personnel dress uniform" desc = "Feminine fashion for the style concious HoP." icon_state = "dress_hop" item_color = "dress_hop" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS /obj/item/clothing/under/dress/dress_hr name = "human resources director uniform" desc = "Superior class for the nosy H.R. Director." icon_state = "huresource" item_color = "huresource" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS /obj/item/clothing/under/dress/plaid_blue name = "blue plaid skirt" @@ -330,6 +338,8 @@ item_color = "plaid_purple" //wedding stuff +/obj/item/clothing/under/wedding/ + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS /obj/item/clothing/under/wedding/bride_orange name = "orange wedding dress" @@ -365,6 +375,7 @@ icon_state = "bride_white" item_color = "bride_white" flags_inv = HIDESHOES + body_parts_covered = UPPER_TORSO|LOWER_TORSO /obj/item/clothing/under/sundress name = "sundress" diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm index 9c820db0260..605bff18642 100644 --- a/code/modules/customitems/item_defines.dm +++ b/code/modules/customitems/item_defines.dm @@ -112,10 +112,28 @@ icon = 'icons/obj/custom_items.dmi' icon_state = "syrus_notebook" +/////////////////////// Cataguettes - Lucy's Stethoscope - Lucy Kemmerer ////// + +/obj/item/clothing/tie/stethoscope/fluff/lucystethos + name = "Lucy's Stethoscope" + desc = "A medical apparatus intended to ease in listening to the sounds of the human body. This one looks cleaner and sparklier than the rest. There is a small silver plaque attached to the tubing, with the words 'Lucy Kemmerer' engraved on it." + icon_state = "lucystethos" + item_state = "lucystethos" + item_color ="lucystethos" + icon = 'icons/obj/custom_items.dmi' + /obj/item/weapon/pen/fluff/multi //spaceman96: Trenna Seber name = "multicolor pen" desc = "It's a cool looking pen. Lots of colors!" +//////////////////////// AIsForAxolotl - Tea Flask - Margaret Stewart ////////// + +/obj/item/weapon/reagent_containers/food/drinks/flask/vacuumflask/fluff/margaret + name = "Tea Flask" + desc = "A plastic vacuum flask with an ugly tartan pattern. 'M.S.' has been written on the bottom with a silver marker." + icon = 'icons/obj/custom_items.dmi' + icon_state = "margaret_flask" + /obj/item/weapon/pen/fluff/fancypen //orangebottle: Lillian Levett, Lilliana Reade name = "fancy pen" desc = "A fancy metal pen. It uses blue ink. An inscription on one side reads,\"L.L. - L.R.\"" @@ -560,7 +578,7 @@ suit_icon = "salvage_suit" helmet_color = "salvage" -///////// Salvage crew hardsuit - Callum Leamas - roaper /////////////// +///////// Weathered hardsuit - Callum Leamas - roaper /////////////// /obj/item/device/kit/suit/fluff/roaper name = "Callum's hardsuit modification kit" desc = "A kit containing all the needed tools and parts to modify a hardsuit." @@ -572,6 +590,18 @@ suit_icon = "rig-roaper" helmet_color = "roaper" +///////// Hazard Hardsuit - Ronan Harper - Raptor1628 ////////////////// +/obj/item/device/kit/suit/fluff/ronan_harper + name = "hazard hardsuit modification kit" + desc = "A kit containing all the needed tools and parts to modify a hardsuit." + + new_name = "hazard" + new_suit_desc = "An older model of armored NT Hardsuit emblazoned in security colors. The crest of the NAS Rhodes, a copper rose, is painted onto the chestplate." + new_helmet_desc = "An older NT Hardsuit Helmet with built-in atmospheric filters. The name HARPER has been printed on the back." + helmet_icon = "rig0-hazardhardsuit" + suit_icon = "rig-hazardhardsuit" + helmet_color = "hazardhardsuit" + //////// Meat Hook - Korom Bhararaya - Matthew951 //////////////////////// /obj/item/device/kit/weapon/fluff/hook @@ -676,18 +706,12 @@ //////////// Hats //////////// - -/obj/item/clothing/head/fluff/kaine_kalim_1 - name = "Formal Medical Cap" - desc = "An unusually sterile and folded cap. It seems to bare the Nanotrasen logo." - icon = 'icons/obj/custom_items.dmi' - icon_state = "kainecap" - /obj/item/clothing/head/secsoft/fluff/swatcap //deusdactyl: James Girard name = "\improper SWAT hat" desc = "A black hat. The inside has the words, \"Lieutenant James Girard, LPD SWAT Team Four.\"" icon = 'icons/obj/custom_items.dmi' icon_state = "swatcap" + body_parts_covered = 0 /obj/item/clothing/head/welding/fluff/alice_mccrea_1 //madmalicemccrea: Alice McCrea name = "flame decal welding helmet" @@ -707,11 +731,23 @@ icon = 'icons/obj/custom_items.dmi' icon_state = "norah_briggs_1" +//////////////// Painted Welding Mask - Kuratas Dotaavi - supercotton //////////////////// + +/obj/item/clothing/head/welding/fluff/kuratas + name = "Painted Welding Mask" + desc = "A blood-red welding mask with an intricate pattern. Smells like burnt rubber." + icon = 'icons/obj/custom_items.dmi' + icon_state = "paintedwelding" + /obj/item/clothing/head/helmet/greenbandana/fluff/taryn_kifer_1 //themij: Taryn Kifer name = "orange bandana" desc = "Hey, I think we're missing a hazard vest..." icon = 'icons/obj/custom_items.dmi' icon_state = "taryn_kifer_1" + body_parts_covered = 0 + +/obj/item/clothing/head/fluff + body_parts_covered = 0 /obj/item/clothing/head/fluff/edvin_telephosphor_1 //foolamancer: Edvin Telephosphor name = "Edvin's Hat" @@ -731,6 +767,13 @@ icon = 'icons/obj/custom_items.dmi' icon_state = "brucehachert" +/obj/item/clothing/head/fluff/kaine_kalim_1 + name = "Formal Medical Cap" + desc = "An unusually sterile and folded cap. It seems to bare the Nanotrasen logo." + icon = 'icons/obj/custom_items.dmi' + icon_state = "kainecap" + + /obj/item/clothing/head/beret/fluff/marine_beret //Von2531: Jack Washington name = "colonial marine beret" desc = "A well-worn navy blue beret. The insignia of the Martian Colonial Marine Corps is affixed to the front." @@ -746,6 +789,50 @@ icon_state = "adapted_h" icon = 'icons/obj/custom_items.dmi' +////////////////////////////////////////////////////////// +///////////////////// Belts ////////////////////////////// +////////////////////////////////////////////////////////// + +/obj/item/weapon/storage/belt/medical/fluff/ems + name = "EMS utility belt" + desc = "A sturdy black webbing belt with attached pouches. H. ISHIMARU is scratched on the interior of the buckle." + icon = 'icons/obj/custom_items.dmi' + icon_state = "emsbelt" + item_state = "emsbelt" + +/obj/item/weapon/storage/belt/utility/full/fluff/sophie + name = "Sophie's belt" + desc = "A tool-belt in Atmos colours." + icon = 'icons/obj/custom_items.dmi' + icon_state = "sophie_belt" + item_state = "sophie_belt" + +/obj/item/weapon/storage/belt/medical/fluff/nashi_belt + name = "rainbow medical belt" + desc = "A somewhat-worn, modified, rainbow belt." + icon = 'icons/obj/custom_items.dmi' + icon_state = "nashi_belt" + item_state = "fluff_rbelt" + + New() + ..() + new /obj/item/weapon/reagent_containers/glass/bottle/fluff/nashi_bottle(src, 14, "Bicaridine") + new /obj/item/weapon/reagent_containers/glass/bottle/fluff/nashi_bottle(src, 15, "Dermaline") + new /obj/item/weapon/reagent_containers/glass/bottle/fluff/nashi_bottle(src, 16, "Dylovene") + new /obj/item/weapon/reagent_containers/glass/bottle/fluff/nashi_bottle(src, 17, "Dexalin Plus") + new /obj/item/weapon/reagent_containers/glass/bottle/fluff/nashi_bottle(src, 18, "Tricordrazine") + new /obj/item/weapon/reagent_containers/syringe/(src) + new /obj/item/device/healthanalyzer(src) + +/obj/item/weapon/reagent_containers/glass/bottle/fluff/nashi_bottle + icon = 'icons/obj/chemical.dmi' + flags = FPRINT | TABLEPASS //Starting them with lids on them. Safety first! + New(loc, var/color, var/labeled) + ..() + name = "[labeled] bottle" + desc = "A small bottle. Contains [labeled]" + icon_state = "bottle[color]" + //////////// Suits //////////// /obj/item/clothing/suit/storage/labcoat/fluff/aeneas_rinil //Robotics Labcoat - Aeneas Rinil [APPR] @@ -753,6 +840,7 @@ desc = "A labcoat with a few markings denoting it as the labcoat of roboticist." icon = 'icons/obj/custom_items.dmi' icon_state = "aeneasrinil" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS /obj/item/clothing/suit/storage/labcoat/fluff/pink //spaceman96: Trenna Seber name = "pink labcoat" @@ -781,7 +869,7 @@ icon = 'icons/obj/clothing/suits.dmi' icon_state = "mantle-unathi" item_state = "mantle-unathi" - body_parts_covered = UPPER_TORSO + body_parts_covered = 0 /////////////////////////////// 50_n00b - R.A.N.G.E.'s blue dress ////////////////////////// @@ -791,6 +879,7 @@ icon = 'icons/obj/custom_items.dmi' icon_state = "br_dress" item_state = "br_dress" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS //////////////////////////////// Broseph Stylin - Lombardi's Jacket /////////////////////////// @@ -800,6 +889,7 @@ icon = 'icons/obj/custom_items.dmi' icon_state = "lombardi_jacket" item_state = "lombardi_jacket" + body_parts_covered = UPPER_TORSO|ARMS verb/toggle() set name = "Toggle Jacket Buttons" @@ -812,7 +902,7 @@ switch(icon_state) if("lombardi_jacket") src.icon_state = "lombardi_jacket_open" - usr << "You unbutton up the jacket." + usr << "You unbutton the jacket." if("lombardi_jacket_open") src.icon_state = "lombardi_jacket" usr << "You button up the jacket." @@ -852,6 +942,7 @@ icon_state = "lilith_uniform" item_state = "lilith_uniform" item_color = "lilith_uniform" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS /obj/item/clothing/under/fluff/ana_issek_1 //suethecake: Ana Issek name = "retired uniform" @@ -860,6 +951,7 @@ icon_state = "ana_uniform" item_state = "ana_uniform" item_color = "ana_uniform" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS /obj/item/clothing/under/fluff/olddressuniform //desiderium: Momiji Inubashiri name = "retired dress uniform" @@ -893,6 +985,7 @@ icon_state = "tian_dress" item_state = "tian_dress" item_color = "tian_dress" + body_parts_covered = UPPER_TORSO|LOWER_TORSO /obj/item/clothing/under/rank/bartender/fluff/classy //searif: Ara Al-Jazari name = "classy bartender uniform" @@ -978,6 +1071,7 @@ icon_state = "lillian_dress" item_state = "lillian_dress" item_color = "lillian_dress" + body_parts_covered = UPPER_TORSO|LOWER_TORSO ////////////// Accessories ///// @@ -985,9 +1079,11 @@ /obj/item/clothing/tie/fluff/radi name = "Blood Red Pendant" - desc = "A pendant that has been painted a metallic red, it seems to have a ruby in it." + desc = "A blue chained necklace with a ruby in the middle, it looks pretty!" icon = 'icons/obj/custom_items.dmi' icon_state = "radi_pendant" + item_state = "radi_pendant" + item_color = "radi_pendant" flags = FPRINT|TABLEPASS w_class = 2.0 slot_flags = 0 @@ -1022,6 +1118,7 @@ icon = 'icons/obj/custom_items.dmi' item_state = "head_m" icon_state = "head_m" + body_parts_covered = FACE|EYES ////// Small locket - Altair An-Nasaqan - Serithi @@ -1100,6 +1197,7 @@ flags = FPRINT|TABLEPASS w_class = 2 slot_flags = SLOT_MASK + body_parts_covered = 0 //////////// Shoes //////////// @@ -1142,6 +1240,7 @@ icon_state = "medical_short" item_state = "medical_short" item_color = "medical_short" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS /obj/item/clothing/suit/storage/labcoat/fluff/red name = "red labcoat" @@ -1201,34 +1300,6 @@ flick("leamas-reloading",src) ..() - -///// Custom Items coded by Iamgoofball are Below ///// -/obj/item/weapon/storage/belt/medical/fluff/nashi_belt - name = "rainbow medical belt" - desc = "A somewhat-worn, modified, rainbow belt." - icon = 'icons/obj/custom_items.dmi' - icon_state = "nashi_belt" - item_state = "fluff_rbelt" - - New() - ..() - new /obj/item/weapon/reagent_containers/glass/bottle/fluff/nashi_bottle(src, 14, "Bicaridine") - new /obj/item/weapon/reagent_containers/glass/bottle/fluff/nashi_bottle(src, 15, "Dermaline") - new /obj/item/weapon/reagent_containers/glass/bottle/fluff/nashi_bottle(src, 16, "Dylovene") - new /obj/item/weapon/reagent_containers/glass/bottle/fluff/nashi_bottle(src, 17, "Dexalin Plus") - new /obj/item/weapon/reagent_containers/glass/bottle/fluff/nashi_bottle(src, 18, "Tricordrazine") - new /obj/item/weapon/reagent_containers/syringe/(src) - new /obj/item/device/healthanalyzer(src) - -/obj/item/weapon/reagent_containers/glass/bottle/fluff/nashi_bottle - icon = 'icons/obj/chemical.dmi' - flags = FPRINT | TABLEPASS //Starting them with lids on them. Safety first! - New(loc, var/color, var/labeled) - ..() - name = "[labeled] bottle" - desc = "A small bottle. Contains [labeled]" - icon_state = "bottle[color]" - /obj/item/weapon/reagent_containers/food/drinks/flask/fluff/yuri_kornienkovich_flask name = "Yuri's Flask" desc = "An old gold plated flask. Nothing noteworthy about it besides it being gold and the red star on the worn out leather around it. There is also an engraving on the cap that is rather hard to see but it looks like \"Kornienkovich\" " @@ -1242,6 +1313,7 @@ icon_state = "mai_yang" item_state = "mai_yang" item_color = "mai_yang" + body_parts_covered = UPPER_TORSO|LOWER_TORSO /obj/item/clothing/under/fluff/sakura_hokkaido_kimono name = "Sakura Kimono" diff --git a/code/modules/detectivework/detective_work.dm b/code/modules/detectivework/detective_work.dm index bb650b02153..6650046512f 100644 --- a/code/modules/detectivework/detective_work.dm +++ b/code/modules/detectivework/detective_work.dm @@ -19,13 +19,13 @@ atom/proc/add_fibers(mob/living/carbon/human/M) if(prob(10*item_multiplier) && !(fibertext in suit_fibers)) //world.log << "Added fibertext: [fibertext]" suit_fibers += fibertext - if(!(M.wear_suit.body_parts_covered & 32)) + if(M.wear_suit.body_parts_covered & ~FULL_BODY && (M.wear_suit.body_parts_covered & ~UPPER_TORSO || M.wear_suit.body_parts_covered & ~LOWER_TORSO || M.wear_suit.body_parts_covered & ~ARMS || M.wear_suit.body_parts_covered & ~LEGS)) if(M.w_uniform) fibertext = "Fibers from \a [M.w_uniform]." if(prob(12*item_multiplier) && !(fibertext in suit_fibers)) //Wearing a suit means less of the uniform exposed. //world.log << "Added fibertext: [fibertext]" suit_fibers += fibertext - if(!(M.wear_suit.body_parts_covered & 64)) + if(M.wear_suit.body_parts_covered & ~HANDS) if(M.gloves) fibertext = "Material from a pair of [M.gloves.name]." if(prob(20*item_multiplier) && !(fibertext in suit_fibers)) diff --git a/code/modules/events/event_manager.dm b/code/modules/events/event_manager.dm index 52fbc8220a8..1311e1c71bb 100644 --- a/code/modules/events/event_manager.dm +++ b/code/modules/events/event_manager.dm @@ -30,6 +30,10 @@ var/scheduledEvent = null playercount_modifier = 0.9 if(36 to 100000) playercount_modifier = 0.8 + + if(ticker.mode && ticker.mode.name == "calamity") //Calamity mode lowers the time required between events drastically. + playercount_modifier = playercount_modifier * 0.3 + var/next_event_delay = rand(eventTimeLower, eventTimeUpper) * playercount_modifier scheduledEvent = world.timeofday + next_event_delay log_debug("Next event in [next_event_delay/600] minutes.") diff --git a/code/modules/hydroponics/biogenerator.dm b/code/modules/hydroponics/biogenerator.dm index e166589cc42..263f797a95d 100644 --- a/code/modules/hydroponics/biogenerator.dm +++ b/code/modules/hydroponics/biogenerator.dm @@ -164,29 +164,29 @@ if("meat") new/obj/item/weapon/reagent_containers/food/snacks/meat(src.loc) if("ez") - new/obj/item/nutrient/ez(src.loc) + new/obj/item/weapon/reagent_containers/glass/fertilizer/ez(src.loc) if("l4z") - new/obj/item/nutrient/l4z(src.loc) + new/obj/item/weapon/reagent_containers/glass/fertilizer/l4z(src.loc) if("rh") - new/obj/item/nutrient/rh(src.loc) + new/obj/item/weapon/reagent_containers/glass/fertilizer/rh(src.loc) if("ez5") //It's not an elegant method, but it's safe and easy. -Cheridan - new/obj/item/nutrient/ez(src.loc) - new/obj/item/nutrient/ez(src.loc) - new/obj/item/nutrient/ez(src.loc) - new/obj/item/nutrient/ez(src.loc) - new/obj/item/nutrient/ez(src.loc) + new/obj/item/weapon/reagent_containers/glass/fertilizer/ez(src.loc) + new/obj/item/weapon/reagent_containers/glass/fertilizer/ez(src.loc) + new/obj/item/weapon/reagent_containers/glass/fertilizer/ez(src.loc) + new/obj/item/weapon/reagent_containers/glass/fertilizer/ez(src.loc) + new/obj/item/weapon/reagent_containers/glass/fertilizer/ez(src.loc) if("l4z5") - new/obj/item/nutrient/l4z(src.loc) - new/obj/item/nutrient/l4z(src.loc) - new/obj/item/nutrient/l4z(src.loc) - new/obj/item/nutrient/l4z(src.loc) - new/obj/item/nutrient/l4z(src.loc) + new/obj/item/weapon/reagent_containers/glass/fertilizer/l4z(src.loc) + new/obj/item/weapon/reagent_containers/glass/fertilizer/l4z(src.loc) + new/obj/item/weapon/reagent_containers/glass/fertilizer/l4z(src.loc) + new/obj/item/weapon/reagent_containers/glass/fertilizer/l4z(src.loc) + new/obj/item/weapon/reagent_containers/glass/fertilizer/l4z(src.loc) if("rh5") - new/obj/item/nutrient/rh(src.loc) - new/obj/item/nutrient/rh(src.loc) - new/obj/item/nutrient/rh(src.loc) - new/obj/item/nutrient/rh(src.loc) - new/obj/item/nutrient/rh(src.loc) + new/obj/item/weapon/reagent_containers/glass/fertilizer/rh(src.loc) + new/obj/item/weapon/reagent_containers/glass/fertilizer/rh(src.loc) + new/obj/item/weapon/reagent_containers/glass/fertilizer/rh(src.loc) + new/obj/item/weapon/reagent_containers/glass/fertilizer/rh(src.loc) + new/obj/item/weapon/reagent_containers/glass/fertilizer/rh(src.loc) if("wallet") new/obj/item/weapon/storage/wallet(src.loc) if("gloves") diff --git a/code/modules/hydroponics/hydro_tools.dm b/code/modules/hydroponics/hydro_tools.dm index 7d2836d1012..a0276e37b73 100644 --- a/code/modules/hydroponics/hydro_tools.dm +++ b/code/modules/hydroponics/hydro_tools.dm @@ -1,4 +1,8 @@ -//Analyzer, pestkillers, weedkillers, nutrients, hatchets. +//Analyzer, pestkillers, weedkillers, nutrients, hatchets, cutters. + +/obj/item/weapon/wirecutters/clippers + name = "plant clippers" + desc = "A tool used to take samples from plants." /obj/item/device/analyzer/plant_analyzer name = "plant analyzer" @@ -67,7 +71,9 @@ if(grown_seed.harvest_repeat) dat += "This plant can be harvested repeatedly.
" - if(grown_seed.immutable) + if(grown_seed.immutable == -1) + dat += "This plant is highly mutable.
" + else if(grown_seed.immutable > 0) dat += "This plant does not possess genetics that are alterable.
" if(grown_seed.products && grown_seed.products.len) @@ -261,39 +267,44 @@ // Nutrient defines for hydroponics // ************************************* -/obj/item/nutrient - name = "bottle of nutrient" +/obj/item/weapon/reagent_containers/glass/fertilizer + name = "fertilizer bottle" + desc = "A small glass bottle. Can hold up to 10 units." icon = 'icons/obj/chemical.dmi' icon_state = "bottle16" - flags = FPRINT | TABLEPASS + flags = FPRINT | TABLEPASS | OPENCONTAINER + possible_transfer_amounts = null w_class = 2.0 - var/mutmod = 0 - var/yieldmod = 0 - New() - src.pixel_x = rand(-5.0, 5) - src.pixel_y = rand(-5.0, 5) -/obj/item/nutrient/ez + var/fertilizer //Reagent contained, if any. + + //Like a shot glass! + amount_per_transfer_from_this = 10 + volume = 10 + +/obj/item/weapon/reagent_containers/glass/fertilizer/New() + ..() + + src.pixel_x = rand(-5.0, 5) + src.pixel_y = rand(-5.0, 5) + + if(fertilizer) + reagents.add_reagent(fertilizer,10) + +/obj/item/weapon/reagent_containers/glass/fertilizer/ez name = "bottle of E-Z-Nutrient" - icon = 'icons/obj/chemical.dmi' icon_state = "bottle16" - flags = FPRINT | TABLEPASS - mutmod = 1 - yieldmod = 1 + fertilizer = "eznutrient" -/obj/item/nutrient/l4z +/obj/item/weapon/reagent_containers/glass/fertilizer/l4z name = "bottle of Left 4 Zed" - icon = 'icons/obj/chemical.dmi' icon_state = "bottle18" - flags = FPRINT | TABLEPASS - mutmod = 2 + fertilizer = "left4zed" -/obj/item/nutrient/rh +/obj/item/weapon/reagent_containers/glass/fertilizer/rh name = "bottle of Robust Harvest" - icon = 'icons/obj/chemical.dmi' icon_state = "bottle15" - flags = FPRINT | TABLEPASS - yieldmod = 2 + fertilizer = "robustharvest" //Hatchets and things to kill kudzu /obj/item/weapon/hatchet diff --git a/code/modules/hydroponics/hydro_tray.dm b/code/modules/hydroponics/hydro_tray.dm index 1ead014c2af..d90be9a765b 100644 --- a/code/modules/hydroponics/hydro_tray.dm +++ b/code/modules/hydroponics/hydro_tray.dm @@ -6,6 +6,8 @@ icon_state = "hydrotray3" density = 1 anchored = 1 + flags = OPENCONTAINER + var/draw_warnings = 1 //Set to 0 to stop it from drawing the alert lights. // Plant maintenance vars. @@ -30,93 +32,106 @@ var/lastcycle = 0 // Cycle timing/tracking var. var/cycledelay = 150 // Delay per cycle. var/closed_system // If set, the tray will attempt to take atmos from a pipe. + var/force_update // Set this to bypass the cycle time check. // Seed details/line data. var/datum/seed/seed = null // The currently planted seed - // Reagent information for attackby(), consider moving this to a controller along + // Reagent information for process(), consider moving this to a controller along // with cycle information under 'mechanical concerns' at some point. - // For all following lists, when called in attackby() the relevant value will be increased - // by 1,val if val>0 or decreased by 1,val if val<0. - var/global/list/toxic_reagents = list( - "anti_toxin" = -2, - "toxin" = 2, - "fluorine" = 2.5, - "chlorine" = 1.5, - "sacid" = 1.5, - "pacid" = 3, - "plantbgone" = 3, - "cryoxadone" = -3, - "radium" = 2 + "anti_toxin" = -2, + "toxin" = 2, + "fluorine" = 2.5, + "chlorine" = 1.5, + "sacid" = 1.5, + "pacid" = 3, + "plantbgone" = 3, + "cryoxadone" = -3, + "radium" = 2 ) var/global/list/nutrient_reagents = list( - "milk" = 0.1, - "beer" = 0.25, - "phosphorus" = 0.1, - "sugar" = 0.1, - "sodawater" = 0.1, - "ammonia" = 1, - "diethylamine" = 2, - "nutriment" = 1, - "adminordrazine" = 1 + "milk" = 0.1, + "beer" = 0.25, + "phosphorus" = 0.1, + "sugar" = 0.1, + "sodawater" = 0.1, + "ammonia" = 1, + "diethylamine" = 2, + "nutriment" = 1, + "adminordrazine" = 1, + "eznutrient" = 1, + "robustharvest" = 1, + "left4zed" = 1 ) var/global/list/weedkiller_reagents = list( - "fluorine" = -4, - "chlorine" = -3, - "phosphorus" = -2, - "sugar" = 2, - "sacid" = -2, - "pacid" = -4, - "plantbgone" = -8, + "fluorine" = -4, + "chlorine" = -3, + "phosphorus" = -2, + "sugar" = 2, + "sacid" = -2, + "pacid" = -4, + "plantbgone" = -8, "adminordrazine" = -5 ) var/global/list/pestkiller_reagents = list( - "sugar" = 2, - "diethylamine" = -2, + "sugar" = 2, + "diethylamine" = -2, "adminordrazine" = -5 ) - var/global/list/beneficial_reagents = list( - "beer" = -0.05, - "fluorine" = -2, - "chlorine" = -1, - "phosphorus" = -0.75, - "sodawater" = 0.1, - "sacid" = -1, - "pacid" = -2, - "plantbgone" = -2, - "cryoxadone" = 3, - "ammonia" = 0.5, - "diethylamine" = 1, - "nutriment" = 0.5, - "radium" = -1.5, - "adminordrazine" = 1 - ) var/global/list/water_reagents = list( - "adminordrazine" = 1, - "milk" = 0.9, - "beer" = 0.7, - "flourine" = -0.5, - "chlorine" = -0.5, - "phosphorus" = -0.5, - "water" = 1, - "sodawater" = 1, + "water" = 1, + "adminordrazine" = 1, + "milk" = 0.9, + "beer" = 0.7, + "flourine" = -0.5, + "chlorine" = -0.5, + "phosphorus" = -0.5, + "water" = 1, + "sodawater" = 1, + ) + + // Beneficial reagents also have values for modifying yield_mod and mut_mod (in that order). + var/global/list/beneficial_reagents = list( + "beer" = list( -0.05, 0, 0 ), + "fluorine" = list( -2, 0, 0 ), + "chlorine" = list( -1, 0, 0 ), + "phosphorus" = list( -0.75, 0, 0 ), + "sodawater" = list( 0.1, 0, 0 ), + "sacid" = list( -1, 0, 0 ), + "pacid" = list( -2, 0, 0 ), + "plantbgone" = list( -2, 0, 0.2 ), + "cryoxadone" = list( 3, 0, 0 ), + "ammonia" = list( 0.5, 0, 0 ), + "diethylamine" = list( 1, 0, 0 ), + "nutriment" = list( 0.5, 1, 0 ), + "radium" = list( -1.5, 0, 0.2 ), + "adminordrazine" = list( 1, 1, 1 ), + "robustharvest" = list( 0, 0.2, 0 ), + "left4zed" = list( 0, 0, 0.2 ) ) // Mutagen list specifies minimum value for the mutation to take place, rather // than a bound as the lists above specify. var/global/list/mutagenic_reagents = list( - "radium" = 8, - "mutagen" = 3 + "radium" = list(8,3), + "mutagen" = list(3,8) ) /obj/machinery/portable_atmospherics/hydroponics/New() ..() + create_reagents(200) connect() update_icon() + if(closed_system) + flags &= ~OPENCONTAINER /obj/machinery/portable_atmospherics/hydroponics/bullet_act(var/obj/item/projectile/Proj) + //Don't act on seeds like dionaea that shouldn't change. + if(seed && seed.immutable > 0) + return + //Override for somatoray projectiles. if(istype(Proj ,/obj/item/projectile/energy/floramut) && prob(20)) mutate(1) @@ -137,8 +152,13 @@ /obj/machinery/portable_atmospherics/hydroponics/process() + //Do this even if we're not ready for a plant cycle. + process_reagents() + // Update values every cycle rather than every process() tick. - if(world.time < (lastcycle + cycledelay)) + if(force_update) + force_update = 0 + else if(world.time < (lastcycle + cycledelay)) return lastcycle = world.time @@ -159,7 +179,12 @@ return // Advance plant age. - age += 1 * HYDRO_SPEED_MULTIPLIER + if(prob(25)) age += 1 * HYDRO_SPEED_MULTIPLIER + + //Highly mutable plants have a chance of mutating every tick. + if(seed.immutable == -1) + var/mut_prob = rand(1,100) + if(mut_prob <= 5) mutate(mut_prob == 1 ? 2 : 1) // Maintain tray nutrient and water levels. if(seed.nutrient_consumption > 0 && nutrilevel > 0 && prob(25)) @@ -189,8 +214,21 @@ if(!environment) if(istype(T)) environment = T.return_air() - if(!environment) //We're in a crate or nullspace, bail out. - return + + if(!environment) return + + // Handle gas consumption. + if(seed.consume_gasses && seed.consume_gasses.len) + var/missing_gas = 0 + for(var/gas in seed.consume_gasses) + if(environment && environment.gas && environment.gas[gas] && \ + environment.gas[gas] >= seed.consume_gasses[gas]) + environment.adjust_gas(gas,-seed.consume_gasses[gas],1) + else + missing_gas++ + + if(missing_gas > 0) + health -= missing_gas * HYDRO_SPEED_MULTIPLIER // Process it. var/pressure = environment.return_pressure() @@ -200,6 +238,11 @@ if(abs(environment.temperature - seed.ideal_heat) > seed.heat_tolerance) health -= healthmod + // Handle gas production. + if(seed.exude_gasses && seed.exude_gasses.len) + for(var/gas in seed.exude_gasses) + environment.adjust_gas(gas, max(1,round((seed.exude_gasses[gas]*seed.potency)/seed.exude_gasses.len))) + // Handle light requirements. var/area/A = T.loc if(A) @@ -249,17 +292,73 @@ pestlevel = 0 // If enough time (in cycles, not ticks) has passed since the plant was harvested, we're ready to harvest again. - else if(age > seed.production && (age - lastproduce) > seed.production && (!harvest && !dead)) + else if(seed.products && seed.products.len && age > seed.production && \ + (age - lastproduce) > seed.production && (!harvest && !dead)) harvest = 1 lastproduce = age - if(prob(5)) // On each tick, there's a 5 percent chance the pest population will increase + if(prob(3)) // On each tick, there's a chance the pest population will increase pestlevel += 1 * HYDRO_SPEED_MULTIPLIER check_level_sanity() update_icon() return +//Process reagents being input into the tray. +/obj/machinery/portable_atmospherics/hydroponics/proc/process_reagents() + + if(!reagents) return + + if(reagents.total_volume <= 0) + return + + for(var/datum/reagent/R in reagents.reagent_list) + + + var/reagent_total = reagents.get_reagent_amount(R.id) + + if(seed && !dead) + //Handle some general level adjustments. + if(toxic_reagents[R.id]) + toxins += toxic_reagents[R.id] * reagent_total + if(weedkiller_reagents[R.id]) + weedlevel += weedkiller_reagents[R.id] * reagent_total + if(pestkiller_reagents[R.id]) + pestlevel += pestkiller_reagents[R.id] * reagent_total + + // Beneficial reagents have a few impacts along with health buffs. + if(beneficial_reagents[R.id]) + health += beneficial_reagents[R.id][1] * reagent_total + yield_mod += beneficial_reagents[R.id][2] * reagent_total + mutation_mod += beneficial_reagents[R.id][3] * reagent_total + + // Mutagen is distinct from the previous types and mostly has a chance of proccing a mutation. + if(mutagenic_reagents[R.id]) + var/reagent_min_value = mutagenic_reagents[R.id][1] + var/reagent_value = mutagenic_reagents[R.id][2]+mutation_mod + + if(reagent_total >= reagent_min_value) + if(prob(min(reagent_total*reagent_value,100))) + mutate(reagent_total > 10 ? 2 : 1) + + // Handle nutrient refilling. + if(nutrient_reagents[R.id]) + nutrilevel += nutrient_reagents[R.id] * reagent_total + + // Handle water and water refilling. + var/water_added = 0 + if(water_reagents[R.id]) + var/water_input = water_reagents[R.id] * reagent_total + water_added += water_input + waterlevel += water_input + + if(water_added > 0) + toxins -= round(water_added/4) + + reagents.clear_reagents() + check_level_sanity() + update_icon() + //Harvests the product of a plant. /obj/machinery/portable_atmospherics/hydroponics/proc/harvest(var/mob/user) @@ -385,7 +484,7 @@ return // Check if we should even bother working on the current seed datum. - if(seed.mutants.len && severity > 1 && prob(10+mutation_mod)) + if(seed.mutants. && seed.mutants.len && severity > 1 && prob(10+mutation_mod)) mutate_species() return @@ -412,7 +511,6 @@ weedlevel = max(0,min(weedlevel,10)) toxins = max(0,min(toxins,10)) - /obj/machinery/portable_atmospherics/hydroponics/proc/mutate_species() var/previous_plant = seed.display_name @@ -437,153 +535,41 @@ /obj/machinery/portable_atmospherics/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob) - if (istype(O, /obj/item/weapon/reagent_containers/glass)) - var/b_amount = O.reagents.get_reagent_amount("water") - if(b_amount > 0 && waterlevel < 100) - if(b_amount + waterlevel > 100) - b_amount = 100 - waterlevel - O.reagents.remove_reagent("water", b_amount) - waterlevel += b_amount - playsound(loc, 'sound/effects/slosh.ogg', 25, 1) - user << "You fill \the [src] with [round(b_amount,0.1)] units of water." + if (O.is_open_container()) + return 0 - // The more water you put in, the more diluted the toxins become. - toxins -= round(b_amount/4) + if(istype(O, /obj/item/weapon/wirecutters) || istype(O, /obj/item/weapon/scalpel)) - else if(waterlevel >= 100) - user << "\red \The [src] is already full." - else - user << "\red \The [O] is not filled with water." + if(!seed) + user << "There is nothing to take a sample from in \the [src]." + return + seed.harvest(user,yield_mod,1) + health -= (rand(1,5)*10) check_level_sanity() - update_icon() - // Nutrient fluid replacement. TODO: Consider rolling this into a proper reagent-processing proc. - else if ( istype(O, /obj/item/nutrient) ) - var/obj/item/nutrient/nutrient = O - user.u_equip(O) - nutrilevel = 10 - yield_mod = nutrient.yieldmod - mutation_mod = nutrient.mutmod - user << "You replace the nutrient solution in the [src]." - del(O) - update_icon() + force_update = 1 + process() + + return - // Syringe stuff else if(istype(O, /obj/item/weapon/reagent_containers/syringe)) var/obj/item/weapon/reagent_containers/syringe/S = O - if(seed) - // Injecting into the plant. - if (S.mode == 1) - if(!S.reagents.total_volume) - user << "\red [O] is empty." - return - - user << "\red You inject the [seed.display_name] with a chemical solution." - - // Uuuuuugh this whole chunk is going to be awful. TODO: condense it down somehow. - // Run through the various reagents in the lists and apply their effects as needed. - for(var/datum/reagent/R in S.reagents.reagent_list) - - var/reagent_value = 0 - - if(toxic_reagents[R.id]) - reagent_value = toxic_reagents[R.id] - if(reagent_value > 0) - if(reagent_value < 1) - toxins += reagent_value - else - toxins += round(S.reagents.get_reagent_amount(R.id)*rand(1,reagent_value)) - else - if(reagent_value > -1) - toxins += reagent_value - else - toxins -= abs(round(S.reagents.get_reagent_amount(R.id)*rand(1,abs(reagent_value)))) - - if(nutrient_reagents[R.id]) - reagent_value = nutrient_reagents[R.id] - if(reagent_value > 0) - if(reagent_value < 1) - nutrilevel += reagent_value - else - nutrilevel += round(S.reagents.get_reagent_amount(R.id)*rand(1,reagent_value)) - else - if(reagent_value > -1) - nutrilevel += reagent_value - else - nutrilevel -= abs(round(S.reagents.get_reagent_amount(R.id)*rand(1,abs(reagent_value)))) - - if(weedkiller_reagents[R.id]) - reagent_value = weedkiller_reagents[R.id] - if(reagent_value > 0) - if(reagent_value < 1) - weedlevel += reagent_value - else - weedlevel += round(S.reagents.get_reagent_amount(R.id)*rand(1,reagent_value)) - else - if(reagent_value > -1) - weedlevel += reagent_value - else - weedlevel -= abs(round(S.reagents.get_reagent_amount(R.id)*rand(1,abs(reagent_value)))) - - if(pestkiller_reagents[R.id]) - reagent_value = pestkiller_reagents[R.id] - if(reagent_value > 0) - if(reagent_value < 1) - pestlevel += reagent_value - else - pestlevel += round(S.reagents.get_reagent_amount(R.id)*rand(1,reagent_value)) - else - if(reagent_value > -1) - pestlevel += reagent_value - else - pestlevel -= abs(round(S.reagents.get_reagent_amount(R.id)*rand(1,abs(reagent_value)))) - - if(beneficial_reagents[R.id]) - reagent_value = beneficial_reagents[R.id] - if(reagent_value > 0) - if(reagent_value < 1) - health += reagent_value - else - health += round(S.reagents.get_reagent_amount(R.id)*rand(1,reagent_value)) - else - if(reagent_value > -1) - health += reagent_value - else - health -= abs(round(S.reagents.get_reagent_amount(R.id)*rand(1,abs(reagent_value)))) - - if(water_reagents[R.id]) - reagent_value = water_reagents[R.id] - if(reagent_value > 0) - if(reagent_value < 1) - waterlevel += reagent_value - else - waterlevel += round(S.reagents.get_reagent_amount(R.id)*rand(1,reagent_value)) - else - if(reagent_value > -1) - waterlevel += reagent_value - else - waterlevel -= abs(round(S.reagents.get_reagent_amount(R.id)*rand(1,abs(reagent_value)))) - - // Mutagen is distinct from the previous types and mostly has a chance of proccing a mutation. - if(mutagenic_reagents[R.id]) - var/reagent_total = S.reagents.get_reagent_amount(R.id) - reagent_value = mutagenic_reagents[R.id]+mutation_mod - if(reagent_total >= reagent_value) - if(prob(min(reagent_total*reagent_value,100))) - mutate(reagent_value > 10 ? 2 : 1) - - S.reagents.clear_reagents() - + if (S.mode == 1) + if(seed) + return ..() else - user << "You can't get any extract out of this plant." + user << "There's no plant in the tray to inject." + return 1 else - user << "There's nothing to inject the solution into." - - check_level_sanity() - update_icon() + if(seed) + //Leaving this in in case we want to extract from plants later. + user << "You can't get any extract out of this plant." + else + user << "There's nothing in the tray to draw something from." + return 1 else if (istype(O, /obj/item/seeds)) @@ -613,7 +599,9 @@ seed = S.seed //Grab the seed datum. dead = 0 age = 1 - health = seed.endurance + //Snowflakey, maybe move this to the seed datum + health = (istype(S, /obj/item/seeds/cutting) ? round(seed.endurance/rand(2,5)) : seed.endurance) + lastcycle = world.time del(O) @@ -622,7 +610,7 @@ update_icon() else - user << "\red The [src] already has seeds in it!" + user << "\red \The [src] already has seeds in it!" else if (istype(O, /obj/item/weapon/reagent_containers/spray/plantbgone)) if(seed) @@ -733,7 +721,31 @@ usr << "[src] is \red filled with weeds!" if(pestlevel >= 5) usr << "[src] is \red filled with tiny worms!" - usr << text ("") + + if(!istype(src,/obj/machinery/portable_atmospherics/hydroponics/soil)) + + var/turf/T = loc + var/datum/gas_mixture/environment + + if(closed_system && (connected_port || holding)) + environment = air_contents + + if(!environment) + if(istype(T)) + environment = T.return_air() + + if(!environment) //We're in a crate or nullspace, bail out. + return + + var/area/A = T.loc + var/light_available + if(A) + if(A.lighting_use_dynamic) + light_available = max(0,min(10,T.lighting_lumcount)-5) + else + light_available = 5 + + usr << "The tray's sensor suite is reporting a light level of [light_available] lumens and a temperature of [environment.temperature]K." /obj/machinery/portable_atmospherics/hydroponics/verb/close_lid() set name = "Toggle Tray Lid" @@ -745,6 +757,11 @@ closed_system = !closed_system usr << "You [closed_system ? "close" : "open"] the tray's lid." + if(closed_system) + flags &= ~OPENCONTAINER + else + flags |= OPENCONTAINER + update_icon() /obj/machinery/portable_atmospherics/hydroponics/soil diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index 0c87e6dcdd2..f1d12a1a6a5 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -58,9 +58,9 @@ proc/populate_seed_list() //Tolerances. var/requires_nutrients = 1 // The plant can starve. - var/nutrient_consumption = 0.1 // Plant eats this much per tick. + var/nutrient_consumption = 0.25 // Plant eats this much per tick. var/requires_water = 1 // The plant can become dehydrated. - var/water_consumption = 1 // Plant drinks this much per tick. + var/water_consumption = 3 // Plant drinks this much per tick. var/ideal_heat = 293 // Preferred temperature in Kelvin. var/heat_tolerance = 20 // Departure from ideal that is survivable. var/ideal_light = 8 // Preferred light level in luminosity. @@ -83,7 +83,7 @@ proc/populate_seed_list() var/spread = 0 // 0 limits plant to tray, 1 = creepers, 2 = vines. var/carnivorous = 0 // 0 = none, 1 = eat pests in tray, 2 = eat living things (when a vine). var/parasite = 0 // 0 = no, 1 = gain health from weed level. - var/immutable // If set, plant will never mutate. + var/immutable = 0 // If set, plant will never mutate. If -1, plant is highly mutable. var/alter_temp // If set, the plant will periodically alter local temp by this amount. // Cosmetics. @@ -99,14 +99,15 @@ proc/populate_seed_list() //Returns a key corresponding to an entry in the global seed list. /datum/seed/proc/get_mutant_variant() - if(!mutants || !mutants.len || immutable) return 0 + if(!mutants || !mutants.len || immutable > 0) return 0 return pick(mutants) //Mutates the plant overall (randomly). /datum/seed/proc/mutate(var/degree,var/turf/source_turf) - if(!degree || immutable) return - source_turf.visible_message("[display_name] quivers uneasily!") + if(!degree || immutable > 0) return + + source_turf.visible_message("\blue \The [display_name] quivers!") //This looks like shit, but it's a lot easier to read/change this way. var/total_mutations = rand(1,1+degree) @@ -115,7 +116,7 @@ proc/populate_seed_list() if(0) //Plant cancer! lifespan = max(0,lifespan-rand(1,5)) endurance = max(0,endurance-rand(10,20)) - source_turf.visible_message("[display_name] withers rapidly!") + source_turf.visible_message("\red \The [display_name] withers rapidly!") if(1) nutrient_consumption = max(0, min(5, nutrient_consumption + rand(-(degree*0.1),(degree*0.1)))) water_consumption = max(0, min(50, water_consumption + rand(-degree,degree))) @@ -134,7 +135,7 @@ proc/populate_seed_list() if(prob(degree*5)) carnivorous = max(0, min(2, carnivorous + rand(-degree,degree))) if(carnivorous) - source_turf.visible_message("[display_name] shudders hungrily.") + source_turf.visible_message("\blue \The [display_name] shudders hungrily.") if(6) weed_tolerance = max(0, min(10, weed_tolerance + (rand(-2,2) * degree))) if(prob(degree*5)) parasite = !parasite @@ -148,7 +149,7 @@ proc/populate_seed_list() potency = max(0, min(200, potency + (rand(-20,20) * degree))) if(prob(degree*5)) spread = max(0, min(2, spread + rand(-1,1))) - source_turf.visible_message("[display_name] spasms visibly, shifting in the tray.") + source_turf.visible_message("\blue \The [display_name] spasms visibly, shifting in the tray.") if(9) maturation = max(0, min(30, maturation + (rand(-1,1) * degree))) if(prob(degree*5)) @@ -157,28 +158,28 @@ proc/populate_seed_list() if(prob(degree*2)) biolum = !biolum if(biolum) - source_turf.visible_message("[display_name] begins to glow!") + source_turf.visible_message("\blue \The [display_name] begins to glow!") if(prob(degree*2)) biolum_colour = "#[pick(list("FF0000","FF7F00","FFFF00","00FF00","0000FF","4B0082","8F00FF"))]" - source_turf.visible_message("[display_name]'s glow changes colour
!") + source_turf.visible_message("\blue \The [display_name]'s glow changes colour
!") else - source_turf.visible_message("[display_name]'s glow dims...") + source_turf.visible_message("\blue \The [display_name]'s glow dims...") if(11) if(prob(degree*2)) flowers = !flowers if(flowers) - source_turf.visible_message("[display_name] sprouts a bevy of flowers!") + source_turf.visible_message("\blue \The [display_name] sprouts a bevy of flowers!") if(prob(degree*2)) flower_colour = "#[pick(list("FF0000","FF7F00","FFFF00","00FF00","0000FF","4B0082","8F00FF"))]" - source_turf.visible_message("[display_name]'s flowers changes colour
!") + source_turf.visible_message("\blue \The [display_name]'s flowers changes colour
!") else - source_turf.visible_message("[display_name]'s flowers wither and fall off.") + source_turf.visible_message("\blue \The [display_name]'s flowers wither and fall off.") return //Mutates a specific trait/set of traits. /datum/seed/proc/apply_gene(var/datum/plantgene/gene) - if(!gene || !gene.values || immutable) return + if(!gene || !gene.values || immutable > 0) return switch(gene.genetype) @@ -208,11 +209,12 @@ proc/populate_seed_list() else chems[rid] = gene.values[2][rid] - //TODO. - //if(!exude_gasses) exude_gasses = list() - //exude_gasses |= gene.values[3] - //for(var/gas in exude_gasses) - // exude_gasses[gas] = max(1,round(exude_gasses[gas]/2)) + var/list/new_gasses = gene.values[3] + if(istype(new_gasses)) + if(!exude_gasses) exude_gasses = list() + exude_gasses |= new_gasses + for(var/gas in exude_gasses) + exude_gasses[gas] = max(1,round(exude_gasses[gas]*0.8)) alter_temp = gene.values[4] potency = gene.values[5] @@ -343,11 +345,10 @@ proc/populate_seed_list() return (P ? P : 0) //Place the plant products at the feet of the user. -/datum/seed/proc/harvest(var/mob/user,var/yield_mod) +/datum/seed/proc/harvest(var/mob/user,var/yield_mod,var/harvest_sample) if(!user) return - //TODO: check for failing to harvest. var/got_product if(!isnull(products) && products.len && yield > 0) got_product = 1 @@ -355,7 +356,7 @@ proc/populate_seed_list() if(!got_product) user << "\red You fail to harvest anything useful." else - user << "You harvest from the [display_name]." + user << "You [harvest_sample ? "take a sample" : "harvest"] from the [display_name]." //This may be a new line. Update the global if it is. if(name == "new line" || !(name in seed_types)) @@ -363,12 +364,18 @@ proc/populate_seed_list() name = "[uid]" seed_types[name] = src + if(harvest_sample) + var/obj/item/seeds/seeds = new(get_turf(user)) + seeds.seed_type = name + seeds.update_seed() + return + var/total_yield if(isnull(yield_mod) || yield_mod < 1) yield_mod = 0 total_yield = yield else - total_yield = max(1,rand(1,((yield_mod+yield)))) + total_yield = max(1,rand(yield_mod,yield_mod+yield)) currently_querying = list() for(var/i = 0;i 0) return //Set up some basic information. var/datum/seed/new_seed = new @@ -1163,6 +1169,7 @@ proc/populate_seed_list() yield = -1 potency = -1 growth_stages = 4 + immutable = -1 /datum/seed/whitebeets name = "whitebeet" diff --git a/code/modules/hydroponics/seed_machines.dm b/code/modules/hydroponics/seed_machines.dm index e9d02a44fca..837abe7211a 100644 --- a/code/modules/hydroponics/seed_machines.dm +++ b/code/modules/hydroponics/seed_machines.dm @@ -3,9 +3,16 @@ desc = "A small disk used for carrying data on plant genetics." icon = 'icons/obj/hydroponics.dmi' icon_state = "disk" + w_class = 1.0 + var/list/genes = list() var/genesource = "unknown" +/obj/item/weapon/disk/botany/New() + ..() + pixel_x = rand(-5,5) + pixel_y = rand(-5,5) + /obj/item/weapon/disk/botany/attack_self(var/mob/user as mob) if(genes.len) var/choice = alert(user, "Are you sure you want to wipe the disk?", "Xenobotany Data", "No", "Yes") @@ -24,6 +31,7 @@ ..() for(var/i = 0;i<7;i++) new /obj/item/weapon/disk/botany(src) + /obj/machinery/botany icon = 'icons/obj/hydroponics.dmi' icon_state = "hydrotray3" @@ -77,16 +85,18 @@ /obj/machinery/botany/attackby(obj/item/weapon/W as obj, mob/user as mob) if(istype(W,/obj/item/seeds)) if(seed) - if(seed.seed.immutable) - user << "That seed is not compatible with our genetics technology." - else - user << "There is already a seed loaded." + user << "There is already a seed loaded." + + var/obj/item/seeds/S =W + if(S.seed && S.seed.immutable > 0) + user << "That seed is not compatible with our genetics technology." else user.drop_item(W) W.loc = src seed = W user << "You load [W] into [src]." return + if(istype(W,/obj/item/weapon/screwdriver)) open = !open user << "\blue You [open ? "open" : "close"] the maintenance panel." @@ -181,7 +191,7 @@ if(seed.seed.name == "new line" || isnull(seed_types[seed.seed.name])) seed.seed.uid = seed_types.len + 1 - seed.seed.name = "[uid]" + seed.seed.name = "[seed.seed.uid]" seed_types[seed.seed.name] = seed.seed seed.update_seed() @@ -215,6 +225,8 @@ if(seed && seed.seed) genetics = seed.seed + degradation = 0 + del(seed) seed = null @@ -233,7 +245,7 @@ if(!genetics.roundstart) loaded_disk.genesource += " (variety #[genetics.uid])" - loaded_disk.name += " ([gene_tag_masks[href_list["get_gene"]]])" + loaded_disk.name += " ([gene_tag_masks[href_list["get_gene"]]], #[genetics.uid])" loaded_disk.desc += " The label reads \'gene [gene_tag_masks[href_list["get_gene"]]], sampled from [genetics.display_name]\'." eject_disk = 1 diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index dbc13158ec3..d0afda2e6fb 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -32,6 +32,14 @@ if(seed && !seed.roundstart) usr << "It's tagged as variety #[seed.uid]." +/obj/item/seeds/cutting + name = "cuttings" + desc = "Some plant cuttings." + +/obj/item/seeds/cutting/update_appearance() + ..() + src.name = "packet of [seed.seed_name] cuttings" + /obj/item/seeds/replicapod seed_type = "diona" diff --git a/code/modules/hydroponics/vines.dm b/code/modules/hydroponics/vines.dm index a7312e3dc1a..085229d417c 100644 --- a/code/modules/hydroponics/vines.dm +++ b/code/modules/hydroponics/vines.dm @@ -295,8 +295,8 @@ var/limited_growth = 0 /obj/effect/plant_controller/creeper - collapse_limit = 50 - slowdown_limit = 5 + collapse_limit = 6 + slowdown_limit = 3 limited_growth = 1 /obj/effect/plant_controller/New() diff --git a/code/modules/mob/holder.dm b/code/modules/mob/holder.dm index 747467a66f9..d1adff7de2c 100644 --- a/code/modules/mob/holder.dm +++ b/code/modules/mob/holder.dm @@ -54,23 +54,25 @@ //Mob specific holders. /obj/item/weapon/holder/diona - name = "diona nymph" desc = "It's a tiny plant critter." icon_state = "nymph" origin_tech = "magnets=3;biotech=5" /obj/item/weapon/holder/drone - name = "maintenance drone" desc = "It's a small maintenance robot." icon_state = "drone" origin_tech = "magnets=3;engineering=5" - /obj/item/weapon/holder/cat - name = "cat" desc = "It's a cat. Meow." icon_state = "cat" - origin_tech = null \ No newline at end of file + origin_tech = null + +/obj/item/weapon/holder/borer + name = "cortical borer" + desc = "It's a slimy brain slug. Gross." + icon_state = "borer" + origin_tech = "biotech=6" \ No newline at end of file diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm index 8c7afca770b..fc702d3f631 100644 --- a/code/modules/mob/living/carbon/alien/special/facehugger.dm +++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm @@ -16,6 +16,7 @@ var/const/MAX_ACTIVE_TIME = 400 item_state = "facehugger" w_class = 1 //note: can be picked up by aliens unlike most other items of w_class below 4 flags = FPRINT | TABLEPASS | MASKCOVERSMOUTH | MASKCOVERSEYES | MASKINTERNALS + body_parts_covered = FACE|EYES throw_range = 5 var/stat = CONSCIOUS //UNCONSCIOUS is the idle state in this case diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 0d6aaec965d..4de06df6519 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -1,6 +1,6 @@ /mob/living/carbon/Life() ..() - + // Increase germ_level regularly if(germ_level < GERM_LEVEL_AMBIENT && prob(30)) //if you're just standing there, you shouldn't get more germs beyond an ambient level germ_level++ @@ -14,7 +14,7 @@ src.nutrition -= HUNGER_FACTOR/10 if((FAT in src.mutations) && src.m_intent == "run" && src.bodytemperature <= 360) src.bodytemperature += 2 - + // Moving around increases germ_level faster if(germ_level < GERM_LEVEL_MOVE_CAP && prob(8)) germ_level++ @@ -206,7 +206,7 @@ if (istype(src,/mob/living/carbon/human) && src:w_uniform) var/mob/living/carbon/human/H = src H.w_uniform.add_fingerprint(M) - + if(lying) src.sleeping = max(0,src.sleeping-5) if(src.sleeping == 0) @@ -216,7 +216,7 @@ else M.visible_message("[M] hugs [src] to make [t_him] feel better!", \ "You hug [src] to make [t_him] feel better!") - + AdjustParalysis(-3) AdjustStunned(-3) AdjustWeakened(-3) @@ -470,9 +470,10 @@ return if(B.chemicals >= 100) - src << "\red Your host twitches and quivers as you rapdly excrete several larvae from your sluglike body." + src << "\red Your host twitches and quivers as you rapidly excrete a larva from your sluglike body." visible_message("\red [src] heaves violently, expelling a rush of vomit and a wriggling, sluglike creature!") B.chemicals -= 100 + B.has_reproduced = 1 new /obj/effect/decal/cleanable/vomit(get_turf(src)) playsound(loc, 'sound/effects/splat.ogg', 50, 1) diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index d4050c06b85..75eff694fac 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -584,4 +584,38 @@ set desc = "Sets an extended description of your character's features." set category = "IC" - flavor_text = copytext(sanitize(input(usr, "Please enter your new flavour text.", "Flavour text", null) as text), 1) + var/HTML = "" + HTML += "
" + HTML += "Update Flavour Text
" + HTML += "
" + HTML += "General: " + HTML += TextPreview(flavor_texts["general"]) + HTML += "
" + HTML += "Head: " + HTML += TextPreview(flavor_texts["head"]) + HTML += "
" + HTML += "Face: " + HTML += TextPreview(flavor_texts["face"]) + HTML += "
" + HTML += "Eyes: " + HTML += TextPreview(flavor_texts["eyes"]) + HTML += "
" + HTML += "Body: " + HTML += TextPreview(flavor_texts["torso"]) + HTML += "
" + HTML += "Arms: " + HTML += TextPreview(flavor_texts["arms"]) + HTML += "
" + HTML += "Hands: " + HTML += TextPreview(flavor_texts["hands"]) + HTML += "
" + HTML += "Legs: " + HTML += TextPreview(flavor_texts["legs"]) + HTML += "
" + HTML += "Feet: " + HTML += TextPreview(flavor_texts["feet"]) + HTML += "
" + HTML += "
" + HTML +="\[Done\]" + HTML += "" + src << browse(HTML, "window=flavor_changes;size=430x300") \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 63117913a08..d561271aa3b 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -827,6 +827,27 @@ if (href_list["lookmob"]) var/mob/M = locate(href_list["lookmob"]) M.examine() + + if (href_list["flavor_change"]) + switch(href_list["flavor_change"]) + if("done") + src << browse(null, "window=flavor_changes") + return + if("general") + var/msg = input(usr,"Update the general description of your character. This will be shown regardless of clothing, and may include OOC notes and preferences.","Flavor Text",html_decode(flavor_texts[href_list["flavor_change"]])) as message + if(msg != null) + msg = copytext(msg, 1, MAX_MESSAGE_LEN) + msg = html_encode(msg) + flavor_texts[href_list["flavor_change"]] = msg + return + else + var/msg = input(usr,"Update the flavor text for your [href_list["flavor_change"]].","Flavor Text",html_decode(flavor_texts[href_list["flavor_change"]])) as message + if(msg != null) + msg = copytext(msg, 1, MAX_MESSAGE_LEN) + msg = html_encode(msg) + flavor_texts[href_list["flavor_change"]] = msg + set_flavor() + return ..() return @@ -1503,3 +1524,41 @@ return H << "\red Your nose begins to bleed..." H.drip(1) + +/mob/living/carbon/human/print_flavor_text() + var/list/equipment = list(src.head,src.wear_mask,src.glasses,src.w_uniform,src.wear_suit,src.gloves,src.shoes) + var/head_exposed = 1 + var/face_exposed = 1 + var/eyes_exposed = 1 + var/torso_exposed = 1 + var/arms_exposed = 1 + var/legs_exposed = 1 + var/hands_exposed = 1 + var/feet_exposed = 1 + + for(var/obj/item/clothing/C in equipment) + if(C.body_parts_covered & HEAD) + head_exposed = 0 + if(C.body_parts_covered & FACE) + face_exposed = 0 + if(C.body_parts_covered & EYES) + eyes_exposed = 0 + if(C.body_parts_covered & UPPER_TORSO) + torso_exposed = 0 + if(C.body_parts_covered & ARMS) + arms_exposed = 0 + if(C.body_parts_covered & HANDS) + hands_exposed = 0 + if(C.body_parts_covered & LEGS) + legs_exposed = 0 + if(C.body_parts_covered & FEET) + feet_exposed = 0 + + flavor_text = flavor_texts["general"] + flavor_text += "\n\n" + for (var/T in flavor_texts) + if(flavor_texts[T] != "") + if((T == "head" && head_exposed) || (T == "face" && face_exposed) || (T == "eyes" && eyes_exposed) || (T == "torso" && torso_exposed) || (T == "arms" && arms_exposed) || (T == "hands" && hands_exposed) || (T == "legs" && legs_exposed) || (T == "feet" && feet_exposed)) + flavor_text += flavor_texts[T] + flavor_text += "\n\n" + return ..() diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index 570e141c651..bc6d2832e6a 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -259,13 +259,21 @@ This function restores all organs. /mob/living/carbon/human/apply_damage(var/damage = 0, var/damagetype = BRUTE, var/def_zone = null, var/blocked = 0, var/sharp = 0, var/edge = 0, var/obj/used_weapon = null) - handle_suit_punctures(damagetype, damage) - //visible_message("Hit debug. [damage] | [damagetype] | [def_zone] | [blocked] | [sharp] | [used_weapon]") + + //Handle other types of damage if((damagetype != BRUTE) && (damagetype != BURN)) + if(damagetype == HALLOSS) + if ((damage > 25 && prob(20)) || (damage > 50 && prob(60))) + emote("scream") + + ..(damage, damagetype, def_zone, blocked) return 1 + //Handle BRUTE and BURN damage + handle_suit_punctures(damagetype, damage) + if(blocked >= 2) return 0 var/datum/organ/external/organ = null @@ -296,19 +304,4 @@ This function restores all organs. // Will set our damageoverlay icon to the next level, which will then be set back to the normal level the next mob.Life(). updatehealth() hud_updateflag |= 1 << HEALTH_HUD - - //Embedded object code. - if(!organ) return - if(istype(used_weapon,/obj/item)) - var/obj/item/W = used_weapon - if (!W.is_robot_module()) - //blunt objects should really not be embedding in things unless a huge amount of force is involved - var/embed_chance = sharp? damage/W.w_class : damage/(W.w_class*3) - var/embed_threshold = sharp? 5*W.w_class : 15*W.w_class - - //Sharp objects will always embed if they do enough damage. - //Thrown objects have some momentum already and have a small chance to embed even if the damage is below the threshold - if((sharp && damage > (10*W.w_class)) || (sharp && !ismob(W.loc) && prob(damage/(10*W.w_class)*100)) || (damage > embed_threshold && prob(embed_chance))) - organ.embed(W) - return 1 diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 6260a297a1c..9ef3ed5cd09 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -10,23 +10,14 @@ emp_act /mob/living/carbon/human/bullet_act(var/obj/item/projectile/P, var/def_zone) -// BEGIN TASER NERF - /* Commenting out new-old taser nerf. - if(C.siemens_coefficient == 0) //If so, is that clothing shock proof? - if(prob(deflectchance)) - visible_message("\red The [P.name] gets deflected by [src]'s [C.name]!") //DEFLECT! - visible_message("\red Taser hit for [P.damage] damage!") - del P -*/ -/* Commenting out old Taser nerf - if(wear_suit && istype(wear_suit, /obj/item/clothing/suit/armor)) - if(istype(P, /obj/item/projectile/energy/electrode)) - visible_message("\red The [P.name] gets deflected by [src]'s [wear_suit.name]!") - del P - return -1 -*/ -// END TASER NERF + var/datum/organ/external/organ = get_organ(check_zone(def_zone)) + //Shields + if(check_shields(P.damage, "the [P.name]")) + P.on_hit(src, 2, def_zone) + return 2 + + //Laserproof armour if(wear_suit && istype(wear_suit, /obj/item/clothing/suit/armor/laserproof)) if(istype(P, /obj/item/projectile/energy) || istype(P, /obj/item/projectile/beam)) var/reflectchance = 40 - round(P.damage/3) @@ -51,56 +42,45 @@ emp_act return -1 // complete projectile permutation -//BEGIN BOOK'S TASER NERF. - if(istype(P, /obj/item/projectile/beam/stun)) - var/datum/organ/external/select_area = get_organ(def_zone) // We're checking the outside, buddy! - var/list/body_parts = list(head, wear_mask, wear_suit, w_uniform, gloves, shoes) // What all are we checking? - // var/deflectchance=90 //Is it a CRITICAL HIT with that taser? - for(var/bp in body_parts) //Make an unregulated var to pass around. - if(!bp) - continue //Does this thing we're shooting even exist? - if(bp && istype(bp ,/obj/item/clothing)) // If it exists, and it's clothed - var/obj/item/clothing/C = bp // Then call an argument C to be that clothing! - if(C.body_parts_covered & select_area.body_part) // Is that body part being targeted covered? - P.agony=P.agony*C.siemens_coefficient - apply_effect(P.agony,AGONY,0) - flash_pain() - src <<"\red You have been shot!" - del P - - var/obj/item/weapon/cloaking_device/C = locate((/obj/item/weapon/cloaking_device) in src) - if(C && C.active) - C.attack_self(src)//Should shut it off - update_icons() - src << "\blue Your [C.name] was disrupted!" - Stun(2) - - if(istype(equipped(),/obj/item/device/assembly/signaler)) - var/obj/item/device/assembly/signaler/signaler = equipped() - if(signaler.deadman && prob(80)) - src.visible_message("\red [src] triggers their deadman's switch!") - signaler.signal() - - return -//END TASER NERF - - if(check_shields(P.damage, "the [P.name]")) - P.on_hit(src, 2, def_zone) - return 2 - - var/datum/organ/external/organ = get_organ(check_zone(def_zone)) - - var/armor = getarmor_organ(organ, "bullet") - - if((P.embed && prob(20 + max(P.damage - armor, -10))) && P.damage_type == BRUTE) - var/obj/item/weapon/shard/shrapnel/SP = new() - (SP.name) = "[P.name] shrapnel" - (SP.desc) = "[SP.desc] It looks like it was fired from [P.shot_from]." - (SP.loc) = organ - organ.embed(SP) + //Shrapnel + if (P.damage_type == BRUTE) + var/armor = getarmor_organ(organ, "bullet") + if((P.embed && prob(20 + max(P.damage - armor, -10)))) + var/obj/item/weapon/shard/shrapnel/SP = new() + (SP.name) = "[P.name] shrapnel" + (SP.desc) = "[SP.desc] It looks like it was fired from [P.shot_from]." + (SP.loc) = organ + organ.embed(SP) return (..(P , def_zone)) +/mob/living/carbon/human/stun_effect_act(var/stun_amount, var/agony_amount, var/def_zone) + var/datum/organ/external/affected = get_organ(check_zone(def_zone)) + var/siemens_coeff = get_siemens_coefficient_organ(affected) + stun_amount *= siemens_coeff + agony_amount *= siemens_coeff + + switch (def_zone) + if("head") + agony_amount *= 1.50 + if("l_hand", "r_hand") + var/c_hand + if (def_zone == "l_hand") + c_hand = l_hand + else + c_hand = r_hand + + if(c_hand && (stun_amount || agony_amount > 10)) + msg_admin_attack("[src.name] ([src.ckey]) was disarmed by a stun effect") + + u_equip(c_hand) + if (affected.status & ORGAN_ROBOT) + emote("me", 1, "drops what they were holding, their [affected.display_name] malfunctioning!") + else + var/emote_scream = pick("screams in pain and", "lets out a sharp cry and", "cries out and") + emote("me", 1, "[(species && species.flags & NO_PAIN) ? "" : emote_scream ] drops what they were holding in their [affected.display_name]!") + + ..(stun_amount, agony_amount, def_zone) /mob/living/carbon/human/getarmor(var/def_zone, var/type) var/armorval = 0 @@ -133,6 +113,20 @@ emp_act protection += C.armor[type] return protection +//this proc returns the Siemens coefficient of electrical resistivity for a particular external organ. +/mob/living/carbon/human/proc/get_siemens_coefficient_organ(var/datum/organ/external/def_zone) + if (!def_zone) + return 1.0 + + var/siemens_coefficient = 1.0 + + var/list/clothing_items = list(head, wear_mask, wear_suit, w_uniform, gloves, shoes) // What all are we checking? + for(var/obj/item/clothing/C in clothing_items) + if(istype(C) && (C.body_parts_covered & def_zone.body_part)) // Is that body part being targeted covered? + siemens_coefficient *= C.siemens_coefficient + + return siemens_coefficient + /mob/living/carbon/human/proc/check_head_coverage() var/list/body_parts = list(head, wear_mask, wear_suit, w_uniform) @@ -186,10 +180,11 @@ emp_act ..() +//Returns 1 if the attack hit, 0 if it missed. /mob/living/carbon/human/proc/attacked_by(var/obj/item/I, var/mob/living/user, var/def_zone) if(!I || !user) return 0 - var/target_zone = def_zone? def_zone : get_zone_with_miss_chance(user.zone_sel.selecting, src) + var/target_zone = def_zone? check_zone(def_zone) : get_zone_with_miss_chance(user.zone_sel.selecting, src) if(user == src) // Attacking yourself can't miss target_zone = user.zone_sel.selecting @@ -280,6 +275,20 @@ emp_act if(bloody) bloody_body(src) + + //Melee weapon embedded object code. + if (I.damtype == BRUTE && !I.is_robot_module()) + var/damage = I.force + if (armor) + damage /= armor+1 + + //blunt objects should really not be embedding in things unless a huge amount of force is involved + var/embed_chance = weapon_sharp? damage/I.w_class : damage/(I.w_class*3) + var/embed_threshold = weapon_sharp? 5*I.w_class : 15*I.w_class + + //Sharp objects will always embed if they do enough damage. + if((weapon_sharp && damage > (10*I.w_class)) || (damage > embed_threshold && prob(embed_chance))) + affecting.embed(I) return 1 //this proc handles being hit by a thrown atom @@ -333,6 +342,24 @@ emp_act if(!istype(src,/mob/living/simple_animal/mouse)) msg_admin_attack("[src.name] ([src.ckey]) was hit by a [O], thrown by [M.name] ([assailant.ckey]) (JMP)") + //thrown weapon embedded object code. + if(dtype == BRUTE && istype(O,/obj/item)) + var/obj/item/I = O + if (!I.is_robot_module()) + var/sharp = is_sharp(I) + var/damage = throw_damage + if (armor) + damage /= armor+1 + + //blunt objects should really not be embedding in things unless a huge amount of force is involved + var/embed_chance = sharp? damage/I.w_class : damage/(I.w_class*3) + var/embed_threshold = sharp? 5*I.w_class : 15*I.w_class + + //Sharp objects will always embed if they do enough damage. + //Thrown sharp objects have some momentum already and have a small chance to embed even if the damage is below the threshold + if((sharp && prob(damage/(10*I.w_class)*100)) || (damage > embed_threshold && prob(embed_chance))) + affecting.embed(I) + // Begin BS12 momentum-transfer code. if(O.throw_source && speed >= 15) var/obj/item/weapon/W = O @@ -353,6 +380,7 @@ emp_act src.anchored = 1 src.pinned += O + /mob/living/carbon/human/proc/bloody_hands(var/mob/living/source, var/amount = 2) if (gloves) gloves.add_blood(source) diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index d5db0fdbc7e..818b9a9e7e0 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -70,3 +70,5 @@ var/mob/remoteview_target = null var/hand_blood_color + + var/list/flavor_texts = list() \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index b1e6af0cedd..124aec89e3a 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -671,10 +671,20 @@ It can still be worn/put on as normal. slot_to_process = slot_back if (target.back) strip_item = target.back - if("handcuff") + if("handcuff") slot_to_process = slot_handcuffed if (target.handcuffed) strip_item = target.handcuffed + else + //check that we are still grabbing them + var/grabbing = 0 + for (var/obj/item/weapon/grab/G in target.grabbed_by) + if (G.loc == source && G.state == GRAB_AGGRESSIVE) + grabbing = 1 + if (!grabbing) + slot_to_process = null + source << "\red Your grasp was broken before you could restrain [target]!" + if("legcuff") slot_to_process = slot_legcuffed if (target.legcuffed) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 1fa7e6349d8..5a06f2cfbea 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -251,7 +251,7 @@ proc/get_damage_icon_part(damage_state, body_part) icon_key = "[icon_key]0" else if(part.status & ORGAN_ROBOT) icon_key = "[icon_key]2" - else if(part.status & ORGAN_DEAD) //Do we even have necrosis in our current code? ~Z + else if(part.status & ORGAN_DEAD) icon_key = "[icon_key]3" else icon_key = "[icon_key]1" @@ -274,6 +274,10 @@ proc/get_damage_icon_part(damage_state, body_part) //No icon stored, so we need to start with a basic one. var/datum/organ/external/chest = get_organ("chest") base_icon = chest.get_icon(g) + + if(chest.status & ORGAN_DEAD) + base_icon.ColorTone(necrosis_color_mod) + base_icon.SetIntensity(0.7) for(var/datum/organ/external/part in organs) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 4cfad2504a5..3ab8632e8ec 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -202,15 +202,6 @@ return 0 -/mob/living/proc/electrocute_act(var/shock_damage, var/obj/source, var/siemens_coeff = 1.0) - return 0 //only carbon liveforms have this proc - -/mob/living/emp_act(severity) - var/list/L = src.get_contents() - for(var/obj/O in L) - O.emp_act(severity) - ..() - /mob/living/proc/can_inject() return 1 diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 8b9bfccb879..6f308e6add4 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -38,6 +38,9 @@ /mob/living/bullet_act(var/obj/item/projectile/P, var/def_zone) + flash_weak_pain() + + //Being hit while using a cloaking device var/obj/item/weapon/cloaking_device/C = locate((/obj/item/weapon/cloaking_device) in src) if(C && C.active) C.attack_self(src)//Should shut it off @@ -45,14 +48,21 @@ src << "\blue Your [C.name] was disrupted!" Stun(2) - flash_weak_pain() - + //Being hit while using a deadman switch if(istype(equipped(),/obj/item/device/assembly/signaler)) var/obj/item/device/assembly/signaler/signaler = equipped() if(signaler.deadman && prob(80)) src.visible_message("\red [src] triggers their deadman's switch!") signaler.signal() + //Stun Beams + if(istype(P, /obj/item/projectile/beam/stun) || istype(P, /obj/item/projectile/bullet/stunshot)) + stun_effect_act(0, P.agony, def_zone, P) + src <<"\red You have been hit by [P]!" + del P + return + + //Armor var/absorb = run_armor_check(def_zone, P.flag) var/proj_sharp = is_sharp(P) var/proj_edge = has_edge(P) @@ -65,6 +75,30 @@ P.on_hit(src, absorb, def_zone) return absorb +//Handles the effects of "stun" weapons +/mob/living/proc/stun_effect_act(var/stun_amount, var/agony_amount, var/def_zone, var/used_weapon=null) + flash_pain() + + if (stun_amount) + Stun(stun_amount) + Weaken(stun_amount) + apply_effect(STUTTER, stun_amount) + apply_effect(EYE_BLUR, stun_amount) + + if (agony_amount) + apply_damage(agony_amount, HALLOSS, def_zone, 0, used_weapon) + apply_effect(STUTTER, agony_amount/10) + apply_effect(EYE_BLUR, agony_amount/10) + +/mob/living/proc/electrocute_act(var/shock_damage, var/obj/source, var/siemens_coeff = 1.0) + return 0 //only carbon liveforms have this proc + +/mob/living/emp_act(severity) + var/list/L = src.get_contents() + for(var/obj/O in L) + O.emp_act(severity) + ..() + //this proc handles being hit by a thrown atom /mob/living/hitby(atom/movable/AM as mob|obj,var/speed = 5)//Standardization and logging -Sieve if(istype(AM,/obj/)) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index a2b375d3be7..ff0c13c2fb7 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -53,6 +53,20 @@ var/list/ai_list = list() var/datum/trackable/track = null var/last_announcement = "" +proc/add_ai_verbs(var/mob/M) + M.verbs += /mob/living/silicon/ai/proc/ai_call_shuttle + M.verbs += /mob/living/silicon/ai/proc/ai_camera_track + M.verbs += /mob/living/silicon/ai/proc/ai_camera_list + M.verbs += /mob/living/silicon/ai/proc/ai_goto_location + M.verbs += /mob/living/silicon/ai/proc/ai_remove_location + M.verbs += /mob/living/silicon/ai/proc/ai_hologram_change + M.verbs += /mob/living/silicon/ai/proc/ai_network_change + M.verbs += /mob/living/silicon/ai/proc/ai_roster + M.verbs += /mob/living/silicon/ai/proc/ai_statuschange + M.verbs += /mob/living/silicon/ai/proc/ai_store_location + M.verbs += /mob/living/silicon/ai/proc/control_integrated_radio + M.verbs += /mob/living/silicon/ai/proc/toggle_camera_light + /mob/living/silicon/ai/New(loc, var/datum/ai_laws/L, var/obj/item/device/mmi/B, var/safety = 0) var/list/possibleNames = ai_names @@ -91,12 +105,10 @@ var/list/ai_list = list() aiMulti = new(src) aiRadio = new(src) aiRadio.myAi = src + aiCamera = new/obj/item/device/camera/siliconcam/ai_camera(src) if (istype(loc, /turf)) - verbs.Add(/mob/living/silicon/ai/proc/ai_call_shuttle,/mob/living/silicon/ai/proc/ai_camera_track, \ - /mob/living/silicon/ai/proc/ai_camera_list, /mob/living/silicon/ai/proc/ai_network_change, \ - /mob/living/silicon/ai/proc/ai_statuschange, /mob/living/silicon/ai/proc/ai_hologram_change, \ - /mob/living/silicon/ai/proc/toggle_camera_light, /mob/living/silicon/ai/proc/control_integrateed_radio) + add_ai_verbs(src) //Languages add_language("Sol Common", 0) @@ -749,11 +761,11 @@ var/list/ai_list = list() else return ..() -/mob/living/silicon/ai/proc/control_integrateed_radio() +/mob/living/silicon/ai/proc/control_integrated_radio() set name = "Radio Settings" set desc = "Allows you to change settings of your radio." set category = "AI Commands" src << "Accessing Subspace Transceiver control..." if (src.aiRadio) - src.aiRadio.interact(src) + src.aiRadio.interact(src) diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm index 0ab4e42028d..272c3a11847 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone.dm @@ -61,6 +61,13 @@ flavor_text = "It's a tiny little repair drone. The casing is stamped with an NT logo and the subscript: 'NanoTrasen Recursive Repair Systems: Fixing Tomorrow's Problem, Today!'" updateicon() +/mob/living/silicon/robot/drone/init() + laws = new /datum/ai_laws/drone() + connected_ai = null + + aiCamera = new/obj/item/device/camera/siliconcam/drone_camera(src) + playsound(src.loc, 'sound/machines/twobeep.ogg', 50, 0) + //Redefining some robot procs... /mob/living/silicon/robot/drone/updatename() real_name = "maintenance drone ([rand(100,999)])" diff --git a/code/modules/mob/living/silicon/robot/laws.dm b/code/modules/mob/living/silicon/robot/laws.dm index bff875a0d66..2d6a12e9664 100644 --- a/code/modules/mob/living/silicon/robot/laws.dm +++ b/code/modules/mob/living/silicon/robot/laws.dm @@ -18,6 +18,7 @@ else lawsync() + photosync() src << "Laws synced with AI, be sure to note any changes." if(mind && mind.special_role == "traitor" && mind.original == src) src << "Remember, your AI does NOT share or know about your law 0." diff --git a/code/modules/mob/living/silicon/robot/photos.dm b/code/modules/mob/living/silicon/robot/photos.dm new file mode 100644 index 00000000000..fbcc3bf4842 --- /dev/null +++ b/code/modules/mob/living/silicon/robot/photos.dm @@ -0,0 +1,13 @@ +/mob/living/silicon/robot/proc/photosync() + var/obj/item/device/camera/siliconcam/master_cam = connected_ai ? connected_ai.aiCamera : null + if (!master_cam) + return + + var/synced + synced = 0 + for(var/datum/picture/z in aiCamera.aipictures) + if (!(master_cam.aipictures.Find(z))) + aiCamera.printpicture(null, z) + synced = 1 + if(synced) + src << "Locally saved images synced with AI. Images were retained in local database in case of loss of connection with the AI." diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 273df70dd95..71706360062 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -88,18 +88,7 @@ hands.icon_state = "standard" icon_state = "secborg" modtype = "Security" - else if(istype(src,/mob/living/silicon/robot/drone)) - laws = new /datum/ai_laws/drone() - connected_ai = null - else - laws = new /datum/ai_laws/nanotrasen() - connected_ai = select_active_ai_with_fewest_borgs() - if(connected_ai) - connected_ai.connected_robots += src - lawsync() - lawupdate = 1 - else - lawupdate = 0 + init() radio = new /obj/item/device/radio/borg(src) if(!scrambledcodes && !camera) @@ -138,11 +127,19 @@ hud_list[IMPTRACK_HUD] = image('icons/mob/hud.dmi', src, "hudblank") hud_list[SPECIALROLE_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - - if(istype(src,/mob/living/silicon/robot/drone)) - playsound(src.loc, 'sound/machines/twobeep.ogg', 50, 0) +/mob/living/silicon/robot/proc/init() + aiCamera = new/obj/item/device/camera/siliconcam/robot_camera(src) + laws = new /datum/ai_laws/nanotrasen() + connected_ai = select_active_ai_with_fewest_borgs() + if(connected_ai) + connected_ai.connected_robots += src + lawsync() + photosync() + lawupdate = 1 else - playsound(loc, 'sound/voice/liveagain.ogg', 75, 1) + lawupdate = 0 + + playsound(loc, 'sound/voice/liveagain.ogg', 75, 1) // setup the PDA and its name /mob/living/silicon/robot/proc/setup_PDA() @@ -345,7 +342,7 @@ // this verb lets cyborgs see the stations manifest /mob/living/silicon/robot/verb/cmd_station_manifest() set category = "Robot Commands" - set name = "Show Station Manifest" + set name = "Show Crew Manifest" show_station_manifest() diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 256a9e50918..dbfe037455c 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -239,7 +239,7 @@ src.modules += new /obj/item/device/flash(src) src.modules += new /obj/item/borg/sight/hud/sec(src) src.modules += new /obj/item/weapon/handcuffs/cyborg(src) - src.modules += new /obj/item/weapon/melee/baton/loaded(src) + src.modules += new /obj/item/weapon/melee/baton/robot(src) src.modules += new /obj/item/weapon/gun/energy/taser/cyborg(src) src.modules += new /obj/item/taperoll/police(src) src.emag = new /obj/item/weapon/gun/energy/laser/cyborg(src) diff --git a/code/modules/mob/living/silicon/robot/wires.dm b/code/modules/mob/living/silicon/robot/wires.dm index 10b6832fe4b..9ed4320c844 100644 --- a/code/modules/mob/living/silicon/robot/wires.dm +++ b/code/modules/mob/living/silicon/robot/wires.dm @@ -74,6 +74,7 @@ if(BORG_WIRE_LAWCHECK) //Forces a law update if the borg is set to receive them. Since an update would happen when the borg checks its laws anyway, not much use, but eh if (src.lawupdate) src.lawsync() + src.photosync() if (BORG_WIRE_AI_CONTROL) //pulse the AI wire to make the borg reselect an AI if(!src.emagged) diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 99adb65ed00..b08345ff5ed 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -13,6 +13,8 @@ var/speak_exclamation = "declares" var/speak_query = "queries" + var/obj/item/device/camera/siliconcam/aiCamera = null //photography + /mob/living/silicon/proc/show_laws() return @@ -32,6 +34,9 @@ src << "\red Warning: Electromagnetic pulse detected." ..() +/mob/living/silicon/stun_effect_act(var/stun_amount, var/agony_amount) + return //immune + /mob/living/silicon/proc/damage_mob(var/brute = 0, var/fire = 0, var/tox = 0) return diff --git a/code/modules/mob/living/simple_animal/borer.dm b/code/modules/mob/living/simple_animal/borer.dm index 0d15aeab543..7ffd57e96a2 100644 --- a/code/modules/mob/living/simple_animal/borer.dm +++ b/code/modules/mob/living/simple_animal/borer.dm @@ -1,6 +1,9 @@ +/datum/game_mode/var/list/borers = list() + /mob/living/captive_brain name = "host brain" real_name = "host brain" + universal_understand = 1 /mob/living/captive_brain/say(var/message) @@ -45,6 +48,8 @@ friendly = "prods" wander = 0 pass_flags = PASSTABLE + universal_understand = 1 + holder_type = /obj/item/weapon/holder/borer var/used_dominate var/chemicals = 10 // Chemicals used for reproduction and spitting neurotoxin. @@ -53,6 +58,11 @@ var/mob/living/captive_brain/host_brain // Used for swapping control of the body back and forth. var/controlling // Used in human death check. var/docile = 0 // Sugar can stop borers from acting. + var/has_reproduced + var/roundstart + +/mob/living/simple_animal/borer/roundstart + roundstart = 1 /mob/living/simple_animal/borer/Life() @@ -96,9 +106,7 @@ ..() truename = "[pick("Primary","Secondary","Tertiary","Quaternary")] [rand(1000,9999)]" host_brain = new/mob/living/captive_brain(src) - - request_player() - + if(!roundstart) request_player() /mob/living/simple_animal/borer/say(var/message) @@ -338,7 +346,7 @@ detatch() -mob/living/simple_animal/borer/proc/detatch() +/mob/living/simple_animal/borer/proc/detatch() if(!host) return @@ -530,7 +538,7 @@ mob/living/simple_animal/borer/proc/detatch() src << text("\blue You have stopped hiding.") //Procs for grabbing players. -mob/living/simple_animal/borer/proc/request_player() +/mob/living/simple_animal/borer/proc/request_player() for(var/mob/dead/observer/O in player_list) if(jobban_isbanned(O, "Syndicate")) continue @@ -538,7 +546,7 @@ mob/living/simple_animal/borer/proc/request_player() if(O.client.prefs.be_special & BE_ALIEN) question(O.client) -mob/living/simple_animal/borer/proc/question(var/client/C) +/mob/living/simple_animal/borer/proc/question(var/client/C) spawn(0) if(!C) return var/response = alert(C, "A cortical borer needs a player. Are you interested?", "Cortical borer request", "Yes", "No", "Never for this round") @@ -549,7 +557,7 @@ mob/living/simple_animal/borer/proc/question(var/client/C) else if (response == "Never for this round") C.prefs.be_special ^= BE_ALIEN -mob/living/simple_animal/borer/proc/transfer_personality(var/client/candidate) +/mob/living/simple_animal/borer/proc/transfer_personality(var/client/candidate) if(!candidate) return @@ -558,3 +566,4 @@ mob/living/simple_animal/borer/proc/transfer_personality(var/client/candidate) src.ckey = candidate.ckey if(src.mind) src.mind.assigned_role = "Cortical Borer" + src.mind.special_role = "Cortical Borer" \ No newline at end of file diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index a8210acfd96..388f2bf7a4b 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -129,17 +129,6 @@ proc/hasorgans(A) zone = "head" if("mouth") zone = "head" -/* if("l_hand") - zone = "l_arm" - if("r_hand") - zone = "r_arm" - if("l_foot") - zone = "l_leg" - if("r_foot") - zone = "r_leg" - if("groin") - zone = "chest" -*/ return zone // Returns zone with a certain probability. diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 0f18e02cf38..3338989ebe3 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -436,7 +436,7 @@ proc/ViewManifest() var/dat = "" - dat += "

Crew Manifest

" + dat += "

Show Crew Manifest

" dat += data_core.get_manifest(OOC = 1) src << browse(dat, "window=manifest;size=370x420;can_close=1") diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index 6dbd8ffe0c7..7a6d7140d17 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -120,17 +120,7 @@ O.show_laws() O << "These laws may be changed by other players, or by you being the traitor." - O.verbs += /mob/living/silicon/ai/proc/ai_call_shuttle - O.verbs += /mob/living/silicon/ai/proc/show_laws_verb - O.verbs += /mob/living/silicon/ai/proc/ai_camera_track - O.verbs += /mob/living/silicon/ai/proc/ai_alerts - O.verbs += /mob/living/silicon/ai/proc/ai_camera_list - O.verbs += /mob/living/silicon/ai/proc/ai_statuschange - O.verbs += /mob/living/silicon/ai/proc/ai_roster - O.verbs += /mob/living/silicon/ai/proc/ai_store_location - O.verbs += /mob/living/silicon/ai/proc/ai_goto_location - O.verbs += /mob/living/silicon/ai/proc/ai_remove_location - + add_ai_verbs(O) O.job = "AI" O.rename_self("ai",1) diff --git a/code/modules/organs/organ_internal.dm b/code/modules/organs/organ_internal.dm index 4ad6e328afa..4ed10047564 100644 --- a/code/modules/organs/organ_internal.dm +++ b/code/modules/organs/organ_internal.dm @@ -159,9 +159,9 @@ src.damage += 0.2 * process_accuracy //Damaged one shares the fun else - var/victim = pick(owner.internal_organs) - var/datum/organ/internal/O = owner.internal_organs[victim] - O.damage += 0.2 * process_accuracy + var/datum/organ/internal/O = pick(owner.internal_organs) + if(O) + O.damage += 0.2 * process_accuracy //Detox can heal small amounts of damage if (src.damage && src.damage < src.min_bruised_damage && owner.reagents.has_reagent("anti_toxin")) diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index 7f006325e6c..6963fe2f75b 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -34,6 +34,8 @@ dat += "+

" else if(toner) dat += "Please insert paper to copy.

" + 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!" @@ -112,6 +114,27 @@ if(copies < maxcopies) copies++ updateUsrDialog() + else if(href_list["aipic"]) + if(!istype(usr,/mob/living/silicon)) return + if(toner >= 5) + var/mob/living/silicon/tempAI = usr + var/obj/item/device/camera/siliconcam/camera = tempAI.aiCamera + + if(!camera) + return + var/datum/picture/selection = camera.selectpicture() + if (!selection) + return + + var/obj/item/weapon/photo/p = new /obj/item/weapon/photo (src.loc) + p.construct(selection) + if (p.desc == "") + p.desc += "Copied by [tempAI.name]" + else + p.desc += " - Copied by [tempAI.name]" + toner -= 5 + sleep(15) + updateUsrDialog() attackby(obj/item/O as obj, mob/user as mob) if(istype(O, /obj/item/weapon/paper)) diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index f0d39337b6f..fe2326c21b0 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -53,10 +53,10 @@ /obj/item/weapon/photo/proc/show(mob/user as mob) user << browse_rsc(img, "tmp_photo.png") user << browse("[name]" \ - + "" \ - + "
Written on the back:
[scribble]" : ]"\ - + "", "window=book;size=200x[scribble ? 400 : 200]") + + "" \ + + "" \ + + "[scribble ? "
Written on the back:
[scribble]" : ""]"\ + + "", "window=book;size=192x[scribble ? 400 : 192]") onclose(user, "[name]") return @@ -152,41 +152,51 @@ ..() -/obj/item/device/camera/proc/get_icon(turf/the_turf as turf) +/obj/item/device/camera/proc/get_icon(list/turfs, turf/center) + //Bigger icon base to capture those icons that were shifted to the next tile //i.e. pretty much all wall-mounted machinery var/icon/res = icon('icons/effects/96x96.dmi', "") - - var/icon/turficon = build_composite_icon(the_turf) - res.Blend(turficon, ICON_OVERLAY, 33, 33) + // Initialize the photograph to black. + res.Blend("#000", ICON_OVERLAY) var/atoms[] = list() - for(var/atom/A in the_turf) - if(A.invisibility) continue - atoms.Add(A) + for(var/turf/the_turf in turfs) + // Add outselves to the list of stuff to draw + atoms.Add(the_turf); + // As well as anything that isn't invisible. + for(var/atom/A in the_turf) + if(A.invisibility) continue + atoms.Add(A) - //Sorting icons based on levels - var/gap = atoms.len - var/swapped = 1 - while (gap > 1 || swapped) - swapped = 0 - if(gap > 1) - gap = round(gap / 1.247330950103979) - if(gap < 1) - gap = 1 - for(var/i = 1; gap + i <= atoms.len; i++) - var/atom/l = atoms[i] //Fucking hate - var/atom/r = atoms[gap+i] //how lists work here - if(l.layer > r.layer) //no "atoms[i].layer" for me - atoms.Swap(i, gap + i) - swapped = 1 + // Sort the atoms into their layers + var/list/sorted = sort_atoms_by_layer(atoms) - for(var/i; i <= atoms.len; i++) - var/atom/A = atoms[i] + for(var/i; i <= sorted.len; i++) + var/atom/A = sorted[i] if(A) - var/icon/img = getFlatIcon(A, A.dir)//build_composite_icon(A) + var/icon/img = getFlatIcon(A)//build_composite_icon(A) + + // If what we got back is actually a picture, draw it. if(istype(img, /icon)) - res.Blend(new/icon(img, "", A.dir), ICON_OVERLAY, 33 + A.pixel_x, 33 + A.pixel_y) + // Check if we're looking at a mob that's lying down + if(istype(A, /mob/living) && A:lying) + // If they are, apply that effect to their picture. + img.BecomeLying() + // Calculate where we are relative to the center of the photo + var/xoff = (A.x - center.x) * 32 + var/yoff = (A.y - center.y) * 32 + if (istype(A,/atom/movable)) + xoff+=A:step_x + yoff+=A:step_y + res.Blend(img, blendMode2iconMode(A.blend_mode), 33 + A.pixel_x + xoff, 33 + A.pixel_y + yoff) + + // Lastly, render any contained effects on top. + for(var/turf/the_turf in turfs) + // Calculate where we are relative to the center of the photo + var/xoff = (the_turf.x - center.x) * 32 + var/yoff = (the_turf.y - center.y) * 32 + res.Blend(getFlatIcon(the_turf.loc), blendMode2iconMode(the_turf.blend_mode),33 + xoff,33 + yoff) return res @@ -209,53 +219,10 @@ mob_detail += "You can also see [A] on the photo[A:health < 75 ? " - [A] looks hurt":""].[holding ? " [holding]":"."]." return mob_detail - /obj/item/device/camera/afterattack(atom/target as mob|obj|turf|area, mob/user as mob, flag) if(!on || !pictures_left || ismob(target.loc)) return + captureimage(target, user, flag) - var/x_c = target.x - 1 - var/y_c = target.y + 1 - var/z_c = target.z - - var/icon/temp = icon('icons/effects/96x96.dmi',"") - var/icon/black = icon('icons/turf/space.dmi', "black") - var/mobs = "" - for(var/i = 1; i <= 3; i++) - for(var/j = 1; j <= 3; j++) - var/turf/T = locate(x_c, y_c, z_c) - var/mob/dummy = new(T) //Go go visibility check dummy - var/viewer = user - if(user.client) //To make shooting through security cameras possible - viewer = user.client.eye - if(dummy in viewers(world.view, viewer)) - temp.Blend(get_icon(T), ICON_OVERLAY, 32 * (j-1-1), 32 - 32 * (i-1)) - else - temp.Blend(black, ICON_OVERLAY, 32 * (j-1), 64 - 32 * (i-1)) - mobs += get_mobs(T) - dummy.loc = null - dummy = null //Alas, nameless creature //garbage collect it instead - x_c++ - y_c-- - x_c = x_c - 3 - - var/obj/item/weapon/photo/P = new/obj/item/weapon/photo() - P.loc = user.loc - if(!user.get_inactive_hand()) - user.put_in_inactive_hand(P) - var/icon/small_img = icon(temp) - var/icon/tiny_img = icon(temp) - var/icon/ic = icon('icons/obj/items.dmi',"photo") - var/icon/pc = icon('icons/obj/bureaucracy.dmi', "photo") - small_img.Scale(8, 8) - tiny_img.Scale(4, 4) - ic.Blend(small_img,ICON_OVERLAY, 10, 13) - pc.Blend(tiny_img,ICON_OVERLAY, 12, 19) - P.icon = ic - P.tiny = pc - P.img = temp - P.desc = mobs - P.pixel_x = rand(-10, 10) - P.pixel_y = rand(-10, 10) playsound(loc, pick('sound/items/polaroid1.ogg', 'sound/items/polaroid2.ogg'), 75, 1, -3) pictures_left-- @@ -265,4 +232,74 @@ on = 0 spawn(64) icon_state = icon_on - on = 1 \ No newline at end of file + on = 1 + +/obj/item/device/camera/proc/can_capture_turf(turf/T, mob/user) + var/mob/dummy = new(T) //Go go visibility check dummy + var/viewer = user + if(user.client) //To make shooting through security cameras possible + viewer = user.client.eye + var/can_see = (dummy in viewers(world.view, viewer)) != null + + dummy.loc = null + dummy = null //Alas, nameless creature //garbage collect it instead + return can_see + +/obj/item/device/camera/proc/captureimage(atom/target, mob/user, flag) + var/x_c = target.x - 1 + var/y_c = target.y + 1 + var/z_c = target.z + + + var/list/turfs = list() + var/mobs = "" + for(var/i = 1; i <= 3; i++) + for(var/j = 1; j <= 3; j++) + var/turf/T = locate(x_c, y_c, z_c) + if(can_capture_turf(T, user)) + turfs.Add(T) + mobs += get_mobs(T) + x_c++ + y_c-- + x_c = x_c - 3 + + var/datum/picture/P = createpicture(target, user, turfs, mobs, flag) + printpicture(user, P) + +/obj/item/device/camera/proc/createpicture(atom/target, mob/user, list/turfs, mobs, flag) + var/icon/photoimage = get_icon(turfs, target) + + var/icon/small_img = icon(photoimage) + var/icon/tiny_img = icon(photoimage) + var/icon/ic = icon('icons/obj/items.dmi',"photo") + var/icon/pc = icon('icons/obj/bureaucracy.dmi', "photo") + small_img.Scale(8, 8) + tiny_img.Scale(4, 4) + ic.Blend(small_img,ICON_OVERLAY, 10, 13) + pc.Blend(tiny_img,ICON_OVERLAY, 12, 19) + + var/datum/picture/P = new() + P.fields["author"] = user + P.fields["icon"] = ic + P.fields["tiny"] = pc + P.fields["img"] = photoimage + P.fields["desc"] = mobs + P.fields["pixel_x"] = rand(-10, 10) + P.fields["pixel_y"] = rand(-10, 10) + + return P + +/obj/item/device/camera/proc/printpicture(mob/user, var/datum/picture/P) + var/obj/item/weapon/photo/Photo = new/obj/item/weapon/photo() + Photo.loc = user.loc + if(!user.get_inactive_hand()) + user.put_in_inactive_hand(Photo) + Photo.construct(P) + +/obj/item/weapon/photo/proc/construct(var/datum/picture/P) + icon = P.fields["icon"] + tiny = P.fields["tiny"] + img = P.fields["img"] + desc = P.fields["desc"] + pixel_x = P.fields["pixel_x"] + pixel_y = P.fields["pixel_y"] diff --git a/code/modules/paperwork/silicon_photography.dm b/code/modules/paperwork/silicon_photography.dm new file mode 100644 index 00000000000..4fbe953d729 --- /dev/null +++ b/code/modules/paperwork/silicon_photography.dm @@ -0,0 +1,162 @@ +/************** +* AI-specific * +**************/ +/datum/picture + var/name = "image" + var/list/fields = list() + +/obj/item/device/camera/siliconcam + var/in_camera_mode = 0 + var/photos_taken = 0 + var/list/aipictures = list() + +/obj/item/device/camera/siliconcam/ai_camera //camera AI can take pictures with + name = "AI photo camera" + +/obj/item/device/camera/siliconcam/robot_camera //camera cyborgs can take pictures with + name = "Cyborg photo camera" + +/obj/item/device/camera/siliconcam/drone_camera //currently doesn't offer the verbs, thus cannot be used + name = "Drone photo camera" + +/obj/item/device/camera/siliconcam/proc/injectaialbum(var/datum/picture/P, var/sufix = "") //stores image information to a list similar to that of the datacore + photos_taken++ + P.fields["name"] = "Image [photos_taken][sufix]" + aipictures += P + +/obj/item/device/camera/siliconcam/proc/injectmasteralbum(var/datum/picture/P) //stores image information to a list similar to that of the datacore + var/mob/living/silicon/robot/C = src.loc + if(C.connected_ai) + var/mob/A = P.fields["author"] + C.connected_ai.aiCamera.injectaialbum(P, " (taken by [A.name])") + C.connected_ai << "Image recorded and saved by [name]" + usr << "Image recorded and saved to remote database" //feedback to the Cyborg player that the picture was taken + else + injectaialbum(P) + usr << "Image recorded" + +/obj/item/device/camera/siliconcam/proc/selectpicture(obj/item/device/camera/siliconcam/cam) + if(!cam) + cam = getsource() + + var/list/nametemp = list() + var/find + if(cam.aipictures.len == 0) + usr << "No images saved" + return + for(var/datum/picture/t in cam.aipictures) + nametemp += t.fields["name"] + find = input("Select image (numbered in order taken)") in nametemp + + for(var/datum/picture/q in cam.aipictures) + if(q.fields["name"] == find) + return q + +/obj/item/device/camera/siliconcam/proc/viewpictures() + var/datum/picture/selection = selectpicture() + + if(!selection) + return + + var/obj/item/weapon/photo/P = new/obj/item/weapon/photo() + P.construct(selection) + P.show(usr) + usr << P.desc + + // TG uses a special garbage collector.. qdel(P) + del(P) //so 10 thousand pictures items are not left in memory should an AI take them and then view them all. + +/obj/item/device/camera/siliconcam/proc/deletepicture(obj/item/device/camera/siliconcam/cam) + var/datum/picture/selection = selectpicture(cam) + + if(!selection) + return + + cam.aipictures -= selection + usr << "Image deleted" + +/obj/item/device/camera/siliconcam/ai_camera/can_capture_turf(turf/T, mob/user) + var/mob/living/silicon/ai = user + return ai.TurfAdjacent(T) + +/obj/item/device/camera/siliconcam/proc/toggle_camera_mode() + if(in_camera_mode) + camera_mode_off() + else + camera_mode_on() + +/obj/item/device/camera/siliconcam/proc/camera_mode_off() + src.in_camera_mode = 0 + usr << "Camera Mode deactivated" + +/obj/item/device/camera/siliconcam/proc/camera_mode_on() + src.in_camera_mode = 1 + usr << "Camera Mode activated" + +/obj/item/device/camera/siliconcam/ai_camera/printpicture(mob/user, datum/picture/P) + injectaialbum(P) + usr << "Image recorded" + +/obj/item/device/camera/siliconcam/robot_camera/printpicture(mob/user, datum/picture/P) + injectmasteralbum(P) + +/obj/item/device/camera/siliconcam/ai_camera/verb/take_image() + set category = "AI Commands" + set name = "Take Image" + set desc = "Takes an image" + set src in usr + + toggle_camera_mode() + +/obj/item/device/camera/siliconcam/ai_camera/verb/view_images() + set category = "AI Commands" + set name = "View Images" + set desc = "View images" + set src in usr + + viewpictures() + +/obj/item/device/camera/siliconcam/ai_camera/verb/delete_images() + set category = "AI Commands" + set name = "Delete Image" + set desc = "Delete image" + set src in usr + + deletepicture() + +/obj/item/device/camera/siliconcam/robot_camera/verb/take_image() + set category ="Robot Commands" + set name = "Take Image" + set desc = "Takes an image" + set src in usr + + toggle_camera_mode() + +/obj/item/device/camera/siliconcam/robot_camera/verb/view_images() + set category ="Robot Commands" + set name = "View Images" + set desc = "View images" + set src in usr + + viewpictures() + +/obj/item/device/camera/siliconcam/robot_camera/verb/delete_images() + set category = "Robot Commands" + set name = "Delete Image" + set desc = "Delete a local image" + set src in usr + + // Explicitly only allow deletion from the local camera + deletepicture(src) + +obj/item/device/camera/siliconcam/proc/getsource() + if(istype(src.loc, /mob/living/silicon/ai)) + return src + + var/mob/living/silicon/robot/C = src.loc + var/obj/item/device/camera/siliconcam/Cinfo + if(C.connected_ai) + Cinfo = C.connected_ai.aiCamera + else + Cinfo = src + return Cinfo diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 36dc8522d6b..2992b4c2749 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -91,42 +91,51 @@ obj/item/weapon/gun/energy/staff var/charge_tick = 0 var/mode = 0 //0 = mutate, 1 = yield boost - New() - ..() - processing_objects.Add(src) +/obj/item/weapon/gun/energy/floragun/New() + ..() + processing_objects.Add(src) +/obj/item/weapon/gun/energy/floragun/Del() + processing_objects.Remove(src) + ..() - Del() - processing_objects.Remove(src) - ..() +/obj/item/weapon/gun/energy/floragun/process() + charge_tick++ + if(charge_tick < 4) return 0 + charge_tick = 0 + if(!power_supply) return 0 + power_supply.give(100) + update_icon() + return 1 +/obj/item/weapon/gun/energy/floragun/attack_self(mob/living/user as mob) + switch(mode) + if(0) + mode = 1 + charge_cost = 100 + user << "\red The [src.name] is now set to increase yield." + projectile_type = "/obj/item/projectile/energy/florayield" + modifystate = "florayield" + if(1) + mode = 0 + charge_cost = 100 + user << "\red The [src.name] is now set to induce mutations." + projectile_type = "/obj/item/projectile/energy/floramut" + modifystate = "floramut" + update_icon() + return - process() - charge_tick++ - if(charge_tick < 4) return 0 - charge_tick = 0 - if(!power_supply) return 0 - power_supply.give(100) - update_icon() - return 1 +/obj/item/weapon/gun/energy/floragun/afterattack(obj/target, mob/user, flag) - attack_self(mob/living/user as mob) - switch(mode) - if(0) - mode = 1 - charge_cost = 100 - user << "\red The [src.name] is now set to increase yield." - projectile_type = "/obj/item/projectile/energy/florayield" - modifystate = "florayield" - if(1) - mode = 0 - charge_cost = 100 - user << "\red The [src.name] is now set to induce mutations." - projectile_type = "/obj/item/projectile/energy/floramut" - modifystate = "floramut" - update_icon() + if(flag && istype(target,/obj/machinery/portable_atmospherics/hydroponics)) + var/obj/machinery/portable_atmospherics/hydroponics/tray = target + if(load_into_chamber()) + user.visible_message("\red \The [user] fires \the [src] into \the [tray]!") + Fire(target,user) return + ..() + /obj/item/weapon/gun/energy/meteorgun name = "meteor gun" desc = "For the love of god, make sure you're aiming this the right way!" @@ -224,7 +233,7 @@ obj/item/weapon/gun/energy/staff/focus /* -This is called from +This is called from modules/mob/mob_movement.dm if you move you will be zoomed out modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out. */ diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index fe4b9f26a5a..3740aca7c27 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -1734,6 +1734,27 @@ datum ..() return + //Reagents used for plant fertilizers. + toxin/fertilizer + name = "fertilizer" + id = "fertilizer" + description = "A chemical mix good for growing plants with." + reagent_state = LIQUID + toxpwr = 0.2 //It's not THAT poisonous. + color = "#664330" // rgb: 102, 67, 48 + + toxin/fertilizer/eznutrient + name = "EZ Nutrient" + id = "eznutrient" + + toxin/fertilizer/left4zed + name = "Left-4-Zed" + id = "left4zed" + + toxin/fertilizer/robustharvest + name = "Robust Harvest" + id = "robustharvest" + toxin/plantbgone name = "Plant-B-Gone" id = "plantbgone" diff --git a/code/modules/reagents/reagent_containers/food/drinks.dm b/code/modules/reagents/reagent_containers/food/drinks.dm index 1a0fba64268..8f1f68698e3 100644 --- a/code/modules/reagents/reagent_containers/food/drinks.dm +++ b/code/modules/reagents/reagent_containers/food/drinks.dm @@ -34,7 +34,7 @@ H << "\red You have a monitor for a head, where do you think you're going to put that?" return - M << "\blue You swallow a gulp of [src]." + M << "\blue You swallow a gulp from \the [src]." if(reagents.total_volume) reagents.trans_to_ingest(M, gulp_size) diff --git a/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm b/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm index c2bb90ddb80..454badcf195 100644 --- a/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm +++ b/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm @@ -71,7 +71,7 @@ center_of_mass = list("x"=16, "y"=10) if("tomatojuice") icon_state = "glass_red" - name = "Glass of Tomato juf" + name = "Glass of Tomato juice" desc = "Are you sure this is tomato juice?" center_of_mass = list("x"=16, "y"=10) if("blood") diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index 020573d8c5b..c141a757e7d 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -40,7 +40,6 @@ /obj/machinery/sleeper, /obj/machinery/smartfridge/, /obj/machinery/biogenerator, - /obj/machinery/portable_atmospherics/hydroponics, /obj/machinery/constructable_frame) New() @@ -108,6 +107,7 @@ user << "\blue You fill [src] with [trans] units of the contents of [target]." else if(target.is_open_container() && target.reagents) //Something like a glass. Player probably wants to transfer TO it. + if(!reagents.total_volume) user << "\red [src] is empty." return diff --git a/code/modules/vehicles/cargo_train.dm b/code/modules/vehicles/cargo_train.dm index d38830e5e82..11d0c53fb8e 100644 --- a/code/modules/vehicles/cargo_train.dm +++ b/code/modules/vehicles/cargo_train.dm @@ -10,7 +10,7 @@ standing_mob = 1 load_item_visible = 1 load_offset_x = 0 - load_offset_y = 8 + load_offset_y = 7 var/car_limit = 3 //how many cars an engine can pull before performance degrades active_engines = 1 @@ -34,7 +34,7 @@ standing_mob = 1 load_item_visible = 1 load_offset_x = 0 - load_offset_y = 5 + load_offset_y = 4 //------------------------------------------- // Standard procs @@ -43,7 +43,10 @@ ..() cell = new /obj/item/weapon/cell/high verbs -= /atom/movable/verb/pull + verbs -= /obj/vehicle/train/cargo/engine/verb/stop_engine key = new() + var/image/I = new(icon = 'icons/obj/vehicles.dmi', icon_state = "cargo_engine_overlay", layer = src.layer + 0.2) //over mobs + overlays += I /obj/vehicle/train/cargo/engine/Move() if(on && cell.charge < power_use) @@ -68,8 +71,8 @@ if(istype(W, /obj/item/weapon/key/cargo_train)) if(!key) user.drop_item() + W.forceMove(src) key = W - W.loc = src verbs += /obj/vehicle/train/cargo/engine/verb/remove_key return ..() @@ -95,7 +98,7 @@ var/obj/machinery/door/D = Obstacle var/mob/living/carbon/human/H = load if(istype(D) && istype(H)) - D.Bumped(H) //a little hacky, but hey, it works, and repects access rights + D.Bumped(H) //a little hacky, but hey, it works, and respects access rights ..() @@ -192,6 +195,8 @@ turn_on() if (on) usr << "You start [src]'s engine." + verbs += /obj/vehicle/train/cargo/engine/verb/stop_engine + verbs -= /obj/vehicle/train/cargo/engine/verb/start_engine else if(cell.charge < power_use) usr << "[src] is out of power." @@ -213,6 +218,8 @@ turn_off() if (!on) usr << "You stop [src]'s engine." + verbs -= /obj/vehicle/train/cargo/engine/verb/stop_engine + verbs += /obj/vehicle/train/cargo/engine/verb/start_engine /obj/vehicle/train/cargo/engine/verb/remove_key() set name = "Remove key" @@ -241,16 +248,19 @@ /obj/vehicle/train/cargo/trolley/load(var/atom/movable/C) if(ismob(C) && !passenger_allowed) return 0 - if(!istype(C,/obj/machinery) && !istype(C,/obj/structure/closet) && !istype(C,/obj/structure/largecrate) && !istype(C,/obj/structure/reagent_dispensers) && !istype(C,/obj/structure/ore_box) && !ismob(C)) + if(!istype(C,/obj/machinery) && !istype(C,/obj/structure/closet) && !istype(C,/obj/structure/largecrate) && !istype(C,/obj/structure/reagent_dispensers) && !istype(C,/obj/structure/ore_box) && !istype(C, /mob/living/carbon/human)) return 0 ..() if(istype(load, /mob/living/carbon/human)) load.pixel_y += 4 + + if(load) + return 1 /obj/vehicle/train/cargo/engine/load(var/atom/movable/C) - if(!ismob(C)) + if(!istype(C, /mob/living/carbon/human)) return 0 return ..() diff --git a/code/modules/vehicles/train.dm b/code/modules/vehicles/train.dm index b7a6706deae..d29933b5ed8 100644 --- a/code/modules/vehicles/train.dm +++ b/code/modules/vehicles/train.dm @@ -68,8 +68,7 @@ if(user != load) if(user in src) //for handling players stuck in src - this shouldn't happen - but just in case it does - user.loc = T - contents -= user + user.forceMove(T) return 1 return 0 @@ -80,7 +79,7 @@ return 1 /obj/vehicle/train/MouseDrop_T(var/atom/movable/C, mob/user as mob) - if(user.buckled || user.stat || user.restrained() || !Adjacent(user) || !user.Adjacent(C)) + if(user.buckled || user.stat || user.restrained() || !Adjacent(user) || !user.Adjacent(C) || !istype(C)) return if(istype(C,/obj/vehicle/train)) latch(C, user) @@ -93,8 +92,7 @@ return 0 if(user != load && (user in src)) - user.loc = loc //for handling players stuck in src - contents -= user + user.forceMove(loc) //for handling players stuck in src else if(load) unload(user) //unload if loaded else if(!load && !user.buckled) diff --git a/code/modules/vehicles/vehicle.dm b/code/modules/vehicles/vehicle.dm index b44f38122eb..caec0c896ab 100644 --- a/code/modules/vehicles/vehicle.dm +++ b/code/modules/vehicles/vehicle.dm @@ -50,7 +50,7 @@ anchored = init_anc if(load) - load.loc = loc + load.forceMove(loc)// = loc load.dir = dir return 1 @@ -58,6 +58,8 @@ return 0 /obj/vehicle/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(istype(W, /obj/item/weapon/hand_labeler)) + return if(istype(W, /obj/item/weapon/screwdriver)) if(!locked) open = !open @@ -194,7 +196,7 @@ new /obj/item/weapon/cable_coil/cut(Tsec) if(cell) - cell.loc = Tsec + cell.forceMove(Tsec) cell.update_icon() cell = null @@ -232,8 +234,8 @@ return H.drop_from_inventory(C) + C.forceMove(src) cell = C - C.loc = null //this wont be GC'd since it's referrenced above powercheck() usr << "You install [C] in [src]." @@ -242,7 +244,8 @@ return usr << "You remove [cell] from [src]." - cell.loc = get_turf(H) + cell.forceMove(get_turf(H)) + H.put_in_hands(cell) cell = null powercheck() @@ -269,7 +272,7 @@ if(istype(crate)) crate.close() - C.loc = loc + C.forceMove(loc) C.dir = dir C.anchored = 1 @@ -308,7 +311,7 @@ var/list/options = new() for(var/test_dir in alldirs) var/new_dir = get_step_to(src, get_step(src, test_dir)) - if(new_dir) + if(new_dir && load.Adjacent(new_dir)) options += new_dir if(options.len) dest = pick(options) @@ -318,8 +321,7 @@ if(!isturf(dest)) //if there still is nowhere to unload, cancel out since the vehicle is probably in nullspace return 0 - - load.loc = dest + load.forceMove(dest) load.dir = get_dir(loc, dest) load.anchored = initial(load.anchored) load.pixel_x = initial(load.pixel_x) diff --git a/code/setup.dm b/code/setup.dm index 3cd5a1d811f..d149f37d8a6 100644 --- a/code/setup.dm +++ b/code/setup.dm @@ -270,21 +270,23 @@ var/MAX_EXPLOSION_RANGE = 14 // bitflags for clothing parts #define HEAD 1 -#define UPPER_TORSO 2 -#define LOWER_TORSO 4 -#define LEG_LEFT 8 -#define LEG_RIGHT 16 -#define LEGS 24 -#define FOOT_LEFT 32 -#define FOOT_RIGHT 64 -#define FEET 96 -#define ARM_LEFT 128 -#define ARM_RIGHT 256 -#define ARMS 384 -#define HAND_LEFT 512 -#define HAND_RIGHT 1024 -#define HANDS 1536 -#define FULL_BODY 2047 +#define FACE 2 +#define EYES 4 +#define UPPER_TORSO 8 +#define LOWER_TORSO 16 +#define LEG_LEFT 32 +#define LEG_RIGHT 64 +#define LEGS 96 +#define FOOT_LEFT 128 +#define FOOT_RIGHT 256 +#define FEET 384 +#define ARM_LEFT 512 +#define ARM_RIGHT 1024 +#define ARMS 1536 +#define HAND_LEFT 2048 +#define HAND_RIGHT 4096 +#define HANDS 6144 +#define FULL_BODY 8191 // bitflags for the percentual amount of protection a piece of clothing which covers the body part offers. // Used with human/proc/get_heat_protection() and human/proc/get_cold_protection() diff --git a/html/changelog.html b/html/changelog.html index 0b05b601276..0e303532918 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -113,6 +113,16 @@ should be listed in the changelog upon commit though. Thanks. --> +
+

26 July 2014

+

Whitellama updated:

+
    +
  • Added dynamic flavour text.
  • +
  • Fixed bug with suit fibers and fingerprints.
  • +
+
+ +

20 July 2014

PsiOmegaDelta updated:

diff --git a/icons/mob/animal.dmi b/icons/mob/animal.dmi index 0fb7e01d0d7..e9886ba8a0f 100644 Binary files a/icons/mob/animal.dmi and b/icons/mob/animal.dmi differ diff --git a/icons/mob/belt.dmi b/icons/mob/belt.dmi index d2b6ba4aef1..05e9655b8d8 100644 Binary files a/icons/mob/belt.dmi and b/icons/mob/belt.dmi differ diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index feafab49836..f36fb8f9b8e 100644 Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi index 9b8c463bab0..77021959a71 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 7f3ddc71439..32792a32119 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 311d8494de9..eb5a4a1d002 100644 Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index 901928b4145..2b408c6d94a 100644 Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi index 7506de201e0..3fd6c245f09 100644 Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi index c1a15d590a9..508e4818ef1 100644 Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ diff --git a/icons/obj/custom_items.dmi b/icons/obj/custom_items.dmi index 839fe059c82..37c4caa653c 100644 Binary files a/icons/obj/custom_items.dmi and b/icons/obj/custom_items.dmi differ diff --git a/icons/obj/gun.dmi b/icons/obj/gun.dmi index 9c552d76001..1e03bbe0b76 100644 Binary files a/icons/obj/gun.dmi and b/icons/obj/gun.dmi differ diff --git a/icons/obj/hydroponics.dmi b/icons/obj/hydroponics.dmi index a0d31db14c8..ba381b5bec4 100644 Binary files a/icons/obj/hydroponics.dmi and b/icons/obj/hydroponics.dmi differ diff --git a/icons/obj/objects.dmi b/icons/obj/objects.dmi index 8900043e3de..23d627a5f12 100644 Binary files a/icons/obj/objects.dmi and b/icons/obj/objects.dmi differ diff --git a/icons/obj/vehicles.dmi b/icons/obj/vehicles.dmi index de24172c3a9..e70275591fc 100644 Binary files a/icons/obj/vehicles.dmi and b/icons/obj/vehicles.dmi differ diff --git a/maps/tgstation2.dmm b/maps/tgstation2.dmm index 902b5218706..ff303128c42 100644 --- a/maps/tgstation2.dmm +++ b/maps/tgstation2.dmm @@ -211,7 +211,7 @@ "aec" = (/obj/machinery/door/window/brigdoor{dir = 1; req_access_txt = "63"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/lobby) "aed" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/glass_security{id_tag = "BrigWest"; layer = 2.8; name = "Brig"; req_access_txt = "63"},/turf/simulated/floor,/area/security/brig) "aee" = (/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},/obj/structure/cable,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/security/lobby) -"aef" = (/obj/structure/table/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/window/southright,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor,/area/security/lobby) +"aef" = (/obj/structure/table/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/door/window/southright{base_state = "left"; icon_state = "left"},/turf/simulated/floor,/area/security/lobby) "aeg" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Detective"; req_access_txt = "4"},/turf/simulated/floor,/area/security/detectives_office) "aeh" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/unary/vent_pump{dir = 2; icon_state = "map_vent_out"; on = 1},/turf/simulated/floor{icon_state = "redcorner"; dir = 4},/area/security/brig) "aei" = (/obj/structure/stool/bed,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/security/prison) @@ -1112,7 +1112,7 @@ "avt" = (/turf/simulated/floor/plating,/area/hallway/secondary/entry) "avu" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/hallway/secondary/entry) "avv" = (/obj/structure/flora/ausbushes/sparsegrass,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/grass,/area/hydroponics/garden) -"avw" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/obj/item/weapon/pen/blue{pixel_x = 2; pixel_y = 6},/obj/item/weapon/pen/blue{pixel_x = -3; pixel_y = 2},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/door/poddoor/shutters{id = "bar"; layer = 3.1; name = "Bar Shutters"},/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar) +"avw" = (/obj/machinery/portable_atmospherics/hydroponics/soil,/turf/simulated/floor/grass,/area/hydroponics/garden) "avx" = (/obj/structure/flora/bush,/turf/simulated/floor/grass,/area/hydroponics/garden) "avy" = (/turf/simulated/floor{icon_state = "green"; dir = 4},/area/hydroponics/garden) "avz" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor,/area/hallway/secondary/entry) @@ -1199,7 +1199,7 @@ "axc" = (/obj/machinery/light{dir = 1},/turf/simulated/floor{dir = 1; icon_state = "arrival"},/area/hallway/secondary/entry) "axd" = (/obj/structure/table/woodentable,/obj/machinery/recharger{pixel_y = 0},/turf/simulated/floor/wood,/area/library) "axe" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/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/camera{c_tag = "Auxiliary Tool Storage"; dir = 2},/turf/simulated/floor,/area/storage/tools) -"axf" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/obj/structure/table/reinforced,/obj/machinery/door/poddoor/shutters{id = "bar"; layer = 3.1; name = "Bar Shutters"},/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar) +"axf" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor{icon_state = "dark"},/area/hydroponics) "axg" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/auxsolarport) "axh" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; icon_state = "map_vent_out"; on = 1},/obj/structure/table,/obj/item/weapon/cable_coil/random,/obj/item/weapon/cable_coil/random,/turf/simulated/floor,/area/storage/art) "axi" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock East"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/hallway/primary/port) @@ -1221,7 +1221,7 @@ "axy" = (/obj/machinery/light{dir = 8},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor,/area/hallway/primary/central) "axz" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=CHW"; location = "Lockers"},/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/turf/simulated/floor,/area/hallway/primary/port) "axA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{desc = "\"This is a plaque in honour of our comrades on the G4407 Stations. Hopefully TG4407 model can live up to your fame and fortune.\" Scratched in beneath that is a crude image of a meteor and a spaceman. The spaceman is laughing. The meteor is exploding."; dir = 4; icon_state = "plaque"; name = "Comemmorative Plaque"; nitrogen = 30; oxygen = 70; temperature = 80},/area/hallway/secondary/entry) -"axB" = (/obj/machinery/portable_atmospherics/hydroponics/soil,/turf/simulated/floor/grass,/area/hydroponics/garden) +"axB" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor{icon_state = "dark"},/area/hydroponics) "axC" = (/obj/structure/table/woodentable,/obj/item/device/paicard,/turf/simulated/floor,/area/crew_quarters/sleep) "axD" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/hydroponics) "axE" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor,/area/crew_quarters/sleep) @@ -1273,8 +1273,8 @@ "ayy" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/camera{c_tag = "EVA South"; dir = 1},/obj/structure/dispenser/oxygen,/turf/simulated/floor,/area/ai_monitored/storage/eva) "ayz" = (/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/hallway/primary/fore) "ayA" = (/turf/simulated/floor{icon_state = "bluecorner"},/area/hallway/primary/fore) -"ayB" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor{icon_state = "dark"},/area/hydroponics) -"ayC" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor{icon_state = "dark"},/area/hydroponics) +"ayB" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor{icon_state = "dark"},/area/hydroponics) +"ayC" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor{icon_state = "dark"},/area/hydroponics) "ayD" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/crew_quarters/sleep) "ayE" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/stool{pixel_y = 8},/turf/simulated/floor,/area/crew_quarters/sleep) "ayF" = (/obj/structure/stool{pixel_y = 8},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "neutralcorner"; dir = 2},/area/crew_quarters/sleep) @@ -1293,11 +1293,11 @@ "ayS" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) "ayT" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/hallway/primary/port) "ayU" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/hallway/secondary/entry) -"ayV" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor{icon_state = "dark"},/area/hydroponics) +"ayV" = (/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor{icon_state = "dark"},/area/hydroponics) "ayW" = (/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/hallway/secondary/entry) "ayX" = (/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/hallway/secondary/entry) "ayY" = (/turf/simulated/floor{dir = 10; icon_state = "warning"},/area/hallway/secondary/entry) -"ayZ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor{icon_state = "dark"},/area/hydroponics) +"ayZ" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor{icon_state = "dark"},/area/hydroponics) "aza" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "azb" = (/turf/simulated/wall/r_wall,/area/maintenance/auxsolarport) "azc" = (/obj/machinery/power/solar_control{id = "auxsolareast"; name = "Fore Port Solar Control"; track = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/auxsolarport) @@ -1400,7 +1400,7 @@ "aAV" = (/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/wood,/area/crew_quarters/captain) "aAW" = (/obj/machinery/computer/secure_data/detective_computer,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/nuke_storage) "aAX" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; icon_state = "map_vent_out"; on = 1},/turf/simulated/floor{icon_state = "dark"},/area/chapel/main) -"aAY" = (/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor{icon_state = "dark"},/area/hydroponics) +"aAY" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/obj/item/weapon/pen/blue{pixel_x = 2; pixel_y = 6},/obj/item/weapon/pen/blue{pixel_x = -3; pixel_y = 2},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/door/poddoor/shutters{id = "bar"; layer = 3.1; name = "Bar Shutters"},/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar) "aAZ" = (/obj/structure/table,/obj/item/weapon/storage/fancy/cigarettes{pixel_y = 2},/turf/simulated/floor,/area/gateway) "aBa" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/airlock/glass{name = "Hydroponics Pasture"; req_access_txt = "35"},/turf/simulated/floor,/area/hydroponics) "aBb" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/rig/atmos,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig/atmos,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/ai_monitored/storage/eva) @@ -1790,7 +1790,7 @@ "aIv" = (/obj/machinery/light_switch{pixel_x = 27},/obj/structure/flora/pottedplant{tag = "icon-plant-21"; icon_state = "plant-21"},/turf/simulated/floor/carpet{icon_state = "carpetnoconnect"},/area/crew_quarters/sleep/bedrooms) "aIw" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/crew_quarters/sleep) "aIx" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint) -"aIy" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor{icon_state = "dark"},/area/hydroponics) +"aIy" = (/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor{icon_state = "dark"},/area/hydroponics) "aIz" = (/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = 30},/turf/simulated/floor,/area/hallway/primary/central) "aIA" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/wall,/area/crew_quarters/sleep/bedrooms) "aIB" = (/obj/machinery/atmospherics/unary/vent_pump{icon_state = "map_vent_out"; on = 1},/turf/simulated/floor{icon_state = "dark"},/area/chapel/main) @@ -1819,7 +1819,7 @@ "aIY" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/hallway/primary/fore) "aIZ" = (/obj/item/device/radio/intercom{pixel_y = 25},/obj/machinery/camera{c_tag = "Bar North"; dir = 2},/obj/machinery/vending/boozeomat,/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar) "aJa" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor,/area/hallway/primary/fore) -"aJb" = (/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor{icon_state = "dark"},/area/hydroponics) +"aJb" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; icon_state = "map_vent_out"; on = 1},/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/turf/simulated/floor{icon_state = "dark"},/area/hydroponics) "aJc" = (/obj/machinery/door/airlock/maintenance{name = "Bar Maintenance"; req_access_txt = "0"; req_one_access_txt = "12;25;28"},/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/crew_quarters/bar) "aJd" = (/turf/simulated/wall,/area/crew_quarters/kitchen) "aJe" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fpmaint) @@ -2002,7 +2002,7 @@ "aMz" = (/obj/machinery/atmospherics/unary/vent_pump{icon_state = "map_vent_out"; on = 1},/turf/simulated/floor,/area/hallway/primary/starboard) "aMA" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; icon_state = "map_vent_out"; on = 1},/turf/simulated/floor,/area/hallway/secondary/exit) "aMB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor,/area/crew_quarters/fitness) -"aMC" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; icon_state = "map_vent_out"; on = 1},/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/turf/simulated/floor{icon_state = "dark"},/area/hydroponics) +"aMC" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/obj/structure/table/reinforced,/obj/machinery/door/poddoor/shutters{id = "bar"; layer = 3.1; name = "Bar Shutters"},/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar) "aMD" = (/obj/machinery/atmospherics/pipe/manifold/hidden,/turf/simulated/floor/plating,/area/maintenance/port) "aME" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/crew_quarters/fitness) "aMF" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4; icon_state = "intact"; tag = "icon-intact-f (EAST)"},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "escape_dock_south_airlock"; name = "interior access button"; pixel_x = 25; pixel_y = -25; req_access_txt = "0"; req_one_access_txt = "13"},/turf/simulated/floor,/area/hallway/secondary/exit) @@ -2063,7 +2063,7 @@ "aNI" = (/obj/machinery/light/small{dir = 8},/obj/structure/stool/bed,/obj/machinery/alarm{pixel_y = 23},/obj/item/weapon/bedsheet/mime,/turf/simulated/floor/carpet{icon_state = "carpetnoconnect"},/area/crew_quarters/sleep/bedrooms) "aNJ" = (/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/plating,/area/maintenance/fpmaint) "aNK" = (/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor{icon_state = "redcorner"; dir = 4},/area/hallway/primary/fore) -"aNL" = (/obj/structure/sink/kitchen{pixel_y = 28},/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor{icon_state = "dark"},/area/hydroponics) +"aNL" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_dock_south_outer"; locked = 1; name = "Escape Airlock"; req_access_txt = "13"},/obj/machinery/mech_sensor{dir = 8; frequency = 1380; id_tag = "escape_dock_south_mech"; pixel_y = 19},/turf/simulated/floor/plating,/area/hallway/secondary/exit) "aNM" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "showroomfloor"},/area/crew_quarters/kitchen) "aNN" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "escape_dock_north_airlock"; name = "interior access button"; pixel_x = 25; pixel_y = 25; req_access_txt = "0"; req_one_access_txt = "13"},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4; icon_state = "intact"; tag = "icon-intact-f (EAST)"},/turf/simulated/floor,/area/hallway/secondary/exit) "aNO" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_pump{dir = 1; icon_state = "map_vent_out"; on = 1},/turf/simulated/floor,/area/hydroponics/garden) @@ -2120,7 +2120,7 @@ "aON" = (/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/hallway/primary/central) "aOO" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/table/reinforced,/obj/machinery/chem_dispenser/soda,/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar) "aOP" = (/obj/structure/cryofeed,/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/sleep/cryo) -"aOQ" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_dock_south_outer"; locked = 1; name = "Escape Airlock"; req_access_txt = "13"},/obj/machinery/mech_sensor{dir = 8; frequency = 1380; id_tag = "escape_dock_south_mech"; pixel_y = 19},/turf/simulated/floor/plating,/area/hallway/secondary/exit) +"aOQ" = (/obj/machinery/light/small{dir = 1},/obj/machinery/embedded_controller/radio/airlock/docking_port_multi{frequency = 1380; id_tag = "escape_dock_south_airlock"; master_tag = "escape_dock"; pixel_y = -30; req_one_access_txt = "13"; tag_airpump = "escape_dock_south_pump"; tag_chamber_sensor = "escape_dock_south_sensor"; tag_exterior_door = "escape_dock_south_outer"; tag_interior_door = "escape_dock_south_inner"; tag_mech_sensor = "escape_dock_south_mech"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1380; id_tag = "escape_dock_south_pump"},/turf/simulated/floor/plating,/area/hallway/secondary/exit) "aOR" = (/obj/machinery/light,/obj/machinery/camera{c_tag = "Bridge West Entrance"; dir = 1},/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/hallway/primary/central) "aOS" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = "0"},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/crew_quarters/fitness) "aOT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 6},/area/maintenance/port) @@ -2129,9 +2129,9 @@ "aOW" = (/obj/structure/stool,/turf/simulated/floor/wood,/area/crew_quarters/sleep/sec) "aOX" = (/obj/machinery/door/firedoor/border_only,/turf/simulated/floor{icon_state = "redcorner"; dir = 4},/area/hallway/primary/fore) "aOY" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/turf/simulated/floor{icon_state = "redcorner"; dir = 4},/area/hallway/primary/fore) -"aOZ" = (/obj/machinery/light/small{dir = 1},/obj/machinery/embedded_controller/radio/airlock/docking_port_multi{frequency = 1380; id_tag = "escape_dock_south_airlock"; master_tag = "escape_dock"; pixel_y = -30; req_one_access_txt = "13"; tag_airpump = "escape_dock_south_pump"; tag_chamber_sensor = "escape_dock_south_sensor"; tag_exterior_door = "escape_dock_south_outer"; tag_interior_door = "escape_dock_south_inner"; tag_mech_sensor = "escape_dock_south_mech"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1380; id_tag = "escape_dock_south_pump"},/turf/simulated/floor/plating,/area/hallway/secondary/exit) +"aOZ" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4; icon_state = "intact"; tag = "icon-intact-f (EAST)"},/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_dock_south_inner"; locked = 1; name = "Escape Airlock"; req_access_txt = "13"},/obj/machinery/mech_sensor{dir = 8; frequency = 1380; id_tag = "escape_dock_south_mech"; pixel_y = 19},/turf/simulated/floor/plating,/area/hallway/secondary/exit) "aPa" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/ai_monitored/storage/eva) -"aPb" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4; icon_state = "intact"; tag = "icon-intact-f (EAST)"},/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_dock_south_inner"; locked = 1; name = "Escape Airlock"; req_access_txt = "13"},/obj/machinery/mech_sensor{dir = 8; frequency = 1380; id_tag = "escape_dock_south_mech"; pixel_y = 19},/turf/simulated/floor/plating,/area/hallway/secondary/exit) +"aPb" = (/obj/structure/sink/kitchen{pixel_y = 28},/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor{icon_state = "dark"},/area/hydroponics) "aPc" = (/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "escape_dock_south_sensor"; pixel_x = 0; pixel_y = 25},/turf/simulated/floor/plating,/area/hallway/secondary/exit) "aPd" = (/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/ai_monitored/storage/eva) "aPe" = (/obj/machinery/light/small,/obj/machinery/embedded_controller/radio/airlock/docking_port_multi{frequency = 1380; id_tag = "escape_dock_north_airlock"; master_tag = "escape_dock"; pixel_y = 30; req_one_access_txt = "13"; tag_airpump = "escape_dock_north_pump"; tag_chamber_sensor = "escape_dock_north_sensor"; tag_exterior_door = "escape_dock_north_outer"; tag_interior_door = "escape_dock_north_inner"; tag_mech_sensor = "escape_dock_north_mech"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1380; id_tag = "escape_dock_north_pump"},/turf/simulated/floor/plating,/area/hallway/secondary/exit) @@ -2669,7 +2669,7 @@ "aZq" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor,/area/gateway) "aZr" = (/turf/simulated/floor{icon_state = "wood"},/area/crew_quarters/bar) "aZs" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock East"},/obj/machinery/door/airlock/glass{name = "Kitchen"; req_access_txt = "28"},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) -"aZt" = (/obj/machinery/light_switch{pixel_y = -25},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) +"aZt" = (/obj/machinery/light_switch{pixel_x = 16; pixel_y = -23},/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) "aZu" = (/obj/structure/cable,/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/turf/simulated/floor{dir = 4; icon_state = "arrival"},/area/hallway/secondary/entry) "aZv" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1},/turf/simulated/floor{icon_state = "cult"; dir = 2},/area/lawoffice) "aZw" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/door_control{id = "kitchen"; name = "Kitchen Shutters Control"; pixel_x = -1; pixel_y = -24; req_access_txt = "28"},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) @@ -3113,7 +3113,7 @@ "bhS" = (/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{dir = 2},/turf/simulated/floor/plating,/area/rnd/research) "bhT" = (/turf/simulated/floor{icon_state = "white"},/area/rnd/research) "bhU" = (/obj/structure/table/reinforced,/turf/simulated/floor{icon_state = "arrival"; dir = 4},/area/quartermaster/office) -"bhV" = (/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/obj/machinery/door/window{base_state = "right"; dir = 8; icon_state = "right"; name = "Mailing Room"; req_access_txt = "0"},/turf/simulated/floor{icon_state = "bot"},/area/quartermaster/office) +"bhV" = (/obj/structure/table,/obj/machinery/reagentgrinder,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology/xenoflora) "bhW" = (/obj/machinery/light/small,/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor{icon_state = "wood"},/area/crew_quarters/bar) "bhX" = (/obj/machinery/door/window/eastright{dir = 1; name = "Bridge Delivery"; req_access_txt = "19"},/turf/simulated/floor{icon_state = "delivery"},/area/bridge/meeting_room) "bhY" = (/obj/structure/sign/redcross{desc = "The Star of Life, a symbol of Medical Aid."; icon_state = "lifestar"; name = "Medbay"; pixel_x = -32},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/asmaint) @@ -3713,7 +3713,7 @@ "btu" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/engine/break_room) "btv" = (/turf/simulated/wall/r_wall,/area/teleporter) "btw" = (/obj/item/clothing/mask/cigarette,/turf/simulated/floor/plating/airless,/area/rnd/test_area) -"btx" = (/obj/structure/table,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology/xenoflora) +"btx" = (/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/obj/machinery/door/window{base_state = "right"; dir = 8; icon_state = "right"; name = "Mailing Room"; req_access_txt = "50"},/turf/simulated/floor{icon_state = "bot"},/area/quartermaster/office) "bty" = (/turf/simulated/wall,/area/rnd/test_area) "btz" = (/obj/structure/bookcase,/turf/simulated/floor{icon_state = "bcarpet06"},/area/medical/psych) "btA" = (/obj/structure/closet/secure_closet{name = "Psychiatrist's Locker"; req_access = null; req_access_txt = "64"},/obj/item/clothing/suit/straight_jacket{layer = 3},/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/obj/item/weapon/reagent_containers/pill/methylphenidate,/obj/item/weapon/reagent_containers/pill/citalopram,/obj/item/weapon/reagent_containers/pill/citalopram,/obj/item/weapon/reagent_containers/pill/methylphenidate,/obj/item/weapon/reagent_containers/syringe,/turf/simulated/floor{icon_state = "bcarpet04"},/area/medical/psych) @@ -5293,7 +5293,7 @@ "bXO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/asmaint) "bXP" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/asmaint) "bXQ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/asmaint) -"bXR" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/turf/simulated/floor/plating,/area/engine/drone_fabrication) +"bXR" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/hydroponics{closed_system = 1; name = "isolation tray"},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology/xenoflora) "bXS" = (/obj/machinery/camera{c_tag = "Cargo Recieving Dock"; dir = 4},/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "cargo_bay"; name = "cargo bay hatch controller"; pixel_x = -30; pixel_y = 0; req_access_txt = "0"; req_one_access_txt = "13;31"; tag_door = "cargo_bay_door"},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/quartermaster/storage) "bXT" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/engine/drone_fabrication) "bXU" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics) @@ -5327,8 +5327,8 @@ "bYw" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/engine/engine_monitoring) "bYx" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/turf/simulated/floor,/area/engine/engine_monitoring) "bYy" = (/obj/structure/grille,/obj/structure/grille,/turf/simulated/wall/r_wall,/area/atmos) -"bYz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/structure/closet/emcloset,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 5},/area/engine/engine_airlock) -"bYA" = (/obj/machinery/atmospherics/binary/dp_vent_pump/high_volume{dir = 8; frequency = 1379; id = "engine_airlock_pump"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/engine/engine_airlock) +"bYz" = (/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/obj/machinery/light_switch{pixel_x = -6; pixel_y = 26},/obj/machinery/atmospherics/portables_connector,/turf/simulated/floor{dir = 4; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) +"bYA" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/structure/disposalpipe/trunk,/obj/machinery/disposal,/turf/simulated/floor{dir = 8; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) "bYB" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/research) "bYC" = (/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{dir = 2},/turf/simulated/floor/plating,/area/medical/virology) "bYD" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/stool/bed/chair/office/dark,/obj/effect/landmark/start{name = "Station Engineer"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/engine/engine_monitoring) @@ -5337,7 +5337,7 @@ "bYG" = (/obj/structure/table/reinforced,/obj/machinery/camera{c_tag = "Engine Monitoring Room"; dir = 4; network = list("SS13")},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor,/area/engine/engine_monitoring) "bYH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = 30},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/research) "bYI" = (/obj/structure/cable,/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/power/smes,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/engine/engine_smes) -"bYJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/embedded_controller/radio/airlock/advanced_airlock_controller{id_tag = "engine_room_airlock"; name = "Engine Room Airlock"; pixel_x = -24; tag_airpump = "engine_airlock_pump"; tag_chamber_sensor = "eng_al_c_snsr"; tag_exterior_door = "engine_airlock_exterior"; tag_exterior_sensor = "eng_al_ext_snsr"; tag_interior_door = "engine_airlock_interior"; tag_interior_sensor = "eng_al_int_snsr"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 9},/area/engine/engine_airlock) +"bYJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/turf/simulated/floor/plating,/area/engine/drone_fabrication) "bYK" = (/obj/machinery/recharge_station,/turf/simulated/floor/plating,/area/engine/drone_fabrication) "bYL" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) "bYM" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engine/drone_fabrication) @@ -5353,16 +5353,16 @@ "bYW" = (/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/starboardsolar) "bYX" = (/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{dir = 2},/turf/simulated/floor/plating,/area/medical/virology) "bYY" = (/obj/machinery/power/terminal{dir = 8},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/light,/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/engine/engine_smes) -"bYZ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1},/obj/machinery/camera{c_tag = "SMES"; dir = 8; network = list("SS13")},/turf/simulated/floor,/area/engine/engine_smes) -"bZa" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/turf/simulated/floor/plating,/area/engine/drone_fabrication) +"bYZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/structure/closet/emcloset,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 5},/area/engine/engine_airlock) +"bZa" = (/obj/machinery/atmospherics/binary/dp_vent_pump/high_volume{dir = 8; frequency = 1379; id = "engine_airlock_pump"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/engine/engine_airlock) "bZb" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/engine/drone_fabrication) "bZc" = (/obj/machinery/computer/security/engineering{network = list("Engineering","Power Alarms","Atmosphere Alarms","Fire Alarms","Supermatter")},/turf/simulated/floor,/area/engine/engine_monitoring) "bZd" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/engine/drone_fabrication) "bZe" = (/obj/machinery/computer/station_alert,/turf/simulated/floor,/area/engine/engine_monitoring) "bZf" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/machinery/light,/obj/machinery/mecha_part_fabricator{output_dir = 1},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 10},/area/engine/drone_fabrication) -"bZg" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor,/area/engine/engine_smes) -"bZh" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "cooling_in"; name = "Engine Cooling Control"; output_tag = "cooling_out"; sensors = list("engine_sensor" = "Engine Core")},/turf/simulated/floor,/area/engine/engine_monitoring) -"bZi" = (/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "eng_al_c_snsr"; pixel_x = -25; pixel_y = 0},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 10},/area/engine/engine_airlock) +"bZg" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/embedded_controller/radio/airlock/advanced_airlock_controller{id_tag = "engine_room_airlock"; name = "Engine Room Airlock"; pixel_x = -24; tag_airpump = "engine_airlock_pump"; tag_chamber_sensor = "eng_al_c_snsr"; tag_exterior_door = "engine_airlock_exterior"; tag_exterior_sensor = "eng_al_ext_snsr"; tag_interior_door = "engine_airlock_interior"; tag_interior_sensor = "eng_al_int_snsr"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 9},/area/engine/engine_airlock) +"bZh" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1},/obj/machinery/camera{c_tag = "SMES"; dir = 8; network = list("SS13")},/turf/simulated/floor,/area/engine/engine_smes) +"bZi" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/turf/simulated/floor/plating,/area/engine/drone_fabrication) "bZj" = (/turf/simulated/wall/r_wall,/area/engine/engine_room) "bZk" = (/obj/machinery/light{dir = 1},/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 8; name = "hazard door west"},/turf/simulated/floor{dir = 8; icon_state = "whiteblue"},/area/rnd/research) "bZl" = (/obj/structure/sign/securearea,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area/rnd/research) @@ -5376,19 +5376,19 @@ "bZt" = (/obj/machinery/power/monitor{name = "Main Power Grid Monitoring"},/obj/structure/cable,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/engine/engine_monitoring) "bZu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{dir = 1; icon_state = "whiteredcorner"},/area/rnd/research) "bZv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{dir = 1; icon_state = "whitered"},/area/rnd/research) -"bZw" = (/obj/structure/table,/obj/item/weapon/book/manual/supermatter_engine,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 6},/area/engine/engine_airlock) -"bZx" = (/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/engine/engine_airlock) +"bZw" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor,/area/engine/engine_smes) +"bZx" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "cooling_in"; name = "Engine Cooling Control"; output_tag = "cooling_out"; sensors = list("engine_sensor" = "Engine Core")},/turf/simulated/floor,/area/engine/engine_monitoring) "bZy" = (/obj/machinery/light{dir = 1},/obj/machinery/light_switch{pixel_x = 0; pixel_y = 27},/turf/simulated/floor/plating,/area/engine/engine_room) "bZz" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/turf/simulated/floor,/area/medical/reception) -"bZA" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/poddoor{density = 0; dir = 4; icon_state = "pdoor0"; id = "EngineBlast"; name = "Engine Monitoring Room Blast Doors"; opacity = 0},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/engine/engine_room) -"bZB" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/poddoor{density = 0; dir = 4; icon_state = "pdoor0"; id = "EngineBlast"; name = "Engine Monitoring Room Blast Doors"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/engine/engine_room) +"bZA" = (/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "eng_al_c_snsr"; pixel_x = -25; pixel_y = 0},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 10},/area/engine/engine_airlock) +"bZB" = (/obj/structure/table,/obj/item/weapon/book/manual/supermatter_engine,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 6},/area/engine/engine_airlock) "bZC" = (/turf/simulated/floor/plating,/area/engine/engine_room) "bZD" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/engine/engine_room) -"bZE" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/obj/machinery/door/airlock/maintenance{name = "Drone Fabrication/Engine Waste Handling"; req_one_access_txt = "10;24"},/turf/simulated/floor/plating,/area/engine/drone_fabrication) +"bZE" = (/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/engine/engine_airlock) "bZF" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor{dir = 9; icon_state = "whitehall"},/area/rnd/research) "bZG" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay3) "bZH" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{tag = "icon-intact (SOUTHEAST)"; icon_state = "intact"; dir = 6},/turf/simulated/floor/plating,/area/engine/engine_room) -"bZI" = (/turf/simulated/wall/r_wall,/area/engine/engine_waste) +"bZI" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/poddoor{density = 0; dir = 4; icon_state = "pdoor0"; id = "EngineBlast"; name = "Engine Monitoring Room Blast Doors"; opacity = 0},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/engine/engine_room) "bZJ" = (/obj/structure/sign/biohazard,/turf/simulated/wall/r_wall,/area/medical/virology) "bZK" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/hologram/holopad,/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/research) "bZL" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/turf/simulated/floor/plating{icon_state = "platebotc"; nitrogen = 0.01; oxygen = 0.01},/area/engine/engine_room) @@ -5396,38 +5396,38 @@ "bZN" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; icon_state = "map_vent_out"; on = 1},/turf/simulated/floor,/area/quartermaster/office) "bZO" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1},/turf/simulated/floor{dir = 10; icon_state = "warning"},/area/teleporter) "bZP" = (/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{dir = 2},/turf/simulated/floor/plating,/area/rnd/xenobiology/xenoflora) -"bZQ" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/machinery/portable_atmospherics/canister/empty/phoron,/turf/simulated/floor/plating{icon_state = "platebot"; nitrogen = 0.01; oxygen = 0.01},/area/engine/engine_waste) +"bZQ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/poddoor{density = 0; dir = 4; icon_state = "pdoor0"; id = "EngineBlast"; name = "Engine Monitoring Room Blast Doors"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/engine/engine_room) "bZR" = (/obj/structure/closet/emcloset,/obj/machinery/camera{c_tag = "Arrivals Auxiliary Docking South"; dir = 4; network = list("SS13")},/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/hallway/secondary/entry) -"bZS" = (/obj/machinery/atmospherics/binary/pump{dir = 8; name = "Engine Filter Outpump"},/turf/simulated/floor/plating,/area/engine/engine_waste) +"bZS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/obj/machinery/door/airlock/maintenance{name = "Drone Fabrication/Engine Waste Handling"; req_one_access_txt = "10;24"},/turf/simulated/floor/plating,/area/engine/drone_fabrication) "bZT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor/plating,/area/maintenance/maintcentral) -"bZU" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/meter,/turf/simulated/floor/plating,/area/engine/engine_waste) +"bZU" = (/turf/simulated/wall/r_wall,/area/engine/engine_waste) "bZV" = (/obj/machinery/power/smes{charge = 0},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) "bZW" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) "bZX" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1},/turf/simulated/floor{dir = 8; icon_state = "browncorner"},/area/hallway/primary/central) "bZY" = (/obj/item/device/multitool,/turf/space,/area) -"bZZ" = (/obj/machinery/alarm{breach_detection = 0; frequency = 1439; name = "Engine Room Air Alarm"; pixel_y = 23},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/engine/engine_room) -"caa" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plating,/area/engine/engine_room) -"cab" = (/obj/machinery/door_control{desc = "A remote control-switch for the engine charging port."; id = "EngineEmitterPort"; name = "Engine Charging Port"; pixel_x = -5; pixel_y = 25; req_access_txt = "10"},/obj/machinery/door_control{desc = "A remote control-switch for the engine control room blast doors."; id = "EngineBlast"; name = "Engine Room Blast Doors"; pixel_x = 5; pixel_y = 25; req_access_txt = "10"},/turf/simulated/floor/plating,/area/engine/engine_room) +"bZZ" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/machinery/portable_atmospherics/canister/empty/phoron,/turf/simulated/floor/plating{icon_state = "platebot"; nitrogen = 0.01; oxygen = 0.01},/area/engine/engine_waste) +"caa" = (/obj/machinery/atmospherics/binary/pump{dir = 8; name = "Engine Filter Outpump"},/turf/simulated/floor/plating,/area/engine/engine_waste) +"cab" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/meter,/turf/simulated/floor/plating,/area/engine/engine_waste) "cac" = (/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/engine/engine_room) -"cad" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/obj/machinery/atmospherics/trinary/filter/m_filter{dir = 1; on = 1},/turf/simulated/floor/plating,/area/engine/engine_waste) -"cae" = (/obj/machinery/power/terminal{dir = 8},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/engine/engine_room) +"cad" = (/obj/machinery/alarm{breach_detection = 0; frequency = 1439; name = "Engine Room Air Alarm"; pixel_y = 23},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/engine/engine_room) +"cae" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plating,/area/engine/engine_room) "caf" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/engine/engine_room) -"cag" = (/obj/machinery/airlock_sensor/airlock_interior{id_tag = "eng_al_int_snsr"; master_tag = "engine_room_airlock"; pixel_y = 22; req_access_txt = "10"},/turf/simulated/floor/plating,/area/engine/engine_room) -"cah" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; icon_state = "map_vent_out"; on = 1},/turf/simulated/floor/plating,/area/engine/engine_room) +"cag" = (/obj/machinery/door_control{desc = "A remote control-switch for the engine charging port."; id = "EngineEmitterPort"; name = "Engine Charging Port"; pixel_x = -5; pixel_y = 25; req_access_txt = "10"},/obj/machinery/door_control{desc = "A remote control-switch for the engine control room blast doors."; id = "EngineBlast"; name = "Engine Room Blast Doors"; pixel_x = 5; pixel_y = 25; req_access_txt = "10"},/turf/simulated/floor/plating,/area/engine/engine_room) +"cah" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/obj/machinery/atmospherics/trinary/filter/m_filter{dir = 1; on = 1},/turf/simulated/floor/plating,/area/engine/engine_waste) "cai" = (/obj/machinery/atmospherics/tvalve/mirrored/digital,/turf/simulated/floor,/area/atmos) -"caj" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/machinery/portable_atmospherics/canister/empty/oxygen,/turf/simulated/floor/plating{icon_state = "platebot"; nitrogen = 0.01; oxygen = 0.01},/area/engine/engine_waste) +"caj" = (/obj/machinery/power/terminal{dir = 8},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/engine/engine_room) "cak" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor,/area/engine/engine_monitoring) "cal" = (/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump{icon_state = "map_vent_out"; on = 1},/turf/simulated/floor{icon_state = "bluecorner"},/area/hallway/primary/central) "cam" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/engine/engine_room) "can" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"; tag = "icon-intact (EAST)"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engine/engine_room) -"cao" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating{dir = 4; icon_state = "warnplatecorner"},/area/engine/engine_room) +"cao" = (/obj/machinery/airlock_sensor/airlock_interior{id_tag = "eng_al_int_snsr"; master_tag = "engine_room_airlock"; pixel_y = 22; req_access_txt = "10"},/turf/simulated/floor/plating,/area/engine/engine_room) "cap" = (/obj/machinery/atmospherics/unary/vent_pump{icon_state = "map_vent_out"; on = 1},/turf/simulated/floor/wood,/area/crew_quarters/captain) "caq" = (/obj/item/weapon/cable_coil,/turf/space,/area) "car" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; icon_state = "map_vent_out"; on = 1},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) "cas" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"; tag = "icon-intact (EAST)"},/turf/simulated/floor/plating,/area/engine/engine_room) "cat" = (/obj/structure/sign/securearea,/turf/simulated/wall,/area/rnd/research) -"cau" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/engine/engine_room) -"cav" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/trinary/filter/m_filter{dir = 1; filter_type = 1; on = 1},/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/camera/autoname{dir = 8; network = list("SS13","Supermatter","Atmospherics")},/turf/simulated/floor/plating,/area/engine/engine_waste) +"cau" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; icon_state = "map_vent_out"; on = 1},/turf/simulated/floor/plating,/area/engine/engine_room) +"cav" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/machinery/portable_atmospherics/canister/empty/oxygen,/turf/simulated/floor/plating{icon_state = "platebot"; nitrogen = 0.01; oxygen = 0.01},/area/engine/engine_waste) "caw" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; icon_state = "map_vent_out"; on = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry) "cax" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/atmospherics/unary/vent_pump{dir = 8; icon_state = "map_vent_out"; on = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/reception) "cay" = (/obj/structure/stool,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/camera{c_tag = "Aft Starboard Solar Control"; dir = 4; network = list("SS13")},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) @@ -5437,13 +5437,13 @@ "caC" = (/turf/simulated/shuttle/wall{icon_state = "swall12"; dir = 2},/area/shuttle/escape_pod5/station) "caD" = (/obj/structure/shuttle/engine/propulsion/burst{dir = 8},/turf/simulated/wall,/area/shuttle/escape_pod5/station) "caE" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/maintenance/aft) -"caF" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable,/turf/simulated/floor/plating{dir = 2; icon_state = "warnplatecorner"},/area/engine/engine_waste) +"caF" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating{dir = 4; icon_state = "warnplatecorner"},/area/engine/engine_room) "caG" = (/obj/machinery/light{dir = 4},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor,/area/hallway/secondary/entry) -"caH" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/door_control{id = "engine_maintenance"; name = "Door Bolt Control"; normaldoorcontrol = 1; pixel_x = -25; pixel_y = 0; req_access_txt = "0"; specialfunctions = 4},/turf/simulated/floor/plating{dir = 1; icon_state = "warnplatecorner"},/area/engine/engine_room) -"caI" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/engine/engine_room) +"caH" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/engine/engine_room) +"caI" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/trinary/filter/m_filter{dir = 1; filter_type = 1; on = 1},/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/camera/autoname{dir = 8; network = list("SS13","Supermatter","Atmospherics")},/turf/simulated/floor/plating,/area/engine/engine_waste) "caJ" = (/obj/machinery/light,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/obj/machinery/atmospherics/unary/vent_pump{icon_state = "map_vent_out"; on = 1},/turf/simulated/floor/wood,/area/bridge/meeting_room) "caK" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1},/obj/machinery/light{dir = 8},/turf/simulated/floor{dir = 8; icon_state = "brown"},/area/quartermaster/office) -"caL" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/engine/engine_room) +"caL" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable,/turf/simulated/floor/plating{dir = 2; icon_state = "warnplatecorner"},/area/engine/engine_waste) "caM" = (/obj/machinery/constructable_frame/machine_frame,/turf/simulated/floor,/area/engine/workshop) "caN" = (/obj/effect/decal/cleanable/blood/oil{amount = 0},/turf/simulated/floor,/area/engine/workshop) "caO" = (/turf/simulated/wall/r_wall,/area/engine/workshop) @@ -5566,7 +5566,7 @@ "cdb" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4; icon_state = "intact"; tag = "icon-intact-f (EAST)"},/turf/simulated/floor{icon_state = "warningcorner"; dir = 4},/area/hallway/secondary/entry) "cdc" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/wall/r_wall,/area/rnd/xenobiology) "cdd" = (/turf/simulated/wall/r_wall,/area/engine/hallway) -"cde" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplatecorner"},/area/engine/engine_room) +"cde" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/door_control{id = "engine_maintenance"; name = "Door Bolt Control"; normaldoorcontrol = 1; pixel_x = -25; pixel_y = 0; req_access_txt = "0"; specialfunctions = 4},/turf/simulated/floor/plating{dir = 1; icon_state = "warnplatecorner"},/area/engine/engine_room) "cdf" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/atmos) "cdg" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/atmos) "cdh" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/atmos) @@ -5583,13 +5583,13 @@ "cds" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) "cdt" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/junction{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) "cdu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/engine/hallway) -"cdv" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating{dir = 1; icon_state = "warnplatecorner"},/area/engine/engine_room) +"cdv" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/engine/engine_room) "cdw" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) "cdx" = (/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{dir = 2},/turf/simulated/floor/plating,/area/rnd/xenobiology) "cdy" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) "cdz" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor,/area/engine/hallway) "cdA" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) -"cdB" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/manifold/visible/cyan{dir = 8; icon_state = "map"; tag = "icon-manifold (WEST)"},/turf/simulated/floor/plating,/area/engine/engine_room) +"cdB" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/engine/engine_room) "cdC" = (/obj/machinery/door/window/southright{dir = 1; name = "Containment Pen"; req_access_txt = "47"},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/rnd/xenobiology) "cdD" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry) "cdE" = (/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor/plating,/area/engine/engine_room) @@ -5602,14 +5602,14 @@ "cdL" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/visible/yellow,/obj/machinery/meter,/turf/simulated/wall/r_wall,/area/atmos) "cdM" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/atmos) "cdN" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/visible/green,/obj/machinery/meter,/turf/simulated/wall/r_wall,/area/atmos) -"cdO" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{tag = "icon-intact (SOUTHEAST)"; icon_state = "intact"; dir = 6},/obj/machinery/meter,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/engine/engine_room) +"cdO" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplatecorner"},/area/engine/engine_room) "cdP" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/engine/engine_hallway) "cdQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/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{tag = "icon-whiteblue (NORTHWEST)"; icon_state = "whiteblue"; dir = 9},/area/medical/medbay2) "cdR" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor,/area/engine/engine_hallway) "cdS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = 25},/turf/simulated/floor,/area/engine/engine_hallway) -"cdT" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 10},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engine/engine_room) +"cdT" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating{dir = 1; icon_state = "warnplatecorner"},/area/engine/engine_room) "cdU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/engine/engine_hallway) -"cdV" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"; tag = "icon-intact (EAST)"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/visible/cyan,/turf/simulated/floor/plating,/area/engine/engine_room) +"cdV" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/manifold/visible/cyan{dir = 8; icon_state = "map"; tag = "icon-manifold (WEST)"},/turf/simulated/floor/plating,/area/engine/engine_room) "cdW" = (/obj/structure/grille,/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/visible/yellow,/turf/simulated/wall/r_wall,/area/atmos) "cdX" = (/obj/structure/grille,/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/visible/green,/turf/simulated/wall/r_wall,/area/atmos) "cdY" = (/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{dir = 2},/turf/simulated/floor/plating,/area/engine/engine_monitoring) @@ -5680,7 +5680,7 @@ "cfl" = (/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{tag = "icon-intact (SOUTHWEST)"; icon_state = "intact"; dir = 10},/turf/simulated/floor,/area/atmos) "cfm" = (/obj/machinery/atmospherics/pipe/simple/visible/green{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/cyan,/turf/simulated/floor,/area/atmos) "cfn" = (/obj/structure/table/reinforced,/obj/machinery/door_control{desc = "A remote control-switch for the engine control room blast doors."; id = "EngineBlast"; name = "Engine Room Blast Doors"; pixel_x = 0; pixel_y = -3; req_access_txt = "10"},/obj/machinery/door_control{desc = "A remote control-switch for the engine charging port."; id = "EngineEmitterPort"; name = "Engine Charging Port"; pixel_x = -6; pixel_y = 7; req_access_txt = "10"},/obj/machinery/door_control{desc = "A remote control-switch for the engine emitter."; id = "EngineEmitter"; name = "Engine Emitter"; normaldoorcontrol = 2; pixel_x = 6; pixel_y = 7; req_access_txt = "10"},/turf/simulated/floor,/area/engine/engine_monitoring) -"cfo" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{dir = 1; icon_state = "map"; tag = "icon-manifold (NORTH)"},/turf/simulated/floor/plating,/area/engine/engine_room) +"cfo" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{tag = "icon-intact (SOUTHEAST)"; icon_state = "intact"; dir = 6},/obj/machinery/meter,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/engine/engine_room) "cfp" = (/obj/machinery/atmospherics/pipe/simple/visible/green{tag = "icon-intact (SOUTHEAST)"; icon_state = "intact"; dir = 6},/turf/simulated/floor,/area/atmos) "cfq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/atmos) "cfr" = (/obj/structure/closet/crate/solar,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/plating,/area/engine/storage_hard) @@ -5708,7 +5708,7 @@ "cfN" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor,/area/engine/engine_hallway) "cfO" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/engine/engine_hallway) "cfP" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/engine/engine_hallway) -"cfQ" = (/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/engine/engine_room) +"cfQ" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 10},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engine/engine_room) "cfR" = (/turf/simulated/wall/r_wall,/area/engine/drone_fabrication) "cfS" = (/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/obj/machinery/pipedispenser/disposal,/turf/simulated/floor,/area/atmos) "cfT" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor,/area/atmos) @@ -5717,9 +5717,9 @@ "cfW" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/solar{id = "portsolar"; name = "Port Solar Array"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/port) "cfX" = (/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/plating/airless,/area/solar/port) "cfY" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/solar{id = "portsolar"; name = "Port Solar Array"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/port) -"cfZ" = (/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/engine/engine_room) +"cfZ" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"; tag = "icon-intact (EAST)"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/visible/cyan,/turf/simulated/floor/plating,/area/engine/engine_room) "cga" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/poddoor{density = 0; dir = 4; icon_state = "pdoor0"; id = "EngineBlast"; name = "Engine Monitoring Room Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/engine/engine_room) -"cgb" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{dir = 5},/obj/machinery/meter{frequency = 1443; id = "engine_waste_pre_filter_meter"; name = "Engine Waste - Pre-Filter"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engine/engine_waste) +"cgb" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{dir = 1; icon_state = "map"; tag = "icon-manifold (NORTH)"},/turf/simulated/floor/plating,/area/engine/engine_room) "cgc" = (/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{tag = "icon-intact (SOUTHEAST)"; icon_state = "intact"; dir = 6},/turf/simulated/floor,/area/atmos) "cgd" = (/obj/machinery/door_control{dir = 2; id = "Skynet_launch"; name = "Mech Bay Door Control"; pixel_x = 6; pixel_y = 24},/turf/simulated/floor{tag = "icon-warningcorner (WEST)"; icon_state = "warningcorner"; dir = 8},/area/assembly/chargebay) "cge" = (/turf/simulated/floor,/area/medical/morgue) @@ -5727,11 +5727,11 @@ "cgg" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/storage/emergency3) "cgh" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) "cgi" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/medical/virology) -"cgj" = (/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/door/airlock/hatch{icon_state = "door_locked"; id_tag = "engine_maintenance"; locked = 1; name = "Engine Room"; req_access_txt = "10"},/turf/simulated/floor/plating,/area/engine/engine_room) +"cgj" = (/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/engine/engine_room) "cgk" = (/obj/machinery/camera{c_tag = "Central Hallway South-East"; dir = 2},/turf/simulated/floor,/area/hallway/primary/central) -"cgl" = (/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/meter,/turf/simulated/floor/plating,/area/engine/engine_room) +"cgl" = (/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/engine/engine_room) "cgm" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1},/turf/simulated/floor/plating,/area/engine/engine_room) -"cgn" = (/obj/machinery/atmospherics/trinary/filter/m_filter{dir = 8; filter_type = 2; on = 1},/turf/simulated/floor/plating,/area/engine/engine_room) +"cgn" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{dir = 5},/obj/machinery/meter{frequency = 1443; id = "engine_waste_pre_filter_meter"; name = "Engine Waste - Pre-Filter"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engine/engine_waste) "cgo" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/turf/simulated/floor,/area/engine/workshop) "cgp" = (/turf/simulated/wall/r_wall,/area/engine/engine_hallway) "cgq" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/turf/simulated/floor{icon_state = "arrival"; dir = 5},/area/atmos) @@ -5747,7 +5747,7 @@ "cgA" = (/obj/machinery/light{dir = 1},/turf/simulated/floor,/area/atmos) "cgB" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "n2_in"; name = "Nitrogen Supply Control"; output_tag = "n2_out"; sensors = list("n2_sensor" = "Tank")},/turf/simulated/floor{icon_state = "red"; dir = 1},/area/atmos) "cgC" = (/obj/machinery/atmospherics/pipe/simple/visible/green,/turf/simulated/floor{icon_state = "red"; dir = 5},/area/atmos) -"cgD" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/engine/engine_room) +"cgD" = (/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/door/airlock/hatch{icon_state = "door_locked"; id_tag = "engine_maintenance"; locked = 1; name = "Engine Room"; req_access_txt = "10"},/turf/simulated/floor/plating,/area/engine/engine_room) "cgE" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_x = 0; pixel_y = 0},/turf/simulated/wall/r_wall,/area/engine/engine_monitoring) "cgF" = (/obj/machinery/atmospherics/pipe/simple/visible/green,/turf/simulated/floor{dir = 5; icon_state = "blue"},/area/atmos) "cgG" = (/obj/machinery/atmospherics/unary/cold_sink/freezer{current_temperature = 1; dir = 8; icon_state = "freezer_1"; on = 1; req_access_txt = "56"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/engine/engine_room) @@ -5769,14 +5769,14 @@ "cgW" = (/obj/machinery/ai_status_display{layer = 4; pixel_y = 32},/obj/machinery/light{dir = 1},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 5},/area/engine/drone_fabrication) "cgX" = (/obj/machinery/power/emitter{anchored = 1; id = "EngineEmitter"; state = 2},/obj/structure/cable,/turf/simulated/floor/plating,/area/engine/engine_room) "cgY" = (/obj/machinery/atmospherics/unary/cold_sink/freezer{current_temperature = 1; dir = 8; icon_state = "freezer_1"; on = 1; req_access_txt = "56"},/turf/simulated/floor/plating,/area/engine/engine_room) -"cgZ" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/binary/pump{dir = 1; name = "Engine Filter Outpump"},/turf/simulated/floor,/area/atmos) +"cgZ" = (/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/meter,/turf/simulated/floor/plating,/area/engine/engine_room) "cha" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor,/area/atmos) "chb" = (/obj/structure/stool/bed/chair,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/engine/drone_fabrication) "chc" = (/obj/structure/lattice,/obj/structure/grille,/turf/space,/area) "chd" = (/obj/structure/lattice,/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/space,/area) "che" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating/airless,/area/solar/port) "chf" = (/obj/structure/disposalpipe/sortjunction{dir = 1; name = "Sorting Office"; sortType = "Sorting Office"},/turf/simulated/floor,/area/quartermaster/office) -"chg" = (/obj/machinery/atmospherics/pipe/simple/visible/green{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/atmos) +"chg" = (/obj/machinery/atmospherics/trinary/filter/m_filter{dir = 8; filter_type = 2; on = 1},/turf/simulated/floor/plating,/area/engine/engine_room) "chh" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/engine/workshop) "chi" = (/obj/structure/extinguisher_cabinet{pixel_x = 25},/turf/simulated/floor,/area/engine/workshop) "chj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/engine/hallway) @@ -5798,7 +5798,7 @@ "chz" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/closet/crate,/obj/item/stack/rods{amount = 50},/obj/item/weapon/airlock_electronics,/obj/item/weapon/airlock_electronics,/obj/item/weapon/cell/high,/turf/simulated/floor,/area/engine/workshop) "chA" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/closet/crate,/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/turf/simulated/floor,/area/engine/workshop) "chB" = (/turf/simulated/wall/r_wall,/area/engine/engineering_monitoring) -"chC" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/obj/machinery/meter{frequency = 1443; id = "engine_waste_post_filter_meter"; name = "Engine Waste - Post-Filter"},/turf/simulated/floor,/area/atmos) +"chC" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/engine/engine_room) "chD" = (/obj/machinery/portable_atmospherics/scrubber,/obj/machinery/atmospherics/pipe/manifold/visible/scrubbers{dir = 1; icon_state = "map"; tag = "icon-manifold (NORTH)"},/turf/simulated/floor,/area/atmos) "chE" = (/obj/machinery/space_heater,/turf/simulated/floor,/area/atmos) "chF" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/door/airlock/atmos{name = "Atmospherics Storage"; req_access_txt = "24"},/turf/simulated/floor,/area/atmos) @@ -5834,7 +5834,7 @@ "cij" = (/obj/machinery/light/small,/turf/simulated/floor/engine{carbon_dioxide = 0; name = "phoron floor"; nitrogen = 0; oxygen = 0; phoron = 70000},/area/atmos) "cik" = (/obj/effect/decal/remains/robot,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/engine/drone_fabrication) "cil" = (/obj/machinery/disease2/incubator,/turf/simulated/floor{icon_state = "white"},/area/medical/virology) -"cim" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/atmos) +"cim" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/binary/pump{dir = 1; name = "Engine Filter Outpump"},/turf/simulated/floor,/area/atmos) "cin" = (/obj/machinery/atmospherics/trinary/filter{dir = 4; icon_state = "map"; name = "Gas filter (Toxins tank)"; on = 1},/turf/simulated/floor,/area/atmos) "cio" = (/obj/machinery/power/monitor{name = "Main Power Grid Monitoring"},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor,/area/engine/engineering_monitoring) "cip" = (/obj/machinery/atmospherics/tvalve/mirrored/digital{dir = 8},/turf/simulated/floor,/area/atmos) @@ -5875,14 +5875,14 @@ "ciY" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{tag = "icon-intact (SOUTHEAST)"; icon_state = "intact"; dir = 6},/obj/machinery/meter,/turf/simulated/floor,/area/atmos) "ciZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plating,/area/maintenance/asmaint) "cja" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; icon_state = "map_vent_out"; on = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) -"cjb" = (/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/atmos) +"cjb" = (/obj/machinery/atmospherics/pipe/simple/visible/green{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/atmos) "cjc" = (/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/crew_quarters/sleep/engi) -"cjd" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "0"; req_one_access_txt = "10;24"},/turf/simulated/floor/plating,/area/maintenance/engi_shuttle) -"cje" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/visible/green,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/visible/supply{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/atmos) -"cjf" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/visible/supply{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/atmos) +"cjd" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/obj/machinery/meter{frequency = 1443; id = "engine_waste_post_filter_meter"; name = "Engine Waste - Post-Filter"},/turf/simulated/floor,/area/atmos) +"cje" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/atmos) +"cjf" = (/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/atmos) "cjg" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "virologyq_airlock_control"; name = "Virology Quarantine Access Button"; pixel_x = -8; pixel_y = 28; req_access_txt = "39"},/obj/machinery/atmospherics/unary/vent_pump{dir = 8; icon_state = "map_vent_out"; on = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) "cjh" = (/obj/machinery/door/firedoor/border_only{dir = 1; layer = 2.4; name = "Engineering Firelock"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock/glass_engineering{name = "Engineering Hallway"; req_one_access_txt = "10;24"},/turf/simulated/floor,/area/engine/hallway) -"cji" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/manifold/visible/supply,/turf/simulated/floor/plating,/area/atmos) +"cji" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "0"; req_one_access_txt = "10;24"},/turf/simulated/floor/plating,/area/maintenance/engi_shuttle) "cjj" = (/obj/machinery/door/firedoor/border_only{dir = 1; layer = 2.4; name = "Engineering Firelock"},/obj/machinery/door/airlock/glass_engineering{name = "Engineering Hallway"; req_one_access_txt = "10;24"},/turf/simulated/floor,/area/engine/hallway) "cjk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/engine/workshop) "cjl" = (/obj/machinery/atmospherics/pipe/simple/visible/green,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor,/area/atmos) @@ -5890,8 +5890,8 @@ "cjn" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/engine/hallway) "cjo" = (/obj/machinery/door/firedoor/border_only{dir = 1; layer = 2.4; name = "Engineering Firelock"},/obj/machinery/door/airlock/glass_engineering{name = "Engineering Hallway"; req_one_access_txt = "10;24"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/engine/hallway) "cjp" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/medical/reception) -"cjq" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/supply{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/atmos) -"cjr" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/visible/yellow,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/visible/supply{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/atmos) +"cjq" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/visible/green,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/visible/supply{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/atmos) +"cjr" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/visible/supply{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/atmos) "cjs" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/engine/storage_hard) "cjt" = (/turf/simulated/floor{icon_state = "white"},/area/medical/reception) "cju" = (/obj/structure/morgue,/turf/simulated/floor,/area/medical/morgue) @@ -5901,8 +5901,8 @@ "cjy" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) "cjz" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) "cjA" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table/reinforced,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1},/obj/machinery/door_control{id = "xenobio5"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access_txt = "55"},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/rnd/xenobiology) -"cjB" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/visible/supply{dir = 5; icon_state = "intact"; tag = "icon-intact (SOUTHWEST)"},/turf/simulated/floor/plating,/area/atmos) -"cjC" = (/obj/machinery/door/airlock/maintenance{name = "Atmospherics Maintenance Access"; req_access_txt = "12;24"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/turf/simulated/floor/plating,/area/atmos) +"cjB" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/manifold/visible/supply,/turf/simulated/floor/plating,/area/atmos) +"cjC" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/supply{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/atmos) "cjD" = (/obj/structure/table,/obj/item/weapon/autopsy_scanner,/obj/item/weapon/scalpel,/turf/simulated/floor{icon_state = "blue"; dir = 8},/area/medical/morgue) "cjE" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) "cjF" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) @@ -5914,18 +5914,18 @@ "cjL" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating/airless,/area/solar/starboard) "cjM" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/maintenance/portsolar) "cjN" = (/turf/simulated/wall/r_wall,/area/maintenance/portsolar) -"cjO" = (/obj/machinery/atmospherics/pipe/simple/visible/supply{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/wall/r_wall,/area/atmos) -"cjP" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/atmos) -"cjQ" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "0"; req_one_access_txt = "10;24"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/supply{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/engine/engine_hallway) +"cjO" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/visible/yellow,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/visible/supply{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/atmos) +"cjP" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/visible/supply{dir = 5; icon_state = "intact"; tag = "icon-intact (SOUTHWEST)"},/turf/simulated/floor/plating,/area/atmos) +"cjQ" = (/obj/machinery/door/airlock/maintenance{name = "Atmospherics Maintenance Access"; req_access_txt = "12;24"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/turf/simulated/floor/plating,/area/atmos) "cjR" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1},/turf/simulated/floor{dir = 3; icon_state = "whitered"},/area/medical/virology) "cjS" = (/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/camera{c_tag = "Engineering Hallway South East"; dir = 1},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1},/turf/simulated/floor,/area/engine/engine_hallway) -"cjT" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/obj/machinery/atmospherics/pipe/simple/visible/supply{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/engine/drone_fabrication) -"cjU" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/visible/supply{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/engine/drone_fabrication) -"cjV" = (/obj/machinery/light{dir = 1},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor,/area/engine/engine_hallway) +"cjT" = (/obj/machinery/atmospherics/pipe/simple/visible/supply{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/wall/r_wall,/area/atmos) +"cjU" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/atmos) +"cjV" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "0"; req_one_access_txt = "10;24"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/supply{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/engine/engine_hallway) "cjW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 29},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) "cjX" = (/turf/simulated/wall/r_wall,/area/engine/storage_hard) "cjY" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/camera{c_tag = "Engineering Hallway South West"; dir = 1; pixel_x = 22},/obj/machinery/atmospherics/unary/vent_pump{dir = 1; icon_state = "map_vent_out"; on = 1},/turf/simulated/floor,/area/engine/engine_hallway) -"cjZ" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/atmos) +"cjZ" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/obj/machinery/atmospherics/pipe/simple/visible/supply{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/engine/drone_fabrication) "cka" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/engine/workshop) "ckb" = (/turf/simulated/wall,/area/medical/exam_room) "ckc" = (/obj/structure/filingcabinet/medical,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/medical/exam_room) @@ -5993,7 +5993,7 @@ "clm" = (/obj/structure/table/reinforced,/obj/machinery/door_control{id = "xenobio3"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access_txt = "55"},/obj/structure/window/reinforced{dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{dir = 6; icon_state = "warning"},/area/rnd/xenobiology) "cln" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 1; frequency = 1441; icon_state = "map_injector"; id = "waste_in"; on = 1; pixel_y = 1},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/atmos) "clo" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; icon_state = "map_vent_out"; on = 1},/turf/simulated/floor,/area/engine/engine_airlock) -"clp" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/atmos) +"clp" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/visible/supply{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/engine/drone_fabrication) "clq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/light{dir = 1},/turf/simulated/floor,/area/atmos) "clr" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/turf/simulated/floor{dir = 8; icon_state = "yellow"},/area/engine/hallway) "cls" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/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{icon_state = "white"},/area/rnd/xenobiology) @@ -6115,7 +6115,7 @@ "cnE" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/atmospherics/unary/vent_pump{dir = 8; icon_state = "map_vent_out"; on = 1},/obj/machinery/light,/turf/simulated/floor{dir = 2; icon_state = "greencorner"},/area/medical/virologyaccess) "cnF" = (/obj/machinery/newscaster{pixel_y = 32},/obj/machinery/atmospherics/unary/vent_pump{icon_state = "map_vent_out"; on = 1},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) "cnG" = (/obj/machinery/atmospherics/valve/digital/open{name = "Mixed Air Outlet Valve"},/turf/simulated/floor{dir = 9; icon_state = "arrival"},/area/atmos) -"cnH" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/atmos) +"cnH" = (/obj/machinery/light{dir = 1},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor,/area/engine/engine_hallway) "cnI" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/turf/simulated/floor,/area/engine/atmos_monitoring) "cnJ" = (/obj/structure/sign/deathsposal,/turf/simulated/wall/r_wall,/area/medical/virology) "cnK" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/turf/simulated/floor,/area/engine/hallway) @@ -6175,7 +6175,7 @@ "coM" = (/obj/machinery/conveyor{dir = 4; id = "QMLoad"},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "cargo_bay_door"; locked = 1; name = "Cargo Docking Hatch"; req_access_txt = "13"},/turf/simulated/floor/plating,/area/quartermaster/storage) "coN" = (/obj/machinery/atmospherics/binary/pump/on{name = "External to Filter"},/turf/simulated/floor,/area/atmos) "coO" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/machinery/recharge_station,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_cyborg_station) -"coP" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/atmos) +"coP" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/atmos) "coQ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating/airless,/area/solar/starboard) "coR" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable,/turf/simulated/floor/plating/airless,/area/solar/starboard) "coS" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating/airless,/area/solar/port) @@ -6213,7 +6213,7 @@ "cpy" = (/obj/machinery/camera{c_tag = "Genetics Fore"; network = list("SS13")},/obj/machinery/light_switch{pixel_y = 28},/turf/simulated/floor/plating,/area/medical/genetics) "cpz" = (/obj/structure/table,/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/item/weapon/storage/box/gloves{pixel_x = 4; pixel_y = 4},/obj/item/weapon/storage/box/masks{pixel_y = 0},/turf/simulated/floor{tag = "icon-whiteblue (SOUTHEAST)"; icon_state = "whiteblue"; dir = 6},/area/medical/medbay3) "cpA" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) -"cpB" = (/obj/machinery/portable_atmospherics/canister/air,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/atmos) +"cpB" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/atmos) "cpC" = (/obj/machinery/firealarm{dir = 4; layer = 3.3; pixel_x = 26},/turf/simulated/floor{dir = 2; icon_state = "yellowcorner"},/area/hallway/primary/aft) "cpD" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/engine/locker_room) "cpE" = (/obj/structure/closet/secure_closet/engineering_personal,/obj/machinery/light{dir = 1},/obj/item/weapon/tank/emergency_oxygen/engi,/turf/simulated/floor,/area/engine/locker_room) @@ -6221,7 +6221,7 @@ "cpG" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) "cpH" = (/obj/machinery/atmospherics/pipe/tank/phoron{dir = 2; volume = 3200},/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator) "cpI" = (/obj/effect/decal/cleanable/blood/oil{amount = 0},/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cpJ" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "0"; req_one_access_txt = "10;24"},/turf/simulated/floor/plating,/area/engine/engine_hallway) +"cpJ" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/atmos) "cpK" = (/obj/machinery/portable_atmospherics/canister/phoron,/turf/simulated/floor/plating,/area/engine/storage_hard) "cpL" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{dir = 8; icon_state = "yellowcorner"},/area/hallway/primary/aft) "cpM" = (/obj/machinery/light{dir = 1},/obj/machinery/disposal,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/medical/exam_room) @@ -6290,14 +6290,14 @@ "cqX" = (/obj/structure/sign/biohazard,/turf/simulated/wall,/area/medical/virologyaccess) "cqY" = (/obj/machinery/atmospherics/pipe/manifold/visible/scrubbers{dir = 1; icon_state = "map"; tag = "icon-manifold (NORTH)"},/turf/simulated/floor,/area/atmos) "cqZ" = (/obj/machinery/atmospherics/binary/pump{dir = 4; name = "O2 to Pure"},/turf/simulated/floor,/area/atmos) -"cra" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/maintenance{name = "Drone Fabrication"; req_one_access_txt = "10;24"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/turf/simulated/floor/plating,/area/engine/drone_fabrication) -"crb" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/turf/simulated/floor/plating,/area/engine/drone_fabrication) +"cra" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/atmos) +"crb" = (/obj/machinery/portable_atmospherics/canister/air,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/atmos) "crc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/machinery/door/airlock/glass_engineering{name = "Engineering Workshop"; req_access_txt = "11"},/turf/simulated/floor,/area/engine/workshop) "crd" = (/obj/structure/closet/crate,/obj/item/stack/sheet/glass{amount = 50},/turf/simulated/floor/plating,/area/construction) "cre" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; icon_state = "map_vent_out"; on = 1},/turf/simulated/floor/plating,/area/engine/storage_hard) "crf" = (/obj/structure/stool/bed/chair/office/dark{dir = 4},/obj/effect/landmark/start{name = "Chemist"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{dir = 4; icon_state = "whiteyellow"},/area/medical/chemistry) "crg" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/machinery/door/airlock/engineering{name = "Engineering Hard Storage"; req_access_txt = "11"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/engine/workshop) -"crh" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/turf/simulated/floor/plating,/area/engine/drone_fabrication) +"crh" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "0"; req_one_access_txt = "10;24"},/turf/simulated/floor/plating,/area/engine/engine_hallway) "cri" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/engine/locker_room) "crj" = (/turf/simulated/wall/r_wall,/area/engine/engine_smes) "crk" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor,/area/engine/locker_room) @@ -6311,7 +6311,7 @@ "crs" = (/obj/structure/table,/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},/turf/simulated/floor{dir = 9; icon_state = "blue"},/area/medical/morgue) "crt" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/hallway/primary/central) "cru" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/engine/engine_eva) -"crv" = (/obj/machinery/computer/security/engineering{network = list("Engineering","Power Alarms","Atmosphere Alarms","Fire Alarms","Atmospherics")},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/engine/atmos_monitoring) +"crv" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/maintenance{name = "Drone Fabrication"; req_one_access_txt = "10;24"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/turf/simulated/floor/plating,/area/engine/drone_fabrication) "crw" = (/obj/structure/table,/obj/machinery/cell_charger,/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_y = 20},/turf/simulated/floor,/area/quartermaster/storage) "crx" = (/obj/structure/stool/bed/chair/office/dark{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/cyan,/turf/simulated/floor,/area/hallway/primary/aft) "cry" = (/obj/structure/table/reinforced,/obj/item/weapon/clipboard,/turf/simulated/floor,/area/hallway/primary/aft) @@ -6323,7 +6323,7 @@ "crE" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor,/area/engine/engine_eva) "crF" = (/obj/structure/table,/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/item/weapon/storage/box/cups{pixel_x = 0; pixel_y = 0},/turf/simulated/floor{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/reception) "crG" = (/obj/structure/sign/chemistry,/turf/simulated/wall/r_wall,/area/medical/chemistry) -"crH" = (/obj/machinery/atmospherics/unary/vent_pump{icon_state = "map_vent_out"; on = 1},/turf/simulated/floor,/area/atmos) +"crH" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/turf/simulated/floor/plating,/area/engine/drone_fabrication) "crI" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/obj/structure/sign/securearea{desc = "A warning sign which reads 'HOT EXHAUST'."; name = "\improper HOT EXHAUST"; pixel_x = -32},/turf/simulated/floor/plating/airless,/area) "crJ" = (/obj/machinery/door/poddoor{dir = 4; id = "disvent"; name = "Incinerator Vent"},/turf/simulated/floor/engine/vacuum,/area/maintenance/incinerator) "crK" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/storage/emergency) @@ -6619,7 +6619,7 @@ "cxo" = (/turf/simulated/floor/beach/sand{tag = "icon-desert1"; icon_state = "desert1"},/area/holodeck/source_beach) "cxp" = (/turf/simulated/floor/beach/sand{tag = "icon-desert4"; icon_state = "desert4"},/area/holodeck/source_beach) "cxq" = (/turf/simulated/floor/beach/sand{tag = "icon-desert0"; icon_state = "desert0"},/area/holodeck/source_beach) -"cxr" = (/obj/structure/table/holotable,/obj/machinery/readybutton{pixel_y = -24},/turf/simulated/floor/holofloor{dir = 9; icon_state = "red"},/area/holodeck/source_thunderdomecourt) +"cxr" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/unary/heater{dir = 2; icon_state = "heater"},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/atmos) "cxs" = (/obj/structure/table/holotable,/obj/item/clothing/head/helmet/thunderdome,/obj/item/clothing/suit/armor/tdome/red,/obj/item/clothing/under/color/red,/obj/item/weapon/holo/esword/red,/turf/simulated/floor/holofloor{dir = 1; icon_state = "red"},/area/holodeck/source_thunderdomecourt) "cxt" = (/obj/structure/table/holotable,/turf/simulated/floor/holofloor{dir = 5; icon_state = "red"},/area/holodeck/source_thunderdomecourt) "cxu" = (/obj/structure/table/holotable,/obj/item/clothing/gloves/boxing/hologlove,/turf/simulated/floor/holofloor{dir = 9; icon_state = "red"},/area/holodeck/source_boxingcourt) @@ -6710,7 +6710,7 @@ "czb" = (/turf/simulated/floor/holofloor{dir = 6; icon_state = "green"},/area/holodeck/source_basketball) "czc" = (/obj/structure/table/holotable,/turf/simulated/floor/holofloor{dir = 10; icon_state = "green"},/area/holodeck/source_thunderdomecourt) "czd" = (/obj/structure/table/holotable,/obj/item/clothing/head/helmet/thunderdome,/obj/item/clothing/suit/armor/tdome/green,/obj/item/clothing/under/color/green,/obj/item/weapon/holo/esword/green,/turf/simulated/floor/holofloor{dir = 2; icon_state = "green"},/area/holodeck/source_thunderdomecourt) -"cze" = (/obj/structure/table/holotable,/obj/machinery/readybutton{pixel_y = -24},/turf/simulated/floor/holofloor{dir = 6; icon_state = "green"},/area/holodeck/source_thunderdomecourt) +"cze" = (/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) "czf" = (/obj/structure/table/holotable,/obj/item/clothing/gloves/boxing/hologlove{icon_state = "boxinggreen"; item_state = "boxinggreen"},/turf/simulated/floor/holofloor{dir = 10; icon_state = "green"},/area/holodeck/source_boxingcourt) "czg" = (/turf/simulated/floor/holofloor{dir = 2; icon_state = "green"},/area/holodeck/source_boxingcourt) "czh" = (/obj/structure/table/holotable,/obj/item/clothing/gloves/boxing/hologlove{icon_state = "boxinggreen"; item_state = "boxinggreen"},/turf/simulated/floor/holofloor{dir = 6; icon_state = "green"},/area/holodeck/source_boxingcourt) @@ -6918,7 +6918,7 @@ "cDb" = (/obj/structure/table,/obj/item/weapon/clipboard,/obj/item/weapon/pen,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/evac) "cDc" = (/turf/space,/area/shuttle/escape_pod5/centcom) "cDd" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1; direction = 2; name = "thrower_throwdown"; tiles = 0},/turf/space/transit/north/shuttlespace_ns11,/area) -"cDe" = (/obj/machinery/atmospherics/binary/pump{dir = 1; name = "Pure to Mix"},/turf/simulated/floor,/area/atmos) +"cDe" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/turf/simulated/floor/plating,/area/engine/drone_fabrication) "cDf" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 6; icon_state = "intact"; tag = "icon-intact-f (SOUTHEAST)"},/turf/simulated/wall/r_wall,/area/atmos) "cDg" = (/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "gravsnow_corner"; dir = 4},/area/syndicate_mothership) "cDh" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows"; dir = 9},/area/syndicate_mothership) @@ -6982,7 +6982,7 @@ "cEn" = (/obj/structure/stool/bed/chair{dir = 4},/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor4"},/area/centcom/evac) "cEo" = (/obj/structure/stool/bed/chair{dir = 1},/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor4"},/area/centcom/evac) "cEp" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; icon_state = "map_vent_out"; on = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) -"cEq" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/hydroponics{closed_system = 1; name = "isolation tray"},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology/xenoflora) +"cEq" = (/obj/machinery/computer/security/engineering{network = list("Engineering","Power Alarms","Atmosphere Alarms","Fire Alarms","Atmospherics")},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/engine/atmos_monitoring) "cEr" = (/obj/machinery/door/airlock/research{name = "Xenoflora Research"; req_access_txt = "47"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology/xenoflora) "cEs" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) "cEt" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) @@ -6993,8 +6993,8 @@ "cEy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/medical/virologyaccess) "cEz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plating,/area/maintenance/asmaint) "cEA" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'FOURTH WALL'."; name = "\improper FOURTH WALL"; pixel_x = -32},/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/area/syndicate_mothership) -"cEB" = (/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/obj/machinery/light_switch{pixel_x = -6; pixel_y = 26},/obj/machinery/atmospherics/portables_connector,/turf/simulated/floor{dir = 4; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) -"cEC" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/structure/disposalpipe/trunk,/obj/machinery/disposal,/turf/simulated/floor{dir = 8; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) +"cEB" = (/obj/machinery/atmospherics/unary/vent_pump{icon_state = "map_vent_out"; on = 1},/turf/simulated/floor,/area/atmos) +"cEC" = (/obj/machinery/atmospherics/binary/pump{dir = 1; name = "Pure to Mix"},/turf/simulated/floor,/area/atmos) "cED" = (/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/obj/structure/flora/grass/brown,/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "gravsnow_corner"; dir = 8},/area/syndicate_mothership) "cEE" = (/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/turf/unsimulated/floor{dir = 1; icon = 'icons/turf/snow.dmi'; icon_state = "gravsnow_corner"},/area/syndicate_mothership) "cEF" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/red,/turf/simulated/floor/wood,/area/syndicate_mothership) @@ -7010,15 +7010,15 @@ "cEP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) "cEQ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/plating,/area/syndicate_station/start) "cER" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) -"cES" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/unary/heater{dir = 2; icon_state = "heater"},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/atmos) +"cES" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/engine/hallway) "cET" = (/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "gravsnow_corner"; dir = 10},/area/syndicate_mothership) -"cEU" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) +"cEU" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/junction{dir = 8; icon_state = "pipe-j2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor,/area/engine/hallway) "cEV" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/machinery/door/airlock/engineering{name = "Construction Area"; req_access_txt = "32"},/turf/simulated/floor/plating,/area/construction) "cEW" = (/obj/machinery/sleeper,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) "cEX" = (/obj/machinery/sleep_console,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) "cEY" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) "cEZ" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/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_txt = "13"},/turf/simulated/floor/plating/airless,/area/solar/port) -"cFa" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/engine/hallway) +"cFa" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/atmos) "cFb" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; icon_state = "map_vent_out"; on = 1},/turf/simulated/floor{dir = 1; icon_state = "whiteyellowcorner"},/area/crew_quarters/sleep/engi_wash) "cFc" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/engine/locker_room) "cFd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/machinery/door/airlock/glass_engineering{name = "Engineering Locker Room"; req_one_access_txt = "11;24"},/turf/simulated/floor,/area/engine/locker_room) @@ -7538,7 +7538,7 @@ "cOX" = (/turf/simulated/wall,/area/maintenance/engi_engine) "cOY" = (/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom) "cOZ" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom) -"cPa" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/junction{dir = 8; icon_state = "pipe-j2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor,/area/engine/hallway) +"cPa" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor,/area/atmos) "cPb" = (/turf/unsimulated/beach/sand{tag = "icon-desert"; icon_state = "desert"},/area/centcom/ferry) "cPc" = (/turf/unsimulated/floor{tag = "icon-whitehall (EAST)"; icon_state = "whitehall"; dir = 4},/area/centcom/holding) "cPd" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/engi_engine) @@ -7586,7 +7586,7 @@ "cPT" = (/obj/structure/table,/obj/item/weapon/FixOVein{pixel_x = -6; pixel_y = 1},/turf/unsimulated/floor{tag = "icon-whitecorner"; name = "plating"; icon_state = "whitecorner"},/area/centcom/holding) "cPU" = (/turf/simulated/shuttle/wall{icon_state = "swall_s5"; dir = 2},/area/shuttle/transport1/centcom) "cPV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/camera{c_tag = "Engineering Core West"; dir = 8; network = list("SS13","Supermatter")},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engine/engine_room) -"cPW" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/atmos) +"cPW" = (/obj/machinery/atmospherics/binary/pump{dir = 8; name = "Isolation to Waste"},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) "cPX" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom) "cPY" = (/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/plating/airless,/area/shuttle/transport1/centcom) "cPZ" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"; dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/space,/area/shuttle/transport1/centcom) @@ -7643,7 +7643,7 @@ "cQY" = (/obj/structure/stool/bed/chair/wood/wings{icon_state = "wooden_chair_wings"; dir = 8},/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/holding) "cQZ" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/meatsteak,/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/holding) "cRa" = (/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/holding) -"cRb" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor,/area/atmos) +"cRb" = (/obj/machinery/atmospherics/unary/cold_sink/freezer{dir = 2; icon_state = "freezer"},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/atmos) "cRc" = (/turf/simulated/floor/plating{dir = 8; icon_state = "warnplatecorner"},/area/engine/engine_room) "cRd" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/turf/simulated/floor,/area/engine/engineering_monitoring) "cRe" = (/obj/machinery/door/airlock/glass_engineering{name = "Engineering Hallway"; req_one_access_txt = "10;24"},/obj/machinery/door/firedoor/border_only{dir = 1; layer = 2.4; name = "Engineering Firelock"},/turf/simulated/floor,/area/engine/hallway) @@ -7729,7 +7729,7 @@ "cSG" = (/obj/structure/stool/bed/chair,/obj/effect/landmark{name = "tdomeobserve"},/turf/unsimulated/floor{icon_state = "redbluefull"; dir = 8},/area/tdome/tdomeobserve) "cSH" = (/obj/structure/disposalpipe/trunk,/obj/structure/disposaloutlet,/turf/unsimulated/floor{icon_state = "redbluefull"; dir = 8},/area/tdome/tdomeobserve) "cSI" = (/obj/machinery/vending/snack,/turf/unsimulated/floor{icon_state = "redbluefull"; dir = 8},/area/tdome/tdomeobserve) -"cSJ" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/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},/turf/unsimulated/floor{icon_state = "white"},/area/tdome) +"cSJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) "cSK" = (/obj/structure/table,/obj/machinery/microwave,/turf/unsimulated/floor{icon_state = "white"},/area/tdome) "cSL" = (/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/unary/vent_scrubber{on = 1},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) "cSM" = (/obj/machinery/computer/security/telescreen,/turf/unsimulated/floor{icon_state = "redbluefull"; dir = 8},/area/tdome/tdomeobserve) @@ -7760,7 +7760,7 @@ "cTl" = (/obj/machinery/camera{pixel_x = 12; pixel_y = -10; network = list("thunder"); c_tag = "Green Team"},/obj/effect/landmark{name = "tdome1"},/turf/unsimulated/floor{name = "plating"},/area/tdome/tdome1) "cTm" = (/obj/machinery/atmospherics/pipe/vent,/turf/simulated/floor/bluegrid,/area/tdome) "cTn" = (/obj/machinery/camera{pixel_x = 10; network = list("thunder"); c_tag = "Arena"},/turf/simulated/floor/bluegrid,/area/tdome) -"cTo" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) +"cTo" = (/obj/machinery/atmospherics/binary/pump{name = "Filter to Port"},/turf/simulated/floor,/area/atmos) "cTp" = (/turf/simulated/shuttle/wall{dir = 2; icon_state = "swall_floor_f9"},/area/centcom/evac) "cTq" = (/turf/simulated/shuttle/wall{dir = 2; icon_state = "swall_floor_f5"},/area/centcom/evac) "cTr" = (/obj/machinery/door/poddoor{id = "thunderdomegen"; name = "General Supply"},/turf/unsimulated/floor{icon_state = "floor"},/area/tdome) @@ -7790,12 +7790,12 @@ "cTP" = (/obj/effect/overlay/palmtree_l,/turf/unsimulated/beach/sand,/area/beach) "cTQ" = (/obj/effect/overlay/palmtree_r,/obj/effect/overlay/coconut,/turf/unsimulated/beach/sand,/area/beach) "cTR" = (/obj/structure/table,/obj/machinery/recharger{pixel_y = 4},/turf/unsimulated/floor{icon_state = "redyellowfull"; dir = 5},/area/tdome/tdomeadmin) -"cTS" = (/obj/structure/table{dir = 5; icon_state = "tabledir"},/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,/turf/unsimulated/floor{icon_state = "redyellowfull"; dir = 5},/area/tdome/tdomeadmin) +"cTS" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) "cTT" = (/obj/machinery/computer/pod{id = "thunderdomeaxe"; name = "Thunderdome Axe Supply"},/turf/unsimulated/floor{icon_state = "redyellowfull"; dir = 5},/area/tdome/tdomeadmin) "cTU" = (/obj/machinery/computer/pod{id = "thunderdomegen"; name = "Thunderdome General Supply"},/turf/unsimulated/floor{icon_state = "redyellowfull"; dir = 5},/area/tdome/tdomeadmin) "cTV" = (/obj/machinery/computer/pod{id = "thunderdomehea"; name = "Thunderdome Heavy Supply"},/turf/unsimulated/floor{icon_state = "redyellowfull"; dir = 5},/area/tdome/tdomeadmin) "cTW" = (/obj/machinery/computer/pod{id = "thunderdome"; name = "Thunderdome Blast Door Control"},/turf/unsimulated/floor{icon_state = "redyellowfull"; dir = 5},/area/tdome/tdomeadmin) -"cTX" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/obj/item/stack/medical/ointment,/obj/item/stack/medical/ointment,/obj/item/stack/medical/ointment,/turf/unsimulated/floor{icon_state = "redyellowfull"; dir = 5},/area/tdome/tdomeadmin) +"cTX" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 4},/turf/simulated/floor{dir = 6; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) "cTY" = (/obj/structure/table,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/bruise_pack,/turf/unsimulated/floor{icon_state = "redyellowfull"; dir = 5},/area/tdome/tdomeadmin) "cTZ" = (/obj/structure/table,/obj/item/weapon/storage/box/handcuffs,/turf/unsimulated/floor{icon_state = "redyellowfull"; dir = 5},/area/tdome/tdomeadmin) "cUa" = (/obj/structure/table,/turf/unsimulated/floor{icon_state = "redyellowfull"; dir = 5},/area/tdome/tdomeadmin) @@ -7883,10 +7883,10 @@ "cVE" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1331; master_tag = "vox_west_control"; req_one_access_txt = "150"},/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/shuttle/vox/station) "cVF" = (/turf/simulated/wall,/area/maintenance/engi_shuttle) "cVG" = (/turf/space,/area/shuttle/constructionsite/station) -"cVH" = (/obj/machinery/atmospherics/unary/cold_sink/freezer{dir = 2; icon_state = "freezer"},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/atmos) -"cVI" = (/obj/machinery/atmospherics/binary/pump{name = "Filter to Port"},/turf/simulated/floor,/area/atmos) +"cVH" = (/obj/machinery/atmospherics/binary/pump{dir = 1; name = "Port to Filter"},/turf/simulated/floor,/area/atmos) +"cVI" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/turf/simulated/floor,/area/engine/hallway) "cVJ" = (/turf/simulated/shuttle/floor{icon_state = "floor4"; oxygen = 0},/area/shuttle/vox/station) -"cVK" = (/obj/machinery/atmospherics/binary/pump{dir = 1; name = "Port to Filter"},/turf/simulated/floor,/area/atmos) +"cVK" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light,/turf/simulated/floor,/area/engine/hallway) "cVL" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1331; master_tag = "vox_east_control"; req_access_txt = "150"},/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/shuttle/vox/station) "cVM" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 0},/turf/unsimulated/floor{name = "plating"},/area/centcom/evac) "cVN" = (/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 0},/turf/unsimulated/wall,/area/centcom/evac) @@ -7900,11 +7900,11 @@ "cVV" = (/obj/machinery/light{dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/rnd/xenobiology) "cVW" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/obj/item/weapon/lighter/zippo,/obj/item/weapon/storage/fancy/cigarettes,/turf/unsimulated/floor{icon_state = "redbluefull"; dir = 8},/area/tdome/tdomeobserve) "cVX" = (/turf/unsimulated/wall/fakeglass,/area/wizard_station) -"cVY" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/turf/unsimulated/floor{icon_state = "redbluefull"; dir = 8},/area/tdome/tdomeobserve) +"cVY" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) "cVZ" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/o2{layer = 2.8; pixel_x = 4; pixel_y = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/fire{layer = 2.9; pixel_x = 2; pixel_y = 3},/turf/unsimulated/floor{dir = 0; icon_state = "whitegreen"},/area/centcom/holding) "cWa" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/centcom/control) "cWb" = (/obj/machinery/door/airlock/external{name = "Arrivals Bar Airlock"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/ferry) -"cWc" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/turf/simulated/floor,/area/engine/hallway) +"cWc" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor,/area/engine/hallway) "cWd" = (/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/poddoor{icon_state = "pdoor1"; id = "EngineEmitterPort"; layer = 3.3; name = "Engine Blast Doors"},/turf/simulated/floor/plating,/area/engine/engine_room) "cWe" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) "cWf" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 30},/obj/item/weapon/storage/firstaid/o2{layer = 2.8; pixel_x = 4; pixel_y = 6},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) @@ -7913,18 +7913,18 @@ "cWi" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) "cWj" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1331; master_tag = "vox_east_control"; req_one_access_txt = "150"},/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/shuttle/vox/station) "cWk" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/holding) -"cWl" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light,/turf/simulated/floor,/area/engine/hallway) +"cWl" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/machinery/door/airlock/glass_atmos{name = "Atmospherics"; req_access_txt = "24"},/turf/simulated/floor,/area/atmos) "cWm" = (/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "virology_sensor"; pixel_x = 25; pixel_y = 12},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "virology_pump"; tag_exterior_door = "virology_outer"; frequency = 1379; id_tag = "virology_airlock"; tag_interior_door = "virology_inner"; pixel_x = 25; req_access_txt = "13"; tag_chamber_sensor = "virology_sensor"},/turf/simulated/floor/plating,/area/maintenance/asmaint) "cWn" = (/obj/machinery/atmospherics/pipe/manifold/hidden,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/holding) -"cWo" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor,/area/engine/hallway) +"cWo" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/turf/simulated/floor,/area/atmos) "cWp" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor/plating,/area/maintenance/engi_shuttle) "cWq" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/plating,/area/maintenance/engi_shuttle) "cWr" = (/obj/structure/stool/bed/chair{dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/engi_shuttle) -"cWs" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/machinery/door/airlock/glass_atmos{name = "Atmospherics"; req_access_txt = "24"},/turf/simulated/floor,/area/atmos) +"cWs" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/hologram/holopad,/obj/structure/disposalpipe/sortjunction/flipped{dir = 8; sortType = "Drone Fabrication"; name = "Drone Fabrication"},/turf/simulated/floor,/area/atmos) "cWt" = (/obj/machinery/embedded_controller/radio/airlock/access_controller{tag_exterior_door = "incinerator_airlock_exterior"; id_tag = "incinerator_access_control"; tag_interior_door = "incinerator_airlock_interior"; name = "Incinerator Access Console"; pixel_x = -6; pixel_y = -26; req_access_txt = "12"},/obj/machinery/ignition_switch{id = "Incinerator"; pixel_x = 6; pixel_y = -24},/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator) "cWu" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology) -"cWv" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/turf/simulated/floor,/area/atmos) -"cWw" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/hologram/holopad,/obj/structure/disposalpipe/sortjunction/flipped{dir = 8; sortType = "Drone Fabrication"; name = "Drone Fabrication"},/turf/simulated/floor,/area/atmos) +"cWv" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/obj/machinery/atmospherics/binary/pump{dir = 1; name = "External to Filter"},/turf/simulated/floor,/area/atmos) +"cWw" = (/obj/machinery/atmospherics/binary/pump{dir = 4; name = "Port to External"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/turf/simulated/floor,/area/atmos) "cWx" = (/turf/simulated/floor/plating,/area/maintenance/engi_shuttle) "cWy" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/engi_shuttle) "cWz" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) @@ -8444,10 +8444,10 @@ "dgt" = (/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{dir = 2},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/rnd/xenobiology) "dgu" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1; direction = 2; name = "thrower_throwdown"; tiles = 0},/turf/space,/area) "dgv" = (/obj/structure/sink/kitchen{pixel_y = 28},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership) -"dgw" = (/obj/structure/table,/obj/item/device/analyzer/plant_analyzer,/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) +"dgw" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/atmos) "dgx" = (/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{dir = 2},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/rnd/xenobiology/xenoflora) "dgy" = (/obj/structure/table,/obj/item/weapon/storage/box/drinkingglasses{pixel_x = 1; pixel_y = 4},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership) -"dgz" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor{tag = "icon-whitegreen_v (SOUTHWEST)"; icon_state = "whitegreen_v"; dir = 10},/area/rnd/xenobiology/xenoflora) +"dgz" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/machinery/atmospherics/pipe/manifold/visible/scrubbers{dir = 4; icon_state = "map"; tag = "icon-manifold (WEST)"},/turf/simulated/floor,/area/atmos) "dgA" = (/obj/structure/table,/obj/machinery/chem_dispenser/soda{pixel_x = 2; pixel_y = 6},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership) "dgB" = (/turf/simulated/floor{tag = "icon-whitegreen_v (SOUTHWEST)"; icon_state = "whitegreen_v"; dir = 10},/area/rnd/xenobiology/xenoflora) "dgC" = (/obj/machinery/washing_machine,/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/patient_wing) @@ -8466,7 +8466,7 @@ "dgP" = (/obj/machinery/door/window/northright{name = "Xenoflora Containment"; req_access_txt = "47"},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora_storage) "dgQ" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora_storage) "dgR" = (/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{dir = 2},/turf/simulated/floor/plating,/area/rnd/xenobiology/xenoflora_storage) -"dgS" = (/obj/machinery/atmospherics/pipe/manifold/visible,/turf/simulated/floor{dir = 2; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) +"dgS" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{tag = "icon-intact (SOUTHEAST)"; icon_state = "intact"; dir = 6},/turf/simulated/floor,/area/atmos) "dgT" = (/obj/structure/sign/biohazard,/turf/simulated/wall/r_wall,/area/rnd/xenobiology/xenoflora) "dgU" = (/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) "dgV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{tag = "icon-whitegreen (NORTHWEST)"; icon_state = "whitegreen"; dir = 9},/area/rnd/xenobiology/xenoflora) @@ -8520,9 +8520,9 @@ "dhR" = (/obj/structure/closet/wardrobe/black,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/maintenance/engi_engine) "dhS" = (/obj/machinery/light,/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = -32},/turf/simulated/floor{dir = 8; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) "dhT" = (/obj/machinery/light,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora_storage) -"dhU" = (/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/simulated/floor{dir = 2; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) +"dhU" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) "dhV" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/reagent_dispensers/watertank,/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor{dir = 8; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) -"dhW" = (/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor{dir = 6; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) +"dhW" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_Toxins = 0},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) "dhX" = (/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{dir = 2},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) "dhY" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/reagent_dispensers/watertank,/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor{dir = 4; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) "dhZ" = (/obj/machinery/light{dir = 1},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/turf/simulated/floor{dir = 4; icon_state = "bluecorner"},/area/medical/virologyaccess) @@ -8565,7 +8565,7 @@ "diK" = (/turf/unsimulated/beach/sand{tag = "icon-desert"; icon_state = "desert"},/obj/item/weapon/inflatable_duck,/turf/unsimulated/floor{tag = "icon-siding4"; name = "plating"; icon_state = "siding4"},/area/centcom/holding) "diL" = (/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/tcommsat/entrance) "diM" = (/obj/item/weapon/inflatable_duck,/turf/unsimulated/beach/sand{tag = "icon-desert"; icon_state = "desert"},/area/centcom/ferry) -"diN" = (/obj/structure/stool,/turf/simulated/floor{dir = 2; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) +"diN" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_shuttle_hatch"; locked = 1; name = "Shuttle Hatch"; req_access_txt = "13"},/obj/machinery/mech_sensor{dir = 8; frequency = 1380; id_tag = "escape_shuttle_hatch"; pixel_y = 19},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom) "diO" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "centcom_dock_airlock"; locked = 1; name = "Arrivals Airlock"; req_access_txt = "13"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/evac) "diP" = (/obj/structure/table/reinforced,/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/metal{amount = 50; pixel_x = 2; pixel_y = 2},/obj/item/stack/sheet/metal{amount = 50; pixel_x = 2; pixel_y = 2},/obj/item/stack/sheet/plasteel{amount = 50},/obj/item/stack/sheet/plasteel{amount = 50},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/briefcase/inflatable,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom) "diQ" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "centcom_shuttle_hatch"; locked = 1; name = "Shuttle Hatch"; req_access_txt = "13"},/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom) @@ -8969,7 +8969,7 @@ "dqy" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/research_outpost/hallway) "dqz" = (/obj/machinery/atmospherics/pipe/manifold4w/visible/cyan,/obj/machinery/meter,/turf/simulated/floor/plating,/area/research_outpost/atmos) "dqA" = (/obj/structure/mirror{dir = 4; pixel_x = -32; pixel_y = 0},/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership) -"dqB" = (/obj/machinery/atmospherics/omni/mixer{on = 1; tag_east = 2; tag_north = 0; tag_north_con = null; tag_south = 1; tag_south_con = 0.8; tag_west = 1; tag_west_con = 0.2},/turf/simulated/floor/plating,/area/research_outpost/atmos) +"dqB" = (/obj/structure/table/holotable,/obj/machinery/readybutton{pixel_y = 0},/turf/simulated/floor/holofloor{dir = 9; icon_state = "red"},/area/holodeck/source_thunderdomecourt) "dqC" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"; tag = "icon-intact (EAST)"},/obj/machinery/atmospherics/pipe/simple/visible/yellow,/turf/simulated/floor/plating,/area/research_outpost/atmos) "dqD" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/light/small,/turf/simulated/floor,/area/research_outpost/atmos) "dqE" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 8},/obj/item/weapon/pen{pixel_y = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) @@ -8992,7 +8992,7 @@ "dqV" = (/obj/structure/transit_tube{icon_state = "D-SE"},/obj/structure/lattice,/turf/space,/area) "dqW" = (/obj/structure/lattice,/obj/structure/transit_tube{icon_state = "E-SW"},/turf/space,/area) "dqX" = (/obj/structure/lattice,/obj/structure/transit_tube,/turf/space,/area) -"dqY" = (/obj/machinery/atmospherics/omni/filter{on = 1; tag_east = 4; tag_north = 2; tag_south = 1; tag_west = 3},/turf/simulated/floor/plating,/area/research_outpost/atmos) +"dqY" = (/obj/structure/table/holotable,/obj/machinery/readybutton{pixel_y = 0},/turf/simulated/floor/holofloor{dir = 6; icon_state = "green"},/area/holodeck/source_thunderdomecourt) "dqZ" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/research_outpost/atmos) "dra" = (/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{dir = 5},/turf/simulated/floor/plating,/area/research_outpost/atmos) "drb" = (/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/yellow,/turf/simulated/floor/plating,/area/research_outpost/atmos) @@ -9047,7 +9047,7 @@ "drY" = (/obj/structure/transit_tube{icon_state = "D-NE"},/obj/structure/lattice,/turf/space,/area) "drZ" = (/obj/structure/transit_tube{icon_state = "S-NW"},/obj/structure/lattice,/turf/space,/area) "dsa" = (/turf/simulated/mineral/random,/area/mine/unexplored) -"dsb" = (/obj/structure/closet/crate/hydroponics,/obj/item/weapon/shovel/spade,/obj/item/weapon/reagent_containers/glass/bucket,/obj/item/weapon/minihoe,/obj/item/weapon/reagent_containers/spray/plantbgone{pixel_x = 13; pixel_y = 5},/obj/item/weedkiller/triclopyr,/obj/item/nutrient/ez,/turf/simulated/floor/plating,/area/research_outpost/maintstore1) +"dsb" = (/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,/turf/unsimulated/floor{icon_state = "white"},/area/tdome) "dsc" = (/obj/machinery/light/small,/obj/structure/closet/walllocker/emerglocker/north{dir = 1; pixel_y = -32},/turf/simulated/floor/plating,/area/research_outpost/maintstore1) "dsd" = (/obj/machinery/door/airlock/external{frequency = 1331; icon_state = "door_closed"; id_tag = "synd_outer"; locked = 0; name = "Ship External Access"; req_access = null; req_access_txt = "150"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "smindicate"; name = "Outer Airlock"; opacity = 0},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1331; master_tag = "synd_airlock"; name = "exterior access button"; pixel_x = -25; pixel_y = 7; req_access_txt = "150"},/turf/simulated/shuttle/plating,/area/syndicate_station/start) "dse" = (/turf/simulated/floor,/area/research_outpost/maintstore1) @@ -9083,7 +9083,7 @@ "dsI" = (/obj/structure/table,/obj/item/weapon/storage/box/solution_trays,/turf/simulated/floor{dir = 4; icon_state = "whitebluecorner"},/area/research_outpost/sample) "dsJ" = (/obj/machinery/door/window/westleft{dir = 1; name = "Sample Preparation Loading"; req_access_txt = "65"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor{dir = 1; icon_state = "whiteblue"},/area/research_outpost/sample) "dsK" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor{dir = 1; icon_state = "bluecorner"},/area/research_outpost/sample) -"dsL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor{tag = "icon-whitegreen (NORTHWEST)"; icon_state = "whitegreen"; dir = 9},/area/rnd/xenobiology/xenoflora) +"dsL" = (/obj/structure/table,/obj/item/device/analyzer/plant_analyzer,/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora) "dsM" = (/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) "dsN" = (/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) "dsO" = (/obj/structure/sink{pixel_y = 30},/obj/structure/mirror{dir = 4; pixel_x = -32; pixel_y = 0},/turf/simulated/floor{icon_state = "showroomfloor"},/area/research_outpost/hallway) @@ -9563,7 +9563,7 @@ "dBU" = (/turf/simulated/wall/r_wall,/area/research_outpost/iso3) "dBV" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{dir = 2; icon_state = "whitepurple"},/area/research_outpost/hallway) "dBW" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor{dir = 2; icon_state = "whitepurple"},/area/research_outpost/hallway) -"dBX" = (/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology/xenoflora) +"dBX" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor{tag = "icon-whitegreen_v (SOUTHWEST)"; icon_state = "whitegreen_v"; dir = 10},/area/rnd/xenobiology/xenoflora) "dBY" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/sign/examroom{desc = "A guidance sign which reads 'ISOLATION ROOM TWO'"; name = "\improper ISOLATION ROOM TWO"; pixel_y = -32},/turf/simulated/floor{dir = 2; icon_state = "whitepurple"},/area/research_outpost/hallway) "dBZ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/firealarm{pixel_y = -24},/turf/simulated/floor{dir = 2; icon_state = "whitepurple"},/area/research_outpost/hallway) "dCa" = (/obj/machinery/bodyscanner,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) @@ -9606,7 +9606,7 @@ "dCL" = (/obj/structure/sign/nosmoking_2{pixel_y = -32},/obj/machinery/camera{c_tag = "Research Outpost Exotic Particles Lab"; dir = 4; network = list("Research","SS13")},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/research_outpost/harvesting) "dCM" = (/obj/machinery/alarm{dir = 1; pixel_y = -24},/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/research_outpost/harvesting) "dCN" = (/obj/machinery/artifact_scanpad,/obj/machinery/light/small,/turf/simulated/floor/bluegrid,/area/research_outpost/harvesting) -"dCO" = (/obj/effect/landmark{name = "blobstart"},/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora_storage) +"dCO" = (/obj/machinery/atmospherics/pipe/manifold/visible,/turf/simulated/floor{dir = 2; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) "dCP" = (/obj/structure/table,/obj/item/weapon/paper/crumpled,/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/mine/abandoned) "dCQ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/mine/abandoned) "dCR" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/plating,/area/mine/abandoned) @@ -9629,7 +9629,7 @@ "dDi" = (/obj/structure/table,/obj/item/weapon/scalpel,/obj/item/weapon/circular_saw{pixel_y = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) "dDj" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) "dDk" = (/obj/machinery/light/small{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/research_outpost/maintstore1) -"dDl" = (/obj/machinery/light,/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 0; pixel_y = -22},/obj/machinery/atmospherics/portables_connector{dir = 4},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora_storage) +"dDl" = (/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/simulated/floor{dir = 2; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) "dDm" = (/obj/structure/disposalpipe/segment{dir = 4},/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{icon_state = "vault"; dir = 5},/area/research_outpost/longtermstorage) "dDn" = (/obj/structure/closet/secure_closet/medical_wall{pixel_y = 0; req_access = null; req_access_txt = "150"},/obj/item/clothing/gloves/white,/obj/item/weapon/storage/box/syringes,/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/syndicate_station/start) "dDo" = (/obj/machinery/conveyor{dir = 2; id = "anotempload"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/research_outpost/maint) @@ -9697,7 +9697,7 @@ "dEy" = (/obj/structure/table,/obj/item/stack/medical/bruise_pack,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_mothership) "dEz" = (/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh{name = "Cuban Pete-Meat"},/obj/item/weapon/spacecash/c1,/turf/simulated/floor/engine,/area/tcommsat/computer) "dEA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/research_outpost/maintstore1) -"dEB" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/portable_atmospherics/hydroponics{closed_system = 1; name = "isolation tray"},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora_storage) +"dEB" = (/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,/turf/unsimulated/floor{icon_state = "redbluefull"; dir = 8},/area/tdome/tdomeobserve) "dEC" = (/turf/simulated/floor,/area/research_outpost/gearstore) "dED" = (/obj/machinery/recharge_station,/turf/simulated/floor,/area/research_outpost/gearstore) "dEE" = (/obj/machinery/mineral/unloading_machine,/turf/simulated/floor{icon_state = "floorgrime"},/area/research_outpost/tempstorage) @@ -9770,7 +9770,7 @@ "dFT" = (/obj/structure/table,/obj/item/weapon/storage/box/excavation,/obj/item/weapon/pickaxe,/obj/item/weapon/wrench,/obj/item/device/measuring_tape,/turf/simulated/floor,/area/research_outpost/gearstore) "dFU" = (/obj/structure/rack,/obj/item/weapon/crowbar,/obj/item/weapon/extinguisher,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_mothership) "dFV" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_r"},/turf/space,/area/syndicate_mothership) -"dFW" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_shuttle_hatch"; locked = 1; name = "Shuttle Hatch"; req_access_txt = "13"},/obj/machinery/mech_sensor{dir = 8; frequency = 1380; id_tag = "escape_shuttle_hatch"; pixel_y = 19},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom) +"dFW" = (/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,/turf/unsimulated/floor{icon_state = "redyellowfull"; dir = 5},/area/tdome/tdomeadmin) "dFX" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor{dir = 4; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/research_outpost/iso1) "dFY" = (/obj/machinery/artifact_scanpad,/turf/simulated/floor/bluegrid,/area/research_outpost/iso1) "dFZ" = (/obj/machinery/artifact_analyser,/turf/simulated/floor/bluegrid,/area/research_outpost/iso1) @@ -10342,7 +10342,7 @@ "dQT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/engine/atmos_monitoring) "dQU" = (/obj/machinery/computer/atmoscontrol,/turf/simulated/floor,/area/engine/atmos_monitoring) "dQV" = (/obj/machinery/firealarm{pixel_x = 32; pixel_y = 24},/turf/simulated/floor,/area/engine/atmos_monitoring) -"dQW" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/obj/machinery/atmospherics/binary/pump{dir = 1; name = "External to Filter"},/turf/simulated/floor,/area/atmos) +"dQW" = (/obj/structure/stool,/turf/simulated/floor{dir = 2; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) "dQX" = (/obj/machinery/door/airlock/glass{name = "Arrivals Processing"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry) "dQY" = (/obj/machinery/telecomms/broadcaster/preset_cent,/turf/unsimulated/floor{icon_state = "green"},/area/centcom/control) "dQZ" = (/obj/machinery/telecomms/server/presets/centcomm,/turf/unsimulated/floor{icon_state = "green"; dir = 1},/area/centcom/control) @@ -10488,7 +10488,7 @@ "dTJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "xenobio3"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/rnd/xenobiology) "dTK" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/obj/structure/window/reinforced,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{dir = 5; icon_state = "warning"},/area/rnd/xenobiology) "dTL" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 9; icon_state = "intact"; tag = "icon-intact-f (NORTHWEST)"},/turf/simulated/wall/r_wall,/area/research_outpost/iso1) -"dTM" = (/obj/machinery/atmospherics/binary/pump{dir = 4; name = "Port to External"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/turf/simulated/floor,/area/atmos) +"dTM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor{tag = "icon-whitegreen (NORTHWEST)"; icon_state = "whitegreen"; dir = 9},/area/rnd/xenobiology/xenoflora) "dTN" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engine/engine_room) "dTO" = (/obj/structure/window/shuttle,/obj/structure/grille,/turf/simulated/shuttle/plating,/area/centcom/evac) "dTP" = (/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -30},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/hallway/primary/starboard) @@ -10744,7 +10744,7 @@ "dYF" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) "dYG" = (/obj/machinery/atmospherics/pipe/simple/visible/supply,/obj/structure/disposalpipe/sortjunction/flipped{dir = 1; sortType = "Atmospherics"; name = "Atmospherics"},/turf/simulated/floor,/area/atmos) "dYH" = (/obj/machinery/door/airlock/maintenance{name = "Incinerator Access"; req_access_txt = null; req_one_access_txt = "5;12"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/incinerator) -"dYI" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/atmos) +"dYI" = (/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology/xenoflora) "dYJ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/sortjunction/flipped{dir = 2; sortType = "Engineering"; name = "Engineering"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/turf/simulated/floor,/area/engine/hallway) "dYK" = (/obj/machinery/computer/security/engineering{name = "Drone Monitoring Cameras"; network = list("Engineering")},/turf/simulated/floor/plating,/area/engine/drone_fabrication) "dYL" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/engine/drone_fabrication) @@ -10950,31 +10950,36 @@ "ecD" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "mining_outpost_airlock"; name = "interior access button"; pixel_x = -30; pixel_y = -25; req_access_txt = "0"; req_one_access_txt = "13;48"},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10; icon_state = "intact"; tag = "icon-intact-f (SOUTHWEST)"},/turf/simulated/floor,/area/mine/production) "ecE" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; icon_state = "map_vent_out"; on = 1},/turf/simulated/floor,/area/mine/production) "ecF" = (/obj/machinery/alarm{pixel_y = 24},/obj/machinery/atmospherics/unary/vent_pump{icon_state = "map_vent_out"; on = 1},/turf/simulated/floor{icon_state = "dark"},/area/mine/maintenance) -"ecG" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/machinery/atmospherics/pipe/manifold/visible/scrubbers{dir = 4; icon_state = "map"; tag = "icon-manifold (WEST)"},/turf/simulated/floor,/area/atmos) -"ecH" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{tag = "icon-intact (SOUTHEAST)"; icon_state = "intact"; dir = 6},/turf/simulated/floor,/area/atmos) -"ecI" = (/obj/machinery/computer/general_air_control{frequency = 1443; level = 3; name = "Distribution and Waste Monitor"; sensors = list("mair_in_meter" = "Mixed Air In", "air_sensor" = "Mixed Air Supply Tank", "mair_out_meter" = "Mixed Air Out", "dloop_atm_meter" = "Distribution Loop", "wloop_atm_meter" = "Waste Loop", "engine_waste_pre_filter_meter" = "Engine Waste - Pre-Filter", "engine_waste_post_filter_meter" = "Engine Waste - Post-Filter")},/obj/machinery/light{dir = 1},/turf/simulated/floor,/area/engine/atmos_monitoring) -"ecJ" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/atmospherics/portables_connector{dir = 8},/turf/simulated/floor/plating{icon_state = "platebot"; nitrogen = 0.01; oxygen = 0.01},/area/engine/engine_room) -"ecK" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/engine/engine_room) -"ecL" = (/obj/machinery/atmospherics/binary/pump{dir = 4; name = "Engine Filter Outpump"},/turf/simulated/floor/plating,/area/engine/engine_room) -"ecM" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 1; frequency = 1441; icon_state = "map_injector"; id = "cooling_in"; name = "Nitrogen Injector"; on = 1; pixel_y = 1; volume_rate = 200},/turf/simulated/floor/plating{dir = 1; icon_state = "warnplatecorner"},/area/engine/engine_room) -"ecN" = (/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 = "cooling_out"; initialize_directions = 1; internal_pressure_bound = 4000; internal_pressure_bound_default = 4000; on = 1; pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplatecorner"},/area/engine/engine_room) -"ecO" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/maintenance{name = "Engine Waste Handling"; req_one_access_txt = "10;24"},/turf/simulated/floor/plating,/area/maintenance/engi_engine) -"ecP" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/wall/r_wall,/area/maintenance/engi_engine) -"ecQ" = (/turf/simulated/wall/r_wall,/area/maintenance/engi_engine) -"ecR" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/camera{c_tag = "Engineering Core East"; dir = 4; network = list("SS13","Supermatter")},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/engine/engine_room) -"ecS" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/cyan,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 10},/area/engine/engine_room) -"ecT" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/yellow,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 6},/area/engine/engine_room) -"ecU" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/visible{dir = 1; icon_state = "map"; tag = "icon-manifold (NORTH)"},/obj/machinery/meter,/turf/simulated/floor/plating{dir = 1; icon_state = "warnplatecorner"},/area/engine/engine_room) -"ecV" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/engine/engine_room) -"ecW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door_control{id = "engine_maintenance"; name = "Door Bolt Control"; normaldoorcontrol = 1; pixel_x = 25; pixel_y = 0; req_access_txt = "0"; specialfunctions = 4},/turf/simulated/floor/plating{dir = 8; icon_state = "warnplatecorner"},/area/engine/engine_waste) -"ecX" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplatecorner"},/area/engine/engine_room) -"ecY" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_shuttle_hatch"; locked = 1; name = "Shuttle Hatch"; req_access_txt = "13"},/obj/machinery/mech_sensor{dir = 8; frequency = 1380; id_tag = "escape_shuttle_hatch"; pixel_y = -19},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom) +"ecG" = (/obj/effect/landmark{name = "blobstart"},/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora_storage) +"ecH" = (/obj/machinery/light,/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 0; pixel_y = -22},/obj/machinery/atmospherics/portables_connector{dir = 4},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora_storage) +"ecI" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/portable_atmospherics/hydroponics{closed_system = 1; name = "isolation tray"},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora_storage) +"ecJ" = (/obj/machinery/computer/general_air_control{frequency = 1443; level = 3; name = "Distribution and Waste Monitor"; sensors = list("mair_in_meter" = "Mixed Air In", "air_sensor" = "Mixed Air Supply Tank", "mair_out_meter" = "Mixed Air Out", "dloop_atm_meter" = "Distribution Loop", "wloop_atm_meter" = "Waste Loop", "engine_waste_pre_filter_meter" = "Engine Waste - Pre-Filter", "engine_waste_post_filter_meter" = "Engine Waste - Post-Filter")},/obj/machinery/light{dir = 1},/turf/simulated/floor,/area/engine/atmos_monitoring) +"ecK" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/atmospherics/portables_connector{dir = 8},/turf/simulated/floor/plating{icon_state = "platebot"; nitrogen = 0.01; oxygen = 0.01},/area/engine/engine_room) +"ecL" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/engine/engine_room) +"ecM" = (/obj/machinery/atmospherics/binary/pump{dir = 4; name = "Engine Filter Outpump"},/turf/simulated/floor/plating,/area/engine/engine_room) +"ecN" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 1; frequency = 1441; icon_state = "map_injector"; id = "cooling_in"; name = "Nitrogen Injector"; on = 1; pixel_y = 1; volume_rate = 200},/turf/simulated/floor/plating{dir = 1; icon_state = "warnplatecorner"},/area/engine/engine_room) +"ecO" = (/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 = "cooling_out"; initialize_directions = 1; internal_pressure_bound = 4000; internal_pressure_bound_default = 4000; on = 1; pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplatecorner"},/area/engine/engine_room) +"ecP" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/maintenance{name = "Engine Waste Handling"; req_one_access_txt = "10;24"},/turf/simulated/floor/plating,/area/maintenance/engi_engine) +"ecQ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/wall/r_wall,/area/maintenance/engi_engine) +"ecR" = (/turf/simulated/wall/r_wall,/area/maintenance/engi_engine) +"ecS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/camera{c_tag = "Engineering Core East"; dir = 4; network = list("SS13","Supermatter")},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/engine/engine_room) +"ecT" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/cyan,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 10},/area/engine/engine_room) +"ecU" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/yellow,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 6},/area/engine/engine_room) +"ecV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/visible{dir = 1; icon_state = "map"; tag = "icon-manifold (NORTH)"},/obj/machinery/meter,/turf/simulated/floor/plating{dir = 1; icon_state = "warnplatecorner"},/area/engine/engine_room) +"ecW" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/engine/engine_room) +"ecX" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door_control{id = "engine_maintenance"; name = "Door Bolt Control"; normaldoorcontrol = 1; pixel_x = 25; pixel_y = 0; req_access_txt = "0"; specialfunctions = 4},/turf/simulated/floor/plating{dir = 8; icon_state = "warnplatecorner"},/area/engine/engine_waste) +"ecY" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplatecorner"},/area/engine/engine_room) "ecZ" = (/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor{icon_state = "dark"},/area/mine/abandoned) -"eda" = (/obj/machinery/atmospherics/unary/heater{dir = 1},/turf/simulated/floor/plating,/area/research_outpost/maint) -"edb" = (/obj/machinery/portable_atmospherics/hydroponics{closed_system = 1; name = "isolation tray"},/turf/simulated/floor{icon_state = "dark"},/area/mine/abandoned) -"edc" = (/obj/machinery/portable_atmospherics/hydroponics/soil,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/grass,/area/research_outpost/maintstore1) -"edd" = (/obj/machinery/portable_atmospherics/hydroponics/soil,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/grass,/area/research_outpost/maintstore1) -"ede" = (/obj/machinery/portable_atmospherics/hydroponics/soil,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/grass,/area/research_outpost/maintstore1) +"eda" = (/obj/machinery/portable_atmospherics/hydroponics{closed_system = 1; name = "isolation tray"},/turf/simulated/floor{icon_state = "dark"},/area/mine/abandoned) +"edb" = (/obj/machinery/portable_atmospherics/hydroponics/soil,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/grass,/area/research_outpost/maintstore1) +"edc" = (/obj/machinery/portable_atmospherics/hydroponics/soil,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/grass,/area/research_outpost/maintstore1) +"edd" = (/obj/machinery/portable_atmospherics/hydroponics/soil,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/grass,/area/research_outpost/maintstore1) +"ede" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_shuttle_hatch"; locked = 1; name = "Shuttle Hatch"; req_access_txt = "13"},/obj/machinery/mech_sensor{dir = 8; frequency = 1380; id_tag = "escape_shuttle_hatch"; pixel_y = -19},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom) +"edf" = (/obj/item/stack/medical/ointment,/obj/item/stack/medical/ointment,/obj/item/stack/medical/ointment,/obj/structure/table{icon_state = "tabledir"; dir = 9},/turf/unsimulated/floor{icon_state = "redyellowfull"; dir = 5},/area/tdome/tdomeadmin) +"edg" = (/obj/machinery/atmospherics/unary/heater{dir = 1},/turf/simulated/floor/plating,/area/research_outpost/maint) +"edh" = (/obj/machinery/atmospherics/omni/mixer{on = 1; tag_east = 2; tag_north = 0; tag_north_con = null; tag_south = 1; tag_south_con = 0.8; tag_west = 1; tag_west_con = 0.2},/turf/simulated/floor/plating,/area/research_outpost/atmos) +"edi" = (/obj/machinery/atmospherics/omni/filter{on = 1; tag_east = 4; tag_north = 2; tag_south = 1; tag_west = 3},/turf/simulated/floor/plating,/area/research_outpost/atmos) +"edj" = (/obj/structure/closet/crate/hydroponics,/obj/item/weapon/shovel/spade,/obj/item/weapon/reagent_containers/glass/bucket,/obj/item/weapon/minihoe,/obj/item/weapon/reagent_containers/spray/plantbgone{pixel_x = 13; pixel_y = 5},/obj/item/weedkiller/triclopyr,/obj/item/weapon/reagent_containers/glass/fertilizer/ez,/turf/simulated/floor/plating,/area/research_outpost/maintstore1) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -11089,24 +11094,24 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDiaEBaECaEDaDcaEEaDcaEEaDcaEEaDcaEEaDcaEFaEGazSayWaEHaAKbbhblyaEKaELaEMaENaAKbjZbkiaAcaEQaAcaERaqYaAPaESaDBaDzaDzaDzaDzaDzaDzbboaWjaWgaVJaVIaWMaWNaWKaWLaWJaAkaafaygaWIaWpblGaWxaWqaWsblEaWpaZdaZcaxraFnaypazlaFmaBdazoazpaBdaDOaTuaypaDQaVHaWTaFsaFtaXcbdZagjagjagjagjaVEaVFaWSaVxaVybazaVxaXfaVxaXeaVxaXgaXhbbCaFHbcKaBoaXjaXmaXXaXVaXVaXCaYcaXYaXYaXYaXYaXYbaCaXYaXYaYwaYeaXnaRdaRdaYGaYxblNaWPaWQaWQaWQaWRaEsaEsaGeaEsaGfaGgaGhaEsaEuaWUaEuaGjaXlaXkbbBaGnaGoaIbasHaGraGsaGtaGuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGvaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaXoaDcaDcaBJaDcaEEaDcaEEaGxaEEaDcaEEaDcaEFaEGazSayWaGyatHatHblVaYKaYPaYKaQlaQlaYJaYNaYOaYLaYMaYLaYLbakbajbdxaGLaGLaGLaGMaGLaGLaGNaGOaARaaaaZXaAkayJbmqayJaAkaAkaaaaygavOaylbmjaZIaZiaZqaZDaZEaZhbglaxraHbaypaFoaCuaAraypaAsaAraCwaZgaypaHdawGaYhaHfaHgaUnaYfalNalNalNalNalNaHjaYbazBbdcaAxazBaHmazBaHnazBaHobcvbcwbcNbczbdNbcXaYUbdlbdmbbvbdAbbwbbvbbvbbxbbzbbybbAbbybbybbybbibcubcbbawbawbawbmxbaSbawbaxbawbaWaYIaHOaHPaHQaHRaHSaHTaEsaHUbaXaEuaHWaHXbdOaHZaGnaIaaIbasHaIcaEyaEyaEyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDiaIdaECaEDaDcaEEaDcaEEaDcaEEaDcaEEaDcaEFaEGazSaCnawzawyawxawuawuawuawzawCawDawzawAaImaInawBauKauKaAPaGOaIpaCaaIqaBOaGOaIraIsaItaIuasSaaaawaaaaavMavNavMaaaaafaaaasSavOaylaAZaBKavZaBLaBcaylaAtaAJaxrachaypazlaIFaIGazoaIHayyazraIKaILaIMawGaBeaIOaIPaAqaBhaISaaaaaaaUnaIUaIVaBsazBaIXaAxaAxaAxaCEaAxaAxaAxauOaBoaKyaBoaBoavJaBoaJcaBoaJdavHavGaJgaJhaJiaJjaJkavFaJjaJjaJjaJjaJjavDaJjaJjaJjaJjaJjaJjaJjaJjasIayRayvaAzaAiaBraBpazHbMsazIavpavlavmavnazFayNayPazDaAXasHaIbaJDaJEaJFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJHaJIaBIaDbaDcaDcaDcaJJaDcaDcaJKaDcaDcaDiaJLaJMayWaxTaJNaJOaJOaJOaJOaJOaJOaJOaJPasDatHaPRarOaPRaPRaAPaJSaJTaJUaJVaJVaJVaJVaJWaJXazEasSaASavaaKbaKcavbaKeaKbaKbaKfasSavcaylaylazJaAbaAaayLawGaUnazGaxraxraxraxraKlaKmaCxaCxaKnayHawGawGaxraxrazqaIOaIOaIOaKpaKqaKraKsaUnaKtaIVaKuazBazBazBazBazBazBazBazBazBauOaKwayKaKxaIZauMavIaKBaKCaJdauyauWauXaznaKHaJjayOayQaNLaAYaIyaJbaMCaxDaxJayaayZayVayCayBaDqaJjauwauvaysaJraxdaxaaJuayqaEsaxNauuaLdavfauoaveaunaEuaEyaLhasHaIbaLiaLjaLkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJHaJIaBIaDbaDcaDcaDcaJJaDcaDcaJKaDcaDcaDiaJLaJMayWaxTaJNaJOaJOaJOaJOaJOaJOaJOaJPasDatHaPRarOaPRaPRaAPaJSaJTaJUaJVaJVaJVaJVaJWaJXazEasSaASavaaKbaKcavbaKeaKbaKbaKfasSavcaylaylazJaAbaAaayLawGaUnazGaxraxraxraxraKlaKmaCxaCxaKnayHawGawGaxraxrazqaIOaIOaIOaKpaKqaKraKsaUnaKtaIVaKuazBazBazBazBazBazBazBazBazBauOaKwayKaKxaIZauMavIaKBaKCaJdauyauWauXaznaKHaJjayOayQaPbayVayZaIyaJbaxDaxJayaayCayBaxBaxfaDqaJjauwauvaysaJraxdaxaaJuayqaEsaxNauuaLdavfauoaveaunaEuaEyaLhasHaIbaLiaLjaLkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJHaBIaBJaBIaBIaDRaDSaBIaBIaBJaJIaLmasSaLnaxTawXaLoaLoaLpaLoaLqatHaLraLsasDaLtaLuaACaFGazwaLyaLzaLAaLzaLzaLzaLzaLzaLzaLzaLBaLCazNaAdaLFaLFayTaETaLFaLFaLFaLIazKaFraLKaLzaxtaNmaLOaLPaIOaGmaIOaLSaIzaFIaLTaLTaLTaLTaLTaLTaOraLVaOAaLXaLYaLZaMaaMbaMcaIOaIOaIOaOBaMeaMfaMeaMgaMhaLSaMjaIzaMkaEgaBoaMlaxMaOOaMoaMnaMpaxKaMraMsaMtaJdaxLaMvaMwaMwaMxaJjaDJaFTaEJaEJaEJaEJaEJaFqaBaaEOaEUaExaEJaEJaHMaJjasIarZaHPaHPaCXaDFaHPaHPaEsaMOaEpaEuaytaMRaHZavTaEuaEhaymayeaIbaEyaEyaEyaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawXarBaMVaAFaAFaAFaAFaMWarBawXaAHasSaCFaMXaMYaDKavSaNbaNbaNcatHaNdaLsaxAaNfaLuaxzaNhaNiaNjaNkaNlaLzaLzaLzaLzaLzaLzaLzaCDaxiaxuaLzaLzaLzaxpayuaLzaLzaLzaLzaxvaLzaLzaLzaxtaNmaLuaLPaIOaIOaIOaIOaIOaIOaIOaIOaIOaIOaIOaIOaNsaNtaNuaNvaNwaNxaNyaNzaNAaIOaIOaIOaLPaIOaIOaIOaIOaIOaIOaIOaIOaNBbNwaCjaCWaCQaMpaNEaMpaMpawEaNGaMsaCoaJdawFawJawSaCraNMaJjaDraDHaCpaCpaCpaCpaCpaCqaCTaDlaDmaCpaCpaCzaNRaJjasIarZaNVaHPaHPaNWaHPaNXaEsaEuaEuaEuaEuaEuaEuavQaEuaIbaIbasHaIbaNZaOaaEyaaaaafaaaaaaaaaaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafazQasSaMYavtazSaObaOcaOdaOeazSavtaOfaOgasSatlaxTaMYaOhaOiaNbaNbaNcatHaOjaLsasDaNfaLuasXaLAaLzaLzaRyaChaEzaRCaLzausaOmardaOmaALatmarMaOmaOvaOwatzathauaatkatjatiatcatbatbasYaVdaNmaLuaLPaIOaOHaIOaOIaOIaOIaOIaOIaOIaOIaOIaOJaOKaOIaOIaOIaOIaOLaOIaOIaOIaOIaOIaOMaONaOIaOIaOIaOIaOIaOIaOIaIOaIOaIOaBoasQasOasCasCasCaxfavwaNGaMsaBQaJdaJdaJdaJdaJdaOUaJjatsatraSgaTAaTzaUSatQatEaCKatyatCasUasNasNasWaJjasIarZaPfaPfaPgaPhaPiaPiaPjaEsaPkaPlaPmaEyaskaVbasbaIbaIbasHaIbaEyaPsaEyaPtaPtaPtaPuaPvaPwaaaaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafazQasSaMYavtazSaObaOcaOdaOeazSavtaOfaOgasSatlaxTaMYaOhaOiaNbaNbaNcatHaOjaLsasDaNfaLuasXaLAaLzaLzaRyaChaEzaRCaLzausaOmardaOmaALatmarMaOmaOvaOwatzathauaatkatjatiatcatbatbasYaVdaNmaLuaLPaIOaOHaIOaOIaOIaOIaOIaOIaOIaOIaOIaOJaOKaOIaOIaOIaOIaOLaOIaOIaOIaOIaOIaOMaONaOIaOIaOIaOIaOIaOIaOIaIOaIOaIOaBoasQasOasCasCasCaMCaAYaNGaMsaBQaJdaJdaJdaJdaJdaOUaJjatsatraSgaTAaTzaUSatQatEaCKatyatCasUasNasNasWaJjasIarZaPfaPfaPgaPhaPiaPiaPjaEsaPkaPlaPmaEyaskaVbasbaIbaIbasHaIbaEyaPsaEyaPtaPtaPtaPuaPvaPwaaaaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafatHaxRarBaJMayWaxTaxTayXaJMarBaJMaPxawYaPyaxTaxRaPzaPzaLpaPzaLqatHaPAaLsasDatHaPRarOasnaPRaPEaPEaPEaPEaPEaPFaPGaPEaPEaPEatHatHascaPIaPJaPIaPKasGaPMaLzaLAaPNasFaPPaPQaLAaZHaPRaPRaUnaIOaIOaIPaPTaKraKraPUaPUaPUaPUaPVawGawRaxqaPZaQaaQaaQbaQcaQaaQdaQeaQfawGaQgaPUaPUaPUaPUaKraKraQhaINaIOaIOaBoaQiashaQkaQkaQkaQkasyassasiaQoavXarFdZFaQsaQtaQuaJdaJdaszaTwaQwaQyaQzasfasfasfasLasMasAasfasfasfasfasaarZaQGaHPaPgaPhaHPaHPaQHaEsasBaQJaQKaEyaQLarpaPraSoaPoasgaIbaQQaQRaEyasKasJaPtaQUaQVaQWaafaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawXaQXaxTaQYaPyaxTaxTaQZaQYaxTaQXaPyaxTaxTaxTaRaaRbaRbaRbaRbaRbaRbaRbaRcatUaPBaReaufaFvautaumaxwaRkaRlaRmaRnaRoaRpaukaRraRsaRtaujaxhaRwaxIaPKatwaPMaPMaRzaPMaugaPSaPSaRBbaHaPSaPSaPSaxyaIOaIPaREaaaaaaaaaaaaaaaaaaaaaaPWaRFaRGaRHaRIaRJaRKaRJaRLaRMaRNaROaPWaaaaaaaaaaaaaaaaaaaaaaRPaINaIOauZaRRaRSatDaQoaQoaQoaQoaQoaRUatGaQoaQoaQoaQraMpaRWaRXaRYaRZatxaRXavKaSdavEasAaSnbcWavLawfawHawvawTawIasfasIarZaSjaSjaPgaPhaSkaSkaSlaEsaEsaSmaEsaEyaLhatZaulaulaulatNaTJaEyaEyaEyawtaSqaSraSsbeKaSuaafaafaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaxRaSvaSwaSvaSvaSvaSvaSvaSvaSwaSvaSvaSxaxTaxTaSyaxTavzavkaxTaSAaSBaueaSDatuaPBaReattbeRaPEaSHaRnaRnaRnaRnaRnaRoaSIaRnaRnaRnaRtasEaSJaSKauRaPKatwaPMaSMaSNaupatvaPSaxeaSRbdnavqaSUaSVaIOaIOaIPaREaaaaaaaaaaaaaPWaPWaPWaPWaSWaSXaSYaSZavCaTbaTcaTdaTeaTfaTgaPWaPWaPWaPWaaaaaaaaaaaaaRPaINaIOaIOaThaQoatnaTjaTkaQoaTlaTmaCIatqaToaTkaQoaQraMpaTpaRXaTqaTratTaTtauxauAauDauQauUauVauYavjavyavxaxBavvasfasIarZaQGaHPaPgaPhaHPaHPaHPaTCaTDaHPaTEaEyarDastaSoaSoaSoasgaIbaIbaEyaTKaSsaSsaSsaSsaStaTLaTMaTMaTNaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasSasSaTOaTPaTPaTPaTPaTPaTPaTPazYasSatHaTRaTRatHatHaTSaFuaTSaTSaTSaBgaTSaBgaPBaReattbeRaPEaTXaRnaRnaTYaTZaUaaUbaTYaRnaRnaRnaUcasEaUdaUeaNCaPKaFkaPMaUhaUiaUjaFpaPSaNHbdsbdyaSSaSUaUmaIOaIOaIPaKqaPVaUnaUoaPWaPWaUpaUqaUraUsaUtaUtaUuaUvaUtaUuaUvaUtaUwaUxaUyaUzaUAaPWaPWaUoaUnaUBaUCaINaIOaIOaBoaUDatnaToaTkaQoaUEaUFaQoaFjaUHaTkaQoaQraMpaUIaRXaOtaFzaFyaUMaFxaUOaSbaTyawhawiaQTaNOavyaKTaxBaTvasfasIarZaUWaUWaPgaPhaUXaHPaHPaUYaHPaUZaVaaEyaIbaTGaTHaSoaTGaFwaQqaVfaEyaVgaSsaSsaSsaSQaNNaSeaPeaTiaTaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaafaVmazTaxVaxTaMZaEwaEvaEtaEraEXaEWaEVaQEaEPaEIaEAaOqaEqaPEaVBaRnaRnaTYaUaaVCaVDaTYaRnaRnaRnaRtasEaPKaPKaEfaPKatwaPMaPMaPMaPMaugaPSbfIaSSaSSaSSaMSaUmaIOaIOaIPaLTaLTaVKaVLaVMaPWaVNaTbaUtaVOaUtaUtaUtaUtaVPaUtaUtaUtaVRaVSaVSaVTaVUaPWaVVaVLaVWaLTaVXaINaIOaIOaThaQoatDaQoaQoaQoaVYaVZaQoaFjaWaaTkaQoaQraMpaWbaRXaWcaWdaWeaWfaFiaUOaRqaRuawhawiaQTaRiavyaKTaxBaQIasfaFharZaEsaEsaFgaPhaWlaWmbfKaWnaWoaKZaFfaFaaymaFdaFeaFcaFdaFbaymaEZaFaaEYaNqaSsaSsaKQaWAaWBaWCaTMaWDaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaWEaWFaWGayWaSiaGlaGzaVkaGBaGAaGDaGCaGEaGqaGGaGFaGIaYCaFXaPEaWVaRnaWWaWXaYdaYAaYBaWYaWYaWYaXaaSfaFYaXdaGcaGbaGaaFZaReaReaXiaPBaGdaPSaIoaIlaHFaHEaHBaHpaIRaIOaIOaIOaIOaXpaXqaXraXsaXtaXuaUtaXvaXwaXxaXyaXzaXAaXBaIWaXDaKUaXFaXtaXGaXHaXIaXJaXKaXLaXMaXNaXOaIOaXPaBoaRSatnaXQaTkaQoaXRaXSaQoaFjaToaTkaQoaQraXTaRWaRXaWcaRXaXUaRXaGJaUOaVuaWhawiaWkaWiaRiavyaWtaxBaUUasfaYDaGRaXZaYaaQOaQPaPgaPgaPgaPgaPgaPgaFVaEyaIbaTGaTHaSoaTGaTHaIbasHaEyaZKaSsaSsaSsaKQaYkaYlaYmaafaVtaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaUQaURaQjaPpaYoaBgaQAaYqaYraYraYraYraQCaYtaTSaYuaYvaOlaCSaYyaYyaYyaYzaYyaOsaRnaTWaUKaWZaWZaPDaSGaFOaFPaFEaFDaFJaFFaFAaIgaFCaFBaFLaFKaFMaYSaYSaYSaYTaUnaOVaIOaYVaORaOFaYYaYZaZaaPWaPnaHiaTBaZfaPWaPWaPWaPWaPWaPWaPWaPWaPWaOxaXwaZkaZlaPWaZaaYZaZmaGTaYWaZoaIOaIOaThaQoaRDaQoaQoaQoaFHaQoaQoaFUaQoaZraZraZraZraZsaZtaKAaRXaRXaRXaRjaZwaZxasfaUTaUVaVhaRvavyaKTaxBaVjasfaFWaBDaZFaZGaPgaPgaPgaPgaPgaPgaPgaPgaFVawKaIbaPoaPraSoaPoaPraIbasHawKaYjaSsaSsaZJaKQaSsbusaYmaafaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaxRaSvaSwaSvaSvaSvaSvaSvaSvaSwaSvaSvaSxaxTaxTaSyaxTavzavkaxTaSAaSBaueaSDatuaPBaReattbeRaPEaSHaRnaRnaRnaRnaRnaRoaSIaRnaRnaRnaRtasEaSJaSKauRaPKatwaPMaSMaSNaupatvaPSaxeaSRbdnavqaSUaSVaIOaIOaIPaREaaaaaaaaaaaaaPWaPWaPWaPWaSWaSXaSYaSZavCaTbaTcaTdaTeaTfaTgaPWaPWaPWaPWaaaaaaaaaaaaaRPaINaIOaIOaThaQoatnaTjaTkaQoaTlaTmaCIatqaToaTkaQoaQraMpaTpaRXaTqaTratTaTtauxauAauDauQauUauVauYavjavyavxavwavvasfasIarZaQGaHPaPgaPhaHPaHPaHPaTCaTDaHPaTEaEyarDastaSoaSoaSoasgaIbaIbaEyaTKaSsaSsaSsaSsaStaTLaTMaTMaTNaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasSasSaTOaTPaTPaTPaTPaTPaTPaTPazYasSatHaTRaTRatHatHaTSaFuaTSaTSaTSaBgaTSaBgaPBaReattbeRaPEaTXaRnaRnaTYaTZaUaaUbaTYaRnaRnaRnaUcasEaUdaUeaNCaPKaFkaPMaUhaUiaUjaFpaPSaNHbdsbdyaSSaSUaUmaIOaIOaIPaKqaPVaUnaUoaPWaPWaUpaUqaUraUsaUtaUtaUuaUvaUtaUuaUvaUtaUwaUxaUyaUzaUAaPWaPWaUoaUnaUBaUCaINaIOaIOaBoaUDatnaToaTkaQoaUEaUFaQoaFjaUHaTkaQoaQraMpaUIaRXaOtaFzaFyaUMaFxaUOaSbaTyawhawiaQTaNOavyaKTavwaTvasfasIarZaUWaUWaPgaPhaUXaHPaHPaUYaHPaUZaVaaEyaIbaTGaTHaSoaTGaFwaQqaVfaEyaVgaSsaSsaSsaSQaNNaSeaPeaTiaTaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaafaVmazTaxVaxTaMZaEwaEvaEtaEraEXaEWaEVaQEaEPaEIaEAaOqaEqaPEaVBaRnaRnaTYaUaaVCaVDaTYaRnaRnaRnaRtasEaPKaPKaEfaPKatwaPMaPMaPMaPMaugaPSbfIaSSaSSaSSaMSaUmaIOaIOaIPaLTaLTaVKaVLaVMaPWaVNaTbaUtaVOaUtaUtaUtaUtaVPaUtaUtaUtaVRaVSaVSaVTaVUaPWaVVaVLaVWaLTaVXaINaIOaIOaThaQoatDaQoaQoaQoaVYaVZaQoaFjaWaaTkaQoaQraMpaWbaRXaWcaWdaWeaWfaFiaUOaRqaRuawhawiaQTaRiavyaKTavwaQIasfaFharZaEsaEsaFgaPhaWlaWmbfKaWnaWoaKZaFfaFaaymaFdaFeaFcaFdaFbaymaEZaFaaEYaNqaSsaSsaKQaWAaWBaWCaTMaWDaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaWEaWFaWGayWaSiaGlaGzaVkaGBaGAaGDaGCaGEaGqaGGaGFaGIaYCaFXaPEaWVaRnaWWaWXaYdaYAaYBaWYaWYaWYaXaaSfaFYaXdaGcaGbaGaaFZaReaReaXiaPBaGdaPSaIoaIlaHFaHEaHBaHpaIRaIOaIOaIOaIOaXpaXqaXraXsaXtaXuaUtaXvaXwaXxaXyaXzaXAaXBaIWaXDaKUaXFaXtaXGaXHaXIaXJaXKaXLaXMaXNaXOaIOaXPaBoaRSatnaXQaTkaQoaXRaXSaQoaFjaToaTkaQoaQraXTaRWaRXaWcaRXaXUaRXaGJaUOaVuaWhawiaWkaWiaRiavyaWtavwaUUasfaYDaGRaXZaYaaQOaQPaPgaPgaPgaPgaPgaPgaFVaEyaIbaTGaTHaSoaTGaTHaIbasHaEyaZKaSsaSsaSsaKQaYkaYlaYmaafaVtaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaUQaURaQjaPpaYoaBgaQAaYqaYraYraYraYraQCaYtaTSaYuaYvaOlaCSaYyaYyaYyaYzaYyaOsaRnaTWaUKaWZaWZaPDaSGaFOaFPaFEaFDaFJaFFaFAaIgaFCaFBaFLaFKaFMaYSaYSaYSaYTaUnaOVaIOaYVaORaOFaYYaYZaZaaPWaPnaHiaTBaZfaPWaPWaPWaPWaPWaPWaPWaPWaPWaOxaXwaZkaZlaPWaZaaYZaZmaGTaYWaZoaIOaIOaThaQoaRDaQoaQoaQoaFHaQoaQoaFUaQoaZraZraZraZraZsaZtaKAaRXaRXaRXaRjaZwaZxasfaUTaUVaVhaRvavyaKTavwaVjasfaFWaBDaZFaZGaPgaPgaPgaPgaPgaPgaPgaPgaFVawKaIbaPoaPraSoaPoaPraIbasHawKaYjaSsaSsaZJaKQaSsbusaYmaafaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaZLaZMaWGaKRaZNaBWaZPaZQaZRaZSaZTaYraZUaZVaTSaZWbaEaOlaCSaZYaZZbaaaCLaYybacbadbaeaPEbafbagbahaOnaPEaCRaBtbalbalbalbalaHubalbalbanbaobaobaobapbaobaqaUnaHkaHlaHLawGawGawGbaAbaAbaAbayaFQbaybaAbaBbaBbaBbaBbaBbaBbaBbaBbaBaCVbaDbbubaDaPWaPWaPWawGawGawGaZoaIOaIOaUnbaFbaGaBlbaJaQobaIaQobaJaJnbaLaZrbaMbhWbaOaJdaJdaJdbaPbaQbaQbaQaJdaJdasfaLNaLeaLeaLLavyaKTaKTaKVasfaBEaBDbaYaEsbaZbbabbbaWmaIebbabbdaWmaIhaEyaIBaQMaQNbbgaQMaQNaIbaIDaEyaDkbbjbbkaSsaKQbblbbmaYmaafaLRaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaJoaxRbbnaIQaGwaBgbbpbbpaICaAMbbsbbqbbtbbpaTSaQpaOTaGHaByaBzaBzaBAaBBaBzaHhbadaHeaPEbafbagbbDaGPaPEaBxbfabalbbGbbHbbHaHcbbIbalbbJbbKbbLbbMbarbarbaraUnaIOaIOaYVawGbbPbbQbbRbbSaBRaGQaFlbbWbaAbaBbbXbbYbbZbcaaGKbccbcdbaBaCVbcebcfbcgbchbcibcjaAVbjtawGbcmbcnbcnaUnbcqbcqaBoaBobcoaThbcobcpaBoaBoaRRaBoaBoaBobcqbcrbcrbcrbcrbcrbcrbcsaKObcqaKKaKMaKMaKNaKIaKIaKIaKhbcqaBEaBDbaYaEsaEsaEsaEsaEsarZaEsaEsaEsaEsaEyaBCbcAawKavUawKbcyaJtbcqaPtbcBaSsbcCaSsaKQaWAbcDbcEaTMaWDaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazQasSbcFaAFaWGatHatHatHatHatHatHaNUaOuaBgaTSaTSaTSaTSaTSaTSaTSaTSaTSaNTaNTaOlaCSaZYbcIbcJaMiaYybcLbcMaDEaPEbafbagbcOaOpaPEaBxbfabalbbHbcQbcQbbHbcQbalbbJbcRbcSbcSbcTbcUbcVbaraIOaIOaYVaGpbcYbgCbdabdbbdbbdaaGibddbaAbaBbdebdfbdgbdhbdibdjbdkaGYaHablibdobclbdpbdqbdrbclaLgawGaMybdtaIOaNsbdubdvaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFbdvaZFaZFaZFaZFaZFaZFaZFaMzbdzaDPaDTaCYaDUaCYaDVaCYaDXaDWaCYaCYaDZaDYaEaaEbaCYaCYaCYaCYaCYaCYaEcaEdaEeaMAbcCaSsaMPaMFaPbaOZaPcaOQaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazQasSbcFaAFaWGatHatHatHatHatHatHaNUaOuaBgaTSaTSaTSaTSaTSaTSaTSaTSaTSaNTaNTaOlaCSaZYbcIbcJaMiaYybcLbcMaDEaPEbafbagbcOaOpaPEaBxbfabalbbHbcQbcQbbHbcQbalbbJbcRbcSbcSbcTbcUbcVbaraIOaIOaYVaGpbcYbgCbdabdbbdbbdaaGibddbaAbaBbdebdfbdgbdhbdibdjbdkaGYaHablibdobclbdpbdqbdrbclaLgawGaMybdtaIOaNsbdubdvaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFbdvaZFaZFaZFaZFaZFaZFaZFaMzbdzaDPaDTaCYaDUaCYaDVaCYaDXaDWaCYaCYaDZaDYaEaaEbaCYaCYaCYaCYaCYaCYaEcaEdaEeaMAbcCaSsaMPaMFaOZaOQaPcaNLaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQaaaaafbdRazTaLDaLwaLbaKvaKvaKvaKvaKvaKvaJZaJYaKYaMDaKGaOlaCSaYyaYybdXbdYaYyaPEaPEaCUaPEbafbeabcOaOoaPEbfbaFSbalbecbedbbHbcQbeebalbbJbefbcSbcSbcSaLHbehbarbeiaIOaYVaGkbekbgCbembenbeobepaGibeqbaAbaBberbesaLJbetbetaNPbevbaBaCVbexbclbclbdpbeybdrbclaLfawGbvTaIOaIOaNsbdubdvaZFaZFaZFaZFaZFaZFaZFaLWaZFaZFaZFaZFaZFaZFaLUaCYaCYaCYaCYaCYaCYaCZaCYaCYaCYaCYaCYaCYaCYaNSaDDaDCaDtaZFaZFaZFaZFaZFaBDaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFbeIbdzbeJaSsaSsbcCaSsaKQaStbeLaTMaTMaTNaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQbdQaWEaWFbeMaKRcbnbUVbePbePbeQbePbePbePbeRaPBaPBaPBaPBaOlaCSaZYbeSbeTcbqaYybeVbeWbUWaPEaPEaPEaPEbUmaPEbUybfabalbUqbbHbcQbUicbpbalbbJbarbfcbcSbcSbPhbfebarbULaIOaYVbTrbfhbgCbembfibfjbepaGibfkbaAbflbfmbfnbetbfobetbdfbfpbfqaCVbfrcbvbftbfubfubfvbclbfwawGcCTcuScbAcvvcxRdPwdPxdTPbmZcFsdPxcbCcbEbTtdTSctbctbctaaZFaZFaZFaZFaZFbfDbfybEuaZFctccbwctdcGebWUbGabFebMfdTUdTVdTWaZFaZFaZFaZFcbFbfOcbGbfDaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFbdzbfQbfRbfSbfTbfUcGxcGybfWaafaaaaafaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQbdQcrWcrQcbdcbibfXbePbfYbfZbgabgabgbbgcbgdbgebgebgebgebPBbUubUrbUrbUtbUsbUrbUobUobUpbUobUnbUlbUlbSbbRubTJbTRbUCbTQbUBbUBbTPcslbalbTKbarbgybcSbcSbPhbgzbgAbffaIOaYVbaAbgCbTpbdabdabdabdaaGibgEbaAbaBbgFbgGbWJbgIbgJbgGbgKbaBaCVbURbUQbgNbgObgPbgQbgRbgSawGcsoaHfcsnawGbTqbTqbgUbgUbgUbgUcmTcmTcsUcsVcsrcsscsVcsUcmTcmTcmTckbckbckbckbckbbcqbcqcsJbhbbhbbhbbhbbhbbktcsXbcqcsYcsZcbmbhkbhkbhlbhlbhlbhlbhlbhmbhnbhnbhobhnaZFbhnbhobhnbhnbhpbTqcuRcuRbNtbhrbhgcBhaPtaPtaaaaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQbdQaZLaZMbeMaKRcaGbePbhtbePbhubhvbePbePbePaRebhwbhxbhxbTHaYyaZYbhzbcJbhAaYybUabTZbTTbTSbMubTUbTXbTWbTzbTXbTMbTNbLkbTCbLkbLkbKEbTDblqbTbcaKbcSbcSbTLbhUbhVbffaIObTVbaAbhXbaAbhZbVnbibcaJbTYbaAbaAbaBbiebifbigbihbiibijbikbaBaCVbTybimckrbiobipbgQbclbiqawGcrtcbbbDbawGcqlcqncqSbTncrDcrGcrMcrFcqUcqVcrAcrBcogcofcpscoYcmTcmIcrocmUcpMckbcrscpNcrpcptbVUcktcktclSbktcggbiSbiScbabiSbiUbiUbhlbiVbiWbiXbhlbiYbiZbiYbhlbhmbhnbhpbNtbSQbTibSQbNtbThbTgbNtbjebTEcrKbhgaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQbdQaZLaZMbeMaKRcaGbePbhtbePbhubhvbePbePbePaRebhwbhxbhxbTHaYyaZYbhzbcJbhAaYybUabTZbTTbTSbMubTUbTXbTWbTzbTXbTMbTNbLkbTCbLkbLkbKEbTDblqbTbcaKbcSbcSbTLbhUbtxbffaIObTVbaAbhXbaAbhZbVnbibcaJbTYbaAbaAbaBbiebifbigbihbiibijbikbaBaCVbTybimckrbiobipbgQbclbiqawGcrtcbbbDbawGcqlcqncqSbTncrDcrGcrMcrFcqUcqVcrAcrBcogcofcpscoYcmTcmIcrocmUcpMckbcrscpNcrpcptbVUcktcktclSbktcggbiSbiScbabiSbiUbiUbhlbiVbiWbiXbhlbiYbiZbiYbhlbhmbhnbhpbNtbSQbTibSQbNtbThbTgbNtbjebTEcrKbhgaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQaaacqMaMYbZRaIQaxTbePbjibePbjjbjkbjlbQYbePbjnaReaXibcHbTjaYyaYyaYyaYyaYyaYybTAbjrbjsaRebWEbalbalbalbalbalbalbalbrnbalbalbalbMVbalblubRFbjzbcSbcSbPhbjAbgAbZXaIOcalbaAbjCbaAbaAbaAbaAbxBbTkbaAbTmbTlbZWbjHbbXbjIbbXbjJcarbTvbTxbTybjNbclbjObjPbgQcapbjRbaDbSNaIObDbcgQcqOcgPcawcqNcrfcrmcqPcaxchochocgRcgScjtcjpcjtciEciDcazciBciAckcckbcjDcgecrncgecjvcjucgecgfbktcggbiSbkwcfKcgdbkzbkAbkBbkCbkDbkCbSjbkFbkGbkHbhlblFbKAcatbNtbSzbSEbSDbSMbNHbSAbNtbkRbkSbkTbhgaaaaaaaaaaaeaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazQasSbcFaAFaZMaTPaTPaTPbkUaTPbkVayWcRSceqbePbkWbkXbkYbkZblablbcerbldbldbldbldbXnbWDbWDbWDbTXbTXbTXbWCblhblhblhcolbalbljblkcrwblmblnbloblpcQkblrblschfckRcnZbgAbjzbcSbXvbWwbWxbWxbWRbEvbWMbXmbWXbWLbZTbWIbXmbWTbXkbXjbXibTvbTvbTvbTvbWHbTvbTvbTvbTvbWjbWGbWQbWSbWObWPbWKbWNbWsbWFbWVaIObDbbgUdVHdVIdVJcVhcUBbgUcUZdUTcjtcjtcjtcjtcjtcjpcezdVydVBdVAdVDdVCdVuckbdVwceucRYcgecjvcjucgedVLbktcggdVNbYedVMbYbbXHbXMbXFbXGbXGbXGbXUbXWbXAbXzbXyceZcfhcffbXhbXgceNbNHbXcbXbbXfbNtbmPbkSbmsbhgaaaaaaaaaaaaaaaaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabmQcOfccGccPccHccZccZcdbcdkaxTbePbmSbmTbkZbmUbePbePbePaPBbmVbmWbmXbmYbmXbmXbmXbmYbmXaPBaPBbalbalbalcFHbalblpblpblpblpblpblpblpblpbnbbVobndbcSbWebWdbWdbWdbWabWcbVYbVcbVgbWibWncrRbWfbWfbWhbWgbWqbWpbVsbWrbWobnxbnybnzbnAbnBbnCbnzbnDbnxbPVbTybnFbnGbnFbaDbaDbaDbWAbaDdUZaIObDbcgQcqOcgPcdDdVbbWBbgUdUSdUTdUXdUYdUVdUWdVndVmceddVkcmTdVpdUEcegdVfdVedVddVccONdVidVhdVgdVidVqbUedVrdVsdTXbnYdTYboaceibocbodboebofbofcejbkCbohbhlcekbhTcelbNtbVZbVAbVzbUJbVVbVXbNtbmPbkSborbhgaaaaaaaaaaaaaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -11135,42 +11140,42 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQalQchdalQalQalQalQalQaaaaaaaaaaaaaaaaaaaafaafaaabxWbxTbxTbxTbxVbxTbxTbxRbxSccgbwobwhccgbwJbwKbwHbwIbwDbwGbupbwvbwSbwObfHbxUbwMbgwbjEbwLbxjbiMbxdbfNbiQbiPbuqbxabfNbxObPybymbtYbvlbCAbugbtLbtXbvebxEbiDbvfbvkbvjbuObiDbuQbvFbvNbwUbhebhFaJzbiKbvrbvsbiGbvtbvubuabiGbtPbGKbCebCTbhQbhQbhQbhQbhQbvqbhQbhQbwqbwmbvvbrkbxxbkJblBbtQbtTbkJbxybwCbwTbwrbwsbwYbxkbumbwVbumbumbuLbunbAEbyVbyVbyVaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbtybjBbuPbulbulbjSbjSbjSbjSbjSbjSbjSbjSbjBbjBaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbAdbzWbsKbzRbvPbthbzBbzFbzHccgbzSbzVccgccgbAlbvObAnbAhbvMbAjbAkbYpbvJbyRbyObvIbyJbyMbyLbzDbyJbyJbvLbzpbznbzAcjcbfNbkjbqZbqZbqZbqZbywbqZbqZbqZbysbyrbiDbyvbqJbvobtDbiDbvabynbvnbwUbhebhFbhebiKbwWbwXbiGbuZbwZbyhbwFbwEbDBbwPbwRbwRbwRbwRbwRbwRbygbwRbwRbygbwRbyBbygbygbCEbCPburbyqbCEbyubxAbxAbxAbxCbxDbxAbxAbxAbxAbxAbxzbyabxZbVNbVObyVbyVbyVbyVaaaaafaaaaaaaaaanmanmanmaafaaaaaaaafaaaaaaaafaaaaaabxYbjBbxXbjBbjBbjSbjSbjSbjSbjSbjSbjSbjBbjBaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbsBbsBbsKbsMbsLbthbtlbszbsOccgbqvbqsbqubsAbqDbqwbyobyTbqQbqIbqKbqVbqUbeYbqSbsEbrMbrGbribsdbsebsdbsGbsubsjbjpbshbfNbkjbqZbqYbqWbqRbqXbqWbwcbqLbqPbqNbqxbppbqJbqJbsmbiDbsnbsobsibwUbhebrhbqCbiKbsfbsgbiGbrObrVbqAbiGbssbidbvKboNbrkbrkboNboJboGboibnRbnKbsabrWbrjbstbsvbxrbsrbxtbyjbxrbsqbspbqtbqqdfTdfTdfTdfTbsbbqtbqqdfTdfTbAEbnkbnmbnlbWWbvSbWYbWZbXabXabXabXabXabXabXabXabXabXabXabXabXabXabXabXabpKbpLbpLbpPbjBbjBbjSbjSbqmbjSbjSbjBbjBaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabSFbSFbSFbSFbSFbSFbSFbuibujccgccgccgccgccgbukbuAbuKbuKbuKbuMbuNbYpbjqbjxbtsbjybttbtCbtubtEbtFbtGbfNbtVbtHbtObtWbfNbzIbqZbzxbzsbzsbzcbtMbkObqZbzbbyZbiDbtIbsZbqJbtDbiDbtAbtBbtzbwUbhebqHbtJbiKbsIbsNbiGbiGbiGbiGbiGbBPbidbidbidbfMcmHbBObGKbXObXPbXQbGKbrWbBNbBvbAJctibudbuhbFqbtUbudcECcEqcEqcEqcEBbtjbzQbADbAIbyYbtxbyXdfTbXVbswbXXbyVbyVbyVbyVaaaaafaaaaaaaaaanmanmanmaafaaaaaaaafaaaaaaaafaafaafbtrbtwbtmbtnbtybjBbjBbjSbmLbjSbjBbjBaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaafaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbSFbSGcnjcngcnhcnQbSFdgmdgldgkdgjcrEcrCcrrcrrcrucEIcEIcEGcEJbAkbYpbjqbjxcnCbwMcnzctfcnBcnwcnxcnybfNbtVcnpcnqdTTbfNbkjbqZdZLdZOdZOdZMcEKbqZdYtdgpdZQbiDdZTdZRdZSdZHbiDdZGbtBcrVbwUbxPbtKbxQbiKdZKdZJbiKcrXbPwbiddgCbssdZVdZWbidbfMdWwdXGbGKaaaaafaaaaaabrWctuctjdgrdgqdgtdgscERcEPdgxdgzdhUdgSdgSdhWdfQdfQdgBdiNdgodgodgndfTbYUcoebYWbYUaaaaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcrLbEQbEQbFgbtybtybjBbjBbjBbjBbEOaafaafaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaafaafaafbTebTebTebTebTebTebTebTebTebTebTebTebTeaaaaaacmobSGbSGbSGbSGcmAbSFdfNdfMcDJcDzcqdcpVcDycpVcDxcpTcpScDpcDocpLcEecqwcmCdfPbgXbgXbgXbgXbgXbgXbgXbfNbfNcDKbfNbfNbfNbkjbqZbqZdZrdZsdZtdZubqZdfUcEfcqTbiDbkdbiDbiDbiDbiDbwUdZydZzbwUcqXcqWcqXbiKbXLdZBbiKbPybPybiddZDbssbidbidbidbfMcpWcmNbGKaaaaafaaaaaedfXdfVdfWdgbdgadfZcEpcEtcEscErcEUcTodfQdfQdfQdgidgwdfQdfQdfQdfRdfSdfTcqQcmGbZVbYUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaabTecnScqacnSbTecnOcpYcnObTecnMcpZcnMbTeaaaaaacphbSGcpXbSGbSGcpRbSFcFVcFUcQKcFXcRqcRpcFMcFKcFkbqVbqVcFTbqVbqKcFIcFJbjxcpCcpDcpucpucpEdgZdhadgGdhbdhcdhddhedhfdgGbkjbEaeaxbMXbMXcFqeaweaDeaEdLbdPueazeaAcFreaeeaeeaudXBbwUbwUbwUcFocZLcFpbiKbiKbiKbiKbPybPybiddZDbsseareasbidbfMbGKbGKbGKaaaaafaaaaaadhqdhrdhsdhlcFndhmcWQdQScFldhidhhdfQdfQdfQdfQdhodhndfQdhpdfQdfRdghdfTcaycqbcaAbYUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaabTecnScnRcnSbTecnOcnPcnObTecnMcnNcnMbTeaaaaaacphbSGbSGbSGcpicoIcEVcsOcsNcvgcuVcsWbpIcsMcsEcsmcoycoEcoDdgFbAkbYpcpdcpbcpccFdcpfcFccpfdgIcoWdgGdgHcFbdgLdgJdgHdgGbkjbEaeabbMXbOsbMXeaaeageahcCNeajeaceadeaeeafeaeeandXBciZboNcDacEycExdgYcFGboNboNboNboNcEzbidbidbidbidbidbidbfMbGKaafaafaafcbfaafaafdgRdgPdgQdgQdgQccQbudcCKcyldgTdsLdgMdgMdgMdgXdgWdgWdgVdgMdgMcFedgOdfTcbjcFfcblbYUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaabTecNOcnicIfbTecHYcnfcHWbTecGvcnccGubTeaaaaafcphcrdbSGbSGcqqbWbbSFcOGdPVcvgcvgdPTcvgcvgcvgcvgcrzbYpcrxcrybAkbYpdRPcrlbyOcOncricrkcricOwcrqcOxdhLdhGcOodgGdgGdgGbkjbEadhOebrdBIebpebqebiebjdQhebhebmebnebkdBNebcdhNebadQabJNebfdQedQddhMbCTbyDbXPbXQbGKbvKboNboNboNboNboNboNciNbGKaaaaaaaaaaafaaaaaabrWdDldEBdCOdhTbuddQidQSdQRdfTdhVdBXdBXdBXdhPcvudhQdhSdBXdBXdBXdhYdfTdhXcrNcccccdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabSFbSFbSFbSFbSFbSFbSFbuibujccgccgccgccgccgbukbuAbuKbuKbuKbuMbuNbYpbjqbjxbtsbjybttbtCbtubtEbtFbtGbfNbtVbtHbtObtWbfNbzIbqZbzxbzsbzsbzcbtMbkObqZbzbbyZbiDbtIbsZbqJbtDbiDbtAbtBbtzbwUbhebqHbtJbiKbsIbsNbiGbiGbiGbiGbiGbBPbidbidbidbfMcmHbBObGKbXObXPbXQbGKbrWbBNbBvbAJctibudbuhbFqbtUbudbYAbXRbXRbXRbYzbtjbzQbADbAIbyYbhVbyXdfTbXVbswbXXbyVbyVbyVbyVaaaaafaaaaaaaaaanmanmanmaafaaaaaaaafaaaaaaaafaafaafbtrbtwbtmbtnbtybjBbjBbjSbmLbjSbjBbjBaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaafaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbSFbSGcnjcngcnhcnQbSFdgmdgldgkdgjcrEcrCcrrcrrcrucEIcEIcEGcEJbAkbYpbjqbjxcnCbwMcnzctfcnBcnwcnxcnybfNbtVcnpcnqdTTbfNbkjbqZdZLdZOdZOdZMcEKbqZdYtdgpdZQbiDdZTdZRdZSdZHbiDdZGbtBcrVbwUbxPbtKbxQbiKdZKdZJbiKcrXbPwbiddgCbssdZVdZWbidbfMdWwdXGbGKaaaaafaaaaaabrWctuctjdgrdgqdgtdgscERcEPdgxdBXdDldCOdCOcTXdfQdfQdgBdQWdgodgodgndfTbYUcoebYWbYUaaaaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcrLbEQbEQbFgbtybtybjBbjBbjBbjBbEOaafaafaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaafaafaafbTebTebTebTebTebTebTebTebTebTebTebTebTeaaaaaacmobSGbSGbSGbSGcmAbSFdfNdfMcDJcDzcqdcpVcDycpVcDxcpTcpScDpcDocpLcEecqwcmCdfPbgXbgXbgXbgXbgXbgXbgXbfNbfNcDKbfNbfNbfNbkjbqZbqZdZrdZsdZtdZubqZdfUcEfcqTbiDbkdbiDbiDbiDbiDbwUdZydZzbwUcqXcqWcqXbiKbXLdZBbiKbPybPybiddZDbssbidbidbidbfMcpWcmNbGKaaaaafaaaaaedfXdfVdfWdgbdgadfZcEpcEtcEscErdhUcTScSJcPWczedgidsLdfQdfQdfQdfRdfSdfTcqQcmGbZVbYUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaabTecnScqacnSbTecnOcpYcnObTecnMcpZcnMbTeaaaaaacphbSGcpXbSGbSGcpRbSFcFVcFUcQKcFXcRqcRpcFMcFKcFkbqVbqVcFTbqVbqKcFIcFJbjxcpCcpDcpucpucpEdgZdhadgGdhbdhcdhddhedhfdgGbkjbEaeaxbMXbMXcFqeaweaDeaEdLbdPueazeaAcFreaeeaeeaudXBbwUbwUbwUcFocZLcFpbiKbiKbiKbiKbPybPybiddZDbsseareasbidbfMbGKbGKbGKaaaaafaaaaaadhqdhrdhsdhlcFndhmcWQdQScFldhidhhcVYdhWdfQdfQdhodhndfQdhpdfQdfRdghdfTcaycqbcaAbYUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaabTecnScnRcnSbTecnOcnPcnObTecnMcnNcnMbTeaaaaaacphbSGbSGbSGcpicoIcEVcsOcsNcvgcuVcsWbpIcsMcsEcsmcoycoEcoDdgFbAkbYpcpdcpbcpccFdcpfcFccpfdgIcoWdgGdgHcFbdgLdgJdgHdgGbkjbEaeabbMXbOsbMXeaaeageahcCNeajeaceadeaeeafeaeeandXBciZboNcDacEycExdgYcFGboNboNboNboNcEzbidbidbidbidbidbidbfMbGKaafaafaafcbfaafaafdgRdgPdgQdgQdgQccQbudcCKcyldgTdTMdgMdgMdgMdgXdgWdgWdgVdgMdgMcFedgOdfTcbjcFfcblbYUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaabTecNOcnicIfbTecHYcnfcHWbTecGvcnccGubTeaaaaafcphcrdbSGbSGcqqbWbbSFcOGdPVcvgcvgdPTcvgcvgcvgcvgcrzbYpcrxcrybAkbYpdRPcrlbyOcOncricrkcricOwcrqcOxdhLdhGcOodgGdgGdgGbkjbEadhOebrdBIebpebqebiebjdQhebhebmebnebkdBNebcdhNebadQabJNebfdQedQddhMbCTbyDbXPbXQbGKbvKboNboNboNboNboNboNciNbGKaaaaaaaaaaafaaaaaabrWecHecIecGdhTbuddQidQSdQRdfTdhVdYIdYIdYIdhPcvudhQdhSdYIdYIdYIdhYdfTdhXcrNcccccdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaafaafbTecqocdMcqpbTecdWcdMcdXbTecdLcdMcdNbTeaaaaafcqrbSGbSGbSIcqqcqybSFdPAdPvcqvcFxcFwcFvcFRcFRcGlcGjcFRcFAcFzbAkbAkbjqcqIcqJcpDcqCcqCcqHdhBdhCdgGdhAdhydhzdhwdhxdgGcGmbEadhDcGqdCpeaOeaPbEaeaFdPDeaHdXBeaIeaJdCqcGtdhEdXBbfMbPydXFeaUeaTeaQdXFaaaaaaaaabGKbGKbGKbXObXPbXPbXQbGKbGKbGKaaaaaaaaabudbudbudbudbudbudbudbudbuddPHdPSdPPdfTdfTbZPbOwcdqdfTdfTdfTdfTcoTbOwcdqdfTdfTccSdhFccSaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaachdaafaafaafaaaaafcsLaafcsLaafcdmaafcdlaafcdmaafcdlaafaafaaabSFcsKbUXcsIdbicszbQGcROcRJbQGcsCcsDcmJcmJdTDcmJchBcRZcsFchBcsHcRecRicRCcswcaOcaOcaOcaOcRDcRIcaOcjXcjXcjXcjXcjXcjXbkjbEaebRdibdCyebNebObEaeaFcVtebMdXBebKebIdCzdiaebGdXBcVobPydXFebFebEdhZdXFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaabudcnbcmXcmYdTJdTKcdycSLcfccVndTFdTEdTGckkaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaafcebceccebaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaafcsgclgcshclgcshclgccWclgccUclgccWclgccUclgccVbQGbQGbQGbQGbQGbQGbQGbQGcrPcQJcrUcrTcrSdQTecIdQVdQUchBcRddZEcrYchBcaTchwchtcaOcsdcsecsbcscchhcaPcaOdRMdRMcsfclLclLcjXbkjbEabEaebxdCJbEabEabEaebvckYebwdXBdXBdXBdDhebCdXBdXBbfMcpqdXFdYWdYcdYddXFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaafaafbudccCcoLccCdRNcmEcbWdTCcfcdRUdTAdRUbudbudaaaaaaaaaaafaafaaaaaeaaaaaaaaaaaaaafaaaceWaaaaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaafcsgclgcshclgcshclgccWclgccUclgccWclgccUclgccVbQGbQGbQGbQGbQGbQGbQGbQGcrPcQJcrUcrTcrSdQTecJdQVdQUchBcRddZEcrYchBcaTchwchtcaOcsdcsecsbcscchhcaPcaOdRMdRMcsfclLclLcjXbkjbEabEaebxdCJbEabEabEaebvckYebwdXBdXBdXBdDhebCdXBdXBbfMcpqdXFdYWdYcdYddXFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaafaafbudccCcoLccCdRNcmEcbWdTCcfcdRUdTAdRUbudbudaaaaaaaaaaafaafaaaaaeaaaaaaaaaaaaaafaaaceWaaaaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcbMbSZcnGcgrcgqcgAcowchrcgFbSZcotcgBcgCcgAbSZcgycgzcgwcgxcgucgvceVchacoUdYGcoJcoHcoNckyclWcoGcmacgUcgIcgHcgKcgJchjchkchlcaOcaPcaPcaPcaPchhchicaOcoVcoVcoVclLclLcjXbkjdaTbEadXWcmWdXLdXVbEadXZckYdXYdXBdYadXRcnddYbdXBbPybfMcpqdXFcnDcnrcnEdXFaaaaaaaaaaaaaaaaaabVuckZbYRceXbVuaafaaaaaaaaaaaabudccCccCccCcllclmcdyclsclNdaUclPclOcnFbudaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafaaacfVaaaaafaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaafcfqcfpcfmcbDcfmcbDcfmcbDcmvcbDcfmcbDcmucbkcbkcbkcflbSZbSZcfkbSZcgccbkcmVcmPcmOcfTcfSckyckxckucmKcfJcfGcfFcfAcfzcducfycfxcaOcgocfvcfvcfvcmBcfucaOckgcfgcfgcfgcfrcjXbkjdaLbEadXJdXKdXLdXLdXMdXNcjxdXPdXQdXRdXRdXSdXCdXBciZciNbGKbZJbVucZgbVubZJaaaaaaaafaaaaaaaaabVucmtccOccYbVuaafaafaaaaaaaaabudcfccfccfccfcckfcbWcjFcjEcjyckeckdcjWbudaaaaaaaaaaaaaaachcchcchcchdaafaafaafaafcfVaafaafaafaafaafampchcchcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaafaafaafcbMciccibbSZcibciYchYcqZciabSZcibbSZbSZbSZbSZbSZcqDcbkcqYciVcbkciqcipciscqzciucitciwcnLcrvcnvcnIchBcqudeKciochBcnKcqBciQciRciSciSciTciTchqcixcaOcnAcfgcqAcfgcnTcjXbkjdeCbEaciycqjcqcdYnbEadYtcnodYtdXBdYrcqscqtciLdXBbfMbGKbGKbVucnucntdeIbVubVubVucnJbVubVubVubVucsjbXKcpUbVubVubVubZJaaaaaabudcnbcmXcmYcmZcnacdycnlcnncnmcnecbWcnkbudaaaaaaaaaaaaaaachcaaaaafaaaaafaaaaaaaaachWaaaaafaafaaaaaaaaaaaachcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaafaafaafcbMciccibbSZcibciYchYcqZciabSZcibbSZbSZbSZbSZbSZcqDcbkcqYciVcbkciqcipciscqzciucitciwcnLcEqcnvcnIchBcqudeKciochBcnKcqBciQciRciSciSciTciTchqcixcaOcnAcfgcqAcfgcnTcjXbkjdeCbEaciycqjcqcdYnbEadYtcnodYtdXBdYrcqscqtciLdXBbfMbGKbGKbVucnucntdeIbVubVubVucnJbVubVubVubVucsjbXKcpUbVubVubVubZJaaaaaabudcnbcmXcmYcmZcnacdycnlcnncnmcnecbWcnkbudaaaaaaaaaaaaaaachcaaaaafaaaaafaaaaaaaaachWaaaaafaafaaaaaaaaaaaachcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaafaafaaaaaacbMciccibbSZcidcpOchXchHchGchHchYcpQciachLchHchHcpvchHcpwcpxchHchIchIchHchGcfTcppbWldeBdcxcpjbQGchBcpnchBchBchBchvchwchtchuchzchAchxchychqdypcaOchpcfgchscfgcfgcjXbkjbPybEabEadDBbEabEabEadYkbPycmFdXBdXBdXBcpgdXBdXBbfMbGKaaabVucpadYFcpecaZdbdcmzcmwcilcmycmxbVudWFbXKdWLbVudaWcfCbVuaafaafbudccCccCccCcmDcmEcbWcmscmrcmqcmicbWcmcbudbudbudbudaaaaaachcaaaciOciOciOciOciOaafciPaafciOciOciOciOciOaaachcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaacbMciccidchHchHchHchHchHchGchHchHchHchGchYcsxcsucsvbSZcstckhckickwckwckickGbSZckpckvclqckMdTzcsyckHckIckHckKckJckHckQdYJcsAckOckPckPckPckVckPcsBckXckTckUclHclHcjXboodeMcocbondDEcodcokboNboNboNboNboNboNboNdDFboNcomciNbGKaaacaZdeObsxdZpcaZdeNdZnbXKbXKdZmcrOdZkdWqdZldWsdZjbXKbXKbVuaaaaaabudccCccCccCcmZconcdycorcrZcoscovcoucoucsacoqcopbudaafaafchcaafcjGcjHcjHcjHcjHcjIciPcjJcjKcjKcjKcjKcjLaafchcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaacbMcjlbSZbSZbSZcrHbSZbSZcmmbSZbSZbSZcmmbSZcskcDecicbSZcmmcibbSZcVKcVIbSZcVHcESbSZcRbcPWcWwcWvcWscFacWocWlcWccFacFacPacjncrccjmcjkcjkckacjkcjkcrgcjscjscreclHclHcjXbPybfMbTBbTBbTBbTBdYHbTBbTBbTBbTBbPybPybGKbGKbGKbGKbGKbGKaaacaZdXmdZicaZcaZdeLdZgdZddZcdZfdZedZadZbcspcsqdYZbXKdYYbVuaaaaaabudcfccfccfccfccnYcbWcmscnWcnVcmicbWcbWcnXcbWcnUbudaaaaaachcaafckzckzckzckzckzaaaciPaaackzckzckzckzckzaafchcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaachdaaaaaaaaaaaacbMcicbSZbSZbSZcimbSZbSZcmmbSZbSZbSZcmmbSZcimcmmcicbSZcmmcidcDnclTcaiclUcljcbsbSZbSZbSZecHecGbQGbQGbQGbQGcDfclrcaTcaSccsciRclYcaPcmbcmjcaPcmkcaOcpKcmlcfgcqGcencjXcpIbfMbTBcpHbhMbhLbYhbhKcoAbhPbTBbSabhObGKaaaaaaaaaaaaaaaaaabVudfIdWicwJcCVdWjcsidWndWodfzcsTcsQdWdcsRdWedWfbVudWgbVuaaaaaabudcnbcmXcmYccLcnacdycpFcoBcpGcpmcplcpAcprcpkcCUbudaaaaaachcaaaaafaaaaafaafaafaaaciPaaaaafaaaaafaaaaafaaachcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaacbMcicbSZbSZclKdYIckickiclBckickickiclBckidYIclDclGckiclIckicCRclhcljcliclhcCJcCJcCJcCJdTMdQWcCQchRclAclzclxclrcBycdzccsclacldcaPcaPcCEcaPclecaOcqhcqhclfcqGcencjXbPybfMbTBbvhbvibVTbVSbvmbVSbvbbTBbTfbvgbGKaaaaaaaaaaaaaaaaaabVucAMcvNctecsGdWxcjadWzdWAdWqdWBcgidWrdWqdWpdWsbVubVubVuaaaaaabudccCcoLccCcoKcmEcbWcoFcoBcozcbUcbWcoxcfccfccfcbudaaaaaachcaaaciOciOciOciOciOaafciPaafciOciOciOciOciOaafchcaaaaaaaaaaaaaaaaaaaaaaaacmdaaaaaaaaacmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaacbMcbJcizcbDcirchgcincbDciicbDchZcbDchUcbDchgchTcbBchScbzchRchMcbscbubSZchJchJchKcbrcbrcgZcbhchFcbgchDcaVcaXcaYcaTcaScaUcaOcaQcaPcaRcaPcaNcaMcaOcjXcjXcjXcjXcjXcjXbPybfMbTBbyGbyIbvibYgbvibVSbyFbTBbyEbUjbGKaaaaaaaaaaaaaaaaaabVudWDdWEcaZcaZcVPdWIcVQcgTdWFbXKdWLdWMdWFbXKdWLbVuaaaaaaaaaaaabudccCccCccCccLciCcbLcbRcbScbTcbUcbWcbUcbWcbXcbWccBaafaafchcaafcjGcjHcjHcjHcjHcjIciPcjJcjKcjKcjKcjKcjLaafchcaaaaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaafaaaaaaaaacbMbSZcctccuciHcjbccJccNciXbSZccDccIciWckjcimbSZciUccxciIcczciMcchcclbSZcbrcbrcbrbSZccbchCcbYbQGcbhccMchEcbVcaYcaTcaSccscaOccrccqccoccnccmcaPcaOcVUcVTcVTcVScVRcjdbPybfMbTBbVSbnsbnrbVSbntbnpbnobTBbnqcWmbGKaaaaaaaaaaaaaaaaaabVucsjdYFcjgdWPdWQdWRdWNciFcsjbXKcjadWMdWScsRcjabVuaaaaaaaaaaaaccQbudcdcccTccTcVVcWecWicdncdocdtcdwcdrcdscdycdAcdxaaaaaachcaafckzckzckzckzckzaaaciPaafckzckzckzckzckzaaachcaaacmdaaaaaacmdaaaaaacmdcmdcmdcmdcmdcmdcmdaaaaaacmdaaaaaacmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaccXclgccUclgccWcjBcjecjfcjrcjfcjecjfcjrcjfcjicjfcjecjfcjrcjfcjqcjOcjOcjPcdfcdgcdhcdibQGcjCbQGbQGbQGbQGbQGbQGcddcjjcjhcjocaOcaOcaOcaOcaOcaOcaOcaOcWpcVTcVTcWrcWqcVFbPybfMbTBbsJbsDcWtbVSdWKbYdbsybTBbSabhObGKaaaaaaaaaaaaaaaaaabVudWScsQcjzcaZccKdWYdXbcaZcjwdXadWUdWTcjRdWVdWXbVuaafaafaaaaaaaaaaaaclkaaabudcWucdCcdHcdIcdGcdCcjAcdFcdGcdCcdJbudaaaaaachdaaaaafaaaaafaaaaafaaacobaaaaafaaaaafaafaafaafchcaaacmdcmdcmdcmdaaacmdcmdcmdcmdcmdcmdcmdcmdcmdaaacmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGvaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaafaafaafaaaaafcdlaafcdmaafcdlaafcdmaafcdlaafcdmaafaaaaafcdlaafcdmaafaaaaaabQGcjZclpcoPcpBcnHcjOcjTcjUcjQcfPcjVcdUcdRcdScdUceHcexcepcePceLceKceoceoceocpJcWxcWxcWxcWycWxcVFbPybfMbTBbTBbVPcoicohcoibVPcojbTBbGKbXIbGKaaaaaaaaaaaaaaaaaabVudXmdXndWPcaZdXidXjcWzcaZceQceRceXceTbYXceSbYTbZJaaaaaaaaaaaaaaaaaacooaafbudcWAcficWEcfccWDcfecWCcfccWBcfscWFbudaaaaaachcaaaciOciOciOciOciOaafcfVaafciOciOciOciOciOaafchcaaacmdcmdcmdcmdaaacmdcmdcmdcmdcmdcmdcmdcmdcmdaaacmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaafaafbTecdXcdMcdWbTecdXcdMcdWbTecdNcdMcdLbTeaaabTecdNcdMcdLbTeaaaaaabQGbQGcfRcfRcfRcfRcfRcracfRcgpceocfUcdPcjYcdPcdPcfNcfPcfOcjScfHcWHcWGcdPcdPcWRcWPcWKcWIcWMcWLcVFbPycmHdXccmNbVPckmbYdcklbVPcmQaafcmRcmScmRaaaaaaaaaaaaaaaaaabVudXtcghcspcWTdXqdXrdUUcbNcgOaafaaaclZaagcgLckkaaaaaaaaaaaeaaaaaaaaaaaaaaabudcWSccCccCcfccgsccCccCcfccgsccCccCbudaafaafchcaafcjGcjHcjHcjHcjHcoQcoRcoQcjKcjKcjKcjKcjLaafchcaaacmdcmdcmdcmdaaacmdcmdcmdcmdcmdcmdcmdcmdcmdaaacmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaabTeckqcgMcksbTeckWchPclbbTeckNcemckSbTeaaabTeclnbVqclcbTeaaaaaaaaachnbZdcgVbZpchbcgWcrbdDUcrjcrjcdZcrjcgEcdYcehckocdYcefcgEceecknceabYocgpcgpcVFcVvcWWcWVcWUcVFbGKbvKdXgdXhbVPcoicqmcoibVPcmQaafaaaaafaaaaaaaaaaaaaaaaaaaaabVudXtbYLdXzdXAdXAdVRcjadXybVuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabudcWXccCccCcfcchQccCccCcfcchQccCccCbudaaaaaachcaafckzckzckzckzckzaaacfVaaackzckzckzckzckzaaachcaaacmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaabTecfBcgNcfBbTechVciechVbTebUhcesbUhbTeaaabTebUhbUhbVrbTeaaaaaaaaabYmcifbXTchmdYKcigcrbbYKcrjceAceBceObYrceDcakcetcewcevbYrceCcloceybYoaaaaafcVFcWZclJcXaaafaaabGKbPybPycpqbVPclQcpoclMbVPcmQaafaafaaaaaaaaaaaaaaaaaaaaaaaabVudVPcsSdVRciGciGdVQbXKdVSbVuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabudccCccCccCcfccihccCccCcfccihccCccCbudaaeaaachcaaaaaaaafaafaafaaaaaacfVaafaaaaaaaafaafaaaaaachcaaacmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaampaaaaaaaaaaafbTecfBceGcfBbTechVcijchVbTebUhceIbUhbTeaaabTebUhbUhbUhbTeaaaaaaaaabYmbXZcikbYNbXZcigcrhcivcrjbYIceMclVbYrclRciJceUclXcfwbYrcfacmnceYbYoaaaaaacVFcXdcmpcXbaaaaaabGKbPybPybGKbVPcrJcrJcrJbVPcrIckkaaaaaaaaaaaaaaaaaaaaaaaaaaabVudVTcYGbXKbXKbXKbXKbXKdVUbVuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccQbudbudbudbudbudbudbudbudciKciKciKccQaaaaaachcchcchcchcchcaaaaaaaaacfVaaaaaaaaachcchcchcchdchcaaacmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaafbTebTebTebTebTebTebTebTebTebTebTebTebTeaaabYybTebTebTebYyaaaaaaaaabYmcVjbXTbXYbXZbYabXRcVicrjbYlbYfbYibYjbYkbYwbWkbYxbXNbYrbYqbYtbYsbYoaafaaacVFcVvcVucVFcVwaaabGKbXBbPydVOcqRaafaafaafaaaclkaafaafaaaaaaaaaaaaaaaaaaaaaaaabZJbVubVubXCdVZdVQdVQdVQdVYbXCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabXlbXlbXlaaaaaaaaaaaaaaaaaaaaaaaaaaachcaafcqEaafchcaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYmbYQbXTbYNbXZbYMbZabYKcrjbYIbYfbYZbYrbYGbYFcfnbYDbYvbYrbYJbYAbYzbYoaagcVGcVGcVGcVGcVGcVGcVGbGKbUxctgdVVaafaaaaaaaafaaaclZaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYCciGciGciGciGciGbYCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaachcaaaaafaaachcaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaalQaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaabYSaaaaaaaaaaaaaaaaaaaaaaaabZbbZdbZfbZmdYLbZqbXRbYKcrjbYVbYYbZgbYrbZhbZsbZcbZtbZebYrbZibZxbZwbYoaaacVGcVGcVGcVGcVGcVGcVGbGKdVWcdjbGKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabVubYXbYRbYRbYRbYTbVuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaachcchcchcchcchcaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaacfRcfRcfRcfRcfRbZEbZjbZjbZjbZjbZjbZjcgabZBbZAcfIcftbZjbZjbZnbZjbZjbZjcVGcVGcVGcVGcVGcVGcVGaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdaaaaaacmdcmdcmdcmdcmdcmdcmdaaaaaacmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaampaaaaaaaafaafaaaaafaafaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZraaaaaabZIbZQbZSbZUcadbZjcRQcaebZZcaacabbZCcahbZDcgmbZCcdEbZybZCcagbZCbZjcVGcVGcVGcVGcVGcVGcVGaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaacfWcfXcfYaaacfWcfXcfYaaacfWcfXcfYaafaafaaaaaaaaaaaaaafaafaaaaaaaaaaaabZYaaabZIcajbZSbZUcavbZjcaucPScaobZCbZCbZCbZCbZDbZCbZCbZDbZCbZHcgtbZLbZjcVGcVGcVGcVGcVGcVGcVGaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaacfWchecfYaaacfWchecfYaaacfWchecfYaafaafaafaafaaaaaabYnaaaaaaaaaaafaaaaaaaaabZIbZIbZIbZIcaFbZjcaHcafcaIcafcafcafcdecaLcdvcafcamcafcdBcancgGbZjaafaafalPaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalPaafcfWchecfYaaacfWchecfYaafcfWchecfYaafaaaaaaaafaafcaqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZIcgbcgjcfQcfZcgDcfZcglcgncdTcgXcdOcascascfocdVcancgYbZjaaaaaaalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaacfWchecfYaafcfWchecfYaaacfWchecfYaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZIecWctkcPDbZCecXcaccaccSfecTcRfecScRfecVcWYecUdTNcWgbZjaaaaaaalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQalQalPaafaaacfWchecfYaafcfWchecfYaaacfWchecfYaafaaaaaaaaaaaaaafaafcjMcjNcjNcjNcjNcOXcPddfHecPcOXecQecObZjbZCbZCcPVbZjbZjbZjcQHcWdcQNbZjbZjbZjecRcRccPSbZjaafaaachdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaafaaaaafaafckAaafaafaafckAaafaaaaafckAaafaaaaaaaaaaaaaaackBckCckDckEckFcPBcPqdhRdgEdigdicdicdihdpKbZjcOWbZCcvGcttcvEcIGecNcOLecMcIGctscttecKecLecJbZjaaaaaaalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaacbMcjlbSZbSZbSZcEBbSZbSZcmmbSZbSZbSZcmmbSZcskcECcicbSZcmmcibbSZcVHcTobSZcRbcxrbSZcPacFacWscWocWlcEScWccVKcVIcEScEScEUcjncrccjmcjkcjkckacjkcjkcrgcjscjscreclHclHcjXbPybfMbTBbTBbTBbTBdYHbTBbTBbTBbTBbPybPybGKbGKbGKbGKbGKbGKaaacaZdXmdZicaZcaZdeLdZgdZddZcdZfdZedZadZbcspcsqdYZbXKdYYbVuaaaaaabudcfccfccfccfccnYcbWcmscnWcnVcmicbWcbWcnXcbWcnUbudaaaaaachcaafckzckzckzckzckzaaaciPaaackzckzckzckzckzaafchcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaachdaaaaaaaaaaaacbMcicbSZbSZbSZcjebSZbSZcmmbSZbSZbSZcmmbSZcjecmmcicbSZcmmcidcDnclTcaiclUcljcbsbSZbSZbSZdgSdgzbQGbQGbQGbQGcDfclrcaTcaSccsciRclYcaPcmbcmjcaPcmkcaOcpKcmlcfgcqGcencjXcpIbfMbTBcpHbhMbhLbYhbhKcoAbhPbTBbSabhObGKaaaaaaaaaaaaaaaaaabVudfIdWicwJcCVdWjcsidWndWodfzcsTcsQdWdcsRdWedWfbVudWgbVuaaaaaabudcnbcmXcmYccLcnacdycpFcoBcpGcpmcplcpAcprcpkcCUbudaaaaaachcaaaaafaaaaafaafaafaaaciPaaaaafaaaaafaaaaafaaachcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaacbMcicbSZbSZclKdgwckickiclBckickickiclBckidgwclDclGckiclIckicCRclhcljcliclhcCJcCJcCJcCJcWwcWvcCQchRclAclzclxclrcBycdzccsclacldcaPcaPcCEcaPclecaOcqhcqhclfcqGcencjXbPybfMbTBbvhbvibVTbVSbvmbVSbvbbTBbTfbvgbGKaaaaaaaaaaaaaaaaaabVucAMcvNctecsGdWxcjadWzdWAdWqdWBcgidWrdWqdWpdWsbVubVubVuaaaaaabudccCcoLccCcoKcmEcbWcoFcoBcozcbUcbWcoxcfccfccfcbudaaaaaachcaaaciOciOciOciOciOaafciPaafciOciOciOciOciOaafchcaaaaaaaaaaaaaaaaaaaaaaaacmdaaaaaaaaacmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaacbMcbJcizcbDcircjbcincbDciicbDchZcbDchUcbDcjbchTcbBchScbzchRchMcbscbubSZchJchJchKcbrcbrcimcbhchFcbgchDcaVcaXcaYcaTcaScaUcaOcaQcaPcaRcaPcaNcaMcaOcjXcjXcjXcjXcjXcjXbPybfMbTBbyGbyIbvibYgbvibVSbyFbTBbyEbUjbGKaaaaaaaaaaaaaaaaaabVudWDdWEcaZcaZcVPdWIcVQcgTdWFbXKdWLdWMdWFbXKdWLbVuaaaaaaaaaaaabudccCccCccCccLciCcbLcbRcbScbTcbUcbWcbUcbWcbXcbWccBaafaafchcaafcjGcjHcjHcjHcjHcjIciPcjJcjKcjKcjKcjKcjLaafchcaaaaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaafaaaaaaaaacbMbSZcctccuciHcjfccJccNciXbSZccDccIciWckjcjebSZciUccxciIcczciMcchcclbSZcbrcbrcbrbSZccbcjdcbYbQGcbhccMchEcbVcaYcaTcaSccscaOccrccqccoccnccmcaPcaOcVUcVTcVTcVScVRcjibPybfMbTBbVSbnsbnrbVSbntbnpbnobTBbnqcWmbGKaaaaaaaaaaaaaaaaaabVucsjdYFcjgdWPdWQdWRdWNciFcsjbXKcjadWMdWScsRcjabVuaaaaaaaaaaaaccQbudcdcccTccTcVVcWecWicdncdocdtcdwcdrcdscdycdAcdxaaaaaachcaafckzckzckzckzckzaaaciPaafckzckzckzckzckzaaachcaaacmdaaaaaacmdaaaaaacmdcmdcmdcmdcmdcmdcmdaaaaaacmdaaaaaacmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaccXclgccUclgccWcjPcjqcjrcjOcjrcjqcjrcjOcjrcjBcjrcjqcjrcjOcjrcjCcjTcjTcjUcdfcdgcdhcdibQGcjQbQGbQGbQGbQGbQGbQGcddcjjcjhcjocaOcaOcaOcaOcaOcaOcaOcaOcWpcVTcVTcWrcWqcVFbPybfMbTBbsJbsDcWtbVSdWKbYdbsybTBbSabhObGKaaaaaaaaaaaaaaaaaabVudWScsQcjzcaZccKdWYdXbcaZcjwdXadWUdWTcjRdWVdWXbVuaafaafaaaaaaaaaaaaclkaaabudcWucdCcdHcdIcdGcdCcjAcdFcdGcdCcdJbudaaaaaachdaaaaafaaaaafaaaaafaaacobaaaaafaaaaafaafaafaafchcaaacmdcmdcmdcmdaaacmdcmdcmdcmdcmdcmdcmdcmdcmdaaacmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGvaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaafaafaafaaaaafcdlaafcdmaafcdlaafcdmaafcdlaafcdmaafaaaaafcdlaafcdmaafaaaaaabQGcoPcpBcracrbcpJcjTcjZclpcjVcfPcnHcdUcdRcdScdUceHcexcepcePceLceKceoceoceocrhcWxcWxcWxcWycWxcVFbPybfMbTBbTBbVPcoicohcoibVPcojbTBbGKbXIbGKaaaaaaaaaaaaaaaaaabVudXmdXndWPcaZdXidXjcWzcaZceQceRceXceTbYXceSbYTbZJaaaaaaaaaaaaaaaaaacooaafbudcWAcficWEcfccWDcfecWCcfccWBcfscWFbudaaaaaachcaaaciOciOciOciOciOaafcfVaafciOciOciOciOciOaafchcaaacmdcmdcmdcmdaaacmdcmdcmdcmdcmdcmdcmdcmdcmdaaacmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaafaafbTecdXcdMcdWbTecdXcdMcdWbTecdNcdMcdLbTeaaabTecdNcdMcdLbTeaaaaaabQGbQGcfRcfRcfRcfRcfRcrvcfRcgpceocfUcdPcjYcdPcdPcfNcfPcfOcjScfHcWHcWGcdPcdPcWRcWPcWKcWIcWMcWLcVFbPycmHdXccmNbVPckmbYdcklbVPcmQaafcmRcmScmRaaaaaaaaaaaaaaaaaabVudXtcghcspcWTdXqdXrdUUcbNcgOaafaaaclZaagcgLckkaaaaaaaaaaaeaaaaaaaaaaaaaaabudcWSccCccCcfccgsccCccCcfccgsccCccCbudaafaafchcaafcjGcjHcjHcjHcjHcoQcoRcoQcjKcjKcjKcjKcjLaafchcaaacmdcmdcmdcmdaaacmdcmdcmdcmdcmdcmdcmdcmdcmdaaacmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaabTeckqcgMcksbTeckWchPclbbTeckNcemckSbTeaaabTeclnbVqclcbTeaaaaaaaaachnbZdcgVbZpchbcgWcrHdDUcrjcrjcdZcrjcgEcdYcehckocdYcefcgEceecknceabYocgpcgpcVFcVvcWWcWVcWUcVFbGKbvKdXgdXhbVPcoicqmcoibVPcmQaafaaaaafaaaaaaaaaaaaaaaaaaaaabVudXtbYLdXzdXAdXAdVRcjadXybVuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabudcWXccCccCcfcchQccCccCcfcchQccCccCbudaaaaaachcaafckzckzckzckzckzaaacfVaaackzckzckzckzckzaaachcaaacmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaabTecfBcgNcfBbTechVciechVbTebUhcesbUhbTeaaabTebUhbUhbVrbTeaaaaaaaaabYmcifbXTchmdYKcigcrHbYKcrjceAceBceObYrceDcakcetcewcevbYrceCcloceybYoaaaaafcVFcWZclJcXaaafaaabGKbPybPycpqbVPclQcpoclMbVPcmQaafaafaaaaaaaaaaaaaaaaaaaaaaaabVudVPcsSdVRciGciGdVQbXKdVSbVuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabudccCccCccCcfccihccCccCcfccihccCccCbudaaeaaachcaaaaaaaafaafaafaaaaaacfVaafaaaaaaaafaafaaaaaachcaaacmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaampaaaaaaaaaaafbTecfBceGcfBbTechVcijchVbTebUhceIbUhbTeaaabTebUhbUhbUhbTeaaaaaaaaabYmbXZcikbYNbXZcigcDecivcrjbYIceMclVbYrclRciJceUclXcfwbYrcfacmnceYbYoaaaaaacVFcXdcmpcXbaaaaaabGKbPybPybGKbVPcrJcrJcrJbVPcrIckkaaaaaaaaaaaaaaaaaaaaaaaaaaabVudVTcYGbXKbXKbXKbXKbXKdVUbVuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccQbudbudbudbudbudbudbudbudciKciKciKccQaaaaaachcchcchcchcchcaaaaaaaaacfVaaaaaaaaachcchcchcchdchcaaacmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaafbTebTebTebTebTebTebTebTebTebTebTebTebTeaaabYybTebTebTebYyaaaaaaaaabYmcVjbXTbXYbXZbYabYJcVicrjbYlbYfbYibYjbYkbYwbWkbYxbXNbYrbYqbYtbYsbYoaafaaacVFcVvcVucVFcVwaaabGKbXBbPydVOcqRaafaafaafaaaclkaafaafaaaaaaaaaaaaaaaaaaaaaaaabZJbVubVubXCdVZdVQdVQdVQdVYbXCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabXlbXlbXlaaaaaaaaaaaaaaaaaaaaaaaaaaachcaafcqEaafchcaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYmbYQbXTbYNbXZbYMbZibYKcrjbYIbYfbZhbYrbYGbYFcfnbYDbYvbYrbZgbZabYZbYoaagcVGcVGcVGcVGcVGcVGcVGbGKbUxctgdVVaafaaaaaaaafaaaclZaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYCciGciGciGciGciGbYCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaachcaaaaafaaachcaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaalQaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaabYSaaaaaaaaaaaaaaaaaaaaaaaabZbbZdbZfbZmdYLbZqbYJbYKcrjbYVbYYbZwbYrbZxbZsbZcbZtbZebYrbZAbZEbZBbYoaaacVGcVGcVGcVGcVGcVGcVGbGKdVWcdjbGKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabVubYXbYRbYRbYRbYTbVuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaachcchcchcchcchcaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaacfRcfRcfRcfRcfRbZSbZjbZjbZjbZjbZjbZjcgabZQbZIcfIcftbZjbZjbZnbZjbZjbZjcVGcVGcVGcVGcVGcVGcVGaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdaaaaaacmdcmdcmdcmdcmdcmdcmdaaaaaacmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaampaaaaaaaafaafaaaaafaafaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZraaaaaabZUbZZcaacabcahbZjcRQcajcadcaecagbZCcaubZDcgmbZCcdEbZybZCcaobZCbZjcVGcVGcVGcVGcVGcVGcVGaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaacfWcfXcfYaaacfWcfXcfYaaacfWcfXcfYaafaafaaaaaaaaaaaaaafaafaaaaaaaaaaaabZYaaabZUcavcaacabcaIbZjcaHcPScaFbZCbZCbZCbZCbZDbZCbZCbZDbZCbZHcgtbZLbZjcVGcVGcVGcVGcVGcVGcVGaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaacfWchecfYaaacfWchecfYaaacfWchecfYaafaafaafaafaaaaaabYnaaaaaaaaaaafaaaaaaaaabZUbZUbZUbZUcaLbZjcdecafcdvcafcafcafcdOcdBcdTcafcamcafcdVcancgGbZjaafaafalPaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalPaafcfWchecfYaaacfWchecfYaafcfWchecfYaafaaaaaaaafaafcaqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZUcgncgDcgjcglchCcglcgZchgcfQcgXcfocascascgbcfZcancgYbZjaaaaaaalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaacfWchecfYaafcfWchecfYaaacfWchecfYaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZUecXctkcPDbZCecYcaccaccSfecUcRfecTcRfecWcWYecVdTNcWgbZjaaaaaaalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQalQalPaafaaacfWchecfYaafcfWchecfYaaacfWchecfYaafaaaaaaaaaaaaaafaafcjMcjNcjNcjNcjNcOXcPddfHecQcOXecRecPbZjbZCbZCcPVbZjbZjbZjcQHcWdcQNbZjbZjbZjecScRccPSbZjaafaaachdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaafaaaaafaafckAaafaafaafckAaafaaaaafckAaafaaaaaaaaaaaaaaackBckCckDckEckFcPBcPqdhRdgEdigdicdicdihdpKbZjcOWbZCcvGcttcvEcIGecOcOLecNcIGctscttecLecMecKbZjaaaaaaalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalPaafcltclucluclvclwclwclwclwclwclwclwclwclwclwclwclwclwclwcEZclydidcELcBvclCcwKclEdyKdyKdyKdyKdyMdyKdyNbZjbZCbZCcvGcttcvEcwIctpcyWcyXcwIctscttcyVbZCcyhbZjaaaaaaalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvaaactvctvctvctvctvaaactvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaafaaaaafaafcmeaafaaaaafcmeaafaaaaafcmeaafaaaaaaaaaaaaaaackBckCcmfcmgcmhdcCcjNdyPdyOdicdicdyQdyQdyRbZjbZCbZCcvFcttcvEctoctpctqctmctoctscttctrbZCbZCbZjaaaaaaalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvaaactvctvctvctvctvaaactvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQalQalPaafaafcfWcmLcfYaaacfWcmLcfYaaacfWcmLcfYaafaaaaaaaaaaaaaafaafcmMcjNcjNcjNcjNcOXcPddfHdfHdgDcOXcOXbZjbZjctkbZjbZjbZjbZjbZjctlbZjbZjbZjbZjbZjctkbZjbZjaafaafalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -11247,7 +11252,7 @@ ctFcuBcuAcupcuycuzcuxcuvcurcyIcwwcwQcwgcwPcwxcwucxZcuzcuucuAcupcuvcuocuycutcuqct ctEcuycuqcuwcuvcuCcuAcuxcuucwtcwfcwgcwhcwicwjcwkcyRcuBcutcuqcuwcuxcurcuvcupcuzctIcuFcuGcuKcuHcuIcuJctNcudctPctQctRctSctTcuDcuEcuFcwacwncwocwpcwqcwrctOctPctQctRctSctTcuDcuEcuFctXcujaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacuLcuMcwscuMcuMcvscuOcvccvdcvccvdcvccuOcwddQcdQydQwcwdcuOcuTcvfcuTcvfcuTcuOcuUcuUcuUcuUcuUcuObkrdWcbkrdWcbkrcuOcvHcvicvicvicvIcuZ ctAcuvcuzcuscuxcuocuqcuAcutcwzcwlcwucwvcwwcwhcwgcvQcxPcupcuzcuscuAcuucuxcuwcuCctyctQctRctSctTcuDcuEcuFctXcuKcuHcuIcuJctNctOctPctQcwAcwBcwCcwDcwEcwFcuEcuKcuHcuIcuJctNctOctPctQcugcujaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacuLcvncuMcwGcuMcvacuOcuPcuQcuPcuQcuPcuOcwHdQzdQDdQBcwHcuOcuTcuTcuTcuTcuTcuOcuUcuUcuUcuUcuUcuObkrbkrbkrbkrbkrcuOcwLcwMcwMcwMcwNcuZ ctGcuxcuCcuBcuAcurcuzcuqcwzcvOcwxcwOcwfcwPcwvcwucwQcTycwRcuCcuBcuqcutcuAcuscuoctHcuEcuFcuGcuKcuHcuIcuJcucctOctPctQctRctSctTcuDcuEcwScwTcwUcwVcwBcwWctNctOctPctQctRctSctTcuDcuEctWcujaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacwXcwYcwYcwYcwYcwYcwZcwYcwYcwYcwYcwYcwZcwYcwYcwYcwYcwYcwZcxacxacxacxacxacwZcxacxacxacxacxacwZcxacxacxacxacxacwZcxacxacxacxacxacxb -ctDcuAcuocuycuqcuucuCcuzcwRcwucwQcwycwlcwkcwfcwOcwicwhcxccuocuycuzcupcuqcuBcurctKctOctPctQctRctSctTcuDctVcuFcuGcuKcuHcuIcuJctNctOcxdcwAcxecvWcvXcvYcuEcuFcuGcuKcuHcuIcuJctNctOcuecujaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacuLcxfcxgcxhcxfcxgcuOcxicxicxicxicxicuOcxjcxjcxjcxjcxjcuOcxkcxkcxlcxmcxmcuOcxncxocxpcxncxqcuOcxrcxscxscxscxtcuOcxucxvcxvcxvcxwcuZ +ctDcuAcuocuycuqcuucuCcuzcwRcwucwQcwycwlcwkcwfcwOcwicwhcxccuocuycuzcupcuqcuBcurctKctOctPctQctRctSctTcuDctVcuFcuGcuKcuHcuIcuJctNctOcxdcwAcxecvWcvXcvYcuEcuFcuGcuKcuHcuIcuJctNctOcuecujaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacuLcxfcxgcxhcxfcxgcuOcxicxicxicxicxicuOcxjcxjcxjcxjcxjcuOcxkcxkcxlcxmcxmcuOcxncxocxpcxncxqcuOdqBcxscxscxscxtcuOcxucxvcxvcxvcxwcuZ ctLcuqcurcuvcuzcutcuocuCcxccwOcwicwjcwxcwgcwlcwycwwcwvcxxcurcuvcuCcuwcuzcuycuuctBctSctTcuDcuEcuFcuGcuKctZcuIcuJctNctOctPctQctRctSctPcuFcuGcuKcuHcuDcuHcuIcuJctNctOctPctQctRctScuicujaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacuLcxgcxhcxfcxgcxhcuOcxicxycxicxicxicuOcxjcxzcxAcxBcxjcuOcxCcxCcxDcxEcxEcuOcxqcxFcxGcxHcxIcuOcxJcxKcxKcxKcxLcuOcxMcxNcxNcxNcxOcuZ ctIcuzcuucuxcuCcupcurcuocxxcwycwwcwhcwQcwucwxcwjcwPcwfcxPcuucuxcuocuscuCcuvcutctJcuGcuKcuHcuIcuJctNctOcuectQctRctSctTcuDcuEcuFcuGcvVcvWcvXcvYcvZcwactPctQctRctSctTcuDcuEcuFcuGctYcujaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacuLcxhcxfcxgcxhcxfcuOcxicxicxicxQcxicuOcxjebVebVebVcxjcuOcxCcxScxScxScxEcuOcxncxTcxncxocxncuOcxJcxKcxKcxKcxLcuOcxMcxNcxNcxNcxOcuZ ctycuCcutcuAcuocuwcuucurcxPcwjcwPcwvcwicwOcwQcwhcwkcwlcxUcutcuAcurcuBcuocuxcupctMcuHcuIcuJctNctOctPctQcugctSctTcuDcuEcuFcuGcuKcuHcwacxVcxWcxXcxYcwrctRctSctTcuDcuEcuFcuGcuKcuHcuacujaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacuLcxfcxgcxhcxfcxgcuOcxicxicxicxicxicuOcxjcxjcxjcxjcxjcuOcxCcxDcxDcxDcxEcuOcxocxncxqcxGcxqcuOcxJcxKcxKcxKcxLcuOcxMcxNcxNcxNcxOcuZ @@ -11256,7 +11261,7 @@ ctKcurcuwcuzcuucuBcupcutcxZcwvcwgcwlcwPcwjcwwcwfcwucwQcypcuwcuzcutcuvcuucuqcusct ctBcuucuscuCcutcuycuwcupcypcwfcwucwxcwkcwhcwPcwlcwOcwicyIcuscuCcupcuxcutcuzcuBctFctPctQctRctSctTcuDcuEctWcuGcuKcuHcuIcuJctNctOctPcxdcwAcxecvWcvXcvYcuFcuGcuKcuHcuIcuJctNctOctPcufcujaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacuLcxfcxgcxhcxfcxgcuOcxicxicxicxicxycuOcxjdQJdQHdQIcxjcuOcyJcxDcyKcxDcyLcuOcyAcyMcyNcyOcyCcuOcyPcxKcxKcxKcyQcuOcyGcxNcxNcxNcyHcuZ ctJcutcuBcuocupcuvcuscuwcyIcwlcwOcwQcwgcwvcwkcwxcwycwwcyRcuBcuocuwcuAcupcuCcuyctEcuFcuGcuKcuHcuIcuJctNcudctPctQctRctSctTcuDcuEcuFcuGcuKcuHcuIcuJctNctOctPctQctRctSctTcuDcuEcuFctXcujaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacuLcxgcxhcxfcxgcxhcuOcyScxicxicxicxicuOcxjdQJdQHdQIcxjcuOcyJcyTcyTcyTcyLcuOcyMcyNcyNcyNcyOcuOcyPcxKcxKcxKcyQcuOcyGcxNcxNcxNcyHcuZ ctMcupcuycurcuwcuxcuBcuscyRcwxcwycwicwucwfcwgcwQcwjcwPcyUcuycurcuscuqcuwcuocuvctActRctSctTcuDcuEcuFcuGctYcuHcuIcuJctNctOctPctQctRctSctTcuDcuEcuFcuGcuKcuHcuIcuJctNctOctPctQctRcuhcujaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacuLcxhcxfcxgcxhcxfcuOcxicyecxicytcxicuOcxjdQGdQEdQFcxjcuOcyJcyJcxDcyLcyLcuOcyNcyNcyNcyNcyNcuOcyPcxKcxKcxKcyQcuOcyGcxNcxNcxNcyHcuZ -ctzcuwcuvcuucuscuAcuycuBcyUcwQcwjcwwcwOcwlcwucwicwhcwkcyYcuvcuucuBcuzcuscurcuxctGcuJctNctOctPctQctRctScuicuDcuEcuFcuGcuKcuHcuIcuJctNctOctPctQctRctSctTcuDcuEcuFcuGcuKcuHcuIcuJcuccujaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacuLcxfcxgcxhcxfcxgcuOcxicxicxicxicyScuOcxjcxjcxjcxjcxjcuOcyZcyZczaczbczbcuOcyNcyNcyNcyNcyNcuOczcczdczdczdczecuOczfczgczgczgczhcuZ +ctzcuwcuvcuucuscuAcuycuBcyUcwQcwjcwwcwOcwlcwucwicwhcwkcyYcuvcuucuBcuzcuscurcuxctGcuJctNctOctPctQctRctScuicuDcuEcuFcuGcuKcuHcuIcuJctNctOctPctQctRctSctTcuDcuEcuFcuGcuKcuHcuIcuJcuccujaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacuLcxfcxgcxhcxfcxgcuOcxicxicxicxicyScuOcxjcxjcxjcxjcxjcuOcyZcyZczaczbczbcuOcyNcyNcyNcyNcyNcuOczcczdczdczddqYcuOczfczgczgczgczhcuZ ctCcuscuxcutcuBcuqcuvcuycyYcwicwhcwPcwycwxcwOcwwcwvcwgczicuxcutcuycuCcuBcuucuActDcuHcuIcuJctNctOctPctQcugctSctTcuDcuEcuFcuGcuKcuHcuIcuJctNctOctPctQctRctSctTcuDcuEcuFcuGcuKcuHcuacujaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczjczkczkczkczkczkczlczkczkczkczkczkczlczkczkczkczkczkczlczkczkczkczkczkczlczkczkczkczkczkczlczkczkczkczkczkczlczkczkczkczkczkczm ctFcuBcuAcupcuycuzcuxcuvczicwwcwvcwkcwjcwQcwycwPcwfcwuczncuAcupcuvcuocuycutcuqctLctSctTcuDcuEcuFcuGcuKctZcuIcuJctNctOctPctQctRctSctTcuDcuEcuFcuGcuKcuHcuIcuJctNctOctPctQctRctScuicujaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ctEcuycuqcuwcuvcuCcuAcuxczncwPcwfcwgcwhcwicwjcwkcwlcwOcwtcuqcuwcuxcurcuvcupcuzctIcuEcuFcuGcuKcuHcuIcuJcucctOctPctQctRctSctTcuDcuEcuFcuGcuKcuHcuIcuJctNctOctPctQctRctSctTcuDcuEctWcujaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -11391,13 +11396,13 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPgcPicPicPtcPucPvcPtcPucPudYldYhdYmcPucPxcPycPhcPicPidiVdRrdRrdRrdRrdRrcOycPkcLvcPlcJJcJJcJJcLccLvcPkcNdcNdcNdcNdcNdcNdaaaaaacOVcPLcOYcOYdancRWcRWdakcOVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPgcPicPtdazdiWdavcPEcPFcPFcPFcPFcPFcPFcPGcPHcPhcPicPidRsdRrdRrdRrdRrdRrcOycPkcLvcPlcJJcJJcJJcPncLvcPkcPKcPKcPKcPKcPKcNdaaaaaadXIcPLcOYcOYdXIcQMcQMcQMcOVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPgcPidYfcPCcPNcPCcPOcPCcPCcPCcPCcPCcPCcPCdiQcPicPicPicOycOycOycOycQccWbcOycPkcLvcPlcJJcJJcJJcVqcWacKwcRVcRVcRVcRVcRVcRVcRVcRXcOVcZIcOYcOYdaccPpcPpcPpcPsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPgcPicPUdaediRdafcPEcPXcPXcPXcPXcPXcPXcPYcPZcPhcPicPicOydhjdhJdPFdPtdPtcOydKhdKjdiycJJcJJcJJcJJcUPcQhcQhcQhcQhcQhcUGdiOcUDdiOecYcOYcOYcOYcOYdaddadcPMdXIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPgcPicPUdaediRdafcPEcPXcPXcPXcPXcPXcPXcPYcPZcPhcPicPicOydhjdhJdPFdPtdPtcOydKhdKjdiycJJcJJcJJcJJcUPcQhcQhcQhcQhcQhcUGdiOcUDdiOedecOYcOYcOYcOYdaddadcPMdXIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPgcPicPicPUcPucQmcPUcPucPudYldYhdYmcPucQncPycPhcPicPicOydPQdPUdQfdPtdPtdQgdQQdQXcJJcJJcJJcJJcJJcUPcQhcQhcQhcQhcQhcUGcSacRVcRXcOVdahcOYcPMdYgcPLcOYdagcOVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPgcPicPicPicPicPicPicPicPicPicPicPicPicPicPjcPhcPicPicOydRhdRidRjdPtdPtdQgdQQdQXcJJcJJcJJcJJdRfdRgcRVdRecQhcQhcQwdiScNdaaaaaadYgcPLcOYcPMdYecPLcOYcPMdYgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOycOycOycOycOycOycQzcQzcQzcQzcQzcQzcQzcQzcQzcQzcQzcQzcQzcVCcVCcVCcQAcQAcQzcVBcLfcVxcJJcJJcJJcPncQQcPkcVMcQhcUGcVOcVNcNdaaaaaadYecPLcOYcPMdYecPLcOYcPMdYeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOycUXcUYcUYcUYcURcUVcQLcQAcQAcQAcQAcQAcQAcQAcQAcQAcQAcQAcQAcQAcQAcQAcQAcQzcPkcLvcPlcJJcJJcJJcVqcVpcRVcVrcQhcQhcQScVscNdaaaaaadXXcPLcOYcPMdYecPLcOYcPMdXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOycPbcPbcPbcPbcPbcUJcQTcUHcUKcQYcQAcQWcUOcUNcQYcQAcQAcQAcQAcQAcQAcQAcQAcQzcPkcLvcPIcJJcJJcJJcJJcUPcQhcQhcQhcQhcQhcUGcSacRVcRXcOVcZIcOYcPMdXXcPLcOYcZKcOVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOycPbcQxcPbcPbcPbcQVcQTcUfcUicQYcQAcQWcSAcSzcQYcQAcQAcSecSecSecSecSecSecQzcShcSgcSrcSicUzcUzcUzcUAcUzcUzcQhcQhcQhcUGdiOcUDdiOdFWcOYcOYcOYcOYcOYcOYcPMdXIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOycPbcQxcPbcPbcPbcQVcQTcUfcUicQYcQAcQWcSAcSzcQYcQAcQAcSecSecSecSecSecSecQzcShcSgcSrcSicUzcUzcUzcUAcUzcUzcQhcQhcQhcUGdiOcUDdiOdiNcOYcOYcOYcOYcOYcOYcPMdXIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOycPbdiMcPbcPbcPbcQVcQLcQAcQAcQAcQAcQAcQAcQAcQAcQAcQCcRUcRUcRUcRUcRUcRUcQzcQzcQzcQzcQzdKddKdcQzcQzcQzcQzcSacRVcRVcRVcRVcRVcRXcOVdXUdXTdKfdXIcZBcOYcZrcOVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOycPbcPbcREcPbcRGcQVcQTcRNcRFcQYcQAcQWcRAcRzcQYcQAcQCcRycQBcQBcQBcQBcQBcQzcRBcRBcRBdJHcOtcOtcRRcRhcRhcQzcPKcPKcPKcPKcNdaaaaaacOVcRLcRMcPAcRgcOVcZpcZrcOVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOycQRcPbcPbcQPcPbcQVcQTcQUcQXcQYcQAcQWcRacQZcQYcQAcQCcQBcQBcQBcQBcQBcQBcQzdJFcWncWkdJEcOtcOtcOtcRhcRhcQzcNdcNdcNdcNdcNdaaaaaadXIcPAcPAcPAcZecOVcZdcZdcOVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -11411,9 +11416,9 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRvcRvcRvcRvcRvcRvcRvcRvcRvcRvcRvcRjcRjcRmcRjcRjcRvcRjcRjcRmcRjcRjcRjcRjcRjcRjcRjcQzcQzcQzcQzcQzcQzcQzcQzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRvcRjcRjcRjcRjcStcRjcRjcRjcRvcRvcRvcRvcRvcRvcRjcRvcRjcRvcRvcRvcRvcRvcRvcRvcRvcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRvcRjcSucSvcSvcSvcSvcSwcRjcRjcRjcRjcRjcRjcRjcRjcSxcRjcRjcRjcRjcRjcRjcRjcRjcRvcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRvcRjcSucSvcSvcSvcSvcSwcRjcSycVWcVYcVWcSBcSCcSCcSCcSCcSCcSBcSCcSBcSCcSDcRjcRvcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRvcRjcSucSvcSvcSvcSvcSwcRjcSycVWdEBcVWcSBcSCcSCcSCcSCcSCcSBcSCcSBcSCcSDcRjcRvcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRvcRjcSEcSvcSvcSvcSvcSFcRjcSCcSGcSGcSGcSGcSGcSCcSCcSCcSGcSGcSGcSGcSHcSIcRjcRvcRjcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRvcRjcSEcSJcSKcSKcSvcSvdKocSCcSCcSMcSNcSMcSCcSCcSCcSCcSCcSMcSNcSMcSOcSCcRjcRvcRvcRvcRvcRvcRvcRvcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRvcRjcSEdsbcSKcSKcSvcSvdKocSCcSCcSMcSNcSMcSCcSCcSCcSCcSCcSMcSNcSMcSOcSCcRjcRvcRvcRvcRvcRvcRvcRvcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRvcRjcRjcRjcRjcRjcRjcRjcRjcSCcSGcSGcSGcSGcSGcSCcSCcSCcSGcSGcSGcSGcSPcSCcRjcRjcRjcRjcRjcRjcRjcRvcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcSccRvcRjcRjcSQcSQcSQcSQcSQcRjcSRcSRcSRcSRcSRcSRcSRcSRcSRcSRcSRcSRcSRcSScSRcRjcSTcSTcSTcSTcSTcRjcRvcRvcSdcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcSccRjcRjcRjcSUcSUcSUcSUcSUcRjcSVcSWcSWcSWcSWcSWcSWcSWcSWcSWcSWcSWcSWcSXcSVcRjcSUcSUcSUcSUcSUcRjcRjcRjcSdcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -11428,7 +11433,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRscRjcRjcRjcRjcRjcRjcRjcTBcTCcTCcTCcTCcTCcTDcTEcTBcTCcTCcTCcTCcTFcTBcRjcRjcRjcRjcRjcRjcRjcRscRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTGcTLcTLcTLcTLcUecUdcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTG aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRscRscRvcRvcRvcRvcRvcRjcTBcTBcTHcTBcTHcTBcTBcTIcTJcTBcTHcTBcTHcTKcTBcRjcRvcRvcRvcRvcRvcRscRscRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTGcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTG aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRjcRjcRvcRmcTBcTBcTBcTOcTOcTOcTBcTBcTBcTOcTOcTOcTOcTOcTBcRmcRvcRjcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTGcTLcTLcTLcTLcTLdTrcUgcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTG -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcTRcTRcTRcTScTTcTUcTVcTBcTWcTXcTYcTZcUacUbcUccRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTGcTLcTLcTLcTLcTLcUhdTscTLcTLcTLcUecTLcUjcTLcTLcTLcTLcTLcTLcTG +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcTRcTRcTRdFWcTTcTUcTVcTBcTWedfcTYcTZcUacUbcUccRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTGcTLcTLcTLcTLcTLcUhdTscTLcTLcTLcUecTLcUjcTLcTLcTLcTLcTLcTLcTG aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTGcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTG aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTGcTLcTLcUdcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTPcTLcTLcTG aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTGcTLcTLcUecUdcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcUdcTLcTLcTG @@ -12055,13 +12060,13 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqVdrgdrhdqTdqTdqTdqTdqTdqTdridridridrjdrkdrcdqTdqTdqTdrlduvduUduUduXdrpdrqdrrdrsdrsdqXdrsdrtdruaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadrvdrhdqTdqTdqTdqTdqTdqTdqTdridrwdrxdrydrjdrkdrzdridrAdrBdrCdrDdrDdrDdrEdrFdrDdrDdrDdrDaafdrGdrHdruaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadrIdqTdqTdqTdqTdqTdqTdqTdqTdrJduYdrLdrMdrNdrOdrPdrQdrRdrSdrTdrUdrVdrTdrWdrEdrTdrXdrUdrDaafaafdrYdrZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdsadsadqTdqTdsadsadsadsadqTdsadsadsadsadsadsadsadqTdqTdqTdqTdqTdqTdqTdqTaaaaaaaaaaaaaaaaaaaaaaaaaaadrIdqTdqTdqTdqTdqTdrJdrJdrJdrJdsbdscdvAechdsedsedseeciecjdrTdshdsieckdrEdrEecldsidshdrDaafaafecgdslaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdsadsadqTdqTdsadsadsadsadqTdsadsadsadsadsadsadsadqTdqTdqTdqTdqTdqTdqTdqTaaaaaaaaaaaaaaaaaaaaaaaaaaadrIdqTdqTdqTdqTdqTdrJdrJdrJdrJedjdscdvAechdsedsedseeciecjdrTdshdsieckdrEdrEecldsidshdrDaafaafecgdslaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdsadqTdqTdqTdqTdqTdqTdsadsadqTdqTdqTdqTdsadsadsadsadqTdsadsadsadsadsadsadsadsadsadsadsadsadsadsadqTaaaaaaaaaaaaaaaaaaaaaaaaaaadrIdqTdqTdqTdqTdrJdrJdsmdsndrJdsodsodsodsodJIdsedsqdDvdDudrTdrTdrTdrTeaYeaXdsvdsvdsvdsvdsvdsvdqtdsxdsyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadszdsAdszaaaaaaaaaaaaaaadqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdsadqTdqTdqTdsadsadqTdsadsadsadqTdqTdsadsadsadsadsadsadsadsadsadsadsadsadsadsadqTdsaaaaaaaaaaaaaaaaaaaaaaaaadrIdqTdqTdqTdqTdrJdsBdsCdsDdsEdqsdsGdsHdsIdsJdsKeddedcdDkdrTdsOdsPdrTdqmdqldsvdqkeaVeaWeaSdqpdqndsYdsZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadtadtbdtaaafaaaaaaaaadqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdsadsadsadsadsadsadqTdqTdqTdqTdqTdqTdqTdsadsadsadsadsadqTdqTdqTdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsaaaaaaaaaaaaaaaaaaaaaaaaadrIdqTdqTdqTdqTdrJdtcdtddKIdrJdtfdsFdtgdthdtidtjdtkededEAdEedEddEgebsdEidqIdqKebtebldqCebodqGdqHdtydsZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadtzdtAdtBdtCaafaaaaaadqTdqTdqTdqTdqTdqTdqTdsadqTdqTdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsaaaaaaaaaaaaaaaaaaaaaadqVdtDaaadqTdqTdqTdrJdtcdtddtEdrJdtFdtgebdebbdKbdtJdtKdtJebedtJdtJdtJdrDdqydqxdsveaZdqBdqCdqzebgdqDdsYdsZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadszdsAdszaaaaaaaaaaaaaaadqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdsadqTdqTdqTdsadsadqTdsadsadsadqTdqTdsadsadsadsadsadsadsadsadsadsadsadsadsadsadqTdsaaaaaaaaaaaaaaaaaaaaaaaaadrIdqTdqTdqTdqTdrJdsBdsCdsDdsEdqsdsGdsHdsIdsJdsKedcedbdDkdrTdsOdsPdrTdqmdqldsvdqkeaVeaWeaSdqpdqndsYdsZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadtadtbdtaaafaaaaaaaaadqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdsadsadsadsadsadsadqTdqTdqTdqTdqTdqTdqTdsadsadsadsadsadqTdqTdqTdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsaaaaaaaaaaaaaaaaaaaaaaaaadrIdqTdqTdqTdqTdrJdtcdtddKIdrJdtfdsFdtgdthdtidtjdtkedddEAdEedEddEgebsdEidqIdqKebtebldqCebodqGdqHdtydsZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadtzdtAdtBdtCaafaaaaaadqTdqTdqTdqTdqTdqTdqTdsadqTdqTdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsaaaaaaaaaaaaaaaaaaaaaadqVdtDaaadqTdqTdqTdrJdtcdtddtEdrJdtFdtgebdebbdKbdtJdtKdtJebedtJdtJdtJdrDdqydqxdsveaZedhdqCdqzebgdqDdsYdsZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadtSdtTdtTdtUdtVdtWdtaaafaaaaaadqTdqTdqTdqTdsadsadsadqTdqTdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsaaafdtXdtYdrsdrsdrsdtZduaaaadqTdqTdqTdrJdtcebPebQdrJdudduedGwdGNduhebDdMrdukdGudumdunduodrDebJebHdsvebLdradrbdrmebBdsvduudqZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaduwduxduyduzduAduBduCaafaafdsadsadqTdqTdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsaduDduDduDaafduEduaaafaafaafaafaafaaadrJdrJdrJdrJdrJdEUebAdrJdsodrDdqeebuduJdtJduKduLdEKduNduOduPdrDdqPdqOdqNebydqSdqYdqQebzdqNdpkdBvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaduwduxduyduzduAduBduCaafaafdsadsadqTdqTdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsaduDduDduDaafduEduaaafaafaafaafaafaaadrJdrJdrJdrJdrJdEUebAdrJdsodrDdqeebuduJdtJduKduLdEKduNduOduPdrDdqPdqOdqNebydqSedidqQebzdqNdpkdBvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaduZdtTdtTdvadvbdtWdvcdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsaduDduDduDaaaaaadrIdvddvddvddvddvddvddvddrTdvedvfdObeccdKOdKPdKJecddLdecedLgdLfdtJdvqdvrdLhdvtdLndLMdLAecfdtRdvzdvzdvzdtOdvzdvzdvzdpkdBvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafdvGdvHdvIdvcdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsaduDaaaaaadrIdvddvddvddvddvddvddvddvJdvKdvLdvMdHidICdIKdILdIQebYebXdsTebWecadvXebZdJGdKcdNidMWecbdsWdsVdvzdsUdwhdsXdKCdvzdtxdtIdBvdBvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafdwldwmdwndwodvcdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsaaaaaaaaaaaaadrIdvddvddvddvddvddvddvddwpdwqdwrdwsdymdwudwudwvdwwdwxdrDdYydptdrDdwAdwBdwCdwDdwEdDzdtJdpqdppdYxdprdpxdpydyvdwMdpvdpwdBvdBvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -12073,11 +12078,11 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafdAqdArdAsdxqdzxdAtdxUdAudxVdAvdvcdAwdAxdvcdAydxudAzdAAdvcdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTaaaaaaaaaaaadABdACdyLdyLeaodyLdAEdAFdBDeatdBFeapeaqdDXdyUdBfeaveaydAPdBHdBGeaBdBPeaCdBSdBWdBVdBZdBYdqhdBVdBVdCrdBWdBVeaGeaKeaLdCBdCCeaMdCFdCIeaNeaRdBmdBmdBndzrdslaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafdsadsadvcdxtdBodBpdBqdAsdBrdBsdxWdBtdszduBdBudvcdAydwodxudAAdvcdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadqTdqTdqTdqTdBvdBvdBvdBvdBvdBvdqTdqTdqTdqTdqTdqTdBwdBxaaaaaaaaadBydBzdyLdBAdAYdAZdDTdBbdBcdBddBedZYdBJdBKdyUdqcdZZeamdBMdBMdrDdrDdqfdBOdBidBkdBOdBRdBjdBCdBRdBUdBBdBgdBUdrDdqddqedvZeaidzreakealdzrdCddBmdBmdCedzrdslaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdvcdvcdvcdvcdvcdvcdxsdxVdCfdBodxVdzydCgdBtdBtdxYdxudAwdvcdAydvIdChdAAdvcdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadqTdqTdBvdBvdBvdCidCidCidCidBvdBvdBvdqTdqTdCjdCkdCldyDaaaaaaaaadCmdCndyddyedCodCodCodCodvUdWudvSdrTdrTdrTdyUdWvdBMdCtdBMdCudCvdWHdWJdBOdwfdwcdWCdBRdwbdwedWGdBUdwddvVdWydBUdCHdwadvZdphdCKdzrdzrdzrdCLdCMdCNdApdzrdslaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdvcedbduBdxWdCPdvcdCQdCRdCSdvcdzzdvcdCTdCUdCVdvcduBdCWdtbdCXdvIdwndtbdvcdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadqTdqTdqTdBvdBvdCidCidCidCidCidCidCidCidBvdBvdqTdCYdCZdrYdDadrsdrsdrsdtZduaaafaafdDbdDcdDddDedwHdDgdwtdwjdWOdwGdpjdpidWWdDodDpdDqdDrdXpdXsdBOdxfdWZdALdBRdxadXkdBadBUdxedXHdCxdBUdXOdxKdxCdYidDmdDIdDJdzrdzrdzrdzrdzrdDKdtDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsadvcedbdvIduBdxUdzzdCWdBodDLdBodDMduBduBdDNdxuduBdvIdvIdvcdtbdDOdvIduBdvcdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadqTdqTdBvdBvdCidCidCidCidCidCidCidCidCidCidDPdDQdDRdDQaaaaaaaaaaaaaaaaaaaaaaaaaafdDbdDcdVxdvudvsdVvdvpdxgdDYdDYdpadpbdBMdCtdBMdEadBMdoZdEcdVodBOdVldBOdBRdBRdVjdBRdBUdBUdVadBUdBUdUvdvkdvjdUodEldEldEmdCKdEndqWdrsdrsdEodEpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdvcedaduBdxWdCPdvcdCQdCRdCSdvcdzzdvcdCTdCUdCVdvcduBdCWdtbdCXdvIdwndtbdvcdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadqTdqTdqTdBvdBvdCidCidCidCidCidCidCidCidBvdBvdqTdCYdCZdrYdDadrsdrsdrsdtZduaaafaafdDbdDcdDddDedwHdDgdwtdwjdWOdwGdpjdpidWWdDodDpdDqdDrdXpdXsdBOdxfdWZdALdBRdxadXkdBadBUdxedXHdCxdBUdXOdxKdxCdYidDmdDIdDJdzrdzrdzrdzrdzrdDKdtDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsadvcedadvIduBdxUdzzdCWdBodDLdBodDMduBduBdDNdxuduBdvIdvIdvcdtbdDOdvIduBdvcdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadqTdqTdBvdBvdCidCidCidCidCidCidCidCidCidCidDPdDQdDRdDQaaaaaaaaaaaaaaaaaaaaaaaaaafdDbdDcdVxdvudvsdVvdvpdxgdDYdDYdpadpbdBMdCtdBMdEadBMdoZdEcdVodBOdVldBOdBRdBRdVjdBRdBUdBUdVadBUdBUdUvdvkdvjdUodEldEldEmdCKdEndqWdrsdrsdEodEpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsadsadvcecZdEqdvIdvIdzzdvIdChdwTdvIdErdDMdChdBudEsdvIdEtdwodvcdBodtbdCWduBdvcdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadqTdBvdDQdCidCidCidCidCidCidCidCidCidCidCidEudEvdEwdExaaaaaaaaaaaaaaaaaaaaaaaaaafdDbdDcdWtdvQdvRdvQdvPdECdEDdDYdpfdyUdyUdEGdpddEIdBMdpcdEJdvFdWmdVKdWhdWkdWldVzdVEdVFdVGdvOdEVdBUdEWdpedCKdEYdEZdEYdEZdCKdFadFbdsaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsadsadsadvcecZdFcdxUdxsdvcdFddvcdFedFfdvcdxWdvcdFedFfdvcdxVdCWdvcdDNdFgdtbdAwdvcdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadqTdBvdFhdCidCidCidCidCidCidCidCidCidCidCidCidFidFjdExaaaaaaaaaaaaaaaaaaaaaaaaaafdDbdoVdECdECdFkdFldTHdECdFndDYdEEdyUdMCdFqdFpdFsdBMdoWdTQdTLdFwdTZdFydBRdFzdUadFBdBUdFCdTIdFEdBUdFFdwFdFHdCKdCKdCKdCKdFIdFJdqTdsadsadsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsadsadsadsadsadsadvcdvcdvcdvcdvcdvcdFddvcdFKdxudxWdAwdwodxVdBrdxVdzBdxUdvcdFedFLdFMdFNdvcdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadqTdBvdDPdCidCidCidCidCidCidCidCidCidCidCidCidFidEwdExaaaaaaaaaaaaaaaaaaaaaaafaafdDbdFOdFPdFPdFQdFRdECdFSdFTdDYdFodyUdoXdFqdoYdFsdBMdUgedadBOdFXdFYdFZdBRdGadGbdGcdBUdGddGedGfdBUdGgdGhdFHdqTdsadqTdGidGjdGkdqTdsadsadsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsadsadsadsadsadsadvcdvcdvcdvcdvcdvcdFddvcdFKdxudxWdAwdwodxVdBrdxVdzBdxUdvcdFedFLdFMdFNdvcdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadqTdBvdDPdCidCidCidCidCidCidCidCidCidCidCidCidFidEwdExaaaaaaaaaaaaaaaaaaaaaaafaafdDbdFOdFPdFPdFQdFRdECdFSdFTdDYdFodyUdoXdFqdoYdFsdBMdUgedgdBOdFXdFYdFZdBRdGadGbdGcdBUdGddGedGfdBUdGgdGhdFHdqTdsadqTdGidGjdGkdqTdsadsadsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsadsadsadsadsadsadsadsadsadsadsadsadvcdFddvcdxudAwdGldzydtWdxUdxudvcdxVdwodvcdGmdGndGndGodvcdGpdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadqTdBvdBvdCidCidCidoPdCidCidCidCidCidCidCidCidGqdGraafaaaaaaaaaaaaaaaaaaaafaafaafdDbdDbdGsdGtdDbduSdGvdTtdGvdDbdoOdGTdCidCidCidCidBMdBMdBMdBOdBOdBOdBOdBRdBRdBRdBRdBUdBUdBUdBUdBUdFHdFHdGydGzdrndrndGAdFbdqTdqTdsadsadsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsadsadsadsadsadsadsadsadsadsadsadsadvcdFddvcdAwduBdzBdxudxVdwodzBdvcdFddvcdvcdAydtbdGndGBdGCdGpdGpdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadqTdBvdoFdoJdCidoUdoFdoKdCidCidCidCidCidCidCidCidGDdGEaaaaaaaaaaaaaaaaafdGFdGGdGHdGIdGJdoSdoRdoQdTvdTudGPdGQdDbdGxdCidCidCidCidCidGRdGSdGTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdrldGUdFbdGVdqTdqTdqTdqTdqTdsadsadsadsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsadsadsadsadsadsadsadsadsadsadsadsadsadvcdFddvcdvcdvcdvcdvcdvcdvcdvcdvcdFddvcdAydtbdAzdtbdGodGWdGpdGpdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadqTdBvdoFdCidCidCidoFdoKdCidCidCidCidCidCidCidGXdGYdGZdHadHadHadHadHadHadHbdHcdHddHedHedoLdFrdFrdDbdRKduRdHjdDbdGxdCidCidCidCidCidFidHkdHldqTdqTdsadsadsadsadsadsadqTdqTdqTdqTdqTdrldGUdFbdHmdGpdHmdqTdqTdqTdqTdsadsadsadsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/tools/AddToChangelog/AddToChangelog/Thumbs.db b/tools/AddToChangelog/AddToChangelog/Thumbs.db new file mode 100644 index 00000000000..18cb6ca03ef Binary files /dev/null and b/tools/AddToChangelog/AddToChangelog/Thumbs.db differ