From 86398ad1a00dfe43cd75560c211481c7ade7fb4f Mon Sep 17 00:00:00 2001 From: awongel Date: Wed, 27 Mar 2024 16:31:54 -0700 Subject: [PATCH] Allow time series for any attribute --- run_pypsa.py | 31 +++---- test/test_case.csv | 156 +++++++++++++++++----------------- test/test_case.xlsx | Bin 19348 -> 19350 bytes test/test_case_db_values.xlsx | Bin 17684 -> 17732 bytes utilities/read_input.py | 9 +- 5 files changed, 98 insertions(+), 98 deletions(-) diff --git a/run_pypsa.py b/run_pypsa.py index 2739dbc..0bd5081 100644 --- a/run_pypsa.py +++ b/run_pypsa.py @@ -114,34 +114,31 @@ def dicts_to_pypsa(case_dict, component_list, component_attr): n = add_buses_to_network(n, component_list) for component_dict in component_list: - # for generators and loads, add time series to components - if component_dict["component"] == "Generator" or component_dict["component"] == "Load": - # Add time series to components - if "time_series_file" in component_dict: - ts_file = os.path.join(case_dict["input_path"],component_dict["time_series_file"]) + for attribute in component_dict: + # Check if attribute is a string and csv file holding a time series + if isinstance(component_dict[attribute], str) and component_dict[attribute].endswith('.csv'): + logging.info(f"Processing time series file: {component_dict[attribute]}") + # Add time series to components + ts_file = os.path.join(case_dict["input_path"],component_dict[attribute]) try: ts = process_time_series_file(ts_file, case_dict["datetime_start"], case_dict["datetime_end"]) + logging.info(f"Time series file: {component_dict[attribute]} processed successfully.") + logging.info(ts) except Exception: # if time series not found in input path, use csv's in test directory - logging.warning("Time series file not found for " + component_dict["name"] + ". Using time series files in test directory.") - case_dict['input_path'] = "./test" - ts_file = os.path.join(case_dict["input_path"],component_dict["time_series_file"]) - ts = process_time_series_file(ts_file, case_dict["datetime_start"], case_dict["datetime_end"]) + logging.error("Time series file not found for " + component_dict[attribute] + " of " + component_dict["name"] + ". Now exiting.") + sys.exit(1) if ts is not None: # Include time series as snapshots taking every delta_t value n.snapshots = ts.iloc[::case_dict['delta_t'], :].index if case_dict['delta_t'] else ts.index # Add time series to component - if component_dict["component"] == "Generator": - component_dict["p_max_pu"] = ts.iloc[:, 0] - elif component_dict["component"] == "Load": - component_dict["p_set"] = ts.iloc[:, 0] + component_dict[attribute] = ts.iloc[:, 0] # Scale by numerics_scaling, this avoids rounding otherwise done in Gurobi for small numbers and normalize time series if needed component_dict = scale_normalize_time_series(component_dict, case_dict["numerics_scaling"]) # Remove time_series_file from component_dict - component_dict.pop("time_series_file") else: - logging.warning("Time series file not found for " + component_dict["name"] + ". Skipping component.") - continue + logging.warning("Time series not properly processed for " + component_dict[attribute] + " of " + component_dict["name"] + ". Now exiting.") + sys.exit(1) # Without time series file, set snaphsots to number of time steps defined in the input file if len(n.snapshots) == 1 and case_dict["no_time_steps"] is not None: @@ -233,7 +230,7 @@ def postprocess_results(n, case_dict): time_results_df = pd.concat([time_results_df, n.links_t["p0"].rename(columns=dict( zip(n.links_t["p0"].columns.to_list(), [name + " dispatch" for name in n.links_t["p0"].columns.to_list()])))], axis=1) - + # Collect objective and system cost in one dataframe system_cost = (n.statistics()["Capital Expenditure"].sum() + n.statistics()[ "Operational Expenditure"].sum()) / case_dict["total_hours"] diff --git a/test/test_case.csv b/test/test_case.csv index 29d61a3..fd4ae52 100644 --- a/test/test_case.csv +++ b/test/test_case.csv @@ -1,78 +1,78 @@ -PyPSA case input file,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,, -"Everything outside of the or flag is for notes, etc.",,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,, -Note that demand has no decisions.,,,,,,,,,,,,,,,,,,, -"Note that unmet demand is represented a source with a variable cost only, so unmet demand has an output decision.",,,,,,,,,,,,,,,,,,, -Information about PyPSA components and their attributes can be found here: https://pypsa.readthedocs.io/en/latest/components.html,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,, -REQUIRED KEYWORDS,,,,,,,,,,,,,,,,,,, -component,PyPSA component type,,,,,,,,,,,,,,,,,, -name,Unique name of the component,,,,,,,,,,,,,,,,,, -bus,"Name of bus from which this technology would get or give its energy (or in the case of link, the giving bus)",,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,, -OPTIONAL KEYWORDS,,,,,,,,,,,,,,,,,,, -time_series_file,Name of time series file that will get loaded,,,,,,,,,,,,,,,,,, -capital_cost,"Fixed cost, if not defined default is 0",,,,,,,,,,,,,,,,,, -marginal_cost,"Marginal cost, if not defined default is 0",,,,,,,,,,,,,,,,,, -max_hours,Hours at max capacity for StorageUnit ,,,,,,,,,,,,,,,,,, -cyclic_state_of_charge,Assume cyclic state of charge for StorageUnit (Boolean),,,,,,,,,,,,,,,,,, -efficiency,Efficiency of component,,,,,,,,,,,,,,,,,, -standing_loss,Losses per hour to state of charge,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,, -CASE_DATA,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,, -input_path,/carnegie/data/Shared/Labs/Caldeira Lab/Everyone/energy_demand_capacity_data/test_case_solar_wind_demand/,,,,,,,,,,,,,,,,,, -costs_path,https://raw.githubusercontent.com/PyPSA/technology-data/master/outputs/costs_2020.csv,,,,,,,,,,,,,,,,,, -output_path,output_data,,,,,,,,,,,,,,,,,, -case_name,test_case,,,,,,,,,,,,,,,,,, -filename_prefix,test_prefix,,,,,,,,,,,,,,,,,, -datetime_start,1/1/2016 0:00,,Note: Dates must be formatted as text (not excel date format),,,,,,,,,,,,,,,, -datetime_end,1/1/2017 0:00,,,,,,,,,,,,,,,,,, -delta_t,1,,,,,,,,,,,,,,,,,, -no_time_steps,8784,Note: this assumes time unit for dt is 'hour',,,,,,,,,,,,,,,,, -total_hours,8784,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,, -solver,gurobi,,,,,,,,,,,,,,,,,, -logging_level,warning,,"Note: Can be error, warning, info, or debug and specifies level of detail in terminal output",,,,,,,,,,,,,,,, -numerics_scaling,1.00E+10,,Note: Factor to avoid rounding in Gurobi solver for small values,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,, -time_unit,h,,,,,,,,,,,,,,,,,, -power unit,kW,,,,,,,,,,,,,,,,,, -currency,$,,,,,,,,,,,,,,,,,, -,,,,,Note: p_min_pu allow bidirectionality of link,,,,,,,,,,,,,, -END_CASE_DATA,,,,,,,,Note: Capital costs are the product of hourly fixed costs and time_range,,,,,,,,,,, -,,,"Note: For Link, bus is interpreted as bus0",,,,Note: p_nom is a factor multiplied to the given capacity,,,,,,,"Note: For StorageUnit, efficiency is interpreted as efficiency_store",,,,, -MEM vocabulary,,,,,,,,,,,,,,,,,,, -tech_type,tech_name,,node,,,,normalization,capacity,fixed_cost,,var_cost,,charging_time,,efficiency,,decay_rate,, -COMPONENT_DATA,,,,,,,,,,,,,,,,,,, -component,name,carrier,bus,bus1,p_min_pu,time_series_file,normalization,p_nom,capital_cost,,marginal_cost,,max_hours,cyclic_state_of_charge,efficiency,efficiency_dispatch,standing_loss,, -Generator,solar,solar,bus,,,solar.csv,,,171.6544341,$/time range/kW,,$/kWh,,,,,,, -Load,load,load,bus,,,demand.csv,,,,,,,,,,,,, -Generator,natgas,natgas,bus,,,,,,104.0882472,$/time range/kW,0.039088111,$/kWh,,,,,,, -StorageUnit,battery,battery,bus,,,,,,223.872126,$/time range/kW,,$/kWh,6.008,TRUE,0.9,,0.00000114,1/h,Note: PyPSA costs storage_unit by power cost; cost of energy capacity is effectively capital_cost/max_hours -Generator,nuclear,nuclear,bus,,,,,,548.7837489,$/time range/kW,0.025047273,$/kWh,,,,,,, -Generator,wind,wind,bus,,,wind.csv,,,181.4975656,$/time range/kW,,$/kWh,,,,,,, -Link,electrolysis,electrolysis,bus,h2,,,,,43.92,$/time range/kW,,$/kWh,,,0.7,,,, -Store,h2_storage,h2_storage,h2,,,,,,0.140544,$/time range/kWh,,$/kWh,,,,,,, -Link,fuel_cell,fuel_cell,h2,bus,,,,,17.568,$/time range/kW,,$/kWh,,,0.5,,,, -,,,,,,,,,,,,,,,,,,, -END_COMPONENT_DATA,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,, -"Note that any information that is in a column without an attribute header is consider a comment, and not used.",,,,,,,,,,,,,,,,,,, -"Note that for MEM, storage is in energy units whereas for PyPSA it is in power units.",,,,,,,,,,,,,,,,,,, -"Note that H46-H52 contain formulas, and our PyPSA front end will read this in as a value.",,,,,,,,,,,,,,,,,,, -"Note: If there is a # in front of component (e.g. #Generator), this row will be ignored",,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,, -Cost calculations,,,,,,,,,,,,,,,,,,, -,Discount rate,0.07,,,,,,,,,,,,,,,,, -,name,Overnight cost [$/kW],Fixed O&M cost [$/kWyear],Capital recovery factor [%/year],Lifetime [years],Annual fixed costs [$/year],Variable O&M [$/kWh],Fuel cost [$/kWh],Efficiency,,Hourly fixed costs,,,,,,,, -,solar,1851,22.02,0.080586404,30,171.1854329,,,,,0.019541716,$/h/kW,,,,,,, -,natgas,982,11.11,0.094392926,20,103.8038531,0.00354,0.0191,0.5373,,0.011849755,$/h/kW,,,,,,, -,battery,261,,0.142377503,10,37.16052821,,,,,0.004242069,$/h/kW,,,,,,, -,nuclear,5946,101.28,0.075009139,40,547.2843397,0.00232,0.0075,0.33,,0.062475381,$/h/kW,,,,,,, -,wind,1657,47.47,0.080586404,30,181.0016706,,,,,0.020662291,$/h/kW,,,,,,, -,electrolysis,,,,,,,,,,0.005,$/h/kW,,,,,,, -,h2_storage,,,,,,,,,,0.000016,$/h/kW,,,,,,, -,fuel_cell,,,,,,,,,,0.002,$/h/kW,,,,,,, -,"Note: This is a test case, the costs aren't meant to be very realistic but provide reproducibility in tests",,,,,,,,,,,,,,,,,, +PyPSA case input file,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,, +"Everything outside of the or flag is for notes, etc.",,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,, +Note that demand has no decisions.,,,,,,,,,,,,,,,,, +"Note that unmet demand is represented a source with a variable cost only, so unmet demand has an output decision.",,,,,,,,,,,,,,,,, +Information about PyPSA components and their attributes can be found here: https://pypsa.readthedocs.io/en/latest/components.html,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,, +REQUIRED KEYWORDS,,,,,,,,,,,,,,,,, +component,PyPSA component type,,,,,,,,,,,,,,,, +name,Unique name of the component,,,,,,,,,,,,,,,, +bus,"Name of bus from which this technology would get or give its energy (or in the case of link, the giving bus)",,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,, +OPTIONAL KEYWORDS,,,,,,,,,,,,,,,,, +time_series_file,Name of time series file that will get loaded,,,,,,,,,,,,,,,, +capital_cost,"Fixed cost, if not defined default is 0",,,,,,,,,,,,,,,, +marginal_cost,"Marginal cost, if not defined default is 0",,,,,,,,,,,,,,,, +max_hours,Hours at max capacity for StorageUnit ,,,,,,,,,,,,,,,, +cyclic_state_of_charge,Assume cyclic state of charge for StorageUnit (Boolean),,,,,,,,,,,,,,,, +efficiency,Efficiency of component,,,,,,,,,,,,,,,, +standing_loss,Losses per hour to state of charge,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,, +CASE_DATA,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,, +input_path,test/,,,,,,,,,,,,,,,, +costs_path,https://raw.githubusercontent.com/PyPSA/technology-data/master/outputs/costs_2020.csv,,,,,,,,,,,,,,,, +output_path,output_data,,,,,,,,,,,,,,,, +case_name,test_case,,,,,,,,,,,,,,,, +filename_prefix,test_prefix,,,,,,,,,,,,,,,, +datetime_start,2016-01-01 00:00:00,,Note: Dates must be formatted as text (not excel date format),,,,,,,,,,,,,, +datetime_end,2017-01-01 0:00:00,,,,,,,,,,,,,,,, +delta_t,1,,,,,,,,,,,,,,,, +no_time_steps,8784,Note: this assumes time unit for dt is 'hour',,,,,,,,,,,,,,, +total_hours,8784,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,, +solver,gurobi,,,,,,,,,,,,,,,, +logging_level,warning,,"Note: Can be error, warning, info, or debug and specifies level of detail in terminal output",,,,,,,,,,,,,, +numerics_scaling,1.00E+00,,Note: Factor to avoid rounding in Gurobi solver for small values,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,, +time_unit,h,,,,,,,,,,,,,,,, +power_unit,kW,,,,,,,,,,,,,,,, +currency,$,,,,,,,,,,,,,,,, +,,,,,Note: p_min_pu allow bidirectionality of link,,,,,,,,,,,, +END_CASE_DATA,,,,,,,,Note: Capital costs are the product of hourly fixed costs and time_range,,,,,,,,, +,,,"Note: For Link, bus is interpreted as bus0",,,,Note: p_nom is a factor multiplied to the given capacity,,,,,,,"Note: For StorageUnit, efficiency is interpreted as efficiency_store",,, +,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,, +COMPONENT_DATA,,,,,,,,,,,,,,,,, +component,name,carrier,bus,bus1,p_set,p_max_pu,capital_cost,,marginal_cost,,max_hours,cyclic_state_of_charge,efficiency,efficiency_dispatch,standing_loss,, +Generator,solar,solar,bus,,,solar.csv,171.6544341,$/time range/kW,,$/kWh,,,,,,, +Load,load,load,bus,,demand.csv,,,,,,,,,,,, +Generator,natgas,natgas,bus,,,,104.0882472,$/time range/kW,0.039088111,$/kWh,,,,,,, +StorageUnit,battery,battery,bus,,,,223.872126,$/time range/kW,0.01,$/kWh,6.008,TRUE,0.9,,0.00000114,1/h,Note: PyPSA costs storage_unit by power cost; cost of energy capacity is effectively capital_cost/max_hours +Generator,nuclear,nuclear,bus,,,,548.7837489,$/time range/kW,0.025047273,$/kWh,,,,,,, +Generator,wind,wind,bus,,,wind.csv,181.4975656,$/time range/kW,,$/kWh,,,,,,, +Link,electrolysis,electrolysis,bus,h2,,,43.92,$/time range/kW,0.015,$/kWh,,,0.7,,,, +Store,h2_storage,h2_storage,h2,,,,0.140544,$/time range/kWh,,$/kWh,,TRUE,,,4.00E-06,, +Link,fuel_cell,fuel_cell,h2,bus,,,17.568,$/time range/kW,,$/kWh,,,0.5,,,, +,,,,,,,,,,,,,,,,, +END_COMPONENT_DATA,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,, +"Note that any information that is in a column without an attribute header is consider a comment, and not used.",,,,,,,,,,,,,,,,, +"Note that for MEM, storage is in energy units whereas for PyPSA it is in power units.",,,,,,,,,,,,,,,,, +"Note that H46-H52 contain formulas, and our PyPSA front end will read this in as a value.",,,,,,,,,,,,,,,,, +"Note: If there is a # in front of component (e.g. #Generator), this row will be ignored",,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,, +Cost calculations,,,,,,,,,,,,,,,,, +,Discount rate,0.07,,,,,,,,,,,,,,, +,name,Overnight cost [$/kW],Fixed O&M cost [$/kWyear],Capital recovery factor [%/year],Lifetime [years],Annual fixed costs [$/year],Variable O&M [$/kWh],Fuel cost [$/kWh],Efficiency,,Hourly fixed costs,,,,,, +,solar,1851,22.02,0.080586404,30,171.1854329,,,,,0.019541716,$/h/kW,,,,, +,natgas,982,11.11,0.094392926,20,103.8038531,0.00354,0.0191,0.5373,,0.011849755,$/h/kW,,,,, +,battery,261,,0.142377503,10,37.16052821,,,,,0.004242069,$/h/kW,,,,, +,nuclear,5946,101.28,0.075009139,40,547.2843397,0.00232,0.0075,0.33,,0.062475381,$/h/kW,,,,, +,wind,1657,47.47,0.080586404,30,181.0016706,,,,,0.020662291,$/h/kW,,,,, +,electrolysis,,,,,,,,,,0.005,$/h/kW,,,,, +,h2_storage,,,,,,,,,,0.000016,$/h/kW,,,,, +,fuel_cell,,,,,,,,,,0.002,$/h/kW,,,,, +,"Note: This is a test case, the costs aren't meant to be very realistic but provide reproducibility in tests",,,,,,,,,,,,,,,, \ No newline at end of file diff --git a/test/test_case.xlsx b/test/test_case.xlsx index 0151f3d19fe5b2c9227ee839929d7c7d07da9594..4d26bb9de9ddf47bf5b6159f8813a83401332fb2 100644 GIT binary patch delta 9690 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 M0yP4O?7yi00@|~BrvLx| delta 9767 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 hAfl24uDzcYUQT?(XjH@O6LR?Cxy-$YgHr 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%0A7b z9)btF*P88SU|Q0>Ki*`bsV>$PbrA&K8n+&0dZ-gG5)SSIKfZK|?w$<#yZ3ay`Tpoc z(B@d)sOi0^`UpsaD<)?$b47e!^H6C$8cX*oGS4e)=D zYtO^DC9|}&Kd=}56<&&wmTcIDZhEA!PaV!#CFG&|r*3oFG6$VYag=2)y(~p7 z57h65*2jL*M}zoGF`fAax&!?S^CNCdxxUy#a`?p?y>DACTu?koG?y zoqs?8ow+3aVL=5Iq~`hQ@tyM@3awCDn#eblw~B4N8OWke?(>j}h4m(eao&>pNEVEh z;hmd6*TIB9=D_b6IL9%ix!@;?>zcll*@2+TQ60*lZlO=%d&_SxYa7$Qzkqb}Bsr zq85suv#MeS%7@wK@)QDqTq)x7 z@>Wx3$xZ>uf^#5ohbZ9;X6;O!0$i0Hwy?EEiGAYNzqJcM7k`=k5G>29fSg+uzy^g5 zs#KtiEC$A8X(rIY@nWhNe(!8^n(i?N6kH4b0Up!SMOReLd;Re-&i0v{vNAjk++R`H z^AXU@I#y0npv2>ISF!eS96G#rpD>N-ClnQ%VFg6dTDvK841&kKStuW#OoUWDm zguDq8A`23c_Bp%X8EJ;_oxG5i-G+P5ig!w3IJ>)P(B09G&UjrTn7H^pPSIQW_s-63 zOq?xnY4WQ+4!it$tVYIk%G}F2NWCrU2Ny#WDfn(`zfdgTk!E1H1le=^K*@pJ{{j|S z%=t1E62kn@7|WHSTg8SVGi{9zfP=aCgb(*#S%7c#g&N zB1DxKVI03-Y8ST$8WC{r=VKy9m8A3F1NGG$IPpYam=L-cRz#yg9_t8$E%fw~4M-A# zO*dBG_>e{-+4)zdT;AR;&IC9{RO&Pr(!{5>>MkCYj~Y#~=hYmb9DDZxj)}pmfdRU2 zb7_Q9W*b5KJhiCtGAY}LW0iyDt31dR+?-;vcX2M+ zoT;RwV^0+V)2&|e|uwSpiMv!22Z}-OPIeJJ^$gLAs<`zYIxZc?S zeFD6+9|hT;2wum0F)|P;C|~bR%&oUBZiBpI-E6_z$rz@YY!(1`+ONq}%&qj3`l#4u zT-_3XO1Sqcb+U06S_icfh5398Ta}lGWlkms3KV3U4!PG9SqCsQ-Ze}aH@OQ!cm?Ws zlFl=6gQKlxye!}>fi-UghI5mC8M;&8iNBLzE!dG)UdY{1vq2<9rR?+MV?yS9c1F2~ zPJO?JRQ&bFeH#$Q?}$z!V)Vj^)>Am8;WQb%ddbK?#&i5f`!kIYQH+)tUlzSn_N6FT zj+$Xk&;J&(+(}p9iZQzxUN!UYXyvPuev5ZyXA@gtuKww#n+>HYlP>!tD~?V)SUPlX zx@68x&+4h8%&A-H+Fz4ZhPM4x7WoP2Bq$GO(N%Vlz`yTPu-v;B9l?b zJ8?M;FYbc-t=^O}Wvi@ZyeCHoiv_My>&*A|4?BQLam|VrLmb;lI~!DolNSAKn$1$f z3p~sRG?0X`1gRe%qem4U0%C*$_=}MkFcwS9kJF3)ERN#o`^vkMNV~o{;RIZx`J9_V z(%f>Yq07yc+(nEHMJsrx$xu?7F6AnkGA#j(+I^ddNb}=}e2RW-k-BD&CfiBL&<8bE z{=K`r{2?#c|HkWTx;w*PJ_C6mInAs`{aQ39ZZU&qCJo>yz`zrzrjQbcX^rRtctU1* zRbI&t_P}%=MF1~CKgl>1rjaWOt}x*ZBSa*%_1Or7Y|zDl6$YsD@xUacVe1)q%%z$& z1k}lorlFSV0YO}p)TgMaN`QdMF10PrBq`K5h7CPX18rf$&S0ZdRQRFhIVt7xwM8DM zFxhs%^aBGHRoy<6)@g245R8vbupNfCaFz%d74B{)4CXM3u=rD@fBtm0bEQ8?Y&mK>bv~D9_VM6*fH89ls`t&=!_v1?Fu6}zJ zm%S(G`uYfnzY%nIpq5Cwyh1{naY-57a9O)$bwL+v5rXz|1u338#3415EP;9GQ*r+L zCzPoX#qof5{n@|@iT(&|mq@SUQV01}J554nom>O#s#Tm1fv*r?6O{G)^3p9&Wes@K z9^Dx|ndErRrc@2_aKK%lx2?GpUvIsS8iN&GCeS~v)!QH)M_Sb>9ksV0%C)UhAANg{ zQ5P09Lo4lJPOHiGL)tRx_kcCUx8>`xb?3Ul3dcFoz|Yhce*@tNj;h=n`EAFhajGdO z!^un96Z?6W%L4%Dm#3>`r;+iGVZ3>^V)>@LFBEx4B-x9EvV-b10Y&jZ!wrH%t*fFmXv(MpT+ay^(XZ6|rUD&4#KCcGn>*g+A)p zdYrVOD=xE}9N#OnKGu3!q-C*rESg(b=%zAtxsyQ4D{cfp5YQ^-`ByFA{(aCsrAK9+ zN_whP&HQs*=Pt(_(mEOBIM3*jj=*gFaFya*Z|mwF>W9Y=jk!_sL?pAOWFoMaqwSxY zfc9yV7iy1uH+F_`0rrq1xwBXCBp$)QHr*fZJkZ3AIoP!cY;LwLde#F&80bJqao>7B zhN0mYDq;bMKtMvlUki=GeK(fLtuk~vPsv`)=0k_Zk<;zQ2JXfWPeeD;zxw_n^M&+; zgH1HLdPxz=X0Sex328!nAZKy(x651Yb4#xFod2TZX*&1#@dC1$F%_$`9(T;VF&w$O zzms&x>?dVTLA!V`}@&bSYDR%1eJr z{Wu*^Xej5ths5EGi|e;{zbV_j7b&?c8DT?`a$tp9{v)$1t`=!LQ_dgAU6~1~ZpqF~ zk?5th)ZzZc!P_3xEnC7$9p}{)&oRvrioeAoJeKxiFw&73Im@NiZrM)k!F?Q$j_D{% zMc)=eN2fJ8B<%9k?10e9M9t&)gndXbxZnqXYp0$y!Y|Tl^C48sb9wZ&NF&5=jFd?c zG6t&tg5yle2uK-XHDd*&qVi0U6ge~NeZ>$n+{uz)CeL=q@Dl#%$JI}5AF)QDk*7)? zvZYn)_6{1}Ag!iZA{po=k5BA|7CPX^EYa6zXNFIR{u&$RaXiKul3kCRwD;t@ZT<^j zx6lQNTZH=FN?w2Q={l0D4 zFw^m@7w{-jco((mT6(sTsnq37mDQuxk*ysKYwn9u*Vb%MEOb8yYyKauPX=A8gE37_ z8Y@4zSrAavX89hSz2yW%uWISVf9C!H7Z zrc*OKPZR%4;WLk21scR7Y;+0Ivwj3KI>E0gEwZK%S@dFPhiMjKwp4}t5a|AXt2aLO zWl%gG`5(O^|7x5FR-2O?6Ho8W5&j+nEk%6)16 zRbb%k;}CAsEXn}Wty(;JIxiG%T4Qv9>c3V$MIv(9O^u4SJm;c*!jIJK(Q1U?Kx-Xb zY)}E8sw7;|O8i#vM!{@lzQ-8!xd-CGp|j-!I0c8>^oer<3dSWdK&OdE!j+Y zkOOCU1GZOsG$6Zd#z1Oii~N39!j0>SmB!aZKP!!9`D`V-#pq1^lJgiOs_%7)HccW}Tj39uA)`eiB3Cj%&>}ecg6)G4ZY`z#L<0XY8MwP8r z?EiI>07ttZcbJCi5q#38eLsQR&E>8;O-j6RgyZ`QFAziiq5s#^VvFhJ! z!9tG%gLf-4TE$P8@>K}WX2$y*M#$-U6t%LozboLfm)@O9L6$JwooxK6(Ol~UOFIHU zEYi%*Ss)1`hDWNDlR9>KW#26$i$&kWp(@2?M*nTSgeMQ+bz!!8VTl%YoU(1UZK9CO zt9aymT!_6*sD9hd-Ya*7+Vq_d1qJaxKOKOjQamL8c{0U>fWY}HRs6Rcp#aHH@qozE zOi+KYfyg+tKx1hP;{R&d5D=*Ub^hBL2S!R$ko-q<6M%pq_@90^GGG-M5peA<$$xVx z2ng)|arzEKkdc5y2P(=?|Fa8#ZZddK>)gO78Bs_Z;E0Si