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 00000000000..f21be0bb9e6 Binary files /dev/null and b/icons/obj/fish_items.dmi differ diff --git a/icons/obj/toy.dmi b/icons/obj/toy.dmi index 6eec85eca71..0bd2935fe91 100644 Binary files a/icons/obj/toy.dmi and b/icons/obj/toy.dmi differ diff --git a/icons/obj/vending.dmi b/icons/obj/vending.dmi index 3368ccb5331..718cdf5ebde 100755 Binary files a/icons/obj/vending.dmi and b/icons/obj/vending.dmi differ diff --git a/icons/obj/vending_restock.dmi b/icons/obj/vending_restock.dmi index aa9f2873f02..548f5ce5869 100644 Binary files a/icons/obj/vending_restock.dmi and b/icons/obj/vending_restock.dmi differ diff --git a/paradise.dme b/paradise.dme index 2d679fe3a4f..0f0555938f0 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1118,6 +1118,9 @@ #include "code\modules\events\tgevents\vent_clog.dm" #include "code\modules\ext_scripts\irc.dm" #include "code\modules\ext_scripts\python.dm" +#include "code\modules\fish\fish_eggs.dm" +#include "code\modules\fish\fish_items.dm" +#include "code\modules\fish\fishtank.dm" #include "code\modules\flufftext\Dreaming.dm" #include "code\modules\flufftext\Hallucination.dm" #include "code\modules\flufftext\TextFilters.dm"