From aba9f6b7e07127057c9e50499cbd9783ca8f3d57 Mon Sep 17 00:00:00 2001 From: eblondel Date: Mon, 15 Apr 2013 15:21:14 +0200 Subject: [PATCH] #65 VirtualTable support (1.5.x) - add encoder/decode + tests --- .../rest/encoder/GSResourceEncoder.java | 37 ++ .../encoder/feature/GSFeatureTypeEncoder.java | 29 ++ .../virtualtable/GSVirtualTableEncoder.java | 341 ++++++++++++++++++ .../metadata/virtualtable/VTGeometry.java | 36 ++ .../virtualtable/VTGeometryEncoder.java | 247 +++++++++++++ .../metadata/virtualtable/VTParameter.java | 37 ++ .../virtualtable/VTParameterEncoder.java | 246 +++++++++++++ .../encoder/feature/GSFeatureEncoderTest.java | 88 +++++ .../feature/GSVirtualTableEncoderTest.java | 98 +++++ src/test/resources/testdata/states.zip | Bin 0 -> 112925 bytes 10 files changed, 1159 insertions(+) create mode 100644 src/main/java/it/geosolutions/geoserver/rest/encoder/metadata/virtualtable/GSVirtualTableEncoder.java create mode 100644 src/main/java/it/geosolutions/geoserver/rest/encoder/metadata/virtualtable/VTGeometry.java create mode 100644 src/main/java/it/geosolutions/geoserver/rest/encoder/metadata/virtualtable/VTGeometryEncoder.java create mode 100644 src/main/java/it/geosolutions/geoserver/rest/encoder/metadata/virtualtable/VTParameter.java create mode 100644 src/main/java/it/geosolutions/geoserver/rest/encoder/metadata/virtualtable/VTParameterEncoder.java create mode 100644 src/test/java/it/geosolutions/geoserver/rest/encoder/feature/GSVirtualTableEncoderTest.java create mode 100644 src/test/resources/testdata/states.zip diff --git a/src/main/java/it/geosolutions/geoserver/rest/encoder/GSResourceEncoder.java b/src/main/java/it/geosolutions/geoserver/rest/encoder/GSResourceEncoder.java index 8780c27..3d38c3b 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/encoder/GSResourceEncoder.java +++ b/src/main/java/it/geosolutions/geoserver/rest/encoder/GSResourceEncoder.java @@ -51,6 +51,7 @@ import org.jdom.filter.Filter; public abstract class GSResourceEncoder extends PropertyXMLEncoder { public final static String NAME = "name"; + public final static String NATIVENAME = "nativeName"; public final static String METADATA="metadata"; public final static String KEYWORDS="keywords"; public final static String METADATALINKS="metadataLinks"; @@ -236,6 +237,42 @@ public abstract class GSResourceEncoder return null; } + + /** + * Add the 'nativename' node with a text value from 'name' + * + * + */ + protected void addNativeName(final String nativename) { + add(NATIVENAME, nativename); + } + + + /** + * Set or modify the 'nativename' node with a text value from 'name' + * + * @note if not specified, the nativeName will be set with the value of the + * 'name' node. + * + */ + public void setNativeName(final String nativename) { + set(NATIVENAME, nativename); + } + + + /** + * Get the nativeName + * + * @return + */ + public String getNativeName() { + final Element nameNode = ElementUtils.contains(getRoot(), NATIVENAME, 1); + if (nameNode != null) + return nameNode.getText(); + else + return null; + } + private final static String DESCRIPTION = "description"; /** diff --git a/src/main/java/it/geosolutions/geoserver/rest/encoder/feature/GSFeatureTypeEncoder.java b/src/main/java/it/geosolutions/geoserver/rest/encoder/feature/GSFeatureTypeEncoder.java index d55e528..ff59e84 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/encoder/feature/GSFeatureTypeEncoder.java +++ b/src/main/java/it/geosolutions/geoserver/rest/encoder/feature/GSFeatureTypeEncoder.java @@ -27,6 +27,7 @@ package it.geosolutions.geoserver.rest.encoder.feature; import it.geosolutions.geoserver.rest.encoder.GSResourceEncoder; import it.geosolutions.geoserver.rest.encoder.metadata.GSFeatureDimensionInfoEncoder; +import it.geosolutions.geoserver.rest.encoder.metadata.virtualtable.GSVirtualTableEncoder; import org.jdom.Element; @@ -60,6 +61,34 @@ public class GSFeatureTypeEncoder extends GSResourceEncoder { super.setMetadata(key, dimensionInfo); } + /** + * Add a VirtualTable (SQL View feature type) + * + * @param virtualtable + */ + protected void addMetadataVirtualTable( + final GSVirtualTableEncoder virtualtable) { + super.addMetadata("JDBC_VIRTUAL_TABLE", virtualtable); + } + + /** + * Set a VirtualTable (SQL View feature type) + * + * @param virtualtable + */ + public void setMetadataVirtualTable(final GSVirtualTableEncoder virtualtable) { + super.setMetadata("JDBC_VIRTUAL_TABLE", virtualtable); + } + + /** + * Deletes the VirtualTable metadata + * + * @return true if deleted, false otherwise + */ + public boolean delMetadataVirtualTable() { + return super.delMetadata("JDB_VIRTUAL_TABLE"); + } + /** * delete a keyword from the list * diff --git a/src/main/java/it/geosolutions/geoserver/rest/encoder/metadata/virtualtable/GSVirtualTableEncoder.java b/src/main/java/it/geosolutions/geoserver/rest/encoder/metadata/virtualtable/GSVirtualTableEncoder.java new file mode 100644 index 0000000..b7c36ee --- /dev/null +++ b/src/main/java/it/geosolutions/geoserver/rest/encoder/metadata/virtualtable/GSVirtualTableEncoder.java @@ -0,0 +1,341 @@ +/* + * GeoServer-Manager - Simple Manager Library for GeoServer + * + * Copyright (C) 2007,2011 GeoSolutions S.A.S. + * http://www.geo-solutions.it + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package it.geosolutions.geoserver.rest.encoder.metadata.virtualtable; + +import java.util.List; + +import org.jdom.Element; +import org.jdom.filter.Filter; + +import it.geosolutions.geoserver.rest.encoder.utils.ElementUtils; +import it.geosolutions.geoserver.rest.encoder.utils.XmlElement; + +/** + * GSVirtualTableEncoder - Encodes a metadata VirtualTable for a GeoServer + * featureType. + * + * Example (based on the example provided in the Geoserver documentation - see + * {@link http://docs.geoserver.org/latest/en/user/data/database/sqlview.html# + * parameterizing-sql-views}): + * + *
+ * {
+ * 	@code
+ * 	// Set-up the vtGeom
+ * 	final VTGeometryEncoder vtGeom = new VTGeometryEncoder();
+ * 	vtGeom.setName("the_geom");
+ * 	vtGeom.setType("MultiPolygon");
+ * 	vtGeom.setSrid("4326");
+ * 
+ * 	// Set-up 2 virtual table parameters
+ * 	final VTParameterEncoder vtParam1 = new VTParameterEncoder("high",
+ * 			"100000000", "^[\\d]+$");
+ * 	final VTParameterEncoder vtParam2 = new VTParameterEncoder("low", "0",
+ * 			"^[\\d]+$");
+ * 
+ * 	// sql
+ * 	String sql = "select gid, state_name, the_geom from pgstates where persons between %low% and %high%";
+ * 
+ * 	// Set-up the virtual table
+ * 	final GSVirtualTableEncoder vte = new GSVirtualTableEncoder();
+ * 	vte.setName("popstates");
+ * 	vte.setSql("select gid, state_name, the_geom from pgstates where persons between %low% and %high%");
+ * 	vte.addKeyColumn("gid");
+ * 	vte.addVirtualTableGeometry(vtGeom);
+ * 	vte.addVirtualTableParameter(vtParam1);
+ * 	vte.addVirtualTableParameter(vtParam2);
+ * }
+ * 
+ * + * For this example, the XML output is: + * + *
+ * {@code
+ * 
+ * 	popstates
+ * 	select gid, state_name, the_geom from pgstates where persons between %low% and %high%
+ * 	
+ * 		the_geom
+ * 		MultiPolygon
+ * 		4326
+ * 	
+ *  gid
+ * 	
+ * 		high
+ * 		100000000
+ * 		^[\d]+$
+ * 	
+ * 	
+ * 		low
+ * 		0
+ * 		^[\d]+$
+ * 	
+ * 
+ * }
+ * 
+ * + * @author Emmanuel Blondel - emmanuel.blondel1@gmail.com | + * emmanuel.blondel@fao.org + * + */ +public class GSVirtualTableEncoder extends XmlElement { + + public final static String NAME = "name"; + public final static String SQL = "sql"; + public final static String KEYCOLUMN = "keyColumn"; + + /** + * Constructs a GSVirtualTableEncoder + */ + public GSVirtualTableEncoder() { + super("virtualTable"); + } + + /** + * Constructs directly a GSVirtualTableEncoder + * + * @param name (required) + * @param sql (required) + * @param keyColumns (optional) + * @param geomEncList (optional for geometryless sql view) + * @param paramEncList (optional) + */ + public GSVirtualTableEncoder(String name, String sql, List keyColumns, + List geomEncList, + List paramEncList){ + super("virtualTable"); + this.setup(name, sql, keyColumns, geomEncList, paramEncList); + } + + /** + * Set-up quickly a GSVirtualTableEncoder + * + * @param name (must be the same as the featureType nativeName) + * @param sql + * @param keyColumns + * @param geomEncList + * @param paramEncList + */ + protected void setup(String name, String sql, List keyColumns, + List geomEncList, + List paramEncList) { + + setName(name); + setSql(sql); + + if (keyColumns != null) { + for (String pk : keyColumns) { + addKeyColumn(pk); + } + } + + if (geomEncList != null) { + for (VTGeometryEncoder geomEnc : geomEncList) { + addVirtualTableGeometry(geomEnc); + } + } + + if (paramEncList != null) { + for(VTParameterEncoder paramEnc : paramEncList){ + addVirtualTableParameter(paramEnc); + } + } + } + + /** + * Add the 'name' node with a text value from 'name' + * + * @note REQUIRED to configure a virtual table + */ + protected void addName(final String name){ + add(NAME, name); + } + + /** + * Set or modify the 'name' node with a text value from 'name' + * + * @note REQUIRED to configure a virtual table + */ + public void setName(final String name) { + set(NAME, name); + } + + /** + * Get the name of the virtual table + * + * @return + */ + public String getName() { + final Element nameNode = ElementUtils.contains(getRoot(), NAME, 1); + if (nameNode != null) + return nameNode.getText(); + else + return null; + } + + /** + * Add the 'sql' node with a text value from 'sql' + * + * @note REQUIRED to configure a virtual table + */ + protected void addSql(final String sql){ + add(SQL, sql); + } + + /** + * Set or modify the 'sql' node with a text value from 'sql' + * + * @note REQUIRED to configure a virtual table + */ + public void setSql(final String sql) { + set(SQL, sql); + } + + /** + * Get the sql query + * + * @return + */ + public String getSql() { + final Element sqlNode = ElementUtils.contains(getRoot(), SQL, 1); + if (sqlNode != null) + return sqlNode.getText(); + else + return null; + } + + /** + * Adds a keyColumn + * + * @param keycolumn + */ + public void addKeyColumn(String keycolumn){ + final Element el = new Element(KEYCOLUMN); + el.setText(keycolumn); + this.getRoot().addContent(el); + } + + /** + * Deletes a keyColumn + * + * @param keycolumn + * @return true if the keycolumn was removed + */ + public boolean delKeyColumn(final String keycolumn){ + final Element el = new Element(KEYCOLUMN); + el.setText(keycolumn); + return (this.getRoot().removeContent(new Filter() { + private static final long serialVersionUID = 1L; + + public boolean matches(Object obj) { + if (((Element) obj).getText().equals(keycolumn)) { + return true; + } + return false; + } + })).size() == 0 ? false : true; + } + + /** + * Adds a geometry to the VirtualTable + * + * @param geomEnc + */ + public void addVirtualTableGeometry(VTGeometryEncoder geomEnc){ + this.getRoot().addContent(geomEnc.getRoot()); + } + + /** + * Adds quickly a geometry to the virtual table + * + * @param name + * @param geometryType + * @param srid + */ + public void addVirtualTableGeometry(String name, String geometryType, String srid){ + final VTGeometryEncoder gEnc = new VTGeometryEncoder(); + gEnc.setup(name, geometryType, srid); + this.getRoot().addContent(gEnc.getRoot()); + } + + /** + * Deletes a geometry from the VirtualTable + * + * @param name + * @return true if the geometry was removed, otherwise false + */ + public boolean delVirtualTableGeometry(String name){ + return (this.getRoot() + .removeContent(VTGeometryEncoder + .getFilterByName(name))).size() == 0 ? false + : true; + } + + /** + * Adds a parameter to the VirtualTable + * + * @param paramEnc + */ + public void addVirtualTableParameter(VTParameterEncoder paramEnc){ + this.getRoot().addContent(paramEnc.getRoot()); + } + + /** + * Adds quickly a parameter to the VirtualTable + * + * @param name + * @param defaultValue + * @param regexpValidator + */ + public void addVirtualTableParameter(String name, String defaultValue, String regexpValidator){ + final VTParameterEncoder pEnc = new VTParameterEncoder(); + pEnc.setup(name, defaultValue, regexpValidator); + this.getRoot().addContent(pEnc.getRoot()); + } + + /** + * Deletes a parameter from the VirtualTable + * + * @param name + * @return + */ + public boolean delVirtualTableParameter(String name){ + return (this.getRoot() + .removeContent(VTParameterEncoder + .getFilterByName(name))).size() == 0 ? false + : true; + } + + + /* + * a method to check either the virtual parameters as specified in the sql + * query map those encoded in VTParameterEncoder, i.e. check the number and + * names of parameters. + */ + public boolean validate() throws IllegalStateException{ + throw new UnsupportedOperationException("not yet implemented"); + } + +} diff --git a/src/main/java/it/geosolutions/geoserver/rest/encoder/metadata/virtualtable/VTGeometry.java b/src/main/java/it/geosolutions/geoserver/rest/encoder/metadata/virtualtable/VTGeometry.java new file mode 100644 index 0000000..602d352 --- /dev/null +++ b/src/main/java/it/geosolutions/geoserver/rest/encoder/metadata/virtualtable/VTGeometry.java @@ -0,0 +1,36 @@ +/* + * GeoServer-Manager - Simple Manager Library for GeoServer + * + * Copyright (C) 2007,2011 GeoSolutions S.A.S. + * http://www.geo-solutions.it + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package it.geosolutions.geoserver.rest.encoder.metadata.virtualtable; + +/** + * Enumeration of Virtual Table geometry members + * + * @author Emmanuel Blondel - emmanuel.blondel1@gmail.com | + * emmanuel.blondel@fao.org + * + */ +public enum VTGeometry { + name, type, srid +} diff --git a/src/main/java/it/geosolutions/geoserver/rest/encoder/metadata/virtualtable/VTGeometryEncoder.java b/src/main/java/it/geosolutions/geoserver/rest/encoder/metadata/virtualtable/VTGeometryEncoder.java new file mode 100644 index 0000000..cf85741 --- /dev/null +++ b/src/main/java/it/geosolutions/geoserver/rest/encoder/metadata/virtualtable/VTGeometryEncoder.java @@ -0,0 +1,247 @@ +/* + * GeoServer-Manager - Simple Manager Library for GeoServer + * + * Copyright (C) 2007,2011 GeoSolutions S.A.S. + * http://www.geo-solutions.it + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package it.geosolutions.geoserver.rest.encoder.metadata.virtualtable; + +import it.geosolutions.geoserver.rest.encoder.utils.ElementUtils; +import it.geosolutions.geoserver.rest.encoder.utils.XmlElement; + +import org.jdom.Element; +import org.jdom.filter.Filter; + +/** + * VTGeometryEncoder - Encodes a metadata VirtualTable geometry for a + * GeoServer featureType, as follows: + * + *
+ * {
+ * 	@code
+ * 	final VTGeometryEncoder vtGeom = new VTGeometryEncoder();
+ * 	vtGeom.setName("the_geom");
+ * 	vtGeom.setType("MultiPolygon");
+ * 	vtGeom.setSrid("4326");
+ * }
+ * 
+ * + * For this example, the XML output is: + * + *
+ * {@code
+ * 
+ * 	the_geom
+ * 	MultiPolygon
+ * 	4326
+ * 
+ * }
+ * 
+ * + * @author Emmanuel Blondel - emmanuel.blondel1@gmail.com | + * emmanuel.blondel@fao.org + * + */ +public class VTGeometryEncoder extends XmlElement { + + /** + * A class to filter the VirtualTable geometries by name + * + */ + private static class filterByName implements Filter { + + final private String key; + + public filterByName(String name) { + this.key = name; + } + + private static final long serialVersionUID = 1L; + + public boolean matches(Object obj) { + Element el = ((Element) obj) + .getChild(VTGeometry.name.toString()); + if (el != null && el.getTextTrim().equals(key)) { + return true; + } + return false; + } + } + + /** + * Get a Filter using the VTGeometry name + * + * @param name + * @return the filter + */ + public static Filter getFilterByName(String name) { + return new filterByName(name); + } + + /** + * Constructs a GSVirtualTableGeomEncoder + * + */ + public VTGeometryEncoder() { + super("geometry"); + } + + /** + * Constructs quickly a VTGeometryEncoder + * + * @param name (required) + * @param geometryType (required) + * @param srid (required) + */ + public VTGeometryEncoder(String name, String geometryType, String srid) { + super("geometry"); + this.setup(name, geometryType, srid); + } + + /** + * Set-up quickly a GSVirtualTableGeomEncoder + * + * @param name + * @param geometryType + * @param srid + */ + protected void setup(String name, String geometryType, String srid) { + setName(name); + setType(geometryType); + setSrid(srid); + } + + /** + * Set a VirtualTable Geometry member + * + * @param type + * @param value + */ + protected void setMember(VTGeometry type, + String value) { + set(type.toString(), value); + } + + /** + * Set a geometry name + * + * @param name + */ + public void setName(String name){ + this.setMember(VTGeometry.name, name); + } + + /** + * Set a geometry type + * + * @param type + */ + public void setType(String type){ + this.setMember(VTGeometry.type, type); + } + + /** + * Set a geometry srid + * + * @param srid + */ + public void setSrid(String srid){ + this.setMember(VTGeometry.srid, srid); + } + + /** + * Deletes a VirtualTableGeometry member + * + * @param type + * @return true if removed, false otherwise + */ + protected boolean delMember(VTGeometry type) { + return ElementUtils.remove(this.getRoot(), this.getRoot().getChild(type.toString())); + } + + /** + * Deletes the name + * + * @return true if removed, false otherwise + */ + public boolean delName(){ + return this.delMember(VTGeometry.name); + } + + /** + * Deletes the type + * + * @return true if removed, false otherwise + */ + public boolean delType(){ + return this.delMember(VTGeometry.type); + } + + /** + * Deletes the srid + * + * @return true if removed, false otherwise + */ + public boolean delSrid(){ + return this.delMember(VTGeometry.srid); + } + + /** + * Get the VirtualTableGeometry member value + * + * @param type + * @return + */ + protected String getMember(VTGeometry type) { + Element el = this.getRoot().getChild(type.toString()); + if (el != null) + return el.getTextTrim(); + else + return null; + } + + /** + * Get the geometry column name + * + * @return + */ + public String getName(){ + return this.getMember(VTGeometry.name); + } + + /** + * Get the geometry column type + * + * @return + */ + public String getType(){ + return this.getMember(VTGeometry.type); + } + + /** + * Get the geometry column srid + * + * @return + */ + public String getSrid(){ + return this.getMember(VTGeometry.srid); + } +} \ No newline at end of file diff --git a/src/main/java/it/geosolutions/geoserver/rest/encoder/metadata/virtualtable/VTParameter.java b/src/main/java/it/geosolutions/geoserver/rest/encoder/metadata/virtualtable/VTParameter.java new file mode 100644 index 0000000..a454c67 --- /dev/null +++ b/src/main/java/it/geosolutions/geoserver/rest/encoder/metadata/virtualtable/VTParameter.java @@ -0,0 +1,37 @@ +/* + * GeoServer-Manager - Simple Manager Library for GeoServer + * + * Copyright (C) 2007,2011 GeoSolutions S.A.S. + * http://www.geo-solutions.it + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package it.geosolutions.geoserver.rest.encoder.metadata.virtualtable; + +/** + * Enumeration of SQL View featureType virtual table parameter members + * + * @author Emmanuel Blondel - emmanuel.blondel1@gmail.com | + * emmanuel.blondel@fao.org + * + */ +public enum VTParameter { + name, defaultValue, regexpValidator + +} diff --git a/src/main/java/it/geosolutions/geoserver/rest/encoder/metadata/virtualtable/VTParameterEncoder.java b/src/main/java/it/geosolutions/geoserver/rest/encoder/metadata/virtualtable/VTParameterEncoder.java new file mode 100644 index 0000000..5a2995f --- /dev/null +++ b/src/main/java/it/geosolutions/geoserver/rest/encoder/metadata/virtualtable/VTParameterEncoder.java @@ -0,0 +1,246 @@ +/* + * GeoServer-Manager - Simple Manager Library for GeoServer + * + * Copyright (C) 2007,2011 GeoSolutions S.A.S. + * http://www.geo-solutions.it + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package it.geosolutions.geoserver.rest.encoder.metadata.virtualtable; + +import it.geosolutions.geoserver.rest.encoder.utils.ElementUtils; +import it.geosolutions.geoserver.rest.encoder.utils.XmlElement; + +import org.jdom.Element; +import org.jdom.filter.Filter; + +/** + * VTParameterEncoder - Encodes a metadata VirtualTable parameter for a + * GeoServer featureType, as follows: + * + *
+ * { @code
+ * 	final VTParameterEncoder vtParam = new VTParameterEncoder();
+ * 	vtParam.setName("fieldname");
+ * 	vtParam.setDefaultValue("default_value");
+ * 	vtParam.setRegexpValidator("^[\\w\\d\\s]+$");
+ * }
+ * 
+ * + * For this example, the XML output is: + * + *
+ * { @code
+ * 
+ * 	fieldname
+ * 	default_value
+ * 	^[\w\d\s]+$
+ * 
+ * }
+ * 
+ * + * @author Emmanuel Blondel - emmanuel.blondel1@gmail.com | + * emmanuel.blondel@fao.org + * + */ +public class VTParameterEncoder extends XmlElement { + + /** + * A class to filter the VirtualTable parameters by name + * + */ + private static class filterByName implements Filter { + + final private String key; + + public filterByName(String name) { + this.key = name; + } + + private static final long serialVersionUID = 1L; + + public boolean matches(Object obj) { + Element el = ((Element) obj) + .getChild(VTParameter.name.toString()); + if (el != null && el.getTextTrim().equals(key)) { + return true; + } + return false; + } + } + + /** + * Get a Filter using the VTParameter name + * + * @param name + * @return the filter + */ + public static Filter getFilterByName(String name) { + return new filterByName(name); + } + + /** + * Constructs a GSVirtualTableParamEncoder + */ + public VTParameterEncoder() { + super("parameter"); + } + + /** + * Constructs quickly a VTParameterEncoder + * + * @param name (required) + * @param defaultValue (required) + * @param regexpValidator (required) + */ + public VTParameterEncoder(String name, String defaultValue, String regexpValidator){ + super("parameter"); + this.setup(name, defaultValue, regexpValidator); + } + + /** + * Set-up quickly a VirtualTable parameter + * + * @param name + * @param defaultValue + * @param regexpValidator + */ + protected void setup(String name, String defaultValue, String regexpValidator) { + setName(name); + setDefaultValue(defaultValue); + setRegexpValidator(regexpValidator); + } + + /** + * Set a VirtualTableParameter member + * + * @param type + * @param value + */ + protected void setMember(VTParameter type, + String value) { + set(type.toString(), value); + } + + /** + * Set the parameter name + * + * @param name + */ + public void setName(String name){ + this.setMember(VTParameter.name, name); + } + + /** + * Set the parameter default value + * + * @param value + */ + public void setDefaultValue(String value){ + this.setMember(VTParameter.defaultValue, value); + } + + /** + * Set the parameter regexp validator + * + * @param validator + */ + public void setRegexpValidator(String validator){ + this.setMember(VTParameter.regexpValidator, validator); + } + + /** + * Deletes a VirtualTableParameter member + * + * @param type + * @return + */ + protected boolean delMember(VTParameter type) { + return ElementUtils.remove(this.getRoot(), this.getRoot().getChild(type.toString())); + } + + /** + * Deletes the name + * + * @return true if removed, false otherwise + */ + public boolean delName(){ + return this.delMember(VTParameter.name); + } + + /** + * Deletes the default value + * + * @return true if removed, false otherwise + */ + public boolean delDefaultValue(){ + return this.delMember(VTParameter.defaultValue); + } + + /** + * Deletes the Regexp validator + * + * @return true if removed, false otherwise + */ + public boolean delRegexpValidator(){ + return this.delMember(VTParameter.regexpValidator); + } + + + /** + * Get a VirtualTableParameter member + * + * @param type + * @return + */ + protected String getMember(VTParameter type) { + Element el = getRoot().getChild(type.toString()); + if (el != null) + return el.getTextTrim(); + else + return null; + } + + /** + * Get the parameter name + * + * @return + */ + public String getName(){ + return this.getMember(VTParameter.name); + } + + /** + * Get the parameter default value + * + * @return + */ + public String getDefaultValue(){ + return this.getMember(VTParameter.defaultValue); + } + + /** + * Get the parameter regexp validator + * + * @return + */ + public String getRegexpValidator(){ + return this.getMember(VTParameter.regexpValidator); + } +} \ No newline at end of file diff --git a/src/test/java/it/geosolutions/geoserver/rest/encoder/feature/GSFeatureEncoderTest.java b/src/test/java/it/geosolutions/geoserver/rest/encoder/feature/GSFeatureEncoderTest.java index fb2172a..019183c 100644 --- a/src/test/java/it/geosolutions/geoserver/rest/encoder/feature/GSFeatureEncoderTest.java +++ b/src/test/java/it/geosolutions/geoserver/rest/encoder/feature/GSFeatureEncoderTest.java @@ -28,6 +28,9 @@ import it.geosolutions.geoserver.rest.encoder.metadata.GSDimensionInfoEncoder; import it.geosolutions.geoserver.rest.encoder.metadata.GSDimensionInfoEncoder.Presentation; import it.geosolutions.geoserver.rest.encoder.metadata.GSDimensionInfoEncoder.PresentationDiscrete; import it.geosolutions.geoserver.rest.encoder.metadata.GSFeatureDimensionInfoEncoder; +import it.geosolutions.geoserver.rest.encoder.metadata.virtualtable.GSVirtualTableEncoder; +import it.geosolutions.geoserver.rest.encoder.metadata.virtualtable.VTGeometryEncoder; +import it.geosolutions.geoserver.rest.encoder.metadata.virtualtable.VTParameterEncoder; import it.geosolutions.geoserver.rest.encoder.metadatalink.GSMetadataLinkInfoEncoder; import it.geosolutions.geoserver.rest.encoder.utils.ElementUtils; import it.geosolutions.geoserver.rest.publisher.GeoserverRESTPublisherTest; @@ -229,4 +232,89 @@ public class GSFeatureEncoderTest extends GeoserverRESTPublisherTest { LOGGER.info("REMOVED"); } + + /** + * Test method for virtual table encoding / SQL view layer integration + * + * Settings information for integration tests + * - test is based on the data used in http://docs.geoserver.org/latest/en/user/data/database/sqlview.html#parameterizing-sql-views + * (states shapefile - available in testdata/states.zip) + * - create a postgis db + * - import the states shapefile (using shp2pgsql or Postgis shapefile uploader) + * - In Geoserver, create a postgis datastore for this DB, with the name "statesdb" + * + */ + @Test + public void testSQLViewIntegration() { + + if (!enabled()) + return; + deleteAll(); + GeoServerRESTPublisher publisher = new GeoServerRESTPublisher(RESTURL, + RESTUSER, RESTPW); + + String storeName = "statesdb"; // name of the datastore setup for tests + String layerName = "my_sqlviewlayer"; + String nativeName = "popstates"; + + GSFeatureTypeEncoder fte = new GSFeatureTypeEncoder(); + fte.setName(layerName); + fte.setNativeName(nativeName); + fte.setTitle("title"); + + fte.addKeyword("keyword1"); + fte.addKeyword("keyword2"); + fte.setNativeCRS("EPSG:4326"); + fte.setDescription("desc"); + fte.setEnabled(true); + + // virtual table + // ------------- + // Set-up the vtGeom + final VTGeometryEncoder vtGeom = new VTGeometryEncoder("the_geom", + "Point", "4326"); + + // Set-up 2 virtual table parameters + final VTParameterEncoder vtParam1 = new VTParameterEncoder("high", + "100000000", "^[\\d]+$"); + final VTParameterEncoder vtParam2 = new VTParameterEncoder("low", "0", + "^[\\d]+$"); + + // sql + String sql = "select gid, state_name, the_geom from pgstates where persons between %low% and %high% and state_abbr = '%state%'"; + + // set-up the virtual table + final GSVirtualTableEncoder vte = new GSVirtualTableEncoder(); + vte.setName(nativeName); + vte.setSql(sql); + vte.addVirtualTableGeometry(vtGeom); + vte.addVirtualTableParameter(vtParam1); + vte.addVirtualTableParameter(vtParam2); + fte.setMetadataVirtualTable(vte); // Set the virtual table + + // modif the vte + vte.delVirtualTableGeometry("the_geom"); + vte.addVirtualTableGeometry("the_geom", "MultiPolygon", "4326"); + + final VTParameterEncoder vtParam3 = new VTParameterEncoder("state", + "FL", "^[\\w\\d\\s]+$"); + vte.addVirtualTableParameter(vtParam3); + vte.addKeyColumn("gid"); + + // Layer encoder + // ------------- + GSLayerEncoder layerEncoder = new GSLayerEncoder(); + layerEncoder.setEnabled(true); + layerEncoder.setQueryable(true); + layerEncoder.setDefaultStyle("polygon"); + + // test insert + // ------------ + publisher.createWorkspace(DEFAULT_WS); + boolean published = publisher.publishDBLayer(DEFAULT_WS, storeName, + fte, layerEncoder); + assertTrue("Successfull publication", published); + assertTrue(existsLayer(layerName)); + + } } diff --git a/src/test/java/it/geosolutions/geoserver/rest/encoder/feature/GSVirtualTableEncoderTest.java b/src/test/java/it/geosolutions/geoserver/rest/encoder/feature/GSVirtualTableEncoderTest.java new file mode 100644 index 0000000..f808f1d --- /dev/null +++ b/src/test/java/it/geosolutions/geoserver/rest/encoder/feature/GSVirtualTableEncoderTest.java @@ -0,0 +1,98 @@ +package it.geosolutions.geoserver.rest.encoder.feature; + +import it.geosolutions.geoserver.rest.encoder.metadata.virtualtable.GSVirtualTableEncoder; +import it.geosolutions.geoserver.rest.encoder.metadata.virtualtable.VTGeometryEncoder; +import it.geosolutions.geoserver.rest.encoder.metadata.virtualtable.VTParameterEncoder; +import it.geosolutions.geoserver.rest.encoder.metadata.virtualtable.VTGeometry; +import it.geosolutions.geoserver.rest.encoder.metadata.virtualtable.VTParameter; +import it.geosolutions.geoserver.rest.encoder.utils.XmlElement; + +import java.util.Arrays; + +import junit.framework.Assert; + +import org.jdom.Element; +import org.junit.Test; + +/** + * + * @author eblondel + * + */ +public class GSVirtualTableEncoderTest { + + @Test + public void virtualTableTest() { + + // Set-up the vtGeom + final VTGeometryEncoder vtGeom = new VTGeometryEncoder("the_geom", + "MultiPolygon", "4326"); + + // Set-up 2 virtual table parameters + final VTParameterEncoder vtParam1 = new VTParameterEncoder( + "fieldname1", "default_value1", "^[\\w\\d\\s]+$"); + final VTParameterEncoder vtParam2 = new VTParameterEncoder( + "fieldname2", "default_value2", "^[\\w\\d\\s]+$"); + + // sql + String sql = "select the_geom, id, field1, field2 from mytable where field1 = '%fieldname1%' and field2 = '%fieldname2%'"; + + // Set-up the virtual table + final GSVirtualTableEncoder vte = new GSVirtualTableEncoder(); + vte.setName("mysqlview"); + vte.setSql(sql); + vte.addKeyColumn("id"); + vte.addVirtualTableGeometry(vtGeom); + vte.addVirtualTableParameter(vtParam1); + vte.addVirtualTableParameter(vtParam2); + + // TESTS + + Assert.assertEquals("mysqlview", vte.getName()); + Assert.assertEquals(sql, vte.getSql()); + Assert.assertEquals("id", vte.getRoot().getChildText("keyColumn")); + + final Element ge = (Element) vte.getRoot().getChild("geometry"); + Assert.assertEquals("the_geom", + ge.getChildText(VTGeometry.name.toString())); + Assert.assertEquals("MultiPolygon", + ge.getChildText(VTGeometry.type.toString())); + Assert.assertEquals("4326", ge.getChildText(VTGeometry.srid.toString())); + + final Element p1 = (Element) vte.getRoot().getChildren("parameter") + .get(0); + final Element p2 = (Element) vte.getRoot().getChildren("parameter") + .get(1); + Assert.assertEquals("fieldname1", + p1.getChildText(VTParameter.name.toString())); + Assert.assertEquals("default_value1", + p1.getChildText(VTParameter.defaultValue.toString())); + Assert.assertEquals("^[\\w\\d\\s]+$", + p1.getChildText(VTParameter.regexpValidator.toString())); + Assert.assertEquals("fieldname2", + p2.getChildText(VTParameter.name.toString())); + Assert.assertEquals("default_value2", + p2.getChildText(VTParameter.defaultValue.toString())); + Assert.assertEquals("^[\\w\\d\\s]+$", + p2.getChildText(VTParameter.regexpValidator.toString())); + + vte.delKeyColumn("id"); + Assert.assertNull(vte.getRoot().getChildText("keyColumn")); + Assert.assertEquals("mysqlview", vte.getName()); + Assert.assertEquals(sql, vte.getSql()); + + vtGeom.setType("Point"); + vtParam1.setName("newfieldname"); + + Assert.assertEquals("Point", + ((Element) vte.getRoot().getChildren("geometry").get(0)) + .getChildText(VTGeometry.type.toString())); + Assert.assertEquals("newfieldname", ((Element) vte.getRoot() + .getChildren("parameter").get(0)).getChildText(VTParameter.name + .toString())); + + Assert.assertTrue(vtGeom.delSrid()); + Assert.assertTrue(vtParam1.delRegexpValidator()); + } + +} diff --git a/src/test/resources/testdata/states.zip b/src/test/resources/testdata/states.zip new file mode 100644 index 0000000000000000000000000000000000000000..4865e2706665628985acb44b3e2e5864969236fc GIT binary patch literal 112925 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

q7s6i9FZx#b{^dvp^z|+V zU7o`(k#tT1?ydWMKQ38(%D;hYZE}ir128179+5{=sb zHptj7M^3c>!r*UulY6~-KEID8n=jx-+iH-G^Gkc;Hm!r?*XetBKJfDS1|~m8X5Cx* zF7t;N{u(@0$Nxv{9iZrZ`L4c4lgYLmGJZUehtIe1hm0E^;p7y(o+(5`^_cEveK&yd zrSi0m%f0KWR5tKfl-K-^4?LSPQ;6~ZYDQ>ks|k&rD*93d5?U;0I5=gZ{Mdf1X?^eZ z-@q+olCaI7bIVgC#3eN8c1v&}>kjrREYcrx4Lp0k7i+XX%n9Sm;ct7G8id>eb>{@{ z&eH;3ND;qCvp@mx_JzYs)T7Pd7U>%YC`VJ~^|>_>m3NXI#}LHPM=Fw13vUwwDfH-f zZG*$o01VpxO0XlSA_~8)0kmU$U?64ytjwFXtfOK&2?zU^nQf;nhqhe*C3-t(I(hNPQq`>`EBQ;Q z=2udDJp0+~lFqfZkhS2xWFK>dB4|!?a)Ex*SJKjlId2)b9aY=vd-{ zB_}~B-qL-{OuhoNh+|57H5>IA1`nzczO!l$bnn^a0SR#)X`Izh>o4t$B!G|DCU#jj)SAlRbZU&E~{VKDwp*xP+gUEXHzFxJ#4?ew)o+b04%1bBQi$19T#{l8>)xAYuc>DSm<$VM; zs)pUy<%*b|sisBT46MB9q=O&swRFCx`a;G@8}PASAljZ+p#I@wp#0fLU%8bjw!MtS z`&KEOFrVQd7sUTw`}}v7fcM_Wk@+$wk3283V+{x&Zx2jWWITGfhCgzXb~z)DWUtPS ze~>C?KSbr8YX>d*TL@uI15=6eF*Bw%T#gAt`s2PBIzS${*CfgrJ#C*|OBN{i%g#@p z7C@VA4nh}N-QN(-(3BRS8llz2_Ujc?mH&;HNRIExZuu{$OhGFsgp+%2wt&Y_)mi4R zJ*@pNRzh=$+eVrylZMVY#2A5mX`CZ^LTe?=v%$#o)&RTjvH5+aq13&9tNLdzliSY& z=miirOPDC)k?g-ER-XCAI7ukN`Op4ECq4=O7KHpUny8^;rTqKictD`}(%Ii!|ESk=dg5Y&f3%w0NaQCyCj+sfk? zYU4U`knQdx-_dybbQaTh`MZon(&?~+@(_d{d^5=XXS1$|?j~JsW~)`e!bh@%$wCd| zSpxFY42*wo!q0J2=91@t*v&4o+W)ZiH_jM|5#C*X@-a0%{1;onXZdM`Zh~2$;x;jH zz9X;Bl7*S_Vc_?fFk*AmyjqLF(X`eG9!<+h5`>BpbXV)%u8 z*{2jd9<-%K&<1{G?d3~Oo}SF38S5pNV>Rkl&|_cuFMyb8!^Q_-;02C&2e&!vIAHJl zXXIK?1<8GEd~8!7ma~K0oiMj%dgW;LMX&fJN)_GejZi=z-cuIzTq?-q+S%18;m?6> zB&+YZpQHPq&|Itf7174R`;UQ0eA~uN3*7$B%OtD>t04y_bSj_+->CWTQE-1ggIw`X z1G5*=uOXMg5@*wkwsqv-UNnus_bWPD3ad@Z51-RioTc`AJN-`vDE#@-4!Zw%YwgV2qlD@g1|pD(*u`kx^jlFkHCZCAq3~S%r-mGpP4S0M zs!3in?H?vk2$(*Bu_ez7YW|sEEBl_Dp{xDy8=e(*r(+%x7PNifoqn_VI_+YY>%`iG zo;_tMs;h0Fv0Z4qse_NQIg-V^`qn&{EBR@r%z}SVx|`UN;!DfdZHP0B*#H0o1;rtJ z?_ovyVfs)|Jc4)+tJ4oNf`Sqez9LxrewZZ`l#C#XV8i-hwop(i!dDcV*AH`ng3=L0 zQEX2?%o7UAK=_Jb*ZW}sP*4_vD2BZ{01Iv5ConDj&*POjcB9!~1ms1NTO$PDV^wQ< z{6~1#=YIjBPBf3%){pz%N4dK4a#VT$g*77n682V;5(^{3U1tp+lzOLM94=RQxBh1} z^?M&})p=7it>fqu^?g`tb!((j+Yj#CmhsydX)Q%{^^{G$UWtqU^l$i{Jm#Y^ntM3sr+V@S%ii7qYVZ60$v$xp3qtZ-tf&(MmbZg4 zm;Ew}r?8i^R&k_q4s?%lefY$QWeNCvD7FKSf=nj4v}8Iv4cD zvNT1vBuJ+^Vtu}L?Ep_|lo$radlV~9+#p@w6UcI!Wh*Ne2_7=_+KQ#tIJ{-|u31|h zzRE2;0zPv!xM(Z0=%gsA0m?nsk5>nrby_6kMk1ff)Q|k&6Fbx8V2~g2WD4Mi(71@~ zAxs(;&mB_o!q_sMbBJaL?XvK3$6xWD&mT5yDs;)c%ZzOp)ix0EG7qMfhu28V%aH&2 zuv*PlgL@dhqlZd2RyvE!F|! z`8)Z72=Z=rs!HK^n{|2Wyc`>w8LTv7SzBD* z6kXeeD)V-w)+hPFkz#=|yjXEJ#m>yLk$Wl!P4Byb7mOGQmFBZ`L7v+jvKo+G2yLw! zK&Et(Ka`nTDo|$p1}KN(JS-UV;pfH8lPD7uk2T~zBcO3~YlQA$XQoyE^W@Ai#2h1~ z<2DWdWjgbmJFGjwuI8dtU+j(Cm_DsZYg{HD263GV7cQu&01FLilYMW8-sB_!ME+LfQRqIgeLD~njSkr7e85Om(aXIS`j-4UCc)e4QByY6tmh26F$s!n=C_5JSHQnm) z`QxUw$*-q|Z`N;!|2(R>lnimgwO4$JxfygJzw*>t!9HO=erL0vkei>=Zp73yznreudhSJq z29#TJ3GB<ukP$u^jZTJYwko)Gkm;0be^h9qXpavijk)T zjP`VTiRkvIb7?GUwmYh{M;1e_MeGW+uPoqM%PKU%BtkA^)&V2y*2uY^E7wS zvy2{+gSsfll{Y-AyGqmzt22bn0{>-0{M^P1tXRj`zwrhV8@Ft z8C}*$eJq<<@0n%EKXhkEGsZfcOPj3I6v$N3K(ruHR~4X9(=VY^FR56@O<2Z@Z?A- z{FBO$`q*{zK|jLNMEey=Rg4X#>UdS0-E*j*pdiKb<$X+9Q5$W;g@r?;GI!>;w_aIU zd2b`CiSDJV-WB}QJyAVGLDkFAR6x=C)+Rs5zg2EGE#&0oahiPH#aIiWI@3%>2UI0! zdzd5Lxm4a@x-EZVbl2RYr6j+!>&-dy-jP}@mqgP;p33DgLwL%KX}Jg4{1eZR$`^scEt znWEb^9&Md++*%s4n%A8>f$x)do-_112(c6Xd#<&0>zA{94ejz`qnX53!|IQxAE>AtU)D0^FyUi&rh zZRM}f3{F>K)$5x6pDM2|d$b{9le~%@Um-wN7gP0Btq~dJf6cb|i4SF)3#K;Rv8p}r z?)UE?!h6|{!;7Yyn@fT6(qpVsS;0rKwPBAuZv4pxt2$IUIE0$StI@g(An3FyqOAv2*j@SO zx2CgR(WTdEL{xeRsAI&x+-SNpU0z=fW1Wt)&Xo_m^K0t(4^YJxc9_}at(jk*;kaN7 zS;=F$ri7M~4PCk)k5JA%ZW@C7^zboi>P$S!)x_OWI|R;mJl2NmPdibVeeXEFE8Pwd za8dquRmAJnDw_4?^OZdM8TOZfzeCL34J7$AxF`}US`{KMZSODY?w`hs*$@sDyN5I$ zpIlLT3whOWuV!vP*|P1b59VklhLgv^6c#6S?f+499{y~-Z5-~_R#8=(XzORBimJVm zYKz)6TGSRTHEQpWma3{%wYOI7y?26;)K)V#31UaAAc?%*Kj4hddCob{dG2$4ubWk! zBZg?W_?CEM7iq_PcUqmTVw>tDGDvE*+`5bj6hW9$ZPPzTJl=A_$Tnv+Puj+QekW4( zr19p~Mo24L@Vr=+Sfdly+*LO8iGcG4C}o!JkwO%y*kb?;h>YJnmQQ2 z1#%uV?~GTRfIiDBDD%QBY5FPpW1XYg|1X8oTZ zOL%uGH9U7;aov56-S6yc0aG0to@JW3GW=tOc}MruU)yPXtVOmXUjHPx<=9TTSZRkP z3jG`ecE!t7i{`@03%~g+p=cM+RrLmU{ql%*N%6^@BrUz9zQw$xVZJ7WNU0p z@&vE5gHeW4W7ff@a`aYqlX7tmy6frIrd`(c?Fcc3P7jmlhl7!uT4mR2BlotS#SYUh zWiOX4=zY)Biy$o_%{W;HS$$lV#7{Um->i?Q1CV-P{lkvb3;bq6a@#iQ%2tz2T9t8g zO>+FLpe@c2EqHuf4=H4mh`yXH-^?*iipJ{%OjjM0fz%S|R9f6?!rRSIjF>K#Syc^~+#ETR0YxM#R?StUj({r-NAyGGFZw7u{InAtbigqTS4dQkd{Y=q_`M+EY zTp7c+CSygDQr`KM>bp;1Df+5bv!a*Guo>~Yt=>wCI&;=WJWZA2))ol3qRa3VishHcYnkoGccCnDw7&(pggS)?GQkRsSz|*P z5B)Or$&{^5+lfHIN_z=-_t}Nu^irI1iD%6FN%w#DyYSp2^@cCmLbzYYZDWExAwlgG z%6TP=l!Et}Z&?}5Jf3x0CJ?6=9?5%WoVqKLSp1jFwGY|R6!AUZlSTW9;%#2GUcvuz8sf3eDC*DuHf3`3+O{JYSYQGFlDDGxk?{NZ7rIFY{_Hxn%odS z(U*fy`~FU$^LbTi$`-e)uHZ$4P!i5XiAHbGWyqw)vAw7{kk6LNgRRpyfqqrrwYz0) zv=~8{@5**h5*URK8IX)xp*D)NM=uAld9tY=G;R z1uFC3LcRTv=Ax&*d++G!z7!JlY#00sadoRO0%Z~}P{yzD3nrBL(E2-yXh44xAM0XG z2^?t0gt^b(fVc-0y|WqfzhNC%Q4Elo=rURRF)LDI)2b#q2QE(!1Jdr+m%3KlT0Lr{ zxxoz3)$$OgFn~b0(4^=VKMXLKdUglT@}XqZCFT2QN4ePF=qje@!w+T(cc_U{XDSiz zF$J3CCbJ8i_u-ew4xg1f+wM;7?er#OzV>Z_wxpFk&Jea9=sps|4N*ea*M=sZ`HUTCGg9E>ix>d zD^*NN859x_F3H-^K|PINX9|S>UBCvEuk0kWFrzT_bzy+h_WA(@@-g9h{zmQ4 zS_U4;5pRxY0=bw4dEykz)b8qnEAct?_vyE1b-GC z-aXp6A$mzK*1mXAm2w> zsX`~!Y>(@LJH(EmxHO@EQ4AmV-;bNL4xK{6_iZG!mp(l{)6@Yay>Sp7TUo>KaM9tU$QBbvB16_4i7t zvJDwxAo2I|H30r0)G3yG^&Lr#k29?HcDEqkYd9vwvn!6P3|mq*kD{0o@et<^i7q!-2RGf-V~8?~0sVZnFwV;3p(XwR z^UK@eS7X@lL-%%9lPkeQUUnEIXVB@2Sptid8qAs5|K%)V+2Y%%`_ggH!d0tez3#)C z1GCAM>c@m<$lb=l_|G_1lRcLQhVEd@DsF-H9uz?|_^7&Uo?$gnb|a%1LuhB4Lo6y8 zwtBF8#cb9@>9D66Ho{b#NLT9n^|0rkN}*cXD*}TXJQU;9k>8z%8{aRC=maT;SiJ6{ z#(T{_z?8@Fhu+zFl32ltXZLFj)IM=qBe4661@JU?V>|+n{yuG`(Ld1j43+4q2qiw+ z4`|?wPt&Z7FUJEWx$yCFa#01P`+Q*FkN&&rk5F2lc1s8wN)~>w4r#uY$&SNXYBp{5 zlSP$9zV!aj!^79dl82{x*@30|0Xac#MuTIDdMTFZ5d4fA+|wRYL1%|ki<+c_n}O!j ziiZl&hr}}zd`|~O)H{(+;*BecdDQZpOuq`7fMnWV-Tc+{dWrM|6neBx&`W8}lIZ>% zxiD1dP3q}l*B;--oftUwM^NwkrJ@!YZLG*F%Ajpt!!zZWWb!;As^?g2N8Go6xEejO zxS;LYeGUL9!pwtPRh!Q*xlhsdqMd*l!@&=v13gkPKg7XUGaP9q zc{%Xa!-@!o<71mV$@1)~m7_sE`joq93UlUY>o*Oe(iS>Ea6@;0GmRA^t_6_d5vMLG zpF&^1oUEU6!auPzH=6v`aoA9iLCev1k1v+&I=R{}YzAcEw#2IW@nOg_Svxgdn2geX&84jx6;|Xudm8V?{SGrrfp2**09&=GwG!X^}eH*jU{K8?ET{ zw}KNolyFfK*B6Vw>mxMEZeoV&jbCPd!o8dI6Pbvt5=YTGPwX=3r_;X&%=R`5cD_HZ zAcEfnz8UxDv*ELnteF+1SYml5H*tupL0~H*Io=kCBg=G>@1#MTwp&XU)twv-ycHcL zdnfq7qYeg2T$^4DH^k#dZgvwDt6}C7c7u?+4WqB}Axv}{$%JXW80=LrkU-(a^Iz}!xxDk1y^X;lLrsSuh)`>>w2v#YO}P( zr=CxqB2WGs;*3dd+~)`aFPKjHwG*ZLf-L;Sy1IhPk8T~E&%)_aFY(gd#E^1H5$C4t zs0k8NhafBB>zwA@cApXH_+98vQb9{ZL@n8=)}Hl7uBD(LE?>l(R+1etaQrpZH4j8% zkOIOK-V%mXPKkZnnvq_gG|K2IuO^by=LJ_{JCgi)F+b6^MHa*#hZ4Z~&@i7ck(~;s zf1;Hl87fxsSe?|0itxs4h>m??`OQGx!{I18H)zkctX5EZ!H|6;xTr~fvb>g^E`2Q6 zS%$LRMirXneQ(Q$W6_3K6WI1CFIhGpytrnaE_8w(;LY>=Iy6a5uA+@!`JJX>WcbaI zQD5glvFQux=)zUz@fW|-G^AWL_ls#gEk9cy4a|(RiVcuQS|1N^kG4J;P#kTQ8ZaAe zJ-2<2w#p5pkG3idw2VT3#>X386e{51RJGj5&e%x@rv=iUUUm|ygzB6Xj3zUqudMq6 zVH7PVH-~7(vZY_rASrb$xRG zr{{Sf6|Uz=slE1T;`%VxrMHl$PPZMRFO}KkNHf-63z>L1%ysiEMCFiB2m*``<(>u@ z!D2V|^{Jp@g8Cut&v{E|7^}!J?cd6u=1il>eQZtC+`#>+w z`goV&_)dq0Z_}wY4hV^f9;W)`Mg@CZ(P(}JXH=c%@AjJ+4Mk@h#hXtpYl&=ACF(|; ze>STus@<7Gn&nG;=%JByGD7~rY(s&@c6T}QEJ?Ip7+MmJ@Bv}` zkSPDJTq@}1PT#w;O_c)1frT3D=-F!G|7Q*M8zbIMHd-I~j{^+w)cj~X`)q?x5Oj&6 z5lIgCZ%X^-^H1bt0wOxXWoq=km&~cwtELLqurpRCu`PbM~X`r-26lWqywdDIGECt*;6 z;sm&uYTQ?Y*Noa)4L4y<0(rCiH@{D6OWVJbgy zr&_Txj)Tt$52(2?TZ62yf@PRY%lAWvi=|zJKT&jiX05^zHHRou zj9ZeEV0pzi>lr6VcSMNULp3~xC*){EUKy?~$@Wo^d7iDl|L{>LY;RMiYf~k~)%aHw^V3zk6HpWu0T3N>UX?XF>m{N!!v%X6tCzG0#eBEv2PVaY|V z?K*wK4@s`tEqJ$md#er|-@5uO4Xug_4>Q9UiE2rsxWsC`9**!VR4iT!fr&v{=Np6D zFm#fOh-6qv;+boQ*Vp-3&vA4$l)5+O1u z{C)J&b_1ZnGwm~(*(m3RUi3rb=rak|%|q+kN3k9R!aKvNBPX?q4N?uFB5msU<^4|2 z-oHw3=3+Fu_WkV!b|q;xxt$aow9H(+X&Y{BH{-hHZuSWum%)h1)}(Q7(+RPP%*zb^ z1>D$io`oe~hRlcMdE7x0a`{C;nQ^S?EVMxvcvX37ev~-GC?KU0cN6CSsiGh47JG%opkN>-W8bJG(2)T0Of!dm*E#AW`EM_uhJ`cq3xDyi%JNG<(!s{s;n|1Lg;9qn zv+Jnr$A#uH6S)F?bSVfSt^``xp~#_8wEa*l_gyx|&ADU)<)m#Tr&m>yr4lWSE5v+-x0_W?NG3z?l(64b+#huC2~Wd!*7YWDX&Tx*+A&^JvKn_1va#wJR$6cO zzbs;0nY*q)NfdboKCV@9A8to9VH*?`HZoLJ6!;&*TR?q{93*k+dy7not|yNcJ0#i= zHl%~JY&qAqGm2br!A$q3Q!R#vKEPn{MuF9Jo-{d_IpWX~kjwD!D0V?>a7pEwpwlZG zGPJDz!O(@!;;SrY#z)+l;4fS$V|f`ln+(@DjdpIG&4G!3tR{E5wXfo53Tdqe1%QbsO8te1i9~q-lgFlpt*l2$HnDW# z5{0uoM?%cDNM^_@9tI4-2r&&0gpXhAzQ~ZSllFS#T1)mz12B?$sxF%S`OHPM_VYZ> zUrZe|(0qenwpEi!@$YTsX3cUQmpBkRD`s;@SJ~#)y24D7MlOCxACm_GvXgQFrxJBY3dx|w$KF$)Lb2Ws)Wgj^hD9BdUJTso0 zvszcl9&w7d(TXXJymmDEX0qp6ATHIB z-qnxd>%L$Rb+7xjLDc>3dj?StqO-GjpVWJO><|BW8Q-L`awI_ue@&sbPBMjJx7sP< zWKyWgdMwf^0fD9%H=Uxt&81Wb6uin%IT@-HH-D@A+p${Z1EAe1^B?Jipc8wG)|7R= zwonl&c;u`4=s4Tt)0^!;l(H#jy13ujM4h4B>br+*l;>!VU=-isb`e33bj^$Kl*Hym zP$3C=5uTA`ya>-pYF>mFq&Hp!RnmJef*Q%ki=a;W>P2`-O7bFTkn+6gXwiMaoA7!Yy^A0^yhPc?J=YI(i0?l=68F zQItA*4tXx+^8%tJb@T#aDCMIHF_St{g+Qcy)F4h$M`{pHDIax6pwy8%Bvi`hB_vYn z=p`gx%0~l|E_I{<$(8cagp^1fX+mnGe6%1fQb$@4q?C^~q)+Nd8!{^8qXU_dI?{pQ zq`VO_ zsM^oR^kQk+Ha;!Zn#LNafO#`H7x(gTd2V4 zaTgSg^zj8QEKCSs$8InBXSrYZSz&t4&bhaKNehjRswY>IL>WeuM%w)kFXCB-An;B;Hu}XuNZm@ zIwX5{P&sC(>(I5Rh3#X={g+Y+68Gs^*7OvEahd!`{R}JT#D;=8oX@Y^f1yD5c6OyF zuU;^F*Ih7hYmdlHAXG|ri>JomMIe0a<7vQI2eDFdhQ(czLxo9-%tw|N^if6T?`@6^ zJ^RYONl6@1*=yWQE5>4~C~cZiW)?g+(nLjd2_+SaQ*S9XMiNwCE*b&*!N~elRi<1mc~ur%nr@`E zlR#SF?~t&&w4t$qsa~81QVL(~~Mx z$=>^vTV@lmYw4JoowO>y+VVbmp5TquZl*v{-(6vGcH;`=X2#Q-77d4KmIzMVqCxgq zoCXnF?z2nJ8=g3u(HCi<(B}FYFU=@MoqT5Lm}yB^e8Rr8-hJlJmfk+V)oL{gl|8=bnbjSikaPaVZGtwRmw_&r_8)6&L4$LH<{p;yPXT@AcQ^K> zCDQ_cfXN;o5Xf7##zYNR6W zvusFCG<`oa4!@tByeEmrG?nrqJB9ow@Ka6KnPz*pyEW;}$1W*?ziltZ@mSsj*LMxR z%cNMvk9=+?_OZcTjxN+^6riVBhkTkNKDgejRG@D2lzcMea+ViAtP$ZoSP%^JU30;Q zvM7FeN3%I4&BXhSiVF%Jx>_@dzZMSa5{mB}T0D-MLxXQpu7k;Ile$DXs~016(&_Lu z>9?1+TDyNOl;$-#;! zlE2$&oyLG?WdVhfKpfC&0|4;J3Q0pc-;FsC$r3nrK|$-E^mH>P>Az#18rN#UyYI_c zF+GaV)7E775T3WkPJx^F)}^iZx0Il|4Uh;XorieY=|R0ijPl2K-!+J@&QoYy*V*f8A##tNJ_Lc|u7IiU-6kGeK4y&pW(&0Svac-5kN&Z-5fLf?s%BYT~F< zn|vp10l7Vkhi0`G$m;YG0OgYlkh3Z8R<-q2xwEOrSV)r9KT-$(w)vi`m2{Q!vv2H# zNon#~`W68_nZG`g4qOFg}`yA=<2T(gF0$~Ly(_z>Gk>{(02v7FCs z=OXSe3xPK>+h4?wxNzFzKj#kS7i7r*E$WFrJ4Zg|U2sE8!S}-(^~)OIqDd{JuK8kH z08xU4oBu!&z3#X0Tu?^+cFVT~`k=HR!8bDst!pF)rq4xiqNRkp}yOuVcr$Y zvM>60!i~|V zb*2nLd*FgQ@fgJPv1Cc#DOqFXksHN^$lG})w(-YiUsgo97#IAcfhXw~8=REjYerx~ zQ#Ii~BNWbV)-R``sXdLImO)mrN0Rh=DIa&FfOE>T*<+A}k0ajdhvX?ogJ6I&vt{MS zG2-J!FyakU#)iuh$z0IeuZuLy4B&x~^y=ZsNO1(%#x6Tbfc9#ZPH-zsJ7igbA(~|E3Zv!8pQ@B=GE3 zhO6(unbQ;NY%$UeLvN)ubCwxjiWcR+*@e?E%a4)}*O5z2y&n&Isr%RRcBpkt&0 zU?G2l;B>8A{6aB{j;1>M{%btzYrcu}gN1;gw?lfHR3P9J_Ns8!CoF?7;4_w0IO{W( zR~Qh26%ft}!HNn4Lb1}qS)o{EVZaxxs&Lj9td1}s4EtI*D-3HP4ETzDC!F;a>mm#Y z$9fBAg=2$+0pGA;!dc(2(ZYZTY@%>h1U6F`@Ew~cob?@BCJczg)(K}tV%vlPQP^(b ztSIb&Fd!N`E}RvOof8JcU{{2*VzAr7fLQFIa8@jqDh&96y$a0wfn@*!;;^j1tT-$$ z5bzT#0L=P{6$Jv~vC_b-c&suIkbqSMW+h;CfPh5oYhYF))&dAf!oCA$C1G8FfMl#U zFe@1w1O%jD!+=>S*k~Xi6`KgmO2uXZ0cqGgU{)Ho3)lgVYh*RZ0sR0D;rA%@?BV=&w*Y_aQ(E${0e@l*Z%1VqcGp4 z6|EfT%>>uadlIkU*Lv|!PXNMvS5_i(pm!2nL-zDv!Eg53tDJ}l^Ico%%YkwwxQ6bz zzk)ON;#E#S!hF|P=zl>UB)ERri~D(DN=b}FR9>Qe2(Go6EB+Wx{h~2YXL2bGlgobJbJ;S8FxYro{d?nL5+X3F+2*Pxr zUHQ`Q1M0`9^xneScb$9UCA)rY$enL6MP!8gm_=42Y_$Gg^h!&>*Q!22xq z1|xvvq2GhHKO}hm4mB=+E&IGvKA)h@WB#{YZdiQ0HZI(JoR@ha81jz-bBQ=WK2d%bJ>jyp`-K3=My zEm#cTRixhhSbt@^%{YmCrN!saUEOJs1Q3!ZQlw`O_F9#dJp}!)=%10iC**qI%i!v;65rBgG8INW*RSVjbPO zzM^{haZthZnvr6rV~OFmckzI3-Aqxv;&^bu^sbR&mSdmcwtumXUfpIx*AV-2kGKHMi+hRi<~&rsSpY!t%#qilCMfay@dm7mqp*`8B;_0*_dz`wtEKC2J?yGz!7j zCLST%Acn)i9mgfM=MaD2T-#HJ3tO*f$F(wpYAd10m^+s--Gy?FMDnYSi14F%bu*5y z5Z%~2egx+L3($_S$CFi=C$Sm@NP6V_u{2bt=aQPB(-$`c`(DM`o5mmd-9M~J&PTpQ zMTPn&_kPo^_Pmwgp9v;wIX~KBcM~{EXs2EuxXiP_G1r9n6Bm?ig?77$UjR0m%|&VU zac>)Fl}A~sGX+KnmzOvj)!mm1uGoxxO)lX`)zJR#;LFTaF73r=R4X(dxlw(+J}ROe zpx`%xGp&m%h2N7!QcK&CX|FV0_~V(8x)R)-Azo8B9F ze$<1CKQN{Cd(Z|Pa3a@WPmmesEG&G$wbw~wh4vg*BO zYc_TjsAUD2>kGakj3jby0Jmv=z~*!N&Yg!cP1LATj~z_-f_tmks|Ci_*SMxql60QU z=LD4u|KN4D69cpXw!aR%(DrGJ^KSa-GJd5$_E%>r;42wXg)mg8v{S>mruNc&L|$aZlBX;$z+*Dc-M+F)Yy!1y zMQW_L&J(e7_0!3j9sj04;~hF1C7yLJ*TcK~k*uHCkA-EJol;!vewR)?zDp>HnMpZ5 zQS;Go^JYRG$~e1=x0;|6+jZN{&5jsWwY;m*IF|~V!;VOFvCl1^uFVhKfHKJ^%$*Ua z6Xgx#$q*S1)0mv1Es?EH2peACkJ8nVW|OL0yir62?=!+ra`epxu^l|6%<3J9^L3{3 zV6t<^b@i4m|D2#T^NJ%dBlkEZf*diE$-nRN(dcc?^FyMC=47EtOBb`bR51tjIvt+C zhmwYWCsl2|bIXfk1gY+d%t}<-+G~|UD2=OPIfvd*v814?66=$G>LGk6exf+hED1=OY|P0{(e~= zk-~_VxAKgyv7nL(q+9dMjkLk>0H5Q$$!MhI9lt&IT(H`aY=gka1w_u~;=FPaMY{Sq zEYvowJxS?Scgo0on6k*B;kuJIhvfBgGt8x<1JH%QTXPjZ>KZT8HscMl6HjZ$@OdDK z!_*=@ouH2!@rK!%rw3#B0-mr0x03URCouu})5F|=QM)%zLtYAq7F=2U!;_hSjQ4;VFuv+#)|7t%L<_In%j3yQ zKqh!(7%&?3#%anM0nravtn+xv5|D`=tp!iseP&-OXX>d|V*=-11vC%+6tE3M=d@Ej%} zvpi-E8KJ##dh!QAG-ze9fQOoZ%=VxdGF&KTeky&X5OrbvUJln)BjhJXo>vT4isPP2 z-z`L48n@2jVlYB}c2s)BaJ`sWMf$%&)Rpm^94=NPWQe2rD~4OeaVpYMg{W)ei#c4p zM#xY{=qrZX#mvv7UlgLQkKg;nC18a7;+XM@;cjuxxL3^lLi$S~>h}1( z-(0Fj$Zw83`V9XS#~tu72>h;kA)QjF#xm~qn@i8=@^{A<`V2*F_Pdw5Ns{E?d^YJr zvIK=vlQ`L(bzt}r6PySJJ>@qqZ1X!NQp?mPF`8RLRe z0%q7)rm{O4TvhG|Dw4L)#PhC2AHIefzrIDAc*Gb*B+UP={hTOzCur+FO3S%{jOuJ6 z2KmnMI3kaagje6%sHWjM~W=r>>Jt=+?y<=7Ucyf;33ZixygKH(&k z)MM}ke%0oeKjuYkzc;Siame;NnW%#J@hKKm4BEDzGneNoQBo*Kk+pwCkrOj%I^tuT(s`9Uisz~lGOpF&!HUke?3(kbet z%PXBAz4huAyw{|E;+0Je20!Oh9hmO2kU8~y;OIhwo(>b*w4P@LkdsQTJ4CiVgM+d>thTTKEL8n{D82e5$-Z z#qIUqvsuooE9L8e$~MnKPscTE&&`PG!uk}e7oz4sy*Ce5w-)sM0NJA!PmBj}J$5^s zxXtX=ICG|d@KNenA-a(-g0p^#l}SrS@AZD<*&cJLZ;@EhF6x5HeUe?Fkt zMQCDobJRlLAs2 zm4f&^a+(jwTJKqgf4n&#j-!0fGgL}^Pck}i?T8$_sHOB8?j$&o`xQ1YmmgTn6|rS zK?`LlfuQ?_y*v;5PH>#a`=8m`#oR%N}Duq&VFFeGl3*LpTFJ8bt<`?`9U9$%vb%e{$_$$A7csx!&< z-u1m2n~*Ftlkh2wYny&mZ#(72kkEcy`mXZ3@+VIecN+TO*|?7%yQo5zkNZ(1L0q@l z0r8x9t^!o{f%P7FH)IIKyT{I%5MWnjxz|>EG|}KEx8}nLinYt@O2c23z1CjK&FUq5D?0M?PD69z|nM5Ux-Gxkj#;hi4sPiNr-jsGdZ48 z8@?NyPkRXN+$zF)s_#;M7xL`KZI+)WQmYUMgMQM-h^Knpfsxd}lIQ5yE5BiiVw)!K zH&vnH_>EerA>PfR%Jc`IhaM9g2n+Uu>x0qM7qdMq5Dy4NbLR$z zjs*KwQ+8-1ZGsuvnl%)pUfOCCugUj9pDlOx&1wCt1U1TKTCShW4Myg3XYqiSi~PKT zt8?bzT|oXNM#~@^%8I_gzc}seJL4HPf3*2^|zOujY^TDq?C4 z#0IlX2LT2qbkD`uwkex9Vx9E#COk=viK#dVSi-(#@|P1M58fP$1m>+SYL62A7Am_z z$|l8i@Ct&a_=ItxgqnMF>-?mr+X)5GCSS!n`{X~VEyzvxQlZ~}ZylBMl_{2KwNo3; zjKp}*eQ8@b6Bxr8izGxj4)Y9Se`fs~eP{=L@NaNoto&FAFf`iSewM;1v>P;J<=Xt# z3%_);Z6gn#vxv%W)gO+FEL)Id3#;X5ye zsAgn%l(I^T8&)X4>>+k$_bD8UN3+sp)LwE_-iT^HOGR!9GH14F*^`5GJH>+k22kPO-(oj+ZjKuDqF4fr31i|t79Z}h z*AO$-#Um*Ql-?0?4dBciP|{H^R_3lsw-%P_eOS6!gJpL9v;Tyv&wvF~BYzm;`%YjJ)T z$BRENkd*)iz@n^{V)uc3&(8^N_9543&jh)}VGN7|L-`v4rfz4Z0-f9)X9Yv=&NiWj zg85As$&8$Ic4cOLvGu3G zhLrxkhWtV71y@<;-;~LXO4ZI1Tb4I&|6cmg5eSiJ6%wc}P1rIhG@3LP)jgB&q4VMO zN2%i|iz_C-oLR#1TtDLc=h89(zAM-z#0QmZn z{V^>-k(1V?+{GoC74aGCf?$S2?$0F2Jdf^+mn8tYj~ytAHh1ivZd`Ft}odvTt97(X$rB|>Nup$-oBf7$C7{xl})gwcv#r$qRl zdFP+VBxi{EeVPqXJ=(|ECsMQTFk>%Z^ zhfoBPE}<^CKQrHvYWjr)taQjud$?1cC&L=saq^#9umn6gw43ngMN8MC#pBYDE9d=2 z4}%_ckUVqxi_UEmvl3OupuQC^%jKo=7^`T)2i?!#C0l1r5qHwoFHh60X15PXyBVLI zygfkgo%!}U>^Qb{6Zv>JW9Dm`B(o6&O_`_U1c`Apd~Ivc()uKzsT(DbJtOS9!sptx zFQY`-wEfc3ndXWj|22D(D?MvrW8_X@MQ7}c3pLe@O>5n0wf!Gc=l##-`~L5?s;Y|G zo0l%FSz3Fft*VxyttPe@Rceo#iKM71iVmZ-M^Q8OCPqA$b6N0OcURzaoPo1IU-He^1*#Y1t! zQ~p-e?1h^m34GKVL;%{WiB~o&zW1`|Q)JrshP)B?dpO7|h zApfk>gFhyL-CeP0Gh4ExG+A>|-<%(ly&H78#@H)%(fU%Y4oy}r6y~Ow&I5 zj2yS-o`LFFq%!~tGE-YBKT>G0J^15n)$Baf*hg99c#A-rp*ps;d?Mawl7Fwv`VmTLLNRkDD$uk08k;kR`oPu z_1AX8SXEoQ)QO)OSaodrT_Vi6A$`FWSxLu-gdbT3^Tt8!@V)u_2|q5U;AtwitnLk* zF}azoTzCC5TD_#{_0Nr>16trdO+4O>yP@0ECr_(`+FI>L+f&<#`tv?08c&k*4((0} zX<0!Sb$@3QG#`3U^wrt=r13jSfd6hqOV7KJuQMlnH-BY6m`qta!U|Mbar7pRVyYu) z!L*E1jLG`lip}kogms0L5mnF#?AL*UNs>t*(d=|h!h{bjA4YJTt0$Kf7MsYdjwm*# zLf{9llrd^q))KaiqcP+uT&LIk-D-1vW{hEF4xnBxb1WZvj)MF9#1S3{FI|>nGDtsq zjg|)|+!3M$gSc*KZxkI}E5lPiR-Y@t;a?q_MFCP^e*;YT5V-8QLM>n`>kiw`lmH{6 zqgO=mu8(%uZA1L4dBci)y1y+_q8R{Y^e4{6W@KK{T^!ERR}~bhx-#7?tLA41iH(yx z3KV;E*84pG@ZI}(sa-YmnXl{NAr??TOaOx)B{(zQYF>JSZv8LQ>9_dKh@)AY2tfOL z*reN+-44-t@EVUqmy)yct)YVW)04*~I3v}yJ9qFx@mUe7^#FXZPDE#*xb}9|C=*m8zx6*>m z49kfbKf;olNq1WU1L18)r?K)E3Z|Jbr_S$iM-XGHR&jo0Ab0TL8x1e)eJwBOwh!7; z_?4EATDd}n9EfR7vcjk9B-nTG@af%ocK6sbcUQ=$am%S0Blb(xGw7@++FS9X;h}aF z&$iCugf7~}%M~Bdv1(o1a2?-N`iI$uyo3cmZSOx0TA8;AWD64}w-;xWhJTAwtD{1}|;T%^>kBoJwr`@!iuBcYGd3#uRZl(Aa9?;4X=S9o(w zr~w+vEO6ZYP39TSy6Zz4f78W&sY`r!#Ppw~nTo!k`L9oo9{Xm;^tKBs;|G%V%bxJe z3Af!QlUAQLafInZ1+omiD&m2UzE}tK&z-oApDu)zu3e$QjPvN%>VqB)k8KZ)9LvZLSX}64 zV$%e^m-cSmOt4iqYK*}P65dU;$6o+~gE`R=?efP$yi%Pu@XWy8?WNYs}bm{8U$E3Y%m1h5F%J8lgU zeZ+SxIL*4}V+%6)6Z7Po?Z#Zf4r%Pqo>5bL+L&Y4<2{=VN2V9_>7UMJvm9<+q2w!fsyxdL8kS z0ENzv2LvKkDA09;np*l{2;bo}0P-lhXl`wU$uHRwpt6wNpjE$e3T@^SJ8M-=7nF#u zESpNFIoeHjpGn^v(e=|&mN+gUd`##Ky5f(j_*b3z>GzeDks%%S$Exke^G_fA6#FU>0DyFv1{nTf{Ik&y;ttAz-{7Xzp zJph^7y7fbhf-7%(sjN*Fw9F-@q#Xp9+IsaHTO>O=9A;!UD zx4kshfQ2pFi76Qeb*8p~{Z!-N<=b9bYe|JIgv6B0gDF#6NI%3R7=PPKXKk{ug_@X> zb#P>A3-6~Y%&(CoRWeD=L;lJsTLg(&9=%KtXHQUl_j16mwseW32ps>G|p(Z&Ymg<4JK=;}z2eG~pISL$8Ob|iuzrGsRlq*MZ z+z4k4Tsb^377O;OyuaLf( ziS52sRyskAPG%pWH7mrUL*H&f1BddLE4P?>;FtYGt)3fwo1n zdCHd+a!Y>mW)S>b-o{Sffh_IS8%NU}siQ%_dK&t>+-^GLM7G8Y+SnTm5jVNuwe}$5 zF=N&Y(b1&#VgS=3&mB+mzAEESadF^4L0rkpuktxJWHt!P4xHVsHWvsc{3!*5D9CS` z^6WN&G1`z0pKI+WRRAoYAv5!~;?EpN19RlhzYMrCoP+KN)fauDdez;A^(%1(FoM1M z1;wa@;W4FJi_M&dPbJ&VTN{>FZ^eqO>x2SPW(t+;M;8r|xL_nj(qo}iC@$X1oUmu&+kFpnEeMrR{RCGS$ zIe>UAu&;zmfI}t=&*lcK0WGm6Yr|9lPDJzUpi=mZCp~sMUZ8hzq%boR80oz^$0(tMrJ>o=ABcxv1DI!>nU_^fs(8=d;Wq@)US zjg4m@F+m}0l^G{B8eAx~Z^Kqu--s}ibr{#co=VHeT%2>ZI8@;B{W{3$;`q>uju(_}UbfMPG$=Phl5w~&60?9?ZjiPLe5DRGlL>R`?awhhUzWX-j8 zj6`jIZiBU4;4`uJfb9WpGUeTaTBWqr?P>uRXpMP~61UoxZ|hIYkX!#yj8ZjDB39 zzjUmE(Y_#sB}n&xy)aAk^upK=5^g+au6!w2FN6NpXgSq$g}lwsVN#Xzoj-(zS$Myf z9p&X``kE@Ws9%oev{n~S0be0c?#5OA>^vF)W zT40)O*0F(>ZulB4C)ybzz4ChsywY87#o;lMDiw;U{mq>Le4;WX$^kFDTUs8$QLys# zW}xF$8#9rBcLmKiXmxJI!&vqcXh(O2m8t(0}VXxoG-lMwv#l*y47e=$Q7js?T6kcp-^{}wnfjB-u&W#u_ynGN0R;^Bg$IyFXD&Q` zY7_^a2lo><8tyvZ14>0;TJ?08kM( zn;GBX?J+TbO$9Did}mgr8^v`8cS?5PEh3Hg;%?Vb0MTshU3W{*G5 zFZL#MCI@d{4anSCyS4qjyhzPUQPYGcavr|l%BuC^sV2e$$z?g;*Ut|^)NHY>H_N0I zcWZUy;UE60uRHhUr*;%GQcTD`+VjUHmVpB^e4hMAeUj8`<%#u#uthf|P$&K+4->)h zMULAAt38bLOz_%iB)8Bo+|8{uueKOq52^BufJr_*GSBL< zs9>|NS5zz}p|`f`s`M}D9931RhK>ks5A{+gb8kJm-hhq@mo}fU>~K1p1bI~3wMv_- z+`ygFl+f6Dhh0kr?lL9Yg_bN0Udo|KfF%Q*a|!BRGFFzfj7rbz6thyEfRcme#}1+5 zwT%|^VNhhO@aNNQja#9f3Nlpul0Bnw7hnwmDWmJ_{DQ$l=0;o>MQ*#?Zh*){ zk|IC_8S?6_s8gMp_B#^0;khGI3&jWX>W3OpFF@T3$vm_`>Ymr!m68?PflsG!f>Y;m z4hR@UHJ#341V~hDj|pELvWb<&8o%d$fE%m*KrJKlFKq7ewo^zqe(OEAY4M6CU{7P3 z``v-oo-7rMpD5CwIV}XDh_76m1WRRKdJj5;X4)6?CN<{(ck?P1A*hld+j`4MsOBVi zZ5OZOw9s)~6geT9H9lN?61HqEQQXDESs^X{{yBVDiC1=-yVr33g$TTRNW>KwtZb5w z^d~iV2y%WC>03o?@!}yr_1|YSTwD6Uj430emT_7s6R?H`I`XX&BT~T{qiv78c_HR} z#{a~S;A0BuzLv@Nwd!=rbQg}WW+JE|db=hRhzV)=CetIJZcI;ku#!5kfXq_VBADN5G&& zD7sZJaHBA;o?FduFiREjn#2DzANxWPKA@&BoaI|uCesC#QBS! z7bS=dtg~^|p=R;LtB8izcfd~kFh~DV@VP=(tDaUj2k6DUw0dDjlEvz$k3r&iK&k3C z(s`N!?c#h^DJMI_+9z7jK<~VYP9W_btdV0x8~0EDsBJ{z_h-cKsT)xfkirwVRrCVd zy~S<1x*V$r_d;ztS3y6@k=ajOcLr+M^Fu=0b@aS1FNchyLp)4<4CisdFBC4!6?I{y zYVRQXwU#wSaIC6pj{-_oG@#L;L*=vUDh*kcJr_EnvS!JaVtRcT9@?9{((B40vMI}Uy^?sjQ?)$lU&QK*}QINx^BXTzn_ zyl=@N+PxujC)+V!n1k9bR_`UpWnfC!+T@EMc8TKK$WoS8#X z!GqFXS1^dFtQP*dmeqp1EP*ZnH-2-RKhiKYieynR7H!Qgw-q`xLCcZnzj;enYM6*s z@77YE>wFeP(YB7jHJ@hc2_d>I5^c9!;hFVY+22e&%~6H zUa`f1;z-&<@W6po-%sUk_QpTpx9NOiKd?E(Qq4WHUxrA~^s7t{l^(>B2!5P5h3`nA zwp*vFwV>hO9SI;u<4TgExue^<^3Z6=)gw*^@x62KVP}I!cgJ82Z!8VKM$4}%BxV~9 z!tv8~aY=G8^x>O3nI;q1NViMVi%f)pR`ROBK5ov$D=jC$49=%&TUzoPJ3JI|87ac=WPICT3`d&M}^(FpmYD`{N z@;1{Er<-c}Z31c;5yUdJF*3)2#_YA+xa%1X$G*^9iRjK^QR)60PH!WwGOjEi4+cK; zV?O$#H6woNxiy0MFg0dtG+Blr3r(g32r<*GS1ijytS_Ic>~)fRcMuKD2p0qJ=n`UU zZ&?A?j60}kt0-(t-ldcXpB29D_Z;7lzb8X6ZP~9*6*l=fW?OU=V}(+9l1}o1CV1l*GMkBzV^*|d7SjW5 zycSj})6o2Is=zxPLZnHwncy-aPDMLlg~{zw+BHQ)5vl;!;!#wq|DTR;-KuV`a2N}r zXlcLa)X+B=U5i(6W~kiwN{X7aYYdTGILyDb^n?trCCXL1JGzc94X@4=G(<{uNC=$p zklb6E+GQ}I{Y@yU+M;tr@3N2ZcS~m%=Z9`?4Fy}DJvUNs3UXfEp%RMY40WP7Qj2vT zG@Bs9oZvt2Me?*dnWo+cDuY(rfrTtTvVO@s3B~0D5Mtcvu9&1q6+KBKpN?oPgUosx zC8vK_g+nvT?kOHnq17vRXuS^sB0@Uxc;R!SRAJoY*wtRFXXMl0%#T#Q_cTp@pgz8* zhv|G)FEg7=#o-k=r#! z__tbTwES_=oLAsZCMl9hBu;`qS+X(2o2Vv&@cKc=`hj*3G)R-&ER)qA5u1BcMlL_y zdrv|SpLcHDiyhyY$#$!-*GZ+hm<{$3)zD#L!z15iOFy3B?pdM5p3GexKvv3H1PZ=+ z;WL$_((SL#u=K8`CFb1NNe8M%A+}%J&!teA&8!&d4`Oi}KV#SM5FSI3m54n^QJGCd z?s&cMpKU;*zA;5?smV%nwwd8fPHguC@LEjWZ6$G$WgDO%;P?ZEcdOQ+=9YL4lS(bz z-StKAr)w&($Dh+u8_+j#|FY7@x20vw&D-A2IY4aMgT(99cYHnB2sm0CFhb7fmOQ_T z!F81Q#%|x60Hd9*infm`B7#9%nLpVFwdCztdvp&=s^7ZV>64JA>k22VMSXtLrBkHb zAL#Cn;&p=}Q$)I|$}Iw@;sz(nl!Cg>wqtAbjEem^cOihw8e*8!io*0`nnN(>%}iQ;&K@JktIj zk=OQ_qEw-K&d+xXCQ>Q?!Fq5+iL#I4R{f|4#~NIVFCBlyh)*X%6*)ByTCZ|O`#+`> zRn*6jgtCh$F;ub1KrEti%D?JIX~n9Iy09E2kvTWMPk9}KfII|yr5HGvu4irPUqe>KAsk9{CiEIQBEuMJseJVEOLu|) zs*T<OjNqJkHEWY8aA)#-rW$h9*_&e(%whGgekDjq zU|968!YAUz-IoK`4YP|m-3pL%=@rbz{8;L>6`sa(!QdCY7p;6x);U(qjJtBWX_LGo zUsb=oM1(;~`Ah+Eu$Ib(=< z(FN;2SHh(CSRv0^8DM?l;WPckaFr<=2Ot^N{H!wk0nWfwu8WZchWNKx9$7_LyAGLhds zx~4|UOxr96ae3PXNSAEIJ{rSeK6<~Tl zQ>bnn(=n%N%0x1mR`=nO@#fwJK(hR$1jg(NzYxvR&tvn#veJNy4F%$c$jithamqbwA97^Onk8S;6h>QXH}KSa0FXBAAm49;q$$ z=8fI85*R)CzIb!8v-S8xQ_+>7bHR(%eoZZ&CAZsz{QgVex84k(K_!m zyH|r|HC%V@M|Ska1hYsR`;n7OS~EYUN6FD{k^QSObLAF$KUYO9No|>jFgPi?&yN`ccx_RUQTGew=vRZ)GIzi#8f{Gs zd5kMd&k{6cE07XLO$r_WGNeaT^|<5XfsD)b(@T_+rUlg%a-xE=#GtL%UyP@!#GE)T z@I}En%%$>fXnHk`W|pFyJfd<}&CLD3{}TrBQb?)hfp%#Cxz}=|bf<3Eg=s%-X4$8y zE4>}Z{nHDSpf^=8t)1E93#Edj=Z-d!4Y!8rH~cMn@)IgDqczOt!P%b_wDjSZ_5#xp zE$#j-Jt6k8Elo29pWz)$OjaxGxjx8;*Y?W_R#rB$%D{5AVrUmxvo8DmOLFY5g3C$5 zR+B3ZMVT%pvjTAVqClLG^Qzn=CkoC7e;5RH3$V?} zft#yLtF8FJ;|8H^Lry@b&c;ZFslxe!)jDaI?4kY|zpWE>t-3hmS`G4c<@HA22PL!h zh|yl%vnBlrd4TJ%)-OPx;;v+3QF+Kb+ceu{ox^PVwDl?c|1{FW&iNnJJz0*zghQcibF(275cfFg-c`L7cha3 z+lp+lKY>1Nj?ig-;fJ=MT3gva6l>?qLNmjXVwN6Kh5ylNp8l*QA5wBw?^xQ)88}?OcCFBpao9-WJa+_dK|wo^7P+#1ctElon_|6pa};qE#Vw=!)_^TqmURbc%H!YkzOvOA z@*Gz5HE_0Bv!d-{_`(^PY90L3zm+0{SQKY%eK7@L6LtwK=n6a$b_wLcXmKwJbM zrO-ODHa3a&S?<}?2l0`z+`F1|WB zV-Lz73gVuoD{clQu!3s6)FTM2Lut1`kqH{H#}Afz3an<{aAj#k9Y6i@bEHCPr(dJC z<^8ES{Ou5C22_h^{z#;lSJnVxOWmW$9G*+ihp#1jiuW<9%V1B|Csq<}Kw*wRMO!^U zSyfe{76Sl)gq`Sq&nS1AGM`D{N$FjC8V0x-lsIk4Cq=#XnWgf9xic{Jqsh4>e(al) z6|azwMC;O6&HWY=bZGP78~KH4>Gtri|ixmcg3r!LPCohT0^6Wg*^QKp~fW`v!ziKzV)>c}ozn|nrgYxlG@dC%W1kjp9r@ZvZ zi6Q7_ZJ#%w(lk&fBzUs;Xrbc!)aAoLnEuFj=m&Z-d8coo8PqL7U|`7J*E#X9&orLS zHV2ph^z&^H5J_PtDb(a;S|8@iSp+8ZM8Eu>KPSqvc-a^#%d8Q3;O-B#UGw%MQ>MVGakc4KaVYL$1-sK26Bxz;w5{_*SxU>Cv zaVM*_;-sx7SO&Uv)D9Wd6r6KbGMSQ;k{m;~QZ%wl1^@B8b4gQ~U7ISYKKzx~=e;#t}ue_|z4|iSc>< zed(`2h0`KC#$u{@C8)1A;`sRidu%|Cy=$ekk$#PSEE%FM^WDjDLmWoIUn#A=8M=y>Ipd$0yD#um>*8?a8xK8(w`#ft+c*S6hGUFR?4t7-~&^ ziH|{Z9+hx7I;bRU|FzlM;b7~;J2E4N$K#7R&hFNKM-*_{E`Dupj0|!TE~Iuz?YC)z zAnXyL`V;yc!_o);PMhGD=5F4ztB@FyoFbZv9d~5VF!Pn*q#(jwvEVh&ed`|u`zsX# zYycsuTTw<}d0zi_JGzHJ3l~*! z9bKxn$3AxdYoESjpM=a!^YRtwLy-v+Q(>hFk=U>}TF%XbuY%|zu_FzlpGypQ?Xmu; zu8Y;XQC>Lv4ocUffAZouswjHcX%@Zpms%(LlcM}Q!42JW{OG;vBU7L1>snr^Sw3fu zzH@_p3iHN;x{qI5D>hzBAznkl$H_d8Lw%rU0`)`{%Tz&OkX%(>5 z_0M&|HiOkK?~9*#ZdCIdjEV1q%Li-wzn?i)Z7K_2g9Zn8eZs@X&#+v5$+C+?5ty2{!OpoZLH`=dV}t}!df3Za)G^p4l_puzL` zPu~(VEzOC;PctkdsRwM6p6KmUROhp+7bTVlZs=PS>uqMlci|%UF(R=m7vc`r*dFbP z)vZ2GTOZ(Imbx}Pt^4e#IutlG&`ScjRy7* z;-w{84qm1!&?PBriF%U-xi(X;(kpMFuV4wDTh`_LloHE@0?!$4D3JXs#cU7Qh@hwp zxEXlu|4;~|%^%`Lp>y=lfWELsTT^p}7r*CYoy!(Y^v|(Zy+(+XrD=%AhC*~k_oDR{ zG8Y-c-zPTdpVnrk2RWWJTv6JY;;mm0N9A6CB6UM)Zg{=8@Z9aG|27vP?!&>Vm zw5>5EhdG`b>VNVnxXQr(S;?xwWTy?24*R25rs`<*w)y-MrDR-n!Ql_ZOm`!u@hnIA zlvyEy59|SjYGtZE-Pjg0cMHjS3O+;hCdKRyQjuLhUFqz;gYbr_q;N~JB?HjA93>2ZaM-igCGUt2AE%IvV zK5eQ_F=$n}F~1-6&>*u)=bvSjFcXLuD1h{`X!kx&uT?%n4ZT!8k*0A_4YIX5xoI6im<5ry;8DejppElPc#rBnO{5na$AcS^bCah|jF0x5x0p=r&5!e6?; zJ@9j{%MBq6zsfQdP;@t|BLyD)%x0`KzUOL_wQcZXx7j4`^pyGI7q2rW%_jd_f(is` z`DrAxU@SHW(dI{AbbFyOOVk)YnYrw*J&TV66GUx0Q|h^O!kfiQ6tDw%N_$yf5Scww z31UinZbF0lHd&%F)(=dTms}ETqxG6T7aV%K*@xbmmmaEbDri7#QKffNq*IIgKFZZz z-f}aTJJZ`7J$ptA{YeFa;zIdyMxTCDc2l#Rde$}l#rkW7{zqy&-R&Q*s`0f_czKt^ z)Z0A8zPB$-vcOBtqQT&r2`|)o?RJEvkaD;G-e$?sg&^A^6W2rFe2CL>tbfJl?YEu8 za95oGg)(aV8*q1AI?&N~-VXMJTi5^~S6r~jNs{r+2gsH_g5pt>0B~ltEiK97u4`$` zsF){iAgWD79E`Rwr4)3u8H^m}>Fwq>9~YbJOo99IXG92_MNRMnWbLipZ?ETuwmJcE-U}Vopp&pDTsP?aQ5^n_lIa7*@k8~8vl68NC;K>Nd(RPmZgf}_T zQbH=3d`_|$hwX%lHt2CnD%B08AZpS zpX?Up2AxW(YL^Ony+l{v*@G{LCCm#da6_0i{lB)(U_J_Ok51C;tv(~!^h@GQ^ywys zW&Dl*X-=hGI$NGn>{|MwSt-AOe;;VwB?z`UdUr9y<_ckV=$Vgz^|BjUFvFXVP&DtB zLce^8czO>al{GoJv||C-b8^jWlM-=CDXv-#F&E1vBdZD;rl zZG}qPQ}c?Dt2_@lNB$XwcQa;eY^^2yt7*BUJjGJH55mKn{FR+z^+6)S~aaw zBUZ9n`MoN?Mu%9-WG2T^%8v^@$g_(E)eqU8ql*@-d{#T^SmCH%Dsfu94q9}{*2NAsqT0W;jZ;}1?KFIm=_#nlxC6L`> zOxeBs(KfS*R}2H`=M~r^&)Verm6NXHVv@<8sO>+i-O4drB*Qt*=H9owS(cC@y=YKq zI}c8K)|Vv%kr~VlqW4buH@@n#^0}9z4curlI|Na$qpAW5!|TUexN+Ej1PI1{r0Kb* zwMR`a$cN5jwU{P$>f@C!;%-r5Gi>Ga8$%u~H0xiKVLZv*KX?bu%hdjkFweEI#p>}7 z%0)L?Ef4?(tJh9u^X|0&9Ix}DnT+2(h;?y3D{gygJ^P$QsX^e}C%lD|i+2hMbkmLL z^4Uv{r{n#X9?>1L>;^15v7jVIv}=ilIc49pr2lLq%SP>8P*QbdhIEa{o&{gwOUxOV zo{Pj{Rh4vZLlGB6pKO&hV9x^lZu}>uIi%754|t6TIqnPMY$QJ|YoE5vc>; z6I(&~Y4HJ#3gL{y)de-!J34SOz#@r5W!5GVS!FZAl^yzfDF)>LM9a)Nd5|BMtUTAH z&T;`wLFLubHsBf(@9RPoOWzOf+4^BkN44tlVh0T(@z^mZenA()(1}=I7^$yP$*sGv zTb1n41oScPN=9Y91$7s3Xu6J79KOG`^W8TyLFhet#3DuNuhjouV|4G`q3wM3#gdq? z4r40~3T)=i4v%SzW5Q%Nk(tDB|HYL=VR^;g z6#iDL2zP%HXB;l4e#Z{SE113PB2fFp|6I`GU*E4kSuTH!aDL5nyT5Zm+pe{?LnlhV|1}A(Jtz!=iI-k z{#l?Jsof+UH!xihTUOeS=%VGPw{6X~w}og3$@Z2F7uNlGt;#?q`>FV@A-n!H6 zv_70>A<*Y_cB_laCSTND%cKh&v-vkyOZI9%Vug?m7QLR#7Fy)zuq);2g; z5S>?yZe@#CWrAKK*Rv6t7)dGF@ybmc)!W{*06T=}*j(;!5( zXTgB#^THG+H7j6UB9Iki>_|Ip@9GM??FZ}ip$T(1>O!Nque~!zRzU(_JY0BM1u+sf*!znidfLOqE7~4u} z`50<>UHvX7LM%w?-v=H0)K0aoHc8*p1?9-&um#i0vJzS&6@Qd&*fk$&)Kc;-94|=T zk(>bF0~(S2F3<~j>r0Zocy_NQi#ii(qxu4n4r zI?6({!K z|7R4GufHRdq6aq<$Ubo5j|}dpNB#V2^raZz%X}}V zc!A*=U8<;{ET|;5oozmuk#sc7gU5-?f4-4=VLvYX?w!B64Li$){Xurwk^YT~xr3sp z+qrKTAKpBcxw5HQo}q_wJ0-toA{PuMS^}!>;HW9_u<$I|+E?}o66>zK)Gy(=kI&+) zrfxc*6B*r-IjlVqt3B;Hn#ZWbN+F0Pud3*}DObV#Y;SIZ3pQX!W|H&5g4EFnc zea=~FWCR+^yHaE0qvK;EnxzlDrLCBCiQT$pAkPqRLn&WgoC^jBLqOiOp$opywD=4xgsg1VvpOS06IjtIOCC zPP|S>tPg(qsx2D>;jgW`gK};L$$m8vVPLgt^(l^ zN%$@UZ2nn;X1^bLZ@-qm2aCifxqOJsPib!33b{P2(DR@{M+dP)VG1l8z6@Vo3Af@T z0D7Pk`7hHMgPMP8wYCJR;`PT>Z*3h^fi?oRh4qy{eRH(CIz^4G<~iytIOVj?{bp<| zlzb7emDN&vi>3DS-RcJq!F+9h0Ks0%`jb<%TarVQVjfDp(B9G&8Tsb|%(04=c2N2m5NG4gHhC@c`nGz_Ygg#!BuWj1c1E0s3puPvliiq)wu+}%r zKmH!EEU79ta0jq50_yAAViOvl1B5uqlVL0&pcsiWbA2S}sROQ{tamLKo?C0HiHz<&&(wHhNJU#^gx3O6 z%SnAo%_55rH?kcI*Dp$qNY@BhmpOfHyw!>vcNWgOt#gPtwLa+Km=2b=qX(^m*5}U{ zZL$?o330jccb=1q=oG@}HHgG+ja#WhM61xZ^c^jurLs_Em0xSgN)e+v&cyuHH)Z#f z3$tye9@I}dl7;-WpB|Ro+^4`#j{hpKhW#7T@cQco*Ez&5HGJmZQG7H=Y-WV%(DGd* z6%AZ33mle*o@ft)rH+dPV-fo-XNBkfBf~Q>uq^h>isJfs=b)7lkyvXtuvpZkW`swC zAJsM_l%!n~`=j5EL0@}P{Rlaf<%AHI((L~}H7t*?^^9ylf2S2VsJf*1sb_*$mL$l8 zmIbyC7k&`aOP0EL{RzN(`O_zVv*whbBtbKC$Gz&p{AT1K_O9zfsFGq~fkQ+CJQ{uc z+Fr`lSca&(-~Z}1BzH?Lc6J*!j>bNXU6~|*#u&E91TIzRZQ^MA*u_9+;Y^QzNGDXB z(SQxRpaB?IH&YOFYjNBV->AHmqpxKO-V z$bz}_0LD$O!aEeueaPhn6uIjI`#KOQcYHBw zCV04wO_#;K{Ch*cVt~$J2x;SKg@RGz(SJ@q%bi`SZiPn01te8}%;V8U@lsC`{>q*$9ZY)MhW1OvFnPId^~a z_3*)$3<%Xm)2G|>1u;I#hko@9n}qSoU+x{K!5(82-e10+pqHCb_}IznpSVuVXJA$h z;TFs@DZfMykL*ZRZ$BHtJ|v_mkdyy=d7tZ%4c@|9Vc1bmdGN-|1X8-qq>M@RtrNkW z^7;Zq%ttw-0O}O-GQ(Hh%52jx9i3Gi0|CrYT!2PRz}SiuW>`g#e)B{}lx(Y*T*f%U(+GVI^hp z@|&OY%k!&aG-+qkBCjl|JH4pXt{I?U+4v*%n;p!Q)yU$nwE;V2k_ugqZ#qJ4>kC%H zv|nxb6k770?xtp>buV6lJTC&jn;T}nJhT5VH%NGICV0f%|1OB;_9BEm;SPXR?5RLp z8Q|4M5bjlTXLUQwy=CNT*39waWj3erS8!wvK|+WWG&EFv+ct?apxZIg#L;AHL9veZ z23!8Hx9oQTbXX#wZRtT?9(w+r)}WVWivP-*GSGy**{yeQY+Kr`_|5I1;qR@u#9bge zY@`duDNOGs%xm*iR~8f;K2uUBpCh$7Z7Yu^+Iq`J#n`A!CBj0*S-@Ax$W&KZ6S89= z_*hH}vE-)cT724=t&6{B2U~cjwLaGUkV9MquX69jzX|cNp$@-GxvvIC9u{D%^rFU1 z|D4DikI85@{J}Y%CWU;j6}^?Z87qfB?;RC|uYfb$`dc^j#Z z`L(7u@^(i8-tK$?M$Am#QwFH|?zc`Z)iQoaW(s20i_2e}4K>=d$pes@+RSU|TvPC` z*V+kn+)yQia;^9>Oga|TE0WR6Is%^fCMAoNYJFT-th-EWb2woWpY-Jz?hS>dlTA&v z1e`=qdcL?JO=x4iW>2k=qgg;h`i2(A4NTtCQCFw_UiR#+im(obcyZOa(Ds zPs6A0qI^&PkVBW#ee?*jp#0wVc)4x$Y71c86Id(#k|iIE=jfY0`HRR#3t%NEEUVVy z|8aI+ZB2Y{xc(_B3JQW0krGj9(m|vX6%m!*TOjm~^b%SW1SB-2cce=VNEHGRB%q^=G53*foQ56!(}^}mX&3x0jie{{ z_kxS~<_nh>o5fi8(}=@kLIAq{GnP2e=y^%Ap}r?~hINK^h+Ls?W#zRo@Bdh2capx^ zQk(y12DEE+_49oVr_z#pL2zqJ`oU9(>bQ8=b4rjv&SVIRd1eoZ(9a|#?maPD6h(_` zL8?WiIk6382=h!5Y|qhXQ37431?ix}|FPR;2)j&D(q4?wq6}L68DvOQng=Ucj&RK+ zCGV9PEj~ckJ%db(O7miU$`P+JNhy2%MvF>lacu}rRGJ^#P>u+pArYap1n#uGbt5}< zbhkF-MAR36JuF8+Gr8aIT{5?iUbcF<%kvVFjWjlRI-S{^eq^ z1@$F3QuyeojBB?B`8%Wd&7t8^cnMzZR)#`5o>Z^hZBLqa5IqzJ!8gx9ZC<8hfYGJTm!Qxq9`dU;PwctKa>{mytONdtr74eQtqQ z$=`NQe+A?43c(_jlfHh18TEPOpCJ_S^CbXDe44S9yAbmZoZEmSFlp1Q zCPo9Y@bl-X@7Eku;Q*ky$v#dwipEGocYZN>Qkg`BC0rmw6LDRs)adEH;h(l9;k_@Y zOn^mglkh*GO#prcdG|v@y-g3yfyJrIhg<-k4Iry0o&rJY-B|Gh`ef zqvE1sXE2{{+x424jD3JhZe{#QxVoY>2hyqApDGIiq&x;ys1;(YX6{V%I+?^7aR6zDN3S# z|L$_6)DwfUT)SbW2m)Q$`|69Q?pJZ`6^OG>u!r7u`7gkvw(s|2mLmnD;onzDp=&Rf z;?r}hFWCKN9{}FOXM0;)Ba68z{FYr5LJW4RtYVL!1yYZBnx^$UH%!YQ*MS+GK9NRS zNf#*Q0ZF$}+?Q1sX-Bm#4Y6UZOMpI&n(ig>7)hryPJif%hRwwqki^joT5{Z<$|M6s zU3qh9+0@OUG!8N*{??qtf#=)>qBCYgp+&7}=iN<}XhP-$UCa|Z82*aVvf?v*TRlW1KSz(D8Um3G;e+}Rxp1F~1AL>W&{ z!; z77H<7zvOjMtf=-&{%^e+fdMb>lTODU_fuX(I-4aELcLMdqq|N|eRLs_X)(7~n(PX| zQqMQ-o%l1=mMdezRu#3olLxx~lERJsSY{&P7W=jIh^k!|#p(z2imI!0-~X=srty3w z-(Q2^(>Amd_DQVJJL`6F$KVbpp=6^|VID00rWsP|BuG~o)3)ML6~6B4^n`6CZN(%o zQ-lJ$OPUFi(bF})H~1NufIdyR*NM@ri$zD(yl1UMhHRdBBITv}e!cla>n#kir@`kv zL~C)Ys{|JEgM1li`PH7>i6^3|v)C;a*FrTbFWnMKoU6^cUg|#LW_Z^?zJ`nh~p`hPni?9Q#V1Cw~J(^)` zp5KwhlLcnLA^Z-bZZ>&ptXqgX(H&^CM2sR+d;R9zD;GUfH1pA7T++mBl~o?N&776| zHKg_*@>EaQ*Su!u{r7!GjpESg!cc&3yXEe?ek#;6n#L-Xz2Yj?n7#5!Oe$w3M65Aq zC0a}>cO_n|F?S_ZOe$|BTdXl}rC3ZVf2B&SF@L2|OsZg|U97QSrB_UD3cx7Fzv3O-iOsZt%NUX7Bg(@cfANJZu#QDt7*L&=Si|5f^k07j~ z(&w>y9}!HMp>Ou&3>Pn<@sA(?QRxfVl#dAZ%+Q!UW5Y!zwAW*Zw5aqY?C3|tt<2Ea zy#T{S7Bv1b1Sl$f8GEf1aVInM?OwX!B0Jja3B*8DnhC2{inyN{8n^e^aFGj*e*yth zzcFiuIf=rrVv9-<4>CLA_ht2tYGGg~W=&uVeYk z5Kl8Z-tFBoTD*%+dJ4%9g|lOA%MiMm9f^A?MvEe7W-Um$D4YXZRE99k?11fA8!d{X zle8c$qHr$kLKy;-*^#stZnP+kW_||wCJMiaB^zaLasu)}ZOQ}G7%v8+WgBdRxp>aLr92-@MXv$Q~-a{KNTA_7xAYNi{No-FgqBB!5XYZf!qAhw@ z2NEF$m&Q^m5nnSEbN84`79G$!x{xHX|DUHYCHni;GwapoUbj6`?lqKFC}hhC#1kFG z?R!g5Kgy<{k>HtNHIHi%bC)8X8$KLi)U!*Cidn5(ytY163g-^oRF9hjNuCf9HoY@ss~@V<`@zv+`>p={*)LzO z1Dj>e34zk~MPOZtZYl|^TlIJ0{DdPTIKhiBq%K^^Hu8N6{2c(OV2tTW9mOl1?{s>RxTntW8-}l*+r_Eu1rWeA8qK5RPce*4nu&|&CUK@`x$A%(&P(xOMU%Wt0b2Z-Onl_BS!(&05bA}3^`w!=fa(^bDcZ#0VL{k*y?fyl( zv66|ML17>r47o9FNm@KWmie3Q);zkS+cz zfjvB{rkAO1)&z(#0ows9o^0OT700xCThWyj>Nm)l^)EB>RMRl8p2#;R1t=(m*?pk*yhK!xM zBM-Bn#kAy`$hu)QV#6mfbq_b7UBqC{u)h%)Z~(ToU}#VKK2dFD8EC|vyqY10 zbP|uY%IuY%%~3n%wWK9zp&$-v95dO{Tp{}))9-a##~K4lC-x4p7u)YLp01*XWQS!- zUW`?Ma^YvqyXv1sDaZ4<|rZQSX99R^^HR8B?fPq>3`mJ5X`qu#8$g0RM0-+N3 zcg!!7q*v;=CA?o)&mjr)uo74B^IVJz#aUJj`BPl=mC?*n*>Ut;ohmmKPowZTdhV;q zJwoz+swp1^x71ra8e%;Y>TU9@yeA;_{rhPfNtnsi?Eoa=N7;&syRXoJTNCy9Rrf2v z;@J+5!C3Kw!;wjYNyd>5(J}cMIRjN4-1j$4zUD zBxtQnvrF99{`sTPkww*1qqng*jZR<=4avfB&lnof)>oD^aQhcD;%s&A&4T#PV%$!e zNLN%s!OD!>ubwrE&h>@MTB97_Uhx~)UVh4VGU_TsI8Tg+8 zKVJ^fvme_0nL|gXxt$|Pr@4z`Sf{y{gITw^pF>Btd5|MXw;9bbtlK=s!K~N(n?pyh zd5R-RuX&bZSWo$!sM~*7j*o>5nHjGGxD53f(2z&UY@%-Gv8EpjnKLuq1Uxj5dBPPJyP@fqMAp-QT_UAoTRuIKq!mfQRzmDd4qO2u~ zyNtb8S}2q`@iw5?P@e;x_e9xD6vu>hE-jSIoQMnPHPpX}=FwDk5yf4_R+JVhWKP5f zEE?+bq4PAAgGF&H*tOC^^~{Nc0IH$>Z8XnQMgiNpX6BYjackCt+!D2@YLQC4V{IROi>Gt!qp=V>XoiQ>4hYh{JDnG;C? z(MI|*Xr5=vC{f%^?7i|rm&}RefMO&42k5+K%9EnFTXb-Ep-<*SN8TNx{g z8qjhw3QD#G>kUR!gV}VmkQlh zSy5GEgc<}mN3?{?r{*3N2cO~RxDtQd{MS5QdO&#?Q5Utz#RwKxYG4c(f3?uCE6p8g ztHC*Lp%O}+bnsdxxc=?=tf}prH4b8d<^=1IQ>gVIiqpUjWY<8pM>4)B(`~wWwS_N| zfM#(@Xxlg6$H*`e@^2JNF5&`=lw|+(l_Nl)o_t7MB>Fa^LG6d;Vatq;e*Qjy6tdDg zz#ViGuNBFZDThxHiVA|4kp9BnZ{b#shglA1|z}$)<5uBU`RE0V}i4cbpa*Ieox2|u-?CU9gD6hwyQ^n+$ zYPIBb_9oA5H|^JB#!)A@UGqa8uWhxLBRY_S6aSPV*3tO9>)Y%knaQyeIkz0aPCylc2yx1`QAlsgSZctRiDo-tjC~2?39D2es55O5{+ZPHggQrs!PGr6^MUbXDFc z4cRFTV=nKMg^8DU%ENTZI~8DF<(-PKr1DN>SY3IiDr~sCQyqpc?*zh_D>@&;#49>A zVLBC^S}?DQPHk9HMdu4xT}7u3Y`CIR4~DPkG=MQzb{fIND?3eKI+dMfFt5r^3s_QR zrxmQOveO1OT-j+0!&i2KVa!#X4lwbmPA8a7Ri_KgtE$rtmQ>a00jsO(^nwjnb^5^Y zRh_;t=ITy=n0R$(AWWyaGZ^Mo-5JW`7Lgj#2R~OZ_-!dTGdKXfb$7+HEa-M4=-r+W zEuYp9%vx_EHP(`8HaMw|Kj~_c?QrtCcxitopd`k+qTuhYFrAn>#=Oq9c*RLa#maP% zWGutViQsHf9axkOloQG|AdcewIfmd|^AEu>Cxw;D=XLt*gkBeZc@mcXi91e`a@sFA z-{3zgf)BK|3~KQ0b3kbxe@|Qfv0N#sJNQ`V?QX0^k$|(ev%?AMS*81BuyJGEoXa)J zy?<|$;&z#TIAB>i+M1xnqd2S0=KTnpO#Seh>zq)4kHhpBYQNz)3KoW`lko2OM51r+ zj|A<8GiO*coIDA8trI@fk|0_Cdpz<=QDA~7|9TRadCS6CCg`s}VhILK!ZRDamJmFH zVRkk?eZEz&FCTO0$FeLHvyZBhRs0|taAi615I)qgStCnujFmeGVp;~K)4i6@JiK2T zZlh~W=aBQz11@Su9nZd1Ukq#y8rNLu~bJEXYs>7 zoy$&5zdwxmx_mBXCxCn5W#(KG|CBT?)Tw-5F;|f8y=J~|Cn#>CP`X|&4worDPmK?j z@OEkJW*Tyi&Hl)g1s&pQmwh&T>77_TmZ)XjbI*;EIXY<9}sQFuc#tzwTaw;yITVUc?)a)nBeK~_=c;q zoFiXy#|ii_!`6tTQzG7y@!~6cFB#;LX$Ag7{1#sFELN|NKFadj{lOniU8?JP!>mH} zgUBf6Y?CS^2b0#4tvTu+ys*cx2g~fs_Fhn&dy$On$LL5GrG&ishU(f1rtWtByAhjp zX%JFh5H;KoDbGUx7-!@h9{G)M^WsByqRpIaqz+RL_-@oc@Lb~lt~B`Fe&^1vddGux zkudA{3w26tgLTQ`*RGnM%-qwPY$km>S)JCJj!}0}NK&4-LJ0iL<<{X`uUQ(XnVbv1 z=O#ESlwi%6j7jk-K8Tl8{=?S?yUU8p@mIEyfuB8`{x#clQOzMvdcBU}4K&>khO*j}-T-HuR=+xOu;mdv9VStNAN!y&pBB0-vzjJ10VkBcZqX85$y8Iu8G-Xc@ z03`gREnK9clUH%`yDCXII^Ow#U0*E=7s24`9dOvCzz-}|u%r0x=}hZww)%e+zcij6 zPwV}%bBM@!bl?`kR_*haAmZm2z&Q_Q?TfQkw)I}M)qT*iY5}v(&cQDuYUV?r2`~Fa%HuUl~jPRIgochuU`IPc= z`ZlWO3NoALV*DNrrpI|zreix3ezKo7uC9$S)|{;>QXpd&h@}h?MMLzZ ztj18xaSCUa`OZnoYA8S#82I4bT$Lq&IkKmon}>TKsh6@b`R7ON%A@7SkLe{q%6GNwT-pn^f%s3;@QO;m~zhzC_<1iFQ4Faq(SdW=APs8J&j zKWf1UB!JpB0s&AIBhYQsHDizc{4ff_XiNum~vK~kt~V~{k8VhoZ&T{8j6qWDcfawtg? zkUUD=1oQxCdh@X^; z?R?n6!b0G?C^WE*>0Hk$;KlFr?O~NBQhdVz* zL*U2Y>#h1RQ${~kn5`3tG@EK7^q-P@5n}^GY4Dxa)VEW4KUFxatDoR4-HVtTVoQVN zT2tev{{B?qv#!>}hq)KAHZYV0KWR;UH^uWy<(_r*Q+%#_(T#@KvS8!ZRM?c&FBJ*v zYAt-Hdl7d7LwT@cYijaT-Y=C0*45AOGwwya4YB3H0j;U2Q-6P{s99HQbHunb@dCp63s+ja>b!ZC_4D_;5t(Z zGNQMZB`jMY4Y4|GJHaj=X;mwx=KmRvuC9Lz$O=s&hOwX8?7H-4VT%Sp*9MyA8D%VKSj+jc?P<-F=;WPB>q^t%OwS@?Nz>Y_mu;psQ}-twE3F$$ zhqF9;j3sAy5`5KX{H_xswp)j&ff8F^mS}Gz_r2t0kXNMa3&AS^GC>ojAZCk4W%dwVC!zP?rZfC`P3fIP7B$}<~1F(o70LLG}}rSSc9z(H$~;$Z81S*#V& zr>I$6&p07ZlAX977*eU=Hu0rJdREytRbW@XP7TYc8an&uR!Nf8@;@aN z{(|&!Hirxjg+y!qAu2wU|6$8Y9?7!3Vf{csJmq(FhyYgoM_YM!UL4a3!;Iq7vVMEl zZ%?CFm1nhAVh8upi2GX`*lQ(!6bsA*4pWLOz+oRj4^DMCk={0OH7%W% z{BI-T3qk!8V{6)U9umB zRKsFBx*kjhN{@-y_xpM&aqP5Irh5J2E4-$VqMn8y?h;Rko$HMb@V(Z(sXr|@X3G!y zis5UrD6q-)RGsN#6b`vO%wjXu^K^yuKgL{t*!#oy7XEp)GDwi%Oh8eR|85VVx-vOd za=J8yh5Fs-dN(6dT6bF2}cK6yr6Xhd4^~kOLxIem3KZGHf^VxroeFbnsNM(%K8c=;^y{SgeF}rT&!coDv+ftff*}h>#P_du$K$xGxQTZ0A&z zPfhGUrt)%3T$l#r&MPBm9P&3F{F0{6JAd5rIjQHiZ7|ghAy)5jwsCI~_aO&-(a5{r zNuLb*iHvbm1CH`|iLf}Ra@Zm4nhwU!(Y5V@{dPwzf#dM@@CcJgd`MzW;$RpX0_C0) zJssZi`@d)8L9(h`ywBG#f^ClpvLvi`+lnS&>E${o->nH)jrR898)Np1WEo!04e?+p zo;(RSTa$D(3%zW!cXR7uoeFCq#_8F*z=r#GP9wxkRWxSH(eOH=tIPfsJhb0{7|zVj$C zLp}zSvLW9E)C)ttizq8YzDp<%Lq0|n#E|bYD$$Vd%4ppLLUnZ5q&FPxW^l422GGC` zS4W;^`j+ewO?sozID->vjlh4C%pb$goBF=~$7a}bzSiy0A9-*-`LYZ_cQ1&nrZk*^rJ{d|P^AHJs2vq9ZR zdq`Y+HF_YT!NZ8Sf(_YG2>|c?_T)lA5hIOzqn6SjlFCcmo1((7BZD0}sqvd#^3nbA zc{`2{nVRzEuVWXtCQPpqS^`PA6D?c!QwNnAJiUU(bEg`uhYO1TxY?9k&f9~>n+79pR(BcrqqW4H7JW_6US}VKv z%k^;+zgN{yb`>k)IkphW3;p-O4_Zp?q#bRfVxZD1g1FHwC)3@|vkhb>fgz@RdHj3i zdGEwnWe;=zI?j-`w0Ph>1#XKu&PImzLfS6XS>r$Ihv2f^=}Xy2_Ssjw zjY#+DT5Q6I?%witKPg{1Vm@-l_(lM5u;tS<@Es*@4k1^)`V)gJp+vQfkDR`XPEen8P#OAT44<$^>(GJRAR)B^481a;_E_%K)p4eB>?97+v`_OqkW2ZFoUaPbWl*R z_VF}3osqV3wWs7qffRd|Ad0SZ|EWfPJeZt62K>nbT6*{@sI`o zhL1U3YzuHlVE)I*Mzqays*dZ%W$3Oa^tnI_dqk!9pp%F;P5Rk#vQzvf z`RM2vpNM3*0|@+&_pmw_pnsX=hlPSHe@dO~ zVDcv;BTdq7MEz`Qu}?@OpE-(-3ff|~-kC!9evPTtq>NbXa{>L3~ z`!fxH867#c%;{93g7-h3jaK{USN8xMiS(*YrK{?O3^oN5!^QiC%`pbV&tHLD?B0t_ zj7%wVeA4)(ypr0vgedCwx~nBUXUFHg%2(?gx-&h-ZFgC0FBwSYFjDt`ga`LMYNq$S zxsKQ-e&2lK#vKgULWb$Va1~(&`3a@|w{MA*`QN+cR^~5ytGdiz;ufyVU*?ubx&MP( zZsq<;x2nti)vQDi3`lAJ$^AAxAVwt__pg*5`L{AHj3}3eV{XsID(?>AnW%J(;@%zW zCOedYB>i8ULHs0q8h$g4YWW_DfZk1d%lbfLr|w@#696*PWSeKKy^CHTr>+t!y2a9;`R@bUU2*9ujZ z!rkrWI?-OJYVA`6N7E61YLOp$Ulv^3e^U=m+%-FNJEpGEvK5na*M?i{;QX$G$2r7V z-Z0UF)T%|};XS5%bWrmh~>7$dqHhC76Nu;A|2ND<{9!t7QDX()?K>C4Eyg~CLr|SCG zN|K3PPu-P;H;7+adhbUk9-6IiNiRVLdQYFMoVA%8$L+Z=|iy#nvZ zT`i_QY&nhgLyRc;{vJo(AeanHhU8~0@||`QQgw+bECqj;&-=1V(HmpE8aqfj&bfmw zgCeX+Nh{|5osQ_Zn_wTQ49W6+$czIZqrBt8l9BIltoo*3DKw7Y{2NhOA&V+4dr)FT z&2l0+EBNFlINi;q!;1LU;VhD;>3H0MkG2^wHZ-;zhHS7-^X2d|KLp)G((3c%1QLnJ zmaSVj$S&(W0>8I%34CHYf)Chql%juQ`iw+vt}qV@K+jv&)0ebV%J-a~$`;}BAxk}k z&SQKkH29nrpSlq^?f-gT$~7Z;Z`VmKj9www{!!L{}EVqbWPAl+KX7pJdVpXD>|QQK$chn2I{ro366)y6(%wLLG}tZG8UCqpV{;ikOVo4F&ZI5nSUQLMnWJuNQxG8VGr?!cYN3FVETTM-f!eo2Z?6fIwfv1~^ zk56rnUfUOs!puP^#cAv3Jc{41vw0MM zSQqptPG6VxD9%`a>`|P#ZsbvH_8q?PtlKLVmiQ*$idcdS-JRtHu@4uF)<$ooXl_1G zh=txgD6m_l<`->5e)BX(gfv~0s4wZTLb-sIIZ6~~vEfXrb$+*r~*4B0ahyW8y}_O1G$&IUdKr z$jYA{;nJS&8sbB#GY;KR<$$_hkykZWIV0Sh(OqL^DzGZ;!<)Ny;g)_d8dM446j}tH z$gHHsYEP1hWan2c{h=btrbUnRDG`sllk1!n#c9h@JGgq^r`QqK%98gLt2Xiu0MW~! zSE`*K1!s4>&BM=i_^J1a|3?OZEv8EPpjn5Wiu|O6)^^ChWMnoz_u_I7)8%)97h)c;v3VGe@ANoZR0wy!Zt8yV-??*@ zq0i5stB5^FfBRO-Hvh69U;gic(ggN!&ViqEq_MmtBtiKsN+6RsA3<6)Ssxk6gJABw zpZwB~YnsM2==a2v@$3dK+kCNuT+on_HzC3LxYKN+p&*`m-c{$~F~7%J=%>P+1h&uE zwf_REWt6KZt&`B)gg2eS3wx^Uy9tl3vrwQUBTuK%&nY})*}G2$+1$W-c!^EZw}pYx z5zpeDrD*Y62a)g2#GlQgiSwL-9iTCi@VZUX+)2mfyt9W&!T)*x>>u4f{oJl4Q~gb5 z=J`-S^?+}p{m8#z1vcYiDUJsbPn`T4n(l^46a!-;lRQ%L3a)Q& zn%-z@k`43{e&**5@o_RrOMm5bcWouJNsc`Ifa@+|G<}McykyDv3(d`&7C#t*m_6eJD(G|cDskIwG zfkYz!{GW?njWn;v9QS}S${H6vM))3|?Do(`c>HhI$>NUIU`wF7YOc_SYt2_YUU*St z#{eaZ{@l~z1%f%KFNXJ?JTv<6B7~U%p%k6g>9rRp>xRzo`@8Drg(;WrfBHiRgD5(Z z0X5F~OV{+OC(8yHSkIK%_J>7I^b5uDb+NX4_D#hPHK6Ic_-5-<5nh=bx_3 zdeoL4e}T!+&Yx!W;4K4wUeh6#$!4wKEhGK{(;=zJX1(Ao6MkN^A^pi_v*0Z={sOb1 zSCh@Q!CMymyyioxlg%!{TUPu9=0lB>%|5|fHvGI6Lt~T8!NFU$`~?<6JCn^(!CPQ{ zUdthtsph!gEeHMr%OR<$=9J(qCw^Y5A^j<*{qQZjv~7GdG|PsYUuy2*JEq3y-_DK3 z-Je}ytt z1!B=kyUQp%U8_a#4%h;+tp0T^!Ig((r(FFq@unob`$TvBLgE!1pF4=g>kqt!I?L-3 z@0Bm6@l0|oLzpsrUyEf*%G{(-n*92c1cir=1goV_g*LA*!oU61bcxP;OO+|m7ASHI zko?KfI&PP)L~z4z1%`Bj_-IP)UqN`XxkJy@w?!j|SX;E0-ufqNuTj#qDnpRi zdo!PLSCiJ#n>3Y;v?BHMdlXmLoDrOR%MLJhQ|diu)vWJw@(Hc`#}@{qjoS+w-NuV? zk!k4$bfnaLTFPAOwP~=WFJku9Nzl(~^~44-#0AhR;;-{_HbS@rwLNqu?x=IT*_%}t@gKfutPqep!V@3?x<7Y0Ah2IW`3(Wn z)ZV+V+*r;1f)#g@J94GtOUO`E0MmZ+>U-O`WleFG4EZo1+UQNa<1KDM0=0Yb=Jz2- z=F@iUJNp9u0C4RIn&08CeF`egfGlzOK6hUs<9oBwM?IHQd7hYKCS+p9f8S;_Hge9n z{6$(~AoSKab3H9e_%HVxuvxMl)5+Yg1PaUmwv>C{nH=BEJ!Ft(&m#C;?>F5Yi%^J> zl@$yf|Hl=2{%GW53CvYI0T*E|iLqLBeQVmT;2g(xk*w?B_;_ktA=rF@`BW13+5%Nz zEo)v6_jIy1RIYEi(pr}*6Dbwf#{jWhmcK%5(Di?#l*VYUrfM3ke!riC;f1uL`a>c0 z#oruh4|~&h9$Stloem}^q)i>+R;gg8sJh_a1I|&Y6gzD3GUV`khk(G?{Fo)pm)gLl zz=;oKMKv~4_h%V%LY7G4;Z(Nzk}-s!yY>$w4b4=UqN)N= z;Z_f2k8YrNE<}|!@#jA-Vb5l76uIAa26j?6`S91?#Jf&uEkL`#1#?v)PrTbv$?5*J z1XjJ~k7dgsao~dU$XI_E7>xQ9KA}5!K|CH)LL8l3$T%V*AcQ+UExO5Fj>4bvl7!l+Vq75TD+8+NyClb-kJ;>t{Ml7wc&Sv`5x{XK=^Ks zX)r_vnI)Zk&I&4il^+svM%y}tNs==8<;OT^#uD3F;x&#nVT+2Ufi}X0$~@iqg*vfR z<3b*({hpJ(8%x2pvf!UR9^5RoNubegxK%*fBSk3x_eY9O4OT z1`=S#{X|$>w)P{@b91MvtpnP3q%~^nNg5K_Ml#=yeF=~b^UW={Vr*=U{3F0YdU^1OHcvJ|=@NCW_bzVy z(UHDr_Sv_Q%Xu<8?NOZ0!IvJ2JTadGZCJ}W$7yxR#*7yV<|uuza=ml*>9j`C1@N7@ zCgjw607^*zv+Vr6G>L6b?u7S!mcVNPqu%>#wLS2Z8Pc5?FW=kJ)MlNvr8L{Ut3@eK zsOe*aL?84{e0`IFAiVDQ#S)r3-tdd&drmIH|4vc=lB!(5@q7}Vdw;L4dGe-)6cQ_c zSbDtY3;{D_e9;sH@&-!>v#AaI)q1B%ARUstZHT-lpGUZvp3J z1MeU8u?`+X8I)6npXdJwxw(MB_@;#>{J1Il-b`QMNGPu7f>lF?;(A25*>rc8-PB=w z<8*KjoWOkATS^c=?JXzhoc2}{yiR+o2}!5DHH5m;-a5kYX>S7of7%P5yV$kxagMWV zp>$5DYoTmTp=+UhPOEF7V$Q5

ocpYoTf`xND($F0O0g(_B{9Ld{%d*Fx=FTh{`a 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 literal 0 HcmV?d00001