diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm
index 1008480b6f3..5f0de7272de 100644
--- a/code/__HELPERS/unsorted.dm
+++ b/code/__HELPERS/unsorted.dm
@@ -1202,7 +1202,7 @@ proc/oview_or_orange(distance = world.view , center = usr , type)
proc/get_mob_with_client_list()
var/list/mobs = list()
- for(var/mob/M in world)
+ for(var/mob/M in mob_list)
if (M.client)
mobs += M
return mobs
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index a895a0dd3c1..c4a2bfeb6b4 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -70,6 +70,7 @@ datum/preferences
var/language = "None" //Secondary language
//Mob preview
+ var/icon/preview_icon = null
var/icon/preview_icon_front = null
var/icon/preview_icon_side = null
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index 113d0e8a56d..a4a14715a48 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -1,6 +1,3 @@
-#define GHOST_DARK_ALPHA 10
-#define GHOST_LIGHT_ALPHA 255
-#define GHOST_DARK_CUTOFF 1
/mob/dead/observer
name = "ghost"
desc = "It's a g-g-g-g-ghooooost!" //jinkies!
@@ -34,6 +31,7 @@
see_invisible = SEE_INVISIBLE_OBSERVER
see_in_dark = 100
verbs += /mob/dead/observer/proc/dead_tele
+
stat = DEAD
var/turf/T
@@ -75,11 +73,25 @@
if(!name) //To prevent nameless ghosts
name = capitalize(pick(first_names_male)) + " " + capitalize(pick(last_names))
real_name = name
-
- ghostMulti = new(src)
-
..()
+
+/mob/dead/attackby(obj/item/W, mob/user)
+ if(istype(W,/obj/item/weapon/tome))
+ var/mob/dead/M = src
+ if(src.invisibility != 0)
+ M.invisibility = 0
+ user.visible_message( \
+ "\red [user] drags ghost, [M], to our plan of reality!", \
+ "\red You drag [M] to our plan of reality!" \
+ )
+ else
+ user.visible_message ( \
+ "\red [user] just tried to smash his book into that ghost! It's not very effective", \
+ "\red You get the feeling that the ghost can't become any more visible." \
+ )
+
+
/mob/dead/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
return 1
/*
@@ -224,34 +236,13 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
return
-// In darkness over a certain threshold, ghosts become slightly visible for the spooky value.
-/mob/dead/observer/proc/amInDarkPlace()
- //var/turf/simulated/T = get_turf(src)
- //if(!istype(T))
- // return 0
- //if(T.lighting_lumcount <= GHOST_DARK_CUTOFF)
- // return 1
- return 0
-
-/mob/dead/observer/proc/updateSpookyAlpha()
- if(amInDarkPlace())
- alpha=GHOST_DARK_ALPHA
- invisibility=0
- else
- alpha=GHOST_LIGHT_ALPHA
- invisibility=INVISIBILITY_OBSERVER
-
-///mob/dead/observer/SetLuminosity(new_luminosity, max_luminosity)
-// ..()
-// updateSpookyAlpha()
-
/mob/dead/observer/Move(NewLoc, direct)
dir = direct
if(NewLoc)
loc = NewLoc
for(var/obj/effect/step_trigger/S in NewLoc)
S.HasEntered(src)
- updateSpookyAlpha() // Added SetLuminosity above, probably not worth it.
+
return
loc = get_turf(src) //Get out of closets and such as a ghost
if((direct & NORTH) && y < world.maxy)
@@ -265,7 +256,6 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
for(var/obj/effect/step_trigger/S in locate(x, y, z)) //<-- this is dumb
S.HasEntered(src)
- updateSpookyAlpha()
/mob/dead/observer/examine()
if(usr)
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 51957fec1ea..c0f1786bb84 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -722,6 +722,8 @@ var/list/slot_equipment_priority = list( \
set category = "IC"
set src = usr
+ if(istype(loc,/obj/mecha)) return
+
if(hand)
var/obj/item/W = l_hand
if (W)
@@ -826,6 +828,10 @@ var/list/slot_equipment_priority = list( \
return
else
var/deathtime = world.time - src.timeofdeath
+ var/mob/dead/observer/G = src
+ if(G.has_enabled_antagHUD == 1 && config.antag_hud_restricted)
+ usr << "\blue Upon using the antagHUD you forfeighted the ability to join the round."
+ return
var/deathtimeminutes = round(deathtime / 600)
var/pluralcheck = "minute"
if(deathtimeminutes == 0)
diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm
index dade29ca189..498f9c0f8e5 100644
--- a/code/modules/mob/new_player/new_player.dm
+++ b/code/modules/mob/new_player/new_player.dm
@@ -125,13 +125,21 @@
var/obj/O = locate("landmark*Observer-Start")
src << "\blue Now teleporting."
observer.loc = O.loc
+ observer.timeofdeath = world.time // Set the time of death so that the respawn timer works correctly.
+
+ client.prefs.update_preview_icon()
+ observer.icon = client.prefs.preview_icon
+ observer.alpha = 127
+
if(client.prefs.be_random_name)
client.prefs.real_name = random_name(client.prefs.gender)
observer.real_name = client.prefs.real_name
observer.name = observer.real_name
+ if(!client.holder && !config.antag_hud_allowed) // For new ghosts we remove the verb from even showing up if it's not allowed.
+ observer.verbs -= /mob/dead/observer/verb/toggle_antagHUD // Poor guys, don't know what they are missing!
observer.key = key
-
del(src)
+
return 1
if(href_list["late_join"])
@@ -364,10 +372,10 @@ Round Duration: [round(hours)]h [round(mins)]m
"}
var/datum/language/chosen_language
if(client.prefs.language)
- chosen_language = all_languages[client.prefs.language]
+ chosen_language = all_languages["[client.prefs.language]"]
if(chosen_language)
if(is_alien_whitelisted(src, client.prefs.language) || !config.usealienwhitelist || !(chosen_language.flags & WHITELISTED))
- new_character.add_language(client.prefs.language)
+ new_character.add_language("client.prefs.language")
if(ticker.random_players || appearance_isbanned(src)) //disabling ident bans for now
new_character.gender = pick(MALE, FEMALE)
client.prefs.real_name = random_name(new_character.gender)
diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm
index e8c8eb4d873..4b06691f591 100644
--- a/code/modules/mob/new_player/preferences_setup.dm
+++ b/code/modules/mob/new_player/preferences_setup.dm
@@ -131,7 +131,7 @@ datum/preferences
proc/update_preview_icon() //seriously. This is horrendous.
del(preview_icon_front)
del(preview_icon_side)
- var/icon/preview_icon = null
+ del(preview_icon)
var/g = "m"
if(gender == FEMALE) g = "f"
diff --git a/html/changelog.html b/html/changelog.html
index 8f0256945f0..b335e65a0cf 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -79,6 +79,8 @@
N3X15 updated:
- Circuit imprinters have a processing queue and use the new internal material handling system for easier addition of materials in the future.
+ - Added blast doors to atmos mix tank.
+ - RPD added to CE's office.
- Fix monkeys not having their genes set correctly.
Imported from Baystation 12:
diff --git a/maps/tgstation.2.1.0.0.1.dmm b/maps/tgstation.2.1.0.0.1.dmm
index d4ec1cfa433..37b220b5d9c 100644
--- a/maps/tgstation.2.1.0.0.1.dmm
+++ b/maps/tgstation.2.1.0.0.1.dmm
@@ -5175,12 +5175,12 @@
"bVA" = (/obj/machinery/atmospherics/pipe/manifold{_color = "yellow"; icon_state = "manifold-y"; level = 2},/obj/machinery/meter,/turf/simulated/floor,/area/atmos)
"bVB" = (/obj/machinery/atmospherics/pipe/manifold{_color = "yellow"; icon_state = "manifold-y"; level = 2},/turf/simulated/floor,/area/atmos)
"bVC" = (/obj/machinery/atmospherics/pipe/simple{_color = "yellow"; dir = 4; icon_state = "intact-y"; level = 2},/turf/simulated/floor,/area/atmos)
-"bVD" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/atmospherics/valve/digital{_color = "yellow"; dir = 4; name = "Gas Mix Outlet Valve"},/turf/simulated/floor{dir = 5; icon_state = "green"},/area/atmos)
+"bVD" = (/obj/machinery/door/poddoor{icon_state = "pdoor1"; id = "mixing_vent"; name = "Mixing Tank Emergency Vent"; p_open = 0},/turf/simulated/floor/plating,/area/atmos)
"bVE" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple{_color = "green"; dir = 4; icon_state = "intact-g"; level = 2},/obj/machinery/atmospherics/pipe/simple{_color = "cyan"; icon_state = "intact-c"},/obj/machinery/atmospherics/pipe/simple{_color = "yellow"; dir = 4; icon_state = "intact-y"; level = 2},/obj/structure/grille,/turf/simulated/floor/plating,/area/atmos)
"bVF" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple{_color = "yellow"; dir = 4; icon_state = "intact-y"; level = 2},/obj/machinery/atmospherics/pipe/simple{_color = "green"; icon_state = "intact-g"; level = 2},/turf/space,/area)
"bVG" = (/obj/machinery/atmospherics/pipe/simple{dir = 4; level = 1},/obj/structure/grille,/obj/machinery/meter,/turf/simulated/wall/r_wall,/area/atmos)
"bVH" = (/obj/machinery/atmospherics/unary/vent_pump{canSpawnMice = 0; dir = 8; external_pressure_bound = 0; frequency = 1441; icon_state = "in"; id_tag = "waste_out"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/atmos)
-"bVI" = (/obj/machinery/camera{c_tag = "Atmospherics Waste Tank"},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/atmos)
+"bVI" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/atmospherics/valve/digital{_color = "yellow"; dir = 4; name = "Gas Mix Outlet Valve"},/obj/machinery/door_control{desc = "A remote control-switch for the engineering security doors."; id = "mixing_vent"; name = "EMERGENCY VENT"; pixel_x = 25; pixel_y = 0; req_access_txt = "10"},/turf/simulated/floor{dir = 5; icon_state = "green"},/area/atmos)
"bVJ" = (/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/atmos)
"bVK" = (/obj/machinery/door/airlock/external{req_access_txt = "13"; req_one_access_txt = "13"},/turf/simulated/floor/plating,/area/maintenance/asmaint)
"bVL" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/wall,/area/maintenance/asmaint)
@@ -5252,7 +5252,7 @@
"bWZ" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/manifold{tag = "icon-manifold-g (EAST)"; icon_state = "manifold-g"; dir = 4; level = 2; _color = "green"},/turf/space,/area)
"bXa" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/atmos)
"bXb" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "waste_sensor"; output = 63},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/atmos)
-"bXc" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/atmos)
+"bXc" = (/obj/machinery/camera{c_tag = "Atmospherics Waste Tank"},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/atmos)
"bXd" = (/turf/simulated/floor/plating,/area/maintenance/asmaint)
"bXe" = (/turf/simulated/wall/r_wall,/area/medical/virology)
"bXf" = (/obj/structure/sign/biohazard,/turf/simulated/wall,/area/medical/virology)
@@ -6191,7 +6191,7 @@
"cpc" = (/obj/structure/closet/secure_closet/engineering_chief{req_access_txt = "0"},/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/engine/chiefs_office)
"cpd" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8},/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/engine/chiefs_office)
"cpe" = (/obj/structure/table/reinforced,/obj/item/weapon/clipboard,/obj/item/clothing/glasses/meson{pixel_y = 4},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_Toxins = 1},/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/engine/chiefs_office)
-"cpf" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/table/reinforced,/obj/item/weapon/folder/yellow,/obj/item/weapon/stamp/ce,/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/engine/chiefs_office)
+"cpf" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/table/reinforced,/obj/item/weapon/folder/yellow,/obj/item/weapon/stamp/ce,/obj/item/weapon/pipe_dispenser,/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/engine/chiefs_office)
"cpg" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/pen,/obj/item/weapon/lighter/zippo,/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/engine/chiefs_office)
"cph" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/cable,/turf/simulated/floor/plating,/area/engine/chiefs_office)
"cpi" = (/obj/structure/closet/secure_closet/engineering_electrical,/turf/simulated/floor,/area/engine/break_room)
@@ -10358,7 +10358,7 @@
"dRj" = (/obj/machinery/light{dir = 1},/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/obj/machinery/computer/rdconsole/mommi,/turf/simulated/floor{icon_state = "white"},/area/construction/mommi_nest)
"dRk" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plating,/area/construction/mommi_nest)
"dRl" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 1; name = "MoMMI Nest APC"; pixel_y = 24},/obj/machinery/light_switch{pixel_x = 13; pixel_y = 25},/obj/structure/table,/obj/item/weapon/storage/bag/plasticbag,/obj/item/weapon/storage/bag/plasticbag,/obj/item/weapon/storage/bag/plasticbag,/obj/item/weapon/storage/bag/plasticbag,/turf/simulated/floor{icon_state = "white"},/area/construction/mommi_nest)
-
+
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -10515,9 +10515,9 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaagaagaagaagaagaagbHRbRFbRGbRHbHRbKwbRIbHRbKwbRJbHRaaaaaaaaaaaabHTbRKbRLbRMbRNbHTbRObHTbRPbRQbRRbRSbRSbRTbRUbRVbRWbRXbRYbRZbRZbRZbSabSbbRZbRZbScbRYbSdbSebSfbSfbSgbRZbJDbJDbJDbJDbJDbJDbJDbJDbJDbIzbsZbShbSibSjbSkbSlbxLbSmbPIbSnbSobSpbSqbSrbsZbSsbStbSubSvbSwbSxbSybSzbSAbSBbSCbSDbSEboKbSFboKbRkbNhboKbSGbRmbRnbSHbSIbSJbSKbSLbSMbSNbSObIHbSPbIMbBQbKnbKnbKnbKnbKnaagaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaabGebLPbLPbLPbLPbLPbLPbSQbHzbLObLPbSRbHBbHBbHBbHBbGeaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabHRbHRbHRbHRbHRbHRbHRbHRbKwbNIbSSbSTbSTbSTbSTbSTbSTbSTbSTbSTbSTbSUbSVbSWbSXbSYbSZbTabTbbTcbTcbTdbTebTfbTgbThbTibTjbTkbTlbTmbTnbTobTpbTqbTrbTsbTtbTuaagaaaaaaaaaaaaaaaaaabJDbTvbIzbsZbPFbrwbsZbrwbPFbTwbsZbrwbrwbrwbrwbrwbrwbsZbTxbIAbTybTzbTAbTBbTCbTDbTEbTFbTGbTHbTIbTJboKbTKbRkbNhbTLbTMbRmbRnbSHbTNbRqbTObRqbTPbTQbTRbIHbSPbIMbTSbTTbhLaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagbGebHBbHBbHBbHBbHBbHBbORbHzbSRbHBbHBbHBbHBbHBbGebGeaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabHRbTUbTVbTWbTWbTXbTWbTWbTYbTZbUabSTbUbbUcbUdbUebUfbUgbUhbUibUjbUkbUlbUmbUnbUobUpbUqbUrbUsbUsbUtbUubTfbUvbThbTibUwbTkbUxbUybUzbUAbUBbUCbUDbUEbUFbUGbUHbUIbUIbUIbUIbUIaaabJDbUJbUKbQLbQMbQNbQLbULbUMbUNbUObULbQNbQNbQNbQNbQNbUPbUQbIAbURbUSbUTbUUbUVbUWbUXbIAbIAbrQbUYbrQbrQbrQbUZbNhbVabrQbIHbIHbIHbIHbIHbVbbIHbIHbIHbIHbIHbSPbIMbVcbTTbhLaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaabGebGebNAbHBbHBbHBbHBbHBbHzbHBbHBbHBbHBbHBbGebGeaagaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabVdaaaaagaagbVebVebVebVebVebVebVebVebRJbVfbVfbVfbVfbVfbVgbVfbVfbSTbVhbVibVjbVjbVjbVjbVjbVjbVjbVkbSTbVlbVmbUobVnbVobTcbVpbTcbVqbVrbVsbVtbVubVvbVwbTkbVxbUybVybVzbVAbVBbVCbVCbVDbVEbVFbVGbVHbVIbVJbUIaaabJDbJDbVKbVLbVMbVNbPybVObVPbVQbVRbVObVObVSbVTbVObVObVUbIzbIAbIAbIAbIAbIAbIAbVVbOxbIAbVWbVXbVYbVZbWabrQbUYbWbbWcbrQbWdbWebWfbWgbWhbWibBQbBQbWjbBQbBQbSPbIMbWkbhLbhLbhLaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagbGdbGebWlbQfbQfbHBbHBbHBbHzbHBbHBbHBbHBbGebGeaagaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWmbWnbWobWpbWpbWpbWqbWrbWsbWtbWubWvbWwbVebWxbWybWzbWAbWBbWCbWDbWEbWFbSVbWGbVibVjbVjbWHbVjbVjbWIbWJbWKbSTbWLbVmbUobUpbWMbTcbTcbTcbWNbWObWPbWQbWRbVwbWSbWTbVwbWUbVybVzbWVbWWbWWbWWbWXbWYbWZbXabXbbVJbXcbUIaagbJDbTvbXdbJDaaaaagaaabXebXfbXgbXhbXeaagaagaaaaagbJDbXibXjbQNbQNbQNbQNbQNbQNbQLbXkbQNbXlbQNbQMbXmbQNbULbXnbXobXpbXqbXrbXrbXrbXrbXsbXtbXrbXrbXrbXrbXrbXubXvbXwbXxbXybhLbhLbhLbhLaaaaagaaaaaaaaabXzbXzbXzaagaaaaaaaagaaaaaaaagaaaaaabKobGebIObGebGebHBbHBbHBbHzbHBbHBbHBbGebGeaagaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabXAbXAbXAbXAbXAbXBbXCbXDbXEbXEbXFbVebXGbVfbXHbXIbXIbXJbXIbXKbXLbSVbXMbVibVjbXNbXObXPbVjbXQbXRbXSbSTbXTbXUbXVbXWbXWbXXbXYbTcbXZbYabYbbYcbYdbYebYfbYgbYgbYhbYibYjbYkbVCbVCbYlbYmbYnbYobVGbYpbVJbVJbUIaagbJDbXdbXdbJDaaaaagaaabYqbYrbYsbYtbYqaagaagaaaaagbJDbYubYvbYwbYxbMzbYybYybYzbYAbYBbYCbYDbVObVSbVTbVObVObYEbYFbYGbYHbYHbYIbYJbYJbYKbYHbYHbYIbYJbYJbYKbYHbYLbBQbYMbYNbYObYPbYNbYQbYRbYRbYRbYRbYRbYRbYRbYRbYRbYRbYRbYRbYRbYRbYRbYRbYRbYSbYTbYTbYUbGebGebHBbHBbYVbHBbHBbGebGeaagaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabVdaaaaagaagbVebVebVebVebVebVebVebVebRJbVfbVfbVfbVfbVfbVgbVfbVfbSTbVhbVibVjbVjbVjbVjbVjbVjbVjbVkbSTbVlbVmbUobVnbVobTcbVpbTcbVqbVrbVsbVtbVubVvbVwbTkbVxbUybVybVzbVAbVBbVCbVCbVIbVEbVFbVGbVHbXcbVJbVDaaabJDbJDbVKbVLbVMbVNbPybVObVPbVQbVRbVObVObVSbVTbVObVObVUbIzbIAbIAbIAbIAbIAbIAbVVbOxbIAbVWbVXbVYbVZbWabrQbUYbWbbWcbrQbWdbWebWfbWgbWhbWibBQbBQbWjbBQbBQbSPbIMbWkbhLbhLbhLaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagbGdbGebWlbQfbQfbHBbHBbHBbHzbHBbHBbHBbHBbGebGeaagaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWmbWnbWobWpbWpbWpbWqbWrbWsbWtbWubWvbWwbVebWxbWybWzbWAbWBbWCbWDbWEbWFbSVbWGbVibVjbVjbWHbVjbVjbWIbWJbWKbSTbWLbVmbUobUpbWMbTcbTcbTcbWNbWObWPbWQbWRbVwbWSbWTbVwbWUbVybVzbWVbWWbWWbWWbWXbWYbWZbXabXbbVJbVJbVDaagbJDbTvbXdbJDaaaaagaaabXebXfbXgbXhbXeaagaagaaaaagbJDbXibXjbQNbQNbQNbQNbQNbQNbQLbXkbQNbXlbQNbQMbXmbQNbULbXnbXobXpbXqbXrbXrbXrbXrbXsbXtbXrbXrbXrbXrbXrbXubXvbXwbXxbXybhLbhLbhLbhLaaaaagaaaaaaaaabXzbXzbXzaagaaaaaaaagaaaaaaaagaaaaaabKobGebIObGebGebHBbHBbHBbHzbHBbHBbHBbGebGeaagaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabXAbXAbXAbXAbXAbXBbXCbXDbXEbXEbXFbVebXGbVfbXHbXIbXIbXJbXIbXKbXLbSVbXMbVibVjbXNbXObXPbVjbXQbXRbXSbSTbXTbXUbXVbXWbXWbXXbXYbTcbXZbYabYbbYcbYdbYebYfbYgbYgbYhbYibYjbYkbVCbVCbYlbYmbYnbYobVGbYpbVJbVJbVDaagbJDbXdbXdbJDaaaaagaaabYqbYrbYsbYtbYqaagaagaaaaagbJDbYubYvbYwbYxbMzbYybYybYzbYAbYBbYCbYDbVObVSbVTbVObVObYEbYFbYGbYHbYHbYIbYJbYJbYKbYHbYHbYIbYJbYJbYKbYHbYLbBQbYMbYNbYObYPbYNbYQbYRbYRbYRbYRbYRbYRbYRbYRbYRbYRbYRbYRbYRbYRbYRbYRbYRbYSbYTbYTbYUbGebGebHBbHBbYVbHBbHBbGebGeaagaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaagaagbYWbYXbYYbYZbYYbZabZbbZcbZdbZdbZebVebXGbVfbZfbXIbXIbZgbXIbZhbZibSVbZjbVibVjbZkbZlbZmbVjbXQbZnbZobZpbWLbVmbUobZqbRSbZrbZsbZtbZubZvbTfbZwbZxbZybZzbTtbTtbZAbZBbZCbZCbZDbZDbZEbZDbZFbZGbUIbUIbUIbUIbUIaagbJDbJDbZHbJDaagaagaagbZIbZJbZKbZLbZIaagaaaaaaaagbJDbJDbJDbJDbJDbZMbJDbJDbZNbZObZPbJDbZQaaaaaaaaaaaabZRbZSbZTbZUbZRaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaabhLbZVbjDbZWbhLbhLbhLbhLaaaaagaaaaaaaaabXzbXzbXzaagaaaaaaaagaaaaaaaagaagaagbZXbZYbZZbIPbGdbGebGebHBbHCbHBbGebGeaagaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagbYWcaacabcaccadbXDcaebXDcafbXDcagcahcaibVfcajcakbXIbXJbXIcalcambSVcanbVibVjbVjbVjbVjbVjcaocapcaqcapcarcasbUocatbRSbTccaucavcawcaxbTfcaybYecazcaAbVwbVwcaBcaCbVCbVCcaDcaEcaFcaGcaHbVFbVGcaIcaJcaJbUIaagaagbXdbXdbXdaaaaagaaacaKcaLcaMcaNcaKaagaaaaaaaagaaaaaaaaabJDcaOcaPcaQbJDaaacaRaaaaaacaSaaaaaaaaaaaacaTcaUcaVcaWcaTaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaacaXcaXcaYcaZcaXaaaaaaaaaaagaagaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaagcbabGbbGbbGcbGdbGdbGebGebGebGebGfaagaagaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaagaagbYWcbbcbccbdcbccbecbfcbgcbhcbicbjbVebXGbVfcajcbkcblcbmcbncbocbpcbqcbrcbsbXObVjbXObVjbVjcbtcbucbvcapcbwbVmbUocbxcbycbzcbAbTtcbBcbCcbDbTtcbEcbFcbGbVwbVwcaBcbHcbIbWWcbJcbJcbKcbLbWYcbMbXacbNcbOcbPbUIaagaaaaaaaaaaaaaaaaaaaaacbQbXecbRcbScbQaagaagaagaagaagaagaaabJDcbTcbUbXdbJDaaacbVaaaaaacaSaaaaaaaaaaaacbWcbXcbYcbZcbWaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaacaXccaccbccccaXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaagaagaagaagaaaaaaaaaaaaaagaagaagaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa