From 89766706fef2e15361ee57d8fcd45969d2a63562 Mon Sep 17 00:00:00 2001 From: Jamini Date: Fri, 14 Jun 2013 02:22:27 -0400 Subject: [PATCH] Alien Monkeys - Farwa, Stok, Aenera Signed-off-by: Jamini --- code/datums/supplypacks.dm | 23 ++++ code/game/dna.dm | 12 +- .../objects/items/weapons/storage/boxes.dm | 34 +++++ .../mob/living/carbon/monkey/monkey.dm | 102 ++++++++++++++- .../mob/living/carbon/monkey/update_icons.dm | 12 +- code/modules/mob/transform_procs.dm | 117 ++++++++++++++--- .../reagent_containers/food/snacks.dm | 120 ++++++++++++++++++ icons/mob/monkey.dmi | Bin 23252 -> 26123 bytes 8 files changed, 395 insertions(+), 25 deletions(-) diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index d435e55f793..57ddf7817e5 100755 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -66,6 +66,29 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee containername = "Monkey crate" group = "Hydroponics" +/datum/supply_packs/farwa + name = "Farwa crate" + contains = list (/obj/item/weapon/storage/box/farwacubes) + cost = 30 + containertype = /obj/structure/closet/crate/freezer + containername = "Farwa crate" + group = "Hydroponics" + +/datum/supply_packs/skrell + name = "Neaera crate" + contains = list (/obj/item/weapon/storage/box/neaeracubes) + cost = 30 + containertype = /obj/structure/closet/crate/freezer + containername = "Neaera crate" + group = "Hydroponics" + +/datum/supply_packs/stok + name = "Stok crate" + contains = list (/obj/item/weapon/storage/box/stokcubes) + cost = 30 + containertype = /obj/structure/closet/crate/freezer + containername = "Stok crate" + group = "Hydroponics" /datum/supply_packs/beanbagammo name = "Beanbag shells" diff --git a/code/game/dna.dm b/code/game/dna.dm index c652140d96c..cb58013e016 100644 --- a/code/game/dna.dm +++ b/code/game/dna.dm @@ -548,7 +548,17 @@ sleep(48) del(animation) - var/mob/living/carbon/monkey/O = new(src) + + var/mob/living/carbon/monkey/O = null + switch(M.dna.mutantrace) + if("tajaran") + O = new /mob/living/carbon/monkey/tajara(src) + if("lizard") + O = new /mob/living/carbon/monkey/unathi(src) + if("skrell") + O = new /mob/living/carbon/monkey/skrell(src) + else + O = new /mob/living/carbon/monkey(src) if(M) if (M.dna) diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index b89cfd6a7fd..f1b9319f954 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -277,7 +277,41 @@ ..() for(var/i = 1; i <= 5; i++) new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped(src) +/obj/item/weapon/storage/box/farwacubes + name = "farwa cube box" + desc = "Drymate brand farwa cubes. Just add water!" + icon = 'icons/obj/food.dmi' + icon_state = "monkeycubebox" + storage_slots = 7 + can_hold = list("/obj/item/weapon/reagent_containers/food/snacks/farwacube") + New() + ..() + for(var/i = 1; i <= 5; i++) + new /obj/item/weapon/reagent_containers/food/snacks/farwacube/wrapped(src) +/obj/item/weapon/storage/box/stokcubes + name = "stok cube box" + desc = "Drymate brand stok cubes. Just add water!" + icon = 'icons/obj/food.dmi' + icon_state = "monkeycubebox" + storage_slots = 7 + can_hold = list("/obj/item/weapon/reagent_containers/food/snacks/stokcube") + New() + ..() + for(var/i = 1; i <= 5; i++) + new /obj/item/weapon/reagent_containers/food/snacks/stokcube/wrapped(src) + +/obj/item/weapon/storage/box/neaeracubes + name = "neaera cube box" + desc = "Drymate brand neaera cubes. Just add water!" + icon = 'icons/obj/food.dmi' + icon_state = "monkeycubebox" + storage_slots = 7 + can_hold = list("/obj/item/weapon/reagent_containers/food/snacks/stokcube") + New() + ..() + for(var/i = 1; i <= 5; i++) + new /obj/item/weapon/reagent_containers/food/snacks/neaeracube/wrapped(src) /obj/item/weapon/storage/box/ids name = "spare IDs" diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index 5dcc1158545..3b0240fe39c 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -3,13 +3,113 @@ voice_name = "monkey" voice_message = "chimpers" say_message = "chimpers" - icon = 'icons/mob/monkey.dmi' icon_state = "monkey1" + icon = 'icons/mob/monkey.dmi' gender = NEUTER pass_flags = PASSTABLE update_icon = 0 ///no need to call regenerate_icon var/obj/item/weapon/card/id/wear_id = null // Fix for station bounced radios -- Skie +/mob/living/carbon/monkey/tajara + name = "farwa" + voice_name = "farwa" + voice_message = "mews" + say_message = "mews" + icon_state = "tajkey1" + +/mob/living/carbon/monkey/skrell + name = "neaera" + voice_name = "neaera" + voice_message = "squicks" + say_message = "squicks" + icon_state = "skrellkey1" +/mob/living/carbon/monkey/unathi + name = "stok" + voice_name = "stok" + voice_message = "hisses" + say_message = "hisses" + icon_state = "stok1" + +/mob/living/carbon/monkey/unathi/New() + var/datum/reagents/R = new/datum/reagents(1000) + reagents = R + R.my_atom = src + + if(name == "stok") + name = text("stok ([rand(1, 1000)])") + real_name = name + if (!(dna)) + if(gender == NEUTER) + gender = pick(MALE, FEMALE) + dna = new /datum/dna( null ) + dna.real_name = real_name + dna.uni_identity = "000000000000000000DC0000066000" + dna.struc_enzymes = "43359156756131E13763334D1C369012032164D4FE4CD61544B6C03F251B6C60A42821D26BA3B0FD6" + dna.unique_enzymes = md5(name) + dna.mutantrace = "lizard" + //////////blah + var/gendervar + if (gender == MALE) + gendervar = add_zero2(num2hex((rand(1,2049)),1), 3) + else + gendervar = add_zero2(num2hex((rand(2051,4094)),1), 3) + dna.uni_identity += gendervar + dna.uni_identity += "044" + dna.uni_identity += "C5D" + ..() +/mob/living/carbon/monkey/skrell/New() + var/datum/reagents/R = new/datum/reagents(1000) + reagents = R + R.my_atom = src + if(name == "neaera") + name = text("neaera ([rand(1, 1000)])") + real_name = name + if (!(dna)) + if(gender == NEUTER) + gender = pick(MALE, FEMALE) + dna = new /datum/dna( null ) + dna.real_name = real_name + dna.uni_identity = "000000000000000000DC0000066000" + dna.struc_enzymes = "43359156756131E13763334D1C369012032164D4FE4CD61544B6C03F251B6C60A42821D26BA3B0FD6" + dna.unique_enzymes = md5(name) + dna.mutantrace = "skrell" + //////////blah + var/gendervar + if (gender == MALE) + gendervar = add_zero2(num2hex((rand(1,2049)),1), 3) + else + gendervar = add_zero2(num2hex((rand(2051,4094)),1), 3) + dna.uni_identity += gendervar + dna.uni_identity += "01C" + dna.uni_identity += "C92" + ..() +/mob/living/carbon/monkey/tajara/New() + var/datum/reagents/R = new/datum/reagents(1000) + reagents = R + R.my_atom = src + + if(name == "farwa") + name = text("farwa ([rand(1, 1000)])") + real_name = name + if (!(dna)) + if(gender == NEUTER) + gender = pick(MALE, FEMALE) + dna = new /datum/dna( null ) + dna.real_name = real_name + dna.uni_identity = "000000000000000000DC0000066000" + dna.struc_enzymes = "43359156756131E13763334D1C369012032164D4FE4CD61544B6C03F251B6C60A42821D26BA3B0FD6" + dna.unique_enzymes = md5(name) + dna.mutantrace = "tajaran" + //////////blah + var/gendervar + if (gender == MALE) + gendervar = add_zero2(num2hex((rand(1,2049)),1), 3) + else + gendervar = add_zero2(num2hex((rand(2051,4094)),1), 3) + dna.uni_identity += gendervar + dna.uni_identity += "0A0" + dna.uni_identity += "E00" + ..() /mob/living/carbon/monkey/New() var/datum/reagents/R = new/datum/reagents(1000) diff --git a/code/modules/mob/living/carbon/monkey/update_icons.dm b/code/modules/mob/living/carbon/monkey/update_icons.dm index 9dd3e416410..c6895db0070 100644 --- a/code/modules/mob/living/carbon/monkey/update_icons.dm +++ b/code/modules/mob/living/carbon/monkey/update_icons.dm @@ -28,12 +28,20 @@ update_hud() lying_prev = lying //so we don't update overlays for lying/standing unless our stance changes again overlays.Cut() + var/ico = "monkey" + switch(src.dna.mutantrace) //On monkey spawn, check the DNA of the mob. If alien, change to appropriate alien monkey sprite + if("tajaran") + ico = "tajkey" + if("lizard") + ico = "stok" + if("skrell") + icon_state = "skrellkey" if(lying) - icon_state = "monkey0" + icon_state = ico + "0" for(var/image/I in overlays_lying) overlays += I else - icon_state = "monkey1" + icon_state = ico + "1" for(var/image/I in overlays_standing) overlays += I diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index 9e3ed4b3a11..0da452cd318 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -20,29 +20,104 @@ flick("h2monkey", animation) sleep(48) //animation = null - var/mob/living/carbon/monkey/O = new /mob/living/carbon/monkey( loc ) - del(animation) - O.name = "monkey" - O.dna = dna - dna = null - O.dna.uni_identity = "00600200A00E0110148FC01300B009" - //O.dna.struc_enzymes = "0983E840344C39F4B059D5145FC5785DC6406A4BB8" - O.dna.struc_enzymes = "[copytext(O.dna.struc_enzymes,1,1+3*(STRUCDNASIZE-1))]BB8" - O.loc = loc - O.viruses = viruses - viruses = list() - for(var/datum/disease/D in O.viruses) - D.affected_mob = O + var/mob/living/carbon/monkey/O = null + + switch(dna.mutantrace) + if("tajara") + O = new /mob/living/carbon/monkey/tajara( loc ) + O.name = "farwa" + O.dna = dna + dna = null + O.dna.uni_identity = "000000000000000000DC00000660004DA0A0E00" + //O.dna.struc_enzymes = "0983E840344C39F4B059D5145FC5785DC6406A4BB8" + O.dna.struc_enzymes = "[copytext(O.dna.struc_enzymes,1,1+3*(STRUCDNASIZE-1))]BB8" + O.loc = loc + O.viruses = viruses + viruses = list() + for(var/datum/disease/D in O.viruses) + D.affected_mob = O + + if (client) + client.mob = O + if(mind) + mind.transfer_to(O) + O << "You are now a farwa. " + O.a_intent = "hurt" + spawn(0)//To prevent the proc from returning null. + del(src) + del(animation) + if("lizard") + O = new /mob/living/carbon/monkey/unathi( loc ) + O.name = "stok" + O.dna = dna + dna = null + O.dna.uni_identity = "000000000000000000DC00000660002A8044C5D" + //O.dna.struc_enzymes = "0983E840344C39F4B059D5145FC5785DC6406A4BB8" + O.dna.struc_enzymes = "[copytext(O.dna.struc_enzymes,1,1+3*(STRUCDNASIZE-1))]BB8" + O.loc = loc + O.viruses = viruses + viruses = list() + for(var/datum/disease/D in O.viruses) + D.affected_mob = O + + if (client) + client.mob = O + if(mind) + mind.transfer_to(O) + O << "You are now a stok. " + O.a_intent = "hurt" + spawn(0)//To prevent the proc from returning null. + del(src) + del(animation) + if("skrell") + O = new /mob/living/carbon/monkey/unathi( loc ) + O.name = "neaera" + O.dna = dna + dna = null + O.dna.uni_identity = "000000000000000000DC00000660002A8044C5D" + //O.dna.struc_enzymes = "0983E840344C39F4B059D5145FC5785DC6406A4BB8" + O.dna.struc_enzymes = "[copytext(O.dna.struc_enzymes,1,1+3*(STRUCDNASIZE-1))]BB8" + O.loc = loc + O.viruses = viruses + viruses = list() + for(var/datum/disease/D in O.viruses) + D.affected_mob = O + + if (client) + client.mob = O + if(mind) + mind.transfer_to(O) + O << "You are now a neaera. " + O.a_intent = "hurt" + spawn(0)//To prevent the proc from returning null. + del(src) + del(animation) + else + O = new /mob/living/carbon/monkey( loc ) + O.name = "monkey" + O.dna = dna + dna = null + O.dna.uni_identity = "00600200A00E0110148FC01300B009" + //O.dna.struc_enzymes = "0983E840344C39F4B059D5145FC5785DC6406A4BB8" + O.dna.struc_enzymes = "[copytext(O.dna.struc_enzymes,1,1+3*(STRUCDNASIZE-1))]BB8" + O.loc = loc + O.viruses = viruses + viruses = list() + for(var/datum/disease/D in O.viruses) + D.affected_mob = O + + if (client) + client.mob = O + if(mind) + mind.transfer_to(O) + O << "You are now a monkey." + O.a_intent = "hurt" + spawn(0)//To prevent the proc from returning null. + del(src) + del(animation) + - if (client) - client.mob = O - if(mind) - mind.transfer_to(O) - O.a_intent = "hurt" - O << "You are now a monkey." - spawn(0)//To prevent the proc from returning null. - del(src) return O /mob/new_player/AIize() diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm index a5985618ec5..f15c3410947 100644 --- a/code/modules/reagents/reagent_containers/food/snacks.dm +++ b/code/modules/reagents/reagent_containers/food/snacks.dm @@ -1367,6 +1367,126 @@ icon_state = "monkeycubewrap" wrapped = 1 +/obj/item/weapon/reagent_containers/food/snacks/farwacube + name = "farwa cube" + desc = "Just add water!" + icon_state = "monkeycube" + bitesize = 12 + var/wrapped = 0 + + New() + ..() + reagents.add_reagent("nutriment",10) + + afterattack(obj/O as obj, mob/user as mob) + if(istype(O,/obj/structure/sink) && !wrapped) + user << "You place [name] under a stream of water..." + loc = get_turf(O) + return Expand() + ..() + + attack_self(mob/user as mob) + if(wrapped) + Unwrap(user) + + proc/Expand() + for(var/mob/M in viewers(src,7)) + M << "\red The farwa cube expands!" + new /mob/living/carbon/monkey/tajara(get_turf(src)) + del(src) + + proc/Unwrap(mob/user as mob) + icon_state = "monkeycube" + desc = "Just add water!" + user << "You unwrap the cube." + wrapped = 0 + return + +/obj/item/weapon/reagent_containers/food/snacks/stokcube + name = "stok cube" + desc = "Just add water!" + icon_state = "monkeycube" + bitesize = 12 + var/wrapped = 0 + + New() + ..() + reagents.add_reagent("nutriment",10) + + afterattack(obj/O as obj, mob/user as mob) + if(istype(O,/obj/structure/sink) && !wrapped) + user << "You place [name] under a stream of water..." + loc = get_turf(O) + return Expand() + ..() + + attack_self(mob/user as mob) + if(wrapped) + Unwrap(user) + + proc/Expand() + for(var/mob/M in viewers(src,7)) + M << "\red The stok cube expands!" + new /mob/living/carbon/monkey/unathi(get_turf(src)) + del(src) + + proc/Unwrap(mob/user as mob) + icon_state = "monkeycube" + desc = "Just add water!" + user << "You unwrap the cube." + wrapped = 0 + return +/obj/item/weapon/reagent_containers/food/snacks/neaeracube + name = "neaera cube" + desc = "Just add water!" + icon_state = "monkeycube" + bitesize = 12 + var/wrapped = 0 + + New() + ..() + reagents.add_reagent("nutriment",10) + + afterattack(obj/O as obj, mob/user as mob) + if(istype(O,/obj/structure/sink) && !wrapped) + user << "You place [name] under a stream of water..." + loc = get_turf(O) + return Expand() + ..() + + attack_self(mob/user as mob) + if(wrapped) + Unwrap(user) + + proc/Expand() + for(var/mob/M in viewers(src,7)) + M << "\red The neaera cube expands!" + new /mob/living/carbon/monkey/skrell(get_turf(src)) + del(src) + + proc/Unwrap(mob/user as mob) + icon_state = "monkeycube" + desc = "Just add water!" + user << "You unwrap the cube." + wrapped = 0 + return + +/obj/item/weapon/reagent_containers/food/snacks/neaeracube/wrapped + desc = "Still wrapped in some paper." + icon_state = "monkeycubewrap" + wrapped = 1 +/obj/item/weapon/reagent_containers/food/snacks/stokcube/wrapped + desc = "Still wrapped in some paper." + icon_state = "monkeycubewrap" + wrapped = 1 + + +/obj/item/weapon/reagent_containers/food/snacks/farwacube/wrapped + desc = "Still wrapped in some paper." + icon_state = "monkeycubewrap" + wrapped = 1 + + /obj/item/weapon/reagent_containers/food/snacks/spellburger name = "Spell Burger" diff --git a/icons/mob/monkey.dmi b/icons/mob/monkey.dmi index 437ba085b15aaccb370d7cacd426ea925f2be92a..75ce4c4596d6015aa112132370584a6156a3e6dd 100644 GIT binary patch delta 6594 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 delta 3701 zcmY*c2{csE{~x1A!U9m&^~Zu;?*Wg->B!KQ8%ftMz{AbuDz=ybsvZ{Ea3Y$cC4j; zr!CWAA4YJ#^b7EljvFp{iWVmQbhI0Kob1bdN$2`7=AA4N>{j}&+C)ig7*kmNNZ2a_ zEnMQcMd-P$=}FuAT4#C$8&jrV_@Z`Q&=t^IrXK0rf3s~7Kjy7&-TgDO`yabQnH%xg zqo-5lN;%)hSjLg)k8v>wjZd}8+Dd<1Rul4qc}5uSJ7wy)zi}(@vfIlyZbk-R+a@4u zflt-29EDIPvoXhhn=*y2@5-9grHw}b}3};%ye~0m# z(7e$RX(4ESZ>&4~eGH)P9>Qc4gv1oYi&tz`*z^tAwUzQsgdTpItN{P^wbSFy&nd)R z8vG*>;^u$(7`2mMW~C7pKhHMyd6QsJLa4DoV!L@@dUOJN`f5pD)XI8PvCqZDl8S$- z=QyorY&eu{O>8qB9L6^2Xc9xV_k52M-u>fhW=G%|tNiYz;gno4y&k%3v^6kF9uy^4 zMvaQL4in%D<8}1!rZ_z*DU=Bi`+TuP39~sEjxtO0;fyiBp);-Lcv_wY)I-v{*m=Ri zJ~U45^iP<~ewfJLDMC{hsCF}rJ~pGmKIssB5@4^RHI?~5vB<vzz--_)j2 zQRa1c6+gRwqW^gMFoBe{DnlgwUOm#lQ+4>dhyt;XGmG{S94kNC45d=*>=uu%mbWVJAjU z<{N+%^9J`d^027Vn7*rF;7`=u*xKS~L9|A0sKuuKv^!ndm#kV_eYP-B<=~L;Ok*l? zJjC@MtQHm}H{Ryu>&uwxjg*m*v7i4Mwe6?=_B3Gdy(-yNcWgY2I2I)3^rM|~BWT`F zbDRvI9iRRBO44{~33|EKg$v0PMC`W#X4(rCNK?5DxO(-rij9S|Kq@_Tx;8}|!)c5WivgW*b^+@EhY4tTj!?>Q6!fLaCz|SQH69n_I zA%b0G0&^*(pBS%M3=q?#zy0#It{p>kl13YH8X7pK8=kGUa$OP@NZ@F65_Sp>!ln3M zy-+}R^r@ND7E%B7wQuw1yWfi@pG@QYvCgM4*qcZ6n2L?u++51Aym5yoj?56eEp6QZkE~{dN{r(STJHTT9-=>~`A$zD=MyBw5`6u@Pif-i{X>JNkNe)4HWepMO}z z%qCLu(0+oIDYlRhN$h&(E2t^($j?2XL6LKQ!l?DH>tt~ep zT@-m&G(TNL!Ar~CpJ`{Wag^`R^S8XyPN_e~@dUNAyIWOPO*cO9IkGjdZ9z6QAMN0f zNBj~98)T(3{+p1S4Ns3M%8zfNr3P)`ZUM3FGj&nC%TUo*JJ6&D$RclV@A)up+r{ER z4>5s!b5GA2pI}|NlC~fY8uq5fgK{|8YII(<9ig-~g7anR21oSL4Xa2`gDu9rDMEYc zCUdK*OhHwVom=%oKZWCrZzH~l_KBp4o^uYpIB$a_H~BC&7C0PkmH=F!heDy3y3aX= zNpU!*AiA&M)buYpMb*o?q2&Tv;o9^68I+?CB1bM~gt9=PuRNr+2T)+)lfM~9>|0IA zZiL%d<8B`osAF!KK8ooZ3nW^20|5dz%ck9-?0>hu(5+PIq7zZU$j*u4)|`BvN&p7_ zArKa9YE^t18V9EkGSRgRK0Y8vzOcLRV^MbZO6?bemAJ|S8(t79uo6tp@u^n+s3(%0 zkZj6rD<-f5o6xV<`h^e0NZiX8p?IzWdpn!Qyf#GZs4avMt&00(X+{^R-KV|EWIg-b zFn-S>D3tLT_7L+(g0*9c23LRA;F1Q_9@5^OEf zhWNV(jwamqmZNY2Oplj^g=KftE&UYKx0ETs8ivo}fDXXEr?ge0Ee(eqVhUQ-LCPVnNoJs9_VAwu(HWhs4wjRUu=Y`vL^(Cfw`w=bOzHPP$_AuT>azZ$;nO2 z-!D2%AqfF2ruB35dbCM-%=`QMpwQ&*X7@!SX8z!n3o|OC5#(18h&+%MuPuU2e9u6I zQa?(<-DAhi&=$KJ(}Y^WojAGg)zhH*PJU?Lg7@8lQS`EW2svKM!2dV^LOJ6gb4?)~ za)1M=5nlr*9exvs%6&fgx80kMuc-!$CwdDhS0YKDV~^Q9rH{Oq%vHwD{EP7|OI_dGSpPkg{%(+n%n<ol#P(k9jUOcP86--zt*{mj|857yPgNNnb}(k?ka3BPOg zJWD2zd6FO4?TH##_Q=W327ydWOhD=ViYwlwBG`0+l7+b?SvTcYn@Y>wDmLY_5D@8sN#J6hupjwubQy%tC^$o>&W;p$ysUe4#}MVz zef^ujeewp9FQd?Bi{ZSv`#5^!SCtxW}l*c0}cU8Ep}Y)DlhZy{FTmaqU$Z^x=(cuFe8oR~j4C99D^44kog!WIWEAfp)A z*k@>%2B-H&JyPH~L*j()c|+3(%d@1pIYH2aUU0CVG{7R8F6D9>1MIoN@f7x)ejp4Q zj=7%41%sW}($$Ur=;8l(Z9RKzcsS=89LfZNzG7H>JpJSaXOjgX zjStCOWwG6_T`bU5_uIT}D}7YNtAABHN3MmI4O+lv$eP5h80h+Wx^Ictdq=$|l?C;8 zffo{8<+*AM+z5&MHczB6q46KC+@q^A08FOk=Q~Vh3Lg*NbtO8811DZvf5_ zvR8B&Y#W$V<~^ENV$cg8HtpRa`j@|^g-sM;nm#A1(wSA~OTr-Cy6IHmQt>`?4H`e8cYJK`r@SR*r^gK7@M6R%dXd|A9`C zRTCv1uNj8zRGzNYK|qJm`9a*WR^M8wZ*i!-#g`0JTFLR*`JO)9Od_ONq+cqfkZaJw zDm4J2sjh$ciYd6=ugv?j2o>7FU(t{KK32SQqotKrMBI+YY4@$t-*p&Zg-oAkePx{y z`VjLlkIG^fOtoo!s0E~PuAyZ zMsmr5;(m@qPM0{