From 1659e2804ea6b39bcfe23fa8b8058886699196e5 Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Tue, 21 Apr 2020 04:04:10 +0200 Subject: [PATCH 01/31] Deletes lots of autoylathe copypasta. --- _maps/map_files/generic/CentCom.dmm | 2 +- code/__DEFINES/machines.dm | 16 +- code/datums/wires/autoylathe.dm | 48 -- code/game/machinery/autolathe.dm | 43 +- code/game/machinery/toylathe.dm | 415 ------------------ .../circuitboards/machine_circuitboards.dm | 4 +- .../research/designs/autoylathe_designs.dm | 40 +- .../machine_designs_all_misc.dm | 2 +- code/modules/research/rdconsole.dm | 2 +- code/modules/research/techweb/_techweb.dm | 18 +- tgstation.dme | 2 - 11 files changed, 81 insertions(+), 511 deletions(-) delete mode 100644 code/datums/wires/autoylathe.dm delete mode 100644 code/game/machinery/toylathe.dm diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index c9b81cefd9..eadf31ad46 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -16752,7 +16752,7 @@ }, /area/centcom/holding) "Nf" = ( -/obj/machinery/autoylathe, +/obj/machinery/autolathe/toy, /turf/open/indestructible/hotelwood, /area/centcom/holding) "Ni" = ( diff --git a/code/__DEFINES/machines.dm b/code/__DEFINES/machines.dm index eee0676dec..5a26feb624 100644 --- a/code/__DEFINES/machines.dm +++ b/code/__DEFINES/machines.dm @@ -22,14 +22,14 @@ //used in design to specify which machine can build it #define IMPRINTER (1<<0) //For circuits. Uses glass/chemicals. -#define PROTOLATHE (1<<1) //New stuff. Uses glass/metal/chemicals -#define AUTOLATHE (1<<2) //Uses glass/metal only. -#define CRAFTLATHE (1<<3) //Uses fuck if I know. For use eventually. -#define MECHFAB (1<<4) //Remember, objects utilising this flag should have construction_time and construction_cost vars. -#define BIOGENERATOR (1<<5) //Uses biomass -#define LIMBGROWER (1<<6) //Uses synthetic flesh -#define SMELTER (1<<7) //uses various minerals -#define AUTOYLATHE (1<<8) // CITADEL ADD +#define PROTOLATHE (1<<1) //New stuff. Uses materials/chemicals +#define AUTOLATHE (1<<2) //Uses materials only. +#define TOYLATHE (1<<3) //Glass/metal/plastic. Meant for toys. +#define NO_PUBLIC_LATHE (1<<4) //prevents the design from being auto-unlocked by public auto(y)lathes. +#define MECHFAB (1<<5) //Remember, objects utilising this flag should have construction_time and construction_cost vars. +#define BIOGENERATOR (1<<6) //Uses biomass +#define LIMBGROWER (1<<7) //Uses synthetic flesh +#define SMELTER (1<<8) //uses various minerals #define NANITE_COMPILER (1<<9) //Prints nanite disks #define AUTOBOTTLER (1<<10) //Uses booze, for printing //Note: More then one of these can be added to a design but imprinter and lathe designs are incompatable. diff --git a/code/datums/wires/autoylathe.dm b/code/datums/wires/autoylathe.dm deleted file mode 100644 index 736c9551ec..0000000000 --- a/code/datums/wires/autoylathe.dm +++ /dev/null @@ -1,48 +0,0 @@ -/datum/wires/autoylathe - holder_type = /obj/machinery/autoylathe - proper_name = "Autoylathe" - -/datum/wires/autoylathe/New(atom/holder) - wires = list( - WIRE_HACK, WIRE_DISABLE, - WIRE_SHOCK, WIRE_ZAP - ) - add_duds(6) - ..() - -/datum/wires/autoylathe/interactable(mob/user) - var/obj/machinery/autoylathe/A = holder - if(A.panel_open) - return TRUE - -/datum/wires/autoylathe/get_status() - var/obj/machinery/autoylathe/A = holder - var/list/status = list() - status += "The red light is [A.disabled ? "on" : "off"]." - status += "The blue light is [A.hacked ? "on" : "off"]." - return status - -/datum/wires/autoylathe/on_pulse(wire) - var/obj/machinery/autoylathe/A = holder - switch(wire) - if(WIRE_HACK) - A.adjust_hacked(!A.hacked) - addtimer(CALLBACK(A, /obj/machinery/autoylathe.proc/reset, wire), 60) - if(WIRE_SHOCK) - A.shocked = !A.shocked - addtimer(CALLBACK(A, /obj/machinery/autoylathe.proc/reset, wire), 60) - if(WIRE_DISABLE) - A.disabled = !A.disabled - addtimer(CALLBACK(A, /obj/machinery/autoylathe.proc/reset, wire), 60) - -/datum/wires/autoylathe/on_cut(wire, mend) - var/obj/machinery/autoylathe/A = holder - switch(wire) - if(WIRE_HACK) - A.adjust_hacked(!mend) - if(WIRE_HACK) - A.shocked = !mend - if(WIRE_DISABLE) - A.disabled = !mend - if(WIRE_ZAP) - A.shock(usr, 50) diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 6fa7fa30c0..961c5e8331 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -28,11 +28,11 @@ var/prod_coeff = 1 var/datum/design/being_built - var/datum/techweb/stored_research var/list/datum/design/matching_designs var/selected_category var/screen = 1 + var/datum/techweb/stored_research = /datum/techweb/specialized/autounlocking/autolathe var/list/categories = list( "Tools", "Electronics", @@ -45,9 +45,7 @@ "Dinnerware", "Imported" ) - -/obj/machinery/autolathe/Initialize() - var/static/list/allowed_types = list( + var/list/allowed_materials = list( /datum/material/iron, /datum/material/glass, /datum/material/gold, @@ -63,10 +61,12 @@ /datum/material/adamantine, /datum/material/mythril ) - AddComponent(/datum/component/material_container, allowed_types, _show_on_examine=TRUE, _after_insert=CALLBACK(src, .proc/AfterMaterialInsert)) + +/obj/machinery/autolathe/Initialize() + AddComponent(/datum/component/material_container, allowed_materials, _show_on_examine=TRUE, _after_insert=CALLBACK(src, .proc/AfterMaterialInsert)) . = ..() wires = new /datum/wires/autolathe(src) - stored_research = new /datum/techweb/specialized/autounlocking/autolathe + stored_research = new stored_research matching_designs = list() /obj/machinery/autolathe/Destroy() @@ -91,7 +91,7 @@ if(AUTOLATHE_SEARCH_MENU) dat = search_win(user) - var/datum/browser/popup = new(user, "autolathe", name, 400, 500) + var/datum/browser/popup = new(user, name, name, 400, 500) popup.set_content(dat) popup.open() @@ -439,8 +439,37 @@ desc = "An autolathe reprogrammed with security protocols to prevent hacking." hackable = FALSE circuit = /obj/item/circuitboard/machine/autolathe/secure + stored_research = /datum/techweb/specialized/autounlocking/autolathe/public //Called when the object is constructed by an autolathe //Has a reference to the autolathe so you can do !!FUN!! things with hacked lathes /obj/item/proc/autolathe_crafted(obj/machinery/autolathe/A) return + +/obj/machinery/autolathe/toy + name = "autoylathe" + desc = "It produces toys using plastic, metal and glass." + circuit = /obj/item/circuitboard/machine/autolathe/toy + + stored_research = /datum/techweb/specialized/autounlocking/autolathe/toy + categories = list( + "Toys", + "Figurines", + "Pistols", + "Rifles", + "Heavy", + "Melee", + "Armor", + "Adult", + "Misc", + "Imported" + ) + allowed_materials = list( + /datum/material/iron, + /datum/material/glass, + /datum/material/plastic + ) + +/obj/machinery/autolathe/toy/hacked/Initialize() + . = ..() + adjust_hacked(TRUE) diff --git a/code/game/machinery/toylathe.dm b/code/game/machinery/toylathe.dm deleted file mode 100644 index c679f3f983..0000000000 --- a/code/game/machinery/toylathe.dm +++ /dev/null @@ -1,415 +0,0 @@ -#define AUTOYLATHE_MAIN_MENU 1 -#define AUTOYLATHE_CATEGORY_MENU 2 -#define AUTOYLATHE_SEARCH_MENU 3 - -/obj/machinery/autoylathe - name = "autoylathe" - desc = "It produces toys using plastic, metal and glass." - icon_state = "autolathe" - density = TRUE - use_power = IDLE_POWER_USE - idle_power_usage = 10 - active_power_usage = 100 - circuit = /obj/item/circuitboard/machine/autoylathe - layer = BELOW_OBJ_LAYER - - var/operating = FALSE - var/list/L = list() - var/list/LL = list() - var/hacked = FALSE - var/disabled = 0 - var/shocked = FALSE - var/hack_wire - var/disable_wire - var/shock_wire - - var/busy = FALSE - var/prod_coeff = 1 - - var/datum/design/being_built - var/datum/techweb/stored_research - var/list/datum/design/matching_designs - var/selected_category - var/screen = 1 - - var/list/categories = list( - "Toys", - "Figurines", - "Pistols", - "Rifles", - "Heavy", - "Melee", - "Armor", - "Adult", - "Misc", - "Imported" - ) - -/obj/machinery/autoylathe/Initialize() - var/static/list/allowed_materials = list( - /datum/material/iron, - /datum/material/glass, - /datum/material/plastic - ) - AddComponent(/datum/component/material_container, allowed_materials, 0, TRUE, null, null, CALLBACK(src, .proc/AfterMaterialInsert)) - . = ..() - - wires = new /datum/wires/autoylathe(src) - stored_research = new /datum/techweb/specialized/autounlocking/autoylathe - matching_designs = list() - -/obj/machinery/autoylathe/Destroy() - QDEL_NULL(wires) - return ..() - -/obj/machinery/autoylathe/ui_interact(mob/user) - . = ..() - if(!is_operational()) - return - - if(shocked && !(stat & NOPOWER)) - shock(user,50) - - var/dat - - switch(screen) - if(AUTOYLATHE_MAIN_MENU) - dat = main_win(user) - if(AUTOYLATHE_CATEGORY_MENU) - dat = category_win(user,selected_category) - if(AUTOYLATHE_SEARCH_MENU) - dat = search_win(user) - - var/datum/browser/popup = new(user, "Autoylathe", name, 400, 500) - popup.set_content(dat) - popup.open() - -/obj/machinery/autoylathe/on_deconstruction() - var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) - materials.retrieve_all() - -/obj/machinery/autoylathe/attackby(obj/item/O, mob/user, params) - if (busy) - to_chat(user, "The autoylathe is busy. Please wait for completion of previous operation.") - return TRUE - - if(default_deconstruction_screwdriver(user, "autolathe_t", "autolathe", O)) - updateUsrDialog() - return TRUE - - if(default_deconstruction_crowbar(O)) - return TRUE - - if(panel_open && is_wire_tool(O)) - wires.interact(user) - return TRUE - - if(user.a_intent == INTENT_HARM) //so we can hit the machine - return ..() - - if(stat) - return TRUE - - if(istype(O, /obj/item/disk/design_disk)) - user.visible_message("[user] begins to load \the [O] in \the [src]...", - "You begin to load a design from \the [O]...", - "You hear the chatter of a floppy drive.") - busy = TRUE - var/obj/item/disk/design_disk/D = O - if(do_after(user, 14.4, target = src)) - for(var/B in D.blueprints) - if(B) - stored_research.add_design(B) - busy = FALSE - return TRUE - - return ..() - -/obj/machinery/autoylathe/proc/AfterMaterialInsert(obj/item/item_inserted, id_inserted, amount_inserted) - if(item_inserted.custom_materials?.len && item_inserted.custom_materials[SSmaterials.GetMaterialRef(/datum/material/glass)]) - flick("autolathe_r",src)//plays glass insertion animation by default otherwise - else - flick("autolathe_o",src)//plays metal insertion animation - - use_power(min(1000, amount_inserted / 100)) - updateUsrDialog() - -/obj/machinery/autoylathe/Topic(href, href_list) - if(..()) - return - if (!busy) - if(href_list["menu"]) - screen = text2num(href_list["menu"]) - updateUsrDialog() - - if(href_list["category"]) - selected_category = href_list["category"] - updateUsrDialog() - - if(href_list["make"]) - - ///////////////// - //href protection - being_built = stored_research.isDesignResearchedID(href_list["make"]) - if(!being_built) - return - - var/multiplier = text2num(href_list["multiplier"]) - var/is_stack = ispath(being_built.build_path, /obj/item/stack) - multiplier = CLAMP(multiplier,1,50) - - ///////////////// - - var/coeff = (is_stack ? 1 : prod_coeff) //stacks are unaffected by production coefficient - var/total_amount = 0 - for(var/MAT in being_built.materials) - total_amount += being_built.materials[MAT] - var/power = max(2000, (total_amount)*multiplier/5) //Change this to use all materials - - var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) - - var/list/materials_used = list() - var/list/custom_materials = list() //These will apply their material effect, This should usually only be one. - - for(var/MAT in being_built.materials) - var/datum/material/used_material = MAT - var/amount_needed = being_built.materials[MAT] * coeff * multiplier - if(istext(used_material)) //This means its a category - var/list/list_to_show = list() - for(var/i in SSmaterials.materials_by_category[used_material]) - if(materials.materials[i] > 0) - list_to_show += i - - used_material = input("Choose [used_material]", "Custom Material") as null|anything in list_to_show - if(!used_material) - return //Didn't pick any material, so you can't build shit either. - custom_materials[used_material] += amount_needed - - materials_used[used_material] = amount_needed - - if(materials.has_materials(materials_used)) - busy = TRUE - use_power(power) - icon_state = "autolathe_n" - var/time = is_stack ? 32 : 32*coeff*multiplier - addtimer(CALLBACK(src, .proc/make_item, power, materials_used, custom_materials, multiplier, coeff, is_stack), time) - else - to_chat(usr, "Not enough materials for this operation.") - - if(href_list["search"]) - matching_designs.Cut() - - for(var/v in stored_research.researched_designs) - var/datum/design/D = SSresearch.techweb_design_by_id(v) - if(findtext(D.name,href_list["to_search"])) - matching_designs.Add(D) - updateUsrDialog() - else - to_chat(usr, "The autoylathe is busy. Please wait for completion of previous operation.") - - updateUsrDialog() - - return - -/obj/machinery/autoylathe/proc/make_item(power, list/materials_used, list/picked_materials, multiplier, coeff, is_stack) - var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) - var/atom/A = drop_location() - use_power(power) - materials.use_materials(materials_used) - - if(is_stack) - var/obj/item/stack/N = new being_built.build_path(A, multiplier) - N.update_icon() - N.autoylathe_crafted(src) - else - for(var/i=1, i<=multiplier, i++) - var/obj/item/new_item = new being_built.build_path(A) - new_item.autoylathe_crafted(src) - if(length(picked_materials)) - new_item.set_custom_materials(picked_materials, 1 / multiplier) //Ensure we get the non multiplied amount - icon_state = "autolathe" - busy = FALSE - updateDialog() - -/obj/machinery/autoylathe/RefreshParts() - var/T = 0 - for(var/obj/item/stock_parts/matter_bin/MB in component_parts) - T += MB.rating*75000 - var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) - materials.max_amount = T - T=1.2 - for(var/obj/item/stock_parts/manipulator/M in component_parts) - T -= M.rating*0.2 - prod_coeff = CLAMP(T,1,0) // Coeff going 1 -> 0,8 -> 0,6 -> 0,4 - -/obj/machinery/autoylathe/proc/main_win(mob/user) - var/dat = "
| [C] | " - line_length++ - - dat += "
| [icon2html(linked_destroy.loaded_item, usr)] | [linked_destroy.loaded_item.name] Eject |
$#$Or=z{S%=+X_D(|@`NrDF!PmZYwKxV$_Hih2wC^0*l>7SpE!MnK zn1>4sqw_Fd#RdpiqyS!UWsi7&zx10{^F$R184rya0Stq3t7CbVDUfB72NV5bf z<&NWTMy$sN@y?U)+R!a6@na1%E~hm_Wlx>3r3*81ZZ_WXeBnD~`uaeHMhCnssA7xm zG$XV yOkhl+*|I~pGhG{ZrzzAIih1~ysKmjF*wDXfaocWYY$S$ckcX5G z2)v${aJ)>EPO+kpf*a&hT6Sw{@6dB5T`$0#`yya&^?0FQ4eH=RsDJv)T0cZ)LzVCP zBF|FKI@>*@&ddQX=&~TgPMv19U}9Jsx3}{}I})4nsJpx?6j#tA35#=KX^%Rb*qDY0 z_q;ZNyw`abU+I9N7f;3V#l6plm2NW;cPmQ=%nV~YR=mo4J6Za6 p>+w=Oi>7@iF#eY0lhXQxFmcV-oy#JzAS6*(flb_$QW!Ec% z=-jkrqt=I!$a`eYQuPr+=ru?n96dl`T4cZpX}%qR2pXy(Wyj=YM58acqXD`y K&V*kkP2|*3`8tsV_iNS=dUkXj1meBREd%|VvhZD z7Z-{O9YCt|sE)4 ;J!WR&lN+U2Xogmndd`k5)W`#F&z@eV`ug?=g>$ji9kDrrj5)}F z2At(e^>dM@3j=f+O&VPJCN)(UFIs~~)ytR#Z0M*)YYi~~ZLI-!JEK)hb^ Q9x6dF$y~eaa`_pXM)Um6(-O86vQ_Qa1RRS@(qGv8j2@ zVxs)f6!)2inMvP6`v$1;Zj6sHK%FX4R^G-1YG7Wq7^8DB34w-WfUAX6L@%RvW BE+2*KNd~D zMdp{Nze+d2BOuytfDLllg`|$rIoy<$Yk0{RzW>rALBB^0;)l>C*zs Q(-}*1uEM^oT-Oz)Nin u=chavrjH*?j88Uh zw7?wfq{UO((9m5CQ$?q8hG8#0A-2tU0Jf4s&+-+=FrrUmmQ1^(JlK*@n-%y}xd+Nb z9}p==7h2m|Tz*C=4wqQ7X^7-%s8{%ruJH3#^(gHI`k^=>^Q~F5-H9HbtGVaBJ9;0P z?6JI(t^C3+xXpCFX~nidehby68Ez28#;IR-*<;?5D*Y+bE9sXlQN S>IKa~@Tu_kqN$9@r>Si*ZBfww5fP>Nk` z+DV!E7M!Q?eC2#}s}Z4E_dd*fO(Igmk=Hq{ykkq)GTPpw`rX=lm&&o{# $RB?)$ku02=+9?k@eWjqRiQ-85n n^^rsm zb$}<%D9AEq8RS=o`j=+V&dl^u3cgb%CwJ|u>aCbdZJB6o^EGK{dcS5k%U9 %=y;-%~@u3kOm5U (pz|?f#+|fxtNvzNfAc%2Em8!t#yHS)G9+0~ zr|pbgj;eGx0Lhz*CWCH{$UMoUn$&iQTiyW0nh)hWOIg>0v zPrVjPF!6^3B#t2?p*vj;44_hqd&yPfRXXCZCg@stW(nOp0>4G#0k6O7J;Y_ o9j(^POZk zUt)H=PSZ+&)XS~xx;i-`#D-UeC~@&11|G22wX4dgEq)wtofQhr1dcshSW-JC$i^7A zGXV#OzJALQo7}N$qJTxYzWZ->p4j&rnk?RifHOUBi^5QTgYf4)e8y~$HBnI6$uY z3&PNyvOBI0b4WFium@xkQDG`gZo%;{3^`s9iVlElGV_R1Z-w0pyre>JGW{YejsoaX zDM+N-6kYBIALyFu;mAc2B~B2-MUJ-OvvU;F^wzXKV5_xRC)b`PN83=FIV?Ytiv9r$ zk_~NFU}I2|yM7-khK-R9wBJRLBzrrA3Oka5e!*7DQkx@m?8FdNnY+hwgRsiOoF5<- z_A%7&GDOTKBDj=q4_ap{u91XLY^duQTH~E+IZ6)+W~m)Aa0fz45?5ik&eCYKJ=|@5 zoFqdi%T09y+^qNm$q0JXK>MN%-w|9!um*Z;z#)nwgGojF+1k8;@fME2o03vceP#S& zKmB`Z|4U4)QDoBQ(;Ib1@hbW{h#SLRC;aWnS>n=(nuX7w5rvS>JpyyV>u%rk=?S@l zv2)TsMMt%>43>MiXzV72S~BG-G{T!?OZDboLu6zfgYP_aR E4jl1te>UwX*d_P;Ua}Gh@nkmMT_Q+cAQe_P#CIv)~ zcnu&s)z(uOFb1PlD~*_uPJ5^LA;}u2s5TgfT$18C!zkGd-4IsXL)P&iM!89CGH;kf z&=&M=nlLlj;!vdLta9%>uqH>?Lef(EIIQ_m<>GE^EnZmQsn@j^4#f 1$MCzVx0qMlgMMpkZt7GI1zc#I_~7d&P1YzGohItF6{Rae;PIQMV7AZVJtNAz zLS(Jpu1gvz8D+%S kIUBBp-xM8Kh;l;MV3RQN+BT3TK zJ7EkVvPSocDWj%5xS=8nht1xxau6 tl{ z$n`63oE+$6YR9B3RiK!jcIkIfGUv=%gPVTbAVUQ_FKE5OF8LZGsnWpGfXJ84^ -WU3w>i4zVPz86x`%giJ)v%iL#pODf8sPcX#e#zAoRf9w zTw^@TX{7x9t5DJ}2zcMtr+l;Sg^F`gy5Em>?~`6PR9CL%nRuEv1@75!8fN(OqXQ!J z-69Bivfu60QOyfsG) }q4 zhkymBnMw(nN3OJY?U267h{%pQ`SNIbzrZ~zY)K!r$y_zF2x3AP0+5%Gte$tjVe_ZS zq|85sX%Ad6#p!t8YgkPNCA7m{ixfME2#5m@k}9U#@evrkzV3_XPGTY``Nb1vYeE`3 zLbBKfe0I=H#*xdCfcnQ3rh0vYz=eCJUiy6L1C_U?y}T$+sX)~))bqUG0EuK+DA@8l zydVsz1({eu-Vlr*{%*JK23ZnwPx-5&z?H->n_i_Psn-gzeW=T~J_WtmE~_TGV;EWd z^uw_1dM&&T$Iq&|a1Zi+w!;t-yZAg$y~W&>5UI2|;lqIP6HkP2yn8_ViU`B((^l#* zaOeypwa!+{RGGnk&sem^f~roY8)K?{I8$2%-n7sk-(KURg%0SK`0L5h>l%g8@^Yeh zTTVsl6~x7H?Ck{-b@~+4jX(=mG4N0(xrrUTXdW0HZ8MvrtQ^<(UppU9DECx7l(XPg zi#7JCZ2dC{Ph)JxGGJ4$hr-G?xz@#-xR*g`6~0(|yE>zjwLA+xEcwIANQ|>cD 3I|IEj(nEDtrtp1__J&bhsd9Usp1G`%qw%? zxnrZkm8c=EjOw>@XXExtnW8}!UBL{Vq*FsJ4z=xH4?TL5)h)K#qOx;1%<;q}Z6$R9 z6r!GKssZeqf7}hlTPnegU}>Bkzv-5~4ke72qY8CX$1zR_kDA3AZ+Z{X_fD)dXxi%< z_u9Ubv=4Sie}HS{znL2dK67}GGV;(Z?fs&6&vv)lnFTk9XcZyd-QE4Oo^GEFLqk8% zZ!xbqUBqFAV<*Wmd!D0|O%YRz^d`MVg|9rX>x*rFL$%ZvbM0fti^Uob17g<{eIsER zyNNyadly3Ocl!a27xR@Kn99u>SnZr&GaTx$wx*3#om!ktc1E(6b(YNDj%@qWGL`%u zZK=ZI5wd8=qYVH9X6Aj$q}qFLv6p*IgS>;G{LgtF>;K-`SUntc=iRL_!`6#+7tV{% zOB-728=J+Absa4=jWV%(b*BSPdnqYDu0lb+wDjK+>5M8`*mxK692F3Uyn_eDfdOU0 zvPxy;x6KMv5Lb*PLEfh;Dl=Kl5(RgUz4y)5P-NafHC!$LJtaqx9tn=dpsAQJfd_PV zmM*Nc=+7@o)#r8yk}0N0w40T-#||4uX82uOZ^;F(sEGy?Z9v_=2O6mQu-DN5DTWc- ze6q9GUgG(fJ-y}4gj>C_Ic!CB^|yXqYsqNf|9T_-< ~T#!m$b?Qb;YS4goV^ybKo+vD=M;JZJt|5vfRHLo|4usJQkvn7f zHPxIHPQ{0IfiokIH8st2881=F`7Pbg^XAY2CmTZ?`52_IKP*e3%%dlykWUIctxmvC zXsJ5ERd*GAL9#P5vqRY&Zq*Q$;7Z(Lz$I%l%$-g{&$yb_Kver)byV?sn-g8k{X!T@ zTvut|{3XNW4=1ndL#;0LjXc;E?53*uQr<{t^cD_mWcJ7;n D0fg)dA zr0%P*c%vPC=vM(Rwq{UCEF*Wi206&pw=Yb^8TwvF(?Ty?$~RRfSefJxJWbZnT({y% zPk+zO?l=RnunQ+~GGXCMEBi3K=}Wh1d+%$iBhWi!2k6!m6pJ=#2cJwO!6(~i*?x@{ z4&3?_xf?w;){1M)so=}ZX4=<@Qu7g4gi3{lTnuyPl>twog3G$$+#zInQ|JiK;h5P; zlZhQD-*opz^k5cO|KzJOgeo6q2+Nzlt_-2wKm^vfbl-Ni8(=30O~V9qf}z)ID=|K) z+Yx&pK(rm_>pZe#Ytj-orWVw!0crJtQoDRvwtky{*f%RHwmglGqU$#sZ$h2#Ri~%| zvvyPN-hFiVq&vOSKuVp`UUx;9VW8Kx-!0aa(R)x}@K}iFNJmak;!^XZLIqI+Mq`>1 zk+zfw_THMP_r(s?4y6h&6ZbJyGJEnT?P1I{uigGp$we&nwVgmUX5$^2#_MdP*TQFP z@i7cye(%0D+4BkM }#&G6((o}u((-#lUj+eB$4!Y{Zyelh* s(|TH)uUMRF7ezrD0W#7x3-%QG&@TJ;-(87p!@`|7>wN2Z|5wVFkVCHcCWUD( z7msiu(=vMWh1i!xNrUgw-TTFkSYKg>=owjRW8vwEHFs1;>6X2B6iMTa&f4 Lu+g(FI NF}5niocsMgQ|(Ij&+W7t3nHFpNTYKK3aYtc zDKeq8QOHslV7M1TH+#EjnR9XL6IKM#7lNCaRApCGSkh59XhyN)(Tp653w>5OUrNN4 zb+(kHAh%0Yc<%eg{%BNh_4OVb*Z1%o&?#PW88JD<@jSzKnX7cdhwJZMw6Ip))Kerr zPmd|JCnX4Z^ejBa-}c!bu-G>f`@SFT&}|@nG20Y!YiaL0{0W1};5EL12#c`BbcHs& z!?m@K*?-YM!cy5qf~j+n$bjc|2x?zz9&3HSuhLWxQLk}LpA3MiU-wrIdQ+quGfo(9 zkfyh$&&Z5}JVSO7dIkH8ClTW^0(g`X!7_VXJ0URn(W?8EFI*d;OFXm>W4po7E?an? zRyMuAIRo&b{oZ<_CnV$+C3pXpO!esGT$q)r-OFB$;=9bzC(-w^(X3O=XO2%&?HP3w zHdcJ<)IAw9I6#i!4{%uUI~m}YV>>y((W#oHOmVh&+mm`Db@Nmv+k;;e78X9!6*-(9 z!Mopm0b>zR=hGxI627d`qoUR@Jz<~mZ5;%1%J=cw+!&6IxC%?h#=+5xBteGM7_iPQ zmmzTpp+=X^FB}_jcEKy!z65@qf%w^baN#35r+Rx)UK `aO3-kjWwxLd!Hk7dPjqt)Qm;I%5-|;} zrtSJ$^D+erA#h_pYR)g+><^0eySVKR>87>nQKu6=9 7g){@(trv z)PjPT+|Y?~ljsJm6a%_zG79qGEexyu5#4K0bmo!cn1Gv$^>mX `#V zQ-CaRU^Unrcpmx^H5Ys!=2rO68lP%gd^;T3Yqx4KGzXb-gHAnoqYTq2`Z+p-n!Tvu zA@gjsw9I3pr^=V(Tf>5A6DVCqAD5-#qD+o$q*j%PG91_ExY; 30#trTqyy}5w(n94Hz2$4PU$oA`9x_~PZi!@-%9)SkCT|&>c`0KhW z`<>WVpd9{W-XDlvns8GCjwYLJe2@Y_UpCgus1_Q0c9@@iKDy7nnbqIUA-%BM(l0ES zo6EI^VPqTEFt3Q10d|H8o2Hd{o`sJg{if%-LVRIro(hmXG+t-4e?kWq>S^b<+c$<0 z)U=~PTh6`8#8IaBM6G=);!8eSVIKXBey)25;t_&T?xV#C$Dl2bRYT}JhcoL(dz8Z{ z{z-Iam7JvIjN+zUxCU9RX#A|sl`7!qn+c0k8qW6`OV)mmPbsE7C$(By8XIdegGq|k zAiV(E6%oHeGSIHX*dN!#*N*)VdKAAoU57f=&7@}|@^Tfq8mWy`YrV~i_690#Y8v3B zCvIDwCl2Sr?jI_x3PmXCoPaH0H!golF}UrFRbuYj*`_{w-gJ*lWxnEl&5{g2ZyfXP z2eO76b6%++ExfU(dK1`#33@rO9-DmuFn@dXCd#{rNDZ9oxJvSe&N~K~^SvLCl~?21 z`0y6!lO0`)WP2p&Sjsp9h1LQ#OCDg&f|L3$&JiVoK; Moe&3VhIm(%f5`V2F{WG~jvk_b={)h+MDrjv2%@-1)rF4r%TY0YK0Uh2h5#G9^ zSp*~=KT# Xpok$o;l;82rTS3Jmgz3z8Q PhI!2p zqO|k7&@J= jn+-?4j@OiBUXHAzGWn DqA%RB*Gd3CoxtS~BwA#(j)-)kiv^hU_gueT^Dm^&;F*WTtf;9q z0(H;A##}BOOE?2DTd>_C(bX|*yV0%q9GKpOym4>m6$-gY52_<1epW1k3yX!?sZ)Vu zH&{($$M=Vm-z*LoI1d+1e*d!fTjJrB8;fF-7wxX_NzN4<%R4WK);Q3f$N9_`@hesR zEB$p~VNwQay!DQjRVpKvV^FBgdWU0JYjlTtT+9$Acz8IK7$OP&7+kNc)?I6;u6ADo z@|C9+bKI;Q<{V>UJ7SO^Q)dmEV{r)n0nYDDZ=i;|OuG^$0HtbklXwhoz& mCnZCALp^$9c8E5( z>0-4!#23kYLhZ0Hp9b(OQD~GH{K@VmkJ$mPn6L10Y3AeB=uNhE$UA1ErECKU)s@z$ zA>)$L`te+nwF6906)Iwqx|wjx&-?;~%X365JTJsbhT(SD19E}Frr@Hz3j8^qUw}ph z_%ZAUv=NQfYA84oJ}C}mnB$2=zIgVG^ReeBw5wGo2i<`eM3ZdL9dqhSkYG})NK(z` zWXhs9KR3%Diku4zK>>TCJ6KwMF7i-Ds{wefsjtmIlHS1V6F$XeU^q|?!>^}hy2VVg z9v}gCTAsNoH}5-*wPtiUJF*zfdP=TD$K^kMUL$YkdRlG?< 5(v0;s%URyH8Xck z;-zdkOP}s-#qHtv_4FSUMkB$`cF3n 4>O!uC@NjyHkS;q15SBdLU=V#XqY~{FqOePypZA6 z5j0$+4l{dXO6Z4$`S>;zd<~F@?F}zkSv~$B5ySfJiw*Viym93hXclp1^OuixRvO#D z!VX*PxDoLw&DKS}!`7{&(h7;iz||v=8Qq!2ny+|~7O+EyP#SI&7Z=hYy!RjiyA5fk z8;apL`SNgFsP?|&oUy` r#xX8xq&jb9P(C0cx4347_s_xzbacfhl@&J6+SKw@YVBLP| z`iX_z`dIVAtbE;1wE(twINca)?9OsR$O*hx2t75MZE#4AEuamac1i-21!Nlw`Yi@A z14YYF&VqR803wsqy ylhuxa%X&y$4BnonS{hR zPRfRFOFzt_uXATq20A5y;)2I4X=<(7C10)wV}Oc8pSux-hk#^S45GD^;SDgDll_7Q z(n@}uq?D;4hA$kW;zA=!jrgd(LajXM9F4>3o6AA4X#KJ#uAa+_lQV4R;##vp;=*}! zF=Y~4L69ehDe1PX01mtkmI6x+K#$e?pHii@3hO;Hw>u4= NsbpX`gZI&~pinK4i96(4qVbi_6ggwOBe%z$qV6qP&jFtq`@8bN8`zc6P> z)<=1*qZ3F5z9F4e77m{@b>^Z0~pQ4YL3u{dSwvdqYT_!zt&-cmT_1 z4C=CqmZSs+ FPxRzh9Yz}XE<6aI%Vxha zL|x4qZCDRrDqu<-cttfcu+k>8EGI#QyOCqIW1*lUuh1CbD4-+2Q_+?r^vWumv1s7) z`Be-Er)MSsgdw;r8g#x|6+EfB8@LW9*b=neI)X-{^Vl7Tg#Zp}NuEzPHE9Tt0AeU_ z03Z yL^BEG*gYZFA+P{D~edo*FUt$((@V!NO$?tI&41-xArTva@~82Eq}eS!6H?{ ztf?GN3(_7LzX7RsK{ 7=br^7f7GM)i~vjPX5;aLb2<_`q~)?6PS;3+OrKyaW2 zTRZXIE{f`m2dEszQ0m~MEkdaMa~gGa3`xVCj=o^>#}^!GqNg8DzUWO{R@Yuq9vZb> zDraa0>Cq%9WWSo?=7^H_@-K*ASC?*M#F$-+9_Gl9MFEKJEK=>b^J}p7 o;;2;H|>(R<54IV)|9IsF$Gz8pPUAg z*$P0``-Nde2Y^A0-jfZ;7BPr~;*n)ujq)%F;Cw5}_I?{MaflQL0QMlUxO5!Ac^!dy ze23~du!R8002%^tjsTe<9$an!%v{8`XMhEa)DLXx{ +p6E-JXR z4j8N@1Iac?O}Gs{MX`u!fFW;DTi#*t6eVS~X*vx=FM?7iBwBAngRFYuFF^vmS?k1z zX()Y2kdc+3`3ykNZw5ku4{87)2vEa-p!PuA;J5i6NKP3LN(Um)ge9Il8i)a8eqw7+ zmVlTA8RP)))o%-H=v(WXnZfBFJ=uRDGbCdZqjQCr-E3AlEq6h@8YqD! zb;=|~5W1ntD#ao)-MI)8a)Cn9LB|9(i$Mx`c3NWe*iSH+6sA+dt?K#8Syti#+6{x^ zf}klZ8c%q7 _>6OL7+`>_!`WBF2q?`Fu)9rFcwwViP-L0p8$(pXT4PiR5It7gqLn1L@noN6 z6y+k2h(5Ve&laJocqBL=E85pm#E7vejkm8S=z!Sr4T4(mbqv4xt8?f93tQ}7ulCX4 z_!I~%dILGuZP?H1Acj1I0zck=1NFUh0m1j&);Rr(2vMr;afXZ&`ni$KNxafZQ)anz zh=l$&ox$s3Q7H85iy&avcgpya%B}v{ZIGDvU~u0?^_Wj` xM w{rtobaGWb>bWxbDQt z4&l$cNMVyrM9r-%6>%QLJt4$U9C1$TtQX8zZx+!pr+d3<{v_`IyB(lmg{4unbl> z`&gM=-wf25QG3q vuPd=*`61}gH zK(f K5Baw7;Rf__H2wNNxAy_*W8Tkcl3oqXiI;3c$mKbF? z+(+qL%);dIq(-ArNy2DW0g7uHIqP%1>*r9rCj!rMiR#Vln*PiS(m9G@2eL&6DTi z2vRl;aX(X@D^V>ObX^JzJ#b}EBe~0RzwBZY?Kq(F(-I}B8lo7GNbtq^B?}NXA7g4j zElZEBh*5}?L8>;x*f09nXyJ|WtKhQx8%aCM1yF!*l8oy1sljk<3szXA(fPsTnzOA< zGqto+E6VS_GwRvAXd1VwUosjoYOhE~LsK?2wiK0BjtImR(mwT^q_Gf2f0Z@ftFT6< zD$^}8Y(J(1a~mfWx2VO%m@qCK72BRGtG`{6esXhX%sI2-ImK7P|L>pN|EVaXb^Fsf z`;Orz2+ (};i@02Q{thDJi4g5`P2 --NBR^4m&^VZ)0p7);dvm^a-)OB$xd7K3@ zgBQBm7eCx3@l_FlJx*mgMdw}D8)=6ehq~?E(GxcA@+e>Bgjk27Ch!8`&85ib2T*wG z##)p~faUqY<%%pbdMy69LH5J=#D*)31rs691ojGG@7!J4Lmk=u6}r0p+3rdw1od%c zGgjzjJNuotf94 BIn@yn^8 zdfg?WmtmQ`r%dnc-oqQW;FD8W95$;|DT0KPLMR4tMP~%fmp=bGJEt%hi=gE~W!l_X z*AeFx2tdBI(zx2}dwph9mQZZ;xf9vYe=2ZuW@L3qI_lz{k4?!BkF&G6jl Mv2hb64p=0Siq#>it%zTR(>=@yv@kuQ18NPtOZYnXie#Qd^ZSh> zO`;X@(K4}`)n{mZHeTv2Yx1@W3;rSP 2%oytv}NfB|Poz;8-e%Pez)h zp)I0s3Ya@Uf+v%?AeMr9B-iZ|2YWD;osf2@Nh1z(9C#pY$+)x=(cW!AR%Lu4GRKLQ z1U7|R;uf6t@B>HeLMXRtiS|ufP`c~GV-n4TEsOC(#L+A$ar9ofFTdd*`;V5{c)eT7 z>=&sSadG?V-aLQ)>uW*)1;hoW*GrFF&&4jpCDS|(wTVT&N$@K{UQf}K5fn;(@HTkk zPMuw$gmdEx?PusuV{^_=_CFC`vJ6|hjDi8oi`1%IePs F%xF^1 zRHsk(==t?MwVY&r*BY7A!^g@%+|@tFy&1p4B7e*px-tP1M=~FN<3&wKYg$RqH|n1| zgqNrSm#NJ}basE6LL~}RJm?wBa2N}cw@|RLRgYm|$XFvu(VZbi9oM%wY1ux-aF1%| z*hgg_{?F@R &DWABGr=K2?bYJC^~v}4x$CI|)F#`gd& zn@!bG{ciI;>1Uc7_3CWs0Up^UqO$}uleXP__H2Wv<~;eL0^HOS`fWqpb>^8$YpDo+ zIH$+qr{bQEK>vAg-vcJ?e7ozfV?WqJGCJS-eUdtj=F`lnOVoU$Qp7d!st6^z2UygC zIW-XL7Htk)Yzl0*&=Ow;lWeh=DCB5P8Uo~>dK(wsPGr)%G9TcOtvj8@x_${Del1Se z154b@8a?uPl(}}6M^sV6q%hai-y0jvwHrv-p-|#kpNNw*jjglTpKwU (y0uk6Mg#)rucjP1`$X16n8VQxryd+)R=@VeLejwDC6YCm z7D_KTZ3?y6j*h1qgjM;fno@D!lFAP&D5w-H(rEdmOA=!wUU4{|; cw|A_NyAQ^{!KcL;gS6 zK^FhNvcrEtfsrlqb=&pE3FG+amnMVh>W$$qu6_R1pyk%h(W|VjMN@nyEr}}M6WsSx z($=DFKkRKxvmV07b_JkQ!>o2>D%VKoVs=!m=88pBn_!^}#16ytDb@RFYN^%$Ks;Vj zBn=ZRQsFY6hDw6l!if0G3I37y_{zbPgK>h4H=%{!E6+%{f%b2HFOPhTv_=Uo LEe<1o6~c_iD~qH!UOhJSm4P7kPmR(fL5=li#mV zeKM{={8OLS?EGV}EvZ0@-tBv9W~;7MAFf-H-d2k9=mEAZ(!QDp*g;jP$91hxNVhJ2 z={F~6iLoY &e*2Pqvay$pS(0BGsG&;&2_U~8T5_&^N zt;-n#h``B-EG2B9ZfG7Q+!D$52I$+znSJ?L3g5}c$!5!_@sBUFc0T$MmwWAbN^?B9 zLGSI1_iNLtCRq^|-tEnLvbpU;w27fP{W|-JZrhG{L=EEw;t{T5U0R>bCT34+6sx%_ zI{ZrIVX<*^G|GJSx`x!!^T5n=8Aqm!A2YEMO_DabFn`hA;uK9c!elL+Yv0Z}B>q}< zNNwMpK50$1{hr6BHpv*i>~~RFvZ}3g>6hQBETuYWIGaD|A}mypnK}b01BPpvY|NN^ z_HZt|e$%`8(|zD=ouW`eCf6&GEHTDMI@WXX&C}K${sUebWB3+M>DNqo+B0Z(=%?3J z{=%DQKdjk&eRS(})wd;QUmt 3FbGgwO)Tc~4}=TI+9L@~_F-)Hpq zi4B$L;)>+@7rBXks7|t9XiptzYu9kr{jZwbdx{>)Y_R)ZehSkmYeQOpNq$qG_8TcI zESc;gi0g4+W0L3Og#Jc=wXAcCt@B20ig)C_OC-!X&yJVy`Mx|uRcWQg>0S#pyu^At zj*d!jnWGC>n}w@dYw*1yQL2Y&Ur`j+?-11*$+#a(&ktx3xtl{R5_)@}%Y`|k3+}78 zKTWfdvl70>)6M?>z^HrTH=6&TVZr~ n~AX{=IWL{F85FGk2!yt?g8h z7mysy+;InRQF{rYx0nV1dij|Y%6f9&Q}DHdvaGT*Pqlwjww2~DsaTHw_dQ)(YwPvv zlDszUTy|P2_Hw_~rm#qwGOUkKVz|@yB1jeco5Y1V>F8>wqPzR?iJe0&q$Kwaky#W8 z>q?&qS`O&vt6U}BZ?cky;+yY?mb!0^;LDuBcb@EsEj)hyNP9=;MIz)T9P|~~i(!os zArFq=8U@AeNu#;paR= F;a0&xlo@2DvtW<>+h5-n{^y40 z{_>|^+F3Gt#g!Qu2oFv8w3@dWTAgSYPbqLhd~)xZyPf3?qms;fM*lmaqwVLuN1031 zu-dE!2(R9eY>>s9LZ9{N=T+*wSD&7Ezm lmLty*7f=UL4-T%ZtaAX$NhHT1(NUW{4OGt@<#@;I(`upMwtij0VuCfv+^fG z&Wf(6caK7L_n^#gOYlYesSUurvfk?%zYwP}vyq9UH~Oc9)?Uv?a*w|lWdv~653@UC z;S$`;x%6#61z-3| $b2JPjILMRNA3>Lq^5+k3JU1-0IX5mmbsEK9=haY8Vg03Na4|m z11hDWyYj&}&A2 1hL1e-f$ud_TCJpXU|8;y#n4<3Rj+CA*iQiv!jceo1fmC4D}nQaccOCQb29+Mg61 z=65ryThGG7?ZN7H^@;qqQ?EW!*C2NN`-j@^{tjD(smlrkx}^76S)=tcq;9FvBEc;1 zM(LKw%3$kyL_nlQLjoSw<{GQ&K7G{JrAVo=t~XR=ye$dzp~L4zI^ObY=T-*wlPIHT zaPotAr9)U`Gpl+6ChuBnz^}2IfbyPn3W-&a?Ye1?B)KXpPP~4)w{X%DA-6fVr*>>* z0@As8SHVYAM(op~)>K#j{&Q0p#hg3P%?##bFc0MAZDTD@x$Jx`Nw`!JekiMEZ+Y{V zE%M$@$J_Xl(JBw@xRV=V(E6Z}&<(5b>({Bek5+SqVfi{Gq2ZRcVrf06E!A;UWf>n= zbg!C6zD?ZE$C&3;HgQ481DZ2FpJC&|OJ$t(*!76H{S^t5<-Bt?6-Btjy(-Idf5X|( zTqK|on7MdLD??BB5yZRb$bSkppSB#Z7cs`30Ztlx`#VD@JH;=&@in1ByR4Qe!_e_m z)*2t+{;E5E>PJJdFChQ8A$IS u zm)hM?HhJIH2VU3TvU*|A1%t_o^U+C3=E8OK;H5E|qrZ0P#DM`3ago>F%@%g7I0A}> z2qh-PQc+HR=E3?pdksD^Hve{~pK@|G$J)2zQm&}H&LIpmu)oAN3rUW%Ygj9EjL}ma zo5t)nrtb4Wm)ew1ekPUDW7@QYhlJ(WqcVpcsZOkugKYDkyl!0W@Pn#+#vZu+W4^sH z5LM-)wn#2`XmP0r4 ^QpBJb&4~_4bZy6P(wO5mW~?L9R@E*Mjaxorv+XVvhqJgY1EVOo4t?v zWvXp{-8Z_fwq=-5F(l1WR&un%l=0bjd}26+~EmvJJ}cH3GpU!C>7Bjn+%owHq5 zHK!MCjxhUE>B`=^%B6aw6ixNvyi2@Kez@s#Yu9x}2lItGp<`};adE!mu8QTTNB4As zejd`zBr)P5Qx6Utel-#% )gQrJJZkQWKeUhp(HyxTkx;!ebZ;)7 z9zKG}3F}hAjh>;rM_jCA9g%jk4;d`}SMbAb%5T8)gnd8z!Jkbnwh9s(LVa>OCa1HU zD_>amCFFU<&Bu||TPs!nL$miX&Yru`75VGSoy9>lJ(VS6-)6JJqE=RycmXBDx%~V@ z!)o>Fp~oAj-23kS^-Ea $S^HOzEpw0p(P@k_=a$5i1 z5TQLfIEaf=OlhF)g==SYe@xfRO!r@z{hjn_m-$TYu{eq_A>PM3Ahwd#k$URIi&f2s z1;6}pWuNTf58OO!Eu@~qXgQI=t@C>{t-Xa`z5pUcMN<9s0KL}*00hhHpM{&?2V2)& z#o2+KBd*wkxqH99k-KWSimfWOj11Uo6C)!caFSD7i_6QZ4E&|QaBHwUFB5}eFPgFl z>jEJ+EPd|atCE3qu1T}B yBN(BPVidH z8t3rU*9#y7`32wSfhll~5i(l~bVPYU8Xvw^x5e!-t<9@{8fRj!H!=gbkaK$zM{h~@ z=Bc}mJx|c{;u^%xNfBQ-aMxe6!-DEn8~at}@%9skNSMYCyWRs!zR_JHdQky)L7r -$GJI(C1fPGOb+bJ?9qYm|=e7^WY(doxF}B}?KtOw*OeGdzf^qRbel)Vy zo*p@c=>6q%_M3?Mmr`qVi}I}=j};CqNy7pqD?JfSdDq&oqoY=vqpQjy<)io)9!o8T z^jmcqA^EEA!yR}hTXjQR#JLaS{>91-;5{i~1e!s x$i1fhpGX4#U6Z`8WvfnitsAM2)0 z|No(gwEtBn{yRq~spwlz^q05)_1`=M@4qhz|9v^9)p6IKhR8;ts^hZyov*>-{4y}8 z{Hu(Wr6jtg4HM;R#HU8*J4Po~W#lPuT1G@%zR3y0HHDg_I0;ER_^*dNQ!&DXPJ3qk z`b#1saY+STl#=!gOHh)4=IG((@jdVHo)$>v)T!AxjwZba-+?Q8D)6c-spdYZ8FgQH zvHs>w!wy@ywY<0vnWBL?$Nv0n`1PTEUmf=*-7A&XJxy4TVh||JS06&;q3Ir 6PRRy9PuaKMLtch@Iuy!REG&&b3G1Af2|4CloQ0MjKk@Upa z=$GNU2MJ=)$fSNqt)fuHEA9c zO9P2IVQ=xsc-^4b`MlThFJ4s$pzTk; zjktX{ZAx{2L^z;dTD&UI`8xP%*^X}BufqGZ-79oUs(^po`0Y#V?FZjAd%;Uu6e_&j z@!VgB7fv7k;`&ZWCbv&g@ND?jvG;8*ElA6sm9&ZwDf90yJ^%B^p&fU{D$~We#~TiT z6q7dtvbri&xLZ+x=+N>vzC2XBLQ`$otoRdhX_C3KY<3IVn2{%6Pc{0XsTDPTp_JyN z44Nz}*p-U)tq7Pc&@a3^21;iTT zVD7r~8LT_;pa1N17iKmlgyd<>Pb)hIE=s)OxdY<`++JQK^j0qq_Lq-PIvDTaV1PJ# z+C6h*;LU5t-vr!+Wu$G}F-beah+;&2R%#20tvo=Q-&icYbY(h%LA$c~>F_&V3{C0| zCyK_#GtN+^A3P1FT=?gk*W$~iW0#4yr`fQH4ab>7pl>|cbtS>SoZt86(2?k-tA1wY zFHhRMHn8Y1h(yJsRl>U7*&YIom+R+A(_y=`ZuegO20auDWTu^5OH$AbgyW5sNP8R9 zn+QbxSgO9b2p1cSKsb60r+zRVDNxYPz_Kw^MuxzjT=?+Ii(|eheks@huVyJxENEUO zD{Sz6$A@CUuKg?+V7uYqEDoHiR|gZEfaiX$(ek+DKwFp0>HsPUb$rnI8LJ~3$|XEs zDf zLvORwAMJ9gLkpq4<)? lGdLrM17U{ z$e7@WXb2dFHzZHXMcK}EgYk+Z!U5-gs#*?qh;o+A3=Z5&k2|-E0sY5&JmeZu2I1|S zTGO3#EM>!FPEGqy;t~q9tAh$(Y?v7m#y~8P)Vk`&+7i0~rH2hlC@c(R8TA%}>gG$) zAU1j^X>i4=j1sUy3lf3xa531c*olY~t2v|5VP5LBU0xzIYSc}NStvHNQd1$;w#`!i z)VC6gWHdTZr>|UD(d%>dGO!4fPm+eXC(;q7lW3t)CFUbA2%7~Y;$?{qVzQWK8EH{T z@KV@{U=e-W&sR}fsisIyTeserQF!=3zs_F1l=E#LNS+I`9xzVm5@T2|wUNFO-_&S+ zia_{EVkLptngpY1iT>K$FJP(A0A*#H%CGs`9r^D@&e`3$Ts^&~*n`TN&F%~Pw%}jL zD!lf=u~An=S*1mVVIjB+F_3%K<}g2+E $IC(kcj`rger7FPIyMXX# z9qh{gDS2GJLCb3dUmMASOOq=gmEZABLJ|IBE;pSlKF(q%uB?SXFK?(XttS>HO+{pS z);IdtCK32+&@vgSj9~`)o))U)QXvcG|9YcC1pT@!g<``Xjmee3l&hC)0$K!?D8?YP z^^Q~d4bKQJ?5e%)?)760hCL_o+b^u8BUsF$^Wcfh$`(1VkJ(BN27g9o+;I=4L2;_D z$9FRuJII_kmb;ODQVT9c**%Qd#b5yT)yO&&!Q1BtD5(g(K6>tAn0>^vI3KzVsG>HI zsv$;ZC~LjstXPO_DwhUv%A(Zxr`RIqdf<%U aEO zg?qS=%b3m21r3$00%#p1DmV^blSSKXizl|U$m4(pd$I;-HVe2W@^}wW0q4pIAY^k? z7fzlvA7!P~w2m>h>h`6*pDz0g76Xzf0S!$tSM@i`gNSlfn)@MzlOnJoYs2+5;jQ}! zYAES*{=LZPG%I9nGG#3e15<)9l5v0924|x*!c`281CG@(*a47(w>ezNL>!SLH-}RC zOQ(Cztt9RAxHdcMh*TzZ?P?|8h3$ImshqOuLehTPE70D1p4D}soe70o%GSxg4$=F~ zH2ca^@YFszTdF2fwCC!Iw-w^V&Y@tAbH)U_&lzp^marG{oCV7XYGC^41lkfJ+!~G| zn0uUM&s(yBbz4rV2R+Vh>N=-ejm0Ezbfaz-eg{v6`yxnzA^ms>QFAVhKXQ)4xH#)Q zPdSaTPc9b-{1jGD6!Rhvn&5{H9Kk2wth_q=Edbj~4Qssdq=^jrF_dGU$ex>Z77Sq< z8mYX#?cnKi@}@+{i~f{Kq0ae`*Zf>?zg|;8#r04JH=PHDHxpDOdqj?R*%+0+ExEU+ z*w$wGm({wwiDW`))h}_Ed|sU`m^z)2La1o|@4GuQh<;tfJ>`19E2*-E?RZ _1ATA*gqiX9;6tXLnT4R<%!3cj<18kKJ(VcZ2|%AhU9x^FQF zQh5331<6-_sdO~j?cf+ySJN*cX;dCR94uH&x-FvTTX&yrdT`08vQ4YR>2D#}fqH7{ zVr7?Th=je3C+YRr`Y-S;B`Xs8l2eLs3@xmpYGJ9nBj7j*#u{=8*Xq}D+QP#;JPfJ_ z`!o_!VtcL?%pJM}G8x*W^l{1Q(B@^7nzRzA%jHJ}77thxPg<9ObPvS!7pyj^NBGI) zcefV`iZQg8RE1E07=RhCHA0_y@0xC3d|sm})r%H?60dfypa!6(etFlHm6&u?`&^8} z-p<9#ECL>lMqe5;EDR&~7K3ZV>SD1WQgMBeK4Upxf@e#T%E8@g6d`+E!SR zT8qWUaleN(lW^__n8<*C*O(aOo#77>$?N>`lW9k`Uv-!O?<>0thEPCzI?Vp({->Ng z@P;|++s)4(u2DrfV~CLGYJb*YK_9=IQR5|H=}2;CT6&X?JnEdP 2$m24;i?6KkJpm;qN^%2;VT zl+3VNz^@_Rt&|S2_cycV-)rE^(ey#5O_}H1o6zzOx|3O1e{$S4xaoeqO_FqRyoW}2 zEpnNug!I)xG$DQhTSp@I8C=|1igu51Z7lz8tP2Ou`f+Rq>3jf4iCP<@j1No-p7l6i zOQRq5qX{M1v)>e_;%$seg8bH`cnF0;wBLBx&q8Zi$LHzn(v}%S8e6UgH}f(YCi-!W zuxnH!9MzFH-z;DeHzC5PzEa+_AiR$>S>x5PF>k+%O#8li=fj(Ik!@&7JN#gBq|?(D znLT1h7h&I=g?{o?y#oevihB0r>d}gz@~koBn^45u9$Z4klCRY*qcsa|kwFy#FOHnN z;yg)ij{iOs-#%fMD*YC8#VWA ^E$Ikgw@AL)d%Wt!L2?xLD(Pr?{fQh2i`6CKRZO>5#MbF zrvx 4J1n#d-u226IKVE$k?y1e6e1~wu{7=T!i3`~(;~vxU>HO( rkFOPb1d+zBA7)CSN;=;|kMK zV(*+D-*wjoOme!Lp=`dt?j4a!wT(Mo_|VnsZs>FqvW&88!;C`FTbNO};6@E>IlGhf zj<~6(=B9nV=&b%gn8+}CZ~8{UVdXdBzmW#-{6sjJF*K1 S`%2m0#Wj_9su#mX#UgJLMPSATn>- z8BchwOL{Hie%EkTX_>W1^0aB%@Ou;AK}gXM@QIxhVxXb|K}obhc{^`cWZ9<(We^H| z7T{F8UpVk#7pI~kl|LHE|5W6CI1H886`bIh_ +5f9u{C6PjuFH3i;B=kZ&&)T? zH%woR{_Dn-!NI|+{l?D?U+A+&RZf`qFMl&XzdM+^) =r!Um3p1v^J|6Hxm&z_{~NMA_9X0q;p_jyj# zy >Fr8sP2P z$m4L>HTKBJQI=@4zQ;tOm4cezZPn>f98meq5uetHOCIMp@AdAr$G87lc<~@&H#g;# z*(skNU7UhK?M4pzO3NP@B2|$nOO#+)nQL$BgS81;Dzf{uMO6B6wfkopgYULia@QU4 zRp;D2V_%95Ea!x=r-PFPC$C4|@cYlLJwus`!8$}MuY1-P9eK=LdA_hA#stycf?a1~ z$9@QId**%0$!MR~`eFngy%nzrxttWrv3|mcuZlmQTuyC(O#797@c7zvHm9;7<%`jj zmlFOc9$RIt(y0ik(QL~yL$oAqBeh(Iw@_}U=ZDjUCOMF5MdEj}EnQL}#>syFsa;#C zq{8#$h1mMsi?Z@Z&b>LZIc7_FYC<_G$PooQ4`fb-I>l^EZ2jozg(_|QphAc|QeU^L zX{ B4v UjhSeoAqQRf$Ws_rO({>u_r4B$w9-p zN2mT+1sMjqS`-keXmE=~Pqd>ux?-ZCw?$AMB5bEvhY9Owqg~kC-9@b>sl(Ac)wBwh z{I3)k&arli2me0h<}(fh+GlA5*-osd?b#k>IC0(i9yOE5)Rv#8ZT7S=p-p6{?F-&Qw(Vi{36+L5JYl1#Xsz`XWqQ?x2NWa;o=)LA+H|nhD_Ec zT=*8VeTEc&&^nYtLJwb*_H~w|Cx&56lFV;Nn(L`9rb#3{G39|hRq;SV_b~OR-1ZB% zvun>->4+#YpshF{A-!V-5tf+JTe)|$BNgVqC_jiXL^OH_0i+8X@99tI(UUX2JGSM! zlLx{yO-kIl`Fecn05kAcF|D(u=Q!(q^Wzi}EhJC<`6zj?s$5a$^pAR=qfTrEBoonS zZeuBw%giYbC1+o{l|Bss=eK@u^so3O>yY@?+J{!3K4@)ENQJ|pEb-+fG@Mj0n7SxA z;4x}U5g-P`tx3pPj4C=t=!St-wOn;Mmy#OgIAE1L7ml5#)gTwfrQ0#F3!!MiZ% eHeKKNS=^JUdO;%Yn0Z z*C!I6F~1xvFFG6-BkYM*Fe^d*bS49AoPQqLkc@g)&&=L?u97H-GQI0|pD+Gk&)TO? zW+Kx+TA675sdfAFPxdtl(~qwVm9$;Q4wMe%_Vr6d;Q`^;-DZitMQR;Yk{vcgRagoo zEz;Ej-Ag??Ur`$7{_4eY+AF * z*XKuZ keAWvIK(}uq;nz8COeHOF>wqnHOejHo#Y|tMnORT+o6c{XTmz zT&0787_XJBqtLU+0V3Iv)8zE#=Nu&!*0V8venx~l{RbfYiR8ljI}#ktSY8`#Q%52z zO6xfhP7|?j&c@g*5GD5KJIYW7>uAqdB`&(0gMtB+8kv*Bv2oQASM}T#k+8U;m{Ye1 zLeKBnPe^zMYkGK;^UI#H`zPGcyT?9jRyp*_D}{**sXOTit1VkaP*`ZyjwXq+?Rx4# zHdMIntn5J{Er6MB9dYr~=Hi?nZ0LGw-pY_R-RcL~wX>t>?oJm>M5r+4{F%Rk7W0O@ zScb^cz3ChtvLxBSE58>dyX4zMI=43oqx%oc_X4&sHy Jb?I(OyQXPc-&>iZz?kS<)gG1zyL#UvlD(8~PDS!Cxz$(e7+x^N?DhT4B2f z>ar~of7J>VXbC!Xva5*%&JFJyQHvpIuujGIVs@A($O-fT6$4aNY@YW&xrbiSGyO1T zj1`K#C5r+l|M^^Yq@l76UU62h9CP=qjfsP}*TYQi|B!pzmQD1``vM%>8C6C5;QF;c z?gd~IvDEU#Su%Ez0}WUo+4gj+JIYu_L-qXyT>Z%by_<7Kl;+x++qX2L&&|`O#P*fg z+1XXqSQ%rvqbKya)>-2(Sr{W`G|w@`!*W%6ILd4=!bAmDe&Dg4OEe*Od^<{dYww4R zkSsFb#iUaL`2QLBY`w4vX0IAEz1ampkPp0JI`W;~ZIvf_?Q-lo6w07(d-~ea-D% z7gT9Zo~mrkWG@gP1Jv$s$ml4mFuBYx*V^amYRhK6ugOXu?lmghFwLfmJ)JYJqy zb7;`^y3LAZB!%X t!s}rd8!;(6^ElNtVLI|^l+X^bRA>1E;BqMUKHrB zt)Z@{bU;JgmzsE9?=JU2(C7D{nIU!|m&ju)pE_(qCbmuNB3t}=zmBHE@;0oj^X4As zh`)cTIFne%i?C$e46hM?iM%Wq?>icpS=SR_zXX&W_^q%s3jZ(GNz1M7tBbShxuq?} z=P?6YaniV)v}kLSPYRr0pO5-D%|*_9@GP?Ejr!oSz;AKSr 3X71mwo*|zy;!2c6 zY!%eTjh?!IwNhvXt-&90#>pk=3N@!if(xeyg!_ck7b)KQRN9dBr#Y7M@ z;>V4t@`Lww;c7YcU!ED;7|KIBOSoPzin!}yOlAGXpqw+p bHySkCG-MA`^C( zdVJr%^Yg>ij(_xe%$8W1*>Sl>>v6ItqfPZ(96P8`@${)xq|_pfI1<%NPD Vc} zron2)EBT<(e!rtRijI`RuOn!(fVMyT|E$;3s%B-e4YOifuRWLTte~V-Oa3JopZV7} zA*TyIa>8~&(Ys}bv%7T22}z!kZ8(uG98%WktiCc{`4PQ9u&9oox!)6WA>#|G(pD;w zoLVQO-d3?Ej)mmw`lY9+I+A$(2QYS{>`<8^r|jYxW6l$8r5OTWLhHV0L%?#r`|zQr zu0EoRL0X$>qc3`n74jDk*SP{y_7Jb`>ybyn5UQ@%TAh3Ji|?TsZNPA1+~&Oo*HXo= z8Y?C3zKviSmTa{9YWmv8b!q;vS3j&6jH4-B`YY)LU#-U^RccLhsPr}ciklhf2y3fK z0>upIACrrUM|3U6R=6g#=>$$|>BptUL2oBQ7ABEEDRd6!YO@CE0bP>)xPU`|NMgnn zsNojT!7)s;kI4|9sF#@t5l`)4+Q^Tmlvgw1Nn_rUC{NdpYZGV)QuKZG(WfX7VvTdu zCL piEJW$12Ye|arNkew)640Wus{6N4OR|49^O;uDC8w8=~otFfQx&suK=c3OE zrSi3tVn#-^NOs{2P&Q!z!?MtJ2d@|24DDsM@BX<4c2@u6zWn~W`Aes&zYU{KIXlAK z(J?1)&fNR5xEtgBaiS7tJQ(%x93UHe^4u%`hY6_Yj%$v4edVd0;& Nv9M? z)ACi7$}-==6e#ZN(5QosRlX~$xj2mkC486JQmayVyL0n#wQy;XUQr)Dux17pv8*V! zxQ(JpnnLDc>yP%zNJDtd?x{?DU~htLm!5NPhB=q3t2jvR;HeDf&y?>oau4}tW9%um z$igoma7tuwt$PGWa49W;NEwkSO)f~A3<8dmv3xY1;md`i?tXRg{7(-pXF0+Cv0pdt z`}oK8ml?yS(EE|MnPC> WLtcDlb00nIIPu>`Ku6GkY9g8;L_M}sg)n|@mL!yy-X#+1cGrPg>$|0*V z+r;v)%RGJQ%o(-H`x>?<;L K8q&sL;1@O%U?ozotJi4iDewRMpggQu87sPmkzR`ogPn2c&I3C@nFN(b0v_ zL`*<_?Fvq=@An)Ib5e9KG2%>;qC%QEv>*|Ryuph<{ycBUT8$ze5fd23`6TbGYd5DO zG*-~`4c+JWD|YR3A#oy_6`D+28fQDQ%F{|)p{4L(^RpiOnmt8NXT FzH`;Lf$S|VW85Q84z_pcUF!sUKri`WRj?A{f<`&? zz XP$!u2|Fu8~#-%+syE2AS?_2AEMqoD#^5u{|7`xL<0pv)Ivl>L
}+ zN6xv=@ee)7x$o=xT<`bmC03_Fqk4!#(3~tFzVlq@<;qe|C1pK7&GG5up)Pesn2X6g zezZq#Wr~juAO|-{=?K#s>rP-0fJyZZmW4L_$+hv)u4#adC7=c0MI`mV#|m7>oqv zVAO>5?tH7r&o8?M-#T@x3`3-XM_SSgN>zugXW4J?%AdKXc|RY2N~YJ^x6g4KQ{j}t zh!aX&PDNStfo$WpHnO+(SI(rvdwiQ 7|r3m&}>kj#wep&oxkn|1q(7o;j|S|X)R4{Bx}RQWT}6y*+0{O^B>
^5hTZ>$88 &g)Y6J zv!}y!q4UyD7k=oz^keETZ;Kt{tNxt&rsDeUt5ZtS&6bBNTT8Vp_?3CG@`wAE@BnRz z#tk>>@TV;Xtd(iLMK04Dbn6?Pg*5jOv}r-;J}S@cO9?G9k3N=4#W?~Yia8VOS+~6& z4*rd&nDrifW;YGSHV51pkxuTp^XidUU3v|5YMl1DH^`cpUevMyJ@ m;VW^Isd}@xh;XSf4+TuQs zpx8J5YiM0Pk19+K`dQ@u#^F`EPVuXuew 24lA=c9z<>3BF@@Teg$VvVPm@mP}- zV|6ODlFk?_Fny!Pn;|RFvY*1&Kde!613pVSlhzj&i`g3NF0`dpU;2EF^VGd-%^>!| zFlXHZMe&v6eZ>i7-5!q`?sw#y{ABZW*b&(f4eRRaY9h+|8^l?!0qdq#)VUx=v4vNf z49&V|ps@g;cC|QcW#9a$;7SKYWQ`nkD}NS_Pu|0U#yO^C=<2Fpd gb(Zl4HO@%X8%m(BS*ng3P)4&B<_&mEIpZ-5FUNOHc6EBS8J}j7_iJX RgA8q3;1?KtoN zOrDNFp=w!aoV4en(lhghj*xr<24xrAqbO-DFf^noGa7V-WTJ>2gXotMREZTh?KmBG z=CJz?&d#K6^}e1m+qad|9`mFHYTffM2m5@67BPQUwzki)U6x7gt)k)-3moLLbFsuW zhs3x;iX~OgARTx71@-0HwAgHSm}*j9*@P){Yq~%eC+(Zuh)@0HanjDy=_Mb01GC=f z?z49gznwG( N42 `2c-vaEZxZzonZVldWrLyf}?5-BOE&o1#WPcbE@XOAEba3P%@sgceY#Hd|)oo5E zJ>bx;7T(GCw)~Eq-?j=T_5EaMQ@VPbB3$IDH~p8VMX2yKaf+hGT1Mwd(XTdNA1cx= z8M=~1Om6DkY45OSY>5k(CcGYi zd*?5J^bJcQl^x(Qm-m;b&GL=Gv8F~XTxJiS?B%^nbvw)5$@m%mqfHonIVp04U&Vhl zMnEqGlkIcJnm?SLp9m=^b$ycv #EibfpAA?Vi1nbQS0_%E^`JwNUDzMwGD1ETo8AxY>T0(1^7l#tU7 zr3IKS(TFk`*9H8^z%;B*Y(a-ROm}8bWapuViu^0{v5m1t*~0lfoewLlgN>pD@Q-#I zOS0eTx8XnR_n1DZzJ6~Vgm2U1b2~gau;3&o^}m!gxBYOHXsW}zqe@C9MQ@sR@u{n5 zDYr29ewW!|d@=@UDcgS})5&&G(6max2%>Q1yINC2O%h`&2kCGPw&nSlcFnN>^CD)m z)wbuKbQj9;ht0PXN$(R$z3|piB;rao(_dsS^OUs`^NJ^<<}*& DkbRe4Befg^!#(x*vciD5PEK&kKw7aSk{=GUrecX`fj{@_> z`=DrWE;khVh=*L0I)uVq`@|a~?T0oglk3-Qk{r+6P|_RWM=76;wp6ys6>U;*T5(CZ zPte%%7+8EUBBg7c8$)?TywV4lZ8O#;jPm;DO-ZlWJz`7Gf>|SbiP3OkfFvbVhELP( z_Zps-InN13 Yb%58y1oVvMs0m{@OEb5IolP(;EiP5A9 ug9P8>)Sw>H-0K_>C;y|pyoyWQD)OJ8pJ|yMdeoA=hiodb!2N?Q+kaH| zIX%$KLCaR`KznAMo2y)-a>{osTn#&5W!HVLRj;S=+*jCi<6~DHXQdD28Qu~Ke`X`% z&`tJo!tig+B6MK=2D)7^V4(oA3iYu3{mtr-f*+Wjnky_e^HRYwu0rl}>pcpQGN_ z8MgD)FBT6M=fV!d(5OfPGV{Ty@YPlFS26+}lzNrt|KKiuc}qKq(Fxb<9jhD!Ub;ZW z`mLYr?nGV|*}h?|C6$n@h12?=JIm(S$7ZLnZhS`8?_O_Y%}+Wz$75PFYJ&y2`RicL z>%RUf7{(e7#31n$rG>%fw>I{Xr-}s`8tM?p*+q zcKyK2EMF>>boBzYOQ1J9CfK|pTT2H*)H2MdR%@U{3}nU?0o9}nn`J zBs5R?n}WbqSARjL#H<;7V)+;9`1<+>@!Ht0&KFI*jLXm5?AMcV`he$_fD>$4Mx0If z=?tz-aZKfW?7=