From 046842cc0ad100a23683a535c2a169625e55cb09 Mon Sep 17 00:00:00 2001 From: Lexanx <61974560+Lexanx@users.noreply.github.com> Date: Sat, 10 Feb 2024 19:47:16 +0300 Subject: [PATCH] Feat: add IPC exonet organ (#705) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # Описание Work in progress ## Основные изменения Добавление ИПС обусловленной ЛОРом им возможности, сидеть в интернетике и пользоваться программами без компьютера. Ведь компьютер у них в голове ## Скриншоты ![image](https://github.com/ss220-space/Baystation12/assets/61974560/1690b988-6ca4-4cd3-8d75-2f08d1b2d8cb) ![image](https://github.com/ss220-space/Baystation12/assets/61974560/f6a61ead-d5c9-489b-a177-746f4a5d4c0c) ## Changelog :cl: rscadd: IPC exonet organ /:cl: --- baystation12.dme | 2 + code/__defines/mobs.dm | 1 + code/datums/extensions/interactive.dm | 2 +- code/game/machinery/bioprinter.dm | 1 + code/game/objects/topic.dm | 2 +- .../computers/modular_computer/core.dm | 6 +- .../computers/modular_computer/hardware.dm | 2 +- .../computers/modular_computer/interaction.dm | 11 ++- .../computers/modular_computer/variables.dm | 4 +- .../subtypes/dev_exonet_connection_system.dm | 39 +++++++++ .../modular_computers/hardware/_hardware.dm | 1 + .../hardware/battery_module.dm | 8 ++ .../modular_computers/hardware/hard_drive.dm | 1 + .../hardware/network_card.dm | 1 + .../hardware/portable_hard_drive.dm | 3 +- .../hardware/processor_unit.dm | 2 +- code/modules/modular_computers/ntos/ntos.dm | 5 +- code/modules/nano/interaction/default.dm | 4 + .../internal/exonet_connection_system.dm | 77 ++++++++++++++++++ .../designs/designs_modular_computer.dm | 23 +++++- code/modules/species/station/machine.dm | 3 +- icons/obj/surgery.dmi | Bin 38206 -> 40389 bytes .../carbon/human/machine_limb_functions.dm | 19 ++++- .../designs/designs_modular_computer.dm | 10 +++ 24 files changed, 210 insertions(+), 17 deletions(-) create mode 100644 code/modules/modular_computers/computers/subtypes/dev_exonet_connection_system.dm create mode 100644 code/modules/organs/internal/exonet_connection_system.dm diff --git a/baystation12.dme b/baystation12.dme index 4154609d27..145a1df8ca 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -2486,6 +2486,7 @@ #include "code\modules\modular_computers\computers\modular_computer\power.dm" #include "code\modules\modular_computers\computers\modular_computer\variables.dm" #include "code\modules\modular_computers\computers\subtypes\dev_console.dm" +#include "code\modules\modular_computers\computers\subtypes\dev_exonet_connection_system.dm" #include "code\modules\modular_computers\computers\subtypes\dev_laptop.dm" #include "code\modules\modular_computers\computers\subtypes\dev_pda.dm" #include "code\modules\modular_computers\computers\subtypes\dev_tablet.dm" @@ -2634,6 +2635,7 @@ #include "code\modules\organs\internal\appendix.dm" #include "code\modules\organs\internal\brain.dm" #include "code\modules\organs\internal\cooling_system.dm" +#include "code\modules\organs\internal\exonet_connection_system.dm" #include "code\modules\organs\internal\eyes.dm" #include "code\modules\organs\internal\heart.dm" #include "code\modules\organs\internal\kidneys.dm" diff --git a/code/__defines/mobs.dm b/code/__defines/mobs.dm index 21c7386e1f..0f0fcbe236 100644 --- a/code/__defines/mobs.dm +++ b/code/__defines/mobs.dm @@ -203,6 +203,7 @@ #define BP_APPENDIX "appendix" #define BP_CELL "cell" #define BP_COOLING "cooling system" +#define BP_EXONET "exonet connection slot" #define BP_HIVE "hive node" #define BP_LARVA "alien larva" //INF #define BP_MIMIC "mimic sac" //INF diff --git a/code/datums/extensions/interactive.dm b/code/datums/extensions/interactive.dm index ae74d78fdf..77156ea275 100644 --- a/code/datums/extensions/interactive.dm +++ b/code/datums/extensions/interactive.dm @@ -33,4 +33,4 @@ /datum/extension/interactive/Topic(var/href, var/list/href_list) if(..()) return TRUE - return extension_act(href, href_list, usr) \ No newline at end of file + return extension_act(href, href_list, usr) diff --git a/code/game/machinery/bioprinter.dm b/code/game/machinery/bioprinter.dm index 0885c76ccb..4a5b15966c 100644 --- a/code/game/machinery/bioprinter.dm +++ b/code/game/machinery/bioprinter.dm @@ -122,6 +122,7 @@ BP_R_HAND = list(/obj/item/organ/external/hand/right, 40), BP_CELL = list(/obj/item/organ/internal/cell/print, 25), BP_COOLING = list(/obj/item/organ/internal/cooling_system, 25), + BP_EXONET = list(/obj/item/organ/internal/ecs, 35), ) machine_name = "prosthetic organ fabricator" diff --git a/code/game/objects/topic.dm b/code/game/objects/topic.dm index ca36fa2c94..5ecba0249c 100644 --- a/code/game/objects/topic.dm +++ b/code/game/objects/topic.dm @@ -50,4 +50,4 @@ return target.add_hiddenprint(src) -/atom/proc/CouldNotUseTopic(var/mob/user) \ No newline at end of file +/atom/proc/CouldNotUseTopic(var/mob/user) diff --git a/code/modules/modular_computers/computers/modular_computer/core.dm b/code/modules/modular_computers/computers/modular_computer/core.dm index e82f4d8cee..8ba992fec9 100644 --- a/code/modules/modular_computers/computers/modular_computer/core.dm +++ b/code/modules/modular_computers/computers/modular_computer/core.dm @@ -72,6 +72,8 @@ to_chat(user, "\The [src] was already emagged.") return NO_EMAG_ACT else + if(src.type == /obj/item/modular_computer/ecs) + return NO_EMAG_ACT computer_emagged = TRUE to_chat(user, "You emag \the [src]. It's screen briefly shows a \"OVERRIDE ACCEPTED: New software downloads available.\" message.") return 1 @@ -98,7 +100,9 @@ return if(tesla_link) tesla_link.enabled = 1 - var/issynth = issilicon(user) // Robots and AIs get different activation messages. + var/issynth = FALSE + if((user.is_species(SPECIES_IPC) && istype(src, /obj/item/modular_computer/ecs)) || issilicon(user)) + issynth = TRUE // Robots and AIs and IPCs get different activation messages. if(damage > broken_damage) if(issynth) to_chat(user, "You send an activation signal to \the [src], but it responds with an error code. It must be damaged.") diff --git a/code/modules/modular_computers/computers/modular_computer/hardware.dm b/code/modules/modular_computers/computers/modular_computer/hardware.dm index 6fddadf438..4ba1ec3cec 100644 --- a/code/modules/modular_computers/computers/modular_computer/hardware.dm +++ b/code/modules/modular_computers/computers/modular_computer/hardware.dm @@ -166,4 +166,4 @@ all_components.Add(tesla_link) if(scanner) all_components.Add(scanner) - return all_components \ No newline at end of file + return all_components diff --git a/code/modules/modular_computers/computers/modular_computer/interaction.dm b/code/modules/modular_computers/computers/modular_computer/interaction.dm index 1ffb62fd50..9bee09aae3 100644 --- a/code/modules/modular_computers/computers/modular_computer/interaction.dm +++ b/code/modules/modular_computers/computers/modular_computer/interaction.dm @@ -31,7 +31,10 @@ if(enabled) bsod = 1 update_icon() - to_chat(usr, "You press a hard-reset button on \the [src]. It displays a brief debug screen before shutting down.") + if((usr.is_species(SPECIES_IPC) && istype(src, /obj/item/modular_computer/ecs))) + to_chat(usr, "You send signal for a hard-reset on \the [src].") + else + to_chat(usr, "You press a hard-reset button on \the [src]. It displays a brief debug screen before shutting down.") shutdown_computer(FALSE) spawn(2 SECONDS) bsod = 0 @@ -164,10 +167,12 @@ if(istype(W, /obj/item/stock_parts/computer)) var/obj/item/stock_parts/computer/C = W - if(C.hardware_size <= max_hardware_size) + if((C.hardware_size <= max_hardware_size) && (!exonets_ipc_computer)) + try_install_component(user, C) + else if(exonets_ipc_computer && C.exonets_ipc_computer_suitable) try_install_component(user, C) else - to_chat(user, "This component is too large for \the [src].") + to_chat(user, "This component is not suitable for \the [src].") if(isWrench(W)) var/list/components = get_all_components() if(components.len) diff --git a/code/modules/modular_computers/computers/modular_computer/variables.dm b/code/modules/modular_computers/computers/modular_computer/variables.dm index 8196399b60..666f389822 100644 --- a/code/modules/modular_computers/computers/modular_computer/variables.dm +++ b/code/modules/modular_computers/computers/modular_computer/variables.dm @@ -50,8 +50,10 @@ var/modifiable = TRUE // can't be modified or damaged if false + var/exonets_ipc_computer = FALSE // Checks if it suitable to install for IPCs head computers + var/stores_pen = FALSE var/obj/item/pen/stored_pen var/interact_sounds - var/interact_sound_volume = 40 \ No newline at end of file + var/interact_sound_volume = 40 diff --git a/code/modules/modular_computers/computers/subtypes/dev_exonet_connection_system.dm b/code/modules/modular_computers/computers/subtypes/dev_exonet_connection_system.dm new file mode 100644 index 0000000000..d099bef01c --- /dev/null +++ b/code/modules/modular_computers/computers/subtypes/dev_exonet_connection_system.dm @@ -0,0 +1,39 @@ +//// INTERNAL IPCs COMPUTER +/obj/item/modular_computer/ecs + name = "exonet connection system" + desc = "A cirquit with some ports and wires." + icon = 'icons/obj/surgery.dmi' + icon_state = "ecs_on" + icon_state_unpowered = "ecs_off" + anchored = FALSE + w_class = ITEM_SIZE_NORMAL + base_idle_power_usage = 5 + base_active_power_usage = 50 + light_strength = 0 + max_damage = 100 + broken_damage = 60 + max_hardware_size = 2 + hardware_flag = PROGRAM_LAPTOP + exonets_ipc_computer = TRUE + + +/obj/item/modular_computer/ecs/install_default_hardware() + ..() + processor_unit = new/obj/item/stock_parts/computer/processor_unit(src) + hard_drive = new/obj/item/stock_parts/computer/hard_drive/advanced(src) + network_card = new/obj/item/stock_parts/computer/network_card/advanced(src) + battery_module = new/obj/item/stock_parts/computer/battery_module/converter(src) + +/obj/item/modular_computer/ecs/install_default_programs() + ..() + hard_drive.store_file(new/datum/computer_file/program/email_client()) + hard_drive.store_file(new/datum/computer_file/program/wordprocessor()) + + +/obj/item/modular_computer/ecs/attack_self(var/mob/user) // Оставляем возможность вызывать окно только через абилку ИПСа + return + + +/obj/item/modular_computer/ecs/proc/open_terminal_ecs(var/mob/user) + var/datum/extension/interactive/ntos/os = get_extension(src, /datum/extension/interactive/ntos) + return os.open_terminal(user) diff --git a/code/modules/modular_computers/hardware/_hardware.dm b/code/modules/modular_computers/hardware/_hardware.dm index bbed0bd2f7..ff5ed015f6 100644 --- a/code/modules/modular_computers/hardware/_hardware.dm +++ b/code/modules/modular_computers/hardware/_hardware.dm @@ -14,6 +14,7 @@ var/malfunction_probability = 10// Chance of malfunction when the component is damaged var/usage_flags = PROGRAM_ALL var/external_slot // Whether attackby will be passed on it even with a closed panel + var/exonets_ipc_computer_suitable = FALSE /obj/item/stock_parts/computer/attackby(var/obj/item/W as obj, var/mob/living/user as mob) // Multitool. Runs diagnostics diff --git a/code/modules/modular_computers/hardware/battery_module.dm b/code/modules/modular_computers/hardware/battery_module.dm index 55cb68ec3c..4b467f7fa0 100644 --- a/code/modules/modular_computers/hardware/battery_module.dm +++ b/code/modules/modular_computers/hardware/battery_module.dm @@ -48,6 +48,14 @@ origin_tech = list(TECH_POWER = 1, TECH_ENGINEERING = 1) battery_rating = 60 +/obj/item/stock_parts/computer/battery_module/converter + name = "Converter battery" + desc = "A tiny device with sole purpose to connect main IPC battery" + icon_state = "battery_nano" + origin_tech = list(TECH_POWER = 1, TECH_ENGINEERING = 1) + battery_rating = 80 + exonets_ipc_computer_suitable = TRUE + // This is not intended to be obtainable in-game. Intended for adminbus and debugging purposes. /obj/item/stock_parts/computer/battery_module/lambda name = "lambda coil" diff --git a/code/modules/modular_computers/hardware/hard_drive.dm b/code/modules/modular_computers/hardware/hard_drive.dm index 0cfeeb519a..7016a77fc3 100644 --- a/code/modules/modular_computers/hardware/hard_drive.dm +++ b/code/modules/modular_computers/hardware/hard_drive.dm @@ -5,6 +5,7 @@ icon_state = "hdd_normal" hardware_size = 1 origin_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1) + exonets_ipc_computer_suitable = TRUE var/max_capacity = 128 var/used_capacity = 0 var/list/stored_files = list() // List of stored files on this drive. DO NOT MODIFY DIRECTLY! diff --git a/code/modules/modular_computers/hardware/network_card.dm b/code/modules/modular_computers/hardware/network_card.dm index bc85e427c6..4b98d8d8c9 100644 --- a/code/modules/modular_computers/hardware/network_card.dm +++ b/code/modules/modular_computers/hardware/network_card.dm @@ -14,6 +14,7 @@ var/global/ntnet_card_uid = 1 var/ethernet = 0 // Hard-wired, therefore always on, ignores NTNet wireless checks. var/proxy_id // If set, uses the value to funnel connections through another network card. malfunction_probability = 1 + exonets_ipc_computer_suitable = TRUE /obj/item/stock_parts/computer/network_card/diagnostics() . = ..() diff --git a/code/modules/modular_computers/hardware/portable_hard_drive.dm b/code/modules/modular_computers/hardware/portable_hard_drive.dm index 491684b496..f35de05e7b 100644 --- a/code/modules/modular_computers/hardware/portable_hard_drive.dm +++ b/code/modules/modular_computers/hardware/portable_hard_drive.dm @@ -7,6 +7,7 @@ hardware_size = 1 max_capacity = 16 origin_tech = list(TECH_DATA = 1) + exonets_ipc_computer_suitable = TRUE /obj/item/stock_parts/computer/hard_drive/portable/advanced name = "advanced data crystal" @@ -38,4 +39,4 @@ /obj/item/stock_parts/computer/hard_drive/portable/merchant/Initialize() . = ..() - store_file(new/datum/computer_file/program/merchant(src)) \ No newline at end of file + store_file(new/datum/computer_file/program/merchant(src)) diff --git a/code/modules/modular_computers/hardware/processor_unit.dm b/code/modules/modular_computers/hardware/processor_unit.dm index 46e324c58d..79368db92d 100644 --- a/code/modules/modular_computers/hardware/processor_unit.dm +++ b/code/modules/modular_computers/hardware/processor_unit.dm @@ -10,7 +10,7 @@ critical = 1 malfunction_probability = 1 origin_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 2) - + exonets_ipc_computer_suitable = TRUE var/processing_power = 2 // Used for DDoS speed calculations /obj/item/stock_parts/computer/processor_unit/small diff --git a/code/modules/modular_computers/ntos/ntos.dm b/code/modules/modular_computers/ntos/ntos.dm index f1712fa755..e80159455a 100644 --- a/code/modules/modular_computers/ntos/ntos.dm +++ b/code/modules/modular_computers/ntos/ntos.dm @@ -23,7 +23,6 @@ var/update_postshutdown var/list/terminals - //[INF] var/is_remote_ui = 0 GLOBAL_LIST_EMPTY(CreatedOSes) @@ -61,7 +60,7 @@ GLOBAL_LIST_EMPTY(CreatedOSes) on = FALSE for(var/datum/computer_file/program/P in running_programs) kill_program(P, 1) - + var/obj/item/stock_parts/computer/network_card/network_card = get_component(PART_NETWORK) if(network_card) ntnet_global.unregister(network_card.identification_id) @@ -201,4 +200,4 @@ GLOBAL_LIST_EMPTY(CreatedOSes) LAZYADD(terminals, new /datum/terminal/(user, src)) /datum/extension/interactive/ntos/proc/emagged() - return FALSE \ No newline at end of file + return FALSE diff --git a/code/modules/nano/interaction/default.dm b/code/modules/nano/interaction/default.dm index e2b97f6483..722abd0911 100644 --- a/code/modules/nano/interaction/default.dm +++ b/code/modules/nano/interaction/default.dm @@ -95,3 +95,7 @@ GLOBAL_DATUM_INIT(default_state, /datum/topic_state/default, new) . = min(., shared_living_nano_distance(src_object)) if(. == STATUS_UPDATE && (psi && !psi.suppressed && psi.get_rank(PSI_PSYCHOKINESIS) >= PSI_RANK_OPERANT)) return STATUS_INTERACTIVE + if(is_species(SPECIES_IPC)) + var/obj/item/modular_computer/ecs/computer = src_object + if(computer.type == /obj/item/modular_computer/ecs) + return STATUS_INTERACTIVE diff --git a/code/modules/organs/internal/exonet_connection_system.dm b/code/modules/organs/internal/exonet_connection_system.dm new file mode 100644 index 0000000000..2834ea1092 --- /dev/null +++ b/code/modules/organs/internal/exonet_connection_system.dm @@ -0,0 +1,77 @@ +/obj/item/organ/internal/ecs + name = "exonet connection port" + icon_state = "setup_large" + organ_tag = BP_EXONET + parent_organ = BP_HEAD + status = ORGAN_ROBOTIC + desc = "The internal port is designed to establish communication between the positronic brain and the computer." + w_class = ITEM_SIZE_NORMAL + max_damage = 100 + var/obj/item/modular_computer/ecs/computer = /obj/item/modular_computer/ecs + var/open = FALSE + + +/obj/item/organ/internal/ecs/Initialize() + if(ispath(computer)) + computer = new computer(src) + . = ..() + + +/obj/item/organ/internal/ecs/Process() + ..() + if(!owner) + return + if(owner.stat == DEAD) + return + if(!computer) + return + if(computer.battery_module.battery.charge < (computer.battery_module.battery.maxcharge)) + transfer_charge() + +/obj/item/organ/internal/ecs/proc/transfer_charge() + var/obj/item/organ/internal/cell/potato = owner.internal_organs_by_name[BP_CELL] + var/charge_needed =(computer.battery_module.battery.maxcharge - computer.battery_module.battery.charge) + if(charge_needed) + potato.cell.charge -= charge_needed + computer.battery_module.battery.charge += charge_needed + +/obj/item/organ/internal/ecs/attackby(obj/item/W, mob/user) + if(isScrewdriver(W)) + if(open) + open = FALSE + to_chat(user, "You screw the exonet connection slot panel in place.") + else + open = TRUE + to_chat(user, "You unscrew the exonet connection slot panel.") + + if(isCrowbar(W)) + if(open) + if(computer) + user.put_in_hands(computer) + to_chat(user, "You remove \the [computer] from \the [src].") + computer = null + icon_state = "setup_large-open" + + if (istype(W, /obj/item/modular_computer/ecs)) + if(open) + if(computer) + to_chat(user, "There \the [computer] already installed.") + else if(user.unEquip(W, src)) + computer = W + to_chat(user, "You insert \the [computer].") + icon_state = "setup_large" + + +/obj/item/organ/internal/ecs/proc/exonet(mob/user) + if(!computer) + to_chat(user, "You have no exonet connection system installed") + return + if(!computer.enabled && computer.screen_on) + return computer.turn_on(user) + switch(alert("Open Terminal or interact with it?", "Open Terminal or interact with it?", "Interact", "Terminal", "Emergency Shutdown")) + if("Interact") + return computer.ui_interact(user) + if("Terminal") + return computer.open_terminal_ecs(user) + if("Emergency Shutdown") + return computer.emergency_shutdown(user) diff --git a/code/modules/research/designs/designs_modular_computer.dm b/code/modules/research/designs/designs_modular_computer.dm index 581f9ddea8..8afbcb5619 100644 --- a/code/modules/research/designs/designs_modular_computer.dm +++ b/code/modules/research/designs/designs_modular_computer.dm @@ -1,6 +1,6 @@ /datum/design/item/modularcomponent category_items = "Computer Parts" - + // Drives /datum/design/item/modularcomponent/disk/AssembleDesignName() ..() @@ -281,6 +281,15 @@ build_path = /obj/item/stock_parts/computer/battery_module/micro sort_string = "VBAEF" +/datum/design/item/modularcomponent/battery/converter + name = "Converter battery" + id = "bat_nano" + req_tech = list(TECH_POWER = 1, TECH_ENGINEERING = 1) + build_type = PROTOLATHE + materials = list(MATERIAL_STEEL = 200) + build_path = /obj/item/stock_parts/computer/battery_module/converter + sort_string = "VBAFE" + // Processor unit /datum/design/item/modularcomponent/cpu/AssembleDesignName() ..() @@ -324,4 +333,14 @@ materials = list(MATERIAL_STEEL = 3200, glass = 1000) chemicals = list(/datum/reagent/acid = 20) build_path = /obj/item/stock_parts/computer/processor_unit/photonic/small - sort_string = "VBAFD" \ No newline at end of file + sort_string = "VBAFD" + +/datum/design/item/modularcomponent/ecs + name = "exonet connection system" + id = "exonet" + req_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4) + build_type = IMPRINTER + materials = list(MATERIAL_STEEL = 4000, glass = 3000) + chemicals = list(/datum/reagent/acid = 50) + build_path = /obj/item/modular_computer/ecs + sort_string = "VBAFE" diff --git a/code/modules/species/station/machine.dm b/code/modules/species/station/machine.dm index d7a7c9e848..5f88d65d01 100644 --- a/code/modules/species/station/machine.dm +++ b/code/modules/species/station/machine.dm @@ -42,7 +42,8 @@ has_organ = list( BP_POSIBRAIN = /obj/item/organ/internal/posibrain, BP_EYES = /obj/item/organ/internal/eyes/robot, - BP_COOLING = /obj/item/organ/internal/cooling_system + BP_COOLING = /obj/item/organ/internal/cooling_system, + BP_EXONET = /obj/item/organ/internal/ecs, ) heat_discomfort_level = 373.15 diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi index 38659260a868d2f6a9c0b880653100ca3bf40ad5..9b02bb8b102ed866fe9059f594d624c24bcdde47 100644 GIT binary patch delta 20464 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 delta 18263 zcmZsC1y~eq_xI3Uf`D|0fV6Zj4Jsj_AcB-4DcvlC(k-Hbbf=`GG)Rd^cX#)$z*67r z^Stl>i|g~caAs#`X3u@@bIyIv{rjEH2F&In%nvkR06s1N06R%FjsSpJ>7#Gxru^E~ z(#6Kf&BpO90C=UO8nnG#79^MLFfiN`W%>B2$@zJ;5pwWaQN$VdLHl3jzd`K_2k-cE z21ozgkD$sCKbTq(Us=+*@;^U8m8LDc+`vP;n=Fj>F)CgEPG+0)l>RC8$@9o6yR}Pp zeEcFX+6VveNHAS=HE_DXPj1Gi-0Qm8LL`w?lWIdp#@d`&rN&wkU!AHTlLnE`ReJPl znJDO`A-#kd)pK8#g#5M$E{zN^+BcL1B-BK<8h-E64F?r1XS|aJ=tP`!>7QD?erB~J z(EUR_^(7dQnvGT1+h#0PI;&q|{N!D3Crj+XoNR3ja4}Jhj~*^N^eD$!{7@Hq zo|D3_t3^?d;37Jl3g~|6ZGyQ|CnTW$6=U&$_ zcQ7rmiYsU2hpousgs7>vhxglK>eqKfdi~rVzvGM&p5^p>)blR3NagUT_^?&&wNLG1 z>uyocG~-7H3}(fo3`r5vQ4?)~yMb3}U0?tA}!AO>j(}j+S)924Y67gao^Q0kbji=w4hwAv&xpSS;Xnr;P zeb7IZQ?Y)QJN14hSe7(2Ek6!5o!usIvW9;+t3XG%T)5A%#73PyeETTKJafupwn2gu z(QYE~R3XqcyV-=Kv7EOu$Wx!yM$EcbwEgWwcekjW&AXcTvr7lQu}FvXMI*aHEzYZV zny!=ej>(;!y3{=nNBNT+@QjL*CgVzZ#o_JvrC&+v=X#7`#`7+zB=gcCV>iNwVLr|@ z(qVVbJB~GfXZv`A&juXJPFfCE?vHq+1=f8h$FkP~7xX{x-+*GlMnt*Q>LWzv*r|%# zSsFZU_dh?;mzTH(LL*(C(q>3RISsPogw%vprLbcO$l^aR#`zSPkJt&D)X6ZCZ+&2m z^ULi?xlJa)6Z%K2`hBRYiUtqp-}K$Ngu&9&ozDgzQ&X>=+a0WWkDq+&yDmCR?7P;^ zxm#}!S_;x$W9?vBobk2jn^302Ec#7jW76;gEF=S@rO!+14z4ep`)$X56cFQf;K_K% zt15A(t0bM6C)Lf6{>d{PzYJ=byn|oQ(W0Sz12<- z@wGV(Wwhu_`1btBcKC0*cxAduttV5TQ{ms3kqgrX*^uC?jwJV6bR&+0d7$SOGisen z(r*RVLiZzln9_A;9?-waCdZO;Yt88XD9hhLA9}6uY4mg)|Lps9Mysz=!M;cKLjDC; z;liiV*^U0O)11<1A+AFvdzjN^>Bs~~SjLvIGr`-wlV*|~G$EYV$kKSdT%6q+94TS2 zZdmuA?uBavSDApSF*TqyZL}$lGjgg~#?LleD-dDLOc_`NQq^!>v5r;ukl8J4dTz-* z+8(i7#{!IzooiVaA_k`WiTfWe8tYM-He#I#LPD+Ylst2rslC<$r05$uJl4PmKh%OU zv$7btv2cOK)Iags5=K0?Z?A1mRTKGFJ!7wOrLw(!pLdMRc43Hn+r>FxFTIZWlCh+&C0>M&K(2&76M9NTf9#yV3&P+=yKS zp0dycAU_pfe`|)v`4(aVABaF8A*l?u+ANr0sViIPU&^X@mNIO7HT$BPzuPTe!1Fp( zf5O677;&|QvMVjah|p5b?J{-9nyFP#QIY)N=?ly?$S!8R(9zldNUfi=Phr0Kb54|ouQd578Vsj1-`7c=`h`aF1OiM zNbQ-rU;BMWsHt_Exw%EfUvF;GDnOD)MK+&FKiYPLfz3Ksdm95hrDPe;k<4Cs`W2{) ztee+<-%3&a3XX8T!#c9Cw!!yG3k)29(^(fu(BCbR6S^qG%rwLlWHl zm5^ix>YTHw8Kn--4+8>f3d(M7i@!bOjv!@a1r}HRKp?|Ga=}q0_Tu5S|8gN^R^JWF zU1h^}Z532cI^?=G@0}_rO*IB@3BzTP)vb1TBISYMe%{#u*#lb4X)@ue3p~JxBO@vk z?jv5WEieBfC?w>*3vd0wWUOC*i%_4NqKH|3x@aZY$QzVra`Q8<)PKazjAXH zuz-@F)H+A-1UIz8}V}tz-z8q-D6=`cq63->7ze|=)l9;pai^@`aYKo zhgYC#V^AP+%;2YmbL#0ELE6Kgl-gX+Ku_qE{+cr$4i(UAmXMc86X#^pN7^md$2`+D zc9Evw`E5WyGL4IG?ob4$7~Cmn>9kOI_>h1Jj?nSD*sG-#f6EXN8OgfwDGAF}p1397 zp`oU-tn*;YRbQjZ1IJR(h@i8xQ;?Q8LYl=xO+RGe=;ZVLr!jYE2epn?9?*h(6oG94 zb#)T6&2V~WXJ_cfv%ZfU&|&iXn^?BU987z1%#MK!EQ--ZnK4} zg&Q|7HBnd8osr#}Tj<}myhux}dmY_;>Rbejx7M@{qG&Y zY^3V;Ui*y{K?$g_m6L>h&*}WED8Ss_tULBGN6|x^>pZw>A^`^ zs9a#%;1>eQd-bm*J$5J8kzm7fZi#y81HG$KsXa=HHfhZ1ThDGuUP&u~>m-X(a0G~H z#()wYTm-7eCoV4S3J1&ttAeG{dP>RauYS|3t;S>B+Boa%!V4HY&JF3dy?XAv0*)j$ zJI}$-{8If~|C}LbC-+LN~$^|Q1baz51IU@$kOtTJ&W$y0MTrIx3 z92m||a#MbpySPd`kg6i=_& z-lfuO5@Bo$BGlm_r3?J35ke4_sUC=^`&0ouu5UB25&uAQqSIK zUGbK$>a>G?G%W1GX|-@e=f#Va(PdfpZQlF$`7LKgbw|g?@k?HEM3Id+&Y_}(V6u^6 zFS3lXL$7x??tOrMLBjVh@1Hc;NY{-&=GL|k6nj6-< z0gG;%!gF#y2y2b?>6OeT@FZC#Z-P>X#~-FEs0cWE0nPFChjYaRB_(Z}qB=!)nDWZf z{W}lTwqJrmJeA_)(+}vAl88%E174!OrzgutF-m8AKWBUE?@Rsq^B5$=w?j$KI@-v+ z+sb_GJqYAjf~Cq|T$kmav8zABnR_F4Ns6r3*VnV&45TGWUvK~*X{b{A#vgwIS>M0P zZ{PA?3x6ZI=eh?8WdN6l-jd_8MH5DPrbGK|rWuY;xX=`_pjnR>@S~6#ZQI?1ZIR`rc6w>SJqLS?7;AM6 zNIoFrTP2;tG{;H_PpHDUl_(5H9KQ6da`L5uu126dF2Wi0t)>RICD|pmi0|b;B0@_0 zP*$n2+N;otnCLi~_#7#idl^f6-u%=$xabZT-m?|UD1GZTENw&?{Od~D<0yq=xoH_A z`3z>#z}=YFMFxoRre~d1n?cjq5Ga*i_i_$H-buNP@7#E3Vd>W{aVaDbTKAs&DSd(d zs;L7PIW@hOKNv$~_eS)Bq>YIITGvBOpmm?4;cRwY%`SX8wNGOKhOF=CEGPgQzilmI zCh5|ONZiKSoe}cUq}qp<3%`^zCd*&~%I|aHolx@vPSmb%T7u5Eo-6mN2h}_%lpB`- zOKapbFMhg{srJS;4pGv#{Hi?BIuWq0idfT2^d}n3Z-D`Cvy(r5hhZ+VvjF)1mo~t! zn&3@Gqtdvswoe3rVNxyjK|E-rVRZT|z6E@ar>xXv1B5?{ZcQ6i(aM$*duvoyG-QtQ z|8}Ec3jDe(lu<}|Nh|Gfms(DiysPCnJ{rTUKj1#l+B(j!+LVi1)Zp?S-pQ%F%@jKYB?uH8m7=fl>52?~9=;_pzB`!#*& zaUjz;aY1_$#?u}Ue*WOP9x1l$;Z#AC{&Zy{P+aZzva>ow}rPvp>2Zw)1qEzf;v)7A~ch zO71R)7W5ly5D_#1oqEoY*`&N$b-jCblwTp@7=8$PrH}fo`2pcrA3eV0CgRqwKIrVS zLbaDDKg9ZpIFP#{>C1P@Rj4nL?%rKHFgx9snMDoo)FIOi%6&bV(2_H4(!@k^772PU z%Oo5$YTG97VWSXCVb0n22vDEq8cxUuYxvf8nRAll9L}51mO->+V;P&U@=f#1;b-SVT`kBuU=u z3==rp+zEQz$Kq%r$t%HFDHfR>`*3G|xzSlpo*gd#N}hT5p$RsFUp%qovtJma@<&}E zbj$$PQ&x@+!~qkWFRbB2yNzJ*%Ocn^@oXtl>2l+lFAkej7ZC8_S_)>%F~1&#WKYv*9YD&lnePD0J0Gi%5w?eTH8V-K+JyKD`yGMHVx@har1TPR&&r=9FyAwo% zoXQxFWEs`zb;>-L7Ke_d<`=0jRB}}TCpURVXo6>&UeO%KTZBt|GPW;ciF=$DG;BHh z^?EK>TSpj2ZG=dhj97U#6r+wOg~K$OUML+do!Ni#V+2NT;+hjjnyoYWH12G=*$&$s)&Bmj(l%7V!QE1T31Q zhqqN}Ysa;Zif35Sg=}5q%ee=L+}Dkq7|C~KZUH5eWn=}(I~QMMjqlv{a-qGEbXOjR zt=;g#BUXmL9D?gsJ2&xu-hrUN7+9vycm=tm;J64W5fQ2RdAnrK%WKka6FkOI=|+CD z8%#NgxaP0`w+Q#4n{y9UP%}fWY+?pC8#|43_8gNNNM%# z>B>O1iVa+^v}Eg?2DuW&(&ZXnSZ95~us~gxm4&=@&8T;sK3MKc|6_p8%H%dDO{^KZ~{&av`2N*+MFWG z{@^WU^It60w}U1RH?Tx1XbUIfhlTb5*!IK7QKFGkZ8%@wBEg+=h9j$UvJ&$Ab=uO+ z2p<4o0UjzV=tr%WJB$~<`u)?C-u)gr4hP6xeQzFKwVkwJ2XjK9HKyc63%B)4qeu#A z;*ggjpHag;FVl3r+@x`vT(8mTq&Tj-e1EU2Fs-LBq$cIwb8VyLp*>ncy@e+Y3>pjC zNXxzKtMPL{{+FyThKRsGzu9d6Y{?(I!{ZP)bgpm46+BV9Y6VplxJm?xSQgMp2)`iS zPcuP~me|CMGz=;LXn!mY*-pB=va-50WY@1|jy}mA!v8+?E&RGGnm&BW{>zs(0oC-d zG8}+5T2&)itY6?)7xdh|^*C4E@823(`4sbY&g?_&gFi-w8m^;1D-^qSK;Jhn>k;mM z^kya?ss8Y^c$l2dmNnt`g@_4F)OK<|Xr+nBjUxlXcC?vozbF)GGFK4~!&iTOqe5Jc zgua|G6@a&%(`|ZRRgYT)I1~9M9+!IT4@j{i1h4ZaTJq#`8zXMkFQJ9S^%U zr~Rll5APfH`ZZdpHzy`hV?UMU)AV`tR0=Z-ydEBw`ePxKT~!q$OdA!ple)Q=>8JST z%(_sZ(?Y1jLP)6(*3xgaSWr4%zH^{q*KqCg@#7$U;T3aRBxQFWT`LV|3@7wS;gODny$tb<$1PoT zqbN1B6P3kVJ^?$8A|Wvpy+_BtZ12FYI=d1~ZoZ`YXV*o(H}XL!MT3Thw18RPw>W%4 zLdDg3OrW*Sc?CGs38T|e=Yyx?vVKb8SKJ8u+pe@Tp0BTM2Y+OIpp5M#E&{_tT;e&2 zyFHYx*ckvvjLKjDuhC`AJuK#!bq5XsEe7p^4jW#=TWT^21O3#6V{DFi9$H?;;j5Yr9DF_$)S* zQlGkta`r#m!2HeGOSb-)T$+vB4SN=ZPSqc7mK2=afogl2{?rD!(b4*;J&)`9%8#C6 zB&sk@VLc~Iqpir)w8=X@k=>+WH$#!pQ5eom(K(Pye4pBWVrrnV>2G^UQP}*m2j9qc z=W(Bokx_RiQtNJRu6qg-pU(7g-UI;XeBZzJx>9j}Ghw>6qy1Ha_v=ja4agOzDoeJ3 zbe(R7)c-(8;CV&mC_QD}L)TmKj6-cJ3-!B77Xcq3WpCde&W*{3Uy%R&sZ21#bDy6m z-DWQgQYTI}nM6wKw)>7*XopTgp@4^v#hcBNW;IAsS9)^t${|h^efP9+0Qq}uUrIZQA*<7-NX9mKk?$~XeEtv z^hjBG77r*l0##KyUqe!7X0=zOQ)`9g)fh)LZ#F$c5h)LWq?%Yow=j-MisY&WIty{^ z1rI6k9Wd~)|GtA_3MM8=M744*YM(8mh)1Ppvrl0_!QP&wVv5*!>@yptL~YL)o0!;# zPboF{8*OF)H($xh>Tvv{#eoS^zvd~V!3HYwdDWT2@p>i9RgvlwXM_h`3OT?vbmJ=G z$n$XT2A>HOQOzzKrC)Po-ox9Y&nlEaT|pr-T%237;v}wJI=!!5c+RvjHi`5h14cap z1EUCu5svJn_%PxtfTVYqN4j_Zv|72bM#QST054~WnsM&iVqh)aKr@e9TF<8=3BT4} zr^CR&eZrpmsk!0!CsOPdkhAKhqeL{zA}nko3oiSNjF$#OBVZ}@WXq%o`{@4nbVnd2 z0Mhm~>M;eG4DH9W7v|FL>Q&76P7)lZ)o5GzNdGcFQTrC4McQdX7~`J?#anKICLKo& z@|YDqiw(=_>)m5-8yjw5Z`jqNA(a{baEf}>uSR7uP54-NsXFP8+BY&lWays%U+`Ir z4&G1CZ&HrgB`qi^qDl4PoDq=UMfPX~RM*gF3y`O;ut0@tS_96BD396d?L-{t8_o-@4h8z$xAQ}q)!_1%u_-r} zlGnR%i4n7A$}f2jSN|GddZOg{Gp{ghxBC+C1WA~n?IEesZNl_xLE5PDscroc90t1p z9VL6Z6m^EKC#g~wJIIMgrp+=X8>l`KK`u#M>}|t)q>tBsYHfoTahyFrW#sPL#+-bW zbj{NVPxHMLBUH4Oa>);iI1{h9kTV>-znB4i zhkAi+T*S8>NHxJNz0qOEZ!#F~;1WjQ(JOhnuZ8cf@W*Rx-Jafv-u{@eQX+Ct|RSZG~eP{3jL*vdDVpPiX4aMaVS;yh> z&!ZqM)m+lhzZ6%{=MT{J`~#BBE1)s;!w=VqP-6$sA^HX9UCn`TJ-6kn&#(Hv@TJVX zRdaW*E?))~4dL>98`*jO@jR@D?0&yV*d5L;rQi;9GK9kpZf-HUl1E(#Zrkn1I6AtK zMV&Ax%s|5XOzT{9{EPk4HMjGvKV#0KP?p3^tb|1=@y+K>(Ho;Jzi zLD_9H)3)EwK}0fb;djh{h)$y0c8SoUpIMnt(BQGBh|E^1u$$o5|0}}!;DIhTK|ca= z*kNXwU^?t0VU=E(r5*~<2gefFWIfv6HI*CwhAe5VMzr)UViFR(UBruums*&Rbl2TC zEh)0a6s$((R@Lm>^e3caEoNsjwNsKs( z&*{=H!!1Tt3JB`49!_zK*&ms7ZZzL0C6n9^+r)B`V3*=eehbD&enM|~{;pgz?pzL5 zCQy4-J0s*d&P)8;a0g**Vlp?YWLLVd%BZt-zr~G0IqALA>O2X9C?z$+8M^tCFS=g)JNXB+iy#*{jRD96I^PI!CZ<{jH?|h z-{b3J`^Ng+0dO{}(=q-iKR$&aN@DHrWNUsS(-$~oOg8pEXV&+m>w%Mpx?aa3HT$p# z?v9Va6pp%T?2NxkMz`_Z62(|xye}HBf=Tx9ofv*1RNw9Ewbv4*-0yoYzQcPm zH4-H7eOOS?lJCI=zx?_(gK`>AYiA_Q(i%p|NPmUA*6o@MsQb-`YV#uqunbB$txkA@ zo(fQEG%3c5QkuE>27j{7rYXaFap0t9vDUy@gzk8Z;34~m-(!-A(stA}zfs?|1b6~I zqFxH9+6vOrzYR~p4xee2Uow6o5J|(;Q zYd7U&gyO@$)Nhh zXd5fWuaRk*YU4|@hh1E_J5u7tXGd=?q_S#rM?kA&Xvl#>Eke-S{72;XEg{}1kQ>u> z|CK(s$oq$4_weKO1m^4mHy5Q9gR;jj)4L8m!rWc6m@~{PH!5VlrJ?S$1FKO3O5~%a z7z$8AeSo)GYH6_dTK-anIlx-;!Cv*6h>{XtQ7L>~Ya)J+Pm|f&WWrR&M^gs7LCvXT zm#Y@?n)Z(}%~Ad*R6eE|%-|(>R9a7D3t4{7n{MABh7Bx<_31(1lgT}gr6y{w!UH{Q zs7N!ygEFKQYCiwupR#G2ZWlO!llZR^=#7FxPs3+~>H_~BKuIXJX~K-ot@<8SneCGL z7(6Epe23kWbz5ubCCpDc+GF28ftv^k(cXHRjZ#=7!RI7Ei6J!Q7ciq~p|t z>8|zaGvzSfl!MTZ^AQSLR4Jbxx(?TO2*3FV9o-}Sf5N5QoZg+CxK21`*2Cp=M?D@G zZGXpy%15u?><862A>k9?V~-zLMP3#~ZsBQP@EHwR=2T6)txakpMo%PJ3T?#F29el87QnK$M0d%mJ+gWJ*+K?y_f56lHkkoL@x znH0kU#!+9tepSBY&Cd^|u+>;F`TBVr`O5e4NW#cT?M@laLaYp{#2r*pv*Z5uMAWzv z6u5z9-+lQ+cUi}IBdDTvfgXP~RwQCBtPczJQ@En=LlU8D+sRPC&4HliaN^mWsb7(%qfvH1A-EJ!5MJ|mDcEc*In0488xR=9Ma{VMea0&J(K{B@>3W>**Z zzR9teDB`{{F!k$QleY5^Yf??qCRHEEWl5BSu-57Ak{>*5gO_AAnXmi&Mi@+Zu#J>EH+(zePw>* zIsoFBPU9MjR!5to2~nzy&4y%@c%t?i-KLRSwHUEri6fNtF<4WZ9?~Kw)GNECI=q+Ccj3H*ILQWi<&N>A% z4m#S~ouIPS-1{xZ3kyhF!f*$q<~_=yZ*GKtQ51*c;C$PIxRbO(D$$sB39; z4P~og02_Z&?H=5^fB!yP%MMdGDaL75X*>orQ{_|kXb}_mO~~o!BEbCDn83AYN_yC= zrD@!Vkbi@i-ehPqUI0XMI8SXh$X;x3Zx6bF)dgNtKqYjOqzGgr8Vh7da3UQWKj13? z>4vLI)2sYDq@1I}88K=MYd^cYrS~YAm}0WkVhOd>8ySJ3q9S94cSCa#^753=hP^V;2#jvJR7iX4*bx zW|c7H267Sg^E_h6KaO}HnaLfzr+9eIVac1_+6%?uhUs*&t>)OS$}^+m`N+>{cqIrM zcb@4S0!k>}|P0a$;EESdqHguiPErBbjc&l2DT#tyj-xJo0e< zMY1^Z761=_@sxSx!1)Ae6R%q&u9o>`Nr|bW&c})khDu(D2Ze^Ns4D&9xqtsx=VD~x z#Rx3}%zySF%&p5OBhDGycBkbuRESo%O9x25mxZgM`oj?eD>@JVle{e=W!^65pa$nZ znzVinPT@achh$7md8djhSv!TXw@sZ7f-xVy&|!q9lBqC^)j^6(7IV1uG96N3M+k|M zlanB1{3*J6E*cl716)%{v8EWa*9WZc%>}r*DWYJ2^6Kx7I#%{_o^;QEwY4=MpfzNI zhTmA8>`(`9?8dyyM+Wi}zX*y2?u?tRS?{yH?WasT4fL`b?u4X+WjMU!6JR#ZZt1mA zb->y-nKcc@uQAg;{3k|W3481K*@Y>1D^URu;T7TcknoX8Cs=dW$}aM7Be3^yE;yke zYOhcH!y>k(BXpaw_khu2m&%{ko8*;OEyEe?&$=K;ae`7$~$lczTBFx1{|z z%R~?Qre}k;UToh;RByVPLAJKDSo#N;rY+vY%rwWfduRP8{Ue~|z6{Vx@4B(nX|N$) zsC}A{Jw-vjNQY7I8H;8|d>nIJv895#d>olj6HxsPmT`bghy<#OS{m@nIj*kX+?98d zquTN^>g_I4WE}X3cVV`tMvnp5fQcalFe*x*KoUtJcOBc^_>CAvWo3xdYGOsbR^ zN#S{<`9(#K)Fs0iwXLlS)L!Eg5I}>G`I92KQdROefxn#JF!<+(1uQ_WbfXV>k@7mR zhJ{|9_U~Vi{OQxD!t})A0{KCEA2G5v>mKERk;W3-=CT*dNXFmyn#46z067Cit914o*tB}1 zyW-WwDPC)Sbb)2&A9cDlnbTQUAOK=p{g7pfW&qS8!28_Xg+mV*q&~A52{<}6Y4Mq>80B36Q%MH#UE$n7}`cq~BWp3BJqm!H|tb*3- zO^!B7`1I&tEv5HYaO7D%>@8w$=`&VQX({zOYaKfmm-=Vcg8xKcB0@rm_+Dj@#YJ(M z!YRPRrtZy+e^AbqIo-H_m5!54%i94gAV|ZFc9ie=_&9OEo5`3I}v-)di}; zMCh{Ouv*pR-~36T7}vDZFlB&;U1aI%>IQtGGKA1kX*izc@CQzeL!CkB6bm3^-nn14 zAgH(pt!?c5^-VK!EZWF5HZbX{f(iXt`qwYqJ9RQI3C#a@1u96OwXd+j&DF#}fDYEC zzE|(xV`|BCs>xt#?Z{>9!Km1C4lK{yeVP2{(n3v$x?CElqt-TkfAmkRj8N%AE5l&! zV;Z!^+m%vOv&-g?2bYKu?akp_BGMS<*rOFPG08JfUJG^zp0aRo;K=^H&C0>i`S7OJ zPPl^ahRD9}M$t*m9dvO!?%SHUvLTMJZGNU<`s3DnPSo&iNV)v+aG)JlOi)Z$)Wz+Sb;lHKYx>Yh;Hc z=&~Btjk?k53vzF}uR(WwH-rJjl-VXL__hb11}@bm%ocjEc&ZP+xTay+YI!5j0XZeX zz@x3lsUNh(bBKtDlwNC7dhAUHZ>xn`Oq7}w?Aj>4dX*y(YKcxt7C2Dh!idQCNjtA( z-qC4SP*zUa^Uv6{#BgF`W8+gA(Z2wxM7-@J6$5=)MC$P5_(j-xIT=rRy>T0kVHAk1 zO0nim@y_+yXUmZ1=oRe>6dNo-e}#Dm@mQ5Jd+53d*XoP0SSKishCEo1ZV zM;)zE)jcTZByPHiB@@uMwGD z34aM5;?a+ej*5VHuAVgeUUTz1X)(1?Mh4$5QwsD2g00X3b^YxLtEVbK z(ueZ>L1kuUl3p!^Czcn{nwH(~T4g`T@=*|r5hXsSMqo5vx=4R}enO;?N2adOM#N;w zu8km~=66A96(peK<|ss=Ety0rJPB|-Ez6aBw3+?xKR(V3(YltCORg%dNX9L3t;}Sn zn=T)We>=ySr-cJtX(*|qySkYdm@(Ikg>nEV-ew8qF_jN#e z32~<6I_^}wyE5yi(|vM?dHT*q_Nen5NXzZbxj2m*N{DPEBz(Cz>ZAzj_q~8amD#2- zwkKKj3)6pQ>-UOvs&-@B^4ix2->5c+azNQk{=p5Kg$|mLw{|y zi5UqI3qdrq@He{h!BwL9FEV*1Lh-q+=lAcsSrbW~epdfqAaZ^7{{bRJLbL=tDGyNgXnt8Z(b{{6=h)N{^c@>BRtIgh$W+Q)MOa zH#J%H)0x9KqFK?@x!?Z*8jGLhVw8V?ps+A8(uv=bI`HpPQG-vANHl606k>#50-Lk? zen&(S4>AW$BizCosj&W;gr2t{*|fE7DxVpQOUT~ zo%SrYYw-HEhAA_gd-Nh4xHR+Q`)b$Pv^d*gfQ^P%nw#+|)$OHiv%(mWPZC`-5Sp zR^l;XZFRmM+~pC?Gyv!rnU@hFz{-jNkV6ddQ6pv{iy#BlL$h9m;T2C=a(`)KSNMp$ z-stR}tH9jChQHg7IfAttd(`+3zQSuw9hV>Y0687uF!>dEWbgu$1H=4mhcEa|K&+8E z^0_d)B9B(*{*$LBK7Zyu2et`A1jE@1Q=0iQqiWre%@13?c?S=O8=z!f`HG*gw!@Jf z3an7Z0Ig<`PTEebaeujadC^7oty{OSS2p%*zOk!DIc=vqb+>&CT)mb%T^WbhI!RyF z-Tic?FMp-Uh+vZ3Ia9;lsRQ_3@LG|Nm83LWzIY?a&#mfU0HtJnHU|-C@&xEJqsr>)z_!W0<*Hv_1lLJbp*;+sdtObEyh|v##%q?Hnh`&7;i46m)$_uMp<(FqnH z#ZVttyNOh4jV~B}#xOs&kW0pO=^=5vee-@=sT#k9k)QT^u|ZkZi`uvNWFQ&M-{^>l z_x)D!d*lND*8DNd8wXF(V-R_M7*owSwB^BRkFV9ypDm6)#Wute84@_FTs&^0$8!ev zt_+85Bz6}_R1>E8tvz#1iVIpeNB_ldm*8W!iQ1(D!xkVsPp5xU9f`5Q+H1QL+1D0( zxw12mju!~#b(9xcLANdY&_9G`t#e1tyd7IHI-FC+$5fF2(vLEBo@Te|Dv&@g{EJor zL|cV;mJH)mc?2^*R6{Z=HC|l7YiS6&49Ko#dLywncFK^R&hk*kA%EM6Y@dSo#lwf; z@kiNL#E6q)myH+{5e+{+C3`3deaPaX8I%Bk67EqAE8_23+O%OeLB7sqW`5Pf2Zl2g zCNmy5XW!_jO>9Chc2BF5P~y0bh?HnQV@Gy0%m~bLja-ci{&YcEhXqs(CVWBjBO-TF z)gL|Hk>F#a;1)T)WrCIEF?WCq(b~+A4atI@Vlc*~*?LzrQ&=m7OEG;O>uWQZzC}bD z7UL)Fu}izWvXYvjt*#yxe-tn5MFnk;nRkQ`928dA6M{o9J+Hi{<1Ip7D{tlH&6xQi zTm@jEj=Y0|cSiC2GOSAZFl111dnY3NV~KNx9P^PxRFmb)C^W2#GQkdo`2OY<1-bXM zA@pGBt#nqeW)=4AeJ_h=>WtSG>7C2I)x~l(Cj})({D#kh2i=5VKF|G zo`#`8LHOC_Kt@r~uiizBnCq~jqWhU^d}4l8v02=S&CMv6!;)7?{Bf zA^O>Hx#d$o(kSrNO578zY6!<7CzH>3ozYS8xyY4sXz4izf)JeT?D{))!N4Cu-UnfR_Fl+#zA7R~GDl!$^e{}D+%2+Fs4@FRB8oGaRp zxrd|5RGkOjeS`twf?SZh6qO!s3HXO+NsYN-bQ6+~9wp&&-U=1g7XxuTcgFe5X}KmSmdBb1De~>CfjOy1KIM8UIsbT%fVSz9OC?1>&rCMzf4eXq%qp-o1Cv z1<`$PPdMYC^F*`2nV6K+!xoN*hu08QBjvKH9*<)Vakl$(+&kGC4)19mQ87%;JYm{s zrv3+feM_ndVXxr-3BEr0zra_P*E_rk?}@C7udjFno*H*m+f5ugrO&t91sv#c6@OEO z*y#8B{;VxC4H+K&KdjcIomPbqNL(rn%oI>N1vf~o@399t!C*0P_GcTS2@87cszV(0 zIq$HYF-G7JWhYs{D^0e@3dozcv0nG(DPRL33_Q2}$xPTg=!|wr>5}m}AcnA~?eO3; zFK7=N+ChgF^7~akwv1klo`o|nH{(T!<9^(_2yLeFX~02c81h<~)0TU&akZXC4~FH| zXICZ-O<9lFh+ zGK03Xe36`xi1b}e7f;`xY>2WCG3v4Pu0Y1itMp6tQm7XN0200|4ci*%fzD=XCdjL% z>q<}M+*(ZaM~_^#>*lL$;`^Eb>=m`p>o1=^K@9OXugztxSlHPK(ZyOFvLA9?8uq58 zWRdAio$yWzYT~<1Z(?;j%ICI58r~HZl1VJM>-)g&Zhxps1GW>vR~|paDP=+JN3$jF zh|QrKsBxr{RE?jIZX}Q7?`(abki%WLd_u7xr=vmq>!}Z^N+@C`B0zncIhHTklPF}s zABp*hr?1?yTP$IPx5nTD)d1lh z*Wdg`a^H@~$#PWX5jo>qCd724je;tZ6_)gzCTA|)F%HJ6ay>cjj?N##F%z5RP|@=g zqC!G(k2T!f%7>>=P*tiW4txCYq4Tx`%ypgkktzIkg<}&=BLu-6S)x51GJogZ#@L{c zd+%d@{CG9L@!*L(UkdWvZI;6|&I(mUEV7qhT~kNAe3GGh$HmpPekdDM>!ah5e6(NH z@mZ`TV>RZ)A}385_6ZWa?%R1Jwr1f{b|IQP`%c<;_lyPk5NHiq)02SO1CUXEF|#tq zWM(~j8Vj+AdfAt^NTY zJ`Tw9l@aoH8FV9aaQC(JL+?ryX*lF{X-6U`M^4G$qU-5iN{<_FE7)xuEBL?mJhJBD zhO9_sbK~>l7N>K+;UBeiC)v-SXgl_XTOwov3N*^}7ZObqFVfRbv-hR!b!8#Al_DK) zOVWnG-Y-u8-7$m-i~!HsxtPFkj(sY;fESeZ_?RD_e8MI6PT0E0Y~EGY$L(NT4$pL> zN*ShvT|I;e3&)4OY|wBUtK7HvxuGES+@SQgr}QZKqc}QQbYHYE-cRdWM=sKC<5!K| zc5z?7_P(~V`UvrTgK}MRgpWUur;9t5%v}9kd!m>wC9x$edM0vA(eezOp%`*y&3F8M z$M{##&j@_t5F<1%xynN0Ui`cYbR0D`O+~YliSPV(ciEwu9N` zds`mX-`WFgp1Tvlr^U}oM&0-^(WVEzB}wr!zO}y(HM*q_s@9;Q4Ga-eU}SAlN=p)i za-%y?lRG7qr~K#{66$0}mp&`i%;?WyQr2l`!qF}Tvhx+``j9xQ* z2sMaAw>{WsM($mGDS? zOyr@&1!}G|D+qo8;#EOi0u?XIfW5)A^fZ-5q4(+VMtY7nAU41t?ccTYUg%%FC^;DG zI-z^X(A_{8ZH0!P;{%~Z1Kmjom5ssUb^leM5>F7m_5YOw{(0Q7k?z@El)~`)ML7`A zf$uYN>y+wW89*~@P5JwigAgL)`>wIkexf}mE8$!gE!!5jIh zYESwIZE)(}X@d2oX=YCEwG(Dm@(F|_U#7eKf`mz4^ZFmlVnGXuH^sMzQ&`5E4?Iv`5 zazZgtEdA)ub=ZVyU)x$AHDE3Hzt(gBSOw=r2JnPO6mYb%wmU>W2KF)n!y@Z@cW#b% zaww9q`g1)6WO!t%DR4CNbV26U)l1{;>{yrofA4$u%lm1+Rv*3pU%UCwoQ+=FOCFX# zzU1*{g5<83|F7RKpWHKF|HU%YfP_bFjy8Vl!jTpm(EB12H zX79y#=Kp=gIwfpcBCxK}lYIc(-l$T4)P!UA^f!;b-~AZwQdWB+b3Sk%T}8&HGMg>s zcEF90z&(aLW!ga@pHVx*M{RHSfsCUTmI}ZL(DQR`fo%-k4e@({n@%HsF6%xx>)T7s zg{7iXr5ZtXv1e=xXz$jgR(;@pietb{B`Vn*4}sEIy7Li+k5tsp9@4AKBJf2 z)sVvbSBM2HPkJsEyl^c2R}pBV2!jFd1kYou have no exonet connection port") + return + else + enter.exonet(src) diff --git a/infinity/code/modules/research/designs/designs_modular_computer.dm b/infinity/code/modules/research/designs/designs_modular_computer.dm index 4ced39dab5..39c708ca79 100644 --- a/infinity/code/modules/research/designs/designs_modular_computer.dm +++ b/infinity/code/modules/research/designs/designs_modular_computer.dm @@ -15,3 +15,13 @@ chemicals = list(/datum/reagent/acid = 20) build_path = /obj/item/stock_parts/computer/network_card/lambda sort_string = "VBABD" + +/datum/design/item/modularcomponent/battery/converter + name = "exonet battery converter" + id = "ecs_converter" + req_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4, TECH_POWER = 3) + build_type = IMPRINTER + materials = list(MATERIAL_STEEL = 1000, MATERIAL_GLASS = 800) + chemicals = list(/datum/reagent/acid = 20) + build_path = /obj/item/stock_parts/computer/battery_module/converter + sort_string = "VBABE"