diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm
index 18a6601ed8e..bddc9ec90f5 100644
--- a/code/__HELPERS/type2type.dm
+++ b/code/__HELPERS/type2type.dm
@@ -82,7 +82,6 @@
hex = text("0[]", hex)
return hex
-
// Concatenates a list of strings into a single string. A seperator may optionally be provided.
/proc/list2text(list/ls, sep)
if(ls.len <= 1) // Early-out code for empty or singleton lists.
@@ -170,14 +169,38 @@
#undef S1
//slower then list2text, but correctly processes associative lists.
-proc/tg_list2text(list/list, glue=",")
+proc/tg_list2text(list/list, glue=",", assocglue=";")
if(!istype(list) || !list.len)
return
var/output
for(var/i=1 to list.len)
- output += (i!=1? glue : null)+(!isnull(list["[list[i]]"])?"[list["[list[i]]"]]":"[list[i]]")
+ if(!isnull(list["[list[i]]"]))
+ output += (i!=1? glue : null)+ "[list[i]]"+(i!=1? assocglue : null)+"[list["[list[i]]"]]"
+ else
+ output += (i!=1? glue : null)+ "[list[i]]"
return output
+proc/tg_text2list(text, glue=",", assocglue=";")
+ var/length = length(glue)
+ if(length < 1) return list(text)
+ . = list()
+ var/lastglue_found = 1
+ var/foundglue
+ var/foundassocglue
+ var/searchtext
+ do
+ foundglue = findtext(text, glue, lastglue_found, 0)
+ searchtext = copytext(text, lastglue_found, foundglue)
+ foundassocglue = findtext(searchtext, assocglue, 1, 0)
+ if(foundassocglue)
+ var/sublist = copytext(searchtext, 1, foundassocglue)
+ sublist[1] = copytext(searchtext, foundassocglue, 0)
+ . += sublist
+ else
+ . += copytext(text, lastglue_found, foundglue)
+ lastglue_found = foundglue + length
+ while(foundglue)
+
//Converts a string into a list by splitting the string at each delimiter found. (discarding the seperator)
/proc/text2list(text, delimiter="\n")
@@ -335,4 +358,4 @@ proc/tg_list2text(list/list, glue=",")
for(var/pos = end - 3, pos > 1, pos -= 3)
finalNum = copytext(finalNum, 1, pos) + sep + copytext(finalNum, pos)
- return finalNum
+ return finalNum
diff --git a/code/modules/karma/karma.dm b/code/modules/karma/karma.dm
index 1fb2ec53999..da0c1d051e4 100644
--- a/code/modules/karma/karma.dm
+++ b/code/modules/karma/karma.dm
@@ -101,9 +101,9 @@ var/list/karma_spenders = list()
if(a == src.key)
usr << "\red You've already spent your karma for the round."
return
- //if(M.key == src.key)
- //usr << "\red You can't spend karma on yourself!"
- //return
+ if(M.key == src.key)
+ usr << "\red You can't spend karma on yourself!"
+ return
if(M.client.address == src.client.address)
message_admins("\red Illegal karma spending detected from [src.key] to [M.key]. Using the same IP!")
log_game("\red Illegal karma spending detected from [src.key] to [M.key]. Using the same IP!")
@@ -318,6 +318,12 @@ You've gained [totalkarma] total karma in your time here.
"}
return
/client/proc/karmarefund(var/type,var/name,var/cost)
+ /*if(name == "Barber")
+ cost = 5
+ else*/
+ usr << "\red That job is not refundable."
+ return
+
var/DBQuery/query = dbcon.NewQuery("SELECT * FROM whitelist WHERE ckey='[usr.key]'")
query.Execute()
diff --git a/code/modules/reagents/Chemistry-Reagents-Antidepressants.dm b/code/modules/reagents/Chemistry-Reagents-Antidepressants.dm
index 69f9639507f..392d9101c6d 100644
--- a/code/modules/reagents/Chemistry-Reagents-Antidepressants.dm
+++ b/code/modules/reagents/Chemistry-Reagents-Antidepressants.dm
@@ -27,9 +27,6 @@
result = "methylphenidate"
required_reagents = list("mindbreaker" = 1, "hydrogen" = 1)
result_amount = 3
-
-/datum/chemical_reaction/methylphenidate/proc/see_in_dark()
- return
/datum/reagent/antidepressant/citalopram
name = "Citalopram"
diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm
index 3ae96df6c17..6a38b825a35 100644
--- a/code/modules/reagents/Chemistry-Recipes.dm
+++ b/code/modules/reagents/Chemistry-Recipes.dm
@@ -4,8 +4,8 @@ datum
var/name = null
var/id = null
var/result = null
- var/list/required_reagents = new/list()
- var/list/required_catalysts = new/list()
+ var/list/required_reagents = list()
+ var/list/required_catalysts = list()
// Both of these variables are mostly going to be used with slime cores - but if you want to, you can use them for other things
var/atom/required_container = null // the container required for the reaction to happen
diff --git a/maps/cyberiad.dmm b/maps/cyberiad.dmm
index 069cef5a605..f489245a10d 100644
--- a/maps/cyberiad.dmm
+++ b/maps/cyberiad.dmm
@@ -4342,7 +4342,7 @@
"bFz" = (/obj/structure/closet/crate,/turf/simulated/floor,/area/teleporter)
"bFA" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/sign/securearea{pixel_x = -32; pixel_y = 0},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{icon_state = "blue"; dir = 8},/area/hallway/primary/central/sw)
"bFB" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor,/area/hallway/primary/central/sw)
-"bFC" = (/obj/effect/decal/warning_stripes/yellow/partial{dir = 4},/obj/effect/decal/warning_stripes/arrow{dir = 4},/turf/simulated/floor,/area/hallway/primary/central/sw)
+"bFC" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{dir = 4; icon_state = "loadingarea"; tag = "loading"},/area/hallway/primary/central/sw)
"bFD" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/obj/machinery/door/airlock/glass_medical{id_tag = "MedbayFoyer"; name = "Medbay Emergency Entrance"; req_access_txt = "5"},/turf/simulated/floor{dir = 5; icon_state = "warning"},/area/medical/medbay2)
"bFE" = (/turf/simulated/floor{tag = "icon-whiteblue (NORTHWEST)"; icon_state = "whiteblue"; dir = 9},/area/medical/medbay2)
"bFF" = (/turf/simulated/floor{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/medbay2)
@@ -4432,7 +4432,7 @@
"bHl" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = -32; pixel_y = 0},/turf/simulated/floor,/area/hallway/primary/central/sw)
"bHm" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/sortjunction{dir = 8; icon_state = "pipe-j1s"; sortType = 18},/turf/simulated/floor,/area/hallway/primary/central/sw)
"bHn" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor,/area/hallway/primary/central/sw)
-"bHo" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/decal/warning_stripes/yellow/partial{dir = 4},/obj/effect/decal/warning_stripes/arrow{dir = 4},/turf/simulated/floor,/area/hallway/primary/central/sw)
+"bHo" = (/turf/simulated/floor{dir = 4; icon_state = "loadingarea"; tag = "loading"},/area/hallway/primary/central/sw)
"bHp" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/obj/machinery/door/airlock/glass_medical{id_tag = "MedbayFoyer"; name = "Medbay Emergency Entrance"; req_access_txt = "5"},/turf/simulated/floor{dir = 6; icon_state = "warning"},/area/medical/medbay2)
"bHq" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/junction{dir = 8; icon_state = "pipe-j2"; tag = "icon-pipe-j1 (WEST)"},/turf/simulated/floor{tag = "icon-whiteblue (SOUTHWEST)"; icon_state = "whiteblue"; dir = 10},/area/medical/medbay2)
"bHr" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{dir = 2; icon_state = "whiteblue"; tag = "icon-whitehall (WEST)"},/area/medical/medbay2)
@@ -4493,7 +4493,7 @@
"bIu" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (NORTH)"; icon_state = "manifold-r-f"; dir = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{dir = 10; icon_state = "brown"},/area/quartermaster/office)
"bIv" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,/obj/machinery/vending/wallmed1{name = "Emergency NanoMed"; pixel_x = 0; pixel_y = -32; req_access_txt = "0"},/turf/simulated/floor{dir = 2; icon_state = "brown"},/area/quartermaster/office)
"bIw" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor{dir = 2; icon_state = "brown"},/area/quartermaster/office)
-"bIx" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Paramedic"; req_access_txt = "66"},/turf/simulated/floor{icon_state = "white"},/area/medical/paramedic)
+"bIx" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/medical{name = "Paramedic"; req_access_txt = "66"},/turf/simulated/floor{icon_state = "white"},/area/medical/paramedic)
"bIy" = (/obj/item/weapon/folder/yellow,/obj/item/weapon/pen{pixel_x = 4; pixel_y = 4},/obj/structure/table/reinforced,/obj/item/weapon/hand_labeler,/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 0; pixel_y = -25},/turf/simulated/floor{tag = "icon-brown (SOUTHEAST)"; icon_state = "brown"; dir = 6},/area/quartermaster/office)
"bIz" = (/obj/structure/disposalpipe/segment,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/turf/simulated/floor{dir = 4; icon_state = "bluecorner"},/area/hallway/primary/central/sw)
"bIA" = (/obj/machinery/door/airlock/command{name = "Head of Personnel"; req_access = null; req_access_txt = "57"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/crew_quarters/heads)
@@ -12640,8 +12640,8 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxWbxWbxWbxWbxWaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxWbxWbxWbxWbxWbxWbxWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtjbtjbtjbtjbtjbtjbtjbtjbtjbtjbtjbtjbtjaGKaGLaERbnPbnQbnQbnVbnQbnQaaibzIbklbzJbzKbzLabIaSIbkpbevaaqbzMbqAbzNbzObUtaaqbzRbzSbzTbTebzUbzVbzWbzXbzObzYbzZaaqbwMbpubAabAbbAcbAdbAebAfbAgbAhbAiaaibvhaaiaaibAjbAkbAlbtNbAmbAnacfbAoaaiabnaaiaaiaaiaaiaaibApaaibAqbpubyOaaibArbAsbAsbAtbAuaaqbAvbAwbAxbFLbAzbAAbABbAxbACbADbAEbAFbAGbAHbAIbAJbAKbALbAMbANbAObAPbAQbARbASbATbAUbAVbAVbAWbAXbAYaaqbztbrvbrvbAZbBbbxHbSYbTdbBdbBebBfaaqbBgbBhaTabBibjYaaiaaibBjaaiaaibBkbBlbBlbBlbBmaaibxRbxUbxTbxUbxUbBnbxRaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabhQbhQbhQbhQbhQbhQbhQbhQbhQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxWbxWbxWbxWbxWbxWbxWbxWbxWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtjbtjbtjbtjbtjbtjbtjbtjbtjbtjbtjbtjbtjbBobBpbnTbnUbnQbnQbnVbnQbnQaaibBqbjcbBrbBsbBtbBubBvbBwaSKaaqbBxbqAbzNbzObByaaqbBzbBAbqBbqBbBBbBCbBDbzXbzObBEbBFbBGbwMbpubBHbaubAcbBIbBJbBKbBLbBMbBNbBOabubAnacfarDbBPbyGbBPbAnbBQaaiaaiaaibSpbBSbBTbBUbBVbBWbBXacfbBYbpubyObvybBZbCabCbbCcbCdaaqbCebCfbCgbChbCibCjbCkbClbCmbCnbCobCpbCqbCrbCsbCtbCubCvbCwbCxbCyaaibCzbCAbCBbCCaaibwlbCEbCFbCGbCGaaqbCHbCIbCJaaqbCKbxHbxIaaqbCMbCNbCObCPbCQbCRbCSbCTbCUbCVbCWbCXbCYbCZbDabDabDbbDcbDdbDebDfbwpbwqbDgbwqbwpbDhaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabhQbhQbhQbhQbhQbhQbhQbhQbhQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxWbxWbxWbxWbxWbxWbxWbxWbxWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtjbtjbtjbtjbtjbtjbtjbtjbtjbtjbtjbtjbtjaaabDibnPbnQbnQbnQbnSbnQbnQaaibDmbDnbDobDpbnRaolbDrbDsaSKaaqbDtbDubDvbDwbDxbDybDzbDAbDBbDCbDDbDybDEbDFbDGbDHbDIaaqbDJbpubBHbaubAcaaibDKbDLeHibDNbDOabnbDPbDQbDRbhmacfbDSbDTbhmbDUbDVbDWaaibDXbDYbDZbEabEbbEbbEcbEdbEebpubEfaaiaaqbEgbjYbEhbEiaaqbCebEjaaqbEkbElbCjbEmaaqbCebEnbEoaaqaaqaaqaoyaaqaaqaaqbEpamzaaqaaiaaibEqaaqaaqaaiaaiaaqaaKaaqaaqaaqaaqaaqaaqaaqbErbEsaClaaqbEtbEubEvbEwbEwbExbEybEzbEAbEBbECbEDbEEbEFbEGbEGbEHbCQbEIaaibEJbEKbELbEMaaibENaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabhQbhQbhQbhQbhQbhQbhQbhQbhQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxWbxWbxWbxWbxWbxWbxWbxWbxWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazTaaiaaiaaiaoNaoPazTaoNaoPaaiaoNaoPaaiaaiaaiaaiaaiaaiaaqaaqaaqaaqaztaolaolaolaolaolbEQbERbESbETbEUbEVbEWbqBbEXbqBbEYbzVbEZbqBbzObqBbFabjYbwMbpubFbbFcbFdaaibFebFfbFgbFhbFiabnbFjbFkbFlbFmbFnbFobFpbFqbFrbFsbFtaaibFubFvbFwbFwbFxbFybFzaaibFAbFBbyObFCbFDbFEbFFbFGbFHbFIbFJbCfbjYbFKbFUbFMbFNbjYbCebEnbEobFObFPbZTbZLbFSbFTbWPbFVbFWaaqbFXbFYbFZbGabGbbGcbGdbCVbGebEwbEwbGfbGgbEwbGhbGibGjbGkbGlbEwbGmbGnbGobGpbGqbGraaiabnaaiaaiaaibBjaaiaaibBkbBmaaibGsbGtbGubGvbGwbGxbGybGzaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxWbxWbxWbxWbxWbxWbxWbxWbxWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGAbGAbGAbGAbGAbGAbGAaaaaaabAbbGBbGCbZKbGCbGCbGDbGEbGFbGGbGEbGHbZKbGCbGIbGCbGJbGCamzbGKbqBbGLbqBbEYbGMbGNbGObzObGPbGQcjnbwMbpubGSbGTbAcaaibGUbGVbGWbDLbGXabnbGYbGZbHaaaibHbbHcbHdacDbHebHfbHgaaibHhbHibHjbHkbFxbFybFzaaibHlbHmbHnbHobHpbHqbHrbHsbHtbHubHvbHwaaqaaqbHxbHyaaqaaqbCebEnbEobjYbHzbHAbHAbHAbHBbHAbHCbHDbHEbHFbHGbHHbHHbHIbHJbHKbHLbHMbCQbCQbHNbCQbHObCQbHPbCQbHQbHRbHRbHSbHTbHUbHVbHWbHXbHYbHZbIabIbaaibIcbIdaaaaaaaaaaaibIebIfbIgbIhbIibIjbIkaaiaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxWbxWbxWbxWbxWbxWbxWbxWbxWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazTaaiaaiaaiaoNaoPazTaoNaoPaaiaoNaoPaaiaaiaaiaaiaaiaaiaaqaaqaaqaaqaztaolaolaolaolaolbEQbERbESbETbEUbEVbEWbqBbEXbqBbEYbzVbEZbqBbzObqBbFabjYbwMbpubFbbFcbFdaaibFebFfbFgbFhbFiabnbFjbFkbFlbFmbFnbFobFpbFqbFrbFsbFtaaibFubFvbFwbFwbFxbFybFzaaibFAbFBbyObHobFDbFEbFFbFGbFHbFIbFJbCfbjYbFKbFUbFMbFNbjYbCebEnbEobFObFPbZTbZLbFSbFTbWPbFVbFWaaqbFXbFYbFZbGabGbbGcbGdbCVbGebEwbEwbGfbGgbEwbGhbGibGjbGkbGlbEwbGmbGnbGobGpbGqbGraaiabnaaiaaiaaibBjaaiaaibBkbBmaaibGsbGtbGubGvbGwbGxbGybGzaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxWbxWbxWbxWbxWbxWbxWbxWbxWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGAbGAbGAbGAbGAbGAbGAaaaaaabAbbGBbGCbZKbGCbGCbGDbGEbGFbGGbGEbGHbZKbGCbGIbGCbGJbGCamzbGKbqBbGLbqBbEYbGMbGNbGObzObGPbGQcjnbwMbpubGSbGTbAcaaibGUbGVbGWbDLbGXabnbGYbGZbHaaaibHbbHcbHdacDbHebHfbHgaaibHhbHibHjbHkbFxbFybFzaaibHlbHmbHnbFCbHpbHqbHrbHsbHtbHubHvbHwaaqaaqbHxbHyaaqaaqbCebEnbEobjYbHzbHAbHAbHAbHBbHAbHCbHDbHEbHFbHGbHHbHHbHIbHJbHKbHLbHMbCQbCQbHNbCQbHObCQbHPbCQbHQbHRbHRbHSbHTbHUbHVbHWbHXbHYbHZbIabIbaaibIcbIdaaaaaaaaaaaibIebIfbIgbIhbIibIjbIkaaiaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxWbxWbxWbxWbxWbxWbxWbxWbxWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGAbGAbGAbGAbGAbGAbGAaaaaaabaubIlbGCbGCbGCbGCbGCbGEbImbInbGEbGCbGCbGCbGIbGCbGJbGCamzbIobIpbIqbIrbIsbItbIubIvbIwbZybIybjYbwMbpubIzaaqaaqaaiaaiaaiaaiaaibIAabnaaibIBabnacDabnbICaaiaaiaaiaaiaaiaaiabnaaiaaiaaiaaiaaiaaiaaibIDbpubIEbowaaqbIFbIGaaqaaqbCebIHbIIbFHbIJbIKbILbIMbINbFJbIObIPbIQbIRbISbISbISbITbISbIUbIVbIWbIXbIYbIZbFZbJaaaiaaiaaiaaiaaiaaibJbaaiaaiaaiaaKbJcaaqaaqbJdbJebJfbJgbHVbJhbJibJjbJkbJlbJmaaibIcbJnaaaaaaaaaaaicmabJpaaibDeaaiaaibDeaaiaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxWbxWbxWbxWbxWbxWbxWbxWbxWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGAbGAbGAbGAbGAbGAbGAbJqaoOaCmbJrbJsbGCbGCbGCbGCbGCbGCbGCbGCbGCbGCbGCbGIbGCbGJbJtaztaolaolaolaolaolaolbJubEVaaqaaqaaqaaqbwMbpubJvbJwbJxbJybJzbJAbJBbJCbJDbJEbJFbJGbJHbJIbJJbJKbJLbJMbJNbJObJPbJObJQbJRbJSboubJTbpubJUbJVbJWbpubJXaaqbXVbJZbKabKbbKcbCebKdbKebKfbKgbKhbKibKjbKkbKlbKmbKnaaqbKobKpbKqbKrbKsbHAbKtbKuaaqbKvbFZbFZbFZbKwaaibKxbKybKzbKAbKBbKCbKDbKEaaibKFbKGbKHaaqaaqbKIbJfbKJbKKbKLbKMbKNbKObKPbKQaaibKRaaiaaaaaaaaaaaiaaiaaiaaiaaaaaaaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPmaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxWbxWbxWbxWbxWbxWbxWbxWbxWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGAbGAbGAbGAbGAbGAbGAbKSbKTbKSbKUbKUbKUbKUbKUbKUbKUbKUbKUbKUbKUbKUbKUbKVbKUbKWbKUbKXbKYbKZbLabLbbLcbLdbLebLfbLgbLhbLhaaqbwMbLibLjbpubpubyObLkboubJSbJRbLlbLmbLlbLnbLobLobLpbLqbLrbLobLobLsbLobLtbLobJRbJSboubLubLvbLwbLxbLybLzbpuaaqbLAbJZbLBbLCbLDbCebLEbLFbLGbLHbLIbLJbLKbLLbCebLMbLNaaqaaqbLObLPbLQbLRbLSbLTbLUaaqbLVbLWbFZbLXbLYaaibKxbLZbMabMbbMcbMdbMebMfaaibMgbKGejnejnaaqbMicehbMkbMlbMmbMnbMobMpbMqbMraaibIcaaiceiaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa