From f55ed1c3abff3fceca2bfde86794ff6379232b16 Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Wed, 22 Apr 2020 23:59:14 -0400 Subject: [PATCH 01/95] create def for multiple zarr files and added commentary/definition, which matches almost exactly that of ``xr.open_mfdatasets``, but withou ``engine`` --- xarray/backends/zarr.py | 154 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 154 insertions(+) diff --git a/xarray/backends/zarr.py b/xarray/backends/zarr.py index 973c167911e..f714368b7db 100644 --- a/xarray/backends/zarr.py +++ b/xarray/backends/zarr.py @@ -692,3 +692,157 @@ def maybe_chunk(name, var, chunks): variables = {k: maybe_chunk(k, v, chunks) for k, v in ds.variables.items()} return ds._replace_vars_and_dims(variables) + + +def open_mfzarr( + paths, + chunks=None + concat_dim="_not_supplied", + compat='no_conflicts', + preprocesses=None, + lock=None, + data_vars="all", + coords='different', + combine="_old_auto", + autoclose=None, + parallel=False, + join="outer", + attrs_file=None, + **kwargs, +): + """Open multiple zarr files as a single dataset. + + + If combine="by_coords" then the function ``combine_by_coords`` is used to + combine the datasets into one before returning the result, and if + combined="nested" then ``combine_nested`` is used. The filepaths must be + structured according to which combining function is used, the details of + which are given in the documentation ``combine_by_coords`` and + ``combine_nested``. Requires dask to be installed. Global attributes from + the ``attrs_file`` are used for the combined dataset. + + Parameters + ---------- + paths : str of sequence + Either a string glob in the form ``"path/to/my/files/*.zarr"``, + ``"path/to/my/files/*"`` (asumming the only directory is a zarr + store), or a explicit list of files to open. Paths can be given as + strings or as pathlib Paths. + chunks : int or dict, optional + Dictionary with keys given by dimension names and values given by + chunk sizes. In general, these should divide the dimensions of each + dataset. If int, chunk each dimension by ``chunks``. By default, + chunks will be chosen to load entire input files into memory at once. + This has major impact on performance: please see the full + documentation for more details [2]_. + concat_dim : str, or list of str, DataArray, Index or None, optional + Dimensions to concatenate files along. You only need to provide this + argument if any of the dimensions along which you want to concatenate + is not a dimension of the original dataset, e.g. you want to stack a + collection of 2D arrays along a third dimension. Set + ``concat_dim=[..., None, ...]`` explicitly to disable concatenation + along a particular dimension. + combine : {'by_coords', 'nested'}, optional + Whether ``xarray.combine_by_coords`` or ``xarray.combine_nested`` is + used to combine all the data. If this argument is not provided, + ``xarray.combine_by_coords`` is set by default. + compat : {'identical', 'equals', 'broadcast_equals', + 'no_conflicts','override'}, optional + String indicating how to compare variables of the same name for + potential conflicts when merging: + + * 'broadcast_equals': all values must be equal when variables are + broadcast against each other to ensure common dimensions. + * 'equals': all values and dimensions must be the same. + * 'identical': all values, dimensions and attributes must be the same. + * 'no_conflicts': only values which are not null in both datasets + must be equal. The returned dataset then contains the combination of + all non-null values. + * 'override': skip comparing and pick variable from first dataset. + + preprocess : callable, optional + If provided, call this function on each dataset prior to concatenation. + You can find the file-name from which each dataset was loaded in + ``ds.encoding[source]``. + lock: False or duck threading.Lock, optional + Resource lock to use when reading data from disk. Only relevant when + using dask or another form of parallelism. By default, appropriate + locks are chosen to safely read and write files with the currently + active dask scheduler. + data_vars : {'minimal', 'different', 'all' or list of str}, optional + These data variables will be concatenated together: + * 'minimal': Only data variables in which the dimension already + appears are included. + * 'different': Data variables which are not equal (ignoring + attributes) across all datasets are also concatenated (as well as + all for which dimension already appears). Beware: this option may + load the data payload of data variables into memory if they are not + already loaded. + * 'all': All data variables will be concatenated. + * list of str: The listed data variables will be concatenated, in + addition to the 'minimal' data variables. + coords : {'minimal', 'different', 'all' or list of str}, optional + These coordinate variables will be concatenated together: + * 'minimal': Only coordinates in which the dimension already appears + are included. + * 'different': Coordinates which are not equal (ignoring attributes) + across all datasets are also concatenated (as well as all for which + dimension already appears). Beware: this option may load the data + payload of coordinate variables into memory if they are not already + loaded. + * 'all': All coordinate variables will be concatenated, except + those corresponding to other dimensions. + * list of str: The listed coordinate variables will be concatenated, + in addition the 'minimal' coordinates. + parallel : bool, optional + If True, the open and preprocess steps of this function will be + performed in parallel using ``dask.delayed``. Default is False. + join : {'outer', 'inner', 'left', 'right', 'exact, 'override'}, optional + String indicating how to combine differing indexes + (excluding concat_dim) in objects + - 'outer': use the union of object indexes + - 'inner': use the intersection of object indexes + - 'left': use indexes from the first object with each dimension + - 'right': use indexes from the last object with each dimension + - 'exact': instead of aligning, raise `ValueError` when indexes to be + aligned are not equal + - 'override': if indexes are of same size, rewrite indexes to be + those of the first object with that dimension. Indexes for the same + dimension must have the same size in all objects. + attrs_file : str or pathlib.Path, optional + Path of the file used to read global attributes from. + By default global attributes are read from the first file provided, + with wildcard matches sorted by filename. + **kwargs : optional + Additional arguments passed on to :py:func:`xarray.open_zarr`. + + + Returns + ------- + xarray.Dataset + Notes + ----- + ``open_mfdataset`` opens files with read-only access. When you modify + values + of a Dataset, even one linked to files on disk, only the in-memory copy you + are manipulating in xarray is modified: the original file on disk is never + touched. + See Also + -------- + combine_by_coords + combine_nested + auto_combine + open_dataset + References + ---------- + .. [1] http://xarray.pydata.org/en/stable/dask.html + .. [2] http://xarray.pydata.org/en/stable/dask.html#chunking-and-performance + """ + pass + + + + + + + From 49f6512e66da0bd2bb1ddd4c6294c762ac288b25 Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Thu, 23 Apr 2020 00:00:08 -0400 Subject: [PATCH 02/95] just as with ``xr.open_mfdatasets``, identify the paths as local directory paths/strings --- xarray/backends/zarr.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/xarray/backends/zarr.py b/xarray/backends/zarr.py index f714368b7db..027eeb48d82 100644 --- a/xarray/backends/zarr.py +++ b/xarray/backends/zarr.py @@ -838,6 +838,18 @@ def open_mfzarr( .. [1] http://xarray.pydata.org/en/stable/dask.html .. [2] http://xarray.pydata.org/en/stable/dask.html#chunking-and-performance """ + if isinstance(paths, str): + if is_remote_uri(paths): + raise ValueError( + "cannot do wild-card matching for paths that are remote URLs: " + "{!r}. Instead, supply paths as an explicit list of strings.".format( + paths + ) + ) + paths = sorted(glob(paths)) + else: + paths = [str(p) if isinstance(p, Path) else p for p in paths] + pass From f35a3e57c2e235f1707ed95cbcba0aec074d6dcc Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Thu, 23 Apr 2020 00:00:53 -0400 Subject: [PATCH 03/95] added error if no path --- xarray/backends/zarr.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/xarray/backends/zarr.py b/xarray/backends/zarr.py index 027eeb48d82..b2417df7508 100644 --- a/xarray/backends/zarr.py +++ b/xarray/backends/zarr.py @@ -849,6 +849,9 @@ def open_mfzarr( paths = sorted(glob(paths)) else: paths = [str(p) if isinstance(p, Path) else p for p in paths] + if not paths: + raise OSError("no files to open") + pass From 9f728aae1904fb05ffa9fae581448e55af6f4990 Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Thu, 23 Apr 2020 02:47:36 -0400 Subject: [PATCH 04/95] finished copying similar code from `xr.open_mfdatasets` --- xarray/backends/zarr.py | 104 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 101 insertions(+), 3 deletions(-) diff --git a/xarray/backends/zarr.py b/xarray/backends/zarr.py index b2417df7508..c84551ac045 100644 --- a/xarray/backends/zarr.py +++ b/xarray/backends/zarr.py @@ -694,6 +694,8 @@ def maybe_chunk(name, var, chunks): return ds._replace_vars_and_dims(variables) + + def open_mfzarr( paths, chunks=None @@ -852,12 +854,108 @@ def open_mfzarr( if not paths: raise OSError("no files to open") + # If combine='by_coords' then this is unnecessary, but quick. + # If combine='nested' then this creates a flat list which is easier to + # iterate over, while saving the originally-supplied structure as "ids" + if combine == "nested": + if str(concat_dim) == "_not_supplied": + raise ValueError("Must supply concat_dim when using " + "combine='nested'") + else: + if isinstance(concat_dim, (str, DataArray)) or concat_dim is None: + concat_dim = [concat_dim] + combined_ids_paths = _infer_concat_order_from_positions(paths) + ids, paths = (list(combined_ids_paths.keys()), + list(combined_ids_paths.values())) + + # provide with open_kwargs here specific to zarr stores + open_kwargs = dict( + chunks=chunks or {}, lock=lock, autoclose=autoclose, **kwargs + ) - pass - - + if parallel: + import dask + # wrap the open_dataset, getattr, and preprocess with delayed + open_ = dask.delayed(open_zarr) + getattr_ = dask.delayed(getattr) + if preprocess is not None: + preprocess = dask.delayed(preprocess) + else: + open_ = open_zarr + getattr_ = getattr + datasets = [open_(p, **open_kwargs) for p in paths] + file_objs = [getattr_(ds, "_file_obj") for ds in datasets] + if preprocess is not None: + datasets = [preprocess(ds) for ds in datasets] + if parallel: + # calling compute here will return the datasets/file_objs lists, + # the underlying datasets will still be stored as dask arrays + datasets, file_objs = dask.compute(datasets, file_objs) + # Combine all datasets, closing them in case of a ValueError + try: + if combine == "_old_auto": + # Use the old auto_combine for now + # Remove this after deprecation cycle from #2616 is complete + basic_msg = dedent( + """\ + In xarray version 0.15 the default behaviour of `open_mfdataset` + will change. To retain the existing behavior, pass + combine='nested'. To use future default behavior, pass + combine='by_coords'. See + http://xarray.pydata.org/en/stable/combining.html#combining-multi + """ + ) + warnings.warn(basic_msg, FutureWarning, stacklevel=2) + + combined = auto_combine( + datasets, + concat_dim=concat_dim, + compat=compat, + data_vars=data_vars, + coords=coords, + join=join, + from_openmfds=True, + ) + elif combine == "nested": + # Combined nested list by successive concat and merge operations + # along each dimension, using structure given by "ids" + combined = _nested_combine( + datasets, + concat_dims=concat_dim, + compat=compat, + data_vars=data_vars, + coords=coords, + ids=ids, + join=join, + ) + elif combine == "by_coords": + # Redo ordering from coordinates, ignoring how they were ordered + # previously + combined = combine_by_coords(datasets, + compat=compat, data_vars=data_vars, + coords=coords, join=join) + else: + raise ValueError( + "{} is an invalid option for the keyword argument" + " ``combine``".format(combine) + ) + except ValueError: + for ds in datasets: + ds.close() + raise + + combined._file_obj = _MultiFileCloser(file_objs) + + # read global attributes from the attrs_file or from the first dataset + if attrs_file is not None: + if isinstance(attrs_file, Path): + attrs_file = str(attrs_file) + combined.attrs = datasets[paths.index(attrs_file)].attrs + else: + combined.attrs = datasets[0].attrs + return combined From 8d0a8441bb58786828f43952732dbdd5645d88a1 Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Thu, 23 Apr 2020 02:54:09 -0400 Subject: [PATCH 05/95] remove blank lines --- xarray/backends/zarr.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/xarray/backends/zarr.py b/xarray/backends/zarr.py index c84551ac045..7e26fc267ca 100644 --- a/xarray/backends/zarr.py +++ b/xarray/backends/zarr.py @@ -694,9 +694,7 @@ def maybe_chunk(name, var, chunks): return ds._replace_vars_and_dims(variables) - - -def open_mfzarr( +def open_mzarr( paths, chunks=None concat_dim="_not_supplied", From b3b0f1d77dfc2065c37bdd778ca9e725733407bc Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Thu, 23 Apr 2020 03:05:52 -0400 Subject: [PATCH 06/95] fixed typo --- xarray/backends/zarr.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xarray/backends/zarr.py b/xarray/backends/zarr.py index 7e26fc267ca..a99d8097d45 100644 --- a/xarray/backends/zarr.py +++ b/xarray/backends/zarr.py @@ -696,7 +696,7 @@ def maybe_chunk(name, var, chunks): def open_mzarr( paths, - chunks=None + chunks=None, concat_dim="_not_supplied", compat='no_conflicts', preprocesses=None, From 2221943d76b086731a2574524e02d250421ae4ef Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Thu, 23 Apr 2020 03:21:54 -0400 Subject: [PATCH 07/95] added ``xr.open_mzarr()`` to the list of available modules to call --- xarray/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xarray/__init__.py b/xarray/__init__.py index 0fead57e5fb..02b8e941ee8 100644 --- a/xarray/__init__.py +++ b/xarray/__init__.py @@ -10,7 +10,7 @@ save_mfdataset, ) from .backends.rasterio_ import open_rasterio -from .backends.zarr import open_zarr +from .backends.zarr import open_zarr, open_mzarr from .coding.cftime_offsets import cftime_range from .coding.cftimeindex import CFTimeIndex from .conventions import SerializationWarning, decode_cf From ac35e7cca30c984f2d8f3c5b149fcee2fee4a045 Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Thu, 23 Apr 2020 03:26:55 -0400 Subject: [PATCH 08/95] imported missing function --- xarray/backends/zarr.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xarray/backends/zarr.py b/xarray/backends/zarr.py index a99d8097d45..e9fad27e870 100644 --- a/xarray/backends/zarr.py +++ b/xarray/backends/zarr.py @@ -5,7 +5,7 @@ from .. import coding, conventions from ..core import indexing from ..core.pycompat import integer_types -from ..core.utils import FrozenDict, HiddenKeyDict +from ..core.utils import FrozenDict, HiddenKeyDict, is_remote_uri from ..core.variable import Variable from .common import AbstractWritableDataStore, BackendArray, _encode_variable_name From 64654f396a984944c156aee902dec4e636d898dd Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Thu, 23 Apr 2020 03:29:27 -0400 Subject: [PATCH 09/95] imported missing glob --- xarray/backends/zarr.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xarray/backends/zarr.py b/xarray/backends/zarr.py index e9fad27e870..b7241d4a7d9 100644 --- a/xarray/backends/zarr.py +++ b/xarray/backends/zarr.py @@ -1,7 +1,7 @@ import warnings import numpy as np - +from glob import glob from .. import coding, conventions from ..core import indexing from ..core.pycompat import integer_types From d5a5cef303c792facefca49ae85f57901bd711dc Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Thu, 23 Apr 2020 03:36:53 -0400 Subject: [PATCH 10/95] imported function from backend.api --- xarray/backends/zarr.py | 1 + 1 file changed, 1 insertion(+) diff --git a/xarray/backends/zarr.py b/xarray/backends/zarr.py index b7241d4a7d9..95f0e51aaa0 100644 --- a/xarray/backends/zarr.py +++ b/xarray/backends/zarr.py @@ -8,6 +8,7 @@ from ..core.utils import FrozenDict, HiddenKeyDict, is_remote_uri from ..core.variable import Variable from .common import AbstractWritableDataStore, BackendArray, _encode_variable_name +from .backends.api import _infer_concat_order_from_positions # need some special secret attributes to tell us the dimensions DIMENSION_KEY = "_ARRAY_DIMENSIONS" From 4c0ef19de07c89c2c4f00ac6cf66c97811b98063 Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Thu, 23 Apr 2020 03:39:02 -0400 Subject: [PATCH 11/95] imported function to facilitate mzarr --- xarray/backends/zarr.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/xarray/backends/zarr.py b/xarray/backends/zarr.py index 95f0e51aaa0..cb6e61b028a 100644 --- a/xarray/backends/zarr.py +++ b/xarray/backends/zarr.py @@ -2,13 +2,14 @@ import numpy as np from glob import glob + from .. import coding, conventions from ..core import indexing from ..core.pycompat import integer_types from ..core.utils import FrozenDict, HiddenKeyDict, is_remote_uri from ..core.variable import Variable from .common import AbstractWritableDataStore, BackendArray, _encode_variable_name -from .backends.api import _infer_concat_order_from_positions +from api import _infer_concat_order_from_positions # need some special secret attributes to tell us the dimensions DIMENSION_KEY = "_ARRAY_DIMENSIONS" From d158c21c4f8804d61eef6642899b44f39385d396 Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Thu, 23 Apr 2020 03:41:02 -0400 Subject: [PATCH 12/95] correctly imported functions from core to mzarr --- xarray/backends/zarr.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/xarray/backends/zarr.py b/xarray/backends/zarr.py index cb6e61b028a..c4b64072d04 100644 --- a/xarray/backends/zarr.py +++ b/xarray/backends/zarr.py @@ -9,8 +9,12 @@ from ..core.utils import FrozenDict, HiddenKeyDict, is_remote_uri from ..core.variable import Variable from .common import AbstractWritableDataStore, BackendArray, _encode_variable_name -from api import _infer_concat_order_from_positions - +from ..core.combine import ( + _infer_concat_order_from_positions, + _nested_combine, + auto_combine, + combine_by_coords, +) # need some special secret attributes to tell us the dimensions DIMENSION_KEY = "_ARRAY_DIMENSIONS" From 51714201b75cff005edb6d88e18c2c539527272a Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Thu, 23 Apr 2020 03:43:48 -0400 Subject: [PATCH 13/95] imported to use on open_mzarr --- xarray/backends/zarr.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/xarray/backends/zarr.py b/xarray/backends/zarr.py index c4b64072d04..977c5b0a38a 100644 --- a/xarray/backends/zarr.py +++ b/xarray/backends/zarr.py @@ -15,6 +15,8 @@ auto_combine, combine_by_coords, ) +from ..core.dataarray import DataArray + # need some special secret attributes to tell us the dimensions DIMENSION_KEY = "_ARRAY_DIMENSIONS" From e1e51bb2258977c70a10242d7484b10f0b8b343a Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Thu, 23 Apr 2020 03:46:12 -0400 Subject: [PATCH 14/95] removed lock and autoclose since not taken by ``open_zarr`` --- xarray/backends/zarr.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/xarray/backends/zarr.py b/xarray/backends/zarr.py index 977c5b0a38a..ea330676c7d 100644 --- a/xarray/backends/zarr.py +++ b/xarray/backends/zarr.py @@ -708,11 +708,9 @@ def open_mzarr( concat_dim="_not_supplied", compat='no_conflicts', preprocesses=None, - lock=None, data_vars="all", coords='different', combine="_old_auto", - autoclose=None, parallel=False, join="outer", attrs_file=None, @@ -876,7 +874,7 @@ def open_mzarr( # provide with open_kwargs here specific to zarr stores open_kwargs = dict( - chunks=chunks or {}, lock=lock, autoclose=autoclose, **kwargs + chunks=chunks or {}, **kwargs ) if parallel: From b6bf2cf234520c79b1448c28fd7ec768806f403c Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Thu, 23 Apr 2020 03:48:49 -0400 Subject: [PATCH 15/95] fixed typo --- xarray/backends/zarr.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xarray/backends/zarr.py b/xarray/backends/zarr.py index ea330676c7d..1721b13bc41 100644 --- a/xarray/backends/zarr.py +++ b/xarray/backends/zarr.py @@ -707,7 +707,7 @@ def open_mzarr( chunks=None, concat_dim="_not_supplied", compat='no_conflicts', - preprocesses=None, + preprocess=None, data_vars="all", coords='different', combine="_old_auto", From 3bc4be8f1df4d4f90e71250a8f87daaeda6be364 Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Thu, 23 Apr 2020 04:18:17 -0400 Subject: [PATCH 16/95] class is not needed since zarr stores don`t remain open --- xarray/backends/zarr.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xarray/backends/zarr.py b/xarray/backends/zarr.py index 1721b13bc41..0c2057689e7 100644 --- a/xarray/backends/zarr.py +++ b/xarray/backends/zarr.py @@ -952,7 +952,7 @@ def open_mzarr( ds.close() raise - combined._file_obj = _MultiFileCloser(file_objs) + # combined._file_obj = _MultiFileCloser(file_objs) # read global attributes from the attrs_file or from the first dataset if attrs_file is not None: From a79b1254410933fe78d42682ce1e33735c644f7e Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Thu, 23 Apr 2020 04:28:10 -0400 Subject: [PATCH 17/95] removed old behavior --- xarray/backends/zarr.py | 64 ++++++++++++++++++++--------------------- 1 file changed, 31 insertions(+), 33 deletions(-) diff --git a/xarray/backends/zarr.py b/xarray/backends/zarr.py index 0c2057689e7..b2fbd6261c4 100644 --- a/xarray/backends/zarr.py +++ b/xarray/backends/zarr.py @@ -901,41 +901,39 @@ def open_mzarr( # Combine all datasets, closing them in case of a ValueError try: - if combine == "_old_auto": - # Use the old auto_combine for now - # Remove this after deprecation cycle from #2616 is complete - basic_msg = dedent( - """\ - In xarray version 0.15 the default behaviour of `open_mfdataset` - will change. To retain the existing behavior, pass - combine='nested'. To use future default behavior, pass - combine='by_coords'. See - http://xarray.pydata.org/en/stable/combining.html#combining-multi - """ - ) - warnings.warn(basic_msg, FutureWarning, stacklevel=2) - - combined = auto_combine( - datasets, - concat_dim=concat_dim, - compat=compat, - data_vars=data_vars, - coords=coords, - join=join, - from_openmfds=True, - ) - elif combine == "nested": + # if combine == "_old_auto": + # # Use the old auto_combine for now + # # Remove this after deprecation cycle from #2616 is complete + # basic_msg = dedent( + # """\ + # In xarray version 0.15 the default behaviour of `open_mfdataset` + # will change. To retain the existing behavior, pass + # combine='nested'. To use future default behavior, pass + # combine='by_coords'. See + # http://xarray.pydata.org/en/stable/combining.html#combining-multi + # """ + # ) + # warnings.warn(basic_msg, FutureWarning, stacklevel=2) + + # combined = auto_combine( + # datasets, + # concat_dim=concat_dim, + # compat=compat, + # data_vars=data_vars, + # coords=coords, + # join=join, + # from_openmfds=True, + # ) + if combine == "nested": # Combined nested list by successive concat and merge operations # along each dimension, using structure given by "ids" - combined = _nested_combine( - datasets, - concat_dims=concat_dim, - compat=compat, - data_vars=data_vars, - coords=coords, - ids=ids, - join=join, - ) + combined = _nested_combine(datasets, + concat_dims=concat_dim, + compat=compat, + data_vars=data_vars, + coords=coords, + ids=ids, + join=join) elif combine == "by_coords": # Redo ordering from coordinates, ignoring how they were ordered # previously From 2d3bbb523f6791c2ac414c207ea112cab187998f Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Thu, 23 Apr 2020 04:29:23 -0400 Subject: [PATCH 18/95] set default --- xarray/backends/zarr.py | 25 +------------------------ 1 file changed, 1 insertion(+), 24 deletions(-) diff --git a/xarray/backends/zarr.py b/xarray/backends/zarr.py index b2fbd6261c4..ee82ccb136f 100644 --- a/xarray/backends/zarr.py +++ b/xarray/backends/zarr.py @@ -710,7 +710,7 @@ def open_mzarr( preprocess=None, data_vars="all", coords='different', - combine="_old_auto", + combine="by_coords", parallel=False, join="outer", attrs_file=None, @@ -901,29 +901,6 @@ def open_mzarr( # Combine all datasets, closing them in case of a ValueError try: - # if combine == "_old_auto": - # # Use the old auto_combine for now - # # Remove this after deprecation cycle from #2616 is complete - # basic_msg = dedent( - # """\ - # In xarray version 0.15 the default behaviour of `open_mfdataset` - # will change. To retain the existing behavior, pass - # combine='nested'. To use future default behavior, pass - # combine='by_coords'. See - # http://xarray.pydata.org/en/stable/combining.html#combining-multi - # """ - # ) - # warnings.warn(basic_msg, FutureWarning, stacklevel=2) - - # combined = auto_combine( - # datasets, - # concat_dim=concat_dim, - # compat=compat, - # data_vars=data_vars, - # coords=coords, - # join=join, - # from_openmfds=True, - # ) if combine == "nested": # Combined nested list by successive concat and merge operations # along each dimension, using structure given by "ids" From f7cf58010cce9ff7ea8cb1ecb38b4880943aa76c Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Sat, 25 Apr 2020 00:13:18 -0400 Subject: [PATCH 19/95] listed open_mzarr --- xarray/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/xarray/__init__.py b/xarray/__init__.py index 02b8e941ee8..3b4673cbbff 100644 --- a/xarray/__init__.py +++ b/xarray/__init__.py @@ -65,6 +65,7 @@ "open_mfdataset", "open_rasterio", "open_zarr", + "open_mzarr", "polyval", "register_dataarray_accessor", "register_dataset_accessor", From 53c86232d55de7c619c83b46cc410e95c3ac3560 Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Sat, 25 Apr 2020 00:14:43 -0400 Subject: [PATCH 20/95] removed unused imported function --- xarray/backends/zarr.py | 1 - 1 file changed, 1 deletion(-) diff --git a/xarray/backends/zarr.py b/xarray/backends/zarr.py index ee82ccb136f..2324ed55c37 100644 --- a/xarray/backends/zarr.py +++ b/xarray/backends/zarr.py @@ -12,7 +12,6 @@ from ..core.combine import ( _infer_concat_order_from_positions, _nested_combine, - auto_combine, combine_by_coords, ) from ..core.dataarray import DataArray From 34d755e25513829fe5edf51b7b301169ea4f43df Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Sat, 25 Apr 2020 00:22:40 -0400 Subject: [PATCH 21/95] imported Path - hadn`t before --- xarray/backends/zarr.py | 1 + 1 file changed, 1 insertion(+) diff --git a/xarray/backends/zarr.py b/xarray/backends/zarr.py index 2324ed55c37..2042d8ff23b 100644 --- a/xarray/backends/zarr.py +++ b/xarray/backends/zarr.py @@ -9,6 +9,7 @@ from ..core.utils import FrozenDict, HiddenKeyDict, is_remote_uri from ..core.variable import Variable from .common import AbstractWritableDataStore, BackendArray, _encode_variable_name +from pathlib import Path from ..core.combine import ( _infer_concat_order_from_positions, _nested_combine, From b39b37ecb934aeca1a01ae917e733c5262c0ef8d Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Sat, 25 Apr 2020 01:37:04 -0400 Subject: [PATCH 22/95] remove unncessesary comments --- xarray/backends/zarr.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/xarray/backends/zarr.py b/xarray/backends/zarr.py index 2042d8ff23b..5a3d15a123b 100644 --- a/xarray/backends/zarr.py +++ b/xarray/backends/zarr.py @@ -880,7 +880,7 @@ def open_mzarr( if parallel: import dask - # wrap the open_dataset, getattr, and preprocess with delayed + # wrap the open_zarr, getattr with delayed open_ = dask.delayed(open_zarr) getattr_ = dask.delayed(getattr) if preprocess is not None: @@ -927,8 +927,6 @@ def open_mzarr( ds.close() raise - # combined._file_obj = _MultiFileCloser(file_objs) - # read global attributes from the attrs_file or from the first dataset if attrs_file is not None: if isinstance(attrs_file, Path): From 276006a6b736be277f4c65b8fd2afea0e8291507 Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Sat, 25 Apr 2020 01:39:32 -0400 Subject: [PATCH 23/95] modified comments --- xarray/backends/zarr.py | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/xarray/backends/zarr.py b/xarray/backends/zarr.py index 5a3d15a123b..498377a1e63 100644 --- a/xarray/backends/zarr.py +++ b/xarray/backends/zarr.py @@ -770,11 +770,6 @@ def open_mzarr( If provided, call this function on each dataset prior to concatenation. You can find the file-name from which each dataset was loaded in ``ds.encoding[source]``. - lock: False or duck threading.Lock, optional - Resource lock to use when reading data from disk. Only relevant when - using dask or another form of parallelism. By default, appropriate - locks are chosen to safely read and write files with the currently - active dask scheduler. data_vars : {'minimal', 'different', 'all' or list of str}, optional These data variables will be concatenated together: * 'minimal': Only data variables in which the dimension already @@ -828,7 +823,7 @@ def open_mzarr( xarray.Dataset Notes ----- - ``open_mfdataset`` opens files with read-only access. When you modify + ``open_zarr`` opens files with read-only access. When you modify values of a Dataset, even one linked to files on disk, only the in-memory copy you are manipulating in xarray is modified: the original file on disk is never @@ -837,7 +832,6 @@ def open_mzarr( -------- combine_by_coords combine_nested - auto_combine open_dataset References ---------- From 6f04be67e0bd5416b1182d7d705ba6e1795a1d89 Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Sat, 25 Apr 2020 10:35:36 -0400 Subject: [PATCH 24/95] isorted zarr --- default.profraw | Bin 0 -> 1026072 bytes xarray/backends/zarr.py | 12 ++++++------ 2 files changed, 6 insertions(+), 6 deletions(-) create mode 100644 default.profraw diff --git a/default.profraw b/default.profraw new file mode 100644 index 0000000000000000000000000000000000000000..feaceb62071d513f8872edbe98c1de147569883e GIT binary patch literal 1026072 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.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%0A7cAH3vU?NSmZ9PiEVlKd-d7@@B(GJIve7q3gr? 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

@qD5F z0QqeD<(ZuTDJr(fxRh?dvP^JkfkXazh^wPwnE?M@OjMp|{HP7(MV{&cOe&mOY^RT`zD-6*-7PqjsrS|IH zbgEV$0r{cn;XL%8uXFN@4dh(!_kSOD@cr*?$PZl~=b_&w{j1S%xp0h8w#tC)`>Wx) zKdOhJ#G+qdy(_p`m^gfcYx5Y*IR6LUDrRiNvxW5G{UC?G^W_HlD8#cZMe_@FU{u#fJH;=`FD+D}4x zvTSFMSvvSpK|EcIAJ-ihju?`3q~Lzw2vpD9$+$kmGmjNvdp?h~1-`FMMm*0L=OLax zDd}^U$KLBSdb*C<*wm^@K|Dtr=RyDRrqZ#KLXRlZqZM@?gf@7!q4*O`a31Pmkz-i- z_ENt}xc`%g^ch0&fqu(8p?zs#FE2BF+@>iZ)z%l2fHO2xIe)mQFTU9hMC z=f%1Ynp20Hb*E|WN=%VEG@6dicL~=stiNf#de0<&N-f*ip!4VORC)nFQnddWNT4o# z#ZIki_c8_hFy|Lxas+!Z`f$GGgyviSIqR*zL;cgl_=oQybzzOTCQiKg48!pX$_$qD*7c) zNBeF5cs#$*pKtE@s-N-6KH|;IfH~K~{&*76{)c6c^RWIt-Z+wW#r)6omxnvOSFX|3 zAftNVy~h1RKZ$Ft{vng0=U5xgSsuSQ{Y%7utfvlb+-?jRcL=GtPkg_x77C9 z7IJ1To2a01sogPY0Z&Z*!+v1ZaoVP(6f1A|{vGS0AivbxcsybKdXOgRVzJEkDAW)8 zoPZ|_@lZco3>}>__cji^pIWe9ToCZwTev>-LkaU!-#6c|xzYdr+|ye9=c9^|zVLX# zPkzVgSJ_Vw?|-J<5BLAD&It5{dC;#pQ(0es#xbaA`Rfjw?aLjxV)S9ZQFq(Lqx%%i z7WA3_p>K5PQ(wy~wdiwOMm)J>W-0fA&`E7o|q1A2O;R zarwSd0h#4o0^je7=|%;k+w2gM^>Esua!A}(GC#2Ij z4}S98&l;LJzjo};@8Iz)9q}|F9_H^;-%Dh>mQ~q)TSs~*$e75GQGBROTp!~9`7Ys! zf=6Qt_$fyEWFa2>sHc5%D7#vHQ#OKMwmWwhvnK`R>k_UH<839U$~w32?}YP9Oz?jS z=fVG&1-@;!J7hkB9|qznLgNKLMdzPoZMw%C`2OQyd`PJNnJm%zdi4NxB58*uQKWS!KiaPFAL&xtbs6X&7;yjEu^tz8Kqa*I|T!LPorJ8y+2jX)S z=i&TV$Lz;R4}ymC-c(h*uD;$jl7jqmQgI%}`>1#3*fq}kyZevV2IEOX`h21IL%#Mo zq!9nQzJ37DGl@d|iWDtce|2GGkKjD4FP{`Pf0cMsc?0?z z9p#H#g!ACXtaaoU$HD-0s2@*QFNEeV#B+We%^|edH5c@0h$j|{*58))*YNVLSLuhE z+9FOHXc=)>g8Z_s;ym2H;m%rY^j6)Paa-$F&pPkLV|!43896u)-)~yxV_(p*?487t zy4Uk389(1j60=^wenxA4#0*C*9q)z+#myn1G8(+IXg&%p0I+|HCR3mB($khb+}LI& z?Va;43h9&baX;WcF!h->mbd6@5emS2#65q!)F;>m%0iHYa2N2IHZ zq$=h@zA_NcIgjf@zRKzx6t+wskpTK^$X5x@Lp@ktuU`5hKeqJdAga)ra&AY8u9` zW|Y}1{A6HQpDCJ$^{(Yj_ORlyIpYWNm9|5U5XBbFL;M>_S5HMmORLD{65k&7*LXm> z_J8xFwmm;hvmZ{ zXO?vTeO~`JU&gsPX4lfcESdXTy6*LcIx+r(&#qZ{NwGy?Z-2d=>e3?+C}Mcn|L>bq zxAgPn2L(G@le9lNNM|wbi1q{Z@Wo@}$+RxnEZnNm$sI&QpM1V-Tp={ z)Q+-yOfm6<^8=;pgLH$8)fy!8m1ai9`!A(m7463qtv9OL3Jw(?nb~emK{6=^Mrw1! z%wMP)FVehpLsg(dYV$sW;GnT<6?*$ns@t z+(JRXsABwpKG844(YA4c-m?XE$pg2+t{aLYpNu`MC&oJI2WThFy(+~R1lyJ%OzFc&VDkeTK zUzS$N^#n|ta2=j6rzeJo_;~P{_iVl!b6`I}Me8GjgRhUUKbidg^-<~wH-q)cVLPk} z&fLmC>!Z+ii~xRCT#X@bTpQ#RcR@fT!}=?9z6k1J!IFzRPcFId*8e`@!RIr3B3_*S z%Ez-Ro~$ap3Fo&X5Kj^E4}LCKuT0#oVtxSPL;sKXd?f^Lh#&Fe(pkc|^)*e$8a%HH z<|9iD-w(j?&bFEN4`q#R|Z=rByH<4%*M~gm|bo z>)_$555=ku-0wH&KLYuui1BaDwA`yg7Z=RkNxI4Pi%CygOrBV-!b4@#hlpdVu2*!rtb@zUYpi*63#o7=725^AOK2 z!~MX1X?|j=|6P~r>wfe4YTxWFPR+ZNYc(MM?4POuV8QfiUB9fyKf$~Kn z<9>j5W9zm~@6x{(GkW|R-+w1%?8U4v(61zB*~r96vppf6p0NKE6VHP?kMq*yMxFEC zH$SBUq}^GS&m<_XhJDh4eYK_;{gy&bH{P=DJG80u!_qQ=0ci0|` zD1z}4k$<+B_;+Yea9-){R0(_!n!nVSxIX0fZwxOyTypOt;4`3KiQ$zx+TPAQzde5c z!!`%9%JVNQw4Wp?;q?aBk48S-eevF%jvGEfUu+#dniTS2ehI}N`WxTnnQHw{lZdQ3 z{gjofsAoOVdd+Ia{lk3u%-@}G|A_s0Sda8zz6)5eS4`ea>4X6k1p9bGeYe&CNe-c%BlWuc@Bt{?n4~zfRG1uG7 z3GT;c-xlo${QsJ*lb5SwJ{x%cfACu*cH6AU|Goft;(zS_y>3}gRenC-1bFU$=%+o4 z*z{e=-Vk{5f9Th1-SNKvP5n6V)c@dhe-*yVlxj11lY9A^n2gJa)*QrUiaeDu}XAMd6~TCT1a!^8T1_kp?muN9j< zT&^)(sitz~aF3Y%B-FFogU@61f4>@?<&w(UtUhLAh8P}>U(O~(emuUm<}1`2T}*tS z-X`tsNubw9wvCOvbKd>@(jyEp$M0GwV1GA7Okji;X52K`60zF-`T^5i(eZ)n-E*YZ zr}X{`yV4*XsoSo>*US)eJP7{X(%(d9KYua!euROZS0yH2&<`z6JDYC&xuF)u8}T3G z%@6LHz#5%DbMSfZn??|LV$O#^f79Ba`O~=RgWaqtrD=qQt?e1*g7H$U@O}lyXWQ&2 zx>|l-=MB%}W!w|+JXf3t|K~sUUA(SS+&k^FmKUH<~RQ^wf%CMNSHS6baSZ#L&@nJaO`cMxiAD5VA<}a^=`0xV)_ZQ2ns1aUT4q9*}>3Z}#p8 z;Cs;dRgM_`7C({^{CJkdnqymoqRq2An26^I@!+TYv@~XVN4 z*K_la{_k^1!~7D`hxP0HqAjWFF+Kz5O9y!s6n~Zlt`GdMiGNrJG(6w_2)F9kIbK#> z59xC#I1l~&{_zPDwEo(}!2Ni1@FT>-{`{@t%Am?I`_cO~P7mvOB&aubD6S9j>|DIo z#VkAc0<2%;Cjy=##DjmCZF8-!kURAl^Sv!rdc+w+cU7#Ix4nJdC$eTIESq(Z)>RGk{+!ns>X}^u*{!1QX&Dg?Ne(5AoS-nW{q2J-2i0Ap>`mkTxcwxa=$*B%Q`z8NM6i*=@^v~@{mQskZGzI-A#Iu))*1vLk zZS@89w1M}j4aSFp{IF>_5AjL0pBPfQe&jb8FA4EfAs+lp*FF5ldUL3BA9?$0#_ms{ z{09R6L~mRl##`gA^tw9aSz~*CUS8_i8@DnLPhXAmQ2!Z^D3bB^L2mGTykx{vgm_rL z{u->`o3B?h=9(^DCg-u)X6k+9XF0ClUn+w?3kvt`y-{$l)$XrC!L8`#w*SbZHcai#94GsP%hgr&G2 z=;!I5Zti%$r)g=BBYid%=V89ocJByy^Wn%v;}v6r4zwh>=s`Vr;5_K> z(+O$4@nwa@j7QtG#}N8V$Vi{+hVziGxw7)tgI()(Es0^AcUurSj)~S&hLC^gpVf=^ zo_jS@dx4fi#&oAJVo5RLh2sO)Pi@D<|9IfCPZIh$4f!Do`GJ1!8nFAA19!IUwcidl zp?7r8^`P<6m*D=PA3oeLI{6P@cT@zgmfH}hUz5QV8y;4}^I#cBpA;sV?`pKTu*oqawUK;*Ie!)HQ3TSbZ^L=;;}k$^ zVfjs_&*#a-uK2Vvnu>U$kbm$ab1&(J`kUmX_ z2S0>;_T}DBW-TTS?DzVMCaO{3hkg@}56pMRj=5`78a|Jlw)=I-@%UxU_K4@)zD zx%4lY@<;2a;RmL8sc&5LivJqvU&nd4zk(ZKzI|$w{O2=I?pVHff7YiM@%$2;hk7$e zR(O9y&zle*qwxOpX?^8n#1n;h81Hb+J(FE|(;s*be7SO9yoe_k;`%V&&H!23| zw!ISgCkgT3|E2Yg%UyNTh!9U6;(58aKE!k8Cch6)_C~e$&zHgbAGnC83-OTO6W8tL)(ZS{h2jtO+%^3Cm*3h^4>kMe*QNe? zV4yYH%7kPRdFu8By6R;;!KB``z&q>93IKNHK+#QveM>@A8_`80qmFH{X zO94+y!+BW0_zb7r_v*$i^qV$k>W()C!~BsSRu;}fz3J96-(CF{d2IfrMYccha&z?% z&&$MlnD3UO+5nLbq6J)~d zYgOm&T%?vX&u!e;?6w90PZH9H{-FFTN0+Ic@?%5ULCcG(2|uGyeCX$JeK`OBcaDl& zR!nvstS=m-&%c86P@f;Zhi}u2d)c{Id(VS`ev*NBt`HCVy@lTmhv}5>47&7jPFDEw z$620;r(MSNVgIv6*I;vx+$2MH#ZM>yCZsV*pr4NOFkY|6QgWY9e|$gSW#C5z@x+Tb z5AnApx9vRQ61(*KRmJh~?z-dsQN58?vIdTBLB=-oQM5Jcid_9InTfT>enAkIRo+3V>l1` zu5TY~ux}nWbbme_;u9m9?jv}1Me~;=G=IUrl=rtW3tYL?g6ix)zlV5&5D)sp9LGnGd2y~b4*egB z5zjh|`vLvaGE(0c#-u?x5!i^Q3-O@8U{QQSR#)Rb&}Si@A0=Af=)}mUAAi(pga2g2 z^MrWNmw6rQb;oyKGw@8rbHwlw-yXfnT76Qtu%_w&F=U)Ks~Yw5-MAlk|8LEx2QjHL zFAu%{k^D@+Q-pZ%leuBxThF-jSS-d^{u0)V=4P@wSZCd(*u8g*`46%vCk(G zkUo=(hj`wrj(Y1aEaU@z$k1Ls@sFBc#vZ4nvJ?Ce5l`mg!H)xJXPSqW{^?PEM!PD3 zp!$iE4~!nXy)YkrxP6%HRHr!ten^O?aq-~)t>g!hJO_=UQ=txFp`(YWl#d+!5H_w4 z^=*n!`C3}nkH!o|b*{Uo~ncZuDSzx$nk{;4buPvGLg|FTaD4$k;G zr~>|Dn>jqI8}|eLdj_(nN@VH&y&w9|PZ-jtbMfHE|JrBOve1Evz?V01^r?LK#cs0a zU+*RO15ZTp)Z)VrmLJH}Yx>kJ6i;#&?jPo_(?Tj2O`7t0UM)%AHSu*% zpBCb2?Kltl5aBoycX{DA2E=m^@$7FnKNio3TPIcZzkPyuvJubZ;vt@EUr3fd@4UGZ z_;&Eahrg+?s{ME~?FhuD9`RHz9^x<4^ypm7%o|<6mm^+_4`1m^4qy{k#)BUQ;t5#CeFP{M2L1gXSim zuRdw5`1kwkqY+Qz;-S6UYpbrW)-LEDZSTMRO9NJ(e-^~{(w9DU#QT31NJ-B>hUXl1-E~e%-n&?-Ph`SBQ(!t$sr#4 z8?G=PwUTmTj|SY{arWkD@JIg)LOlTxU7@}8A?Ggbk&E$CLigTJZ*CDkpn3?u5M80( zKDCz~5NU}Dgm?xZKhb>r&;#Y{erQX7J6odm?|ovf5dRk359IT(^U9pkn-OF8r^JvS z3KtLYQA=NY?e^r48wW?`FT5S$m(h-RdJV1*{&jSM-d{10Gz9-F#Ivh$9`vnqrx~;) z**zb zxbz`^UY2Di%8{SU2cCuWiCp@?=ML1YtPl>0H+|ihHz1$uL`VAI53Uf8X%0qgzLk3Ma30yo47kA3ap$Z6aVHQ74hI3u8==W zqlVk+mp2;2-+S}nA^vt(daI(Y=Tt3uwf$MdhVa}$bY2So9*!hOkvu*;`2P`qzPEqCIUL^an!<;Ne5>`JFla$B&xPl`WB-F+P6*ZA5|#S*e&4_S zUHxZH{UQFr;|cl;*RZNCo1Z2EUygX!5#GFgQt+qOg{^<@5B}57Lp=RAZ@&8UG(Fl- z0^5CUzqHYB@ndko;HB9bXCOZ0JFXABMcKD+`z@YU15ZahvyV4lKD{{EW5&#l5YJe|(|d6q{GS$R z)4twwq;bmbs%76QN-Y8q4|xn%h|h(uC3`OQXUM_x=wOE+KhllsMnU?vtSNi1KDpj`sE*@NZhTO(mUmXQ1Av;O<#kTuz#fN?e z7dptY>brUK^AWF5SbL}VyI8K(4X>L%Ba4Q{yHH4GQIxE$*-|rIr^lz8rbInVZ0b5n=RjwI%DkpkYb1@sNp=+!#%Sb zA5`t0P?wVsY0+Mgs!T*Yn~#2J+T~>&EIB$cCATa>BUCo80Mp#GYP`+@ZpbyLe>rQxXalxIzy*M9e~9gu$pS3QUIbCCQ{ zPJ2kq>6OPk!|ty8JZG?rw;$l!m-t(h8fbsA^PL%3bm+|>8Rauk0QUp^<=y1}%zMT! zYRXn>_)zw|M=7YiLWqS;CO*q|YztAO1w6_=E`IJUl;^uv2f^pf&xm z{{@#nn`Lj%XsCagT=9YX5vC{C7Mn?Qj(wjs0rWL-eP}Ohaie+5>E^ic19!~wK92k* zedFXCRUPMHJj&NiHMm*%Q+;%N{d+!N4C!le@i4zs$cpA<^c<1te`94`amDjK73tHs z{6Kwh8PCX$-$&dbI?!hsm{28Qfp`K}d%@3My3uOo=`CMNL?d)AmZjU(xAGn@uzsVM zM7&9Qq9y_PkSDhOU!7$X(rzt3w?foI@6)F0>Op*Jd`aW&w_8}U>w9{fCzt(&Ci>gkcFV`MlzphS<1c&!3l zAL3*0y=||J*q^`OAMwwRD(FALdGJ#hduyVh{X{z4k0XFS7Z3U-uNd`T3x5fL|3Ohs zJgEA2{X1Aou#E52p0Cf$Sum?MLww-ig7&cZ@=E>hyvHNxUob8oc(G`$YP!SPmoDR6!kI`P;ssZz zx0fXEs~t6bSuon(f9q8(VNQFAG~5rgcgK{8hXWHHuVB^<>=sWeIY9Wq+YdZHpZ+YU zEN8WSH+&xitDiRye%RvnJ3nbik=YtIw>8Q{g*ynM_+P~RzdO;Dm__B}^(|TNP97msJ##=w8@2nhc_fkrVsd?L`L%|EhQ2)}R zaUSYnMCe?jS*K6@aS(QsN*N7y*f8(*LOc~Jw?yk0q{TygEcoO<#3$}g!3#al#6{5F za@4=ByKz6zUh>dv|E!??g>ZkFf$|yh0Io3JkFM-o6Z`J!9m}6NCb#Dw-c3Z~mq5n# zVf`br8e1rU)c{#}{HFxI> zh(8hKC&V4D5dYoZ$N{$5o|_;an0)+0KJ+K+T6$mW@dh1Nl+WgygB&lqeQP2>b7T< zvM1f8B0kz3_XGaF*eIxoehyy?&nH`;_Cj3X3h`{z6x=*iSXl;q0P0^t60Q%tv7&~c zZ^~36%#X1U|4f{R_;ehsuHRWm45$!Z($?J3c`g>!2UicAhtGE}4#@buYRJ+_VtMUg z^W8T&s=#~UJd8&#zaPYCU+L$2JU22c&o*yuAL7K5u^s0jK5f&F94aOnq=A2L6rbq3 zI1m1>h-lm_AIkQJ&$E-!e8INFdC2EW$J31BHwe9ed@D!sA>YS&@H70H68&sgZ0!Di zG~%gTejuOCg{YN7lOr2ux=>7kvmD*@--<~vd@_Q5o<)JN2li-e&Wo zYEy2wqI}Tu#r5GlIpA3d?HQJ)LfsQ%=PN46jC2R_ebDPz4;?DfVO zLc1 z=HCy^k_QIvEfs_QB0_&%#`U4UoTaprXI`>Rh4*6*qV+s+Db9ocY1)#fp7rnh?pgVL zL1*(LLIC2)%Wxj@*?Gw&>F%u?{@yS9_kML(#M2CM9@^XRDoy_NsWbgS$^i?5GLGJ) zq4NzE7Z3I0L7v0=T{eYqj7JMb#~+BUE0Q@?fv&W6$9v=f@V*e17QLF#5g)DKUfb1lj~nd%4OL0rJy3=VYi#%XWwL z#-`tHY0%!qqWCbl{6PL&x60@**wZ4Wxvg;gxq7oQR}>#+749GA>+c6WMHPIRUDvk0 zKHC5Aqc9u!r&r)S#3yyu8<}>MzEWtf1JWmR#UI+6H1u_a@b`w#z(*thgfd(o_zj_N zzsJ^iJbQ1uV|ISu;zfBVK1?ni<~xUquE*KId+6{!Ml#aZ;^HAb3A^01;yn6T;D;o| ziN6+`x1US5!kYHgK2C=IkwZL@51(4-*WzE8+CAy|xkZ*!E*;mJ%+aTR#r5I*^Yq(h znQ?^AHKX6B`S1CMSR#j~w&6VFLqORDi{YIz=iz;TVo0CNr4RFkfO2E_jB?Wg@J~QI ziHnE$Uru>V(6=-68yzpr1BPb=S;!Ch3+@NvL||i0=NCZr7qwJ&bO`c~~E|Dn6SiZ8@jeVXFA_zcEmi=lF@1*Tn8O zLHtt_x9UYJNJx#H2O^#_4d)^LcbHp5g2vaoZ1sBaRxd`5#+t^_50S%pi02*K-py90 ze*Jx3`rr2nmLr}egY)2LOX;P$+pdDbmIrihT;1V*ApqqkX&7%WoSzReD=U-U+Z}~` zqa%HWG;jT;^7~sto(Q;?MT=&O-5~8d-#?`!XuyJYI@clnjFfX$v6-5i&F?obVz^c zK%MITz->Ouyvk)cJWCSiVZTP#A#X7IVKw%BUX&>uo-u;Q6UK{zpI7##Z}a4Ji7^`8 zYIkL5h$sHUdC32o2(h;=X2wRt)X$;94NvS;p}&6NJmkaWL<8*=`M)f#ten~?s+PIL z0`X(x8T|nI(`0Q6;xZp+*X_LYc;%TRN5W({{-ee5_5$CXw=%UWe^a4DR`9=kCn26G zf%A}WHtO#tzlm{wxnk0!MfNgo1}vzDf;bQU71im>Y4&QR8+v+)=hH8VQc(OUT=f(7 z7tvb|@5~8a+TRm%Yrg&C%X!|?9RGxV-tp1Xb+9^VO&*XgQ+TkqW6+U+;!ppB^HBd| zeP6FNyl&buI=-6zzJHQ{+DqosUcXfv#_e9>J_FXP-cvb#T!rxV!g^J;04IOWp93-TK|DFJ_PsA1#dYP*2_s2j*@U3@w58H4zX` z=A-ZA_-mUu@%NSLX+d=YyPbWQ5Faic^5NZZbmP)%;-#>@wLtn5E0J2?{X55E^bP3!&yzH!2>2ML3GO6q<>VVZRtuYtpue6zq|9k>*8T(W5Aa0eor{O~ z-@X_4$23c2$nkST=tsANn*m6l7=!DRP}{G{BsjhQ7FT}glYU8JepVHEI!8Z*g!dQ3 zr){g*D85qK){!#>NKA0VkHg&o*&Gvbt1u7cB# zCltiHa`BL#9?#p_9SkiGX8O)~$q4K07n_0N8I9`$PnxnwCBjzFa0BggdrO~@XPzqZ zAC0#c;(z8{rh-NPvgH?s=8RXF{VuW{@oWd2*GKVG3u{x}vBBPEti5wM`iwKUABfMm z!}iZLpUvpK=C{FP(dU^fS&kf@XoK_MzwKhs>hq10b0Kx*Ab+B89`s#T%_6L~_#rl0 z53m2NhxJYzecBP6hx&hH-OjgWg1a}4@^MnuF@jXYYlZOU&s|-VtJKqBX;gDUwST$A zNtz03?|M8wa9%XKx@rN%U1IF}#iCJs2weW5eqOn{qu1b|b7m-2+*cwr`v4K?L;K+h z>yzAUIae>cjCm{Xt1fiye!G!4o8t#KxGq3H5IY7Hts-5)|{ zYG%i*N?sphNhR^-p`MrvtL|U;=d-$|!oJMOcNAuZIsb3o`Q*X*Z*te)?UoNpD^kfI z1T5gq!+8IrKW~EG_)JmYwf=+8EbIDRX*SO>|G2icfVyBeV?J+vIIloKNen)|M|b2 z6~f04?3d47)Vb>wCw9GeorQ5|r?@x;jd!keAV7cV?iGH!ZBt8UlG^<35|LlF$D;Ae z&4VBLw6bm1ZGqx@4z=o#Uo5?pw~DuaSa0+=`#jxSS!^$B$jCh6JjC`k;?2W)_(?_i zl?*9`)w0U9QS4;dMI^)j&7Udg(hz3NSi>|<8oDS`JBbMzfDW&`n-9_heK=4WD|ta7N%i6TABBk)DS5Qx!_DIw% zj%uJyMiU5a4R3v@&q9l8wI?`kIptY-DMPJ%j-fuE{0IMsBm-_&7y1AFyw$(`uLB<* z@@!b>8|)D1IT?yMnwv>Aoop2~d`Q zM*PU&Q$JyT{On_L;8C}s*>&COx1Y4P&{g@=EAYP}Y>$wPrRS`fbMGcA9`8D-h1O%- z`3dXo4K;h$zPy)2a+qpebIXDz7{I5!5Pv6)$R`Q+S{fbZY`cDAR8)&kz5%~sg6NEu zO5R}$Ur%Dl&8$udQRE#Tn6G~vze|1`nVAdk!z|}h-@yMfQj>7oa-WrxMKd$RFHfFg z!N(8u*WsYfi)SSDe#3gK+?C@e`ZT_tf%Q_=Y2V$Or*-bM5#B9TRQZL%aN+GA_7}lD zB=>Z!;;TRNJafcV=eQI3)GOdqFBv(64w(ovwO1RP9URwh!Ds%0`7R(=!pV5WN0Y{| zoAKYA=d3N~!^3FuZ< zGM3;x?7#eM>HDt6>+2|HO5cj@4{9Qz^$ATM=b_$a)bE+GRsV%O#Gi%qUFYIF_(_uJ zi(92~^6&ShHh&yluZE#|sHKSW(7)4{3_lJNu^ii9P>`PxEH3Dz3OJ z{_DZrWO+_}h_i5g@Efz;c<<4E(OZAl!+&d@E7E7_;XKsCQ+-;+(=NTV9bYLPUzNW~ zZE!WpA6=Y>{o`l(5!;vBN#$qDqyjX2EN{cp$-A)Z|M z0PQV$>fo58_x3S-9<3hvVa~+;0H5t}Xr^7(^cIM(1JZZp(_ayJ?}w+l>D*TJuYBB` z>|GGRXa0ivv)QuuqHbYu`ryWn==^T|L^%T#e;5$x3h}pCDc(H!q((XX-&8*H5#)~- zJLQg5+zeLBjgg=y64l4#_|ykj?->Pq=c@Zi`Pl`2DgM>39vzF?3%?Jpw&;hc^ofa* zRY#TWrdrZ6CdUZ6^3jL@KTiW<`Ny zB{?|2fp>g>e>JVapI$4u1Ntij&8Ng7yni7+HP1!ZUmmrNy|2Il@gc>$`D-5nm)qoI zk3A1hMLhipZ{Gco%RGZX@9&rQHbBc58woB#8pcB0DC`KrJN zAfCmiy{;+iC6B*%thL#k>NK}@!p%HB>pgg1Q*m6!3r5>Fkc8uS2hM3wahwg(Zwj=)EL6#GhU!RKNz^b&#*w_ zEWBUK!h(|zq*^>akZ<>we*Lz=>gz_}RT0mw<>_{<3e(G@^;vXY7Bc!kH+)Uu3O^|*+Z~llxo8a=b zZDom#J$Jj7?fa^a{J3)YfqE6Sp*%n%JkT5T!&V^uPrUUXO>KCc9&soG+8bib;aS5t z5A9`L*=R2xdEFHB>14!@;5@Xqwoo~tW5KUupf87bS7E%rK>zL12-b_Cg%5!bKz<0n zaed%zTx}I97cbNWo{V@3mmlDT6CdQL660vVt0F%HK7KY$dFbs&9Wnr(g7n#Z{Mbn; z^%XH>tbu2td?SkTZZ9eJnfV6~g~`BsBYjss`lr9>9`KD?Gxof_7UJoA+Pi&;baG7E z?vtSJfOrNUeaWzgKb|VcF9hBd@zH#EgPj@gOWFm;-ZyB0coH8!?Y-Y0zrVb&1oWwh z*W#n^IH7HqPks1UeI}v)(&E!!5^u6skbe1$ecoIj>4)&~b8^}Y8x!%$1n?7vcm|*R z&%SnlHgVmx3gC%oJd)VF^V60pI#+OUj}?rUXj3#Exp){aL2hpuq=)lNfNw|n6T;PA z;DwCt#~8aO&j3DbCDL!k{Q&Q$t=5qeYO@XeGmw7*S3QC8QW3M!II(s+3-qH=e8|6e z>#x5%+swDr>ka7VL45e=A2?^674MuqwZ~p8KgUE{m+h+kU z2KB#@H*ck|-)>JCH5hm;l+RQFygq=RumHC?8{WyVfhVH*f-%5bzk5YbB5h*HA($Tr z(Rm1UGOiEvqsyy@ZLReNaSJn9rq=6!T@yn*OB&~4eNwl*)=d5B!9VwM(ra#9x$Q|q z=Z8c|oQM6wS*HT}dWu2monhwHlMY(Vbd=9zu6hXT4aaR0H&rYd?*z|p%c1=d^*-KS z$cJSbL6xDYW=?0H-`kKZUA{igl9T^h6*v#=?fr15_06N@0}vlq#51dS^U}t>N`C6e zJKn|z*EvMGSH+_BNeC0?;e2UfQ@&t8!T5^RQu~(e&iZ5LfX;8(SvU{z{8m%&#N-ZT z?EUt1#M4N4JYhT*Pk&zNUUu{RcbjLgvlgDLc0loA-NE(Y{Jd@gWoxZVAnB9z#WVdO zY85P4k3GlvvGWtdQ&z9NU%ib;(3|Ie&9Pbxt#2tMy!lhnxgYzAr*DDrPCz`N9OuEm zh)!yPOPsAN^e=rWr@t7taUS~DN;zQltQ8U(us*Cu?Iox3=4W1E6~0;;m~Pvy}$qW{#q=b^DEfTR(-Kvank+TpXwK& zK>J_Xc3dCY`*PT2dx!ftnu$?teU{R~%k+&L{g7Qa5B`%>j(!?PT&iH>xOFB?=jNJn z;C*l&@;RqRbZ*1sg*Q^)3<=9F7y3y=Jbew$!+JPy`hxL6Or7H;CMnk>)(CEO*ue2a zbLP#D3(?EmXjCA1Le%C@qNkb;aXp8pZ^3yO@7AFgBZfX^%#x?An@oNxcRUvHEEk-I z^F2Eo2jR(t+|Vgk7Ic-m*JOvG^H`c2&d){h|2B2a%N@5EbpzCr)qyX9OHNXue% zYk%}n@_bhwhWZzLz!k=$gz83jA;)E14o8*b{6_!JSXYjJCfE5b@D{399=AK$>i|zh zyjBDrf8d4c)ZdsdyX4_LVd>7e-|__{bUwxo!g+|l&X;Kw@gfIStPBiynXoT@V~QKc zPxM@zhxY!uIct*2k)G~~?>3wAm43-FksntLoQHh7K^`aRmRoeFWlPMJb@$6Yr?_+U zU1#C^=+WrEKP5&kCUHvR|Gtmq-{)c3P8>eu5YEH-+pRMv8@n%c$6r*=IlVxIzEdCh ziROwA_;L5~y*hQKP$ty>l+CEU{v{0QLg(jfYn%r^vLBA6>OPV1RFpX~`h0ICL6y(> z4~&-s(HnYd+XL&;9K(s9XNBj`kUo=ZJpl2qoLZ4dQ%fr7Pn)qM+Ua1KH=p?e<`>-& zm8**ks{D3ni5RFokGdR&^hs3QKlnNI#9IDH7bSIt+#yEWk7YmF5g($B^XE~%xmCBz zUop28h4?T~{?NI`Bg98hH1s!NqH!!d&lZ66$$q##}6YZ4XWQ#5KrgI zXBE_5y}O#d-H#^@!1;d|${*@sTp#>@Q*J-;>Q&V_;K@jz!c|Xz-@j$w<0AWY(>zo6 z@BJ!TsKA2p#noTnzuHZ(r-n1m4{V8bz-e15EY5pqd9)J4bg(s~A`!_^h z)D;xD*w`I4ljWtNe#eXjS0KNp4}o>qzbf$^xI@$G8kQsdR2Z-IEqGn@zg z^r@>=w#T~c0ss0ao?3LA2md!tK8;!!cry!l0_?{nc(-@KW!=rcp4w}S#{XY_GEw}= zT>D?>-$JE`1bV~6e$bbL^QCUyel9o1?`b)*^Dywy$PYz~x1VDt?fdfIUkb_meI>|G z$TXOR;zQ!vZ$f)5&!338Uzg(t`ebPDc;5P5a_Wl`-$$5gw;JmDzx7mRF6E40iX3l# z!ZWE)M>@ce~fhtReyW^lK5siZQyI#k9Q%496ovy&V#;hX={&{wcaF%PdU&ifeQysiW9Uuf^=bHC_4j*&}%FGsxV7v8*ZPvVcosn^H8f4Lm$ z1K0Tm=;xYTADA~^X6*TM3#$$Po|D$fUyMC34fSNo`35!JgTix7c1mN>-U`s;=^kr zn_u9k9P#8dTp#@GFP^up(Zs6@cn0E0eE5OD^fD*UV1MBA5KrL48$UZH7uWG=?0y6t z@vKzdescUWX+CGG9Ib7sw|;)7R+13UOu>0rU!}B6P&%{u%GmufImFYscxdm#m^b56 zTZ-?2|8iYU{G<8sr9vm7j+>>aPbe;$%o3E@7O;@RkA77hmOpU6JM-X&ljKW^%gydB ze6G+WGoQVZ!&7hJ{$V^?8PJATPH&eu*(aBBHHx^8xrD>h%y1sodpVvt68#55u8-!! zzx^@`>4zlaJk*~9ca}V!#xh~C-e)o^8FOoBDBq}Sa30o&)=L~1EA=84kPhszmN`k% zab3ajL%N3ZT4=mfgl!TFaxfpepTbh%@I)>i;_v=I-Ci@5*he0HF~jGa@m?gPuXPpI zhy8-KV@6bl+Re%F5d{^trjEH}GmbvZ$Cv?uk~XYFL0Apg-g51;S*wc+ezPt#zk$&%AQzARU!lzVgh zP@drPBh;&wCNXBqqNvN25<^YL-_a!Hd^kLN80VLu{_>fwZ*fQS^3?uLvsT&gbp-*) z58){82mBA)rQWIEynSrEQxVTNg7eV7y{GN3ZOOlt2jhzj`OJs^mdz*;>6&&Nc&+Um z{~>(%x{KXXcPp9szgK+@r<$ecex^7>i}>6k6J$5xjEDrS}vayG^PEx zD~ZhMFWL^Aw?Ofn@m`Knu}g96``1X|pNoh1)GfQF_n~6F(1cR6?b3mLYiR+T_Oe)b zf9W9o1_fqLQIoVRv{x1ByYkUj{^eaRNNwGJLPu=<6=5|+(ms?weYpNgr2p+*8vSH? z!3xlqL+vH=(HGBan%sYKlb6ihrMjwF>T?_nIq@NG!sFur{>!U(p2=+}1bqtP*-khQ z@oAZByQ;U^e2KeMOh`}esr7jWIsR#7xPK$0za#u?@xlVx;d!U4+g@n2Z6G0iGM7HA z2bN}vsm1DLy2AYt0^*sDxF1-bXmx2+InA#R1)jBx(_ShcUNhgPGUf92X}~iOPvFB} ztEgFXh}MzYQFbKcW3BPk9+AJA`+c3yI7?#s!bKWM;-4~1(z1NySluiQ90 z=wShTJ>prGxIXYZ4s}=mjF?pld>-Pde0W(IR#Cx;4g=t05l`U5=bBNi{Ovunfe%1D z&4RZdpX&X0)O_7WfTyGQley+=@c;9vK+lsped6g~XJ_Wz%x$nhJj(>vhx^enil-dq z>l0@C61EKP-{&z+RUhS>5zfy>`QW7bBWcddVx5oId`G&BDAQB)I6Pqq&VzpHoE1r) zWU;^dorb@krz0YL%5t2C^`xM$L`2vO_SE^`|Z{(ELku!{<|YU)K8kNu8Vibl08cw3^(pJ_F~xSMb<-mNw_|Yug?hM=Ln1IA?IrfBr2OK_nJzgJR{?f|T zQrK)9s0qAxI)~Sq&zoPbVi8iNYx!_A{?pri&IszGcrs_;{vjWv()~pX681MOzTYRC zRB|J$U569Tkm)!N<9*lr2Trwe?!}|}4LPIllPO0$Ngn4xKS*gwaioD+ZuQX*dgVWj z2VF&x{xqD2@jk2F-Tc$y*rM8Cm8t&8rF$rSD4uk@zQOx;a-S$`?%BOx0NR@Z{^f9e z@RPjQlg_^CH)o0^(b+tF&7zbvjy_odk0+cbn5>zm6Y&e&ui4Pbb(rk}n7x8C2=Xzq~NcykL8@zGOo9{g<9 zF>(xIm#u6V)IO733-v?`@f0o|>dAteMMo!`J#6*wd4thL$swM=#Y23m zx2#^H^!dI`ux8P_3N5>E<|2-NvN-Ms&X>09o&7<--tf|44rjt=AfCX*Lwx4FHJc@J zWV{FPRKzpHaDCtve(l(`L`wb?iyc_BRd?-=Sj1~_@sQ8g1e2D%uh~BOe8t9^TcbrX z1o13UTp!xI$-p6Hidq;aJ|Thx2gFnO@ZmP+_Gc#r#=?1~+)hq@61jNr^X~c-#Skke zQCe|}EKPd$>=1trPoIM4Gprx-*Q^$qE?NE+EuRQ1Uk=X@!Tm%3%2Oz1j*|~sv3UK5=W~=aw~sucvO3}SQBXXi$MN>xw(77@&eyByGn)F}wi;#YsUqH0 z5a%JDTfDe5fvIwtl zvrvcL_1pU^>~2^)=*NEG@LF?t>!%N{BU3{aI;6jMAGtfY(Zb;?;`?!ZnD4e$)PGnZ zXRbI}ul~Kik%;0+6TssM`Ty%;xbSjKvjoDN?N0ZPl-;&K=ZBQvxF5)eH~UzAUUsZW z^_s?8wD)Bd(b0JtbC@^3Hpu1J+GF1dlUscKqa3TX9Zqumvo7$CzjNr5olCr*-aimB z`=`j>?dp^TDBoIf{X!H^dEt-D6T2m5tO*vHC3&~Bo-&`qGg&xKLVRr5=9gz0>&8Cs zV1fAPW}JudW$kn^wpO7xp7B}t_iAzXi==rReRd_zDiw* zKnJJ2G%=iCj`+(3ug^~&|A=P0;F+sMPRb%0%C~4~oL`D~-&qeI)h51wxuiAL)Z0NV zgrUmu6Y>=27a-mtQ&@7E;6d*j^P0EDuR2T&0KORKp`H&ftPh&MHz;xcrdN7ede0t` z5l?)A^N{~jURJO5xphJp{W^jxmD65!5za$AW7~dJHWv>a57)YQVPNx%uk9#*2wXfo zFX#JpNcHv`jkqL|me9Mpt`YKijy~lDopE9fv;GU7y^`}NJ(G}^l3voZN zzUr1L^P6bjR{BFE?NM#dfy?!%zLBDFUK=&gGv|PsrCLC%T6WwT38w8tdJOVYg!_T` zTrxVaSZ2oY8Gqkrl57zt$U^I9Ew1%5j7Nrm>Yq^YgPX0%^hsI{16RTjPkw~^f%r_- zCZF#*D1YdwWqgRNx{)GPnUfEUY@DBs{2L0<4p?9RR8@U+m)Ek$CIv0D-X?Cx>&Y_2 zryV(Ku0Ht6qja9x>mw@?UQthQ+UuH+uMgpUwx%uJ%kS*-2#`5bq_WJ=@u?Q_!^*(@ z!2V_ExXAq3MdNoxu^%3AoJZGJO+oo1f%}2=Pf>;KhM(EedRuHYY__O8_Z^&r^8Y@r z5Anb7!M8jtMK=1@&%o3_1idp$oFs_ z#*0pihV+7;W4Dh84&fXg#sgd-|E0b(j{Hb?G6?fy3Yw3AgDddwbbc5-ek<@)>&RuT zd8CzhVk3F$ga0s_4aWQW4?G4P2h?8pZ@7Z~e&_g+Y$4-fP24Q;~oKS{MJ z@=`HfrJJ+sqGxmB54v!L^?==8$GZ{96E{P9%l{)jB0mHkxG`q`-0t8|MJnImn}^0b z=)!e$ssHbf!7JIq`kgH$@b|9&p?|CC`@M=@zsIBVepCGZ){9y%XuD zyNUK6{K|)`XhP%1sah+~e`aYgE?X7VTWCLAA^#~0<&7GQbEJHwW#4SnTdqEIA82~`eSNWa*OL<;38~ffXL<9mJ~3@P z?eXi3%$`!mX9Vj{0Ss?+eg!_@3i;9-UaD%>w!r7MVEA6~HW_P5FK>MqkAV$oMGBpN zE?WAoPsw&TRUeSZo7Y3X=;GDxVyBxAdkgCOBX=%VF7)OTPe;V>f0%DV>)j;fo}@Fr zX58&QDxds^{oSzML%%huFa6V7MRYsY&|6b-dHaF&p+I2V`M~>4xr{sRD}Kg35p-?l z%|rj1GDPCP6bnrPo{XL!fH=Yx`13m72cNyW8+OgZ zIVjxe<-TiWtLzDAe*wC1g?zZwMc@3mZqfI}-<2;b=#_i3X#d;4`?2|r6EBafzIlT- zyF7|q7R#r-P=7WDJ)C~=Df!-yxwCfqDeeC3ki}ac=DYfG=~i;m_Hhn#0yt2)=96!xuKjdp3AAP8|(V4Wb)9aK< zo~5PVF7mBiO@7GR5A;{=)U|?Vjw?HZe{w!=9{iu`7rj2-ci`;5{XSKY5X;9u@Z;DI zoImGVk-)z`AARt@qlCJ!z-XQd_}8NI_5=RScIOd8l@*$go%a-*!ah(WSI(P<`^!q! z7f1S;X^H`MqX)>h2MXAHc(|YbN+BchXI4tl_mwGs5=Ley1QheuhxK`EyTrJGWvg8C zorW@WOO7urf6beR@9R0gTK3iAiF214eiLn&y~~dtTg#gV|MnL5e>bQ~X`;8(7A za+d{@H;;}>2qr$EXQx$pg>}X#mvm+hNRjXG=HYyDlEjxi&u2C?PEMIJX|I4)qQwE; zJj}m&lNR@UO26>>M3L+b_ z!?Lyyo!8~hlaeBTJ5Kw|TOZcv{`-20ib_Rpp0JnPDX~!B!JE%~4f*N&vVM6^)36m; z@6^VMjSmIn5_s!Fd&5nNsU?D)Cnhg_@W4uT!!9<7cYTBXl)LZw+bO4IY<0D540b;Y zTNI+mo7X@Cf8~^WdfW29Jbj%+ye07bxdv$_Z+Y~0i(G`c>qn&Ug3z@E-qAL6O_)$Ygl z3lU}Dhjfc~Ji$-+kABm$CG*{U*V~)l+4H$3Hi zDdgxgx8nM+o|#G!-E>#r!bY753sU3j)l(c0&vM6kIN!+Gf9&<^s?7YNvwxlvmZiLA zp!Fg6fGg}@BKNbqEMn*Eh5AWE_ZO&K_ZOgkdI??o>Fo{Y9)-p$U>dv;71?v#4wx(KNi=te{PHzyxSjG zs{VNSw50M>-u(;pkiM?wt4ywkuG*b-X4WS%chgb+kOc8~LVUJ1DKEF&;h$)>^Hzgn z!$AT8#h>ni^DtkO<$CEnpq5_*|9NPI3Kpw?x|18k)o7 zVT5)xUWi=#JBW|I-97K{>;+$jy;~R0URALxkI(pm{E?)L_y6hgwHf@=5zo4d?-xKn zy0y9I{K>N;k}{n4y{q!6|Ioh$iCJ^n`qYLL4X!wJKixglj?Nz-FX0Nmzj`%YBJNB5 z*!%XW@|^m>Ou_xY_+p9+8bnghMNQKbj8ZzMK^#Q;9j)6q5B1^VhaG=f)<4y5$apnb zZ;5WODmvc-A8>{Ff@NK55qcuBRY`u&g)T=^tq^p-9yqwd`Nj;B+?)dS&i7Yt#hjKq z8|ER0;z>`%{lNbBWVvStLH@#<`OgS!pG;iMIkKKA;n&9n6W=<78 z=LQM9>nGIPOqCB&*9U`al9-}vLta!_4+`_R4|n+$MH{3!1ZCgf8HoLC1UfIEemth4*7=Udh4V67Z69dLcKbd>~l!zZ6B$= zB9FLgZRD1a)4b~mtY;(+FOLu_PnFxawELj&`?ZopbiWUD;R^GGi;1wDsg3KV+bz39 zf7(XbGPd*9hxTsT`a_{3#%BJ%{|vTKfCF+Qmy=z|;PNkGU{iIJZmmK8&|m zK0J(fqUf5DozHA9gMI)X9{enuYyaryjMMJZ2DRO%0%L%8e4t)wn(54nA8&mJ&VS@kK0w^z3h~S&>~wScutf>ZLk9WOTR1;i-PiXh zyeV2T*f{ob@8Tn}%s;&SD5GC=E^p}KaQ31j7n9zcangTe%H*>ifc>V`QG(Pn`VN8A z1+v}*@lKNfbUz4u!xh#8cBUfbAD@oYF3m5xd7yufpBy@G2M(^ltE`%IL{FtT6nJJb zZ~wptzOrhp>P$-*H@w>Tg!_*~wk+@Z0P&QnS**J#wTa3yF%wn28rxI;AG~6e_|V}O zg%dBkr(3sa|IlKh`5k=26`lu{F7i4n5b<+C@#)K{rNI-v(qno1C!v41rzlwM08J*; z;rNQ!EVUTHXg=o^Fdz9$^!xm@_O~#-+dw+;k^YCw56urh>F$8%PspEm z^N>HLL7nueMMXPfuAO=mRVZvi_>c2XI`iX+JJohF5jR{m)~zK~g*EWjcS3&p&Uz7> zx*oX5$k9vUZl95NZQ{*Ce;rxb@m=}c)H>VaH%V9LE>IohQxBDpKIOgFwzLKA3*CNx zWX-p`H=QEJJ0D=a3#QWdHqO3LwAAU{p{#>SPgD5tP@lIo#q3K=v5((kFL@wnLzW(gk!=!0l=dBOtT|2}mGk?6=ZVl%@76rU{i2r@xo4&29PNc#44>^-JKO438 z=f1feN5WL2;rxWf=X?h8x!azkf=d(TmKYxUUhsxrLyPbV38v~9eu4nN% zFNO7|!JPE@Hzd2B!hBKB#}CXG_0>1Z)iZydhx3+z|2QvVWT&%*OWql6Z|V!sy7B2# z7@vHG`8vzURM%G8vLE8(%IEwC;$wf@BX!&Q8>irWiNI&S0Q?^1i_;`a6mp=w4t(^X zy=&hQ+}JAhuFziZ|2SXrCChrfPRhuG^Ce~l?|gvsnMZ$4HBs9&-Qj#GrII%f=Sz|o zH6ItxPZfakC0Yq@UK!kvFu3CdX%d!Tw@U)GJ}VuhbjEd|iRJ zVzpDf`RoT_yjKb>To}LG*&N2>;D6K~tBDh5e>Q$gf$>QHkNR^>F`ZoQoXvvz!~Bo> z)A>SKN^;33BE%=;KjI^9D>FxN&z`aKZ3jN_fq3o_RMtPf=)~ChOaLE!s6R(<_a~;d zQ6@oqY5!4wWKVnOJ*l5bhx!v%#XBEh{1)H2c%pW>?oX&cuFrV$P=8*Zel_pB$RiD? zKjlw(^H6`DDb$)xNxoG8^+&FrHxKov{^3;}|KuC)P=DI_@Zf*5qGrf4NaVIL@!1h>JRfj>d*asyLtr#g}zv^B?qSy7B346;;j$+{lb2i=ag0H-^E@` zEW5k$w`eS%`UCr;CXwouD!yCx%urZLfUFR(_e)+r#>W?a)`@c|s zWFB0Yl>1(4hXvz2MD5{aIlX@-gyd;996Z>{8x5 z)Sv4HT~#keMAf1GFy8X!q5c>Uq%Yg9(j`FsiGIhM2mk9g%I;1H@_GdIC*>7y9_r7N zXHwS}oY*e~^(XcoZywe^)CShaS#Mci=G~TkSES*hOG2OTL&J6K0`-Uaq`_^dZzfA_*fOxxj}Ss~OPVh3+OP=9s^Rq0JQzS14)PsnlJJk%e>vR4@; zB#DAzkx~^((4PbBF5WzR-LWNT2PcJ_&> z*K(DKyZk1r5;^A^u9xxW10f%-h&d>JUfpr6K|0%LgZ33+@=o4eYU0%$ zdVdJ><6~#1m&@=zKY@DU8N-;o_2A0C-%t84o&o527~&$_Kg6@jP($I>$JXBqx_t$k zo9d=e_?$;U{Z>)?nxc^yLG_3msY!30RoE`g+Yi*wA0`?Sky?&(x7}z{axG~1!u-Iy zy*8-5N$0JH>r1rsS3aI>^DRy1eET&HPqfGV!~ErCT>RT*(c0ZJCo3d(TU}fk#>Wqw zmo}Q^2)}!i!fFWUUvM+>IMLz}^0OS*pO5@peRgq$TaK_+&tsumTq*Z9b&g@qu6$@9X>Z`0A@4&|otRJF6 zYInweu(mDmAYQb!cH7`B#oLbu(l@y&xpZm%H|A}hy%diGXD59=JnYAFg?|;CSksw4 zeX#Ykh_R7u39>0GC=i$*C*qa0A>yThP zTA=xY#`XL^jK??cd)$-urBGcyu*`?t4(K_cdPPmg>j~7W;ku*u@*hXVFP^e$XTO@l z2pQdfk6wZ2543mjr(J!^oWi5mPoE*SvUHzfSRCrFK%9s6UYnv)7GmlaDQv5}__xG! zHYuLNYwg8(sON7w1vefqa$W+w!xaus_U6s+U3~WNk{zMdk*Cg_Qn(N|myPsYeR%V) zyGYTV-hrQB{1B0U@)4Ye^`zN^qx-#*NZB^Kti(>L4o~$)^@Ok%=VAO_s;-x~{O_siRsyGBxW^S(?{eAvD?ehvLHr@bLueqcOSPiL9>?t1fU!Cvu+u}L4& z84#bXxIV=Hxa_4hxur)pc71TTPuX^}+2JZjpXGw{@Ouk??T*O{%Y-=F!c z9r4tSI1lZmtynhsp1Zcsae~LNYUZ|g&)n|XVG&^bw>mN4SkGNXkJgk>o-lXqynAWZ_`hL-xTcb6G zg?J_x592pv^O|irMQtJuM7x;eQQkWY#q$)d5B^W9+@MW*VQoF$?#~gW@$2@6ARd*o zvCBgA(+h#&AN1s_`J?fn{ne-c;^;HC;PC-J)Ez}YVwiO&3K zE~POh(C6N^-k&M$1U!uQyTQJ5sW}M}6FpzZ7|na?P3GY1LwgG+x1S>~3w{(uHF9_E zZr))@pbz8Ac&muZ9LA%AjK+;rMhUc0hp15>LkYR7p^ zbia>ofaM`R!QMYiZ@$d1f$_^jekelv&|mw;uT*4RsV@WlKD0l;)W_F`Wt>(cmAe*Hih-AKf0etp=0%7efzA6y{p4Y@g2-}bhI8|3O%0=@$t83 zT>E0~ISJY;KsG0twt>67t7u54KX^>u2|?Q%hA5a$@&JC-NX7+ z3oH-)Rj|**{O&7`SG{~-<0#+t+vE_>7viCw6en!nUTf)K!;o2;cFMAv)Q9{~h5SJL zlPjw!CleDThV~~1pJ%Tkh(Gw5ZM<&HP5Z~wS89%$9-n+$j!bZV8}fmiWOVpxV15$? z86*b}&ll7<1I+tpAm4g#ZIAt-zWWaF5{T!;;`3u~{IG9gHJAfWLOh*-rkCN>U`jth^G+n+bpaXi)v>}0M9^tQ6#>8|zS5cvrM)}mk4O1Q zLp)80hkW>yRkl2vapf`aRM0<&)dxOIcYJnIO3~)Q^HGW_CXysF;<=$%9>!ylUt4gr zl;q&`?;t-|g8Bl7#k#;_t!x2xPGPU-RIo(1K=kO@nj(${7fxgvc=Zb!3g|BBA!!<)dxRM z*1WDNdmlXq^jY9X=zYSVFR{N-j{p4~9r42R z3-Eh%nd$NiimCmnRo3O_X?B#j;rP=(W8)9cFPBzktN8y&*(Q)tpRk^((c2z7%#%K0 zd6-}PjH=b1PqT6UWH?=O6urdVAMvyfEDz6nZf3sU?Hm!DFwOhe)h=D}6gkB6+ORy- zlaH=t)B&-{KcRhO#8ZTL$p6C!%MaYWIliAEie@Op^WS3iAwJVI3Z-j3R;h*0a=!Fs zj7N7}6lyR0gXj~kfA40yXU2b&5ry?edo;@D1gt*zd0nqTI?&d(4(2Zb;<-XRj2C;6 z!*SVN=82kF=M;U-$8BSy`Y&XM1bzxU+sA(%`_eZzyLW$uW}Fv42H!vE+l}Qo8?!He zwpS0S{;SC&(1-kds&}VLBtfzq&MUSP@DR_)`0Ia616ITW-~12WK(pWKm*T-9SfA7p z_y_$(;|?%F9Wu}QOKfiE0bnK49ACCg6%K39vKt&VD0Z# zL4b;kO`6-J^lwa*59~ZF59_x@%k9Hdns`yb)53@K>9_FtkBfKO&q|l78659ND+~so zXF+~A*RVXqKXbfj?8fqlEbvc8`6GCP<-tE+?oj(KCr`@jGjFrKCwg^}*~5N{GO#?1 zN4fdp2Lu*h>jwR->lv)i7dMnMD z$<~k$JQPoEI+ln2O_^FdX8$*Zl96~u4(oF-V0nl?i(m0@j9@z-;=?>N%v0}Sd5Di1 zEB=w@GVvbJr-Tmk{AXAm^gaD68LPG2Sio~pe3)7Iykky#$(v>o58!iA{Q0Nx`EQE~ zH_?;>N`aR{{wY=X{A=k-k!x4y90I-%`R6{t=No^%jJSBFvM!;ye175F$A>;p z14V(43>%IQrZF60$+sU$!x;sFYV3#VD+(SJNOZx@kJ3DU*JC}IJU69 zPIe;b*P;4MyN<8F$o(@@WxV&uc#K5#hhB)!``r5)HgIUo>k)m#bI#%OjV0W9(~o+N zhJ4FK`Nq47LnP9t2OwH-^ltiV|cz} z&oRW^|LGT3YWlz{5CG3YJd=Q5quFQhv6rg=&&SabPo0g`hxI%wwxF~~N$c`)uhvjY z(f7%`qiFt}h2>%YYLjc&(!KwMOo%HvA|e$*%h5zUO%uyQdl&w$7IgcsD4cqHs%f*G z9GirAz6O?u_#0jc|8ZVx)emTIUpk7WFNX<>b*N5xDE%%lUocmTMZ+swM^n()h8;gL4 z>v!qEfrZf%j=fJa7&Ue3`_^kDg7$*`%*rh5Q`dSPrLvsl6ARi{RUCXjswl8`R<&Kd z#uF<6ecC_tO|LbnkGJkVoH)zx;hkT5Px%w{7uz~^w$y;PvdWEq$gZ;k@e-LU&>go zQ|_OH-(Cvh-OeoC;Hnn+AaRQErGxY0RM`aahw=3;FQ=^Zd}+-jtt5?5>E$*4@%Z}l zk^YB(IM04BpDR!w(g@-M`CohNZQL zzF))bN#AWR_yEiRAEr^_x++nd^_T~6Y%-uqx(`+Mjd>!*w9~DenQxC9^yGF zMi_mF&xQV=@CVHcP8F=pqd6O$QF>sNGiDT{!I@p3|M^l8Nn8K-JlyyJUp8a8u#hxO@oSU(WY zV(ZhVLlZh5l+T)AJKp}Rd(nqso_rL`!}-7st52LO@@+{FiBvz6oVK-)(~0k29ko}X z>iC^(cDOV=ug!jk&qF+aOl%V;J)5}b<9ODCXrrpra_{kZs3+GgjlW+{TKugm{pFiGaz7O;KS}YIskn!I37H6K^>drBwZKuQX zkG8)U=DBWIejXYCMw&0YUj9C&VV_?2r2gC6OI7Xo{$V}2s5F@SGVEKy$oL{?FO07} z0bj^6YJW!hmyFuWPr~|v{@oFvo%71%Lc-6v*JY;J8tdi~#2@CD@1Ktb#_fzZpU}Gf z$7XSjtMop6|IoihpG>#=Zp<`hsCx}<;Iff_o>2b7czZv?M^ATSk=F{6{ znfo&v=aIMm{23Vb=5uQr(x;?i+dC8G+o9y6H|}*iX495?dXze_pOQZf>(er^ydDZ@ zQE=x?rA2lZ&7zbZimNzP@c$7X8pF@5jeaBt#+N0^2dXPpAL8%W`}kp8@R(f&4}a-= zeHdFxLA-#8B%g1jrJebNgc^e9I$t1*+gm`qjhLpo+9e?yb z>hgq%T06hYxl+!5hTp&7NBh4I=G*Nap4hirZ<7@#ay$14KA(&H*VwH6J=<;KNIhf{ z@K6uGZGSkiOsmb}H7u^Gk9^>;+AI8MY z6sP?@{^ZQDm7_D?{a#yCkI&PPf3f;Whjyr}ewbI^6`tvu)*VT}Lq52_*nj(uznt0N z{FRk6sNqk*!}wBs++jC;`^+r^nd_XgwB#<-)#3Yr{;kcMcxaZYt4RB%5QD9UE-G^W z!{=dqX(wxPTe-BafA81lSW1#233!;_|6@zP6t7|_?r0VjRFq4mlOE#h!~2RWYQ`@M z6YE@4IZj-Xjte`L{ZfiVz{7m;tk`P9YbvRBFrNG~ zgZD$*ujA{3|EXj*O5fDb^EMV97s|TcPO2i{A)oyee|ZJHlkJs?xwUoIjeVmv33$l2 z&~H<=`(OLGE5$L_`dU3dpMDMB53JuRrl;L`pFLgF-6SK>!SR3!m4F97PwEDC*Hw*) zbnGlS_3l!qG@}GxAD&m*f57X?Z(bHjHd1{eqZ{YQ zzKX98?=PJ}Uz-!~s!qVk%nbi6wzQ-9BtE|f^{;9MljI9_Si3hKP%MW`+Q4)cfrF5B|TKx_-1!NlOAg67g&&d|tje{O~pt5(E5r z0?)wm;ODGlp7o}2;rhT^0>2iYKULy-@#BA2c!TjDT0a{jo+89U{gKGI5q3AW$*pR! z$#=(C$#Z1HlO3`8P~Un}XV2`Q9)AjaI~T=&4L)zzVPrZmIZqYhQ-^rE1D1z)p3RzN zE1nYa2=sFiPg{-U!B6_C{dG!r%S=I^gLw8TED!pxn|5=~L?89~yIUVL}egZMWio<_hwZ+pBd^}cExo=Qovz6F)6clKjhIq0O&$q_%kZ*-6=T$W)Iiv#b ziFg_TZxHlKj-@8WfcP*FFR;SugCE!S{+u}!gJlpOW8f{ZJj7?KCC&bHAcqWoD2S&B z@!;RJ{jf(p(o<+_mK_FUwp*Vgn01ZyS{zxxh?kQ;Gc(h<^rrf z`1hKAz*zEZ(0TBai})gQED!!Wq(bT0O_%?Erz4(2z<K5_Zq^9zXQ8e;WT zl!m0f7wQlnCgMp#JjAEgY|_KOGjuR}aZh==wbH@IckDX85K@h?I=m5SAe_#4Zcyei!H z>0JCR==V z9|z?<-L|7o6X~P<8~A|zt{bUZH`FVpT&-8%|15j(|KtT!fryN~Ivn-hpkH3+41U&2yn;dM=r2HgXO4j<%y19kX$RXgte{0t0oSm-IQuDZN zej-`AOUMK~?8o{h=DEpi_qz`JlkFP#@qzl5r+ZIXd56A3NPl6uL9Uh)mw<=s@poxs zyv6T5hsP&LX#_m9_kvvWd`|M5=5@_V@h^7p|FCA_`o9yEr0lF(rxF=x*7QTkU#f5jRH&>BLr`KNxRM%29l}j_`E*y zb3mhue%s`oj|+WEdep#4RT2RY{dFSrc%s`k?#TPP`_%CDAwEgRZ2W^J$hpA#b*l(? z(0}vj=Hx!lq$kF8`}KUs9JlOK!PhrM{==P3gW^6jHc%VK8A`l*o|Q|$qto4_imJD& zZ`So}u^*6MRv8(jrAfd;zS;G<{%2DZ_oQP}n}2J6;we4_-w)&ui?!Tf+9kCv^$AWj zZ*Cm=#8bxS)sg=uhrH|!hg^C-i(gWRkiBR^C*a}!a!FQ>QJw0yX?`xG)TP!xrj$&_ z*N5{MiJu4e2X^Kc6fAe{o*I5R#h8GH_L7e6r;ob!mST8%{0rSw$?FmXJoFb$q1a&8 zB=2Q^GN-+`S*O3Yc^bYS;LlfH_FLU`LhNnP#3S7mlb zVg533yRlC;!0{Q(FB}3M>S2mp&Dkrg=aDeqc@pqYPrgm}4V<>hu5o=H$JZ`tX(#O; zyt|T>cP=gT$ChoD$LA=?-Xjz65TEPQnA1HpJBr=K)V(HFdX$$a;l~s1&&tLBDAUec zrstv67*IISA#wFk(e;i73_OPla{f2m^5%3VtkOh86tLaI* zA)fvOJhay=X31jS%O}3@yf&SHhw+{s5l>s+G+hq-SQ7Byry}XkiSHs~^}vrN0S|sM zQ)Z7*vtBER*Z8W|^)^$wr`#UJe=p`wl1+$S<{eMsO=)rv}1-ojev)E zDtu}BGdj`gQTt6V>(2Y*rAwso{Xl!~-?ZGeze;YF{H|Yy6TH7BTN3avKeFD`PBM6W zY2M@;HXaYp+}$Waz{B`0Q;|@A;6e51UspMwr2q6Je=@!w@ZYv<#z7~!Iy1?eRkvkK z6c!W_@Q}~n%Et3ndKJxl0i6u-^NT-KO})u*U6T>k3|fLa2A-1bqKg)ZXBhYx}oaTmG(o zw{fKIJU$Qgmcu^IRV~~3d;j?PuPmya!`TEp_-DT|RLz>HwCm6PFMc_vO&g5~ zc!NIf`@~-y97GZXJmk-Tg-zba#YS^S z&clquZ!erb4Cc;#W>oC7HE`Rn&O5O$&PovQFn)d4bStX-F};!R=E-GB?Ow%~!qY!_&x60w-L3PBWL++;75;c@yE%(3fzLyJvVMg;ef4f% z2h2xI0v_V2|D)S{+QDKk)meAu+V#Z+NQ}YP*GA)oMOXiD%q&j3?!fGWbH6uv@x}3Z zh>y&?*3}1oZ1?%J=x5(uh3B`K1U#(wod4WqUjHZ=wDApd=wGxX;GzDoZ_6h*^;IWK zKn2g3fQRv-KY4q}3GV6{Sp`i^x`HvT(Sv(PZeH#?d#gBiM?64nyqsL?HZ#VIeBn|-&_1yo*xSLxJ z20f^_dUMSV%|-bv0v`HTc3jj81~Qd!tU>BAwP~+z8cn_ ze(K!c@?&-X=uVg11;aeu70c5RzsmXidQ*!d99WN~A)dp;@{n(zCy3;?WWJgJ>q!pc zSwcLlC!M?a5u>MRZOJImd-+|5R80o`4Oo2`FWwH%$TI8StPXANSXbt7qLgDk?7wIo zKEL;~z;tci3NP>ziFl3>4}LzFwkE^{+_nUsjd&IT-}9i&>7Yem74ZIuClm0DKGQ=- zPJAzi_n|Stj|;r1AQ9enU47Syvd68 zj&CouKsH6><4dvg)bGQ#RZdn13f)mWYNh-P;!u&DKu$}KX)Z!gSW z&lBEdhR7I3fPNa{iwyDg6~sFhIbECcZ7@DV>-k6meTdJFtUD4MAD2s@&qBPw0AK%Y z%Um7ms6<=PXZ}OKQ(?yDu1gzd!hQ%1@pbxGeONz?-a2*J+m#A`_a8E{|K=OwSwcL- zvujJb`t3xc_0V4w#M6X$=---&vu3VXr+o$TS%Sbn=x6;ZIg@VU5()Yw#8U|LcQ4-2 zag2L!9PoVx!~ILu#kLpxTvn)>GC639&vVt~1NXaJLy8bjnSsHO{HSg+HyZG`zejwHx%uz$J)P~F(v&_?Y-YMoU>HKlU1<#a6is%`CL+? z#`t3JBZqj39F_+^yZZ0siM8JFzn$fJa?hO;;gMAQda?@nQr~50`N8yN{|$>ZU)LEu z(_tRlx!lH!a?@b?fl`a0V`C~6#8^u!s%R_!%zwGo&UzT){sV3c&(EM17 ziSBn(q_8|(@3;n78Q5p$NcW8{d~;=Mfm|-)S!1z0?7v-Br@q>;Nm&H)fs1(RI4lqO zaNF!%)2ZokKbLt_l>FXuaEcuAFA(w%`^h1jdY`Yj!fSx`rp+F1FH=Y#+N-7hjQvft z_so^MF~O@AD0!qIecD8AT&MdROCoO*56+?H9V$Vi_%9?L_18aOTu{xMy& zn{j#4q?!9ANqyj-jO8I8oGPx3@sL)13+-hheTtAiw6|w#g+-Ft6!C4=4?AYr{b*~} z!Ox$$D1TONxZK|FU!Jo;tHj0OqSFFT0v`HHJ&yZ()aw#`h$jW{yh&L95KqxHZ7x4Y zFT3$hmHBerob*mU@=ue&^6>olirAS2%T@2&uL@Zd^)}VL&VLT_FOB8F&kn=dT0<4P zk>}-Eh!;%3@{m6b9;4=bopa0*;@OUP_GBy%@qD(wpmynr1!@UjwT2?bjvDsE&osrH z_kjAaLDF)+>8RjsgYP36`V&vYvxIo)-`V1|)$gZ~W1oh5zklLhVq%PVP6k#V)=TS2 z>6HT)l0L(Dp(36p#6x>$MYZ$<)PG&f3>*Fp1@T2kvHIY@ld5gELO#SB^yLuG7UDtQ ztJEqldFAFmz|&Tv@kPK}-0_~_>anv0-XF_YGt5(jc<`gax;sYgystLslaU{i5D$KQ zv@X=nx&Luwz3qwg`RUm90df2|RXZs_bn~de5{_Ceq`jANG7Nhb)Vj-R_#6$dP%>!oL>d9|myf6??5#ph} zy19>5cXVGeFAtc`iafO89u@SHuzp~^^V_Lc_GjCJql52%8yb&th$jp2pue`m;oU{E zQ~&uaOpWeoTd3R|f$|{{s}Jo>bUZLhd}?fE@ED8hJ#h^?(-2>jfX_$RH_(jN8rVTT za}duF;vqgNmmB8iTZAl#W2fnV@#3GQgC7pQe&_9mJ^CAJB0%2~@pK^`^ds#vPBtDp zR;KeS!7%O8k8eDb&*UJiKGa*wMyumyZ9f-6|I&~?l|cVw@a)gQ^Qz9tNeq935*6{h z!&rUD|J>i!yV~ANY&a=rv*%LVT`dk8zpNB&eV&dA;@gw4&pxPx`c0aNp65k8HyO)= zzJ%YXR;8dZIS?Oz#IuEXh>!bp?*6?C=8UX|S%_y6@B@XSx5}C~whoT3qk4m{7^NYe znuPTO`F5md(#@F9hE(uljCisT4}NCki?p<|oW+2rB3_V))dya$_~Tuv(y+h#KSS5o z6vT6dc!ZIWjc?#}7rI}GPPO^Ap5uhI^AlFu4f2|O3^`~<8Y;Cp>< z^zWHSq5;oDJez>`Q@dk#fR?ZZ@{NIbrVtP9{W9f06GdyMQT6B#EWy7J5A7{6e7q&$ z?bB1h8zY`fz;mUi==_N*ZMo1_`Ngp7%6tjLlQ`J+!h9|AVdDiG1H)ZUvpu_FCQnl3 zqxq417|TPwD)2lWHRD&IGV7-P0{7lHA4|kjqOm+&-yNP8s;KWTGcsQr1JApVRNwU@e))^TD+UCT``ef1+Tq7@6EdJ| zVX`@O_va5e#m=SIO^l7$1U&TD3Tvs!4oW5pE1xeOC4Nz_qTLo>AM$6mjQPa%-$!lS zxN{P_xQpRxOu)nb=ZgP+lx6j1)(zJ4q4frZfQS0_rIS&7V97=)#(#UOnj}&h0T23>CAx-=#x3Bt5J9k~QR(=UBzAD3a9*cm7>%qs3 zl?x0Paeg07zUK41GucsKjqeA}8?57|KR?5K>8QG|=~}uMvow-`hy90w7bloIH6r10 zY!aJ*hw->?@l<0iJxVI%zyCk@ZyD!%-v%ftl$0jiJ)M30u^a&p*ULteCYLndd9r)| z*7D%|pQJ#66@Ggm{wYr77SZvMZG-c>_1{O3nhAKwho4h)MQ2bn&eyB^4DymB-aq)U zb`MD2&BZW1kxB@7h|hZCxR%gU1BDeczf4Jz@|rBL#P<*9qv*a(sgLhge1-K&I{^>+ zDyl~!O=do>Os=|DD%$%Zr)W98z6RQd?Lqr8e0{inZ*`wuVx{1rkgZ>cI`VvuL!=As&OpfE|q|X^Dz4!tQnR1F>ep#rzQap@mw@LiPTn_ zJxf1j`^)*GY3{tG`0a)9@?z|S^NJ6A#P7@PyS!wlmzO315A~C^zr%;o>N6GU6`6pC z{G4ik+1n{HFdF6MGa~X` zwZ&&zbWto1>y4PvhmK!v*GMQZ zitH*9>wZ&(ctH;K`U2{$!YYy8rsEGCDz*fe*{-8S$lV^+r@GI__z6HAw0qK~2oKW^ z^}*}Mp-T)7(x;rp>O=p2EVf9^IjXm;yr#<4cf80dx$RWc+ zdSgex{mBpdcql%QAm|g?Yw&5^gJTsTwf@>|Y|RjD20>Ss($tur%HOJaHY zu>flD^Y*&y_XUE|W2o;RoUb!PN(gxHGgs5V_$7rkf6)KX{m@(j9^!vt zTS1M3Y~`)N@3R=v=MeCqFOzO2n6%ZmAI=|o67Z1Ec9~Xb>7E9E-~TY=he5!DpC?Hx z{5Mb>#*dGB)2%=6v3_JJete*QDy%V?qIR*}cC~Y>!tCUl8~khdJk*O_`EjqlYgj6Q7rRjEPS6Jjev*tj@I(@ zh+l1xEB12FO-B#GnCA2N`Y_(dza6c-AWlR!*LICTNJxQN5djb5Wue!)b9xh(_VUuX z#u?OgXITV1^q2RYQA?K}_?a5~X~zDC|2^muoWu76`S9&dyd}?Uan|7bz7lgR2d@_h zco^?a3)MmfoDUytKN03o)AX~qt^i+O1;z8Ietg!m2XnRFlWbk@L~Flf5b#iMZztDO zo||<3PrZy)hHAjzejou4egsLEeV&-;&ynv*+*G{8#klA!z8|Qc_2bGZ`&UsBaVk9>#n3+#c71OP_7pCo}s{ua3VG ziGYXo=MvTD)v2-b7cLEZcxu`d_b0s5`0a)Gm_~a$7Tx_IHPvD)gHca;Mxig+b9LI;QFGDfQNcj zYF9V!`iITVU-&(|fpIT;{0Vp%U%JIn3HGx-Wh_0GLZ1?GQB07H?+5myrW)kPs$Q+% zbDokrscPDz42hHYJj@ro3CV6R_2`j<{X4Xu-**C^hyFdhp{+V%_JvsB+yB8!X|=aZ z-mq@xUTveNY-?Ua5dja^?>Ud{(r)!U8QG7`CE(%uZu}yb4N@D#6$bqbeZN>50T2Fp z*R=}DpHBP$*N+?m9`r*ScPs2lT6JS+b8@i8unBn3KdBTI|J<+q>x~Nzh2u@VepYeu z;|b?=9mNuxoxl4GK)w|b@Q`nB&Redp4%|6c^ai8)cbJSklYocoDW#Y(IgQ5QTOSo^ zO)kjQUEG|7?+5bdCgr@}?ZtXc3a{4`Ur}yNWDxK$zOu-_62*T{pFH+#^dX81*Pe15 zUmy0DUi!>0)KBJh{Jme_WIX7SfQS0P*|#~)YGHw>_i;thy${A#duHP6&qMV;sZmX} zVzri{>fE=Ne5T&pT$h2*L;Va0aW8$5U!4K^?keMWPE*ykDgKHIJT~#f7G8_mrFe&rMUz=)GL9w z)al5(a`y_K{wh+`yd0uQz{C2@SyC+bx6Xq*bB3aK*l=jD);<&=-OhdPyo89+5I8;9-2N`_Vl=!{~WE@7m$wm^-n2@DQJ0-EY<} zHK*&e9uHdG7l*G8!gDL4ddPBj8*L&?-`5lAKoAP+9$<( z(r@Ka`i`lFSOOE>V zx?ti-PXZpUchu4zCg0xvL2Km`i?P~fo(x)pIMX7ElK80Et}Go7vM1~s;X|-KW846hkRp|hfr3X-QW-UmPo&d zKwsnDcecB}=ShIra~tUk0?qG5S*_TE1UGC`|agX2W5Q4r5xhvi|sq`c|UD!iWS z%QjeG6M0l`dtcMAf0_^v>;F><~y9o|AzS@ZLB`52aea%XE16q z7iW!$h&g6BVMP_vXS!f{sGlY@)sVwUf3DtIW4hTOUTzBw@oZ--5B^W;F=9KO(R~Z@ z>g_6?xiCE+4*OxMVfpDO-}ZjZ{5JUtb>w*&9@6JKVR?wBqu>wA%rkK0JZA~Shk%dm z8fA3*084Cee|6~mJRSKdVqoF5+2^_fiSn4qZ>BA)dJk%Y%QH z63wZbw&%M6ABlLnEj}-qnVp`Up<)lugEPU84VH&|TlxLy4p|5F0GAJ8zmAz-CQ%zv z|1QSzswh6|rL+W9H)_r3O%7!`YonfRo|M?ZD{Ar(RG zFpuO$KA@gwnJL*Dh3mWcYB9g=WAAv*x{uF0pub%7>^wC%ugyxnW$hxTTBX?xs~}{P_RptIurtuq3?cD*SyN z0T20eXXmOH4^v4ufv@@pZz{5Kt(oMl$od;=oylF`e)_SRPPzj@r? zU7}=y{Dk#z^)EsDRH;*&A)Y)mAF+hyBZ#Nfjw5Sye0Qt?o{j1`N2s0ye?Go=DrKs2 z?`N&Ks~mn;US%L&IR4Py6|zA`X0KkY3;Ik{4{1X68T6kNB(0DR-&X~^CDcz)OcH+YD4p-pzn#sFKawL?^xq5uKTf+4(($SjCb%89_-}0 zHzVdY@Qi=(aSIl$I@EE441U^C{pSkRf6x#9b}UvYgYg!4?(5<4&WXhL|AIeZ)~il6 zCiqE1Jd=RWqO{ImmZs|nyx`feK8=7MKl8<#fa%nc=Px)&Ul4)s=hC|Jn1?F+JwU(Y z`LI5hfFH*x+Z}1t6A$fWBfiKTU%yFo%i>gv8Z-F5o=C(~g!Calm0x(O-15qM6|(q3 zc=dvrI~mA7FC426>tW07^J3HvG(26N_-T8`%XVu4==)%K*st!rKlN-*_Km}ro>ko1 z{QmnlcI$9^SqHH^jNiUiBem|1ak_2xhwoHa+KI>^o*9PaVg5R>UN3tZS?BcN{o zm21!#To1H-H$N=W&PVMP;-NnGNU+@a7wWctAFvXq?n^n$e>u#P2>4m+i#L1Cwp5qs zccAv1JFVJ>@{_k2>j(A&Ex$FMrjkQ+;JgzX`Jsnkd5EWdoy9d>j!#iARv-3fHlOa@zM#{i3-o!2XAAM5ADt4`f1*z8!N4mom*lExMwWx(f`bKphQMm32`9niIU5E$$V(V)nkqv$_wT`9dm>yZSWYk||SFAqlUzMs?G|PWK zxDDP1^!7$pC_ab{%sbEFZr1BKylQ<+BoBdPFsu6cogiy>cf88>aYh= zzEf|WgnTGM@vQT}@}RF=JlFD_WnRw1UAYe7h7PiVrzqcquE$~gR%^eJG<%znl)JV2 z{uQsIF=WJ#vjR zw`{)edGMD{dM=uegn8Ki$-dl>e3Kia3jNFP9rjiy5?DZ{fta;37)1yBN)AYEA7pP$MVZ0pIl6zKuYuxJm-OM#E{rWFxh$ky!d6*wB zIc%SJ+Ez>r{1_v?XgZc3@&9yNq}-!OfAB*>JZ~D72S0h+gC#X8x6NxHy;$y$@nc>4 zx8eBEl(0PX*ABh6-X|T-N?*X5NcnSgE;bp4tG;Z6ATk|&0mn*n-#~<+|d3^nq%O0zrnPXiAJOlCk zsrbB}Q$%e-27N{N!L_XXcg^*hi04ef@-V*UUECG5!q_Dl_`a_wp0fD-3v&O|iW_r} zK!5QNPm;m%&|e2?qc6Mui5@v0TLSvhSRV4BS1y}u-b7qr?Y83Rv8eBCeXcnAKqci_`QUWaZ$d*u+%e2e9wy`ozKq*tnr z8TtNhGU5e?u{^Z5xn|Rb=^qCSp}i7_7p@P$d)dv?m~-LfzJ<-9E%Ot%FK_P|?k`~; z@-wmjWcA!wu}g#Jdxwx_#50BbK>n|ADW7*JUfl=yD#TL>c&@TkuY7Nom4u9^_8+O& zDY^gf^YGl2n4~ePu8gk+Nq_IBa0qx9zfJrtw=~*EkqWa*cD=D~i18%gVf_#>uYFwX zw`X52T2}`&#mhdH`-C5#Y80>vriG1ZuI46X$wfW(*$untAMtrOKeM99b&7+thEm}|Joquoi}#tm%PPWs>-P6WPOYKMo%s67C_dffCf!ka%SP#ri=Drt zQZtl8z>h`z+d0imcbH;@o;s(VL@RE3&TGflhx3`+B^wp*?XIj}Br<)EMUQik+QR|MnBn1F}z#kp*1l~HTJj$It# z>0hH1$tRfKVgE4Vs^ZVFlQ+Hw{dP2ean!N(2lTf;J#yGuEtdwo0Om&mzG(Nj<-Uxg zBhSP3A-;})r@pl7>e&=~7xYQrhvOq4;7=No&lCnccna$!2FYn?oxu*l`iFXwGVL`r zIH)HfteI;evOw!h^8nJHgXN`A{GB2y#MY{b{{lZHV~6#rLi!M&mFL%FX3ey`7`*qs zVtviL@0t?Be4Rg5AMQtM$4$#E4&OQwPYU9hLOkfpoVwat=-hAy{Kz4mM!-uaFNn7u z*k&j0_v_e^Z7VzK#ti!@^27Rp{O=%7SSx;bpfg*7e`R^5%XB%!3wB|7xIcS;t+vk- zk6O*FpE>@`E4H5Iix2B_c4B#$UoPcjey~xMNeGQlcD!fXxu68`Ocs`h@!pr6d}@YN zcxdR97fC@AS0}N7-;U)$U)-Hj#@?P>2l4SoJWYs)c&7T&L>6B%QHA{q>Q6Ktg?N}> zEI#*VJ=(I~UXEt+XJUFo3r}RYy(~MdAGp8636A^q_^F%JNPZ$eTpuhC`Dw1?zEYlj zB=GhWg~bYFzw_-tV4jFJ6(I%+RTNFU<=mH%N$M2lR< ziHfZKf8K6dr-^uhH&!3=Va+SMs7(u(h)>eU3RyDVh}14N?4K#b!}XMol3@1|uj9S9 zQwk2xdQ)WNk9fW(Rv)f+@~2MNEqXP0V{1gXscmaY8x_TqzY?D}*8M3PG0S>=&;g_Z{KCnJ5fkUqq}mZaFT*g5O;*K-kB%J&0{xW9+< zlQ$o$56{0*~KCA~!Cd^DfNckvI zEGe~T;y9XYB;qO7SbgxbSa!j^kTpd=^+s)OzxvGbdSCx=d{|ak9`Yw9;?boJ-6$J) z-xmw%^Oj?I@T06X^V(OPnX-ec3H3)4@%*J&ec-Ft)hz2} ztBmZwQU0MXU$x0n*67@a2kXdHqrBT+(Ekj#m%RY1uY!#6NjH*Szi{(|_C})op%`O% zXsDsFY7_y{~!806%s@WP9;tP zo`ra-K2{(67=-GKIl9F*O#AzRgiBdpM@bOq!~X4#16xFb(w>$<`~|3<*Xd#PA^sKz zrvG`hzjEY$P&>>=Lh%Pb)jo5aClJ@!a>L`KY|Q@144XoBw-cYg$6ULq6QP9(~%Y)~y8Q3(i0Ie0?|l zWZMje)8|uGDx#OoJpaMZIcL2pDmuOw&SO{-@K8_gz3Ry-aT=v9aHuN0;kwX>{{z2X z!Fc>?pRk}ZJhbC@vP897;K`pn0v_~>6aG+N2OeMQkhJf`+*LPIa|w7Dzmj2{OOH1m z`#9E0?3v@AiKdYRJm@c9Sup0ZED!Z6%H#5@var|M@Vo{C^xt85&~GYQe<<-@ow6k7+{qW^BEQq7566>z z8_UD}&}Y3eNqe&OP7m%cP0k(cR7<2U+`pi|C4Y73;>U7I@P1cSbfNUsVG_94e_^cgC9A> zvtqD3_$gWZqH*b|)q20nW<-?ex=)vzhVo6Q!4&krH~kkbHE~wxWpaw2+(EOP=K>{s z9`xtjE=_&MN)Lp5;1lrB-UuaXKxJ%W5{#F+fAE3I0!Op&57WI95BVN#l3c=)#rN|O z`A^X;_xK|oq>_2eqU*GAsJkTr5B_5>HOZX0udV-hfp}QWvWYJ!|KPcM*DsT4eKghE zb>q>g$-mV}1U!u2nyF>^69SpPAU*;aeE$%i^!h#C^6Ab!8^y}w--BH$c7N!Z+!Lo&?~bPv@ZjeWTRQRWn2$?OuiIks-tD|^yEMKZn7<;@c6VhIyiOl{ zALCGjn+bUEUy%LEph|g*`6Y|hN$a(?tgV}XuYUsdSE!!abC=GCE_Yrzj=MzSJmn&u zDwNM~{rI@4b4L2zwJ*@0lhO$Ep`Lu&qC9p5<>7;&=OrzVi?9iJn7<0vx5phDL$|zs zHcewrqt+2Q0v_U%-<+Q0I&-T*lA*L+Le_j2+Ial-!u|0vcCUUqznpl~{-9On-#s}^ z0v`ONTV~f4wtQdk=*_$C(^C{RO2*;q!+t{2a`A~v7(P12Eh>KkrQgxm1U&2ym}pQ3 zmLK#8r`jLZ|Mk!}(DEPrXuG?g@4i~Q&|W>{@Q{B39`db1{{Fa4;#Uhen-j0BGx6Fi zkiz#5ev0&4*3WttbRFg+#*AT}GI;^!elF-Aaf?x9CM=SP_g>NE_w#iG8SzCEu{_kz z@3(nIvpeV3Lj7!4AJ(S|@lYS0zTbRSMs|hHzQVSd|2009<08Ij9KQZ~_p{Hm?p@Xd zeSgpw;z8e}QSKZ^Fy|nww^@iMNn!ONpEK)|edu+4Bm1|Wh^I;7^J>8)#>cuVBku!b zg8o>1K6F=ke?afJk@Kz$@Grp5FW^UVbK&&M=W}{#{Z%XJu1i}>)bRTko*$Wip;5Ph z61#Ul=jz)zV^`-f2zazKP@;hDC(=I-?Mc8*lV*N69GWL~rH+HgQcCc{B& z>cvTd7%Bk|`|Sf}+YYufwM~I9W?KBb1?ytKkkM~_+aZr72@3@TdhK|O*`*q_{Z zL_I_K+9waV{v{Lekk7828u!09KO@l!e}uJ1rPRu44Ey2AVfzd6`9J=>ewn46F@m#Y z+-A+Er~D!RrLjDGU-N|vqPnTQpI<`0MIwEHJeG(472jY|_wB|sYi71+jeVG^78CIt zAs+JC^^JbJ^yE(r%9}XdM@K~4c(aH73ly;W=TV@}_I;ImDYbFn=Ss?tqoJmuY{Wwx z;S=^(AFd9R7R2_x99%zS{+)AJ1U$?~d2NDn+VZw*pyNrvLwipeeX{LJwKQXV^@;!c zH*^9X>T@wS((1`P%V#TSVwvTKn5t>o`1u3(FUD_O;(P4E>(9}Cs^aGVN7$Li#q@=L zd?-pPBP6X;lG09;N(~he844kpB(gS@B}*Agq{I|y5e=msqdi4aL|>6nN+L~KRKg@G zvizpzJpF!mUUPr><9qRa_whN;dCqgrJ@?KTg*&!JI6TZR-}lXS2(M|lbZ^Xxy>3&! zgp|(`tq*)_;Qrw8q4TR}iMxf=9OT_#;P6myEhe?U^DFUK51%ii;qZ{3V=f+`UFYu9 zO!~0iJMH924KfZ7^R;=E)YG~tZu8f7_)sQl8%Fx;i1rW9i$g!RsY<0C%>T})J#a0n z;hGT+5BXn_SFwd`;W7C6DN;XwKTrXOhyFUHuv7sylD23+@I1Fe zeUeg(ONC+XpR+3e#hLhWQT{_d!4>i|#41GbDw!vm4kVWANwhLHuAq2JHDX5A}w^ke15jbckuJhgY$I?;^}T!9{fD= zPqh8`FJa&C`DTbW+9aB{$URIWcr2L--xo|nJbNRS2S0D#+1ahn*gfF8S;=XwY|tDE z_=iBEEATy(Zu38m+JW#s5*dew@g6s-tA9?V!aBJBG8%#JJ91m>a8LN~`{dMpuj88h6Br;iJk+9~U*#6|I; z2<6YvW&^)3?lCPtv>Pbhg!zL1&ZS@-b{*>n0@7RkQEiQ#Z!O&4X(OJ=#PZ;0n%3{` zXv&)1z*8**`bIc>M{H{6Hdf|kK0kC`gaXp%#f#Qg`n}o|QnK zEX2e7^}8>HFlP2CUH*R8P$qH_PZZ+8|Heh(CVPu}Uj|1$b<~*pXq?#sfj-w8>j&z? z1!omrezWS<8GuVH!c^J}J|-KnKfD`0qVEd~0V(^wwjf2#dvE8|0h z;gVG>_07rziFU;Egm~!R?>?66;sZTOp?_J(4^_wy=jIH zoU2$rP_OzUPNi(xzAzE|(-6-T;z8ecwd(j2y(VG6dqI3~_?#!|&prg5T`=q)#h;49 z&mU9x@VIQ-gfZ$_R$>iGv^vBa#bEu*Ap_4f6V`Zc9g`m3!k=9Dzu1T;2=Op}Q`|cr zG1IIJ(T@}IAs?c#`q18<&$oXa)j6`7%F-KOqrF4PAN)sQd5Gtlvb(896WbK-oY-Y~ z?O}SJKN>HLZCG9(8F*cBUSjSG#R~94Lp)802R|D|eR%cI%}sDPKmUhZ5YH8=SHKTw zeWt|bUdji33gY3pDFOqBhxose;?2l)t}mZBQ=ml0;bHtvOCH<(H|YMPq0MdnkI+WoS4yjCG*di% zj*jV=Qn>Ex>wGiO{!LLs*2;QU_0Np>HLmE7OXn-<4h9Yn<2`J&MR&n(`DI6(;wGP{ zNzT;9;i3MM?#;+}+v}|{@Y~_)9LDGq!KR}9!2Oq&ye;{N9e3Jbz3t_vG!2J`c>cEh zHuc!_gxS{?M}5?b@BBo-;bH%wKtDr&kA@ zSncLB2A@*wad_Cjjce>pU1q5>Hyl+IGaMfJw{b(jCDr<|pHdQf14^~Sb|~QRu--UN zJhjpE&$6hs{gqd)@(ATb6Vd(`qW*mnc|gBLf4qenYLFxj5BWbeX>8z?X*;f$*H$jG zU#Te1LGv||8@|AJ&!$Iq__w5+2gyYevTA0<*DV(KVX(2|9sE}tkDBr=Z0m2gxKiT; zy0~Ww;#tL59^!v8bIc?wC1V4ae~oMe`ZOUP;@OrsJ#4a6_OqW`#4bN(R<5TbecA)8 zKIHQP$>Ke6-6p4`XYXj-{)4dC$WEYdRD|UPyNd+E{fI@U&sZJ}qkrnAO6^;fzg^Vj|*Gh)5cJY%8$*CC!M#6$ddx67xW&0l43e$k0pWlifCEW{J?vHIZO|47l+ z`puKlKtBcXygV!q`g;h!dgi2cSOCvNJO_uDUg6tW8+okUv;A^P^PBi}{)ndt@!%&U zJK8icJlOonk}}hGZ4oEzK|dGk2l_WUGk4>K86_XSU-{V~|7(mM3Gv(55BvdxgsE56eJo*p%R}ounh+29Nnem;?LNW2=Apr7*FN@`lWe3<5aL09 z&+9KHqbE6(L4V~Vo|}pF1O405pLFY|&8p$=7h@rwjl(ZKerPK%+kKI^RqU5k%O@>f z(B8XPeYl?$CpN7fW3K)R{7?~37vjOs;v%i*KW~LDgu>y1crp&p(O*o9oql&E=u;3+ z!r`xXuH2cMp~oG1nTr39kP*+lgY^&bPn&XsRkf7G4bL9Tho@qa;Quz3hkSFsFsgNl zxDg@go-)O2U5_(oks#m5x3K(hJ)Dw0@Qk?7K_XekWaq?l$^M9^q+@y5uPczX*lKmj zf4?!sWb)};oo;`W&*Wq*4}SJ}pD>>txdN6S1RCO*Nmw4@FEwlHjfEXC!~1Doi037U z=1=dL9Cqkd*nKcB=WY5eRxl0^@sB;rD@bPi9{#>II^wB9{=v_*v44v;=b0at+}R~( z6PELaf};=hup!N0`^naz)e{BFc>)=ShkU+a?y|5;U32(+2F6-6e@(W=JdXfBYwC;j zC)i{=Zi{FsdpK^r4|}zMXS~Dq7p#{K$u8@zt=#~x6A*$|33wuo{?!8;zFSOQ5$}-@ z8rPj|RmVWQQ4LmK3w2!Z)Q0Tmfd?q?JcWk*Qzl{kLw`+rZ5$E4F7jHE^mB{M&SU$c zodte416Y0F+2;Lo{WN!0fIbE3Gv!3P2=v*dSbfM(PqlOP zCW%R~T}-eC|3dl@|0Yvz^jXF7;qwZ}&|f&bb)f1$+v_$@U_6>3o;nfhAM_7vu}Ba4 zChvmzNE_Nq#PX0oeRIsEeDbAQL7#+p&IBwE`Z4T%4|JEkGzVS*@gyAHWY324QhJ#y z!H*>Pm&NLXAMW8S>#aqx%E0%pLGhOn&F8(XJrlLDdiZ<;9^xrNJowL;w=7eAUHbpN zPl$MyG*%z@`lSUjZL>d_L>ExcQ^Y^KC`UX=h=+WWWrW3tOg~ft@nIvLIbO7WsL$yN zISt8uz~>{LhQs^J)1Ep0e$#&7S%@d&@XG$OQ==V2NXuBwkCMs8eehShj;^?by%?)4Ev~zg>jfr@kl<4+a6uVk)UaMWYobqn#rP)rY1jHLj zV0pM7Jg~p7%uzjVHu&jB{)s|7^w+_F`=*<9H?m;7*CF0$ELI=-tH$cgW)GLzzmRX` zp#K*eAIQ&|qYEFFCCbEsA2#B7f3Q6GanjSu`l$VS7V!Cq=iu;J#sN}>ff;j%1r|QZ zfjKT_PJ;Yrbz$|@QTWeE4|H7?3EY1Pe?`eneqy&5A$6@ z%Et|PJNG$*z6;cIAs+PKKc9C0tPJBg=$j#)`x2`U@jpb>{6y<+IRN@bi08e)@}Tc( zaL#j49XO^8{+VwKm9E| zZ%I*t-HoaL?F*};-z2OMtq-3E9Njo`XTTKBH?wWdj$N;wtQEN@o%fknB*KX-Y`zMe$aE0|@j?2KgxgS;e=XKjfXat-e zZNFaNhiM?X-fH=eFPJxLxgU&o&ISQb7vf>OGaOTvvJ%3qfiFiq6^D09`Tin*wOax3 zY{ZjscW)RtF*c-kYL zCd5O0cHUc5urXYI7C-(rgFj*f{)Kq(FRrrG%~N?-ANbKmJaL9-{}v_oCERUK6Zre{ zLtAnRh-YhJdGJ#{&e)+-!EqYs_oI9!3Gomg-Ssuer(Q+R0DVcMPn|AWfA@5;)ZC4wIhs$~*NOHI^Os&s+*-BgNg4HbAN#y~`Q&#n z4iEb+xAv>)JxlvjCE;)}IcW5PJ}M3m?WLz`>4d&DkM+2FAmPQ=^YchJJow-JLQPiJ ze{0sty!pBpJ{yVmqx(CUC*TVDeU2Z`EPip?6!NDXhll)ej~G|GWK3)v=x}j(7%%*@ z+)6gli)9yjD!KG7|NWDpEyrja9`c#d zR$!GirDphjMY5})e~D(;{0ILU6Lwux=KdSLUob;F&r~#T{P$*#)BdUO`Yyo;@hlvE z_g@pmYl+;NtE#D~c!!g9_Lq4xHriNXuDe5-;^WT^Hnw@3}h==&X6+UlU zyCeE|?uOiF;Vpvq6C`nX=wFge>9-?tnUt4{1xo#>9)d1hfp<8Yo9SBphNH0k^6zt+ z^MmSecv$}=O3QZ{F3L(8r#AP!? z_9&i4LjAQF8B?rN)lob*J%K;}4t<`2d`O^AzmC-h|7k@_Zn-U#dj{(_65@GGED!!0 zZd{PG%!ux2+LSrjepyu;)gSp^isfOxQj}YF;s#}(Ih?20e^9`agm~!R+j_rt7aj;) z3g?}25Kp$p>O=lJAI-icssF5(Wk=wIDxLZlykDRX{RG#g=r{d8Ot{ao&C4cMWY|A5 zJf>uZ!^8734aXbVwUKkiR$eId z&oHva9nL~+s=yC-F*cs?KH+QG;v20lqe?vPN&Xer`@4hdBicVaUtUmLv1Ih#yb$Pb z64ECK^%v9=DSy|}F!qgy?4a5ynUjh1O2Q64{}yx(11BzDr0zR6Glhllmdma3@b2XAyV z>3NjrdTSL|Fn5S3!T)LP*`DRn2N-XX>^7bM(Yu4~ zB|1KE-s$3O$G(~@_TBm8w3R;Jj=aLyBAS1U;`#aWRHM}=?))0<(LAQ<_xkHJ93JX} z{eZr8{?Vv~t~ZV6Z1#BZmIw6^CL(k-Lf6$tepyYC$Z3Gj=hDv#{4jd3^%?Zl*>0sv zrcU3u^Y+viQ`E+lkP%N1;vs(u#xEJaEj4z{(wrxS$9KCdNeLF{lX+Nuc%b$}ydiU~ zOUrVw%S1fwE0%|P-W4QS-5V7C0r+Udv%5s|>C2C3)va{9&(F7^{fc13lZ1Ha-&w|e zEeW%xhQa(oM?CA3X#MJYUYYmSeTY+THyQd7FVGj_VSYTK>7cQ)UL|Ux*75qm^V2AZ z=X7HAfzJ&X{r>*8&Qq}eWem%chKs8dfN#a>L%sUZ$NZ1+ zW>&V}*Bj{gtGgcqQmpFG%sqO`b zAn31h#FO7)dGH@D`+TZ_er_M|9K`cJi00iwv?ec2Jn*HIo=1;OSXdeHg#v9`-4i)7H0LdvR*jX=4-l_7kYRrC1(r&=gW?k4x3h zONDrH5Kj@}A)XFnRSr!zeCQF7aK@(ocz+ZJt%srgaE0+`xOkn5`bvYGg`@JNiciPR zjYj&w!4>8UvvEovw%L9ymCH=rF!_SRBJ?j0U999+<&&fJsekMumT>KH zc$lx}OkZ;AmBF#Hsn@2O*R52bQ;wkarepH~+I#3#gG|4oohHn8W=Nl2g5@DUy|?6= zUM(pZexJ<<@fu3G-ctkzaD{aKHaQNq?MR8eUUDm;Qmm_I1$|Dyq{5E`iAiV#Q`c;2+py+&n`^}EJn`d<9 zMUAJ5&7%$;;m$-n=N?uc@_*{ekfZI-PlrJ~8HhI$;=w;}`H_g8nKcK2rz4(KfYk?H zZF)^l(!~$Cr#!^==v?`4JO#%;)Xyi!8G0KFDekdsxv4g>1WO~t6NU7_e|*c)rwO$x z%V7V9gm_NAXg>i9g1fKp+HxBDR{{JB@sJPySSmpwepmML+dFjLizMP{LOis0g6*=t z>7yw&n9LOCX*+R6j{VJm`^JA)W*JIDBf4ndzx(yIIpSGJ7*Cm;IN5cw#PAAI78eOqE)dQUwacKN|7e z94rt1jSPHwbKmV5-j8A+o-M>fe2%7mlW9q|u7myxMm!UTe_4~;j zTQ_S)P^ap+4to~jc`U3x%wNZ^nKw^+q&peTFG@i?ONa+Q_WgN<|1RoQ!SiK0;-QYi z75Zzglkbj4zbIyu=M`Vty$<{$;_&c1ZVS8h^|eJlQ@1KtnQt3d{9}sspK;Ip!B2*0{RGFhiDA=oixyc&*JZ2Ejxhs2siJvB>xqqlA6%BR*O)5n z8wUpx5l>6O@(|A@&s=ZY*tqUZ-Cy>kHsfGL|6xJCQIfGdw0EEM(hKXif7lCtxQHht zispkSRdW|B+`TucII-c`7R9w@z(dEPE4;v|L~Gbutz>v!_w4Cyt*TGY5OH|$KSp-c zg3ry&wxDCHDZh3#B=SaBFKy$BJya1}cc1_*;id zm*mE~d%o;+BpM-}DU0P{K6TyyG*8PinmE>mqPQ;ikR|Cn>Mt=YzX-)uLJZBV^hxx9xuRK*}CS@IxCnzBQEFm81gUOsfxpO-1m$bH2Z(cj$#V!S;&+Ehb zhxORKS+ScW@61u}(YyRkGQ0M(%Q-=N;opNR)MJ;t%sb49F2bfV?drJ(z3Bb@f$sNYkP<&`r({uo8q>d#jx?GS+<)^}`tAb*1E6;}4FX&!!F z%tZPuA$^EH=e}8aVgJu;*F=L%hw-fzE;#-nKCx+=iz#lY3kaR3dXKFZZ#2T;Vf@+| zNH2aXxlVJ&a_-|Vg#0`v@(=w4SJ=eH)=_NWJo`Ite`P?b}M~o1AE1u92s^IbdaXm3y5KpoKHlJa<*e*IS?wjSoGvHGa z@dP0r;@Q9c;>@wTz1c3`=MVjp<%s7fVfCTjeyS}ZhEl!g=9|{OmA$-VNi^cQidY`< zt=e=?v{LL7QVDT^QDKuzP|78NfBJMR5BF3HzeJ4^tV-Lw-^V zU!P_N{u*8nvk(vQg)8*elcl$veY(wO$jAqrAN+p|93JY=_4dn@R~Z|RT+uO(9lgq` znhX5}!st2=UH`3`F>r0ObjonOh!pte7-0QF|2A`}sr1|XR|8K0UQaatkVL$Y9Rk$1OQfDwMYW|p_fQZ6vTa`-6$M-Yb~S z2xf@q?ZxuoUxKoGp~ExAQrQ30Mm$@Hhxp4nFRlpism&d}e?&Y3hflET3m<12$W@;k zuaL1${sJ>r;GZWH&pXJ!rTD$u+0KW8SmEagElXA`p&?#4K9Fw;(T@nrt_2k%&WchQ;<1@m0SJq@zNr+Qp1pbBn zK>z>gBzBHv`Cq>OeTF4>Te6iA4iEly8B&=uM^Jk)1Rv00Yk8|3-t6Z#Ad=@c9u`q$&SPT=1)1zm4=4k_Q#mnze6 zc<|#nxAa=w_1%U1`?aC{RVoe-`jq{5_h@p-cH57o--*2TyN`&&L;dL_wQcl$H;QVF%7`q;ni}nNc$G5ckN(xhRXYsS%3*EOqSw!RTP@knX z9+WXy{P3rpjFGjh%<}_gBk;xaIgCveiZA)^;|-m+qm9Eu{GI+um!1;u9~kT}x&7h< zA`TDZN9=9fybh{WN1+ zT+CzJr-SD`4xSh7g~NlNZ+S~Q&2Fz8{ytDD4iEJ$`0LZj)BJL8c8>en{?pFmwpq5I zzc~M4>mkfXm6bga)oN^&ZHIrnU0`feU7jW2$xpC6+;19v+c`heLS{|Y{R(9@=Fxj~ znF5}djOF3{f9;76)=Nyp(;~4vjIYIhS>e4m%EO zMdzCaDoB#nk{V5GZ{&qN{^9ub;q!7A93J#Hm$+DQcG%=ys%~FC-dp#KJ?sD1&wgw% zXVtQ6(Sz^*B=Y}FBOD(3i@5Xt#u%Lv+MoAL3nnBa$FOdR)~6u<&zj3RlC_R)f3Y*B z?`Z$~a{mm`{7l66Og~HfMqaq<;FfafIGO*-+S5eygJbN$7f{cHjb5AQRi2NvEQnE3g3m*0JxZ=PMf`KhA)!2G`YSp(CN zHns4bk5{O}nF-bYI6RE6=-fh;`d{69Yeog9ZvUYvLBQdmzFjl$u`&{ySSDyafzY2K z+7FBunPi>*qBlntywuzim%#raE)Ea-0nX)Y(!B~S1-byIM7$Tz9U){kgs z)>senzI=Uu93JLJf0p=#@UefaAO1H}Ub1$4B`Ha?e+SgSwulhZ=k7_=w`U)+uXyCy zm){i4!+cSH`VIe}y(}Ca+Uq~N;b9=DaQJ+9UY&EKC=Z{K__f~&)a{N!szxg?H=F~amh-V1#FkTAY`^+9SGndPsUxxOd z^AXSCVfBaSBk8%bTRi8lh4Z+Wh$jm15dVXowevonTpn6BH){D*%HCTP#IrwR^k@wENJ?-%>9>miO{0s5Wzmwm5ak9;t^+{3Qy()>H zgW8Cv3-O?DOuTS6gt5~F^ht;(3h|)teXhRy#+wt_z$+l0(uwsCydg6rd9D4j;m?Z^ z5zp-q%}>{;+;r&ZhxL-RcQ^HCCKcA@qw&&?qq0A$i?!Yzpm`$gNM~8{A`;y&M1EJTbm8_p&rY_`cqFO z#-KN*a`|vP5zi3fAwB_?u2(G9%}fHG1%B$V`oQmVtZzvr@9=yS{%+vwKJ&L;h)3mh z_yY6S1%-)Wh4!lty?L-FbH@6(8AKc&>TTMx*FmJ#UqKe?PZM`-IA=x4MfoAarLe+Sso%V+J*=`+INA^tn02!FOqti3%ak<#`dZ`=lUj%a;YzopwBcp(7bb35-n@TI7d;x)fATME|HAvC zO^c4ro^)vsFP>$xeW71tdCGl3d?@1 za0?ao6Bvjm2=P!4Z->6Rzx#mWFXOFNqjoR+HovY&;Dt`x5Fz3n#ee=fo8}k(& zS(hdGm!%+{DTd`?eC4W)9Tk??Zp5$uadPevqZx=N3GvWh&Qp>d(%aZA(B5Fg6NGqZ zZ^hx*v*|fwA-xH7#B)bu{Q$4DOoDdZGJaurB7d`j|BHrrmJko|sowVa*Bw7O9sc>= zLq~kOfFB_q{D*(CiJcX?Rq!$rU!MYgMv3-wVr)Bk*S6D#AV2L9&&K216Qm=e-qBn% z`6G@0%M9@}As+lc?s@zsaQEv}_`U#MA?jZoJ|)!es%)6?yz2RPyk%c?_b4EJG6Cx! z#(Q&=9ZSh6cqZhVB;tueJotH{Vd_8bcE}uPF9G!bVaE&f*UjQ8v8z`u#+-V1>F>`= zvy)lKKj#mYhxK`$XX6Z~6GTW?LJHysWA%T3fqv;7nTBKIJ}Q>jMixq6dSmL3!$UqR zO^VvT-Tl*C@J~ZLL&y*4+qGWburH#3|9z=~{vwqM;?Fd|#uMVh=r!+3*_iwacp~Cy zIQ+)1C-1gPtRwvx-o!^3zClkVzNn&`R?^mz|N#|QW$$sgArU(o+oted}Vov!YfkHf?IZRVEz z1u|*&HWSMQ&r_HFBwBhaO}30-q8x4iEcp^HQe!tL&P?-lfI)Vf@qi zML*16LLCh2ACJvi+6k#<@8Ey8mkZjU#Fnk{DMfnJhvX;)TXb z020jA4SJAQRl+jex+?gBy8o%TidjIc@IVFLw$RG&V>|Gn%1;XzhsNXfw=*aIJ^q-@1$`5jQzfOx?b@;|UV*HTL9qq=Iq#kaTq#!P17@Zg8M#=ew&XY%MEr#;H9)Y+l- zI6Sm>y3BN^pq2M32G6${%n>6T9`a|h`6OxE!~UQ6{Lp+ydMStxF%a9oP*3b0{|)+h z#6V@r?&hi8`Apeh#8c>49@dkOXN{Fo{Q7(h|6%&j{7yqW=NOg;KLfL6HEhK599Egw z%BAp=mV$Vy5D(+4P(#bS^k4f81(@pK^`{3sY}`wv{K zwgp}r@l+h18Q_)aCw6Tye7}ql;z>e0#FM)7XZHlHHVZz#Y;X&O2!0M?+Y9;7e0tS8 zr_$1=rzAXj#(I|C=zk%IC;NbC-s(+!qQR}DK``!kh=)JJ724aV-zj?ooz%+S`A+3axYI?ZAMLqleHbqdzq0Vq&;F*YL;qb?bvplD_N)Mlh5RG^`4u7_+jSwTPJrDF5 zh^ON4WY>v(E0rByJFPY~{`qF!VKVq}!}^Eyf8LX-(YDpwVrRZiU;5|jPYUmuAfFkV zusr0yQ|8q*IcGWhw-2m6_igEmg>1wdZN&1RKj;1aGoPYn&SJy3uPA>z-TPg@V|B_p0C#6$c&U8n3NzaLNRij|Az#BtUtfFB_q`Zvi|QKNLJ-xAO# zBA&Mn>j(6ecJC{FpdIxJ@>vq`@MpLJFT4L-_v^(pCY-NG7=f>LT&+5#dd*9?f9F+* zt|w5>#mwcL(?09pfq&QNKhZq+SuXZ?Y@XIaH{jcG^ns6i{N$~4fWaykalso?bvQiu ziTSifRs4P&Vb^%#X&rt+Nx|VEADXNQ)*e;QoM1f=jd-R|{6XJ6#O-nWY# z__v&N#FK@1n7?cqqBl?6_08;0y+rB{Zf1c!jvrY6|Eb)1rGv`*I9~kEnALY#>N@{4O)Y;bA`d+2qt?CHsAXuDbE^GclzRk~lo{mqg%? z?}y2jca`8T5Kj_{KeX32YO#e=zicynzPlaeCuc2od_jM8%+^~OKBjfsDii+UrTkwU zoO}kp^MK49+%AU-u8EqUAKg?Oq^d!hd9cZi*ItULSwZ^AfLH=5NUGsLsjVB-Vf-fA^l zt2TuA%|5De#%y`<9v-?M?Jf~i%d-slHkb=X*`w63TS5#$d8mpJ~J7s4}9MTM`ekDzKf++)1%is?+S~4E$~lG#PV>y$5E>{8jyB9${FGoBv1j~ay;b!mt4WV+fRnO8a zzwfxalUyyjf8mBsS~k$><&|wVZB-GUUUR~gQV>rI#_EF~H7$=r4to~KK!3B5AEuBW zs8`?nj}+!kS7yR~Z#2^93F(9Xy!`hWN`L?9-kR4@mM~_4n-@-g!g%+16Z+Vpq<5*W z=Ps-M%|&bm@Iv~KKW~mcm?$r=Rgri1`?0u#sYYznUxYYpdtv^nXG`UNit5dhcim;z zxM=oTCgRDlSRUfjxGCziZ&q=ojnS0}qh~U<(h<*z5zSB1|31s|>h6#H{#6@#p9=Ja zc&MMw=lvJm?>Sv($CbITq0=>#jCfi!Rv+SXOsvs9uWQrhkgPnXRYltKNx(;8dGMba z_P#!2>2?13SAzXmBI4PXu{`wG28DvnPBzwypnnO7r{M5&7{2{Z$_7o3_T9Lge_L%o z?Uf)u=@D3cSg)3fS6|}A2i=2w>jyp(%R|1Emz@xA(UZ9dJP+{{9A0zU?hE$fEy2LI zBi;yyH@=vD!y;*q%Jbbj$IFB%xN%TElP+NW!21~1){9PGF_h^6{c;$OLOl4tIAyEz zKqMl{*Z8G$i0^-?0SRVST#htk|Z`;#twr_uI z4Blt6kcakvNT;wo8)s-G`6{oSN3wPEPFBlGbh%=1Um;NpV+%UyY8 z=#$<5n2lpvKj=*~v}^x|>d#p$5A}y8#@@0#;7$PeCpQatvXDOb|6!Bir@Z#ZU*L@p z&n?611D_YR;Lw6b{YhUxBsFa*)=SFo7U*+lV0oA?G!3T5*?XI}0MFzJc%r&!UadLw zkz=~5l7B%AtFH7+mw$_ZXH;V23Hx2v6FO#UE!gOG(&qiB#bHLh`Qz|VKbOTOcfHuMXaLTubOBz- z5A;_?Z^<@Cp9A9j{vF!Sq@sAzUSRzL-+fVIt-j_0JK)KPCv!yeb)QogrvG04W8%Dk z=)wI}4)_sjFzD|w`JCTcG;m=!-;h4>rD%PPBUa)Y4R%BVPeHtp{P6Rv!zwm=rWOSb zpU+G~JVmIz&|jC;9_MV?-#h$$d|t>u9mmh-17UB}gBDF2>#Qmr7p1$Oi_>1%5WAXD zTHQx^Gko5-|1Z(`27Y>PZ;jksTTst$@6eLStUEtb?Tp(;<0%XwFKv95?Td*$d9r5!2gz*V6@~)@H+5g zkMxN+ezF~I%_`7xF$JECcq1JC>XSBhvd(9xRg;&7B--;+8u6qGtREO((x)yc$cIl^ zsfY>y38%dfAIUT1{=bs1d8MwkVY=;OcTf;d7iur8SN}}^@0R%?vMKaed%qw)#I@M^ z2J!iMCaggI4t=TCk9}qSd95qijiU1b=A(hS;>2<9|BlJt5I%XaN(;RlCx764l&0H# z;oQ0JA6nJSQ7rno{tyqR9)kYeZ|tP(v$G7~{0bvfpM}R4%wM-`%clQ}U{H+T-@YYz z;no+fgkb&>=9i+snC*61EmI{=j(@(v(BDu{{s{B19-}CITHflp>P~oY<;x!-;SH?M zqT>Vge_Qy9HRqFeRYLyMAwO)P`3w5@^7k2kP4_*xJFBZ)Il(mCiS$*pKHRTm%UqTn zZFJHB^l4&(_Oddt{R{f(50p7t?6~3YPhs~7^yw=^^Ou;p4q69iodtabsnr2D)FP=k@rU(Z%nEk?sII`l^#G||oB#QsPomok@mD3VjvwK9D)D*6 zLEaumANUuOrX*O0e4Wqu^^qzextr$&^`TMpc)aa&NA~fC#WBfMW>Sx-A9T$SZ}c9^ zgMO(>T!gG~;=4gVgX?+P2>zeEeX`)sxY_Ud{LuRkB%FMP@yIy8wt08lo;E%|^uDe( zT3_)_V&e}yVf|W^ZZ%KBYW_LM%@cZnBN`{NL=OY+S-DN7ZH&J8E z=Y|v_>R;L;YY=MTG3{pVRN(i&M_G$oy&1}*l!H1R!Wql#>iAQj$R>CmmMgHGyj4gA2&5-J2L-XOlC^1oZO}Pr=cT z*lZ%-{Bf5%jCa-u`aXC6YgN5@ZzbplBc4$z+CQx;|IUkjbAL8|qz+m3$I*xQ*Kr;% z_Ut*L3i=ep^GZbPC*>(?o_;^!6Fe`l$I*xQY_KOqTzEQfKj@PXZ-k@2o)N|n#W^dUaK$_lzKnUoZQJ{|ES9Q|YK=Rbn} zi`C~FExsE`yAW4JB=H+bMLgpH)<4u+=RG=$44!ulf4`N>2>N$QDl)`^HV%J35e4xy zA$@3Xs)Tz=_S1kU$bb70^q2m7H^ck%?MR3Z3GviItbZ84d(W(TySL_Dc(lBG#Nhj` zk~sR%-c}7Cf6sZ6u@D~~s?XE{tUmCyl>@2qoc)9QOUw9QSw6ZBr=A0U?=Z>TC+}An z=(7<|&J(SlC9f8KrGA-;KtFbL$_V-s{GB9?F9l5neFow=*`oDd(Kt)f|JZLLJ-igT zbmI!57mhx}GiLImxRX`)Mt&+ zNsa?O{!yUMMZD1+(fVzZk6xE=m(qs$nuDVc*`2S5GZ5BdzmbA;B1kPoG8GAhyUPL6fS_K_JJ6aF~*z`s1d zKs(Cd;w8{`K|Cu>wEwR)XU^NHTr*iw-(J#ie1(P)jz0A7<8253k;n>qFdnrLPZQFI z@q2Z&WwYzAfQkIit41XA{VU+;Lww>+yz$;~IPy5?6TyEf)<5W{-aNnazFEfL{nXI< zjWB|KwMF2GKl8Xf5TEwZg8I)*!RkXi7dU%I7Dwz#2R~fI3w196{5-I_RkU@3c@NZ| ze8iK4^dX*OOx-6ol=OT6KTO2al0^F;GFV|8e#=^@X5MA3=Xi z-(PL|gZOwDUoMEJgkbeyd}%FDFj;gszmxxdV0;2UXUI7EFy482Vl68@j~<5p<)HgJ zdN5WW_{+%-+aKNSd=Bj`hy8Y;{DgRlNw3@5*|m2#|5=Eqo))d|pw_W_Y{hOP=wCXH zKJ>46D?NDYm-biS-wW|Zr$p;I19cDxf&uZN$12i%X zx9Upw5^(h4`B5}$Z^2df|7L=p{y&2JXC4x*?-|x`wO6({eDFMw6n;{+BVIT^VSS}U zVeI*|A!YdeOfKRX{-X6QkCY$MDOQ@}Vq$l3@bjDHIQmcz&nMmfq2he`7mQyP;yDMg z`oJIjZ-agA)46A1{mjJC2meo`uN_uN;|)L0jYd36NFVaQNzDD==*Fxu5Kjh9!DSIzwPDti<7V3>;-)z#B=wH z)+e4e9qV^&n-}yiX$1Ylfm7<2T~r@FPhJ7>G$DQHuR9D$Id_#c+aW$g9DU$-P+ufY z+Ujox^}qeMV0LC%O(`AqK5n2-Ks?t=wEo=n`}UfD+FQLU zdehsBH|O1D4~X91mP83vHqLh2kF+df&}X6Ncf>8C^-r8z_3<}t;_&@T3eNLB$j_q* z&vmw}6n_W$48*gkqV?@G*H>It+wTDJq2uU7e%_DtEHSt9dj;c*f_R!6Rv*UK^MjWZ z57gfNek5g)qw2;h_6j)q@O+`B$l*|}toT>(Pe43r6ILI_*X^?M!-ZBaHDUbr{}dg6 zh)-jdZ`ev}&*dZNhes>lJ8JUe7U(k(&)q0mzeZ#_bJ{(Uz~X760c96Ud5=y@3#M<4R%<7u%^#TGTg_g~tGrwKhD2mLLYs=)zortEEelX(6 zt3~VY&xuN0ep-Xcj}Ld~c_ofMv^Of3aNA<#zEbF4d&F}bvHFmoQC0Jrh^E9-2Xk~1 z7IRePi8%T&zBXTNXp>V$R0*J*uQgR~$ycYnllY_a;lKP$YpSM&SCTYjUCRR{L` z(XhwShy1^=-Rpp9L&8&tzXIql#Oeb-p`W7UazRtsyTxDGM`?Y1`w!9nf&c3F;#kA_ zn`0q99K_SfSbd1kpNi>s+IQ{!sBmqaVldS%n}MSb`7`Rv;`sm8KM4i@UWhlc#Ogyn zeACH`zp+30cGUdyXXpO6#Fm7k56>4K7#{@s_opPtzsV+i?1 zz|n_%+vC4d%j(Lg;q^&7dOprG6|H}S>-R5i)S+U~=i)q12mSA5y4Hy~605*J9rWjj z)~|Zh`z-o?;qZ9(A3>jftY#o%3TY?kQ$gQYw0_zqxogK4KzuKHMt_ZF@kUh`xMrKXDKUBJKn z2>RZ2Qc0SdI$9jG6C0HE);Dmz3Hp~g3+o@=r^@nLG1;=YK@9xlBc7{+<)NPBro`*U z?zuGs{G=crFCVo1c{i_THnX8VFcD7|(uaJrx%yxE^=-bx=M6GO&{rc;PWQ&%Q3C(| zh-Ybw_J2>IWbFCw;rv&#FI5e`(LW8sw@g_)`(j zosQLq_|LAL{N;O=?C^S+GJ^gurN63~YyKSv|H0_}Gztl;5AnHSFp&Fca%eKd$A5(P z*=}-9?>p7GX&dNM5zkT4 zw;7#Gi&&R|;pfFEh^J2$tslsq?DE(1ZDvvW7%9hiwJ3iaeONE$hLI17&GN5>{GoyW zNmzY|=bgjMN+pFKD}ndI(FZ=Av;5Zk$_@=!FY&$z>J^KK)ra+xhQ50A-t5RV@Vu-J z@xtQ^@~yq#LE*ielqdGj(j=Q5#$IP2o+pddhxJud_hSd|<+2LkKNv?J{A+z%bdE|e zybk?KLp)hXAN)L#JDE1_$*M}oe=3eX^e=Cd(|>!X9xw!bd&JXau>L`R#eABEv`P9T z&^H@F|LVVu&sTVOor3nJpyyMh@mPImZ^M+9%w78WgZr^V^)njhc^3FjSS(TZDD+e{ z_@^MACV|xl{|B^X-mR3mKJDFvWdRNj>_Rgfec+Aq&UZIHuG}$7D@fKn{Kf?Z#52ZX z^b;;y(fvI5B^nD`p7a;Gb6!2uM4f0g!I8rWWhGKvS>Z(y3}Srw7j)A38#iGs64NbNZbL<3j(<0RQ=j=l;d&gZ}}ge+S;o%=+NB zvB0)lSFA7?M<42&tl@&jT=_9ppif3T>$_0=$_L_iT48=6BcA;cs}KGiRb_fj z4|dR?zszv-p})*@6m0X?9!vmzBI0SySbdnkc1@Bia^85&w{3Kzp2vLu!18v{@r3!v zDoN4S?}WpHJmYhH?H{UxXgECVw`7b?Xj(Q~BB|fOL)_1~qK^1cw7won*coJ>S{0ozd)ra@r<{t}M6*Dg8SK1aYCUyM2)hxtw zgg##b&F?^KFeXjE`>%%ZPn|L|J8BZ-J-yv4Q`{9liDD&Nseezq`KzRXjd&^x%R~PjDvt1$ zyL!9ExYh8trT;F13*v?23GaLKJKprx>Nh)O%Pga!DX7}CN z%s@Q#HkOC{Pb4sUT;)%T!Fh&s96zw089S=J_`#d}!@$!<;J-h6!wcGL6b3wX1ir}p zfzk|_)(Xst{ssNaE8{0_UE?+(X=YMWHzA;)UmEF;x50dVAL1|je$$0u zwwfh;e>VZ~!usH60*!i%nG`tuejN|-R4J@J)Hh1&)LkcCzt<)n8vXXWZhS*9jy~jP zsN486{>Ohh!TN!Qc=9-`KIH$Enl{D$wN9b@Q)L2zzIoS~;pl_^UhS@!oQ3@!2j2b3 zo|`(CT8`q$6vyfVKk3S~%ZE$+RN?yy^Ks%2`KDU3(`WnU%S&60o!Fb*5Ns(vG1cHMAW?zfTML2~!R|ox`|B>b&&qiu_|@U-?qeJoq>D zJfa$T_;5AUPs%a@PxHmL7y8TMiQ5q)`Hri=yC7aTAAna(AYJr`FOY}+GD198NFVyk z>*(yzXHnt9^Sk{B`UWQ)-h)+A>iQc01 z)7Q$7F8aMun`r!_=f1|T!vqJ>{^9!tUVpxj7M_#p3i?zOAKo6(`dbb>whw)q(GBMf z`XgSrf1%z+`+q9raUYd{ehT7gyG83Ox)+yd$(1!g{Mk7A5YI+~it2yCz5}q{RzUs5 z+JV)F{yioo_IBQ%sKL*x4)rg2g#L{)=FXYt{zeJ%nPxADCus>*AM#nV_f|c7*0EW@ z`y*aBKER)o{+Txa%(e9p9}40bLi*5Nr_#>v4+2dyK;LTw{e5Rn&Yt(AdHDGti6Zb% z(Zc!%{WY0ME_;6c9&_-j4fpV?l?%-fFYI3t{ly%==aY64DmuV_FseVSMWXc`t5PS} z?fKgzS807gzt$&#iBqqj{!INQnP~g?-89gruM+s@DvH*(WD?SJ3*={C^L%yUM`5#g zG~$K*!~C^=&05_@$`%VjKOga|DWdfU#`807DuG|HQ&B^`wb7Lf7MZktSbCE!NOc_Kj>>CKRiv*`WqJ} z)?GWbvJc`z#_NB0-bLvh-4YBu z1+|yyh}8!_GmSOQ&)aJFySVVdEaTnH7A`pPf%>`4dhw<$*I!KmeJ;ueGDWoh(xo1I zw@0uJfqpwq{(%1D%pjKbcxNw&j~7~R(AHzu8&Dr)jXVR6%>I0J;rn&rITu-;Ja^Ia z3p`Jx-Jd*j{d2j&{qU;6_k}o!Ckg4pcsy?UeS@pdgyH?MavXh#XK`QJTrGpp%~1cD zh^MT>`iJ_zs`PTk@t&=6{QA#7e_M(WjH3_jwW7%0*WcBu?=o3t(%^Zgv=R7X)wb-O zL(&}OMSJE%#yNL#+(gI68RdUmu&3nNuq(|SUosZ?rmxr;?IfDtjv6d8ch=fFO8;g^ zXmsj++kK;xio-+wTzcruQ_5o_w*G?>g`)d7nGc{PRU4lKzLVa{-HK{r>o+|2}PL7B}z?1Ni-!S;a|Fyi@A-{$p3nK7?^^F# zYrlKXp1o}nWK0R_8S=Scrz*dVoIAAr-t?M8wL<-_WzzLwy+XPy)a73LpLpu*c8GDK zr&UO>p8dRmxGWY6SZexZZU#=z4VZ2XFEIISuLa18{w)=VGmO6G(Xh z;`>|T3E~AlGH)&2=vi~k|5hztqU4|fyJL;oH*qBVPUnSV!be2_EXl!?QAU z)`lu8*iXh2oR7e~ig&1)mg-n<*Z2F}K8hgp!#G>>^ES2?HrjYr89+Vd%vIRomVL`LUcS5sNjB}zmkGFZG*o~S{%S> znh|m%P+pC|57d9jd*!)T57o^ZBYQD#Ud!*X3MgLE2wWfD_pzRQX^34;20b$4ZqoT} zyY4hwi}FJsj`Q$5TV7n%==|0Dww;-!{Il36;sg)zX#9ykpno&=<-K^fUTtVlj$uc{ zryaXX3Fgmy^ly$NeNQI2EpUMML9h`oP{jR!{w@~Vm*nv4R{ouFal601_n=uwpFjHG ztk7lv`NF2PYl1~9LPb1RLLchQ+vZr-*CC0MfTtjyNx+Z0<&dp6+M^zh?`nt_48#3H zJ)Ccho0Wfh`SELvEsFM*QyNJG{-GX9Uuzfef7O-)-@HhAyug?6o^3d*R=tWwHF~6% zEYK)jAf2~B`AJi`TL1EGMD_X3S=mb)t!I!3czEBz-SckEr>{kY2izPIy6)-Vfoe4A z`cQAmr1^hG_%A(r$v=eSW_rEU)L1&7h!RxUvVZBA{T0yxHW^_zsP@)f)1~u$r}lk+ z8KoH8x)1U1f_ST^N#`Nn6$@#jjO%h45HFd4hj=?{JG2sp?TvwWb*D<#hj@=(w~J5G zi9HSR+KiXZL%flz<5b3yat$F~1&VYY;$8G8=D893$6<)KSwlJx@#@LnZrRke`6a|l zA>bk2j(I}_YA3jnfmxve&dSEwHshr0!}V&V#WFXKj2n~&@p=xI&O^L~N?8v(c7+_= z-ML}ak(!rIG$rZ$B+>GcZdFHVC7b{Cg?^+Wo-5H`(7)X_D#1}BtF8l2K|GUyU$@?L z{?At)P2&DVyg=f5DfDmBXfGaR=Ec&wp0)=819m4jD@ykd$Gi0wHEx)^-oQ`W6Som9sgxYz>`saUd7eAd`NV%L4Ql467b;P!7Hsq_TauE zcs`QuKlmpW3f+#agAYP}DF5Jp-l!qzzwCMlyxKqbAu%I3g zEU@T(BqVq$H_rKXkLkRNBn zQ{!=c$j@b`=W^3kbra$K92)|C$iHxl)sfr@Mh4)Yig@}-Tp#=oc;9aR>Uu%%`)zkZa*SVKR~1@JFGyzsbm z{h%QFw3o|I-2i?5KlB%R#C+tsW_v6gd6|=-|g|9k>{=*N$?+daFY-IjuXF5=nyrTgEI&fYll;i+TbpF^Mz^(lDv-|NVT z#D(BL9P#{pxW3r`*VBnpqQ;2(okgGz{v8K<)=VihxB~teh^Oww^&$T&GNThBr~d5e z?XQ%|-lDf5&<8*42Z}a6veq7;uZwuj9_jjN9ox-UO!|Hs@}owe5Bb?~%cN8D&1pl( z4+-&t-MBvZxijWZ#lhKSTVQ>=Hb}1@$WPcYnKg6R8q>jlHR9=kxIW~^aL|>u%QKm} z;J=hWAN(&r#r`tN#`XyK=OUgRfa`<*DYu$@4GUD`z<(NnKKQq<_YSUI8x2L8KkU33Eeun^e*o|j0}lLWtDl+g=oTZsU!8$?+D=>_{9Ex@&z|M9i|oi+CXu*N6O6cIS^+#{TUA{y7Bt;9s!tV<qGr;9x%14%#(+$Cv&P$%yAmT(1B>A3jez zaHUis;dZ-8^olo$Gid>6zsJY*;rppoiY~P(=k+;Bjqld5)8hu4`igk!O`M;B5^P); zvh9MIilzJVZ=>e_9$c=A^yw1%kpBu3V?Uqiix#L@7vITM`7(~YOQg>%$Mq*5{pBXV z0%;f0yIR7u4*njLG%H#! zHM2J4sV?GKWjGJ{&#tH#74~9}jLx9?;bVG+#5C^^`4^VrJnSc%;uHx%uLMY+CZP}fmAmWS&bAyl9QbO)vmfAofFC!_%XiIy+SkDI z5zi#xJO2x;H&{`<$3exu_x*EC*7q)~OZ7k2Yy7&vyQAMGX!%cbOOFlmvTP>c;rmAm^6|rk0dwP;PK-@C zGq}ov5Ba=~#|z)@PqWRKp)_l)`1w4gh-c>FJjAQ`aG_I?o#UzX%^pLqX6NXW5HGxn z^N`Q>zx2ozBR;sA7+mD)Oul!5!4$18I|t|C{?(Y&=l4?R$q(W9LPtF03qE1KHM#lu z-DZ$i$ zze#EK7Wolm;`;FYi0&Fy?-g4HM!xBpQZ;sgTLo{Mi05VCJp8^dMC~rMD7HuWQL4K^ zvq4^U^HvcrOv8B!N^I_;t#wiHiXremzG}p?C3wjHrw03x-IXeWwq-iHjWvIiX^5v? z!1dw&((a`xzh_p;FBo@VrnYw8qyc<`SYmb-%bAVlNYne?eY-JC}W4~qPdRV}gm zt6{yScT}s-U+~`f)#7={WnT`qDX>I5)Fphvyo!vPdM(E7mvzynw9k*@cNgUo@X)_8 zt&1P1)*fwj8(nrN;rH#50OUugg8PBvksC$Gta{Kq7wWAP_>njd{gdH@R`=a$vckR9o59j?N z|9ldz5AWmKXczf>n|lJ^lq99(B zjsN{W_}M?=^}P?ZtZC_Yhivs49@XBwPkKGTd~jLaaQ*B?)6w9Ek9hW9yq>|&$K$yM zs&B3LJ9p0PzrQ6P@q$0n`6%z^#E?_#?mNqw^z$6VQwjK?Cf8bicP5X3dea5{9$X*l zZCBLy>c1MYv!UJsfd7T_P;b^Vb%KLmxppqzF<+)(YRg*^;#u9&`LR4-+bKK9l~8ZO zy`p?lC3vW}&Tr&#YJs&Mrj!qO_3HIcn|C-cjRTTC{94t+e&tlo7Oe z)Ga#rX~%gu-UW|j*`8Oas9`#6J~XNJXKeT$k$?JUoQLoCyDv;@zq`XW2#$|*#PeHm z9^y^uK76k5ZcixeuWS&{mEd8&p;F5Gujf0f?|CEr^V}5iR0$sHA#iw$pxtZYao}|k zPx*xV0e;P_Wmokoo?Zc74e^{7={!TNiIP}OnhO0(0{AHe4$oKsGh<3XQ*|7uWmQMW^P2k_yb|6aPjgZFyoqjWzn z-~&LPfHzhUT(+?bqyg^<`i;`{^QUZ7C6}~C1Mdv_1bo4oWw+&C==WV8=&w&3(0?ag zKkDg|^71i8vcQ{yJ^{~g|J<6G>a-ttUC@6kU4QJF(zIWDUA_XZ2Kog2y*)Qf^3^>* zK|hiaFKEE^p&u`~zdgt>rxgLOfOsAOA0Pi|*(>{+Gr*G&&mrJ%Ufq^*FfM5k_!kC> z`h_CFL;X*?y>?<`L6&?k-+zb_Af6$>{R3|@qxhWrU}hWW^ARtom(G*MysDC$(_95S z5A+H6g%$D^Cv}SZo+sR24_wf%ldf+(wK9cos@?bgzJ8tq`UJc}!|>9<<@?0`*`WVM zx<0qy`}WPDAI1H`LOj1#I-g}*JY4mU+zs%n7Wf8!J3 zny}{qqd=dIcN8K6%fyUDV=ZGJ}J%R zzt1}0hlF^h1P^}3SM6B-bZ<+2uYQ013(@sA!3*j7sR90vZn*l2=dA$o3eKGZ+tX0v?%0kK`-CGUg3zR67VrI(l&S*ot-v(%NftSt?I)#$3*i- z;DeuE!1dckH+$tVTI!L>yUtzD;XiuLIV$3ro;XiKrw&_>?Vsi{pmFsut*>g2l(&uS zIwa!%cV;2_6Rf}anT*wCQ>IpaE4fkTJuqu!H~|m)+Xv)gdG31azIoCgFB|!xO89~N ze^y^;s`UQ&CD_k00cjW`d#_ZhS*q{vO) zHmR6zjZ$r3!od&lwKRk`uSOW=IL z8SxxfTp#kU_V7k#c-`Ex-u#Q6R~do)7~?$TKVr*s-jN$4BfH{eQMSxTkK-d=vL2w` z)@Lk}H(wFdcRxwLJ`3^u8PfF&LreBAnK&sO^x6N=SF%`tp6TdJ8uHlKDt}k(psr|< zf2K3857(d9?Y*CJAmhSz3K&HBVM*i%<`vnisv$Mp^4O=is%7Io4tPk566w<^xIV1c z?K)p&-HX)&pdSK|f0_x-gZ?ZRgO5}8c3OGM{(5(Td1o;92=c!i=i&UwBgf{A*&D-; zVVtJq-X|y*@=?6JH8>CTAai`i*ybYET*j=72%X~Hr6lBsA>jw=-*egPoO`}&mpXB3 z3eKy`v#Y~Je%Pkc^(}uEgulC8u>GiOevXU>++ zXD$79xx{2$-}4Fk>$4QiD+)pVheT|-=kwU-^3}8{V?PBkNc=EV4|8#S$mh++7Qbh| z{Nv;n@;z|zpe$B6^3T!7d8nWHE5mOmRBrqz{=E-cU(Q;bhx{lsQRS|>OjxD<`ujo~ zrJJWnh!;xmaDD01_!O7Yn-{M%lpU>nT^@IjiTqO*;QDaC;!4lRCw(;y*N%d59iCrZ;sU?F%sv)JSQC%<%g?>^Ds}M?zNDF=h`EoU%HS!U84S>Uq*cv zwng?Zlrv2}-b)=gcO3)elW&0QL;X99Qj7?g_jsN2ywU!4$2{8UC|KNsEc zKey@Y$m!#USBHx7L$kzrm{-v)Bf3g<<`+Rduu*HF16L^QgPRW9r1V+_Eks;qHAUgY%Ieh7HbxKI2kujT7m5-}guT$Lp?Ok$ zz5d}$OdixvHR3rEJk*c(K)us(`M2`6S}yr8xN&DT7tM2;7OoG+cmMOpV)tD5SpfSD zQ>Zs}oQHagt_z*O^6xGIKV-y{CFUXcd6hSBOn0~Ns_ZJ62Wt;@A0ngtFdT4w@YA*O z*$meV!KmFT28X^+4H(BjJd=*|;3qDeedb-b;t}wpfc#Ji{OpwTnt6(zxgYiqY7p-@ zTp#M;Lh$mL%8L%32mfiP9t3JQ5B`^VSI?NwF#YB+fVT6j%XB6S@gxZz{QK$olA6sc z4Bu=xxpM0e?Ft*GGW8lOp|_qneeWZt z5b#iMTQ-_s?&^G6ppNzrY6Lv2Z+2|~qxjxbp57o!iq4sRrv>?7&=O!Ki9Ue6POf{O+QN zXP4kS=)a6#v7_dcQ>ERI5VHB%!AV_+r{BeSm{@tMgIB4I1lUV(`dWzfPKnMxc(e~^2r*2=M%0!+xgDn?X?r`)3h}muArIt ziV8dl=V5@vIDc_JP|pu0CWe_@h$!jlc|&f#_w;)_ z;u(K%9`vWoSgHADsqdle_bml)TF-iTBAzV4!}j!(;g07T#>=>x=h!N*^@C@rA)fgg z*9Sjeaz;+ey`WJK&oks-7y0M*;5_&lJ-_}-UB{Egu*rc7gTDWC;3A$R!9#s6p>nP} z1*{=KeR2@b`i1L5{rs)nrvLGnQmjt-Uk@)**c=w)X`I^;1@}5zqdH^RQk^ zc|++r8j&MU>J6^ZvfO8;)S1a9{P8oSL;yDt zdfT23$CpyXb0m1^ci+x?PI3pVIv}5H#8V`A$Y=B^Qp=lrtA0a0+aR9Ng8PAbULWLG z=bF0ViEYmOjW)^2KGj!5{;3~v9`@V6X6hUa@T*+#w>@L+$=yk60f?tG<2>w#bH{U@ z)qKl74Dm7%FKohji1$p}CRv>=7+vKtH6$agec!gY%f9?ldAL1>k zeK2~(Q`wwTCJ|@N-LKjUvqe1ZEzVO=zr8tA5Lfd2dEfUP{rfio;yDdC5B>YJR5#GX z=DVZHpX?bEw|Q^jAzq?=NzlL399KNeP&b$W`dsispzpU&jVbr#r6J|Ie|milFM)-4 zx&ZeB^RRTy+3-ihm&}2D+8~}^kMoev7kM)CC-JmN(2reNqWlQza31<`&yitEE%kevv$3i@#7U!Y~<2>}EP|17uv#R2U-uzCdQ3XrinIfM30_VYxirlTDcR@ENKz&jX&ye7uK9AkL z-bjtuvLEu-` z&#Az9@I%cWqC_{DIN0Q_+Tg7>@7|*$p25d?$iJ;o!2`v8GlpKcF|nfK(ZHu<#0#EE z=X0ZHj(hQLi5KLj^s>l5MS=%E4zvDjI+r1+WlR|P@@RFHUO3{(Po(R=ZMA$nE8%Wa zFze34xwlSCr668dj`NUD^->q}L#6Y??>kUKJWqm$dbnBPr}%E_@UY(g?Y|zPfOw_^ z5A$J;>*|(>rx-91U8p4IE*ak+7p0_LHSJ5B1}ItM=5&I^!qMFMPyvBzVY=-LA?Z z6W_GeK)msYr%3P+ulJSC($mW;C~!Zg4cZU$@8N#n{=-#!&KlS^#|IDmyd!m4V2F$w z;z<(wXPAeV?Iw>Z%=o@4mgKVO;Z0UB3!N{}Z{hkdA6{Fy=+$pfp5Oa?*CVODL!5zl zUJ=g2JU?j1P+YYT^i{Caw>^_YZG3(zJ~&jDz!WF5=k*I1lGLfmtS$ zY4k1?yWz&ybte5D+?YzKhx(*fY8a>3URvFEeC*4=0^;csJnUEBk{YRoo|miOe7yOr z$Uj+vhxNL1Fi|sj@1Zd0FAm} zpQd`oWiO46pEcazu;+EkrB^6hx4%icbpbG>!l+-3;I_9@eBzb`nM@ATsSLc`*Y}D zehTuFit9uF4vXApu`J;j4fYQ##0$^jJnSF7*yYH3&G_g(S^MQv?|=c(ykwC+HyP)_ z@3FDN!(*Xu934k~jJ{k13ZIUbAUV66sSDa31RI z=ZT|>&ef?+Jk^>S{O9_as=i-&kl9Ig-ZlVRLkHGw-l!+GNN{^wJrA)X<@LqDF*S>(hki(J?D z{H}|=JrR$1vIGx)jOW=5mVJ=^yYKy0eSA3LdB<@-z~5^aU^wY;_a^9fPsFn%c%T@1%lK?17JSe%FY>5Q=cbotM>M<>oM8~tYE z3>6OIg-50HpGrndZ_>31g!+j`JWqm$`dNQCux#SOhUHK{48+qUc&Hy`qs$ofl*`*8 zUNywC*tj2vSMc*v)w|V31rTrbX;Hk)7@UWAmz`akXFMciOqc$$i119!Ljk}a!Ff0z zT=4k(;>4g9@%x6Dh^I;L5O1eZam+AkMJw#D7>E}}{7CSS zAG3YakK8qkm>n@kA`Kq{oJ$!v~3tcz!sp5BZ6ib)!V)!G*7_#Tt8J zgJjIQ;zj=9--l1Q|8rNmTtrZexmB;9{_B~|h!=$5`rt>KxmY!B4t4hv11|j;=OT@Z zcych#Lq5;jZ!tIMezP3vISup=;yn2OkK~)9wTHJt-ntM^ z-H-F&zo-0IqR!^Rq9rGuR6GtmxtD_cz`qZlFb^vh+DtFgn7GNNftC_hY~V~H;KBb! zt)-W@cUDdM<;B!^Rle$gDfkJ({lNabowV}V<(ifYP;a`32OsbW>w9G9^6qh~mr)c) zdt3CCgaYDedvJa5lg4@c;?Mp0XKp1eQ%>`vtjIqhz20EG%-75>40`rDK65_axTUb+*ATc~-4!R&X9eOsoUgsMiWu8+)41k@&&twQd57)ki0ALX zc{pE~&N|WjeEju;4nvK;Xm}Lv3_p(Q!4KzQe{1lVKWBjP>NUqVYAJY4nVm>SJjEC1 zq5jowtax`~b+#K^ucjcLza8gcKD>%Pdzg8*{tR5N=A-+Os1iKnvx~BJ@r_9v4$f>3 zx+p)hG+phc$Uj37zdjG^wZqBCRGr#Bx04kbyyecFO{^Oto;?ufVZS<(Jb|}#c`(Pp z-!>(uchhcKAmX8J;1lY3c1-g;jiY6|q2Egp&l`s8L%)>V{boVAxYBlFA?0$V!_Jwy z$PehkCmfITD?aToSaKs7{y81|43VzCqx8(DrjfxO;Kv#9?7`Cc;f)_%JwAH{gbQg~ zoS(ecVIZEPfb($tIy7zZca3A6;^#N=5KoiHKg4_8z46|@NlClj7$2^$*Po~j1xsyM$GH&-~J_MqWn-K)(iUA$h%`dzn*#ZdcuQ~LGB$DB;aLn|FAzC)_68- ztJ#RV#aTxVb+tHzC={Xk8IAK0?=5*bhxL2tO_2ZaViC_>fb$UVYTF$wW2302uC+?x zsUzv5IXn^1*Twm{NKj_N&^<+EQ#XNrJmLj9I1lTZJ*sA(ruS`mr+3i04hf^`ZW!HL9%Nu&~O@8GV0h zgLt+C59@W)m9(o%q(=OhV$E*;(TEnc5J< z3;J?r<8SNiH5Shw8sb?J`oJ%m-cWA7Ff|IEhoFmi{&?IEtk>her_I)#jqH1$HK%XQ z)d>7RJ!Ft70+uIKp9Xyr;<*&*`coLQ9nad#1hkTBRO=(%{ZZg*LVcm%35!=q|BAz}D*N6QEE%4mj zfq!MMfS*#7f6f@32mj^yDq|L=?kIu!$tUP9$fwc=+YN`lK2ZUE4&s>-{RR5BhgY8O z@~JfacCBjL*rz|Avk3Gd-e+^2>9o<^{-7^J^Nl}3y8jOfH6t{8R6AtMAGfUq_`!FBk5icO)`cQABGbi&;DZkNxdJ8Aehx}Z;NIkz~ihkeykp1r$ z5Wsv>!u26Ps>b^7bDthMey_Ci{@&N)BALMduax`$1p9fVKU*C~GR93g+POFJoi2$) zC*UEUj&nbCnk9`N?J&{%aNqrBkG0|8D*R z)Mp$UQnK0S{+KjvXKE>dKAbPOULYSdT5*0sZ~ptQ52qpj0!Q3G#H(FkD%^E-WF+ux z#Pj}>&R6O^RWaVIGEi%@Yyb0P0uaw~kj}FP%X)`R^7R9rfp{8SI-fE{c0<#!3sZr& zK|E=hbbf+CH@__-Sr7bE5ihWp&X2GkdpSzsv>WKFA)d2DI{)t7&+|?8qdx*qLOf%! zbiVU_*!VS5ulRwVX0*OEJL&xPq^*fp7F#|8eLmEKt#tmu;B!VMOSt;L=OdnHEuH_a zVWyrZ>$L`W4&qr>()qGiTL#S3f9MVV*{I%_3#Ie_ssEKVE(lHtpQb!AytHe2+9Odt z(@x+#oZmUIeF|cFCJ%%8b#r%?>7k>i7G&IcMK6`^ANG5lbK{2TYK-|2tw`Fl z+2q4v{(b2@93SgIT-CV*ejq=`TmrXOI$O;U6ofR@8cr(?Kz{hgrPuRkzb4fYxr%DwpNV*i z1P}Sin9!-2Ho_(0Vx{Sj`;50!=!j>>;`&eznj81)uI;q=b5M5G$}a|^HJeeq>?oW! zKn)~g8+tWj#IxI=&qq8h66ZmG(>k{(TFIhJ;Ms_0g-hqNno9JQ>~5Q9oh}Nm3#(kg zL_8-9=i&G}y)CQbiUm`r1Q=66~BOQ zM(axpmd<+_jb&_F-}`>d3olb$76yM|Lp|)rdGP;Z?nKw*<0G5fQ->>fopHI(K>f?! zh4XOzEzi$iGiBdmd3c{M4e=BS9`qZJ$EZy{zS9i+>mr`E6W53Q*cJb|eBjurA%k7s zr+>e5RF{MLoyEj?n78AfFIo6XHZ%d=PwM%P`7m_e#mrBd#n)4Q&+hy@ZOP-V3eh~_ zU&i&}`piJL^3Y2^_TRa_XfAW)xb(4%CnBDnjPrh|K5y1PIAgYWuoh?Ept6j4$309D zFG$3Bm_Ius{(Exfcjkf#S~?`3<(E1Y5YJ4&d5CvzIM1f6HtUeLlj;#hb{>WQ82LGk z^U&`zdp1prw0K{`n;ymoHHtyk-t@k=*8`r^VDBAN!OBeBy$1m7# zbN0n`FIH)p!s|MmPmd*?G1(y=#9jQ+o`Cg5Sd&AX;IzH;{* z!>h`ng?3}h6q;X%;^ma!{sTnvq@S?{6TElk+Qn_y>~Le7)$@47)9&It_%~N`dT{H- z%~vjzM^1wVguP}Wo>GkSuwH`LbC!3O9{v-!a#UDV^3dI6#0z;i57*QFju2#at==iq zJJ0){C)V{`IXeGXrDcQkxm;Wy>S02SyuahSWd}frhIqP!AL!pk zzjwthk7vsz{8)2&&g5!i4&uoY`p{pi&S_*_e)fX-)cNF4-%YKT;%h|y={2|?$WPMR z!{O7{uZ@@^>#OuE+EB5&PQ)|b;5@AFs@r9si*J@B0cupXoUA1^95J z&#aTq7uYF&ei^ztrSJRhj@~3FG>G(h?KlthyjES~^@p#n;_rXckRR47oQHhs$Q3!w zfBfRqjW4W$tl9i=T*SkAz$e7}#z%JXs-rW6FmFAPe^$M8eO8r-0pOX42VM9C zKfCr^(kh%^B7WaGNg#?>SS?-u-i0PbR@dLs-umyisDOCTg-^)OxU=U@9MCsz2S0T1 zBap5i*D<7l>}=Bae3<_4Tb+RiVe|?5tBuAbPkol81^VGApTgJD^{+h)|HMr75g)(U z1o?;jaA)UV>NaZ=zt1RGKV=gEs4h?kHj!TVm1PqNBoR$zMUeBgBn>Id@gbwua& z9)*jBzy}~d6p48Pya{!{fV|81F9Xl|hyUBmLvFS=MxtFStK2Sa^f|-gL(+ z@UIK==L@b6@xFcK)Hu(lsG6_0;Xr=-fzwpPOX~N&>aPE<>q7l@Rlz-+k zTpx~)SATfFF0r0F2!4;rh5ShT2Vj3Ve=_Braveu}|83W6QGQr2aeeSV&M#>B@1eC- zclaBx35v9@<|9A+N}PvzINRU7WV7+QW|$8&G#`W#^91HY^@L^9)mJ_$gM6AIUeJK+ zgCCY-$)-hG+m!jOzdmb34?C8I{F7hcJos^5-S(o{xkLbd7|1_YBA?*r#g*-^t__n_ zt5i95{)EuygDK)U&vAXo|B5eeH?jxkWP*Px;&}x5tngCIocMm#J-ELj9`RHOKd@d! z*7-HhT9>Q_eKo{03Ho=K6*tv(%k_GAUUa}e=Ck0#{j#Pab9d0Ep!#G;98V$tQRYX> zbKLDYz^fsiO~B86@1$VV(6$!Dw6`>S4wMTaUxmZhgP+ z>(7tyAO6$sX#ZmBJXQgH67tU+BwgR@sQvenm-=%oV?Swr5?Jc(NBH0(k)Q3cbx=-jcgggTO;`7JVDP|8n4*P+BKB_miDy|RtIkPzO&g|oBEFu5Z z|EN#rrN&07LRInml9(u7-e6oG>ZdE=Vos%7hTWf2M++uw(KKcgdYP%8~FDL~1P(PH*uC8xSDw)9kBpmfSQ(``YpSLeVrjOHA-CmOZ zGeXTYlT1PLpV5KOb2vYpP?&X#HQ!a+blvDuo7HxBjhj=|9 zUUi&@cqh-PO1$%Ql0L-CLB|WG49-Km?bC)G`~IiyVsrKe-_BxQJ0HbM{)+pD{f1f4 z56kd{nx1fc=OUgeksny!9g&x0Vl&Q9h2tXw`RB^we!xHD>zR%AV=R&&UT4S;0l)6+ zEBcQ81OE5^N5oSl<~iu=pZq$}C+u#JlgyR-Q$54>bTvw!=ipztC&cUV#J6?3?^jJo zP<2>Hf&5F%2e>|#SeSevQ*CfZ@BKV>Gi(!OstM*T^l$R|E8iL{;@e=mM$M^RcgF?az zy%$0L>FuKYPz`Z?$fr|8sk8gH6Av^#NAK~a9*=iMyre$N&x+GGPjxTPx&r#9h!+y* z>rLxk)?t@*xp)5bpO4cB^r4_> zEK5{Cyrh5V#|;~QZpt*?dlU4#K8y6}=F;^m7Rhga8M<)#z?nSN$7FlC=2q$T2H#JW zzYe@Vw(x`ad4m)bFKeoF{YCOlh8gew>wCUpe|~iTk)Is1FPzQA8dIQtI4E9$8LkiY zQ*M7F_l%swONf^(MDb3?d8mhBy0meV{amz`nuIB&58V1XpCF$w4~s4>H^~S$?*aXM zhagZ{VSBcB$*euj?xGbQ{(zdtb5blp*xq2T|tu5|o_ z&uf^7m#hciFYdp7`JkKeXvn7m;%UaXf5@lzP>*ztU5}1k)VN)+`Buga3V}ZK%MjHt z*Qb#a%t2qbO_YDZOzHZIHZ|&R(EN5Jzvv?4)|I8rG{j5#hwBNCNID9(a=BWd&qnpk zl&EL$pT2PO^uWnV`yLvZZ2Rap`B56;CH3KWk+3+cH2~14isMBr`ZVl(Ks@pFKs^EWZ3p@%z8Rksl60eg=+sNdFN0q!9eG z|Kb0MmO3?Ar8CU#vc~v7!_wJmpG5UTnS}d?dQ-|YuBV6b9qMTDo#fh^8u6$;ITHDV z`-|$|#ri*pIPC@drDo(uK*9B4enyNjGXMFb<(TCiwGD5mvI^7=kspS{`7)euwwvtD z+^Kg)9e&THfaWJ%Vm`q9-&6VM{E~ffvK3qRO*!9o;7%Iine%Z!FmHeE(*LT$n^6q! zyXPbSl<_zZ>udNkVpL*s;z)QN8WZ+=6LB8m^)TrA8S$Wd>&u9vLa&+j=~U#0Lc@8u z{-*u8L_7R$Qd;lt<4&jcHkBIUISX+f{LDXMayBhxg9Yrz$S9v2iTuO7+WX-{>zowz z9{4?A0GiJX3tS)kXN>cF@v4Kj9p<4k;%SyR5Bl@wU#G@dr8&bqpd+4Yjq}j&VJp_m z8bEcg0RL1tUJ&RiFEkQ7d!4}PNU zyk{;uTOn^ZMzQ5Y-j;PX1U%H|l%uBRbu)|>tr)xBF zceuRX`S7~$eM5plYq0B35HHk^-@t*k0S~J!ELdmnn~ghCBls%P2M#{rcs*Xx%6E*@ zDl>j}$m8DIUQ;>Wr1LNzw#CP48ptZ{%;@1Kg*j8}bvvc=kk7-TMt-01+ong^&i2F| z{aG=T-_m(4WNeN}-irJ?Cr_S>b(?QH!68zuTRLxz_@JrZVq@0-o#L?O2J6v~AFb7> zUm#BSgnFn`OIoH&?--CQf6+TPZ0kIFk92*g|HGPLMcLNjJ2_9S8g6<&KPUJrornEA zPuI@IY`FZy%Qy6kyw=yRW)kSb{aS}_##IL26YhR3?rRqtkG#Tmoy`|Ov*8wGp|D5<~V2@Ny zP(RS`NlBWuUyXK0(;hA=t-o@|pZr~Ven9Z*F4e4h{`|3!AO1i1@kWDdTaE`@LH0=T z1U&dz7vK75zpjU#?8r&&hdkwO@KArjzYm|#zqYR$s(PLX&%^mb_z>y&0Y0O+IKOe# z{IA!}*tE;Ljo#HfSj4k4@%{xqHR;F?$DV8UkBTm|{%l_InoOV%{TR#n{9>iC(mL3m za0ZI>S;@FQ^t<(o7E@QvxKi5_4@qm|XRXdhJj4l~Q2+eK>7-D72l4yF1JL^N9i{85 z_Sh$ESzYHc?dN%=-G@}ZvkB?}{O>J)+OX-U8^i}J%ci|a%GHU!TdL|#0MIrm24#pQSJ`A`uLy6|a&{!lyX z*^FANUE=5ec%pbIwzxjjTgvpNm=moWHtbiK1o;8p_WRA6hZl5uujh!~KTbtF#}3yA z|Mf0~cS%+&^ML1~`Nmx=oqy6p8U3oVhY5c81oII56z)*0Qyru&zJ5smhyQu9_74wO zKPraxwL$Yoz{LGPea>Vysmt6upVao3X|rum%0~vlyn^fP(}yqS)yCu)fxa4=hctKT z`oq=@H$LKDGZ=W_`D2(w zvOzqo6MRlZe^|8kbHz08g&#nli}okfgVOa+6`ndfH@#`;k?G@x_;ho|loIS`pgt*G zhc{nQHSntIX?qYbV0SWy;CKYbU)6y-8mh9-hr;^`ofSm$itm8?f%#@7f7I24`(YUA zQ~UkzB|{6<+0Zm?aoLzCC$DY6UC-|Aa?bp7%T{i#0 zdWA#0&bU6TSI>wOOfL#L!AbfNvTkc0D(|0zm}2~Ss!y=uQb^-8R&x{3|Kei)9Y={m;zCHkeN&|fU% zhb%F#pucWy+0dP>w5j*{o~U2)5zi;^Z_zSK`KjWMx@&V|hj=`Vw=zZfq5p^bhx3Jf zhw6s!BXyU9zB5{1#wwhL{LJ5QXZLEA!@buZM1Giv=MvOIqlZ`egEn0Q;G2v6A{Q~?`hC)!5&A71MdE4I_9Edjr*N5v56*g>p+n|hVFWs~ChR;d9-Hi5= zlmj>q^^^a*((%6sG7sT-BODYjU83J1Ud^{_3ybCAdVen?ikF6XnnZnq|DQcxi+f(5 zI|cQ|fc*o({zOmxQ|6=nQ+dEUBc39$-+=neR=Ie0r;Bie`1>Y;{R8ADq^0vWb>au{ z{fhC3=PkkW1Nup;UXkvOkxf`_R=)JDevK7vsAxV2GjJa2IcVADQ=V4UPcGR!4Zp6` zP{Kv~XCW8oA^&DE8`oErM{I}dY0ikJW#c^fA8gP*d*jr%tu+r_cRqeF=tn8?!%N3` znE%W3Q{DDzdfbD2Dj=RM;RoW?zxZ?L2iZ$nF&Q@&A5DK<>FFV#j~%F~Ruu7!LcAW}_X6&(C(k;%Zt+Ff&#;Gyc@Nz&$?UCbM#Dgw;LVdPZWaZ|pjS}B~NJqR-LLYdKt{p6snOim`&ee>|A5^y3nLr=ze~8?= zfuioCCVpPJ8t@YN1bvmKcOq1Ix1)QnKaWW3HA?{=jH6GO4{{4Gd1~%^6)LwwrDfv| zMP(}Dc?EcWAfMEv#gF!C+IT}gNh3t-#eIhJuwDl;-Gi?TDkh_3t@Fq|a)_{e%9N0~xnIRyz%-J-EK*pxcw3OvFp-!+tMux8gqj==NmLZ`Km& z^JJv^w>#5Tze_GUw|AcR{+>EXMu>PxeaL6{!N1l4>spjRpNrxZ{+8~4`Pz-H3Gy)| zDs0E``HZ=X@(J<-$0N1fA8bxqe-WR5d4m6e(*0jJmQ%U@@b13%d-nTh{=@&b-TPi` ztElpW`ca#V^3#d?hj>>Q#%VK`W_Q$Hd0kc?pqN5Mykvf8=pURsS9dbUNk0bilZO1z z-*_Yb_>shqY+4Y@1QSTXi*0(H5haUxz)-x>Xb!FJKz>S5yewHH0=|(xl}J zjM^!*PeIl+8`5AY8^!rT)1s9-yDFph^ zzhPNRKAf8BFMgg|IK)d(|Mgm(ZAxWw?T{Zf@Dc%lpSikk6k~_Uo`LoC)Dz{0^;vrT zM2)SUy(8(e*6g_}_ry8*%CHbGAy0zm3wh-I_i<^N{j#&xmQ(mTr~OP({Ydfj$p)9<3;GAXl~O)i*KvCFun5!tv#TR>IMa1k;TJe2V7h zvFping8Fws1|KfZ4SC_NW4%IYe09WY`RSen{$am5dkfFBXZl-v*w1?s><7S4q`Nj_ z*!eW^{q{DhqIiYx@%%&m|2CCBm@>sXcZ9)a+TgNfkxXUj`GNhpUhUVJrZ1<>7+!C0 z7HWMfhB8Sy5BD47ml!qNJ4o9K&#TNw`rKUH59o)PH!NH7;MqKfQ~c)@-x{x$!hR_a z=RtoMrRL`+CF*zRM;eNk`~l}7-l)t#nD>z@anj(8>kKWbXuOa702;`22Y;;Gl9`(NDoY3jXu z%u3J?Ks=X#|D(q|lH$AV9qKSD1_&4^wAG!Z{ z!9wfBZNdG+JW1H{E{OVjdG;7t)BS=!3&+wCPydAT(C-84;=PgweXA*JIev?qm$`sy zAgWIeALk8GKNg(viHy?B9squ-kv^>%=fTgrU-YLODzo5>)$qDCXrlI~S!+Dq| zsdtXEWKYlRdp=3;#ns;DC2jZ0YfQg^|+k}oo4X^0m}26m_P7*o3Hop=oPT04ybr;u{`W()10)aqV-}w#Qnql z_VX$#gEJGK>1cGWoEEXf^)-*+cme+ZOfRw?$XIadw;gSh!<2%mcteps>j|!}jq0uZ z`txbqm(N|&o6r8|wW^`~a3$sy)WZblZ$X92x2_WR7vkv>Jgo1nnK|kn11D<(uZwsV z0ssBv<0TWzge$>M*JzP{y2Sc|pXedc9~B(p9)La>)|Wt^V%<`zpSM$7p9+YlNa%xq zj`z2%9tU@d_a~-^rxNI|Iy5kwMYZyQ{YEM3M}dX({gS-wf7d3=9$5Z(9JaLJWpBfI>ak95#@*Ei0gxY#fd?o+9p5c7rA?VU`!qRwF`K$vgi+R zKgLIc)X4{q`IvxyGvaB>rR!TRf6|J{JgOkKF>QR@dfx7%oOQUopF8Or!=3svg5Sy(1JY`XUEsRyx)a* zNqxAV$2xcKm}SKs;^*mABR|}=()AyktVxJepS^tVW%*IxFO5?a68MMf8ke_ z7GK{8K)jHF>qGrG?HEgXH9xoSc><#2BY{4|>$h{RuWh`H_c>EWRFVisGfa;rfstlN+Tz{2vPO9-&KP4r~6hxGuU>3X_0`{d3jnITo7+n7hOMpZr;p4Ext_3WJ zZ0mb}eSg2?BmeaOaDAxHz2l#4&|lz}0{4q@(ER7x;ymOheg(C8k^kqDFmL%tpXGq_ zFmIV}F2*mu&^_L8b*r|Kqtk8@ikB}DFI=yqL=Io_G=1TFxE|hx;uZG3%@}IFZ+3yc z#>+GlZ^!g?&Wbr-oRJ3Tmby4pg-Q&Mn!sDGO$ zaiJP}-gLq5yGe+boS)#Q$MEr?9anZ-0bX~GbU(m%ZMi6u$?j~?7%lpJr5XVb^>+8G zXZ0w@Tw~Vo`9qTBogMNQN!N$^(fF9T@Csjb|Lt$*Dm*XB8?eo#^RT|D%#ZR1^e!I1 z{5e?VZo|!_00KW0lzdPDJt_d$a+R`$K{pR-A zz|*?3rSs#Fe(LREOJ%e6axY~XMeqC);!K$*orn8XOapGGpBrqRMRHtlxO1ZaQYt~b zFi-NoE*X0EIXf>~xZTW@_w}a&fgf0}w{_bM29!S2fa7~OLA+3_8?%|3-v+7=0iH~d zPvCR5)jO@(9+19B?~QsM_3zD60)5Em%mZc}+w~u}?&R3Mw%J`+YeS$9^Y+~e<#>%s zYw`C};RN{sKbBvjyc`G4-2aCYJV42A|29*a^!(32>!omB;gVwA1%(RqeRKeUf2il+ z85N@s=-l{2Q5vJZ%4+Syd;&kPUW0}-d@%G_-wMyqXQFHI8J_ogG?y%@dow*UOa z8SxAW9^xIUQTga_>cP0Cut0jlJ^Oj=g`#{4<8Xa=KEF0a=a++F;GRe87Cn+(lhaUt zkq_a#5nA5^zFTry)3>!88WBgj`dmMSgm~IPoQHm4e%vDyYy5KE9qTgwk?tZg$xP&j z;f3?i@5*nD945sU9Av6@DR@-;EyI6?DG6o z?$o0(=`OkZf2?_C>Qk;k5MZ9lNPtz6UiE__| zniucMjH|X2=`%}k9@cB_Vuw2aFI6sg%&sjsY{fBlMm$Ql_yhX4`Pttg1Fz>T8YA<5 z@8%KKWkO4lz8FM*0DaPFL)WyM55?C%`ADBG;RpKtWBUWL%6)SEFJyMvYNyu}7m(vHy(od`^D*T*f`;+;cDY!te*rK5v_M z-kqJDZRb+Y)?1vgQ1?Z89>wu;yyCZeIA0&^FZgSlFW&pd5vOf**2lvxTk6Aq?;7bZ zD-IYpX1tz z$IJe+yYlw*_xCG(-T&={Zv1+I{f^$R-&;3cIVRFy>VL`qb$aXbeaHONyT^p5S8aRX zKJ66W_ZRP*%{%d)RCd&bY1 zyZ-C+)%QGW<5jx-_M2DMnmlUEI#VAH)c=VU_GJ2yO;7GJoS9Yf2M5hbH4w-f0W)=X{Gq% zZ_dZZ{+ShSSpEA4y1f7M^N98Td&)aLGCryQ8*5$A`;0e!+(2s|#GxJxk&H4UjPp$Z;w?{k}*pZn)}{_^(@>LU42 zpS_Q{>8Y2Vo>cnYynliH1IORkYp=!b{qOni?_c%$`Fp*HJ^9Qstbd=;f4lJXvzC5h zhp+zg{ex3B3CGKk?bgd(e_?;wzTZ7sx5Oct3E$46~;{;e;|e(2nJd+M{-nhrt({xR~JQ3IB~^P;6^Tkz;{ zJFP4G$+PC;Gv97;@?(#@`Rr|f)`0IXH_u&m!bX*+!UgR@NK0fxd?>Wz7 zhg^F9CyevXvWJ88_u)OiJ@&eT4;jYw`1p;dK3_5ZM-IJp;QP03dJXUYOxF5@xFGpF zG-StCL;CK!>d((}pKtf`B6-&hL;R61=f@}et8VjQ*KdDNuii_)-REzwe{kT4tA{F| zuk-etAIDv`=eHB4bXR9I1S$ zBgp>Rbm>2iTZ3Dvz4~g|5B(u;&+$0Vr;9Fn$|=i~o)=7%eSfnj|Mh;n z@`H=_`ss&LZomJ7w)emNS%31e{mcFNqpse5o&E25a0>P5CHwJaPyD%d>VD~o#)O#`o>Iw|3{j!!w}|y6=e?x z8PBJzJL|fOANIzYyS;MmL!|grZug~D; zyKJ%cVx{>__D8-w^?Y`G=CZlo{^Y9-nNRM-{;j+{^%>H!$2DU+-?PaPTkJ6Wip>}8 zH9`CL$k+4sT#v6kW$f4MoO|Z_UyS(v+rK~X{>pWc@xbvocD2>-pZl4ge=AEnrnBrj z|05rteCBv^`ElRwyzLi^hfMaLy_UD9KC{od%K7syy-8Qb=Yx^)%=nz`hPw{^^VR)N zAfG9+pJegL=Z$mro^SIf_AFiR-zocvujcc?{)qjq8@oo2hr8T#*oOZN6a_^Db|Gi(U)%NZ?@q=x$$oOG?SnJjwe|Joq{XZf8gPK2wKAq2p_}P~o z`d<6MA~*beKjG)!r)r&D9hq;b&xU(#cF)YutZ~*y&#v5gg?D;9bbQ2~_54Ycaz*CnGV?8`FVoyHXe>Q2sLnj@%F!T9P*-wt#U)p@fhbHcJ z*-je{n|0oW|GQ5f+$_xJ?H0|iCyBpk-KDR$-Tj1d{C&MUWj}e5ygmDOu30Zz_?|)6 zpZ&kNrY;5hC+_}C|511S za{sN}!ZVGK{iII$_|*U7m4_a@&%}0``9V(^_%_L5BqR@wUYhK3*_Td z&pn20xcT#+Ew<%(!){xw%?r!+cz;u^Kj+We)8CWV>A1r9U0=D6_>*NndA__o@elvw zn4iwyv-<+qE%3*|C!cU#|2t)$wa?qLzvgT6)DE-Ub71NHx|?M`$*$LkzvJL{MlC#e zgUd#*JLcTD(PyB0-eQ*0u&%Ne3>_-;ZA39g> zQ%CK&ee37DkNstdJTzj@{(9j0=T4ui&4o|=W4rbfPwlzY3cVus)Mw_uEz)bDvH!Sk z#BFo7@408|tX;&O@it_a_huf{c9!FRx665l?6ml%V|r~K_V1X*^Yv$bJ7v!654dT^ z1+SXpiZ|c={ZrfQ`!eIlj$hXQyWTYM;YF6YxAcAby2C^K$xG$qQ_mZE&a&S(PxRb$ zuJ_j*veP}M&eBo#pY_e#lh1OOb?-H6`@gQt`L~tqJDWZAJo$~+wm;*5#)T6O~S@z?XoO=B8`|Q`D-A@l) zM?T|a-#=pi>e%o9bA8K+TKchh_W$>K^R0K+vQsX+TJ|HYzZ}0$ zt+wHB|Mv9arN6H?QTAgjKKtv#AD6l4uPe=R=aK_Qys_zvJuVnQ{=M`4W&MU9$BT2u zF?x{ayC8C~bo?R^BHz~<8u?=|*qt3M`)ADmvy*~g0)eFG4;cR>4z7P(5FB!Rz`K8* z^Z)zrqa_0_ZFy|7VUQ0GkdY^5F2~>XaxWWRI<{=noZ;Y01MMa3p*XAZ!a>eDP6nE4 z6>+|^Yoqv>!GCi`ki4!7^f}f3EY?2u8<%EsA_eSX_OweptUo%2t-Rl0O>i5n5N4vT z%Lm*;19ZaTVGr%mJK%1^!V&hR9&|3%HN>M`_GiAeEJN@49?~&*taD@VIOvgp^xN|$ z?s>Wq_<;fwfA0gaNI10$P$$>67akly>sNm0cjt-bL35p z9Bv@(J4a65j_4O;342@*=UWz@PU#z@jKG z-5xC77CvxG;2dACY9V`{kaplj@u#((`^=sP;|%=y(M3)Ed3(gA9U9@dgEP-9s{+5T zdUw==?fyJq!a+E%0>34D)NLehCwytXGW_qT_h(i{kTJR)bDNee>W}kuzN!T5WG_3X3ph< z=PsH6S1y-Rlw`&-mF7> z*?=5-_8Z801wHK`uXdeFeB#D%k||>2*vv|_s2$>!9JImm38de|D?;qSSbUckaoWYs zIr12?u0+o~3IF9Kv7ZUZdz9d9GTdGbcNX{S*Tuu*{CF6RNTz`bHM z?ZvR-fMq&xK4pKcqJc%-7zgAG`j(DK!V|)QA7#EfL$KoZid`4s8huTp#Wua@tiLOXiAGqj@| z-R}6VLE<=0a<`B1O6}Wh9wO~_Z$LOmJKOHUR&}_&O*A{}g!_%^_uGl)@7P=k)pO@cGTLt}U^6#OAI9%cq%rAQcd>6Q{@`a;k9NgOtNo7dBm+N|e zP1OhVX!}?_T|cApt+ju2n5(%r8$5rD`+?uW-X@}|NLc7X>6V|nQI zWJwJN7uS5bh{n-R;&%(D$n#d=J$hsMsVz$(a~uDT%u_DszUnbu^5dFdk8K>bMzJtL zVR%;OAn-VFaHVyF9cW=Hru~PM=YkzL*t+YSsBdZGEf&@hj(rSYH~;wyIB}Rymq1_` zlVf(0-NzoL@$^z;eBgJZ&V!?@PBzV9UN#P~cpDfmJCF=HPB=bd{#k=B#NnxS-3OpR;DLyhu0FMr#1AXXj7i z{Y}TkqNc|l98}>66MK;MK$kn8X;&-*!X5Kg#q3YEKb#jwXjvA^+ld_R*s^++W%KDq z=0-|J;*S>1%Y8qKCLeI z3r-W3eU^O}Nz`_KJwF5osX*%?5W>NK>cJ=X=P-vmqIaZ!kK1@yNO@c!yq+DW0LVRF zOXXarH#GlCEdU%eb@q|f)%DJI)DH9G&Fvb>yD0$I<=ht`E*zvAaO}ph(aezBI$W`>m?)1VNI&S-@5PLULK`PBJ zdbmhIyd8BvVhO!}&`9a0uoYH-X1J)a`kHYt08V@POd?Cs>r9J=VzJV3B`JkADnH4aEY~Nbc>|C~OLo zDv&CWDv&CWDv&CWDv&CWDv&CWDv&CWDv&CWDp0Bb_jAFLB5kA!qza@8R9S%r-X^ZH z)oJHe)ZZfgw99N6LqQvBGH?4VN<@s%0zGo|m@_Q3I;Lun)<og;57EVrMr zyznPK>|Bl>#Ljt7m5a=?{Aj7E{`=so?y%_Ca=~n7O%Ok6`J7UWMYl zH0oBelc0#>S1V-v)hb?7#Ubx!wE^>j}DF**7euD(u8 z(>&z6A6Z@=o0*;aZE$diXZ~C(<%`MHE=i|T24{xqW0myIHjzRLF z{+<$Y5c}@zUF>B+bSRMi78=)e94l(5;Uo5R)MYb1K@ww{+>rWXd7|I zPO=AUmWTqKVgV-_k5TuF+0|P98Uwo4fi2$FnpaF*j~3avUVm1%6vy@N*afTW7qfZG z^^+DXh5lv3^{Z;$#LD&e7U*9o(EmsKXM!4dh!1IKFkyo#z#LMSrmG9j)s+_6{4z**bNZ{i7k8rK0=c`LvwB zlUFyGoow~;fUd8Udp!7)1^4~2s}`@~4_Ya}o;E>_(YWc;I~dGa(9q+ihd;P>P*BGE z#m&4#|J^TaavgGtI9M{A&Ng%#q0}qqC|rK3>T@{;4MeYVL-{evuPCkMiwq+AH8f5m z>ZtfFd#(Zpaok=T<28VJPWKT85j@`hPP%j4{=kNi`<@_b&kH$tjq=++QV)(_{h3+Z zGPj?tD>?<(78l-0hvay>qvBUa39)_<_hlmpjL<2sg2L!8!hyvQZ{_9M0b{ch`G= zc#l2iUnKYVU&~<=tvf*CI7bd%!U949=h%T4>wYWvXU+HE4?6zA7Zo4WpPSFX-$v#O z+M8DRd*wZ{%={KIJLj?A$D3CDt983Jj7s05dOL3Cdbp1Z=gjXhd*nsPcgEN`NA6gz zo%_wG{5=+UD!|{2dtEBk7ugfv*ZIgB8=q`o12O+8kvhiYD>pEYTDiyat2F-aDqL8( z{V~?yeOAviD!gCd`{`cA=Y0xmt{#oq-D&5SdX9}HuzJwUZfsPD?pMTP;oUE0*V5&C zRoMaj)~(RL-19SGX$Rg?(fd)vy{_w6$Gwhl5Oe26a`Z*$`C~s`8z6EJc??g%&=7kQ zHyOP-GCz`+BZ(oWUm*H&5kJuVTu!^#IY%Bt?7^5_bCG+V4dq@>=gp~7mx3}R_%FQ z=d_bBRiK&*oD_Lrw5y)et|{!P;1Tn(n^6ZJrerwY`t z0<$YtQ_b(*j`O0fk#GMZ!)B)c!oIJMrB|*U{>+zfdwm#jwoz#-YLy#@?gxc(zvlWO(pm7LAxH^{q2azY7HWi4?3o&`Q zS>g|t>sP6r$A^Q&E8^IJ`^*!zKKF?QgM_&XTw@2c^PKT?O!$5e^sX|TsyxkmxWrQh zQUzLY1$Zt*7n~!X)_8&DcgMFRzeC9H?s>j0caDAR_fGu$js1*<)ElJ#_pAQ?_eB^_ zAod_XhXf)AV{-JBBEL((b%fHc7p79V2dLIR=2vcfx2u+W9?q+c+g$zl8Ek%c#ruoC zR{8ThjduL_K=191(RBgndia)XREYS26}l($RDo$y0gfXYk8zh{?^v!~%#Zbg{cNb4 zSIqf6_lg~p!*pE%#v7d+%!bf^56aY;pMTJM9ONK=J0URaD(+}zQF;>#wWvkYD88Yi zYOa^vKp9cx1Ipp{gLeas(>u4TR{kQ6Wnx2LSLv`rzM=oDmglTKLXZ?mE;_ahsQrU8*?j~2=JS}}iN;48|7NLt+%s(b$hrutwb+QD=Y4(e zykWuVE?b9*Kkrsz8&haWd>-)jdvpzkrODvrFlv|-Gjs*! ziJYIh>U{P|WWdGbUd(ds+%Lv$nu?j#T<+~w%YC`woWx!3?P1qYtaSgBo5#12#J(wz z?;$<-53_fEzx1E$#?6-V1i`r)w~vbxrmy6)T7jKo4|1M6dod&dH!pf&HE&*GZ)yEQ zo@Yw~E@Q`~Kacyd6e+)PPoCCeqaLUy`b98$Qjkx+FyQhR2YjwqK>p`EdeSmT^4Lpt z)n#K|`TwzbWvAtBNwa%ttGtar%Z&9S`PuR^+d+2x-G%m%d5u=-2S}ctUpE{gNM3VE zPrQhEp%{OVyl^~L8y5(-VZ4j`-%Y@e`uKBD{!Y>AR<9Ru6ynci4Ryxs@7f`K?0Ec4 zg*mBvuv}RVV{jCbx9?ZD9nR*R)%*JsSE@gnHZrdh0X!~sM^F3k7;C4n~VvOn|Fo$G1O z^YHT*^>;b-^E~`LH6KTAU&PrjMRw@12a$uUi@0Bj+;I=>fZf;;ZV=(r3yheR#G^`E zzrHbBBoCLn8T}fTey$v5H#_2Z|KKlTP$sg@d}yV-!)43m`A}QmQ<}KCX<)~xS}^p?n`O?6 z`f<8VsHchVrG%bQe7G)4GVmzrIS+Y1NYCZYv2(=E<<8yiJPp*v#^)`a->r%Bc0;`W zs11;L7QJ)iGdixo0$7EBkBtq9r&PJ#nmF^%}~1M>~Tms&c=znCw7q&ffoKf&(o_+!WX zgZwXS2$wNlF0Iz@H`ai2Q>c!9DA1C&fN}o07S79E6dW8!E8w*x z7Qx30I`qB#K=PatiRW^-=TXpXcDcpJe37>ZY^*Q&aPwQLM-YG=S_j@*^Bw&5 zYl577V`$+krft~a@`Qr~bdJ1M_^|>xvR^=N?|lhC*E3F#(_Mx$oYO|7%Qm;?v_(AH z#ST4krZEtCQ(O%2sU2j}&_eIGj`sGKXjnKBy@Q`%Jjq5Rad|+;-Jre|BQ?`(K<;>?uCHBws|haF z`E5d{pcrT!(egQZU)I9aqsuDZSRwK1874th6&SZvaBHQBkKH#(<8KdLxWCydAASX0 zxQy0`?Nht4!1)*XNUa|i)Quj(>9VSHe|t~uVCIDfNGRWYi7_7RHbqGvla~x^BWB-C zcId$|ds_fe(tckH*!grI?zdhrpntwzz;EhNvrMP8=<&pEm^T)nOnIgL?1wVLm&~g5 zBLI1N9OQ#!sA;O+b2Q@2=&0pe*=1NHV(D_{5x07O=LI{ClNd+dRLFg5F!o+C`MBOW zcID!L0z=n3FK|!l7G43yWwqUKf9KW4U5*J^0eHUpf-anU=tOv>(C2f`i`)+-k3+S= zeIgM3mAZ~|c{h6yh@H-o#HkHwi@<+pI-MIF3G z^T5q^U9yC(N9NRg!n}ZdTlx1e)a7!ieCQE4M;^nNJ?rzBUvrbk@?FjnW&XTEayMja*((U#aKL-7jbU; z6xlU2U)B{Izr;fhBA-^cOI^O@OGS~dp?T=B)q`SRUGOX^c_-cA;Cs`f#9CSf#zhiFex&qZ z#5^kId6pX>XMO-@bHirFTal>ch5Tk6M?5D2F~3b4AaX~(n;;(gtF-{({yFWUuM~+- z-2HUC6L-~01Iqq!q4)nHdw}_a`ty?P-z&2{@^$l=-0hkR=R5#`gnaoYU~#X6GC`M?FT&PM81d7U%Ecp!+v9_x_WwBXtC0 zdD3t6#DPz5=>5CtpwPq4*3lSuxw+N5&s=2h{!Pux%?~?}JULvrzt8!*8wNuBKvO5$ z#1-&)p@@5W>r248Yz=X{e9fHebmZYm#|__w5SQ`g4l%jgC7vqK7!`P4*T;;*RR-r< z*?H~2S-*}F?jSF0m%os|Gs?Qx|nf31!EqaBZ~1H z=+eW%qW(w1W(Vs&_{+L+xT+?e0lMFNzVvW@x9~51(7>)AFNur zm95@;2ei+8>g~k%fBeGC46hJBMs;~g*KO<5pxKv88SmITN1pK4D`1Cv>3R>ZB0Y9R z=+{@8-iq8x`UO@Fn-A)HkKrXv*jPyKbIr_!tMoDZn0%YL!<%BWzYw1I4qrK6f%$bH z^*=huhn^4`I_c&x0vB!*aQuKEzqfP1$=`+v;_3N<-}Smb``|-C|3#l5zeo?7Zxk*% zKD^m|@q1yVeE8M*71B0m2Y>#DJEC`VJLkLT{V=e{S|P%k%8z)P=tbd9I=*jL*%s7$ zdxwhuE1!NAW1!L#QnT7^{C}bz5lwcm+jIif5P}l zJM@aul|X1?zwPsOOR>WuDe&FQsygqVdQLEWR$*Qd>hz!8Bi>UNu=8~e_H`=6@ixA_ zS+XOqzRK?jeSdbs*1_X43>9Frf2ti4k$kTw!p1*&;3@ey`ERM?RpRVo9Y1i_KdwB` z7vYx5=gS4d0rL5(q2XCLU=;wnjF&c}2S1lRv3?1lO3;lWa36JId20fJLuU?bq z-`$_*x1JIB^E%&sqQsxuP7{mFuhIlKkqJj~O=Fqc&pS2@+|Bc0GB~(_^k7fLg)b!i zCp08|2g&sqQqnB@=h~&sUpD$`yn=ac?U}dZJl5izrZ~=cQ&Vr>dAa#8-(t^h)agC@ z-p>2Z@vAk)+8Nt5-%>k0xL&bGUheD-TL;|b1{Lz2iZ|!*nSSvEi^2@jak^e`%MO|) zY;3qv-t)H`1b*%z0T&wRmzLA9uH`kD2&i{kyD6G;c5Djiq{q)Y zC|v1k0KPwl6=IR!-ioK?Y6j8_d;tVPU;m(XJ3pSV1Bnl}!!PsWPnXG{uR%wwZbl-_muC@879gCuyxK!1vwAwma7H*ym~)@GB}UPx9T1=v)_qDz`O6r^OHK} zkDwK2&+|Jp;Vr8J^bj4N&x+r)L_Qw+yfn+YO0Z>Q9zgy#jsK%?kl)7nw6fKE=Ucc? zd?5y2UY(dKaFNcdFD;)h34El^m#gS}dg*|?-5SQ*Yd>|9*?}5&;CDTOVrb8NoC`&d zQ9F6<|JYHwA!mCKZ4jZZT4nE3g~2;2S&_=XTa8+cqHB+ug*?1f7HLT8xHVg zBwrgt;mxy!jpy~g8R`oqe_Z&K@D>>`y=|tBucCZ@+a?%1sQtf&j-QQ%8_EB36@tf; zAnh;9hGF0J^Bs4N`JVfP20$$FiaMsW7G`yu!F#ku<}X2*r=)y+~~kH~;!M1Himcb08SfcmPO1iPJN z4`RgkmGEj&%a&^0OMY}qhi&OTDF*0cyeN+%J#ouL|6MrGuPBcD4=>vBMFCCk@%;Xt z>&-oLeWjdu{2f%d_ZxXbaa}tfR2%ON?T57^J9G&h-@~MTY0i90$n(;le}_zd!%cBm z!F;ip&8N;ST#0^Xo+a2jn4SHI_0|F$kOkB99*hWD{L74b5gYp@ypBoO_DHx&P) z{p@j_x3&5-v|ap*#v_jluy;NO3L(5GuDLZiWu5>@z&Y|-;dYvLV(lP5GSZ;S$J;!C zo694&wd(!-B>WS$tO_u0T2|Jz&$iq;M3x7&PpF9^)~Y{i7OZDt-5IXuQ0Sc_pWcw` zH2USd+Wm680uCauVPx7bS;hQH22H$CZa&z7o@PuQv*Y$GejxU6FeZ0Bc8+cb2g%3% z5^r7=V1JPn97LWlRUlO$RUlO$RUlO$RUlO$RUlO$RUlO$Uje^g;hgI#5O3$)$96gP z2%@D~y*8=r3@dfhk*~iAA6E_YH ztZ(6qEr&(GJ@PcWYc~@Zef~-l82#S9Yx}Exm^Vx>W=`RI8uKrg?oY=G9G;Wj5x2f) zu=VS>nAyEPK5xI6<MxwVgeR_WnOSYF6$ zg&LNndEg=mUbP0Cqvm%F;P!Jch@afg$p(Ozspt$a7fY+v^J@ zckB@G9`5>jUzN`vV&Bd9d#&%E7$RMKOu+T@-9-#(cM2PZYl}0F`F8{lo4tQN;Bo&d zdp-xT&!Q|^mi3pU3x$mEdX6T*e@)3Z(uMwY`o06?{oEbZVdRb$K1zw>7p{8iJH|(1KMYane%8MDX_0}p7>29F!B)*eXYfP?fg&tKe1uRd#om| zNA;Oe#^)(9KjdJ&Kqe^H&fKzc{mQlT_;C9SH)DCje2krjdj=xc&lzT3KREe;_{EU% z6w@QOWf9^M+B8;@v*GhAa&QSYA{g^W&Uqb-glYC-|D3~lv+qC)NzliMbGi|eqo3Be z#PuPAj!FdlM%OKH&vPF6?QnHobEDP=j&tVCvMXfgXlC_j(L7PlVHydV`+lEBWtm}` zWt?_ZkHJ_0cEmvj_a2p zx3x}SkLm)jr!I^RSSr|GA{?Xxj=w+Avro{k{As?h&T0P-woW}k+}B&!548nsU*)+F z24y1m!(!&>U$*gpJ@d>r`ao=7E#&we1neqBZ;$xIagO~B=jH2-J@`YPknzk%1j+7Q z1HW$J;P>S@fj_PV<1TW1_@p4;mLH^$-1(@1L9z8^0l(9J@w{g47UC&P=G^VEYp%HK zua`ZVHhy5#&=lBn-_O)pTg%6}+rxGEXCU$-bbG&lgg^2k#6CYtkp2&g^#8N0ZcBeY zBgoFj z!#ZuOia^-SICS9VVFC2v$^q9~C*ZQ*1&i)i1?;(Tz?u35oJ|RI*)Z@AY@Na1!3o+d zTT~ZZF8BL5@RvIU&n^nkYu1q04{G<(k3)lx9TV`&0|G7}d+wjnKFf^VB{)v^gD+R! z7pw4lD1LXz?~GJTXiE(_?bOIzR$G}__w!1;7;>|1TJ|z1b#yK3>OktG@C~S z86m;C!pF33a-J7~#COELR_OUSFSngxPv$L;>p1oCc=^s#m*f4`GHeCh zacDrsIa=q)?`1=%Ki84zFv&ibd?xEC9JDZ1)8`|ezF(b3+?rfmt9l$}nd@|9(&k4! z?{YI7Bg0|l!0!^8xE?LH-I$%rx3d;lS0Q$eyj*0xfxYwJqYxJ9%{y56cVv{6!tu44AIHxT6eGmD%kD_swz*#%d|&MxD>*2d?V$UxU3CNI4qhyf!5(^X z96V3s?a4c;jZGQ7ZY+o{y9jT(4V9Xw6gM|E0D z^(3y}M{$lFxSQ_BpDH|5?-_g|1OALV9Q(yI9wsP14quS?j*H5mqn?LctM(ZF__Kex z{r8p!D&TH^j_h4d7}|vo(T2;NWABI^#|wIu8Je)50tah8!R%&@H~9Z)?=pQwS>4M@vR()OYc>nKZ^lavY5U$s8_YUD)Jwo9SBz2&h+lrEz-f5ocWLST<3^? z5>Fo$VE%qw-MO{sz?(k0U2!jVGmrNo?@gImlrEt8>tn4CH`O{i>M)%vd_Hnc_nDvI zU`&p_R>*Nut9a9UoS$qyDY}n9JD#@7L)FayWj+YCZh8O+3!G z(mHa@S%{FZDJyWG-PdxywO)+dO4rjMIliLnns*U2Q+z#hmf%id7a{U@%@H|xm+rgEt;vA% z4cKH2r-qt!1@5o~!w!0p6FHntIKQh?(D=B5gZP(=9PWF|!O|>+Dbkk=3pQx4z^tCS z)_x1~U$FW1 z%7TpkW&`O+EpYob@V-<*v-Q;M74VN6eyZjB@nZdv;qFX>e5N$=Ueq3Tva;~B;F)#{87*4$QHhW3c@)2PS1_c<_F{mR3qf? zipIiiB*kxqnkHiAnd@g$U7m}2l&A2x?lqVnf|Fte@nwXcJw~O2!8^v^J0$2k=!5V& zVITcaB=Kl>AMIa$R}MMc5q(3ExE^QQ3fGZE*YQJ-%eMe;{l~CFd-V(Y?`{sf-|~Ua zv`WBJHGg)|_{~SF&py`g9-z5}4WV;W*Q1r%*9%~RO*Ky-K3FGIKi|NQ^BX5}M6Sbv zaMAaw8MT}auB!_!2iXf)*J9rVK94qFD^K?7wK%{P_)erjXo zUF*0!zpGW;R~HD8hAtEkUTypd8W)SrTWy5${K$7M9r(+tz5fW|59qk@sBJY~Tn_g- z+@w0W{6aa9$98JZaiHb#g3d!%>3l%D2^+Tp!?X@vtZ|!3(NhId1zKPQe&`&MesAx9 zM{Jt!#8M5tK+A_qELEUIS76Mo;YQCFHw1(`W_yN(+QNGU^yQcHZPpKVqwV+`GdNfl zp%-;a`7OL*@E^90w-`K1QeLF-KoNeO-6%Lh*YmgQKI;Ms{Ib>`;Ci}Vxlij@-4-ad za<8`TD@noz-`gO5KpUX`97nzDW#ssQudpFJ-|qL0EEOhiNFL{FJqyy##umr)QKFH6`Hn?DSDEQ&EVBjdex~!W%6}XEp^(|t;6;ar z1`b;(AlKyZTuhy#`}vpK8yTZk00ZV z+fd+WIlvtsR=>t6pE2TkeJfj1<6tAnw-Mg1xY*h4xYFMVSW0#ZQ~Emr9KXG!I8A}x zQ60LF0OKkNFVfwA)(a0}gTN%Ic#IC?non5NNF zZ|uM+QozB1+FvKD-ES0dD>ZPF{2mY=BV0g?e0(@g22p zuV%<9Tngfwfn620YaX`+$a5hlCLJ@ zeDSvQT85PV&JX+XNE-)o&(OmiV|wc5$hxG1`pbE6KjYoR=T=_ep<4fI`IU{)dKeD! z^M)VFAKXL!{2j$x)egw_%0I}jodz!0P5b3`#hF)i1(`p8ue=yXAo-mnJ@WuaeLvzr zLm*^6>!(73vuL5)Uip4+_>uh8t?V?l&+FFUBJ2kla=t*mjN*W&sty-O&UfbECz5Yx z*hcwM_tDZbUdJnc*0;z*)Cp%L9lXYTd+}|ttMzTL$$aThd;tuGM$2iv~ z*fllM{_!mv+`?G96VLh|P72~Zl3vwAaUr7`E@*1yP*CM}Nen;y7V?Q6H z}4Qd|UFzx(3UCTRwl+b^86|%N=cg(D2av%3K3tZzsFKQhN{#m?_+G%C& z!9mnT9J}U-3%*$G=QzF;0t884Ue zyovqEend_jjuYhA>2`DmBIo=EGLEn#F81&dkqL}(>4@JW<`?6<4`+WqnK0QJ+5$_8 zf{jY;W8v7ZubaUnar)15$HydxZy*k0U#I%?)&L%B^+Haw@MUKSl5eDduZ5xEi5Az? z8Q-b6d|L5$A`O%0X@3g_aLkuoh^?kUZ@=1BiPNJ^h|r1`1T3IllQe1dlz1SKoFjLP z<>_{f&B<>ubfY);!_)p15U@-0`n~E35wpt`InQrmidI)B6+qh=W|GOx6kbEA3E6o>zjW zX~FlYkoFEx`)&Re&dl#`81ng0xZeVKeoLU)7sA#$kBDabYGWTE96fS4x~Yo?*!o~Lf%7J&*GN?YNM?odi)&GgXnpT%zI6j%iv|9 z*Kt7t7&08ugP2jDzaS98{W<|*dR+9#og;7Vc#kE>dFCw19nHK%wY)3wmbx)J6O?seeervR zi)fxUv&`kU>x6TW3>jxHs~tFToFl(Q@2SBZi}Y@PeI#Bij>|c&i3N+Xfg~WjmyHYOGi{sqgK^&u;oh<2I&ud*}FpuCMicb0!T%(Az)37Lu+%z{U&TjSzkp zHiVdOV{+$Pn>~IRFZknce2)e`FCpxVhV$BfuC)Ji%O9-Nzopy1vwaw$cc~+H3x{kM z31mMG5=c2SJZK_nF~U_3&`vwcq~1{^iZ`2TU8? zFhNTGr9^7H(b(~8oNkK^ci-79HuaQv1r=CxXxcPsbYXpv6t3v|sAcq?}g$mzU7X)+m z57<-s3$+7|6lWe3&HkZ{dvsntNc#y~)ArldAz3gdd6&NDFP=knz=KfNu*nZk|D za0_wJ)KS{p&c`#UzRm6Wg1Upzf<_cvw?@<%deH6o9>L}1@*;n`y;u7FA?DXu`-ixC zU87$2T#h}4a1c3I?*8NW;ytNl6oBjYr?p|rjtsllek2dq!@+ehtP+d-=?CGl2a&gQ zWIq=51H1QSxV%u0F*1K%%YI)@cHIjaDAMb8d_k1Bx>Elld#>l>Emo%?E?5-B?ckvM zvmagVocoj5ZzzK{!lT_m9J`3R#foF~Y-opy;<~JUc5pCehdhSf zj&py{zT7ze-doJCvE|;MqV}d$-nH6~pKBcRU6J><(t5amrJVM_O8t|4brqoA`g0=L z^%@s3EVmUuKHgh6@9F&24ne=~0(rZ(bNo8bYyZdabNru0*m_|8JfcTFA#%ZTlF3=W zkqSQ?I}o+R-1|dHpIKCo$x>{-9kx zF5EG1RX!sQ9*^icf%$_xHdg+xNYDGJTU)=Fhwww+l?Dv2wHt2EG5=Ka8W^*~{zm0_ zk6riRkDYVmj^*09AN*PMlXc(UbwiOl!5#50LgHZeRi!U>;8-ED-u3q3j^&0YF80KE zR_7V#$U*$3HIk?2!ErZ0D>kzNv8q%Y*OGW556TTqMDp=FBVLG0a=nXI)Hm zisHwxpZc+z>N`Rld%`)#4!v{Yp)VI-w0hvzn+;)C<3sH_rLXjxnjLfrHVpejIC6gP z#Su4`?`U~pmoQZzRUlO$RUlQMC0Bs!B5+kM)YK_>4C#AJUnIxBTqNEG$`izY*?GcN zYjtQf*@5_D59c}&dAZ*kOtR-MMV$E9fx9ct{q_TDyBL2`4;1`;V&}92;>Yv!R$4DE z*g05yuL4{whh6mieJ63^GfrYC^XyHyU@%zR!%-qLXGNWw8W=Kg#G4q{g>#+H3Cc^d@= zX{U%|SA@igq5H?|kh{I}n4L~vZrkdymCU?8UQw355nqLLlY2upKCa{}zf&|I@ zL&@D9eGGXI0F2oo|3K}4$iZdwJ6&)PIf&eGJ>5@7jy;GRBoD{-x}b8zj(A_U4UuSf z3FYrddqqfm?3^R77RSw;_jI1uCYCCYDv&CWDv&CWDv&CWDv&CWDv&DB{3~$1rO0LB zd6J_CF^6N193DgLYK7!UyckFBh#%;B=h(&2`;Fb@+Ticq->4hIAb!W{{j=HiA{Iy- z5PSH(Y!qPU0)0}a3Zx3O+zK#X(F5nmTMCjtNZ$MC!4kM~r=WSw?%VPG9ey$7IgX~^ z3_RN$_&c>Gu190f{puMeL8?HiK&rqDQi0_n{X||Z_OQ7AUK?@EEQ`spE7D`<@6EwM z?0ApJPE)9-IX3jX)zE%*Qw1FTeWsgbM|)k$telS%ck^-M`f53O#*nz^`3}o*Eg7<( zSf^+?lp!ZxbHVPG2;9-kGW0HQZrsNw+|l#C-2}0}YlZwK*_VqJzL0h;v`7Z20;vM2 z0;vMkR3LUfLmtCw+DbmD0;vM20;vMit^#XBKFC5|El#^0rIu3#QUzK{1y+nC8k0xN z8!YDUMm0E)1t2bn8V+teYtTG_K_jD@D?LYqH?-ON>;~Vl;xVK>^zaqfD8Qm|V(FCb zKR&Zv2+aLTIL)0Pz2iWAPXg}1gIOGfuW+N(K4M{*AcrqZrDf6 zx7T+pMR=9stgATKJO8(CK=&+YH3l9 zSxPR`#fI09P9f(zJ@^%>`$a-Hes|b@hyOG3p?yqFJoIDb4+nRV9K_G@2nj&fJMYhc zbVY=pYVu18xT!PjW9arV-cbKo+;Zi6nW1x2XEA+D?*7i#ohdJgapdh}&uNtDX|Uuk z>3H8)25?&WTJy_hy1oU`&u{r4ccgvf&XGIrr1+rg;ajpHbZ+WwZV8AB$8KqDIHGs^ zn7j=Np>tDbPCRktdw7Dlny)b=UKmpc^Jv+wapiv$R`GI-A&aBHZzPT_AyU&^huV zbU!#)H=&?_jDv&CWDv&DBxD_~L!*Id^AMF$P9bL+6m)C(DW8Rab zxNZYGQN|pmQ~Bq1y#RM?>h2$>=gY_GIdD&y~xjvbOibMh#v8bc7K_E$B??A zr#?k>#6DrFK&n8hK&n8hK&n8z0=$2O1sp`)P$XUqf8@fvp$#SfRDo$wfsWQD+_C6= zGYeCq#6bY}-=jqDSZ=#@a_npYoSV8H#oiIam>hi!>mmx5JCC?cGjVKxxEv0$-#u~U zj&4^cL1#nJ3^}|`8^}S4ry10#Ww4=%#P0G|D)&6Ty*WfU(-eme%)fE#eAa7&U#xw? z-LxZHd3;rl?jPl*7?%&1^%KX;`{Vos+1uw37PaBDU!Qyo=X+>f;W*5`t8h-#9kiQ1 zLy$04pcz(RN;AwUrIad=Dv&CWDv&CWD$q0)7~M3@q*hV|T2uv&?T}Bm)$(~>Yi2(q zPzvwzJ4%|$Hh3OB#I9r45r3^`h}ZYtfV@9MD`&lscYJHnaHW1-$1yTi?bp?2zl;^0thf?dL8!K+D^GxwtMg`{9b*dxTyBz*$e=HKVqbZ7fv5Tfq=n@D6U5Gu&uB>5cz=Ta$M|D*zY2R0y(4-Mz4Pt} zgmBM?=gLJ$xY+MA#N_xnR%%b)yN>WkiKhyr3Zx383Zx383Zx383Zx383Zx383Zx38 z3Zx383Zx383Zx383Zx383Zx383Zx383Zx383Zx383Zx383Zx383Zx383Zx383Zx38 z3Zx383Zx383Zx383Zx383Y1fUTKx`aTWjn&{fxq-c&B8s4Wh6LRzuOABT^kK3aGXA{np5)Q^+6CgR{C+0FQfz>)OS`L_4_7{ z-tJF)$R)*D{1A^g?M$%WVfaD%|MP%}rwXJBqza@8qza@8qza@8qzbg)3Y?{N^{_cY zCr;Bk{z3KWc;R1#z>92@iGE!G?`r;V(9{)E;y8MsnEvur@|KfTC#3Vt9JU-^l>BUd z=s*suiG##xYGi+(r0XbftmR8y$Q?J-^;=Jk8|*>k=Se_2j@Y+!+|7Om1P&gk4t`x> zovC|EuTQo4N6J+SSEMf)7Hkj)EHKa94(?bKr&@ii9puDqZk)WP6?#2957)y%?42WT zY9x;s7UiSURR$K>Cw;0wQ&zyob*B-2f94QV{+nv*nuvG zgV;I7^f5X9=wpZ-7_&?A$|^uT`I&i^|6CrSFE=WFp!?Ada(JcBDU0$VF6}s?2aDpl zf3=+Uiv0cj9m}s$c~QGbKW!_pMU~C(XMUX`1LI_~Yb+XRzSP{%(pG-M$9-O#WwCk1 z?cR(eQ0YA5abtWhQ}i&-yo&f>HVQD7@5eEP;w@GX7d5}j4X+i(_R|X1K)Lgwxn;dw zP$Bo@r9$@xo1YMgP&ED{Zc%aMFo@ct=)#6!?C+lcwc3Uh-(Hs~wYqL;t8q78Z`|38o4(UIhw%&a7U;MfS~I zU#~+20_MAN?*|vzHMYK>JIzk*^?(o@W%_jtiC_E;A=Nc!f?+4^HzAHIoF^v^?gw0`m8{Kr?T4w7KW`venlMSZ@Aq$KNRf?a!i@nn7O@l(~T) z7;_snS4 zDkI1K9$75hfS4l5Qw3558eD-^nqNIoOzw8f+jAA1&)hHZRDo$x0be#auQVt3cYd`5 zkLdV7?|;8C_V-sS%_nAmry3qCgVlt;Cn0gxS;S$z72~YKK%uul?2*|$=wdV9vc<2-q`qp65dhQ+vh8xI!lav z$p=4p5f;UFe{awAO~tFdpV(CSmD>*Upxf`mKsN=~hbAsjkN0Qou+21{F3@-?+K(;e z{&UfDg;HU(F+vzSp1IED`&}Ln6xGYyX=$8wGf4h(*?fcCk$TRdarTX{rwq}9?(glo z9**672!tbzL$QZO;OwoKD%zoh-}q%)_s5W6x(?&h_1@*DWahH*@uk5W6vyy~c7S-XasStR=F{e(|uLwRH0%(_uZhv(7!egz!F@ORok zzBvkEcjHY($)~B>OYMXTY+;3PjyfhsUnxGI;|s(ePJ8fO?Ra#Kf2Bw}_&G-ox*l$~ zK{Ds8--uHwR_ni@H3aV^IoFw(Iq!<1kj3dR*r5D_xlfU@P^3zaBb_*0(h@D?Z)t*Qm`xr z-5&Xyt`K+ma}m2p`Vs5@iOCa0;~aTQ$EDN(kp94Z{P}r3#&wxSxDq0FEEzP>2JO=v z9CZ2X5`gI8+q$C+`d9&1(*<`YllNfY6WGw74>)h7c#a2JoWG0jWb)q`ck1o=e&10J zjy$g&V*wwr{+qfU{ZoOxO^fyXiv+}9TZWb9R}|l;N#{lW%}q~z*0OpbFE?MeFXA58 z?Tg02!x~3Ee&L|ElX$)Y)X5J^=XtN@&$iHec|EKn@V@E-=sj||bL_bebMA8V39GBX zkqb=S?+g0_NzNBxfXm(a)T1_B>Uk7#&#O}2@QkNTgxzhu<(#Z+HzO|LxmtHk5ZZ1p z*_FFd|I!rl?Pa*=r0?_dv_D&@rCy6%nc zNM;ONw1M4xVQ_2m|JUR|s!_{? z13l~-5k(s}ER(yRbMIfJyv#JJHv2^L=Ki)`sybke9iP%4PTcxGA#nRc1741||3ocR=GZ83P|cJLTh10t&(R6^3r@rq0X<^p$cylDoq%?=dC<$| zdN_8Vw}gWEqfln0jci*?vhqz!Y zkDlru`a|^K{#}g|*E^pF$1-ts#f>3hTII`&IH6VGEpf^5e%Pjdesy)Y0KRElzT;Oc6&7e3nDD?NRu)_@Q zh<-o&PX9|CzaVzo>%0MfU`e(D62}p%Ioh(7N0+b9i;yxy??{x}cVsJ%Uv8V{du=MN z>!jPa58M$i_B$MOd5j|m@oy~L**|zxLz|dPAl^dRvX3uBl6E{}2KU}NQ(;^r$b$i~-iHU2@Y-?AOU{Z#bCaYP?m ze!4uyk%Po-Y1l22u*>Z+REFL$60TSW6y_pt~6k#U(aFZUIhlf?w+(WSOqxE^;5t53%T71QWmaj z@IzjN*gN94jomLn9>Z1rL=ZD9Q||GK_^TGz?a?E5H1}-s1}-U&uSe> zyf5y4EuGW990mbL>F$F~n~2zHH^ulHUJyq@B~5 zco7JHXM8_#>>bU#(dixj!&z!^&`x0ky(5WTp!>GB3y~k9^VTLB$d1^(YjrE)_&sI& z2YC_V=k2&3cF3`hA$B`xV)j>0Qtad^)a4&JnBe!xCHJkPNMiQ|Yq_ML^x;asopq<%OOcOV-LM2`b^q#3^d zfKwg52XVx1(&}MrvIIBRg$+>R65M!bi2Ul%AnJK`N%hMH+!3n}Y~qGHVh|2Rz-j_BKJJ>D6C5WbZ3 zj%J>{xpk2IN&DgK9Rqj7?-6_70QpHvur+nW&k<|eeTbvz_Reuc?uZ^->VmMfk;eUN zN2AFja!0J5XCs0mb^U_+V%5zN{fF9*-6Zhe7sc*7JvaZi#@$~=1kKmFUOq`TW|&@1 z*(2y3iPzk5W%WztDLdUd`NbU2J7V8a$4M{ESMZ6Nw;b^+7rkA$`@7ulSGwMLEFN~C z+wt89a{hkT%BzG4%MrU9^`0^uM1F+kyMFTrjU)E{-25x~p|2H|dw+-aVri^u19X3l z6Z|}XIL}Y+l)oeXH}N0_fzaj7hiLrbwvIMF(nN{9BlaiQ`k*rkq3fNyy>sjxt(obb z&V59AUA)}(2VScT3JZ_#`vl2^tpn#gvYO3@$nUcCiq9{^kD>b)@iQ%u+oSJn_pvsy zaXeUY+G-qspmp9?x_+NY=f^W-_od|MNrUG>;066cK@PLyS)YyImT4KC4bXXl?*e$A ze?FTike32X;|=olG?0U?uaq;qz=rx)8^?dQsnR@}oBiIlz9hex9DP$E=T)$%T^*kF z%s9?srf1oMo@ua)?AI4++Rm`sS91DyzIbcvFLJ4)fE^e$EKscD$MP!IF6QrYj|XR+?Dpkyrc17`2WveImK&$3>^P2^sy*6SO&hws zS^9ecaO^5YmQ$enGf#j;`U7ly_BMy2_ae#u?}a_qjkkCXblc6ElzWkOsssmXFU{%yTQ?Xh{9t&&|GuyubUO}qg6oWxuNplv(}!45rP5r{YmzmXK>%EMhSad z;#Z2C|7w(0rOij}HPbD*)*6uy?uhm_PSL4r`nD@bw`adq1!G`ZOOc%N8~P=V!#1azQDH&^b-j@lZ zju8d*Ma^@bSUB_`eznH23h3)u#uHd+yVd&94%ZVgj(mDS*2DaYChJl9*VyBLc8buZ zr_83yBKL~z3j@~3fct?p3Rf>oQT)F3Jo17ff2{rfLD7AJ*!)AhO0nAOYtGAHtX+?P zSIn?Ra&HgLd}%*xmic|)YU}H9*0cVg2Tff_@dMqVs6G5Z_b-=6K8MVh?;MGXJjRjF zD9HJP^ZB&yH~GZ!DALFL8Y=htI4_Ft_C8;^z9`WK zK$jMhcCE%^rE%Qec~SXd_Az-ZUZwW2I87xl$~UI}>r5d-?w^8NSmJ}EDEGbwcF!xm zh0D;pysG6xz)1SNY+iE?GZVjyL=NX*9PL-%$-+kWbwGJooL_Ty~>TbynD@=w*&X{H0z|;`PA?8 z(oOu}O}!4PdBJKNu(b-q^Ff}k(M+t~=)u^1G4#z9^>a6+=bV42QKFkL@T!c*a~0g* z(SG81Mb7>M*^kTzH_sC+ZCa`KJ{9pCy*=mU+T%xl_)-7ZdL6%oaS%F3O&xsQ?%eG? zFZ3XJz+?D`=G#5>py?7#IOk}7Ey7q_mlM~~?PA=2o(UeqSR9u()ZgPJ-nbRuxZwO4 zYmMm)d$&XG-(_y-hT{Iby{P?2m~5k%qKW0z=I?2id%ktQ7{4&4Fgg3f@$xb|#`v(X zCAx&>LEcZ@zoeP^Mnl(Wyr0c`JA>2=&k2{9db1_zQl+i1!TUKT&ZrmiqW6W!hxc{4 z|3!bt63CEturqa{sRF42sRF42sRF42Ew}<}MRMP`%yn4AJ&BvB0&T3FB5vmOXzadP zOkOWQ63kE)sCHab>(|_hThxz+>KnViKF!1RGb#0&kIC@^-4Xd3rf_cRdbC{o*m;dS z2<-8kV;94s`w+GEi^VIF$M##1UyLFAO}RTb9du7@`@c8MHV$X{AEpAj5HyL+Fo^`r#g-QwG0C>&P6 zO`Q?XZrF~pc+U6gMoR%#v^p}I){zxZ3j{I5sL-=8>`7d z5KF5+A3o&G>#<|{1<@S-f|)EAVj`*M`RfAWI`-FuJ-{aJ{!DD3!jIP94IAC**V`MU zaRdIkb+NXi3J(^0Ox@!9{z3lKBYB*+darME*d> z6WsAm+b^z%V+SI4jOhpIdco~0M4G8R z^GB`Ii^XNS_)-np;au-`AOBkG#A+Om^WJOfuzzRF;iBm$Th-cMU0i=2(6m|McX;^! zKla`Q#?mb-537b@cm!sKhrob|hhcbx@R)mNm>Fy=r*3uky~Xs)U47?*k#jg*b*lSJ zSDjOHPSx$MQ6Pyiv4~?sFak$75FmgP8Ay}#65>+JQ~Yp?x&{)AM(c&%F_I)k*AkPO~V;t4&!50lT| zA0Yl~X`mr|n0#+^_+|Scg@n&~djE{Cux2pZ(RJ!;FyX8GesFT>O#^*a^R< zGH?BE!+#nTtqA-2kv{s0(Nx)9{=;PwtDXNIW|{lxV{N-+fAZ29vppBSz|ejkeS zcczG84@qAa{xf@zpK?Cz%OctZ9w9RJz0ljIA7Kl?}4Q}uSA@QV14 ze?myXf92+f4AsGVj=?oKk@fDYgyx0>Dv%jxJ%=B@-#W49-y|+jH8vGVVV3^Q8&l$Nqo^-;H2LhY#1BEgp~H-f9~YSNBamp{%efDbTLdmhM8}Kr28=O>q0I^ zTeGu4xUL@Zv)R5&ghB5IM}A_#K08P!q+txRybxc>ev;RQ)W>+(tr2>K#IrsVdOqUG z@9DMhy8JagtKxlptA_jPIpcr9e$c_<4hBqZI3iTBXQL%J_V z9`EIRnEW+7>4dBDt;*l0ueSfraXaaKddN?^Jgm{ZUXD)*sfTvd!d`zLe~s>@m5eUJ zpYjDTQo;{U_v37`Z(4`%p{M_GA`JdzR&Wcy%h4Gmp5xzdFu8xsfrc^uwq*bz_4oILYi2OLzFd*NhF_IVK0@jvB>r(h#zW}i@pvC5e;=N75Buav zAK-c(pr30}HvP=Vt~to)M7+%+ASB*H(g{gFZBM`;eQ@Gel_S50=au*R&Ku_Xf*ntb>WGgB_oI*Q*f+fXb?Kge2oD|@ zJTQ1*@W9}K!2^Q_o^=oOt!I7wFNBdX;ge3!ixwf_FWEkN&2CR;n08a{v%Z;_Zum32 zpz7E>{!(QC{ikhWamV0);s^Yu_qJP~aM5kN%_Ghk{>ByMFFM{8qg|WrUsg6AYWP|N zEN7&D1t*3?7$p7&_5*5y`AN4YQzhLe5Md|O;!}$J{ZSWCN z&WDNjka~z8!t_Ld^v65i#}&4K_u*8k9{Q$F4Gk{gZykmeNe{h-zJ6*|I`?s0bMB*y zVe<9qr@*RwdJ=xe`^by|JnP3c0$JWC+*qsBB0OPe}f=!arj7d4Kcw1PyPu`tkLq@SClDc-;nYzPkA^ z?ReigD?H`@sEfdd8Q+tFr!FFfCx&O(XP*x{H5a!3)EAGB_eqE8Cm%2Igr3gux^&Oa zFd_AN__ZEkVd6b}o%N)45y9liNA;XHyHj_E7ydi6aIIfz+VCWpbMweCm&)u7&Ft$@Oh!ve_nl0TAt@% z7%#)`GsH!wuU3y3e+|Bc1>G2?uDxZL@V{{nXHcHg01v;&^b*nzw$nVv`R*0R&3$~w zjKD$q`wtnOVY2x!@qKVzxmWrWu1LSJBHwx0o>V;R+WCb}faU3P4bS;0A&1Z8BV@D6 zFvlTI{kenJOarTrO%FESZFu%4gp82Y!sC6I{Er* ze=I9V%~rrJTQ3RDSE)S4-6C1G=>R@C#>N~_pruKd<|01s&w)X@QvXCzfaf~eq*Hi z*-r)Yf$JBv*tS_2tU{h=pghA>0VDYJSMn22Nc^gh=Pf*c4e$AUxUaqP{6qNZdVu*w zD}0#vbs_Z-t}0J{Ldx}p$#+)h^;3_>uNo#FVND>=qF4H-{OFYP3~kDq+&LhAML{dl^~*Q=KN^fLu~ znD_y{xjgWnSIU#ef5f?E-SgB=eC^=7?88cgt19>uJAlt~@vF-9@qLxMzyGV|M?2me z#ecTq-^k#8`19gE?ASLvy)WD+zb@VLGfX>vV$FtTU4F(l!1X-vH(bZU@Z72SObhp& z2XJE5;Aa?xu*ztJFJ?zrVf1=@xFWVT`d{=&%#2P*cA8H}JmFupAB4mYa6J$B@9yz@ z%X(TiHon*d2r2LLkJX2ee1z-b`{YRXkoU`K-OL9}VA~5mqv8M1*;VtSV;h2x*#mr^ zo$zr**Qek2PycE~Ltg9QTkxW=@iENvsQ*?){*?;ew-*(*0sWXg@P$sl50m`YU534A z4UcbsSdKiNdd>^~?KKtuii@yTfBgR2w>iY$bmR1IG&?-rMYqB8h*ZaW&g8pgKR(_3 z>&ItIE+OSS?4x`Bb;G`0@!^_2pB^vQ*FJfEA6_-y8Xxf=wjb{#!a>rB_F>|m7Ob7C zds_B9EAeukO-Q@`ef#0@q}L$%>2K;GKk*Eo6+Unm?0@>46`cCm&Yab*njH1l==58S zPCUCA`jwD$>LDclywJB(K1}`3>-x(NtXY0){Okt*Upiz(NI9~9Dl?jh#{?OVFGs6J zcUHMo^`Do|_lN(J`IYafzqjINFURn@^{Q4+h$r;vB;MDj?=VK%7atkFH5dWq+I z9t;!u{ARWJ_sHO&_m{Ve>2zW-NO?jMe3*E`=Z#*o*Y}s}hUpJNFW-mvbT7{^&(kqX zctQmi45@!rwVz?*h1z_3RXxuepKsn6uEDT4htMd7Hyqphveuh`&BR}D)a-PqJsn5ec zKGJLbKIvXB!=(2?&+o(R57b7ribGgjzYDnI!MSJg{?LdwzqHOTX8{7empSACHBFB&pl z))VUY<95=?PrkE4>hXR$t3K*EtNa^XZdL#I^1P~FDEH+iz%b<*CM4cNmNVktWH>jWIUCCFw zheCf5QvR&augBK(67M17CB7CW-or05M4vqAeUSOU{9~AYrM$P}%@*c<0U^`R`%C=3 zD8oD#L`Z)6nb6mJ@)44c;Z-5!JX}?N;2S(Jcwq3rv+4o1YpdGl`!UM1{pC1|kb2n< zdPq8<*H65MH9n88g+1QuAHro1JZZnx;v=50Z0*^xUat?=G<&|ja7_>KlqV#<50am7 zRsKG{8hzDxYVv*f$F09F{>=sTI{ZyD&_mk&PWwSf{Hm~~w)ikKteB4};_7D!2@p`54`gkP0F)sSIu2Dduw>F$MZ2v==m=yO#OrxrS~^& z;^bkU{(ou=95xbCj{PYi@lP5)?f9Q`de@Ebe=~u<@1W05(s>?%>y?a;c!tjl89$-d z*S8Ps`Jb2YpD{zf%b;J^AfB+6F4Di-9tb2PKk0ePo{!-_ZT5esgQOFZuP?pizbIIX@2l*gMAl=*$8-}Ce^$7z9`X}1ULPiYT}VBI zlxM%SXNZMC;yoYngru(uef{wE@I0FzUwXM!i`42=Kd&|F`~d%5UhE0ptC^ zqoC*W+{5#?{#dGt{PXK6o*~j1{*(5Dkod<1X&3Ea`0`hV7_Zv^{(}bn_p#Qsi}9ST zbgUa&KR?gq{ujTK^8RBB-Zl8!_Thj}JYVriBN;+Z-2*S11uT~}gRUCkjzO*?5>Lo^ zFY8fFUmu?BSdEW%6OzxTgJIf3y`S{SL4tV76Ozx%lkVln_j9aJ#<=`MN(A_STRU?3 zttsBeM}PjDu`!%VZESqr_pa8GP`(d({XbKw?VFnHkk@qn+-eU`7w-=}Y&ryl6@uW!fy zom70ohaI^$cwYJ52nL3=Jiu|N7pmbsAJ@e^+_!n9=V$o6MkgfRL+T;)^mW4*rDxrE zpBDc`r`PLSH+)fk=qsP3vlueW_!%a&@|HgyqAC6;hNo#JKjIQj=~~hn2_=FTstAh zQKS=kxjsDU0~|ascwq3rsva2HnN>YC@C_aqJn*b~fa6cXRqf<@6d~n&nD_w>9vD0@ zcwq3r^XY+g`v=c|(c$OQi-XmJ2cC=vxK2jMSbdoIrw!k21`yI7hCL+R!ymD8ynXzy znBdsp?>9)f54iKdKAwvXGd{*oc+v5^+4Zp>B7C#^{M?5i^z=7t_^-Sr zq@0j`VEC);9Sp+3fAr7*2M-J$xM&af_Wh#u5BdfVJWC#6dG|Ke@L%N_d%`t-k7xMZ z7I7{9p6CYh;DN*gwQ}U~ePJpkA0hEi8uqPskbY=}c}RPSUpHJ!Kk%+tka6J!r zKl*S@8|O_g*BBh$rezVk6@Qg~c)c%_+1AEVueXPID)eFE2RL|O@W9}K!2^Q_1`iA# z7(6g|VDP};fx!cV2L=xe9vD0@cwq3r;DNydg9io=3?3LfFnD0_z~F(w1A_+!4-6g{ zJTQ1*@W8XQ$^8(WRyn^^X=*M-QpZz1p2Ml{YhVR;s&v%gcuQNQyN&lsVIlrqx z|Gg>`+o<75e_Zfy+IaYqecs*TzP=&IfOKx<%W>>zH&i6)(3{q3vZeNLaxi4SMRFwwyd&2=;gl5 z5VWfXz1&5I`CVGBJNfwz!-S0AhlyVmTCdHlyaK2LY# zjT-&maEuIl=-4*Cj|IyUTzGHQiF!qj>voQO?%;2)X#ZIwT6G-b^;3?}(;s)3=VKVp zkMhS;hAfXy*^H+a{U`RsTr19fay@Dv8+ofoGtV>iu&qsgmr4A+wI#a+sJENz*`fB? z`^TRhQ=e-~zT~;KelULUzf$`PJX%~KbvjkEnUj$y)@;eB*3=i~oJJkakM*9`aB;p1i4S5t-w zX+|ylxbc^1z>4r~#>aM=VTvj=aE-5~kNoGQQ_or9 z$C)7QV7~eE`7q-nKf{EN8_#&2Rp|X%vy*&%^gh0tJn^f_vm8)vfKSE)^gHv3urGGc z=fjjIo{;!A8uaP&VfvZr_Vm6m}M!2^Q_1`j+b4-DpJB?8rm#33-6|!{`_$B)$ec zpAVl^ZdE-s{R94u>4EdMPtS{2{CYa=<~bqX?-TF&81~Tfdwq(pzwXm1-VagHD zu(yZ!RpGkwK7Jqe@vcknL1A_+!54q(rqFdBv#uZQHjC`kRZlklSTQy=4F*uy@$=YQPc zb?5KoC+xG&^Z794J-!z9c*>s@KI{6*6U_gN(OEUlo5* zdRC2Z;Cs3r_+RZEY{I8&%@F$=-2-f2_-;SL+}HgAa{%e|M_-tF$bZpc>OCu@J%rT5 zFrmjYOxVZQN2eYS>0j<+bDZk+QLct3{ml;h{L@FL|DN=^8RLE4;Hv&)x_DlM;j_Zp zIPR?ayj(3^HN2M}!fy@_`0~K8hu#}puOK9y;XZlt4{-3n;DNyd7wrMIKVEMQ@A-!C z;DL+uz$ZIpKW+t)ctXcE1P2cc9(V>kuxh{YfgW3_hvQ_j6JHAxPgvvUciO3+`w5iu z;Try5Bf%iUgxt??Y%$1q-fkE|GLTL?nI1y&^~FOz!d3N>|Gd!K*B54d^drL_*68#X z=^lDL=M6JI7%%lTahjw{?cs_<}dTMyeJt@faFg}LaZ_`c>$$wTzzf<0aiTB^f z^kMRO==m6CzI*;5{KoKr&)*@O=IgWOkJP&U(EnFq@%X;>xsP6n=82>Kfs2u0LPy@H z;XU6F9z1Xn9{43wLU>-CXRViBj$w{t*0syaG3?vVRrPu~hW)sT;~+w>pY@y2)7K4C z&;MnDgzM_*_-hxKGOf5As7$aH}VnB@Y9C$FYRDD7+w{6J+*Xxz9}U9To-}Q4~D6a(1~4G z@YkFJeE#_`Bj&u7ka$AQ*9nQ|`7uJ`d47hFc%J_tB%XSm`5XMM2J?romJaHBqrgwI zgb*@aELT44@!p>ddq_Ps=;LSD!m|CnBe35j19Ql9f*&f`|q^IgVBIgUd)uV9$^I3HxV4|;j>e-(c`r;z^g<`eJd zf#f6JLr-V84^j{Le33!TchgVGpT~c!mjUc+#n#;kWU}ny@dPHP!X9Gd>S{ z1)ng(y5)fUOc%pX*z6&?iU)jssjzLV%2$&g@Ph{~(gPevT%^vnF7DS7$N0D&PDuIy z&*uU9ms%JmB)$e~e8dyhhCTFjhMzWMd+6blw#%=dGfY1|X?q@5e11KL;Tk-z9rPn1 z_rKPK=e1*ye?C31?)as~@9VJ-d+*ffetg0(q1VH(Z{HXueSjD1fxi6kvGwu$^?+KK z_?kY_ef;Z&Yx>vKEu!o+`Frl~8r@vOuDDUY$Og!qm~=woA2;;pM;InNYy7;o%W-l|AKzOb?2E6ar%#S_$`jV+Gvt3#(5Iha+Q;|m ziKkt}*TTd381_)}mk32o-!yugAZq zB7afnFX>U_>0j#jN&g~;_u+Rry3ZCLCcD?ebtuA`9Oa)h z<*E#h@Ie=*y$=1@gYWN&!PEP~HFfk4VU2IV4;~N?`1aR_`@BSc!WzG)_l0YEh-W*@ zu&>t_6&~slJv_j{1A_-v^#I!q!d2zScUC#dzfs_M{cut8H9f@FpwEX@`Mlf^9y~C3 zVDP}R>H*)bJ*##Oc0Jo3U^#kRR<5dlRldh%=b(4+z?<0vZ`n8;PiODhxOF;ud2;;H z$@E}vd$vEnGy>w@^!WA3VmY197@Y1+X2;Y0>16STAo22Ie0Vrsj5hc7Hg|U?2b0D4 zc)nO(8i&AF?f%~V>7%{<@ui0K_T+H>`lQaiJRToUzPP3P>U6eu`RZm%#kKL>$-(W( z(c&0vH|Bej(T&MN(Df%w*}9K3T$+I(28?IBr=!LEWVUy5M5e2Y$s{u1_pV4RCYnms zvNQeIXo)ez~+`_uj7_apwBJENWBz3Ke+WW0AUolPzso-XVsEIB+K z?cbXmFA)_O$@4uQ*BGuA?Hn(rvwMv_E#%dM@xA5M>A_?+K5SX+Ir?RVpa@L>LMvPcv_8M5(_OR-?@j&~oR z-D$@LU!o1wQIxNn>s-bJghx!jRXU?d85CLcYS%yuWzT`E`0 zc1c@idsG%BcOuFxMAu*uMxF+h@>t^(6SujPO8?Ty{yqw23oFgO$8Je=O$dPleZ;|J zyc8E(WJsGA-dw)6KpP#=Cc3@cnqx?C?__?0j=#yq5eQYv)%ijiz!v@1sp&(^x8}$y zq(+7y_UNE4oDwlrU*qft^!&6?{c2glQ+gVQ$ml0|(nIhwT7eSHjHJ&GbR zNmmc%^92lp9~(pOEKVjKhhZQ_oqJkj&463lthP!Jia_ST?b)q^@$RJP=xN*2#+W$V zaGPzv8_v7m&^{LoooB}OtmYCEDSF0eB?lR)oT=0K(F=`#jWy2=5-OQx$CFDrV z+#8d7TOzCnj9n7(*1u(Vbj%-`oL11Vgz{iow)%7FtFKRv@6Y$P zrM)8;(tRkYVfe%2gA;AO+1^7e{M0T(Q^PL*_GF3n4#F*7b?Pw&Z0PPo7Bxc(ak`js zd5UREgBH~2mb8v&QzTDJoNOWd>g)(wiL)4~5ovumU+lF;AMK$@yEWdG$o6f_62^R~ zB}|--kM5+23;y%!4%MqJL4nnjq%klT>M88Dn@gI(&f1{qBQeY}g9Ox|>G|f7TuE{J(ZxV(9(LpORPly^ph*jmK z)8onVj!wajHW!QWsiX>%$1nxE6;Lf7?CL}*vy2=_Of-x*42AhqW>c6-EGNrvzqEmf zuzYed+Qy7oV%32BIXsd1q%6LiKz9ECiw`3SC>{e3@?u40y1c)+)P^NRQurenfsGE( z@L-@nm04~SzC2kTFXpG;g7N!H^Z9|!m$ePQix6@e(|SZM0Zb;27MF6gOrvw`7!@eT zK7!dfcE0$@w~8A^cO@6Zcc@=#V#JIOj_!{&PslSqn4KIZm@ubm>j^WvHs<8$$OfX+ zb38pp{k@>uBkq#Vo_CN3HNerJD#a4Ne($wa4)4broi$6<8E3)y0_+C={5O9Zc_HA}#$+ z6U{EW9j~|%afYE%FOHWFr8Lv42!5?vfpU6VOh=}F<1#f=Q!Uj z=xlgGdz3}mFrWx@E12%y-<==A=_TVEJyRLY#b8Wb#GtmK>5jpiK@_Z#B;`XRA&c~# zCMlz=P<6#RlIdiJRilHj(9*>sLm>>dyI9bd!JNZR9xNpF@+1vQT8?7$BXnLm`j430 z*`w(SM#G?{8mEy-=Pc^6&UMn639>wj7(%q$cnq*HN9bss7jFDuwu1CjZ2R0UIFCBx0 zdbE!o<9<(G_R+(bq$?H-`elV7XKB(rU53G4ACC+XyLrM8v709h0K0j@0JWPZ3>3S0 z!r(IJiI|a$+&dF>@R1X&A4GwekB$3k35qhK17SWYC}~)l;cLXjs3K;Bt`y0Z{pE-& zabaPvi@wl3Fq~HVG!MEOsxnv4qjBUAgUcLR&&f^d34Y{k{B)ev#MW- za)eFFXk#It+`v6;lA@sQz?CwzaZsENMWGm5!&Iv;QD&smC!G^VTtQE*PBk%oY#;js zJw-=5vgzSbi4Sw4!^8Ou6XMl-#8E|8Ovxy8i~W3|Z>;fQgY{%F!_efQ)WaT)OPy+C zgLZ{A)h#ykhy7fk%j@T}ex{!>bQLweCV$1yWv%6GQW09cnmVK2pB%`FL6nLGE@DQp zX{@QjjP@m%v?+5VU0@0OQ8&YEEGmkso0N1l8*W0G*3L$SPHf{0xyI$@$SGU2aCC&t zrrv@an(tNkv<tRm3N`yWp7(7}%buu^5xYiUqOY&k|1xM8dI*W6*s{54(c8!1wSzrmg*hy=uSRq|_p=_^fT948>{&hTea)LZh@|I@e03G8ali zlggm3H<8Mw&&n=Bg0 znaJ7-O@V)|Rvdxqu4C8a^ybsV|8pJ?OEBI}B~yrY^HN z#&9r1B)tk*XT%vu$A8&Y>nu7=kR7cc=O~1)gr$KdZCJ;Ubu6q$$Kz3H;`jB4#t6>P z9B3p1;XwAAOA`CK^_)^9gu$EcX@_lqms;+TeLqV4BvdN0?E117iNoxf-bxR@< z#wO0C35V`8b!Z5CtsM;8=wZh=SnMJRX=tzf`t%`#%0liQ&2S3 z@#qFS(zwLFAr8oe6|hFV<9->3C8TVpx!{;szAwd-gN|R46!x7${>9~wCf-2c+P25H z*0endrH5lw)qsKD6S@tN?o8^oWy;=P$QuPR)Iz0|1LKd`E z{2IYPiqlzFo>wUN50poxoCLmv4wl9O-pm1-xB^QoS0$FluaV7p-Yv~E+8a@+46QQ> zv3fQfZb_z55=^wJ)@@+9KDOcr_0_MMG;!suT=gg|DXb#L6%6OHJfiNElCG%Y%0;?L z(kZfTa$+1V9qGzQDaulp+oZnUNXEj}ljV`mS!TsX8?hc0fyXU=l+w~#_^6Xh#hk`S zoh}&@=quQ|vZ>1GT++BbsEG>~O=4PxxCM)b$Ej%+D;gG4)1BPdkau_l*9PQHiXOU? zxogsJ$W#FX;6f^e(psR%#kef-KU~7H#MT5SQ*Y=@M}J~$k6DWT+`&)W3~i1EN+6zX z$th@o76pMgWyvMNc6^R+PuX%RM#?g?$3*3L`Gax=&`!Pb3@z;EIat{mi6Kd)9^;IT z3@7oLB*`64PYkIlQFJC+R4B)N%TdAh@i9(emZ^=aO7SILDKX#%%M-TlT>e1zj z+Z|KE{f?vHY{yY?y5p)i-*MG5!7u7;feF6E=lX*CqyNivvhlZ4sL0DaxNiT$>)EG}-aRX{R3Q9Z*r;QubbS9A};Y0*< zS-RT7`N;#h#)qjp?gwhXp)b!*?jGnx4l>IL{mo^-x0tsN$M*_o+=!&&-4H>{fMeXp zGo0QIp5pRss46ILYD;7#8`l?WbSryhVJm@UVpn-)oKhkt2EpPsM4?( zYxnYM>D>$04r^p7ST&jy${OuxF7=`81Sz65n%oYk5@j2vCK%THYg9<0I=x<%F41sB z)zsx;QsJg$^hu5mevk(9BPY0XH>q-=Vr*CKn80%!{4p}2pTI}&Kek@UftoHLMIS^vUof1te z{Opu!uNkOS%`F}sP23^9d%H*#*t*wok)1>%9W%9pW^kVf)aNPu(E zVR$NG*7WB<=H3TS=;y7CEaIPG6QK+pfBG`dY|gopPr9$X=A)<5~_!awWP* z50lEOZcdRp8S<(X)yp8u`CV0&YH%Rv<0ENwl+Z(kDXD3;bcml4gB(iL=%Xh%C@nAi zqzo%XAF^{-?;O??g_yLoWl?BLCPv5{B#l3a!F?r3h=3yPX+hEo zT2QbeOJ@?3Dlh8=dV@MOH{p@xlnyd%(!IlOmM#qs8U<^x zO(@Gm^wZkqIrAu6C}|{B3L?pQ5h0~B^I~;_*JXb`wK`H!oI0ps{kke#@KsbS1rRf$ zC9m;Xy&C<>$8Ah-88r@TBoN!%oD$oroTOXzCG^8f3D%Cq?UiGR)N)LboX6H8xfmsS zeG_S0ZZ)M*)HAy==lu1Sgr}`#uc9!LhoW&bfuHgt1gImKZX3=J^*u}de zcY7OoXSSo}+8sk%IehP^ZRI)DDbE?&$~80O?TNCxuHf!jq&dZ2w5=AACZf*bgyz(G z(Y9Jdi4~J2Zq-Di+L{Ywr@X+?){nSNe^Nk}O~I6zpD!zI6B-TCLT5sOqiw?00!MS? z@s&b`c$(8}WGso53vok7WesN_lVlztYB>ZcOLCZy=}TpL?orsU%F=hjzK`YcQA=je z2`v_*I}1E4ajYw1+N31%X-lL7#}2wo1Ukr^I(M+>$i9Ov^PUd!F~{*8JYjI%!N5ko zvqfG?OW$RRydWU+3TyZ~;=6~EtBWWdJW{&*ctj8Si4HBoA;U=N4LaB)vK81=TVIh; zT{+Xv@%(5T;~qTegf6mJFjAIs&ZaztoJ|?>^1E}2(}IUr9^sUI*@%W-v7linMc+{K zxVI0F@DN?-yNZ#w8M1=kCYDWWa};cAle>*8Rfx7U3PPbe+}!C%8i`r5NGK5ahs#y=QcSv4v+uJOF=r>O42K93n=ZQL%f%R(<^fK7MtJq z@n-Qdbqsc=Z+7{zE!l^tg6-c8joTJ0#y_6Z7dckFx zN30+2a40$Cky;xccWWs-mTI(A6g*3ME1KNF#?&6p)NE<sUGVf1k}vR##>odVfwXEHoq$0!~dv)mJ8@l>a-Astv7eGManKZv!j8?yH0 z+2NXz4jtm6M3lpL^JRGA#$>X$G^e2^NvgKyi@D4*Hy@7ix)Zi9rEASpPnYP`@fP{9 z>?yb76>M1h%dlMODEUIg$WTmw!qIZXmP80oBv!z59Q&cZQiLf-F~*c7MhPEnicel^ zE#0=$I$oa6cG1SmEotoFlu0o{C=>pdH8bRbMGS7WkEF;^lSt8_d0DTtm(AKp7f-aH zizz0$%oH5FH^NF?9P;#Y#+b#EmUyjH=Fu!OqeI8X_ZRbrJy97`jHPUlaTOB?iO^t- zgq-A{kkp6-tGS({g;@r++Jm*t5Q20#MS@7g3R{w@5+QjyogD1RoHeme>&{pzbdHwj za7?N~WfhWQmCKTvCq1dHq48}eW!z+`wr6FU^bDi>^ZA2i5_L;hOFNpmE_#iY8{Jae zX|hV{LBz7%p%P{;Yt*02#B)+@@Xk_~j!qjj@hceGVF>GrRI8dHA+;LM56R&vc~?K& zbCjhb4ZS=$*26^>)SFgu`Aj(!wSz;T`bKV`;m)7XF3XlGo`=G%I2`!Fm_&BZ(4&Qq z30y__l*UiB0Edr7+>-Gb>g7I!V<*2n-qUfLp7unuTO;adqehgHRHe=Fc1w*Y_}RQl z#=`kA4u{pGWnM5zsah*#%(9o`C-#AZoPw)ilVAE2$s@S}D!usivD|`ef_PG=6|^V8 z16fvW;=!Z_Wtp}w8l$&0G?I44j#=2L27?mIf5?+p8mGE-xs)Wapt0LYGT9riPkW~pU2dqkX z#T6-Xw5lYb$Er$%;{_fdE{cE~Ge$WWRg%l`Sl>dMg$1)YHge^}U%OcBON+DeF~m}Y z`pKW7DPueti>C0NGpm-Tet!(j!R2|$4B-ipHyU3#TH8gH_(=m@Ddj8AMD`GBl##p;8oNu{dPb=T*b?) zcjniy!hf)onWC;sTuLLxp1&4cc@CV4+Hw&Y)ZCd1(dpQOuqc79$ey*Xnu6H6YA9=6 zQ`0nL4k=OWjB$yCT$PQD1GEVelgl5WV&W=2c7cil+ChaZvJeljRYaBeAAhox7Cvx} zY)j_pDM>s=&X;9}RlhjVM!k$XCz6zu@%nu4L?7R8vtFL;kMSIQ!iz#uLL;sZJuDHx zUnYok7?a5HnU*PFFJQsDIh)O~h=xUZZ%&)CkF+=0gFu|#<&-cw@B+H*uLrVniKe!B zDMZ7wPq`Q>{G|lD+Z=1~_;M5w2+MMwy%H_>b!dtOnC85ou4^O;mK8gIFWUh^!46eZ zOg<=P$ByLPZaBD@8zNTe*IY}_KD7l604IYr8Qy0fi)NGbN-L zQIPx5cfezEA#CJ3Gexp5(?HghnPlj)mBk*w(cdq}?`8#38r%*q!yX{&CY7_Ld?`oS zH^U>r2_46ABOTgz^g;K8Ljt4l_Ot0h(_Q1!_n1`&h9Vj%ZUM<6P^J*teg~@#~k0DSmsnIH)#@tC$yazw=maj zR%+cqC2IxC^ulZ1s>x8-PL6T}Si+V;R+>;86uD>HkcmYBFBc>5nIvq^%`m}ACG`UM zC_~50M=1&AGtnEqKBh$|!85*tgYgkIcM_U#t15hU?REX~N|ewlJG*>{AX=wO~I3fTM85*BTHW=@k-kaqE0cVbpU z)eCpi*{&1EYqMU%j?(#wvNn2GR z$?soWYjACQ}K#h_vRDqsClH4PHn?SEC;$EpS~QFCV0?qf-j5QS%Z9&|RUe*D_io`VVN9+=NJNq%`A;UnwaxZ4=P_aT z-tj6^KeQF*lvTYcT9h}Yjj^`N0R3|{d{guQLa~5LK-ZV-1HU*FB1d*)brIjhM9s{Y z!{Xp5^!m~FLAP!r>3fi3hrO&RnPLxpw%uzR7ljDmOjEB1j8Yp8$ESDkEV9-~k!>u1 zm`2r(#E#GuP&dQ5^yr%fo`y?fx{J~XM_{2@K8>8%`8qyKAYVxL*ag3(s>zSLER5vk zt;?x|C>_blc%oggGES2>KU0dVddmZY)OcBgH{>%RDWfO`uPpiJgp%kr^xDiQpgI@x{H*HCPRIsEG@mV7-Z#NrfswRd32Ah&R!F5=yWjGEtu4j zeJr4k(0JM&Ln5Ly$$$hK9Q{Iyd{p#5Gwz0b;?(6X2Q(FRSvEY9Zx*MKidiGs|4Hl% zSZ}pr5m%NRCCJWCu0(fha`ZHOj5Q}%g~$oAnU-VaD||V&h}3$s2QD-LkwEJIuKa4M6ecIkc{ zb02x9Ku$TP6k$UX*$m#>VoF49yDRN(L2h5$*9tLgW+i5*J`99V&vZ*ECpMcxIZfuL z_@+`$fX4Tf(XJwC{BR|om-J~W#@oWTJ325+0O*+6m<+j}|b+I+khwk@ayYfTzml8`VP z(WFqR@#SXV!QjMR3%3{()e^APixfYRg-EQ5>z7Po>P_3WJdkx6q9N~7x9bI%b|%v1 z8*&MP0c^lkZF-=`zQXh=v5Gm$`*0Y2?wuSSo~8zPu6CU9w~Q6F$XG(I%W{nlASWMv zk*Rz2XivI_#0ClAN)NcnrJ_->hVYCz9VC+(`z>Qr{?3c5Di*(yMNj*=GObK{A}X>; zc9*y${~{C0i)~`1sR>0(ZiJLd!M;2~Iguxuu;dut61ptOmxSEZqrV!Iw6xQ<#pMKM zc0`Ezv9fDgI8wL!RJaNkely#2izi2;k&3x(&4GTW`m(sj z5H_r)1FX6>Y=&@btX{G8F@&*Yrik5f#k5SVyGw=Tk1T4U+~p2PIKnZ!awOCO7+cB@ zPtlf318+XiFy_1R=}OFzN!%H{6ieo>BH zPL6F`wLp~h!CVAbtr;0bOJ33FQ1FT*D|bcO=%m(T$#7H4O=g7cd>8Q2btULnf(s=? z7%h5^8WLHh(~9tbX-3yfl*Ps}#a0?KqEvDHE^00pNHU?RNYyA(Y;zgSFqWp2EUS}7 zK^4Ub(n^HW<=%8DpDid9u8`~0|I44cF;A3eD7KL$nzoQ7LTn$4ME08{V!P)o(Iw9= z6$#-K>CMYhFm9k`qQTPNY^zcsY0ui^*65HF>kVCOBh?d1u?z?&j;>@aS?pcXh#PvB zlT?BH(JjD&1}z#jX8_NBq#)YvNm6o_wq+@Cqr;;S8_c4-+7=qll&&F7nlvW`nl$Mp zH10E%(5&A@qBXQ7Ijh+vQmef!k)_40;Kk`BntG#>-d5vU&>FHa7d<@DJ7D%O5F6ow z0&8oF6lrZs1lt(eD-vZZQWlP77b_LEq67aRyE8d@_#{ZwciOkUJu2lSvUF4X%Id>XTu3ZbG% zbT>U5W2YK4q}8up0kpJsm4Q$wyEv>+ljV0lX9JtqxH}rhZ-@96P3%`nwAeD1h+)T7 zo_`jlAC_^vOr%5bQb|G%0qmA3aHjOx=q#K%`|ebR4})N@486(q@oao=vKQpkB4bTd zVAQ>Z(c$#o$^2yLwFKMk*mUGVH?MPg(|l)MS0FP;j@m;m_$bJMH`|xk^uf8uGRMi? z`TjoI!inTVt zOvSBFtkZg0h_hI_)X)0|V|*#eONmB3_7V2figc;uI2ED`!8o>~MbzmDIT`ZMF8$n> z55tw%5EC4S>y5qaYFNl)uL&Lc^mS2jva65vxrlH;7AHujIH@YPkZVOl^)Dt_Z4AoG z9?ybr^KtJHGD|YNFboyF`xngXkXW88~&_((H4e1avDI@P@bT)R2g>!6)<&^iSVIwU{V5#z@)Io->c z=<5(NA9KFZ276Q`?@u4qi88do8=APKDP>cy+&Jx)Z(v02_E8(r+PMNlsP(#96N)k> zVJ-r(&)BMIuxhY-c;uyl3fulptKbXG1&u(%H_4j3NG!DHW?|isl%ZVWQg`{J7!}J^ zy4&UwWK_BMRHhuyqm9J_iQEIQ)Fs$B<5 z=(suDvuBWAre@3q8 zZC%C16ul92L&w@lSU0a4%*%MH&bTouPw+e8Q#lFls*bVRj9VCx$?PIK7SIKgfri;!CGhIAOkzEryp9iI4?9 z&dl@%UXz0wM4KfKz)AkMMVdf(mGQ+(I2MEZdr>+(RW&}Ej^zCV8Jk7%&AmOAQ`ze69UPXX#ftRF2ua8)6py}yLOPdx=sa5T;#(J3gG6b92RHTObR3xEX zhR;%!^)~gYC~Y&tB25a1&v{xqUHsXP+Yo>0hf`z0h?tn3h$--Bs=64W@m)+I30)lR z=A(;G6WqlhBPV3(4W?Tc)Vl;id-84a%mr$uZuQ}pZTfNRkaac`Jq>*rXBZKYVWf9R zLPCyIX~NOmjStWl*U+J+g(-Oy)VE0*J*b^c;I=#mg*ZnqVI=V2mTr_ZCTuU|^J9AQ z(oDR3g28Llyt%Wrz1;+P64iKbV;gwOPIS(7^At}%<6EHZY>KK{%rD7DXCh&Hc?aj% zny{P#x-mb-`;6g`m>wRo7=_kwqWW**UUY1YjLFaqAEZirXv;d#t&G}UZr;VvZ5(>n zG!~peXxwQL>A8f)Vu_^1WYH#q){un*-6kocfo&P{Hu}N#(#aH4S3O{Ed~y!R`Kv9# z&2X_oj!apD8B@`wCs8TEjI9b9z45i}z5|~|1Pj3=MO>bD8*RxOiH+3dDK@=Wg3yoQ z>BMl6K1GI5!#SJdqgz~ti>!*(CMiWprEg)5r%egVm82dGt9dnHYfVPCG1fl4gYQMQ zjuW7bz~}n}DIJUSq+mN*T+!K#1+Go-@ec9*odwD_Y{A!@(4B|q8a&=aLIhPZ);jS~ zLwum?KJFeBq#PB7g=VCcDtJ@R!bVi)1^HOUPkxHrJh_hJY{=!4qs{P|^BkKAEvzQ{ z6@5l)epk-5&v(%{nB490!|RN^K$B8}1?{37d|W3=W7Zh4NyD6`n_AFDMGK5pw7_U( z3yi21SSoLwhO}LoNs-5PN9G50QV+SyS1J#NqPdbmWGLI*=4iQ2+RuvXqD0Yok=kQV zH4D{Tv&0-K#^9mVabr>JIHc|IBr&1!SSXK;gJPKeh=^A5Eop&dDKS1XJcQa=jVRCy z?crGz){GE}wnn9C0gLp;AXkv|Rm_kZ*nB~?z`Jx7N2~Kz$3+)~mZnwQ^pP^Ol_F{S zRU%lGu{T`m-(p^y8f8#Vw4!Ut`?`vz5^n_~Kijnd(*x{l>a`TC;^QP}sw);Ncv;if zrr*VQ1(yr)B|D=2Hw*|GUfGP0 z2ZV7}Cdj7(GQLeQm!*@y1_#dRB&xTtC?e;H8zgEM<4cfEr*!lsoxtZh!<*YJ`_1au z{Wd8hMf&kS`bisFF6JB|XebJmXxjak2=`?KSt7ItttC2E$reRH>HP}=!mnR&=^%PR zS?E_)D$IdRsyyY<<1;CPhC)AHBG{f#iG)}WOV;X=nOXd@#?!>IOBqsDaXeBQpEhoPG5;8LSy67Zp(~R_NM7X$=Lp+8T63h2 z1`;e-ZGbj11`)fNAjq&Z7SPhzYZK8{hu^X7kdxCE>*eWkcf8n33>Q|M(~`z%L8W{odx8NR-lFr0 zWe>ZE)K70$1luJ}H|t~*InyF}jt#&glFQRWESRH>fLT?Cmza23(kl#$s~)S)FdJ%;%ZGTZ z@h;BRVL0mL3&lHD_>4K+e8T!aUg;^i5ntB89R{>KJ{lq5yQC!&N=C+x^&_~oZiuxr z1v$Ffj(&JMn!KnvD{-ivGRa~|SgZ}Ha5iV#y(N|Q!`@Eu+~RHA$?$00Gbt23yYtXy z#s)Qx#bNFuuLmS*n*OF(`@_Y)wko|~SnOc~Mf%vk_3;}ztczX!1n;=vrt&f@!&PY3 ztI0{Aa4jB9om>SRrdA&Hsvc;P{zRoV^<0!^YUHrT8)E?W z8piQtUW$SyC2|Tz2W6^vswaI@77aBXO2h*#j6({9W-L-5CIgNFUHq3?(sH{FXj5vi z1u0NpmS~}ne!o5esIyKy1b8A{hs}YpWP+(^MDEz7D>ywRh@WL@k`cBsB$B1o7we>) zg5n@Dnqg@?qV7_dA1@~##Z)~0Zn8rqJT+uUk)&QNQi6B>m$%Adsvar`t99))84{!f z^S6z^f<)t)5T*;G%H&=)RmeNuQ6E(7NNKo)rQFueu!b~KO9YO&3o`190$#_X1$->C z1zNkv7RX`NQzD4hqYrL}PMfLsBgQ+D?$BZsROx7~Be_cNN`o@!ShJuV{ihtzEKo46 zk$1`p6gXHODl1SB)nN(GF;a=v%&!Xy<){r@sShL+$f5Nr5W+0CK#&2h4Dj?j76rOG zO9mA+n)Q1%GJ2Y&?B9Ra*J!Phm{7iPVnOyzw{4(~;3Y94Hp)^`gcStY=)wnv zo&qKfYVKev5ec0N_u&~VAW}yX+48~ks714=wNP%2vF0ZgQ;fNe5!e1S?9D1dXEli` z9n#&Du9@dJ%z zH8o{eQ{R&*r+S5&8P;Ym+`(6RNK+aeP8=f-c{Bz$TJ&9}7CZKE6GJ2ryNa9=nnv)% zlBWW@V;tzpxl#AV*t4A%NGRqtQqvUW@yH>of;K%Zk;gA>XpTkMxaX=*NKHB2M$1!f z1oW_JBot`fFi(sydTz53GOK0kILG7x9}>Y1Wui++b}XqxIJ}D~M@~S#!2c=!P>+q; zIzSS~bao%R6S%cfsx6U-*B}Zpp-b(|>b#~IbA&LP8KHVed!(-LErPL-oGKP`N8zATfxt6-1(IyR zq-dL`>9ZY)7bN{n6P%DJQ!$-n$$MQt!;Efvk0y_RSf4Y@MGnaXk+WzLmQRB54EvAU2o@U#(wEZp<)JjtlHdCC^+@h9B%DO2&X}AO!&E5hm(qy5%NRY+$BB6%InqgTWJQ!Hi z#fKMVg|w5QyKqrWcOfHJPhlflp{=3Y@)Eln81G z0NE~jmRM9bM*8@NMTw(@pUEp7t$kPt$@)fJuz+C2G$g1ZSfr@EpoqP7IdqJ5V$oFU zZI*4agajAl>F4xY?^>jV080zFp*uT4_qD*S?cDPiXO?FOGWHwEuxffYYj%|u=1{51 z`&eVtC{wg%kd2e_TnLI}{Q>WAEb#F}yiJTClo(8XWZx3) zX$Q4Pf)})DkneyO89IDxaobxTNwSPoYA=nHHLz&e@PQn8Pgb{J6Lpq6^d*o^&BWan zyomzgqtgYRzfZ)l41Y5$%O%P99+wAC)m1&uHf}dwu@EnJjM54grm9*jz~*BVyWQ zIU_I@(WivMnYu(onw_rhTvt$4=TAMr8F2e@L-UbrB9INTVaecCxzUZh+rkT_xOOHr z9)~sL(}uw#a+OB%R<>ry&`3MUmfo->;#FBVq+J$F;TyTKlEq2J2eQAVi=*w+`Jmnp4rn%nK;nvltP8|!0GG-^;1S~#fkS| zurp-w=<8NHddGPaSDNL-S3|>{Ph`WZcdmX=>%=}@&Toji%cO!yZp!APJVH$UVJC8X zcI!aC>Do$#ZUc(msok;G%N`UH?YxoM#(fCc0Yfj3kH=XWTgugwTRShT!1Lk?Jnw58 zj?KwEeD+<+YbJWKyL{nbdUwRKQOS(m<%=tEy)Wl#B~r?M+px{0c&Fuie3xcx=Y5%x zcwPr~zAs}`eNE1Z4_`wkuL(`jSM@_QA8th+J{%Kn1)sR;Yhiua%3jw%JC+Np4$bsX zAaf45eu_H{jSno^%kj2SyQ~B&lVry9)NC9tA0o+8rHgWzVWUla_&NBlCNT(K-7)i9MG++-w3PZ@L{mgZK?F4Tw}gg+Tjdw|&zc+&+R2v&q z=8dW}rmivsU+1a=zNIzR!PLjOt7O=g_I|)z3ul%ZBV|zG+Cy!E94@2;S^j~RDGf6A zramv4a$pTxRK7ivPo`JfioK9|x@4qJcHJM(_6~3>>mfGe;pRqhQykm2#WLDPMuR`t zk~hQfu@hN;;W?wsu<>$tI>m%Wnx-;Qy0(+!{SVfd*p>G1Xh+(^qupp1kBpweOK0Y{ zYJ#PQjfsX=agdQ?q-G3=%}04t%ja&AqR_zPg&j;yk~)~0G?A$(r7<@@*eZTW^VIN0 z```OwwOFTx@Mkh)P=AWgd=F@4EM)7IP&pc9-PG8C2e~Y>ENeS;<1)47Z5H|F(i1B&c(zsx z!2%O(h^<4D!eFC~k9^^^FiX4CwWQWodi|i&kHpf^Lt{bkvGh`SX*??u(zya}rC6Vq z#gkXwP{(CYmbYw`_gePUE)3|dBc80+=`mmu23~JW*g{#8$lwyj(cm|i zhRd?{4z6=94=`(|kWX_f1sQJ>K_q21<9_1FV#1G3wH=}|G8;nHOb^EgGM2%ksgpbN zkf+`fT^!By%S)Ym_EARk_*i>}3VC--+ox9E_~;l-lZfCwv!-q7wtmt04$cZM5ykRl zd|~cLM(o}~CFqG5+CN&I6K+!BtJ9{J?KC#;> ztg@(vC*a!ta={(>;Gv8u^X0baL;c!NnTL+-W>If;v#3j3EKNeU?76Kh4{dm$8yWb( zY9=8ksw77MA6088gd= zF&dk1w;mR2tNepiHHkQ8QsFLg7HMlGDp%E7fGQC+Q)JrJG88e%Ese(V&F}^EEMm)^ z*4nC-o*icLp&a`l>0reTBJKTZV`qbHM6kj zie(4n?Jh=>c;vq&e0!oFtj`>Rsg5pQwxZFmh59J86u0!<8ZU4jLhc=U&RD}x9x5!X zV4WOVzdAWICmW6?3Ab-mqmI@s8bO}|n%B*u_I0zUfi0Gng*!zrFM^xBL18gH)G=&v zdva5#Yy$gg_}o>7k2CI88*3s8P$FxTSoX?FlYyMK&%$B8KH5bg&XPbDE5X`EwM?;( zb<2IsRvEN4&{}k@<=7evZ<^HTs2z1%^;~vMvMZ6gYEcu!E?_(1+j6e9DL1;Y5T8kC z@`5*IU$wTvb|$dpxH!f#Y@;9$WN8(dEh8Q1z)N=e;fO$+?3t3lkawYGxugQ)Gwj6U zv_T~`%5%KHvv@e1)5)ZxC7AN+jqRh0 z*(?b8h~i8#On%GNG+~nC3|TfN9N}1E#v}G37BeXn?;fU#CYJqu4DscRO_;#ebVY_y z_pG|%>xs5u%odw78_K3)i$Ok;l5uOEHR|ix7RM*zf+a5c?cUFnH9Xat6Ir@Teb~>f z$Al^xYF8&qs5^C*XpB~#FlqF~HE9g0EKOCfvNRRB%o2?Wo+&fYnjW4o1nf>#tJx^W z6%7(S^}JS7GIC;QiQ1T0qBh25RNTSAomo2ql2NT~8oeNOAIl--wro5*gl@M_;V#Rav@e^D2yL?kbFGX)j}H zWVdA{YGY1`+Srg$(}=4*thPoW73D#XWnec;V@ElnXiS)Ft&&$OafY(hn+eGOP_BA8 zouQdmS&}M~##r1nqLOsWj*RRgFS|0epvu$sOf6$uwp8?3lhDlS@a4;nS%n-x#`2<^ zDzu+j8e>x`#)}1nyv<=fG zd4t4jB^fQYJU3D!BS~no4y$yWq_vAYUV|PY-H;|pxH#KC_ZXKr?JFc)VPYQo*!;N;N}b|>(3 zT|UjCdBwp4i5*K_<{b<@aJsr?-GO{fuuj$6rBzv(A?E{PnpPRsFi*SfT6EgA=!v=C zD_Yrl9gHali!Q{|pWQ-x}Wv1jsGFI4DO;CT5 z%Z(Lu%GHZvGYwj`4Fj#*Fl?S2&u^T_vpeN8)7Z$`38h`G-(+dLD@QGA3#*9qaJ(oj zv0PX5HhS6m7QN#sZqbJ!U@exAL%0}L7zxNpJEicGFTO;;_)v!Q6K$S~*Ld-|L(q^p zCFqsA8aM}m-R+E_aVmBYY6e^tyXE#ybW_mKho@N$ST8hFCS>+ zb`?v8ICzS2)V)G)HAbOB3oeBYog!Ak^~_^t1vW~&3yMiC@O6%lV~aYH&k<$OnkVII zu3lb}T^{dU&0@)6L{#5dNx6#I7y1w==~kq(9&!~GmCBT~srmwNX1}FJBbB`ypT0KT zuEBM&;If!zWTq!3&njC-rD#~S-Y)*?TjV{#S8eQeM_MTzHnfo2%h#I4n*@Ii2TJZ@ zXYxUNf9}rwjtqXuN3bJ99hFbXmtnEy}jsO^|a}83i&0<{VY@i+-L?2RBJv*JSXh=}*wFN(b!G zcjgszQOTXTqOYFdtWQg~xjaX!?i_s;v$hF7f|+XBUT$HO;_^jM+xKSkMV`z}89)BQ z+ok-x7VgZ-?LYgurRTL;B;BXIjeE6rzcya?)2qQF-n#Wv3&(BM8XYs`MW&j>(-4UooX9SXT zRNkgQLFLqTzf48j(?RV@anLSpU?pN9X=7WCS@WkUVz>@jDn-%};$l0VmB&8eGK)z@ z0H!{p;Q(4~p-}YW-J|d$d`03lR1FxMn-quc_C8*gdRfb( z(V?`+ptN8j%26$C!TIt~Ql?(Z5qjSW1#jupC|GhUYqJ-(%0xV1QW3+OSrv+GqnEYG z%1@c1?_`xp_7ql`XwNd0iS`~-nTVCBiY@X2Q(2};z-X=_64pq|>ZbK9)=yIEp$`&;f#`3Sy3nB#+6M^>I zk`ZR%ZME7PV-W%5|ly}5JJE_{xebCCV9&ycaMykCy59m@C{#Rz#VNeN%M9bI{Z zm#Xl@kE9IbofA|x{dE;5kR`#mNUY(_<>_qKBe&$uCUV?H8I#mP4NgzXE2HvrQ{N8? zKTqzpL$g^cgc9G1#sZkd(d=M^oSbjiV(7L!QKR@f;*Ah1Mo9Y8K6EJ9@KX*>D&^&a z`CS~W6v~bHOwY_|KzyPQKuUF+IVEcV-e0X| zAD5U|ey`}|%2zPH!R2CAf)S{_s3Q`x-764ZhxLZu} zs*Nz|nvulXqJtIwL=_MGCc1=x?Syd3H=~5*8x=~N{>p->ieOBpT_WFCPp)&-6mgVF3J{52_r6-5>m^Bfz*z|K$b#bAPF!l z_oQV7g@jT;A+1LCYL2c-eiqv}H zWXxJPzgWjfG0_IRQy+no0{606y7p(deU;25v>3?d}wt75`WdD zniT;h`7Bn&vK_Y zpIu@=*dojLOq(s)SU}R|QF6uc zViqh9cOHyc5nynrX_FGWJeFC|BIs1j)zGrtlJ!s9FAuI@O3aRw594Lb;0)KnVYg9( z##F^sK!ZJd@**zC+dBf|V;awQ|+~~HySK^SFDw;=aHAX>L zYPx<`(2SxIJfvfo{opJNXmMpoUI$-b4G6@<N*VpHP zQ;Keaq^MehT`vygbjIcSiaQYmSyGhx0R-V5dGB%L-0O`}pKu=)x%=6XHJt46mKaDCoWQwr6Vu0At7a-L?IXd-uxII z(Jt-(c*n-w18l`(K8{r}jNZapS)3LZiE(ONr0Qm1h4S!HN@(BZ%PEz3M5qu+K>HXz zhOZiOj-SRLlu8UjD#Q@bdYxIG&w<-Q7n15V588A;rHPG2f~YPMyxUBNm7-ZwEEGkQ470T?iMv;f(Dl`o4DimoA$MTGCIXbzeT%m-{sX|37se9aI zS$V*^MtNOUqsqhy`tus;(PXzmLPLiY^a>H9#11<{6J5(B9EIqR)q@h{blk^j_%dZ$ zOFAyW;bEtW5ayvW(Zng}8UyyGwXD_{&}Uaja@MM>RlBH~Z*XO!B8Km}S15%_&Z;!W z3R>9;St~75WNWoT!EC>#PtSXl#qfL+cBjiU3`9E0!V(W9px3L2V%fV)(XSwuNvM~h zXR45GIBZWo8u&@L9Mrd=#r zyE++S73=0=J?r8M^`^vus)5bETE#(mE(x)USPAT8!E%n2i0}P$*_M{Pd3kay+b=sP zyt>h#$Q?ZBic!(-{cYKjlQtJCPGol!BizA@1LM8rHWu9RwO{PI?p@lI%*Pn!o_u&k zxBg_yLDdMGNklf=9Rzno9pfIsNDz!(CMRAFABVu_Z%>ua)Nk&}XWS;&=DYI1k;Z6m zkSL0V?Jef`m=V;cVj%(|P0%AtDZo+8u*2Clc?auHc%n`QxYz-r)*b9-c$Ik2VnHMm z9Hehgb|=^s759xc_x5h#BsUfwb=wS>>+n(wCA%t;tq{UDi?AGWO)t#>iEMR9SxD54 z9mBsqF{SD=`Ll(|B8_GkClJhIg1M?Y^By6m6g&>Qv9etqvsXqQGUmgkI*wKyW3jkZ zYHpogzN4h8uin_Yvwic%=*o>dx4#j8H($DT<#JTA7Zk{lTV}j?3sUyxnZvcz`^J?lCjDCV$l{Z0TTxx0XmSJ}(iExIhKUtnJ6{&RX&{#{uv9F2 z=J=d=qZX$n^m*3EY?{WhyE>My;Di-6>QVzF8g)sOI+@{q)C2kUSU7h|_Lf~Iv%A{0 zkreIJPnH$M9$sHDOe{alHr@H6-g4CqViIh zW=T`Vh(a?%@4#f^(Jy9@3C;WXpe+^7QAEu3$>JW43FxBQB7AM$Vi2!}oey#Nhr%Ab z_J~rFwPlfqA%!gxnPvK%Oe|b5F%yx~60y{k7-D0&BWDTXF#=6jgSs(4#%YiyQ*XSmYpQaFWZ-rWkeKoj4SMyJ(pU* z%RI7x#>+=iPg<(ALzBHP#s%`04WMrx$&*VMAMHN4vcDfTG+Uyj2=p%YXt|5chZ0$L zy9#z;uNTXDPD+=e$Fo^U5e`#e!=|9=_32Vn$s%5rs;kWnRaO-bWfh=7*{_A1F2u^N zc&#DIy6lUx#M;715KH!Q=%ZnbT4YBD4^Lu9Rv<31j2pj{SD>p2+AEc$r%QZz&L%Sj zVd+fDj#3Yf<|UnSQl&<~uyI z94OWl47<=H;%r$#OxA@<_^`&?P5u8X`<@remnE-T^Kc$-oEdea;)pI>xV8IU@3@ox zQPsD2{fn;dcON1gPMsfB=T+4?=bax_U3WKwxDi~dh#)vy5e8I7n3bUZ18x*l6p?YK z3k5fRJ`s`m%^#6@PD9gmz7dg;k&(Y6BO@DHj3(f%#~Ai2EoiUM8G1*ewP}G1bJ8hb@r)*}Rv6V~1+G!Mo=e4zZ1x-;Qy)aL664adI=oAeSyE z1|Y6j+}`}dUxQ7STe%4?|L}^5u*av}6B3kSFlN&J$W5arc&%YUnYWM!cPN@hX(xz; zXDe)g=@_i(e!9ei=BMFZyFhi05M#6;o-bj~WL@K`x9FY?-*S*2*hSvV76X+4V`dH; z$qMBP`G@a{d-W#mhs+E_f?0`nQ;m9$gwm2*p zKb#EE&{%>u7810CSD~A$lx6hiihwJr7W?=N?;7J`l`>+@m#!2p)YCcX%S^-=LSmG`cc%YO(rDRDEB_E|J0Ab6%>h9UjN0LQa_{dj@6^P3YD z6$T@;cP4ouhcu`0tuq6I6D)g@*}z-OZ80Y{=6DzL-2~?=a1t@%S2&eTGZP!L8BgLmB4f{0V8?=$|ZMef2@k41;s+vMiXOQcw*$&A#3J>K8fS`(N#FLD? z^#G9aiW2D%{zCkvN)0OhX9I!C@_amfW?NUw@$Kr(3~vPRYCkm(6*CQfE>|?Op23jE zCYjY>pD3ubMdjo)fX>B=AXR)3{2`)b36ditzSc=ICNuz9TNOatUb>5xFk7~ zdjK$S8jHCA>4~OTbvrGIPf9X9K$_#eCs=O($B%h80g+PQOGs4=0~}t#^xl3xp~fS@ zh_8u$gmNMzUcAd88R5^y%H25GXGS6f!V8Ye(Trbnc zHWq2wOA;PBoU|q6(L<&?FTIn^1s9|T_^Km8Dx9RsxitzdV)qMAl0t`iam6YIinrU5 z+7Ld;F{YF+l=$r`R-)zgcJ+P*+c%aE>a@VxqtifARB6F5aLC*+XqMkgJBv%88k0{} zqXTq{8^p5m89=atFnHfi_OBIq3sVKg`T;KCC*mQC&bA5KxFM4Sh}4&R96_Wo7)V5L zya_NcHwau53uodQJo-R%$x@p?{ ziTJ&K+$^rHcY)wN+ym#BXMV#7euh{9sJ4G3A&_(|j+-3){0^I(Z2|imaMYBo5U$0l zL$LmN6R(vUICTj@TQO+r6_P^9Qd~s_ptPcx@YQUmS-ix;4kMNEd!dRP0HhmVEhf0x z%=;mcFu*^KWpif9&laEe>(kG01E4Bw1WrW&+KxTh1!Ah@v`iF{&!$rq)Zwdp8lPxEbS=`W>K9kYaLH4ErFrnth&a}DwAAR(;^CC0kshuJbyRZJ}HdoBb+$?9Y!uKZT! zZ&%Od5G=~8j1>8Lc0aRY=s|W&psQQ>t5CHm^lk;93MtPZ&<`h3eZ_Z>2hDypwst`% z&-cJ+Adu#Swa;QlyGRsOueAiQW{t{%k$|FDMMN-JqT;MIBR1h2Pi{iOoPf%pEooZ7 z$Lhnyiz+t-YNPK-c_`Mi)>Md5ndb%@wxQRU0LNE}LPcD2;JQ@*gCgGr^)~dFDoemo3I@i9&DDqO9u#R7x1uoWcsGf@ZC%UBU z_3e(!f96IWk#e`!a6gsZFyGz#xZ-B;1i^O+$Ds0n?v1^63Yg>4CAZO8Vx2jhP23g5wDgeiKYItZ`Rtk-(;Yw6p{)p zr__zYH56jP!9*HOaq{7SIVU?{Qm1V=a3OgLhgAz6E7H9G)30z*{T!3n^k;G|i>aAW z_R(m$=^oqVB|W@DcTPy-jtp@G5(Xqn0g+5R)My+DK5yt15%y+=a0)b#>F7Y;Wo>d9 z2qu;n;j}p=)m9l%SsCOmD7O!=^<@aSbl%-)!D_hf&T6=vM%G|Ca4f-UwEeSC@Vg5( ztlbK+9fyzGKW~_&1nZwG>V9jV|KdkLb2UABx8A`o8&Be`XS4P7N<7+7wKsZrl|p6t z2`7Yv5aYuw?(w2sBtTA|W4IP4AjH7hEwL!TSw0P~7_$;2pBov8N=C4@3lR?dGnPUk z2j|;9jUA@9sjy`(g@dQtBQEHd;Nhe$k@Z1dpR9?u<2jti<$Z~STA&EWxLd5@bx!d!Ll)Jv3vXh755A=)W;*(_DL+d z3#@--0)>Wb&{@!|q(A?g6Y+}t4(~d?T{phTMemBRmf)zh9~IH=O-Zz-wTkr0oLHjkniN zzxf?n0^jK74us!pK)kI&&{sxy&KkuDS4aSWp%-SSC65d+AmI2dJ@AsfzY?E*9wCDC zJ^km`coq(xnva;+kvB{vavn?WXJedY!m^7)tDFc6J`9e~4d%T90}#%r!(l~@M1T?W znJi1P;Y&>pc#HT9D-Vu3l=8>Y%Vs$#pvX^08Vnl1Tyu+hmi9q2nHeh&^ZU>0zW6i{H`0_>~v*D4}B z)lgFcV&=^>GjvY5 z^ua#nG??#D+aCNaEI}SzSzD?!A4w1kIx@A$H4vG2VqHr!0AU0`?y_lqT5?T5y+tZC zg+&JV09O|2{*eTXK3*@jiBu>-#J;eIh!JqQ6o1>HMdr1HCjqQ#6DDSXPMYyfJB)P7 zD{KX6*85%h27TBsN6(gz+}oXg4wqL5Oa>mfV60Qr1uYq~JPGDM9VL+|!=1rT4qa9G zC#>Er?OawSn}Ja02uxz_6fR1|O0(2!bL+>6%r==c7+K+5B#ztSi<2gUyrY;%g~$s? zooK;z3y~>Awt@i?RZ)~NxW8d+nK4k5Gz${Hv=~jPJhIRS5uI4+x3bZTm)I@8f0Pr) z%?RhI+~}(~wgpOAut;~ZQ_2&tTye(~E~jK%F!#LBqZS1ZEh7U%l+nfGo!lBM)93K4 z8s0zqaB=!!boTn$tBVXVgDx~8L0Sw#ZPlBXL$j>(!Qu@-tujeSM5rUe6XSvhxFdP$yccEwJvlIZyFYQ)*>_r$Q z`=aG|neB`4o$ZV8eLG|v_dh(d$j!_AKUGGWIGMmm^F^fGlQYD{J=pv~9gD3uym zVV!UxQ^gB8t%{u1kC?!B$bU7TBCwxNPMf(nX(i}4D|jTY@Qzf)5UWPTq}+1yieXqF zNkL_ML75_ht2_COQU^JtMSnNGou9(9tya4>0X`EoG~kK{o7fpFmBAyaB8XkJ!h}AH zy8HWL|GV@O0{XsJ;%-KR&Niq z6YJVG1O;!?!N7oU^&TFYfkRzGMR{o+FdmBAk;f+%_&Ck1$Jjmj5-BIUhtAJKMLvJh8_zmPG^-eq%JDNf(G+t4Te{Z9xBj5pyY<}LX4e~nEQc}0J`rJfCFEw$KoJF zH*;7Vpa73)r}lt`b3OI$iPu6Q)d3}g0`^+m6L%!`5pv=~l&8z->~fDc&S_iU!roXn z3FHS;wS^5rZ`Qa$PUc5Yk=K})UNPs6*!}A4I5r<3NxCoMl1QtUYc#1$q6u{5qGOuc z8669!eG-Dvk#^Tmh4x@o1y2v_91QB!}$SnepW^CzV9(m!_1a76E0<`wLt? zVP7ii9IP|2Afdc~=*M5i?hzk%7{l?-9|EGC>{bu3T*>KaKoI_~)dc_xTA0kRTA))P z3{lvYBjs*2h0J^n87Q1p^9BSRa(M|2l?6T^!T>PZtwxxB=|GUAQ+dV=9;^;6+A4-5 z`nZ8c*+&3Wv_^~x;%W@e%8#5iLCRTYb)3G#0H8i|--;sxC>a4)WWW!|&PJxtXlx1J z@(95H{S`?#y#jQ~ax($Gpb7SKeOXPgRL044x1w*x_UUE#`CLyB4e?yIcY$g;kS&Iv z@GAMM^dSix(%&5IfBq^}Z;Nod z8u)B_&uGI_S^I5Hw4O1UhtUnXx4Or;f zNcYPdUT()wge?Xv%yKj%SBg;@H3~~+#}|bjfoO0lv0Eq;U)y`6M1Eod^K}R83v--2 z`$B=(a_DdwbMo{6R|9Ozua*+CVYj-0DX&2WUj;<9u@@6O8cxs5>k6ZjhY!zfK(4#7 z#7`VXi*5pJQ}$b!^bnDF#w|PU_v-C$FBimOG~AKqEDaONlre4L9dg3e24Xqh z@)9McP&yQ9iF7thNaX~`VgfjcWd)TbKBeP{<%7g%pCh~vlYcy>2Oit~O+JtTRuH<5;n%HfwVBfc^fq}=_ETK(BaEt) z4I!I90n}9ncs1kQHMA0(;M~8(9ZCcr$TVXOCTx_g;iQsVtH>#Si!Jk99pz*}h{y}G zDgAzNZ}5N9u~ipdP#ug=y3{(+KWL>9o1r5V%?SQ?gCo$85C;S5(-yWLF%4B=IC(0H z>ry2ZqqL$1VAxNyr!X$G(S|OXfU=7&JRG4%i;<_7Tn1>GVt|@I7HqEr%p8CkFbk*@ zb7SR#v;?!{4)_Biha#}{>x&^fQbMBTgL#GJDNq0ASt77!>!|xnd1@Wf~svTll?A5M2#Z z5ta}X&c(?^or*v@uZ)aCB5`*%*;2{q!JEmyF!M>0Ap%@3Hvj4bT@2B_;a5u680Z$0 zCT_6V$Fr^WO{(lvf?ykB0~Z0Al5vb}Ab1VD(QA_f;DSAHzdoZd1N5Bh9d&Bt{o4fd z1~TxBPIJYQz!EV#DUsGL42}~T9sldELwYvP(G~s1UcG>m!7aup+-{#l+u1}xy466- zxeXh{94%rPNPH0@Hx45y$B2+4mkPs7 zDhyWFSiPh7NX&BS7`gmX@6tXJcnr^s_I&a2*@urY9(j)_l_<0*tRpbkB&qCR0A~-=2DuU%DVOeQxU1;Ej&+kJ!8zKfEMkh+ ztjbhjwy?O2JU{$*KMAu;Sb*B!IK{|n7Y4dJ*pGr+xvq6`k^@)_Q+)1cb>i~pqP&Mj zqgJD?pIU9ZJ`PLdD$miaTvaO*=$6plUg537JJ`vJvMNo`2MjB#M^3E;6<5qXh1{TD z!Fk0^7T1i~8o5uJEwWuwN`wo=vXplTLTPSap1~4M4duD|wa)@@>{3 z>U5`eh*s=eoBdi{!&{Pb0ioN$20tu@F|D+cW66NFF4Jf$z3hoFN8_XfhZ#kq!e)H6 zVx&mkvM6w96KqtvSg5eET8#DY|CAf<=)d|2rxxk=EBzh;j-|9jAHpIW6eC~~2o{SM zqq7UyN!bdV?>@l%&i~_}M`Hm37-2`WKpe&bi8{r$9rwYqB+vtb266vHmy(f~eJUD^ zgJ_MgKWkd0HB(+1(<eau19K$YVzE9In`)>)oSK$HBfGpq$NRly5tQz6!FWa$k``pHp(_Msa}j8D z2nFr1B4Xb_)CnX*mhuX&9B>ju%)m;9fOT3AQ0qos>#Gg!dz4yWf>w%_)VHfEPoXzB z%&9XVbd8&}WyYM5JV^of)dj?+iK!LIme8saVbw|^iZ4~G)xzzti$-QtWQ(P*dR_#t z^+M>^KKL6S+^W89L%l7yFa8crKq#5lc6Jje(nrY&OjYM{k-9E~fZ@xJy?K=c?)%y4 zT1|k%77zHehH^oNNC#z0yxq=b&UnL_pe82N8OmT*_Neussmf8n9v6>ZQll*|r(&wD zn8}G>EhtQdSkBb&^#X4`RZQ+~=8HLk9hADc!^ym(g}d=D7?+`ztkYm6RnO7r%yT-w)#N_(`xoy%oWA_@=6#*u z`|~qA?Dp~e?I%2gS*Z(H1n+(SzJ)t~_4XOx&-4MZtbq~8?B?Z?qE`r+(=-f&12zMmh*sEC0c~az~+L-YrBYRc6FkCU-()iw) zbizHNJP}gh)*=?XbZ?REWR6FJn5_4<7p+iCogR)?1Zb8W0wK?jigON1Kqm3%*d>_2 zE5qBQ%(qlwp(ld49h7~fS5sW4%29Zcm!yN)12Jd|mfYL5IBFRX@X1-;iztwtj(z0O z-3yYgN%KXUOUc$77I3htt8^Tgp%vqrVoPW>4utEl*kh%wMAZ26Q z!0B$dfz&N=8`&=kH^+^%wnJ`UF(zP}>>*X{imz*3;g?=QXr4Pa4>dI9rv=NZ0hR>9 zRrcZ@V|jJ-vz$`8LyPRzy@X&ZTlNNy`}PJ38i?CFXZ!(Ut~qUc-{7G;bq^Wb@377H zx5u`b_tGNk4R`bnobB72SZ>}MNZG-+aFnx&YqbcLEr|zF?hrwux?eD#A?!DXQq<|*6b$@EP6kUC><qty1Z6vKIZLAns+UT~9x&7*5Hyt#` z{cd8~85&YaL_J>>VomXqNg8`@uu>qA-*~CewTSChH_R)Iq)<>7*-=2W!ZcV%Q%nQT zPT4?-^`(as%S?lyFweB8aQ5Wa4+hMq9tuZecyDkdPnNd!C}Pg>5~G&HrsLs~Q@W5x z-GOM#@e+fv*nd3SVs+1@Ni_iwPA7qS!vt<(HuAW!p-CK7Uu|kYY9w6uQmTKr&s9xE zEv~Q|HBf3i@{l~@e2Lf`FWNgzu`qdQp#m{8wQ#gGwQy>1YG9+)seuosrv_T>Pae{y zY_U%T*CDnE36W3@GQnQuaYEU#nvi+lLu21K#Tux!+eT_NY<8xn2oH3HbYqh9js*@+6)UYnekKdpPKU;ROt3cP^oRsV~KJo_xf6J|al%_m5|qoSOG1( z*ua`trsg==B)~(sOFTZ`#E&p&qpyrQ1XH{-aezovr>(%s!8fJMP6fLXTAsn#ov?DJ zCx3vTqB7Mh2}*|hHF@2`4KgQ12h>agC2L)xAgFtCY-ohz9TVIX$3BhsV3W+1es95| z5`-pj5E^Hpq#PnJAQXe7O>@~#woh{5MW)I2sSEukha!^Fn4<(dOkp{KBeyEXSUef= zD(wKmd$6-BzMh-FB!AqKKp2ROR^jT{svMHM!pyPQ;-PumGv+H0Te%C5-5KLP6gfOC z1OfA>IKJ^R1w75vO7cz3;F|^mz*7ccC{gpI6`X&vQ6Tp7tg%*Pc85b+gbJWV%$ATUhv1~-k(pEWyVeJsrFt%lsK^C#nVu(e|5oUoI zOGmoUFEU^{TPa!46&{VkkXLa58d``$W1c3@kfaU+dgTSesDn3*-on8G{s<;ufrIx> z1B27~da6=}=4$416r|oIDO!{!Mifw-+%z%`mDNNKwbUSy!e%vCm$-*!v2*--4DW?b zS+_Yk3N7PIqAF^mN2Dt0Q3Sp8X$IwFba&DU_>Pk_9Ig#Rc?OhJTaAKgTsE$G0zv~M zbi$$|M6Gj=f@McOiB;Hqgsjjir#q4a{>mXMxUk`BkUJB8pw|iv8sHLIZ)oK3Y(h^N zYYNsNumG+tv_^Airq*x}P4oAf$ntD_yXR?YD2~N0_rc&9kmf=_5-@}X0b0ya#RV*`ROQqmWhtZ$(g5) z$;(N0Om1QFIwp%idko)nw(D0$I_32#!-RH>tbz6zSp%)QP@Q+H^wf zQ)aWGkp6APFOzeakwtkq2|u{qG#K}7_S0;Y_Lb5E-&ky=ry*g=tmcIc-@qrJ5v2Mv z488**{49mAqB?}0Bo#GJ1QSXB&L5A8;JdK96(2bn#h-CYibDWC&danK)~ZdScC%~nIecQESK5K7Ri1%jCsC{6dB*S_wbU7* zg@EZ%!3HwfsMV)O*3i+Ao8I0Qhy1=+8fQq{io4>g(&Uu>2)ZLm+OEf;6g=AMiytg( z9+kzB#;H@R^bl^+DFW{o%7yTws4sE8F=ecpV^|MF5{Z;yA{_w+DmYf)*p!EHas|Ij zYq83DgsfbN0eq;<4}`sbN;wD0W=-qxqEAOUC5WvXBinS(1Ca=c15<>I=)r<$eK^8ulNI1v*-g!a{B#;zY#}c_}GfG%?V@K$}dbha3;j%yA-k#ubmx2 zGGf?HD8*=u*LG5v%wYu#(?LdqZ@e>?fslorT_pSgWMuJ_JwS4bo>L(Pc}WGkumeT# zY`he;xG$+u=9vRV11Kq%GX%!XbBFIq2|^^!5`;^F4hXj}N~nc@FEZI^(DeceHRh_N z%5eLo0f@I!DgeG|80|{v!UtpBrYCcGR+#iXFoN)TV7voRW#_Xp~o?GM@&wg1# z@YY5_b5-#{1cQ{uJY?X|bp_9;3ykB=7fc}_+PXsbh+Krk1fc@d-T@mkgUViz$cQd9%{3cbg5$<(EkrsQ%g| zS1RewI!N`HnQ5mjjMn&}+-!~9X2TbnxTI`Tgz>*eA+d0~JnmVM{cOw>(aGmv4bcq) zZ~k>887c|Q1|p%E^~fOs$6$|W$<;zH#CCsRfEu)P}jwT+4e&J(#%m_L~GKxldBGxO6 zA)6&Je5YdQQB0Sg_HZ63Iwc4sjUo(auM7d(ECfzb;Vsn`Q1Kn{l%OG8KzgD@oL;Wv z5F-Jvov}t_JWzyAH4Hh$C7_cDoPBWt;=l~0Bt3NmHZ6?|cvmR_-7GEcN+_`Y2|r=#+p_!Tc=j zow>>7Kln8q&|TocZ}{?E%y!>n|B9zS`OK|)L-H+f*lG1oRKI?X^i8@Ah)*}0(TnTZ zUIwoYUbAQ??&6U-f)29M5&62o0}N0?zZR{0>+v4GjQUZwlJJ7Cyx`F% z0ao6d@u>i{s%qo}0tQfQV5JV!|FywCRD?^!D#D?cZjq;}Js(gl_-Hj^BG`ejL~0UE zZoEnoWk;_7<0P)sMJ7gMe>xOkbC?Jev2NXB8w;u6E`dG&HiQ+`l&#hPEUVgO8D>Jd z?|}|&)X@}MF7dnvO{&WUBHH+Q0vh_br!TBn5$iv61C4JeVJH4$oP{K!53UJg2L`u0 z{uy12&M#h`f2e^kzH@-jU;nhG{BZiJ2A-Xty{n<=gW zFSZtp?5JKqeptaZDns!@-#SpTca5LyS0R}tzO(g4;{vK^vhBU(Y0@9u85LPS&y!x!;%>&J#35m%|L#kK;eySfz;XtAQ(C0wl>pv;2*>nD8X^Zea&y!wh5 zNocR^a$Bro7pqIaz(jup@IW1WcC?%c13o^bd&+_Z;=>}O6{bBtAzS3iJ6e*cL~v?! zxy2o6k;||HEfBWjETEkCtHKhfc7lRB7P?fAytoyCRQ$-ax|^ZZM~rDRMC2V1X_EQv z9s%lNniM6qZQqWQ6eW8JgwDG@s4L@1>`(`*q0kE_j5#fuiNm;f^d zCSZB0V*n;xMAMPFKv2sqoT%ADs-8WJjBp-81~?ZH-oo>cI*@so(4CsX%XHwS3|+`g z$pje0ymU5(MU?&sZ2+6J&2mU*NX+ZpYs>~jp?+G)oT6Q#=4!ki3F8#{kCBk6&$_Sh7AdD0u+#meG*WBp^ONdY&Bxie;v;3)^ik438?p#a*E)V;YT`*F zF>x~Vx0A{utdH*1K_g={dmXjfc$hEuvj$q`9$%<1up}vskZTkjqKA|L1zScFrKjUV znzW&WW~L*BPZQc&k0vy@9!)YJ`WYqbR-Ygpm3)d}&>ry8!m7>&=P2%Wt6IdS4w0=K zM5(r3QA4{tM8n2;42`W_hcczY#J1Su1R`mWJ(^*j^fL-gv*cmaY@cC%@EL@`w!whI zXDm$J{)yhqa3r^#X|4UypVQ4g$6N#=!$7b(Q4B6ObL|^Gh7ntWhm}}a0|(kX;V_!J zDQ(hmal^!uqNU;t@ByP2Y%xJAx$G(7_k3umMHmF%JTN|Mzoky8fn?7v2HHEDUp`$~&vIT%4F(rw3m5-_XTmiqMNNMB?G{oIdiRH0U)F2Ase?85Xa%mb5`A^9UY5 zrZMYK-XrYvajb?{>x1~xjH7JEi&XNnAmh2*a~2L}-Sc;+n+@*n_ZczP`Qbt`KdL2X z7C2+Pw27;jrJ&_VgxKQ>uB5xHpEr|R!P!O55CGA@Ug*SmQz9I~@Q}NI2>ZH|U(i$&T>t0*JxbWO$ESBs-{kwlg zHd{-$rQYE%Y<&B6_P~+jr5sUn-@&8m6Zn+keg&4O+9DNd$D<>hHX?Ex_q^&YI8Y0Q z(J3}77)P-IA5e=SOIYNXTA2=8otP&}d_IsD5{BkJu-1eYn=Y&rT4>oN#;o$BaYNO> z>t3pXj2p#>XE{DXk>~He$Ig~+^ex$CId99hm|TCvm3~>Eh@dWAr1qc44~yO5pgTg7 zTqG7M#~qHl9)VSyKA_FDS^wFMnB)z^hbR@Bgu6^*xBtiZ! zN~AjXb-1!m)f8nXsaQ~=UKX`l>P(6v*91Db#1hv8wsY!G z#GP4(hO)|R*rAD&VTZegRw8e1Xtsg=!NvNQxp=Roq-zT~(}sn3P)5XdttzxR``)O$vj*x_efxds51 z-{I$Q9vvVlQrD#(CN4@7BvpMO&O7PBc|s6=;!fhjN%%m1=KN=93mls23f15-N$&4YL()HQ=OT3|FKCndQRDsghR| zveDGLD$;19E%G9?;bAmw`f==cEj`W$vvr+f=ejIM4Abta?0Nz$7@fT9Y-`Ls)zvl=m@Uri2 zA>+ooML@5_X4YbLfWdH&`wuM!YO`3;Cf%gD1=@V&n>1+lBVO|D5{L<9wmAxLhGV z6KC4g$hOT`%Fr2W<@e)DC2|Qj+(pKng)?5twQtze(1}tCbkXz^tCM?N%#gq;ya|yd zK0_BQ6T=~HGQ-0sh&{js%4BxQSG*Z35YEU+&SgHyweKF;6x#t_E$z|7k)ub1+cmT0 zK~|RC2ybTen4vo;Gk8jN%2+7n0Mml{unIe>KU9El<^B-eP)mm>r8O@1bnNbEM6R!1 z-FIo`7+P<&pNu9Wy+_+k0H)(hOiKqcp0E4OD9!gkRbg3$M!rIvSlr-)Q+%hy94~a! zU6K)Fw}f?>)?;%-+fC#zvr0K*AeSyRQu;7Zq$Fiu&0A*0oI{n~PQ^RH6*kdLqcU}h z;a%nZT{n4XwOu0Iyzh@ZG=O7QvPD3fG2B0}DB+r>SN_d-0gs?BZM%NU&702u`;$D1 zc{95ky~F_eF^r!lI+S7tfaeHmLk3p;;;McaXiLI`+1Z9udANR;a46FxC_N+v6OrVN zWUo_3A&}0%+sEzbbDS&^K846AGc;VVmC2-Fo3OxQQWktgDhhVfD*+w?QKn^npKu~| zAT7?r(5L<6uVy>uEz_Huzs!3$`Cr>ZIwcV%ptN|HLiovbcnXK+3PRb~D+yw8BrIyu z*ffqIw4g!4kg^}(ZFShqf4gH`@-9gfQI`n|g!w5`B1&T;F@ev1*~FKS&2!iO1y85qhidX z)#MN_EX)p(dF?J0$?ExP(QQ>K&gcM@iF1$)x^m@aGe4^Px~bDr9ibTE(G*qs|AAhK z)yN1w(+Hj9)|0Sck>;GOt6@78H&VHbtcr&0oK7uyq@DT?f5g>?v{fBqv?K80o(vq? zy>2!OBou&m=P=;JeuB{kAp_wbBKH7uR-&$qxkJRFa)8D_pOfOWAkBqX1Y$;nQ!MBh z(k8=3O0*aLE|?*c0>W1{Vj>hG&m34+C^+}b=;WSLt2w^prox7GO`>?bSqXocvb+*q z&*z~_m9K+sZnS;8Qx~@IL+v~$MF2#Se;Na9eEy6l(j*p5{KW+8@!jYWrxe#GDLDQ{ zFt*twLotOsJ|QKGgvLuS(6(-JTx>K(msqJ>m#bi!Tm{?bx?RsEc(Robpj3s? Date: Sat, 25 Apr 2020 11:29:54 -0400 Subject: [PATCH 25/95] isorted --- xarray/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xarray/__init__.py b/xarray/__init__.py index 3b4673cbbff..0318c10b341 100644 --- a/xarray/__init__.py +++ b/xarray/__init__.py @@ -10,7 +10,7 @@ save_mfdataset, ) from .backends.rasterio_ import open_rasterio -from .backends.zarr import open_zarr, open_mzarr +from .backends.zarr import open_mzarr, open_zarr from .coding.cftime_offsets import cftime_range from .coding.cftimeindex import CFTimeIndex from .conventions import SerializationWarning, decode_cf From 06de16a2a46a0ea68cc3b38812ea0866e2efa6d5 Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Tue, 28 Apr 2020 14:01:02 -0400 Subject: [PATCH 26/95] erased open_mzarr. Added capability to open_dataset to open zarr files --- xarray/backends/api.py | 3 + xarray/backends/zarr.py | 229 ---------------------------------------- 2 files changed, 3 insertions(+), 229 deletions(-) diff --git a/xarray/backends/api.py b/xarray/backends/api.py index c7481e22b59..6a319f8be8a 100644 --- a/xarray/backends/api.py +++ b/xarray/backends/api.py @@ -409,6 +409,7 @@ def open_dataset( "pynio", "cfgrib", "pseudonetcdf", + "zarr", ] if engine not in engines: raise ValueError( @@ -519,6 +520,8 @@ def maybe_decode_store(store, lock=False): store = backends.CfGribDataStore( filename_or_obj, lock=lock, **backend_kwargs ) + elif engine == "zarr": + store = backends.ZarrStore(filename_or_obj, **backend_kwargs) else: if engine not in [None, "scipy", "h5netcdf"]: diff --git a/xarray/backends/zarr.py b/xarray/backends/zarr.py index 7354c52b8e2..e2a4a3b0c34 100644 --- a/xarray/backends/zarr.py +++ b/xarray/backends/zarr.py @@ -701,232 +701,3 @@ def maybe_chunk(name, var, chunks): variables = {k: maybe_chunk(k, v, chunks) for k, v in ds.variables.items()} return ds._replace_vars_and_dims(variables) - -def open_mzarr( - paths, - chunks=None, - concat_dim="_not_supplied", - compat='no_conflicts', - preprocess=None, - data_vars="all", - coords='different', - combine="by_coords", - parallel=False, - join="outer", - attrs_file=None, - **kwargs, -): - """Open multiple zarr files as a single dataset. - - - If combine="by_coords" then the function ``combine_by_coords`` is used to - combine the datasets into one before returning the result, and if - combined="nested" then ``combine_nested`` is used. The filepaths must be - structured according to which combining function is used, the details of - which are given in the documentation ``combine_by_coords`` and - ``combine_nested``. Requires dask to be installed. Global attributes from - the ``attrs_file`` are used for the combined dataset. - - Parameters - ---------- - paths : str of sequence - Either a string glob in the form ``"path/to/my/files/*.zarr"``, - ``"path/to/my/files/*"`` (asumming the only directory is a zarr - store), or a explicit list of files to open. Paths can be given as - strings or as pathlib Paths. - chunks : int or dict, optional - Dictionary with keys given by dimension names and values given by - chunk sizes. In general, these should divide the dimensions of each - dataset. If int, chunk each dimension by ``chunks``. By default, - chunks will be chosen to load entire input files into memory at once. - This has major impact on performance: please see the full - documentation for more details [2]_. - concat_dim : str, or list of str, DataArray, Index or None, optional - Dimensions to concatenate files along. You only need to provide this - argument if any of the dimensions along which you want to concatenate - is not a dimension of the original dataset, e.g. you want to stack a - collection of 2D arrays along a third dimension. Set - ``concat_dim=[..., None, ...]`` explicitly to disable concatenation - along a particular dimension. - combine : {'by_coords', 'nested'}, optional - Whether ``xarray.combine_by_coords`` or ``xarray.combine_nested`` is - used to combine all the data. If this argument is not provided, - ``xarray.combine_by_coords`` is set by default. - compat : {'identical', 'equals', 'broadcast_equals', - 'no_conflicts','override'}, optional - String indicating how to compare variables of the same name for - potential conflicts when merging: - - * 'broadcast_equals': all values must be equal when variables are - broadcast against each other to ensure common dimensions. - * 'equals': all values and dimensions must be the same. - * 'identical': all values, dimensions and attributes must be the same. - * 'no_conflicts': only values which are not null in both datasets - must be equal. The returned dataset then contains the combination of - all non-null values. - * 'override': skip comparing and pick variable from first dataset. - - preprocess : callable, optional - If provided, call this function on each dataset prior to concatenation. - You can find the file-name from which each dataset was loaded in - ``ds.encoding[source]``. - data_vars : {'minimal', 'different', 'all' or list of str}, optional - These data variables will be concatenated together: - * 'minimal': Only data variables in which the dimension already - appears are included. - * 'different': Data variables which are not equal (ignoring - attributes) across all datasets are also concatenated (as well as - all for which dimension already appears). Beware: this option may - load the data payload of data variables into memory if they are not - already loaded. - * 'all': All data variables will be concatenated. - * list of str: The listed data variables will be concatenated, in - addition to the 'minimal' data variables. - coords : {'minimal', 'different', 'all' or list of str}, optional - These coordinate variables will be concatenated together: - * 'minimal': Only coordinates in which the dimension already appears - are included. - * 'different': Coordinates which are not equal (ignoring attributes) - across all datasets are also concatenated (as well as all for which - dimension already appears). Beware: this option may load the data - payload of coordinate variables into memory if they are not already - loaded. - * 'all': All coordinate variables will be concatenated, except - those corresponding to other dimensions. - * list of str: The listed coordinate variables will be concatenated, - in addition the 'minimal' coordinates. - parallel : bool, optional - If True, the open and preprocess steps of this function will be - performed in parallel using ``dask.delayed``. Default is False. - join : {'outer', 'inner', 'left', 'right', 'exact, 'override'}, optional - String indicating how to combine differing indexes - (excluding concat_dim) in objects - - 'outer': use the union of object indexes - - 'inner': use the intersection of object indexes - - 'left': use indexes from the first object with each dimension - - 'right': use indexes from the last object with each dimension - - 'exact': instead of aligning, raise `ValueError` when indexes to be - aligned are not equal - - 'override': if indexes are of same size, rewrite indexes to be - those of the first object with that dimension. Indexes for the same - dimension must have the same size in all objects. - attrs_file : str or pathlib.Path, optional - Path of the file used to read global attributes from. - By default global attributes are read from the first file provided, - with wildcard matches sorted by filename. - **kwargs : optional - Additional arguments passed on to :py:func:`xarray.open_zarr`. - - - Returns - ------- - xarray.Dataset - Notes - ----- - ``open_zarr`` opens files with read-only access. When you modify - values - of a Dataset, even one linked to files on disk, only the in-memory copy you - are manipulating in xarray is modified: the original file on disk is never - touched. - See Also - -------- - combine_by_coords - combine_nested - open_dataset - References - ---------- - .. [1] http://xarray.pydata.org/en/stable/dask.html - .. [2] http://xarray.pydata.org/en/stable/dask.html#chunking-and-performance - """ - if isinstance(paths, str): - if is_remote_uri(paths): - raise ValueError( - "cannot do wild-card matching for paths that are remote URLs: " - "{!r}. Instead, supply paths as an explicit list of strings.".format( - paths - ) - ) - paths = sorted(glob(paths)) - else: - paths = [str(p) if isinstance(p, Path) else p for p in paths] - if not paths: - raise OSError("no files to open") - - # If combine='by_coords' then this is unnecessary, but quick. - # If combine='nested' then this creates a flat list which is easier to - # iterate over, while saving the originally-supplied structure as "ids" - if combine == "nested": - if str(concat_dim) == "_not_supplied": - raise ValueError("Must supply concat_dim when using " - "combine='nested'") - else: - if isinstance(concat_dim, (str, DataArray)) or concat_dim is None: - concat_dim = [concat_dim] - combined_ids_paths = _infer_concat_order_from_positions(paths) - ids, paths = (list(combined_ids_paths.keys()), - list(combined_ids_paths.values())) - - # provide with open_kwargs here specific to zarr stores - open_kwargs = dict( - chunks=chunks or {}, **kwargs - ) - - if parallel: - import dask - - # wrap the open_zarr, getattr with delayed - open_ = dask.delayed(open_zarr) - getattr_ = dask.delayed(getattr) - if preprocess is not None: - preprocess = dask.delayed(preprocess) - else: - open_ = open_zarr - getattr_ = getattr - - datasets = [open_(p, **open_kwargs) for p in paths] - file_objs = [getattr_(ds, "_file_obj") for ds in datasets] - if preprocess is not None: - datasets = [preprocess(ds) for ds in datasets] - - if parallel: - # calling compute here will return the datasets/file_objs lists, - # the underlying datasets will still be stored as dask arrays - datasets, file_objs = dask.compute(datasets, file_objs) - - # Combine all datasets, closing them in case of a ValueError - try: - if combine == "nested": - # Combined nested list by successive concat and merge operations - # along each dimension, using structure given by "ids" - combined = _nested_combine(datasets, - concat_dims=concat_dim, - compat=compat, - data_vars=data_vars, - coords=coords, - ids=ids, - join=join) - elif combine == "by_coords": - # Redo ordering from coordinates, ignoring how they were ordered - # previously - combined = combine_by_coords(datasets, - compat=compat, data_vars=data_vars, - coords=coords, join=join) - else: - raise ValueError( - "{} is an invalid option for the keyword argument" - " ``combine``".format(combine) - ) - except ValueError: - for ds in datasets: - ds.close() - raise - - # read global attributes from the attrs_file or from the first dataset - if attrs_file is not None: - if isinstance(attrs_file, Path): - attrs_file = str(attrs_file) - combined.attrs = datasets[paths.index(attrs_file)].attrs - else: - combined.attrs = datasets[0].attrs - - return combined From f94fc9f920895822f407056984f84ff2d5ed45f2 Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Tue, 28 Apr 2020 14:07:07 -0400 Subject: [PATCH 27/95] removed imported but unused --- xarray/backends/zarr.py | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/xarray/backends/zarr.py b/xarray/backends/zarr.py index e2a4a3b0c34..7405bcac2b8 100644 --- a/xarray/backends/zarr.py +++ b/xarray/backends/zarr.py @@ -1,19 +1,12 @@ import warnings -from glob import glob -from pathlib import Path - import numpy as np from .. import coding, conventions from ..core import indexing -from ..core.combine import ( - _infer_concat_order_from_positions, - _nested_combine, - combine_by_coords, -) + from ..core.dataarray import DataArray from ..core.pycompat import integer_types -from ..core.utils import FrozenDict, HiddenKeyDict, is_remote_uri +from ..core.utils import FrozenDict, HiddenKeyDict from ..core.variable import Variable from .common import AbstractWritableDataStore, BackendArray, _encode_variable_name From 16e08e3ef9dd23918bf4c7dfb20d0778de57fb29 Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Tue, 28 Apr 2020 19:07:26 -0400 Subject: [PATCH 28/95] comment to `zarr` engine --- xarray/backends/api.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/xarray/backends/api.py b/xarray/backends/api.py index 6a319f8be8a..db666c4655e 100644 --- a/xarray/backends/api.py +++ b/xarray/backends/api.py @@ -345,7 +345,7 @@ def open_dataset( If True, decode the 'coordinates' attribute to identify coordinates in the resulting dataset. engine : {'netcdf4', 'scipy', 'pydap', 'h5netcdf', 'pynio', 'cfgrib', \ - 'pseudonetcdf'}, optional + 'pseudonetcdf', 'zarr'}, optional Engine to use when reading files. If not provided, the default engine is chosen based on available dependencies, with a preference for 'netcdf4'. @@ -521,8 +521,16 @@ def maybe_decode_store(store, lock=False): filename_or_obj, lock=lock, **backend_kwargs ) elif engine == "zarr": - store = backends.ZarrStore(filename_or_obj, **backend_kwargs) - + # on ZarrStore, mode='r', synchronizer=None, group=None, + # consolidated=False. + try: # on open_zarr, chunks='auto'. This is what 'auto' does + import dask.array + except ImportError: + chunks = None + + store = backends.ZarrStore.open_group( + filename_or_obj, **backend_kwargs + ) else: if engine not in [None, "scipy", "h5netcdf"]: raise ValueError( From 22828fc2ce1cec4f5a2790cab93b43dc3b8c98ae Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Tue, 28 Apr 2020 19:45:31 -0400 Subject: [PATCH 29/95] added chunking code from `open_zarr` --- xarray/backends/api.py | 115 +++++++++++++++++++++++++++++++---------- 1 file changed, 89 insertions(+), 26 deletions(-) diff --git a/xarray/backends/api.py b/xarray/backends/api.py index db666c4655e..f581e274b27 100644 --- a/xarray/backends/api.py +++ b/xarray/backends/api.py @@ -458,33 +458,94 @@ def maybe_decode_store(store, lock=False): if chunks is not None: from dask.base import tokenize - - # if passed an actual file path, augment the token with - # the file modification time - if isinstance(filename_or_obj, str) and not is_remote_uri(filename_or_obj): - mtime = os.path.getmtime(filename_or_obj) - else: - mtime = None - token = tokenize( - filename_or_obj, - mtime, - group, - decode_cf, - mask_and_scale, - decode_times, - concat_characters, - decode_coords, - engine, - chunks, - drop_variables, - use_cftime, - ) - name_prefix = "open_dataset-%s" % token - ds2 = ds.chunk(chunks, name_prefix=name_prefix, token=token) - ds2._file_obj = ds._file_obj + if engine is not 'zarr': + + # if passed an actual file path, augment the token with + # the file modification time + if isinstance(filename_or_obj, str) and not is_remote_uri(filename_or_obj): + mtime = os.path.getmtime(filename_or_obj) + else: + mtime = None + token = tokenize( + filename_or_obj, + mtime, + group, + decode_cf, + mask_and_scale, + decode_times, + concat_characters, + decode_coords, + engine, + chunks, + drop_variables, + use_cftime, + ) + name_prefix = "open_dataset-%s" % token + ds2 = ds.chunk(chunks, name_prefix=name_prefix, token=token) + ds2._file_obj = ds._file_obj + + else: # file is zarr! + + # adapted from Dataset.Chunk() and taken from open_zarr + if not isinstance(chunks, (int, dict)): + if chunks != "auto": + raise ValueError( + "chunks must be an int, dict, 'auto', or None. " + "Instead found %s. " % chunks + ) + if isinstance(chunks, int): + chunks = dict.fromkeys(ds.dims, chunks) + + if isinstance(chunks, tuple) and len(chunks) == len(ds.dims): + chunks = dict(zip(ds.dims, chunks)) + + def get_chunk(name, var, chunks): + chunk_spec = dict(zip(var.dims, var.encoding.get("chunks"))) + + # Coordinate labels aren't chunked + if var.ndim == 1 and var.dims[0] == name: + return chunk_spec + + if chunks == "auto": + return chunk_spec + + for dim in var.dims: + if dim in chunks: + spec = chunks[dim] + if isinstance(spec, int): + spec = (spec,) + if isinstance(spec, (tuple, list)) and chunk_spec[dim]: + if any(s % chunk_spec[dim] for s in spec): + warnings.warn( + "Specified Dask chunks %r would " + "separate Zarr chunk shape %r for " + "dimension %r. This significantly " + "degrades performance. Consider " + "rechunking after loading instead." + % (chunks[dim], chunk_spec[dim], dim), + stacklevel=2, + ) + chunk_spec[dim] = chunks[dim] + return chunk_spec + + def maybe_chunk(name, var, chunks): + chunk_spec = get_chunk(name, var, chunks) + + if (var.ndim > 0) and (chunk_spec is not None): + # does this cause any data to be read? + token2 = tokenize(name, var._data) + name2 = "zarr-%s" % token2 + var = var.chunk(chunk_spec, name=name2, lock=None) + if overwrite_encoded_chunks and var.chunks is not None: + var.encoding["chunks"] = tuple(x[0] for x in var.chunks) + return var + else: + return var + + variables = {k: maybe_chunk(k, v, chunks) for k, v in ds.variables.items()} + ds2 = ds._replace_vars_and_dims(variables) else: ds2 = ds - return ds2 if isinstance(filename_or_obj, Path): @@ -529,7 +590,9 @@ def maybe_decode_store(store, lock=False): chunks = None store = backends.ZarrStore.open_group( - filename_or_obj, **backend_kwargs + filename_or_obj, + group=group, + **backend_kwargs ) else: if engine not in [None, "scipy", "h5netcdf"]: From 021f2cc68c587411e2dc5d37f2625ec753b7bd0c Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Tue, 28 Apr 2020 19:53:31 -0400 Subject: [PATCH 30/95] remove import `open_mzarr`` --- xarray/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xarray/__init__.py b/xarray/__init__.py index 0318c10b341..ae0ea8d56f7 100644 --- a/xarray/__init__.py +++ b/xarray/__init__.py @@ -10,7 +10,7 @@ save_mfdataset, ) from .backends.rasterio_ import open_rasterio -from .backends.zarr import open_mzarr, open_zarr +from .backends.zarr import open_zarr from .coding.cftime_offsets import cftime_range from .coding.cftimeindex import CFTimeIndex from .conventions import SerializationWarning, decode_cf From 985f28ca298999ef2a7dfddb8b6649843cdb21c2 Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Tue, 28 Apr 2020 19:54:23 -0400 Subject: [PATCH 31/95] removed `open_mzarr`` from top-level-function --- xarray/__init__.py | 1 - 1 file changed, 1 deletion(-) diff --git a/xarray/__init__.py b/xarray/__init__.py index ae0ea8d56f7..0fead57e5fb 100644 --- a/xarray/__init__.py +++ b/xarray/__init__.py @@ -65,7 +65,6 @@ "open_mfdataset", "open_rasterio", "open_zarr", - "open_mzarr", "polyval", "register_dataarray_accessor", "register_dataset_accessor", From e8ed887d9dc3e9956d970761750ffbf6b12a6b56 Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Tue, 28 Apr 2020 20:17:52 -0400 Subject: [PATCH 32/95] missing return in nested function --- xarray/backends/api.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/xarray/backends/api.py b/xarray/backends/api.py index f581e274b27..94066ffcf7b 100644 --- a/xarray/backends/api.py +++ b/xarray/backends/api.py @@ -411,6 +411,7 @@ def open_dataset( "pseudonetcdf", "zarr", ] + if engine not in engines: raise ValueError( "unrecognized engine for open_dataset: {}\n" @@ -525,7 +526,7 @@ def get_chunk(name, var, chunks): % (chunks[dim], chunk_spec[dim], dim), stacklevel=2, ) - chunk_spec[dim] = chunks[dim] + chunk_spec[dim] = _chunks[dim] return chunk_spec def maybe_chunk(name, var, chunks): @@ -544,6 +545,7 @@ def maybe_chunk(name, var, chunks): variables = {k: maybe_chunk(k, v, chunks) for k, v in ds.variables.items()} ds2 = ds._replace_vars_and_dims(variables) + return ds2 else: ds2 = ds return ds2 From d69351442e7f03798db9fc863740e237138eab2c Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Tue, 28 Apr 2020 20:23:13 -0400 Subject: [PATCH 33/95] moved outside of nested function, had touble with reading before assignement --- xarray/backends/api.py | 188 +++++++++++++++++++++-------------------- 1 file changed, 95 insertions(+), 93 deletions(-) diff --git a/xarray/backends/api.py b/xarray/backends/api.py index 94066ffcf7b..fa8318509b0 100644 --- a/xarray/backends/api.py +++ b/xarray/backends/api.py @@ -457,98 +457,7 @@ def maybe_decode_store(store, lock=False): _protect_dataset_variables_inplace(ds, cache) - if chunks is not None: - from dask.base import tokenize - if engine is not 'zarr': - - # if passed an actual file path, augment the token with - # the file modification time - if isinstance(filename_or_obj, str) and not is_remote_uri(filename_or_obj): - mtime = os.path.getmtime(filename_or_obj) - else: - mtime = None - token = tokenize( - filename_or_obj, - mtime, - group, - decode_cf, - mask_and_scale, - decode_times, - concat_characters, - decode_coords, - engine, - chunks, - drop_variables, - use_cftime, - ) - name_prefix = "open_dataset-%s" % token - ds2 = ds.chunk(chunks, name_prefix=name_prefix, token=token) - ds2._file_obj = ds._file_obj - - else: # file is zarr! - - # adapted from Dataset.Chunk() and taken from open_zarr - if not isinstance(chunks, (int, dict)): - if chunks != "auto": - raise ValueError( - "chunks must be an int, dict, 'auto', or None. " - "Instead found %s. " % chunks - ) - if isinstance(chunks, int): - chunks = dict.fromkeys(ds.dims, chunks) - - if isinstance(chunks, tuple) and len(chunks) == len(ds.dims): - chunks = dict(zip(ds.dims, chunks)) - - def get_chunk(name, var, chunks): - chunk_spec = dict(zip(var.dims, var.encoding.get("chunks"))) - - # Coordinate labels aren't chunked - if var.ndim == 1 and var.dims[0] == name: - return chunk_spec - - if chunks == "auto": - return chunk_spec - - for dim in var.dims: - if dim in chunks: - spec = chunks[dim] - if isinstance(spec, int): - spec = (spec,) - if isinstance(spec, (tuple, list)) and chunk_spec[dim]: - if any(s % chunk_spec[dim] for s in spec): - warnings.warn( - "Specified Dask chunks %r would " - "separate Zarr chunk shape %r for " - "dimension %r. This significantly " - "degrades performance. Consider " - "rechunking after loading instead." - % (chunks[dim], chunk_spec[dim], dim), - stacklevel=2, - ) - chunk_spec[dim] = _chunks[dim] - return chunk_spec - - def maybe_chunk(name, var, chunks): - chunk_spec = get_chunk(name, var, chunks) - - if (var.ndim > 0) and (chunk_spec is not None): - # does this cause any data to be read? - token2 = tokenize(name, var._data) - name2 = "zarr-%s" % token2 - var = var.chunk(chunk_spec, name=name2, lock=None) - if overwrite_encoded_chunks and var.chunks is not None: - var.encoding["chunks"] = tuple(x[0] for x in var.chunks) - return var - else: - return var - - variables = {k: maybe_chunk(k, v, chunks) for k, v in ds.variables.items()} - ds2 = ds._replace_vars_and_dims(variables) - return ds2 - else: - ds2 = ds - return ds2 + return ds if isinstance(filename_or_obj, Path): filename_or_obj = str(filename_or_obj) @@ -618,7 +527,100 @@ def maybe_chunk(name, var, chunks): if isinstance(filename_or_obj, str): ds.encoding["source"] = filename_or_obj - return ds + + if chunks is not None: + from dask.base import tokenize + if engine is not 'zarr': + + # if passed an actual file path, augment the token with + # the file modification time + if isinstance(filename_or_obj, str) and not is_remote_uri(filename_or_obj): + mtime = os.path.getmtime(filename_or_obj) + else: + mtime = None + token = tokenize( + filename_or_obj, + mtime, + group, + decode_cf, + mask_and_scale, + decode_times, + concat_characters, + decode_coords, + engine, + chunks, + drop_variables, + use_cftime, + ) + name_prefix = "open_dataset-%s" % token + ds2 = ds.chunk(chunks, name_prefix=name_prefix, token=token) + ds2._file_obj = ds._file_obj + + else: # file is zarr! + + # adapted from Dataset.Chunk() and taken from open_zarr + if not isinstance(chunks, (int, dict)): + if chunks != "auto": + raise ValueError( + "chunks must be an int, dict, 'auto', or None. " + "Instead found %s. " % chunks + ) + if isinstance(chunks, int): + chunks = dict.fromkeys(ds.dims, chunks) + + if isinstance(chunks, tuple) and len(chunks) == len(ds.dims): + chunks = dict(zip(ds.dims, chunks)) + + def get_chunk(name, var, chunks): + chunk_spec = dict(zip(var.dims, var.encoding.get("chunks"))) + + # Coordinate labels aren't chunked + if var.ndim == 1 and var.dims[0] == name: + return chunk_spec + + if chunks == "auto": + return chunk_spec + + for dim in var.dims: + if dim in chunks: + spec = chunks[dim] + if isinstance(spec, int): + spec = (spec,) + if isinstance(spec, (tuple, list)) and chunk_spec[dim]: + if any(s % chunk_spec[dim] for s in spec): + warnings.warn( + "Specified Dask chunks %r would " + "separate Zarr chunk shape %r for " + "dimension %r. This significantly " + "degrades performance. Consider " + "rechunking after loading instead." + % (chunks[dim], chunk_spec[dim], dim), + stacklevel=2, + ) + chunk_spec[dim] = _chunks[dim] + return chunk_spec + + def maybe_chunk(name, var, chunks): + chunk_spec = get_chunk(name, var, chunks) + + if (var.ndim > 0) and (chunk_spec is not None): + # does this cause any data to be read? + token2 = tokenize(name, var._data) + name2 = "zarr-%s" % token2 + var = var.chunk(chunk_spec, name=name2, lock=None) + if overwrite_encoded_chunks and var.chunks is not None: + var.encoding["chunks"] = tuple(x[0] for x in var.chunk) + return var + else: + return var + + variables = {k: maybe_chunk(k, v, chunks) for k, v in ds.variables.items()} + ds2 = ds._replace_vars_and_dims(variables) + return ds2 + else: + ds2 = ds + + return ds2 def open_dataarray( From df34f1836f6a2de8e58aebf60dea34dadc2e572a Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Tue, 28 Apr 2020 20:26:33 -0400 Subject: [PATCH 34/95] added missing argument associated with zarr stores, onto the definition of open_dataset --- xarray/backends/api.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/xarray/backends/api.py b/xarray/backends/api.py index fa8318509b0..6e15b94da00 100644 --- a/xarray/backends/api.py +++ b/xarray/backends/api.py @@ -303,6 +303,7 @@ def open_dataset( drop_variables=None, backend_kwargs=None, use_cftime=None, + overwrite_encoded_chunks=False, ): """Open and decode a dataset from a file or file-like object. @@ -383,6 +384,10 @@ def open_dataset( represented using ``np.datetime64[ns]`` objects. If False, always decode times to ``np.datetime64[ns]`` objects; if this is not possible raise an error. + overwrite_encoded_chunks: bool, optional + Whether to drop the zarr chunks encoded for each variable when a + dataset is loaded with specified chunk sizes (default: False) + Returns ------- From 98351c7d33b1add010be1d98388a40c5dd5b72f4 Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Tue, 28 Apr 2020 21:11:55 -0400 Subject: [PATCH 35/95] isort zarr.py --- xarray/backends/zarr.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/xarray/backends/zarr.py b/xarray/backends/zarr.py index 7405bcac2b8..9e6a374a321 100644 --- a/xarray/backends/zarr.py +++ b/xarray/backends/zarr.py @@ -1,9 +1,9 @@ import warnings + import numpy as np from .. import coding, conventions from ..core import indexing - from ..core.dataarray import DataArray from ..core.pycompat import integer_types from ..core.utils import FrozenDict, HiddenKeyDict @@ -693,4 +693,3 @@ def maybe_chunk(name, var, chunks): variables = {k: maybe_chunk(k, v, chunks) for k, v in ds.variables.items()} return ds._replace_vars_and_dims(variables) - From 160bd6743601308aa1c946dd7f5d560d15fc562d Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Tue, 28 Apr 2020 21:20:39 -0400 Subject: [PATCH 36/95] removed blank lines, fixed typo on `chunks` --- xarray/backends/api.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/xarray/backends/api.py b/xarray/backends/api.py index 6e15b94da00..f7b48fa2143 100644 --- a/xarray/backends/api.py +++ b/xarray/backends/api.py @@ -532,10 +532,9 @@ def maybe_decode_store(store, lock=False): if isinstance(filename_or_obj, str): ds.encoding["source"] = filename_or_obj - if chunks is not None: from dask.base import tokenize - if engine is not 'zarr': + if engine != 'zarr': # if passed an actual file path, augment the token with # the file modification time @@ -602,7 +601,7 @@ def get_chunk(name, var, chunks): % (chunks[dim], chunk_spec[dim], dim), stacklevel=2, ) - chunk_spec[dim] = _chunks[dim] + chunk_spec[dim] = chunks[dim] return chunk_spec def maybe_chunk(name, var, chunks): From 7e57e9b8c5356cfa6a09f31007c3dce49b35f32e Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Tue, 28 Apr 2020 21:21:31 -0400 Subject: [PATCH 37/95] removed imported but unused --- xarray/backends/zarr.py | 1 - 1 file changed, 1 deletion(-) diff --git a/xarray/backends/zarr.py b/xarray/backends/zarr.py index 9e6a374a321..973c167911e 100644 --- a/xarray/backends/zarr.py +++ b/xarray/backends/zarr.py @@ -4,7 +4,6 @@ from .. import coding, conventions from ..core import indexing -from ..core.dataarray import DataArray from ..core.pycompat import integer_types from ..core.utils import FrozenDict, HiddenKeyDict from ..core.variable import Variable From ac0f0936d82702003b4fac011fcbe65d9003aa36 Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Tue, 28 Apr 2020 21:23:25 -0400 Subject: [PATCH 38/95] restored conditional for `auto` --- xarray/backends/api.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/xarray/backends/api.py b/xarray/backends/api.py index f7b48fa2143..ae3fa0c9627 100644 --- a/xarray/backends/api.py +++ b/xarray/backends/api.py @@ -500,11 +500,11 @@ def maybe_decode_store(store, lock=False): elif engine == "zarr": # on ZarrStore, mode='r', synchronizer=None, group=None, # consolidated=False. - try: # on open_zarr, chunks='auto'. This is what 'auto' does - import dask.array - except ImportError: - chunks = None - + if chunks == "auto": + try: # on open_zarr, chunks='auto'. This is what 'auto' does + import dask.array + except ImportError: + chunks = None store = backends.ZarrStore.open_group( filename_or_obj, group=group, From 6a1516cdbe04c6185ed0122a7d296e7f4c129cc9 Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Tue, 28 Apr 2020 21:27:45 -0400 Subject: [PATCH 39/95] removed imported but unused `dask.array` --- xarray/backends/api.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/xarray/backends/api.py b/xarray/backends/api.py index ae3fa0c9627..cd5eeed65a7 100644 --- a/xarray/backends/api.py +++ b/xarray/backends/api.py @@ -500,11 +500,6 @@ def maybe_decode_store(store, lock=False): elif engine == "zarr": # on ZarrStore, mode='r', synchronizer=None, group=None, # consolidated=False. - if chunks == "auto": - try: # on open_zarr, chunks='auto'. This is what 'auto' does - import dask.array - except ImportError: - chunks = None store = backends.ZarrStore.open_group( filename_or_obj, group=group, From 8999faf12e7b5ddabc55484bb12d78fd17ed79d7 Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Wed, 29 Apr 2020 11:04:34 -0400 Subject: [PATCH 40/95] added capabilities for file_or_obj to be a mutablemapper such as `fsspec.get_mapper`, and thus compatible with `intake-xarray` --- xarray/backends/api.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/xarray/backends/api.py b/xarray/backends/api.py index cd5eeed65a7..28a2a407914 100644 --- a/xarray/backends/api.py +++ b/xarray/backends/api.py @@ -5,6 +5,7 @@ from numbers import Number from pathlib import Path from textwrap import dedent +from collections.abc import MutableMapping from typing import ( TYPE_CHECKING, Callable, @@ -470,6 +471,9 @@ def maybe_decode_store(store, lock=False): if isinstance(filename_or_obj, AbstractDataStore): store = filename_or_obj + elif isinstance(filename_or_obj, MutableMapping): + store = filename_or_obj + elif isinstance(filename_or_obj, str): filename_or_obj = _normalize_path(filename_or_obj) @@ -501,7 +505,7 @@ def maybe_decode_store(store, lock=False): # on ZarrStore, mode='r', synchronizer=None, group=None, # consolidated=False. store = backends.ZarrStore.open_group( - filename_or_obj, + store, group=group, **backend_kwargs ) From 5df0985b18f6f25a989521b824b89bacc46e66c4 Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Wed, 29 Apr 2020 11:15:47 -0400 Subject: [PATCH 41/95] moved to a different conditional since file_or_obj is a mutablemapping, not a str, path or AbstractDataStore --- xarray/backends/api.py | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/xarray/backends/api.py b/xarray/backends/api.py index 28a2a407914..ded9b2ab401 100644 --- a/xarray/backends/api.py +++ b/xarray/backends/api.py @@ -471,8 +471,15 @@ def maybe_decode_store(store, lock=False): if isinstance(filename_or_obj, AbstractDataStore): store = filename_or_obj - elif isinstance(filename_or_obj, MutableMapping): - store = filename_or_obj + if isinstance(filename_or_obj, MutableMapping): + if engine == 'zarr': + # on ZarrStore, mode='r', synchronizer=None, group=None, + # consolidated=False. + store = backends.ZarrStore.open_group( + store, + group=group, + **backend_kwargs + ) elif isinstance(filename_or_obj, str): filename_or_obj = _normalize_path(filename_or_obj) @@ -501,14 +508,6 @@ def maybe_decode_store(store, lock=False): store = backends.CfGribDataStore( filename_or_obj, lock=lock, **backend_kwargs ) - elif engine == "zarr": - # on ZarrStore, mode='r', synchronizer=None, group=None, - # consolidated=False. - store = backends.ZarrStore.open_group( - store, - group=group, - **backend_kwargs - ) else: if engine not in [None, "scipy", "h5netcdf"]: raise ValueError( From 2d94ea2a2a690fa2210362f72c759973e7a225f2 Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Wed, 29 Apr 2020 11:16:53 -0400 Subject: [PATCH 42/95] isort api.py --- xarray/backends/api.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xarray/backends/api.py b/xarray/backends/api.py index ded9b2ab401..26823991076 100644 --- a/xarray/backends/api.py +++ b/xarray/backends/api.py @@ -1,11 +1,11 @@ import os.path import warnings +from collections.abc import MutableMapping from glob import glob from io import BytesIO from numbers import Number from pathlib import Path from textwrap import dedent -from collections.abc import MutableMapping from typing import ( TYPE_CHECKING, Callable, From 377ef5353a28083a29a728d96cb4eb150186fa86 Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Wed, 29 Apr 2020 11:20:04 -0400 Subject: [PATCH 43/95] restored the option for when file_or_obk is a str, such as an url. --- xarray/backends/api.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/xarray/backends/api.py b/xarray/backends/api.py index 26823991076..97ffdf85abf 100644 --- a/xarray/backends/api.py +++ b/xarray/backends/api.py @@ -508,6 +508,14 @@ def maybe_decode_store(store, lock=False): store = backends.CfGribDataStore( filename_or_obj, lock=lock, **backend_kwargs ) + elif engine == 'zarr': + # on ZarrStore, mode='r', synchronizer=None, group=None, + # consolidated=False. + store = backends.ZarrStore.open_group( + store, + group=group, + **backend_kwargs + ) else: if engine not in [None, "scipy", "h5netcdf"]: raise ValueError( From f48c84b1bd240d301fc3a1caa5e03e4718bc77d3 Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Wed, 29 Apr 2020 11:27:34 -0400 Subject: [PATCH 44/95] fixed relabel --- xarray/backends/api.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xarray/backends/api.py b/xarray/backends/api.py index 97ffdf85abf..b5c6dc32a3b 100644 --- a/xarray/backends/api.py +++ b/xarray/backends/api.py @@ -476,7 +476,7 @@ def maybe_decode_store(store, lock=False): # on ZarrStore, mode='r', synchronizer=None, group=None, # consolidated=False. store = backends.ZarrStore.open_group( - store, + filename_or_obj, group=group, **backend_kwargs ) @@ -512,7 +512,7 @@ def maybe_decode_store(store, lock=False): # on ZarrStore, mode='r', synchronizer=None, group=None, # consolidated=False. store = backends.ZarrStore.open_group( - store, + filename_or_obj, group=group, **backend_kwargs ) From 8376cca382dbf860bf7f38b5543a6e1b2c9c42ce Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Wed, 29 Apr 2020 15:28:43 -0400 Subject: [PATCH 45/95] update open_dataset for zarr files --- xarray/tests/test_backends.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/xarray/tests/test_backends.py b/xarray/tests/test_backends.py index 916c29ba7bd..0af34612b08 100644 --- a/xarray/tests/test_backends.py +++ b/xarray/tests/test_backends.py @@ -1510,7 +1510,7 @@ def save(self, dataset, store_target, **kwargs): @contextlib.contextmanager def open(self, store_target, **kwargs): - with xr.open_zarr(store_target, **kwargs) as ds: + with xr.open_dataset(store_target, engine="zarr", chunks="auto" **kwargs) as ds: yield ds @contextlib.contextmanager @@ -1799,7 +1799,7 @@ def test_write_persistence_modes(self, group): ds.to_zarr(store_target, mode="w", group=group) ds_to_append.to_zarr(store_target, append_dim="time", group=group) original = xr.concat([ds, ds_to_append], dim="time") - actual = xr.open_zarr(store_target, group=group) + actual = xr.open_dataset(store_target, group=group, engine="zarr", chunks="auto") assert_identical(original, actual) def test_compressor_encoding(self): @@ -1839,7 +1839,7 @@ def test_append_write(self): ds.to_zarr(store_target, mode="w") ds_to_append.to_zarr(store_target, append_dim="time") original = xr.concat([ds, ds_to_append], dim="time") - assert_identical(original, xr.open_zarr(store_target)) + assert_identical(original, xr.open_dataset(store_target, chunks="auto")) @pytest.mark.xfail(reason="Zarr stores can not be appended to") def test_append_overwrite_values(self): @@ -1901,11 +1901,11 @@ def test_check_encoding_is_consistent_after_append(self): encoding = {"da": {"compressor": compressor}} ds.to_zarr(store_target, mode="w", encoding=encoding) ds_to_append.to_zarr(store_target, append_dim="time") - actual_ds = xr.open_zarr(store_target) + actual_ds = xr.open_dataset(store_target, chunks="auto") actual_encoding = actual_ds["da"].encoding["compressor"] assert actual_encoding.get_config() == compressor.get_config() assert_identical( - xr.open_zarr(store_target).compute(), + xr.open_dataset(store_target, chunks="auto").compute(), xr.concat([ds, ds_to_append], dim="time"), ) @@ -1920,7 +1920,7 @@ def test_append_with_new_variable(self): ds_with_new_var.to_zarr(store_target, mode="a") combined = xr.concat([ds, ds_to_append], dim="time") combined["new_var"] = ds_with_new_var["new_var"] - assert_identical(combined, xr.open_zarr(store_target)) + assert_identical(combined, xr.open_dataset(store_target, chunks="auto")) @requires_dask def test_to_zarr_compute_false_roundtrip(self): From aed1cc54cd5ae77a426a3cb779a04c33b593c935 Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Wed, 29 Apr 2020 15:34:52 -0400 Subject: [PATCH 46/95] remove open_zarr from tests, now open_dataset(engine=`zarr`) --- xarray/tests/test_distributed.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xarray/tests/test_distributed.py b/xarray/tests/test_distributed.py index 8011171d223..07d738f0bc5 100644 --- a/xarray/tests/test_distributed.py +++ b/xarray/tests/test_distributed.py @@ -151,7 +151,7 @@ def test_dask_distributed_zarr_integration_test(loop, consolidated, compute): ) if not compute: maybe_futures.compute() - with xr.open_zarr(filename, **read_kwargs) as restored: + with xr.open_dataset(filename, chunks="auto", **read_kwargs) as restored: assert isinstance(restored.var1.data, da.Array) computed = restored.compute() assert_allclose(original, computed) From b488363b32705e6bd0b174b927cb129d247f5d69 Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Wed, 29 Apr 2020 15:53:35 -0400 Subject: [PATCH 47/95] remove extra file, and raise deprecating warning on open_zarr --- default.profraw | Bin 1026072 -> 0 bytes xarray/backends/zarr.py | 251 +++++++++++++++++++++------------------- 2 files changed, 131 insertions(+), 120 deletions(-) delete mode 100644 default.profraw diff --git a/default.profraw b/default.profraw deleted file mode 100644 index feaceb62071d513f8872edbe98c1de147569883e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1026072 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.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%0A7cAH3vU?NSmZ9PiEVlKd-d7@@B(GJIve7q3gr? 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

@qD5F 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 0) and (chunk_spec is not None): - # does this cause any data to be read? - token2 = tokenize(name, var._data) - name2 = "zarr-%s" % token2 - var = var.chunk(chunk_spec, name=name2, lock=None) - if overwrite_encoded_chunks and var.chunks is not None: - var.encoding["chunks"] = tuple(x[0] for x in var.chunks) - return var - else: - return var - - variables = {k: maybe_chunk(k, v, chunks) for k, v in ds.variables.items()} - return ds._replace_vars_and_dims(variables) + ds = open_dataset() + + # if "auto_chunk" in kwargs: + # auto_chunk = kwargs.pop("auto_chunk") + # if auto_chunk: + # chunks = "auto" # maintain backwards compatibility + # else: + # chunks = None + + # warnings.warn( + # "auto_chunk is deprecated. Use chunks='auto' instead.", + # FutureWarning, + # stacklevel=2, + # ) + + # if kwargs: + # raise TypeError( + # "open_zarr() got unexpected keyword arguments " + ",".join(kwargs.keys()) + # ) + + # if not isinstance(chunks, (int, dict)): + # if chunks != "auto" and chunks is not None: + # raise ValueError( + # "chunks must be an int, dict, 'auto', or None. " + # "Instead found %s. " % chunks + # ) + + # if chunks == "auto": + # try: + # import dask.array # noqa + # except ImportError: + # chunks = None + + # if not decode_cf: + # mask_and_scale = False + # decode_times = False + # concat_characters = False + # decode_coords = False + + # def maybe_decode_store(store, lock=False): + # ds = conventions.decode_cf( + # store, + # mask_and_scale=mask_and_scale, + # decode_times=decode_times, + # concat_characters=concat_characters, + # decode_coords=decode_coords, + # drop_variables=drop_variables, + # ) + + # # TODO: this is where we would apply caching + + # return ds + + # # Zarr supports a wide range of access modes, but for now xarray either + # # reads or writes from a store, never both. For open_zarr, we only read + # mode = "r" + # zarr_store = ZarrStore.open_group( + # store, + # mode=mode, + # synchronizer=synchronizer, + # group=group, + # consolidated=consolidated, + # ) + # ds = maybe_decode_store(zarr_store) + + # # auto chunking needs to be here and not in ZarrStore because variable + # # chunks do not survive decode_cf + # # return trivial case + # if not chunks: + # return ds + + # # adapted from Dataset.Chunk() + # if isinstance(chunks, int): + # chunks = dict.fromkeys(ds.dims, chunks) + + # if isinstance(chunks, tuple) and len(chunks) == len(ds.dims): + # chunks = dict(zip(ds.dims, chunks)) + + # def get_chunk(name, var, chunks): + # chunk_spec = dict(zip(var.dims, var.encoding.get("chunks"))) + + # # Coordinate labels aren't chunked + # if var.ndim == 1 and var.dims[0] == name: + # return chunk_spec + + # if chunks == "auto": + # return chunk_spec + + # for dim in var.dims: + # if dim in chunks: + # spec = chunks[dim] + # if isinstance(spec, int): + # spec = (spec,) + # if isinstance(spec, (tuple, list)) and chunk_spec[dim]: + # if any(s % chunk_spec[dim] for s in spec): + # warnings.warn( + # "Specified Dask chunks %r would " + # "separate Zarr chunk shape %r for " + # "dimension %r. This significantly " + # "degrades performance. Consider " + # "rechunking after loading instead." + # % (chunks[dim], chunk_spec[dim], dim), + # stacklevel=2, + # ) + # chunk_spec[dim] = chunks[dim] + # return chunk_spec + + # def maybe_chunk(name, var, chunks): + # from dask.base import tokenize + + # chunk_spec = get_chunk(name, var, chunks) + + # if (var.ndim > 0) and (chunk_spec is not None): + # # does this cause any data to be read? + # token2 = tokenize(name, var._data) + # name2 = "zarr-%s" % token2 + # var = var.chunk(chunk_spec, name=name2, lock=None) + # if overwrite_encoded_chunks and var.chunks is not None: + # var.encoding["chunks"] = tuple(x[0] for x in var.chunks) + # return var + # else: + # return var + + # variables = {k: maybe_chunk(k, v, chunks) for k, v in ds.variables.items()} + # return ds._replace_vars_and_dims(variables) + return ds From bae7f10da9dfe89f72db584fdeb433701b654434 Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Wed, 29 Apr 2020 15:58:27 -0400 Subject: [PATCH 48/95] added internal call to open_dataset from depricated open_zarr --- xarray/backends/zarr.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/xarray/backends/zarr.py b/xarray/backends/zarr.py index 949f878fb88..594e5c7f6fc 100644 --- a/xarray/backends/zarr.py +++ b/xarray/backends/zarr.py @@ -575,9 +575,23 @@ def open_zarr( warnings.warn( "open_zarr is deprecated. Use open_dataset(engine='zarr') instead.", DeprecationWarning, - ) + ) - ds = open_dataset() + ds = open_dataset( + store=store, + group=group, + decode_cf=decode_cf, + mask_and_scale=mask_and_scale, + synchronizer=synchronizer, + chunks=chunks, + decode_times=decode_times, + concat_characters=concat_characters, + decode_coords=decode_coords, + drop_variables=drop_variables, + consolidated=consolidated, + overwrite_encoded_chunks=overwrite_encoded_chunks, + **kwargs, + ) # if "auto_chunk" in kwargs: # auto_chunk = kwargs.pop("auto_chunk") From 37ff21492dac0ddf7d9958d20339806ee1497c19 Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Wed, 29 Apr 2020 16:00:37 -0400 Subject: [PATCH 49/95] defined engine=`zarr` --- xarray/backends/zarr.py | 1 + 1 file changed, 1 insertion(+) diff --git a/xarray/backends/zarr.py b/xarray/backends/zarr.py index 594e5c7f6fc..f8727c02d01 100644 --- a/xarray/backends/zarr.py +++ b/xarray/backends/zarr.py @@ -580,6 +580,7 @@ def open_zarr( ds = open_dataset( store=store, group=group, + engine="zarr", decode_cf=decode_cf, mask_and_scale=mask_and_scale, synchronizer=synchronizer, From b8b98f5452f6ef4ce6fda2c71508538a5b475bad Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Wed, 29 Apr 2020 16:06:34 -0400 Subject: [PATCH 50/95] correct argument for open_dataset --- xarray/backends/zarr.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xarray/backends/zarr.py b/xarray/backends/zarr.py index f8727c02d01..a61a9907927 100644 --- a/xarray/backends/zarr.py +++ b/xarray/backends/zarr.py @@ -578,7 +578,7 @@ def open_zarr( ) ds = open_dataset( - store=store, + filename_or_obj=store, group=group, engine="zarr", decode_cf=decode_cf, From 5c37329e2a9271f61209ab0260e5ffa32d1f2742 Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Wed, 29 Apr 2020 16:11:28 -0400 Subject: [PATCH 51/95] pass arguments as backend_kwargs --- xarray/backends/zarr.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/xarray/backends/zarr.py b/xarray/backends/zarr.py index a61a9907927..ed99c299384 100644 --- a/xarray/backends/zarr.py +++ b/xarray/backends/zarr.py @@ -577,21 +577,26 @@ def open_zarr( DeprecationWarning, ) + backend_kwargs = { + "synchronizer": synchronizer, + "consolidated": consolidated, + # "overwrite_encoded_chunks": overwrite_encoded_chunks, + **kwargs, + } + ds = open_dataset( filename_or_obj=store, group=group, - engine="zarr", decode_cf=decode_cf, mask_and_scale=mask_and_scale, - synchronizer=synchronizer, - chunks=chunks, decode_times=decode_times, concat_characters=concat_characters, decode_coords=decode_coords, + engine="zarr", + chunks=chunks, drop_variables=drop_variables, - consolidated=consolidated, overwrite_encoded_chunks=overwrite_encoded_chunks, - **kwargs, + **backend_kwargs, ) # if "auto_chunk" in kwargs: From 831f15b06d0e9c5f195f26e9121ac05190392088 Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Wed, 29 Apr 2020 16:14:35 -0400 Subject: [PATCH 52/95] pass backend_kwargs as argument --- xarray/backends/zarr.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xarray/backends/zarr.py b/xarray/backends/zarr.py index ed99c299384..803e450e54f 100644 --- a/xarray/backends/zarr.py +++ b/xarray/backends/zarr.py @@ -596,7 +596,7 @@ def open_zarr( chunks=chunks, drop_variables=drop_variables, overwrite_encoded_chunks=overwrite_encoded_chunks, - **backend_kwargs, + backend_kwargs=**backend_kwargs, ) # if "auto_chunk" in kwargs: From 80dd7dabb6a159c8ec6aa211912b89d6049aed9c Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Wed, 29 Apr 2020 16:16:17 -0400 Subject: [PATCH 53/95] typo --- xarray/backends/zarr.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xarray/backends/zarr.py b/xarray/backends/zarr.py index 803e450e54f..db4fddb1f53 100644 --- a/xarray/backends/zarr.py +++ b/xarray/backends/zarr.py @@ -596,7 +596,7 @@ def open_zarr( chunks=chunks, drop_variables=drop_variables, overwrite_encoded_chunks=overwrite_encoded_chunks, - backend_kwargs=**backend_kwargs, + backend_kwargs=backend_kwargs, ) # if "auto_chunk" in kwargs: From 4ebf3807548608f82252fb0ab3f84ae8bccdc8bb Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Wed, 29 Apr 2020 16:19:29 -0400 Subject: [PATCH 54/95] set `overwrite_enconded_chunks as backend_kwargs --- xarray/backends/api.py | 1 - xarray/backends/zarr.py | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/xarray/backends/api.py b/xarray/backends/api.py index b5c6dc32a3b..b8c256f2cb2 100644 --- a/xarray/backends/api.py +++ b/xarray/backends/api.py @@ -304,7 +304,6 @@ def open_dataset( drop_variables=None, backend_kwargs=None, use_cftime=None, - overwrite_encoded_chunks=False, ): """Open and decode a dataset from a file or file-like object. diff --git a/xarray/backends/zarr.py b/xarray/backends/zarr.py index db4fddb1f53..ffc59d65db0 100644 --- a/xarray/backends/zarr.py +++ b/xarray/backends/zarr.py @@ -580,7 +580,7 @@ def open_zarr( backend_kwargs = { "synchronizer": synchronizer, "consolidated": consolidated, - # "overwrite_encoded_chunks": overwrite_encoded_chunks, + "overwrite_encoded_chunks": overwrite_encoded_chunks, **kwargs, } @@ -595,7 +595,6 @@ def open_zarr( engine="zarr", chunks=chunks, drop_variables=drop_variables, - overwrite_encoded_chunks=overwrite_encoded_chunks, backend_kwargs=backend_kwargs, ) From 4ce3007362af4e22dbe5836e95bebd91cde734b7 Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Wed, 29 Apr 2020 16:25:57 -0400 Subject: [PATCH 55/95] do not pass as backend, use for chunking --- xarray/backends/api.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/xarray/backends/api.py b/xarray/backends/api.py index b8c256f2cb2..e3cd77385d2 100644 --- a/xarray/backends/api.py +++ b/xarray/backends/api.py @@ -474,6 +474,7 @@ def maybe_decode_store(store, lock=False): if engine == 'zarr': # on ZarrStore, mode='r', synchronizer=None, group=None, # consolidated=False. + overwrite_encoded_chunks = backend_kwargs.pop("overwrite_encoded_chunks", None) store = backends.ZarrStore.open_group( filename_or_obj, group=group, @@ -510,6 +511,7 @@ def maybe_decode_store(store, lock=False): elif engine == 'zarr': # on ZarrStore, mode='r', synchronizer=None, group=None, # consolidated=False. + overwrite_encoded_chunks = backend_kwargs.pop("overwrite_encoded_chunks", None) store = backends.ZarrStore.open_group( filename_or_obj, group=group, From 89a780b88caec075674fb97b899ff8e843efad96 Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Fri, 22 May 2020 11:27:18 -0400 Subject: [PATCH 56/95] removed commented code --- xarray/backends/zarr.py | 129 ++-------------------------------------- 1 file changed, 5 insertions(+), 124 deletions(-) diff --git a/xarray/backends/zarr.py b/xarray/backends/zarr.py index ffc59d65db0..17fb1af9b2f 100644 --- a/xarray/backends/zarr.py +++ b/xarray/backends/zarr.py @@ -577,11 +577,15 @@ def open_zarr( DeprecationWarning, ) + if kwargs: + raise TypeError( + "open_zarr() got unexpected keyword arguments " + ",".join(kwargs.keys()) + ) + backend_kwargs = { "synchronizer": synchronizer, "consolidated": consolidated, "overwrite_encoded_chunks": overwrite_encoded_chunks, - **kwargs, } ds = open_dataset( @@ -598,127 +602,4 @@ def open_zarr( backend_kwargs=backend_kwargs, ) - # if "auto_chunk" in kwargs: - # auto_chunk = kwargs.pop("auto_chunk") - # if auto_chunk: - # chunks = "auto" # maintain backwards compatibility - # else: - # chunks = None - - # warnings.warn( - # "auto_chunk is deprecated. Use chunks='auto' instead.", - # FutureWarning, - # stacklevel=2, - # ) - - # if kwargs: - # raise TypeError( - # "open_zarr() got unexpected keyword arguments " + ",".join(kwargs.keys()) - # ) - - # if not isinstance(chunks, (int, dict)): - # if chunks != "auto" and chunks is not None: - # raise ValueError( - # "chunks must be an int, dict, 'auto', or None. " - # "Instead found %s. " % chunks - # ) - - # if chunks == "auto": - # try: - # import dask.array # noqa - # except ImportError: - # chunks = None - - # if not decode_cf: - # mask_and_scale = False - # decode_times = False - # concat_characters = False - # decode_coords = False - - # def maybe_decode_store(store, lock=False): - # ds = conventions.decode_cf( - # store, - # mask_and_scale=mask_and_scale, - # decode_times=decode_times, - # concat_characters=concat_characters, - # decode_coords=decode_coords, - # drop_variables=drop_variables, - # ) - - # # TODO: this is where we would apply caching - - # return ds - - # # Zarr supports a wide range of access modes, but for now xarray either - # # reads or writes from a store, never both. For open_zarr, we only read - # mode = "r" - # zarr_store = ZarrStore.open_group( - # store, - # mode=mode, - # synchronizer=synchronizer, - # group=group, - # consolidated=consolidated, - # ) - # ds = maybe_decode_store(zarr_store) - - # # auto chunking needs to be here and not in ZarrStore because variable - # # chunks do not survive decode_cf - # # return trivial case - # if not chunks: - # return ds - - # # adapted from Dataset.Chunk() - # if isinstance(chunks, int): - # chunks = dict.fromkeys(ds.dims, chunks) - - # if isinstance(chunks, tuple) and len(chunks) == len(ds.dims): - # chunks = dict(zip(ds.dims, chunks)) - - # def get_chunk(name, var, chunks): - # chunk_spec = dict(zip(var.dims, var.encoding.get("chunks"))) - - # # Coordinate labels aren't chunked - # if var.ndim == 1 and var.dims[0] == name: - # return chunk_spec - - # if chunks == "auto": - # return chunk_spec - - # for dim in var.dims: - # if dim in chunks: - # spec = chunks[dim] - # if isinstance(spec, int): - # spec = (spec,) - # if isinstance(spec, (tuple, list)) and chunk_spec[dim]: - # if any(s % chunk_spec[dim] for s in spec): - # warnings.warn( - # "Specified Dask chunks %r would " - # "separate Zarr chunk shape %r for " - # "dimension %r. This significantly " - # "degrades performance. Consider " - # "rechunking after loading instead." - # % (chunks[dim], chunk_spec[dim], dim), - # stacklevel=2, - # ) - # chunk_spec[dim] = chunks[dim] - # return chunk_spec - - # def maybe_chunk(name, var, chunks): - # from dask.base import tokenize - - # chunk_spec = get_chunk(name, var, chunks) - - # if (var.ndim > 0) and (chunk_spec is not None): - # # does this cause any data to be read? - # token2 = tokenize(name, var._data) - # name2 = "zarr-%s" % token2 - # var = var.chunk(chunk_spec, name=name2, lock=None) - # if overwrite_encoded_chunks and var.chunks is not None: - # var.encoding["chunks"] = tuple(x[0] for x in var.chunks) - # return var - # else: - # return var - - # variables = {k: maybe_chunk(k, v, chunks) for k, v in ds.variables.items()} - # return ds._replace_vars_and_dims(variables) return ds From 6f6eb239d51bf30613df1be04a564138f6e8556d Mon Sep 17 00:00:00 2001 From: Miguel Jimenez-Urias Date: Fri, 22 May 2020 12:32:56 -0400 Subject: [PATCH 57/95] moved definitions to zarr backends --- xarray/backends/api.py | 51 ++--------------------------------------- xarray/backends/zarr.py | 42 +++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 49 deletions(-) diff --git a/xarray/backends/api.py b/xarray/backends/api.py index e3cd77385d2..7e81870d653 100644 --- a/xarray/backends/api.py +++ b/xarray/backends/api.py @@ -567,7 +567,7 @@ def maybe_decode_store(store, lock=False): ds2 = ds.chunk(chunks, name_prefix=name_prefix, token=token) ds2._file_obj = ds._file_obj - else: # file is zarr! + else: # adapted from Dataset.Chunk() and taken from open_zarr if not isinstance(chunks, (int, dict)): @@ -579,58 +579,11 @@ def maybe_decode_store(store, lock=False): if isinstance(chunks, int): chunks = dict.fromkeys(ds.dims, chunks) - if isinstance(chunks, tuple) and len(chunks) == len(ds.dims): - chunks = dict(zip(ds.dims, chunks)) - - def get_chunk(name, var, chunks): - chunk_spec = dict(zip(var.dims, var.encoding.get("chunks"))) - - # Coordinate labels aren't chunked - if var.ndim == 1 and var.dims[0] == name: - return chunk_spec - - if chunks == "auto": - return chunk_spec - - for dim in var.dims: - if dim in chunks: - spec = chunks[dim] - if isinstance(spec, int): - spec = (spec,) - if isinstance(spec, (tuple, list)) and chunk_spec[dim]: - if any(s % chunk_spec[dim] for s in spec): - warnings.warn( - "Specified Dask chunks %r would " - "separate Zarr chunk shape %r for " - "dimension %r. This significantly " - "degrades performance. Consider " - "rechunking after loading instead." - % (chunks[dim], chunk_spec[dim], dim), - stacklevel=2, - ) - chunk_spec[dim] = chunks[dim] - return chunk_spec - - def maybe_chunk(name, var, chunks): - chunk_spec = get_chunk(name, var, chunks) - - if (var.ndim > 0) and (chunk_spec is not None): - # does this cause any data to be read? - token2 = tokenize(name, var._data) - name2 = "zarr-%s" % token2 - var = var.chunk(chunk_spec, name=name2, lock=None) - if overwrite_encoded_chunks and var.chunks is not None: - var.encoding["chunks"] = tuple(x[0] for x in var.chunk) - return var - else: - return var - - variables = {k: maybe_chunk(k, v, chunks) for k, v in ds.variables.items()} + variables = {k: backends.ZarrStore.open_group.maybe_chunk(k, v, chunks) for k, v in ds.variables.items()} ds2 = ds._replace_vars_and_dims(variables) return ds2 else: ds2 = ds - return ds2 diff --git a/xarray/backends/zarr.py b/xarray/backends/zarr.py index 17fb1af9b2f..c6e4d1b362a 100644 --- a/xarray/backends/zarr.py +++ b/xarray/backends/zarr.py @@ -358,6 +358,48 @@ def encode_variable(self, variable): def encode_attribute(self, a): return encode_zarr_attr_value(a) + + def get_chunk(name, var, chunks): + chunk_spec = dict(zip(var.dims, var.encoding.get("chunks"))) + + # Coordinate labels aren't chunked + if var.ndim == 1 and var.dims[0] == name: + return chunk_spec + + if chunks == "auto": + return chunk_spec + + for dim in var.dims: + if dim in chunks: + spec = chunks[dim] + if isinstance(spec, int): + spec = (spec,) + if isinstance(spec, (tuple, list)) and chunk_spec[dim]: + if any(s % chunk_spec[dim] for s in spec): + warnings.warn( + "Specified Dask chunks %r would " + "separate Zarr chunk shape %r for " + "dimension %r. This significantly " + "degrades performance. Consider " + "rechunking after loading instead." + % (chunks[dim], chunk_spec[dim], dim), + stacklevel=2, + ) + chunk_spec[dim] = chunks[dim] + return chunk_spec + + def maybe_chunk(name, var, chunks): + chunk_spec = get_chunk(name, var, chunks) + + if (var.ndim > 0) and (chunk_spec is not None): + # does this cause any data to be read? + token2 = tokenize(name, var._data) + name2 = "zarr-%s" % token2 + var = var.chunk(chunk_spec, name=name2, lock=None) + if overwrite_encoded_chunks and var.chunks is not None: + var.encoding["chunks"] = tuple(x[0] for x in var.chunk) + return var + def store( self, variables, From 13be3e08a5810bb77c10f90330bcbb55888c362b Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Tue, 30 Jun 2020 10:46:03 +1200 Subject: [PATCH 58/95] Ensure class functions have necessary variables Was missing some 'self' and other kwarg variables. Also linted using black. --- xarray/backends/api.py | 28 ++++++++++++++++------------ xarray/backends/zarr.py | 11 ++++++----- 2 files changed, 22 insertions(+), 17 deletions(-) diff --git a/xarray/backends/api.py b/xarray/backends/api.py index 7e81870d653..aca9f003bf9 100644 --- a/xarray/backends/api.py +++ b/xarray/backends/api.py @@ -471,14 +471,14 @@ def maybe_decode_store(store, lock=False): store = filename_or_obj if isinstance(filename_or_obj, MutableMapping): - if engine == 'zarr': + if engine == "zarr": # on ZarrStore, mode='r', synchronizer=None, group=None, # consolidated=False. - overwrite_encoded_chunks = backend_kwargs.pop("overwrite_encoded_chunks", None) + overwrite_encoded_chunks = backend_kwargs.pop( + "overwrite_encoded_chunks", None + ) store = backends.ZarrStore.open_group( - filename_or_obj, - group=group, - **backend_kwargs + filename_or_obj, group=group, **backend_kwargs ) elif isinstance(filename_or_obj, str): @@ -508,14 +508,14 @@ def maybe_decode_store(store, lock=False): store = backends.CfGribDataStore( filename_or_obj, lock=lock, **backend_kwargs ) - elif engine == 'zarr': + elif engine == "zarr": # on ZarrStore, mode='r', synchronizer=None, group=None, # consolidated=False. - overwrite_encoded_chunks = backend_kwargs.pop("overwrite_encoded_chunks", None) + overwrite_encoded_chunks = backend_kwargs.pop( + "overwrite_encoded_chunks", None + ) store = backends.ZarrStore.open_group( - filename_or_obj, - group=group, - **backend_kwargs + filename_or_obj, group=group, **backend_kwargs ) else: if engine not in [None, "scipy", "h5netcdf"]: @@ -541,7 +541,8 @@ def maybe_decode_store(store, lock=False): if chunks is not None: from dask.base import tokenize - if engine != 'zarr': + + if engine != "zarr": # if passed an actual file path, augment the token with # the file modification time @@ -579,7 +580,10 @@ def maybe_decode_store(store, lock=False): if isinstance(chunks, int): chunks = dict.fromkeys(ds.dims, chunks) - variables = {k: backends.ZarrStore.open_group.maybe_chunk(k, v, chunks) for k, v in ds.variables.items()} + variables = { + k: store.maybe_chunk(k, v, chunks, overwrite_encoded_chunks) + for k, v in ds.variables.items() + } ds2 = ds._replace_vars_and_dims(variables) return ds2 else: diff --git a/xarray/backends/zarr.py b/xarray/backends/zarr.py index c6e4d1b362a..7a30c04e6b4 100644 --- a/xarray/backends/zarr.py +++ b/xarray/backends/zarr.py @@ -358,8 +358,7 @@ def encode_variable(self, variable): def encode_attribute(self, a): return encode_zarr_attr_value(a) - - def get_chunk(name, var, chunks): + def get_chunk(self, name, var, chunks): chunk_spec = dict(zip(var.dims, var.encoding.get("chunks"))) # Coordinate labels aren't chunked @@ -388,15 +387,17 @@ def get_chunk(name, var, chunks): chunk_spec[dim] = chunks[dim] return chunk_spec - def maybe_chunk(name, var, chunks): - chunk_spec = get_chunk(name, var, chunks) + def maybe_chunk(self, name, var, chunks, overwrite_encoded_chunks): + chunk_spec = self.get_chunk(name, var, chunks) if (var.ndim > 0) and (chunk_spec is not None): + from dask.base import tokenize + # does this cause any data to be read? token2 = tokenize(name, var._data) name2 = "zarr-%s" % token2 var = var.chunk(chunk_spec, name=name2, lock=None) - if overwrite_encoded_chunks and var.chunks is not None: + if open_kwargs["overwrite_encoded_chunks"] and var.chunks is not None: var.encoding["chunks"] = tuple(x[0] for x in var.chunk) return var From afbcf787f6ca736662d4d95285f88b2cee03185d Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Tue, 30 Jun 2020 11:11:39 +1200 Subject: [PATCH 59/95] Combine MutableMapping and Zarr engine condition As per https://github.com/pydata/xarray/pull/4003#discussion_r441978720. --- xarray/backends/api.py | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/xarray/backends/api.py b/xarray/backends/api.py index 78fb9e213af..154cfa6acda 100644 --- a/xarray/backends/api.py +++ b/xarray/backends/api.py @@ -476,16 +476,13 @@ def maybe_decode_store(store, lock=False): if isinstance(filename_or_obj, AbstractDataStore): store = filename_or_obj - if isinstance(filename_or_obj, MutableMapping): - if engine == "zarr": - # on ZarrStore, mode='r', synchronizer=None, group=None, - # consolidated=False. - overwrite_encoded_chunks = backend_kwargs.pop( - "overwrite_encoded_chunks", None - ) - store = backends.ZarrStore.open_group( - filename_or_obj, group=group, **backend_kwargs - ) + if isinstance(filename_or_obj, MutableMapping) and engine == "zarr": + # on ZarrStore, mode='r', synchronizer=None, group=None, + # consolidated=False. + overwrite_encoded_chunks = backend_kwargs.pop("overwrite_encoded_chunks", None) + store = backends.ZarrStore.open_group( + filename_or_obj, group=group, **backend_kwargs + ) elif isinstance(filename_or_obj, str): filename_or_obj = _normalize_path(filename_or_obj) From cba93c333ff3c8965976544d7b6ab9ac41335fca Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Tue, 30 Jun 2020 11:51:20 +1200 Subject: [PATCH 60/95] Pop out overwrite_encoded_chunks after shallow copy backend_kwargs dict Don't pop the backend_kwargs dict as per https://github.com/pydata/xarray/pull/4003#discussion_r441979810, make a shallow copy of the backend_kwargs dictionary first. Also removed `overwrite_encoded_chunks` as a top level kwarg of `open_dataset`. Instead, pass it to `backend_kwargs` when using engine="zarr". --- xarray/backends/api.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/xarray/backends/api.py b/xarray/backends/api.py index 154cfa6acda..610731568df 100644 --- a/xarray/backends/api.py +++ b/xarray/backends/api.py @@ -388,9 +388,6 @@ def open_dataset( {'days', 'hours', 'minutes', 'seconds', 'milliseconds', 'microseconds'} into timedelta objects. If False, leave them encoded as numbers. If None (default), assume the same value of decode_time. - overwrite_encoded_chunks: bool, optional - Whether to drop the zarr chunks encoded for each variable when a - dataset is loaded with specified chunk sizes (default: False) Returns @@ -479,9 +476,10 @@ def maybe_decode_store(store, lock=False): if isinstance(filename_or_obj, MutableMapping) and engine == "zarr": # on ZarrStore, mode='r', synchronizer=None, group=None, # consolidated=False. - overwrite_encoded_chunks = backend_kwargs.pop("overwrite_encoded_chunks", None) + _backend_kwargs = backend_kwargs.copy() + overwrite_encoded_chunks = _backend_kwargs.pop("overwrite_encoded_chunks", None) store = backends.ZarrStore.open_group( - filename_or_obj, group=group, **backend_kwargs + filename_or_obj, group=group, **_backend_kwargs ) elif isinstance(filename_or_obj, str): @@ -514,11 +512,12 @@ def maybe_decode_store(store, lock=False): elif engine == "zarr": # on ZarrStore, mode='r', synchronizer=None, group=None, # consolidated=False. - overwrite_encoded_chunks = backend_kwargs.pop( + _backend_kwargs = backend_kwargs.copy() + overwrite_encoded_chunks = _backend_kwargs.pop( "overwrite_encoded_chunks", None ) store = backends.ZarrStore.open_group( - filename_or_obj, group=group, **backend_kwargs + filename_or_obj, group=group, **_backend_kwargs ) else: if engine not in [None, "scipy", "h5netcdf"]: From bc740f602c855f14ad12d5d1a8e83a115bb7fd65 Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Tue, 30 Jun 2020 14:56:16 +1200 Subject: [PATCH 61/95] Fix some errors noticed by PEP8 --- xarray/backends/zarr.py | 2 +- xarray/tests/test_backends.py | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/xarray/backends/zarr.py b/xarray/backends/zarr.py index 92c5893fb3f..425b61afc81 100644 --- a/xarray/backends/zarr.py +++ b/xarray/backends/zarr.py @@ -397,7 +397,7 @@ def maybe_chunk(self, name, var, chunks, overwrite_encoded_chunks): token2 = tokenize(name, var._data) name2 = "zarr-%s" % token2 var = var.chunk(chunk_spec, name=name2, lock=None) - if open_kwargs["overwrite_encoded_chunks"] and var.chunks is not None: + if overwrite_encoded_chunks and var.chunks is not None: var.encoding["chunks"] = tuple(x[0] for x in var.chunk) return var diff --git a/xarray/tests/test_backends.py b/xarray/tests/test_backends.py index b1fe5375723..fb6f2b49aee 100644 --- a/xarray/tests/test_backends.py +++ b/xarray/tests/test_backends.py @@ -1537,7 +1537,9 @@ def save(self, dataset, store_target, **kwargs): @contextlib.contextmanager def open(self, store_target, **kwargs): - with xr.open_dataset(store_target, engine="zarr", chunks="auto" **kwargs) as ds: + with xr.open_dataset( + store_target, engine="zarr", chunks="auto", **kwargs + ) as ds: yield ds @contextlib.contextmanager @@ -1820,7 +1822,9 @@ def test_write_persistence_modes(self, group): ds.to_zarr(store_target, mode="w", group=group) ds_to_append.to_zarr(store_target, append_dim="time", group=group) original = xr.concat([ds, ds_to_append], dim="time") - actual = xr.open_dataset(store_target, group=group, engine="zarr", chunks="auto") + actual = xr.open_dataset( + store_target, group=group, engine="zarr", chunks="auto" + ) assert_identical(original, actual) def test_compressor_encoding(self): From 746caa62098c663e72f387d46cd2e4ba8910160f Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Tue, 30 Jun 2020 19:23:08 +1200 Subject: [PATCH 62/95] Reorganize code in backends api.py and actually test using engine zarr Merge at 1977ba16147f6c0dfaac8f9f720698b622a5acfd wasn't done very well. Reorganized the logic of the code to reduce the diff with xarray master, and ensure that the zarr backend tests actually have engine="zarr" in them. --- xarray/backends/api.py | 107 +++++++++++++++++----------------- xarray/tests/test_backends.py | 8 ++- 2 files changed, 59 insertions(+), 56 deletions(-) diff --git a/xarray/backends/api.py b/xarray/backends/api.py index 610731568df..468c2a91303 100644 --- a/xarray/backends/api.py +++ b/xarray/backends/api.py @@ -389,7 +389,6 @@ def open_dataset( into timedelta objects. If False, leave them encoded as numbers. If None (default), assume the same value of decode_time. - Returns ------- dataset : Dataset @@ -417,7 +416,6 @@ def open_dataset( "pseudonetcdf", "zarr", ] - if engine not in engines: raise ValueError( "unrecognized engine for open_dataset: {}\n" @@ -465,7 +463,59 @@ def maybe_decode_store(store, lock=False): _protect_dataset_variables_inplace(ds, cache) - return ds + if chunks is not None: + from dask.base import tokenize + + if engine != "zarr": + + # if passed an actual file path, augment the token with + # the file modification time + if isinstance(filename_or_obj, str) and not is_remote_uri( + filename_or_obj + ): + mtime = os.path.getmtime(filename_or_obj) + else: + mtime = None + token = tokenize( + filename_or_obj, + mtime, + group, + decode_cf, + mask_and_scale, + decode_times, + concat_characters, + decode_coords, + engine, + chunks, + drop_variables, + use_cftime, + ) + name_prefix = "open_dataset-%s" % token + ds2 = ds.chunk(chunks, name_prefix=name_prefix, token=token) + ds2._file_obj = ds._file_obj + + else: + + # adapted from Dataset.Chunk() and taken from open_zarr + if not isinstance(chunks, (int, dict)): + if chunks != "auto": + raise ValueError( + "chunks must be an int, dict, 'auto', or None. " + "Instead found %s. " % chunks + ) + if isinstance(chunks, int): + chunks = dict.fromkeys(ds.dims, chunks) + + variables = { + k: store.maybe_chunk(k, v, chunks, overwrite_encoded_chunks) + for k, v in ds.variables.items() + } + ds2 = ds._replace_vars_and_dims(variables) + return ds2 + else: + ds2 = ds + + return ds2 if isinstance(filename_or_obj, Path): filename_or_obj = str(filename_or_obj) @@ -541,56 +591,7 @@ def maybe_decode_store(store, lock=False): if isinstance(filename_or_obj, str): ds.encoding["source"] = filename_or_obj - if chunks is not None: - from dask.base import tokenize - - if engine != "zarr": - - # if passed an actual file path, augment the token with - # the file modification time - if isinstance(filename_or_obj, str) and not is_remote_uri(filename_or_obj): - mtime = os.path.getmtime(filename_or_obj) - else: - mtime = None - token = tokenize( - filename_or_obj, - mtime, - group, - decode_cf, - mask_and_scale, - decode_times, - concat_characters, - decode_coords, - engine, - chunks, - drop_variables, - use_cftime, - ) - name_prefix = "open_dataset-%s" % token - ds2 = ds.chunk(chunks, name_prefix=name_prefix, token=token) - ds2._file_obj = ds._file_obj - - else: - - # adapted from Dataset.Chunk() and taken from open_zarr - if not isinstance(chunks, (int, dict)): - if chunks != "auto": - raise ValueError( - "chunks must be an int, dict, 'auto', or None. " - "Instead found %s. " % chunks - ) - if isinstance(chunks, int): - chunks = dict.fromkeys(ds.dims, chunks) - - variables = { - k: store.maybe_chunk(k, v, chunks, overwrite_encoded_chunks) - for k, v in ds.variables.items() - } - ds2 = ds._replace_vars_and_dims(variables) - return ds2 - else: - ds2 = ds - return ds2 + return ds def open_dataarray( diff --git a/xarray/tests/test_backends.py b/xarray/tests/test_backends.py index fb6f2b49aee..e3b4c14f4d2 100644 --- a/xarray/tests/test_backends.py +++ b/xarray/tests/test_backends.py @@ -1915,11 +1915,11 @@ def test_check_encoding_is_consistent_after_append(self): encoding = {"da": {"compressor": compressor}} ds.to_zarr(store_target, mode="w", encoding=encoding) ds_to_append.to_zarr(store_target, append_dim="time") - actual_ds = xr.open_dataset(store_target, chunks="auto") + actual_ds = xr.open_dataset(store_target, engine="zarr", chunks="auto") actual_encoding = actual_ds["da"].encoding["compressor"] assert actual_encoding.get_config() == compressor.get_config() assert_identical( - xr.open_dataset(store_target, chunks="auto").compute(), + xr.open_dataset(store_target, engine="zarr", chunks="auto").compute(), xr.concat([ds, ds_to_append], dim="time"), ) @@ -1934,7 +1934,9 @@ def test_append_with_new_variable(self): ds_with_new_var.to_zarr(store_target, mode="a") combined = xr.concat([ds, ds_to_append], dim="time") combined["new_var"] = ds_with_new_var["new_var"] - assert_identical(combined, xr.open_dataset(store_target, chunks="auto")) + assert_identical( + combined, xr.open_dataset(store_target, engine="zarr", chunks="auto") + ) @requires_dask def test_to_zarr_compute_false_roundtrip(self): From ef2a0f6bf14cf55ad3fd9cb4ae8bff0a51ca059a Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Tue, 30 Jun 2020 20:14:48 +1200 Subject: [PATCH 63/95] Add back missing decode_timedelta kwarg --- xarray/backends/api.py | 1 + xarray/backends/zarr.py | 1 + 2 files changed, 2 insertions(+) diff --git a/xarray/backends/api.py b/xarray/backends/api.py index 468c2a91303..e1c35aebe36 100644 --- a/xarray/backends/api.py +++ b/xarray/backends/api.py @@ -489,6 +489,7 @@ def maybe_decode_store(store, lock=False): chunks, drop_variables, use_cftime, + decode_timedelta, ) name_prefix = "open_dataset-%s" % token ds2 = ds.chunk(chunks, name_prefix=name_prefix, token=token) diff --git a/xarray/backends/zarr.py b/xarray/backends/zarr.py index 425b61afc81..20988ff5fc3 100644 --- a/xarray/backends/zarr.py +++ b/xarray/backends/zarr.py @@ -656,6 +656,7 @@ def open_zarr( chunks=chunks, drop_variables=drop_variables, backend_kwargs=backend_kwargs, + decode_timedelta=decode_timedelta, ) return ds From a7b24ff81ade74a2ed1db1289fd070344dbf5d92 Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Tue, 30 Jun 2020 20:35:13 +1200 Subject: [PATCH 64/95] Add back a missing engine="zarr" to test_distributed.py --- xarray/tests/test_distributed.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/xarray/tests/test_distributed.py b/xarray/tests/test_distributed.py index 07d738f0bc5..7869bbc5a30 100644 --- a/xarray/tests/test_distributed.py +++ b/xarray/tests/test_distributed.py @@ -151,7 +151,9 @@ def test_dask_distributed_zarr_integration_test(loop, consolidated, compute): ) if not compute: maybe_futures.compute() - with xr.open_dataset(filename, chunks="auto", **read_kwargs) as restored: + with xr.open_dataset( + filename, chunks="auto", engine="zarr", **read_kwargs + ) as restored: assert isinstance(restored.var1.data, da.Array) computed = restored.compute() assert_allclose(original, computed) From 68237218890df8f74f5f070d0c79b46ee31b614a Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Tue, 30 Jun 2020 20:43:12 +1200 Subject: [PATCH 65/95] Ensure conditional statements make sense --- xarray/backends/api.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/xarray/backends/api.py b/xarray/backends/api.py index e1c35aebe36..0d451070cbd 100644 --- a/xarray/backends/api.py +++ b/xarray/backends/api.py @@ -464,9 +464,8 @@ def maybe_decode_store(store, lock=False): _protect_dataset_variables_inplace(ds, cache) if chunks is not None: - from dask.base import tokenize - if engine != "zarr": + from dask.base import tokenize # if passed an actual file path, augment the token with # the file modification time @@ -524,7 +523,7 @@ def maybe_decode_store(store, lock=False): if isinstance(filename_or_obj, AbstractDataStore): store = filename_or_obj - if isinstance(filename_or_obj, MutableMapping) and engine == "zarr": + elif isinstance(filename_or_obj, MutableMapping) and engine == "zarr": # on ZarrStore, mode='r', synchronizer=None, group=None, # consolidated=False. _backend_kwargs = backend_kwargs.copy() From 3fa73a72df78009d398caefffbc384c0dfb144e9 Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Tue, 30 Jun 2020 21:21:47 +1200 Subject: [PATCH 66/95] Fix UnboundLocalError on 'chunks' referenced before assignment Need to pass in chunks to maybe_decode_store, to resolve UnboundLocalError: local variable 'chunks' referenced before assignment. --- xarray/backends/api.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/xarray/backends/api.py b/xarray/backends/api.py index 0d451070cbd..f0b829c61ec 100644 --- a/xarray/backends/api.py +++ b/xarray/backends/api.py @@ -449,7 +449,7 @@ def open_dataset( if backend_kwargs is None: backend_kwargs = {} - def maybe_decode_store(store, lock=False): + def maybe_decode_store(store, chunks, lock=False): ds = conventions.decode_cf( store, mask_and_scale=mask_and_scale, @@ -511,7 +511,7 @@ def maybe_decode_store(store, lock=False): for k, v in ds.variables.items() } ds2 = ds._replace_vars_and_dims(variables) - return ds2 + else: ds2 = ds @@ -584,7 +584,7 @@ def maybe_decode_store(store, lock=False): ) with close_on_error(store): - ds = maybe_decode_store(store) + ds = maybe_decode_store(store, chunks) # Ensure source filename always stored in dataset object (GH issue #2550) if "source" not in ds.encoding: From 70fa30e115d7d7e3ace1937f08fe2b9645d5ab6f Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Tue, 30 Jun 2020 21:37:40 +1200 Subject: [PATCH 67/95] Run isort to fix import order --- xarray/backends/zarr.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/xarray/backends/zarr.py b/xarray/backends/zarr.py index 20988ff5fc3..ed6b5eba3be 100644 --- a/xarray/backends/zarr.py +++ b/xarray/backends/zarr.py @@ -7,9 +7,8 @@ from ..core.pycompat import integer_types from ..core.utils import FrozenDict, HiddenKeyDict from ..core.variable import Variable -from .common import AbstractWritableDataStore, BackendArray, _encode_variable_name - from .api import open_dataset +from .common import AbstractWritableDataStore, BackendArray, _encode_variable_name # need some special secret attributes to tell us the dimensions DIMENSION_KEY = "_ARRAY_DIMENSIONS" From cb6d06606a9f5a9418da57006c8e976d3d362def Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Wed, 1 Jul 2020 01:08:10 +1200 Subject: [PATCH 68/95] Fix tests where kwargs needs to be inside of backend_kwargs dict now Also temporarily silence deprecate_auto_chunk tests using pytest.raises(TypeError). May remove those fully later. --- xarray/tests/test_backends.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/xarray/tests/test_backends.py b/xarray/tests/test_backends.py index e3b4c14f4d2..c3370adf124 100644 --- a/xarray/tests/test_backends.py +++ b/xarray/tests/test_backends.py @@ -1537,9 +1537,7 @@ def save(self, dataset, store_target, **kwargs): @contextlib.contextmanager def open(self, store_target, **kwargs): - with xr.open_dataset( - store_target, engine="zarr", chunks="auto", **kwargs - ) as ds: + with xr.open_dataset(store_target, engine="zarr", **kwargs) as ds: yield ds @contextlib.contextmanager @@ -1561,7 +1559,7 @@ def test_roundtrip_consolidated(self): with self.roundtrip( expected, save_kwargs={"consolidated": True}, - open_kwargs={"consolidated": True}, + open_kwargs={"backend_kwargs": {"consolidated": True}}, ) as actual: self.check_dtypes_roundtripped(expected, actual) assert_identical(expected, actual) @@ -1614,7 +1612,10 @@ def test_manual_chunk(self): chunks = {"dim1": 2, "dim2": 3, "dim3": 5} rechunked = original.chunk(chunks=chunks) - open_kwargs = {"chunks": chunks, "overwrite_encoded_chunks": True} + open_kwargs = { + "chunks": chunks, + "backend_kwargs": {"overwrite_encoded_chunks": True}, + } with self.roundtrip(original, open_kwargs=open_kwargs) as actual: for k, v in actual.variables.items(): assert v.chunks == rechunked[k].chunks @@ -1653,7 +1654,7 @@ def test_warning_on_bad_chunks(self): @requires_dask def test_deprecate_auto_chunk(self): original = create_test_data().chunk() - with pytest.warns(FutureWarning): + with pytest.raises(TypeError): with self.roundtrip(original, open_kwargs={"auto_chunk": True}) as actual: for k, v in actual.variables.items(): # only index variables should be in memory @@ -1661,7 +1662,7 @@ def test_deprecate_auto_chunk(self): # chunk size should be the same as original assert v.chunks == original[k].chunks - with pytest.warns(FutureWarning): + with pytest.raises(TypeError): with self.roundtrip(original, open_kwargs={"auto_chunk": False}) as actual: for k, v in actual.variables.items(): # only index variables should be in memory From cd0b9efe5dd573b4234493a1c491dc11b13574cf Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Wed, 1 Jul 2020 10:07:27 +1200 Subject: [PATCH 69/95] Change open_zarr to open_dataset with engine="zarr" in io.rst --- doc/io.rst | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/doc/io.rst b/doc/io.rst index 4aac5e0b6f7..3643817ab82 100644 --- a/doc/io.rst +++ b/doc/io.rst @@ -898,11 +898,11 @@ can be omitted as it will internally be set to ``'a'``. To store variable length strings use ``dtype=object``. To read back a zarr dataset that has been created this way, we use the -:py:func:`open_zarr` method: +:py:func:`open_dataset` method with ``engine="zarr"``: .. ipython:: python - ds_zarr = xr.open_zarr("path/to/directory.zarr") + ds_zarr = xr.open_dataset("path/to/directory.zarr", engine="zarr") ds_zarr Cloud Storage Buckets @@ -919,7 +919,7 @@ pass to xarray:: # write to the bucket ds.to_zarr(store=gcsmap) # read it back - ds_gcs = xr.open_zarr(gcsmap) + ds_gcs = xr.open_dataset(gcsmap, engine="zarr") .. _Zarr: http://zarr.readthedocs.io/ .. _Amazon S3: https://aws.amazon.com/s3/ @@ -970,12 +970,12 @@ with consolidated metadata. To write consolidated metadata, pass the ``consolidated=True`` option to the :py:attr:`Dataset.to_zarr` method:: - ds.to_zarr('foo.zarr', consolidated=True) + ds.to_zarr("foo.zarr", consolidated=True) -To read a consolidated store, pass the ``consolidated=True`` option to -:py:func:`open_zarr`:: +To read a consolidated store, pass ``{"consolidated": True}`` to the +backend_kwargs option when using :py:func:`open_dataset` with ``engine="zarr"``:: - ds = xr.open_zarr('foo.zarr', consolidated=True) + ds = xr.open_dataset("foo.zarr", engine="zarr", backend_kwargs={"consolidated": True}) Xarray can't perform consolidation on pre-existing zarr datasets. This should be done directly from zarr, as described in the From f2c368adc478a30d43684c8471f1991da090e939 Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Wed, 1 Jul 2020 11:20:24 +1200 Subject: [PATCH 70/95] Fix test_distributed by wrapping consolidated in backend_kwargs dict Patches cb6d06606a9f5a9418da57006c8e976d3d362def. --- xarray/tests/test_distributed.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xarray/tests/test_distributed.py b/xarray/tests/test_distributed.py index 7869bbc5a30..7886e9fd0d4 100644 --- a/xarray/tests/test_distributed.py +++ b/xarray/tests/test_distributed.py @@ -135,8 +135,8 @@ def test_dask_distributed_read_netcdf_integration_test( def test_dask_distributed_zarr_integration_test(loop, consolidated, compute): if consolidated: pytest.importorskip("zarr", minversion="2.2.1.dev2") - write_kwargs = dict(consolidated=True) - read_kwargs = dict(consolidated=True) + write_kwargs = {"consolidated": True} + read_kwargs = {"backend_kwargs": {"consolidated": True}} else: write_kwargs = read_kwargs = {} chunks = {"dim1": 4, "dim2": 3, "dim3": 5} From 0530bbacb860ca7699d6a0408880d549193b89f0 Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Wed, 1 Jul 2020 12:29:39 +1200 Subject: [PATCH 71/95] Ensure read-only mode when using open_dataset with engine="zarr" --- xarray/backends/api.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/xarray/backends/api.py b/xarray/backends/api.py index f0b829c61ec..71ca4cbca44 100644 --- a/xarray/backends/api.py +++ b/xarray/backends/api.py @@ -524,12 +524,14 @@ def maybe_decode_store(store, chunks, lock=False): store = filename_or_obj elif isinstance(filename_or_obj, MutableMapping) and engine == "zarr": - # on ZarrStore, mode='r', synchronizer=None, group=None, - # consolidated=False. + # Zarr supports a wide range of access modes, but for now xarray either + # reads or writes from a store, never both. + # For open_dataset(engine="zarr"), we only read (i.e. mode="r") + mode = "r" _backend_kwargs = backend_kwargs.copy() overwrite_encoded_chunks = _backend_kwargs.pop("overwrite_encoded_chunks", None) store = backends.ZarrStore.open_group( - filename_or_obj, group=group, **_backend_kwargs + filename_or_obj, mode=mode, group=group, **_backend_kwargs ) elif isinstance(filename_or_obj, str): From 738303baa5f65bddaf80132e4a7b351f2a921d37 Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Wed, 1 Jul 2020 12:21:36 +1200 Subject: [PATCH 72/95] Turn chunks from "auto" to None if dask is not available --- xarray/backends/api.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/xarray/backends/api.py b/xarray/backends/api.py index 71ca4cbca44..141f8d2095e 100644 --- a/xarray/backends/api.py +++ b/xarray/backends/api.py @@ -503,6 +503,13 @@ def maybe_decode_store(store, chunks, lock=False): "chunks must be an int, dict, 'auto', or None. " "Instead found %s. " % chunks ) + + if chunks == "auto": + try: + import dask.array # noqa + except ImportError: + chunks = None + if isinstance(chunks, int): chunks = dict.fromkeys(ds.dims, chunks) From 38fc6f71df02bc9fe60b5cd88689a691e6627bea Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Wed, 1 Jul 2020 13:20:37 +1200 Subject: [PATCH 73/95] Add back a missing else statement in maybe_chunk --- xarray/backends/zarr.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/xarray/backends/zarr.py b/xarray/backends/zarr.py index ed6b5eba3be..6ed230bd2c2 100644 --- a/xarray/backends/zarr.py +++ b/xarray/backends/zarr.py @@ -398,7 +398,9 @@ def maybe_chunk(self, name, var, chunks, overwrite_encoded_chunks): var = var.chunk(chunk_spec, name=name2, lock=None) if overwrite_encoded_chunks and var.chunks is not None: var.encoding["chunks"] = tuple(x[0] for x in var.chunk) - return var + return var + else: + return var def store( self, From aca2012fb5f46e839c980781b50e8bf8b0562ed0 Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Wed, 1 Jul 2020 14:07:02 +1200 Subject: [PATCH 74/95] Allow xfail test_vectorized_indexing when has_dask Instead of when not has_dask. --- xarray/tests/test_backends.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xarray/tests/test_backends.py b/xarray/tests/test_backends.py index c3370adf124..3539b92debc 100644 --- a/xarray/tests/test_backends.py +++ b/xarray/tests/test_backends.py @@ -609,8 +609,8 @@ def test_orthogonal_indexing(self): assert_identical(expected, actual) @pytest.mark.xfail( - not has_dask, - reason="the code for indexing without dask handles negative steps in slices incorrectly", + has_dask, + reason="the code for indexing with dask handles negative steps in slices incorrectly", ) def test_vectorized_indexing(self): in_memory = create_test_data() From 0b34ab8f2a28984bcc1dbf2e459a9f81edd95f5e Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Wed, 1 Jul 2020 14:17:57 +1200 Subject: [PATCH 75/95] Typo on chunks arg in open_dataset --- xarray/backends/api.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xarray/backends/api.py b/xarray/backends/api.py index 141f8d2095e..3e899dbae8b 100644 --- a/xarray/backends/api.py +++ b/xarray/backends/api.py @@ -350,7 +350,7 @@ def open_dataset( is chosen based on available dependencies, with a preference for 'netcdf4'. chunks : int or dict, optional - If chunks is provided, it used to load the new dataset into dask + If chunks is provided, it is used to load the new dataset into dask arrays. ``chunks={}`` loads the dataset with dask using a single chunk for all arrays. lock : False or duck threading.Lock, optional From 6fbeadf41a1a547383da0c8f4499c99099dbdf97 Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Wed, 1 Jul 2020 15:01:32 +1200 Subject: [PATCH 76/95] Fix ZeroDivisionError by adding back check that chunks is not False Yet another if-statement that wasn't properly transferred from zarr.py to api.py. --- xarray/backends/api.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/xarray/backends/api.py b/xarray/backends/api.py index 3e899dbae8b..a8836b40963 100644 --- a/xarray/backends/api.py +++ b/xarray/backends/api.py @@ -494,7 +494,12 @@ def maybe_decode_store(store, chunks, lock=False): ds2 = ds.chunk(chunks, name_prefix=name_prefix, token=token) ds2._file_obj = ds._file_obj - else: + else: # if engine=="zarr": + # auto chunking needs to be here and not in ZarrStore because + # the variable chunks does not survive decode_cf + # return trivial case + if not chunks: # e.g. chunks is 0 or chunks is {} + return ds # adapted from Dataset.Chunk() and taken from open_zarr if not isinstance(chunks, (int, dict)): From 6f6aae7ddcd73d8c8e067c32a4320b15efd9e4c0 Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Wed, 1 Jul 2020 15:06:55 +1200 Subject: [PATCH 77/95] Fix a typo that was causing TypeError: 'method' object is not iterable --- xarray/backends/zarr.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xarray/backends/zarr.py b/xarray/backends/zarr.py index 6ed230bd2c2..a29db9ec042 100644 --- a/xarray/backends/zarr.py +++ b/xarray/backends/zarr.py @@ -397,7 +397,7 @@ def maybe_chunk(self, name, var, chunks, overwrite_encoded_chunks): name2 = "zarr-%s" % token2 var = var.chunk(chunk_spec, name=name2, lock=None) if overwrite_encoded_chunks and var.chunks is not None: - var.encoding["chunks"] = tuple(x[0] for x in var.chunk) + var.encoding["chunks"] = tuple(x[0] for x in var.chunks) return var else: return var From 543a1c721ab31e0e338748af0bd75ac92bb0bb42 Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Wed, 1 Jul 2020 16:12:13 +1200 Subject: [PATCH 78/95] Move the `if not chunks` block to after auto detect Patches logic of 6fbeadf41a1a547383da0c8f4499c99099dbdf97 to fix errors when Dask is not installed. --- xarray/backends/api.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/xarray/backends/api.py b/xarray/backends/api.py index a8836b40963..cd500561fe7 100644 --- a/xarray/backends/api.py +++ b/xarray/backends/api.py @@ -495,12 +495,6 @@ def maybe_decode_store(store, chunks, lock=False): ds2._file_obj = ds._file_obj else: # if engine=="zarr": - # auto chunking needs to be here and not in ZarrStore because - # the variable chunks does not survive decode_cf - # return trivial case - if not chunks: # e.g. chunks is 0 or chunks is {} - return ds - # adapted from Dataset.Chunk() and taken from open_zarr if not isinstance(chunks, (int, dict)): if chunks != "auto": @@ -515,6 +509,12 @@ def maybe_decode_store(store, chunks, lock=False): except ImportError: chunks = None + # auto chunking needs to be here and not in ZarrStore because + # the variable chunks does not survive decode_cf + # return trivial case + if not chunks: # e.g. chunks is 0, None or {} + return ds + if isinstance(chunks, int): chunks = dict.fromkeys(ds.dims, chunks) From aa4833f14b51953b4402c23a06ec75ee1d98cac7 Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Wed, 1 Jul 2020 16:43:17 +1200 Subject: [PATCH 79/95] Revert "Allow xfail test_vectorized_indexing when has_dask" This reverts commit aca2012fb5f46e839c980781b50e8bf8b0562ed0. --- xarray/tests/test_backends.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xarray/tests/test_backends.py b/xarray/tests/test_backends.py index 3539b92debc..c3370adf124 100644 --- a/xarray/tests/test_backends.py +++ b/xarray/tests/test_backends.py @@ -609,8 +609,8 @@ def test_orthogonal_indexing(self): assert_identical(expected, actual) @pytest.mark.xfail( - has_dask, - reason="the code for indexing with dask handles negative steps in slices incorrectly", + not has_dask, + reason="the code for indexing without dask handles negative steps in slices incorrectly", ) def test_vectorized_indexing(self): in_memory = create_test_data() From 6b99225fc17fe7c51423b30c66914709e5239a05 Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Wed, 1 Jul 2020 17:26:00 +1200 Subject: [PATCH 80/95] Temporarily xfail test_vectorized_indexing with or without dask --- xarray/tests/test_backends.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xarray/tests/test_backends.py b/xarray/tests/test_backends.py index c3370adf124..ddcefdf7084 100644 --- a/xarray/tests/test_backends.py +++ b/xarray/tests/test_backends.py @@ -609,8 +609,8 @@ def test_orthogonal_indexing(self): assert_identical(expected, actual) @pytest.mark.xfail( - not has_dask, - reason="the code for indexing without dask handles negative steps in slices incorrectly", + has_dask or not has_dask, + reason="the code for indexing with or without dask handles negative steps in slices incorrectly", ) def test_vectorized_indexing(self): in_memory = create_test_data() From 5571ffff9dd3d55220ae85265709dbbcd9d1c1e4 Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Wed, 1 Jul 2020 23:53:17 +1200 Subject: [PATCH 81/95] Put zarr in open_mfdataset engine list --- xarray/backends/api.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xarray/backends/api.py b/xarray/backends/api.py index cd500561fe7..ea843a2a84f 100644 --- a/xarray/backends/api.py +++ b/xarray/backends/api.py @@ -850,8 +850,8 @@ def open_mfdataset( If provided, call this function on each dataset prior to concatenation. You can find the file-name from which each dataset was loaded in ``ds.encoding['source']``. - engine : {'netcdf4', 'scipy', 'pydap', 'h5netcdf', 'pynio', 'cfgrib'}, \ - optional + engine : {'netcdf4', 'scipy', 'pydap', 'h5netcdf', 'pynio', 'cfgrib', + 'zarr'}, optional Engine to use when reading files. If not provided, the default engine is chosen based on available dependencies, with a preference for 'netcdf4'. From b9a239eff23378015896191c5ad237733a4795bd Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Thu, 2 Jul 2020 00:07:22 +1200 Subject: [PATCH 82/95] Test open_mfdataset_manyfiles with engine zarr Zarr objects are folders with seem to cause issues with closing, so added a try-except to api.py to catch failures in f.close(). Some tests failing when chunks=None because a numpy array is returned instead of a dask array. --- xarray/backends/api.py | 5 ++++- xarray/tests/test_backends.py | 7 +++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/xarray/backends/api.py b/xarray/backends/api.py index ea843a2a84f..f4ffd537c1f 100644 --- a/xarray/backends/api.py +++ b/xarray/backends/api.py @@ -774,7 +774,10 @@ def __init__(self, file_objs): def close(self): for f in self.file_objs: - f.close() + try: + f.close() + except AttributeError: # 'NoneType' object has no attribute 'close' + pass def open_mfdataset( diff --git a/xarray/tests/test_backends.py b/xarray/tests/test_backends.py index ddcefdf7084..109c4f3638b 100644 --- a/xarray/tests/test_backends.py +++ b/xarray/tests/test_backends.py @@ -2507,7 +2507,7 @@ def test_write_inconsistent_chunks(self): assert actual["y"].encoding["chunksizes"] == (100, 50) -@pytest.fixture(params=["scipy", "netcdf4", "h5netcdf", "pynio"]) +@pytest.fixture(params=["scipy", "netcdf4", "h5netcdf", "pynio", "zarr"]) def readengine(request): return request.param @@ -2567,7 +2567,10 @@ def test_open_mfdataset_manyfiles( # split into multiple sets of temp files for ii in original.x.values: subds = original.isel(x=slice(ii, ii + 1)) - subds.to_netcdf(tmpfiles[ii], engine=writeengine) + if writeengine != "zarr": + subds.to_netcdf(tmpfiles[ii], engine=writeengine) + else: # if writeengine == "zarr": + subds.to_zarr(store=tmpfiles[ii]) # check that calculation on opened datasets works properly with open_mfdataset( From e9c35f9f6bc428db7067e6cef6d9f2bc1e26037f Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Thu, 2 Jul 2020 15:02:46 +1200 Subject: [PATCH 83/95] Remember to set a ._file_obj when using Zarr Yet another logic error fixed, resolves the try-except hack in b9a239eff23378015896191c5ad237733a4795bd. --- xarray/backends/api.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/xarray/backends/api.py b/xarray/backends/api.py index f4ffd537c1f..353ea27456b 100644 --- a/xarray/backends/api.py +++ b/xarray/backends/api.py @@ -492,7 +492,6 @@ def maybe_decode_store(store, chunks, lock=False): ) name_prefix = "open_dataset-%s" % token ds2 = ds.chunk(chunks, name_prefix=name_prefix, token=token) - ds2._file_obj = ds._file_obj else: # if engine=="zarr": # adapted from Dataset.Chunk() and taken from open_zarr @@ -524,6 +523,7 @@ def maybe_decode_store(store, chunks, lock=False): } ds2 = ds._replace_vars_and_dims(variables) + ds2._file_obj = ds._file_obj else: ds2 = ds @@ -774,10 +774,7 @@ def __init__(self, file_objs): def close(self): for f in self.file_objs: - try: - f.close() - except AttributeError: # 'NoneType' object has no attribute 'close' - pass + f.close() def open_mfdataset( From 827e546155a157f64dfe1585bf09ad733bc52543 Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Thu, 2 Jul 2020 15:40:36 +1200 Subject: [PATCH 84/95] Expect np.ndarray when using open_mfdataset on Zarr with chunks None --- xarray/tests/test_backends.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/xarray/tests/test_backends.py b/xarray/tests/test_backends.py index 109c4f3638b..5d5a81fca05 100644 --- a/xarray/tests/test_backends.py +++ b/xarray/tests/test_backends.py @@ -2582,8 +2582,14 @@ def test_open_mfdataset_manyfiles( chunks=chunks, ) as actual: - # check that using open_mfdataset returns dask arrays for variables - assert isinstance(actual["foo"].data, dask_array_type) + try: + # check that using open_mfdataset returns dask arrays for variables + assert isinstance(actual["foo"].data, dask_array_type) + except AssertionError: + # A numpy array is returned instead of a dask array + # when reading with Zarr and chunks is None + if readengine == "zarr" and chunks is None: + assert isinstance(actual["foo"].data, np.ndarray) assert_identical(original, actual) From ad6f31e867dc11e33a02cd29476ab9111bb75c6b Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Fri, 3 Jul 2020 10:31:07 +1200 Subject: [PATCH 85/95] Add an entry to what's new for open_mfdataset with Zarr engine Plus a small formatting fix in open_mfdataset docstring --- doc/whats-new.rst | 3 +++ xarray/backends/api.py | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/doc/whats-new.rst b/doc/whats-new.rst index 43b248670f5..c86a294c99d 100644 --- a/doc/whats-new.rst +++ b/doc/whats-new.rst @@ -126,6 +126,9 @@ New Features :py:func:`xarray.decode_cf`) that allows to disable/enable the decoding of timedeltas independently of time decoding (:issue:`1621`) `Aureliana Barghini ` +- :py:func:`open_dataset` and :py:func:`open_mfdataset` + now works with ``engine="zarr"`` (:issue:`3668`, :pull:`4003`, :pull:`4187`). + By `Miguel Jimenez `_ and `Wei Ji Leong `_. Bug fixes ~~~~~~~~~ diff --git a/xarray/backends/api.py b/xarray/backends/api.py index 353ea27456b..2d0470bf8e9 100644 --- a/xarray/backends/api.py +++ b/xarray/backends/api.py @@ -850,7 +850,7 @@ def open_mfdataset( If provided, call this function on each dataset prior to concatenation. You can find the file-name from which each dataset was loaded in ``ds.encoding['source']``. - engine : {'netcdf4', 'scipy', 'pydap', 'h5netcdf', 'pynio', 'cfgrib', + engine : {'netcdf4', 'scipy', 'pydap', 'h5netcdf', 'pynio', 'cfgrib', \ 'zarr'}, optional Engine to use when reading files. If not provided, the default engine is chosen based on available dependencies, with a preference for From e2e1c816cb5776f6792d4444671ccdcdde14d171 Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Fri, 3 Jul 2020 11:48:42 +1200 Subject: [PATCH 86/95] Make zarr engine's custom chunk mechanism more in line with ds.chunk Slightly edited the token name string to start with 'xarray' and include chunks in tokenize. Also replace the deprecated `_replace_vars_and_dims` method with just `_replace`. --- xarray/backends/api.py | 2 +- xarray/backends/zarr.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/xarray/backends/api.py b/xarray/backends/api.py index 2d0470bf8e9..12445af7051 100644 --- a/xarray/backends/api.py +++ b/xarray/backends/api.py @@ -521,7 +521,7 @@ def maybe_decode_store(store, chunks, lock=False): k: store.maybe_chunk(k, v, chunks, overwrite_encoded_chunks) for k, v in ds.variables.items() } - ds2 = ds._replace_vars_and_dims(variables) + ds2 = ds._replace(variables) ds2._file_obj = ds._file_obj else: diff --git a/xarray/backends/zarr.py b/xarray/backends/zarr.py index a29db9ec042..fab36220b9b 100644 --- a/xarray/backends/zarr.py +++ b/xarray/backends/zarr.py @@ -393,8 +393,8 @@ def maybe_chunk(self, name, var, chunks, overwrite_encoded_chunks): from dask.base import tokenize # does this cause any data to be read? - token2 = tokenize(name, var._data) - name2 = "zarr-%s" % token2 + token2 = tokenize(name, var._data, chunks) + name2 = f"xarray-{name}-{token2}" var = var.chunk(chunk_spec, name=name2, lock=None) if overwrite_encoded_chunks and var.chunks is not None: var.encoding["chunks"] = tuple(x[0] for x in var.chunks) From dce4e7cd1fcf35fb7d3293bf6cc410646b588c64 Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Sat, 4 Jul 2020 10:05:01 +1200 Subject: [PATCH 87/95] Workaround problem where dask arrays aren't returned when chunks is None Revert 827e546155a157f64dfe1585bf09ad733bc52543 and workaround to get dask arrays by fixing some if-then logic in the code when `engine="zarr"` is involved. Things work fine when using chunks="auto", perhaps because the try `import dask.array` is needed to trigger loading into dask arrays? Also removed using chunks="auto" in some Zarr tests to simplify. --- xarray/backends/api.py | 120 ++++++++++++++++------------------ xarray/tests/test_backends.py | 24 ++----- 2 files changed, 65 insertions(+), 79 deletions(-) diff --git a/xarray/backends/api.py b/xarray/backends/api.py index 12445af7051..6a2023f3cc8 100644 --- a/xarray/backends/api.py +++ b/xarray/backends/api.py @@ -463,70 +463,66 @@ def maybe_decode_store(store, chunks, lock=False): _protect_dataset_variables_inplace(ds, cache) - if chunks is not None: - if engine != "zarr": - from dask.base import tokenize - - # if passed an actual file path, augment the token with - # the file modification time - if isinstance(filename_or_obj, str) and not is_remote_uri( - filename_or_obj - ): - mtime = os.path.getmtime(filename_or_obj) - else: - mtime = None - token = tokenize( - filename_or_obj, - mtime, - group, - decode_cf, - mask_and_scale, - decode_times, - concat_characters, - decode_coords, - engine, - chunks, - drop_variables, - use_cftime, - decode_timedelta, - ) - name_prefix = "open_dataset-%s" % token - ds2 = ds.chunk(chunks, name_prefix=name_prefix, token=token) - - else: # if engine=="zarr": - # adapted from Dataset.Chunk() and taken from open_zarr - if not isinstance(chunks, (int, dict)): - if chunks != "auto": - raise ValueError( - "chunks must be an int, dict, 'auto', or None. " - "Instead found %s. " % chunks - ) - - if chunks == "auto": - try: - import dask.array # noqa - except ImportError: - chunks = None - - # auto chunking needs to be here and not in ZarrStore because - # the variable chunks does not survive decode_cf - # return trivial case - if not chunks: # e.g. chunks is 0, None or {} - return ds - - if isinstance(chunks, int): - chunks = dict.fromkeys(ds.dims, chunks) - - variables = { - k: store.maybe_chunk(k, v, chunks, overwrite_encoded_chunks) - for k, v in ds.variables.items() - } - ds2 = ds._replace(variables) - - ds2._file_obj = ds._file_obj + if chunks is not None and engine != "zarr": + from dask.base import tokenize + + # if passed an actual file path, augment the token with + # the file modification time + if isinstance(filename_or_obj, str) and not is_remote_uri(filename_or_obj): + mtime = os.path.getmtime(filename_or_obj) + else: + mtime = None + token = tokenize( + filename_or_obj, + mtime, + group, + decode_cf, + mask_and_scale, + decode_times, + concat_characters, + decode_coords, + engine, + chunks, + drop_variables, + use_cftime, + decode_timedelta, + ) + name_prefix = "open_dataset-%s" % token + ds2 = ds.chunk(chunks, name_prefix=name_prefix, token=token) + + elif engine == "zarr": + # adapted from Dataset.Chunk() and taken from open_zarr + if not (isinstance(chunks, (int, dict)) or chunks is None): + if chunks != "auto": + raise ValueError( + "chunks must be an int, dict, 'auto', or None. " + "Instead found %s. " % chunks + ) + + if chunks == "auto": + try: + import dask.array # noqa + except ImportError: + chunks = None + + # auto chunking needs to be here and not in ZarrStore because + # the variable chunks does not survive decode_cf + # return trivial case + if not chunks: # e.g. chunks is 0, None or {} + return ds + + if isinstance(chunks, int): + chunks = dict.fromkeys(ds.dims, chunks) + + variables = { + k: store.maybe_chunk(k, v, chunks, overwrite_encoded_chunks) + for k, v in ds.variables.items() + } + ds2 = ds._replace(variables) + else: ds2 = ds - + ds2._file_obj = ds._file_obj return ds2 if isinstance(filename_or_obj, Path): diff --git a/xarray/tests/test_backends.py b/xarray/tests/test_backends.py index 5d5a81fca05..0b2908d03ad 100644 --- a/xarray/tests/test_backends.py +++ b/xarray/tests/test_backends.py @@ -1823,9 +1823,7 @@ def test_write_persistence_modes(self, group): ds.to_zarr(store_target, mode="w", group=group) ds_to_append.to_zarr(store_target, append_dim="time", group=group) original = xr.concat([ds, ds_to_append], dim="time") - actual = xr.open_dataset( - store_target, group=group, engine="zarr", chunks="auto" - ) + actual = xr.open_dataset(store_target, group=group, engine="zarr") assert_identical(original, actual) def test_compressor_encoding(self): @@ -1916,11 +1914,11 @@ def test_check_encoding_is_consistent_after_append(self): encoding = {"da": {"compressor": compressor}} ds.to_zarr(store_target, mode="w", encoding=encoding) ds_to_append.to_zarr(store_target, append_dim="time") - actual_ds = xr.open_dataset(store_target, engine="zarr", chunks="auto") + actual_ds = xr.open_dataset(store_target, engine="zarr") actual_encoding = actual_ds["da"].encoding["compressor"] assert actual_encoding.get_config() == compressor.get_config() assert_identical( - xr.open_dataset(store_target, engine="zarr", chunks="auto").compute(), + xr.open_dataset(store_target, engine="zarr").compute(), xr.concat([ds, ds_to_append], dim="time"), ) @@ -1935,9 +1933,7 @@ def test_append_with_new_variable(self): ds_with_new_var.to_zarr(store_target, mode="a") combined = xr.concat([ds, ds_to_append], dim="time") combined["new_var"] = ds_with_new_var["new_var"] - assert_identical( - combined, xr.open_dataset(store_target, engine="zarr", chunks="auto") - ) + assert_identical(combined, xr.open_dataset(store_target, engine="zarr")) @requires_dask def test_to_zarr_compute_false_roundtrip(self): @@ -2579,17 +2575,11 @@ def test_open_mfdataset_manyfiles( concat_dim="x", engine=readengine, parallel=parallel, - chunks=chunks, + chunks=chunks if (not chunks and readengine != "zarr") else "auto", ) as actual: - try: - # check that using open_mfdataset returns dask arrays for variables - assert isinstance(actual["foo"].data, dask_array_type) - except AssertionError: - # A numpy array is returned instead of a dask array - # when reading with Zarr and chunks is None - if readengine == "zarr" and chunks is None: - assert isinstance(actual["foo"].data, np.ndarray) + # check that using open_mfdataset returns dask arrays for variables + assert isinstance(actual["foo"].data, dask_array_type) assert_identical(original, actual) From 31ce87d75834ddab6466a013c1aae4d55a450b3a Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Sat, 4 Jul 2020 10:31:48 +1200 Subject: [PATCH 88/95] Default to chunks="auto" for Zarr tests to fix test_vectorized_indexing Revert hack in 6b99225fc17fe7c51423b30c66914709e5239a05 as test_vectorized_indexing now works on dask, specifically the negative slices test. It will still fail without dask, as was the behaviour before. Solution was to set `chunks="auto"` as the default when testing using `open_dataset` with `engine="zarr"`, similar to the default for `open_zarr`. Reverted some aspects of dce4e7cd1fcf35fb7d3293bf6cc410646b588c64 to ensure this `chunks="auto"`setting is visible throughout the Zarr test suite. --- xarray/tests/test_backends.py | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/xarray/tests/test_backends.py b/xarray/tests/test_backends.py index 0b2908d03ad..1b2173c55d0 100644 --- a/xarray/tests/test_backends.py +++ b/xarray/tests/test_backends.py @@ -609,8 +609,8 @@ def test_orthogonal_indexing(self): assert_identical(expected, actual) @pytest.mark.xfail( - has_dask or not has_dask, - reason="the code for indexing with or without dask handles negative steps in slices incorrectly", + not has_dask, + reason="the code for indexing without dask handles negative steps in slices incorrectly", ) def test_vectorized_indexing(self): in_memory = create_test_data() @@ -1547,7 +1547,7 @@ def roundtrip( if save_kwargs is None: save_kwargs = {} if open_kwargs is None: - open_kwargs = {} + open_kwargs = {"chunks": "auto"} with self.create_zarr_target() as store_target: self.save(data, store_target, **save_kwargs) with self.open(store_target, **open_kwargs) as ds: @@ -1823,7 +1823,9 @@ def test_write_persistence_modes(self, group): ds.to_zarr(store_target, mode="w", group=group) ds_to_append.to_zarr(store_target, append_dim="time", group=group) original = xr.concat([ds, ds_to_append], dim="time") - actual = xr.open_dataset(store_target, group=group, engine="zarr") + actual = xr.open_dataset( + store_target, group=group, chunks="auto", engine="zarr" + ) assert_identical(original, actual) def test_compressor_encoding(self): @@ -1914,11 +1916,11 @@ def test_check_encoding_is_consistent_after_append(self): encoding = {"da": {"compressor": compressor}} ds.to_zarr(store_target, mode="w", encoding=encoding) ds_to_append.to_zarr(store_target, append_dim="time") - actual_ds = xr.open_dataset(store_target, engine="zarr") + actual_ds = xr.open_dataset(store_target, chunks="auto", engine="zarr") actual_encoding = actual_ds["da"].encoding["compressor"] assert actual_encoding.get_config() == compressor.get_config() assert_identical( - xr.open_dataset(store_target, engine="zarr").compute(), + xr.open_dataset(store_target, chunks="auto", engine="zarr").compute(), xr.concat([ds, ds_to_append], dim="time"), ) @@ -1933,7 +1935,9 @@ def test_append_with_new_variable(self): ds_with_new_var.to_zarr(store_target, mode="a") combined = xr.concat([ds, ds_to_append], dim="time") combined["new_var"] = ds_with_new_var["new_var"] - assert_identical(combined, xr.open_dataset(store_target, engine="zarr")) + assert_identical( + combined, xr.open_dataset(store_target, chunks="auto", engine="zarr") + ) @requires_dask def test_to_zarr_compute_false_roundtrip(self): From cd783a5dbb2184a71f3f71bafb35b82be915c343 Mon Sep 17 00:00:00 2001 From: Wei Ji <23487320+weiji14@users.noreply.github.com> Date: Wed, 26 Aug 2020 13:51:27 +1200 Subject: [PATCH 89/95] Fix test by passing in chunk_store to backend_kwargs --- xarray/tests/test_backends.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xarray/tests/test_backends.py b/xarray/tests/test_backends.py index e761c0aa54e..9e845a504b8 100644 --- a/xarray/tests/test_backends.py +++ b/xarray/tests/test_backends.py @@ -1569,7 +1569,7 @@ def test_with_chunkstore(self): with self.create_zarr_target() as store_target, self.create_zarr_target() as chunk_store: save_kwargs = {"chunk_store": chunk_store} self.save(expected, store_target, **save_kwargs) - open_kwargs = {"chunk_store": chunk_store} + open_kwargs = {"backend_kwargs": {"chunk_store": chunk_store}} with self.open(store_target, **open_kwargs) as ds: assert_equal(ds, expected) From 7b34d1bb6084f7c9e70d6c070561f2e35ae1da64 Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Wed, 1 Jul 2020 10:07:27 +1200 Subject: [PATCH 90/95] Revert "Change open_zarr to open_dataset with engine="zarr" in io.rst" This reverts commit cd0b9efe5dd573b4234493a1c491dc11b13574cf. --- doc/io.rst | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/doc/io.rst b/doc/io.rst index 3643817ab82..4aac5e0b6f7 100644 --- a/doc/io.rst +++ b/doc/io.rst @@ -898,11 +898,11 @@ can be omitted as it will internally be set to ``'a'``. To store variable length strings use ``dtype=object``. To read back a zarr dataset that has been created this way, we use the -:py:func:`open_dataset` method with ``engine="zarr"``: +:py:func:`open_zarr` method: .. ipython:: python - ds_zarr = xr.open_dataset("path/to/directory.zarr", engine="zarr") + ds_zarr = xr.open_zarr("path/to/directory.zarr") ds_zarr Cloud Storage Buckets @@ -919,7 +919,7 @@ pass to xarray:: # write to the bucket ds.to_zarr(store=gcsmap) # read it back - ds_gcs = xr.open_dataset(gcsmap, engine="zarr") + ds_gcs = xr.open_zarr(gcsmap) .. _Zarr: http://zarr.readthedocs.io/ .. _Amazon S3: https://aws.amazon.com/s3/ @@ -970,12 +970,12 @@ with consolidated metadata. To write consolidated metadata, pass the ``consolidated=True`` option to the :py:attr:`Dataset.to_zarr` method:: - ds.to_zarr("foo.zarr", consolidated=True) + ds.to_zarr('foo.zarr', consolidated=True) -To read a consolidated store, pass ``{"consolidated": True}`` to the -backend_kwargs option when using :py:func:`open_dataset` with ``engine="zarr"``:: +To read a consolidated store, pass the ``consolidated=True`` option to +:py:func:`open_zarr`:: - ds = xr.open_dataset("foo.zarr", engine="zarr", backend_kwargs={"consolidated": True}) + ds = xr.open_zarr('foo.zarr', consolidated=True) Xarray can't perform consolidation on pre-existing zarr datasets. This should be done directly from zarr, as described in the From 40c4d461574b70c555b7fb7e42242e83cc97c9b6 Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Thu, 17 Sep 2020 15:15:10 +1200 Subject: [PATCH 91/95] Remove open_zarr DeprecationWarning Partially reverts b488363b32705e6bd0b174b927cb129d247f5d69. --- xarray/backends/zarr.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/xarray/backends/zarr.py b/xarray/backends/zarr.py index b3ae0262b25..2651f3148fd 100644 --- a/xarray/backends/zarr.py +++ b/xarray/backends/zarr.py @@ -648,11 +648,6 @@ def open_zarr( http://zarr.readthedocs.io/ """ - warnings.warn( - "open_zarr is deprecated. Use open_dataset(engine='zarr') instead.", - DeprecationWarning, - ) - if kwargs: raise TypeError( "open_zarr() got unexpected keyword arguments " + ",".join(kwargs.keys()) From 3b0e9b17fb72a4fb45feac9ce8237f502e9ba3b6 Mon Sep 17 00:00:00 2001 From: Wei Ji <23487320+weiji14@users.noreply.github.com> Date: Mon, 21 Sep 2020 19:11:27 +1200 Subject: [PATCH 92/95] Update open_dataset docstring to specify chunk options for zarr engine --- xarray/backends/api.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/xarray/backends/api.py b/xarray/backends/api.py index 7d4b6dea37c..2df822f4cd0 100644 --- a/xarray/backends/api.py +++ b/xarray/backends/api.py @@ -352,7 +352,10 @@ def open_dataset( chunks : int or dict, optional If chunks is provided, it is used to load the new dataset into dask arrays. ``chunks={}`` loads the dataset with dask using a single - chunk for all arrays. + chunk for all arrays. When using ``engine="zarr"`, if `chunks='auto'`, + dask chunks are created based on the variable's zarr chunks, and if + `chunks=None`, zarr array data will lazily convert to numpy arrays upon + access. This accepts all the chunk specifications as Dask does. lock : False or lock-like, optional Resource lock to use when reading data from disk. Only relevant when using dask or another form of parallelism. By default, appropriate From d4398d4995b3c155735bb86880de941a926c673e Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Tue, 22 Sep 2020 09:20:17 +1200 Subject: [PATCH 93/95] Let only chunks = None return non-chunked arrays --- xarray/backends/api.py | 2 +- xarray/tests/test_backends.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/xarray/backends/api.py b/xarray/backends/api.py index 2df822f4cd0..2c8484581a0 100644 --- a/xarray/backends/api.py +++ b/xarray/backends/api.py @@ -511,7 +511,7 @@ def maybe_decode_store(store, chunks, lock=False): # auto chunking needs to be here and not in ZarrStore because # the variable chunks does not survive decode_cf # return trivial case - if not chunks: # e.g. chunks is 0, None or {} + if chunks is None: return ds if isinstance(chunks, int): diff --git a/xarray/tests/test_backends.py b/xarray/tests/test_backends.py index 16f810d68cc..19d0db14548 100644 --- a/xarray/tests/test_backends.py +++ b/xarray/tests/test_backends.py @@ -1614,8 +1614,8 @@ def test_auto_chunk(self): def test_manual_chunk(self): original = create_test_data().chunk({"dim1": 3, "dim2": 4, "dim3": 3}) - # All of these should return non-chunked arrays - NO_CHUNKS = (None, 0, {}) + # Using chunks = None should return non-chunked arrays + NO_CHUNKS = (None,) for no_chunk in NO_CHUNKS: open_kwargs = {"chunks": no_chunk} with self.roundtrip(original, open_kwargs=open_kwargs) as actual: From da7baae76cddb9c4b90d9b1437dee8e68532c760 Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Tue, 22 Sep 2020 11:38:10 +1200 Subject: [PATCH 94/95] Remove for-loop in test_manual_chunk since testing only one no_chunk --- xarray/tests/test_backends.py | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/xarray/tests/test_backends.py b/xarray/tests/test_backends.py index 19d0db14548..f9cc802f2c8 100644 --- a/xarray/tests/test_backends.py +++ b/xarray/tests/test_backends.py @@ -1615,15 +1615,13 @@ def test_manual_chunk(self): original = create_test_data().chunk({"dim1": 3, "dim2": 4, "dim3": 3}) # Using chunks = None should return non-chunked arrays - NO_CHUNKS = (None,) - for no_chunk in NO_CHUNKS: - open_kwargs = {"chunks": no_chunk} - with self.roundtrip(original, open_kwargs=open_kwargs) as actual: - for k, v in actual.variables.items(): - # only index variables should be in memory - assert v._in_memory == (k in actual.dims) - # there should be no chunks - assert v.chunks is None + open_kwargs = {"chunks": None} + with self.roundtrip(original, open_kwargs=open_kwargs) as actual: + for k, v in actual.variables.items(): + # only index variables should be in memory + assert v._in_memory == (k in actual.dims) + # there should be no chunks + assert v.chunks is None # uniform arrays for i in range(2, 6): From 48dae50cbaf56aa6bf4244b1976da13e65ce62b8 Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Tue, 22 Sep 2020 11:43:27 +1200 Subject: [PATCH 95/95] Update open_dataset docstring to remove mention of chunks=None with Zarr --- xarray/backends/api.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/xarray/backends/api.py b/xarray/backends/api.py index 2c8484581a0..cd1ee88f504 100644 --- a/xarray/backends/api.py +++ b/xarray/backends/api.py @@ -352,10 +352,9 @@ def open_dataset( chunks : int or dict, optional If chunks is provided, it is used to load the new dataset into dask arrays. ``chunks={}`` loads the dataset with dask using a single - chunk for all arrays. When using ``engine="zarr"`, if `chunks='auto'`, - dask chunks are created based on the variable's zarr chunks, and if - `chunks=None`, zarr array data will lazily convert to numpy arrays upon - access. This accepts all the chunk specifications as Dask does. + chunk for all arrays. When using ``engine="zarr"`, setting + `chunks='auto'` will create dask chunks based on the variable's zarr + chunks. lock : False or lock-like, optional Resource lock to use when reading data from disk. Only relevant when using dask or another form of parallelism. By default, appropriate