From b0cdcc9796dce5dd11fad5105f59541f08a69e70 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Thu, 9 Oct 2014 00:08:11 -0400 Subject: [PATCH 01/52] Adds photocopier based faxmachine, removes redundant photocopier vars --- baystation12.dme | 2 +- code/WorkInProgress/kilakk/fax.dm | 8 +- code/game/gamemodes/mutiny/mutiny_fluff.dm | 2 +- code/modules/admin/topic.dm | 8 +- code/modules/paperwork/faxmachine2.dm | 192 ++++++++++++ code/modules/paperwork/photocopier.dm | 344 ++++++++++----------- 6 files changed, 366 insertions(+), 190 deletions(-) create mode 100644 code/modules/paperwork/faxmachine2.dm diff --git a/baystation12.dme b/baystation12.dme index 62e10d20980..64487685271 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -1120,6 +1120,7 @@ #include "code\modules\organs\wound.dm" #include "code\modules\paperwork\carbonpaper.dm" #include "code\modules\paperwork\clipboard.dm" +#include "code\modules\paperwork\faxmachine2.dm" #include "code\modules\paperwork\filingcabinet.dm" #include "code\modules\paperwork\folders.dm" #include "code\modules\paperwork\handlabeler.dm" @@ -1459,7 +1460,6 @@ #include "code\WorkInProgress\computer3\computers\robot.dm" #include "code\WorkInProgress\computer3\computers\security.dm" #include "code\WorkInProgress\computer3\computers\welcome.dm" -#include "code\WorkInProgress\kilakk\fax.dm" #include "code\WorkInProgress\Mini\atmos_control.dm" #include "code\WorkInProgress\Ported\policetape.dm" #include "code\WorkInProgress\SkyMarshal\officer_stuff.dm" diff --git a/code/WorkInProgress/kilakk/fax.dm b/code/WorkInProgress/kilakk/fax.dm index 2c342296207..d25347b71ed 100644 --- a/code/WorkInProgress/kilakk/fax.dm +++ b/code/WorkInProgress/kilakk/fax.dm @@ -5,6 +5,7 @@ var/list/alldepartments = list("Central Command") name = "fax machine" icon = 'icons/obj/library.dmi' icon_state = "fax" + insert_anim = "faxsend" req_one_access = list(access_lawyer, access_heads, access_armory) //Warden needs to be able to Fax solgov too. anchored = 1 density = 1 @@ -17,6 +18,8 @@ var/list/alldepartments = list("Central Command") var/authenticated = 0 var/obj/item/weapon/paper/tofax = null // what we're sending + var/obj/item/weapon/paper_bundle/bundle = null // If we are sending a bundle, this will hold the bundle and tofax will reference the first page of the bundle + var/sendcooldown = 0 // to avoid spamming fax messages var/department = "Unknown" // our department @@ -163,7 +166,7 @@ var/list/alldepartments = list("Central Command") tofax = O O.loc = src user << "You insert the paper into \the [src]." - flick("faxsend", src) + flick(insert_anim, src) updateUsrDialog() else user << "There is already something in \the [src]." @@ -182,6 +185,9 @@ var/list/alldepartments = list("Central Command") user << "You [anchored ? "wrench" : "unwrench"] \the [src]." return +/obj/machinery/photocopier/faxmachine/insert(obj/item/O as obj, mob/user as mob) + ..() + /proc/Centcomm_fax(var/originfax, var/sent, var/sentname, var/mob/Sender) var/msg = "\blue CENTCOMM FAX: [key_name(Sender, 1)] (PP) (VV) (SM) (JMP) (CA) (RPLY): Receiving '[sentname]' via secure connection ... view message" diff --git a/code/game/gamemodes/mutiny/mutiny_fluff.dm b/code/game/gamemodes/mutiny/mutiny_fluff.dm index f8634e8e765..2e4ad147a81 100644 --- a/code/game/gamemodes/mutiny/mutiny_fluff.dm +++ b/code/game/gamemodes/mutiny/mutiny_fluff.dm @@ -5,7 +5,7 @@ mode = M proc/announce_directives() - for (var/obj/machinery/faxmachine/fax in world) + for (var/obj/machinery/photocopier/faxmachine/fax in world) if (fax.department == "Captain's Office") var/obj/item/weapon/paper/directive_x = new(fax.loc) directive_x.name = "emergency action message" diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index cfa61ba0622..c8a2b869828 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1490,14 +1490,14 @@ else if(href_list["CentcommFaxReply"]) var/mob/living/carbon/human/H = locate(href_list["CentcommFaxReply"]) - var/obj/machinery/faxmachine/fax = locate(href_list["originfax"]) + var/obj/machinery/photocopier/faxmachine/fax = locate(href_list["originfax"]) var/input = input(src.owner, "Please enter a message to reply to [key_name(H)] via secure connection. NOTE: BBCode does not work, but HTML tags do! Use
for line breaks.", "Outgoing message from Centcomm", "") as message|null if(!input) return var/customname = input(src.owner, "Pick a title for the report", "Title") as text|null - for(var/obj/machinery/faxmachine/F in machines) + for(var/obj/machinery/photocopier/faxmachine/F in machines) if(F == fax) if(! (F.stat & (BROKEN|NOPOWER) ) ) @@ -1530,14 +1530,14 @@ else if(href_list["SolGovFaxReply"]) var/mob/living/carbon/human/H = locate(href_list["SolGovFaxReply"]) - var/obj/machinery/faxmachine/fax = locate(href_list["originfax"]) + var/obj/machinery/photocopier/faxmachine/fax = locate(href_list["originfax"]) var/input = input(src.owner, "Please enter a message to reply to [key_name(H)] via secure connection. NOTE: BBCode does not work, but HTML tags do! Use
for line breaks.", "Outgoing message from Centcomm", "") as message|null if(!input) return var/customname = input(src.owner, "Pick a title for the report", "Title") as text|null - for(var/obj/machinery/faxmachine/F in machines) + for(var/obj/machinery/photocopier/faxmachine/F in machines) if(F == fax) if(! (F.stat & (BROKEN|NOPOWER) ) ) diff --git a/code/modules/paperwork/faxmachine2.dm b/code/modules/paperwork/faxmachine2.dm new file mode 100644 index 00000000000..a94f0ea5e68 --- /dev/null +++ b/code/modules/paperwork/faxmachine2.dm @@ -0,0 +1,192 @@ +var/list/obj/machinery/photocopier/faxmachine/allfaxes = list() +var/list/alldepartments = list("Central Command", "Sol Government") + +/obj/machinery/photocopier/faxmachine + name = "fax machine" + icon = 'icons/obj/library.dmi' + icon_state = "fax" + insert_anim = "faxsend" + req_one_access = list(access_lawyer, access_heads, access_armory) //Warden needs to be able to Fax solgov too. + + use_power = 1 + idle_power_usage = 30 + active_power_usage = 200 + + var/obj/item/weapon/card/id/scan = null // identification + var/authenticated = 0 + var/sendcooldown = 0 // to avoid spamming fax messages + + var/department = "Unknown" // our department + + var/destination = "Central Command" // the department we're sending to + +/obj/machinery/photocopier/faxmachine/New() + ..() + allfaxes += src + + if( !("[department]" in alldepartments) ) + alldepartments |= department + +/obj/machinery/photocopier/faxmachine/attack_hand(mob/user as mob) + user.set_machine(src) + + var/dat = "Fax Machine
" + + var/scan_name + if(scan) + scan_name = scan.name + else + scan_name = "--------" + + dat += "Confirm Identity: [scan_name]
" + + if(authenticated) + dat += "{Log Out}" + else + dat += "{Log In}" + + dat += "
" + + if(authenticated) + dat += "Logged in to: Central Command Quantum Entanglement Network

" + + if(copyitem) + dat += "Remove Item

" + + if(sendcooldown) + dat += "Transmitter arrays realigning. Please stand by.
" + + else + + dat += "Send
" + dat += "Currently sending: [copyitem.name]
" + dat += "Sending to: [destination]
" + + else + if(sendcooldown) + dat += "Please insert paper to send via secure connection.

" + dat += "Transmitter arrays realigning. Please stand by.
" + else + dat += "Please insert paper to send via secure connection.

" + + else + dat += "Proper authentication is required to use this device.

" + + if(copyitem) + dat += "Remove Item
" + + user << browse(dat, "window=copier") + onclose(user, "copier") + return + +/obj/machinery/photocopier/faxmachine/Topic(href, href_list) + if(href_list["send"]) + if(copyitem) + + if(destination == "Central Command") + //Centcomm_fax(src, tofax.info, tofax.name, usr) + sendcooldown = 1800 + + else if(destination == "Sol Government") + //Solgov_fax(src, tofax.info, tofax.name, usr) + sendcooldown = 1800 + else + sendfax(destination) + + if (sendcooldown) + spawn(sendcooldown) // cooldown time + sendcooldown = 0 + + else if(href_list["remove"]) + if(copyitem) + copyitem.loc = usr.loc + usr.put_in_hands(copyitem) + usr << "You take \the [copyitem] out of \the [src]." + copyitem = null + updateUsrDialog() + + if(href_list["scan"]) + if (scan) + if(ishuman(usr)) + scan.loc = usr.loc + if(!usr.get_active_hand()) + usr.put_in_hands(scan) + scan = null + else + scan.loc = src.loc + scan = null + else + var/obj/item/I = usr.get_active_hand() + if (istype(I, /obj/item/weapon/card/id)) + usr.drop_item() + I.loc = src + scan = I + authenticated = 0 + + if(href_list["dept"]) + var/lastdestination = destination + destination = input(usr, "Which department?", "Choose a department", "") as null|anything in alldepartments + if(!destination) destination = lastdestination + + if(href_list["auth"]) + if ( (!( authenticated ) && (scan)) ) + if (check_access(scan)) + authenticated = 1 + + if(href_list["logout"]) + authenticated = 0 + + updateUsrDialog() + +/obj/machinery/photocopier/faxmachine/proc/admin_fax() + //TODO + +/obj/machinery/photocopier/faxmachine/proc/sendfax(var/destination) + if(stat & (BROKEN|NOPOWER)) + return + + var/sent = 0 + + use_power(200) + for(var/obj/machinery/photocopier/faxmachine/F in allfaxes) + if( F.department == destination ) + sent = F.recievefax(copyitem) + + if (sent) + visible_message("[src] beeps, \"Message transmitted successfully.\"") + sendcooldown = 600 + else + visible_message("[src] beeps, \"Error transmitting message.\"") + +/obj/machinery/photocopier/faxmachine/proc/recievefax(var/obj/item/incoming) + if(stat & (BROKEN|NOPOWER)) + return 0 + + flick("faxreceive", src) + playsound(loc, "sound/items/polaroid1.ogg", 50, 1) + + // give the sprite some time to flick + sleep(20) + + if (istype(incoming, /obj/item/weapon/paper)) + copy(incoming) + else if (istype(incoming, /obj/item/weapon/photo)) + photocopy(incoming) + else if (istype(incoming, /obj/item/weapon/paper_bundle)) + bundlecopy(incoming) + else + return 0 + + use_power(active_power_usage) + return 1 + +/proc/Centcomm_fax(var/originfax, var/sent, var/sentname, var/mob/Sender) + + var/msg = "\blue CENTCOMM FAX: [key_name(Sender, 1)] (PP) (VV) (SM) (JMP) (CA) (REPLY): Receiving '[sentname]' via secure connection ... view message" + + admins << msg + +/proc/Solgov_fax(var/originfax, var/sent, var/sentname, var/mob/Sender) + var/msg = "\blue SOL GOVERNMENT FAX: [key_name(Sender, 1)] (PP) (VV) (SM) (JMP) (CA) (REPLY): Receiving '[sentname]' via secure connection ... view message" + + admins << msg \ No newline at end of file diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index 6963fe2f75b..8f40e0c051d 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -2,211 +2,162 @@ name = "photocopier" icon = 'icons/obj/library.dmi' icon_state = "bigscanner" + var/insert_anim = "bigscanner1" anchored = 1 density = 1 use_power = 1 idle_power_usage = 30 active_power_usage = 200 power_channel = EQUIP - var/obj/item/weapon/paper/copy = null //what's in the copier! - var/obj/item/weapon/photo/photocopy = null - var/obj/item/weapon/paper_bundle/bundle = null + var/obj/item/copyitem = null //what's in the copier! var/copies = 1 //how many copies to print! var/toner = 30 //how much toner is left! woooooo~ var/maxcopies = 10 //how many copies can be copied at once- idea shamelessly stolen from bs12's copier! - attack_ai(mob/user as mob) - return attack_hand(user) +/obj/machinery/photocopier/attack_ai(mob/user as mob) + return attack_hand(user) - attack_paw(mob/user as mob) - return attack_hand(user) +/obj/machinery/photocopier/attack_paw(mob/user as mob) + return attack_hand(user) - attack_hand(mob/user as mob) - user.set_machine(src) +/obj/machinery/photocopier/attack_hand(mob/user as mob) + user.set_machine(src) - var/dat = "Photocopier

" - if(copy || photocopy || bundle) - dat += "Remove Paper
" - if(toner) - dat += "Copy
" - dat += "Printing: [copies] copies." - dat += "- " - 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!" - user << browse(dat, "window=copier") - onclose(user, "copier") - return + var/dat = "Photocopier

" + if(copyitem) + dat += "Remove Item
" + if(toner) + dat += "Copy
" + dat += "Printing: [copies] copies." + dat += "- " + dat += "+

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

" + if(istype(user,/mob/living/silicon)) + dat += "Print photo from database

" + dat += "Current toner level: [toner]" + if(!toner) + dat +="
Please insert a new toner cartridge!" + user << browse(dat, "window=copier") + onclose(user, "copier") + return - Topic(href, href_list) - if(href_list["copy"]) - if(copy) - for(var/i = 0, i < copies, i++) - if(toner > 0) - copy(copy) - sleep(15) - else - break - updateUsrDialog() - else if(photocopy) - for(var/i = 0, i < copies, i++) - if(toner > 0) - photocopy(photocopy) - sleep(15) - else - break - updateUsrDialog() - else if(bundle) - for(var/i = 0, i < copies, i++) - if(toner <= 0) - break - var/obj/item/weapon/paper_bundle/p = new /obj/item/weapon/paper_bundle (src) - var/j = 0 - for(var/obj/item/weapon/W in bundle) - if(toner <= 0) - usr << "The photocopier couldn't finish the printjob." - break - else if(istype(W, /obj/item/weapon/paper)) - W = copy(W) - else if(istype(W, /obj/item/weapon/photo)) - W = photocopy(W) - W.loc = p - p.amount++ - j++ - p.amount-- - p.loc = src.loc - p.update_icon() - p.icon_state = "paper_words" - p.name = bundle.name - p.pixel_y = rand(-8, 8) - p.pixel_x = rand(-9, 9) - sleep(15*j) - updateUsrDialog() - else if(href_list["remove"]) - if(copy) - copy.loc = usr.loc - usr.put_in_hands(copy) - usr << "You take the paper out of \the [src]." - copy = null - updateUsrDialog() - else if(photocopy) - photocopy.loc = usr.loc - usr.put_in_hands(photocopy) - usr << "You take the photo out of \the [src]." - photocopy = null - updateUsrDialog() - else if(bundle) - bundle.loc = usr.loc - usr.put_in_hands(bundle) - usr << "You take the paper bundle out of \the [src]." - bundle = null - updateUsrDialog() - else if(href_list["min"]) - if(copies > 1) - copies-- - updateUsrDialog() - else if(href_list["add"]) - if(copies < maxcopies) - copies++ - updateUsrDialog() - else if(href_list["aipic"]) - if(!istype(usr,/mob/living/silicon)) return - if(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 +/obj/machinery/photocopier/Topic(href, href_list) + if(href_list["copy"]) + if(stat & (BROKEN|NOPOWER)) + return + + for(var/i = 0, i < copies, i++) + if(toner <= 0) + break + + if (istype(copyitem, /obj/item/weapon/paper)) + copy(copyitem) sleep(15) + else if (istype(copyitem, /obj/item/weapon/photo)) + photocopy(copyitem) + sleep(15) + else if (istype(copyitem, /obj/item/weapon/paper_bundle)) + var/obj/item/weapon/paper_bundle/B = bundlecopy(copyitem) + sleep(15*B.amount) + else + usr << "\The [copyitem] can't be copied by \the [src]." + break + + use_power(active_power_usage) + updateUsrDialog() + else if(href_list["remove"]) + if(copyitem) + copyitem.loc = usr.loc + usr.put_in_hands(copyitem) + usr << "You take \the [copyitem] out of \the [src]." + copyitem = null updateUsrDialog() + else if(href_list["min"]) + if(copies > 1) + copies-- + updateUsrDialog() + else if(href_list["add"]) + if(copies < maxcopies) + copies++ + updateUsrDialog() + else if(href_list["aipic"]) + if(!istype(usr,/mob/living/silicon)) return + if(stat & (BROKEN|NOPOWER)) return + + if(toner >= 5) + var/mob/living/silicon/tempAI = usr + var/obj/item/device/camera/siliconcam/camera = tempAI.aiCamera - attackby(obj/item/O as obj, mob/user as mob) - if(istype(O, /obj/item/weapon/paper)) - if(!copy && !photocopy && !bundle) - user.drop_item() - copy = O - O.loc = src - user << "You insert the paper into \the [src]." - flick("bigscanner1", src) - updateUsrDialog() - else - user << "There is already something in \the [src]." - else if(istype(O, /obj/item/weapon/photo)) - if(!copy && !photocopy && !bundle) - user.drop_item() - photocopy = O - O.loc = src - user << "You insert the photo into \the [src]." - flick("bigscanner1", src) - updateUsrDialog() - else - user << "There is already something in \the [src]." - else if(istype(O, /obj/item/weapon/paper_bundle)) - if(!copy && !photocopy && !bundle) - user.drop_item() - bundle = O - O.loc = src - user << "You insert the bundle into \the [src]." - flick("bigscanner1", src) - updateUsrDialog() - else if(istype(O, /obj/item/device/toner)) - if(toner == 0) - user.drop_item() - del(O) - toner = 30 - user << "You insert the toner cartridge into \the [src]." - updateUsrDialog() - else - user << "This cartridge is not yet ready for replacement! Use up the rest of the toner." - else if(istype(O, /obj/item/weapon/wrench)) - playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) - anchored = !anchored - user << "You [anchored ? "wrench" : "unwrench"] \the [src]." - return + if(!camera) + return + var/datum/picture/selection = camera.selectpicture() + if (!selection) + return - ex_act(severity) - switch(severity) - if(1.0) - del(src) - if(2.0) - if(prob(50)) - del(src) - else - if(toner > 0) - new /obj/effect/decal/cleanable/blood/oil(get_turf(src)) - toner = 0 + 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 - if(prob(50)) - if(toner > 0) - new /obj/effect/decal/cleanable/blood/oil(get_turf(src)) - toner = 0 - return + p.desc += " - Copied by [tempAI.name]" + toner -= 5 + sleep(15) + updateUsrDialog() - blob_act() - if(prob(50)) - del(src) +/obj/machinery/photocopier/attackby(obj/item/O as obj, mob/user as mob) + if(istype(O, /obj/item/weapon/paper) || istype(O, /obj/item/weapon/photo) || istype(O, /obj/item/weapon/paper_bundle)) + if(!copyitem) + user.drop_item() + copyitem = O + O.loc = src + user << "You insert \the [O] into \the [src]." + flick(insert_anim, src) + updateUsrDialog() else - if(toner > 0) - new /obj/effect/decal/cleanable/blood/oil(get_turf(src)) - toner = 0 - return + user << "There is already something in \the [src]." + else if(istype(O, /obj/item/device/toner)) + if(toner <= 10) //allow replacing when low toner is affecting the print darkness + user.drop_item() + user << "You insert the toner cartridge into \the [src]." + var/obj/item/device/toner/T = O + toner += T.toner_amount + del(O) + updateUsrDialog() + else + user << "This cartridge is not yet ready for replacement! Use up the rest of the toner." + else if(istype(O, /obj/item/weapon/wrench)) + playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) + anchored = !anchored + user << "You [anchored ? "wrench" : "unwrench"] \the [src]." + return +/obj/machinery/photocopier/ex_act(severity) + switch(severity) + if(1.0) + del(src) + if(2.0) + if(prob(50)) + del(src) + else + if(toner > 0) + new /obj/effect/decal/cleanable/blood/oil(get_turf(src)) + toner = 0 + else + if(prob(50)) + if(toner > 0) + new /obj/effect/decal/cleanable/blood/oil(get_turf(src)) + toner = 0 + return + +/obj/machinery/photocopier/blob_act() + if(prob(50)) + del(src) + else + if(toner > 0) + new /obj/effect/decal/cleanable/blood/oil(get_turf(src)) + toner = 0 + return /obj/machinery/photocopier/proc/copy(var/obj/item/weapon/paper/copy) var/obj/item/weapon/paper/c = new /obj/item/weapon/paper (loc) @@ -240,6 +191,8 @@ c.overlays += img c.updateinfolinks() toner-- + if(toner == 0) + visible_message("A red light on \the [src] flashes, indicating that it is out of toner.") return c @@ -265,9 +218,34 @@ toner -= 5 //photos use a lot of ink! if(toner < 0) toner = 0 + visible_message("A red light on \the [src] flashes, indicating that it is out of toner.") return p +//If need_toner is 0, the copies will still be lightened when low on toner, however it will not be prevented from printing. TODO: Implement print queues for fax machines and get rid of need_toner +/obj/machinery/photocopier/proc/bundlecopy(var/obj/item/weapon/paper_bundle/bundle, var/need_toner=1) + var/obj/item/weapon/paper_bundle/p = new /obj/item/weapon/paper_bundle (src) + for(var/obj/item/weapon/W in bundle) + if(toner <= 0 && need_toner) + toner = 0 + visible_message("A red light on \the [src] flashes, indicating that it is out of toner.") + break + + if(istype(W, /obj/item/weapon/paper)) + W = copy(W) + else if(istype(W, /obj/item/weapon/photo)) + W = photocopy(W) + W.loc = p + p.amount++ + //p.amount-- + p.loc = src.loc + p.update_icon() + p.icon_state = "paper_words" + p.name = bundle.name + p.pixel_y = rand(-8, 8) + p.pixel_x = rand(-9, 9) + return p /obj/item/device/toner name = "toner cartridge" icon_state = "tonercartridge" + var/toner_amount = 30 From d38787697af4f468c8d72feda43db8698766baf0 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Sun, 26 Oct 2014 00:19:03 -0400 Subject: [PATCH 02/52] Implements sending faxes to admins --- code/modules/admin/topic.dm | 102 ++++++++++++++++--------- code/modules/paperwork/faxmachine2.dm | 73 +++++++++++------- code/modules/paperwork/paper.dm | 18 ++--- code/modules/paperwork/paper_bundle.dm | 73 +++++++++--------- maps/tgstation2.dmm | 20 ++--- 5 files changed, 168 insertions(+), 118 deletions(-) diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index c8a2b869828..618b6ad86ec 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1483,52 +1483,83 @@ log_admin("[src.owner] replied to [key_name(H)]'s Syndicate message with the message [input].") H << "You hear something crackle in your headset for a moment before a voice speaks. \"Please stand by for a message from your benefactor. Message as follows, agent. \"[input]\" Message ends.\"" - else if(href_list["CentcommFaxView"]) - var/info = locate(href_list["CentcommFaxView"]) + else if(href_list["AdminFaxView"]) + var/obj/item/fax = locate(href_list["AdminFaxView"]) + if (istype(fax, /obj/item/weapon/paper)) + var/obj/item/weapon/paper/P = fax + P.show_content(usr) + else if (istype(fax, /obj/item/weapon/photo)) + var/obj/item/weapon/photo/H = fax + H.show(usr) + else if (istype(fax, /obj/item/weapon/paper_bundle)) + //having multiple people turning pages on a paper_bundle can cause issues + //open a browse window listing the contents instead + var/data = "" + var/obj/item/weapon/paper_bundle/B = fax + + for (var/page = 1, page <= B.amount, page++) + var/obj/pageobj = B.contents[page] + data += "Page [page] - [pageobj.name]
" + + world << data + world << "usr = [usr]" + + usr << browse(data, "window=[B.name]") + else + usr << "\red The faxed item is not viewable. This is probably a bug, and should be reported on the tracker: [fax.type]" - usr << browse("Centcomm Fax Message[info]", "window=Centcomm Fax Message") + else if (href_list["AdminFaxViewPage"]) + var/page = text2num(href_list["AdminFaxViewPage"]) + var/obj/item/weapon/paper_bundle/bundle = locate(href_list["paper_bundle"]) + + if (!bundle) return + + if (istype(bundle.contents[page], /obj/item/weapon/paper)) + var/obj/item/weapon/paper/P = bundle.contents[page] + P.show_content(src.owner, 1) + else if (istype(bundle.contents[page], /obj/item/weapon/photo)) + var/obj/item/weapon/photo/H = bundle.contents[page] + H.show(src.owner) + return else if(href_list["CentcommFaxReply"]) - var/mob/living/carbon/human/H = locate(href_list["CentcommFaxReply"]) + var/mob/sender = locate(href_list["CentcommFaxReply"]) var/obj/machinery/photocopier/faxmachine/fax = locate(href_list["originfax"]) - var/input = input(src.owner, "Please enter a message to reply to [key_name(H)] via secure connection. NOTE: BBCode does not work, but HTML tags do! Use
for line breaks.", "Outgoing message from Centcomm", "") as message|null + var/input = input(src.owner, "Please enter a message to reply to [key_name(sender)] via secure connection. NOTE: BBCode does not work, but HTML tags do! Use
for line breaks.", "Outgoing message from Centcomm", "") as message|null if(!input) return var/customname = input(src.owner, "Pick a title for the report", "Title") as text|null + + // Create the reply message + var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( null ) //hopefully the null loc won't cause trouble for us + P.name = "[command_name()]- [customname]" + P.info = input + P.update_icon() + + // Stamps + var/image/stampoverlay = image('icons/obj/bureaucracy.dmi') + stampoverlay.icon_state = "paper_stamp-cent" + if(!P.stamped) + P.stamped = new + P.stamped += /obj/item/weapon/stamp + P.overlays += stampoverlay + P.stamps += "
This paper has been stamped by the Central Command Quantum Relay." - for(var/obj/machinery/photocopier/faxmachine/F in machines) - if(F == fax) - if(! (F.stat & (BROKEN|NOPOWER) ) ) - - // animate! it's alive! - flick("faxreceive", F) - - // give the sprite some time to flick - spawn(20) - var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( F.loc ) - P.name = "[command_name()]- [customname]" - P.info = input - P.update_icon() - - playsound(F.loc, "sound/items/polaroid1.ogg", 50, 1) - - // Stamps - var/image/stampoverlay = image('icons/obj/bureaucracy.dmi') - stampoverlay.icon_state = "paper_stamp-cent" - if(!P.stamped) - P.stamped = new - P.stamped += /obj/item/weapon/stamp - P.overlays += stampoverlay - P.stamps += "
This paper has been stamped by the Central Command Quantum Relay." - - src.owner << "Message reply to transmitted successfully." - log_admin("[key_name(src.owner)] replied to a fax message from [key_name(H)]: [input]") - message_admins("[key_name_admin(src.owner)] replied to a fax message from [key_name_admin(H)]", 1) - return - src.owner << "/red Unable to locate fax!" + if(fax.recievefax(P)) + src.owner << "\blue Message reply to transmitted successfully." + log_admin("[key_name(src.owner)] replied to a fax message from [key_name(sender)]: [input]") + message_admins("[key_name_admin(src.owner)] replied to a fax message from [key_name_admin(sender)]", 1) + else + src.owner << "\red Message reply failed." + + spawn(100) + del(P) + return else if(href_list["SolGovFaxReply"]) + //TODO + /* var/mob/living/carbon/human/H = locate(href_list["SolGovFaxReply"]) var/obj/machinery/photocopier/faxmachine/fax = locate(href_list["originfax"]) @@ -1567,6 +1598,7 @@ message_admins("[key_name_admin(src.owner)] replied to a fax message from [key_name_admin(H)]", 1) return src.owner << "/red Unable to locate fax!" + */ diff --git a/code/modules/paperwork/faxmachine2.dm b/code/modules/paperwork/faxmachine2.dm index a94f0ea5e68..14c5a19b1f1 100644 --- a/code/modules/paperwork/faxmachine2.dm +++ b/code/modules/paperwork/faxmachine2.dm @@ -1,5 +1,8 @@ var/list/obj/machinery/photocopier/faxmachine/allfaxes = list() -var/list/alldepartments = list("Central Command", "Sol Government") +var/list/admin_departments = list("Central Command", "Sol Government") +var/list/alldepartments = list() + +var/list/adminfaxes = list() //cache for faxes that have been sent to admins /obj/machinery/photocopier/faxmachine name = "fax machine" @@ -24,7 +27,7 @@ var/list/alldepartments = list("Central Command", "Sol Government") ..() allfaxes += src - if( !("[department]" in alldepartments) ) + if( !(("[department]" in alldepartments) || ("[department]" in admin_departments)) ) alldepartments |= department /obj/machinery/photocopier/faxmachine/attack_hand(mob/user as mob) @@ -82,17 +85,11 @@ var/list/alldepartments = list("Central Command", "Sol Government") /obj/machinery/photocopier/faxmachine/Topic(href, href_list) if(href_list["send"]) if(copyitem) - - if(destination == "Central Command") - //Centcomm_fax(src, tofax.info, tofax.name, usr) - sendcooldown = 1800 - - else if(destination == "Sol Government") - //Solgov_fax(src, tofax.info, tofax.name, usr) - sendcooldown = 1800 + if (destination in admin_departments) + send_admin_fax(usr, destination) else sendfax(destination) - + if (sendcooldown) spawn(sendcooldown) // cooldown time sendcooldown = 0 @@ -125,7 +122,7 @@ var/list/alldepartments = list("Central Command", "Sol Government") if(href_list["dept"]) var/lastdestination = destination - destination = input(usr, "Which department?", "Choose a department", "") as null|anything in alldepartments + destination = input(usr, "Which department?", "Choose a department", "") as null|anything in (alldepartments + admin_departments) if(!destination) destination = lastdestination if(href_list["auth"]) @@ -138,21 +135,18 @@ var/list/alldepartments = list("Central Command", "Sol Government") updateUsrDialog() -/obj/machinery/photocopier/faxmachine/proc/admin_fax() - //TODO - /obj/machinery/photocopier/faxmachine/proc/sendfax(var/destination) if(stat & (BROKEN|NOPOWER)) return - var/sent = 0 - use_power(200) + + var/success = 0 for(var/obj/machinery/photocopier/faxmachine/F in allfaxes) if( F.department == destination ) - sent = F.recievefax(copyitem) + success = F.recievefax(copyitem) - if (sent) + if (success) visible_message("[src] beeps, \"Message transmitted successfully.\"") sendcooldown = 600 else @@ -180,13 +174,40 @@ var/list/alldepartments = list("Central Command", "Sol Government") use_power(active_power_usage) return 1 -/proc/Centcomm_fax(var/originfax, var/sent, var/sentname, var/mob/Sender) +/obj/machinery/photocopier/faxmachine/proc/send_admin_fax(var/mob/sender, var/destination) + if(stat & (BROKEN|NOPOWER)) + return + + use_power(200) - var/msg = "\blue CENTCOMM FAX: [key_name(Sender, 1)] (PP) (VV) (SM) (JMP) (CA) (REPLY): Receiving '[sentname]' via secure connection ... view message" - - admins << msg - -/proc/Solgov_fax(var/originfax, var/sent, var/sentname, var/mob/Sender) - var/msg = "\blue SOL GOVERNMENT FAX: [key_name(Sender, 1)] (PP) (VV) (SM) (JMP) (CA) (REPLY): Receiving '[sentname]' via secure connection ... view message" + var/obj/item/rcvdcopy + if (istype(copyitem, /obj/item/weapon/paper)) + rcvdcopy = copy(copyitem) + else if (istype(copyitem, /obj/item/weapon/photo)) + rcvdcopy = photocopy(copyitem) + else if (istype(copyitem, /obj/item/weapon/paper_bundle)) + rcvdcopy = bundlecopy(copyitem) + else + visible_message("[src] beeps, \"Error transmitting message.\"") + return + + rcvdcopy.loc = null //hopefully this shouldn't cause trouble + adminfaxes += rcvdcopy + + //message badmins that a fax has arrived + switch(destination) + if ("Central Command") + message_admins(sender, "CENTCOMM FAX", rcvdcopy, "CentcommFaxReply", "#006100") + if ("Sol Government") + message_admins(sender, "SOL GOVERNMENT FAX", rcvdcopy, "CentcommFaxReply", "#1F66A0") + //message_admins(sender, "SOL GOVERNMENT FAX", rcvdcopy, "SolGovFaxReply", "#1F66A0") + + sendcooldown = 1800 + sleep(50) + visible_message("[src] beeps, \"Message transmitted successfully.\"") + +/obj/machinery/photocopier/faxmachine/proc/message_admins(var/mob/sender, var/faxname, var/obj/item/sent, var/reply_type, font_colour="#006100") + var/msg = "\blue [faxname]: [key_name(sender, 1)] (PP) (VV) (SM) (JMP) (CA) (REPLY): Receiving '[sent.name]' via secure connection ... view message" + admins << msg \ No newline at end of file diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 83df89ee853..16bab790384 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -62,20 +62,20 @@ /obj/item/weapon/paper/examine() set src in oview(1) -// ..() //We don't want them to see the dumb "this is a paper" thing every time. -// I didn't like the idea that people can read tiny pieces of paper from across the room. -// Now you need to be next to the paper in order to read it. if(in_range(usr, src)) - if(!(istype(usr, /mob/living/carbon/human) || istype(usr, /mob/dead/observer) || istype(usr, /mob/living/silicon))) - usr << browse("[name][stars(info)][stamps]", "window=[name]") - onclose(usr, "[name]") - else - usr << browse("[name][info][stamps]", "window=[name]") - onclose(usr, "[name]") + show_content(usr) else usr << "It is too far away." return +/obj/item/weapon/paper/proc/show_content(var/mob/user, var/forceshow=0) + if(!(istype(user, /mob/living/carbon/human) || istype(user, /mob/dead/observer) || istype(user, /mob/living/silicon)) && !forceshow) + user << browse("[name][stars(info)][stamps]", "window=[name]") + onclose(user, "[name]") + else + user << browse("[name][info][stamps]", "window=[name]") + onclose(user, "[name]") + /obj/item/weapon/paper/verb/rename() set name = "Rename paper" set category = "Object" diff --git a/code/modules/paperwork/paper_bundle.dm b/code/modules/paperwork/paper_bundle.dm index 704afe76d56..1284d0aedb3 100644 --- a/code/modules/paperwork/paper_bundle.dm +++ b/code/modules/paperwork/paper_bundle.dm @@ -99,52 +99,49 @@ usr << desc if(in_range(usr, src)) - src.attack_self(usr) + src.show_content(usr) else usr << "It is too far away." return +/obj/item/weapon/paper_bundle/proc/show_content(mob/user as mob) + var/dat + var/obj/item/weapon/W = src[page] + switch(screen) + if(0) + dat+= "
" + dat+= "
Remove [(istype(W, /obj/item/weapon/paper)) ? "paper" : "photo"]
" + dat+= "
Next Page


" + if(1) + dat+= "
Previous Page
" + dat+= "
Remove [(istype(W, /obj/item/weapon/paper)) ? "paper" : "photo"]
" + dat+= "
Next Page


" + if(2) + dat+= "
Previous Page
" + dat+= "
Remove [(istype(W, /obj/item/weapon/paper)) ? "paper" : "photo"]


" + dat+= "
" + if(istype(src[page], /obj/item/weapon/paper)) + var/obj/item/weapon/paper/P = W + if(!(istype(usr, /mob/living/carbon/human) || istype(usr, /mob/dead/observer) || istype(usr, /mob/living/silicon))) + dat+= "[P.name][stars(P.info)][P.stamps]" + else + dat+= "[P.name][P.info][P.stamps]" + user << browse(dat, "window=[name]") + else if(istype(src[page], /obj/item/weapon/photo)) + var/obj/item/weapon/photo/P = W + user << browse_rsc(P.img, "tmp_photo.png") + user << browse(dat + "[P.name]" \ + + "" \ + + "
Written on the back:
[P.scribble]" : ]"\ + + "", "window=[name]") /obj/item/weapon/paper_bundle/attack_self(mob/user as mob) - if(ishuman(user)) - var/mob/living/carbon/human/human_user = user - var/dat - var/obj/item/weapon/W = src[page] - switch(screen) - if(0) - dat+= "
" - dat+= "
Remove [(istype(W, /obj/item/weapon/paper)) ? "paper" : "photo"]
" - dat+= "
Next Page


" - if(1) - dat+= "
Previous Page
" - dat+= "
Remove [(istype(W, /obj/item/weapon/paper)) ? "paper" : "photo"]
" - dat+= "
Next Page


" - if(2) - dat+= "
Previous Page
" - dat+= "
Remove [(istype(W, /obj/item/weapon/paper)) ? "paper" : "photo"]


" - dat+= "
" - if(istype(src[page], /obj/item/weapon/paper)) - var/obj/item/weapon/paper/P = W - if(!(istype(usr, /mob/living/carbon/human) || istype(usr, /mob/dead/observer) || istype(usr, /mob/living/silicon))) - dat+= "[P.name][stars(P.info)][P.stamps]" - else - dat+= "[P.name][P.info][P.stamps]" - human_user << browse(dat, "window=[name]") - P.add_fingerprint(usr) - else if(istype(src[page], /obj/item/weapon/photo)) - var/obj/item/weapon/photo/P = W - human_user << browse_rsc(P.img, "tmp_photo.png") - human_user << browse(dat + "[P.name]" \ - + "" \ - + "
Written on the back:
[P.scribble]" : ]"\ - + "", "window=[name]") - P.add_fingerprint(usr) - add_fingerprint(usr) - update_icon() + src.show_content(user) + add_fingerprint(usr) + update_icon() return - /obj/item/weapon/paper_bundle/Topic(href, href_list) ..() if((src in usr.contents) || (istype(src.loc, /obj/item/weapon/folder) && (src.loc in usr.contents))) diff --git a/maps/tgstation2.dmm b/maps/tgstation2.dmm index 4db50a0fe4f..cd04e096441 100644 --- a/maps/tgstation2.dmm +++ b/maps/tgstation2.dmm @@ -256,7 +256,7 @@ "aeV" = (/obj/structure/closet{name = "Evidence Closet"},/obj/machinery/light/small{dir = 8},/turf/simulated/floor{icon_state = "dark"},/area/security/brig) "aeW" = (/obj/structure/filingcabinet,/turf/simulated/floor{icon_state = "dark"},/area/crew_quarters/heads/hos) "aeX" = (/obj/machinery/computer/secure_data,/turf/simulated/floor{icon_state = "dark"},/area/crew_quarters/heads/hos) -"aeY" = (/obj/structure/table,/obj/machinery/faxmachine{department = "Warden's Office"},/turf/simulated/floor{icon_state = "dark"},/area/security/warden) +"aeY" = (/obj/structure/table,/obj/machinery/photocopier/faxmachine{department = "Warden's Office"},/turf/simulated/floor{icon_state = "dark"},/area/security/warden) "aeZ" = (/obj/machinery/computer/security,/turf/simulated/floor{icon_state = "dark"},/area/crew_quarters/heads/hos) "afa" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "dark"},/area/crew_quarters/heads/hos) "afb" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "dark"},/area/security/warden) @@ -532,7 +532,7 @@ "akl" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/turf/simulated/floor,/area/security/brig) "akm" = (/obj/machinery/door/airlock/glass_security{name = "Solitary Confinement 2"; req_access_txt = "2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/security/brig) "akn" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "cult"; dir = 2},/area/lawoffice) -"ako" = (/obj/structure/table/reinforced,/obj/machinery/faxmachine{anchored = 0; department = "Internal Affairs"},/turf/simulated/floor{icon_state = "cult"; dir = 2},/area/lawoffice) +"ako" = (/obj/structure/table/reinforced,/obj/machinery/photocopier/faxmachine{anchored = 0; department = "Internal Affairs"},/turf/simulated/floor{icon_state = "cult"; dir = 2},/area/lawoffice) "akp" = (/obj/structure/flora/pottedplant{tag = "icon-plant-10"; icon_state = "plant-10"},/obj/machinery/light{dir = 8},/turf/simulated/floor{icon_state = "grimy"},/area/security/detectives_office) "akq" = (/obj/structure/filingcabinet/chestdrawer,/turf/simulated/floor{icon_state = "grimy"},/area/security/detectives_office) "akr" = (/obj/structure/disposalpipe/segment,/obj/structure/closet/secure_closet/detective,/obj/item/weapon/reagent_containers/food/drinks/flask/detflask,/turf/simulated/floor{icon_state = "grimy"},/area/security/detectives_office) @@ -788,7 +788,7 @@ "aph" = (/obj/structure/flora/pottedplant{tag = "icon-plant-22"; icon_state = "plant-22"},/turf/simulated/floor{dir = 2; icon_state = "redcorner"},/area/security/main) "api" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor{icon_state = "dark"},/area/crew_quarters/heads/hos) "apj" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/obj/item/weapon/stamp,/obj/item/weapon/stamp/denied{pixel_x = 5},/turf/simulated/floor{icon_state = "dark"},/area/security/warden) -"apk" = (/obj/structure/table/woodentable,/obj/machinery/keycard_auth{pixel_x = 30},/obj/machinery/faxmachine{department = "Head of Security"},/turf/simulated/floor{icon_state = "dark"},/area/crew_quarters/heads/hos) +"apk" = (/obj/structure/table/woodentable,/obj/machinery/keycard_auth{pixel_x = 30},/obj/machinery/photocopier/faxmachine{department = "Head of Security"},/turf/simulated/floor{icon_state = "dark"},/area/crew_quarters/heads/hos) "apl" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/crew_quarters/heads/hos) "apm" = (/obj/structure/table/woodentable,/obj/item/device/megaphone,/obj/item/device/radio/off,/turf/simulated/floor{icon_state = "dark"},/area/crew_quarters/heads/hos) "apn" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/crew_quarters/heads/hos) @@ -1674,7 +1674,7 @@ "aGj" = (/obj/structure/closet/wardrobe/chaplain_black,/obj/item/device/radio/intercom{pixel_y = 25},/turf/simulated/floor{icon_state = "grimy"},/area/chapel/office) "aGk" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/hallway/primary/port) "aGl" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/wood,/area/bridge/meeting_room) -"aGm" = (/obj/structure/table/woodentable,/obj/machinery/faxmachine{department = "Bridge"},/turf/simulated/floor/wood,/area/bridge/meeting_room) +"aGm" = (/obj/structure/table/woodentable,/obj/machinery/photocopier/faxmachine{department = "Bridge"},/turf/simulated/floor/wood,/area/bridge/meeting_room) "aGn" = (/obj/structure/table/reinforced,/obj/machinery/door/poddoor/shutters{dir = 2; id = "bar"; layer = 3.1; name = "Bar Shutters"},/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar) "aGo" = (/obj/structure/closet/coffin,/obj/machinery/door/window/eastleft{name = "Coffin Storage"; req_access_txt = "22"},/turf/simulated/floor{icon_state = "dark"},/area/chapel/main) "aGp" = (/obj/item/weapon/book/manual/security_space_law,/obj/structure/table/woodentable,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/carpet,/area/bridge/meeting_room) @@ -2046,7 +2046,7 @@ "aNr" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{color = "#4444FF"; dir = 4},/turf/simulated/floor,/area/crew_quarters/locker) "aNs" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "bridge blast"; name = "Bridge Blast Doors"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/hallway/primary/central_one) "aNt" = (/obj/structure/disposalpipe/sortjunction/flipped{dir = 1; name = "Locker Room"; sortType = "Locker Room"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor,/area/crew_quarters/locker) -"aNu" = (/obj/structure/table,/obj/machinery/faxmachine{anchored = 1; department = "Vacant Office"},/obj/item/device/radio/intercom{freerange = 1; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 30},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor,/area/security/vacantoffice) +"aNu" = (/obj/structure/table,/obj/machinery/photocopier/faxmachine{anchored = 1; department = "Vacant Office"},/obj/item/device/radio/intercom{freerange = 1; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 30},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor,/area/security/vacantoffice) "aNv" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/effect/decal/cleanable/blood/oil,/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/locker) "aNw" = (/obj/machinery/atmospherics/pipe/simple/visible/supply{dir = 4; icon_state = "intact-supply"; tag = "icon-intact (EAST)"},/turf/simulated/floor/plating,/area/maintenance/locker) "aNx" = (/obj/effect/decal/cleanable/cobweb2,/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/cable/green,/obj/machinery/power/smes/buildable{charge = 0},/turf/simulated/floor/plating,/area/maintenance/locker) @@ -3867,7 +3867,7 @@ "bws" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/cable/green,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/hallway/primary/aft) "bwt" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/rnd/research) "bwu" = (/obj/machinery/keycard_auth{pixel_x = -24; pixel_y = 0},/obj/machinery/door_control{desc = "A remote control-switch for secure storage."; id = "EngineVent"; name = "Engine Ventillatory Control"; pixel_x = -24; pixel_y = 10; req_access_txt = "10"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/crew_quarters/heads/chief) -"bwv" = (/obj/structure/table/reinforced,/obj/machinery/faxmachine{department = "Chief Engineer's Office"},/turf/simulated/floor,/area/crew_quarters/heads/chief) +"bwv" = (/obj/structure/table/reinforced,/obj/machinery/photocopier/faxmachine{department = "Chief Engineer's Office"},/turf/simulated/floor,/area/crew_quarters/heads/chief) "bww" = (/obj/structure/table/reinforced,/obj/item/weapon/clipboard,/obj/item/clothing/glasses/meson{pixel_y = 4},/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/item/clothing/glasses/welding/superior,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/book/manual/supermatter_engine,/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/crew_quarters/heads/chief) "bwx" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/hallway/primary/central_two) "bwy" = (/obj/structure/disposalpipe/segment,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = -32; pixel_y = 0},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/hallway/primary/central_two) @@ -3896,7 +3896,7 @@ "bwV" = (/obj/machinery/light{dir = 1},/obj/structure/bookcase/manuals/medical,/obj/item/weapon/book/manual/stasis,/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/medbreak) "bwW" = (/turf/simulated/wall,/area/crew_quarters/medbreak) "bwX" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/sleeper) -"bwY" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/structure/table,/obj/machinery/faxmachine{department = "CMO's Office"},/turf/simulated/floor{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/crew_quarters/heads/cmo) +"bwY" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/structure/table,/obj/machinery/photocopier/faxmachine{department = "CMO's Office"},/turf/simulated/floor{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/crew_quarters/heads/cmo) "bwZ" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/heads/cmo) "bxa" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/rd,/obj/item/weapon/storage/secure/safe{pixel_x = 32},/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/crew_quarters/sleep/engi) "bxb" = (/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/heads/cmo) @@ -4071,7 +4071,7 @@ "bAo" = (/obj/machinery/light_switch{pixel_y = -23},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable/green,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hor) "bAp" = (/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) "bAq" = (/turf/simulated/wall,/area/medical/genetics) -"bAr" = (/obj/machinery/keycard_auth{pixel_x = 0; pixel_y = -24},/obj/machinery/light,/obj/structure/table,/obj/machinery/faxmachine{department = "Research Director's Office"},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hop) +"bAr" = (/obj/machinery/keycard_auth{pixel_x = 0; pixel_y = -24},/obj/machinery/light,/obj/structure/table,/obj/machinery/photocopier/faxmachine{department = "Research Director's Office"},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hop) "bAs" = (/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/structure/table,/obj/item/weapon/storage/box/botanydisk,/turf/simulated/floor{dir = 8; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora) "bAt" = (/obj/structure/table,/obj/item/weapon/cartridge/signal/science,/obj/item/weapon/cartridge/signal/science{pixel_x = -4; pixel_y = 2},/obj/item/weapon/cartridge/signal/science{pixel_x = 4; pixel_y = 6},/obj/machinery/camera{c_tag = "Research Director's Office"; dir = 1; network = list("SS13","Research")},/obj/item/clothing/glasses/welding/superior,/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hor) "bAu" = (/obj/structure/closet/secure_closet/RD,/obj/structure/window/reinforced,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hor) @@ -4887,7 +4887,7 @@ "bPY" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_server_room) "bPZ" = (/turf/simulated/wall,/area/medical/medbay2) "bQa" = (/obj/machinery/light_switch{pixel_y = -25},/obj/machinery/camera{c_tag = "Messaging Server"; dir = 1},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_server_room) -"bQb" = (/obj/structure/table,/obj/machinery/faxmachine{department = "Head of Personnel's Office"},/turf/simulated/floor,/area/crew_quarters/heads/hop) +"bQb" = (/obj/structure/table,/obj/machinery/photocopier/faxmachine{department = "Head of Personnel's Office"},/turf/simulated/floor,/area/crew_quarters/heads/hop) "bQc" = (/obj/machinery/light_switch{pixel_x = 27},/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor,/area/crew_quarters/heads/hop) "bQd" = (/obj/machinery/status_display,/turf/simulated/wall,/area/medical/medbay2) "bQe" = (/obj/machinery/camera{c_tag = "Mining Dock External"; dir = 8},/obj/structure/closet/emcloset,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9; icon_state = "intact"; tag = "icon-intact-f (NORTHWEST)"},/turf/simulated/floor{icon_state = "warning"},/area/quartermaster/miningdock) @@ -4983,7 +4983,7 @@ "bRQ" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating,/area/maintenance/substation/command) "bRR" = (/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/camera{c_tag = "Command Substation"; dir = 2; network = list("SS13","Engineering")},/obj/machinery/power/smes/buildable{charge = 0},/turf/simulated/floor/plating,/area/maintenance/substation/command) "bRS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/wood,/area/crew_quarters/captain) -"bRT" = (/obj/machinery/faxmachine{department = "Captain's Office"},/obj/structure/table/woodentable,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/wood,/area/crew_quarters/captain) +"bRT" = (/obj/machinery/photocopier/faxmachine{department = "Captain's Office"},/obj/structure/table/woodentable,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/wood,/area/crew_quarters/captain) "bRU" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) "bRV" = (/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) "bRW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) From 5d686b7510365d038d266235b2fb2e2523c5eae7 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Fri, 31 Oct 2014 00:39:39 -0400 Subject: [PATCH 03/52] Removes unused file --- code/WorkInProgress/kilakk/fax.dm | 218 ------------------------------ 1 file changed, 218 deletions(-) delete mode 100644 code/WorkInProgress/kilakk/fax.dm diff --git a/code/WorkInProgress/kilakk/fax.dm b/code/WorkInProgress/kilakk/fax.dm deleted file mode 100644 index d25347b71ed..00000000000 --- a/code/WorkInProgress/kilakk/fax.dm +++ /dev/null @@ -1,218 +0,0 @@ -var/list/obj/machinery/faxmachine/allfaxes = list() -var/list/alldepartments = list("Central Command") - -/obj/machinery/faxmachine - name = "fax machine" - icon = 'icons/obj/library.dmi' - icon_state = "fax" - insert_anim = "faxsend" - req_one_access = list(access_lawyer, access_heads, access_armory) //Warden needs to be able to Fax solgov too. - anchored = 1 - density = 1 - use_power = 1 - idle_power_usage = 30 - active_power_usage = 200 - power_channel = EQUIP - - var/obj/item/weapon/card/id/scan = null // identification - var/authenticated = 0 - - var/obj/item/weapon/paper/tofax = null // what we're sending - var/obj/item/weapon/paper_bundle/bundle = null // If we are sending a bundle, this will hold the bundle and tofax will reference the first page of the bundle - - var/sendcooldown = 0 // to avoid spamming fax messages - - var/department = "Unknown" // our department - - var/dpt = "Central Command" // the department we're sending to - - -/obj/machinery/faxmachine/New() - ..() - allfaxes += src - - if( !("[department]" in alldepartments) ) - alldepartments += department - alldepartments += "Sol Government" - -/obj/machinery/faxmachine/process() - return 0 - -/obj/machinery/faxmachine/attack_ai(mob/user as mob) - return attack_hand(user) - -/obj/machinery/faxmachine/attack_paw(mob/user as mob) - return attack_hand(user) - -/obj/machinery/faxmachine/attack_hand(mob/user as mob) - user.set_machine(src) - - var/dat = "Fax Machine
" - - var/scan_name - if(scan) - scan_name = scan.name - else - scan_name = "--------" - - dat += "Confirm Identity: [scan_name]
" - - if(authenticated) - dat += "{Log Out}" - else - dat += "{Log In}" - - dat += "
" - - if(authenticated) - dat += "Logged in to: Central Command Quantum Entanglement Network

" - - if(tofax) - dat += "Remove Paper

" - - if(sendcooldown) - dat += "Transmitter arrays realigning. Please stand by.
" - - else - dat += "Send
" - dat += "Currently sending: [tofax.name]
" - dat += "Sending to: [dpt]
" - - else - if(sendcooldown) - dat += "Please insert paper to send via secure connection.

" - dat += "Transmitter arrays realigning. Please stand by.
" - else - dat += "Please insert paper to send via secure connection.

" - - else - dat += "Proper authentication is required to use this device.

" - - if(tofax) - dat += "Remove Paper
" - - user << browse(dat, "window=copier") - onclose(user, "copier") - return - -/obj/machinery/faxmachine/Topic(href, href_list) - if(href_list["send"]) - if(tofax) - - if(dpt == "Central Command") - Centcomm_fax(src, tofax.info, tofax.name, usr) - sendcooldown = 1800 - - else if(dpt == "Sol Government") - Solgov_fax(src, tofax.info, tofax.name, usr) - sendcooldown = 1800 - else - SendFax(tofax.info, tofax.name, usr, dpt) - sendcooldown = 600 - - usr << "Message transmitted successfully." - - spawn(sendcooldown) // cooldown time - sendcooldown = 0 - - if(href_list["remove"]) - if(tofax) - if(!ishuman(usr)) - usr << "You can't do it." - else - tofax.loc = usr.loc - usr.put_in_hands(tofax) - usr << "You take the paper out of \the [src]." - tofax = null - - if(href_list["scan"]) - if (scan) - if(ishuman(usr)) - scan.loc = usr.loc - if(!usr.get_active_hand()) - usr.put_in_hands(scan) - scan = null - else - scan.loc = src.loc - scan = null - else - var/obj/item/I = usr.get_active_hand() - if (istype(I, /obj/item/weapon/card/id)) - usr.drop_item() - I.loc = src - scan = I - authenticated = 0 - - if(href_list["dept"]) - var/lastdpt = dpt - dpt = input(usr, "Which department?", "Choose a department", "") as null|anything in alldepartments - if(!dpt) dpt = lastdpt - - if(href_list["auth"]) - if ( (!( authenticated ) && (scan)) ) - if (check_access(scan)) - authenticated = 1 - - if(href_list["logout"]) - authenticated = 0 - - updateUsrDialog() - -/obj/machinery/faxmachine/attackby(obj/item/O as obj, mob/user as mob) - - if(istype(O, /obj/item/weapon/paper)) - if(!tofax) - user.drop_item() - tofax = O - O.loc = src - user << "You insert the paper into \the [src]." - flick(insert_anim, src) - updateUsrDialog() - else - user << "There is already something in \the [src]." - - else if(istype(O, /obj/item/weapon/card/id)) - - var/obj/item/weapon/card/id/idcard = O - if(!scan) - usr.drop_item() - idcard.loc = src - scan = idcard - - else if(istype(O, /obj/item/weapon/wrench)) - playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) - anchored = !anchored - user << "You [anchored ? "wrench" : "unwrench"] \the [src]." - return - -/obj/machinery/photocopier/faxmachine/insert(obj/item/O as obj, mob/user as mob) - ..() - -/proc/Centcomm_fax(var/originfax, var/sent, var/sentname, var/mob/Sender) - - var/msg = "\blue CENTCOMM FAX: [key_name(Sender, 1)] (PP) (VV) (SM) (JMP) (CA) (RPLY): Receiving '[sentname]' via secure connection ... view message" - - admins << msg - -/proc/Solgov_fax(var/originfax, var/sent, var/sentname, var/mob/Sender) - var/msg = "\blue SOL GOVERNMENT FAX: [key_name(Sender, 1)] (PP) (VV) (SM) (JMP) (CA) (RPLY): Receiving '[sentname]' via secure connection ... view message" - - admins << msg - - -proc/SendFax(var/sent, var/sentname, var/mob/Sender, var/dpt) - - for(var/obj/machinery/faxmachine/F in allfaxes) - if( F.department == dpt ) - if(! (F.stat & (BROKEN|NOPOWER) ) ) - - flick("faxreceive", F) - - // give the sprite some time to flick - spawn(20) - var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( F.loc ) - P.name = "[sentname]" - P.info = "[sent]" - P.update_icon() - - playsound(F.loc, "sound/items/polaroid1.ogg", 50, 1) From ddaac3e175d1990f4fe3b05db4b8f34c5608662e Mon Sep 17 00:00:00 2001 From: Atlantiscze Date: Wed, 12 Nov 2014 07:07:08 +0100 Subject: [PATCH 04/52] Powernet Sensor - Adds remote powernet sensors, power monitoring computers use these by default to monitor power around the station. Default range is 1 Z level + long range versions of sensors - Powernet sensors mapped in, each subgrid has it's own one (ie: substations compatible) - Telecomms, mining, research and engineering outposts have long range versions installed, visible even cross-Zlevels - Powersinks and ninja gloves now trigger problem warning in powernets they affect. This warning is visible to anyone using power monitoring console. TODO: Add more stuff that triggers warnings. - Powersinks now properly drain APC cells using CELLRATE (@2000W per APC max.) - Powersinks buffed a bit, to compensate for CELLRATE change (previous line) --- baystation12.dme | 3 +- code/game/gamemodes/events/ninja_equipment.dm | 2 + code/game/objects/items/devices/powersink.dm | 8 +- code/modules/power/powernet.dm | 7 ++ code/modules/power/sensors/powernet_sensor.dm | 89 +++++++++++++++++++ .../sensor_monitoring.dm} | 81 +++++++++-------- maps/tgstation2.dmm | 68 +++++++------- 7 files changed, 183 insertions(+), 75 deletions(-) create mode 100644 code/modules/power/sensors/powernet_sensor.dm rename code/modules/power/{power_monitor.dm => sensors/sensor_monitoring.dm} (54%) diff --git a/baystation12.dme b/baystation12.dme index 7c4e4f1554c..10cf402ca74 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -1156,7 +1156,6 @@ #include "code\modules\power\lighting.dm" #include "code\modules\power\port_gen.dm" #include "code\modules\power\power.dm" -#include "code\modules\power\power_monitor.dm" #include "code\modules\power\powernet.dm" #include "code\modules\power\profiling.dm" #include "code\modules\power\smes.dm" @@ -1168,6 +1167,8 @@ #include "code\modules\power\antimatter\containment_jar.dm" #include "code\modules\power\antimatter\control.dm" #include "code\modules\power\antimatter\shielding.dm" +#include "code\modules\power\sensors\powernet_sensor.dm" +#include "code\modules\power\sensors\sensor_monitoring.dm" #include "code\modules\power\singularity\collector.dm" #include "code\modules\power\singularity\containment_field.dm" #include "code\modules\power\singularity\emitter.dm" diff --git a/code/game/gamemodes/events/ninja_equipment.dm b/code/game/gamemodes/events/ninja_equipment.dm index 99b127ec1be..7811611b725 100644 --- a/code/game/gamemodes/events/ninja_equipment.dm +++ b/code/game/gamemodes/events/ninja_equipment.dm @@ -957,6 +957,7 @@ ________________________________________________________________________________ var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() spark_system.set_up(5, 0, A.loc) while(G.candrain&&A.cell.charge>0&&!maxcapacity) + A.terminal.powernet.newproblem = 1 drain = rand(G.mindrain,G.maxdrain) if(A.cell.charge max_power * 0.95) diff --git a/code/modules/power/powernet.dm b/code/modules/power/powernet.dm index 9c32eb0b9c3..40636c9bbdc 100644 --- a/code/modules/power/powernet.dm +++ b/code/modules/power/powernet.dm @@ -12,6 +12,10 @@ var/perapc_excess = 0 var/netexcess = 0 // excess power on the powernet (typically avail-load) + var/problem = 0 // If either of these is set to 1 there is some sort of issue at the powernet. + var/newproblem = 0 // At time of implementation this may be: Powersink, Spess Ninja recharging + + /datum/powernet/New() powernets += src @@ -77,6 +81,9 @@ /datum/powernet/proc/reset() var/numapc = 0 + problem = newproblem + newproblem = 0 + if(nodes && nodes.len) // Added to fix a bad list bug -- TLE for(var/obj/machinery/power/terminal/term in nodes) if( istype( term.master, /obj/machinery/power/apc ) ) diff --git a/code/modules/power/sensors/powernet_sensor.dm b/code/modules/power/sensors/powernet_sensor.dm new file mode 100644 index 00000000000..ba4544733f9 --- /dev/null +++ b/code/modules/power/sensors/powernet_sensor.dm @@ -0,0 +1,89 @@ +/* +********** POWERNET SENSOR ********** +- Simple machine which detects power levels in cables under it. +- Used with power_monitor.dm to measure power levels around station. +- Can have ID tag for organisation purposes. +*/ + +/obj/machinery/power/sensor + name = "Powernet Sensor" + desc = "Small machine which transmits data about specific powernet" + anchored = 1 + density = 0 + layer = 2.46 // Above cables, but should be below floors. + icon = 'icons/obj/objects.dmi' + icon_state = "floor_beacon" // If anyone wants to make better sprite, feel free to do so without asking me. + + var/name_tag = "#UNKN#" // ID tag displayed in list of powernet sensors. Each sensor should have it's own tag! + var/long_range = 0 // If 1, sensor reading will show on all computers, regardless of Zlevel + +/obj/machinery/power/sensor/New() + ..() + name = "[name_tag] - Powernet Sensor" // Auto-name according to name_tag + +/obj/machinery/power/sensor/proc/RefreshGrid() + connect_to_network() + +/obj/machinery/power/sensor/proc/ReturnReading() + var/out = "" + RefreshGrid() // First try to refresh the grid. + if(!powernet) // No powernet. + out = "# SYSTEM ERROR - NO POWERNET #" + return out + + // Attempt to locate APCs in powernet + var/list/L = list() + for(var/obj/machinery/power/terminal/term in powernet.nodes) + if(istype(term.master, /obj/machinery/power/apc)) + var/obj/machinery/power/apc/A = term.master + L += A + + if(L.len <= 0) // No APCs found. + out = "No APCs located in connected powernet!" + else // APCs found. Create very ugly (but working!) HTML table. + var/total_load = 0 + out += "
NameEQUIPLIGHTENVIRONCELLLOAD" + + // These lists are used as replacement for number based APC settings + var/list/S = list("M-OFF","A-OFF","M-ON", "A-ON") + var/list/chg = list("N","C","F") + + // Split to multiple lines to make it more readable + for(var/obj/machinery/power/apc/A in L) + out += "
\The [A.area]" // Add area name + out += "[S[A.equipment+1]][S[A.lighting+1]][S[A.environ+1]]" // Show status of channels + if(A.cell) + out += "[round(A.cell.percent())]% - [chg[A.charging+1]]" + else + out += "NO CELL" + var/load = A.lastused_total // Load. + total_load += load + if(load > 1000) + load = "~[round(load/1000)]kW" // If above 1000W convert to Kilowatts. + else + load = "[round(load)]W" // Below 1000W, leave it in Watts + out += "[load]" // Add load info + + if (total_load > 1000) + total_load = "~[round(total_load/1000)] kW" + else + total_load = "[round(total_load)] W" + + out += "
" + + var/textavail = powernet.avail + if(textavail > 1000) + textavail = "[textavail / 1000]" + textavail += " kW" + else + textavail += " W" + + if(powernet.problem || powernet.newproblem) + out += "
WARNING: Abnormal grid activity detected!" + out += "
TOTAL GRID LOAD: [total_load]" + out += "
TOTAL AVAILABLE: [textavail]" + return out + +// Has to be here as we need it to be in Machines list. +/obj/machinery/power/sensor/process() + return 1 \ No newline at end of file diff --git a/code/modules/power/power_monitor.dm b/code/modules/power/sensors/sensor_monitoring.dm similarity index 54% rename from code/modules/power/power_monitor.dm rename to code/modules/power/sensors/sensor_monitoring.dm index e1920471a3c..9f4ce0bf292 100644 --- a/code/modules/power/power_monitor.dm +++ b/code/modules/power/sensors/sensor_monitoring.dm @@ -1,8 +1,12 @@ -// the power monitoring computer -// for the moment, just report the status of all APCs in the same powernet +/* +********** SENSOR MONITOR ********** +- Remotely monitors sensors around the station and displays their readings. +- Should filter out most duplicities. +*/ + /obj/machinery/power/monitor - name = "power monitoring computer" - desc = "It monitors power levels across the station." + name = "Power Monitor" + desc = "Computer designed to remotely monitor power levels around the station" icon = 'icons/obj/computer.dmi' icon_state = "power" @@ -10,18 +14,21 @@ density = 1 anchored = 1.0 var/circuit = /obj/item/weapon/circuitboard/powermonitor + var/list/grid_sensors = null use_power = 1 idle_power_usage = 300 active_power_usage = 300 /obj/machinery/power/monitor/New() ..() - var/obj/structure/cable/attached = null - var/turf/T = loc - if(isturf(T)) - attached = locate() in T - if(attached) - powernet = attached.get_powernet() + refresh_sensors() + + +/obj/machinery/power/monitor/proc/refresh_sensors() + grid_sensors = list() + for(var/obj/machinery/power/sensor/S in machines) + if((S.loc.z == src.loc.z) || (S.long_range)) // Consoles have range on their Z-Level. Sensors with long_range var will work between Z levels. + grid_sensors += S /obj/machinery/power/monitor/attack_ai(mob/user) add_fingerprint(user) @@ -45,44 +52,37 @@ user << browse(null, "window=powcomp") return + if((!grid_sensors) || (!grid_sensors.len)) // No sensors in list. Refresh just in case. + refresh_sensors() + + user.set_machine(src) - var/t = "Power Monitoring
" + var/t = "Station Power Monitoring
" t += "

Refresh" - t += "

Close" + t += "

Reset Sensor List" + t += "

Close
" - if(!powernet) - t += "\red No connection" + if((!grid_sensors) || (!grid_sensors.len)) + t += " ERROR - No Sensors Connected. " else + var/list/reported_nets = list() + var/duplicities = 0 // Duplicity prevention (substations in Bypass mode) - var/list/L = list() - for(var/obj/machinery/power/terminal/term in powernet.nodes) - if(istype(term.master, /obj/machinery/power/apc)) - var/obj/machinery/power/apc/A = term.master - L += A - t += "
Total power: [powernet.avail] W
Total load: [num2text(powernet.viewload,10)] W
" + for(var/obj/machinery/power/sensor/S in grid_sensors) // Show all data from current Z level. + if(S.powernet && (S.powernet in reported_nets)) // We already reported this powernet. Ignore it. + duplicities++ + continue - t += "" - - if(L.len > 0) - var/total_demand = 0 - t += "Area Eqp./Lgt./Env. Load Cell
" - - var/list/S = list(" Off","AOff"," On", " AOn") - var/list/chg = list("N","C","F") - - for(var/obj/machinery/power/apc/A in L) - - t += copytext(add_tspace("\The [A.area]", 30), 1, 30) - t += " [S[A.equipment+1]] [S[A.lighting+1]] [S[A.environ+1]] [add_lspace(A.lastused_total, 6)] [A.cell ? "[add_lspace(round(A.cell.percent()), 3)]% [chg[A.charging+1]]" : " N/C"]
" - total_demand += A.lastused_total - - t += "
Total demand: [total_demand] W
" - t += "
" - - user << browse(t, "window=powcomp;size=420x900") + t += "


[S.name_tag] - Sensor Reading
" + t += S.ReturnReading() // Sensors already make quite decent HTML table by themselves. + if(S.powernet) + reported_nets += S.powernet + if(duplicities) + t += "
Ignored [duplicities] duplicite readings" + user << browse(t, "window=powcomp;size=600x900") onclose(user, "powcomp") @@ -95,6 +95,9 @@ if( href_list["update"] ) src.updateDialog() return + if( href_list["reset"] ) + refresh_sensors() + return /obj/machinery/power/monitor/power_change() diff --git a/maps/tgstation2.dmm b/maps/tgstation2.dmm index a789754ec9b..cb7596e6a07 100644 --- a/maps/tgstation2.dmm +++ b/maps/tgstation2.dmm @@ -444,7 +444,7 @@ "aiB" = (/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/window/southright{base_state = "left"; dir = 4; icon_state = "left"},/obj/structure/table/reinforced,/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor,/area/security/lobby) "aiC" = (/obj/structure/stool/bed/chair/office/dark{dir = 4},/obj/machinery/door_control{desc = "A remote control switch for the brig foyer."; id = "BrigFoyer"; name = "Brig Foyer Doors"; normaldoorcontrol = 1; pixel_x = 28; pixel_y = -15; range = 10},/turf/simulated/floor,/area/security/brig) "aiD" = (/turf/simulated/floor{icon_state = "redcorner"; dir = 1},/area/security/lobby) -"aiE" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/light/small{dir = 1},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/plating,/area/maintenance/substation/security) +"aiE" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/light/small{dir = 1},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/power/sensor{name = "Powernet Sensor - Security Subgrid"; name_tag = "Security"},/turf/simulated/floor/plating,/area/maintenance/substation/security) "aiF" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/wall,/area/maintenance/substation/security) "aiG" = (/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/maintenance/substation/security) "aiH" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/security/prison) @@ -1091,7 +1091,7 @@ "auY" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor,/area/storage/tools) "auZ" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass{name = "Dormitory"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "neutral"; dir = 4},/area/hallway/primary/central_two) "ava" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/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},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor,/area/storage/tools) -"avb" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/storage/emergency2) +"avb" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/power/sensor{name = "Powernet Sensor - Civilian West Subgrid"; name_tag = "Civilian West"},/turf/simulated/floor/plating,/area/storage/emergency2) "avc" = (/turf/simulated/wall/r_wall,/area/maintenance/dormitory) "avd" = (/obj/machinery/portable_atmospherics/powered/pump,/turf/simulated/floor/plating,/area/maintenance/dormitory) "ave" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor,/area/storage/art) @@ -2277,7 +2277,7 @@ "aRO" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/storage/firstaid/regular,/turf/simulated/floor{dir = 6; icon_state = "whitehall"},/area/bridge) "aRP" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 32},/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/turf/simulated/floor{dir = 9; icon_state = "blue"},/area/hallway/primary/central_two) "aRQ" = (/obj/machinery/cryopod,/obj/machinery/light{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/sleep/cryo) -"aRR" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light/small{dir = 8},/obj/machinery/camera{c_tag = "East Civilian Substation"; dir = 4; network = list("SS13","Engineering")},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_east) +"aRR" = (/obj/machinery/power/sensor{name = "Powernet Sensor - AI Subgrid"; name_tag = "AI"},/obj/structure/cable/cyan,/obj/structure/cable/cyan{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) "aRS" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/bar) "aRT" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable,/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_east) "aRU" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/library) @@ -3436,7 +3436,7 @@ "bod" = (/obj/structure/table,/obj/item/stack/sheet/glass{amount = 20; pixel_x = -3; pixel_y = 6},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/assembly/robotics) "boe" = (/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/assembly/robotics) "bof" = (/obj/machinery/mecha_part_fabricator,/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/assembly/robotics) -"bog" = (/obj/structure/cable/cyan{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) +"bog" = (/obj/machinery/light/small{dir = 8},/obj/machinery/camera{c_tag = "East Civilian Substation"; dir = 4; network = list("SS13","Engineering")},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/machinery/power/sensor{name = "Powernet Sensor - Civilian East Subgrid"; name_tag = "Civilian East"},/obj/structure/cable/green,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_east) "boh" = (/obj/structure/reagent_dispensers/fueltank,/obj/machinery/ai_status_display{pixel_x = 32; pixel_y = 0},/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics) "boi" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/captain) "boj" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/patient_wing) @@ -3639,7 +3639,7 @@ "brY" = (/obj/machinery/power/breakerbox/activated,/turf/simulated/floor/plating,/area/maintenance/substation/medical_science) "brZ" = (/obj/machinery/door/window/eastright{base_state = "left"; dir = 1; icon_state = "left"; name = "Shower"; req_access_txt = "0"},/obj/machinery/shower{icon_state = "shower"; dir = 4},/obj/item/weapon/soap/deluxe,/obj/item/weapon/bikehorn/rubberducky,/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/captain) "bsa" = (/turf/simulated/floor{icon_state = "white"},/area/rnd/research) -"bsb" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/table,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor/plating,/area/maintenance/substation/medical_science) +"bsb" = (/obj/machinery/power/sensor{name = "Powernet Sensor - Research Subgrid"; name_tag = "Research"},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/maintenance/substation/medical_science) "bsc" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/substation/medical_science) "bsd" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/substation/medical_science) "bse" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/patient_wing) @@ -4968,7 +4968,7 @@ "bRB" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/docking) "bRC" = (/turf/simulated/wall,/area/rnd/docking) "bRD" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/rnd/docking) -"bRE" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/substation/command) +"bRE" = (/obj/machinery/power/sensor{name = "Powernet Sensor - Medbay Subgrid"; name_tag = "Medbay"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/substation/medical_science) "bRF" = (/obj/machinery/door/window/eastleft{name = "Mail"; req_access_txt = "50"},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor{icon_state = "delivery"},/area/quartermaster/office) "bRG" = (/obj/machinery/blackbox_recorder,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_server_room) "bRH" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "research_dock_outer"; locked = 1; name = "Shuttle Airlock"; req_access_txt = "13"},/turf/simulated/floor/plating,/area/rnd/docking) @@ -5563,7 +5563,7 @@ "ccY" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet,/obj/item/device/radio/intercom{freerange = 1; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 30},/turf/simulated/floor{dir = 1; icon_state = "whitered"},/area/medical/virology) "ccZ" = (/obj/vehicle/train/cargo/engine,/turf/simulated/floor{icon_state = "bot"},/area/quartermaster/storage) "cda" = (/turf/simulated/wall/r_wall,/area/turret_protected/ai_cyborg_station) -"cdb" = (/obj/machinery/power/terminal{dir = 4},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/cable/yellow,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/engine/engine_room) +"cdb" = (/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/wall,/area/maintenance/research_port) "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/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/power/smes/buildable{charge = 2e+006},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/engine/engine_room) @@ -5766,7 +5766,7 @@ "cgT" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/maintenance/medbay) "cgU" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/maintenance/medbay) "cgV" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 9},/area/engine/drone_fabrication) -"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) +"cgW" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/table,/obj/random/tech_supply,/obj/random/tech_supply,/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/substation/medical_science) "cgX" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table/reinforced,/obj/machinery/door_control{id = "xenobio5"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access_txt = "55"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/rnd/xenobiology) "cgY" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/rnd/xenobiology) "cgZ" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table/reinforced,/obj/machinery/door_control{id = "xenobio4"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access_txt = "55"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/rnd/xenobiology) @@ -6398,7 +6398,7 @@ "ctb" = (/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/hallway/primary/starboard) "ctc" = (/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/turf/simulated/floor{dir = 2; icon_state = "whitecorner"},/area/hallway/primary/starboard) "ctd" = (/obj/structure/closet/l3closet/virology,/obj/item/clothing/mask/gas,/obj/machinery/embedded_controller/radio/airlock/access_controller{tag_exterior_door = "virology_airlock_exterior"; id_tag = "virology_airlock_control"; tag_interior_door = "virology_airlock_interior"; name = "Virology Access Console"; pixel_x = 8; pixel_y = 22},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor{dir = 1; icon_state = "greencorner"},/area/medical/virology) -"cte" = (/obj/machinery/power/apc/super{dir = 4; name = "east bump"; pixel_x = 24},/obj/machinery/atmospherics/pipe/simple/visible/purple,/obj/structure/cable/cyan{d2 = 8; icon_state = "0-8"},/turf/simulated/floor,/area/atmos) +"cte" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/wall,/area/maintenance/research_port) "ctf" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/cyan{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor,/area/atmos) "ctg" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor,/area/engine/hallway) "cth" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/space) @@ -6824,7 +6824,7 @@ "cBl" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{dir = 3; icon_state = "swall_f10"; layer = 2},/area/centcom/evac) "cBm" = (/obj/machinery/power/terminal{dir = 4},/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/substation/engineering) "cBn" = (/obj/machinery/power/smes/buildable{charge = 0},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/maintenance/substation/engineering) -"cBo" = (/obj/machinery/light_switch{pixel_x = 12; pixel_y = 25},/obj/machinery/power/apc/super{dir = 1; name = "north bump"; pixel_y = 24},/obj/structure/cable/cyan{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/engine/engine_room) +"cBo" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/power/sensor{name = "Powernet Sensor - Command Subgrid"; name_tag = "Command"},/turf/simulated/floor/plating,/area/maintenance/substation/command) "cBp" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Observation Room"; req_access_txt = "0"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay4) "cBq" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/substation/engineering) "cBr" = (/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/machinery/camera/autoname{dir = 4},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor{dir = 8; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora_storage) @@ -6892,7 +6892,7 @@ "cCB" = (/obj/structure/table,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/evac) "cCC" = (/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "gravsnow_corner"},/area/syndicate_mothership) "cCD" = (/obj/machinery/computer/arcade,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/evac) -"cCE" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/substation/engineering) +"cCE" = (/obj/machinery/power/terminal{dir = 4},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/cable/yellow,/obj/machinery/power/sensor{name = "Powernet Sensor - Engine Generators Subgrid"; name_tag = "Engine Generators"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/engine/engine_room) "cCF" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/syndicate_station/start) "cCG" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/poddoor/shutters{density = 0; icon_state = "shutter0"; id = "syndieshutters"; name = "Blast Shutters"; opacity = 0},/turf/simulated/shuttle/plating,/area/syndicate_station/start) "cCH" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/poddoor/shutters{density = 0; icon_state = "shutter0"; id = "syndieshutters"; name = "Blast Shutters"; opacity = 0},/turf/simulated/shuttle/plating,/area/syndicate_station/start) @@ -9118,7 +9118,7 @@ "dtr" = (/obj/structure/table,/obj/machinery/microwave{pixel_x = -1; pixel_y = 2},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "dts" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/solar{id = "construction_solar"; name = "Construction Solar Array"},/turf/simulated/floor{icon_state = "solarpanel"},/area/djstation/solars) "dtt" = (/turf/simulated/wall,/area/djstation/solars) -"dtu" = (/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/power/monitor{name = "telecoms power monitoring"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor{icon_state = "bot"},/area/tcommsat/entrance) +"dtu" = (/obj/machinery/light_switch{pixel_x = 12; pixel_y = 25},/obj/machinery/power/apc/super{dir = 1; name = "north bump"; pixel_y = 24},/obj/structure/cable/cyan{d2 = 8; icon_state = "0-8"},/obj/machinery/power/sensor{name = "Powernet Sensor - Engine APC Subgrid"; name_tag = "Engine APC"},/turf/simulated/floor/plating,/area/engine/engine_room) "dtv" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/djstation/solars) "dtw" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/djstation/solars) "dtx" = (/obj/machinery/light/small{dir = 8},/obj/structure/transit_tube{icon_state = "D-SE"},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) @@ -9640,7 +9640,7 @@ "dDt" = (/obj/structure/table,/obj/structure/closet/secure_closet/medical_wall{pixel_y = 32; req_access = null; req_access_txt = "150"},/obj/item/bodybag,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/glass/bottle/antitoxin{pixel_x = -4; pixel_y = 8},/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline{pixel_x = 4; pixel_y = 7},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) "dDu" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/research_outpost/power) "dDv" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{dir = 4; icon_state = "whiteyellowcorner"},/area/research_outpost/hallway) -"dDw" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/turf/simulated/floor/plating,/area/research_outpost/power) +"dDw" = (/obj/machinery/ai_status_display{layer = 4; pixel_y = 32},/obj/machinery/light{dir = 1},/obj/machinery/power/sensor{name = "Powernet Sensor - Master Grid"; name_tag = "Master"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 5},/area/engine/drone_fabrication) "dDx" = (/obj/structure/table,/obj/item/roller{pixel_y = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) "dDy" = (/obj/structure/closet{name = "custodial"},/obj/item/weapon/reagent_containers/glass/bucket,/obj/item/weapon/mop,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "dDz" = (/obj/machinery/camera{c_tag = "Research Outpost Hallway Engineering"; dir = 4; network = list("Research","SS13")},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/research_outpost/hallway) @@ -10169,7 +10169,7 @@ "dNC" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "mining_east_pump"; tag_exterior_door = "mining_east_outer"; frequency = 1379; id_tag = "mining_east_airlock"; tag_interior_door = "mining_east_inner"; pixel_x = 0; pixel_y = -25; req_access_txt = null; tag_chamber_sensor = "mining_east_sensor"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1379; id_tag = "mining_east_pump"},/turf/simulated/floor,/area/mine/eva) "dND" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/research_outpost/entry) "dNE" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/light/small{dir = 1},/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor/plating,/area/mine/living_quarters) -"dNF" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/mine/living_quarters) +"dNF" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/engine/drone_fabrication) "dNG" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/obj/machinery/door/airlock/glass_medical{name = "Medbay"; req_access_txt = "0"; req_one_access_txt = "65;5"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/research_outpost/entry) "dNH" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 8},/turf/simulated/floor/plating,/area/mine/living_quarters) "dNI" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/item/clothing/gloves/latex,/obj/item/device/slime_scanner,/obj/item/device/slime_scanner,/obj/item/weapon/hand_labeler,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) @@ -10738,7 +10738,7 @@ "dYz" = (/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/valve{dir = 4},/turf/simulated/floor,/area/atmos) "dYA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/mine/west_outpost) "dYB" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/djstation) -"dYC" = (/obj/machinery/light{dir = 1},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/power/solar_control{id = "construction_solar"; name = "Construction Solar Control"; track = 0},/turf/simulated/floor/plating,/area/djstation) +"dYC" = (/obj/machinery/power/apc/super{dir = 4; name = "east bump"; pixel_x = 24},/obj/machinery/atmospherics/pipe/simple/visible/purple,/obj/structure/cable/cyan{d2 = 8; icon_state = "0-8"},/obj/machinery/power/sensor{name = "Powernet Sensor - Atmospherics Subgrid"; name_tag = "Atmospherics"},/turf/simulated/floor,/area/atmos) "dYD" = (/obj/machinery/power/port_gen/pacman,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/djstation) "dYE" = (/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/djstation) "dYF" = (/obj/machinery/door/airlock/glass{name = "Crew Area"; req_access_txt = "48"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/mine/living_quarters) @@ -10758,7 +10758,7 @@ "dYT" = (/obj/machinery/field_generator,/turf/simulated/floor/plating/airless,/area/space) "dYU" = (/obj/machinery/door/airlock/glass_medical{name = "Medbay"; req_access_txt = "0"; req_one_access_txt = "65;5"},/turf/simulated/wall,/area/constructionsite/hallway/aft) "dYV" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; external_pressure_bound = 0; external_pressure_bound_default = 0; frequency = 1443; icon_state = "map_vent_in"; id_tag = "d_air_out"; internal_pressure_bound = 2000; internal_pressure_bound_default = 2000; on = 1; pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0},/turf/simulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/constructionsite/atmospherics) -"dYW" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/mine/west_outpost) +"dYW" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/wall,/area/maintenance/research_port) "dYX" = (/obj/machinery/door/airlock/glass_medical{name = "Medbay"; req_access_txt = "0"; req_one_access_txt = "65;5"},/turf/simulated/floor/plating/airless,/area/constructionsite/hallway/aft) "dYY" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor,/area/mine/production) "dYZ" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/mine/production) @@ -11225,6 +11225,12 @@ "ehS" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "mining_west_pump"},/obj/structure/closet/walllocker/emerglocker/west,/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/living_quarters) "ehT" = (/obj/machinery/camera{c_tag = "Sleeper Room"; dir = 1; network = list("MINE")},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor{icon_state = "white"},/area/mine/living_quarters) "ehU" = (/obj/structure/disposalpipe/segment,/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/item/device/radio/intercom{freerange = 1; frequency = 1459; name = "Station Intercom (General)"; pixel_x = -27},/turf/simulated/floor,/area/mine/production) +"ehV" = (/obj/machinery/power/sensor{name = "Powernet Sensor - Engineering Subgrid"; name_tag = "Engineering"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/substation/engineering) +"ehW" = (/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/power/monitor{name = "telecoms power monitoring"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/sensor{long_range = 1; name = "Powernet Sensor - Telecommunications Grid"; name_tag = "Telecommunications"},/turf/simulated/floor{icon_state = "bot"},/area/tcommsat/entrance) +"ehX" = (/obj/machinery/light{dir = 1},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/power/solar_control{id = "construction_solar"; name = "Construction Solar Control"; track = 0},/obj/machinery/power/sensor{long_range = 1; name = "Powernet Sensor - Engineering Outpost Grid"; name_tag = "Engineering Outpost"},/turf/simulated/floor/plating,/area/djstation) +"ehY" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/machinery/power/sensor{long_range = 1; name = "Powernet Sensor - Research Outpost Grid"; name_tag = "Research Outpost"},/turf/simulated/floor/plating,/area/research_outpost/power) +"ehZ" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/power/sensor{long_range = 1; name = "Powernet Sensor - Mining West Grid"; name_tag = "Mining West"},/turf/simulated/floor,/area/mine/west_outpost) +"eia" = (/obj/machinery/power/sensor{long_range = 1; name = "Powernet Sensor - Mining Main Grid"; name_tag = "Mining Main"},/obj/structure/cable,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/mine/living_quarters) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -11334,7 +11340,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeawXaKMaKRaKMaLeaIfaIfaLnaKMaKRaKMaLoaLqaLpaLrawXaJMaPIaPIbfXaXBaXBaXBaXBaXCaPIazbbggbftaADazbakhakhaTCbfuaTFakhakhakhbeAbfvaYaaaaaaeaaaaaeaaaaaeaaaaaeaaaaYaasLaylazfazgazhaziazjaylaYiaRBaxrazkazkayGbfHaYfbfMbfLaYfbfJbfVaypaztaVHayzaSiayAaVHaLvaLsaLsaLsaLEaLAaLLaLHaMhaMgaMrazzazAazBazBaMxazBasPbgpbgqbglbgmbfwbgobgjasPbgkasRasRasRasRasRbgiasPaaeaaaaaaaaaaaaaaeaaeaaaaaeazLazMbgrazOazPaaeaaaaaaaaeaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaMUavRaMVayXaMWaNaaMYaNcaNbaMWayXaNeaNdaNgaNfaNjaNhaNnazoazoazoazoazoazoaNrbgWbgYazbaAfbgQbgNazbbgLaNwaFkaFkaFkaFkaFkaNyaNxbgRaYaaaeaAkaAkaAkaAkaAkaAkaAkaaeaYaasLaylaAlaAmaAnaAoaAlaylaYibkcaxraxraxraxrboXaAraZVbgyaAraNTbguaypaVvaVHayzaSiaAuaVHaNUaJNaOcaObaOdaHraAYauiaHrazBazBazBazBazBbhcbhdbhfazBasPasPasPasPbfxasPasPasPbgiasRasRasRasRasRbgiasPaaaaaaaaaaafaaaaOeaOeaOeaOeaAAaOgaOfaOiaAAaaeaaaaaaaaeaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHQaKRaOjaOoaOoaOoaOoaOvaKRaHQaaaaNgaOwaOxaNhaAKaAKaAKaAKaAKaAKaAKaJMbhObhRazbbhNbhIbhHazbaAPbhGaAPaAPaAPaAPaAPaAPaAPaAPaARaaaaAkbhAbhCbhDbhEaAWaAkaaaaYaasLaylaAlbqMbhFbqBaAlaylblqakhaxrbpHaBbayGbhrbhqbhybhxbhwaPaaxraxraxraVHayzaSiazuaVHaPnaPnaPnaPpaPnaHraPyauiaHraBibhiaBjbinazBbhcbiqbhfazBaBlaBmbiiaBobeVaYDaYBaaebilbigbigbigbigbigbihaaeaaaaaaaaaaaaaaaaOeaPFaPAaPJaAAaBubifbibaAAaaeaaaaaaaQbaQbaQbaQbaQbaQmaQfaQbaQbaQbaQbaQbaQbaQbaQpaQvaQvaQvaQAaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaBHaBIaBJaBIaBIaDRaDSaBIaBIaBJaBMaBNaNgaQCaQDaNhaXGaXHaBSaBTaBUaXFaAKaJMaXEaPIazbazbaXKaBYaARaBZaXLaCbaCcaCdaCeaCfaCgaXJaCiaARaaeaAkaQEaCkaXXaXYaQXaAkaaeaYaasLaylaXMaXPaXVaXWaXSaylaYiaYhaxrayoaypaCtaCuaAraYdaYcaYfaYeaYgaBfaBfaVHayzaSiayAaVHaRbaQYaThaRdaRhaHraRvaRoaHraYoaYpaYpaYzaYAaYpaYxaYwazBaYuaYvaYEaRAaRKaYDaYBaaaaaeaaaaaeaaaaaeaaaaaeaaaaaaaaaaaaaaaaaaaOeaRRaRNaRTaAAaYIaYJaYKaAAaYGaYHaQbaQbaRVaRUaRUaRUaRUaRUaSfaSaaSpaSpaSpaSpaSpaSpaSpaSvaSxaSwaaeaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaBHaBIaBJaBIaBIaDRaDSaBIaBIaBJaBMaBNaNgaQCaQDaNhaXGaXHaBSaBTaBUaXFaAKaJMaXEaPIazbazbaXKaBYaARaBZaXLaCbaCcaCdaCeaCfaCgaXJaCiaARaaeaAkaQEaCkaXXaXYaQXaAkaaeaYaasLaylaXMaXPaXVaXWaXSaylaYiaYhaxrayoaypaCtaCuaAraYdaYcaYfaYeaYgaBfaBfaVHayzaSiayAaVHaRbaQYaThaRdaRhaHraRvaRoaHraYoaYpaYpaYzaYAaYpaYxaYwazBaYuaYvaYEaRAaRKaYDaYBaaaaaeaaaaaeaaaaaeaaaaaeaaaaaaaaaaaaaaaaaaaOebogaRNaRTaAAaYIaYJaYKaAAaYGaYHaQbaQbaRVaRUaRUaRUaRUaRUaSfaSaaSpaSpaSpaSpaSpaSpaSpaSvaSxaSwaaeaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBHaBMaBIaDbaDcaDcaDdaDeaDfaDgaDhaDcaDcaDiaDjaSyaQCaSzaNhbgsaSCaSGaSDaSGaSJaSOaSNaYZaZbaYUaSVaTfaTaaTmaZBaZDaDzaDzaDzaDAaDzaDzaZubjWaARaaaaAkaZnaCkaZqaXYaZtaAkaaaaYaasLaylaZibjoaZjbjoaZkaylaYiaZWaxraxraxraxraDMaAraZVaypaAraCwaCxaypaCyaVHaZRaZSaZQaVHaTpaTnaTnaTnaTraTqaTIaTuaTOaZPaZIazBazBazBazBazBazBbabaTPaFHbaeaBobaibagaYBaYBaYBaYBaYBaYBaYBaYBaYBaYGaYHaYBaYBaYGaZXaOeaTUaTRaTVaAAaAAbakaEmaAAbaXaUbaUlaRUaUmaQbaQbaQbaQbaQbaUEaUAaEuaEuaEuaEuaEuaEuaEyaEybahaEyaEyaEyaEyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDiaEBaECaEDaDcaEEaDcaEEaDcaEEaDcaEEaDcaEFaEGaUFaQCaSzaNhbaKaUGaEKaELaEMaENaAKaUHaULaUJaUPaUNaURaUQaAPaESaDzaDzaDzaDzaDzaDzaDzaZubbsaARaaeaAkaXZbbDbbzbbAbbyaAkaaeaYaasLaylbbwbbxaZjaUTbbvaylbaTbaSaxraFnaypayGbaQaYfayNaypaAraCwbaPaypaDQaVHbbqbbraFtaVHaUVaQYaVcaQYaVdaHraVhaVeaHrbaVbaWazBbciazBbchazBbckazBbcjaFHbcpaBoaVkaVibcuaVmaVmaVnbcvaViaViaViaViaViaVoaViaViaViaVsaVraVzaVtaVDaVAaVNaVJaVSaVRbbObbTaQbaQbaWpaQbaGfaGgaGhaEsaEubbVaEuaGjbbZaXkbcaaxZaGoaIbbcfbcbbcgaGtaGuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaateaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaXoaDcaDcaBJaDcaEEaDcaEEaGxaEEaWqaEEaDcaEFaEGaUFaQCaWyaWvaWvaWEaWGaWFaWGaWvaWvaWHaWJaWvaWMbcPbdGbdFaAPaGObdEbdDaDzaDzbdyaDzbdCbdAaGOaARaaaaAkaAkaWRaWSaWRaAkaAkaaaaYaasLaylbdtbdwbdrbjobdsaylbdqbdoaxraHbaypaFoaCuaArbdnaYcaYfbdmbdlaypaHdasMatDasOatSasMasMasMasMasMatFauWavqauZauWbdfaAxazBaHmazBaHnazBaHoazBbeoaFHbeqbesbagbeUbeVbeuaYBaYBaWTaYBaYBaXgaYBbagbejbagbagbagbelbekaXIaXvaXvaXvaYnaYbaXvaYqaYtaYsaEsaHObdWaYCaHRaHSaHTaEsaHUbdYaEuaHWbdKbdIaHZaxZaIaaIbawAaIcaEyaEyaEyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -11352,12 +11358,12 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlbjubjsbjybjxbjJbiuaFsaFsaFsaFsaFsaEpaFsaNuaDPaMuaMtaDBaYyaYyaYyaYybjVaYyaLDaRnaLMaUKaWZaWZaLGaLJaPEaEtbjZbjYbkkbkbbkqbklbkuaLfaLfaYSaYSaYSaYSaYSaYTatFaZmaYYbcmaZobdgbcnaLSaZaaPWaZlaMdaMfaLZaPWaPWaPWaPWaPWaLQaPWaPWaPWaLOaLNaLUaZlaPWaZaaLSbdibdkbdjbffbeiaLYaPUaQoaQoaQoaQoaQoaFHaFFaQoaMBaQoaZraZraZraZraZsaMyaMzaMAaRXaRXaRXaZwaZxasfaMvaMwbkvaKdavyaKTauaaVjbcqbkzbkOaMZaMXaMTbkPaMTaMTaMTaMTaMTaMMaMNaMKaMLaMRaMSaMPaMQaMFaMIaMDaMEaMJaSsaEJaZJaKQaSsbusaYmaaeaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlbkUbkRbitbkVblbbiuaFfaFwaFsaFyaFeaEpaFsaFjaDPaFcaFdaDBaYyaZYaZZaFvaFxaYyaFXbadaFPaPEaDGaDJaErblcaPEaEtblDbalbalblEbalbalbalbalbanbaobaobaobapbaobaqatFboHbjvbpcasMasMasMbaAbaAbaAbayblLbaybaAbaBbaBbaBbaBbaBaFrbaBbaBbaBbaDbaDblVbaDaPWaPWaPWbqlbqlbqlbffbeiaLYauWbaFbaGaBlaUDaQobaIaFFbaJaFEbaLaZraZrbhWbaObcqbcqbcqaWPbaMbaMbaMbcqbcqbcqaFLaFMaFJaFKavyaKTaKTaKVbcqblWaZFbaYbcqbaZaFAbbbaWmbmabbabbdaFCaHPaEyaIbaQMaFBbbgaQMaQNaIbaIbaEyaFDaSsaEJaSsaKQbblbbmaYmaaeaFpaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaCDbmcbmnbmdbmubmqaFfaFhaFgaFfaFeaEpaDUaDTaDPaDDaDCaDBaYyaYyaYybcJaEvaYyaEwbadaEqaPEaDGaDJaErbmyaPEaEtblDbalaEoaBkbbHbbHbbIbalbbJbbKaEkbbMbarbarbaratFaAcaYYbcmasMbbPbbQbbRbmzaEhaEiaEfbbWbaAbaBbbXbmAbmHbmBaEcbmIbcdbaBbaDbceaDZaDYaDXaDWaEbaEabjtbqlbrHbqnbrIauWbcqbcqbcqbcqaEZaEYaFbaFabcqbcqaEXbcqbcqbcqbcqaEUaERaETbcrbcrbcrbcsaKObcqaKKbmJbmMaKNaKIaKIaKIaKhbcqblWaZFaEObcqbcqbcqbcqbcqbcqbcqbcqbcqbcqbcqaEIaJtaEHaExaEAaEIaJtbcqaPtbcBaSsaEJaSsaKQaWAbcDbcEaTMaWDaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabmRbmQbnxbnvbitbnAbnAbnAbnAbnAbnAbnOboabnAaDPaDPaDPaDPaDPaJmaDPaDPaDPaHtaHtaFRaYyaZYbcIbcJaHvaYybcLbcMbcLaPEaDGaDJaErbmyaPEaEtblDbalbToaScbcQbbHbcQbalbbJbcRbPhbcSbcTbcUbcVatFbtfbrJbcmbtgbcYbgCbdabdbbdbaHyaHzaHAbaAbaBbdebobbogbdhbbXaNPaHYbaBbaDboiaHNaHMaHXbfhaHGaHFaLgbqlbuFbuDaLYaKlbdubdvaZFaZFaIjaZFaIiaZFaZFaZFaZFbgGaZFaZFaZFaZFaBDaZFaZFaZFaZFaZFaZFbdvaZFaZFaIkaIlaIlaImaIlaIlaIobonaZFaBDaItaJybgGaZFaIxaZFaZFaZFaIyaIzaIAaIBaZFaICaZFaIDaZFaZFbdzaIEaIFaSsaEJaSsaHLaHKaHJaJYaPcaHHaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabmRbmQbnxbnvbitbnAbnAbnAbnAbnAbnAbnOboabnAaDPaDPaDPaDPaDPaJmaDPaDPaDPaHtaHtaFRaYyaZYbcIbcJaHvaYybcLbcMbcLaPEaDGaDJaErbmyaPEaEtblDbalbToaScbcQbbHbcQbalbbJbcRbPhbcSbcTbcUbcVatFbtfbrJbcmbtgbcYbgCbdabdbbdbaHyaHzaHAbaAbaBbdebobaRRbdhbbXaNPaHYbaBbaDboiaHNaHMaHXbfhaHGaHFaLgbqlbuFbuDaLYaKlbdubdvaZFaZFaIjaZFaIiaZFaZFaZFaZFbgGaZFaZFaZFaZFaBDaZFaZFaZFaZFaZFaZFbdvaZFaZFaIkaIlaIlaImaIlaIlaIobonaZFaBDaItaJybgGaZFaIxaZFaZFaZFaIyaIzaIAaIBaZFaICaZFaIDaZFaZFbdzaIEaIFaSsaEJaSsaHLaHKaHJaJYaPcaHHaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQaaaaaeboqbhBbosboOboNboPboPboPboPboPboRboSaFNaFUaFTaFSaFRaYyaYyaYybdXaEvaYyaPEaPEaPEaPEaDGaHhaFZbpfaPEaGbbphbalaJfaJlbpqbcQbeebalbbJbefbPhbcSbcSbcSbehatFbvdaMabcmbvqaGvaGwaGraGsaGpaGqaGlaGmbaAbaBberbprbetbetbetaNPbevbaBbaDbexaGibclbdpbeyaGeaGdaGcbqlbwybwxbwJbwIaGKaGEaGDaGDaGMaGLaGNaGzaGzaGzaGPaGzaGzaGzaGzaGzaGAaGBaGBaGBaGCaGDaGDaGEaGDaGDaGFaGBaGBaHiaGzaHeaHpaHlaGzaHjaGDaGDaGDaGDaGDaGDaGDaGDaGDaGDaGDaGDaGDaGRaGPaGQaGzaGXaGSaGTaHaaHaaGYaGZaKQaStbeLaTMaTMaTNaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQbdQbijbiebpxbpwbpzbnAbePbePbeQbePbePbePbUVaNlaNlaNlaNlaDBaYyaZYbeSbeTaHvaYybVdbVebVdaPEaPEaPEaPEbpAaPEbVcblDbalbTpcnLbcQbRAbVabalbbJbarbUXbcSbcSbcSbfeatFbwKaMabcmbxHblvbgCbembfibfjbepbVtbhZbaAbpGbpSbpRbetbpTbetbobbqsbqrbaDbfrbVibVjbVgbVgbVgbVhbVfbqlbxJbxIbyybyxcxRdPwdPxdTPbmZcFsbVFcegceibVGbVHctbctbctaaZFaZFaZFaZFaZFbfDbVwbEuaZFctcbVybVxbVBaZFbfDbfybVIbVJbdzaZFaZFbVKaZFaZFcejbfOaZFbfDaZFaZFaZFaZFaZFaZFaZFaZFaZFaBDaZFaZFbdzbfQbfRbfSbfTbfUcGxcGybfWaaeaaaaaeaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQbdQbqvbqubqzbqwbqEbnAbfYbfZbgabgabgbbgcbqYbqUbrabrabrjbrhaYyaYyaYybcJbUgaYyaNlaNlaNlaNlbUfaEtaEtbrBbUdbUcbrGbUCbMpbYMbUqbUBbUjbalbTKbarbUibcSbKabcSbgzbyzbyAaMabcmasMbUsbUrbUubUtbUobUnbUpbfkbaAbaBbgFbsfbsBbshbsCbsfbgKbaBbaDbaDbUybUDbgObgPbclbUwbUxbqlbyCbyBbyDbqlbTqbTqbTqbTqbTqbTqbcqbcqbUMbUNbUJbUKbUNbUMbcqbcqbcqbcqbcqbcqbcqbcqbcqbcqbUObcqbcqbcqbcqbcqbcqcuObcqaZFaZFbURbhkbhkbTqbTqbTqbTqbTqbhmbhnbhnbhobhnaZFbhnbhobUSbhnbhpbTqcuRcuRcuRcvMaPtcBhaPtaPtaaaaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQbdQbkUbkRbpxbpwbsLbnAbhtbePbhubhvbePbePbePauUbSSbSRbSRbRuaYyaZYbhzbcJbTzaYybsObsMbtdbsZbtobtebtebtpbtebtebtqbalaFibLsbbHbLwbTtbUCbTibarbTjbcSbcSbTkbhUbyEbyAaMabyHasMbTbbTbbTbbTbbTbbTbbtxbTbbaAbaBbtHbtEbtVbtMbtVbtWbunbaBbaDbaDbimbuCbiobipbclaGdbSVbqlbffaLXaLYbqlcqlcqncqSbTncrDcrGcrMcrFcqUcqVbTTbTUcqVbTOcpscoYcmTbTMbTNcmUcpMckbcrscpNbTRbTPbTScktcktclSbktbSibTqbTqbTJbTqbTLbTLbTqbiVbiWbiXbTqbTEbTFbTEbTqbhmbhnbhpbTqbTDbTIbTDbTqbThbTgbNtbTHbTGbkebhgaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQaaacbCbuQbuRbmdbvjbnAbjibePbjjbjkbjlbRxbePbRybRobRrbRsbRuaYyaYyaYyaYyaYyaYybSebSdbScbSbbvnbalbalbalbalbalbalbalbShbalbalbalbMVbalbSgbRFbSfbcSbcSbcSbjAbyzbyAaMabyJasMbRPbRObRRbRQbREbLrbRKbRIaaebaBbRMbRLbRUbvrbRWbRYbRZbaBaaebaDbjNbRSbjObjPbclaGdbRTbqlbyLbyKaLYbyMcqOcgPbSwbSxbSKbSLbSGbSIchochocgRcgScjtcjtbSOciEciDbSNbSMciAckcckbcjDbSQbSPcgecjvcjucgecgfbktbSibiSbkwbkxcgdbSlbkAbkBbkCbkDbkCbSjbkFbSsbkHbTqbcqbSrbSmbTqbSzbSEbSDbSvbNHbSAbNtbSubkSbkTbhgaaaaaaaaaaafaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQaaacbCbuQbuRbmdbvjbnAbjibePbjjbjkbjlbRxbePbRybRobRrbRsbRuaYyaYyaYyaYyaYyaYybSebSdbScbSbbvnbalbalbalbalbalbalbalbShbalbalbalbMVbalbSgbRFbSfbcSbcSbcSbjAbyzbyAaMabyJasMbRPbRObRRbRQcBobLrbRKbRIaaebaBbRMbRLbRUbvrbRWbRYbRZbaBaaebaDbjNbRSbjObjPbclaGdbRTbqlbyLbyKaLYbyMcqOcgPbSwbSxbSKbSLbSGbSIchochocgRcgScjtcjtbSOciEciDbSNbSMciAckcckbcjDbSQbSPcgecjvcjucgecgfbktbSibiSbkwbkxcgdbSlbkAbkBbkCbkDbkCbSjbkFbSsbkHbTqbcqbSrbSmbTqbSzbSEbSDbSvbNHbSAbNtbSubkSbkTbhgaaaaaaaaaaafaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabmRbmQbnxbnvbkRbvubvubvubvLbvubvWbikbwcbwkbnAbkWbkXbkYbkZblacaHcaGaJaaEtaEtaEtbwmbrabwqbrabrabrabrabwFbZXbZXbZZbwSbalbljblkcrwblmblnbloboAbZVblrblschfckRbTibgAbSfbcSbcSbZWbaratFbyAbztbzubxabxdbxcbxcbxfbxCbxhbxRcazbzmbaBbaBbaBbaBbznbaBbaBbaBbaBaaebaDcaqbRScahcajcaecafcadbqlbzEaLXaLYbqldVHdVIdVJcaXcaVbgUcUZbZscjtcjtcjtcjtcjtcjtbZNcaLcaQbSNcaUcaScaJckbdVwbZDcaKcgecjvcjucgedVLbktbSibiScbtbLZbLZcbpcbqcbmcbncbncbncbrcbncbhcbgbhlcbfcbkcbjbNtcbibNHcbdcbabXbbXfbNtbmPbkSbmsbhgaaaaaaaaaaaaaaaaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaateaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabzwbzHbzBbzRbzObzYbzYbAjbAibApbnAbmSbmTbkZbmUbePbePbePaNlbZqbZrbYsbYtbYsbYsbYsbYtbYsaNlaNlbalbalbalbYubalblpblpblpblpblpblpboAbIwbnbbVobndbYwbYJbYLbYHbYIbqfbYFbYxbzFbzWbzVbAAbAzbABcwZbYSbTscDdbUkbRKbRIbAIbACbnybnzbBgbBdbnCbnzbnDbACaaebaDbnFbZobnFbaDbaDbaDbBobqlbzZaLXaLYbyMcqOcgPbZzbZAbZubgUdUSbZsdUXdUYdUVdUWdVnbZObZNbZMcmTdVpbZRbZQbZIckbbZGbZDbSPcgecjvcjucgecgfbktbSibiSdTXbnYdTYbXPbkxbocbodboebofbZSbpDbZTbohbhlbZUbsqchDbNtbVZbVAbVzbXBbVVbVXbNtbmPbkSborbhgaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaabzwbBCbBybBGbBEbBEbBEbBNbBEbBEbnAbotboubovbkZbePaaaaaaaaaaaeaaebowbowbowbowbowbowbowaaaaaaboxbXzbXybXAboBblpblpblpblpblpblpbXobXrbXsbqebXtbXvbPNboFbarbarbXwbarbarbAabAcbAbbAdbOxbXibTbbTbbTbbTbbTbbBQbTbbAIbCfbCUbCSbCXbCWbCXbCSbDbbCZaaebnFboVbXdbXabXcbXebnFbDdauWbAeaXObAfbqlbWmcqnbYlbYnbYjbixdUObYkdUJdUKdULbVWdUGdUFbYibYfcmTckbbYebYcbXYckbdUCbYbbXWbXVdUzdUzbXUdUwbktbSibiSdUubkxbkxbXPbXQbXNbXObXLbXMbXIbXJbXHbpFbhlbXGbXFbXEbNtbUYbUTbUPbXBbNHbUIbNtbSubkSbpMbhgaaaaaaaaaaaaaaebpNbpObMebpObMebpObpQaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -11384,11 +11390,11 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccecaCcaCcaDblBblAblRbkibpibkiblJcgtcgDblJblJblKcgGblMblNblPblQecQblGblFblHbllblIbgwbugbjDbiNbiMchecgLchwchiciBchTccbbkMbkLbkKbkJbkIbiTbiTbldciFcjbciPbWpbWpcjCcjcbWpbWpckvcjQckwbidbnNbksbhebiKbkGbiKbiGbiHbkEbiHbiGbliblxbooblubknbkrblhbtYbtTbltbkNbhQbhQbtCbtCbtCbtCbtCblgbleblfbtCbjfbjfbjfbjfbjfbjfbjfbjfbjfbjfbjfbpdboTbpgbpebnfaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaabjBbjBbkQbjSbjSbjSbjSbjSbjSbjSbjSbjSbjSbjSbjBbjBaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaambCVaamaamaamaamaamaaaaaaaaaaaaaaaaaaaaeaaeaaabxWbxTbxTbxTbxVbxTbxTbupburblJbuockzblJbuIbuJbuGbuHckAbuEbuAbuBbuObuMbuLbxUbuKbgwbugbwLbxjbiMclnbgXclwclwclwclwclwbtQbkLbymbCnbvlbtSbtRbtIclDcnwcnpbWpbtNbtPbtObuibiDbujbukbumbwUbhebksaJzbiKbtUbtXbiGbtZbuabufbiGbtcblxbpjblublubsIbsIbsIbsIbsIbsIblubuScovcnAcowbvkbtCbtCbtFbtCbtCbvsbuUbvcbuTblXbvgblXblXbvebtlbtkcpwcpabtjbnfbnfbnfaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaebtybjBbuPbulbulbjSbjSbjSbjSbjSbjSbjSbjSbjBbjBaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeecwecxbsKcrecqfbthcrfbwnbwoblJbwlcrhblJblJbwubwvbwwcribwrbwsbAkblGblFblHbwibwgbgwbgwbwhbwjbgwcrlbgXcrncrmclwcrAclwboJbqZbqZbqZbqZbqZbqZbqZbWpcrQcrHbWpbrAbwfbqJbtDbiDbvTbvUbvVbwUbhebksbhebiKbvObvPbiGbvSbvQbvRbiGbvAbGIcrUcrWbKUbvIbvHbsrbvtbvvbqhcsmcshcsybBFcsBcshctsbvobvpeczctWctScuacuacuacuacuacuacuacuacuacuabvFbvzbvxbvwcucbnfbnfbnfbnfaaaaaeaaaaaaaaaaajaajaajaaeaaaaaaaaeaaaaaaaaeaaaaaabxYbjBbxXbjBbjBbjSbjSbjSbjSbjSbjSbjSbjBbjBaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeecCecCbsKcuHcukbthcuKbqpbqqblJbqtcwzcwacwJcwAcwXcwKcxabqHbqAbqCbqNbqLbqKbqIbqSbqQbqPbqObqVbqXcxdcxccxxcxeczecyRclwboJbqZbpEbqWbqRbpCbpBbpycBpcCKcBycCNbppbpscCTbsmbiDbsnbsobsibwUbhebksbhebiKbpKbpLbiGbrOcCVbpJbiGbqiblxblxbsTblxbqbbqcbqbbqbbqbbqabsSbybbybbxSbqobybbudecGbqkecHbuddfTbyobxsbxqdfTdfTdfTdfTbylbxsbxqdfTdfTblXbsGcDfbsNcDpcDobsEcExcEycEycEycEycEycEycEycEycEycEycEycEycEycEycEycEybpmbpnbpnbpobjBbjBbjSbjSbqmbjSbjSbjBbjBaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaeaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsgbsgbsgbsgbsgbsgbsgbsjbsscvgcvgcvgcvgcvgbstbsubsvbsvbsvbsAbuNblGblFblHbtsblIbttbslbtucECbspbtGbgXcHMcEKclwcHTclwbrNbqZbzxbzsbzsbzsbrMbrLbWpcIncHYbWpbrAbqJbrzbtDbiDbtAbtBbtzbwUbhebksbtJbiKbrmbrnbiGbiGbiGbiGbiGbsecIHblxbsTblxbrYbsdbrYbqdbsbbscbtibybcJabBvbrVctibudbuhbrRbrSbudbrTbADbADbADbAGbzJbzQbAsbAvbzibzabyXdfTcMgcLFcNTbnfbnfbnfbnfaaaaaeaaaaaaaaaaajaajaajaaeaaaaaaaaeaaaaaaaaeaaeaaebtrbtwbtmbtnbtybjBbjBbjSbmLbjSbjBbjBaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaeaaeaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaebsgctYctZcOfctXcRbbsgcufcvZdgkdgjcwYcrCcrrcrrbuKcBVcBVcBUcBZbAkblGblFblHcnCbuKcnzcRScnBcVhcnxcnybgXcWqcWiclwcWtclwboJbqZdZLdZOdZOdZOcyVbqZdYtcyYczmdYtczHdZRczodZHbiDdZGbtBcrVbwUcylcxUbxQbiKcyIcypbiKcONcdnbidcBbcugcuDcRdcRecRdcuSbqccvGbqdcvFcvEbsTbybcBrcAEcAEczIcALcAHcAMcAHcAOcANcCQcCPcCPcCRdfQdfQdgBcCUdgodgodgndfTbYUcxPbYWbYUaaaaaaaaaaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaecrLbEQbEQbFgbtybtybjBbjBbjBbjBbEOaaeaaeaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeecCecCbsKcuHcukbthcuKbqpbqqblJbqtcwzcwacwJcwAcwXcwKcxabqHbqAbqCbqNbqLbqKbqIbqSbqQbqPbqObqVbqXcxdcxccxxcxeczecyRclwboJbqZbpEbqWbqRbpCbpBbpycBpcCKcBycCNbppbpscCTbsmbiDbsnbsobsibwUbhebksbhebiKbpKbpLbiGbrOcCVbpJbiGbqiblxblxbsTcdbbREbqcbqbbqbbsbbqabsSbybbybbxSbqobybbudecGbqkecHbuddfTbyobxsbxqdfTdfTdfTdfTbylbxsbxqdfTdfTblXbsGcDfbsNcDpcDobsEcExcEycEycEycEycEycEycEycEycEycEycEycEycEycEycEycEybpmbpnbpnbpobjBbjBbjSbjSbqmbjSbjSbjBbjBaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaeaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsgbsgbsgbsgbsgbsgbsgbsjbsscvgcvgcvgcvgcvgbstbsubsvbsvbsvbsAbuNblGblFblHbtsblIbttbslbtucECbspbtGbgXcHMcEKclwcHTclwbrNbqZbzxbzsbzsbzsbrMbrLbWpcIncHYbWpbrAbqJbrzbtDbiDbtAbtBbtzbwUbhebksbtJbiKbrmbrnbiGbiGbiGbiGbiGbsecIHblxbsTctebrYbsdbrYbqdcgWbscbtibybcJabBvbrVctibudbuhbrRbrSbudbrTbADbADbADbAGbzJbzQbAsbAvbzibzabyXdfTcMgcLFcNTbnfbnfbnfbnfaaaaaeaaaaaaaaaaajaajaajaaeaaaaaaaaeaaaaaaaaeaaeaaebtrbtwbtmbtnbtybjBbjBbjSbmLbjSbjBbjBaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaeaaeaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaebsgctYctZcOfctXcRbbsgcufcvZdgkdgjcwYcrCcrrcrrbuKcBVcBVcBUcBZbAkblGblFblHcnCbuKcnzcRScnBcVhcnxcnybgXcWqcWiclwcWtclwboJbqZdZLdZOdZOdZOcyVbqZdYtcyYczmdYtczHdZRczodZHbiDdZGbtBcrVbwUcylcxUbxQbiKcyIcypbiKcONcdnbidcBbcugcuDcRdcRedYWcuSbqccvGbqdcvFcvEbsTbybcBrcAEcAEczIcALcAHcAMcAHcAOcANcCQcCPcCPcCRdfQdfQdgBcCUdgodgodgndfTbYUcxPbYWbYUaaaaaaaaaaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaecrLbEQbEQbFgbtybtybjBbjBbjBbjBbEOaaeaaeaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaeaaeaaebTebTebTebTebTebTebTebTebTebTebTebTebTeaaaaaacnmcnjcnjcnjcnlcWxbsgcqqcpdcnWcnQcEzcnnctVctRctIctHctCctBctActzcujcWCcuhcuibCtbgXbgXbgXbgXbgXbgXbgXclwclwclwclwclwboJbqZbqZdZrdZscuobqZbqZcupcutcuxdYtbiDbiDbiDbiDbiDbwUdZydZzbwUcqXcuycqXbiKcuAcuzbiKcJLcNGbiddZVbidearblxbsTblxcWKcuEctubqbcttcvEbsTbybcvKcvLcvLcvPcvOcvNcvUcvTcvRcvQcvWdgWcBDcBzdgicBJdfQdfQdfQdfRdfSdfTculcumcunbYUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaaaaaaaaaaaaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaabTecnScqacnSbTecnOcpYcnObTecnMcpZcnMbTeaaaaaacBvcnjcnjcnlcnlcWMbsgcDacxbcvgdcVddhcFHcFlcFkcFnbYpbYpcFobYpbAkblGcEUblHcpCcBscEZcpucpEcpucEPbskcBIcCncWrcCEcCJbskboJbEaeaxbMXbMXcNicNkcNEcNFcmCcNDcNmcNscNleaeeaeeaudXBbwUbwUbwUcLscKZcLubiKbiKbiKbiKcNGcNGbidcWPbidcIfblxbsTblxcWUcDxcDxcERcEScFpcUBbybcJCcGecGecFXcGlcGjcFTcFRcFVcFUcGtcGmdfQdfQcWZdhndfQdhpdfQdfRdghdfTcFKcFMcFJbYUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaabTecnScqacnSbTecnOcpYcnObTecnMcpZcnMbTeaaaaaacBvcnjcnjcnlcnlcWMbsgcDacxbcvgdcVddhcFHcFlcFkcFnbYpbYpcFobYpbAkblGcEUblHcpCcBscEZcpucpEcpucEPbskcBIcCncWrehVcCJbskboJbEaeaxbMXbMXcNicNkcNEcNFcmCcNDcNmcNscNleaeeaeeaudXBbwUbwUbwUcLscKZcLubiKbiKbiKbiKcNGcNGbidcWPbidcIfblxbsTblxcWUcDxcDxcERcEScFpcUBbybcJCcGecGecFXcGlcGjcFTcFRcFVcFUcGtcGmdfQdfQcWZdhndfQdhpdfQdfRdghdfTcFKcFMcFJbYUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaabTecnScnRcnSbTecnOcnPcnObTecnMcnNcnMbTeaaaaaacBvcnjcnlcnlcnlcYCcXdcYGcvYcvgclOcClbpIcsMcsEcBscoycoEcoDdgFbAkblGdaHcuhdaRdcHdcBdeCdeCdeCdeEdeZdeKdfNcBqcBmcBnbskboJbEaeabbMXbOscEpeaaeageahcEscEtcEqeadcEreafeaeeandXBdfXdgadfZcEBdgGcEBdgHdgRdgRdgYdgRdhabidbidbidbidblxcRfblxdhodhdcDzcDJcDybqhcUBbybdgPdgQdgQdgQccQbudcEebuddgTcDKcEfdgMdgMdgXdgWdgWdgVdgMdgMcDndgOdfTdhBdhzdhCbYUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaabTecFfcnicFebTecFdcnfcFcbTecFbcnccEVbTeaaaaaecBvdeMcnjcnlcnlcnlbsgdaTcZgdaGdaGdaLdaGdaGdaGdaGcrzbYpcrxcrybAkcWIcWLcWQcWTcWFcWGcWHcWHcWHcQkbskcQKcPBcPVcFIcDedhLdhFbEadhObMXdcMdcKdcLdbGdbNdbkdbBdcCdcEdbSdbUeaedbhdXBcmIcqzdXFdbjdbidhMdXFdfJddEddFblxdhRdgRdgRdgRdgRdgRdjddhZdlEdkQdgRdgRdgRdgRdpbbybcFwcFxcFvdhTbuddcNdcQdcOdfTdhVcFrcFrcFrdhPcvudhQdhScFrcFrcFrdhYdfTdhXddxcccccdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaeaaebTecqocdMcqpbTecdWcdMcdXbTecdLcdMcdNbTeaaaaaecFqcnjcnjcnlcnldpYbsgcWDcHWcGvcGudBXdfUcROcROcRCcRqcRpcEIcsubAkcRYcRZcRQcqJcBscqCcqCcqHcCmcVibskcKYcKWcJUdaWdqMdbgdrmbEadhDbMXcVRcVSeaPbEaeaFcmCeaHdYteaIcVCcVQeaedhEdXBcmIcqzdXFeaQcWmeaQdXFaaaaaaaaablxblxblxddUddEddEddFblxblxblxblxblxblxbudbudbudbudbudbudbudbudbuddPHckXcWBdfTdfTbZPbOwcdqdfTdfTdfTdfTcoTbOwcdqdfTdfTccSdrwccSaaeaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaateaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -11400,21 +11406,21 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaeaaeaaaaaaceeciccibbSZcidcuIchXchHchGchHchYcuJciachLchHchHcuFchHcuGdDXchHcpccpcchHcpbchYcfTcwmdeBdcxcoWbQGchBcoZchBchBchBcoIcoQcoHchucoSchAclbcoRcaPcoGcaOcoFcfgchscfgcfgcjXdEcdEJbEabEacosbEabEabEacoAcoBcoCdXBdXBdXBcozdXBdXBcooceLaaabVuconcexcorcaZdbdcmzcmwcilcmycmxbVuceycexcevbVucomcfCbVuaaeaaebudccCccCccCcmDcmEcokcogcofcoccobcbWcmcbudbudbudbudaaaaaaciHaaachWchWchWchWchWaaedDdaaechWchWchWchWchWaaaciHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaaceeciccidchHchHchHchHchHchGchHchHchHchGchYcxrdFldEUbSZdGxckhckidHFdHrckickGbSZbSZcwmcgAbSZcrPcrScrRcrKcrIcrOcrNcrIdJrcsicsjdKecrXcrXcsgcrXdLqcsncsocskcslclHclHcjXcrkdLtdLrdLAdLAdMDdMtdNgdMSdMSdMSdMSdMSdMSdMSdMSdNidAZceLaaacaZcrocfPdZpcaZdeNdZnbXKbXKdZmbXKdZkcrqcrtdWPdZjcjPbXKbVuaaaaaabudccCccCccCcphcrpcrucqKdNIcrvcrBcbWcbWcrEcoqcopbudaaeaaeciHaaedNWdNYdNYdNYdNYdORdOPdSHdOSdOSdOSdOSdTTaaeciHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaaceecjlbSZbSZbSZbSZbSZbSZcmmbSZbSZbSZcmmbSZbSZcvVcicbSZcmmcidcAzclTcbubSZcwtcwrbSZcFzcwecoPcrdcwWcvXcwScwRcwFcvXcvXcracqZcGqcqYcaPcqWcmjcaPcaPcrccfgcfgcrbclHclHcjXbClceKbTBbTBbTBbTBcqDbTBbTBbTBbTBcqzcqBceLceLceLceLceLceLaaacaZcaZcqycaZcaZdeLcqrcqvcqscqxcqwcqxcqPcqMcqNcqRcqTcqQbVuaaaaaabudcfccfccfccfccnYckUcqKcqIcqEcqLcbWcbWcnXcbWcnUbudaaaaaaciHaaecfqcfqcfqcfqcfqaaadDdaaacfqcfqcfqcfqcfqaaeciHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaabCVaaaaaaaaaaaaceecicbSZbSZbSZbSZbSZbSZcmmbSZbSZbSZcmmbSZbSZdUqclGckiclIckicznclTcaiclUcljcbsbSZddIcpJctfctebQGbQGbQGbQGcAuclrcaTctgctjciRclYcaPcmbcmjcaPcmkcaOcpKcmlctrcqGcencjXcsQceKbTBcpHbhMbhLbYhbhKcsObhPbTBcgUcgTceLaaaaaaaaaaaaaaaaaabVuctdcsZcsYcsXcsWcsVcsUcsTcsScsRcqNcsCcsDcsFdZjbVudWgbVuaaaaaabudcnbcmXcmYceAcpicrucsNcoucoucsJcsIcsLcsKcsHcsGbudaaaaaaciHaaaaaeaaaaaeaaeaaeaaadDdaaaaaeaaaaaeaaaaaeaaaciHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaabCVaaaaaaaaaaaaceecicbSZbSZbSZbSZbSZbSZcmmbSZbSZbSZcmmbSZbSZdUqclGckiclIckicznclTcaiclUcljcbsbSZddIcpJctfdYCbQGbQGbQGbQGcAuclrcaTctgctjciRclYcaPcmbcmjcaPcmkcaOcpKcmlctrcqGcencjXcsQceKbTBcpHbhMbhLbYhbhKcsObhPbTBcgUcgTceLaaaaaaaaaaaaaaaaaabVuctdcsZcsYcsXcsWcsVcsUcsTcsScsRcqNcsCcsDcsFdZjbVudWgbVuaaaaaabudcnbcmXcmYceAcpicrucsNcoucoucsJcsIcsLcsKcsHcsGbudaaaaaaciHaaaaaeaaaaaeaaeaaeaaadDdaaaaaeaaaaaeaaaaaeaaaciHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaaceecicbSZbSZclKckickickiclBckickickiclBckickickGcicbSZcmmclKcoUdUBcljcliclhdUPdUPcFGcpQcsAczjczidWdczlczkclxclrcaTcdJcaTclacldcaPcaPcszcaPclecaOcqhcqhclfcqGcencjXbClceKbTBbvhbvibVTbVSbvmbVSbvbbTBdWwdWjceLaaaaaaaaaaaaaaaaaabVucswcsvcstcxZdWxbsxcsrdWAcrqcssdZkdWrcrqcsqdWPbVubVubVuaaaaaabudccCcoLccCcoKcmEckUcbWcbWcspcetcbWcoxcfccfccfcbudaaaaaaciHaaachWchWchWchWchWaaedDdaaechWchWchWchWchWaaeciHaaaaaaaaaaaaaaaaaaaaaaaacmdaaaaaaaaacmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabCVaaaaaaaaaaamaaeaaaaaaaaaceecbJcpBcbDcpxcbDdWFcbDcpvcbDcppcbDcpncbDcbDcpgcbBbUZcbzdWYdWKclUclTbSZcoJcoJcoNbVRceccdTcdUcdVcdZcdQcdRcdScaYcaTcdJcdOcaOcdHcaPcaRcaPcaNcaMcaOcjXcjXcjXcjXcjXcjXbClceKbTBbyGbyIbvibYgbvibVSbyFbTBceNceMceLaaaaaaaaaaaaaaaaaabVudWPceBcaZcaZcVPceCceFceHceycexcevdWMceycexdXjbVuaaaaaaaaaaaabudccCccCccCceAcezcercbWcbWcbWcetcbWcbUcbWcbXcbWccBaaeaaeciHaaedNWdNYdNYdNYdNYdORdOPdSHdOSdOSdOSdOSdTTaaeciHaaaaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaciHaaeaaeaaeaamaaeaaeaaeaaeceebSZcctccucqbcfnccJdXrcqAcfoccDccIcqucfnbSZbSZcqtceVceUdYkdXRdYzdYubZgbYPbYPbYPbWlbQGceSbQGbQGcdUcePchEceOcaYcaTcdJcaTcaOccrccqcpUccnccmcaPcaOcVUcVTcVTcfbcfacfKcfJcfMbTBbVSbnsbnrbVScQJbnpbnobTBeaAeakceLaaaaaaaaaaaaaaaaaabVucfucfPcfQdWPdWQcfSdWNcaZcfUcfVcfvdWMcfucftcfwbVuaaaaaaaaaaaaccQbudcdcccTccTcVVcWecfzcfxcfycfFcfGcfAcfEcfHcfIcdxaaaaaaciHaaecfqcfqcfqcfqcfqaaadDdaaecfqcfqcfqcfqcfqaaaciHaaacmdaaaaaacmdaaaaaacmdcmdcmdcmdcmdcmdcmdaaaaaacmdaaaaaacmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaciHeaOaaaaaaaaaaamaaaaaaaaaeaTdvqdwHdvqdwGeckeblectecsecIeblectecsecIecJecteblectecsectecKbQGbQGcgxcdfcdgcdhceabQGcgvcgwbQGbQGbQGbQGbQGcddcrgcgucrgcaOcaOcaOcaOcaOcaOcaOcaOcWpcVTcVTcgocglcVFbClcgQbTBbsJbsDecTecNecUbYdbsybTBecWecVceLaaaaaaaaaaaaaaaaaabVubXKcgIcfwcaZccKcgKdXbcaZcgJdXadWUdWTchdchcdWXbVuaaeaaeaaaaaaaaaaaaciMaaabudcWucdCcgZcdIcgYcdCcgXcdFcgYcdCchabudaaaaaabCVaaaaaeaaaaaeaaaaaeaaadDdaaaaaeaaaaaeaaeaaeaaeciHaaacmdcmdcmdcmdaaacmdcmdcmdcmdcmdcmdcmdcmdcmdaaacmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaateaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaciHciQecXecXecXecYedaedaedaecXedaedbedaedcedaedbedaedcedaedbedaedcedaecXedaedbedaedcedaeddaaabQGchqchtchychzcffcmgedfedeedkchgchlchpchjchkchpchOchpchNchUchSchRchJchJchIchFchCchMchMchKcWycVFbClchZbTBbTBbVPcoicohcoibVPcojbTBceLciiceLaaaaaaaaaaaaaaaaaabVucaZcimdWPcaZdXicincWzcaZceQceRceXcthbYXciobYTbZJaaaaaaaaaaaaaaaaaactyaaebudcWAcficitcfcciscfecircfcciqcfsciubudaaaaaaciHaaachWchWchWchWchWaaedDdaaechWchWchWchWchWaaeciHaaacmdcmdcmdcmdaaacmdcmdcmdcmdcmdcmdcmdcmdcmdaaacmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaciHaaeaaeaaaaaaaamaaaaaaaaaaaebTecdXcdMcdWbTecdXcdMcdWbTecdNcdMcdLbTeaaabTecdNcdMcdLbTeaaaaaabQGbQGcfRcfRcfRcfRcfRciNcfRcgpciOciyceociLceoceocizceoceociwceociycixcdPciJcWRedledoedmedpciCcVFcjhcjfcjecjibVPctGbYdctFbVPctEaaeecPecOecPaaaaaaaaaaaaaaaaaabVucjacexbXKciVciUbXKciZcbNcgOaaeaaaciXaaLciQclJaaaaaaaaaaafaaaaaaaaaaaaaaabudcWSccCccCcfccgsccCccCcfccgsccCccCbudaaeaaeciHaaedNWdNYdNYdNYdNYdORdOPdSHdOSdOSdOSdOSdTTaaeciHaaacmdcmdcmdcmdaaacmdcmdcmdcmdcmdcmdcmdcmdcmdaaacmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaciHaaaaaeaaeaaaaamaaaaaaaaaaaabTectJcgMctKbTectNchPctObTectLcemctMbTeaaabTectQbVqctPbTeaaaaaaaaachnbZdcgVbZpchbcgWcjmdDUcrjcrjcjkedqcgEcdYcehcjpcdYcehcgEbYocjocjnbYocgpcgpcVFcVvcWWcWVedrcVFbmvcjrcjqcjsbVPcoicqmcoibVPctEaaeaaaaaeaaaaaaaaaaaaaaaaaaaaabVucjacjzcjxcjycjycjxcfvdXybVuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabudcWXccCccCcfcchQccCccCcfcchQccCccCbudaaaaaaciHaaecfqcfqcfqcfqcfqaaadDdaaacfqcfqcfqcfqcfqaaaciHaaacmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaciHaaaaaeaaeaaaaamaaaaaaaaaaaabTectJcgMctKbTectNchPctObTectLcemctMbTeaaabTectQbVqctPbTeaaaaaaaaachnbZdcgVbZpchbdDwdNFdDUcrjcrjcjkedqcgEcdYcehcjpcdYcehcgEbYocjocjnbYocgpcgpcVFcVvcWWcWVedrcVFbmvcjrcjqcjsbVPcoicqmcoibVPctEaaeaaaaaeaaaaaaaaaaaaaaaaaaaaabVucjacjzcjxcjycjycjxcfvdXybVuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabudcWXccCccCcfcchQccCccCcfcchQccCccCbudaaaaaaciHaaecfqcfqcfqcfqcfqaaadDdaaacfqcfqcfqcfqcfqaaaciHaaacmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaamaaaaaaaaaaaabTecfBcgNcfBbTechVciechVbTebUhcesbUhbTeaaabTebUhbUhbVrbTeaaaaaaaaabYmcifbXTchmdYKcigcjmbYKcrjcjJcjKcjLbYrceDcakcjEcewcjFbYrcjGcjIcjHbYoaaaaaecVFedveducXaaaeaaabmvbClbClbCjbVPctUcpoctTbVPctEaaeaaeaaaaaaaaaaaaaaaaaaaaaaaabVucjOcjPdVQciGciGdVQbXKdVSbVuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabudccCccCccCcfccihccCccCcfccihccCccCbudaafaaaciHaaaaaaaaeaaeaaeaaaaaaedwaaeaaaaaaaaeaaeaaaaaaciHaaacmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaAaaaaaaaaaaaebTecfBceGcfBbTechVcijchVbTebUhceIbUhbTeaaabTebUhbUhbUhbTeaaaaaaaaabYmbXZcikbYNbXZcigcjTcivcrjcjRcjWckabYrcjUckmckjckeckdbYrckrckpcknbYoaaaaaacVFedyedxcXbaaaaaabmvbClbClbmvbVPcrJcrJcrJbVPcubctmaaaaaaaaaaaaaaaaaaaaaaaaaaabVudVTckubXKbXKbXKbXKbXKdVUbVuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccQbudbudbudbudbudbudbudbudciKciKciKccQaaaaaaciHciHciHciHciHaaaaaaaaadyPaaaaaaaaaciHciHciHbCVciHaaacmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaebTebTebTebTebTebTebTebTebTebTebTebTebTeaaabYybTebTebTebTeaaaaaaaaabYmcVjbXTbXZbXZbYacbHcbIcbKcbLcbycbAcbEcbGcbScbRcbVcbTcbOcbMcbQcbPbYoaaeaaaedzcVvcVucVFciWaaabmvcbwbClcbxciIaaeaaeaaeaaaciMaaeaaeaaaaaaaaaaaaaaaaaaaaaaaabZJbVubVubXCdVZdVQdVQdVQdVYbXCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabXlbXlbXlaaaaaaaaaaaaaaaaaaaaaaaaaaaciHaaeedAaaeciHaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYmbYQbXTbYNbXZcigbXRbYKcrjccoccjedBbYredCccicchccgbYvbYrccfedGedEbYoaaLcVGcVGcVGcVGcVGcVGcVGbmvcbZcbYccaaaeaaaaaaaaeedHciXaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYCciGciGciGciGciGbYCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaciHaaaaaeaaaciHaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaamaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaacjgaaaaaaaaaaaaaaaaaaaaaaaabZbbZdbZfbZmdYLccAccvbYKcrjccwccxccycczcjjccGccFccHcjwbYrcjAedIcjBbYoaaacVGcVGcVGcVGcVGcVGcVGedKccsccpbmvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabVubYXbYRbYRbYRbYTbVuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaciHciHciHciHciHaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaacfRcfRcfRcfRcfRcjSbZjbZjbZjbZjedLbZjccUccMccPccMccLbZjbZjbZnbZjbZjbZjcVGcVGcVGcVGcVGcVGcVGaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdaaaaaacmdcmdcmdcmdcmdcmdcmdaaaaaacmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaaaaaaaeaaeaaaaaeaaeaaaaaaaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaacjYcaacaacaaclQclMclRclzclVcjZckoctkckqcksccXcdbcdecyUcCucBEcCucCucBocklckSckWbZEbZjcVGcVGcVGcVGcVGcVGcVGaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaaaaaaaeaaeaaaaaeaaeaaaaaaaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaacjYcaacaacaaclQclMclRclzclVcjZckoctkckqcksccXcCEcdecyUcCucBEcCucCudtucklckSckWbZEbZjcVGcVGcVGcVGcVGcVGcVGaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaacdzedMcdwaaacdzedMcdwaaacdzedMcdwaaeaaeaaaaaaaaaaaaaaeaaecmpcaacaacaaclQclMcmucmtcmWclAcnGcnrcyXbZCcdvcPScdtedNedSedRcdpcdpcdocmBbZHclkbZLbZjcVGcVGcVGcVGcVGcVGcVGaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaacdzedTcdwaaacdzedTcdwaaacdzedTcdwaaeaaeaaeaaeaaaaaacmnaaacjYcaacaacaaclQclMcolcoecRicotcRJcRIcSfcagcdBdyNcagefhcmGcEGcmObZCbZCedUedVcmPcmQbZjeeaaaeaaDaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDaaecdzedTcdwaaacdzedTcdwaaecdzedTcdwaaeaaaaaaaaeaaecdEaaaaaacmpcaacaacaaclQclMeflefkefnefmefocRIcSfcagcdBefpefrefqefscEJeftcascascnDcnEcmPcQNbZjaaaaaaaaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -11877,7 +11883,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaciHaalcYWcYZcYYcYZcZAdsPdtMdtMdtMdtMdsSdtNdtPdtPdsQdtPdtPduldsVdtMdtMdtMdtMdsTcZFcYZcYYdcWcYWaalciHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaciHaalcYWdcXcYYcYZcYZdaydaydcYdaydaydcAdcZddaddcdsOddcdddddedcAdaydaydaydaydaycYZcYZcYYcYZcYWaalciHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaciHaalcYWcYZcYYcYZcYZcYZcYZcYYcYZddfdcAdcAdcAdcAdsMdcAdcAdcAdcAddfcYZcYZcYZcYZcYZcYZcYYcYZcYWaalciHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaciHaalcYWcYYcYYcYYcYYcYYcYYcYYcYYddidAKdBEddpdsEdshefAddpddqdtuddscYYcYYcYYcYYcYYcYYcYYcYYcYWaalciHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaciHaalcYWcYYcYYcYYcYYcYYcYYcYYcYYddidAKdBEddpdsEdshefAddpddqehWddscYYcYYcYYcYYcYYcYYcYYcYYcYWaalciHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaciHaalaalcYWcYYcYZcYZcYZcYZcYZcYWddfduLdnTddvddydsDddyddzddyddAddfcYWcYZcYZcYZcYZcYZcYYcYWaalaalciHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaciHciHaalaalcYWcYWcYWcYWcYWcYWcYWddfddfddfddfddDdsCddDddfddfddfddfcYWcYWcYWcYWcYWcYWcYWaalaalciHciHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaciHciHaalaalaalaalaalaalaalaalaalaalaalddfdsidssddGddfaalaalaalaalaalaalaalaalaalaalaalciHciHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -12096,7 +12102,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaedtndtpdtodtpdtqdtsdtnaaeaaeaaeaaadeGdkTdkUdeHdeGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaedkJdkEdkDdkCdkCdkHaaedkJdkEdkEdkDdkDdkPdkPdkCdkCdkCdkDdkDdkDdkXdkYdkZdkYdkXdkDdkDdkDdkCdkCdkCdkPdkPdkDdkDdkEdkEdkJaaedkHdkCdkPdkDdkEdkJaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaedtndtpdtodtpdtqdtsdtnaaeaaeaaeaaedledtRdtQdeHdleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaeaaaaaedkJdkEdkDdkCdkCdkHaaedkJdkEdkEdkDdkPdkPdkPdkCdkCdkDdkDaaeaaedkXdkYdkZdkYdkXaaeaaedkDdkDdkCdkCdkCdkPdkPdkDdkEdkEdkJaaedkHdkPdkPdkDdkEdkJaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadtndtndtndtndtndttdtwdtvdttdtLdtOdttdtndtndtndtndeDdeDdtEdeDdeDdeDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaeaaeaaLaaeaaLaaLaaeaaeaaLaaeaaeaaLdkJdkEdkDdkCdkCdkHaaedkJdkEdkEdkDdkPdkCdkCdkCdkDdkDaaeaaeaaedkXdkYdkZdkYdkXaaeaaeaaedkDdkDdkPdkCdkPdkPdkDdkEdkEdkJaaedkHdkCdkPdkDdkEdkJaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaedtndzfdzfdzfdzfdzgdYxdYydYCdYBdYDdzgdzfdzfdzfdzfdeDdmJdvQdmKdzideDdeDdeDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaLaaeaaeaaLaaLaaLaaLaaLaaLaaLaaLaaLaaLaaLdkJdkEdkDdkCdkCdkDdkJdkJdkEdkDdkDdkPdkCdkCdkCdkDaaeaaeaaedkXdkXdkXdlYdkXdkXdkXaaeaaeaaedkDdkPdkPdkCdkPdkDdkDdkEdkJdkJdkDdkPdkCdkDdkEdkJaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaedtndzfdzfdzfdzfdzgdYxdYyehXdYBdYDdzgdzfdzfdzfdzfdeDdmJdvQdmKdzideDdeDdeDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaLaaeaaeaaLaaLaaLaaLaaLaaLaaLaaLaaLaaLaaLdkJdkEdkDdkCdkCdkDdkJdkJdkEdkDdkDdkPdkCdkCdkCdkDaaeaaeaaedkXdkXdkXdlYdkXdkXdkXaaeaaeaaedkDdkPdkPdkCdkPdkDdkDdkEdkJdkJdkDdkPdkCdkDdkEdkJaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaedtndzPdzNdzNdzNdzDdYNdeHdYMdYIdYEdzDdzJdzJdzJdzFdeDdmJefDdwddzMdzKdmrdmRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaLaaLaaLaaLaaLaaLaaLaaLaaLaaLaaLaaLaaLaaLaaLaaLaaLaaLdkJdkEdkDdkCdkCdkDdkEdkEdkEdkDdkPdkPdkCdkCdkDdkDaaeaaedkXdkXdlZdlZdkYdlZdlZdkXdkXaaeaaedkDdkDdkPdkCdkPdkPdkDdkEdkEdkEdkDdkPdkPdkDdkEdkJaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaedtndxhdxhdxhdxhdttdmtdeHdmudeHdymdttdxhdxhdxhdxhdeDdmwdvQdeHdypdeDdeDdeDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaajaaeaaeaaeaaeaaeaajaajaajaajaajaaeaaLaaeaaLaaeaaLaaeaaLaaeaaLdkJdkJdkJdkJdkJdkJdkJdkJdkJdkJdkJdkEdkDdkCdkCdkDdkIdkDdkDdkDdkPdkPdkPdkPdkDdkXdkXdkXdkXdkYdlZdkYdkYdkYdlZdkYdkXdkXdkXdkXdkDdkPdkPdkCdkPdkDdkDdkDdkIdkDdkPdkPdkDdkJdkJaajaajaajaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaedtndzedzadzadzadySdeSdyZdyTdeHdmzdySdyrdyrdyrdufdeDdoVefDdwddwddyXdmrdmAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLaaeaaLaaLaaLaaLaaLaaLaaLaaLaaLaaLaaLaaLaaLdkEdkEdkEdkEdkEdkEdkEdkEdkEdkEdkEdkEdkDdkCdkCdkPdkPdkPdkPdkPdkPdkCdkPdkPdkDdkYdkYdkYdkXdlZdlZdkYdkZdkYdlZdlZdkXdkYdkYdkYdkDdkPdkPdkCdkPdkPdkPdkPdkCdkPdkPdkCdkDdkEdkEaaLaaLaaLaaLaaLaaLaaLaaLaaLaaLaaLaaLaaaaaaaaeaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -12315,7 +12321,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaduZdtTdtTdvadvbdtWdvcdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsaduDduDduDaaaaaaecudvddvddvddvddvddvddvddrTdWkdWndWieggdWqdWsdWodWpdWvdWudWyegidtJeghdvrdWzdWDdWBdWEdtJdWIegjdvzdvzdvzdWtdvzdvzdvzdpkdBvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaedvGdvHdvIdvcdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsaduDaaaaaaecudvddvddvddvddvddvddvddvJdVrdvLdVsdvLdvLdVudVydvLdVCdVBdVAdVzeendvXdVMdVDdVRdVPdVOdVNdVWdVVdvzdsUdWedWfegkdvzdtxdtIdBvdBvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeecydwmdwndwodvcdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsaaaaaaaaaaaaaecudvddvddvddvddvddvddvddwpdDFdwrdwsdDHdwudEVdwvdwYdEedrDdEidEgdrDdwAdwBdEddwDdwEdEbdtJdDTdDIdDZdDWdEAdEKegldwMdpvdpwdBvdBvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUdqUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaedwQdwRdwSdvcdwTdwUdvcdvcdvcdvcdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsaaaaaaaaaaaaaaaaaaaecudvddvddvddvddvddvddvddwVdDFdwrdwsdDHdxxdpodwvdwYdwZdrDdDEdDBdrDecrdtJdtJdtJdtJecqdtJdDzdDvdvzdDwdDudxiecodxkdpkdpldCidCiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqUdqUdqUdqUdqUaaadqUdqUdqUdqUdqUaaadqUdqUdqUdqUdqUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaedwQdwRdwSdvcdwTdwUdvcdvcdvcdvcdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsaaaaaaaaaaaaaaaaaaaecudvddvddvddvddvddvddvddwVdDFdwrdwsdDHdxxdpodwvdwYdwZdrDdDEdDBdrDecrdtJdtJdtJdtJecqdtJdDzdDvdvzehYdDudxiecodxkdpkdpldCidCiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqUdqUdqUdqUdqUaaadqUdqUdqUdqUdqUaaadqUdqUdqUdqUdqUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeecMdxpdxqdxrdxsdxtdszduBdxudvcdxvdxwdvcdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsaaaaaaaaaaaaaaaaaaaecudvddvddvddvddvddvddvddrTdIQdJGdILdDHdxydpJdwvdxzdxAdrDdKPdKOdLbdKUdLfdLddKcdrDdKAdKsdKIdKBdvzdKJdLgdxPecLdxRdpkdBvdBvdBvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqUdqUdqUdqUdqUaaadqUdqUdqUdqUdqUaaadqUdqUdqUdqUdqUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaedxSdxTdxpdxUdxVdxWdxXdxYdxudxZdxwdyadxvdvcdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsaaaaaaaaaaaaaaaaaaaegmdycdyddyeecDdycdyddygdyhdEWecAecBecBecBdrDdrDdrDdrDdrDdICdwqdIKdxEdrEdxGdGudrDdyqdFRdHidHgdrDdGwdFFdpDdpCdyzdyAdyBdrDdyCecEeaKeaKeaKeaKeaKeaKecFebJaaaaaaaaaaaaaaaaaaaaaaaadqUdqUdqUdqUdqUaaaaaaaaaaaaaaaaaaaaadqUdqUdqUdqUdqUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaedgdxSdyFdxSdxqdxqdwTdyGdxVdvcdwodyHdvcdxwdyIdvcdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsaaaaaaaaaaaaaaaaaaadyJdOydyLegpegoegndyLdOodOxdOLdyLedhdOFdOCdyUdOAdOBdyVdyUegqdwqdzbdzcdzddNUdOcdrDdzhdOkdObdNXdrDdvzdOndvzdrDdrDdzmdzndzodzpdzqdzrdzrdzsdzrdzrdzrdztecZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -12438,11 +12444,11 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadHndHndHndHVdHVdHVdHndHndHndHndHndHndHndHndHVdHVdHVdHndHndqTdBvdCidCidCidJodJYdJAdJZdKadJAdJAdJAdJAdMxdMydMEdMNeeKdKgdCidCidCidCidCidBvdBvdBvdqTdqTdqTdqTdqTdqTdqTdsadsadsadsadsadsadsadsadsadsadsadsadqTdqTdBvdBvdDQdCidCidCidCidCidCidCidCidCidCidCidCidCidCidCidBvdBvdqTdqTdqTdqTdqTdqTdIPdTwdJNdKidTxdKkdKldIPdIPdIPdIPdMvdIPdJRdKmdKmdMIdKmdJidCidCidCidCidCidCidCiaaaaaaaaaaaaaaaaaaaaaaaaaaadCidCidCidCidCidCidCidCidCidCidCidJUdEjdEjdEjcsPdJVdCidKqdCidCidCidEudDQdBvdqTdqTdsadsadsadsadsadsadsadsadsadsadqTdqTdsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadHndHndHVdHVdHVdHndHndHndHndHndHndHndHndHndHndHndHndHndqTdBvdCidCidCidJodKrdXNdXMdXPdMpdXMdXMdXQdMUdNJdNMdMVdhbdHGdCidCidCidCidCidCidCidBvdBvdBvdBvdqTdqTdqTdqTdqTdqTdsadsadsadsadsadsadsadsadsadqTdqTdBvdBvdCidJfdCidCidCidCidCidCidCidCidCidCidCidCidCidCidCidCidBvdBvdBvdBvdqTdqTdqTdIPdKwdJNdKxehHdKydXSehIehGdYpdZDdYcdIPdJRdKmdKDdMIdwIdJndCidCidCidCidCidCiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCidCidCidCidCidKFdKFdKGdKHdJUdYvdLedLeehJdJVdJVdJVdJVdCidCidCidCidBvdBvdqTdqTdsadsadsadsadsadsadsadsadsadqTdsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadHndHndHndHndHndHndHndHndHndHndHndHndHndHndHndsadsadBvdBvdCidCidJodKMdJAdJAdJCdYAdJAdJAehKdJodJodJodJodJodJodIedHJdCidCidCidCidCidCidCidCidBvdBvdBvdqTdqTdqTdqTdqTdsadsadsadsadsadsadsadqTdqTdqTdBvdCidCidCidCidCidCidCidCidCidCidCidIedHJdCidCidCidCidCidCidCidCidCidBvdBvdqTdqTdIPdIPdIPdIPdIPdIPdIPdKSdYGdYFdKSdYGdIPdIPdIPdIPdwJdIPdIPdIPdKWdKXdCidCiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCidCidKYdKHeePdYJdYHdMRdMLdMLdMLdYQdANdLiehLdLkdHJdCidCidCidDPdBvdqTdqTdsadsadsadsadsadsadsadqTdqTdqTdsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadHndHndHndHndHndHndHndHndHndHndHndsadsadqTdBvdCidCidJodLlehMdLmdKadYWdLodLpdJAdhfdhcdLsehNdLudLvdIkdIldIcdIcdIcdIcdIcdIbdCidCidCidCidBvdBvdBvdqTdqTdqTdqTdqTdsadsadsadqTdqTdqTdqTdBvdBvdCidCidIhdIcdIcdIcdIcdIcdIcdIcdIcdIkdIldIcdIcdIcdIcdIbdCidCidCidCidCidBvdqTdqTdqTdqTdqTdIPdLwdLxdLydKmdKmdMvdKmdKmdKzdRudwNdLCdMIdZadQodQodPIdLEdJxdJydLFdLGdLGdLGdLGdLGdLGdLGdLHdLHdLHdLHdLHdLHdLHdKGdLIdLJdLKdLadYZdYYdMTdMKdLNdLNdLPdLOdNZdPGeeQdLUdCidCidCidDPdBvdqTdqTdsadsadsadsadsadsadqTdqTdqTdsadsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadHndHndHndHndHndHndHndHndHndHndHndsadsadqTdBvdCidCidJodLlehMdLmdKaehZdLodLpdJAdhfdhcdLsehNdLudLvdIkdIldIcdIcdIcdIcdIcdIbdCidCidCidCidBvdBvdBvdqTdqTdqTdqTdqTdsadsadsadqTdqTdqTdqTdBvdBvdCidCidIhdIcdIcdIcdIcdIcdIcdIcdIcdIkdIldIcdIcdIcdIcdIbdCidCidCidCidCidBvdqTdqTdqTdqTdqTdIPdLwdLxdLydKmdKmdMvdKmdKmdKzdRudwNdLCdMIdZadQodQodPIdLEdJxdJydLFdLGdLGdLGdLGdLGdLGdLGdLHdLHdLHdLHdLHdLHdLHdKGdLIdLJdLKdLadYZdYYdMTdMKdLNdLNdLPdLOdNZdPGeeQdLUdCidCidCidDPdBvdqTdqTdsadsadsadsadsadsadqTdqTdqTdsadsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadHndHndHndHndsadsadqTdBvdCidCidJodJodJodJodJodZbdLWdLXdJodJodLYdJodJodJodJodHEdHGdCidCidCidCidCidHSdCidCidCidCidBvdCidBvdBvdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdBvdBvdCidCidCidHSdCidCidCidCidCidCidCidCidHEdHGdCidCidCidCidHSdCidCidCidCidCidBvdBvdDQdBvdBvdqTdIPdIPdIPdIPdZJdPzdZIdZDdZDdZDdZBdZFdZidZldZidZudZtdZMdZNdZidZNdZKdZKdZKdZKdZKdZKdZKdZKdZgdZgdZgdZgdZgdZgdZgdZfdZddZfdZedZddZcdLadMqdUtdMsdMXdMYdANdNCdQsdNadHGdCidCidCidCidBvdBvdqTdqTdsadsadsadsadsadqTdqTdqTdsadsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadHndHndsadsadqTdBvdBvdCidCidCidCidCidJodZQdMzdMAehOdJodMCehPehDdCidCidCidCidCidHUdCidCidCidIadIcdIcdIbdCidCidCidCidBvdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdBvdCidCidIhdIcdIidCidCidCidCidBvdCidCidHUdCidCidCidCidCidCidHSdCidCidCidCidCidCidCidJfdCidBvdBvdBvdBvdBvdIPdKmdMIdKmdKmdKmdKmeajdMIeaceamdKmealdKmdZWdZZdJxdJydZSdZSdZSdZSdZSdZSdZSdZSdZTdZTdZTdZTdZTdZTeawdKGdLIdOOeazdLaeasdLadMZdKFdKFdKFdKFdKFdKFdKFdKFdNbdNbdNcdNbdFrdDPdBvdqTdqTdsadsadsadsadqTdqTdqTdqTdsadsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsadsadqTdBvdBvdCidCidCidCidJodNddNedNfehQdJodCidCidCidCidCidCidBvdBvdDQdBvdCidCidCidCidCidHSdCidCidCidCidCidBvdqTdqTdqTdqTdqTdBvdBvdBvdBvdBvdCidIhdIidCidCidCidBvdBvdBvdBvdBvdBvdDQdCidCidCidCidCidCidHSdCidCidCidCidCidCidCidCidCidCidCidBvdBvdIPdIPdNheeVdNhdIPdIPdNjdNkeaDdIPdIPdNhdZAdNhdIPdNodCidCidCiaaaaaaaaaaaaaaeaaaaaaaaaaaeaaaaaaaaaaaaaaaaaeaaadNpdKHdLaeaJeaEdNsdNtdNudNudNvdKFdNwdNxdNydNzdNzdNzdNzdFrdCidBvdqTdqTdsadsadsadsadqTdqTdqTdsadsadsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsadsadsadqTdBvdBvdCidCidCidJodJodJodJodJodJodCidCidBvdBvdBvdBvdBvdqTdqTdBvdBvdCidCidCidCidHSdCidCidCidCidCidCidBvdBvdBvdBvdBvdBvdCidCidCidCidCidHSdCidCidBvdBvdBvdqTdqTdqTdqTdqTdBvdCidCidCidCidCidCidHSdCidCidCidIedHJdCidCidCidCidCidCidCidBvdIPdNAdNBdQtdNBdIPehRdNEdNFeaRdNHdIPehSdZUdZPdIPdCidCidCidCidCidCiaaaaaaaaeaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaedKFdNLeaNeaMdKFdKFdKFdKFdNNdKFdNOdKFdKFdNPdFrdFrdFrdFrdCidBvdqTdqTdsadsadsadqTdqTdsadsadsadsadsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsadsadsadqTdBvdBvdCidCidCidJodJodJodJodJodJodCidCidBvdBvdBvdBvdBvdqTdqTdBvdBvdCidCidCidCidHSdCidCidCidCidCidCidBvdBvdBvdBvdBvdBvdCidCidCidCidCidHSdCidCidBvdBvdBvdqTdqTdqTdqTdqTdBvdCidCidCidCidCidCidHSdCidCidCidIedHJdCidCidCidCidCidCidCidBvdIPdNAdNBdQtdNBdIPehRdNEeiaeaRdNHdIPehSdZUdZPdIPdCidCidCidCidCidCiaaaaaaaaeaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaedKFdNLeaNeaMdKFdKFdKFdKFdNNdKFdNOdKFdKFdNPdFrdFrdFrdFrdCidBvdqTdqTdsadsadsadqTdqTdsadsadsadsadsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsadsadqTdqTdBvdCidCidCidCidCidCidCidCidCidCidCidBvdqTdqTdqTdqTdqTdqTdqTdBvdBvdCidCidCidIadIcdIcdIcdIbdCidCidCidCidCidCidCidCidCidCidCidCidCidHSdCidBvdBvdqTdqTdqTdqTdqTdqTdqTdBvdBvdCidCidCidCidCidIadIcdIcdIcdIkdIldIcdIcdIcdIbdCidCidCidCidIPdNQdNRehTdNTdIPdwXdNVdNVeaUdNHdIPeeRefieeUdIPdCidCidCidCidCidCiaaeaaeaaeaaeaaeaaeaaedOadOadOadOadOaaaeaaaaaadKFdYoeaSdLadOddOedOfdNudNudOgdNudNvdKFdCidCidCidCidCidBvdBvdqTdqTdsadsadqTdqTdqTdsadsadsadsadsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsadsadsadqTdBvdCidCidCidCidCidCidCidCidCidBvdBvdBvdqTdqTdqTdqTdqTdqTdqTdqTdBvdBvdBvdCidCidCidCidCidIadIbdCidCidIedHJdCidCidIhdIcdIcdIcdIcdIcdIidCidBvdqTdqTdqTdqTdsadsadsadqTdqTdBvdBvdBvdCidCidCidCidCidCidCidHEdHGdCidCidCidHSdCidCidCidCidIPdIPdIPdIPdIPdIPdOhdOidOjeaVdNHdIPdNheeXdNhdIPdCidCidCidCidCidCiaaaaaaaaeaaaaaaaaaaaedOadOadOadOadOaaaeaaadKYdKHdLaeaYeaXdKFdKFdKFdKFdKFdKFdOpdOqdKFdCidCidCidCidCidBvdqTdqTdsadsadsadqTdqTdqTdqTdsadsadsadsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsadsadsadsadBvdBvdBvdBvdCidCidCidCidBvdBvdBvdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdBvdBvdBvdCidHUdCidCidIadIcdIcdIkdIldIcdIcdIidCidCidCidCidCidCidCidBvdqTdqTdqTdsadsadsadsadsadqTdqTdqTdBvdBvdBvdBvdCidCidCidCidCidCidCidCidCidIadIcdIcdIbdCidCidCidCidCidCidIPdIPdIPdIPdIPdIPdIPdFpdOrdOsdOtdCidCidCidCidCiaaaaaaaaaaaeaaaaaaaaaaaedOadOadOadOadOadOudLIdOvdOwebaebddQbebcebbebiebhebgebfdOEdOqdKFdCidCidCidCidBvdBvdqTdqTdsadsadqTdqTdqTdqTdsadsadsadsadsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa From f29cd211e6a04a61e5140693a1a3b082800c546d Mon Sep 17 00:00:00 2001 From: Atlantiscze Date: Wed, 12 Nov 2014 12:33:23 +0100 Subject: [PATCH 05/52] Implements better powernet warning system (as suggested by mwerezak) --- code/game/gamemodes/events/ninja_equipment.dm | 4 ++-- code/game/objects/items/devices/powersink.dm | 2 +- code/modules/power/powernet.dm | 11 +++++++---- code/modules/power/sensors/powernet_sensor.dm | 2 +- 4 files changed, 11 insertions(+), 8 deletions(-) diff --git a/code/game/gamemodes/events/ninja_equipment.dm b/code/game/gamemodes/events/ninja_equipment.dm index 7811611b725..f42d8ae370e 100644 --- a/code/game/gamemodes/events/ninja_equipment.dm +++ b/code/game/gamemodes/events/ninja_equipment.dm @@ -957,7 +957,7 @@ ________________________________________________________________________________ var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() spark_system.set_up(5, 0, A.loc) while(G.candrain&&A.cell.charge>0&&!maxcapacity) - A.terminal.powernet.newproblem = 1 + A.terminal.powernet.trigger_warning() drain = rand(G.mindrain,G.maxdrain) if(A.cell.charge 0) + problem = max(problem - 1, 0) if(nodes && nodes.len) // Added to fix a bad list bug -- TLE for(var/obj/machinery/power/terminal/term in nodes) diff --git a/code/modules/power/sensors/powernet_sensor.dm b/code/modules/power/sensors/powernet_sensor.dm index ba4544733f9..dd7a5104341 100644 --- a/code/modules/power/sensors/powernet_sensor.dm +++ b/code/modules/power/sensors/powernet_sensor.dm @@ -78,7 +78,7 @@ else textavail += " W" - if(powernet.problem || powernet.newproblem) + if(powernet.problem) out += "
WARNING: Abnormal grid activity detected!" out += "
TOTAL GRID LOAD: [total_load]" out += "
TOTAL AVAILABLE: [textavail]" From 835d04290c3e16b36d1f49bd348fd9fa2dd6494f Mon Sep 17 00:00:00 2001 From: Atlantiscze Date: Wed, 12 Nov 2014 14:54:56 +0100 Subject: [PATCH 06/52] Modifications to sensors code - More stuff now triggers powernet warnings: People getting shocked by machinery (primarily door, but can be anything else powered by APC), and grilles. Thanks to @mwerezak for suggestion. - Monitoring computer now has slightly different icon_state when it detects powernet warning. This is checked and updated every 5 MC ticks (ie, slightly delayed) - Fixes ocassional runtime in powernet_sensor.dm - Powersinks buffed a bit more. Drain rate changed from 0.6MW to 1MW. 1MW is full output of main engine SMES. - Powersinks also dissipate small amount of internal energy charge over time. (20kW) --- code/game/machinery/machinery.dm | 6 +++ code/game/objects/items/devices/powersink.dm | 4 +- code/game/objects/structures/grille.dm | 2 + code/modules/power/powernet.dm | 2 +- code/modules/power/sensors/powernet_sensor.dm | 27 ++++++----- .../power/sensors/sensor_monitoring.dm | 44 ++++++++++++++---- icons/obj/computer.dmi | Bin 73182 -> 73537 bytes 7 files changed, 64 insertions(+), 21 deletions(-) diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index 3f08862d9a1..27ad7cd2275 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -294,6 +294,12 @@ Class Procs: s.set_up(5, 1, src) s.start() if (electrocute_mob(user, get_area(src), src, 0.7)) + var/area/temp_area = get_area(src) + if(temp_area && temp_area.master) + var/obj/machinery/power/apc/temp_apc = temp_area.master.get_apc() + + if(temp_apc && temp_apc.terminal && temp_apc.terminal.powernet) + temp_apc.terminal.powernet.trigger_warning() return 1 else return 0 diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm index cdbb7788af8..91ba7bf6ba8 100644 --- a/code/game/objects/items/devices/powersink.dm +++ b/code/game/objects/items/devices/powersink.dm @@ -14,7 +14,8 @@ matter = list("metal" = 750,"waste" = 750) origin_tech = "powerstorage=3;syndicate=5" - var/drain_rate = 600000 // amount of power to drain per tick + var/drain_rate = 1000000 // amount of power to drain per tick + var/dissipation_rate = 20000 var/power_drained = 0 // has drained this much power var/max_power = 5e9 // maximum power that can be drained before exploding var/mode = 0 // 0 = off, 1=clamped (off), 2=operating @@ -91,6 +92,7 @@ processing_objects.Remove(src) process() + power_drained -= min(dissipation_rate, power_drained) if(attached) var/datum/powernet/PN = attached.get_powernet() if(PN) diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index e1f0804c0e9..e3f34691a9a 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -212,6 +212,8 @@ var/obj/structure/cable/C = T.get_cable_node() if(C) if(electrocute_mob(user, C, src)) + if(C.powernet) + C.powernet.trigger_warning() var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread s.set_up(3, 1, src) s.start() diff --git a/code/modules/power/powernet.dm b/code/modules/power/powernet.dm index 4bf1ab251cc..401cb41af77 100644 --- a/code/modules/power/powernet.dm +++ b/code/modules/power/powernet.dm @@ -12,7 +12,7 @@ var/perapc_excess = 0 var/netexcess = 0 // excess power on the powernet (typically avail-load) - var/problem = 0 // If either of these is set to 1 there is some sort of issue at the powernet. + var/problem = 0 // If this is not 0 there is some sort of issue in the powernet. Monitors will display warnings. /datum/powernet/New() powernets += src diff --git a/code/modules/power/sensors/powernet_sensor.dm b/code/modules/power/sensors/powernet_sensor.dm index dd7a5104341..43af5649fed 100644 --- a/code/modules/power/sensors/powernet_sensor.dm +++ b/code/modules/power/sensors/powernet_sensor.dm @@ -69,21 +69,26 @@ else total_load = "[round(total_load)] W" - out += "" + out += "
TOTAL GRID LOAD: [total_load]" - var/textavail = powernet.avail - if(textavail > 1000) - textavail = "[textavail / 1000]" - textavail += " kW" - else - textavail += " W" + var/textavail = powernet.avail + if(textavail > 1000) + textavail = "[textavail / 1000] kW" + else + textavail = "[textavail] W" + out += "
TOTAL AVAILABLE: [textavail]" - if(powernet.problem) - out += "
WARNING: Abnormal grid activity detected!" - out += "
TOTAL GRID LOAD: [total_load]" - out += "
TOTAL AVAILABLE: [textavail]" + if(powernet.problem) + out += "
WARNING: Abnormal grid activity detected!" return out +/obj/machinery/power/sensor/proc/check_grid_warning() + RefreshGrid() + if(powernet) + if(powernet.problem) + return 1 + return 0 + // Has to be here as we need it to be in Machines list. /obj/machinery/power/sensor/process() return 1 \ No newline at end of file diff --git a/code/modules/power/sensors/sensor_monitoring.dm b/code/modules/power/sensors/sensor_monitoring.dm index 9f4ce0bf292..632a428f690 100644 --- a/code/modules/power/sensors/sensor_monitoring.dm +++ b/code/modules/power/sensors/sensor_monitoring.dm @@ -15,10 +15,17 @@ anchored = 1.0 var/circuit = /obj/item/weapon/circuitboard/powermonitor var/list/grid_sensors = null + var/update_counter = 0 // Next icon update when this reaches 5 (ie every 5 ticks) use_power = 1 idle_power_usage = 300 active_power_usage = 300 + // Update icon every 5 ticks. +/obj/machinery/power/monitor/process() + update_counter++ + if(update_counter > 4) + update_icon() + /obj/machinery/power/monitor/New() ..() refresh_sensors() @@ -81,7 +88,7 @@ if(S.powernet) reported_nets += S.powernet if(duplicities) - t += "
Ignored [duplicities] duplicite readings" + t += "
Ignored [duplicities] duplicite readings" user << browse(t, "window=powcomp;size=600x900") onclose(user, "powcomp") @@ -99,17 +106,38 @@ refresh_sensors() return +/obj/machinery/power/monitor/update_icon() + update_counter = 0 // Reset the icon update counter. + if(stat & BROKEN) + icon_state = "powerb" + return + if(stat & NOPOWER) + icon_state = "power0" + return + if(check_warnings()) + icon_state = "power_alert" + return + + icon_state = "power" + +/obj/machinery/power/monitor/proc/check_warnings() + var/warn = 0 + if(grid_sensors) + for(var/obj/machinery/power/sensor/S in grid_sensors) + if(S.check_grid_warning()) + warn = 1 + return warn + /obj/machinery/power/monitor/power_change() ..() - if(stat & BROKEN) - icon_state = "broken" + + // Leaving this here to preserve that delayed shutdown effect when power goes out. + if (stat & NOPOWER) + spawn(rand(0, 15)) + update_icon() else - if (stat & NOPOWER) - spawn(rand(0, 15)) - src.icon_state = "c_unpowered" - else - icon_state = initial(icon_state) + update_icon() //copied from computer.dm diff --git a/icons/obj/computer.dmi b/icons/obj/computer.dmi index 27f23d622e08c77b07f22b3c403d869240d463fe..d14558c0c42027bc9e2ec06710a2e17ad4da0b5d 100644 GIT binary patch delta 51622 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 delta 51270 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 From ebbb9b36b5825b6b605d5bd439c9600172e6d4b2 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Fri, 14 Nov 2014 22:57:26 +1030 Subject: [PATCH 07/52] Moved everything to a module-based hardsuit system. Generalized all ninja power and gear code to work with new rig system. Added shurikens, weapon mount, more work on deployable items. Readded energy nets and energy blades. Grenade launcher/charge stuff, interface stuff. Renamed previously existing rigs to voidsuits, restructured rig and voidsuit files. Refactored the energy net and teleportation proc. Totally rewrote AI core/intellicard transfer procs. Added rig sprites by Mordeth221, added step by steap suit sealing/inability to interfere with suit sealing process. Updated map paths to use voidsuits. Added chemical dispenser functionality, added power sink, added atom/drain_power() proc for later use. Added rigsuit verbs, added voice changer. Renamed MASKINTERNALS to AIRTIGHT, added internals checks for airtight helmets. Added drain_power() procs to vulnerable machinery. Reimplemented data theft. Added suit maluses for losing your cell while wearing one. Transitioned the rig suits to a back-mounted item that also controls a chestpiece. Converted rig module to a storage item, convert ERT voidsuits to hardsuits. --- baystation12.dme | 27 +- code/WorkInProgress/computer3/component.dm | 45 +- code/_onclick/click.dm | 13 + code/_onclick/hud/screen_objects.dm | 11 +- code/datums/spell.dm | 4 +- code/game/gamemodes/calamity/calamity.dm | 4 - code/game/gamemodes/events/ninja_abilities.dm | 404 ----- code/game/gamemodes/events/ninja_equipment.dm | 1484 ----------------- code/game/gamemodes/events/space_ninja.dm | 538 +----- code/game/gamemodes/newobjective.dm | 10 +- code/game/gamemodes/ninja/ninja.dm | 4 +- code/game/gamemodes/nuclear/nuclear.dm | 22 - code/game/gamemodes/objective.dm | 33 +- code/game/gamemodes/wizard/spellbook.dm | 4 +- code/game/machinery/camera/tracking.dm | 17 +- code/game/machinery/computer/ai_core.dm | 238 +-- code/game/machinery/computer/aifixer.dm | 70 +- code/game/machinery/machinery.dm | 17 + code/game/machinery/suit_storage_unit.dm | 78 +- code/game/mecha/mecha.dm | 10 + code/game/objects/effects/effect_system.dm | 8 +- code/game/objects/items.dm | 6 + code/game/objects/items/devices/aicard.dm | 239 +-- code/game/objects/items/devices/modkit.dm | 4 +- .../objects/items/weapons/melee/energy.dm | 32 +- .../objects/items/weapons/storage/storage.dm | 28 +- .../game/objects/items/weapons/tanks/tanks.dm | 20 +- code/game/objects/items/weapons/weaponry.dm | 192 +++ .../crates_lockers/closets/malfunction.dm | 4 +- .../crates_lockers/closets/syndicate.dm | 10 +- code/modules/awaymissions/corpse.dm | 12 +- code/modules/clothing/gloves/ninja.dm | 114 -- code/modules/clothing/masks/breath.dm | 6 +- code/modules/clothing/masks/gasmask.dm | 18 +- code/modules/clothing/masks/voice.dm | 22 + code/modules/clothing/shoes/miscellaneous.dm | 15 - code/modules/clothing/spacesuits/ert.dm | 89 - code/modules/clothing/spacesuits/ninja.dm | 71 - code/modules/clothing/spacesuits/rig.dm | 477 ------ .../clothing/spacesuits/rig/modules/combat.dm | 214 +++ .../spacesuits/rig/modules/computer.dm | 395 +++++ .../spacesuits/rig/modules/modules.dm | 147 ++ .../clothing/spacesuits/rig/modules/ninja.dm | 166 ++ .../spacesuits/rig/modules/utility.dm | 173 ++ .../clothing/spacesuits/rig/modules/vision.dm | 80 + code/modules/clothing/spacesuits/rig/rig.dm | 572 +++++++ .../clothing/spacesuits/rig/rig_attackby.dm | 100 ++ .../clothing/spacesuits/rig/rig_pieces.dm | 64 + .../clothing/spacesuits/rig/rig_verbs.dm | 227 +++ .../clothing/spacesuits/rig/suits/ert.dm | 33 + .../clothing/spacesuits/rig/suits/hacker.dm | 17 + .../clothing/spacesuits/rig/suits/light.dm | 29 + .../clothing/spacesuits/rig/suits/ninja.dm | 25 + .../clothing/spacesuits/rig/suits/stealth.dm | 11 + .../modules/clothing/spacesuits/spacesuits.dm | 65 +- code/modules/clothing/spacesuits/syndi.dm | 1 - code/modules/clothing/spacesuits/void.dm | 14 - code/modules/clothing/spacesuits/void/merc.dm | 27 + .../clothing/spacesuits/void/station.dm | 105 ++ code/modules/clothing/spacesuits/void/void.dm | 50 + .../clothing/spacesuits/void/wizard.dm | 25 + code/modules/clothing/under/chameleon.dm | 2 +- code/modules/customitems/item_defines.dm | 4 +- code/modules/flufftext/Hallucination.dm | 2 +- .../carbon/human/alien/alien_facehugger.dm | 2 +- code/modules/mob/living/carbon/human/death.dm | 6 - code/modules/mob/living/carbon/human/human.dm | 17 +- code/modules/mob/living/carbon/human/life.dm | 41 +- code/modules/mob/living/carbon/human/say.dm | 22 +- .../mob/living/carbon/human/update_icons.dm | 6 + .../mob/living/carbon/human/whisper.dm | 42 +- code/modules/mob/living/carbon/monkey/life.dm | 2 +- code/modules/mob/living/living_powers.dm | 18 +- code/modules/mob/living/silicon/ai/ai.dm | 22 +- code/modules/mob/living/silicon/ai/death.dm | 3 +- code/modules/mob/living/silicon/pai/pai.dm | 11 +- .../modules/mob/living/silicon/robot/robot.dm | 18 + .../mob/living/simple_animal/corpse.dm | 4 +- code/modules/mob/mob.dm | 9 +- code/modules/power/apc.dm | 17 + code/modules/power/cable.dm | 21 + code/modules/power/cell.dm | 23 +- code/modules/power/smes.dm | 17 + code/modules/projectiles/guns/energy/laser.dm | 14 +- .../projectiles/guns/energy/nuclear.dm | 14 +- code/modules/projectiles/guns/energy/stun.dm | 4 +- code/modules/reagents/Chemistry-Reagents.dm | 15 + .../reagents/reagent_containers/glass.dm | 7 +- code/setup.dm | 9 +- icons/mob/feet.dmi | Bin 4340 -> 18128 bytes icons/mob/hands.dmi | Bin 7930 -> 13249 bytes icons/mob/head.dmi | Bin 125123 -> 133496 bytes icons/mob/rig_modules.dmi | Bin 0 -> 1438 bytes icons/mob/suit.dmi | Bin 252843 -> 264087 bytes icons/obj/clothing/gloves.dmi | Bin 10149 -> 13032 bytes icons/obj/clothing/hats.dmi | Bin 65069 -> 65568 bytes icons/obj/clothing/shoes.dmi | Bin 8374 -> 10966 bytes icons/obj/clothing/suits.dmi | Bin 91912 -> 94222 bytes icons/obj/rig_modules.dmi | Bin 0 -> 773 bytes icons/obj/weapons.dmi | Bin 24798 -> 24988 bytes maps/tgstation2.dmm | 62 +- nano/templates/hardsuit.tmpl | 180 ++ 102 files changed, 3725 insertions(+), 3829 deletions(-) delete mode 100644 code/game/gamemodes/events/ninja_abilities.dm delete mode 100644 code/game/gamemodes/events/ninja_equipment.dm delete mode 100644 code/modules/clothing/gloves/ninja.dm create mode 100644 code/modules/clothing/masks/voice.dm delete mode 100644 code/modules/clothing/spacesuits/ert.dm delete mode 100644 code/modules/clothing/spacesuits/ninja.dm delete mode 100644 code/modules/clothing/spacesuits/rig.dm create mode 100644 code/modules/clothing/spacesuits/rig/modules/combat.dm create mode 100644 code/modules/clothing/spacesuits/rig/modules/computer.dm create mode 100644 code/modules/clothing/spacesuits/rig/modules/modules.dm create mode 100644 code/modules/clothing/spacesuits/rig/modules/ninja.dm create mode 100644 code/modules/clothing/spacesuits/rig/modules/utility.dm create mode 100644 code/modules/clothing/spacesuits/rig/modules/vision.dm create mode 100644 code/modules/clothing/spacesuits/rig/rig.dm create mode 100644 code/modules/clothing/spacesuits/rig/rig_attackby.dm create mode 100644 code/modules/clothing/spacesuits/rig/rig_pieces.dm create mode 100644 code/modules/clothing/spacesuits/rig/rig_verbs.dm create mode 100644 code/modules/clothing/spacesuits/rig/suits/ert.dm create mode 100644 code/modules/clothing/spacesuits/rig/suits/hacker.dm create mode 100644 code/modules/clothing/spacesuits/rig/suits/light.dm create mode 100644 code/modules/clothing/spacesuits/rig/suits/ninja.dm create mode 100644 code/modules/clothing/spacesuits/rig/suits/stealth.dm delete mode 100644 code/modules/clothing/spacesuits/void.dm create mode 100644 code/modules/clothing/spacesuits/void/merc.dm create mode 100644 code/modules/clothing/spacesuits/void/station.dm create mode 100644 code/modules/clothing/spacesuits/void/void.dm create mode 100644 code/modules/clothing/spacesuits/void/wizard.dm create mode 100644 icons/mob/rig_modules.dmi create mode 100644 icons/obj/rig_modules.dmi create mode 100644 nano/templates/hardsuit.tmpl diff --git a/baystation12.dme b/baystation12.dme index d13c5536497..979d9cbbcca 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -234,8 +234,6 @@ #include "code\game\gamemodes\events\clang.dm" #include "code\game\gamemodes\events\dust.dm" #include "code\game\gamemodes\events\miniblob.dm" -#include "code\game\gamemodes\events\ninja_abilities.dm" -#include "code\game\gamemodes\events\ninja_equipment.dm" #include "code\game\gamemodes\events\power_failure.dm" #include "code\game\gamemodes\events\space_ninja.dm" #include "code\game\gamemodes\events\spacevines.dm" @@ -776,7 +774,6 @@ #include "code\modules\clothing\gloves\boxing.dm" #include "code\modules\clothing\gloves\color.dm" #include "code\modules\clothing\gloves\miscellaneous.dm" -#include "code\modules\clothing\gloves\ninja.dm" #include "code\modules\clothing\head\collectable.dm" #include "code\modules\clothing\head\hardhat.dm" #include "code\modules\clothing\head\helmet.dm" @@ -788,19 +785,35 @@ #include "code\modules\clothing\masks\breath.dm" #include "code\modules\clothing\masks\gasmask.dm" #include "code\modules\clothing\masks\miscellaneous.dm" +#include "code\modules\clothing\masks\voice.dm" #include "code\modules\clothing\shoes\colour.dm" #include "code\modules\clothing\shoes\magboots.dm" #include "code\modules\clothing\shoes\miscellaneous.dm" #include "code\modules\clothing\spacesuits\alien.dm" #include "code\modules\clothing\spacesuits\breaches.dm" #include "code\modules\clothing\spacesuits\captain.dm" -#include "code\modules\clothing\spacesuits\ert.dm" #include "code\modules\clothing\spacesuits\miscellaneous.dm" -#include "code\modules\clothing\spacesuits\ninja.dm" -#include "code\modules\clothing\spacesuits\rig.dm" #include "code\modules\clothing\spacesuits\spacesuits.dm" #include "code\modules\clothing\spacesuits\syndi.dm" -#include "code\modules\clothing\spacesuits\void.dm" +#include "code\modules\clothing\spacesuits\rig\rig.dm" +#include "code\modules\clothing\spacesuits\rig\rig_attackby.dm" +#include "code\modules\clothing\spacesuits\rig\rig_pieces.dm" +#include "code\modules\clothing\spacesuits\rig\rig_verbs.dm" +#include "code\modules\clothing\spacesuits\rig\modules\combat.dm" +#include "code\modules\clothing\spacesuits\rig\modules\computer.dm" +#include "code\modules\clothing\spacesuits\rig\modules\modules.dm" +#include "code\modules\clothing\spacesuits\rig\modules\ninja.dm" +#include "code\modules\clothing\spacesuits\rig\modules\utility.dm" +#include "code\modules\clothing\spacesuits\rig\modules\vision.dm" +#include "code\modules\clothing\spacesuits\rig\suits\ert.dm" +#include "code\modules\clothing\spacesuits\rig\suits\hacker.dm" +#include "code\modules\clothing\spacesuits\rig\suits\light.dm" +#include "code\modules\clothing\spacesuits\rig\suits\ninja.dm" +#include "code\modules\clothing\spacesuits\rig\suits\stealth.dm" +#include "code\modules\clothing\spacesuits\void\merc.dm" +#include "code\modules\clothing\spacesuits\void\station.dm" +#include "code\modules\clothing\spacesuits\void\void.dm" +#include "code\modules\clothing\spacesuits\void\wizard.dm" #include "code\modules\clothing\suits\alien.dm" #include "code\modules\clothing\suits\armor.dm" #include "code\modules\clothing\suits\bio.dm" diff --git a/code/WorkInProgress/computer3/component.dm b/code/WorkInProgress/computer3/component.dm index 501bbc973eb..18cf2de1c76 100644 --- a/code/WorkInProgress/computer3/component.dm +++ b/code/WorkInProgress/computer3/component.dm @@ -50,20 +50,25 @@ var/mob/living/silicon/ai/occupant = null var/busy = 0 - // Ninja gloves check - attack_hand(mob/user as mob) - if(ishuman(user) && istype(user:gloves, /obj/item/clothing/gloves/space_ninja) && user:gloves:candrain && !user:gloves:draining) - if(user:wear_suit:s_control) - user:wear_suit.transfer_ai("AIFIXER","NINJASUIT",src,user) - else - user << "\red ERROR: \black Remote access channel disabled." - return - ..() - attackby(obj/I as obj,mob/user as mob) if(computer && !computer.stat) + if(istype(I, /obj/item/device/aicard)) - I:transfer_ai("AIFIXER","AICARD",src,user) + + var/obj/item/device/aicard/card = I + var/mob/living/silicon/ai/comp_ai = locate() in src + var/mob/living/silicon/ai/card_ai = locate() in card + + if(istype(comp_ai)) + if(busy) + user << "\red ERROR: \black Reconstruction in progress." + return + card.grab_ai(comp_ai, user) + if(!(locate(/mob/living/silicon/ai) in src)) occupant = null + else if(istype(card_ai)) + load_ai(card_ai,card,user) + occupant = locate(/mob/living/silicon/ai) in src + if(computer.program) computer.program.update_icon() computer.update_icon() @@ -71,6 +76,24 @@ ..() return +/obj/item/part/computer/ai_holder/proc/load_ai(var/mob/living/silicon/ai/transfer, var/obj/item/device/aicard/card, var/mob/user) + + if(!transfer) + return + + // Transfer over the AI. + transfer << "You have been uploaded to a stationary terminal. Sadly, there is no remote access from here." + user << "\blue Transfer successful: \black [transfer.name] ([rand(1000,9999)].exe) installed and executed successfully. Local copy has been removed." + + transfer.loc = src + transfer.cancel_camera() + transfer.control_disabled = 1 + occupant = transfer + + if(card) + card.clear() + + /* ID computer cardslot - reading and writing slots */ diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index 586b2622593..8395500ef74 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -208,9 +208,22 @@ */ /mob/proc/MiddleClickOn(var/atom/A) return + /mob/living/carbon/MiddleClickOn(var/atom/A) swap_hand() +/mob/living/carbon/human/MiddleClickOn(var/atom/A) + + if(back) + var/obj/item/weapon/storage/rig/rig = back + if(istype(rig) && rig.selected_module) + if(world.time <= next_move) return + next_move = world.time + 8 + rig.selected_module.engage(A) + return + + swap_hand() + // In case of use break glass /* /atom/proc/MiddleClick(var/mob/M as mob) diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index 8a10310b3d4..afa5d9b1412 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -267,8 +267,15 @@ if(C.internals) C.internals.icon_state = "internal0" else - if(!istype(C.wear_mask, /obj/item/clothing/mask)) - C << "You are not wearing a mask." + + var/no_mask + if(!(C.wear_mask && C.wear_mask.flags & AIRTIGHT)) + var/mob/living/carbon/human/H = C + if(!(H.head && H.head.flags & AIRTIGHT)) + C << "You are not wearing a mask." + no_mask = 1 + + if(no_mask) return 1 else var/list/nicename = null diff --git a/code/datums/spell.dm b/code/datums/spell.dm index 346ba7ce299..c7c12b097b2 100644 --- a/code/datums/spell.dm +++ b/code/datums/spell.dm @@ -73,13 +73,13 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin if(!istype(usr, /mob/living/carbon/human)) usr << "You aren't a human, Why are you trying to cast a human spell, silly non-human? Casting human spells is for humans." return 0 - if(!istype(usr:wear_suit, /obj/item/clothing/suit/wizrobe) && !istype(user:wear_suit, /obj/item/clothing/suit/space/rig/wizard)) + if(!istype(usr:wear_suit, /obj/item/clothing/suit/wizrobe) && !istype(user:wear_suit, /obj/item/clothing/suit/space/void/wizard)) usr << "I don't feel strong enough without my robe." return 0 if(!istype(usr:shoes, /obj/item/clothing/shoes/sandal)) usr << "I don't feel strong enough without my sandals." return 0 - if(!istype(usr:head, /obj/item/clothing/head/wizard) && !istype(user:head, /obj/item/clothing/head/helmet/space/rig/wizard)) + if(!istype(usr:head, /obj/item/clothing/head/wizard) && !istype(user:head, /obj/item/clothing/head/helmet/space/void/wizard)) usr << "I don't feel strong enough without my hat." return 0 diff --git a/code/game/gamemodes/calamity/calamity.dm b/code/game/gamemodes/calamity/calamity.dm index 6ddd3d70a59..0d8b46b318e 100644 --- a/code/game/gamemodes/calamity/calamity.dm +++ b/code/game/gamemodes/calamity/calamity.dm @@ -356,7 +356,6 @@ 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() @@ -369,9 +368,6 @@ 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) diff --git a/code/game/gamemodes/events/ninja_abilities.dm b/code/game/gamemodes/events/ninja_abilities.dm deleted file mode 100644 index f80a056428f..00000000000 --- a/code/game/gamemodes/events/ninja_abilities.dm +++ /dev/null @@ -1,404 +0,0 @@ -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -+++++++++++++++++++++++++++++++++// //++++++++++++++++++++++++++++++++++ -==================================SPACE NINJA ABILITIES==================================== -___________________________________________________________________________________________ -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -*/ - -//=======//SAFETY CHECK//=======// -/* -X is optional, tells the proc to check for specific stuff. C is also optional. -All the procs here assume that the character is wearing the ninja suit if they are using the procs. -They should, as I have made every effort for that to be the case. -In the case that they are not, I imagine the game will run-time error like crazy. -s_cooldown ticks off each second based on the suit recharge proc, in seconds. Default of 1 seconds. Some abilities have no cool down. -*/ -/obj/item/clothing/suit/space/space_ninja/proc/ninjacost(C = 0, X = 0) - var/mob/living/carbon/human/U = affecting - if( (U.stat||U.incorporeal_move)&&X!=3 )//Will not return if user is using an adrenaline booster since you can use them when stat==1. - U << "\red You must be conscious and solid to do this."//It's not a problem of stat==2 since the ninja will explode anyway if they die. - return 1 - else if(C&&cell.charge < C*10) - U << "\red Not enough energy." - return 1 - switch(X) - if(1) - cancel_stealth()//Get rid of it. - if(2) - if(s_bombs<=0) - U << "\red There are no more smoke bombs remaining." - return 1 - if(3) - if(a_boost<=0) - U << "\red You do not have any more adrenaline boosters." - return 1 - if(s_coold) - return s_coold - cell.use(C*10) - return 0 - -//=======//TELEPORT GRAB CHECK//=======// -/obj/item/clothing/suit/space/space_ninja/proc/handle_teleport_grab(turf/T, mob/living/U) - if(istype(U.get_active_hand(),/obj/item/weapon/grab))//Handles grabbed persons. - var/obj/item/weapon/grab/G = U.get_active_hand() - G.affecting.loc = locate(T.x+rand(-1,1),T.y+rand(-1,1),T.z)//variation of position. - if(istype(U.get_inactive_hand(),/obj/item/weapon/grab)) - var/obj/item/weapon/grab/G = U.get_inactive_hand() - G.affecting.loc = locate(T.x+rand(-1,1),T.y+rand(-1,1),T.z)//variation of position. - return - -//=======//SMOKE//=======// -/*Summons smoke in radius of user. -Not sure why this would be useful (it's not) but whatever. Ninjas need their smoke bombs.*/ -/obj/item/clothing/suit/space/space_ninja/proc/ninjasmoke() - set name = "Smoke Bomb" - set desc = "Blind your enemies momentarily with a well-placed smoke bomb." - set category = "Ninja Ability" - set popup_menu = 0//Will not see it when right clicking. - - if(!ninjacost(,2)) - var/mob/living/carbon/human/U = affecting - U << "\blue There are [s_bombs] smoke bombs remaining." - var/datum/effect/effect/system/smoke_spread/bad/smoke = new /datum/effect/effect/system/smoke_spread/bad() - smoke.set_up(10, 0, U.loc) - smoke.start() - playsound(U.loc, 'sound/effects/bamf.ogg', 50, 2) - s_bombs-- - s_coold = 1 - return - - -//=======//PHASE SHIFT//=======// -//Right click to teleport somewhere, almost exactly like admin jump to turf. -/obj/item/clothing/suit/space/space_ninja/proc/ninjashift(turf/T in oview()) - set name = "Phase Shift (400E)" - set desc = "Utilizes the internal VOID-shift device to rapidly transit to a destination in view." - set category = null//So it does not show up on the panel but can still be right-clicked. - set src = usr.contents//Fixes verbs not attaching properly for objects. Praise the DM reference guide! - - var/C = 40 - if(!ninjacost(C,1)) - var/mob/living/carbon/human/U = affecting - var/turf/mobloc = get_turf(U.loc)//To make sure that certain things work properly below. - if((!T.density)&&istype(mobloc, /turf)) - spawn(0) - playsound(U.loc, 'sound/effects/sparks4.ogg', 50, 1) - anim(mobloc,src,'icons/mob/mob.dmi',,"phaseout",,U.dir) - - handle_teleport_grab(T, U) - U.loc = T - s_coold = 1 - - spawn(0) - spark_system.start() - playsound(U.loc, 'sound/effects/phasein.ogg', 25, 1) - playsound(U.loc, 'sound/effects/sparks2.ogg', 50, 1) - anim(U.loc,U,'icons/mob/mob.dmi',,"phasein",,U.dir) - else - U << "\red You cannot teleport into solid walls or from solid matter." - return - -//=======//PHASE JAUNT//=======// -/obj/item/clothing/suit/space/space_ninja/proc/ninjajaunt() - set name = "Phase Jaunt (250E)" - set desc = "Utilizes the internal VOID-shift device to rapidly transit to a random destination straight ahead." - set category = "Ninja Ability" - - straight_phase() - -//=======//EM PULSE//=======// -//Disables nearby tech equipment. -/obj/item/clothing/suit/space/space_ninja/proc/ninjapulse() - set name = "EM Burst (2,000E)" - set desc = "Disable any nearby technology with a electro-magnetic pulse." - set category = "Ninja Ability" - set popup_menu = 0 - - var/C = 200 - if(!ninjacost(C,0)) // EMP's now cost 1,000Energy about 30% - var/mob/living/carbon/human/U = affecting - playsound(U.loc, 'sound/effects/EMPulse.ogg', 60, 2) - empulse(U, 2, 3) //Procs sure are nice. Slightly weaker than wizard's disable tch. - s_coold = 2 - return - -//=======//ENERGY BLADE//=======// -//Summons a blade of energy in active hand. -/obj/item/clothing/suit/space/space_ninja/proc/ninjablade() - set name = "Energy Blade (500E)" - set desc = "Create a focused beam of energy in your active hand." - set category = "Ninja Ability" - set popup_menu = 0 - - var/C = 50 - if(!ninjacost(C,0)) //Same spawn cost but higher upkeep cost - var/mob/living/carbon/human/U = affecting - if(!kamikaze) - if(!U.get_active_hand()&&!istype(U.get_inactive_hand(), /obj/item/weapon/melee/energy/blade)) - var/obj/item/weapon/melee/energy/blade/W = new() - spark_system.start() - playsound(U.loc, "sparks", 50, 1) - U.put_in_hands(W) - else - U << "\red You can only summon one blade. Try dropping an item first." - else//Else you can run around with TWO energy blades. I don't know why you'd want to but cool factor remains. - if(!U.get_active_hand()) - var/obj/item/weapon/melee/energy/blade/W = new() - U.put_in_hands(W) - if(!U.get_inactive_hand()) - var/obj/item/weapon/melee/energy/blade/W = new() - U.put_in_inactive_hand(W) - spark_system.start() - playsound(U.loc, "sparks", 50, 1) - s_coold = 1 - return - -//=======//NINJA STARS//=======// -/*Shoots ninja stars at random people. -This could be a lot better but I'm too tired atm.*/ -/obj/item/clothing/suit/space/space_ninja/proc/ninjastar() - set name = "Energy Star (800E)" - set desc = "Launches an energy star at a random living target." - set category = "Ninja Ability" - set popup_menu = 0 - - var/C = 80 - if(!ninjacost(C,1)) - var/mob/living/carbon/human/U = affecting - var/targets[] = list()//So yo can shoot while yo throw dawg - for(var/mob/living/M in oview(loc)) - if(M.stat) continue//Doesn't target corpses or paralyzed persons. - targets.Add(M) - if(targets.len) - var/mob/living/target=pick(targets)//The point here is to pick a random, living mob in oview to shoot stuff at. - - var/turf/curloc = U.loc - var/atom/targloc = get_turf(target) - if (!targloc || !istype(targloc, /turf) || !curloc) - return - if (targloc == curloc) - return - var/obj/item/projectile/energy/dart/A = new /obj/item/projectile/energy/dart(U.loc) - A.current = curloc - A.yo = targloc.y - curloc.y - A.xo = targloc.x - curloc.x - A.process() - else - U << "\red There are no targets in view." - return - -//=======//ENERGY NET//=======// -/*Allows the ninja to capture people, I guess. -Must right click on a mob to activate.*/ -/obj/item/clothing/suit/space/space_ninja/proc/ninjanet(mob/living/carbon/M in oview())//Only living carbon mobs. - set name = "Energy Net (7,000E)" - set desc = "Captures a fallen opponent in a net of energy. Will teleport them to a holding facility after 30 seconds." - set category = null - set src = usr.contents - - var/C = 700 - if(!ninjacost(C,0)&&iscarbon(M)) - var/mob/living/carbon/human/U = affecting - if(M.client)//Monkeys without a client can still step_to() and bypass the net. Also, netting inactive people is lame. - //if(M)//DEBUG - if(!locate(/obj/effect/energy_net) in M.loc)//Check if they are already being affected by an energy net. - for(var/turf/T in getline(U.loc, M.loc)) - if(T.density)//Don't want them shooting nets through walls. It's kind of cheesy. - U << "You may not use an energy net through solid obstacles!" - return - spawn(0) - U.Beam(M,"n_beam",,15) - M.captured = 1 - U.say("Get over here!") - var/obj/effect/energy_net/E = new /obj/effect/energy_net(M.loc) - E.layer = M.layer+1//To have it appear one layer above the mob. - for(var/mob/O in viewers(U, 3)) - O.show_message(text("\red [] caught [] with an energy net!", U, M), 1) - E.affecting = M - E.master = U - spawn(0)//Parallel processing. - E.process(M) - else - U << "They are already trapped inside an energy net." - else - U << "They will bring no honor to your Clan!" - return - -//=======//ADRENALINE BOOST//=======// -/*Wakes the user so they are able to do their thing. Also injects a decent dose of radium. -Movement impairing would indicate drugs and the like.*/ -/obj/item/clothing/suit/space/space_ninja/proc/ninjaboost() - set name = "Adrenaline Boost" - set desc = "Inject a secret chemical that will counteract all movement-impairing effect." - set category = "Ninja Ability" - set popup_menu = 0 - - if(!ninjacost(,3))//Have to make sure stat is not counted for this ability. - var/mob/living/carbon/human/U = affecting - //Wouldn't need to track adrenaline boosters if there was a miracle injection to get rid of paralysis and the like instantly. - //For now, adrenaline boosters ARE the miracle injection. Well, radium, really. - U.SetParalysis(0) - U.SetWeakened(0) - /* - Due to lag, it was possible to adrenaline boost but remain helpless while life.dm resets player stat. - This lead to me and others spamming adrenaline boosters because they failed to kick in on time. - It's technically possible to come back from crit with this but it is very temporary. - Life.dm will kick the player back into unconsciosness the next process loop. - */ - U.stat = 0//At least now you should be able to teleport away or shoot ninja stars. - spawn(30)//Slight delay so the enemy does not immedietly know the ability was used. Due to lag, this often came before waking up. - U.say(pick("A CORNERED FOX IS MORE DANGEROUS THAN A JACKAL!","HURT ME MOOORRREEE!","IMPRESSIVE!")) - spawn(70) - reagents.reaction(U, 2) - reagents.trans_id_to(U, "radium", a_transfer) - U << "\red You are beginning to feel the after-effect of the injection." - a_boost-- - s_coold = 3 - return - -/* -=================================================================================== -<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -=================================================================================== -Or otherwise known as anime mode. Which also happens to be ridiculously powerful. -*/ - -//=======//NINJA MOVEMENT//=======// -//Also makes you move like you're on crack. -/obj/item/clothing/suit/space/space_ninja/proc/ninjawalk() - set name = "Shadow Walk" - set desc = "Combines the VOID-shift and CLOAK-tech devices to freely move between solid matter. Toggle on or off." - set category = "Ninja Ability" - set popup_menu = 0 - - var/mob/living/carbon/human/U = affecting - if(!U.incorporeal_move) - U.incorporeal_move = 2 - U << "\blue You will now phase through solid matter." - else - U.incorporeal_move = 0 - U << "\blue You will no-longer phase through solid matter." - return - -//=======//5 TILE TELEPORT/GIB//=======// -//Allows to gib up to five squares in a straight line. Seriously. -/obj/item/clothing/suit/space/space_ninja/proc/ninjaslayer() - set name = "Phase Slayer" - set desc = "Utilizes the internal VOID-shift device to mutilate creatures in a straight line." - set category = "Ninja Ability" - set popup_menu = 0 - - if(straight_phase(1, 5, 5, 0)) - var/mob/living/carbon/human/U = affecting - U.say("Ai Satsugai!") - -//=======//TELEPORT BEHIND MOB//=======// -/*Appear behind a randomly chosen mob while a few decoy teleports appear. -This is so anime it hurts. But that's the point.*/ -/obj/item/clothing/suit/space/space_ninja/proc/ninjamirage() - set name = "Spider Mirage" - set desc = "Utilizes the internal VOID-shift device to create decoys and teleport behind a random target." - set category = "Ninja Ability" - set popup_menu = 0 - - if(!ninjacost())//Simply checks for stat. - var/mob/living/carbon/human/U = affecting - var/targets[] - targets = new() - for(var/mob/living/M in oview(6)) - if(M.stat) continue//Doesn't target corpses or paralyzed people. - targets.Add(M) - if(targets.len) - var/mob/living/target=pick(targets) - var/locx - var/locy - var/turf/mobloc = get_turf(target.loc) - var/safety = 0 - switch(target.dir) - if(NORTH) - locx = mobloc.x - locy = (mobloc.y-1) - if(locy<1) - safety = 1 - if(SOUTH) - locx = mobloc.x - locy = (mobloc.y+1) - if(locy>world.maxy) - safety = 1 - if(EAST) - locy = mobloc.y - locx = (mobloc.x-1) - if(locx<1) - safety = 1 - if(WEST) - locy = mobloc.y - locx = (mobloc.x+1) - if(locx>world.maxx) - safety = 1 - else safety=1 - if(!safety&&istype(mobloc, /turf)) - U.say("Kumo no Shinkiro!") - var/turf/picked = locate(locx,locy,mobloc.z) - spawn(0) - playsound(U.loc, "sparks", 50, 1) - anim(mobloc,U,'icons/mob/mob.dmi',,"phaseout",,U.dir) - - spawn(0) - var/limit = 4 - for(var/turf/T in oview(5)) - if(prob(20)) - spawn(0) - anim(T,U,'icons/mob/mob.dmi',,"phasein",,U.dir) - limit-- - if(limit<=0) break - - handle_teleport_grab(picked, U) - U.loc = picked - U.dir = target.dir - - spawn(0) - spark_system.start() - playsound(U.loc, 'sound/effects/phasein.ogg', 25, 1) - playsound(U.loc, "sparks", 50, 1) - anim(U.loc,U,'icons/mob/mob.dmi',,"phasein",,U.dir) - s_coold = 1 - else - U << "\red The VOID-shift device is malfunctioning, teleportation failed." - else - U << "\red There are no targets in view." - return - - -/obj/item/clothing/suit/space/space_ninja/proc/straight_phase(var/slay = 0, var/min_range=5, var/max_range = 9, var/cost = 25) - if(!ninjacost(cost,1)) - var/mob/living/carbon/human/U = affecting - var/turf/destination = get_teleport_loc(U.loc,U, rand(min_range, max_range)) - var/turf/mobloc = get_turf(U.loc)//To make sure that certain things work properly below. - if(destination && istype(mobloc, /turf)) - spawn(0) - playsound(U.loc, "sparks", 50, 1) - anim(mobloc,U,'icons/mob/mob.dmi',,"phaseout",,U.dir) - - if(slay) - spawn(0) - for(var/turf/T in getline(mobloc, destination)) - spawn(0) - T.kill_creatures(U) - if(T==mobloc||T==destination) continue - spawn(0) - anim(T,U,'icons/mob/mob.dmi',,"phasein",,U.dir) - - handle_teleport_grab(destination, U) - U.loc = destination - s_coold = slay - - spawn(0) - spark_system.start() - playsound(U.loc, 'sound/effects/phasein.ogg', 25, 1) - playsound(U.loc, "sparks", 50, 1) - anim(U.loc,U,'icons/mob/mob.dmi',,"phasein",,U.dir) - return 1 - else - U << "\red The VOID-shift device is malfunctioning, teleportation failed." - return 0 diff --git a/code/game/gamemodes/events/ninja_equipment.dm b/code/game/gamemodes/events/ninja_equipment.dm deleted file mode 100644 index 99b127ec1be..00000000000 --- a/code/game/gamemodes/events/ninja_equipment.dm +++ /dev/null @@ -1,1484 +0,0 @@ -//For the love of god,space out your code! This is a nightmare to read. - -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 - -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -+++++++++++++++++++++++++++++++++// //++++++++++++++++++++++++++++++++++ -===================================SPACE NINJA EQUIPMENT=================================== -___________________________________________________________________________________________ -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -*/ - -/* -=================================================================================== -<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -=================================================================================== -*/ - -//=======//NEW AND DEL//=======// - -/obj/item/clothing/suit/space/space_ninja/New() - ..() - verbs += /obj/item/clothing/suit/space/space_ninja/proc/init//suit initialize verb - verbs += /obj/item/clothing/suit/space/space_ninja/proc/ai_instruction//for AIs - verbs += /obj/item/clothing/suit/space/space_ninja/proc/ai_holo - //verbs += /obj/item/clothing/suit/space/space_ninja/proc/display_verb_procs//DEBUG. Doesn't work. - spark_system = new()//spark initialize - spark_system.set_up(5, 0, src) - spark_system.attach(src) - stored_research = new()//Stolen research initialize. - for(var/T in typesof(/datum/tech) - /datum/tech)//Store up on research. - stored_research += new T(src) - var/reagent_amount//reagent initialize - for(var/reagent_id in reagent_list) - reagent_amount += reagent_id == "radium" ? r_maxamount+(a_boost*a_transfer) : r_maxamount//AI can inject radium directly. - reagents = new(reagent_amount) - reagents.my_atom = src - for(var/reagent_id in reagent_list) - reagent_id == "radium" ? reagents.add_reagent(reagent_id, r_maxamount+(a_boost*a_transfer)) : reagents.add_reagent(reagent_id, r_maxamount)//It will take into account radium used for adrenaline boosting. - cell = new/obj/item/weapon/cell/high//The suit should *always* have a battery because so many things rely on it. - cell.charge = 9000//Starting charge should not be higher than maximum charge. It leads to problems with recharging. - -/obj/item/clothing/suit/space/space_ninja/Del() - if(affecting)//To make sure the window is closed. - affecting << browse(null, "window=hack spideros") - if(AI)//If there are AIs present when the ninja kicks the bucket. - killai() - if(hologram)//If there is a hologram - del(hologram.i_attached)//Delete it and the attached image. - del(hologram) - ..() - return - -//Simply deletes all the attachments and self, killing all related procs. -/obj/item/clothing/suit/space/space_ninja/proc/terminate() - del(n_hood) - del(n_gloves) - del(n_shoes) - del(src) - -/obj/item/clothing/suit/space/space_ninja/proc/killai(mob/living/silicon/ai/A = AI) - if(A.client) - A << "\red Self-erase protocol dete-- *bzzzzz*" - A << browse(null, "window=hack spideros") - AI = null - A.death(1)//Kill, deleting mob. - del(A) - return - -//=======//SUIT VERBS//=======// -//Verbs link to procs because verb-like procs have a bug which prevents their use if the arguments are not readily referenced. - -/obj/item/clothing/suit/space/space_ninja/proc/init() - set name = "Initialize Suit" - set desc = "Initializes the suit for field operation." - set category = "Ninja Equip" - - ninitialize() - return - -/obj/item/clothing/suit/space/space_ninja/proc/deinit() - set name = "De-Initialize Suit" - set desc = "Begins procedure to remove the suit." - set category = "Ninja Equip" - - if(s_control&&!s_busy) - deinitialize() - else - affecting << "\red The function did not trigger!" - return - -/obj/item/clothing/suit/space/space_ninja/proc/spideros() - set name = "Display SpiderOS" - set desc = "Utilize built-in computer system." - set category = "Ninja Equip" - - if(s_control&&!s_busy&&!kamikaze) - display_spideros() - else - affecting << "\red The interface is locked!" - return - -/obj/item/clothing/suit/space/space_ninja/proc/stealth() - set name = "Toggle Stealth" - set desc = "Utilize the internal CLOAK-tech device to activate or deactivate stealth-camo." - set category = "Ninja Equip" - - if(s_control&&!s_busy) - toggle_stealth() - else - affecting << "\red Stealth does not appear to work!" - return - -//=======//PROCESS PROCS//=======// - -/obj/item/clothing/suit/space/space_ninja/proc/ntick(mob/living/carbon/human/U = affecting) - set background = 1 - - //Runs in the background while the suit is initialized. - spawn while(cell.charge>=0) - - //Let's check for some safeties. - if(s_initialized&&!affecting) terminate()//Kills the suit and attached objects. - if(!s_initialized) return//When turned off the proc stops. - if(AI&&AI.stat==2)//If there is an AI and it's ded. Shouldn't happen without purging, could happen. - if(!s_control) - ai_return_control()//Return control to ninja if the AI was previously in control. - killai()//Delete AI. - - //Now let's do the normal processing. - if(s_coold) s_coold--//Checks for ability s_cooldown first. - var/A = s_cost//s_cost is the default energy cost each ntick, usually 5. - if(!kamikaze) - if(blade_check(U))//If there is a blade held in hand. - A += s_acost - if(s_active)//If stealth is active. - A += s_acost - else - if(prob(s_delay))//Suit delay is used as probability. May change later. - U.adjustBruteLoss(k_damage)//Default damage done, usually 1. - A = k_cost//kamikaze cost. - cell.charge-=A - if(cell.charge<=0) - if(kamikaze) - U.say("I DIE TO LIVE AGAIN!") - U << browse(null, "window=spideros")//Just in case. - U.death() - return - cell.charge=0 - cancel_stealth() - sleep(10)//Checks every second. - -//=======//INITIALIZE//=======// - -/obj/item/clothing/suit/space/space_ninja/proc/ninitialize(delay = s_delay, mob/living/carbon/human/U = loc) - if(U.mind && U.mind.assigned_role=="MODE" && !s_initialized && !s_busy)//Shouldn't be busy... but anything is possible I guess. - s_busy = 1 - for(var/i,i<7,i++) - switch(i) - if(0) - U << "\blue Now initializing..." - if(1) - if(!lock_suit(U))//To lock the suit onto wearer. - break - U << "\blue Securing external locking mechanism...\nNeural-net established." - if(2) - U << "\blue Extending neural-net interface...\nNow monitoring brain wave pattern..." - if(3) - if(U.stat==2||U.health<=0) - U << "\red FĆAL �Rr�R: 344--93#�&&21 BR��N |/|/aV� PATT$RN RED\nA-A-aB�rT�NG..." - unlock_suit() - break - lock_suit(U,1)//Check for icons. - U.regenerate_icons() - U << "\blue Linking neural-net interface...\nPattern \green GREEN\blue, continuing operation." - if(4) - U << "\blue VOID-shift device status: ONLINE.\nCLOAK-tech device status: ONLINE." - if(5) - U << "\blue Primary system status: ONLINE.\nBackup system status: ONLINE.\nCurrent energy capacity: [cell.charge]." - if(6) - U << "\blue All systems operational. Welcome to SpiderOS, [U.real_name]." - grant_ninja_verbs() - grant_equip_verbs() - ntick() - sleep(delay) - s_busy = 0 - else - if(!U.mind||U.mind.assigned_role!="MODE")//Your run of the mill persons shouldn't know what it is. Or how to turn it on. - U << "You do not understand how this suit functions. Where the heck did it even come from?" - else if(s_initialized) - U << "\red The suit is already functioning. \black Please report this bug." - else - U << "\red ERROR: \black You cannot use this function at this time." - return - -//=======//DEINITIALIZE//=======// - -/obj/item/clothing/suit/space/space_ninja/proc/deinitialize(delay = s_delay) - if(affecting==loc&&!s_busy) - var/mob/living/carbon/human/U = affecting - if(!s_initialized) - U << "\red The suit is not initialized. \black Please report this bug." - return - if(alert("Are you certain you wish to remove the suit? This will take time and remove all abilities.",,"Yes","No")=="No") - return - if(s_busy||flush) - U << "\red ERROR: \black You cannot use this function at this time." - return - s_busy = 1 - for(var/i = 0,i<7,i++) - switch(i) - if(0) - U << "\blue Now de-initializing..." - remove_kamikaze(U)//Shutdowns kamikaze. - spideros = 0//Spideros resets. - if(1) - U << "\blue Logging off, [U:real_name]. Shutting down SpiderOS." - remove_ninja_verbs() - if(2) - U << "\blue Primary system status: OFFLINE.\nBackup system status: OFFLINE." - if(3) - U << "\blue VOID-shift device status: OFFLINE.\nCLOAK-tech device status: OFFLINE." - cancel_stealth()//Shutdowns stealth. - if(4) - U << "\blue Disconnecting neural-net interface...\greenSuccess\blue." - if(5) - U << "\blue Disengaging neural-net interface...\greenSuccess\blue." - if(6) - U << "\blue Unsecuring external locking mechanism...\nNeural-net abolished.\nOperation status: FINISHED." - blade_check(U,2) - remove_equip_verbs() - unlock_suit() - U.regenerate_icons() - sleep(delay) - s_busy = 0 - return - -//=======//SPIDEROS PROC//=======// - -/obj/item/clothing/suit/space/space_ninja/proc/display_spideros() - if(!affecting) return//If no mob is wearing the suit. I almost forgot about this variable. - var/mob/living/carbon/human/U = affecting - var/mob/living/silicon/ai/A = AI - var/display_to = s_control ? U : A//Who do we want to display certain messages to? - - var/dat = "SpiderOS" - dat += " Refresh" - if(spideros) - dat += " | Return" - dat += " | Close" - dat += "
" - if(s_control) - dat += "

SpiderOS v.1.337

" - dat += "Welcome, [U.real_name].
" - else - dat += "

SpiderOS v.ERR-RR00123

" - dat += "
" - dat += " Current Time: [worldtime2text()]
" - dat += " Battery Life: [round(cell.charge/100)]%
" - dat += " Smoke Bombs: \Roman [s_bombs]
" - dat += " pai Device: " - if(pai) - dat += "Configure" - dat += " | " - dat += "Eject" - else - dat += "None Detected" - dat += "

" - - switch(spideros) - if(0) - dat += "

Available Functions:

" - dat += "" - if(3) - dat += "

Medical Report:

" - if(U.dna) - dat += "Fingerprints: [md5(U.dna.uni_identity)]
" - dat += "Unique identity: [U.dna.unique_enzymes]
" - dat += "

Overall Status: [U.stat > 1 ? "dead" : "[U.health]% healthy"]

" - dat += "

Nutrition Status: [U.nutrition]

" - dat += "Oxygen loss: [U.getOxyLoss()]" - dat += " | Toxin levels: [U.getToxLoss()]
" - dat += "Burn severity: [U.getFireLoss()]" - dat += " | Brute trauma: [U.getBruteLoss()]
" - dat += "Radiation Level: [U.radiation] rad
" - dat += "Body Temperature: [U.bodytemperature-T0C]°C ([U.bodytemperature*1.8-459.67]°F)
" - - for(var/datum/disease/D in U.viruses) - dat += "Warning: Virus Detected. Name: [D.name].Type: [D.spread]. Stage: [D.stage]/[D.max_stages]. Possible Cure: [D.cure].
" - dat += "" - if(1) - dat += "

Atmospheric Scan:

"//Headers don't need breaks. They are automatically placed. - var/turf/T = get_turf_or_move(U.loc) - if (isnull(T)) - dat += "Unable to obtain a reading." - else - var/datum/gas_mixture/environment = T.return_air() - - var/pressure = environment.return_pressure() - var/total_moles = environment.total_moles - - dat += "Air Pressure: [round(pressure,0.1)] kPa" - - if (total_moles) - dat += "
    " - for(var/g in environment.gas) - dat += "
  • [gas_data.name[g]]: [round((environment.gas[g] / total_moles) * 100)]%
  • " - dat += "
" - - dat += "Temperature: [round(environment.temperature-T0C)]°C" - if(2) - if(k_unlock==7||!s_control) - dat += " Hidden Menu" - dat += "

Anonymous Messenger:

"//Anonymous because the receiver will not know the sender's identity. - dat += "

Detected PDAs:

" - dat += "
    " - var/count = 0 - for (var/obj/item/device/pda/P in world) - if (!P.owner||P.toff) - continue - dat += "
  • [P]" - dat += "
  • " - count++ - dat += "
" - if (count == 0) - dat += "None detected.
" - if(32) - dat += "

Hidden Menu:

" - if(s_control) - dat += "Please input password: " - dat += "HERE
" - dat += "
" - dat += "Remember, you will not be able to recharge energy during this function. If energy runs out, the suit will auto self-destruct.
" - dat += "Use with caution. De-initialize the suit when energy is low." - else - //Only leaving this in for funnays. CAN'T LET YOU DO THAT STAR FOX - dat += "WARNING: Hostile runtime intrusion detected: operation locked. The Spider Clan is watching you, INTRUDER." - dat += "ERROR: TARANTULA.v.4.77.12 encryption algorithm detected. Unable to decrypt archive.
" - if(4) - dat += {" -

Ninja Manual:

-
Who they are:
- Space ninjas are a special type of ninja, specifically one of the space-faring type. The vast majority of space ninjas belong to the Spider Clan, a cult-like sect, which has existed for several hundred years. The Spider Clan practice a sort of augmentation of human flesh in order to achieve a more perfect state of being and follow Postmodern Space Bushido. They also kill people for money. Their leaders are chosen from the oldest of the grand-masters, people that have lived a lot longer than any mortal man should.
Being a sect of technology-loving fanatics, the Spider Clan have the very best to choose from in terms of hardware--cybernetic implants, exoskeleton rigs, hyper-capacity batteries, and you get the idea. Some believe that much of the Spider Clan equipment is based on reverse-engineered alien technology while others doubt such claims.
Whatever the case, their technology is absolutely superb. -
How they relate to other SS13 organizations:
-
    -
  • *Nanotrasen and the Syndicate are two sides of the same coin and that coin is valuable.
  • -
  • *The Space Wizard Federation is a problem, mainly because they are an extremely dangerous group of unpredictable individuals--not to mention the wizards hate technology and are in direct opposition of the Spider Clan. Best avoided or left well-enough alone. How to battle: wizards possess several powerful abilities to steer clear off. Blind in particular is a nasty spell--jaunt away if you are blinded and never approach a wizard in melee. Stealth may also work if the wizard is not wearing thermal scanners--don't count on this. Run away if you feel threatened and await a better opportunity.
  • -
  • *Changeling Hivemind: extremely dangerous and to be killed on sight. How to battle: they will likely try to absorb you. Adrenaline boost, then phase shift into them. If you get stung, use SpiderOS to inject counter-agents. Stealth may also work but detecting a changeling is the real battle.
  • -
  • *Xeno Hivemind: their skulls make interesting kitchen decorations and are challenging to best, especially in larger nests. How to battle: they can see through your stealth guise and energy stars will not work on them. Best killed with a Phase Shift or at range. If you happen on a projectile stun weapon, use it and then close in to melee.
  • -
-
The reason they (you) are here:
- Space ninjas are renowned throughout the known controlled space as fearless spies, infiltrators, and assassins. They are sent on missions of varying nature by Nanotrasen, the Syndicate, and other shady organizations and people. To hire a space ninja means serious business. -
Their playstyle:
- A mix of traitor, changeling, and wizard. Ninjas rely on energy, or electricity to be precise, to keep their suits running (when out of energy, a suit hibernates). Suits gain energy from objects or creatures that contain electrical charge. APCs, cell batteries, rechargers, SMES batteries, cyborgs, mechs, and exposed wires are currently supported. Through energy ninjas gain access to special powers--while all powers are tied to the ninja suit, the most useful of them are verb activated--to help them in their mission.
It is a constant struggle for a ninja to remain hidden long enough to recharge the suit and accomplish their objective; despite their arsenal of abilities, ninjas can die like any other. Unlike wizards, ninjas do not possess good crowd control and are typically forced to play more subdued in order to achieve their goals. Some of their abilities are specifically designed to confuse and disorient others.
With that said, it should be perfectly possible to completely flip the fuck out and rampage as a ninja. -
Their powers:
- There are two primary types: Equipment and Abilties. Passive effect are always on. Active effect must be turned on and remain active only when there is energy to do so. Ability costs are listed next to them. - Equipment: cannot be tracked by AI (passive), faster speed (passive), stealth (active), vision switch (passive if toggled), voice masking (passive), SpiderOS (passive if toggled), energy drain (passive if toggled). -
    -
  • Voice masking generates a random name the ninja can use over the radio and in-person. Although, the former use is recommended.
  • -
  • Toggling vision cycles to one of the following: thermal, meson, or darkness vision. The starting mode allows one to scout the identity of those in view, revealing their role. Traitors, revolutionaries, wizards, and other such people will be made known to you.
  • -
  • Stealth, when activated, drains more battery charge and works similarly to a syndicate cloak. The cloak will deactivate when most Abilities are utilized.
  • -
  • On-board AI: The suit is able to download an AI much like an intelicard. Check with SpiderOS for details once downloaded.
  • -
  • SpiderOS is a specialized, PDA-like screen that allows for a small variety of functions, such as injecting healing chemicals directly from the suit. You are using it now, if that was not already obvious. You may also download AI modules directly to the OS.
  • -
- Abilities: -