From 90c9d317828bc20a04a1f3cdc52eb001b38f5d29 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sat, 5 Sep 2015 18:40:32 +0930 Subject: [PATCH] Refactored the antagHUD to work better with the new antagonist system. --- code/game/antagonist/alien/borer.dm | 1 + code/game/antagonist/alien/xenomorph.dm | 1 + code/game/antagonist/antagonist.dm | 6 ++++ code/game/antagonist/outsider/deathsquad.dm | 1 + code/game/antagonist/outsider/ert.dm | 1 + code/game/antagonist/outsider/mercenary.dm | 1 + code/game/antagonist/outsider/ninja.dm | 1 + code/game/antagonist/outsider/raider.dm | 1 + code/game/antagonist/outsider/wizard.dm | 1 + code/game/antagonist/station/changeling.dm | 1 + code/game/antagonist/station/cultist.dm | 1 + code/game/antagonist/station/loyalist.dm | 1 + code/game/antagonist/station/revolutionary.dm | 1 + code/game/antagonist/station/rogue_ai.dm | 2 +- code/global.dm | 1 + code/modules/mob/dead/observer/observer.dm | 2 +- code/modules/mob/living/carbon/human/life.dm | 34 +++--------------- icons/mob/hud.dmi | Bin 3643 -> 3686 bytes 18 files changed, 26 insertions(+), 31 deletions(-) diff --git a/code/game/antagonist/alien/borer.dm b/code/game/antagonist/alien/borer.dm index aabb6bd7e3..f43550dc6a 100644 --- a/code/game/antagonist/alien/borer.dm +++ b/code/game/antagonist/alien/borer.dm @@ -8,6 +8,7 @@ var/datum/antagonist/xenos/borer/borers bantype = "Borer" welcome_text = "Use your Infest power to crawl into the ear of a host and fuse with their brain. You can only take control temporarily, and at risk of hurting your host, so be clever and careful; your host is encouraged to help you however they can. Talk to your fellow borers with :x." antag_indicator = "brainworm" + antaghud_indicator = "hudborer" faction_role_text = "Borer Thrall" faction_descriptor = "Unity" diff --git a/code/game/antagonist/alien/xenomorph.dm b/code/game/antagonist/alien/xenomorph.dm index f6a8bc5cb1..4603fc5d1c 100644 --- a/code/game/antagonist/alien/xenomorph.dm +++ b/code/game/antagonist/alien/xenomorph.dm @@ -9,6 +9,7 @@ var/datum/antagonist/xenos/xenomorphs bantype = "Xenomorph" flags = ANTAG_OVERRIDE_MOB | ANTAG_RANDSPAWN | ANTAG_OVERRIDE_JOB | ANTAG_VOTABLE welcome_text = "Hiss! You are a larval alien. Hide and bide your time until you are ready to evolve." + antaghud_indicator = "hudalien" hard_cap = 5 hard_cap_round = 8 diff --git a/code/game/antagonist/antagonist.dm b/code/game/antagonist/antagonist.dm index 3be89beba1..faf7526a9c 100644 --- a/code/game/antagonist/antagonist.dm +++ b/code/game/antagonist/antagonist.dm @@ -19,6 +19,7 @@ var/role_text_plural = "Traitors" // As above but plural. // Visual references. + var/antaghud_indicator = "hudsyndicate" // Used by the ghost antagHUD. var/antag_indicator // icon_state for icons/mob/mob.dm visual indicator. var/faction_indicator // See antag_indicator, but for factionalized people only. var/faction_invisible // Can members of the faction identify other antagonists? @@ -76,6 +77,11 @@ role_text_plural = role_text if(config.protect_roles_from_antagonist) restricted_jobs |= protected_jobs + if(antaghud_indicator) + if(!hud_icon_reference) + hud_icon_reference = list() + if(role_text) hud_icon_reference[role_text] = antaghud_indicator + if(faction_role_text) hud_icon_reference[faction_role_text] = antaghud_indicator /datum/antagonist/proc/tick() return 1 diff --git a/code/game/antagonist/outsider/deathsquad.dm b/code/game/antagonist/outsider/deathsquad.dm index afd1d8b253..2740adf8ae 100644 --- a/code/game/antagonist/outsider/deathsquad.dm +++ b/code/game/antagonist/outsider/deathsquad.dm @@ -9,6 +9,7 @@ var/datum/antagonist/deathsquad/deathsquad landmark_id = "Commando" flags = ANTAG_OVERRIDE_JOB | ANTAG_OVERRIDE_MOB | ANTAG_HAS_NUKE | ANTAG_HAS_LEADER default_access = list(access_cent_general, access_cent_specops, access_cent_living, access_cent_storage) + antaghud_indicator = "huddeathsquad" hard_cap = 4 hard_cap_round = 8 diff --git a/code/game/antagonist/outsider/ert.dm b/code/game/antagonist/outsider/ert.dm index 64338c5a93..67d98f8ae5 100644 --- a/code/game/antagonist/outsider/ert.dm +++ b/code/game/antagonist/outsider/ert.dm @@ -10,6 +10,7 @@ var/datum/antagonist/ert/ert leader_welcome_text = "As leader of the Emergency Response Team, you answer only to CentComm, and have authority to override the Captain where it is necessary to achieve your mission goals. It is recommended that you attempt to cooperate with the captain where possible, however." landmark_id = "Response Team" flags = ANTAG_OVERRIDE_JOB | ANTAG_SET_APPEARANCE | ANTAG_HAS_LEADER | ANTAG_CHOOSE_NAME + antaghud_indicator = "hudloyalist" hard_cap = 5 hard_cap_round = 7 diff --git a/code/game/antagonist/outsider/mercenary.dm b/code/game/antagonist/outsider/mercenary.dm index 69d9f60420..a8b03e605d 100644 --- a/code/game/antagonist/outsider/mercenary.dm +++ b/code/game/antagonist/outsider/mercenary.dm @@ -12,6 +12,7 @@ var/datum/antagonist/mercenary/mercs welcome_text = "To speak on the strike team's private channel use :t." flags = ANTAG_OVERRIDE_JOB | ANTAG_CLEAR_EQUIPMENT | ANTAG_CHOOSE_NAME | ANTAG_HAS_NUKE | ANTAG_SET_APPEARANCE | ANTAG_HAS_LEADER id_type = /obj/item/weapon/card/id/syndicate + antaghud_indicator = "hudoperative" hard_cap = 4 hard_cap_round = 8 diff --git a/code/game/antagonist/outsider/ninja.dm b/code/game/antagonist/outsider/ninja.dm index d44f9c545a..7a4b135db5 100644 --- a/code/game/antagonist/outsider/ninja.dm +++ b/code/game/antagonist/outsider/ninja.dm @@ -9,6 +9,7 @@ var/datum/antagonist/ninja/ninjas landmark_id = "ninjastart" welcome_text = "You are an elite mercenary assassin of the Spider Clan. You have a variety of abilities at your disposal, thanks to your nano-enhanced cyber armor." flags = ANTAG_OVERRIDE_JOB | ANTAG_CLEAR_EQUIPMENT | ANTAG_CHOOSE_NAME | ANTAG_RANDSPAWN | ANTAG_VOTABLE | ANTAG_SET_APPEARANCE + antaghud_indicator = "hudninja" initial_spawn_req = 1 initial_spawn_target = 1 diff --git a/code/game/antagonist/outsider/raider.dm b/code/game/antagonist/outsider/raider.dm index 9f93d39738..c74afc2acd 100644 --- a/code/game/antagonist/outsider/raider.dm +++ b/code/game/antagonist/outsider/raider.dm @@ -10,6 +10,7 @@ var/datum/antagonist/raider/raiders landmark_id = "voxstart" welcome_text = "Use :H to talk on your encrypted channel." flags = ANTAG_OVERRIDE_JOB | ANTAG_CLEAR_EQUIPMENT | ANTAG_CHOOSE_NAME | ANTAG_VOTABLE | ANTAG_SET_APPEARANCE | ANTAG_HAS_LEADER + antaghud_indicator = "hudmutineer" hard_cap = 6 hard_cap_round = 10 diff --git a/code/game/antagonist/outsider/wizard.dm b/code/game/antagonist/outsider/wizard.dm index af1fc09e8e..f6741cafa0 100644 --- a/code/game/antagonist/outsider/wizard.dm +++ b/code/game/antagonist/outsider/wizard.dm @@ -9,6 +9,7 @@ var/datum/antagonist/wizard/wizards landmark_id = "wizard" welcome_text = "You will find a list of available spells in your spell book. Choose your magic arsenal carefully.
In your pockets you will find a teleport scroll. Use it as needed." flags = ANTAG_OVERRIDE_JOB | ANTAG_CLEAR_EQUIPMENT | ANTAG_CHOOSE_NAME | ANTAG_VOTABLE | ANTAG_SET_APPEARANCE + antaghud_indicator = "hudwizard" hard_cap = 1 hard_cap_round = 3 diff --git a/code/game/antagonist/station/changeling.dm b/code/game/antagonist/station/changeling.dm index f6307b8ae8..a592bc03c1 100644 --- a/code/game/antagonist/station/changeling.dm +++ b/code/game/antagonist/station/changeling.dm @@ -9,6 +9,7 @@ protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain") welcome_text = "Use say \":g message\" to communicate with your fellow changelings. Remember: you get all of their absorbed DNA if you absorb them." flags = ANTAG_SUSPICIOUS | ANTAG_RANDSPAWN | ANTAG_VOTABLE + antaghud_indicator = "hudchangeling" /datum/antagonist/changeling/get_special_objective_text(var/datum/mind/player) return "
Changeling ID: [player.changeling.changelingID].
Genomes Absorbed: [player.changeling.absorbedcount]" diff --git a/code/game/antagonist/station/cultist.dm b/code/game/antagonist/station/cultist.dm index ff0d049b67..dda799ba11 100644 --- a/code/game/antagonist/station/cultist.dm +++ b/code/game/antagonist/station/cultist.dm @@ -26,6 +26,7 @@ var/datum/antagonist/cultist/cult hard_cap_round = 6 initial_spawn_req = 4 initial_spawn_target = 6 + antaghud_indicator = "hudcultist" var/allow_narsie = 1 var/datum/mind/sacrifice_target diff --git a/code/game/antagonist/station/loyalist.dm b/code/game/antagonist/station/loyalist.dm index 4b95467691..fddf0c3796 100644 --- a/code/game/antagonist/station/loyalist.dm +++ b/code/game/antagonist/station/loyalist.dm @@ -13,6 +13,7 @@ var/datum/antagonist/loyalists/loyalists loss_text = "The heads of staff did not stop the revolution!" victory_feedback_tag = "win - rev heads killed" loss_feedback_tag = "loss - heads killed" + antaghud_indicator = "hudloyalist" flags = 0 hard_cap = 2 diff --git a/code/game/antagonist/station/revolutionary.dm b/code/game/antagonist/station/revolutionary.dm index f3454cf756..96e3752991 100644 --- a/code/game/antagonist/station/revolutionary.dm +++ b/code/game/antagonist/station/revolutionary.dm @@ -14,6 +14,7 @@ var/datum/antagonist/revolutionary/revs victory_feedback_tag = "win - heads killed" loss_feedback_tag = "loss - rev heads killed" flags = ANTAG_SUSPICIOUS | ANTAG_VOTABLE + antaghud_indicator = "hudrevolutionary" hard_cap = 2 hard_cap_round = 4 diff --git a/code/game/antagonist/station/rogue_ai.dm b/code/game/antagonist/station/rogue_ai.dm index c8dcaff19e..52fa7e3f38 100644 --- a/code/game/antagonist/station/rogue_ai.dm +++ b/code/game/antagonist/station/rogue_ai.dm @@ -15,7 +15,7 @@ var/datum/antagonist/rogue_ai/malf hard_cap_round = 1 initial_spawn_req = 1 initial_spawn_target = 1 - + antaghud_indicator = "hudmalai" /datum/antagonist/rogue_ai/New() ..() diff --git a/code/global.dm b/code/global.dm index bfb1806b80..7d7b21970a 100644 --- a/code/global.dm +++ b/code/global.dm @@ -12,6 +12,7 @@ var/global/list/processing_power_items = list() var/global/list/active_diseases = list() var/global/list/med_hud_users = list() // List of all entities using a medical HUD. var/global/list/sec_hud_users = list() // List of all entities using a security HUD. +var/global/list/hud_icon_reference = list() // Those networks can only be accessed by pre-existing terminals. AIs and new terminals can't use them. var/list/restricted_camera_networks = list("thunder","ERT","NUKE","Secret") diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 25ba18a479..675b017936 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -123,7 +123,7 @@ Works together with spawning an observer, noted above. if(antagHUD) var/list/target_list = list() for(var/mob/living/target in oview(src, 14)) - if(target.mind&&(target.mind.special_role||issilicon(target)) ) + if(target.mind && target.mind.special_role) target_list += target if(target_list.len) assess_targets(target_list, src) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 75a07a528c..b9f5b513e8 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -1679,35 +1679,11 @@ if (BITTEST(hud_updateflag, SPECIALROLE_HUD)) var/image/holder = hud_list[SPECIALROLE_HUD] holder.icon_state = "hudblank" - if(mind) - - // TODO: Update to new antagonist system. - switch(mind.special_role) - if("traitor","Mercenary") - holder.icon_state = "hudsyndicate" - if("Revolutionary") - holder.icon_state = "hudrevolutionary" - if("Head Revolutionary") - holder.icon_state = "hudheadrevolutionary" - if("Cultist") - holder.icon_state = "hudcultist" - if("Changeling") - holder.icon_state = "hudchangeling" - if("Wizard","Fake Wizard") - holder.icon_state = "hudwizard" - if("Death Commando") - holder.icon_state = "huddeathsquad" - if("Ninja") - holder.icon_state = "hudninja" - if("head_loyalist") - holder.icon_state = "hudloyalist" - if("loyalist") - holder.icon_state = "hudloyalist" - if("head_mutineer") - holder.icon_state = "hudmutineer" - if("mutineer") - holder.icon_state = "hudmutineer" - + if(mind && mind.special_role) + if(hud_icon_reference[mind.special_role]) + holder.icon_state = hud_icon_reference[mind.special_role] + else + holder.icon_state = "hudsyndicate" hud_list[SPECIALROLE_HUD] = holder hud_updateflag = 0 diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi index f6da88ca3543acee4986735693f7464798cbe103..0d3e68db0363128a4ba568200dc400f0da03ffbc 100644 GIT binary patch delta 3007 zcmZ9Mc{~#g7{?>avDZ2GF_WV;A&faP8@XT15h5)|v2x{X!ZZ|0?L|~9b44j~Ge-)w z2y;Zj6h@9Lw>jVU{jX2YU(e_H{Qh{p-#>m$va_dOqx`6T)4$SW?QdW$m5Zhl|I3vQ+(4A{eMhWiLi=_Fv@oYSE{oc($%+#Eah}36Sy={=yW=;_?=T ztn@wFUhXLV5+y_l!}YCW6lw90M-8W{D(4`T+;h28)t_BTpDQn_aLpy`)!mDqGS9c- z8@&eQr_1KXOfiG--V` zf26D=`@^98GvjOnHV$vK<6i&OMWheEHh^!xt_x%|7BjD{pZ)(g70ZEzt~0g_IJ&Qx9GfG(i_SS*iiHSDL!+K<`{! z^ruZm3$(YV5gD7(!3a2?wY&LMxUzq{*^U_jxT=;*>5sZsMRd$AddEX;uqAqDeRd^P z*!Yvg;Be}FF;RPEUv!{iB86YZ4IK)2H4P{hkyC>%h{(XjI@T!;fyo};Cj+4!BG+X4 zb7~-#5_ITD(H+MW=VX-$WTGcSI1+F1g(>Hi9rf<#>XAQ&5bqL#Gva3({ttJ~-t=jC zi2@OM#IvN-18EvfOR;lw=#TvfINuIRE{%wEvnZszH5j&| zZ<`m7>Z!C=x&qR0hF=|$MHU?1r%}=rV5P27K(2fu^nHTzZN36Y;1f73xnp_N^8yMa z)y?&g5d1Y@bf`-|LKI|;Gfoxvbs;TWN2f~E;Hw>l&N53W_jEd3G4@*!IPMlNkQ`i9 z6NLN?AspdxDqNkMH@_ZJc6o!H6(~MHZ@`E4V6;Jk56c>#gBG!M+tUc0OApQGEsBkekS?8l(sw2M$)wU~FF$MtD8 z=n~rQ0Tzfh7j{AqAWpeT8X|={Jo8=&;r52DVs~K$kig`5bR;nVaCTleR8RzFsi#nP zZn7n^jaMs#xUC{LC6gI_wgar>0^Ma(iEv?<<@jvznl|~V#l$QJ;WwE7*B`uz+UvQ$Q?7wUY@N zQ>#%}8LidgoWFB;o?xL;odCLY&>P5wwiY?9#y7af`taZ&a0_g9 z`$I?MF6K-(m~Drf{ayh0}Zzs zyslx;mDzS}ZSD16MMmiTLi0z`-O%Zf zc33oqv9f4!H@to9G*Amd#=W@XjgKO2Rz$&k|clAjBO?XG`MG$Hh>nuC0^ ze~ju3uZwuNL9->qk#@|FWPSeFR`VB-mUlH2HV<)0rr=a1mG9~k6Gk@`Jdu!YHF0!L zNsU%(RBFjA#!tl0K2}x%daqr%i5V2_+Bq24QllZbNioleRdKqD1BiwX@Oh}s-v&26 z&!`W>qh)+_HGOE#Lgbql3FqI?8l1m4(KV`wCIM?pe2ZK$Zzi<=uzQ4Z{z>c&`J~QH z|Hf(AQZ#d9*zMKp{N@_z4_nKZ@Gm~ zXN7S7xJGx+gN_q@2k+S`G={t)Z8n!;dhBX5AuNRb%WMAyBV@C_w@mq2Fn#EOH`n7G zhkKAZPI9p#0{jZxvO;t4I!^AA=Has@i8>oq#RRY|H=M3%O$<9Vp+i$>HlNB*+hI1I zwIj}zAu2wGd)U)W-OzRM{%FlQ&Iph}O!YzItyDv@dq!Gw2hDToTjfGYS>AJS2LA?u z`>@N?_@TUD-Qe_8(s1TT9e&|hXW#*b- ziabmjYo)bJZyGKW8ptWTQ!8hWgIVsT*qv3^)}7i4!gS7z%yRSMaubW1(Tc*JiLiQc z7ZAHRHpyPzYCTLC3sP9Ux!l4!*kv_sfmb6cT7Q!D(!mQ<{IeDwz8b@<~GRw%z-3%QJL^;zliEauZY{vnMAS;wUF$g zL3`tfbZ~i2IP4$kg)8V2c6$dO{SHu_C-P#K8~vov6Rkalz4GLTPJMaNw^Qv~Lw44I zxfJj>dky5_+#Aey8;v)sUELbBA-d%M+VRW=LhH=_LRpE2UiN)oChKt9uW63n|8j3} x@({Nrt7(w)@bI8w!s$nd%U2_g-@Ktz*~VZB%5^KT%=7=Vm6_eya+6EMe*rB`m8<{& delta 2964 zcmY*ac|6mNA2+MbD)&TVER-V;4>huSY($P+xkXlTC6W8ycd00nh2)$SA|4~ThmlI< z*mx3RgfQ18a?JVb`Qv##&+qfk=k) zZBs)&VC0vE^5$0&Kmt~$G9NKG3|X6|zH5LSHXh@Znsx*i7W~Gga&}*F!4X4HvnNNd znyVgDa=06M%03NxH>gy-Ky|qxUo9ud?9j{6{o~}nP!BXapBzkUyn>=-YX;1mJHIxe zJl!IhfLy(1e975ZRbu$o8ohG(rCo`3eQQB_BIVr!BmTSSaG)U(Jljwhl6p?SXxxMZisd3(HhD0WH*lR^8%w_ZkUb-=RiW8xKWSQ=rseT&OZw zLzu-8`yuMq_=@qk_Yb{~6whR)>|6ayoJENj56GY`(#E4te)6Mg11T~du_*V+2SFaH zQqfhuoaFAqD%{|aZqGdUTx&4Hf7I^Lb$=U)&YjDKz;KwP%FUw}vuk`9nCmlGh$~f= z%(2?jr-NLz7jF@sU9;iigXx+Y>f1%+F0!_wW$ceYmySTYN&Lqmy^NE=-BfU+BIPl=)X`V`AM zax7dM5ceu(ah0|%Y;n5CJWh1a&&cWOP#K+X);%y%s0Qu}Ly)w(!tc>cExTyDvwhxT zHT;xsDgAYCP}?HMvZ#^vk=WDFDi2nB0qVRRr z!qV1UCPJIiGEUH?)WSrWjiG+HAZYnG7{Rd$!CfqNN|{A@2_pJnfwq25N^tkY8jGJs zmjq07m?Cv1>q6_o2~LH>#`T?N-dr9POEo!2BUmKeBw+=!2n9FFHSRw z8c;bQE&LDt)}fneMgv7VCrv8?Y8~9hs^7_rBhXgVES7L%i(AQsj-;8HFuciX_vEBm za!MM^B-A_2#-&yngPI*$z2BWsQRWj0gstBzKRKBs%RHPXBF-$)lEiTdQZ=9-p|$50 zf=_TF2v8^M;uL%`(cI7+YC2Xqa&_T{K5m3JB=q>v*jcIu-sq5t(%V1v!-#%RLuZBW zXcIQ-YQmsb>?#JVj=FR3KECi=%$+`jXrQ3jne?3)mj0!?LSg|ceY;tO0|leN^#8?y ziCg-%kV+xIc=5SL`B>lBH&I)2ePd4P;n<}V|KOJV)!6(d16#)V5-W36w63nH+xT5| z)mkdtQEu3`7xsWbeF7s9Hu6{MJYNsj^L33iB#V$z`7`0*&)jcd8&{kGUl7hY_(2Gt zvpAn)oje36yem{Nf6Zla?FjXbyrt&Kjxn2L4SKn_4R^;F9=K)x0Awota3kuz%3&28 z4H7GF1*H_CKcx>5-=dZKgw$eh>(K>_1wXjToxJC#XO63tx%&A1O}F}P@INX2-9z@x zwq@DjZ{#(HuCVPjhq3Q#Raee^8Q@d`AFP<6MR1p~XN8jmpP%S9Ps}ZBSm1n5h!bT< zN94jms+WjuoFpI6tB#e)G_Y80LS_JNu|8dzIHG@%UxX0=`H+u4q}&HTIY~?3i7zB} zg^%#E%D&uj5XcNrn=OQAzk!-NNn`sR)axGMVz$Xq~kp!;Co)#DJ zUok-bmoG)3i6uOG;P7RQOUtKS{_yvmOS84L{W*R;Nw19}G2L6ybmq>PmT%dUm$ja` zfBfuXRpRuCN1z(Y7O!NH$uGpsggusdUAXL0;V8Ff-y-jYOAN~ z(6s$CHTZ;A;?N>`WKHBcICW6p2KWBJ7fKvgG863sY*ukNotea64`&utK?*+DhJc5H z?LHH`RIB5NX7~7mbL&mK&7oR1NKb=VxjKU%>v%Eb=I$IJgkP-de?8;#mY8kJU6RW< zO*YDJ@w3Fgz~VMze%zj%g4ojEIPH4Yd}>-R*P~kpvJN!sUTJz%8ZDty3|Qfg+o|<% zzM?PSulCllqdq#CMTQtW1wK*48{OAA6C75tSZPmJb%u4IyE}vYNB-_1dn?E8-E38! z-*Bh>j%)uhuqq?NYqiXrK&ZSK53`QMC^Q;P5ktV|1$_LuqbDjxXyK1ai&y%a2)!Wt zPTjh$5E4g@b|a|HdoEq&3se8M6Nj5}=X-BhW6B5kuolqoU(qFo{hhC)K-r!zGG#pg zV_N@_+79?926s zoY|5Tmi=7uwWgCEdfq}a_Vx<^E>4=2d$;dx80GaXc4K=@`v4N7c1ZE1!%+%l|3{*4 z!r>G(+0xjn_VLp6&HbsihGh4!_&`uU6&n#-9@buZNQcmdcmwf}zAvQwE{x)KS7?+1 zP>Vj9I^sPPtTdO^YxhhRlWH{j9|0d=q5JnfU6!=RB1SAz5|u952aHa?JO~e1fzFi> zTVm#n`y{sI;zMw49x1vMsa=YcgX2<4Qy^&8!66WuE(2Sne6K{lE!Rhm=|6BSOe^es zK5tyU@&4cY<6S6Ce=`u!s6q}@Obcq+tjVGGG*4!@1T-I`_5zAbofcks05C%vqb0|* zFNTjq&LHbLPCvifFu#S}7*8R@tas~(twwX2xw~6j+B(?@`a}`Sn`IDoTfub7a^%vp z1i8qcy~eTxcAJy&6J`2#|111nygGJmL)_}@u2W3ADOm~FqK#o!p;a;4v)<&$&4`DS zrnyQf$Sq*fma+RlRSw|rX7cCR#N7q8yom9)ukCmnNlI2NgS{Z#9=u!Bcm+_9s6k(z zE30Udne<6zb2aidpw4G`UvDT~ler-O+s+Dp&wpJ??B*=Cg5Jx~R2=RD_69gd6-R7n e(0>Oha1#qXc=jiAh