From 9074629123d8e6d2d9f23141f89b2d49d31df764 Mon Sep 17 00:00:00 2001 From: FalseIncarnate Date: Fri, 12 Jun 2015 04:14:28 -0400 Subject: [PATCH 1/2] Aquariums and Pet Rocks! Adds fishbowls, fish tanks, and wall aquariums. - Buildable with glass - Fish Tanks and Wall Aquariums also have built-in lights that can be toggled - Wall Aquariums block atmos just like a full window or wall. Adds fish and fish/aquarium related items: - Goldfish, Clownfish, Sharks, and Baby Space Carp - Eggs can be obtained for each of these fish types and a dud egg type. - Fish food, fish nets, egg scoops, tank brushes - These are used to maintain your aquarium Adds new vendor: CritterCare! - Sells pet supplies and pet rocks! - Moved pet collars from the clothing machine into the CritterCare Adds new room/area: Pet Store! - Located between the Port Emergency Storage and Auxilary Tool Storage (across from the Vault) - Contains a CritterCare machine, 2 fishbowls, a bucket, and a sink Adjusts some Cargo order options! - New category: Vending - Contains all the vending machine refill crates - Renamed the Bartending Supply Crate to Bar Supply Crate to avoid confusion - Removes the coffee refill canisters from the Bar Supply Crate, placed them into the new Coffee Supply Crate - Adds new Clothing Supply Crate, contains refill canisters for the Hatlord 9000, Suitlord 9000, Shoelord 9000, and ClothesMate vendors - Adds new Pet Supply Crate, contains refill canisters for the new CritterCare vendor Makes the ClothesMate and CritterCare vendors constructable - Using a screwdriver on a vendor circuitboard will now have a chance to set it to the ClothesMate or CritterCare setting, in addition to the previously possible settings like Booze-o-mat and Shoelord 9000. New reagent: Fishwater - Obtained by using an empty reagent_container on any aquarium that has some water in it. - Ingesting fishwater has a 30% chance per cycle to make you vomit (what did you expect from dirty water and fish poo?) - Fishwater is good for botany, as it provides both water and nutrients to hydro trays ADDITIONAL FIXES! - Fixes the abandoned bar's misaligned area (mostly a mapper thing, will also ensure an APC in the area will properly power the entire area (and not space) - Fixes a couple instances of piping mistakes where there were manifolds and straight pipes on the same tile, preventing vent-crawlers from being able to navigate properly - One was in security, another was the back room of hydroponics - Fixed a missing pipe in the AI upload causing the vent to be disconnected from the pipe network --- _maps/map_files/cyberiad/cyberiad.dmm | 122 +-- code/datums/supplypacks.dm | 119 +-- code/game/area/Space Station 13 areas.dm | 4 + code/game/machinery/constructable_frame.dm | 4 +- code/game/machinery/vending.dm | 31 +- .../game/objects/items/stacks/sheets/glass.dm | 20 +- code/game/objects/items/toys.dm | 25 +- .../objects/items/weapons/vending_items.dm | 7 +- code/modules/fish/fish_eggs.dm | 42 ++ code/modules/fish/fish_items.dm | 52 ++ code/modules/fish/fishtank.dm | 701 ++++++++++++++++++ code/modules/hydroponics/trays/tray.dm | 4 +- code/modules/reagents/Chemistry-Reagents.dm | 18 + icons/obj/fish_items.dmi | Bin 0 -> 6806 bytes icons/obj/toy.dmi | Bin 31776 -> 32429 bytes icons/obj/vending.dmi | Bin 78765 -> 80772 bytes icons/obj/vending_restock.dmi | Bin 1224 -> 1304 bytes paradise.dme | 3 + 18 files changed, 1042 insertions(+), 110 deletions(-) create mode 100644 code/modules/fish/fish_eggs.dm create mode 100644 code/modules/fish/fish_items.dm create mode 100644 code/modules/fish/fishtank.dm create mode 100644 icons/obj/fish_items.dmi diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 6b2ea7b2792..5c2aea57011 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -979,7 +979,7 @@ "asQ" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/security/lobby) "asR" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor,/area/security/prison/cell_block/C) "asS" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/turf/simulated/floor,/area/security/prison/cell_block/C) -"asT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor,/area/security/prison/cell_block/C) +"asT" = (/obj/structure/stool/bed/chair/wood/wings{tag = "icon-wooden_chair_wings (EAST)"; icon_state = "wooden_chair_wings"; dir = 4},/turf/simulated/floor/plating,/area/maintenance/abandonedbar) "asU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/security/prison/cell_block/C) "asV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall,/area/security/prison/cell_block/C) "asW" = (/obj/machinery/newscaster{pixel_x = -28; pixel_y = 1},/obj/structure/table/woodentable,/obj/machinery/light/small/lamp/green{on = 0; pixel_x = -3; pixel_y = 8},/obj/item/weapon/reagent_containers/food/drinks/flask/detflask,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{level = 1},/turf/simulated/floor{icon_state = "grimy"},/area/security/detectives_office) @@ -1365,8 +1365,8 @@ "aAm" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/light{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/stool/bed/chair/sofa,/turf/simulated/floor{icon_state = "neutral"; dir = 1},/area/crew_quarters/fitness) "aAn" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/sign/barber{pixel_y = 30},/obj/structure/stool/bed/chair/sofa/left,/turf/simulated/floor{icon_state = "neutral"; dir = 1},/area/crew_quarters/fitness) "aAo" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{icon_state = "neutral"; dir = 1},/area/crew_quarters/fitness) -"aAp" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/space) -"aAq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/space) +"aAp" = (/obj/structure/table/woodentable,/obj/item/toy/cards/deck/black,/turf/simulated/floor/wood,/area/maintenance/abandonedbar) +"aAq" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor,/area/security/prison/cell_block/C) "aAr" = (/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "aAs" = (/obj/effect/decal/cleanable/fungus,/turf/simulated/wall,/area/maintenance/fsmaint2) "aAt" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{dir = 8; name = "Fore Starboard Solar APC"; pixel_x = -25; pixel_y = 3},/turf/simulated/floor/plating,/area/solar/auxstarboard) @@ -1522,7 +1522,7 @@ "aDn" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor,/area/crew_quarters/fitness) "aDo" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/turf/simulated/floor/plating,/area/crew_quarters/fitness) "aDp" = (/turf/simulated/wall,/area/maintenance/abandonedbar) -"aDq" = (/obj/structure/lattice,/turf/space,/area/maintenance/abandonedbar) +"aDq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/abandonedbar) "aDr" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/abandonedbar) "aDs" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/abandonedbar) "aDt" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_1_berth_hatch"; locked = 1; name = "Escape Pod"; req_access_txt = "13"},/turf/simulated/floor/plating,/area/hallway/secondary/entry) @@ -1572,8 +1572,8 @@ "aEl" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/turf/simulated/floor/plating,/area/crew_quarters/fitness) "aEm" = (/obj/structure/table,/obj/item/weapon/paper/holodeck,/turf/simulated/floor,/area/crew_quarters/fitness) "aEn" = (/turf/simulated/floor/plating/airless,/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "solar_chapel_airlock"; name = "exterior access button"; pixel_x = -25; pixel_y = -25; req_access_txt = "10;13"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk1"; icon_state = "catwalk1"},/area/solar/auxstarboard) -"aEo" = (/turf/space,/area/maintenance/abandonedbar) -"aEp" = (/obj/structure/table/woodentable,/obj/item/toy/cards/deck/black,/turf/simulated/floor/wood,/area/space) +"aEo" = (/obj/structure/table/woodentable,/obj/structure/mirror{pixel_x = -28},/obj/item/weapon/storage/pill_bottle/random_drug_bottle,/turf/simulated/floor{dir = 10; icon_state = "purple"},/area/maintenance/abandonedbar) +"aEp" = (/obj/item/weapon/stool,/turf/simulated/floor/plating{dir = 10; icon_regular_floor = "purplecorner"},/area/maintenance/abandonedbar) "aEq" = (/obj/structure/stool/bed/chair/wood/wings{tag = "icon-wooden_chair_wings (WEST)"; icon_state = "wooden_chair_wings"; dir = 8},/turf/simulated/floor/wood{broken = 1; icon_state = "wood-broken"},/area/maintenance/abandonedbar) "aEr" = (/turf/simulated/floor/wood,/area/maintenance/abandonedbar) "aEs" = (/obj/item/stack/tile/wood,/turf/simulated/floor/plating,/area/maintenance/abandonedbar) @@ -1628,8 +1628,8 @@ "aFp" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor,/area/crew_quarters/fitness) "aFq" = (/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/auxsolarstarboard) "aFr" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "solar_chapel_outer"; locked = 1; name = "Engineering External Access"; req_access = null; req_access_txt = "10;13"},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) -"aFs" = (/obj/structure/stool/bed/chair/wood/wings{tag = "icon-wooden_chair_wings (EAST)"; icon_state = "wooden_chair_wings"; dir = 4},/turf/simulated/floor/plating,/area/space) -"aFt" = (/obj/structure/stool/bed/chair/wood/wings{tag = "icon-wooden_chair_wings (WEST)"; icon_state = "wooden_chair_wings"; dir = 8},/turf/simulated/floor/wood{broken = 1; icon_state = "wood-broken"},/area/space) +"aFs" = (/obj/structure/table/woodentable,/obj/item/weapon/lipstick/random,/obj/structure/sign/poster{pixel_x = -32},/turf/simulated/floor/plating,/area/maintenance/abandonedbar) +"aFt" = (/turf/simulated/floor{dir = 4; icon_state = "whitecorner"},/area/maintenance/abandonedbar) "aFu" = (/turf/simulated/floor/wood{broken = 1; icon_state = "wood-broken"},/area/maintenance/abandonedbar) "aFv" = (/obj/item/trash/liquidfood,/turf/simulated/floor/wood,/area/maintenance/abandonedbar) "aFw" = (/obj/structure/sink/kitchen{pixel_y = 25},/obj/machinery/light_construct/small{dir = 4},/turf/simulated/floor/wood{broken = 1; icon_state = "wood-broken"},/area/maintenance/abandonedbar) @@ -1696,9 +1696,9 @@ "aGF" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/crew_quarters/fitness) "aGG" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) "aGH" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "solar_chapel_sensor"; pixel_x = 25; pixel_y = 12},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 2; frequency = 1379; id_tag = "solar_chapel_pump"},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1379; id_tag = "solar_chapel_airlock"; pixel_x = 25; req_access_txt = "13"; tag_airpump = "solar_chapel_pump"; tag_chamber_sensor = "solar_chapel_sensor"; tag_exterior_door = "solar_chapel_outer"; tag_interior_door = "solar_chapel_inner"},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) -"aGI" = (/obj/machinery/light_construct/small{dir = 8},/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/wood{broken = 1; icon_state = "wood-broken"},/area/space) -"aGJ" = (/obj/machinery/vending/autodrobe,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) -"aGK" = (/obj/item/weapon/shard,/obj/item/stack/rods,/obj/item/weapon/airlock_electronics,/turf/simulated/floor/plating{dir = 9; icon_regular_floor = "escape"},/area/space) +"aGI" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/plating{dir = 10; icon_regular_floor = "escape"},/area/maintenance/abandonedbar) +"aGJ" = (/obj/machinery/light_construct/small{dir = 1},/turf/simulated/floor/plating{dir = 4; icon_regular_floor = "whitecorner"},/area/maintenance/abandonedbar) +"aGK" = (/obj/item/trash/cheesie,/turf/simulated/floor{icon_state = "whitehall"; dir = 5},/area/maintenance/abandonedbar) "aGL" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor{dir = 1; icon_state = "escape"},/area/maintenance/abandonedbar) "aGM" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating{dir = 5; icon_regular_floor = "escape"},/area/maintenance/abandonedbar) "aGN" = (/obj/item/weapon/lighter/random,/turf/simulated/floor/wood{broken = 1; icon_state = "wood-broken"},/area/maintenance/abandonedbar) @@ -1762,10 +1762,10 @@ "aHT" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "solar_chapel_inner"; locked = 1; name = "Engineering External Access"; req_access = null; req_access_txt = "13"},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) "aHU" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) "aHV" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) -"aHW" = (/obj/item/trash/cheesie,/turf/simulated/floor{icon_state = "whitehall"; dir = 5},/area/maintenance/fsmaint2) -"aHX" = (/obj/machinery/light_construct/small{dir = 1},/turf/simulated/floor/plating{dir = 4; icon_regular_floor = "whitecorner"},/area/maintenance/fsmaint2) -"aHY" = (/turf/simulated/floor{dir = 8; icon_state = "escape"},/area/space) -"aHZ" = (/obj/structure/door_assembly,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) +"aHW" = (/obj/structure/door_assembly,/turf/simulated/floor/plating,/area/maintenance/abandonedbar) +"aHX" = (/turf/simulated/floor{dir = 8; icon_state = "escape"},/area/maintenance/abandonedbar) +"aHY" = (/obj/item/weapon/shard,/obj/item/stack/rods,/obj/item/weapon/airlock_electronics,/turf/simulated/floor/plating{dir = 9; icon_regular_floor = "escape"},/area/maintenance/abandonedbar) +"aHZ" = (/obj/effect/decal/cleanable/fungus,/turf/simulated/wall,/area/maintenance/abandonedbar) "aIa" = (/obj/item/stack/tile/plasteel,/turf/simulated/floor/plating,/area/maintenance/abandonedbar) "aIb" = (/obj/item/weapon/shard{icon_state = "small"},/obj/item/stack/rods,/turf/simulated/floor/plating{dir = 4; icon_regular_floor = "escape"},/area/maintenance/abandonedbar) "aIc" = (/obj/structure/stool,/turf/simulated/floor/wood{broken = 1; icon_state = "wood-broken"},/area/maintenance/abandonedbar) @@ -1816,9 +1816,9 @@ "aIV" = (/obj/machinery/power/solar_control{id = "auxsolareast"; name = "Fore Starboard Solar Control"; track = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) "aIW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "solar_chapel_airlock"; name = "interior access button"; pixel_x = 25; pixel_y = 25; req_access_txt = "13"},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5; icon_state = "intact"},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) "aIX" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) -"aIY" = (/turf/simulated/floor{dir = 4; icon_state = "whitecorner"},/area/maintenance/fsmaint2) -"aIZ" = (/obj/structure/table/woodentable,/obj/item/weapon/lipstick/random,/obj/structure/sign/poster{pixel_x = -32},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) -"aJa" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/plating{dir = 10; icon_regular_floor = "escape"},/area/space) +"aIY" = (/obj/machinery/vending/autodrobe,/turf/simulated/floor/plating,/area/maintenance/abandonedbar) +"aIZ" = (/obj/machinery/light_construct/small{dir = 8},/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/wood{broken = 1; icon_state = "wood-broken"},/area/maintenance/abandonedbar) +"aJa" = (/turf/simulated/wall,/area/civilian/pet_store) "aJb" = (/obj/item/stack/rods,/turf/simulated/floor{dir = 2; icon_state = "escape"},/area/maintenance/abandonedbar) "aJc" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{dir = 6; icon_state = "escape"},/area/maintenance/abandonedbar) "aJd" = (/obj/item/trash/pistachios,/obj/machinery/light_construct,/turf/simulated/floor/wood{broken = 1; icon_state = "wood-broken"},/area/maintenance/abandonedbar) @@ -1878,8 +1878,8 @@ "aKf" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) "aKg" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/terminal,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) "aKh" = (/mob/living/simple_animal/mouse,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) -"aKi" = (/obj/item/weapon/stool,/turf/simulated/floor/plating{dir = 10; icon_regular_floor = "purplecorner"},/area/maintenance/fsmaint2) -"aKj" = (/obj/structure/table/woodentable,/obj/structure/mirror{pixel_x = -28},/obj/item/weapon/storage/pill_bottle/random_drug_bottle,/turf/simulated/floor{dir = 10; icon_state = "purple"},/area/maintenance/fsmaint2) +"aKi" = (/obj/machinery/door/airlock/glass{name = "Pet Store"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/civilian/pet_store) +"aKj" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/civilian/pet_store) "aKk" = (/turf/simulated/wall/r_wall,/area/maintenance/fsmaint2) "aKl" = (/turf/simulated/shuttle/wall{icon_state = "swall_s6"; dir = 2},/area/shuttle/arrival/station) "aKm" = (/turf/simulated/shuttle/wall{icon_state = "swall12"; dir = 2},/area/shuttle/arrival/station) @@ -2487,7 +2487,7 @@ "aVQ" = (/turf/simulated/floor{dir = 2; icon_state = "asteroid"; tag = "icon-asteroid (NORTH)"},/turf/simulated/floor{tag = "icon-siding2 (NORTH)"; icon_state = "siding2"; dir = 1},/turf/simulated/floor{tag = "icon-siding1 (NORTH)"; icon_state = "siding1"; dir = 1},/area/hydroponics) "aVR" = (/obj/machinery/door/window/eastright{base_state = "left"; dir = 8; icon_state = "left"; name = "Hydroponics Pasture"; req_access_txt = "35"},/turf/simulated/floor{icon_state = "hydrofloor"},/area/hydroponics) "aVS" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor{icon_state = "hydrofloor"},/area/hydroponics) -"aVT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{level = 1},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor{icon_state = "hydrofloor"},/area/hydroponics) +"aVT" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor,/area/hallway/primary/port) "aVU" = (/turf/simulated/floor{icon_state = "hydrofloor"},/area/hydroponics) "aVV" = (/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = -31},/obj/machinery/light,/turf/simulated/floor{icon_state = "hydrofloor"},/area/hydroponics) "aVW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor{icon_state = "hydrofloor"},/area/hydroponics) @@ -2619,7 +2619,7 @@ "aYs" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/hallway/primary/port) "aYt" = (/obj/machinery/light,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/camera{c_tag = "Port Hallway"; dir = 1},/turf/simulated/floor,/area/hallway/primary/port) "aYu" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/hallway/primary/port) -"aYv" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor,/area/hallway/primary/port) +"aYv" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor,/area/hallway/primary/port) "aYw" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor,/area/hallway/primary/port) "aYx" = (/obj/machinery/door/firedoor{dir = 4; name = "Firelock East"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/hallway/primary/port) "aYy" = (/obj/machinery/door/airlock/glass{name = "Central Access"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/hallway/primary/central/nw) @@ -2693,9 +2693,9 @@ "aZO" = (/turf/simulated/wall,/area/maintenance/port) "aZP" = (/turf/simulated/wall,/area/storage/emergency2) "aZQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock{name = "Port Emergency Storage"; req_access_txt = "0"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating,/area/storage/emergency2) -"aZR" = (/obj/structure/table,/turf/simulated/floor,/area/hallway/primary/port) -"aZS" = (/obj/structure/table,/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor,/area/hallway/primary/port) -"aZT" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/obj/structure/closet/emcloset,/turf/simulated/floor,/area/hallway/primary/port) +"aZR" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1},/turf/simulated/floor{icon_state = "wood"},/area/civilian/pet_store) +"aZS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor{icon_state = "wood"},/area/civilian/pet_store) +"aZT" = (/obj/machinery/light_switch{pixel_x = -24},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor{icon_state = "wood"},/area/civilian/pet_store) "aZU" = (/obj/structure/closet/emcloset,/turf/simulated/floor,/area/hallway/primary/port) "aZV" = (/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/hallway/primary/port) "aZW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atm{pixel_x = 24},/turf/simulated/floor,/area/hallway/primary/port) @@ -2792,9 +2792,9 @@ "bbJ" = (/obj/machinery/vending/shoedispenser,/turf/simulated/floor,/area/crew_quarters/locker) "bbK" = (/turf/simulated/floor/plating,/area/maintenance/port) "bbL" = (/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/port) -"bbM" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/tank/emergency_oxygen,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/turf/simulated/floor/plating,/area/storage/emergency2) -"bbN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating,/area/storage/emergency2) -"bbO" = (/obj/machinery/light_switch{pixel_y = 28},/obj/item/device/flashlight/flare,/turf/simulated/floor/plating,/area/storage/emergency2) +"bbM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/storage/emergency2) +"bbN" = (/obj/machinery/alarm{dir = 8; pixel_x = 25; pixel_y = 0},/turf/simulated/floor/carpet,/area/civilian/pet_store) +"bbO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/carpet,/area/civilian/pet_store) "bbP" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/storage/emergency2) "bbQ" = (/turf/simulated/wall,/area/storage/tools) "bbR" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/storage/tools) @@ -2865,10 +2865,10 @@ "bde" = (/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/simulated/floor/plating,/area/maintenance/port) "bdf" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/structure/table,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/floor/plating,/area/storage/emergency2) "bdg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plating,/area/storage/emergency2) -"bdh" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plating,/area/storage/emergency2) -"bdi" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/storage/emergency2) -"bdj" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/storage/emergency2) -"bdk" = (/obj/structure/grille,/turf/simulated/floor/plating,/area/storage/emergency2) +"bdh" = (/obj/structure/cable,/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/turf/simulated/floor/carpet,/area/civilian/pet_store) +"bdi" = (/obj/item/device/flashlight/flare,/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/storage/emergency2) +"bdj" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/tank/emergency_oxygen,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/machinery/light_switch{pixel_y = 28},/turf/simulated/floor/plating,/area/storage/emergency2) +"bdk" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11; level = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; level = 1},/turf/simulated/floor,/area/hallway/primary/port) "bdl" = (/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{d2 = 4; icon_state = "0-4"},/turf/simulated/floor,/area/storage/tools) "bdm" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor,/area/storage/tools) "bdn" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor,/area/storage/tools) @@ -2938,9 +2938,9 @@ "bez" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/crew_quarters/locker) "beA" = (/obj/structure/closet/secure_closet/personal,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/camera{c_tag = "Locker Room East"; dir = 8; network = list("SS13")},/obj/machinery/light{dir = 4},/turf/simulated/floor,/area/crew_quarters/locker) "beB" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/extinguisher,/obj/item/weapon/extinguisher,/obj/item/weapon/extinguisher,/turf/simulated/floor/plating,/area/storage/emergency2) -"beC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light/small,/turf/simulated/floor/plating,/area/storage/emergency2) -"beD" = (/turf/simulated/floor/plating,/area/storage/emergency2) -"beE" = (/obj/machinery/light/small,/turf/simulated/floor/plating,/area/storage/emergency2) +"beC" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor{icon_state = "hydrofloor"},/area/hydroponics) +"beD" = (/obj/machinery/light,/turf/simulated/floor{icon_state = "wood"},/area/civilian/pet_store) +"beE" = (/obj/structure/table/woodentable,/obj/machinery/fishtank/bowl,/turf/simulated/floor{icon_state = "wood"},/area/civilian/pet_store) "beF" = (/obj/machinery/portable_atmospherics/canister/air,/obj/effect/decal/warning_stripes/white/hollow,/turf/simulated/floor/plating,/area/storage/emergency2) "beG" = (/obj/structure/extinguisher_cabinet{pixel_x = -24},/turf/simulated/floor,/area/storage/tools) "beH" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/floor,/area/storage/tools) @@ -3110,7 +3110,7 @@ "bhP" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/port) "bhQ" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/port) "bhR" = (/obj/effect/decal/cleanable/cobweb2,/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/maintenance/port) -"bhS" = (/obj/item/clothing/gloves/color/rainbow,/obj/item/clothing/shoes/rainbow,/obj/item/clothing/head/soft/rainbow,/obj/item/clothing/under/rainbow,/turf/simulated/floor/plating,/area/maintenance/port) +"bhS" = (/obj/machinery/vending/crittercare,/turf/simulated/floor{icon_state = "wood"},/area/civilian/pet_store) "bhT" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/storage/tools) "bhU" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor,/area/storage/tools) "bhV" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/obj/structure/rack{dir = 8; layer = 2.9},/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/item/device/multitool,/turf/simulated/floor,/area/storage/tools) @@ -3556,7 +3556,7 @@ "bqt" = (/obj/machinery/power/apc{cell_type = 5000; dir = 2; name = "AI Upload APC"; pixel_y = -24},/obj/structure/cable,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) "bqu" = (/obj/machinery/computer/borgupload,/obj/item/device/radio/intercom{anyai = 1; broadcasting = 0; freerange = 1; frequency = 1447; name = "Private Channel"; pixel_x = 0; pixel_y = -29},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) "bqv" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/obj/machinery/light,/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload) -"bqw" = (/obj/structure/table,/obj/machinery/door/window{base_state = "left"; dir = 8; icon_state = "left"; name = "High-Risk Modules"; req_access_txt = "20"},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/aiModule/supplied/oxygen,/obj/item/weapon/aiModule/zeroth/oneHuman,/obj/item/weapon/aiModule/reset/purge,/obj/item/weapon/aiModule/core/full/antimov,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) +"bqw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light/small,/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/storage/emergency2) "bqx" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/wall/r_wall,/area/turret_protected/ai_upload) "bqy" = (/obj/machinery/light{dir = 8},/obj/machinery/photocopier,/turf/simulated/floor/wood,/area/crew_quarters/captain) "bqz" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/wood,/area/crew_quarters/captain) @@ -5655,6 +5655,7 @@ "ceM" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; layer = 2.4; on = 1},/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass,/turf/simulated/floor/wood,/area/blueshield) "ceN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/wall,/area/ntrep) "ceO" = (/obj/structure/filingcabinet,/turf/simulated/floor/wood,/area/ntrep) +"ceP" = (/turf/simulated/floor{icon_state = "wood"},/area/civilian/pet_store) "ceQ" = (/obj/machinery/door_control{id = "representative"; name = "Privacy Shutters Control"; pixel_x = 0; pixel_y = -24; req_access_txt = "73"},/obj/machinery/computer/secure_data,/turf/simulated/floor/wood,/area/ntrep) "ceR" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; layer = 2.4; on = 1},/obj/structure/closet/secure_closet/ntrep,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/wood,/area/ntrep) "ceS" = (/obj/structure/disposalpipe/segment,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/obj/machinery/camera{c_tag = "Aft Primary Hallway 1"; dir = 4; network = list("SS13")},/turf/simulated/floor{dir = 8; icon_state = "cautioncorner"},/area/hallway/primary/aft) @@ -8106,6 +8107,7 @@ "cZU" = (/obj/structure/closet/wardrobe/black,/obj/machinery/camera{c_tag = "Aft Port Solar Access"; dir = 1; network = list("SS13")},/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/aft) "cZV" = (/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/aft) "cZW" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) +"cZX" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor{icon_state = "wood"},/area/civilian/pet_store) "cZY" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door_control{id = "maint2"; name = "Blast Control Door B"; pixel_x = -28; pixel_y = 4},/obj/machinery/door_control{id = "maint1"; name = "Blast Control Door A"; pixel_x = -28; pixel_y = -6},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "cZZ" = (/obj/structure/janitorialcart,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "daa" = (/obj/structure/table/glass,/obj/item/weapon/pen,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) @@ -8127,7 +8129,9 @@ "daq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall,/area/maintenance/electrical) "dar" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plating,/area/maintenance/electrical) "das" = (/obj/structure/table,/obj/machinery/cell_charger,/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/turf/simulated/floor/plating,/area/maintenance/electrical) +"dat" = (/obj/item/clothing/gloves/color/rainbow,/obj/item/clothing/shoes/rainbow,/obj/item/clothing/head/soft/rainbow,/obj/item/clothing/under/rainbow,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/port) "dau" = (/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) +"dav" = (/obj/structure/table,/obj/machinery/door/window{base_state = "left"; dir = 8; icon_state = "left"; name = "High-Risk Modules"; req_access_txt = "20"},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/aiModule/supplied/oxygen,/obj/item/weapon/aiModule/zeroth/oneHuman,/obj/item/weapon/aiModule/reset/purge,/obj/item/weapon/aiModule/core/full/antimov,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) "day" = (/obj/machinery/power/terminal,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/electrical) "daz" = (/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating,/area/maintenance/electrical) "daA" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/electrical) @@ -8214,11 +8218,7 @@ "dcl" = (/obj/effect/decal/cleanable/fungus,/turf/simulated/wall/rust,/area/maintenance/abandonedbar) "dcm" = (/turf/simulated/wall/rust,/area/maintenance/fsmaint2) "dcn" = (/turf/simulated/wall/r_wall/rust,/area/maintenance/fsmaint2) -"dco" = (/turf/simulated/wall/rust,/area/space) "dcp" = (/obj/structure/mineral_door/wood{name = "Abandoned Bar"},/turf/simulated/floor/wood{broken = 1; icon_state = "wood-broken"},/area/maintenance/abandonedbar) -"dcr" = (/turf/simulated/floor/plating{icon_state = "panelscorched"},/area/maintenance/abandonedbar) -"dcs" = (/turf/simulated/floor/plating,/area/maintenance/abandonedbar) -"dcu" = (/turf/space,/area/maintenance/fsmaint2) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -8306,15 +8306,15 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaoPaoPaaaaaaaaaaaaaaaaaaapBaaaasrassassassassastasuasvaswaswaswaswasxaaaaczaaaaaaaaaamlaoRaoRaoSamlaaaaaaaaaaoTaoUaoVaoWaoXaoYaoYaoYaoZaoZaoZaoZapaapbapcapcapcapdapeapfapdapcapcapcapgaphapiapjapkapiaplaphapmapmapmapnapoapmappapqaprapsaptapuapvaoIaoJapwapwamiapxapyapzamiapAamiaabasqaabaaaapCaqDapEaaaaaaapCaqDapEaaaaaaapCaqDapEaabaabaaaaabaoOaabaaaaaaamjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaoPaoPaaaaaaaaaaaaaaaaaaaczaycatlatlatlatlatlaaaatmaaaatlatlatlatlatlaabaczaaaaaaaaaamUapGaoRapHamlampapIaocapJapKapLapMapNapOapPapQaoZapRapSapTapUapVapWapXapYapZaqaaqbaqcaqdaqeapWaqfaqgaqhaqiaqjaqkaqlaqgapmaqmaqnaqoaqpapmaqqaqraqsaqtaquaqvapvaoIaqwaqxaqyaqzaqAaqAaqBamiaqCamiaabasqaabaaaapCaqDapEaaaaaaapCaqDapEaaaaaaapCaqDapEaaaaaaaaaaabasqaabaaaaaaawTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaoPaoPaaaaaaaaaaaaaaaaaaaczaaaaaaaaaaabaaaaaaaaaaxyaaaaaaaaaaabaaaaaaaaaaczaaaaaaaaaamlaqEaoRaoRaqFaqGaqHaqIaqJaqKanjaqLaqManeaneaqNaoZaqOaqPaqQaqRaqSaqTaqUaqVaqWaqXaqYaqZaqVaraarbarcardarearfargarhariarjarkarlarmarnaroapmarparqarqarrarqarsapvaoIanTanTanTanTartanTaruarvarwamiarxaxvarAaaaaaaaoOaabaabaabaabaoOaabaabaabaabaoOaabaabaabaabaxwaxxarAaabaaaamjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaoPaoPaaaaaaaaaaaaaaaaaaaczaabarBarBarBarBarBaaaatmaaaarBarBarBarBarBaabaczaaaaaaaaaamlarDarDarDamlampamqamqarEarFarGaojarHarIanearJaoZarKarLarMarNarOarParQarRarSarTarUarVarWarXarParYarjarZasaasbarZariascapmasdaseasfasgapmashasiarqarrarqasjapvaskaslasmasnasmasoaspamiamiaoJamiasqaxWaxXaryaryaxvaryaryaryaryaxvaryaryaryaryaxvaryaryaryaxYaxZaxWasqaabaaaamjaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaabaaaaIRaIRaApaAqaAqaDraDraDsaDpaDpaDqaDqaEoaEoaEoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaoPaoPaaaaaaaaaaaaaaaaaaaczaaaasrassassassassastasuasvaswaswaswaswasxaaaaczaaaaaaaaaasyaszaszaszasAasBaaaaaaaoUaoUaoUaoUaoUasCaneasDasEaoZaoZaoZasFasGapcapcapcapcasHasIapcapcapcasJasKasLasMasNasOasPariasQapmasRasSasTasUasVasWasXasYasZarqataapvatbatcatdateatfatgathatiatjatkamiayKaxvayLaabaabaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabayPayQayLaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaabaIRaIRaFsaEpaFtaEraEsaEtaEuaEqaDpaDpaEoaEoaEoaEoaEoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaoPaoPaaaaaaaaaaaaaaaaaaaabayZatlatlatlatlatlaaaatmaaaatlatlatlatlatlaabaczaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoUatnaneasDasEatoapSapTapUapVapWatpapYatqatratsattatuatvapWatwatxatyatzatAatAatBatCapmatDatEatFatGapmatHatIatJarrarqatKapvatbartatcatcatcatLanTatMatNatOamiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaabaabaabaabazDaabaabaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaIRaIRaIRaIRaGIaEraFuaEraFuaFvaEraEraEraFwaDpaEoaEoaEoaEoaEoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaoPaoPaaaaaaaaaaaaaaaaaaaczaaaaaaaabaaaaabaaaaaaazJaaaaaaaabaaaaabaaaaaaaczaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaoUatPaneatQasEaqOatRatSatTatUatVatWatXatYatZauaaubaucaudaueaufaugaugauhaugaugauiaujaukaulaumapmaunapmauoaupauqaurausautapvatbauuauvauvauvauwauxauyauzauAamiaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaabaabaabaEnaabaabaaaaaaaabaaaaabaabaaaaaaaaaaaaaaaaaaaaaaIRaAsaGJdcmaGKaGLaGMaGNaEraEraGOaGPaEraGQaDpaEoaEoaEoaEoaEoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaoPaoPaaaaaaaaaaaaaaaaaaaczaczaczaabaabaabaabaDxaDyaDxaabaabaabaabaczaczaczaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoUauBaneauCasEarKauDauEauFauGarParQauHauIauJauKauIauLarXarPauMauNauOauNauNauOauNauPapmasRauQapmauRapmauSauTauUauVauWauWauXauYauZavaavaavaavbavcavdaveaveaveaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaabaabaFqaFraFqaabaabaaaaabaaaaaaaabaabaaaaaaaaaaaaaaaaaaaIRaHXaHWaHZaHYaIaaIbaEraEraEraIcaIdaEraIeaDpaEoaEoaEoaEoaEoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaoPaoPaaaaagaaaaaaaaaaaaaabaaaaabaaaaaaaabaaaaEFaEGaEHaaaaaaaabaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavfavfavfavfavfavfaoUaoUavgaoUasEasEasEavhaviavjavkavkavlavkavlavkavkavmasJasJavnavoavpavqavoavpavqavravsavsavsavsavsapmavtavuavvavvavwavvavxavyavaavzavAavBavbavCavDavEavFavcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaabaaaaGGaGHaGGaaaaabaaaaabaaaaaaaaaaabaabaaaaaaaaaaaaaaaaIRaIZaIYdcmaJaaJbaJcaJdaEraJfaJgaJhaJiaDpaJjaDqaEoaEoaEoaEoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaoPaoPaaaaaaaaaaaaaaaaaaaabaaaaabaaaaaaaabaFJaFKaFLaFMaFNaaaaabaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavfavGavHavIavJavKavLavMavNavMavOavMavMavPavQavQavQavQavQavRavSavTavQavQavQavQavUavQavQavQavQavVavWavXavYavZawaawbawcapuawdaweawfawgawhawiawjawkavaawlawmawnavbawoawpawoawqavcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaabaHRaHSaHTaHUaHVaabaaaaabaaaaaaaaaaaaaabaabaaaaaaaaaaaaaIRaKjaKidcmaIRdckdcodcldcpaDpaDpaDpaDpaMUaDpaDqaDqaEoaEoaEoaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaaaaaaaaaaaaaaaaaaaabaabaaaaabaaaaaaaabaHaaHbaHcaHdaHaaABaABaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavfawrawsawtawuawYawvawwawxawyavVavVavVawzavVavVavVavVavVawAavVavVavVavVavVavVawBavVavVavVavVawCavVawDavVawEavVavVawFapuawGawHawIawJawfawKawjawLavaawMawNawOawPawQawRawSavFavcaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaabaIUaIVaIWaIXaIUaabaaaaabaaaaaaaabaaaaaaaabaabaaaaaaaMUaMUdcmaMUdcmaLHdcrdcsdckdcsaLHaLHaAraMUdcudcuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaABaABaABaABaABaabaabaHaaADaAGaIuaHaaBuaABaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavfawUawVawWawXctIavfawZaxaaxbaxcaxdaxeaxfaxgaxaaxcaxcaxcaxhaxcaxcaxcaxcaxcaxcaxiaxjaxkaxkaxkaxlaxmaxnaxmaxoaxpaxmaxqapuaxraxraxraxraxraxrawjawkavaaxsawmaxtavbawoaxuawoawqavcaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaabaIUaKeaKfaKgaIUaabaaaaabaaaaaaaabaaaaaaaMUazCaMUazCaMUaAraLHaLHaLHaLHaLHaLHaLHaLHaLHaNaaAsaMUdcudcuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaoPaoPaaaaaaaaaaaaaaaaaaaczaabarBarBarBarBarBaaaatmaaaarBarBarBarBarBaabaczaaaaaaaaaamlarDarDarDamlampamqamqarEarFarGaojarHarIanearJaoZarKarLarMarNarOarParQarRarSarTarUarVarWarXarParYarjarZasaasbarZariascapmasdaseasfasgapmashasiarqarrarqasjapvaskaslasmasnasmasoaspamiamiaoJamiasqaxWaxXaryaryaxvaryaryaryaryaxvaryaryaryaryaxvaryaryaryaxYaxZaxWasqaabaaaamjaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaabaaaaDpaDpaDqaDraDraDraDraDsaDpaDpaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaoPaoPaaaaaaaaaaaaaaaaaaaczaaaasrassassassassastasuasvaswaswaswaswasxaaaaczaaaaaaaaaasyaszaszaszasAasBaaaaaaaoUaoUaoUaoUaoUasCaneasDasEaoZaoZaoZasFasGapcapcapcapcasHasIapcapcapcasJasKasLasMasNasOasPariasQapmasRasSaAqasUasVasWasXasYasZarqataapvatbatcatdateatfatgathatiatjatkamiayKaxvayLaabaabaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabayPayQayLaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaabaDpaDpasTaApaEqaEraEsaEtaEuaEqaDpaDpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaoPaoPaaaaaaaaaaaaaaaaaaaabayZatlatlatlatlatlaaaatmaaaatlatlatlatlatlaabaczaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoUatnaneasDasEatoapSapTapUapVapWatpapYatqatratsattatuatvapWatwatxatyatzatAatAatBatCapmatDatEatFatGapmatHatIatJarrarqatKapvatbartatcatcatcatLanTatMatNatOamiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaabaabaabaabazDaabaabaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaDpaDpaDpaDpaIZaEraFuaEraFuaFvaEraEraEraFwaDpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaoPaoPaaaaaaaaaaaaaaaaaaaczaaaaaaaabaaaaabaaaaaaazJaaaaaaaabaaaaabaaaaaaaczaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaoUatPaneatQasEaqOatRatSatTatUatVatWatXatYatZauaaubaucaudaueaufaugaugauhaugaugauiaujaukaulaumapmaunapmauoaupauqaurausautapvatbauuauvauvauvauwauxauyauzauAamiaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaabaabaabaEnaabaabaaaaaaaabaaaaabaabaaaaaaaaaaaaaaaaaaaaaaDpaHZaIYdckaHYaGLaGMaGNaEraEraGOaGPaEraGQaDpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaoPaoPaaaaaaaaaaaaaaaaaaaczaczaczaabaabaabaabaDxaDyaDxaabaabaabaabaczaczaczaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoUauBaneauCasEarKauDauEauFauGarParQauHauIauJauKauIauLarXarPauMauNauOauNauNauOauNauPapmasRauQapmauRapmauSauTauUauVauWauWauXauYauZavaavaavaavbavcavdaveaveaveaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaabaabaFqaFraFqaabaabaaaaabaaaaaaaabaabaaaaaaaaaaaaaaaaaaaDpaGJaGKaHWaHXaIaaIbaEraEraEraIcaIdaEraIeaDpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaoPaoPaaaaagaaaaaaaaaaaaaabaaaaabaaaaaaaabaaaaEFaEGaEHaaaaaaaabaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavfavfavfavfavfavfaoUaoUavgaoUasEasEasEavhaviavjavkavkavlavkavlavkavkavmasJasJavnavoavpavqavoavpavqavravsavsavsavsavsapmavtavuavvavvavwavvavxavyavaavzavAavBavbavCavDavEavFavcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaabaaaaGGaGHaGGaaaaabaaaaabaaaaaaaaaaabaabaaaaaaaaaaaaaaaaDpaFsaFtdckaGIaJbaJcaJdaEraJfaJgaJhaJiaDpaJjaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaoPaoPaaaaaaaaaaaaaaaaaaaabaaaaabaaaaaaaabaFJaFKaFLaFMaFNaaaaabaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavfavGavHavIavJavKavLavMavNavMavOavMavMavPavQavQavQavQavQavRavSavTavQavQavQavQavUavQavQavQavQavVavWavXavYavZawaawbawcapuawdaweawfawgawhawiawjawkavaawlawmawnavbawoawpawoawqavcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaabaHRaHSaHTaHUaHVaabaaaaabaaaaaaaaaaaaaabaabaaaaaaaaaaaaaDpaEoaEpdckaDpdckdckdcldcpaDpaDpaDpaDpaDpaDpaabaabaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaaaaaaaaaaaaaaaaaaaabaabaaaaabaaaaaaaabaHaaHbaHcaHdaHaaABaABaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavfawrawsawtawuawYawvawwawxawyavVavVavVawzavVavVavVavVavVawAavVavVavVavVavVavVawBavVavVavVavVawCavVawDavVawEavVavVawFapuawGawHawIawJawfawKawjawLavaawMawNawOawPawQawRawSavFavcaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaabaIUaIVaIWaIXaIUaabaaaaabaaaaaaaabaaaaaaaabaabaaaaaaaMUaDpdckaDpdckaLHaKaaLHdcmaLHaLHaLHaAraMUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaABaABaABaABaABaabaabaHaaADaAGaIuaHaaBuaABaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavfawUawVawWawXctIavfawZaxaaxbaxcaxdaxeaxfaxgaxaaxcaxcaxcaxhaxcaxcaxcaxcaxcaxcaxiaxjaxkaxkaxkaxlaxmaxnaxmaxoaxpaxmaxqapuaxraxraxraxraxraxrawjawkavaaxsawmaxtavbawoaxuawoawqavcaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaabaIUaKeaKfaKgaIUaabaaaaabaaaaaaaabaaaaaaaMUazCaMUazCaMUaAraLHaLHaLHaLHaLHaLHaLHaLHaLHaNaaAsaMUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaBAaBzaBAaaaaaaaaaaABaABaABaABaCCaBGaCDaABaaaaaaaHaaJtaCEaJvaDzayYaABaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavfavfavfavfavfavfavfaxzaxzaxAaxBaxCaxDaxEaxFaxGaxHaxIaxGaxJaxGaxKaxKaxKaxKaxKaxKaxLaxKaxKaxMaxNaxOaxPaxzaxQaxzaxRaxzaxzaqzaBlanTanTanTanTaxSawkavaaxTawmaxUavbaxVawRawSavFavcaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaBAaChaBAaaaaabaIUaAtaLvaLwaIUaKkaKkaKkaKkaKkaAuaAwaAvaMUaBiaLHaNaaAsdcmaLHdcmdcmdcmaMUaBkaMUaMUaMUaMUaMUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaayaaybayaaaaaaaaabaABaBwaEIaEEayYaFOayYaABaGZaHeaHaaHaaHfaKBaDzayYaABaABaHhaHgaHeaABaABaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxAaydayeayfaxEaygaxGayhayiayjaykaylaymaynayoaypayqayraysaytayuayvavVavWaywayxayyayzayzayzayzayzayAayzayzayzayzayBayCayDayEayFayGayHayIayJawoawqavcaabayMayNayNayNayNayNayOaabaabaaaaaaaaaaaaaDkaCoaDkaaaaKkaIUaIUaMXaMYaIUaCqaLHaLHaLHdcmaBFaLHaCsaMUaLHaLHaLHaDbdcmaLHaMUaDhaDfaMUaLHaDiaMUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayRaySayTaaaayUayVayWaabaabayXayYayXaaaaaaaabaABaIqaItaIsaIyaIxaCraABaJrayYaMfaJsaKwaJuaJuaJuaJuaJuaJuaJuaJuaKxaABaaaaKyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazaazbazcazdaxEaygaxGazeazfazgaykazhaziazjazjazjazjazjaysazjazkavQavVavWaxzazlazmaznaznaznaznazoazpazqazqazqazqazqazqazrazsaztazuazvazwazxazyavcavcazzazAazBazBazBazBazBazAazzaabaaaaaaaaaaaaaHFaGDdbZaaaaKkaCBaEfaEcaEhaLHaLHaLHdcmaLHdcmaEiaLHaLHaMUaLHaEkaEjaEiaBkaLHaMUaFjaCFaMUaLHaDjaMUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -8334,21 +8334,21 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPsaLMaLMaKnaLTaNxaLMaNxaPtaNxaLMaNxaLTaNyaNzaIhaGTaPuaJqaJqaPvaPwcZFaPwaJqczPczPczPczPcZHcZGcZJcZIczPaPCaPDaPEaMmaMmaPFaMmaPGaPHaPIaJwaaaaIAaIAaPJaPKaPJaIAaIAaaaaFPaFUaFVaPLaPMaPNaNYaPOaFVaCJaERaFWaFXaPPaKYaIGaFXaIHaFXaIGaLaaPQaERaERaERaPRaPSaPTaPUaPVaPWamiamiaPXaPYaPZaQaaILaQbaJQaILaQcaILaQdaILaQeaQfaQgaQhaQiaQjaQkaQlaQmaQnaQoaQpaQqaQoaQoaQraQoaQlaQsaQlaLFdbQaQldbRdbTdbSaQwdbUaQxdbVdbXdbWdbYaQBaLEaQCaQDaQEaQFaQGaQHaQIaQJaOUaQKaQLaOVaQMaQNaQOaQPaPbaQQaPdaPeaPfaUndcaaLJaQSaQTaQTaQUaPpaPpaPpaPpaPqaPraaaaaaaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLUaQVaQWaNwaLTaNxaLMaNxaLMaNxaLMaNxaLTaNyaNzaIhaGTaQXaQYaQZaRaaRbaRbaFzaRdaReaRfaRgcZKcZMcZLcATcZNczPaRlaRmaRnaRoaRpcZOaRraRsaRtaRuaJwaaaaabaaaaRvaRwaRvaaaaabaaaazEaFUaFVaRxaRyaRzaRAaRBaFVaCJaERaRCaRDaHoaREaRFaHraRGaHraRHaRIaRJaERaRKaRLaRMaRNaROaRPaRQaRRaaaaaaaPXaRSaRTaRUaILaRVaRWaJQaJQaRXaJQaJQaJQaRYaINaRZaINaSaaSbaINaScaINaSdaSeaSfaSgaShaSiaSdaSjaSkaSlaSmaSlaSlaSlaSlaSnaSlaSlaSoaSldcbaUbaSlaSqaLHaOQaSraQFaSsaStaSuaSvaSwaSxaSyaSzaOVaSAaSBaSCaSDaSEaQQaPdaPeaPfaSFaSGaLJaSHaQTaQTaQUaPpaPpaPpaPpaPqaPraaaaaaaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSIaSJaKmaLKaLTaLMaSKaSLaLMaLMaSMaSKaLTaLUaSNaSOaGTaSPaSQaSRaSSaSRaSRaSRaSRaSRaSTaFzczPcZQcZPcZQczPczPaSVaSWaSXaJzaJzaJzaJzaSVaSYaSZaJwaTaaTbaTbaTcaTdaTeaTbaTbaTfaTgaThaFVaTiaFVaTjaTkaTlaFVaTmaERaERaERaERaTnaToaTpaTqaTpaTraTsaERaERaTtaRNaRNaRNaRNaTuaTvaTwaTxaTyaPXaTzaRTaTAaILaILaILaILaILaILaILaINaINaRYaTBaTCaTDaTEaTFaTGaTHaTIaSdaTJaTKaTLaTMaTNaSdaTOaTPaTQaTRaTQaTSaTTaTUaTVaTWaTXaTYaTZdccaVUaSlaUcaOHaUdaUeaUfaSsaUgaSuaSvaUhaOVaUiaUjaUkaUlaUmaQPaQPaOVaOVaPdaPeaPfaUnaUoaLJaUpaUqaUraUsaUtaUuaPpaPpaUvaPraaaaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSIaKmaKnaKmaKmaKoaKpaKmaKmaKnaSJaUwazEaUxaSPaEvaUyaUyaUzaUyaUAaAyaUBaUCaFzaUDaYgaUGaUGaUHaUIaUGaUJaUGaUGaUGaUKaUGaUGaULaUMaUNaUOaUPaUQaUOaURaUOaUOaUOaUOaUSaUTaUUaUGaUGaUVaUWaUXaUYaUZaVaaVbaVcaVdaVeaVfaVfaVfaVfaVfaVfaVgaVhaViaVjaVkaVlaVmaVnaVoaVpaRNaRNaVqaVraVsaVraVsaVtaVuaVvaVwaVxaVyaINaVzaVAaVBaVCaVDaVDaVEaVFaVGaVHaSdaVIaVJaVKaVKaVLaSdaVMaVNaVOaVPaVQaVQaVRaVSaVTaVUaVVaVWaVXaVYaVUaSlaSqdauaOQaWbaWcaWcaWdaWeaWcaWfaOVaWgaWhaOVaWiaWjaQPaWkaOVaWlaWmaWnaPfaNqaNqaLJaWoaNsaWpaWqaNsaNsaNsaNsaNsabCacUaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEvaWraWsaJlaJlaJlaJlaWtaWraEvaJnazEaWuaWvaWwaWxaWyaWzaWzaWAaAyaWBaUCaWCaWDaYgcZRaWFaWGaWHaWHaWIaWJaWJaWJaWKaWLaWLaWMaWNaWOaWHaWHaWPaWQaWRaWSaWTaWTaWUaWTaWVaWQaWQaWQaWWaUWaUXaUYaUZaUZaUZaUZaWXaUZaUZaUZaUZaUZaUZaWYaWZaXaaXbaXcaXdaXeaXfaXgaXhaXiaXiaXiaXjaXkaXkaXkaXlaVyaVyaVyaXmaXnaVyaINaXoaXpaVDaVDaXqaVDaXraXsaVGaXtaSdaXuaXvaXwaXxaXyaSdaXzaXAaXBaXCaXDaXEaSlaXFaXGaXFaSlaSlaSlaSoaSlaSlaSqaLHaOQaXHaQFaQFaQFaXIaQFaXJaOVaOVaOVaOVaOVaOVaOVaXKaOVaPfaPfaPeaPfaXLaXMaNqaXNaXOaXPaXQaXRaXSaXTaXUaXVaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaIfazEaWwaCzaIhaXWaXXaXYaXZaIhaCzaYaaYbazEaYcaSPaWwaYdaYeaWzaWzaWAaAyaYfaUCaFzaWDaYgaUGaYhaYiaUGaUGaYjaYkaYlaUGaYmaYnaYoaYnaYpaYqaYnaYnaYraYnaYnaYsaYtaYnaYuaYnaYvaUGaUGaUGaYwaYxaYyaYzaYAaYBaYAaYCaYDaYCaYCaYCaYCaYCaYCaYEaYFaYGaYGaYGaYGaYHaYGaYIaYJaYGaYGaYKaYLaYMaYMaYMaYMaYMaYMaYMaYNaVyaVyaINaYOaYPaYQaYRaYRaYSaYTaXsaVGaYUaSdaSdaSdaSdaSdaYVaSdaYWaYXaYYaYZaTQaZaaSlaZbaZcaZdaZeaZfaZgaZhaZiaSlaSqaWaaOQaZjaZkaQFaZlaZmaQFaZnaZnaOQaZoaZpbeKaNqaZraZsaZtaPfaPfaZuaZvaNqaZwaNqaZxaXOaZyaZzaZAaXOaXOaZBaZCaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaAyaFxaWraSOaGTaFzaFzaGUaSOaWraSOaZDaZEaZFaZGaFxaZHaZHaUzaZHaUAaAyaZIaUCaFzaAyaSUaSUaZJaZKaZKaZKaZKaZKaZKaZLaZMaZKaZKaZKaZKaZKaZKaZNaZOaZPaZPaZQaZPaZPaZPaZRaZSaZTaZUaZVaZWaSUaZXaZXaZYaZYaZYaZZbaabaabaabaabaabaababbacbadbaebafbaebagbagbahbaibajbakbalbacbamaTxaTxaTxaTxaTxaTxbanbaobaobaoaINbapbaqbarbarbarbarbasbatbaubavbawbaxbcjbazbaAbaBaSdaSdbaCbaDbaEbaFbaGaSlbaHbaIbaJbaJbaJbaJbaKbaLaSlbaMdcjaOQbaNaQFaZlaZlaZmaZlaQFbaOaOQbaPbaQbaRaNqaPfbaSbaTbaUbaUbaVbaWbaXbaYbaZbbabbbbbcbbdaXQaXOaXObbeaZCaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtdcdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEvbbfaFzbbgbbhbbibbjbbkbblbbjbbmbbnbbjbbjbbobbpbbqbbrbbsbbsbbsbbtbbsbbubbvaAybbwbbxbbyaZKbbzbbAbbBbbCbbDbbBbbEbbFbbGbbHbbIbbJaZKbbKbbLaZPbbMbbNbbObbPaZPaZPaZPbbQbbQbbRbbSbbQbbQbbQbbTaUZaVebbUaaaaaaaaaaaaaaaaaaaaabacbbVbbWbbXbbYbbZbcabcbbccbcdbcebcfbacaaaaaaaaaaaaaaaaaaaaabcgbchaVybciaINcrgbaqbavbavbavbavbavbckbclbavbavbavbaybcmbcmbcnbcobcpbcqbcrbcsbctbcuaSlbcvbcwbcxbcybcybcxbczbcAaSlaSqaLHaOQbcCbcDaQFaZlaZmaQFbcEbcEaOQaOQbcFaOQaNqbcGaZsaZvbcHbcHbcIaZvaNqaNqaNqbcJaXObcKbcKbcLbcKaXObcMaZCaabaaaaaabcNaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFxbcObcPbcObcObcObcObcObcObcPbcObcObcQaFzbcRbcSbcTaFzbcUaFzbcVbcWbcXbcYbcZaAybbxbbxbdaaZKbdbbbBbbBbbBbbBbbBbbEbdcbbBbbBbbBbddaZKbbKbdeaZPbdfbdgbdhbdhbdibdjbdkbbQbdlbdmbdnbdobdpbdqbbTaUZaVebbUaaaaaaaaaaaabacbacbacbacbdrbdsbdtbdubdvbdwbdxbdybdzbdAbdBbacbacbacbacaaaaaaaaaaaabcgbchaVyaVybdCbavbdDbdEbdFbavbdGbdHaLmbdIbdJbdKbavbaybdLbcmbdMbdNbcmbdObdPbdQbdRbcmbdSbdTbdUbcxbcybcybcxbdVbdWaSlaSqdauaOQbaNaQFaZlaZlaZmaZlaQFaQFbdYbdZaQFbeaaNqbebbecbedbcHbcHbeebedbefaNqbegbehaXObeibeibejbeiaXObbebekbelbembembenaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazEazEbeobepbepbepbepbepbepbepaInazEaAybeqberbesbesbesbesbesbesbetbesbesbesaAybbxbbKbeuaZKbevbbBbbBbewbexbeybezbewbbBbbBbbBbeAaZKbbKbbLaZPbeBbeCbeDbeDbeEbeFbdkbbQbeGbeHbeIbeJbnEbeLbeMbeNaVebeObePbeQbacbacbacbeRbeSbeTbeUbeVbeVbeWbeXbeVbeYbeVbeZbfabfbbfcbfdbfebacbacbacbeQbambffbchaVyaVyaINbfgbdDbdJbdFbavbfhbfibavbfjbfkbdKbavbaybcmbcmbflbfmbfnbfobfpbfqbfrbcmbfsbdTbftbcxbcybcybfubfvbdWaSlaSqaLHaOQbfxbfybfzaZlaZmbfAaQFaQFbfBaQFbfCbfDaNqbfEbfFbfGbcHbcHbfHbfGbfIaNqbfJbehaXOaXOaXOaXQaXOaXObfKbfLbfMbfNbfObfPaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQaabbfRaIiaFBbfSbesbfTbfUbfVbfWbfXbfYbfZbgabesbjjbgcbgdbgeaZKbgfbbBbbBbewbeybggbghbewbbBbbBbgibgjaZKbbKbbLaZPaZPbgkaZPaZPaZPaZPaZPbbQbglbeJbgmbeJbgnbeLbbTbgoaVeaVfaVfbgpbgqbgrbacbgsbdtbgtbeVbeVbgubgvbgwbgxbgwbgybgzbgAbgBbgCbgDbgEbacbgFbgqbgGbgHbgIbchaVyaVybdCbavbgJbavbavbavbgKbgLbavbfjbgMbdKbavbaybcmbcmbgNbgObgPbgQbgRbgSbfrbgTaSlbgUbftbcxbcybcybcxbfvbgVaSlbgWbgXaOQbgYaOQaOQbgZaZmbhabhbaQFbhcbhdaUgbhebaZbhfbhgbhhbhibhibhjbhkbhlbaZbhmbhnaXObhoaXOaXQaXOaXObhpbhqbelbembembhraNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbhsbhtbhuaGTbcRbesbfTbhvbhwbfTbhxbhybhzbhAbesbhBbhCbhDaZOaZKbhEbhFbhGbhHbhIbhJbhKbhLbhLbhLbhMbhNaZKbbKbgcbhObhPbhQbbKbbKbhRaZObhSbbQbhTbhUbhVbhWbhXbhYbbTbgoaUZaUZaUZbhZbiabibbicbidbiebeVbifbigbihbiibijbikbilbimbinbiobipbidbiqbirbisbitbiubivbiwbixbiyaVybizaINbavbiAbiBbdKbavbiCbiDbavbiEbiFbdKbavbaybcmbcmbcmbcnbcmbiGbcmbgSbfrbiHaSlbiIbftbcxbcybcybcxbfvbiJaSlbiKbiLbiMbiNbiObiPbiQbiRbiSbiSbiSbiSbiSbiSbiTbiUbiVbcHbcHbcHbcHbcHbcHbiWbiXbiYbehaXOaXOaXOaXQaXOaXObiZaZCbjabjabjaaZCaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbjbbjcbjdbjebcRbesbjfbfTbjgbjgbjgbjhbfTbjibesbqbbjkbhDbjlbjlbjlbjlbjmbjlbjnbbBbjobjpbjqbjqbjrbjsaZKbjtbjubjvbjwbjxbjybjybjzbjAbjBbjCbjCbjCbjCbjCbjDbbQbbTbjEbjFbjGbjHbjIbjJbjKbjLbjMbikbjNbjObjPbjPbjPbjPbjQbjPbjRbjSbjTbjUbjNbjVbjWbacbjXbjYbjZbkabkbbkcaVyaVybdCbavbkdbavbavbavaOsbavbavbkebkebkfbkfbkgbcmbcmbkhbkibcmbcmbcmbkjbkkbklaSlbdWbftbcxbcxbcxbcxbfvbkmaSlbknbkobkobkpbkobkqaZlaZlaZlaZlbkraZlaZlaZlbksbiXbcHbcHbcHbcHbcHbcHbcHbiWbiXbiYbehaXObcKbcKbcLbcKaXObktaZCbkubkvbkwaZCaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSIaKmaKnaKmaKmaKoaKpaKmaKmaKnaSJaUwazEaUxaSPaEvaUyaUyaUzaUyaUAaAyaUBaUCaFzaUDaYgaUGaUGaUHaUIaUGaUJaUGaUGaUGaUKaUGaUGaULaUMaUNaUOaUPaUQaUOaURaUOaUOaUOaUOaUSaUTaUUaUGaUGaUVaUWaUXaUYaUZaVaaVbaVcaVdaVeaVfaVfaVfaVfaVfaVfaVgaVhaViaVjaVkaVlaVmaVnaVoaVpaRNaRNaVqaVraVsaVraVsaVtaVuaVvaVwaVxaVyaINaVzaVAaVBaVCaVDaVDaVEaVFaVGaVHaSdaVIaVJaVKaVKaVLaSdaVMaVNaVOaVPaVQaVQaVRaVSbeCaVUaVVaVWaVXaVYaVUaSlaSqdauaOQaWbaWcaWcaWdaWeaWcaWfaOVaWgaWhaOVaWiaWjaQPaWkaOVaWlaWmaWnaPfaNqaNqaLJaWoaNsaWpaWqaNsaNsaNsaNsaNsabCacUaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEvaWraWsaJlaJlaJlaJlaWtaWraEvaJnazEaWuaWvaWwaWxaWyaWzaWzaWAaAyaWBaUCaWCaWDaYgcZRaWFaWGaWHaWHaWIaWJaWJaWJaWKaWLaWLaWMaWNaWOaWHaWHaWPaWQaWRaWSaWTaWTaWUbdkaWVaWQaWQaWQaWWaUWaUXaUYaUZaUZaUZaUZaWXaUZaUZaUZaUZaUZaUZaWYaWZaXaaXbaXcaXdaXeaXfaXgaXhaXiaXiaXiaXjaXkaXkaXkaXlaVyaVyaVyaXmaXnaVyaINaXoaXpaVDaVDaXqaVDaXraXsaVGaXtaSdaXuaXvaXwaXxaXyaSdaXzaXAaXBaXCaXDaXEaSlaXFaXGaXFaSlaSlaSlaSoaSlaSlaSqaLHaOQaXHaQFaQFaQFaXIaQFaXJaOVaOVaOVaOVaOVaOVaOVaXKaOVaPfaPfaPeaPfaXLaXMaNqaXNaXOaXPaXQaXRaXSaXTaXUaXVaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaIfazEaWwaCzaIhaXWaXXaXYaXZaIhaCzaYaaYbazEaYcaSPaWwaYdaYeaWzaWzaWAaAyaYfaUCaFzaWDaYgaUGaYhaYiaUGaUGaYjaYkaYlaUGaYmaYnaYoaYnaYpaYqaYnaYnaYraYnaYnaYsaYtaYnaYuaYsaYvaVTaUGaUGaYwaYxaYyaYzaYAaYBaYAaYCaYDaYCaYCaYCaYCaYCaYCaYEaYFaYGaYGaYGaYGaYHaYGaYIaYJaYGaYGaYKaYLaYMaYMaYMaYMaYMaYMaYMaYNaVyaVyaINaYOaYPaYQaYRaYRaYSaYTaXsaVGaYUaSdaSdaSdaSdaSdaYVaSdaYWaYXaYYaYZaTQaZaaSlaZbaZcaZdaZeaZfaZgaZhaZiaSlaSqaWaaOQaZjaZkaQFaZlaZmaQFaZnaZnaOQaZoaZpbeKaNqaZraZsaZtaPfaPfaZuaZvaNqaZwaNqaZxaXOaZyaZzaZAaXOaXOaZBaZCaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaAyaFxaWraSOaGTaFzaFzaGUaSOaWraSOaZDaZEaZFaZGaFxaZHaZHaUzaZHaUAaAyaZIaUCaFzaAyaSUaSUaZJaZKaZKaZKaZKaZKaZKaZLaZMaZKaZKaZKaZKaZKaZKaZNaZOaZPaZPaZQaZPaJaaKjaKiaJaaJaaZUaZVaZWaSUaZXaZXaZYaZYaZYaZZbaabaabaabaabaabaababbacbadbaebafbaebagbagbahbaibajbakbalbacbamaTxaTxaTxaTxaTxaTxbanbaobaobaoaINbapbaqbarbarbarbarbasbatbaubavbawbaxbcjbazbaAbaBaSdaSdbaCbaDbaEbaFbaGaSlbaHbaIbaJbaJbaJbaJbaKbaLaSlbaMdcjaOQbaNaQFaZlaZlaZmaZlaQFbaOaOQbaPbaQbaRaNqaPfbaSbaTbaUbaUbaVbaWbaXbaYbaZbbabbbbbcbbdaXQaXOaXObbeaZCaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtdcdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEvbbfaFzbbgbbhbbibbjbbkbblbbjbbmbbnbbjbbjbbobbpbbqbbrbbsbbsbbsbbtbbsbbubbvaAybbwbbxbbyaZKbbzbbAbbBbbCbbDbbBbbEbbFbbGbbHbbIbbJaZKbbKbbLaZPbdjbdgbdiaJabdhbbObbNaJabbQbbRbbSbbQbbQbbQbbTaUZaVebbUaaaaaaaaaaaaaaaaaaaaabacbbVbbWbbXbbYbbZbcabcbbccbcdbcebcfbacaaaaaaaaaaaaaaaaaaaaabcgbchaVybciaINcrgbaqbavbavbavbavbavbckbclbavbavbavbaybcmbcmbcnbcobcpbcqbcrbcsbctbcuaSlbcvbcwbcxbcybcybcxbczbcAaSlaSqaLHaOQbcCbcDaQFaZlaZmaQFbcEbcEaOQaOQbcFaOQaNqbcGaZsaZvbcHbcHbcIaZvaNqaNqaNqbcJaXObcKbcKbcLbcKaXObcMaZCaabaaaaaabcNaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFxbcObcPbcObcObcObcObcObcObcPbcObcObcQaFzbcRbcSbcTaFzbcUaFzbcVbcWbcXbcYbcZaAybbxbbxbdaaZKbdbbbBbbBbbBbbBbbBbbEbdcbbBbbBbbBbddaZKbbKbdeaZPbdfbbMbeFaJaaZTaZSaZRaJabdlbdmbdnbdobdpbdqbbTaUZaVebbUaaaaaaaaaaaabacbacbacbacbdrbdsbdtbdubdvbdwbdxbdybdzbdAbdBbacbacbacbacaaaaaaaaaaaabcgbchaVyaVybdCbavbdDbdEbdFbavbdGbdHaLmbdIbdJbdKbavbaybdLbcmbdMbdNbcmbdObdPbdQbdRbcmbdSbdTbdUbcxbcybcybcxbdVbdWaSlaSqdauaOQbaNaQFaZlaZlaZmaZlaQFaQFbdYbdZaQFbeaaNqbebbecbedbcHbcHbeebedbefaNqbegbehaXObeibeibejbeiaXObbebekbelbembembenaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazEazEbeobepbepbepbepbepbepbepaInazEaAybeqberbesbesbesbesbesbesbetbesbesbesaAybbxbbKbeuaZKbevbbBbbBbewbexbeybezbewbbBbbBbbBbeAaZKbbKbbLaZPbeBbqwbbPaJabeEcePcZXaJabeGbeHbeIbeJbnEbeLbeMbeNaVebeObePbeQbacbacbacbeRbeSbeTbeUbeVbeVbeWbeXbeVbeYbeVbeZbfabfbbfcbfdbfebacbacbacbeQbambffbchaVyaVyaINbfgbdDbdJbdFbavbfhbfibavbfjbfkbdKbavbaybcmbcmbflbfmbfnbfobfpbfqbfrbcmbfsbdTbftbcxbcybcybfubfvbdWaSlaSqaLHaOQbfxbfybfzaZlaZmbfAaQFaQFbfBaQFbfCbfDaNqbfEbfFbfGbcHbcHbfHbfGbfIaNqbfJbehaXOaXOaXOaXQaXOaXObfKbfLbfMbfNbfObfPaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQaabbfRaIiaFBbfSbesbfTbfUbfVbfWbfXbfYbfZbgabesbjjbgcbgdbgeaZKbgfbbBbbBbewbeybggbghbewbbBbbBbgibgjaZKbbKbbLaZPaZPbgkaZPaJabeEbeDbhSaJabglbeJbgmbeJbgnbeLbbTbgoaVeaVfaVfbgpbgqbgrbacbgsbdtbgtbeVbeVbgubgvbgwbgxbgwbgybgzbgAbgBbgCbgDbgEbacbgFbgqbgGbgHbgIbchaVyaVybdCbavbgJbavbavbavbgKbgLbavbfjbgMbdKbavbaybcmbcmbgNbgObgPbgQbgRbgSbfrbgTaSlbgUbftbcxbcybcybcxbfvbgVaSlbgWbgXaOQbgYaOQaOQbgZaZmbhabhbaQFbhcbhdaUgbhebaZbhfbhgbhhbhibhibhjbhkbhlbaZbhmbhnaXObhoaXOaXQaXOaXObhpbhqbelbembembhraNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbhsbhtbhuaGTbcRbesbfTbhvbhwbfTbhxbhybhzbhAbesbhBbhCbhDaZOaZKbhEbhFbhGbhHbhIbhJbhKbhLbhLbhLbhMbhNaZKbbKbgcbhObhPbhQbhRaJaaJaaJaaJaaJabhTbhUbhVbhWbhXbhYbbTbgoaUZaUZaUZbhZbiabibbicbidbiebeVbifbigbihbiibijbikbilbimbinbiobipbidbiqbirbisbitbiubivbiwbixbiyaVybizaINbavbiAbiBbdKbavbiCbiDbavbiEbiFbdKbavbaybcmbcmbcmbcnbcmbiGbcmbgSbfrbiHaSlbiIbftbcxbcybcybcxbfvbiJaSlbiKbiLbiMbiNbiObiPbiQbiRbiSbiSbiSbiSbiSbiSbiTbiUbiVbcHbcHbcHbcHbcHbcHbiWbiXbiYbehaXOaXOaXOaXQaXOaXObiZaZCbjabjabjaaZCaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbjbbjcbjdbjebcRbesbjfbfTbjgbjgbjgbjhbfTbjibesbqbbjkbhDbjlbjlbjlbjlbjmbjlbjnbbBbjobjpbjqbjqbjrbjsaZKbjtbjubjvbjwbjxbjzbjAbjBdatbjBbjCbjCbjCbjCbjCbjDbbQbbTbjEbjFbjGbjHbjIbjJbjKbjLbjMbikbjNbjObjPbjPbjPbjPbjQbjPbjRbjSbjTbjUbjNbjVbjWbacbjXbjYbjZbkabkbbkcaVyaVybdCbavbkdbavbavbavaOsbavbavbkebkebkfbkfbkgbcmbcmbkhbkibcmbcmbcmbkjbkkbklaSlbdWbftbcxbcxbcxbcxbfvbkmaSlbknbkobkobkpbkobkqaZlaZlaZlaZlbkraZlaZlaZlbksbiXbcHbcHbcHbcHbcHbcHbcHbiWbiXbiYbehaXObcKbcKbcLbcKaXObktaZCbkubkvbkwaZCaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbkybkzbhubkAaZGbkBbfTbkCbjgbjgbjgbjhbkCbfTbesbkDbkEbhDbjlbkFbkGbkHbkIbjlbkJbkKbkLaZKbkMbkNbkObkPaZKbbKbkQbkRbkRbkSbkRbkRbkRbkRbkTbkUbkUbkUbkVbkUbkWbkXbkYbkZblablbblbblbblbblbblbblcbldblcbjPbjPbleblfblgblhblibljbleblkbjPbllblmbllbllbllbllbllbllbllbkcaVyaVyaINblnblobavblpbavblqbavblrblsbltbkfbluaSdblvblwaSdaSdblxblyblyblyaSdaSdaSlblzblAblBblBblBblBblAblCaSlblDbkobkobkpblEaOQblFblGblHblIblJblKblLblMblNaNqblOaPfblPbcHbcHblPaPfblQaNqblRbehaXObeibeibejbeiaXObiZaZCbjabjabjaaZCaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQblSaFxblTblUblVbesbhvbhvbhvbfTblWblXblYblZbesbmabmbbhDbjlbmcbjlbmdbmebjlbmfbmgbmhaZKbkMbkNbkObmiaZKbbKbkQbkRbmjbmkbmlbmmbmnbkRbmobmpbmqbmrbkXbkXbkXbkXbmsbmtbmublbbmvbmwbmxbmybmzbmAbmBbmCbjPbmDblgbmEbmFbmGbmFbmEblgbmHbjPbmIbmJbmKbmLbmMbmNbmObmPbllbmQbmRbmRbmSaINaINaINaINbmTbdCbmTbmUaINaSbaINaINaSdaSdaSdaSdbmVbmWbmWbmWbmWbmXbmYaSlbmZbnabmZbnbbnbbmZbnabmZaSlblDbkobkobncblEaOQaOQaOQaOQaOQbgYaOQaOQaOQaOQaNqbndbnebnfbnfbnfbnfbngaNqaNqbnhbniaXOaXOaXOaXQaXOaXObhpbekbnjbembembnkaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIfazEbnlaJlbhuaAyaAyaAyaAyaAyaAybnmbnnbesbesbesbesbesbesbnobesbesbesbnpbnpbnqbjlbnrbnsbmdbntbjlbnubnvbnuaZKbkMbkNbkObnwaZKbbKbkQbkRbnxbnybnzbmmbnzbkRbmobnAbnBbnCbnDbEVbnFbkXbnGbnHbmubnIbnJbnKbnLbnMbnMbnLbnNbnObjPbnPblgblgbnQbnRbmFbmEblgbnSbjTbnTbnUbnVbnWbnXbnYbnVbnZbllboabobbocbodboebofbogbohbohbohbohbohbohboibojbokbolbohbombohbohbohbohbohbohbohbohbonboobopbopbopbopbopbopboqbofborbosbosbotboubovboubowbouboxboybozbouboAboBboCboDboEboEboEboEboEboEboEboFboGboHboHboHboHboIboHboJboKboLboMboNbfOboOaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaboPboPboPboPboPboPboPboPboPboPaaaaabboQaIiboRboSboTboUboUboUboUboUboVboWboXboYboZbpabnqbjlbjlbjlbpbbmebjlaZKaZKaZKaZKbkMbpcbpdbpeaZKbpfbpgbkRbphbpibmmbnzbpjbkRbmobpkbnBbnCbnCbplbpmbkXbpnbnHbmubpobppbpqbprbpsbptbpubnNbpvbjPbpwbnQblgbpxbpybpxblgbnQbpzblkbpAbnVbnVbnWbpBbnYbnVbpCbllbpDbocbocbodboebofbohbohbohbohbohbohbohbpEbohbohbohbohbohbohbpFbpGbpGbpGbpGbpGbpGbpGbpGbpGbpGbpGbpGbpGbpGbpHbpIbpJboEboEbpKbkobkobkobkobkobkpbkobkobkobkobkobkobkobkobkobkobkobkobpLbkobpMbpNaXOaXOaXOaXOaXOaXOaXObpObhqbelbembembenaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaboPboPboPboPboPboPboPboPboPboPboPbhsbhtbpPbpQbpRbpSbpSbpSbpTbpSbpSbpUbpVbpWaZOaZOaZObpXbjlbkFbpYbpZbntbjlbqabsubqaaZKaZKaZKaZKbqcaZKbqdbkQbkRbqebqfbnzbqgbqhbkRbmobkXbqibnCbnCbnCbqjbkXbqkbnHbmubqlbqmbpqbprbqnbqobpubnNbqpbjPbqqbqrblgbqsbqtbqubmEbqvbqwbqxbqybqzbqAbqBbqCbqDbnVbqEbllbqFbqGbocbodboebofbohbqHbohbohbohbohbqIbqJbqJbqJbqJbqKbohbohbohbohbqLbohbqHbqMbohbqNbqObqPbohbqQbqRbqRbqSbqTbqUbqVbkobkobkobkobkobkobkobqWbqXbqYbkobkobkobkobkobkobkobkobkobkobqZbrabrabrbbrcbrdbrebrfbrfbrfbrfbrgbrhbriaabaaaaaaaabaNtaNtaNtaNtaNtaNtaaaaNtaNtaNtaNtdcdaNtaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaboPboPboPboPboPboPboPboPboPboPboPbhsbhtbpPbpQbpRbpSbpSbpSbpTbpSbpSbpUbpVbpWaZOaZOaZObpXbjlbkFbpYbpZbntbjlbqabsubqaaZKaZKaZKaZKbqcaZKbqdbkQbkRbqebqfbnzbqgbqhbkRbmobkXbqibnCbnCbnCbqjbkXbqkbnHbmubqlbqmbpqbprbqnbqobpubnNbqpbjPbqqbqrblgbqsbqtbqubmEbqvdavbqxbqybqzbqAbqBbqCbqDbnVbqEbllbqFbqGbocbodboebofbohbqHbohbohbohbohbqIbqJbqJbqJbqJbqKbohbohbohbohbqLbohbqHbqMbohbqNbqObqPbohbqQbqRbqRbqSbqTbqUbqVbkobkobkobkobkobkobkobqWbqXbqYbkobkobkobkobkobkobkobkobkobkobqZbrabrabrbbrcbrdbrebrfbrfbrfbrfbrgbrhbriaabaaaaaaaabaNtaNtaNtaNtaNtaNtaaaaNtaNtaNtaNtdcdaNtaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaboPboPboPboPboPboPboPboPboPboPboPbrjbrkbrlbrmbrnbpSbrobrpbrqbrqbrrbrsbrtbrubrvbrvbrwbrxbjlbjlbjlbmdbrybmcaZOaZOaZOaZObrzbbKbbKbrAbjybrBbrCbrDbrEbrFbrGbrHbrIbkRbrJbkXbrKbnCbnCbnCbrLbrMbrNbnHbrOblbbrPbrQbnLbnLbnLbnLbnNbrRbjPbrSbrTbjPbjPbjPbjPbjPbjPbjPblkbllbrUbrVbrWbrXbrYbrZbsabllbsbbscbscbsdbsdbsdbsdbsdbsdbsdbsebsebsfbsgbshbshbsgbsfbsebsebsibsibsibsibsibsibsjbsjbskbsjbsjbsjbsjbsjbslbsmbsnbsobkobkobspbspbsqbsqbsqbsqbsqbsrbrabrabqZbrabkobrabrabrabrabssbstbstbstbstbsFbsvbsvbsvbsvbsvbsvbsvbsvbsvaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaaaaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaboPboPboPboPboPboPboPboPboPboPboPbkybkzbpPbpQbswbpSbsxbpSbsybszbpSbpUbpUbdabsAbsBbsBbsCbjlbkFbsDbmdbsEbmcbsHbsGbujbsIbsJbsKbsKbsLbsKbsMbsNbkRbsObsPbsQbsRbsSbrDbsTbkXbsUbnCbnCbsVbsWbsXbrNbnHbsYblbbsZbtabtbbtcbtdbtebtfblbblbbtgbthbtibtjbtkbtjbtlbthaaabtmbllbtnbtobtpbtqbrYbnVbtrbllbtsbttbtubsdbtvbtwbtxbtybtzbtAbtBbtCbtDbtEbtFbtFbtEbtGbtHbtIbsibtJbtLbtKbtMbsibtNbtObtPbtQbtRbtSbtSbtTbslbtUbtVbtWbtXbtWbtYbtYbsqbtZbuabubbsqbucbudbucbsqbuebrabssbstbufbugbufbstbuhbuibstbuwbukbulbumaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaaaaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaboPboPboPboPboPboPboPboPboPboPaaabunaWwbuoblUbupbpSbuqbpSburbusbutbuubpSbuvbwHbuxbuybsCbjlbjlbjlbjlbjlbjlbuzbuAbuBbuCbuDbkRbkRbkRbkRbkRbkRbkRbuEbkRbkRbkRbuFbkRbuGbuHbuIbnCbnCbnCbuJbrMbuKbnHbuLblbbuMbtablcblcblcblbbuNblbbuObuPbuQbuRbuSbuTbuUbuVbuWbuXbuYbllbuZbnVbvabvbbrYbvcbnVbllbvdbvebvfbsdbvgbvhbvibvjbvkbvlbvmbtFbtFbtFbtFbtFbtFbtFbvnbvobvpbvqbvrbvsbvtbsibvubvvbvwbvxbvybvzbvvbtTbslbvAbtVbvBbvCbvDbvEbvEbvFbvGbvHbvIbvJbvKbvLbvMbsqbvNbvObvPbstbvQbvRbvSbvTbvTbvUbstbvVbvWbvXbumaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaaaaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index 8e73f62d3ce..776108ecbef 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -14,8 +14,9 @@ var/const/supply_science = 5 var/const/supply_organic = 6 var/const/supply_materials = 7 var/const/supply_misc = 8 +var/const/supply_vend = 9 -var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engineer,supply_medical,supply_science,supply_organic,supply_materials,supply_misc) +var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engineer,supply_medical,supply_science,supply_organic,supply_materials,supply_misc,supply_vend) /proc/get_supply_group_name(var/cat) switch(cat) @@ -35,6 +36,8 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine return "Raw Materials" if(8) return "Miscellaneous" + if(9) + return "Vending" /datum/supply_packs @@ -961,17 +964,6 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine containername = "Beekeeping crate" access = access_hydroponics -/datum/supply_packs/organic/vending - name = "Bartending Supply Crate" - contains = list(/obj/item/weapon/vending_refill/boozeomat, - /obj/item/weapon/vending_refill/boozeomat, - /obj/item/weapon/vending_refill/boozeomat, - /obj/item/weapon/vending_refill/coffee, - /obj/item/weapon/vending_refill/coffee, - /obj/item/weapon/vending_refill/coffee) - cost = 20 - containername = "bartending supply crate" - /datum/supply_packs/organic/foodcart name = "Food Cart crate" contains = list(/obj/structure/foodcart) @@ -979,30 +971,6 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine containertype = /obj/structure/largecrate containername = "food cart crate" -/datum/supply_packs/organic/vending/snack - name = "Snack Supply Crate" - contains = list(/obj/item/weapon/vending_refill/snack, - /obj/item/weapon/vending_refill/snack, - /obj/item/weapon/vending_refill/snack) - cost = 15 - containername = "snacks supply crate" - -/datum/supply_packs/organic/vending/cola - name = "Softdrinks Supply Crate" - contains = list(/obj/item/weapon/vending_refill/cola, - /obj/item/weapon/vending_refill/cola, - /obj/item/weapon/vending_refill/cola) - cost = 15 - containername = "softdrinks supply crate" - -/datum/supply_packs/organic/vending/cigarette - name = "Cigarette Supply Crate" - contains = list(/obj/item/weapon/vending_refill/cigarette, - /obj/item/weapon/vending_refill/cigarette, - /obj/item/weapon/vending_refill/cigarette) - cost = 15 - containername = "cigarette supply crate" - ////////////////////////////////////////////////////////////////////////////// //////////////////////////// Materials /////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// @@ -1306,13 +1274,6 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine containername = "crate" //let's keep it subtle, eh? contraband = 1 -/datum/supply_packs/misc/autodrobe - name = "Autodrobe Supply Crate" - contains = list(/obj/item/weapon/vending_refill/autodrobe, - /obj/item/weapon/vending_refill/autodrobe) - cost = 15 - containername = "autodrobe supply crate" - /datum/supply_packs/misc/formalwear //This is a very classy crate. name = "Formal-wear Crate" contains = list(/obj/item/clothing/under/blacktango, @@ -1378,3 +1339,75 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine /obj/item/weapon/beach_ball) cost = 20 containername = "polo supply crate" + + +////////////////////////////////////////////////////////////////////////////// +//////////////////////////// Vending ///////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// + +/datum/supply_packs/vending + name = "HEADER" + group = supply_vend + +/datum/supply_packs/vending/autodrobe + name = "Autodrobe Supply Crate" + contains = list(/obj/item/weapon/vending_refill/autodrobe, + /obj/item/weapon/vending_refill/autodrobe) + cost = 15 + containername = "autodrobe supply crate" + +/datum/supply_packs/vending/clothes + name = "Clothing Supply Crate" + contains = list(/obj/item/weapon/vending_refill/suitdispenser, + /obj/item/weapon/vending_refill/shoedispenser, + /obj/item/weapon/vending_refill/hatdispenser, + /obj/item/weapon/vending_refill/clothing) + cost = 15 + containername = "clothing supply crate" + +/datum/supply_packs/vending/pets + name = "Pet Supply Crate" + contains = list(/obj/item/weapon/vending_refill/crittercare, + /obj/item/weapon/vending_refill/crittercare) + cost = 15 + containername = "pet supply crate" + +/datum/supply_packs/vending/bar + name = "Bar Supply Crate" + contains = list(/obj/item/weapon/vending_refill/boozeomat, + /obj/item/weapon/vending_refill/boozeomat, + /obj/item/weapon/vending_refill/boozeomat) + cost = 15 + containername = "bar supply crate" + +/datum/supply_packs/vending/coffee + name = "Coffee Supply Crate" + contains = list(/obj/item/weapon/vending_refill/coffee, + /obj/item/weapon/vending_refill/coffee, + /obj/item/weapon/vending_refill/coffee) + cost = 15 + containername = "coffee supply crate" + +/datum/supply_packs/vending/snack + name = "Snack Supply Crate" + contains = list(/obj/item/weapon/vending_refill/snack, + /obj/item/weapon/vending_refill/snack, + /obj/item/weapon/vending_refill/snack) + cost = 15 + containername = "snacks supply crate" + +/datum/supply_packs/vending/cola + name = "Softdrinks Supply Crate" + contains = list(/obj/item/weapon/vending_refill/cola, + /obj/item/weapon/vending_refill/cola, + /obj/item/weapon/vending_refill/cola) + cost = 15 + containername = "softdrinks supply crate" + +/datum/supply_packs/vending/cigarette + name = "Cigarette Supply Crate" + contains = list(/obj/item/weapon/vending_refill/cigarette, + /obj/item/weapon/vending_refill/cigarette, + /obj/item/weapon/vending_refill/cigarette) + cost = 15 + containername = "cigarette supply crate" diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index e6be0ea5281..eb1f76e48cd 100644 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -1118,6 +1118,10 @@ var/list/ghostteleportlocs = list() name = "\improper Clothing Shop" icon_state = "Theatre" +/area/civilian/pet_store + name = "\improper Pet Store" + icon_state = "Theatre" + /area/holodeck name = "\improper Holodeck" icon_state = "Holodeck" diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index b0c1ff709ea..a2042720a7f 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -199,7 +199,9 @@ to destroy them and players will be able to make replacements. /obj/machinery/vending/autodrobe = "AutoDrobe", /obj/machinery/vending/hatdispenser = "Hatlord 9000", /obj/machinery/vending/suitdispenser = "Suitlord 9000", - /obj/machinery/vending/shoedispenser = "Shoelord 9000") + /obj/machinery/vending/shoedispenser = "Shoelord 9000", + /obj/machinery/vending/clothing = "ClothesMate", + /obj/machinery/vending/crittercare = "CritterCare") /obj/item/weapon/circuitboard/vendor/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/weapon/screwdriver)) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index bf18a7e5111..dad171e0e59 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -1216,7 +1216,7 @@ /obj/item/clothing/accessory/scarf/purple=1,/obj/item/clothing/accessory/scarf/yellow=1,/obj/item/clothing/accessory/scarf/orange=1, /obj/item/clothing/accessory/scarf/lightblue=1,/obj/item/clothing/accessory/scarf/white=1,/obj/item/clothing/accessory/scarf/black=1, /obj/item/clothing/accessory/scarf/zebra=1,/obj/item/clothing/accessory/scarf/christmas=1,/obj/item/clothing/accessory/stripedredscarf=1, - /obj/item/clothing/accessory/stripedbluescarf=1,/obj/item/clothing/accessory/stripedgreenscarf=1,/obj/item/clothing/accessory/petcollar =3,/obj/item/clothing/accessory/waistcoat=1, + /obj/item/clothing/accessory/stripedbluescarf=1,/obj/item/clothing/accessory/stripedgreenscarf=1,/obj/item/clothing/accessory/waistcoat=1, /obj/item/clothing/under/sundress=2,/obj/item/clothing/under/stripeddress = 1, /obj/item/clothing/under/sailordress = 1, /obj/item/clothing/under/redeveninggown = 1, /obj/item/clothing/under/blacktango=1,/obj/item/clothing/suit/jacket=3, /obj/item/clothing/glasses/regular=2,/obj/item/clothing/head/sombrero=1,/obj/item/clothing/suit/poncho=1, /obj/item/clothing/suit/ianshirt=1,/obj/item/clothing/shoes/laceup=2,/obj/item/clothing/shoes/black=4, @@ -1250,3 +1250,32 @@ /obj/item/weapon/pen/red = 5) contraband = list(/obj/item/toy/crayon/mime = 1,/obj/item/toy/crayon/rainbow = 1) premium = list(/obj/item/weapon/contraband/poster = 5) + +/obj/machinery/vending/crittercare + name = "CritterCare" + desc = "A vending machine for pet supplies." + product_slogans = "Stop by for all your animal's needs!;Cuddly pets deserve a stylish collar!;Pets in space, what could be more adorable?;Freshest fish eggs in the system!;Rocks are the perfect pet, buy one today!" + product_ads = "House-training costs extra!;Now with 1000% more cat hair!;Allergies are a sign of weakness!;Dogs are man's best friend. Remember that Vulpkanin!; Heat lamps for Unathi!; Vox-y want a cracker?" + vend_delay = 34 + icon_state = "crittercare" + products = list(/obj/item/clothing/accessory/petcollar = 5, /obj/item/weapon/fish_net = 5, /obj/item/weapon/fishfood = 5, + /obj/item/weapon/tank_brush = 5, /obj/item/weapon/egg_scoop = 5, /obj/item/fish_eggs/goldfish = 5, + /obj/item/fish_eggs/clownfish = 5, /obj/item/fish_eggs/shark = 5, /obj/item/toy/pet_rock = 5, + ) + prices = list(/obj/item/clothing/accessory/petcollar = 50, /obj/item/weapon/fish_net = 15, /obj/item/weapon/fishfood = 15, + /obj/item/weapon/tank_brush = 15, /obj/item/weapon/egg_scoop = 15, /obj/item/fish_eggs/goldfish = 10, + /obj/item/fish_eggs/clownfish = 10, /obj/item/fish_eggs/shark = 10, /obj/item/toy/pet_rock = 100, + ) + contraband = list(/obj/item/fish_eggs/babycarp = 5) + premium = list(/obj/item/toy/pet_rock/fred = 1, /obj/item/toy/pet_rock/roxie = 1) + refill_canister = /obj/item/weapon/vending_refill/crittercare + +/obj/machinery/vending/crittercare/New() + ..() + component_parts = list() + var/obj/item/weapon/circuitboard/vendor/V = new(null) + V.set_type(type) + component_parts += V + component_parts += new /obj/item/weapon/vending_refill/crittercare(0) + component_parts += new /obj/item/weapon/vending_refill/crittercare(0) + component_parts += new /obj/item/weapon/vending_refill/crittercare(0) diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm index d65a4d33383..cd9a551a4f4 100644 --- a/code/game/objects/items/stacks/sheets/glass.dm +++ b/code/game/objects/items/stacks/sheets/glass.dm @@ -68,7 +68,7 @@ return 0 var/title = "Sheet-Glass" title += " ([src.amount] sheet\s left)" - switch(alert(title, "Would you like full tile glass or one direction?", "One Direction", "Full Window", "Cancel", null)) + switch(input(title, "What would you like to construct?") in list("One Direction Window", "Full Window", "Fishbowl", "Fish Tank", "Wall Aquarium", "Cancel")) if("One Direction") if(!src) return 1 if(src.loc != user) return 1 @@ -118,6 +118,24 @@ W.anchored = 0 W.air_update_turf(1) src.use(2) + if("Fish Tank") + if(!src) return 1 + if(src.loc != user) return 1 + if(src.amount < 3) + user << "\red You need more glass to do that." + return 1 + var/obj/machinery/fishtank/F = new /obj/machinery/fishtank/tank(user.loc, 0) + F.air_update_turf(1) + src.use(3) + if("Wall Aquarium") + if(!src) return 1 + if(src.loc != user) return 1 + if(src.amount < 4) + user << "\red You need more glass to do that." + return 1 + var/obj/machinery/fishtank/F = new /obj/machinery/fishtank/wall(user.loc, 0) + F.air_update_turf(1) + src.use(4) return 0 diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index f9441690da7..f675e472702 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -1365,4 +1365,27 @@ obj/item/toy/cards/deck/syndicate/black new /obj/item/toy/character/thief(src) new /obj/item/toy/character/wizard(src) new /obj/item/toy/character/cthulhu(src) - new /obj/item/toy/character/lich(src) \ No newline at end of file + new /obj/item/toy/character/lich(src) + + +//Pet Rocks, just like from the 70's! + +/obj/item/toy/pet_rock + name = "pet rock" + desc = "The perfect pet!" + icon = 'icons/obj/toy.dmi' + icon_state = "pet_rock" + w_class = 2 + force = 5 + throwforce = 5 + attack_verb = list("attacked", "bashed", "smashed", "stoned") + +/obj/item/toy/pet_rock/fred + name = "fred" + desc = "Fred, the bestest boy pet in the whole wide universe!" + icon_state = "fred" + +/obj/item/toy/pet_rock/roxie + name = "roxie" + desc = "Roxie, the bestest girl pet in the whole wide universe!" + icon_state = "roxie" \ No newline at end of file diff --git a/code/game/objects/items/weapons/vending_items.dm b/code/game/objects/items/weapons/vending_items.dm index e296670581a..306d0ba890a 100644 --- a/code/game/objects/items/weapons/vending_items.dm +++ b/code/game/objects/items/weapons/vending_items.dm @@ -76,4 +76,9 @@ /obj/item/weapon/vending_refill/clothing machine_name = "ClothesMate" icon_state = "refill_clothes" - charges = 20// of 62 \ No newline at end of file + charges = 20// of 62 + +/obj/item/weapon/vending_refill/crittercare + machine_name = "CritterCare" + icon_state = "refill_pet" + charges = 17// of 54 diff --git a/code/modules/fish/fish_eggs.dm b/code/modules/fish/fish_eggs.dm new file mode 100644 index 00000000000..902616755dd --- /dev/null +++ b/code/modules/fish/fish_eggs.dm @@ -0,0 +1,42 @@ + +/obj/item/fish_eggs + name = "fish eggs" + desc = "Eggs laid by a fish. This cluster seems... empty?" + icon = 'icons/obj/fish_items.dmi' + icon_state = "eggs" + w_class = 2.0 + var/fish_type = null //Holds the name of the fish that the egg is for + +/obj/item/fish_eggs/New() + ..() + +var/global/list/fish_eggs_list = list("dud" = /obj/item/fish_eggs, + "goldfish" = /obj/item/fish_eggs/goldfish, + "clownfish" = /obj/item/fish_eggs/clownfish, + "shark" = /obj/item/fish_eggs/shark, + "babycarp" = /obj/item/fish_eggs/babycarp, + ) + +/obj/item/fish_eggs/goldfish + name = "goldfish eggs" + desc = "Goldfish eggs, surprisingly, don't contain actual gold." + icon_state = "gold_eggs" + fish_type = "goldfish" + +/obj/item/fish_eggs/clownfish + name = "clownfish eggs" + desc = "Even as eggs, they are funnier than the clown. HONK!" + icon_state = "clown_eggs" + fish_type = "clownfish" + +/obj/item/fish_eggs/shark + name = "shark eggs" + desc = "We're gonna need a- Oh wait, they're still eggs." + icon_state = "shark_eggs" + fish_type = "shark" + +/obj/item/fish_eggs/babycarp + name = "baby space carp eggs" + desc = "Eggs from the substantially smaller form of the intergalactic terror." + icon_state = "babycarp_eggs" + fish_type = "babycarp" diff --git a/code/modules/fish/fish_items.dm b/code/modules/fish/fish_items.dm new file mode 100644 index 00000000000..b1171871c25 --- /dev/null +++ b/code/modules/fish/fish_items.dm @@ -0,0 +1,52 @@ + +/obj/item/weapon/egg_scoop + name = "fish egg scoop" + desc = "A small scoop to collect fish eggs with." + icon = 'icons/obj/fish_items.dmi' + icon_state = "egg_scoop" + slot_flags = SLOT_BELT + throwforce = 0 + w_class = 2.0 + throw_speed = 3 + throw_range = 7 + +/obj/item/weapon/fish_net + name = "fish net" + desc = "A tiny net to capture fish with. It's a death sentence!" + icon = 'icons/obj/fish_items.dmi' + icon_state = "net" + slot_flags = SLOT_BELT + throwforce = 0 + w_class = 2.0 + throw_speed = 3 + throw_range = 7 + + suicide_act(mob/user) //"A tiny net is a death sentence: it's a net and it's tiny!" https://www.youtube.com/watch?v=FCI9Y4VGCVw + viewers(user) << "[user] placed the [src.name] on top of \his head, \his fingers tangled in the netting! It looks like \he's trying to commit suicide." + return(OXYLOSS) + +/obj/item/weapon/fishfood + name = "fish food can" + desc = "A small can of Carp's Choice brand fish flakes. The label shows a smiling Space Carp." + icon = 'icons/obj/fish_items.dmi' + icon_state = "fish_food" + throwforce = 1 + w_class = 2.0 + throw_speed = 3 + throw_range = 7 + +/obj/item/weapon/tank_brush + name = "aquarium brush" + desc = "A brush for cleaning the inside of aquariums. Contains a built-in odor neutralizer." + icon = 'icons/obj/fish_items.dmi' + icon_state = "brush" + slot_flags = SLOT_BELT + throwforce = 0 + w_class = 2.0 + throw_speed = 3 + throw_range = 7 + attack_verb = list("scrubbed", "brushed", "scraped") + + suicide_act(mob/user) + viewers(user) << "[user] is vigorously scrubbing \himself raw with the [src.name]! It looks like \he's trying to commit suicide." + return(BRUTELOSS|FIRELOSS) diff --git a/code/modules/fish/fishtank.dm b/code/modules/fish/fishtank.dm new file mode 100644 index 00000000000..591329480f9 --- /dev/null +++ b/code/modules/fish/fishtank.dm @@ -0,0 +1,701 @@ + +////////////////////////////// +// Fish Tanks! // +////////////////////////////// + + +/obj/machinery/fishtank + name = "placeholder tank" + desc = "So generic, it might as well have no description at all." + icon = 'icons/obj/fish_items.dmi' + icon_state = "tank1" + density = 0 + anchored = 0 + throwpass = 0 + + var/tank_type = "" // Type of aquarium, used for icon updating + var/water_capacity = 0 // Number of units the tank holds (varies with tank type) + var/water_level = 0 // Number of units currently in the tank (new tanks start empty) + var/light_switch = 0 // 0 = off, 1 = on (off by default) + var/filth_level = 0.0 // How dirty the tank is (max 10) + var/lid_switch = 0 // 0 = open, 1 = closed (open by default) + var/max_fish = 0 // How many fish the tank can support (varies with tank type, 1 fish per 50 units sounds reasonable) + var/food_level = 0 // Amount of fishfood floating in the tank (max 10) + var/fish_count = 0 // Number of fish in the tank + var/list/fish_list = null // Tracks the current types of fish in the tank + var/egg_count = 0 // How many fish eggs can be harvested from the tank (capped at the max_fish value) + var/list/egg_list = null // Tracks the current types of harvestable eggs in the tank + + var/has_lid = 0 // 0 if the tank doesn't have a lid/light, 1 if it does + var/max_health = 0 // Can handle a couple hits + var/cur_health = 0 // Current health, starts at max_health + var/leaking = 0 // 0 if not leaking, 1 if minor leak, 2 if major leak (not leaking by default) + var/shard_count = 0 // Number of glass shards to salvage when broken (1 less than the number of sheets to build the tank) + +/obj/machinery/fishtank/bowl + name = "fish bowl" + desc = "A small bowl capable of housing a single fish, commonly found on desks. This one has a tiny treasure chest in it!" + icon_state = "bowl1" + density = 0 // Small enough to not block stuff + anchored = 0 // Small enough to move even when filled + throwpass = 1 // Just like at the county fair, you can't seem to throw the ball in to win the goldfish + pass_flags = PASSTABLE // Small enough to pull onto a table + + tank_type = "bowl" + water_capacity = 50 // Not very big, therefore it can't hold much + max_fish = 1 // What a lonely fish + + has_lid = 0 + max_health = 15 // Not very sturdy + cur_health = 15 + shard_count = 0 // No salvageable shards + +/obj/machinery/fishtank/tank + name = "fish tank" + desc = "A large glass tank designed to house aquatic creatures. Contains an integrated water circulation system." + icon = 'icons/obj/fish_items.dmi' + icon_state = "tank1" + density = 1 + anchored = 1 + throwpass = 1 // You can throw objects over this, despite it's density, because it's short enough. + + tank_type = "tank" + water_capacity = 200 // Decent sized, holds almost 2 full buckets + max_fish = 4 // Room for a few fish + + has_lid = 1 + max_health = 50 // Average strength, will take a couple hits from a toolbox. + cur_health = 50 + shard_count = 2 + + +/obj/machinery/fishtank/wall + name = "wall aquarium" + desc = "This aquarium is massive! It completely occupies the same space as a wall, and looks very sturdy too!" + icon_state = "wall1" + density = 1 + anchored = 1 + throwpass = 0 // This thing is the size of a wall, you can't throw past it. + + tank_type = "wall" + water_capacity = 500 // This thing fills an entire tile, it holds a lot. + max_fish = 10 // Plenty of room for a lot of fish + + has_lid = 1 + max_health = 100 // This thing is a freaking wall, it can handle abuse. + cur_health = 100 + shard_count = 3 + + +////////////////////////////// +// VERBS & PROCS // +////////////////////////////// + +/obj/machinery/fishtank/verb/toggle_lid_verb() + set name = "Toggle Tank Lid" + set category = "Object" + set src in view(1) + toggle_lid(usr) + +/obj/machinery/fishtank/proc/toggle_lid(var/mob/living/user) + lid_switch = !lid_switch + update_icon() + +/obj/machinery/fishtank/verb/toggle_light_verb() + set name = "Toggle Tank Light" + set category = "Object" + set src in view(1) + toggle_light(usr) + +/obj/machinery/fishtank/proc/toggle_light(var/mob/living/user) + light_switch = !light_switch + if(light_switch) + set_light(2,2,"#a0a080") + else + set_light(0) + +////////////////////////////// +// NEW() PROCS // +////////////////////////////// + +/obj/machinery/fishtank/New() + ..() + fish_list = new/list() + egg_list = new/list() + if(!has_lid) //Tank doesn't have a lid/light, remove the verbs for then + verbs -= /obj/machinery/fishtank/verb/toggle_lid_verb + verbs -= /obj/machinery/fishtank/verb/toggle_light_verb + +/obj/machinery/fishtank/tank/New() + ..() + if(prob(5)) //5% chance to get the castle decoration + icon_state = "tank2" + +////////////////////////////// +// ICON PROCS // +////////////////////////////// + +/obj/machinery/fishtank/update_icon() + overlays.Cut() + + //Update Alert Lights + if(has_lid) //Skip the alert lights for aquariums that don't have lids (fishbowls) + if(egg_count > 0) //There is at least 1 egg to harvest + overlays += "over_egg" + if(lid_switch == 1) //Lid is closed, lid status light is red + overlays += "over_lid_1" + else //Lid is open, lid status light is green + overlays += "over_lid_0" + if(food_level > 5) //Food_level is high and isn't a concern yet + overlays += "over_food_0" + else if(food_level > 2) //Food_level is starting to get low, but still above the breeding threshold + overlays += "over_food_1" + else //Food_level is below breeding threshold, or fully consumed, feed the fish! + overlays += "over_food_2" + overlays += "over_leak_[leaking]" //Green if we aren't leaking, light blue and slow blink if minor link, dark blue and rapid flashing for major leak + + //Update water overlay + if(water_level == 0) return //Skip the rest of this if there is no water in the aquarium + var/water_type = "_clean" //Default to clean water + if(filth_level > 5) water_type = "_dirty" //Show dirty water above filth_level 5 (breeding threshold) + if(water_level > (water_capacity * 0.85)) //Show full if the water_level is over 85% of water_capacity + overlays += "over_[tank_type]_full[water_type]" + else if(water_level > (water_capacity * 0.35)) //Show half-full if the water_level is over 35% of water_capacity + overlays += "over_[tank_type]_half[water_type]" + + return + +////////////////////////////// +// PROCESS PROC // +////////////////////////////// + +//Stops atmos from passing wall tanks, since they are effectively full-windows. +/obj/machinery/fishtank/wall/CanAtmosPass(var/turf/T) + return 0 + +/obj/machinery/fishtank/process() + //Start by counting fish in the tank + fish_count = 0 + for(var/fish in fish_list) + if(fish) + fish_count ++ + + //Check if the water level can support the current number of fish + if((fish_count * 50) > water_level) + if(prob(50)) //Not enough water for all the fish, chance to kill one + kill_fish() //Chance passed, kill a random fish + filth_level += 2 //Dead fish raise the filth level quite a bit, reflect this + + //Check filth_level + check_filth_level() + if(filth_level == 10 && fish_count > 0) //This tank is nasty and possibly unsuitable for fish if any are in it + if(prob(30)) //Chance for a fish to die each cycle while the tank is this nasty + kill_fish() //Kill a random fish, don't raise filth level since we're at cap already + + //Check breeding conditions + if(fish_count >=2 && egg_count < max_fish) //Need at least 2 fish to breed, but won't breed if there are as many eggs as max_fish + if(food_level > 2 && filth_level <=5) //Breeding is going to use extra food, and the filth_level shouldn't be too high + if(prob(((fish_count - 2) * 5)+10)) //Chances increase with each additional fish, 10% base + 5% per additional fish + egg_count ++ //A new set of eggs were laid, increase egg_count + egg_list.Add(select_egg_type()) //Add the new egg to the egg_list for storage + food_level -= 2 //Remove extra food for the breeding process + + //Handle standard food and filth adjustments + check_food_level() + var/ate_food = 0 + if(food_level > 0 && prob(50)) //Chance for the fish to eat some food + if(food_level >= (fish_count * 0.1)) //If there is at least enough food to go around, feed all the fish + food_level -= fish_count * 0.1 + else //Use up the last of the food + food_level = 0 + ate_food = 1 + check_food_level() + + if(water_level > 0) //Don't dirty the tank if it has no water + if(filth_level < 10 && prob(25)) //Chance for the tank to get dirtier if the filth_level isn't 10 + if(ate_food && prob(30)) //If they ate this cycle, there is an additional chance they make a bigger mess + filth_level += fish_count * 0.1 + else //If they didn't make the big mess, make a little one + filth_level += 0.1 + check_filth_level() + + //Handle special interactions + handle_special_interactions() + + //Handle water leakage from damage + if(water_level > 0) //Can't leak water if there is no water in the tank + if(leaking == 2) //At or below 25% health, the tank will lose 10 water_level per cycle (major leak) + water_level -= 10 + else if(leaking == 1) //At or below 50% health, the tank will lose 1 water_level per cycle (minor leak) + water_level -= 1 + check_water_level() + +////////////////////////////// +// SUPPORT PROCS // +////////////////////////////// + +/obj/machinery/fishtank/proc/handle_special_interactions() + for(var/fish in fish_list) + switch(fish) + if("catfish") //Catfish have a small chance of cleaning some filth since they are a bottom-feeder + if((filth_level > 0) && prob(25)) + filth_level -= 0.1 + if("feederfish") //Feeder fish have a small chance of sacrificing themselves to produce some food + if(fish_count < 2) //Don't sacrifice the last fish, there's nothing to eat it + continue + if(food_level <= 7.5 && prob(25)) + kill_fish("feederfish") //Kill the fish to reflect it's sacrifice, but don't increase the filth_level + food_level += 1 //The corpse became food for the other fish, ecology at it's finest + check_food_level() + check_filth_level() + check_water_level() + +/obj/machinery/fishtank/proc/check_water_level() + if(water_level < 0) //Water_level cannot be negative, set it to 0 if it is + water_level = 0 + if(water_level > water_capacity) //Water_level cannot exceed capacity, set it to capacity if it does + water_level = water_capacity + update_icon() + +/obj/machinery/fishtank/proc/check_filth_level() + if(filth_level < 0) //Filth_level cannot be negative, set it to 0 if it is + filth_level = 0 + if(filth_level > 10) //Filth_level cannot exceed 10 (cap), set it to 10 if it does + filth_level = 10 + +/obj/machinery/fishtank/proc/check_food_level() + if(food_level < 0) //Food_level cannot be negative, set it to 0 if it is + food_level = 0 + if(food_level > 10) //Food_level cannot exceed 10 (cap), set it to 10 if it does + food_level = 10 + +/obj/machinery/fishtank/proc/check_health() + //Max value check + if(cur_health > max_health) //Cur_health cannot exceed max_health, set it to max_health if it does + cur_health = max_health + //Leaking status check + if(cur_health <= (max_health * 0.25)) //Major leak at or below 25% health (-10 water/cycle) + leaking = 2 + else if(cur_health <= (max_health * 0.5)) //Minor leak at or below 50% health (-1 water/cycle) + leaking = 1 + else //Not leaking above 50% health + leaking = 0 + //Destruction check + if(cur_health <= 0) //The tank is broken, destroy it + destroy() + +/obj/machinery/fishtank/proc/kill_fish(var/type = null) + //Check if we were passed a fish to kill, otherwise kill a random one + if(type) + fish_list.Remove(type) //Kill a fish of the specified type + fish_count -- //Lower fish_count to reflect the death of a fish, so the everything else works fine + else + fish_list.Remove(pick(fish_list)) //Kill a random fish + fish_count -- //Lower fish_count to reflect the death of a fish, so the everything else works fine + +/obj/machinery/fishtank/proc/add_fish(var/type = null) + //Check if we were passed a fish type + if(type) + fish_list.Add("[type]") //Add a fish of the specified type + fish_count ++ //Increase fish_count to reflect the introduction of a fish, so the everything else works fine + //Announce the new fish + src.visible_message("A new [type] hatched in \the [src]!") + //Null type fish are dud eggs, give a message to inform the player + else + usr << "The eggs disolve in the water. They were duds!" + +/obj/machinery/fishtank/proc/select_egg_type() + var/fish = pick(fish_list) //Select a fish from the fish in the tank + if(prob(25)) //25% chance to be a dud (blank) egg + fish = "dud" + var/obj/item/fish_eggs/egg_path = null //Create empty variable to receive the egg_path + egg_path = fish_eggs_list[fish] //Locate the corresponding path from fish_eggs_list that matches the fish + if(!egg_path) //The fish wasn't located in the fish_eggs_list, potentially due to a typo, so return a dud egg + return /obj/item/fish_eggs + else //The fish was located in the fish_eggs_list, so return the proper egg + return egg_path + +/obj/machinery/fishtank/proc/harvest_eggs(var/mob/user) + if(!egg_count) //Can't harvest non-existant eggs + return + + if(egg_count > max_fish) //Make sure the number of eggs doesn't exceed the max_fish for the tank + egg_count = max_fish //If you somehow exceeded the cap, set the egg_count to max, destroy the excess later + + while(egg_count > 0) //Loop until you've harvested all the eggs + var/obj/item/fish_eggs/egg = pick(egg_list) //Select an egg at random + egg = new egg(get_turf(user)) //Spawn the egg at the user's feet + egg_list.Remove(egg) //Remove the egg from the egg_list + egg_count -- //Decrease the egg_count and begin again + + egg_list.Cut() //Destroy any excess eggs, clearing the egg_list + +/obj/machinery/fishtank/proc/destroy(var/deconstruct = 0) + var/turf/T = get_turf(src) //Store the tank's turf for atmos updating after deletion of tank + if(!deconstruct) //Check if we are deconstructing or breaking the tank + var/shards_left = shard_count + while(shards_left > 0) //Produce the appropriate number of glass shards + new /obj/item/weapon/shard(get_turf(src)) + shards_left -- + if(water_level) //Spill any water that was left in the tank when it broke + spill_water() + else //We are deconstructing, make glass sheets instead of shards + var/sheets = shard_count + 1 //Deconstructing it salvages all the glass used to build the tank + new /obj/item/stack/sheet/glass(get_turf(src), sheets) //Produce the appropriate number of glass sheets, in a single stack + qdel(src) //QDel the tank and it's contents + T.air_update_turf(1) //Update the air for the turf, to avoid permanent atmos sealing with wall tanks + +/obj/machinery/fishtank/proc/spill_water() + switch(tank_type) + if("bowl") //Fishbowl: Wets it's own tile + var/turf/T = get_turf(src) + if(!istype(T, /turf/simulated)) return + var/turf/simulated/S = T + S.MakeSlippery() + if("tank") //Fishtank: Wets it's own tile and the 4 adjacent tiles (cardinal directions) + var/turf/ST = get_turf(src) + if(istype(ST, /turf/simulated)) + var/turf/simulated/ST2 = ST + ST2.MakeSlippery() + var/list/L = ST.CardinalTurfs() + for(var/turf/T in L) + if(!istype(T, /turf/simulated)) continue + var/turf/simulated/S = T + S.MakeSlippery() + if("wall") //Wall-tank: Wets it's own tile and the surrounding 8 tiles (3x3 square) + for(var/turf/T in trange(1, src.loc)) + if(!istype(T, /turf/simulated)) continue + var/turf/simulated/S = T + S.MakeSlippery() + +////////////////////////////// Note from FalseIncarnate: +// EXAMINE PROC // This proc is massive, messy, and probably could be handled better. +////////////////////////////// Feel free to try cleaning it up if you think of a better way to do it. + +/obj/machinery/fishtank/examine() + ..() + var/examine_message = "" + //Approximate water level + if(water_level == 0) + examine_message += "\The [src] is empty! " + else if(water_level < water_capacity * 0.1) + examine_message += "\The [src] is nearly empty! " + else if(water_level <= water_capacity * 0.25) + examine_message += "\The [src] is about one-quarter filled. " + else if(water_level <= water_capacity * 0.5) + examine_message += "\The [src] is about half filled. " + else if(water_level <= water_capacity * 0.75) + examine_message += "\The [src] is about three-quarters filled. " + else if(water_level < water_capacity) + examine_message += "\The [src] is nearly full! " + else if (water_level == water_capacity) + examine_message += "\The [src] is full! " + + //Approximate filth level + if(filth_level == 0) + examine_message += "[src] is spotless! " + else if(filth_level <= 2.5) + examine_message += "[src] looks like the glass has been smudged. " + else if(filth_level <= 5) //This is the breeding threshold + examine_message += "[src] has some algae growth in it. " + else if(filth_level <= 7.5) + examine_message += "[src] has a lot of algae growth in it. " + else if(filth_level < 10) + examine_message += "[src] is getting hard to see into! Someone should clean it soon! " + else if(filth_level == 10) + examine_message += "[src] is absolutely disgusting! Someone should clean it NOW! " + + //Approximate food level + if(!fish_count) //Check if there are fish in the tank + if(food_level > 0) //Don't report a tank that has neither fish nor food in it + examine_message += "There's some food in [src], but no fish! " + else //We've got fish, report the food level + if(food_level == 0) + examine_message += "The fish look very hungry! " + else if(food_level < 2) + examine_message += "The fish are nibbling on the last of their food. " + else if(food_level < 10) //Breeding is possible + examine_message += "The fish seem happy! " + else if(food_level == 10) + examine_message += "There is a solid layer of fish food at the top. " + + //Report the number of harvestable eggs + if(egg_count) //Don't bother if there isn't any eggs + examine_message += "There are [egg_count] eggs able to be harvested! " + + //Report the number and types of live fish if there is water in the tank + if(fish_count == 0) + examine_message += "\The [src] doesn't contain any live fish. " + else + //Build a message reporting the types of fish + var/fish_num = fish_count + var/message = "You spot " + while(fish_num > 0) + if(fish_count > 1 && fish_num == 1) //If there were at least 2 fish, and this is the last one, add "and" to the message + message += "and " + message += "a [fish_list[fish_num]]" + fish_num -- + if(fish_num > 0) //There's more fish, add a comma to the message + message +=", " + message +="." //No more fish, end the message with a period + //Display the number of fish and previously constructed message + examine_message += "\The [src] contains [fish_count] live fish. [message] " + + //Report lid state for tanks and wall-tanks + if(has_lid) //Only report if the tank actually has a lid + //Report lid state + if(lid_switch) + examine_message += "The lid is closed. " + else + examine_message += "The lid is open. " + + //Report if the tank is leaking/cracked + if(water_level > 0) //Tank has water, so it's actually leaking + if(leaking == 1) examine_message += "\The [src] is leaking." + if(leaking == 2) examine_message += "\The [src] is leaking profusely!" + else //No water, report the cracks instead + if(leaking == 1) examine_message += "\The [src] is cracked." + if(leaking == 2) examine_message += "\The [src] is nearly shattered!" + + + //Finally, report the full examine_message constructed from the above reports + usr << "[examine_message]" + +////////////////////////////// +// ATACK PROCS // +////////////////////////////// + +/obj/machinery/fishtank/attack_animal(mob/living/simple_animal/M as mob) + if(istype(M, /mob/living/simple_animal/pet/cat)) + if(M.a_intent == "help") //Cats can try to fish in open tanks on help intent + if(lid_switch) //Can't fish in a closed tank. Fishbowls are ALWAYS open. + M.visible_message("[M.name] stares at into \the [src] while sitting perfectly still.", "The lid is closed, so you stare into \the [src] intently.") + else + if(fish_count) //Tank must actually have fish to try catching one + M.visible_message("[M.name] leaps up onto \the[src] and attempts to fish through the opening!", "You jump up onto \the [src] and begin fishing through the opening!") + spawn(10) + if(water_level && prob(45)) //If there is water, there is a chance the cat will slip, Syndicat will spark like E-N when this happens + M.visible_message("[M.name] slipped and got soaked!", "You slipped and got soaked!") + if(istype(M, /mob/living/simple_animal/pet/cat/Syndi)) + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(3, 1, src) + s.start() + else //No water or didn't slip, get that fish! + M.visible_message("[M.name] caught and devoured a live fish!", "You catch and devour a live fish, yum!") + kill_fish() //Kill a random fish + M.health = M.maxHealth //Eating fish heals the predator + else + usr << "There are no fish in [src]!" + else + attack_generic(M, M.harm_intent_damage) + else if(istype(M, /mob/living/simple_animal/hostile/bear)) + if(M.a_intent == "help") //Bears can try to fish in open tanks on help intent + if(lid_switch) //Can't fish in a closed tank. Fishbowls are ALWAYS open. + M.visible_message("[M.name] scrapes it's claws along \the [src]'s lid.", "The lid is closed, so you scrape your claws against \the [src]'s lid.") + else + if(fish_count) //Tank must actually have fish to try catching one + M.visible_message("[M.name] reaches into \the[src] and attempts to fish through the opening!", "You reach into \the [src] and begin fishing through the opening!") + spawn(5) + if(water_level && prob(5)) //Bears are good at catching fish, only a 5% chance to fail + M.visible_message("[M.name] swipes at the water!", "You just barely missed that fish!") + else //No water or didn't slip, get that fish! + M.visible_message("[M.name] caught and devoured a live fish!", "You catch and devour a live fish, yum!") + kill_fish() //Kill a random fish + M.health = M.maxHealth //Eating fish heals the predator + else + usr << "There are no fish in [src]!" + else + attack_generic(M, M.harm_intent_damage) + else + if(M.melee_damage_upper > 0) //If the simple_animal has a melee_damage_upper defined, use that for the damage + attack_generic(M, M.melee_damage_upper) + else if(M.a_intent == "harm") //Let any simple_animal try to break tanks when on harm intent + if(M.harm_intent_damage <= 0) return //If it doesn't do damage, don't bother with the attack + attack_generic(M, M.harm_intent_damage) + check_health() + +/obj/machinery/fishtank/attack_alien(mob/living/user as mob) + if(islarva(user)) return + attack_generic(user, 15) + +/obj/machinery/fishtank/attack_slime(mob/living/user as mob) + var/mob/living/carbon/slime/S = user + if (!S.is_adult) + return + attack_generic(user, rand(10, 15)) + +/obj/machinery/fishtank/attack_hand(mob/user as mob) + if(HULK in user.mutations) + user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!")) + user.visible_message("[user] smashes through [src]!") + destroy() + else if (usr.a_intent == "harm") + user.changeNext_move(CLICK_CD_MELEE) + playsound(get_turf(src), 'sound/effects/glassknock.ogg', 80, 1) + usr.visible_message("\red [usr.name] bangs against the [src.name]!", \ + "\red You bang against the [src.name]!", \ + "You hear a banging sound.") + else + user.changeNext_move(CLICK_CD_MELEE) + playsound(src.loc, 'sound/effects/glassknock.ogg', 80, 1) + usr.visible_message("[usr.name] taps on the [src.name].", \ + "You tap on the [src.name].", \ + "You hear a knocking sound.") + return + +/obj/machinery/fishtank/proc/hit(var/damage, var/sound_effect = 1) + cur_health = max(0, cur_health - damage) + if(sound_effect) + playsound(loc, 'sound/effects/Glasshit.ogg', 75, 1) + check_health() + +/obj/machinery/fishtank/proc/attack_generic(mob/living/user as mob, damage = 0) //used by attack_alien, attack_animal, and attack_slime + user.changeNext_move(CLICK_CD_MELEE) + user.do_attack_animation(src) + cur_health -= damage + if(cur_health <= 0) + user.visible_message("[user] smashes through \the [src]!") + destroy() + else //for nicer text~ + user.visible_message("[user] smashes into \the [src]!") + playsound(loc, 'sound/effects/Glasshit.ogg', 100, 1) + check_health() + +/obj/machinery/fishtank/attackby(var/obj/item/O, var/mob/user as mob) + //Welders repair damaged tanks on help intent, damage on all others + if(istype(O, /obj/item/weapon/weldingtool)) + var/obj/item/weapon/weldingtool/W = O + if(user.a_intent == "help") + if(W.isOn()) + if(cur_health < max_health) + usr << "You repair some of the cracks on \the [src]." + cur_health += 20 + check_health() + else + usr << "There is no damage to fix!" + else + if(cur_health < max_health) + usr << "[W.name] must on to repair this damage." + else + user.changeNext_move(CLICK_CD_MELEE) + hit(W.force) + return + //Open reagent containers add and remove water + if(O.is_open_container()) + if(istype(O, /obj/item/weapon/reagent_containers/glass)) + if(lid_switch) + usr << "Open the lid on [src] first!" + return + var/obj/item/weapon/reagent_containers/glass/C = O + //Containers with any reagents will get dumped in + if(C.reagents.total_volume) + var/water_value = 0 + water_value += C.reagents.get_reagent_amount("water") //Water is full value + water_value += C.reagents.get_reagent_amount("holywater") //Holywater is full value + water_value += C.reagents.get_reagent_amount("tonic") * 0.25 //Tonic water is 25% value + water_value += C.reagents.get_reagent_amount("sodawater") * 0.50 //Sodawater is 50% value + water_value += C.reagents.get_reagent_amount("fishwater") * 0.75 //Fishwater is 75% value, to account for the fish poo + water_value += C.reagents.get_reagent_amount("ice") * 0.80 //Ice is 80% value + var/message = "" + if(!water_value) //The container has no water value, clear everything in it + message = "The filtration process removes everything, leaving the water level unchanged." + C.reagents.clear_reagents() + else + if(water_level == water_capacity) + usr << "[src] is already full!" + return + else + message = "The filtration process purifies the water, raising the water level." + water_level += water_value + if(water_level == water_capacity) + message += " You filled \the [src] to the brim!" + if(water_level > water_capacity) + message += " You overfilled \the [src] and some water runs down the side, wasted." + C.reagents.clear_reagents() + check_water_level() + user.visible_message("[user.name] pours the contents of [C.name] into \the [src].", "[message]") + return + //Empty containers will scoop out water, filling the container as much as possible from the water_level + else + if(water_level == 0) + usr << "[src] is empty!" + else + if(water_level >= C.volume) //Enough to fill the container completely + C.reagents.add_reagent("fishwater", C.volume) + water_level -= C.volume + user.visible_message("[user.name] scoops out some water from \the [src].", "You completely fill [C.name] from \the [src].") + else //Fill the container as much as possible with the water_level + C.reagents.add_reagent("fishwater", water_level) + water_level = 0 + user.visible_message("[user.name] scoops out some water from \the [src].", "You fill [C.name] with the last of the water in \the [src].") + check_water_level() + return + //Wrenches can deconstruct empty tanks, but not tanks with any water. Kills any fish left inside and destroys any unharvested eggs in the process + if(istype(O, /obj/item/weapon/wrench)) + if(water_level == 0) + usr << "\blue Now disassembling [src]" + playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + if(do_after(user,50)) + destroy(1) + else + usr << "[src] must be empty before you disassemble it!" + return + //Fish eggs + else if(istype(O, /obj/item/fish_eggs)) + var/obj/item/fish_eggs/egg = O + //Don't add eggs if there is no water (they kinda need that to live) + if(water_level == 0) + usr << "[src] has no water; [egg.name] won't hatch without water!" + else + //Don't add eggs if the tank already has the max number of fish + if(fish_count >= max_fish) + usr << "[src] can't hold any more fish." + else + add_fish(egg.fish_type) + qdel(egg) + return + //Fish food + else if(istype(O, /obj/item/weapon/fishfood)) + //Only add food if there is water and it isn't already full of food + if(water_level) + if(food_level < 10) + if(fish_count == 0) + user.visible_message("[user.name] shakes some fish food into the empty [src]... How sad.", "You shake some fish food into the empty [src]... If only it had fish.") + else + user.visible_message("[user.name] feeds the fish in \the [src]. The fish look excited!", "You feed the fish in \the [src]. They look excited!") + food_level += 10 + else + usr << "[src] already has plenty of food in it. You decide to not add more." + else + usr << "[src] doesn't have any water in it. You should fill it with water first." + check_food_level() + return + //Fish egg scoop + else if(istype(O, /obj/item/weapon/egg_scoop)) + if(egg_count) + user.visible_message("[user.name] harvests some fish eggs from \the [src].", "You scoop the fish eggs out of \the [src].") + harvest_eggs(user) + else + user.visible_message("[user.name] fails to harvest any fish eggs from \the [src].", "There are no fish eggs in \the [src] to scoop out.") + return + //Fish net + if(istype(O, /obj/item/weapon/fish_net)) + if(fish_count > 0) + var/caught_fish = pick(fish_list) + usr << "You catch and remove a [caught_fish] from \the [src]." + kill_fish(caught_fish) + //TODO: Fish object spawning, need to get sprites before I can code the fish objects + else + usr << "There are no fish in \the [src] to catch!" + return + //Tank brush + if(istype(O, /obj/item/weapon/tank_brush)) + if(filth_level == 0) + usr << "[src] is already spotless!" + else + filth_level = 0 + user.visible_message("[user.name] scrubs the inside of \the [src], cleaning the filth.", "You scrub the inside of \the [src], cleaning the filth.") + else if(O && O.force) + user.visible_message("\The [src] has been attacked by [user.name] with \the [O]!") + hit(O.force) + return diff --git a/code/modules/hydroponics/trays/tray.dm b/code/modules/hydroponics/trays/tray.dm index da6cf21d909..b142a1fa9b1 100644 --- a/code/modules/hydroponics/trays/tray.dm +++ b/code/modules/hydroponics/trays/tray.dm @@ -71,7 +71,8 @@ "adminordrazine" = 1, "eznutrient" = 1, "robustharvest" = 1, - "left4zed" = 1 + "left4zed" = 1, + "fishwater" = 0.75, ) var/global/list/weedkiller_reagents = list( "fluorine" = -4, @@ -98,6 +99,7 @@ "phosphorus" = -0.5, "water" = 1, "sodawater" = 1, + "fishwater" = 1, ) // Beneficial reagents also have values for modifying yield_mod and mut_mod (in that order). diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index 61f1db03b17..ebb3a0d2dcf 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -205,6 +205,24 @@ datum reagent_state = LIQUID color = "#B97A57" + fishwater + name = "Fish Water" + id = "fishwater" + description = "Smelly water from a fish tank. Gross!" + reagent_state = LIQUID + color = "#757547" + + on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M << "Oh god, why did you drink that?" + if(prob(30)) // Nasty, you drank this stuff? 30% chance of the fakevomit (non-stunning version) + if(prob(50)) // 50/50 chance of green vomit vs normal vomit + M.fakevomit(1) + else + M.fakevomit(0) + ..() + return + water name = "Water" id = "water" diff --git a/icons/obj/fish_items.dmi b/icons/obj/fish_items.dmi new file mode 100644 index 0000000000000000000000000000000000000000..f21be0bb9e697f98f57bd4282a3d9de305a23626 GIT binary patch literal 6806 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 A&Hw-a literal 0 HcmV?d00001 diff --git a/icons/obj/toy.dmi b/icons/obj/toy.dmi index 6eec85eca7167b9af373c30d26c6a79b7646a329..0bd2935fe91daac1168d51a6c21c002428ecd493 100644 GIT binary patch delta 8887 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 Ca@=wN diff --git a/icons/obj/vending.dmi b/icons/obj/vending.dmi index 3368ccb533164703a1ac8f6241f46f6bc4a7a97c..718cdf5ebde9156a25d35c06c7a0f299063193b9 100755 GIT binary patch delta 3704 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 delta 980 zcmV;_11tQP3djkt0|9@SdQ@0+L}hbha%pgMX>V=-0C=2JR&a84_w-Y6@%7{?OD!tS z%+FJ>RWQ*r;NmRLOex6#a*U0*I5Sc+(=$pSoZ^zil2jm5sVFrqGbbm$I4?0dTZxM^ zC9|j)C~U~ZnO2mTn+joLD9+8#P9;`xQht6F(TbDva}tSFo0Wf0g0aOVrMbi_&&e;z zNG-;tTv@@@&jlRV0Lqwd=jUeamjD0*3`s;mRA_Kd z5ol=zeT({_yuFbl zzFMW+^*lmIIro3L4C6n8Ist8!apHNd>ylC)cDa1Szii}iLH*)CK%5ZwD>HC^zZ#3CTUl9IS^YDr`^tBa zl=0hO8E}6^<@r8NXq?1|J6ql#oSdArozn5cTv1fUM`Jn~kCLJRu0I$Q4N$&^`lqJ` zp2Xw0kUgCuhx&c<{UC^nON4ncq9q1`5Bk)6KM0~zWB!k6Y~+1|7h)qe#YY+yfl%aSt#*JHOBwK-Fkt5UJtzax#CJTnY|7(1hO_LDh5(`Fa=x z;sNM^T3|Yx&93AOXsq%yO{07bdhCK;YYpbXT;_kJ2i)KaBsn?Te&R{;A z2ZkQ(&S0#cK`Li(eRHe3AMhm-`Cjb-{~abE?+?jHcR%0;g5TWg^ZhW8`5t$JteO{FdkYmsd5v))LS6 z>+F5~o~`qI-*kPE@7G)<`M$P6RlcunVDr7z|E!+~9*1+8q1&hc0000 Date: Sat, 13 Jun 2015 04:13:47 -0400 Subject: [PATCH 2/2] Feedback Fixes Changes instances of \red and \blue to use spans as per suggestions in glass.dm and fishtank.dm Fixed a mistake preventing the building of one direction windows and fishbowls (whoops!) Fixes grammar concerns in multiple messages Holy water is now (magically?) worth 110% of it's reagent amount when filling aquariums. - This is a rather small boost to having the chaplain bless the water you are going to dump into a filtration system anyways. Moves the fishwater ingestion method out of the on_mob_life proc to prevent spam, now will display when initially ingested Updates the CritterCare vendor's sprite to include the pug and fox, as well as adjusting the "static" between displays to give it a slight variety. --- .../game/objects/items/stacks/sheets/glass.dm | 60 ++++++++++-------- code/modules/fish/fish_items.dm | 2 +- code/modules/fish/fishtank.dm | 16 ++--- code/modules/reagents/Chemistry-Reagents.dm | 7 +- icons/obj/vending.dmi | Bin 80772 -> 81443 bytes 5 files changed, 48 insertions(+), 37 deletions(-) diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm index cd9a551a4f4..b0cc8eb0ba0 100644 --- a/code/game/objects/items/stacks/sheets/glass.dm +++ b/code/game/objects/items/stacks/sheets/glass.dm @@ -42,7 +42,7 @@ user << "\b There is not enough wire in this coil. You need 5 lengths." return CC.use(5) - user << "\blue You attach wire to the [name]." + user << "You attach wire to the [name]." new /obj/item/stack/light_w(user.loc) src.use(1) else if( istype(W, /obj/item/stack/rods) ) @@ -64,12 +64,12 @@ if(!user || !src) return 0 if(!istype(user.loc,/turf)) return 0 if(!user.IsAdvancedToolUser()) - user << "\red You don't have the dexterity to do this!" + user << "You don't have the dexterity to do this!" return 0 var/title = "Sheet-Glass" title += " ([src.amount] sheet\s left)" switch(input(title, "What would you like to construct?") in list("One Direction Window", "Full Window", "Fishbowl", "Fish Tank", "Wall Aquarium", "Cancel")) - if("One Direction") + if("One Direction Window") if(!src) return 1 if(src.loc != user) return 1 @@ -78,11 +78,11 @@ for (var/obj/structure/window/win in user.loc) i++ if(i >= 4) - user << "\red There are too many windows in this location." + user << "There are too many windows in this location." return 1 directions-=win.dir if(win.is_fulltile()) - user << "\red Can't let you do that." + user << "Can't let you do that." return 1 //Determine the direction. It will first check in the direction the person making the window is facing, if it finds an already made window it will try looking at the next cardinal direction, etc. @@ -108,21 +108,27 @@ if(!src) return 1 if(src.loc != user) return 1 if(src.amount < 2) - user << "\red You need more glass to do that." + user << "You need more glass to do that." return 1 if(locate(/obj/structure/window/full) in user.loc) - user << "\red There is a full window in the way." + user << "There is a full window in the way." return 1 var/obj/structure/window/W = new full_window( user.loc, 0 ) W.state = 0 W.anchored = 0 W.air_update_turf(1) src.use(2) + if("Fishbowl") + if(!src) return 1 + if(src.loc != user) return 1 + var/obj/machinery/fishtank/F = new /obj/machinery/fishtank/bowl(user.loc, 0) + F.air_update_turf(1) + src.use(1) if("Fish Tank") if(!src) return 1 if(src.loc != user) return 1 if(src.amount < 3) - user << "\red You need more glass to do that." + user << "You need more glass to do that." return 1 var/obj/machinery/fishtank/F = new /obj/machinery/fishtank/tank(user.loc, 0) F.air_update_turf(1) @@ -131,7 +137,7 @@ if(!src) return 1 if(src.loc != user) return 1 if(src.amount < 4) - user << "\red You need more glass to do that." + user << "You need more glass to do that." return 1 var/obj/machinery/fishtank/F = new /obj/machinery/fishtank/wall(user.loc, 0) F.air_update_turf(1) @@ -168,7 +174,7 @@ if(!user || !src) return 0 if(!istype(user.loc,/turf)) return 0 if(!user.IsAdvancedToolUser()) - user << "\red You don't have the dexterity to do this!" + user << "You don't have the dexterity to do this!" return 0 var/title = "Sheet Reinf. Glass" title += " ([src.amount] sheet\s left)" @@ -181,11 +187,11 @@ for (var/obj/structure/window/win in user.loc) i++ if(i >= 4) - user << "\red There are too many windows in this location." + user << "There are too many windows in this location." return 1 directions-=win.dir if(win.is_fulltile()) - user << "\red Can't let you do that." + user << "Can't let you do that." return 1 //Determine the direction. It will first check in the direction the person making the window is facing, if it finds an already made window it will try looking at the next cardinal direction, etc. @@ -211,10 +217,10 @@ if(!src) return 1 if(src.loc != user) return 1 if(src.amount < 2) - user << "\red You need more glass to do that." + user << "You need more glass to do that." return 1 if(locate(/obj/structure/window/full) in user.loc) - user << "\red There is a window in the way." + user << "There is a window in the way." return 1 var/obj/structure/window/W = new full_window( user.loc, 0 ) W.state = 0 @@ -225,15 +231,15 @@ if(!src || src.loc != user) return 1 if(isturf(user.loc) && locate(/obj/structure/windoor_assembly/, user.loc)) - user << "\red There is already a windoor assembly in that location." + user << "There is already a windoor assembly in that location." return 1 if(isturf(user.loc) && locate(/obj/machinery/door/window/, user.loc)) - user << "\red There is already a windoor in that location." + user << "There is already a windoor in that location." return 1 if(src.amount < 5) - user << "\red You need more glass to do that." + user << "You need more glass to do that." return 1 var/obj/structure/windoor_assembly/WD @@ -296,7 +302,7 @@ if(!user || !src) return 0 if(!istype(user.loc,/turf)) return 0 if(!user.IsAdvancedToolUser()) - user << "\red You don't have the dexterity to do this!" + user << " You don't have the dexterity to do this!" return 0 var/title = "Plasma-glass alloy" title += " ([src.amount] sheet\s left)" @@ -309,11 +315,11 @@ for (var/obj/structure/window/win in user.loc) i++ if(i >= 4) - user << "\red There are too many windows in this location." + user << "There are too many windows in this location." return 1 directions-=win.dir if(!(win.ini_dir in cardinal)) - user << "\red Can't let you do that." + user << "Can't let you do that." return 1 //Determine the direction. It will first check in the direction the person making the window is facing, if it finds an already made window it will try looking at the next cardinal direction, etc. var/dir_to_set = 2 @@ -336,10 +342,10 @@ if(!src) return 1 if(src.loc != user) return 1 if(src.amount < 2) - user << "\red You need more glass to do that." + user << "You need more glass to do that." return 1 if(locate(/obj/structure/window) in user.loc) - user << "\red There is a window in the way." + user << "There is a window in the way." return 1 var/obj/structure/window/W = new full_window( user.loc, 0 ) W.state = 0 @@ -369,7 +375,7 @@ if(!user || !src) return 0 if(!istype(user.loc,/turf)) return 0 if(!user.IsAdvancedToolUser()) - user << "\red You don't have the dexterity to do this!" + user << "You don't have the dexterity to do this!" return 0 var/title = "Reinforced plasma-glass alloy" title += " ([src.amount] sheet\s left)" @@ -382,11 +388,11 @@ for (var/obj/structure/window/win in user.loc) i++ if(i >= 4) - user << "\red There are too many windows in this location." + user << "There are too many windows in this location." return 1 directions-=win.dir if(!(win.ini_dir in cardinal)) - user << "\red Can't let you do that." + user << "Can't let you do that." return 1 //Determine the direction. It will first check in the direction the person making the window is facing, if it finds an already made window it will try looking at the next cardinal direction, etc. var/dir_to_set = 2 @@ -409,10 +415,10 @@ if(!src) return 1 if(src.loc != user) return 1 if(src.amount < 2) - user << "\red You need more glass to do that." + user << "You need more glass to do that." return 1 if(locate(/obj/structure/window) in user.loc) - user << "\red There is a window in the way." + user << "There is a window in the way." return 1 var/obj/structure/window/W = new full_window( user.loc, 0 ) W.state = 0 diff --git a/code/modules/fish/fish_items.dm b/code/modules/fish/fish_items.dm index b1171871c25..08254a072be 100644 --- a/code/modules/fish/fish_items.dm +++ b/code/modules/fish/fish_items.dm @@ -22,7 +22,7 @@ throw_range = 7 suicide_act(mob/user) //"A tiny net is a death sentence: it's a net and it's tiny!" https://www.youtube.com/watch?v=FCI9Y4VGCVw - viewers(user) << "[user] placed the [src.name] on top of \his head, \his fingers tangled in the netting! It looks like \he's trying to commit suicide." + viewers(user) << "[user] places the [src.name] on top of \his head, \his fingers tangled in the netting! It looks like \he's trying to commit suicide." return(OXYLOSS) /obj/item/weapon/fishfood diff --git a/code/modules/fish/fishtank.dm b/code/modules/fish/fishtank.dm index 591329480f9..108242809f6 100644 --- a/code/modules/fish/fishtank.dm +++ b/code/modules/fish/fishtank.dm @@ -299,7 +299,7 @@ fish_list.Add("[type]") //Add a fish of the specified type fish_count ++ //Increase fish_count to reflect the introduction of a fish, so the everything else works fine //Announce the new fish - src.visible_message("A new [type] hatched in \the [src]!") + src.visible_message("A new [type] has hatched in \the [src]!") //Null type fish are dud eggs, give a message to inform the player else usr << "The eggs disolve in the water. They were duds!" @@ -481,7 +481,7 @@ s.set_up(3, 1, src) s.start() else //No water or didn't slip, get that fish! - M.visible_message("[M.name] caught and devoured a live fish!", "You catch and devour a live fish, yum!") + M.visible_message("[M.name] catches and devours a live fish!", "You catch and devour a live fish, yum!") kill_fish() //Kill a random fish M.health = M.maxHealth //Eating fish heals the predator else @@ -499,7 +499,7 @@ if(water_level && prob(5)) //Bears are good at catching fish, only a 5% chance to fail M.visible_message("[M.name] swipes at the water!", "You just barely missed that fish!") else //No water or didn't slip, get that fish! - M.visible_message("[M.name] caught and devoured a live fish!", "You catch and devour a live fish, yum!") + M.visible_message("[M.name] catches and devours a live fish!", "You catch and devour a live fish, yum!") kill_fish() //Kill a random fish M.health = M.maxHealth //Eating fish heals the predator else @@ -532,8 +532,8 @@ else if (usr.a_intent == "harm") user.changeNext_move(CLICK_CD_MELEE) playsound(get_turf(src), 'sound/effects/glassknock.ogg', 80, 1) - usr.visible_message("\red [usr.name] bangs against the [src.name]!", \ - "\red You bang against the [src.name]!", \ + usr.visible_message("[usr.name] bangs against the [src.name]!", \ + "You bang against the [src.name]!", \ "You hear a banging sound.") else user.changeNext_move(CLICK_CD_MELEE) @@ -584,14 +584,14 @@ if(O.is_open_container()) if(istype(O, /obj/item/weapon/reagent_containers/glass)) if(lid_switch) - usr << "Open the lid on [src] first!" + usr << "Open the lid on \the [src] first!" return var/obj/item/weapon/reagent_containers/glass/C = O //Containers with any reagents will get dumped in if(C.reagents.total_volume) var/water_value = 0 water_value += C.reagents.get_reagent_amount("water") //Water is full value - water_value += C.reagents.get_reagent_amount("holywater") //Holywater is full value + water_value += C.reagents.get_reagent_amount("holywater") *1.1 //Holywater is (somehow) better. Who said religion had to make sense? water_value += C.reagents.get_reagent_amount("tonic") * 0.25 //Tonic water is 25% value water_value += C.reagents.get_reagent_amount("sodawater") * 0.50 //Sodawater is 50% value water_value += C.reagents.get_reagent_amount("fishwater") * 0.75 //Fishwater is 75% value, to account for the fish poo @@ -633,7 +633,7 @@ //Wrenches can deconstruct empty tanks, but not tanks with any water. Kills any fish left inside and destroys any unharvested eggs in the process if(istype(O, /obj/item/weapon/wrench)) if(water_level == 0) - usr << "\blue Now disassembling [src]" + usr << "Now disassembling [src]." playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) if(do_after(user,50)) destroy(1) diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index ebb3a0d2dcf..fd0b5638d68 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -212,9 +212,14 @@ datum reagent_state = LIQUID color = "#757547" + reaction_mob(var/mob/M, var/method=TOUCH, var/volume) + if(!istype(M, /mob/living)) + return + if(method == INGEST) + M << "Oh god, why did you drink that?" + on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom - M << "Oh god, why did you drink that?" if(prob(30)) // Nasty, you drank this stuff? 30% chance of the fakevomit (non-stunning version) if(prob(50)) // 50/50 chance of green vomit vs normal vomit M.fakevomit(1) diff --git a/icons/obj/vending.dmi b/icons/obj/vending.dmi index 718cdf5ebde9156a25d35c06c7a0f299063193b9..95bb1778cde4bde309da7916e2bafa115517fdfc 100755 GIT binary patch delta 4430 zcmYjTcQ{xIOlBgL?r$ zVBW_pJ@}L)RpiiK1>NL(sUH33UQyP~%o?=o;@#yDSEcI>wZve>w~sdi?wqCf9B+DE zHhj~`mm(p2&%~?ud@=Fu!@bJTm>KlbZnFN`_f#9rCCP|j20A=mB5MMU>ER``^q}_Gq?=tQj`ga3biTMp$ zNko}X_v_l`&(`sjzFPt;{hC2xMYH$J-L0tHJtn~#19u6wr>8t60P(h{@Z-_dbH6mKQ8Uc-%Nj$ z0pWoi(`ASqQJoP#(|WBrSAPF55g(=9#-Hkqw>?Sm-Gy`X==4Zui!DFVAQrv?uMoV* zssgDGxEH?WfXbWbqtzI4*Bjqu8aX#EO%J+QXIY$g_!ioZ>#TmJ8Pe9nLXQgv>X;E| zoMG6{SQqg=>Q5f&*|XC%pZQ;E-rIXQK=Juo7Mln9na~aEH*66^ZgZ}y3jrEkzV9?& zTd-GnH}2mKqq-qT6I0|I>~-$^xUWg(hCV$w*-k4bdxz+(tAtcv-R&4$eq9~qRV896 zM&03K1d+!HdYwZ1)X@ns_Cbl{R0G{|#J-SpQArl%Vs~YQg%wZwEXrDeuqGf?T~1ng zs7aTO69359G&Y&hRI;>w!Mm64JMyr6QSBA0+E~Ipig$jk^Y(|kOSaE1-qcGy7b*ws z4WIOe!`YW3XDKb4+V?yys?2EECF*>3oy*cSqPn&f+eUt|NH;x_fb966nPKuoB$tLK zPS_I0KF;qI%h&& zK+xQwv1v)fUYXY%vP~8W2PQ({YO|mg!;^gJFc)6|o`F1a|8h#2rF9K7WEg_ zS6J7fn@zaXD$0DuS3zNKywnD^_|(?E`~?26g&9O8x? zVu%$F5gStjh7XcV1*!Ej5B#E_aak zs$}Si*Y>m$z9RSBO$I-mrGR(-UVUmI(|*95s*QtBJ$gCj{)~lWcyuC4*nI*O)9XmD zOs`*hP@FbY0daA0Ic*!2e)v`X8VeKC{MraIbVu;oHR^-WQTnnGd)LQF7mBuv6QHMD z%d7k>Y>!~5E4VxKN|6jOEXykh!yiJDTJVnP2VJ_ypOxfj!IbLd1)wq5c*0d?ZG98E zbSa*;=8{yV+QWx$jRh$SH@5w^#Iy(-0QYyt+-0Hd(_R>(Z!JqI7mj0Dm<*i{P#yuJ zext&#v?iXOp8hpI&es|b5B=7Tg5F+`7tjM*M~6q?iP)m}nfle_J5b?r1^W;Z9+RG% zL_A9~62*VLk}z?pVf~y=9a!vl`A4jIS7SAVpS`=P!-ugXNUdT*F`ebGc6)tOLx0;* zoou)F;altdckkcRb8}0$1~Ww8qA+plzWhoynVZ-s=f%tgyForrdz`z<9(|4h(1OwY zWTGlZ0g?b2p0m%dYP{Eds!r3%SU0&9ZsQ&w7x%iR#`jZGkD$ul^1Scjk*6FxDH+*G zl-$I6VsND|9J@H0;PXqUukIWtO`r60Rn-DEabAGMZ~k~v@#&FVw~1=~Ks>2JJCdWn z9`4PWyf6y6GFu2QIy^fVlAbcx(jwc7HaOGn0qxp?WEr5ScJIeqld_3!`q9zRXU%&j z9CpZ&%iAPE0q5bjA2M^n@URry3iAgpE|Z(?9*{b=>=qZ^8yMah-YXU4o|TD-iBV{0 zhVOFxy|+h4M#93$Xc-EyJ+zLY@SVRKpOq8a!r>LhryFDMflg4S&%15WTXDte+0RPv1TET#dB|*sWCD$mwXWwQajD?^!Gi{XTp5j@lv5Mb#g-LmW;SE&ORBB zFDfdsud*O9Z?CLO5-vy`j!h)=QhUhR*;$C9By)X(<;OESEroL5v<6{NQ1^T}<0t0A zaJ7bUl_bz|XB+|`zI`*&7JuFrjG+K;lK-x8v_Z&1e^-If^3qb@mw+h}LrY6{yHfFF z5?2|vt#&2e1t?)Vzt3VWD#e-u_S*#miJYIBfX?@~+2O}i)g+nx|9%u| zM-wU}eD@tEi)opmi7d05TSQ+4Zu1wB-%ZYZ{bc+>N0%R$fYCYe`3z-g zL6@Ow+k9-gGYufRBYF+wx=6eR8_ba~6Fb?eTTRYTHF%sOYZsU1d?BK7eMMz#wU!F# z{b)AqQDX{A4crz z88p(%%5#!oN7FgJef#-7BDhpMWT~JgLH@F zisdnnQu)+J=xZ1*5gc93Xp@Bq4dV51``0C&(A1Xc?rGemi7YuMQSDh$%WY;nFalQ_ ztwF&DdZd1WCDTg+5T=PEl89j z(H{Q(F6uoC`!IVwr0pHGN{{dUa|81BgS=+CPGU2sGt5)Ya}&n*)=|g_2bsI^gwSL&l=Fw? zt63L?x`U}Le=1rIHCz+t%a^vX_dKXO#IFWj^KDOA4uGnGjylW)qMryQzH@g^#Uwl( z!+$K$If=7UKvFJuC?u@tP=29I!1)nb>=Khhs>{J5vvAKQPx<{8Ua@tRu(%ol*k(zv zScMGk0Ou+Dx^!$VZ6)LWL3l5oa$=%r`{*PvaGkR8N$_Rh@#Zldm+dLhhHXJ&#HI)T zB3bykD2Pj~EE6T~HZJmZ4*V77>)c367*`RN($BTUr-aaW$DR~!R%4RCXI8t<=tn$~ zQ&NcRKd`E~w;L@t5KGGL=(CZp+Cuc{6)vnz!NK5 zx8qezFve*TsAxJ_JV zb1Z#hS;-MGE0Yu~y}4CP4J7aPEXA|?FrW(SH7mX`@djXzgxneV%8{=9>4`hltm?}S zyD|Hm-0Bb5u-c2NImL~-nvPGzvlG0*#q_hb9-l@@UpLLXP?jEV%p>NXEP!H4>^xnU zM?dyrt`du#bUA}Z&#L6j4z6afv{D0&{z!I|yRDy<8Nq6MO=7b0Uw1Dj(74uJZycKq zPfn({-Uin?byeHLXV@q9()sR%9b>dUV3Ff&Z~f2rC<-j+{H1uR&J0s0vH?_o^Pyx4 z#Jb7n5|EUaN9D2aFlU{|h+2W6z{k99!nLi3Ljb}~KRdEGIT=eDj$KT2oX0cwX?7XH z^+!XGrAiv&2-JI4r&Tc%jn#7x&_4)2@H~*~kaS2-O^osG(aO?#p+xbL3hgM=ZN4^cxh-PH?`Wnfh{NCrK1g4gi+1y8Yrg? z0ETO6i&uh##gAvKEHBU6X`|smYEc0Y04-!t3-S6QT!+^K5Cg%igR6*@;W7{`-Jbw} zkocMob6d9~I1ys-!OV@u*OjN>cJQ0jw6ly1=IuKqUfw%__jfhaxo|*QsX@1t%;o-J zp06AxxODM*1uGhoj!_PDe*}6J)!TcL?lNdsX&+|i#(ZX&JfV+xa6JGO0B+H(944gzFh z85gqOW|M%EnK?T(i}DRAE}pw+Syxp;8Cz0>3iWw#BTDa36VxBuk?=JC+r4DAP@Gz~ z#DD&R_Rh)8XpoRq`WuQH@g|ZI-HHA81ubu-T#;V%u5yK>FKSl zyn}Wk&M56amZF^_1ay|mb+G<{FxQDnY71nFBWR#u^>q%MsFuS!vcsVB7o4$lsgW@6JcJ3IThdD2qtqvlHa{l39xF9R+=*W=l;Z|4BQqkUWdR{3A{&;JiI Co5O_w delta 3720 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 aPBsKrDxiQ~=cXP8ILE{gWl*l~6!AYC5LtQv