diff --git a/driver/pace/driver/driver.py b/driver/pace/driver/driver.py index 0ef3263b..56f7e53c 100644 --- a/driver/pace/driver/driver.py +++ b/driver/pace/driver/driver.py @@ -24,7 +24,11 @@ # TODO: move update_atmos_state into pace.driver from pace.stencils import update_atmos_state -from pace.util.communicator import CubedSphereCommunicator +from pace.util.communicator import ( + Communicator, + CubedSphereCommunicator, + TileCommunicator, +) from pace.util.logging import pace_log from . import diagnostics @@ -90,6 +94,7 @@ class DriverConfig: nz: int layout: Tuple[int, int] dt_atmos: float + grid_type: Optional[int] = 0 grid_config: GridInitializerSelector = dataclasses.field( default_factory=lambda: GridInitializerSelector( type="generated", config=GeneratedGridConfig() @@ -158,7 +163,7 @@ def apply_tendencies(self) -> bool: def get_grid( self, - communicator: pace.util.CubedSphereCommunicator, + communicator: pace.util.Communicator, quantity_factory: Optional[pace.util.QuantityFactory] = None, ) -> Tuple[ pace.util.grid.DampingCoefficients, @@ -187,7 +192,7 @@ def get_grid( def get_driver_state( self, - communicator: pace.util.CubedSphereCommunicator, + communicator: pace.util.Communicator, damping_coefficients: pace.util.grid.DampingCoefficients, driver_grid_data: pace.util.grid.DriverGridData, grid_data: pace.util.grid.GridData, @@ -213,7 +218,7 @@ def get_driver_state( if stencil_factory is None: grid_indexing = ( pace.dsl.stencil.GridIndexing.from_sizer_and_communicator( - sizer=sizer, cube=communicator + sizer=sizer, comm=communicator ) ) stencil_factory = pace.dsl.StencilFactory( @@ -275,7 +280,7 @@ def from_dict(cls, kwargs: Dict[str, Any]) -> "DriverConfig": ) grid_type = kwargs["grid_config"].config.grid_type # Copy grid_type to the DycoreConfig if it's not the default value - if grid_type != 0: + if grid_type != 0: kwargs["dycore_config"].grid_type = grid_type if ( @@ -404,11 +409,19 @@ def __init__( if self.config.performance_config.collect_communication else None ) - communicator = CubedSphereCommunicator.from_layout( - comm=self.comm, - layout=self.config.layout, - timer=comm_timer, - ) + communicator: Communicator + if self.config.grid_type <= 3: + communicator = CubedSphereCommunicator.from_layout( + comm=self.comm, + layout=self.config.layout, + timer=comm_timer, + ) + else: + communicator = TileCommunicator.from_layout( + comm=self.comm, + layout=self.config.layout, + timer=comm_timer, + ) self._update_driver_config_with_communicator(communicator) if self.config.stencil_config.compilation_config.run_mode == RunMode.Build: @@ -544,7 +557,7 @@ def exit_instead_of_build(self): pace_log.info("initialization of the object done") def _update_driver_config_with_communicator( - self, communicator: CubedSphereCommunicator + self, communicator: Communicator ) -> None: dace_config = DaceConfig( communicator=communicator, @@ -707,7 +720,7 @@ def log_subtile_location(partitioner: pace.util.TilePartitioner, rank: int): def _setup_factories( config: DriverConfig, - communicator: pace.util.CubedSphereCommunicator, + communicator: pace.util.Communicator, stencil_compare_comm, ) -> Tuple[pace.util.QuantityFactory, pace.dsl.StencilFactory]: """ @@ -735,7 +748,7 @@ def _setup_factories( ) grid_indexing = pace.dsl.stencil.GridIndexing.from_sizer_and_communicator( - sizer=sizer, cube=communicator + sizer=sizer, comm=communicator ) quantity_factory = pace.util.QuantityFactory.from_backend( sizer, backend=config.stencil_config.compilation_config.backend diff --git a/driver/pace/driver/grid.py b/driver/pace/driver/grid.py index c184d566..9d13158b 100644 --- a/driver/pace/driver/grid.py +++ b/driver/pace/driver/grid.py @@ -10,7 +10,7 @@ import pace.stencils import pace.util.grid from pace.stencils.testing import TranslateGrid -from pace.util import CubedSphereCommunicator, QuantityFactory +from pace.util import Communicator, QuantityFactory from pace.util.grid import ( DampingCoefficients, DriverGridData, @@ -35,7 +35,7 @@ class GridInitializer(abc.ABC): def get_grid( self, quantity_factory: pace.util.QuantityFactory, - communicator: pace.util.CubedSphereCommunicator, + communicator: pace.util.Communicator, ) -> Tuple[DampingCoefficients, DriverGridData, GridData]: ... @@ -62,7 +62,7 @@ def register(cls, type_name): def get_grid( self, quantity_factory: QuantityFactory, - communicator: CubedSphereCommunicator, + communicator: Communicator, ) -> Tuple[DampingCoefficients, DriverGridData, GridData]: return self.config.get_grid( quantity_factory=quantity_factory, communicator=communicator @@ -103,7 +103,7 @@ class GeneratedGridConfig(GridInitializer): def get_grid( self, quantity_factory: QuantityFactory, - communicator: CubedSphereCommunicator, + communicator: Communicator, ) -> Tuple[DampingCoefficients, DriverGridData, GridData]: metric_terms = MetricTerms( @@ -158,7 +158,7 @@ def _f90_namelist(self) -> f90nml.Namelist: def _namelist(self) -> Namelist: return Namelist.from_f90nml(self._f90_namelist) - def _serializer(self, communicator: pace.util.CubedSphereCommunicator): + def _serializer(self, communicator: pace.util.Communicator): import serialbox serializer = serialbox.Serializer( @@ -170,7 +170,7 @@ def _serializer(self, communicator: pace.util.CubedSphereCommunicator): def _get_serialized_grid( self, - communicator: pace.util.CubedSphereCommunicator, + communicator: pace.util.Communicator, backend: str, ) -> pace.stencils.testing.grid.Grid: # type: ignore ser = self._serializer(communicator) @@ -182,7 +182,7 @@ def _get_serialized_grid( def get_grid( self, quantity_factory: QuantityFactory, - communicator: CubedSphereCommunicator, + communicator: Communicator, ) -> Tuple[DampingCoefficients, DriverGridData, GridData]: backend = quantity_factory.empty( diff --git a/driver/pace/driver/initialization.py b/driver/pace/driver/initialization.py index 2b6471a8..f707d013 100644 --- a/driver/pace/driver/initialization.py +++ b/driver/pace/driver/initialization.py @@ -37,7 +37,7 @@ def start_time(self) -> datetime: def get_driver_state( self, quantity_factory: pace.util.QuantityFactory, - communicator: pace.util.CubedSphereCommunicator, + communicator: pace.util.Communicator, damping_coefficients: pace.util.grid.DampingCoefficients, driver_grid_data: pace.util.grid.DriverGridData, grid_data: pace.util.grid.GridData, @@ -74,7 +74,7 @@ def start_time(self) -> datetime: def get_driver_state( self, quantity_factory: pace.util.QuantityFactory, - communicator: pace.util.CubedSphereCommunicator, + communicator: pace.util.Communicator, damping_coefficients: pace.util.grid.DampingCoefficients, driver_grid_data: pace.util.grid.DriverGridData, grid_data: pace.util.grid.GridData, @@ -105,11 +105,12 @@ class BaroclinicInit(Initializer): def get_driver_state( self, quantity_factory: pace.util.QuantityFactory, - communicator: pace.util.CubedSphereCommunicator, + communicator: pace.util.Communicator, damping_coefficients: pace.util.grid.DampingCoefficients, driver_grid_data: pace.util.grid.DriverGridData, grid_data: pace.util.grid.GridData, ) -> DriverState: + assert isinstance(communicator, pace.util.CubedSphereCommunicator) dycore_state = baroclinic_init.init_baroclinic_state( grid_data=grid_data, quantity_factory=quantity_factory, @@ -149,12 +150,12 @@ class TropicalCycloneConfig(Initializer): def get_driver_state( self, quantity_factory: pace.util.QuantityFactory, - communicator: pace.util.CubedSphereCommunicator, + communicator: pace.util.Communicator, damping_coefficients: pace.util.grid.DampingCoefficients, driver_grid_data: pace.util.grid.DriverGridData, grid_data: pace.util.grid.GridData, ) -> DriverState: - + assert isinstance(communicator, pace.util.CubedSphereCommunicator) dycore_state = tc_init.init_tc_state( grid_data=grid_data, quantity_factory=quantity_factory, @@ -198,7 +199,7 @@ class RestartInit(Initializer): def get_driver_state( self, quantity_factory: pace.util.QuantityFactory, - communicator: pace.util.CubedSphereCommunicator, + communicator: pace.util.Communicator, damping_coefficients: pace.util.grid.DampingCoefficients, driver_grid_data: pace.util.grid.DriverGridData, grid_data: pace.util.grid.GridData, @@ -247,7 +248,7 @@ def start_time(self) -> datetime: def get_driver_state( self, quantity_factory: pace.util.QuantityFactory, - communicator: pace.util.CubedSphereCommunicator, + communicator: pace.util.Communicator, damping_coefficients: pace.util.grid.DampingCoefficients, driver_grid_data: pace.util.grid.DriverGridData, grid_data: pace.util.grid.GridData, @@ -296,7 +297,7 @@ def _namelist(self) -> Namelist: def _get_serialized_grid( self, - communicator: pace.util.CubedSphereCommunicator, + communicator: pace.util.Communicator, backend: str, ) -> pace.stencils.testing.grid.Grid: # type: ignore ser = self._serializer(communicator) @@ -305,7 +306,7 @@ def _get_serialized_grid( ).python_grid() return grid - def _serializer(self, communicator: pace.util.CubedSphereCommunicator): + def _serializer(self, communicator: pace.util.Communicator): import serialbox serializer = serialbox.Serializer( @@ -318,7 +319,7 @@ def _serializer(self, communicator: pace.util.CubedSphereCommunicator): def get_driver_state( self, quantity_factory: pace.util.QuantityFactory, - communicator: pace.util.CubedSphereCommunicator, + communicator: pace.util.Communicator, damping_coefficients: pace.util.grid.DampingCoefficients, driver_grid_data: pace.util.grid.DriverGridData, grid_data: pace.util.grid.GridData, @@ -345,7 +346,7 @@ def get_driver_state( def _initialize_dycore_state( self, - communicator: pace.util.CubedSphereCommunicator, + communicator: pace.util.Communicator, backend: str, ) -> fv3core.DycoreState: @@ -396,7 +397,7 @@ class PredefinedStateInit(Initializer): def get_driver_state( self, quantity_factory: pace.util.QuantityFactory, - communicator: pace.util.CubedSphereCommunicator, + communicator: pace.util.Communicator, damping_coefficients: pace.util.grid.DampingCoefficients, driver_grid_data: pace.util.grid.DriverGridData, grid_data: pace.util.grid.GridData, diff --git a/driver/pace/driver/state.py b/driver/pace/driver/state.py index cccdcba7..54241b1d 100644 --- a/driver/pace/driver/state.py +++ b/driver/pace/driver/state.py @@ -77,7 +77,7 @@ def load_state_from_restart( grid_data: pace.util.grid.GridData, ) -> "DriverState": comm = driver_config.comm_config.get_comm() - communicator = pace.util.CubedSphereCommunicator.from_layout( + communicator = pace.util.Communicator.from_layout( comm=comm, layout=driver_config.layout ) sizer = pace.util.SubtileGridSizer.from_tile_params( @@ -172,7 +172,7 @@ def _restart_driver_state( path: str, rank: int, quantity_factory: pace.util.QuantityFactory, - communicator: pace.util.CubedSphereCommunicator, + communicator: pace.util.Communicator, damping_coefficients: pace.util.grid.DampingCoefficients, driver_grid_data: pace.util.grid.DriverGridData, grid_data: pace.util.grid.GridData, diff --git a/dsl/pace/dsl/dace/build.py b/dsl/pace/dsl/dace/build.py index 7d8f3db2..f2939d80 100644 --- a/dsl/pace/dsl/dace/build.py +++ b/dsl/pace/dsl/dace/build.py @@ -31,7 +31,7 @@ def unblock_waiting_tiles(comm, sdfg_path: str) -> None: comm.send(sdfg_path, dest=tile * tilesize + comm.Get_rank()) -def get_target_rank(rank: int, partitioner: pace.util.CubedSpherePartitioner): +def get_target_rank(rank: int, partitioner: pace.util.Partitioner): """From my rank & the current partitioner we determine which rank we should read from. For all layout >= 3,3 this presumes build has been done on a diff --git a/dsl/pace/dsl/dace/dace_config.py b/dsl/pace/dsl/dace/dace_config.py index e6f3e7df..37910de3 100644 --- a/dsl/pace/dsl/dace/dace_config.py +++ b/dsl/pace/dsl/dace/dace_config.py @@ -7,7 +7,7 @@ from pace.dsl.gt4py_utils import is_gpu_backend from pace.util._optional_imports import cupy as cp -from pace.util.communicator import CubedSphereCommunicator +from pace.util.communicator import Communicator # This can be turned on to revert compilation for orchestration @@ -57,7 +57,7 @@ def __call__(self): class DaceConfig: def __init__( self, - communicator: Optional[CubedSphereCommunicator], + communicator: Optional[Communicator], backend: str, tile_nx: int = 0, tile_nz: int = 0, diff --git a/dsl/pace/dsl/dace/wrapped_halo_exchange.py b/dsl/pace/dsl/dace/wrapped_halo_exchange.py index ad88fb11..7d7eed44 100644 --- a/dsl/pace/dsl/dace/wrapped_halo_exchange.py +++ b/dsl/pace/dsl/dace/wrapped_halo_exchange.py @@ -2,7 +2,7 @@ from typing import List, Optional from pace.dsl.dace.orchestration import dace_inhibitor -from pace.util.communicator import CubedSphereCommunicator +from pace.util.communicator import Communicator from pace.util.halo_updater import HaloUpdater @@ -21,7 +21,7 @@ def __init__( state, qty_x_names: List[str], qty_y_names: List[str] = None, - comm: Optional[CubedSphereCommunicator] = None, + comm: Optional[Communicator] = None, ) -> None: self._updater = updater self._state = state diff --git a/dsl/pace/dsl/stencil.py b/dsl/pace/dsl/stencil.py index 26454ef8..29a66e15 100644 --- a/dsl/pace/dsl/stencil.py +++ b/dsl/pace/dsl/stencil.py @@ -595,7 +595,7 @@ def domain(self, domain): @classmethod def from_sizer_and_communicator( - cls, sizer: pace.util.GridSizer, cube: pace.util.CubedSphereCommunicator + cls, sizer: pace.util.GridSizer, comm: pace.util.Communicator ) -> "GridIndexing": # TODO: if this class is refactored to split off the *_edge booleans, # this init routine can be refactored to require only a GridSizer @@ -603,10 +603,10 @@ def from_sizer_and_communicator( Tuple[int, int, int], sizer.get_extent([pace.util.X_DIM, pace.util.Y_DIM, pace.util.Z_DIM]), ) - south_edge = cube.tile.partitioner.on_tile_bottom(cube.rank) - north_edge = cube.tile.partitioner.on_tile_top(cube.rank) - west_edge = cube.tile.partitioner.on_tile_left(cube.rank) - east_edge = cube.tile.partitioner.on_tile_right(cube.rank) + south_edge = comm.tile.partitioner.on_tile_bottom(comm.rank) + north_edge = comm.tile.partitioner.on_tile_top(comm.rank) + west_edge = comm.tile.partitioner.on_tile_left(comm.rank) + east_edge = comm.tile.partitioner.on_tile_right(comm.rank) return cls( domain=domain, n_halo=sizer.n_halo, diff --git a/dsl/pace/dsl/stencil_config.py b/dsl/pace/dsl/stencil_config.py index 4e555bdb..79eff931 100644 --- a/dsl/pace/dsl/stencil_config.py +++ b/dsl/pace/dsl/stencil_config.py @@ -7,9 +7,9 @@ from pace.dsl.dace.dace_config import DaceConfig, DaCeOrchestration from pace.dsl.gt4py_utils import is_gpu_backend -from pace.util.communicator import CubedSphereCommunicator +from pace.util.communicator import Communicator from pace.util.decomposition import determine_rank_is_compiling, set_distributed_caches -from pace.util.partitioner import CubedSpherePartitioner +from pace.util.partitioner import Partitioner class RunMode(enum.Enum): @@ -35,7 +35,7 @@ def __init__( device_sync: bool = False, run_mode: RunMode = RunMode.BuildAndRun, use_minimal_caching: bool = False, - communicator: Optional[CubedSphereCommunicator] = None, + communicator: Optional[Communicator] = None, ) -> None: if (not ("gpu" in backend or "cuda" in backend)) and device_sync is True: raise RuntimeError("Device sync is true on a CPU based backend") @@ -57,11 +57,11 @@ def __init__( if communicator: set_distributed_caches(self) - def check_communicator(self, communicator: CubedSphereCommunicator) -> None: + def check_communicator(self, communicator: Communicator) -> None: """Checks that the communicator has a square layout Args: - communicator (CubedSphereCommunicator): communicator to use + communicator (Communicator): communicator to use Raises: RuntimeError: If non-square layout is given @@ -72,7 +72,7 @@ def check_communicator(self, communicator: CubedSphereCommunicator) -> None: ) def determine_compiling_equivalent( - self, rank: int, partitioner: CubedSpherePartitioner + self, rank: int, partitioner: Partitioner ) -> int: """From my rank & the current partitioner we determine which rank we should read from""" @@ -117,12 +117,12 @@ def determine_compiling_equivalent( raise RuntimeError("Illegal partition specified") def get_decomposition_info_from_comm( - self, communicator: Optional[CubedSphereCommunicator] + self, communicator: Optional[Communicator] ) -> Tuple[int, int, int, bool]: if communicator: self.check_communicator(communicator) rank = communicator.rank - size = communicator.partitioner.total_ranks + size = communicator.size if self.use_minimal_caching: equivalent_compiling_rank = self.determine_compiling_equivalent( rank, communicator.partitioner diff --git a/examples/notebooks/stencil_definition.ipynb b/examples/notebooks/stencil_definition.ipynb index 251dcd77..b1c67e3f 100644 --- a/examples/notebooks/stencil_definition.ipynb +++ b/examples/notebooks/stencil_definition.ipynb @@ -1,6 +1,7 @@ { "cells": [ { + "attachments": {}, "cell_type": "markdown", "id": "559427b6-c6c4-4e98-9ab4-f321f8c4999d", "metadata": { @@ -13,6 +14,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "id": "777c9dae-cb6f-49a8-963a-a85031d169af", "metadata": {}, @@ -37,6 +39,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "id": "3acf8ab8-73b5-45f3-9605-6f5929ebdbb3", "metadata": {}, @@ -76,6 +79,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "id": "e3ff42c6-2fcb-4cbf-af4e-a41d5bbb0c95", "metadata": { @@ -139,6 +143,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "id": "7d5797e0-b80a-4b27-be30-5d138deda105", "metadata": {}, @@ -177,6 +182,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "id": "cb397fe7-9ae0-46c0-8056-d35cde629a4b", "metadata": {}, @@ -238,7 +244,7 @@ }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgIAAAGzCAYAAABdO3+BAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA4KklEQVR4nO3df1zV9d3/8edR4YAKxwD5lUj4I/EXdl3+INKMxERqTpOaWtvUmc6FXVPXLLby11qUu1auXYhtc5AVpbbU5a50aopzE690c9ZWTLkoMQWXuwDFQMb5fP9wnG8nUD6Hc4DjOY/77fa+jfP+/Hqfz06e13m9f3wshmEYAgAAfqlLZzcAAAB0HgIBAAD8GIEAAAB+jEAAAAA/RiAAAIAfIxAAAMCPEQgAAODHCAQAAPBjBAIAAPgxAgG0u48++kgWi0UFBQUuH7t//35ZLBbt37+/1X1TU1OVmprq8jXgzJV7DuD6RyAAtxUUFMhisbRYHn/88c5uXrt6+umntW3bNlP7njlzRitXrtSxY8fatU2+5K677pLFYtGiRYuc6svLy7Vq1SqNGTNGN9xwgyIiIpSamqo9e/aYPrfdbteaNWuUkJCgoKAgJSUl6bXXXvP0WwC8XrfObgB8x+rVq5WQkOBUN2zYMMXHx+uzzz5TQEBAJ7Ws/Tz99NO67777NG3atFb3PXPmjFatWqWbbrpJt9xyS7u37Xr35ptv6tChQy1u2759u5599llNmzZNs2fP1j//+U9t3LhRd911l375y19q7ty5rZ7/+9//vp555hnNnz9fo0eP1vbt2/XAAw/IYrFo5syZnn47gNciEIDHZGRkaNSoUS1uCwoK6uDW4HpWV1en73znO3rssce0fPnyZtvvvPNOnTp1ShEREY66hQsX6pZbbtHy5ctbDQQ++eQT/fjHP1ZWVpb+67/+S5L00EMP6Y477tB3v/td3X///eratatn3xTgpegaQLu72hiBDz/8UPfdd5/CwsIUFBSkUaNG6de//rWpc/7sZz9T//79FRwcrDFjxuh3v/ud6fbs3r1b48aNU69evdSzZ08NGjRI3/ve95z2qa+v14oVKzRgwABZrVbFxcVp2bJlqq+vd+xjsVhUW1url156ydEVMmfOnBavuX//fo0ePVqSNHfuXMf+n78nW7Zs0ciRIxUcHKyIiAh99atf1SeffHLN93LkyBFZLBa99NJLzbbt2rVLFotFO3bskCR9/PHHevjhhzVo0CAFBwcrPDxc999/vz766KNW79lNN93U4ntraVyGmXvXmjVr1shut+vRRx9tcfvQoUOdggBJslqtuvvuu3X69GlduHDhmuffvn27Ghoa9PDDDzvqLBaLvvWtb+n06dNXzUQAvoiMADymurpan376qVPdF/+xbvKXv/xFY8eO1Y033qjHH39cPXr00ObNmzVt2jT96le/0r333nvV62zYsEHf/OY3ddttt2nx4sX63//9X335y19WWFiY4uLirtnGv/zlL/rSl76kpKQkrV69WlarVSdPntTvf/97xz52u11f/vKXdfDgQS1YsECDBw/We++9p+eff15/+9vfHGMCXn75ZT300EMaM2aMFixYIEnq379/i9cdPHiwVq9ereXLl2vBggW6/fbbJUm33XabpCvjLObOnavRo0crJydHlZWV+slPfqLf//73+tOf/qRevXq1eN5Ro0apX79+2rx5s2bPnu20bdOmTbrhhhuUnp4uSXr33Xf1hz/8QTNnzlSfPn300UcfKS8vT6mpqfrrX/+q7t27X/PemWH23l3LqVOn9Mwzz+iXv/ylgoODXbp+RUWFunfv3up7+dOf/qQePXpo8ODBTvVjxoxxbB83bpxL1wauWwbgpvz8fENSi8UwDKOsrMyQZOTn5zuOSUtLM4YPH27U1dU56ux2u3HbbbcZAwcOdNTt27fPkGTs27fPMAzDuHz5shEZGWnccsstRn19vWO/n/3sZ4Yk44477rhmW59//nlDkvH3v//9qvu8/PLLRpcuXYzf/e53TvXr1683JBm///3vHXU9evQwZs+efc1rNnn33Xeb3YfPv6dhw4YZn332maN+x44dhiRj+fLl1zxvdna2ERAQYPzjH/9w1NXX1xu9evUyvvGNbzjqLl261OzYQ4cOGZKMjRs3Ouq+eM8NwzDi4+NbfJ933HGH0z135d5dzX333WfcdtttjteSjKysrFaPO3HihBEUFGR87Wtfa3Xfe+65x+jXr1+z+traWkOS8fjjj7d6DsBX0DUAj8nNzdXu3budSkv+8Y9/6J133tFXvvIVXbhwQZ9++qk+/fRTnT9/Xunp6Tpx4sRVU+JHjhzRuXPntHDhQgUGBjrq58yZI5vN1mobm35Zb9++XXa7vcV9tmzZosGDBysxMdHRtk8//VQTJkyQJO3bt6/V67ii6T09/PDDTmMp7rnnHiUmJuo3v/nNNY+fMWOGGhoa9Oabbzrqfvvb36qqqkozZsxw1H3+13VDQ4POnz+vAQMGqFevXvrjH//okffi7r3bt2+ffvWrX2nt2rUuXffSpUu6//77FRwcrGeeeabV/T/77DNZrdZm9U33/7PPPnPp+sD1jK4BeMyYMWOuOljw806ePCnDMPTkk0/qySefbHGfc+fO6cYbb2xW//HHH0uSBg4c6FQfEBCgfv36tXrtGTNm6Be/+IUeeughPf7440pLS9P06dN13333qUuXK3HxiRMn9MEHH6h3795XbZsnNb2nQYMGNduWmJiogwcPXvP4ESNGKDExUZs2bdK8efMkXekWiIiIcHwBS1e+3HJycpSfn69PPvlEhmE4tlVXV3virbh17/75z3/qP/7jP/S1r33NMZ7CjMbGRs2cOVN//etf9fbbbys2NrbVY4KDg1scs1BXV+fYDvgLAgF0uKZf4o8++qij//qLBgwY0C7XDg4O1oEDB7Rv3z795je/0c6dO7Vp0yZNmDBBv/3tb9W1a1fZ7XYNHz5czz33XIvnaG0cQmeYMWOGfvjDH+rTTz9VSEiIfv3rX2vWrFnq1u3//yf+yCOPKD8/X4sXL1ZKSopsNptjqtzVsiNNLBZLi/WNjY1Oo+vduXcbN25USUmJXnzxxWYDGC9cuKCPPvpIkZGRzfr/58+frx07dujVV191CnyuJSYmRvv27ZNhGE7v7ezZs5JkKpgAfAWBADpc0y/3gIAATZw40aVj4+PjJV355fn5f/QbGhpUVlamESNGtHqOLl26KC0tTWlpaXruuef09NNP6/vf/7727duniRMnqn///vrzn/+stLS0q34BNmltu5l9m95TSUlJsy+ykpISx/ZrmTFjhlatWqVf/epXioqKUk1NTbO58G+88YZmz56tH//4x466uro6VVVVtXr+G264ocX9Pv74Y6dMjCv37otOnTqlhoYGjR07ttm2jRs3auPGjdq6davTmg3f/e53lZ+fr7Vr12rWrFmmr3XLLbfoF7/4hT744AMNGTLEUX/48GHHdsBfMEYAHS4yMlKpqal68cUXHb/APu/vf//7VY8dNWqUevfurfXr1+vy5cuO+oKCAlNfaP/4xz+a1TX9o9+UKv7KV76iTz75RD//+c+b7fvZZ5+ptrbW8bpHjx6mrtu0r6Rm+48aNUqRkZFav369U7r67bff1gcffKB77rmn1XMPHjxYw4cP16ZNm7Rp0ybFxMRo/PjxTvt07drVqTtAkn7605+qsbGx1fP3799fxcXFTvd8x44dKi8vd9rPlXv3RTNnztTWrVubFUm6++67tXXrViUnJzv2/9GPfqT//M//1Pe+9z19+9vfvup5q6ur9eGHHzp1f0ydOlUBAQFat26do84wDK1fv1433nijYzYH4A/ICKBT5Obmaty4cRo+fLjmz5+vfv36qbKyUocOHdLp06f15z//ucXjAgIC9NRTT+mb3/ymJkyYoBkzZqisrEz5+fmmxgisXr1aBw4c0D333KP4+HidO3dO69atU58+fRzTxb72ta9p8+bNWrhwofbt26exY8eqsbFRH374oTZv3qxdu3Y5xkKMHDlSe/bs0XPPPafY2FglJCQ4fVl9Xv/+/dWrVy+tX79eISEh6tGjh5KTk5WQkKBnn31Wc+fO1R133KFZs2Y5pg/edNNNWrJkial7OmPGDC1fvlxBQUGaN2+eY8xDky996Ut6+eWXZbPZNGTIEB06dEh79uxReHh4q+d+6KGH9MYbb2jy5Mn6yle+otLSUr3yyivNpku6cu++KDExUYmJiS1uS0hIcMoEbN26VcuWLdPAgQM1ePBgvfLKK07733XXXYqKinLsO3fuXOXn5zvWQujTp48WL16sH/3oR2poaNDo0aO1bds2/e53v9Orr77KYkLwL506ZwE+oWn64Lvvvtvi9pamDxqGYZSWlhpf//rXjejoaCMgIMC48cYbjS996UvGG2+84dinpalshmEY69atMxISEgyr1WqMGjXKOHDgQLOpbC3Zu3evMXXqVCM2NtYIDAw0YmNjjVmzZhl/+9vfnPa7fPmy8eyzzxpDhw41rFarccMNNxgjR440Vq1aZVRXVzv2+/DDD43x48cbwcHBhqRWpxJu377dGDJkiNGtW7dm92TTpk3Gv/3bvxlWq9UICwszHnzwQeP06dPXPN/nnThxwjFt8+DBg822/9///Z8xd+5cIyIiwujZs6eRnp5ufPjhh82mBl7tnv/4xz82brzxRsNqtRpjx441jhw50uI9N3vvzFIL0wdXrFhx1SmrX2x70+fzi5+/xsZG4+mnnzbi4+ONwMBAY+jQocYrr7zicvuA653FML6QKwQAAH6DMQIAAPgxAgEAAPwYgQAAAH6MQAAAAD9GIAAAgB8jEAAAwI953YJCdrtdZ86cUUhIiMtLlAIA/IthGLpw4YJiY2ObLaLlSXV1dU4ra7ZVYGCg01NGvYHXBQJnzpzxyoe6AAC8V3l5ufr06dMu566rq1NCfE9VnGt9Oe7WREdHq6yszKuCAa8LBEJCQiRJ43S3uimgk1sDAPBm/1SDDuq/Hd8d7eHy5cuqONeosqPxCg1pe9ah5oJdCSM/1uXLlwkErqWpO6CbAtTNQiAAALiGf62N2xFdyaEhXdwKBLyV1wUCAAB4o0bDrkY3FuVvNOyea4wHEQgAAGCCXYbsansk4M6x7YlAAAAAE+yyy53f9O4d3X58r7MDAACYRkYAAAATGg1DjUbb0/vuHNueCAQAADDBV8cI0DUAAIAfcykQyMnJ0ejRoxUSEqLIyEhNmzZNJSUlTvukpqbKYrE4lYULF3q00QAAdDS7DDW6UXwiI1BUVKSsrCwVFxdr9+7damho0KRJk1RbW+u03/z583X27FlHWbNmjUcbDQBAR2vqGnCneCOXxgjs3LnT6XVBQYEiIyN19OhRjR8/3lHfvXt3RUdHe6aFAACg3bg1RqC6ulqSFBYW5lT/6quvKiIiQsOGDVN2drYuXbp01XPU19erpqbGqQAA4G2aZg24U9zxzDPPyGKxaPHixY66uro6ZWVlKTw8XD179lRmZqYqKytdOm+bAwG73a7Fixdr7NixGjZsmKP+gQce0CuvvKJ9+/YpOztbL7/8sr761a9e9Tw5OTmy2WyOwpMHAQDeyO6B0lbvvvuuXnzxRSUlJTnVL1myRG+99Za2bNmioqIinTlzRtOnT3fp3G2ePpiVlaX3339fBw8edKpfsGCB4+/hw4crJiZGaWlpKi0tVf/+/ZudJzs7W0uXLnW8rqmpIRgAAOBfLl68qAcffFA///nP9dRTTznqq6urtWHDBhUWFmrChAmSpPz8fA0ePFjFxcW69dZbTZ2/TRmBRYsWaceOHdq3b1+rz39OTk6WJJ08ebLF7VarVaGhoU4FAABv486MgaYiqVl3eH19/TWvm5WVpXvuuUcTJ050qj969KgaGhqc6hMTE9W3b18dOnTI9PtyKRAwDEOLFi3S1q1b9c477yghIaHVY44dOyZJiomJceVSAAB4lUbD/SJJcXFxTl3iOTk5V73m66+/rj/+8Y8t7lNRUaHAwED16tXLqT4qKkoVFRWm35dLXQNZWVkqLCzU9u3bFRIS4riQzWZTcHCwSktLVVhYqLvvvlvh4eE6fvy4lixZovHjxzfr1wAA4Hribj9/07Hl5eVO2W+r1dri/uXl5fr2t7+t3bt3KygoyI0rX5tLGYG8vDxVV1crNTVVMTExjrJp0yZJUmBgoPbs2aNJkyYpMTFR3/nOd5SZmam33nqrXRoPAMD15ovd4VcLBI4ePapz587p3//939WtWzd169ZNRUVFeuGFF9StWzdFRUXp8uXLqqqqcjqusrLSpSn8LmUEjFamPsTFxamoqMiVUwIAcF2wy6JGWdw63hVpaWl67733nOrmzp2rxMREPfbYY4qLi1NAQID27t2rzMxMSVJJSYlOnTqllJQU09fhoUMAAJhgN64Ud453RUhIiNP0fEnq0aOHwsPDHfXz5s3T0qVLFRYWptDQUD3yyCNKSUkxPWNAIhAAAOC69fzzz6tLly7KzMxUfX290tPTtW7dOpfOQSAAAIAJjW52DbhzbJP9+/c7vQ4KClJubq5yc3PbfE4CAQAATPCGQKA9uPWsAQAAcH0jIwAAgAl2wyK74casATeObU8EAgAAmEDXAAAA8DlkBAAAMKFRXdToxu/nRg+2xZMIBAAAMMFwc4yAwRgBAACuX4wRAAAAPoeMAAAAJjQaXdRouDFGwI3nFLQnAgEAAEywyyK7G4l0u7wzEqBrAAAAP0ZGAAAAE3x1sCCBAAAAJrg/RoCuAQAA4GXICAAAYMKVwYJuPHSIrgEAAK5fdjeXGGbWAAAA8DpkBDxo15k/d3YTAKDN0mNHdHYTvJqvDhYkEAAAwAS7uvjkgkIEAgAAmNBoWNToxhME3Tm2PTFGAAAAP0ZGAAAAExrdnDXQSNcAAADXL7vRRXY3BgvavXSwIF0DAAD4MTICAACYQNcAAAB+zC73Rv7bPdcUj6JrAAAAP0ZGAAAAE9xfUMg7f3sTCAAAYIL7Swx7ZyDgna0CAAAdgowAAAAm2GWRXe4MFvTOJYYJBAAAMIGuAQAA/FjTOgLuFFfk5eUpKSlJoaGhCg0NVUpKit5++23H9tTUVFksFqeycOFCl98XGQEAALxQnz599Mwzz2jgwIEyDEMvvfSSpk6dqj/96U8aOnSoJGn+/PlavXq145ju3bu7fB0CAQAATLAbFtndWVDIxWOnTJni9PqHP/yh8vLyVFxc7AgEunfvrujo6Da3SaJrAAAAU+xudgs0rSNQU1PjVOrr61u9dmNjo15//XXV1tYqJSXFUf/qq68qIiJCw4YNU3Z2ti5duuTy+yIjAABAB4qLi3N6vWLFCq1cubLFfd977z2lpKSorq5OPXv21NatWzVkyBBJ0gMPPKD4+HjFxsbq+PHjeuyxx1RSUqI333zTpfYQCAAAYIL7jyG+cmx5eblCQ0Md9Var9arHDBo0SMeOHVN1dbXeeOMNzZ49W0VFRRoyZIgWLFjg2G/48OGKiYlRWlqaSktL1b9/f9PtIhAAAMCERlnU6MZaAE3HNs0CMCMwMFADBgyQJI0cOVLvvvuufvKTn+jFF19stm9ycrIk6eTJky4FAowRAADgOmG32686puDYsWOSpJiYGJfOSUYAAAATPNU1YFZ2drYyMjLUt29fXbhwQYWFhdq/f7927dql0tJSFRYW6u6771Z4eLiOHz+uJUuWaPz48UpKSnLpOgQCAACY0Ci52TXgmnPnzunrX/+6zp49K5vNpqSkJO3atUt33XWXysvLtWfPHq1du1a1tbWKi4tTZmamnnjiCZfbRSAAAIAX2rBhw1W3xcXFqaioyCPXIRAAAMCEju4a6CgEAgAAmOCrDx0iEAAAwATDzccQG176GGLvDE8AAECHICMAAIAJdA0AAODHOvrpgx3FO8MTAADQIcgIAABgQtPjhN053hsRCAAAYAJdAwAAwOeQEQAAwAS7usjuxu9nd45tTwQCAACY0GhY1OhGet+dY9uTd4YnAACgQ7gUCOTk5Gj06NEKCQlRZGSkpk2bppKSEqd96urqlJWVpfDwcPXs2VOZmZmqrKz0aKMBAOhoTYMF3SneyKVAoKioSFlZWSouLtbu3bvV0NCgSZMmqba21rHPkiVL9NZbb2nLli0qKirSmTNnNH36dI83HACAjmT86+mDbS2GL6wsuHPnTqfXBQUFioyM1NGjRzV+/HhVV1drw4YNKiws1IQJEyRJ+fn5Gjx4sIqLi3Xrrbd6ruUAAHSgRlnU6MaDg9w5tj25FZ5UV1dLksLCwiRJR48eVUNDgyZOnOjYJzExUX379tWhQ4daPEd9fb1qamqcCgAA6BhtDgTsdrsWL16ssWPHatiwYZKkiooKBQYGqlevXk77RkVFqaKiosXz5OTkyGazOUpcXFxbmwQAQLuxG+6OE+jsd9CyNgcCWVlZev/99/X666+71YDs7GxVV1c7Snl5uVvnAwCgPbgzPqCpeKM2rSOwaNEi7dixQwcOHFCfPn0c9dHR0bp8+bKqqqqcsgKVlZWKjo5u8VxWq1VWq7UtzQAAAG5yKTwxDEOLFi3S1q1b9c477yghIcFp+8iRIxUQEKC9e/c66kpKSnTq1CmlpKR4psUAAHQCuyxuF2/kUkYgKytLhYWF2r59u0JCQhz9/jabTcHBwbLZbJo3b56WLl2qsLAwhYaG6pFHHlFKSgozBgAA1zVfXVnQpUAgLy9PkpSamupUn5+frzlz5kiSnn/+eXXp0kWZmZmqr69Xenq61q1b55HGAgAAz3IpEDCM1oc8BgUFKTc3V7m5uW1uFAAA3sbdAX8+NVgQAAB/Y5d7ywR76xgB7wxPAABAhyAjAACACYabI/8NL80IEAgAAGCCu08Q9NanDxIIAABggq8OFvTOVgEAgA5BRgAAABPoGgAAwI+5u0ww0wcBAIDXIRAAAMCEpq4Bd4or8vLylJSUpNDQUIWGhiolJUVvv/22Y3tdXZ2ysrIUHh6unj17KjMzU5WVlS6/LwIBAABM6OhAoE+fPnrmmWd09OhRHTlyRBMmTNDUqVP1l7/8RZK0ZMkSvfXWW9qyZYuKiop05swZTZ8+3eX3xRgBAAC80JQpU5xe//CHP1ReXp6Ki4vVp08fbdiwQYWFhZowYYKkKw8AHDx4sIqLi1164i+BAAAAJnhq1kBNTY1TvdVqldVqveaxjY2N2rJli2pra5WSkqKjR4+qoaFBEydOdOyTmJiovn376tChQy4FAnQNAABggqe6BuLi4mSz2RwlJyfnqtd877331LNnT1mtVi1cuFBbt27VkCFDVFFRocDAQPXq1ctp/6ioKFVUVLj0vsgIAADQgcrLyxUaGup4fa1swKBBg3Ts2DFVV1frjTfe0OzZs1VUVOTR9hAIAABggiH31gIw/vW/TbMAzAgMDNSAAQMkSSNHjtS7776rn/zkJ5oxY4YuX76sqqoqp6xAZWWloqOjXWoXXQMAAJjQ0bMGWmyD3a76+nqNHDlSAQEB2rt3r2NbSUmJTp06pZSUFJfOSUYAAAATOnqJ4ezsbGVkZKhv3766cOGCCgsLtX//fu3atUs2m03z5s3T0qVLFRYWptDQUD3yyCNKSUlxaaCgRCAAAIBXOnfunL7+9a/r7NmzstlsSkpK0q5du3TXXXdJkp5//nl16dJFmZmZqq+vV3p6utatW+fydQgEAAAwoaMzAhs2bLjm9qCgIOXm5io3N7fNbZIIBAAAMMVXnz7IYEEAAPwYGQEAAEwwDIsMN37Vu3NseyIQAADABLssbq0j4M6x7YmuAQAA/BgZAQAATPDVwYIEAgAAmOCrYwToGgAAwI+REQAAwAS6BgAA8GO+2jVAIAAAgAmGmxkBbw0EGCMAAIAfIyMAAIAJhiTDcO94b0QgAACACXZZZGFlQQAA4EvICAAAYAKzBgAA8GN2wyKLD64jQNcAAAB+jIwAAAAmGIabswa8dNoAgQAAACb46hgBugYAAPBjZAQAADDBVzMCBAIAAJjgq7MGCAQAADDBVwcLMkYAAAA/RkYAAAATrmQE3Bkj4MHGeBCBAAAAJvjqYEG6BgAA8GNkBAAAMMH4V3HneG9EIAAAgAl0DQAAAJ9DRgAAADN8tG+AQAAAADPc7BoQXQMAAFy/mlYWdKe4IicnR6NHj1ZISIgiIyM1bdo0lZSUOO2Tmpoqi8XiVBYuXOjSdQgEAADwQkVFRcrKylJxcbF2796thoYGTZo0SbW1tU77zZ8/X2fPnnWUNWvWuHQdugYAADCho2cN7Ny50+l1QUGBIiMjdfToUY0fP95R3717d0VHR7e5XWQEAAAww7C4XyTV1NQ4lfr6elOXr66uliSFhYU51b/66quKiIjQsGHDlJ2drUuXLrn0tsgIAADQgeLi4pxer1ixQitXrrzmMXa7XYsXL9bYsWM1bNgwR/0DDzyg+Ph4xcbG6vjx43rsscdUUlKiN99803R7CAQAADDBU48hLi8vV2hoqKPearW2emxWVpbef/99HTx40Kl+wYIFjr+HDx+umJgYpaWlqbS0VP379zfVLgIBAADM8NA6AqGhoU6BQGsWLVqkHTt26MCBA+rTp881901OTpYknTx50nQg4PIYgQMHDmjKlCmKjY2VxWLRtm3bnLbPmTOn2VSGyZMnu3oZAAD8mmEYWrRokbZu3ap33nlHCQkJrR5z7NgxSVJMTIzp67icEaitrdWIESP0jW98Q9OnT29xn8mTJys/P9/x2kzaAwAAb9bRswaysrJUWFio7du3KyQkRBUVFZIkm82m4OBglZaWqrCwUHfffbfCw8N1/PhxLVmyROPHj1dSUpLp67gcCGRkZCgjI+Oa+1itVremMgAA4JU6cJngvLw8SVcWDfq8/Px8zZkzR4GBgdqzZ4/Wrl2r2tpaxcXFKTMzU0888YRL12mXMQL79+9XZGSkbrjhBk2YMEFPPfWUwsPDW9y3vr7eaepETU1NezQJAIDritHKyMS4uDgVFRW5fR2PryMwefJkbdy4UXv37tWzzz6roqIiZWRkqLGxscX9c3JyZLPZHOWL0yoAAPAGTV0D7hRv5PGMwMyZMx1/Dx8+XElJSerfv7/279+vtLS0ZvtnZ2dr6dKljtc1NTUEAwAA7+OjTx9s95UF+/Xrp4iICJ08ebLF7Var1TGVwtUpFQAAdByLB4r3afdA4PTp0zp//rxLUxkAAEDHcLlr4OLFi06/7svKynTs2DGFhYUpLCxMq1atUmZmpqKjo1VaWqply5ZpwIABSk9P92jDAQDoUD7aNeByIHDkyBHdeeedjtdN/fuzZ89WXl6ejh8/rpdeeklVVVWKjY3VpEmT9IMf/IC1BAAA1zcCgStSU1OvOaVh165dbjUIAAB0HJ41AACAGZ97lHCbj/dCBAIAAJjgqacPept2nzUAAAC8FxkBAADMYLAgAAB+zEfHCNA1AACAHyMjAACACRbjSnHneG9EIAAAgBmMEQAAwI8xRgAAAPgaMgIAAJhB1wAAAH7MRwMBugYAAPBjZAQAADDDRzMCBAIAAJjBrAEAAOBryAgAAGACKwsCAODPfHSMAF0DAAD4MQIBAAD8GF0DAACYYJGbYwQ81hLPIhAAAMAMpg8CAABfQ0YAAAAzfHTWAIEAAABm+GggQNcAAAB+jEAAAAATmlYWdKe4IicnR6NHj1ZISIgiIyM1bdo0lZSUOO1TV1enrKwshYeHq2fPnsrMzFRlZaVL1yEQAADADMMDxQVFRUXKyspScXGxdu/erYaGBk2aNEm1tbWOfZYsWaK33npLW7ZsUVFRkc6cOaPp06e7dB3GCAAA4IV27tzp9LqgoECRkZE6evSoxo8fr+rqam3YsEGFhYWaMGGCJCk/P1+DBw9WcXGxbr31VlPXISMAAIAZHsoI1NTUOJX6+npTl6+urpYkhYWFSZKOHj2qhoYGTZw40bFPYmKi+vbtq0OHDpl+WwQCAACY4KkxAnFxcbLZbI6Sk5PT6rXtdrsWL16ssWPHatiwYZKkiooKBQYGqlevXk77RkVFqaKiwvT7omsAAIAOVF5ertDQUMdrq9Xa6jFZWVl6//33dfDgQY+3h0AAAAAzPLTEcGhoqFMg0JpFixZpx44dOnDggPr06eOoj46O1uXLl1VVVeWUFaisrFR0dLTp89M1AACAGR08a8AwDC1atEhbt27VO++8o4SEBKftI0eOVEBAgPbu3euoKykp0alTp5SSkmL6OmQEAAAwoS1rAXzxeFdkZWWpsLBQ27dvV0hIiKPf32azKTg4WDabTfPmzdPSpUsVFham0NBQPfLII0pJSTE9Y0AiEAAAwCvl5eVJklJTU53q8/PzNWfOHEnS888/ry5duigzM1P19fVKT0/XunXrXLoOgQAAAGZ08LMGDKP1A4KCgpSbm6vc3Nw2NopAAAAAc9zsGuChQwAAwOuQEQAAwAwffQwxgQAAAGb4aCBA1wAAAH6MjAAAACZ09DoCHYWMAAAAfoxAAAAAP0bXAAAAZvjoYEECAQAATPDVMQIEAgAAmOWlX+buYIwAAAB+jIwAAABmMEYAAAD/5atjBOgaAADAj5ERAADADLoGAADwX3QNAAAAn0NGAAAAM+gaAADAj/loIEDXAAAAfoyMAAAAJvjqYEECAQAAzKBr4IoDBw5oypQpio2NlcVi0bZt25y2G4ah5cuXKyYmRsHBwZo4caJOnDjhqfYCANA5DA8UL+RyIFBbW6sRI0YoNze3xe1r1qzRCy+8oPXr1+vw4cPq0aOH0tPTVVdX53ZjAQCAZ7ncNZCRkaGMjIwWtxmGobVr1+qJJ57Q1KlTJUkbN25UVFSUtm3bppkzZ7rXWgAAOomvjhHw6KyBsrIyVVRUaOLEiY46m82m5ORkHTp0qMVj6uvrVVNT41QAAPA6dA20rqKiQpIUFRXlVB8VFeXY9kU5OTmy2WyOEhcX58kmAQCAa+j0dQSys7NVXV3tKOXl5Z3dJAAAmmnqGnCneCOPTh+Mjo6WJFVWViomJsZRX1lZqVtuuaXFY6xWq6xWqyebAQCA5zF9sHUJCQmKjo7W3r17HXU1NTU6fPiwUlJSPHkpAADgAS5nBC5evKiTJ086XpeVlenYsWMKCwtT3759tXjxYj311FMaOHCgEhIS9OSTTyo2NlbTpk3zZLsBAOhYPpoRcDkQOHLkiO68807H66VLl0qSZs+erYKCAi1btky1tbVasGCBqqqqNG7cOO3cuVNBQUGeazUAAB3M8q/izvHeyOWugdTUVBmG0awUFBRIkiwWi1avXq2KigrV1dVpz549uvnmmz3dbgAAfF5rq/nOmTNHFovFqUyePNmla3T6rAEAAK4LnbCOQGur+UrS5MmTdfbsWUd57bXXXLoGDx0CAMCEzlhZ8Fqr+TaxWq2OWXttQUYAAAAzPJQR+OJquvX19W41a//+/YqMjNSgQYP0rW99S+fPn3fpeAIBAAA6UFxcnNOKujk5OW0+1+TJk7Vx40bt3btXzz77rIqKipSRkaHGxkbT56BrAAAAszwwBbC8vFyhoaGO1+4sqvf5h/kNHz5cSUlJ6t+/v/bv36+0tDRT5yAjAACACZ5aYjg0NNSpeHJ13X79+ikiIsJpvZ/WEAgAAOAjTp8+rfPnzzst898augYAADCjE1YWvNZqvmFhYVq1apUyMzMVHR2t0tJSLVu2TAMGDFB6errpaxAIAABgQmdMH7zWar55eXk6fvy4XnrpJVVVVSk2NlaTJk3SD37wA5e6GwgEAADwUk2r+V7Nrl273L4GgQAAAGbw0CEAAPxXZ3QNdARmDQAA4MfICAAAYAZdAwAA+DECAQAA/BdjBAAAgM8hIwAAgBl0DQAA4L8shiHLNRb3MXO8N6JrAAAAP0ZGAAAAM+gaAADAfzFrAAAA+BwyAgAAmEHXAAAA/ouuAQAA4HPICAAAYAZdAwAA+C9f7RogEAAAwAwfzQgwRgAAAD9GRgAAAJO8Nb3vDgIBAADMMIwrxZ3jvRBdAwAA+DEyAgAAmMCsAQAA/BmzBgAAgK8hIwAAgAkW+5XizvHeiEAAAAAz6BoAAAC+howAAAAmMGsAAAB/5qMLChEIAABggq9mBBgjAACAHyMQAADADMMDxUUHDhzQlClTFBsbK4vFom3btjk3yTC0fPlyxcTEKDg4WBMnTtSJEydcugaBAAAAJjR1DbhTXFVbW6sRI0YoNze3xe1r1qzRCy+8oPXr1+vw4cPq0aOH0tPTVVdXZ/oajBEAAMBLZWRkKCMjo8VthmFo7dq1euKJJzR16lRJ0saNGxUVFaVt27Zp5syZpq5BRgAAADOaZg24UyTV1NQ4lfr6+jY1p6ysTBUVFZo4caKjzmazKTk5WYcOHTJ9HgIBAABM8FTXQFxcnGw2m6Pk5OS0qT0VFRWSpKioKKf6qKgoxzYz6BoAAKADlZeXKzQ01PHaarV2YmvICAAAYI6HZg2EhoY6lbYGAtHR0ZKkyspKp/rKykrHNjMIBAAAMKEzZg1cS0JCgqKjo7V3715HXU1NjQ4fPqyUlBTT56FrAAAAL3Xx4kWdPHnS8bqsrEzHjh1TWFiY+vbtq8WLF+upp57SwIEDlZCQoCeffFKxsbGaNm2a6WsQCAAAYIbduFLcOd5FR44c0Z133ul4vXTpUknS7NmzVVBQoGXLlqm2tlYLFixQVVWVxo0bp507dyooKMj0NQgEAAAwo42rAzod76LU1FQZ13hYkcVi0erVq7V69eo2N4tAAAAAEyxy86FDHmuJZzFYEAAAP0ZGAAAAMz63OmCbj/dCBAIAAJjg7hRAT08f9BS6BgAA8GNkBAAAMKMTZg10BI9nBFauXCmLxeJUEhMTPX0ZAAA6lMUw3C7eqF0yAkOHDtWePXv+/0W6kXgAAMAbtcs3dLdu3Vx64AEAAF7P/q/izvFeqF0GC544cUKxsbHq16+fHnzwQZ06deqq+9bX16umpsapAADgbXy1a8DjgUBycrIKCgq0c+dO5eXlqaysTLfffrsuXLjQ4v45OTmy2WyOEhcX5+kmAQCAq/B4IJCRkaH7779fSUlJSk9P13//93+rqqpKmzdvbnH/7OxsVVdXO0p5ebmnmwQAgPsMDxQv1O6j+Hr16qWbb77Z6TGKn2e1WmW1Wtu7GQAAuMdHVxZs9wWFLl68qNLSUsXExLT3pQAAaDdNKwu6U7yRxwOBRx99VEVFRfroo4/0hz/8Qffee6+6du2qWbNmefpSAADATR7vGjh9+rRmzZql8+fPq3fv3ho3bpyKi4vVu3dvT18KAICO46NdAx4PBF5//XVPnxIAgE5nsV8p7hzvjXjoEAAAfoy1fwEAMIOuAQAA/BhPHwQAAL6GjAAAACa4+7wAb33WAIEAAABm+OgYAboGAADwY2QEAAAww5DkzloA3pkQIBAAAMAMxggAAODPDLk5RsBjLfEoxggAAODHyAgAAGCGj84aIBAAAMAMuySLm8d7IboGAADwY2QEAAAwgVkDAAD4Mx8dI0DXAAAAXmjlypWyWCxOJTEx0ePXISMAAIAZnZARGDp0qPbs2eN43a2b57+2CQQAADCjEwKBbt26KTo6uu3XNIGuAQAAOlBNTY1Tqa+vv+q+J06cUGxsrPr166cHH3xQp06d8nh7CAQAADDD7oEiKS4uTjabzVFycnJavFxycrIKCgq0c+dO5eXlqaysTLfffrsuXLjg0bdF1wAAACZ4avpgeXm5QkNDHfVWq7XF/TMyMhx/JyUlKTk5WfHx8dq8ebPmzZvX5nZ8EYGAB6XHjujsJgAA2ouHxgiEhoY6BQJm9erVSzfffLNOnjzZ9ja0gK4BAACuAxcvXlRpaaliYmI8el4CAQAAzLAb7hcXPProoyoqKtJHH32kP/zhD7r33nvVtWtXzZo1y6Nvi64BAADM6ODpg6dPn9asWbN0/vx59e7dW+PGjVNxcbF69+7d9ja0gEAAAAAv9Prrr3fIdQgEAAAwxc2MgLzzWQMEAgAAmMFDhwAAgK8hIwAAgBl2Q26l912cNdBRCAQAADDDsF8p7hzvhegaAADAj5ERAADADB8dLEggAACAGYwRAADAj/loRoAxAgAA+DEyAgAAmGHIzYyAx1riUQQCAACYQdcAAADwNWQEAAAww26X5MaiQHbvXFCIQAAAADPoGgAAAL6GjAAAAGb4aEaAQAAAADN8dGVBugYAAPBjZAQAADDBMOwy3HiUsDvHticCAQAAzDAM99L7jBEAAOA6Zrg5RsBLAwHGCAAA4MfICAAAYIbdLlnc6OdnjAAAANcxugYAAICvISMAAIAJht0uw42uAaYPAgBwPaNrAAAA+BoyAgAAmGE3JIvvZQQIBAAAMMMwJLkzfdA7AwG6BgAA8GNkBAAAMMGwGzLc6Bow/C0jkJubq5tuuklBQUFKTk7W//zP/7TXpQAAaH+G3f3SBu39fdougcCmTZu0dOlSrVixQn/84x81YsQIpaen69y5c+1xOQAA2p1hN9wuruqI79N2CQSee+45zZ8/X3PnztWQIUO0fv16de/eXb/85S/b43IAAPikjvg+9fgYgcuXL+vo0aPKzs521HXp0kUTJ07UoUOHmu1fX1+v+vp6x+vq6mpJ0j/V4Na6DQAA3/dPNUjqmP73fxr1bj04qKmtNTU1TvVWq1VWq7XZ/q5+n7aVxwOBTz/9VI2NjYqKinKqj4qK0ocffths/5ycHK1atapZ/UH9t6ebBgDwURcuXJDNZmuXcwcGBio6OloHK9z/XurZs6fi4uKc6lasWKGVK1c229fV79O26vRZA9nZ2Vq6dKnjdVVVleLj43Xq1Kl2+z/V19TU1CguLk7l5eUKDQ3t7OZ4Pe6Xa7hfruOeucad+2UYhi5cuKDY2Nh2ap0UFBSksrIyXb582e1zGYYhi8XiVNdSNqAjeTwQiIiIUNeuXVVZWelUX1lZqejo6Gb7Xy0lYrPZ+A/IRaGhodwzF3C/XMP9ch33zDVtvV8d8aMxKChIQUFB7X6dz3P1+7StPD5YMDAwUCNHjtTevXsddXa7XXv37lVKSoqnLwcAgE/qqO/TdukaWLp0qWbPnq1Ro0ZpzJgxWrt2rWprazV37tz2uBwAAD6pI75P2yUQmDFjhv7+979r+fLlqqio0C233KKdO3c2G/DQEqvVqhUrVnR6n8n1hHvmGu6Xa7hfruOeuYb7dXXufJ+aZTG8dc1DAADQ7njoEAAAfoxAAAAAP0YgAACAHyMQAADAjxEIAADgx7wuEGjv5y77ipUrV8pisTiVxMTEzm6WVzlw4ICmTJmi2NhYWSwWbdu2zWm7YRhavny5YmJiFBwcrIkTJ+rEiROd01gv0Nr9mjNnTrPP3OTJkzunsV4gJydHo0ePVkhIiCIjIzVt2jSVlJQ47VNXV6esrCyFh4erZ8+eyszMbLZKnL8wc79SU1ObfcYWLlzYSS32H14VCHTEc5d9ydChQ3X27FlHOXjwYGc3yavU1tZqxIgRys3NbXH7mjVr9MILL2j9+vU6fPiwevToofT0dNXV1XVwS71Da/dLkiZPnuz0mXvttdc6sIXepaioSFlZWSouLtbu3bvV0NCgSZMmqba21rHPkiVL9NZbb2nLli0qKirSmTNnNH369E5sdecxc78kaf78+U6fsTVr1nRSi/2I4UXGjBljZGVlOV43NjYasbGxRk5OTie2yjutWLHCGDFiRGc347ohydi6davjtd1uN6Kjo40f/ehHjrqqqirDarUar732Wie00Lt88X4ZhmHMnj3bmDp1aqe053pw7tw5Q5JRVFRkGMaVz1NAQICxZcsWxz4ffPCBIck4dOhQZzXTa3zxfhmGYdxxxx3Gt7/97c5rlJ/ymoxA03OXJ06c6Khrj+cu+5ITJ04oNjZW/fr104MPPqhTp051dpOuG2VlZaqoqHD6vNlsNiUnJ/N5u4b9+/crMjJSgwYN0re+9S2dP3++s5vkNaqrqyVJYWFhkqSjR4+qoaHB6TOWmJiovn378hlT8/vV5NVXX1VERISGDRum7OxsXbp0qTOa51c6/THETTrqucu+Ijk5WQUFBRo0aJDOnj2rVatW6fbbb9f777+vkJCQzm6e16uoqJCkFj9vTdvgbPLkyZo+fboSEhJUWlqq733ve8rIyNChQ4fUtWvXzm5ep7Lb7Vq8eLHGjh2rYcOGSbryGQsMDFSvXr2c9uUz1vL9kqQHHnhA8fHxio2N1fHjx/XYY4+ppKREb775Zie21vd5TSAA12RkZDj+TkpKUnJysuLj47V582bNmzevE1sGXzVz5kzH38OHD1dSUpL69++v/fv3Ky0trRNb1vmysrL0/vvvM07HpKvdrwULFjj+Hj58uGJiYpSWlqbS0lL179+/o5vpN7yma6Cjnrvsq3r16qWbb75ZJ0+e7OymXBeaPlN83tquX79+ioiI8PvP3KJFi7Rjxw7t27dPffr0cdRHR0fr8uXLqqqqctrf3z9jV7tfLUlOTpYkv/+MtTevCQQ66rnLvurixYsqLS1VTExMZzflupCQkKDo6Ginz1tNTY0OHz7M582k06dP6/z58377mTMMQ4sWLdLWrVv1zjvvKCEhwWn7yJEjFRAQ4PQZKykp0alTp/zyM9ba/WrJsWPHJMlvP2Mdxau6Bjriucu+4tFHH9WUKVMUHx+vM2fOaMWKFeratatmzZrV2U3zGhcvXnT6JVFWVqZjx44pLCxMffv21eLFi/XUU09p4MCBSkhI0JNPPqnY2FhNmzat8xrdia51v8LCwrRq1SplZmYqOjpapaWlWrZsmQYMGKD09PRObHXnycrKUmFhobZv366QkBBHv7/NZlNwcLBsNpvmzZunpUuXKiwsTKGhoXrkkUeUkpKiW2+9tZNb3/Fau1+lpaUqLCzU3XffrfDwcB0/flxLlizR+PHjlZSU1Mmt93GdPW3hi376058affv2NQIDA40xY8YYxcXFnd0krzRjxgwjJibGCAwMNG688UZjxowZxsmTJzu7WV5l3759hqRmZfbs2YZhXJlC+OSTTxpRUVGG1Wo10tLSjJKSks5tdCe61v26dOmSMWnSJKN3795GQECAER8fb8yfP9+oqKjo7GZ3mpbulSQjPz/fsc9nn31mPPzww8YNN9xgdO/e3bj33nuNs2fPdl6jO1Fr9+vUqVPG+PHjjbCwMMNqtRoDBgwwvvvd7xrV1dWd23A/YDEMw+jIwAMAAHgPrxkjAAAAOh6BAAAAfoxAAAAAP0YgAACAHyMQAADAjxEIAADgxwgEAADwYwQCAAD4MQIBAAD8GIEAAAB+jEAAAAA/9v8Aor55y9Pt/D0AAAAASUVORK5CYII=\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgIAAAGzCAYAAABdO3+BAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA4KklEQVR4nO3df1zV9d3/8edR4YAKxwD5lUj4I/EXdl3+INKMxERqTpOaWtvUmc6FXVPXLLby11qUu1auXYhtc5AVpbbU5a50aopzE690c9ZWTLkoMQWXuwDFQMb5fP9wnG8nUD6Hc4DjOY/77fa+jfP+/Hqfz06e13m9f3wshmEYAgAAfqlLZzcAAAB0HgIBAAD8GIEAAAB+jEAAAAA/RiAAAIAfIxAAAMCPEQgAAODHCAQAAPBjBAIAAPgxAgG0u48++kgWi0UFBQUuH7t//35ZLBbt37+/1X1TU1OVmprq8jXgzJV7DuD6RyAAtxUUFMhisbRYHn/88c5uXrt6+umntW3bNlP7njlzRitXrtSxY8fatU2+5K677pLFYtGiRYuc6svLy7Vq1SqNGTNGN9xwgyIiIpSamqo9e/aYPrfdbteaNWuUkJCgoKAgJSUl6bXXXvP0WwC8XrfObgB8x+rVq5WQkOBUN2zYMMXHx+uzzz5TQEBAJ7Ws/Tz99NO67777NG3atFb3PXPmjFatWqWbbrpJt9xyS7u37Xr35ptv6tChQy1u2759u5599llNmzZNs2fP1j//+U9t3LhRd911l375y19q7ty5rZ7/+9//vp555hnNnz9fo0eP1vbt2/XAAw/IYrFo5syZnn47gNciEIDHZGRkaNSoUS1uCwoK6uDW4HpWV1en73znO3rssce0fPnyZtvvvPNOnTp1ShEREY66hQsX6pZbbtHy5ctbDQQ++eQT/fjHP1ZWVpb+67/+S5L00EMP6Y477tB3v/td3X///eratatn3xTgpegaQLu72hiBDz/8UPfdd5/CwsIUFBSkUaNG6de//rWpc/7sZz9T//79FRwcrDFjxuh3v/ud6fbs3r1b48aNU69evdSzZ08NGjRI3/ve95z2qa+v14oVKzRgwABZrVbFxcVp2bJlqq+vd+xjsVhUW1url156ydEVMmfOnBavuX//fo0ePVqSNHfuXMf+n78nW7Zs0ciRIxUcHKyIiAh99atf1SeffHLN93LkyBFZLBa99NJLzbbt2rVLFotFO3bskCR9/PHHevjhhzVo0CAFBwcrPDxc999/vz766KNW79lNN93U4ntraVyGmXvXmjVr1shut+vRRx9tcfvQoUOdggBJslqtuvvuu3X69GlduHDhmuffvn27Ghoa9PDDDzvqLBaLvvWtb+n06dNXzUQAvoiMADymurpan376qVPdF/+xbvKXv/xFY8eO1Y033qjHH39cPXr00ObNmzVt2jT96le/0r333nvV62zYsEHf/OY3ddttt2nx4sX63//9X335y19WWFiY4uLirtnGv/zlL/rSl76kpKQkrV69WlarVSdPntTvf/97xz52u11f/vKXdfDgQS1YsECDBw/We++9p+eff15/+9vfHGMCXn75ZT300EMaM2aMFixYIEnq379/i9cdPHiwVq9ereXLl2vBggW6/fbbJUm33XabpCvjLObOnavRo0crJydHlZWV+slPfqLf//73+tOf/qRevXq1eN5Ro0apX79+2rx5s2bPnu20bdOmTbrhhhuUnp4uSXr33Xf1hz/8QTNnzlSfPn300UcfKS8vT6mpqfrrX/+q7t27X/PemWH23l3LqVOn9Mwzz+iXv/ylgoODXbp+RUWFunfv3up7+dOf/qQePXpo8ODBTvVjxoxxbB83bpxL1wauWwbgpvz8fENSi8UwDKOsrMyQZOTn5zuOSUtLM4YPH27U1dU56ux2u3HbbbcZAwcOdNTt27fPkGTs27fPMAzDuHz5shEZGWnccsstRn19vWO/n/3sZ4Yk44477rhmW59//nlDkvH3v//9qvu8/PLLRpcuXYzf/e53TvXr1683JBm///3vHXU9evQwZs+efc1rNnn33Xeb3YfPv6dhw4YZn332maN+x44dhiRj+fLl1zxvdna2ERAQYPzjH/9w1NXX1xu9evUyvvGNbzjqLl261OzYQ4cOGZKMjRs3Ouq+eM8NwzDi4+NbfJ933HGH0z135d5dzX333WfcdtttjteSjKysrFaPO3HihBEUFGR87Wtfa3Xfe+65x+jXr1+z+traWkOS8fjjj7d6DsBX0DUAj8nNzdXu3budSkv+8Y9/6J133tFXvvIVXbhwQZ9++qk+/fRTnT9/Xunp6Tpx4sRVU+JHjhzRuXPntHDhQgUGBjrq58yZI5vN1mobm35Zb9++XXa7vcV9tmzZosGDBysxMdHRtk8//VQTJkyQJO3bt6/V67ii6T09/PDDTmMp7rnnHiUmJuo3v/nNNY+fMWOGGhoa9Oabbzrqfvvb36qqqkozZsxw1H3+13VDQ4POnz+vAQMGqFevXvrjH//okffi7r3bt2+ffvWrX2nt2rUuXffSpUu6//77FRwcrGeeeabV/T/77DNZrdZm9U33/7PPPnPp+sD1jK4BeMyYMWOuOljw806ePCnDMPTkk0/qySefbHGfc+fO6cYbb2xW//HHH0uSBg4c6FQfEBCgfv36tXrtGTNm6Be/+IUeeughPf7440pLS9P06dN13333qUuXK3HxiRMn9MEHH6h3795XbZsnNb2nQYMGNduWmJiogwcPXvP4ESNGKDExUZs2bdK8efMkXekWiIiIcHwBS1e+3HJycpSfn69PPvlEhmE4tlVXV3virbh17/75z3/qP/7jP/S1r33NMZ7CjMbGRs2cOVN//etf9fbbbys2NrbVY4KDg1scs1BXV+fYDvgLAgF0uKZf4o8++qij//qLBgwY0C7XDg4O1oEDB7Rv3z795je/0c6dO7Vp0yZNmDBBv/3tb9W1a1fZ7XYNHz5czz33XIvnaG0cQmeYMWOGfvjDH+rTTz9VSEiIfv3rX2vWrFnq1u3//yf+yCOPKD8/X4sXL1ZKSopsNptjqtzVsiNNLBZLi/WNjY1Oo+vduXcbN25USUmJXnzxxWYDGC9cuKCPPvpIkZGRzfr/58+frx07dujVV191CnyuJSYmRvv27ZNhGE7v7ezZs5JkKpgAfAWBADpc0y/3gIAATZw40aVj4+PjJV355fn5f/QbGhpUVlamESNGtHqOLl26KC0tTWlpaXruuef09NNP6/vf/7727duniRMnqn///vrzn/+stLS0q34BNmltu5l9m95TSUlJsy+ykpISx/ZrmTFjhlatWqVf/epXioqKUk1NTbO58G+88YZmz56tH//4x466uro6VVVVtXr+G264ocX9Pv74Y6dMjCv37otOnTqlhoYGjR07ttm2jRs3auPGjdq6davTmg3f/e53lZ+fr7Vr12rWrFmmr3XLLbfoF7/4hT744AMNGTLEUX/48GHHdsBfMEYAHS4yMlKpqal68cUXHb/APu/vf//7VY8dNWqUevfurfXr1+vy5cuO+oKCAlNfaP/4xz+a1TX9o9+UKv7KV76iTz75RD//+c+b7fvZZ5+ptrbW8bpHjx6mrtu0r6Rm+48aNUqRkZFav369U7r67bff1gcffKB77rmn1XMPHjxYw4cP16ZNm7Rp0ybFxMRo/PjxTvt07drVqTtAkn7605+qsbGx1fP3799fxcXFTvd8x44dKi8vd9rPlXv3RTNnztTWrVubFUm6++67tXXrViUnJzv2/9GPfqT//M//1Pe+9z19+9vfvup5q6ur9eGHHzp1f0ydOlUBAQFat26do84wDK1fv1433nijYzYH4A/ICKBT5Obmaty4cRo+fLjmz5+vfv36qbKyUocOHdLp06f15z//ucXjAgIC9NRTT+mb3/ymJkyYoBkzZqisrEz5+fmmxgisXr1aBw4c0D333KP4+HidO3dO69atU58+fRzTxb72ta9p8+bNWrhwofbt26exY8eqsbFRH374oTZv3qxdu3Y5xkKMHDlSe/bs0XPPPafY2FglJCQ4fVl9Xv/+/dWrVy+tX79eISEh6tGjh5KTk5WQkKBnn31Wc+fO1R133KFZs2Y5pg/edNNNWrJkial7OmPGDC1fvlxBQUGaN2+eY8xDky996Ut6+eWXZbPZNGTIEB06dEh79uxReHh4q+d+6KGH9MYbb2jy5Mn6yle+otLSUr3yyivNpku6cu++KDExUYmJiS1uS0hIcMoEbN26VcuWLdPAgQM1ePBgvfLKK07733XXXYqKinLsO3fuXOXn5zvWQujTp48WL16sH/3oR2poaNDo0aO1bds2/e53v9Orr77KYkLwL506ZwE+oWn64Lvvvtvi9pamDxqGYZSWlhpf//rXjejoaCMgIMC48cYbjS996UvGG2+84dinpalshmEY69atMxISEgyr1WqMGjXKOHDgQLOpbC3Zu3evMXXqVCM2NtYIDAw0YmNjjVmzZhl/+9vfnPa7fPmy8eyzzxpDhw41rFarccMNNxgjR440Vq1aZVRXVzv2+/DDD43x48cbwcHBhqRWpxJu377dGDJkiNGtW7dm92TTpk3Gv/3bvxlWq9UICwszHnzwQeP06dPXPN/nnThxwjFt8+DBg822/9///Z8xd+5cIyIiwujZs6eRnp5ufPjhh82mBl7tnv/4xz82brzxRsNqtRpjx441jhw50uI9N3vvzFIL0wdXrFhx1SmrX2x70+fzi5+/xsZG4+mnnzbi4+ONwMBAY+jQocYr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", "text/plain": [ "
" ] @@ -265,6 +271,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "id": "6562a18e", "metadata": {}, @@ -328,6 +335,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "id": "b5546849", "metadata": {}, @@ -566,6 +574,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "id": "9965c31a", "metadata": {}, @@ -636,6 +645,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "id": "6eea64a5", "metadata": {}, @@ -685,7 +695,7 @@ }, { "data": { - "image/png": "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de2DfX19MWbMGGRkZNg6ijdKT0+Hv78/7r//fgDAv//9bzz88MNo2bIlmjZtiv79+2Pr1q11bnNN11rcnEk37l/T0tLQoUMHNG3aFMOHD8f58+chhMBLL72Etm3bwtfXFw888AB++eWXavX+4x//wKBBg9CsWTP4+/tj1KhR+OGHH+pspwzZHFX72e/ZsyeCgoJs2WP9jbJ27Vq88MILaNOmDZo2bYrCwkIAcnlrbaM1PwICAtCqVSs8+eSTKC0tldr+/fv345577kGLFi3QrFkz9OrVC2+88Ybt70ePHsXkyZPRoUMH+Pj4IDQ0FI8++qjHDXdsDNxyJufixYvo168f8vPzkZSUhG7duuHChQv4+OOPUVJSYnek5oknnkBwcDAWLFiA4uJiTJkyBZ9++imSk5Nx9913IyIiAt9//z1SUlIwderUaqfHHTl58iTGjRuHxx9/HImJiVi1ahUefvhhbNu2DXfffTeAqlPUQ4YMwYULF/DHP/4R7dq1w969ezFv3jxcunQJS5cuRffu3fHBBx/gqaeeQtu2bW1DfIKDg/Hbb79h6NChOHXqFGbMmIGoqCisX78ekydPRn5+Pp588km7Nq1atQqlpaVISkqC2WxGy5Yt8cMPP+COO+5AmzZtMHfuXDRr1gwfffQREhIS8Mknn2D06NF1bmtpaSmuXLlit8zf37/WI2kvv/wyjEYjnnnmGRQUFGDx4sWYOHEi9u/f77B8cHAwli9fjmnTpmH06NEYM2YMANiGlclux8SJE5GSkoL09HTcdttttvorKyvx0UcfYdCgQWjXrp3i11aNr776Cp999hmmT58OAEhNTcW9996LZ599Fm+//TaeeOIJ/Prrr1i8eDEeffRR7Ny50/bcnTt3YuTIkejTpw8WLlwIo9GIVatW4a677sJXX32Ffv362a2roKCg2nvliqNrd911F5544gmkpqYiISEBt912Gy5duoSZM2ciLi6uziFoFRUVOH/+fLWhGq74zM6YMQPNmzfHokWLcOLECSxfvhxnz561hVlNjh49ikGDBqFJkyZISkpCZGQkTp8+jc2bN+PPf/4zAOC7777D3r17MX78eLRt2xZnzpzB8uXLMXToUPz4449o2rSpk68o6Y07M2v16tXw8/NDcnIy/Pz8sHPnTixYsACFhYV49dVXAQBLly7F+++/jw0bNtiGHvXs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AIDD98r6t8ZoxIgRGDNmDKKionD69Gk8//zzGDlyJLKysuDl5eXu5tXIYrFg9uzZuOOOO9CjRw8AVe+RyWRC8+bN7co2lvfI0TYBwO9//3u0b98e4eHhOHr0KJ577jmcOHECn376qRtbS56M2dR4eGI2NdZcAjwvm5hLjY9mOjmeZuTIkbb/79WrF2JiYtC+fXt89NFHmDp1qhtbRjUZP3687f979uyJXr16oWPHjsjMzMSwYcPc2LLaTZ8+HceOHWtU4+rrUtM2JSUl2f6/Z8+eCAsLw7Bhw3D69Gl07NixoZtJ1OgwmxqXxppLgOdlE3Op8dHMcLWgoCB4eXlVm2EjNzcXoaGhbmqV6zRv3hxdunTBqVOn3N0U1azvh6e+V1YdOnRAUFCQpt+zGTNmYMuWLdi1axfatm1rWx4aGory8nLk5+fblW8M71FN2+RITEwMAGj6PaLGjdnUeOghmxpDLgGel03MpcZJM50ck8mEPn36ICMjw7bMYrEgIyMDsbGxbmyZaxQVFeH06dMICwtzd1NUi4qKQmhoqN17VVhYiP3793vEe2X1888/4+rVq5p8z4QQmDFjBjZs2ICdO3ciKirK7u99+vRBkyZN7N6jEydO4Ny5c5p9j+raJkeOHDkCAJp8j8gzMJsaDz1kk5ZzCfC8bGIuNXLunffA3tq1a4XZbBarV68WP/74o0hKShLNmzcXOTk57m6aYk8//bTIzMwU2dnZ4ptvvhFxcXEiKChI5OXlubtpUq5duyYOHz4sDh8+LACI119/XRw+fFicPXtWCCHEyy+/LJo3by42bdokjh49Kh544AERFRUlfvvtNze3vGa1bdO1a9fEM888I7KyskR2drb48ssvxW233SY6d+4sSktL3d30aqZNmyYCAwNFZmamuHTpku1RUlJiK/P444+Ldu3aiZ07d4oDBw6I2NhYERsb68ZW166ubTp16pR48cUXxYEDB0R2drbYtGmT6NChgxg8eLCbW06ejtmkHZ6WTZ6US0J4XjYxlxo3TXVyhBBi2bJlol27dsJkMol+/fqJffv2ubtJThk3bpwICwsTJpNJtGnTRowbN06cOnXK3c2StmvXLgGg2iMxMVEIUTVV5/z580VISIgwm81i2LBh4sSJE+5tdB1q26aSkhIxfPhwERwcLJo0aSLat28vHnvsMc3+iHG0HQDEqlWrbGV+++038cQTT4gWLVqIpk2bitGjR4tLly65r9F1qGubzp07JwYPHixatmwpzGaz6NSpk5gzZ44oKChwb8NJF5hN2uBp2eRJuSSE52UTc6lxMwghhOvPDxEREREREbmHZq7JISIiIiIicgV2coiIiIiIyKOwk0NERERERB6FnRwiIiIiIvIo7OQQEREREZFHYSeHiIiIiIg8Cjs5RERERETkUdjJISIiIiIij8JODhEREREReRR2coiIiIiIyKOwk0NERERERB6FnRwiIiIiIvIo/x8ND78JUUP2OwAAAABJRU5ErkJggg==\n", + "image/png": "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de2DfX19MWbMGGRkZNg6ijdKT0+Hv78/7r//fgDAv//9bzz88MNo2bIlmjZtiv79+2Pr1q11bnNN11rcnEk37l/T0tLQoUMHNG3aFMOHD8f58+chhMBLL72Etm3bwtfXFw888AB++eWXavX+4x//wKBBg9CsWTP4+/tj1KhR+OGHH+pspwzZHFX72e/ZsyeCgoJs2WP9jbJ27Vq88MILaNOmDZo2bYrCwkIAcnlrbaM1PwICAtCqVSs8+eSTKC0tldr+/fv345577kGLFi3QrFkz9OrVC2+88Ybt70ePHsXkyZPRoUMH+Pj4IDQ0FI8++qjHDXdsDNxyJufixYvo168f8vPzkZSUhG7duuHChQv4+OOPUVJSYnek5oknnkBwcDAWLFiA4uJiTJkyBZ9++imSk5Nx9913IyIiAt9//z1SUlIwderUaqfHHTl58iTGjRuHxx9/HImJiVi1ahUefvhhbNu2DXfffTeAqlPUQ4YMwYULF/DHP/4R7dq1w969ezFv3jxcunQJS5cuRffu3fHBBx/gqaeeQtu2bW1DfIKDg/Hbb79h6NChOHXqFGbMmIGoqCisX78ekydPRn5+Pp588km7Nq1atQqlpaVISkqC2WxGy5Yt8cMPP+COO+5AmzZtMHfuXDRr1gwfffQREhIS8Mknn2D06NF1bmtpaSmuXLlit8zf37/WI2kvv/wyjEYjnnnmGRQUFGDx4sWYOHEi9u/f77B8cHAwli9fjmnTpmH06NEYM2YMANiGlclux8SJE5GSkoL09HTcdttttvorKyvx0UcfYdCgQWjXrp3i11aNr776Cp999hmmT58OAEhNTcW9996LZ599Fm+//TaeeOIJ/Prrr1i8eDEeffRR7Ny50/bcnTt3YuTIkejTpw8WLlwIo9GIVatW4a677sJXX32Ffv362a2roKCg2nvliqNrd911F5544gmkpqYiISEBt912Gy5duoSZM2ciLi6uziFoFRUVOH/+fLWhGq74zM6YMQPNmzfHokWLcOLECSxfvhxnz561hVlNjh49ikGDBqFJkyZISkpCZGQkTp8+jc2bN+PPf/4zAOC7777D3r17MX78eLRt2xZnzpzB8uXLMXToUPz4449o2rSpk68o6Y07M2v16tXw8/NDcnIy/Pz8sHPnTixYsACFhYV49dVXAQBLly7F+++/jw0bNtiGHvXs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AIDD98r6t8ZoxIgRGDNmDKKionD69Gk8//zzGDlyJLKysuDl5eXu5tXIYrFg9uzZuOOOO9CjRw8AVe+RyWRC8+bN7co2lvfI0TYBwO9//3u0b98e4eHhOHr0KJ577jmcOHECn376qRtbS56M2dR4eGI2NdZcAjwvm5hLjY9mOjmeZuTIkbb/79WrF2JiYtC+fXt89NFHmDp1qhtbRjUZP3687f979uyJXr16oWPHjsjMzMSwYcPc2LLaTZ8+HceOHWtU4+rrUtM2JSUl2f6/Z8+eCAsLw7Bhw3D69Gl07NixoZtJ1OgwmxqXxppLgOdlE3Op8dHMcLWgoCB4eXlVm2EjNzcXoaGhbmqV6zRv3hxdunTBqVOn3N0U1azvh6e+V1YdOnRAUFCQpt+zGTNmYMuWLdi1axfatm1rWx4aGory8nLk5+fblW8M71FN2+RITEwMAGj6PaLGjdnUeOghmxpDLgGel03MpcZJM50ck8mEPn36ICMjw7bMYrEgIyMDsbGxbmyZaxQVFeH06dMICwtzd1NUi4qKQmhoqN17VVhYiP3793vEe2X1888/4+rVq5p8z4QQmDFjBjZs2ICdO3ciKirK7u99+vRBkyZN7N6jEydO4Ny5c5p9j+raJkeOHDkCAJp8j8gzMJsaDz1kk5ZzCfC8bGIuNXLunffA3tq1a4XZbBarV68WP/74o0hKShLNmzcXOTk57m6aYk8//bTIzMwU2dnZ4ptvvhFxcXEiKChI5OXlubtpUq5duyYOHz4sDh8+LACI119/XRw+fFicPXtWCCHEyy+/LJo3by42bdokjh49Kh544AERFRUlfvvtNze3vGa1bdO1a9fEM888I7KyskR2drb48ssvxW233SY6d+4sSktL3d30aqZNmyYCAwNFZmamuHTpku1RUlJiK/P444+Ldu3aiZ07d4oDBw6I2NhYERsb68ZW166ubTp16pR48cUXxYEDB0R2drbYtGmT6NChgxg8eLCbW06ejtmkHZ6WTZ6US0J4XjYxlxo3TXVyhBBi2bJlol27dsJkMol+/fqJffv2ubtJThk3bpwICwsTJpNJtGnTRowbN06cOnXK3c2StmvXLgGg2iMxMVEIUTVV5/z580VISIgwm81i2LBh4sSJE+5tdB1q26aSkhIxfPhwERwcLJo0aSLat28vHnvsMc3+iHG0HQDEqlWrbGV+++038cQTT4gWLVqIpk2bitGjR4tLly65r9F1qGubzp07JwYPHixatmwpzGaz6NSpk5gzZ44oKChwb8NJF5hN2uBp2eRJuSSE52UTc6lxMwghhOvPDxEREREREbmHZq7JISIiIiIicgV2coiIiIiIyKOwk0NERERERB6FnRwiIiIiIvIo7OQQEREREZFHYSeHiIiIiIg8Cjs5RERERETkUdjJISIiIiIij8JODhEREREReRR2coiIiIiIyKOwk0NERERERB6FnRwiIiIiIvIo/x8ND78JUUP2OwAAAABJRU5ErkJggg==", "text/plain": [ "
" ] @@ -710,7 +720,7 @@ "from units_config import units\n", "\n", "fvf_prep = FiniteVolumeFluxPrep(\n", - " stencil_factory, grid_data\n", + " stencil_factory, grid_data, 0\n", ")\n", "\n", "crx = domain_configuration[\"quantity_factory\"].zeros(\n", @@ -767,6 +777,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "id": "aadc97e9", "metadata": {}, @@ -797,6 +808,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "id": "8cbf898b", "metadata": {}, @@ -867,6 +879,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "id": "de2681d7", "metadata": {}, @@ -1705,7 +1718,7 @@ }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABQsAAAF2CAYAAADJMM7PAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAABqNUlEQVR4nO3deXxU1f3/8fckkAlbEmNIQjDsKiBbDZIvKIKaEpCi1A3UryBVqErcqK1alUXUuCJWEapVaKlURAu2yheKKLhFEYSfWgGRsikkbE0CARLInN8fmAlDFmbuzNxMbl7Px+M+NHfOvffcGTLvzGfOPddljDECAAAAAAAA0OBF1XUHAAAAAAAAAEQGioUAAAAAAAAAJFEsBAAAAAAAAPATioUAAAAAAAAAJFEsBAAAAAAAAPATioUAAAAAAAAAJFEsBAAAAAAAAPATioUAAAAAAAAAJFEsBAAAAAAAAPATioVAmAwcOFADBw6s624AAByiPuRKQUGBrrrqKp1++ulyuVyaPn16XXcJAGo0efJkuVwun3Xt2rXTjTfe6LNu06ZNGjRokOLj4+VyubRo0SJJ0hdffKF+/fqpWbNmcrlcWrdunT0dr+dqej4BRA6KhTX49NNPNXnyZBUWFtZ1VxCkF198UXPmzAnLvr/99ltNnjxZW7duDcv+w2nnzp2aPHmy33/UhOt34h//+IfOPfdcxcbGqk2bNpo0aZKOHTsW0mMAkYBccQ5ypWZ33323li5dqvvvv19z587V4MGDtXjxYk2ePNnWfmzcuFF33323+vXrp9jYWLlcrlqf03BmUV2cP4DQGj16tL7++ms9+uijmjt3rnr37q2jR4/q6quv1v79+/Xss89q7ty5atu2bV13tV6o7vmcN2+e7V8wrVq1SrfddpsyMjLUuHHjKoXjk73yyivq0qWLYmNjdeaZZ+r5558PWV/q4vyBWhlU66mnnjKSzJYtW+q6KwjSOeecYwYMGBCWfS9YsMBIMh988EGVx0pLS01paWlYjhsKX3zxhZFkZs+e7Vf7cPxOLF682LhcLnPRRReZl156ydx+++0mKirK3HLLLSE7BhApyBXnIFdqlpKSYq6//nqfdePHjzd2/8k5e/ZsExUVZbp162Z69epV6+9euLOoLs4fgH8mTZpU5ffzyJEjpqyszPvzoUOHjCTzwAMP+LRbv369kWRefvllW/rqFDU9n0OHDjVt27a1tS+TJk0yjRs3NhkZGeass86q9b161qxZRpK58sorzUsvvWRuuOEGI8k8/vjjIelLXZw/UJtG9pcnncfj8aisrEyxsbF13RWvkpISNWvWrK67Ue+E8nmLiYkJyX6c7J577lGPHj30r3/9S40aHX87iouL02OPPaY777xTnTt3ruMeAnWDXHGOhpYru3fvVkJCQtiPY4zRkSNH1KRJk2ofv+yyy1RYWKgWLVro6aefrnUUPVkE4ERut9vn5z179khSlfe23bt3V7s+GA0ha2t6PsPhVH9P3Xrrrbr33nvVpEkT5eTk6Lvvvqu23eHDh/XAAw9o6NChevPNNyVJY8eOlcfj0dSpUzVu3DiddtppYTsPoE7UdbUyElV8w3TyUvGNtCQzfvx489e//tV07drVNGrUyCxcuNAYc3zkSN++fU1iYqKJjY015557rlmwYEG1x5k7d64577zzTJMmTUxCQoLp37+/Wbp0qU+bxYsXmwsuuMA0bdrUNG/e3Fx66aXmm2++8WkzevRo06xZM/P999+bIUOGmObNm5vLL7+81nP84YcfzK9+9SvTqlUrExMTY9q1a2duueUWnxELmzdvNldddZU57bTTTJMmTUxmZqZ55513fPbzwQcfGElm/vz55pFHHjGtW7c2brfbXHzxxWbTpk1VjvvZZ5+ZIUOGmISEBNO0aVPTvXt3M336dJ8269evN1deeaU57bTTjNvtNhkZGebtt9/2aTN79mwjyXz88cfm7rvvNklJSaZp06Zm+PDhZvfu3d52bdu2rfI6VowGqdjHihUrzK233mpatmxpEhISjDHGbN261dx6663mrLPOMrGxsSYxMdFcddVVPqMSKrY/eakYDTJgwIAqI08KCgrMr371K5OcnGzcbrfp0aOHmTNnjk+bLVu2GEnmqaeeMn/84x9Nhw4dTExMjOndu7dZtWpVzS/qT/bt22d+85vfmG7duplmzZqZFi1amMGDB5t169ZVed1OXmoaZXiq3wkr/v3vfxtJZsaMGT7rf/zxRyPJTJ061fK+gUhDrhxHrjg3V2rq++jRo6tdX6G8vNw8++yzpmvXrsbtdpvk5GQzbtw4s3//fp8+tG3b1gwdOtQsWbLEZGRkGLfbbZ599tlT9t2Y2kf1BptFZWVlZvLkyaZTp07G7XabxMREc/7555t//etfxhgT8vNfunSp6dmzp3G73aZLly7mrbfeCqg/QEP20Ucfmd69exu32206dOhgZs2aVe3IwrZt25rRo0cbY6rP74rHa8oCYwLLneoyw5jA8vqHH34wl19+uWnWrJlJSkoyv/nNb8yxY8d82paXl5vp06ebbt26GbfbbZKSkkx2drb54osvfNrNnTvXnHvuuSY2NtacdtppZsSIEWb79u2nfH79ybmans8BAwZUu77CkSNHzMSJE03Hjh1NTEyMOeOMM8xvf/tbc+TIEZ8+1Pb31KnUNgr83XffNZLMu+++67P+008/NZLM3Llza913cXGxufPOO03btm1NTEyMadmypcnKyjJr1qwxxpiwnP9ZZ51l3G63Offcc83KlSsD6g9gDCMLq3XFFVfou+++09/+9jc9++yzSkpKkiS1bNnS2+b999/XG2+8oZycHCUlJaldu3aSpOeee06XXXaZrr/+epWVlen111/X1VdfrXfeeUdDhw71bj9lyhRNnjxZ/fr108MPP6yYmBh9/vnnev/99zVo0CBJ0ty5czV69GhlZ2friSee0KFDhzRz5kxdcMEFWrt2rfeYknTs2DFlZ2frggsu0NNPP62mTZvWeH47d+5Unz59VFhYqHHjxqlz58768ccf9eabb+rQoUOKiYlRQUGB+vXrp0OHDumOO+7Q6aefrj//+c+67LLL9Oabb+qXv/ylzz4ff/xxRUVF6Z577lFRUZGefPJJXX/99fr888+9bZYtW6Zf/OIXatWqle68806lpqZq/fr1euedd3TnnXdKkv7973/r/PPPV+vWrXXfffepWbNmeuONNzR8+HC99dZbVY57++2367TTTtOkSZO0detWTZ8+XTk5OZo/f74kafr06br99tvVvHlzPfDAA5KklJQUn33cdtttatmypSZOnKiSkhJJxycr/vTTTzVy5EidccYZ2rp1q2bOnKmBAwfq22+/VdOmTXXhhRfqjjvu0B/+8Af9/ve/V5cuXSTJ+9+THT58WAMHDtT333+vnJwctW/fXgsWLNCNN96owsJC73NQYd68eTpw4IB+/etfy+Vy6cknn9QVV1yh//znP2rcuHGNr+9//vMfLVq0SFdffbXat2+vgoIC/fGPf9SAAQP07bffKi0tTV26dNHDDz+siRMnaty4cerfv78kqV+/ftXu81S/E0VFRTp69GiNfaoQGxur5s2bS5LWrl0rSerdu7dPm7S0NJ1xxhnexwEnIFfIFafnyoUXXqi5c+fqhhtu0M9//nONGjVKktSxY0ft3LlTy5Yt09y5c6vs+9e//rXmzJmjMWPG6I477tCWLVv0wgsvaO3atfrkk098+rVx40Zde+21+vWvf62xY8fq7LPPrrHP/go2iyZPnqzc3FzdfPPN6tOnj4qLi7V69Wp9+eWX+vnPf65f//rXITv/TZs2acSIEbrllls0evRozZ49W1dffbWWLFmin//85371B2iovv76aw0aNEgtW7bU5MmTdezYMU2aNKnK+/fJrrjiCiUkJOjuu+/Wtddeq0svvVTNmzdXSkqKWrdurccee0x33HGHzjvvPO++As2d6jIjkLwuLy9Xdna2MjMz9fTTT+u9997TM888o44dO+rWW2/1trvppps0Z84cDRkyRDfffLOOHTumjz76SJ999pn3PfDRRx/VQw89pGuuuUY333yz9uzZo+eff14XXnih1q5dW+toQH9yrqbns1mzZioqKtIPP/ygZ599VpK8nxk8Ho8uu+wyffzxxxo3bpy6dOmir7/+Ws8++6y+++67KjdHqenvqWDUlBUZGRmKiorS2rVr9b//+781bn/LLbfozTffVE5Ojrp27ap9+/bp448/1vr163XuuefqgQceCNn5r1y5UvPnz9cdd9wht9utF198UYMHD9aqVavUrVs3v/oDSGJkYU1q+xZakomKijL//ve/qzx26NAhn5/LyspMt27dzMUXX+xdt2nTJhMVFWV++ctfmvLycp/2Ho/HGGPMgQMHTEJCghk7dqzP4/n5+SY+Pt5nfcU3W/fdd59f5zZq1CgTFRVV5VukE49/1113GUnmo48+8j524MAB0759e9OuXTtvvytGgHTp0sVn9Mhzzz1nJJmvv/7aGGPMsWPHTPv27U3btm3Nf//732qPaYwxl1xyienevbvPtyQej8f069fPnHnmmd51Fd/EZWVl+Wx/9913m+joaFNYWOhdV9PcUhX7uOCCC6p883by62iMMXl5eUaS+ctf/uJdV9vcUiePAJk+fbqRZP76179615WVlZm+ffua5s2bm+LiYmNM5QiQ008/3Wdkwdtvv20kmX/+859VjnWiI0eOVPl3tWXLFuN2u83DDz/sXRfKOQur+zasuqXiW9oT91fdN5XnnXee+Z//+R+/+gXUF+QKuXIyp+WKMZWjGk5U02iNjz76yEgyr732ms/6JUuWVFlfMaJzyZIltfa1OrX97gWbRT179jRDhw6ttU0oz//EkYRFRUWmVatW5mc/+1lA/QEaouHDh5vY2Fizbds277pvv/3WREdH1zqy0Bjf0dknqsirk0f7B5o7J2eGlbw++b34Zz/7mcnIyPD+/P777xtJ5o477qjy3FRk3tatW010dLR59NFHfR7/+uuvTaNGjaqsP5m/OVfT81nTnH1z5841UVFRPn8/GFM5h+Ann3ziXVfb31OnUtvIwvHjx5vo6OhqH2vZsqUZOXJkrfuOj4+vko0nC9X5SzKrV6/2rtu2bZuJjY01v/zlLwPqD8DdkC0aMGCAunbtWmX9iXPn/Pe//1VRUZH69++vL7/80rt+0aJF8ng8mjhxoqKifF+CijswLVu2TIWFhbr22mu1d+9e7xIdHa3MzEx98MEHVY594jdHNfF4PFq0aJGGDRtW5ZuRE4+/ePFi9enTRxdccIH3sebNm2vcuHHaunWrvv32W5/txowZ4zOXUsVItf/85z+Sjn8bs2XLFt11111VvpGqOOb+/fv1/vvv65prrtGBAwe857xv3z5lZ2dr06ZN+vHHH322HTdunM9dq/r376/y8nJt27btlM9FhbFjxyo6Otpn3Ymv49GjR7Vv3z516tRJCQkJPq9lIBYvXqzU1FRde+213nWNGzfWHXfcoYMHD2rlypU+7UeMGOEz98XJz2lN3G63999VeXm59u3bp+bNm+vss8+23PdTeeaZZ7Rs2bJTLr/73e+82xw+fNjb35PFxsZ6HwcaCnKFXAlUfc+VBQsWKD4+Xj//+c99/k1mZGSoefPmVf5Ntm/fXtnZ2ZaPV51gsyghIUH//ve/tWnTpoCPHej5p6Wl+YxIiouL06hRo7R27Vrl5+cH3R/AqcrLy7V06VINHz5cbdq08a7v0qVLyN9TrOTOyZlhJa9vueUWn5/79+/v897+1ltvyeVyadKkSVW2rci8v//97/J4PLrmmmt8jpuamqozzzyz2uOeKBw5Jx1/r+zSpYs6d+7s06+LL75Ykqr0q6a/p4Jx+PDhGucN9jcrPv/8c+3cuTPgYwd6/n379lVGRob35zZt2ujyyy/X0qVLVV5eHnR/0HBwGbJF7du3r3b9O++8o0ceeUTr1q1TaWmpd/2JHzw2b96sqKioWt/EKv7Iq3gTOFlcXJzPz40aNdIZZ5xxyn7v2bNHxcXF3iHINdm2bZsyMzOrrK+4FGrbtm0++zgxeCV5P4z897//lXT8nCXVetzvv/9exhg99NBDeuihh6pts3v3brVu3drv4/qjutfy8OHDys3N1ezZs/Xjjz/KGON9rKioyO99n2jbtm0688wzq3yQP/E5PZHVc/N4PHruuef04osvasuWLd5QkKTTTz/dUt9P5cRA8lfFHxQn/p5UqG3SesCpyBVyJVD1PVc2bdqkoqIiJScnV/t4xc0DKtT0OxKMYLPo4Ycf1uWXX66zzjpL3bp10+DBg3XDDTeoR48epzx2oOffqVMnn997STrrrLMkSVu3blVqampQ/QGcas+ePTp8+LDOPPPMKo+dffbZWrx4cciOZSV3Tn5vCzSvY2NjfaY1kY6/v5/43r5582alpaUpMTGxxr5v2rRJxphqnydJtU5XIYUn5yr6tX79+irnWMGurCgrK6v2MX+y4sknn9To0aOVnp6ujIwMXXrppRo1apQ6dOhwymMHev7VvX5nnXWWDh06pD179ig1NTWo/qDhoFhoUXVvCB999JEuu+wyXXjhhXrxxRfVqlUrNW7cWLNnz9a8efMC2r/H45F0fL6K1NTUKo9X3K2vwonf+teFk0dQVDgxJE6l4pzvueeeGr/l69SpU8iPW91refvtt2v27Nm666671LdvX8XHx8vlcmnkyJHefoab1XN77LHH9NBDD+lXv/qVpk6dqsTEREVFRemuu+4KW9/3799fY4CeqEmTJoqPj5cktWrVSpK0a9cupaen+7TbtWuX+vTpE/qOAhGMXPFFroRepOWKx+NRcnKyXnvttWofP/mDUTi+RAo2iy688EJt3rxZb7/9tv71r3/pT3/6k5599lnNmjVLN998c63bBnr+/gimPwCCZyV3Tn5vCzSva3pvD5TH45HL5dL//d//VbvPijn0ahKunPN4POrevbumTZtW7eMnv3eHKyvKy8u1e/duny94ysrKtG/fPqWlpdW6/TXXXKP+/ftr4cKF+te//qWnnnpKTzzxhP7+979ryJAhtW4b6Pn7I5j+oOGgWFiDk7+59cdbb72l2NhYLV261OdyltmzZ/u069ixozwej7799lv16tWr2n117NhRkpScnKysrKyA+1KTli1bKi4uTt98802t7dq2bauNGzdWWb9hwwbv44GoOJ9vvvmmxvOp+CajcePGIT1nK6/lm2++qdGjR+uZZ57xrjty5IgKCwst77tt27b66quv5PF4fD6AW31Oa/Lmm2/qoosu0iuvvOKzvrCw0HtTBSnw56W29ldccUWVy92qM3r0aM2ZM0eSvP/2V69e7fNhbOfOnfrhhx80bty4gPoHRDpyhVxxeq7UpKZz6tixo9577z2df/75dTaaPBRZlJiYqDFjxmjMmDE6ePCgLrzwQk2ePNlbnAvV+VeMWDpxf999950k+Uzgf6r+AA1Ny5Yt1aRJk2ovz68ul4IRitwJR1537NhRS5cu1f79+2scXdixY0cZY9S+fXvvqOVA+JtzNantvfL//b//p0suucRS/obCiVlx6aWXetevXr1aHo+nxr+9TtSqVSvddtttuu2227R7926de+65evTRR73FuVCdf3X/zr/77js1bdrU50uoU/UHYM7CGjRr1kyS/H5zk45/q+NyuXwuz9m6dWuVOxQNHz5cUVFRevjhh6t8y1Lx7X52drbi4uL02GOPVXuX2T179vjdrxNFRUVp+PDh+uc//6nVq1dXebzi+JdeeqlWrVqlvLw872MlJSV66aWX1K5du4DngTj33HPVvn17TZ8+vcpzWnHM5ORkDRw4UH/84x+1a9euKvuwes7NmjUL6HWUjr+WJ4+0eP75531e24p9S/79O7n00kuVn5/vvaOmdPxuo88//7yaN2+uAQMGBNTHmlTX9wULFlSZHyXQf+O1tbcyZ+E555yjzp0766WXXvJ5XmfOnCmXy6WrrrrKr34B9QW5Qq44PVdqUtM5XXPNNSovL9fUqVOrbHPs2LGAn2Mrgs2iffv2+fzcvHlzderUyeey5lCd/86dO7Vw4ULvz8XFxfrLX/6iXr16eUcf+dMfoKGJjo5Wdna2Fi1apO3bt3vXr1+/XkuXLg3psUKRO+HI6yuvvFLGGE2ZMqXKYxXv71dccYWio6M1ZcqUKu/5xpgq7y8n8zfnalJxR+STXXPNNfrxxx/18ssvV3ns8OHD3jtIh9PFF1+sxMREzZw502f9zJkz1bRpUw0dOrTGbcvLy6ucV3JystLS0qpkRSjOPy8vz2eOyB07dujtt9/WoEGDFB0d7Xd/AEYW1qBiDrYHHnhAI0eOVOPGjTVs2DDvH3zVGTp0qKZNm6bBgwfruuuu0+7duzVjxgx16tRJX331lbddp06d9MADD2jq1Knq37+/rrjiCrndbn3xxRdKS0tTbm6u4uLiNHPmTN1www0699xzNXLkSLVs2VLbt2/Xu+++q/PPP18vvPCCpXN77LHH9K9//UsDBgzw3n59165dWrBggT7++GMlJCTovvvu09/+9jcNGTJEd9xxhxITE/XnP/9ZW7Zs0VtvvRXwpWlRUVGaOXOmhg0bpl69emnMmDFq1aqVNmzYoH//+9/eoJ4xY4YuuOACde/eXWPHjlWHDh1UUFCgvLw8/fDDD/p//+//BXy+GRkZmjlzph555BF16tRJycnJNc4BUuEXv/iF5s6dq/j4eHXt2lV5eXl67733qszN1KtXL0VHR+uJJ55QUVGR3G63Lr744mrnHxo3bpz++Mc/6sYbb9SaNWvUrl07vfnmm/rkk080ffp0tWjRIuBzq6nvDz/8sMaMGaN+/frp66+/1muvvVZlDoqOHTsqISFBs2bNUosWLdSsWTNlZmbWOM9Hbb8TVuYslKSnnnpKl112mQYNGqSRI0fqm2++0QsvvKCbb77ZO+cW4BTkCrni9FypScW//TvuuEPZ2dmKjo7WyJEjNWDAAP36179Wbm6u1q1bp0GDBqlx48batGmTFixYoOeee87yF0dFRUV6/vnnJUmffPKJJOmFF15QQkKCEhISlJOT420bTBZ17dpVAwcOVEZGhhITE7V69Wq9+eabPvsP1fmfddZZuummm/TFF18oJSVFr776qgoKCnxGGvvTH6AhmjJlipYsWaL+/fvrtttu836xcs455/jkaSgEmzvhyOuLLrpIN9xwg/7whz9o06ZNGjx4sDwejz766CNddNFFysnJUceOHfXII4/o/vvv19atWzV8+HC1aNFCW7Zs0cKFCzVu3Djdc889NR7D35yrSUZGhubPn68JEybovPPOU/PmzTVs2DDdcMMNeuONN3TLLbfogw8+0Pnnn6/y8nJt2LBBb7zxhpYuXVrtDdb8sW3bNs2dO1eSvF94PvLII5KOj86/4YYbJB2/tHnq1KkaP368rr76amVnZ+ujjz7SX//6Vz366KO1zgV54MABnXHGGbrqqqvUs2dPNW/eXO+9956++OILn1GYoTr/bt26KTs7W3fccYfcbrdefPFFSfIWiv3tD1D9vcFh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586duuKKK0LecQCobzxyyWMsLFyyFTbkGgBYZynXyLSwIdMAIEguV+CFQpczcy2gy5CXLFni8/OcOXOUnJysNWvW6MILL1RRUZFeeeUVzZs3TxdffLEkafbs2erSpYs+++wz/c///E/oeg4A9YyxOGeh4YNV2JBrAGCdlVwj08KHTAOAIHEZsldQZ1VUVCRJSkxMlCStWbNGR48eVVZWlrdN586d1aZNG+Xl5VW7j9LSUhUXF/ssAADUBXINAOAUocg0iVwDgIbIcrHQ4/Horrvu0vnnn69u3bpJkvLz8xUTE6OEhASftikpKcrPz692P7m5uYqPj/cu6enpVrsEABHN0iXIPy0IP3INAAJDpkWuUGWaRK4BaECYs9DL8lmNHz9e33zzjV5//fWgOnD//ferqKjIu+zYsSOo/QFApOIGJ5GNXAOAwJBpkStUmSaRawAaEIqFXgHNWVghJydH77zzjj788EOdccYZ3vWpqakqKytTYWGhzzdWBQUFSk1NrXZfbrdbbrfbSjcAoF6xOqKCURjhR64BQOCs5BqZFn6hzDSJXAPQgDBnoVdAZ2WMUU5OjhYuXKj3339f7du393k8IyNDjRs31vLly73rNm7cqO3bt6tv376h6TEA1FOenyaCt7IgPMg1ALCOTIssZBoABImRhV4BjSwcP3685s2bp7ffflstWrTwzm0RHx+vJk2aKD4+XjfddJMmTJigxMRExcXF6fbbb1ffvn25uxaABo+RhZGHXAMA6xhZGFnINAAIEiMLvQIqFs6cOVOSNHDgQJ/1s2fP1o033ihJevbZZxUVFaUrr7xSpaWlys7O1osvvhiSzgIAEErkGgDAKcg0AECoBFQsNMacsk1sbKxmzJihGTNmWO4UADgRIwsjD7kGANYxsjCykGkAECRGFnpZusEJACBwFAsBAE5CsRAA4CgUC72ceVYAEIEqPlRZWQAAiDRkGgDAUVyuwG9u4rKWazNmzFC7du0UGxurzMxMrVq1qsa2L7/8svr376/TTjtNp512mrKysmptHwoUCwHAJkbW7hx56ouKAACwn5VcI9MAABHLprshz58/XxMmTNCkSZP05ZdfqmfPnsrOztbu3burbb9ixQpde+21+uCDD5SXl6f09HQNGjRIP/74Y7BnXCOKhQAAAAAAAIANpk2bprFjx2rMmDHq2rWrZs2apaZNm+rVV1+ttv1rr72m2267Tb169VLnzp31pz/9SR6PR8uXLw9bHykWAoBNuAwZAOAkZBoAwFFsGFlYVlamNWvWKCsr64TDRikrK0t5eXl+7ePQoUM6evSoEhMTAzp2ILjBCQDYhBucAACchBucAAAcJYgbnBQXF/usdrvdcrvdVZrv3btX5eXlSklJ8VmfkpKiDRs2+HXIe++9V2lpaT4Fx1BjZCEA2ISRhQAAJyHTAACOEsTIwvT0dMXHx3uX3NzcsHTx8ccf1+uvv66FCxcqNjY2LMeQGFkIALZhZCEAwEkYWQgAcJQgRhbu2LFDcXFx3tXVjSqUpKSkJEVHR6ugoMBnfUFBgVJTU2s91NNPP63HH39c7733nnr06BFYPwPEyEIAsIkxLssLAACRhkwDADhKECML4+LifJaaioUxMTHKyMjwuTlJxc1K+vbtW2PXnnzySU2dOlVLlixR7969Q3ve1WBkIQAAAAAAAGCDCRMmaPTo0erdu7f69Omj6dOnq6SkRGPGjJEkjRo1Sq1bt/ZeyvzEE09o4sSJmjdvntq1a6f8/HxJUvPmzdW8efOw9JFiIQDYxCOXPLJwGbKFbQAACDcruUamAQAiVhCXIQdixIgR2rNnjyZOnKj8/Hz16tVLS5Ys8d70ZPv27Yo6Yb8zZ85UWVmZrrrqKp/9TJo0SZMnTw74+P6gWAgANmHOQgCAkzBnIQDAUWwqFkpSTk6OcnJyqn1sxYoVPj9v3brV0jGCQbEQAGxida4m5ncCAEQiK7lGpgEAIpbLFXjxz+XMXKNYCAA2YWQhAMBJGFkIAHAUG0cWRjqKhQBgE0YWAgCchJGFAABHoVjo5cyzAgAAAAAAABAwRhYCgE2MxcuQGYUBAIhEVnKNTAOAyGYCuGu9SyaMPakDjCz0olgIADYxkoyFPHVYBAMAHMJKrpFpAICIRbHQi2IhANjEI5dcAXxTd+J2AABEGiu5RqYBACIWxUIvioUAYBNucAIAcBJucAIAcBSKhV4UCwHAJh7jksvChyQr8xwCABBuVnKNTAMARCyKhV7OPCsAAAAAAAAAAWNkIQDYxBiLNzhhNngAQASykmtkGgAgYjGy0ItiIQDYhDkLAQBOwpyFAABHoVjoRbEQAGxCsRAA4CQUCwEAjuJyBV78czkz1ygWAoBNuMEJAMBJuMEJAMBRGFnoRbEQAGzCnIUAACdhzkIAgKNQLPSiWIgGJ6pJE/8aBjCc2JSW+t+2vNzvtgAA1MbVqLHfbaOaxPrdNpCsIgMBAKFy9Jj/n8EaRwWQKUeO+NcuJsb/fTZyZjnFJb7VAcVCALDN8REYVuYsDENnAAAIkpVcI9MAABGLkYVeFAsBwCbc4AQA4CTc4AQA4CgUC70oFgKATcxPi5XtAACINFZyjUwDAEQsioVeFAsBwCaMLAQAOAkjCwEAjkKx0MuZZwUAkcgEsQRoxowZateunWJjY5WZmalVq1bV2r6wsFDjx49Xq1at5Ha7ddZZZ2nx4sWBHxgA0HDYlGkSuQYAsEFFsTDQxYEYWQgADjN//nxNmDBBs2bNUmZmpqZPn67s7Gxt3LhRycnJVdqXlZXp5z//uZKTk/Xmm2+qdevW2rZtmxISEuzvPAAAJyHXAACwF8VCALCLxcuQFeA206ZN09ixYzVmzBhJ0qxZs/Tuu+/q1Vdf1X333Vel/auvvqr9+/fr008/VePGjSVJ7dq1C7yfAICGxUquWchBcg0AYAsuQ/Zy5lkBQAQyxvoiScXFxT5LaWlplWOUlZVpzZo1ysrK8q6LiopSVlaW8vLyqu3XP/7xD/Xt21fjx49XSkqKunXrpscee0zl5eVheR4AAM4Q7kyTyDUAgI1crsAvQXY5cy5eioUAYJOKieCtLJKUnp6u+Ph475Kbm1vlGHv37lV5eblSUlJ81qekpCg/P7/afv3nP//Rm2++qfLyci1evFgPPfSQnnnmGT3yyCOhfxIAAI4R7kyTyDUAgI2Ys9CLy5ABwC7GZenyq4ptduzYobi4OO9qt9sdkm55PB4lJyfrpZdeUnR0tDIyMvTjjz/qqaee0qRJk0JyDACAA1nJtTBnmkSuAQAs4jJkL4qFAGCTEy+/CnQ7SYqLi/P5YFWdpKQkRUdHq6CgwGd9QUGBUlNTq92mVatWaty4saKjo73runTpovz8fJWVlSkmJibwTgMAHM9KrgWSaRK5BgCwEcVCL4qFiFhRgfwhd04nv5se6HjqP0wlydPY/8M333HE77aNvtnqd9vywkL/OwFIiomJUUZGhpYvX67hw4dLOj7CYvny5crJyal2m/PPP1/z5s2Tx+NR1E9h991336lVq1Z8oALqQKPkln63PdKjrd9tD7b2P9galfpfAYrbWOx3W9eGLX618xypfv66ahmP/21R75BrQGQ6cND/UcU//OD/fps29b9t2yT/P4Npwwb/2/rrrLP8bxvIiTm0+IT6hX+FAGAXE8QSgAkTJujll1/Wn//8Z61fv1633nqrSkpKvHeRHDVqlO6//35v+1tvvVX79+/XnXfeqe+++07vvvuuHnvsMY0fPz648wUAOJsNmSaRawAAmzBnoRcjCwHAJidO7B7odoEYMWKE9uzZo4kTJyo/P1+9evXSkiVLvJPDb9++3TvSQjo+yfzSpUt19913q0ePHmrdurXuvPNO3XvvvQH3FQDQcFjJNSs5SK4BAGzBZcheFAsBwE4WRlRYkZOTU+PlWStWrKiyrm/fvvrss8/C3CsAgOOQawAAp6BY6EWxEABsYtfIQgAA7GDXyEIAAGxBsdCLYiEA2MXiXE12jdoAACAgVnKNTAMARCqKhV7OPCsAAAAAAAAAAQu4WPjhhx9q2LBhSktLk8vl0qJFi3wev/HGG+VyuXyWwYMHh6q/AFCPuYJYEA5kGgAEg0yLNOQaAATB5Qr8TsguZ+ZawMXCkpIS9ezZUzNmzKixzeDBg7Vr1y7v8re//S2oTgKAI5ggFoQFmQYAQSDTIg65BgBBCLRQaOWy5Xoi4DkLhwwZoiFDhtTaxu12KzU11XKnAMCRmLMw4pBpABAE5iyMOOQaAASBOQu9wnJWK1asUHJyss4++2zdeuut2rdvX41tS0tLVVxc7LMAgCMZl/UFdSaQTJPINQANCJlWL5FrAFADRhZ6hfxuyIMHD9YVV1yh9u3ba/Pmzfr973+vIUOGKC8vT9HR0VXa5+bmasqUKaHuBhzA1bmj3223XZrgd9vGff7rV7tG0R6/97l93el+t23jau9326i8b/xua44d9bst6oYxxxcr26FuBJppErmGmkU1bepXu5I+/ufE9qv8z6rEpP1+ty0sifW77cHPE/xue8b+JP8a7qm9eHEiz+EjfreV8f/5wqlZyTUyrW6RaziVo8f8K+h/+63/+9ywwf+2/fr531Z+5qokaedO/9rl5/u/z+bN/W8byGjeQPbr0EJVnWFkoVfIi4UjR470/n/37t3Vo0cPdezYUStWrNAll1xSpf3999+vCRMmeH8uLi5Wenp6qLsFAEDAAs00iVwDAEQucg0A4I+wl0A7dOigpKQkff/999U+7na7FRcX57MAgCNxg5N671SZJpFrABoQMq3eI9cA4ARchuwV8pGFJ/vhhx+0b98+tWrVKtyHAoDIZnWuJuZ3ihhkGgCcwEqukWkRhVwDgBNwGbJXwMXCgwcP+nzztGXLFq1bt06JiYlKTEzUlClTdOWVVyo1NVWbN2/W7373O3Xq1EnZ2dkh7TgA1Dcuc3yxsh3Cg0wDAOus5BqZFl7kGgAEgWKhV8DFwtWrV+uiiy7y/lwxf8Xo0aM1c+ZMffXVV/rzn/+swsJCpaWladCgQZo6darcbnfoeg0A9ZHVy6/4YBU2ZBoABMFKrpFpYUWuAUAQKBZ6BVwsHDhwoEwttzFbunRpUB0CAMfiMuSIQ6YBQBC4DDnikGsAEASXK/Din8uZuebMEigAAAAAAACAgIX9BicAgJ9wGTIAwEm4DBkA4CRchuxFsRAA7EKxEADgJBQLAQBOQrHQi2IhANiFYiEAwEkoFgIAnIRioRfFQgCwCzc4AQA4CTc4AQA4CcVCL4qFsJWrUWO/2x7sGOd326jeRX63fbnHXL/aNXaV+73PX7v+1++2xRuT/G6b+FVTv9uWF/n/HKBuuMzxxcp2AOq/qMTT/Gq3/2z//zz7de9lfrfNav6t322/PNzW77aPFQ/1u215SoJf7aKKDvi9T1dpqd9tjf/RDj9YyTUyDYhshw75127rVv/3GUjbbt38b2vk/5cPrv37/Wv4ww/+d2DvXv/bJiT437ap/58B/S1UBfRcNeQh4BQLvZx5VgAAAAAAAEAEmjFjhtq1a6fY2FhlZmZq1apVtbZfsGCBOnfurNjYWHXv3l2LFy8Oa/8oFgKAXUwQCwAAkYZMAwA4ScXIwkCXAM2fP18TJkzQpEmT9OWXX6pnz57Kzs7W7t27q23/6aef6tprr9VNN92ktWvXavjw4Ro+fLi++eabYM+4RhQLAQAAAAAA0LDZVCycNm2axo4dqzFjxqhr166aNWuWmjZtqldffbXa9s8995wGDx6s3/72t+rSpYumTp2qc889Vy+88EKwZ1wjioUAYBOXKud3Cmip644DAFANS7lW150GAKAmQRQLi4uLfZbSGuZULisr05o1a5SVlXXCYaOUlZWlvLy8arfJy8vzaS9J2dnZNbYPBYqFAGCXirtGWlkAAIg0ZBoAwEGMXJYWSUpPT1d8fLx3yc3NrfYYe/fuVXl5uVJSUnzWp6SkKD8/v9pt8vPzA2ofCtwNGQDsYnWuJuZ3AgBEIiu5RqYBACKUx3N8CXQbSdqxY4fi4uK8691udwh7Zj+KhQAAAAAAAIBFcXFxPsXCmiQlJSk6OloFBQU+6wsKCpSamlrtNqmpqQG1DwUuQwYAu3A3ZACAk5BpAAAHqRhZGOgSiJiYGGVkZGj58uUnHNej5cuXq2/fvtVu07dvX5/2krRs2bIa24cCIwsBwCYVk7tb2Q4AgEhjJdfINABApArmMuRATJgwQaNHj1bv3r3Vp08fTZ8+XSUlJRozZowkadSoUWrdurV33sM777xTAwYM0DPPPKOhQ4fq9ddf1+rVq/XSSy8FfnA/USwEALswZyEAwEmYsxAA4CB2FQtHjBihPXv2aOLEicrPz1evXr20ZMkS701Mtm/frqioyguB+/Xrp3nz5unBBx/U73//e5155platGiRunXrFvjB/USxEADsQrEQAOAkFAsBAA5iV7FQknJycpSTk1PtYytWrKiy7uqrr9bVV19t7WAWUCwEAJtwGTIAwEm4DBkA4CR2FgsjHTc4AQAAAAAAACCJkYUAYB/jOr5Y2Q4AgEhjJdfINABAhGJkYSWKhQBgF+YsBAA4CXMWAgAchGJhJYqFAGAT5iwEADgJcxYCAJzEmMCLf8ahuUaxEADswshCAICTMLIQAOAgjCysxA1OAAAAAAAAAEhiZCEA2MfiZciMwgAARCQruUamAQAiFCMLK1EsBAC7cBkyAMBJuAwZAOAgFAsrUSwEALtQLAQAOAnFQgCAg1AsrESxELYyx4763bb55mK/2+5bfZrfbcdG3eBXu0bR/v/WH1x3ut9t22w97HdbT8khv9si8nE3ZKBh8+z/r1/tEje29nuff1w9wO+2C5LO9bvtgZJYv9vGrW/sd9vogny/2nnKyvzep/HwJllXuBsy4DxNm/rXrl07//d55Ij/bePi/G/rCuTbh8RE/9oFkD9KSvK/baz/uaqo0N9aIqDnqgGjWFiJYiEAAAAAAAAaNIqFlbgbMgAAAAAAAABJjCwEAPswZyEAwEmYsxAA4CCMLKxEsRAAbMKchQAAJ2HOQgCAk1AsrESxEADsxIckAICTkGsAAIcwJvDin3FoDlIsBAC7cBkyAMBJuAwZAOAgjCysRLEQAGzCZcgAACfhMmQAgJNQLKzE3ZABAAAAAAAASGJkIQDYh8uQAQBOwmXIAAAHYWRhJUYWAoBNKi7XsrIEasaMGWrXrp1iY2OVmZmpVatW+bXd66+/LpfLpeHDhwd+UABAg2JXpknkGgAg/CqKhYEuTkSxEADsYoJYAjB//nxNmDBBkyZN0pdffqmePXsqOztbu3fvrnW7rVu36p577lH//v0DOyAAoGGyIdMkcg0AYA+KhZW4DBkRy2zY7HfbNtGd/G57YGO8X+08jf3epdrsOOR320bfbPW7bfmxo/53ApHPpsuQp02bprFjx2rMmDGSpFmzZundd9/Vq6++qvvuu6/abcrLy3X99ddrypQp+uijj1RYWGihowBq4znkX1Y0W7XF7322P9LW77YHWyf63Tap1P83nriNhX639eze61+7I6V+71PGoX+l1wc2XYZMrgH2adzIv1/Srl1dfu8zLs7/48fE+N9WfuaqJCktLbTtAm3btKn/baMY01VXuAy5Ev8KAcAmwV6GXFxc7LOUllb9MF1WVqY1a9YoKyvLuy4qKkpZWVnKy8ursW8PP/ywkpOTddNNN4X8vAEAzhTuTJPINQCAfRhZWIliIQDUE+np6YqPj/cuubm5Vdrs3btX5eXlSklJ8VmfkpKi/Pz8avf78ccf65VXXtHLL78cln4DAHAyfzJNItcAAKgLXIYMAHYJ8jLkHTt2KO6E6zjcbnfQXTpw4IBuuOEGvfzyy0pKSgp6fwCABiSIy5DDkWkSuQYAsI7LkCtRLAQAuwRZLIyLi/P5YFWdpKQkRUdHq6CgwGd9QUGBUlNTq7TfvHmztm7dqmHDhnnXeX5KvEaNGmnjxo3q2LGjhU4DABwviGKhP5kmkWsAAPsYE3jxz1j5fFcPcBkyANgk2DkL/RETE6OMjAwtX77cu87j8Wj58uXq27dvlfadO3fW119/rXXr1nmXyy67TBdddJHWrVun9PT0UJw6AMCBwp1pErkGALAPcxZWYmQhANjFprshT5gwQaNHj1bv3r3Vp08fTZ8+XSUlJd67SI4aNUqtW7dWbm6uYmNj1a1bN5/tExISJKnKegAAfNh0N2RyDQBgBy5DrhTwyMIPP/xQw4YNU1pamlwulxYtWuTzuDFGEydOVKtWrdSkSRNlZWVp06ZNoeovANRbdowslKQRI0bo6aef1sSJE9WrVy+tW7dOS5Ys8U4Ov337du3atSsMZ1j/kGkAYJ0dmSaRa4Eg1wDAOkYWVgq4WFhSUqKePXtqxowZ1T7+5JNP6g9/+INmzZqlzz//XM2aNVN2draOHDkSdGcBAP7JycnRtm3bVFpaqs8//1yZmZnex1asWKE5c+bUuO2cOXOqfLhwKjINAOoHcs0/5BoAIBQCvgx5yJAhGjJkSLWPGWM0ffp0Pfjgg7r88sslSX/5y1+UkpKiRYsWaeTIkcH1FgDqM5suQ4b/yDQACIJNlyHDf+QaAFjHZciVQnqDky1btig/P19ZWVnedfHx8crMzFReXl6125SWlqq4uNhnAQBHMkEssJ2VTJPINQANCJlWr5BrAFA7LkOuFNIbnOTn50uSd/6QCikpKd7HTpabm6spU6aEshtwCE9Zmf+N137rd9MWG5r419Dl8nufprTU77bl5eV+t4WzuH5arGwH+1nJNIlcQ/CO7d7jd9vGKwr9bnt6k1i/25oAsiqQDAxkv4h8VnKNTKs75BpCqUVz/yv/nTv7/5t/7FgAnYjyP9fUubN/7WJi/N9nI+4X6zSMLKwU0pGFVtx///0qKiryLjt27KjrLgFAeDCysEEg1wA0GGRag0CuAWgoGFlYKaSl8NTUVElSQUGBWrVq5V1fUFCgXr16VbuN2+2W2+0OZTcAICJZvQuklW0QPCuZJpFrABoOK7lGptUdcg0AasfIwkohHVnYvn17paamavny5d51xcXF+vzzz9W3b99QHgoAgLAi0wAATkKuAQD8FfDIwoMHD+r777/3/rxlyxatW7dOiYmJatOmje666y498sgjOvPMM9W+fXs99NBDSktL0/Dhw0PZbwCof7gbcsQh0wAgCNwNOeKQawBgnTGBjxQ0Ds21gIuFq1ev1kUXXeT9ecKECZKk0aNHa86cOfrd736nkpISjRs3ToWFhbrgggu0ZMkSxcYGMPkoADiVQ8OkviLTACBI5FpEIdcAwDouQ64UcLFw4MCBMrWUTl0ulx5++GE9/PDDQXUMAJyGOQsjD5kGANYxZ2HkIdcAwDqKhZW41zcA2IXLkAEATsJlyAAAB6FYWIliIQDYhJGFAAAnYWQhAMBJKBZWCundkAEAAAAAAADUX4wsBAC7cBkyAMBJuAwZAOAgjCysRLEQAGzCZcgAACfhMmQAgJNQLKxEsRANjufw4bruAhoqRhYCCDFz7KjfbcsP+N8W8AsjCwGEWONGgbxJBDCrWtOmAfeloTJy+d3W5bA3dYqFlSgWAoBdKBYCAJyEYiEAwEEoFlaiWAgANuEyZACAk3AZMgDASSgWVuJuyAAAAAAAAAAkMbIQAOzDZcgAACfhMmQAgIMYE/hIQePQXGNkIQDYxGWM5QUAgEhDpgEAnKTiMuRAl3DZv3+/rr/+esXFxSkhIUE33XSTDh48WGv722+/XWeffbaaNGmiNm3a6I477lBRUVHAx2ZkIQDYhZGFAAAnYWQhAMBBIm3Owuuvv167du3SsmXLdPToUY0ZM0bjxo3TvHnzqm2/c+dO7dy5U08//bS6du2qbdu26ZZbbtHOnTv15ptvBnRsioUAYBNucAIAcBJucAIAcJJIKhauX79eS5Ys0RdffKHevXtLkp5//nldeumlevrpp5WWllZlm27duumtt97y/tyxY0c9+uij+t///V8dO3ZMjRr5XwLkMmQAsIsJYgEAINKQaQAAB4mky5Dz8vKUkJDgLRRKUlZWlqKiovT555/7vZ+ioiLFxcUFVCiUGFkIAAAAAAAAWFZcXOzzs9vtltvttry//Px8JScn+6xr1KiREhMTlZ+f79c+9u7dq6lTp2rcuHEBH5+RhQBgk4rLtawsAABEGjINAOAkwYwsTE9PV3x8vHfJzc2t9hj33XefXC5XrcuGDRuCPpfi4mINHTpUXbt21eTJkwPenpGFAGAXbnACAHASbnACAI7jasBv1MHMWbhjxw7FxcV519c0qvA3v/mNbrzxxlr32aFDB6Wmpmr37t0+648dO6b9+/crNTW11u0PHDigwYMHq0WLFlq4cKEaN2586hM5CcVCALAJNzgBADgJNzgBADhJMMXCuLg4n2JhTVq2bKmWLVuesl3fvn1VWFioNWvWKCMjQ5L0/vvvy+PxKDMzs8btiouLlZ2dLbfbrX/84x+KjY3170ROwmXIAGAXbnACAHASMg0A4CCRdIOTLl26aPDgwRo7dqxWrVqlTz75RDk5ORo5cqT3Tsg//vijOnfurFWrVkk6XigcNGiQSkpK9Morr6i4uFj5+fnKz89XeXl5QMdnZCEA2IgRFQAAJyHXAABOYUzgxT8Txhx87bXXlJOTo0suuURRUVG68sor9Yc//MH7+NGjR7Vx40YdOnRIkvTll19675TcqVMnn31t2bJF7dq18/vYFAsBAAAAAACACJKYmKh58+bV+Hi7du1kTqhWDhw40OfnYFAsBAC7GGPtq6dwfl0FAIBVVnKNTAMARKhg5ix0GoqFAGATbnACAHASbnACAHASioWVKBYCgF2sTuzOBysAQCSykmtkGgAgQlEsrESxEABs4vIcX6xsBwBApLGSa2QaACBSUSysRLEQAOzCyEIAgJMwshAA4CAUCytF1XUHAAAAAAAAAEQGRhYCgE24wQkAwEm4wQkAwEkYWViJYiEA2MWY44uV7QAAiDRWco1MAwBEKIqFlSgWAoBNGFkIAHASRhYCAJyEYmElioUAYBducAIAcBJucAIAcBBjAi/+OXXAPMVCALAJIwsBAE7CyEIAgJMwsrASd0MGAAAAAAAAIImRhQBgH25wAgBwEm5wAgBwEEYWVqJYCAA24TJkAICTcBkyAMBJKBZWolgIAHbhBicAACfhBicAAAehWFiJYiEA2ISRhQAAJ2FkIQDASSgWVqJYCAB28Zjji5XtAACINFZyjUwDAEQoioWVuBsyAAAAAAAAAEmMLAQA+zBnIQDASZizEADgIIwsrESxEABs4pLFOQtD3hMAAIJnJdfINABApKJYWInLkAHALsZYXwI0Y8YMtWvXTrGxscrMzNSqVatqbPvyyy+rf//+Ou2003TaaacpKyur1vYAAEiyLdMkcg0AEH7GVBYM/V0sxlrEo1gIADapuGuklSUQ8+fP14QJEzRp0iR9+eWX6tmzp7Kzs7V79+5q269YsULXXnutPvjgA+Xl5Sk9PV2DBg3Sjz/+GIKzBgA4lR2ZJpFrAAB7BFootDISsb6gWAgADjNt2jSNHTtWY8aMUdeuXTVr1iw1bdpUr776arXtX3vtNd12223q1auXOnfurD/96U/yeDxavny5zT0HAKAqcg0AAHtRLAQAu5ggFj+VlZVpzZo1ysrK8q6LiopSVlaW8vLy/NrHoUOHdPToUSUmJvp/YABAwxPmTJPINQCAfRhZWIkbnACATVzGyGVhUouKbYqLi33Wu91uud1un3V79+5VeXm5UlJSfNanpKRow4YNfh3v3nvvVVpams8HMwAATmYl1wLJNIlcAwDYhxucVAr5yMLJkyfL5XL5LJ07dw71YQCg/vEEsUhKT09XfHy8d8nNzQ15Fx9//HG9/vrrWrhwoWJjY0O+//qIXAOAGkR4pknk2snINACoGSMLK4VlZOE555yj9957r/IgjRjACADBjizcsWOH4uLivOurG4GRlJSk6OhoFRQU+KwvKChQampqrcd5+umn9fjjj+u9995Tjx49Au6nk5FrAFBVMCML/ck0iVwLBzINAKrHyMJKYUmGRo0anTK8AaDBsTBXk3c7SXFxcT4frKoTExOjjIwMLV++XMOHD5ck76TuOTk5NW735JNP6tFHH9XSpUvVu3dvC510NnINAKphJdcCyDSJXAsHMg0AqkexsFJYbnCyadMmpaWlqUOHDrr++uu1ffv2GtuWlpaquLjYZwEAWDdhwgS9/PLL+vOf/6z169fr1ltvVUlJicaMGSNJGjVqlO6//35v+yeeeEIPPfSQXn31VbVr1075+fnKz8/XwYMH6+oUIg65BgB1h1wLrUAyTSLXAKAhCnmxMDMzU3PmzNGSJUs0c+ZMbdmyRf3799eBAweqbZ+bm+szX0l6enqouwQAkcEY60sARowYoaeffloTJ05Ur169tG7dOi1ZssQ7Ofz27du1a9cub/uZM2eqrKxMV111lVq1auVdnn766ZCefn1FrgFADWzINIlcC6VAM00i1wA0HMxZWMlljIXEDkBhYaHatm2radOm6aabbqryeGlpqUpLS70/FxcXKz09XQN1uRq5GoezawBQq2PmqFbobRUVFfl1qVRNiouLFR8frwH9HlKjRoFPrn7s2BGt/HRq0P1AaJBrAOqrSMg1Mi2ynCrTpJpzraiwkNcQfjFy+d3WZWnOHjRExcXFik9ICEmeVOTaNdcUKSYmsH2VlRXrjTfiHZdrYZ/NNiEhQWeddZa+//77ah93u901TmgMAI5icUSFpW0QNuQaAPzESq6RaRHlVJkmkWsAGg5jAh8p6NRYC8uchSc6ePCgNm/erFatWoX7UAAQ0Vwe6wsiB7kGAMeRafUfmQYAlbgMuVLIi4X33HOPVq5cqa1bt+rTTz/VL3/5S0VHR+vaa68N9aEAoH6xac5ChBa5BgA1INPqHTINAGpGsbBSyC9D/uGHH3Tttddq3759atmypS644AJ99tlnatmyZagPBQBA2JFrAACnINMAAP4IebHw9ddfD/UuAcAZzE+Lle1QZ8g1AKiBlVwj0+oUmQYANbMyUpCRhQCAoLiMkcvC5VdWtgEAINys5BqZBgCIVBQLK1EsBAC7cDdkAICTcDdkAICDUCysRLEQAOxiJFkJEz5XAQAikZVcI9MAABGKYmElioUAYBMuQwYAOAmXIQMAnIRiYaWouu4AAAAAAAAAgMjAyEIAsIuRxTkLQ94TAACCZyXXyDQAtTBy+d3WxRtKWDTk14CRhZUoFgKAXbjBCQDASbjBCQDAQYwJvPjn1FijWAgAdvFIAXxR57sdAACRxkqukWkAgAjFyMJKFAsBwCbc4AQA4CTc4AQA4CQUCytRLAQAu3AZMgDASbgMGQDgIBQLK3E3ZAAAAAAAAACSGFkIAPZhZCEAwEkYWQgAcBBGFlaiWAgAdqFYCABwEoqFAAAHoVhYiWIhANiFuyEDAJyEuyEDAByEYmElioUAYBPuhgwAcBLuhgwAcBKKhZW4wQkA2KXici0rCwAAkYZMAwA4SEWxMNAlXPbv36/rr79ecXFxSkhI0E033aSDBw/6ta0xRkOGDJHL5dKiRYsCPjbFQgAAAAAAEBYuGb8XAJWuv/56/fvf/9ayZcv0zjvv6MMPP9S4ceP82nb69OlyuazMgXUclyEDgF08RnJZ+CPIwx9OAIAIZCXXyDQAQIQyJvCRguEaML9+/XotWbJEX3zxhXr37i1Jev7553XppZfq6aefVlpaWo3brlu3Ts8884xWr16tVq1aWTo+IwsBwC5chgwAcBIyDQDgIMFchlxcXOyzlJaWBtWXvLw8JSQkeAuFkpSVlaWoqCh9/vnnNW536NAhXXfddZoxY4ZSU1MtH59iIQDYxuqHKj5YAQAiEZkGAHCOYIqF6enpio+P9y65ublB9SU/P1/Jyck+6xo1aqTExETl5+fXuN3dd9+tfv366fLLLw/q+FyGDAB2sTqiglEYAIBIZCXXyDQAQITyeKRAp/mrKBbu2LFDcXFx3vVut7va9vfdd5+eeOKJWve5fv36wDrxk3/84x96//33tXbtWkvbn4hiIQDYxWNxRAXzOwEAIpGVXCPTAAARKphiYVxcnE+xsCa/+c1vdOONN9bapkOHDkpNTdXu3bt91h87dkz79++v8fLi999/X5s3b1ZCQoLP+iuvvFL9+/fXihUrTtm/ChQLAQAAAAAAgDBr2bKlWrZsecp2ffv2VWFhodasWaOMjAxJx4uBHo9HmZmZ1W5z33336eabb/ZZ1717dz377LMaNmxYQP2kWAgAdjGe44uV7QAAiDRWco1MAwBEqGBGFoZaly5dNHjwYI0dO1azZs3S0aNHlZOTo5EjR3rvhPzjjz/qkksu0V/+8hf16dNHqamp1Y46bNOmjdq3bx/Q8SkWAoBdmLMQAOAkzFkIAHCQSCoWStJrr72mnJwcXXLJJYqKitKVV16pP/zhD97Hjx49qo0bN+rQoUMhPzbFQgCwC3MWAgCchDkLAQAOEmnFwsTERM2bN6/Gx9u1aydzii/hTvV4TSgWAoBdGFkIAHASRhYCABwk0oqFdYliIQDYxchisTDkPQEAIHhWco1MA1ALF28Sda4hvwbGBF78c+p3YFF13QEAAAAAAAAAkYGRhQBgFy5DBgA4CZchAwAcxMolxVyGDAAIjscjiQQCADiElVwj0wAAEYpiYSWKhQBgF0YWAgCchJGFAAAHoVhYiWIhANiFYiEAwEkoFgIAHIRiYSWKhQBgF4+RpdtAevhgBQCIQFZyjUwDAEQoioWVuBsyAAAAAAAAAEmMLAQA2xjjkTGBf/VkZRsAAMLNSq6RaQCASMXIwkoUCwHALsZYu/yK+Z0AAJHISq6RaQCACEWxsBLFQgCwi7E4ZyEfrAAAkchKrpFpAIAIRbGwEsVCALCLxyO5LKQJl2wBACKRlVwj0wAAEcqYwIt/Tv0OjGIhANiFkYUAACdhZCEAwEE8HsnlCmwbp8Yad0MGAAAAAAAAIImRhQBgG+PxyFi4DJk7RwIAIpGVXCPTAACRipGFlSgWAoBduAwZAOAkXIYMAHAQioWVKBYCgF08RnJRLAQAOISVXCPTAAARimJhJYqFAGAXYyRZuRuyQxMIAFC/Wck1Mg0AEKEoFlaiWAgANjEeI2NhZKFxagIBAOo1K7lGpgEAIhXFwkphuxvyjBkz1K5dO8XGxiozM1OrVq0K16EAACcJ9D14wYIF6ty5s2JjY9W9e3ctXrzYpp7WD2QaANQtci20yDUAQG3CUiycP3++JkyYoEmTJunLL79Uz549lZ2drd27d4fjcABQPxiP9SUAgb4Hf/rpp7r22mt10003ae3atRo+fLiGDx+ub775JhRnXe+RaQBQAxsyTSLXQo1cA4DqeTzWFidymTBcC5CZmanzzjtPL7zwgiTJ4/EoPT1dt99+u+67775aty0uLlZ8fLwG6nI1cjUOddcAwG/HzFGt0NsqKipSXFyc5f1439dcv7T0vnbMHNUKs9DvfgT6HjxixAiVlJTonXfe8a77n//5H/Xq1UuzZs0KuL9OE0ymSeQagMgRCbkWaKZJ5FqohSrXigoLg/p3BADBKC4uVnxCQtCZ5t1XfLxcriK5XIHty5hiGRMfkn5EkpDPWVhWVqY1a9bo/vvv966LiopSVlaW8vLyqrQvLS1VaWmp9+eioiJJ0jEdlRx67TeA+uGYjkoK3fxKx0yppREVFf0oLi72We92u+V2u33WBfoeLEl5eXmaMGGCz7rs7GwtWrQo4L46jZXnk1wDEKkiIdcCyTSJXAu1UObaya8hANip4j0olOPfjhf+Au5JyI4fSUJeLNy7d6/Ky8uVkpLisz4lJUUbNmyo0j43N1dTpkypsv5jMa8IgMhw4MABxcfHW94+JiZGqamp+jjf+vta8+bNlZ6e7rNu0qRJmjx5ss+6QN+DJSk/P7/a9vn5+Zb76xRWnk9yDUCkq+tc8zfTJHIt1EKZa+lt2oSljwAQiGAzTarMtfz89FM3rkZqaqpiYmKC6kOkqfO7Id9///0+3/wVFhaqbdu22r59e9AveCQpLi5Wenq6duzY4aihqZxX/cJ5BcYYowMHDigtLS2o/cTGxmrLli0qKysLqi+uk27NVd0IDNQ9cq1+47zqF84rMJGSa2Ra/UKu1W+cV/3CefkvVJkmBZ9rMTExio2NDbofkSTkxcKkpCRFR0eroKDAZ31BQYFSU1OrtK/pkoP4+HhH/XJUiIuL47zqEc6rfgnHeYXqj+DY2FhbAiTQ92Dp+DdhgbRvSKw8n+SaM3Be9Qvn5T9yrWEj106N95P6hfOqX0J9XqH8wsKuXKsvQn435JiYGGVkZGj58uXedR6PR8uXL1ffvn1DfTgAwAmsvAf37dvXp70kLVu2jPdskWkAUNfItdAi1wAA/gjLZcgTJkzQ6NGj1bt3b/Xp00fTp09XSUmJxowZE47DAQBOcKr34FGjRql169bKzc2VJN15550aMGCAnnnmGQ0dOlSvv/66Vq9erZdeeqkuTyNikGkAULfItdAi1wAApxKWYuGIESO0Z88eTZw4Ufn5+erVq5eWLFlSZSLd6rjdbk2aNMlx85ZwXvUL51W/OPW8rDrVe/D27dsVFVU5sLxfv36aN2+eHnzwQf3+97/XmWeeqUWLFqlbt251dQoRJZhMk5z775Pzql84r/rFqedlFbkWWuRa9Tiv+oXzql+cel5O5jKhvM80AAAAAAAAgHor5HMWAgAAAAAAAKifKBYCAAAAAAAAkESxEAAAAAAAAMBPKBYCAAAAAAAAkBSBxcIZM2aoXbt2io2NVWZmplatWlXXXQrK5MmT5XK5fJbOnTvXdbcC9uGHH2rYsGFKS0uTy+XSokWLfB43xmjixIlq1aqVmjRpoqysLG3atKluOhuAU53XjTfeWOX1Gzx4cN10NgC5ubk677zz1KJFCyUnJ2v48OHauHGjT5sjR45o/PjxOv3009W8eXNdeeWVKigoqKMe+8ef8xo4cGCV1+yWW26pox6joXNapknkWqRzYq6RaWQaIofTco1Mi2xOzDSJXCPX6oeIKhbOnz9fEyZM0KRJk/Tll1+qZ8+eys7O1u7du+u6a0E555xztGvXLu/y8ccf13WXAlZSUqKePXtqxowZ1T7+5JNP6g9/+INmzZqlzz//XM2aNVN2draOHDlic08Dc6rzkqTBgwf7vH5/+9vfbOyhNStXrtT48eP12WefadmyZTp69KgGDRqkkpISb5u7775b//znP7VgwQKtXLlSO3fu1BVXXFGHvT41f85LksaOHevzmj355JN11GM0ZE7NNIlci2ROzDUyjUxDZHBqrpFpkcuJmSaRa+RaPWEiSJ8+fcz48eO9P5eXl5u0tDSTm5tbh70KzqRJk0zPnj3ruhshJcksXLjQ+7PH4zGpqanmqaee8q4rLCw0brfb/O1vf6uDHlpz8nkZY8zo0aPN5ZdfXif9CaXdu3cbSWblypXGmOOvT+PGjc2CBQu8bdavX28kmby8vLrqZsBOPi9jjBkwYIC58847665TwE+cmGnGkGvkWt0j04C64cRcI9PItEhAriESRczIwrKyMq1Zs0ZZWVnedVFRUcrKylJeXl4d9ix4mzZtUlpamjp06KDrr79e27dvr+suhdSWLVuUn5/v89rFx8crMzOz3r92krRixQolJyfr7LPP1q233qp9+/bVdZcCVlRUJElKTEyUJK1Zs0ZHjx71ec06d+6sNm3a1KvX7OTzqvDaa68pKSlJ3bp10/33369Dhw7VRffQgDk50yRyrb6r77lGppFpsJ+Tc41Mq9/qe6ZJ5Bq5Fpka1XUHKuzdu1fl5eVKSUnxWZ+SkqINGzbUUa+Cl5mZqTlz5ujss8/Wrl27NGXKFPXv31/ffPONWrRoUdfdC4n8/HxJqva1q3isvho8eLCuuOIKtW/fXps3b9bvf/97DRkyRHl5eYqOjq7r7vnF4/Horrvu0vnnn69u3bpJOv6axcTEKCEhwadtfXrNqjsvSbruuuvUtm1bpaWl6auvvtK9996rjRs36u9//3sd9hYNjVMzTSLX6st7ZE3qe66RaWQa6oZTc41Mqx/vkTWp75kmkWvkWuSKmGKhUw0ZMsT7/z169FBmZqbatm2rN954QzfddFMd9gz+GDlypPf/u3fvrh49eqhjx45asWKFLrnkkjrsmf/Gjx+vb775pl7Ov1Kbms5r3Lhx3v/v3r27WrVqpUsuuUSbN29Wx44d7e4m4DjkWv1W33ONTCPTgFAi0+q3+p5pErlGrkWuiLkMOSkpSdHR0VXu8FNQUKDU1NQ66lXoJSQk6KyzztL3339f110JmYrXx+mvnSR16NBBSUlJ9eb1y8nJ0TvvvKMPPvhAZ5xxhnd9amqqysrKVFhY6NO+vrxmNZ1XdTIzMyWp3rxmcIaGkmkSuVbf1adcI9PINNSdhpJrZFr9Vp8yTSLXJHItkkVMsTAmJkYZGRlavny5d53H49Hy5cvVt2/fOuxZaB08eFCbN29Wq1at6rorIdO+fXulpqb6vHbFxcX6/PPPHfXaSdIPP/ygffv2RfzrZ4xRTk6OFi5cqPfff1/t27f3eTwjI0ONGzf2ec02btyo7du3R/Rrdqrzqs66deskKeJfMzhLQ8k0iVyr7+pDrpFplcg01JWGkmtkWv1WHzJNItdORK5FsLq8u8rJXn/9deN2u82cOXPMt99+a8aNG2cSEhJMfn5+XXfNst/85jdmxYoVZsuWLeaTTz4xWVlZJikpyezevbuuuxaQAwcOmLVr15q1a9caSWbatGlm7dq1Ztu2bcYYYx5//HGTkJBg3n77bfPVV1+Zyy+/3LRv394cPny4jnteu9rO68CBA+aee+4xeXl5ZsuWLea9994z5557rjnzzDPNkSNH6rrrtbr11ltNfHy8WbFihdm1a5d3OXTokLfNLbfcYtq0aWPef/99s3r1atO3b1/Tt2/fOuz1qZ3qvL7//nvz8MMPm9WrV5stW7aYt99+23To0MFceOGFddxzNEROzDRjyDVyzX5kGpmGyODEXCPTyLS6QK6Ra/VBRBULjTHm+eefN23atDExMTGmT58+5rPPPqvrLgVlxIgRplWrViYmJsa0bt3ajBgxwnz//fd13a2AffDBB0ZSlWX06NHGGGM8Ho956KGHTEpKinG73eaSSy4xGzdurNtO+6G28zp06JAZNGiQadmypWncuLFp27atGTt2bL34g6i6c5JkZs+e7W1z+PBhc9ttt5nTTjvNNG3a1Pzyl780u3btqrtO++FU57V9+3Zz4YUXmsTERON2u02nTp3Mb3/7W1NUVFS3HUeD5bRMM4Zci3ROzDUyjUxD5HBarpFpkc2JmWYMuUau1Q8uY4yxPi4RAAAAAAAAgFNEzJyFAAAAAAAAAOoWxUIAAAAAAAAAkigWAgAAAAAAAPgJxUIAAAAAAAAAkigWAgAAAAAAAPgJxUIAAAAAAAAAkigWAgAAAAAAAPgJxUIAAAAAAAAAkigWAgAAAAAAAPgJxUIAAAAAAAAAkigWAgAAAAAAAPgJxUIAAAAAAAAAkqT/D95FLoBGPoWwAAAAAElFTkSuQmCC\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAABQsAAAF2CAYAAADJMM7PAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAABqNUlEQVR4nO3deXxU1f3/8fckkAlbEmNIQjDsKiBbDZIvKIKaEpCi1A3UryBVqErcqK1alUXUuCJWEapVaKlURAu2yheKKLhFEYSfWgGRsikkbE0CARLInN8fmAlDFmbuzNxMbl7Px+M+NHfOvffcGTLvzGfOPddljDECAAAAAAAA0OBF1XUHAAAAAAAAAEQGioUAAAAAAAAAJFEsBAAAAAAAAPATioUAAAAAAAAAJFEsBAAAAAAAAPATioUAAAAAAAAAJFEsBAAAAAAAAPATioUAAAAAAAAAJFEsBAAAAAAAAPATioVAmAwcOFADBw6s624AAByiPuRKQUGBrrrqKp1++ulyuVyaPn16XXcJAGo0efJkuVwun3Xt2rXTjTfe6LNu06ZNGjRokOLj4+VyubRo0SJJ0hdffKF+/fqpWbNmcrlcWrdunT0dr+dqej4BRA6KhTX49NNPNXnyZBUWFtZ1VxCkF198UXPmzAnLvr/99ltNnjxZW7duDcv+w2nnzp2aPHmy33/UhOt34h//+IfOPfdcxcbGqk2bNpo0aZKOHTsW0mMAkYBccQ5ypWZ33323li5dqvvvv19z587V4MGDtXjxYk2ePNnWfmzcuFF33323+vXrp9jYWLlcrlqf03BmUV2cP4DQGj16tL7++ms9+uijmjt3rnr37q2jR4/q6quv1v79+/Xss89q7ty5atu2bV13tV6o7vmcN2+e7V8wrVq1SrfddpsyMjLUuHHjKoXjk73yyivq0qWLYmNjdeaZZ+r5558PWV/q4vyBWhlU66mnnjKSzJYtW+q6KwjSOeecYwYMGBCWfS9YsMBIMh988EGVx0pLS01paWlYjhsKX3zxhZFkZs+e7Vf7cPxOLF682LhcLnPRRReZl156ydx+++0mKirK3HLLLSE7BhApyBXnIFdqlpKSYq6//nqfdePHjzd2/8k5e/ZsExUVZbp162Z69epV6+9euLOoLs4fgH8mTZpU5ffzyJEjpqyszPvzoUOHjCTzwAMP+LRbv369kWRefvllW/rqFDU9n0OHDjVt27a1tS+TJk0yjRs3NhkZGeass86q9b161qxZRpK58sorzUsvvWRuuOEGI8k8/vjjIelLXZw/UJtG9pcnncfj8aisrEyxsbF13RWvkpISNWvWrK67Ue+E8nmLiYkJyX6c7J577lGPHj30r3/9S40aHX87iouL02OPPaY777xTnTt3ruMeAnWDXHGOhpYru3fvVkJCQtiPY4zRkSNH1KRJk2ofv+yyy1RYWKgWLVro6aefrnUUPVkE4ERut9vn5z179khSlfe23bt3V7s+GA0ha2t6PsPhVH9P3Xrrrbr33nvVpEkT5eTk6Lvvvqu23eHDh/XAAw9o6NChevPNNyVJY8eOlcfj0dSpUzVu3DiddtppYTsPoE7UdbUyElV8w3TyUvGNtCQzfvx489e//tV07drVNGrUyCxcuNAYc3zkSN++fU1iYqKJjY015557rlmwYEG1x5k7d64577zzTJMmTUxCQoLp37+/Wbp0qU+bxYsXmwsuuMA0bdrUNG/e3Fx66aXmm2++8WkzevRo06xZM/P999+bIUOGmObNm5vLL7+81nP84YcfzK9+9SvTqlUrExMTY9q1a2duueUWnxELmzdvNldddZU57bTTTJMmTUxmZqZ55513fPbzwQcfGElm/vz55pFHHjGtW7c2brfbXHzxxWbTpk1VjvvZZ5+ZIUOGmISEBNO0aVPTvXt3M336dJ8269evN1deeaU57bTTjNvtNhkZGebtt9/2aTN79mwjyXz88cfm7rvvNklJSaZp06Zm+PDhZvfu3d52bdu2rfI6VowGqdjHihUrzK233mpatmxpEhISjDHGbN261dx6663mrLPOMrGxsSYxMdFcddVVPqMSKrY/eakYDTJgwIAqI08KCgrMr371K5OcnGzcbrfp0aOHmTNnjk+bLVu2GEnmqaeeMn/84x9Nhw4dTExMjOndu7dZtWpVzS/qT/bt22d+85vfmG7duplmzZqZFi1amMGDB5t169ZVed1OXmoaZXiq3wkr/v3vfxtJZsaMGT7rf/zxRyPJTJ061fK+gUhDrhxHrjg3V2rq++jRo6tdX6G8vNw8++yzpmvXrsbtdpvk5GQzbtw4s3//fp8+tG3b1gwdOtQsWbLEZGRkGLfbbZ599tlT9t2Y2kf1BptFZWVlZvLkyaZTp07G7XabxMREc/7555t//etfxhgT8vNfunSp6dmzp3G73aZLly7mrbfeCqg/QEP20Ucfmd69exu32206dOhgZs2aVe3IwrZt25rRo0cbY6rP74rHa8oCYwLLneoyw5jA8vqHH34wl19+uWnWrJlJSkoyv/nNb8yxY8d82paXl5vp06ebbt26GbfbbZKSkkx2drb54osvfNrNnTvXnHvuuSY2NtacdtppZsSIEWb79u2nfH79ybmans8BAwZUu77CkSNHzMSJE03Hjh1NTEyMOeOMM8xvf/tbc+TIEZ8+1Pb31KnUNgr83XffNZLMu+++67P+008/NZLM3Llza913cXGxufPOO03btm1NTEyMadmypcnKyjJr1qwxxpiwnP9ZZ51l3G63Offcc83KlSsD6g9gDCMLq3XFFVfou+++09/+9jc9++yzSkpKkiS1bNnS2+b999/XG2+8oZycHCUlJaldu3aSpOeee06XXXaZrr/+epWVlen111/X1VdfrXfeeUdDhw71bj9lyhRNnjxZ/fr108MPP6yYmBh9/vnnev/99zVo0CBJ0ty5czV69GhlZ2friSee0KFDhzRz5kxdcMEFWrt2rfeYknTs2DFlZ2frggsu0NNPP62mTZvWeH47d+5Unz59VFhYqHHjxqlz58768ccf9eabb+rQoUOKiYlRQUGB+vXrp0OHDumOO+7Q6aefrj//+c+67LLL9Oabb+qXv/ylzz4ff/xxRUVF6Z577lFRUZGefPJJXX/99fr888+9bZYtW6Zf/OIXatWqle68806lpqZq/fr1euedd3TnnXdKkv7973/r/PPPV+vWrXXfffepWbNmeuONNzR8+HC99dZbVY57++2367TTTtOkSZO0detWTZ8+XTk5OZo/f74kafr06br99tvVvHlzPfDAA5KklJQUn33cdtttatmypSZOnKiSkhJJxycr/vTTTzVy5EidccYZ2rp1q2bOnKmBAwfq22+/VdOmTXXhhRfqjjvu0B/+8Af9/ve/V5cuXSTJ+9+THT58WAMHDtT333+vnJwctW/fXgsWLNCNN96owsJC73NQYd68eTpw4IB+/etfy+Vy6cknn9QVV1yh//znP2rcuHGNr+9//vMfLVq0SFdffbXat2+vgoIC/fGPf9SAAQP07bffKi0tTV26dNHDDz+siRMnaty4cerfv78kqV+/ftXu81S/E0VFRTp69GiNfaoQGxur5s2bS5LWrl0rSerdu7dPm7S0NJ1xxhnexwEnIFfIFafnyoUXXqi5c+fqhhtu0M9//nONGjVKktSxY0ft3LlTy5Yt09y5c6vs+9e//rXmzJmjMWPG6I477tCWLVv0wgsvaO3atfrkk098+rVx40Zde+21+vWvf62xY8fq7LPPrrHP/go2iyZPnqzc3FzdfPPN6tOnj4qLi7V69Wp9+eWX+vnPf65f//rXITv/TZs2acSIEbrllls0evRozZ49W1dffbWWLFmin//85371B2iovv76aw0aNEgtW7bU5MmTdezYMU2aNKnK+/fJrrjiCiUkJOjuu+/Wtddeq0svvVTNmzdXSkqKWrdurccee0x33HGHzjvvPO++As2d6jIjkLwuLy9Xdna2MjMz9fTTT+u9997TM888o44dO+rWW2/1trvppps0Z84cDRkyRDfffLOOHTumjz76SJ999pn3PfDRRx/VQw89pGuuuUY333yz9uzZo+eff14XXnih1q5dW+toQH9yrqbns1mzZioqKtIPP/ygZ599VpK8nxk8Ho8uu+wyffzxxxo3bpy6dOmir7/+Ws8++6y+++67KjdHqenvqWDUlBUZGRmKiorS2rVr9b//+781bn/LLbfozTffVE5Ojrp27ap9+/bp448/1vr163XuuefqgQceCNn5r1y5UvPnz9cdd9wht9utF198UYMHD9aqVavUrVs3v/oDSGJkYU1q+xZakomKijL//ve/qzx26NAhn5/LyspMt27dzMUXX+xdt2nTJhMVFWV++ctfmvLycp/2Ho/HGGPMgQMHTEJCghk7dqzP4/n5+SY+Pt5nfcU3W/fdd59f5zZq1CgTFRVV5VukE49/1113GUnmo48+8j524MAB0759e9OuXTtvvytGgHTp0sVn9Mhzzz1nJJmvv/7aGGPMsWPHTPv27U3btm3Nf//732qPaYwxl1xyienevbvPtyQej8f069fPnHnmmd51Fd/EZWVl+Wx/9913m+joaFNYWOhdV9PcUhX7uOCCC6p883by62iMMXl5eUaS+ctf/uJdV9vcUiePAJk+fbqRZP76179615WVlZm+ffua5s2bm+LiYmNM5QiQ008/3Wdkwdtvv20kmX/+859VjnWiI0eOVPl3tWXLFuN2u83DDz/sXRfKOQur+zasuqXiW9oT91fdN5XnnXee+Z//+R+/+gXUF+QKuXIyp+WKMZWjGk5U02iNjz76yEgyr732ms/6JUuWVFlfMaJzyZIltfa1OrX97gWbRT179jRDhw6ttU0oz//EkYRFRUWmVatW5mc/+1lA/QEaouHDh5vY2Fizbds277pvv/3WREdH1zqy0Bjf0dknqsirk0f7B5o7J2eGlbw++b34Zz/7mcnIyPD+/P777xtJ5o477qjy3FRk3tatW010dLR59NFHfR7/+uuvTaNGjaqsP5m/OVfT81nTnH1z5841UVFRPn8/GFM5h+Ann3ziXVfb31OnUtvIwvHjx5vo6OhqH2vZsqUZOXJkrfuOj4+vko0nC9X5SzKrV6/2rtu2bZuJjY01v/zlLwPqD8DdkC0aMGCAunbtWmX9iXPn/Pe//1VRUZH69++vL7/80rt+0aJF8ng8mjhxoqKifF+CijswLVu2TIWFhbr22mu1d+9e7xIdHa3MzEx98MEHVY594jdHNfF4PFq0aJGGDRtW5ZuRE4+/ePFi9enTRxdccIH3sebNm2vcuHHaunWrvv32W5/txowZ4zOXUsVItf/85z+Sjn8bs2XLFt11111VvpGqOOb+/fv1/vvv65prrtGBAwe857xv3z5lZ2dr06ZN+vHHH322HTdunM9dq/r376/y8nJt27btlM9FhbFjxyo6Otpn3Ymv49GjR7Vv3z516tRJCQkJPq9lIBYvXqzU1FRde+213nWNGzfWHXfcoYMHD2rlypU+7UeMGOEz98XJz2lN3G63999VeXm59u3bp+bNm+vss8+23PdTeeaZZ7Rs2bJTLr/73e+82xw+fNjb35PFxsZ6HwcaCnKFXAlUfc+VBQsWKD4+Xj//+c99/k1mZGSoefPmVf5Ntm/fXtnZ2ZaPV51gsyghIUH//ve/tWnTpoCPHej5p6Wl+YxIiouL06hRo7R27Vrl5+cH3R/AqcrLy7V06VINHz5cbdq08a7v0qVLyN9TrOTOyZlhJa9vueUWn5/79+/v897+1ltvyeVyadKkSVW2rci8v//97/J4PLrmmmt8jpuamqozzzyz2uOeKBw5Jx1/r+zSpYs6d+7s06+LL75Ykqr0q6a/p4Jx+PDhGucN9jcrPv/8c+3cuTPgYwd6/n379lVGRob35zZt2ujyyy/X0qVLVV5eHnR/0HBwGbJF7du3r3b9O++8o0ceeUTr1q1TaWmpd/2JHzw2b96sqKioWt/EKv7Iq3gTOFlcXJzPz40aNdIZZ5xxyn7v2bNHxcXF3iHINdm2bZsyMzOrrK+4FGrbtm0++zgxeCV5P4z897//lXT8nCXVetzvv/9exhg99NBDeuihh6pts3v3brVu3drv4/qjutfy8OHDys3N1ezZs/Xjjz/KGON9rKioyO99n2jbtm0688wzq3yQP/E5PZHVc/N4PHruuef04osvasuWLd5QkKTTTz/dUt9P5cRA8lfFHxQn/p5UqG3SesCpyBVyJVD1PVc2bdqkoqIiJScnV/t4xc0DKtT0OxKMYLPo4Ycf1uWXX66zzjpL3bp10+DBg3XDDTeoR48epzx2oOffqVMnn997STrrrLMkSVu3blVqampQ/QGcas+ePTp8+LDOPPPMKo+dffbZWrx4cciOZSV3Tn5vCzSvY2NjfaY1kY6/v5/43r5582alpaUpMTGxxr5v2rRJxphqnydJtU5XIYUn5yr6tX79+irnWMGurCgrK6v2MX+y4sknn9To0aOVnp6ujIwMXXrppRo1apQ6dOhwymMHev7VvX5nnXWWDh06pD179ig1NTWo/qDhoFhoUXVvCB999JEuu+wyXXjhhXrxxRfVqlUrNW7cWLNnz9a8efMC2r/H45F0fL6K1NTUKo9X3K2vwonf+teFk0dQVDgxJE6l4pzvueeeGr/l69SpU8iPW91refvtt2v27Nm666671LdvX8XHx8vlcmnkyJHefoab1XN77LHH9NBDD+lXv/qVpk6dqsTEREVFRemuu+4KW9/3799fY4CeqEmTJoqPj5cktWrVSpK0a9cupaen+7TbtWuX+vTpE/qOAhGMXPFFroRepOWKx+NRcnKyXnvttWofP/mDUTi+RAo2iy688EJt3rxZb7/9tv71r3/pT3/6k5599lnNmjVLN998c63bBnr+/gimPwCCZyV3Tn5vCzSva3pvD5TH45HL5dL//d//VbvPijn0ahKunPN4POrevbumTZtW7eMnv3eHKyvKy8u1e/duny94ysrKtG/fPqWlpdW6/TXXXKP+/ftr4cKF+te//qWnnnpKTzzxhP7+979ryJAhtW4b6Pn7I5j+oOGgWFiDk7+59cdbb72l2NhYLV261OdyltmzZ/u069ixozwej7799lv16tWr2n117NhRkpScnKysrKyA+1KTli1bKi4uTt98802t7dq2bauNGzdWWb9hwwbv44GoOJ9vvvmmxvOp+CajcePGIT1nK6/lm2++qdGjR+uZZ57xrjty5IgKCwst77tt27b66quv5PF4fD6AW31Oa/Lmm2/qoosu0iuvvOKzvrCw0HtTBSnw56W29ldccUWVy92qM3r0aM2ZM0eSvP/2V69e7fNhbOfOnfrhhx80bty4gPoHRDpyhVxxeq7UpKZz6tixo9577z2df/75dTaaPBRZlJiYqDFjxmjMmDE6ePCgLrzwQk2ePNlbnAvV+VeMWDpxf999950k+Uzgf6r+AA1Ny5Yt1aRJk2ovz68ul4IRitwJR1537NhRS5cu1f79+2scXdixY0cZY9S+fXvvqOVA+JtzNantvfL//b//p0suucRS/obCiVlx6aWXetevXr1aHo+nxr+9TtSqVSvddtttuu2227R7926de+65evTRR73FuVCdf3X/zr/77js1bdrU50uoU/UHYM7CGjRr1kyS/H5zk45/q+NyuXwuz9m6dWuVOxQNHz5cUVFRevjhh6t8y1Lx7X52drbi4uL02GOPVXuX2T179vjdrxNFRUVp+PDh+uc//6nVq1dXebzi+JdeeqlWrVqlvLw872MlJSV66aWX1K5du4DngTj33HPVvn17TZ8+vcpzWnHM5ORkDRw4UH/84x+1a9euKvuwes7NmjUL6HWUjr+WJ4+0eP75531e24p9S/79O7n00kuVn5/vvaOmdPxuo88//7yaN2+uAQMGBNTHmlTX9wULFlSZHyXQf+O1tbcyZ+E555yjzp0766WXXvJ5XmfOnCmXy6WrrrrKr34B9QW5Qq44PVdqUtM5XXPNNSovL9fUqVOrbHPs2LGAn2Mrgs2iffv2+fzcvHlzderUyeey5lCd/86dO7Vw4ULvz8XFxfrLX/6iXr16eUcf+dMfoKGJjo5Wdna2Fi1apO3bt3vXr1+/XkuXLg3psUKRO+HI6yuvvFLGGE2ZMqXKYxXv71dccYWio6M1ZcqUKu/5xpgq7y8n8zfnalJxR+STXXPNNfrxxx/18ssvV3ns8OHD3jtIh9PFF1+sxMREzZw502f9zJkz1bRpUw0dOrTGbcvLy6ucV3JystLS0qpkRSjOPy8vz2eOyB07dujtt9/WoEGDFB0d7Xd/AEYW1qBiDrYHHnhAI0eOVOPGjTVs2DDvH3zVGTp0qKZNm6bBgwfruuuu0+7duzVjxgx16tRJX331lbddp06d9MADD2jq1Knq37+/rrjiCrndbn3xxRdKS0tTbm6u4uLiNHPmTN1www0699xzNXLkSLVs2VLbt2/Xu+++q/PPP18vvPCCpXN77LHH9K9//UsDBgzw3n59165dWrBggT7++GMlJCTovvvu09/+9jcNGTJEd9xxhxITE/XnP/9ZW7Zs0VtvvRXwpWlRUVGaOXOmhg0bpl69emnMmDFq1aqVNmzYoH//+9/eoJ4xY4YuuOACde/eXWPHjlWHDh1UUFCgvLw8/fDDD/p//+//BXy+GRkZmjlzph555BF16tRJycnJNc4BUuEXv/iF5s6dq/j4eHXt2lV5eXl67733qszN1KtXL0VHR+uJJ55QUVGR3G63Lr744mrnHxo3bpz++Mc/6sYbb9SaNWvUrl07vfnmm/rkk080ffp0tWjRIuBzq6nvDz/8sMaMGaN+/frp66+/1muvvVZlDoqOHTsqISFBs2bNUosWLdSsWTNlZmbWOM9Hbb8TVuYslKSnnnpKl112mQYNGqSRI0fqm2++0QsvvKCbb77ZO+cW4BTkCrni9FypScW//TvuuEPZ2dmKjo7WyJEjNWDAAP36179Wbm6u1q1bp0GDBqlx48batGmTFixYoOeee87yF0dFRUV6/vnnJUmffPKJJOmFF15QQkKCEhISlJOT420bTBZ17dpVAwcOVEZGhhITE7V69Wq9+eabPvsP1fmfddZZuummm/TFF18oJSVFr776qgoKCnxGGvvTH6AhmjJlipYsWaL+/fvrtttu836xcs455/jkaSgEmzvhyOuLLrpIN9xwg/7whz9o06ZNGjx4sDwejz766CNddNFFysnJUceOHfXII4/o/vvv19atWzV8+HC1aNFCW7Zs0cKFCzVu3Djdc889NR7D35yrSUZGhubPn68JEybovPPOU/PmzTVs2DDdcMMNeuONN3TLLbfogw8+0Pnnn6/y8nJt2LBBb7zxhpYuXVrtDdb8sW3bNs2dO1eSvF94PvLII5KOj86/4YYbJB2/tHnq1KkaP368rr76amVnZ+ujjz7SX//6Vz366KO1zgV54MABnXHGGbrqqqvUs2dPNW/eXO+9956++OILn1GYoTr/bt26KTs7W3fccYfcbrdefPFFSfIWiv3tD1D9vcFh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586duuKKK0LecQCobzxyyWMsLFyyFTbkGgBYZynXyLSwIdMAIEguV+CFQpczcy2gy5CXLFni8/OcOXOUnJysNWvW6MILL1RRUZFeeeUVzZs3TxdffLEkafbs2erSpYs+++wz/c///E/oeg4A9YyxOGeh4YNV2JBrAGCdlVwj08KHTAOAIHEZsldQZ1VUVCRJSkxMlCStWbNGR48eVVZWlrdN586d1aZNG+Xl5VW7j9LSUhUXF/ssAADUBXINAOAUocg0iVwDgIbIcrHQ4/Horrvu0vnnn69u3bpJkvLz8xUTE6OEhASftikpKcrPz692P7m5uYqPj/cu6enpVrsEABHN0iXIPy0IP3INAAJDpkWuUGWaRK4BaECYs9DL8lmNHz9e33zzjV5//fWgOnD//ferqKjIu+zYsSOo/QFApOIGJ5GNXAOAwJBpkStUmSaRawAaEIqFXgHNWVghJydH77zzjj788EOdccYZ3vWpqakqKytTYWGhzzdWBQUFSk1NrXZfbrdbbrfbSjcAoF6xOqKCURjhR64BQOCs5BqZFn6hzDSJXAPQgDBnoVdAZ2WMUU5OjhYuXKj3339f7du393k8IyNDjRs31vLly73rNm7cqO3bt6tv376h6TEA1FOenyaCt7IgPMg1ALCOTIssZBoABImRhV4BjSwcP3685s2bp7ffflstWrTwzm0RHx+vJk2aKD4+XjfddJMmTJigxMRExcXF6fbbb1ffvn25uxaABo+RhZGHXAMA6xhZGFnINAAIEiMLvQIqFs6cOVOSNHDgQJ/1s2fP1o033ihJevbZZxUVFaUrr7xSpaWlys7O1osvvhiSzgIAEErkGgDAKcg0AECoBFQsNMacsk1sbKxmzJihGTNmWO4UADgRIwsjD7kGANYxsjCykGkAECRGFnpZusEJACBwFAsBAE5CsRAA4CgUC72ceVYAEIEqPlRZWQAAiDRkGgDAUVyuwG9u4rKWazNmzFC7du0UGxurzMxMrVq1qsa2L7/8svr376/TTjtNp512mrKysmptHwoUCwHAJkbW7hx56ouKAACwn5VcI9MAABHLprshz58/XxMmTNCkSZP05ZdfqmfPnsrOztbu3burbb9ixQpde+21+uCDD5SXl6f09HQNGjRIP/74Y7BnXCOKhQAAAAAAAIANpk2bprFjx2rMmDHq2rWrZs2apaZN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", "text/plain": [ "
" ] @@ -1747,6 +1760,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "id": "d41c4b7b", "metadata": {}, @@ -2621,7 +2635,7 @@ }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABQsAAAF2CAYAAADJMM7PAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAABqUElEQVR4nO3deXgUVd728bsTSIctiRGSEAy7Csg2BskDiqBGAjIo4wbqI8goDErc0Bl3FlHjirggjI7ADCMjggPOKA8MouAWRRBeN0BENoWEbZJAgATS5/0D06HJQnd1p9KpfD/XVZem+lTVqe7Qd/rXp065jDFGAAAAAAAAAOq8iJruAAAAAAAAAIDwQLEQAAAAAAAAgCSKhQAAAAAAAAB+RbEQAAAAAAAAgCSKhQAAAAAAAAB+RbEQAAAAAAAAgCSKhQAAAAAAAAB+RbEQAAAAAAAAgCSKhQAAAAAAAAB+RbEQqCb9+vVTv379arobAACHqA25kpubq6uvvlqnn366XC6Xpk6dWtNdAoBKTZw4US6Xy2dd69atddNNN/ms27Rpk/r376/Y2Fi5XC4tWrRIkvTll1+qd+/eatSokVwul9atW2dPx2u5yp5PAOGDYmElPvvsM02cOFF5eXk13RUE6ZVXXtHs2bOrZd/ff/+9Jk6cqK1bt1bL/qvTzp07NXHiRL//qKmufxP/+te/dO655yo6OlotW7bUhAkTdOzYsZAeAwgH5IpzkCuVu/vuu7V06VI98MADmjNnjgYMGKDFixdr4sSJtvZj48aNuvvuu9W7d29FR0fL5XJV+ZxWZxbVxPkDCK0RI0bom2++0eOPP645c+aoR48eOnr0qK655hrt379fzz//vObMmaNWrVrVdFdrhYqez7lz59r+BdOqVat02223KTU1VfXr1y9XOD7Z66+/ro4dOyo6OlpnnnmmXnrppZD1pSbOH6iSQYWeeeYZI8ls2bKlpruCIJ1zzjmmb9++1bLv+fPnG0nmww8/LPdYUVGRKSoqqpbjhsKXX35pJJlZs2b51b46/k0sXrzYuFwuc9FFF5lXX33V3H777SYiIsKMGTMmZMcAwgW54hzkSuUSExPNDTfc4LNu7Nixxu4/OWfNmmUiIiJM586dTffu3av8t1fdWVQT5w/APxMmTCj37/PIkSOmuLjY+/OhQ4eMJPPQQw/5tFu/fr2RZF577TVb+uoUlT2fgwYNMq1atbK1LxMmTDD169c3qamp5qyzzqryvXrGjBlGkrnqqqvMq6++am688UYjyTz55JMh6UtNnD9QlXr2lyedx+PxqLi4WNHR0TXdFa/CwkI1atSoprtR64TyeYuKigrJfpzs3nvvVdeuXfWf//xH9eodfzuKiYnRE088oTvvvFMdOnSo4R4CNYNccY66liu7d+9WXFxctR/HGKMjR46oQYMGFT5++eWXKy8vT02aNNGzzz5b5Sh6sgjAidxut8/Pe/bskaRy7227d++ucH0w6kLWVvZ8VodT/T1166236r777lODBg2UmZmpH374ocJ2hw8f1kMPPaRBgwZpwYIFkqRRo0bJ4/Fo8uTJGj16tE477bRqOw+gRtR0tTIclX7DdPJS+o20JDN27Fjz97//3XTq1MnUq1fPLFy40BhzfORIr169THx8vImOjjbnnnuumT9/foXHmTNnjjnvvPNMgwYNTFxcnOnTp49ZunSpT5vFixebCy64wDRs2NA0btzYXHbZZebbb7/1aTNixAjTqFEj8+OPP5qBAweaxo0bmyuuuKLKc/z555/N73//e9O8eXMTFRVlWrdubcaMGeMzYmHz5s3m6quvNqeddppp0KCBSUtLM++++67Pfj788EMjycybN8889thjpkWLFsbtdpuLL77YbNq0qdxxP//8czNw4EATFxdnGjZsaLp06WKmTp3q02b9+vXmqquuMqeddppxu90mNTXVvPPOOz5tZs2aZSSZTz75xNx9992madOmpmHDhmbIkCFm9+7d3natWrUq9zqWjgYp3ceKFSvMrbfeapo1a2bi4uKMMcZs3brV3Hrrreass84y0dHRJj4+3lx99dU+oxJKtz95KR0N0rdv33IjT3Jzc83vf/97k5CQYNxut+natauZPXu2T5stW7YYSeaZZ54xf/7zn03btm1NVFSU6dGjh1m1alXlL+qv9u3bZ+655x7TuXNn06hRI9OkSRMzYMAAs27dunKv28lLZaMMT/VvworvvvvOSDLTpk3zWf/LL78YSWby5MmW9w2EG3LlOHLFublSWd9HjBhR4fpSJSUl5vnnnzedOnUybrfbJCQkmNGjR5v9+/f79KFVq1Zm0KBBZsmSJSY1NdW43W7z/PPPn7LvxlQ9qjfYLCouLjYTJ0407du3N26328THx5vzzz/f/Oc//zHGmJCf/9KlS023bt2M2+02HTt2NG+//XZA/QHqso8//tj06NHDuN1u07ZtWzNjxowKRxa2atXKjBgxwhhTcX6XPl5ZFhgTWO5UlBnGBJbXP//8s7niiitMo0aNTNOmTc0999xjjh075tO2pKTETJ061XTu3Nm43W7TtGlTk5GRYb788kufdnPmzDHnnnuuiY6ONqeddpoZOnSo2b59+ymfX39yrrLns2/fvhWuL3XkyBEzfvx4065dOxMVFWXOOOMM88c//tEcOXLEpw9V/T11KlWNAn/vvfeMJPPee+/5rP/ss8+MJDNnzpwq911QUGDuvPNO06pVKxMVFWWaNWtm0tPTzZo1a4wxplrO/6yzzjJut9uce+65ZuXKlQH1BzCGkYUVuvLKK/XDDz/oH//4h55//nk1bdpUktSsWTNvmw8++EBvvfWWMjMz1bRpU7Vu3VqS9MILL+jyyy/XDTfcoOLiYr355pu65ppr9O6772rQoEHe7SdNmqSJEyeqd+/eevTRRxUVFaUvvvhCH3zwgfr37y9JmjNnjkaMGKGMjAw99dRTOnTokKZPn64LLrhAa9eu9R5Tko4dO6aMjAxdcMEFevbZZ9WwYcNKz2/nzp3q2bOn8vLyNHr0aHXo0EG//PKLFixYoEOHDikqKkq5ubnq3bu3Dh06pDvuuEOnn366/vrXv+ryyy/XggUL9Lvf/c5nn08++aQiIiJ07733Kj8/X08//bRuuOEGffHFF942y5Yt029/+1s1b95cd955p5KSkrR+/Xq9++67uvPOOyVJ3333nc4//3y1aNFC999/vxo1aqS33npLQ4YM0dtvv13uuLfffrtOO+00TZgwQVu3btXUqVOVmZmpefPmSZKmTp2q22+/XY0bN9ZDDz0kSUpMTPTZx2233aZmzZpp/PjxKiwslHR8suLPPvtMw4YN0xlnnKGtW7dq+vTp6tevn77//ns1bNhQF154oe644w69+OKLevDBB9WxY0dJ8v73ZIcPH1a/fv30448/KjMzU23atNH8+fN10003KS8vz/sclJo7d64OHDigP/zhD3K5XHr66ad15ZVX6qefflL9+vUrfX1/+uknLVq0SNdcc43atGmj3Nxc/fnPf1bfvn31/fffKzk5WR07dtSjjz6q8ePHa/To0erTp48kqXfv3hXu81T/JvLz83X06NFK+1QqOjpajRs3liStXbtWktSjRw+fNsnJyTrjjDO8jwNOQK6QK07PlQsvvFBz5szRjTfeqEsvvVTDhw+XJLVr1047d+7UsmXLNGfOnHL7/sMf/qDZs2dr5MiRuuOOO7Rlyxa9/PLLWrt2rT799FOffm3cuFHXXXed/vCHP2jUqFE6++yzK+2zv4LNookTJyorK0u33HKLevbsqYKCAq1evVpfffWVLr30Uv3hD38I2flv2rRJQ4cO1ZgxYzRixAjNmjVL11xzjZYsWaJLL73Ur/4AddU333yj/v37q1mzZpo4caKOHTumCRMmlHv/PtmVV16puLg43X333bruuut02WWXqXHjxkpMTFSLFi30xBNP6I477tB5553n3VeguVNRZgSS1yUlJcrIyFBaWpqeffZZvf/++3ruuefUrl073Xrrrd52N998s2bPnq2BAwfqlltu0bFjx/Txxx/r888/974HPv7443rkkUd07bXX6pZbbtGePXv00ksv6cILL9TatWurHA3oT85V9nw2atRI+fn5+vnnn/X8889Lkvczg8fj0eWXX65PPvlEo0ePVseOHfXNN9/o+eef1w8//FDu5iiV/T0VjMqyIjU1VREREVq7dq3+93//t9Ltx4wZowULFigzM1OdOnXSvn379Mknn2j9+vU699xz9dBDD4Xs/FeuXKl58+bpjjvukNvt1iuvvKIBAwZo1apV6ty5s1/9ASQxsrAyVX0LLclERESY7777rtxjhw4d8vm5uLjYdO7c2Vx88cXedZs2bTIRERHmd7/7nSkpKfFp7/F4jDHGHDhwwMTFxZlRo0b5PJ6Tk2NiY2N91pd+s3X//ff7dW7Dhw83ERER5b5FOvH4d911l5FkPv74Y+9jBw4cMG3atDGtW7f29rt0BEjHjh19Ro+88MILRpL55ptvjDHGHDt2zLRp08a0atXK/Pe//63wmMYYc8kll5guXbr4fEvi8XhM7969zZlnnuldV/pNXHp6us/2d999t4mMjDR5eXnedZXNLVW6jwsuuKDcN28nv47GGJOdnW0kmb/97W/edVXNLXXyCJCpU6caSebvf/+7d11xcbHp1auXady4sSkoKDDGlI0AOf30031GFrzzzjtGkvn3v/9d7lgnOnLkSLnfqy1bthi3220effRR77pQzllY0bdhFS2l39KeuL+Kvqk877zzzP/8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pkyZogEDBuj666/X7t27NW3aNLVv315ff/21t1379u310EMPafLkyerTp4+uvPJKud1uffnll0pOTlZWVpZiYmI0ffp03XjjjTr33HM1bNgwNWvWTNu3b9d7772n888/Xy+//LKlc3viiSf0n//8R3379vXefn3Xrl2aP3++PvnkE8XFxen+++/XP/7xDw0cOFB33HGH4uPj9de//lVbtmzR22+/HfClaREREZo+fboGDx6s7t27a+TIkWrevLk2bNig7777zhvU06ZN0wUXXKAuXbpo1KhRatu2rXJzc5Wdna2ff/5Z/+///b+Azzc1NVXTp0/XY489pvbt2yshIaHSOUBK/fa3v9WcOXMUGxurTp06KTs7W++//365uZm6d++uyMhIPfXUU8rPz5fb7dbFF19c4fxDo0eP1p///GfddNNNWrNmjVq3bq0FCxbo008/1dSpU9WkSZOAz62yvj/66KMaOXKkevfurW+++UZvvPFGuTko2rVrp7i4OM2YMUNNmjRRo0aNlJaWVuk8H1X9m7AyZ6EkPfPMM7r88svVv39/DRs2TN9++61efvll3XLLLd45twCnIFfIFafnSmVKf/fvuOMOZWRkKDIyUsOGDVPfvn31hz/8QVlZWVq3bp369++v+vXra9OmTZo/f75eeOEFy18c5efn66WXXpIkffrpp5Kkl19+WXFxcYqLi1NmZqa3bTBZ1KlTJ/Xr10+pqamKj4/X6tWrtWDBAp/9h+r8zzrrLN1888368ssvlZiYqJkzZyo3N9dnpLE//QHqokmTJmnJkiXq06ePbrvtNu8XK+ecc45PnoZCsLlTHXl90UUX6cYbb9SLL76oTZs2acCAAfJ4PPr444910UUXKTMzU+3atdNjjz2mBx54QFu3btWQIUPUpEkTbdmyRQsXLtTo0aN17733VnoMf3OuMqmpqZo3b57GjRun8847T40bN9bgwYN144036q233tKYMWP04Ycf6vzzz1dJSYk2bNigt956S0uXLq3wBmv+2LZtm+bMmSNJ3i88H3vsMUnHR+ffeOONko5f2jx58mSNHTtW11xzjTIyMvTxxx/r73//ux5//PEq54I8cOCAzjjjDF199dXq1q2bGjdurPfff19ffvmlzyjMUJ1/586dlZGRoTvuuENut1uvvPKKJHkLxf72B6j43uAwxhgzefJk06JF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pObNm1vqIAA4hbE4V5NhfqdqQ64BgHVWco1Mqz5kGgAEycochA69DDmgZ2Hs2LH6+9//rrlz56pJkybKyclRTk6ODh8+LEnavHmzJk+erDVr1mjr1q3617/+peHDh+vCCy9U165dq+UEAKC2KJ3bycqC6kGuAYB1ZFp4IdMAIEg23uBk2rRpat26taKjo5WWlqZVq1b5td2bb74pl8ulIUOGWDquvwIaWTh9+nRJUr9+/XzWz5o1SzfddJOioqL0/vvva+rUqSosLFRKSoquuuoqPfzwwyHrMADUViUmQiUm8DApceaXVWGBXAMA66zkGplWfcg0AAiSTSML582bp3HjxmnGjBlKS0vT1KlTlZGRoY0bNyohIaHS7bZu3ap7771Xffr0CfiYgQr4MuSqpKSkaOXKlUF1CACcyiOXPIEN6P51Oz5ZVRdyDQCss5JrZFr1IdMAIEg2FQunTJmiUaNGaeTIkZKkGTNm6L333tPMmTN1//33V7hNSUmJbrjhBk2aNEkff/yx8vLyAj5uIKyNlwQABIzLkAEATkKmAQAcJYjLkAsKCnyWE+8if6Li4mKtWbNG6enpJxw2Qunp6crOzq60a48++qgSEhJ08803h/acK0GxEAAAAAAAALAoJSVFsbGx3iUrK6vCdnv37lVJSYkSExN91icmJionJ6fCbT755BO9/vrreu2110Le78oEdBkyAMA663MWcskWACD8WJuzkEwDAISpIC5D3rFjh2JiYryr3W53SLp04MAB3XjjjXrttdfUtGnTkOzTHxQLAcAmx+d2CvzyKyvbAABQ3azkGpkGAAhbQRQLY2JifIqFlWnatKkiIyOVm5vrsz43N1dJSUnl2m/evFlbt27V4MGDves8Ho8kqV69etq4caPatWsXWJ/9QLEQAGziUYRKuMEJAMAhrOQamQYACFsuV+DFwl8Ld/6KiopSamqqli9friFDhvy6C4+WL1+uzMzMcu07dOigb775xmfdww8/rAMHDuiFF15QSkpKYP31E8VCALAJlyEDAJyEy5ABhJoJYPSxiy8fqkWdfg2sjCwMtL2kcePGacSIEerRo4d69uypqVOnqrCw0Ht35OHDh6tFixbKyspSdHS0Onfu7LN9XFycJJVbH0oUCwHAJh5FyMPIQgCAQ1jJNTINABC2bCoWDh06VHv27NH48eOVk5Oj7t27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Fb52pY/VVgMGDNCVV16pNm3aaPPmzXrwwQc1cOBAZWdnKzIysqa75xePx6O77rpL559/vjp37izp+GsWFRWluLg4n7a16TWr6Lwk6frrr1erVq2UnJysr7/+Wvfdd582btyof/7znzXYW9Q1Ts00iVyrLe+RlantuUamkWmoGU7NNTKtdrxHVqa2Z5pErpFr4StsioVONXDgQO//d+3aVWlpaWrVqpXeeust3XzzzTXYM/hj2LBh3v/v0qWLunbtqnbt2mnFihW65JJLarBn/hs7dqy+/fbbWjn/SlUqO6/Ro0d7/79Lly5q3ry5LrnkEm3evFnt2rWzu5uA45BrtVttzzUyjUwDQolMq91qe6ZJ5Bq5Fr7C5jLkpk2bKjIystwdfnJzc5WUlFRDvQq9uLg4nXXWWfrxxx9ruishU/r6OP21k6S2bduqadOmteb1y8zM1LvvvqsPP/xQZ5xxhnd9UlKSiouLlZeX59O+trxmlZ1XRdLS0iSp1rxmcIa6kmkSuVbb1aZcI9PINNScupJrZFrtVpsyTSLXJHItnIVNsTAqKkqpqalavny5d53H49Hy5cvVq1evGuxZaB08eFCbN29W8+bNa7orIdOmTRslJSX5vHYFBQX64osvHPXaSdLPP/+sffv2hf3rZ4xRZmamFi5cqA8++EBt2rTxeTw1NVX169f3ec02btyo7du3h/Vrdqrzqsi6deskKexfMzhLXck0iVyr7WpDrpFpZcg01JS6kmtkWu1WGzJNItdORK6FsZq8u8rJ3nzzTeN2u83s2bPN999/b0aPHm3i4uJMTk5OTXfNsnvuucesWLHCbNmyxXz66acmPT3dNG3a1OzevbumuxaQAwcOmLVr15q1a9caSWbKlClm7dq1Ztu2bcYYY5588kkTFxdn3nnnHfP111+bK664wrRp08YcPny4hntetarO68CBA+bee+812dnZZsuWLeb999835557rjnzzDPNkSNHarrrVbr11ltNbGysWbFihdm1a5d3OXTokLfNmDFjTMuWLc0HH3xgVq9ebXr16mV69epVg70+tVOd148//mgeffRRs3r1arNlyxbzzjvvmLZt25oLL7ywhnuOusiJmWYMuUau2Y9MI9MQHpyYa2QamVYTyDVyrTYIq2KhMca89NJLpmXLliYqKsr07NnTfP755zXdpaAMHTrUNG/e3ERFRZkWLVqYoUOHmh9//LGmuxWwDz/80Egqt4wYMcIYY4zH4zGPPPKISUxMNG6321xyySVm48aNNdtpP1R1XocOHTL9+/c3zZo1M/Xr1zetWrUyo0aNqhV/EFV0TpLMrFmzvG0OHz5sbrvtNnPaaaeZhg0bmt/97ndm165dNddpP5zqvLZv324uvPBCEx8fb9xut2nfvr354x//aPLz82u246iznJZpxpBr4c6JuUamkWkIH07LNTItvDkx04wh18i12sFljDHWxyUCAAAAAAAAcIqwmbMQAAAAAAAAQM2iWAgAAAAAAABAEsVCAAAAAAAAAL+iWAgAAAAAAABAEsVCAAAAAAAAAL+iWAgAAAAAAABAEsVCAAAAAAAAAL+iWAgAAAAAAABAEsVCAAAAAAAAAL+iWAgAAAAAAABAEsVCAAAAAAAAAL+iWAgAAAAAAABAkvT/AbXFMySuXKkSAAAAAElFTkSuQmCC\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAABQsAAAF2CAYAAADJMM7PAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAABqUElEQVR4nO3deXgUVd728bsTSIctiRGSEAy7Csg2BskDiqBGAjIo4wbqI8goDErc0Bl3FlHjirggjI7ADCMjggPOKA8MouAWRRBeN0BENoWEbZJAgATS5/0D06HJQnd1p9KpfD/XVZem+lTVqe7Qd/rXp065jDFGAAAAAAAAAOq8iJruAAAAAAAAAIDwQLEQAAAAAAAAgCSKhQAAAAAAAAB+RbEQAAAAAAAAgCSKhQAAAAAAAAB+RbEQAAAAAAAAgCSKhQAAAAAAAAB+RbEQAAAAAAAAgCSKhQAAAAAAAAB+RbEQqCb9+vVTv379arobAACHqA25kpubq6uvvlqnn366XC6Xpk6dWtNdAoBKTZw4US6Xy2dd69atddNNN/ms27Rpk/r376/Y2Fi5XC4tWrRIkvTll1+qd+/eatSokVwul9atW2dPx2u5yp5PAOGDYmElPvvsM02cOFF5eXk13RUE6ZVXXtHs2bOrZd/ff/+9Jk6cqK1bt1bL/qvTzp07NXHiRL//qKmufxP/+te/dO655yo6OlotW7bUhAkTdOzYsZAeAwgH5IpzkCuVu/vuu7V06VI98MADmjNnjgYMGKDFixdr4sSJtvZj48aNuvvuu9W7d29FR0fL5XJV+ZxWZxbVxPkDCK0RI0bom2++0eOPP645c+aoR48eOnr0qK655hrt379fzz//vObMmaNWrVrVdFdrhYqez7lz59r+BdOqVat02223KTU1VfXr1y9XOD7Z66+/ro4dOyo6OlpnnnmmXnrppZD1pSbOH6iSQYWeeeYZI8ls2bKlpruCIJ1zzjmmb9++1bLv+fPnG0nmww8/LPdYUVGRKSoqqpbjhsKXX35pJJlZs2b51b46/k0sXrzYuFwuc9FFF5lXX33V3H777SYiIsKMGTMmZMcAwgW54hzkSuUSExPNDTfc4LNu7Nixxu4/OWfNmmUiIiJM586dTffu3av8t1fdWVQT5w/APxMmTCj37/PIkSOmuLjY+/OhQ4eMJPPQQw/5tFu/fr2RZF577TVb+uoUlT2fgwYNMq1atbK1LxMmTDD169c3qamp5qyzzqryvXrGjBlGkrnqqqvMq6++am688UYjyTz55JMh6UtNnD9QlXr2lyedx+PxqLi4WNHR0TXdFa/CwkI1atSoprtR64TyeYuKigrJfpzs3nvvVdeuXfWf//xH9eodfzuKiYnRE088oTvvvFMdOnSo4R4CNYNccY66liu7d+9WXFxctR/HGKMjR46oQYMGFT5++eWXKy8vT02aNNGzzz5b5Sh6sgjAidxut8/Pe/bskaRy7227d++ucH0w6kLWVvZ8VodT/T1166236r777lODBg2UmZmpH374ocJ2hw8f1kMPPaRBgwZpwYIFkqRRo0bJ4/Fo8uTJGj16tE477bRqOw+gRtR0tTIclX7DdPJS+o20JDN27Fjz97//3XTq1MnUq1fPLFy40BhzfORIr169THx8vImOjjbnnnuumT9/foXHmTNnjjnvvPNMgwYNTFxcnOnTp49ZunSpT5vFixebCy64wDRs2NA0btzYXHbZZebbb7/1aTNixAjTqFEj8+OPP5qBAweaxo0bmyuuuKLKc/z555/N73//e9O8eXMTFRVlWrdubcaMGeMzYmHz5s3m6quvNqeddppp0KCBSUtLM++++67Pfj788EMjycybN8889thjpkWLFsbtdpuLL77YbNq0qdxxP//8czNw4EATFxdnGjZsaLp06WKmTp3q02b9+vXmqquuMqeddppxu90mNTXVvPPOOz5tZs2aZSSZTz75xNx9992madOmpmHDhmbIkCFm9+7d3natWrUq9zqWjgYp3ceKFSvMrbfeapo1a2bi4uKMMcZs3brV3Hrrreass84y0dHRJj4+3lx99dU+oxJKtz95KR0N0rdv33IjT3Jzc83vf/97k5CQYNxut+natauZPXu2T5stW7YYSeaZZ54xf/7zn03btm1NVFSU6dGjh1m1alXlL+qv9u3bZ+655x7TuXNn06hRI9OkSRMzYMAAs27dunKv28lLZaMMT/VvworvvvvOSDLTpk3zWf/LL78YSWby5MmW9w2EG3LlOHLFublSWd9HjBhR4fpSJSUl5vnnnzedOnUybrfbJCQkmNGjR5v9+/f79KFVq1Zm0KBBZsmSJSY1NdW43W7z/PPPn7LvxlQ9qjfYLCouLjYTJ0407du3N26328THx5vzzz/f/Oc//zHGmJCf/9KlS023bt2M2+02HTt2NG+//XZA/QHqso8//tj06NHDuN1u07ZtWzNjxowKRxa2atXKjBgxwhhTcX6XPl5ZFhgTWO5UlBnGBJbXP//8s7niiitMo0aNTNOmTc0999xjjh075tO2pKTETJ061XTu3Nm43W7TtGlTk5GRYb788kufdnPmzDHnnnuuiY6ONqeddpoZOnSo2b59+ymfX39yrrLns2/fvhWuL3XkyBEzfvx4065dOxMVFWXOOOMM88c//tEcOXLEpw9V/T11KlWNAn/vvfeMJPPee+/5rP/ss8+MJDNnzpwq911QUGDuvPNO06pVKxMVFWWaNWtm0tPTzZo1a4wxplrO/6yzzjJut9uce+65ZuXKlQH1BzCGkYUVuvLKK/XDDz/oH//4h55//nk1bdpUktSsWTNvmw8++EBvvfWWMjMz1bRpU7Vu3VqS9MILL+jyyy/XDTfcoOLiYr355pu65ppr9O6772rQoEHe7SdNmqSJEyeqd+/eevTRRxUVFaUvvvhCH3zwgfr37y9JmjNnjkaMGKGMjAw99dRTOnTokKZPn64LLrhAa9eu9R5Tko4dO6aMjAxdcMEFevbZZ9WwYcNKz2/nzp3q2bOn8vLyNHr0aHXo0EG//PKLFixYoEOHDikqKkq5ubnq3bu3Dh06pDvuuEOnn366/vrXv+ryyy/XggUL9Lvf/c5nn08++aQiIiJ07733Kj8/X08//bRuuOEGffHFF942y5Yt029/+1s1b95cd955p5KSkrR+/Xq9++67uvPOOyVJ3333nc4//3y1aNFC999/vxo1aqS33npLQ4YM0dtvv13uuLfffrtOO+00TZgwQVu3btXUqVOVmZmpefPmSZKmTp2q22+/XY0bN9ZDDz0kSUpMTPTZx2233aZmzZpp/PjxKiwslHR8suLPPvtMw4YN0xlnnKGtW7dq+vTp6tevn77//ns1bNhQF154oe644w69+OKLevDBB9WxY0dJ8v73ZIcPH1a/fv30448/KjMzU23atNH8+fN10003KS8vz/sclJo7d64OHDigP/zhD3K5XHr66ad15ZVX6qefflL9+vUrfX1/+uknLVq0SNdcc43atGmj3Nxc/fnPf1bfvn31/fffKzk5WR07dtSjjz6q8ePHa/To0erTp48kqXfv3hXu81T/JvLz83X06NFK+1QqOjpajRs3liStXbtWktSjRw+fNsnJyTrjjDO8jwNOQK6QK07PlQsvvFBz5szRjTfeqEsvvVTDhw+XJLVr1047d+7UsmXLNGfOnHL7/sMf/qDZs2dr5MiRuuOOO7Rlyxa9/PLLWrt2rT799FOffm3cuFHXXXed/vCHP2jUqFE6++yzK+2zv4LNookTJyorK0u33HKLevbsqYKCAq1evVpfffWVLr30Uv3hD38I2flv2rRJQ4cO1ZgxYzRixAjNmjVL11xzjZYsWaJLL73Ur/4AddU333yj/v37q1mzZpo4caKOHTumCRMmlHv/PtmVV16puLg43X333bruuut02WWXqXHjxkpMTFSLFi30xBNP6I477tB5553n3VeguVNRZgSS1yUlJcrIyFBaWpqeffZZvf/++3ruuefUrl073Xrrrd52N998s2bPnq2BAwfqlltu0bFjx/Txxx/r888/974HPv7443rkkUd07bXX6pZbbtGePXv00ksv6cILL9TatWurHA3oT85V9nw2atRI+fn5+vnnn/X8889Lkvczg8fj0eWXX65PPvlEo0ePVseOHfXNN9/o+eef1w8//FDu5iiV/T0VjMqyIjU1VREREVq7dq3+93//t9Ltx4wZowULFigzM1OdOnXSvn379Mknn2j9+vU699xz9dBDD4Xs/FeuXKl58+bpjjvukNvt1iuvvKIBAwZo1apV6ty5s1/9ASQxsrAyVX0LLclERESY7777rtxjhw4d8vm5uLjYdO7c2Vx88cXedZs2bTIRERHmd7/7nSkpKfFp7/F4jDHGHDhwwMTFxZlRo0b5PJ6Tk2NiY2N91pd+s3X//ff7dW7Dhw83ERER5b5FOvH4d911l5FkPv74Y+9jBw4cMG3atDGtW7f29rt0BEjHjh19Ro+88MILRpL55ptvjDHGHDt2zLRp08a0atXK/Pe//63wmMYYc8kll5guXbr4fEvi8XhM7969zZlnnuldV/pNXHp6us/2d999t4mMjDR5eXnedZXNLVW6jwsuuKDcN28nv47GGJOdnW0kmb/97W/edVXNLXXyCJCpU6caSebvf/+7d11xcbHp1auXady4sSkoKDDGlI0AOf30031GFrzzzjtGkvn3v/9d7lgnOnLkSLnfqy1bthi3220effRR77pQzllY0bdhFS2l39KeuL+Kvqk877zzzP/8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pkyZogEDBuj666/X7t27NW3aNLVv315ff/21t1379u310EMPafLkyerTp4+uvPJKud1uffnll0pOTlZWVpZiYmI0ffp03XjjjTr33HM1bNgwNWvWTNu3b9d7772n888/Xy+//LKlc3viiSf0n//8R3379vXefn3Xrl2aP3++PvnkE8XFxen+++/XP/7xDw0cOFB33HGH4uPj9de//lVbtmzR22+/HfClaREREZo+fboGDx6s7t27a+TIkWrevLk2bNig7777zhvU06ZN0wUXXKAuXbpo1KhRatu2rXJzc5Wdna2ff/5Z/+///b+Azzc1NVXTp0/XY489pvbt2yshIaHSOUBK/fa3v9WcOXMUGxurTp06KTs7W++//365uZm6d++uyMhIPfXUU8rPz5fb7dbFF19c4fxDo0eP1p///GfddNNNWrNmjVq3bq0FCxbo008/1dSpU9WkSZOAz62yvj/66KMaOXKkevfurW+++UZvvPFGuTko2rVrp7i4OM2YMUNNmjRRo0aNlJaWVuk8H1X9m7AyZ6EkPfPMM7r88svVv39/DRs2TN9++61efvll3XLLLd45twCnIFfIFafnSmVKf/fvuOMOZWRkKDIyUsOGDVPfvn31hz/8QVlZWVq3bp369++v+vXra9OmTZo/f75eeOEFy18c5efn66WXXpIkffrpp5Kkl19+WXFxcYqLi1NmZqa3bTBZ1KlTJ/Xr10+pqamKj4/X6tWrtWDBAp/9h+r8zzrrLN1888368ssvlZiYqJkzZyo3N9dnpLE//QHqokmTJmnJkiXq06ePbrvtNu8XK+ecc45PnoZCsLlTHXl90UUX6cYbb9SLL76oTZs2acCAAfJ4PPr444910UUXKTMzU+3atdNjjz2mBx54QFu3btWQIUPUpEkTbdmyRQsXLtTo0aN17733VnoMf3OuMqmpqZo3b57GjRun8847T40bN9bgwYN144036q233tKYMWP04Ycf6vzzz1dJSYk2bNigt956S0uXLq3wBmv+2LZtm+bMmSNJ3i88H3vsMUnHR+ffeOONko5f2jx58mSNHTtW11xzjTIyMvTxxx/r73//ux5//PEq54I8cOCAzjjjDF199dXq1q2bGjdurPfff19ffvmlzyjMUJ1/586dlZGRoTvuuENut1uvvPKKJHkLxf72B6j43uAwxhgzefJk06JF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pObNm1vqIAA4hbE4V5NhfqdqQ64BgHVWco1Mqz5kGgAEycochA69DDmgZ2Hs2LH6+9//rrlz56pJkybKyclRTk6ODh8+LEnavHmzJk+erDVr1mjr1q3617/+peHDh+vCCy9U165dq+UEAKC2KJ3bycqC6kGuAYB1ZFp4IdMAIEg23uBk2rRpat26taKjo5WWlqZVq1b5td2bb74pl8ulIUOGWDquvwIaWTh9+nRJUr9+/XzWz5o1SzfddJOioqL0/vvva+rUqSosLFRKSoquuuoqPfzwwyHrMADUViUmQiUm8DApceaXVWGBXAMA66zkGplWfcg0AAiSTSML582bp3HjxmnGjBlKS0vT1KlTlZGRoY0bNyohIaHS7bZu3ap7771Xffr0CfiYgQr4MuSqpKSkaOXKlUF1CACcyiOXPIEN6P51Oz5ZVRdyDQCss5JrZFr1IdMAIEg2FQunTJmiUaNGaeTIkZKkGTNm6L333tPMmTN1//33V7hNSUmJbrjhBk2aNEkff/yx8vLyAj5uIKyNlwQABIzLkAEATkKmAQAcJYjLkAsKCnyWE+8if6Li4mKtWbNG6enpJxw2Qunp6crOzq60a48++qgSEhJ08803h/acK0GxEAAAAAAAALAoJSVFsbGx3iUrK6vCdnv37lVJSYkSExN91icmJionJ6fCbT755BO9/vrreu2110Le78oEdBkyAMA663MWcskWACD8WJuzkEwDAISpIC5D3rFjh2JiYryr3W53SLp04MAB3XjjjXrttdfUtGnTkOzTHxQLAcAmx+d2CvzyKyvbAABQ3azkGpkGAAhbQRQLY2JifIqFlWnatKkiIyOVm5vrsz43N1dJSUnl2m/evFlbt27V4MGDves8Ho8kqV69etq4caPatWsXWJ/9QLEQAGziUYRKuMEJAMAhrOQamQYACFsuV+DFwl8Ld/6KiopSamqqli9friFDhvy6C4+WL1+uzMzMcu07dOigb775xmfdww8/rAMHDuiFF15QSkpKYP31E8VCALAJlyEDAJyEy5ABhJoJYPSxiy8fqkWdfg2sjCwMtL2kcePGacSIEerRo4d69uypqVOnqrCw0Ht35OHDh6tFixbKyspSdHS0Onfu7LN9XFycJJVbH0oUCwHAJh5FyMPIQgCAQ1jJNTINABC2bCoWDh06VHv27NH48eOVk5Oj7t27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Fb52pY/VVgMGDNCVV16pNm3aaPPmzXrwwQc1cOBAZWdnKzIysqa75xePx6O77rpL559/vjp37izp+GsWFRWluLg4n7a16TWr6Lwk6frrr1erVq2UnJysr7/+Wvfdd582btyof/7znzXYW9Q1Ts00iVyrLe+RlantuUamkWmoGU7NNTKtdrxHVqa2Z5pErpFr4StsioVONXDgQO//d+3aVWlpaWrVqpXeeust3XzzzTXYM/hj2LBh3v/v0qWLunbtqnbt2mnFihW65JJLarBn/hs7dqy+/fbbWjn/SlUqO6/Ro0d7/79Lly5q3ry5LrnkEm3evFnt2rWzu5uA45BrtVttzzUyjUwDQolMq91qe6ZJ5Bq5Fr7C5jLkpk2bKjIystwdfnJzc5WUlFRDvQq9uLg4nXXWWfrxxx9ruishU/r6OP21k6S2bduqadOmteb1y8zM1LvvvqsPP/xQZ5xxhnd9UlKSiouLlZeX59O+trxmlZ1XRdLS0iSp1rxmcIa6kmkSuVbb1aZcI9PINNScupJrZFrtVpsyTSLXJHItnIVNsTAqKkqpqalavny5d53H49Hy5cvVq1evGuxZaB08eFCbN29W8+bNa7orIdOmTRslJSX5vHYFBQX64osvHPXaSdLPP/+sffv2hf3rZ4xRZmamFi5cqA8++EBt2rTxeTw1NVX169f3ec02btyo7du3h/Vrdqrzqsi6deskKexfMzhLXck0iVyr7WpDrpFpZcg01JS6kmtkWu1WGzJNItdORK6FsZq8u8rJ3nzzTeN2u83s2bPN999/b0aPHm3i4uJMTk5OTXfNsnvuucesWLHCbNmyxXz66acmPT3dNG3a1OzevbumuxaQAwcOmLVr15q1a9caSWbKlClm7dq1Ztu2bcYYY5588kkTFxdn3nnnHfP111+bK664wrRp08YcPny4hntetarO68CBA+bee+812dnZZsuWLeb999835557rjnzzDPNkSNHarrrVbr11ltNbGysWbFihdm1a5d3OXTokLfNmDFjTMuWLc0HH3xgVq9ebXr16mV69epVg70+tVOd148//mgeffRRs3r1arNlyxbzzjvvmLZt25oLL7ywhnuOusiJmWYMuUau2Y9MI9MQHpyYa2QamVYTyDVyrTYIq2KhMca89NJLpmXLliYqKsr07NnTfP755zXdpaAMHTrUNG/e3ERFRZkWLVqYoUOHmh9//LGmuxWwDz/80Egqt4wYMcIYY4zH4zGPPPKISUxMNG6321xyySVm48aNNdtpP1R1XocOHTL9+/c3zZo1M/Xr1zetWrUyo0aNqhV/EFV0TpLMrFmzvG0OHz5sbrvtNnPaaaeZhg0bmt/97ndm165dNddpP5zqvLZv324uvPBCEx8fb9xut2nfvr354x//aPLz82u246iznJZpxpBr4c6JuUamkWkIH07LNTItvDkx04wh18i12sFljDHWxyUCAAAAAAAAcIqwmbMQAAAAAAAAQM2iWAgAAAAAAABAEsVCAAAAAAAAAL+iWAgAAAAAAABAEsVCAAAAAAAAAL+iWAgAAAAAAABAEsVCAAAAAAAAAL+iWAgAAAAAAABAEsVCAAAAAAAAAL+iWAgAAAAAAABAEsVCAAAAAAAAAL+iWAgAAAAAAABAkvT/AbXFMySuXKkSAAAAAElFTkSuQmCC", "text/plain": [ "
" ] @@ -2663,6 +2677,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "id": "79388634", "metadata": {}, @@ -2761,7 +2776,7 @@ }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABQsAAAF2CAYAAADJMM7PAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAABqUElEQVR4nO3deXgUVd728bsTSIctiRGSEAy7Csg2BskDiqBGAjIo4wbqI8goDErc0Bl3FlHjirggjI7ADCMjggPOKA8MouAWRRBeN0BENoWEbZJAgATS5/0D06HJQnd1p9KpfD/XVZem+lTVqe7Qd/rXp065jDFGAAAAAAAAAOq8iJruAAAAAAAAAIDwQLEQAAAAAAAAgCSKhQAAAAAAAAB+RbEQAAAAAAAAgCSKhQAAAAAAAAB+RbEQAAAAAAAAgCSKhQAAAAAAAAB+RbEQAAAAAAAAgCSKhQAAAAAAAAB+RbEQqCb9+vVTv379arobAACHqA25kpubq6uvvlqnn366XC6Xpk6dWtNdAoBKTZw4US6Xy2dd69atddNNN/ms27Rpk/r376/Y2Fi5XC4tWrRIkvTll1+qd+/eatSokVwul9atW2dPx2u5yp5PAOGDYmElPvvsM02cOFF5eXk13RUE6ZVXXtHs2bOrZd/ff/+9Jk6cqK1bt1bL/qvTzp07NXHiRL//qKmufxP/+te/dO655yo6OlotW7bUhAkTdOzYsZAeAwgH5IpzkCuVu/vuu7V06VI98MADmjNnjgYMGKDFixdr4sSJtvZj48aNuvvuu9W7d29FR0fL5XJV+ZxWZxbVxPkDCK0RI0bom2++0eOPP645c+aoR48eOnr0qK655hrt379fzz//vObMmaNWrVrVdFdrhYqez7lz59r+BdOqVat02223KTU1VfXr1y9XOD7Z66+/ro4dOyo6OlpnnnmmXnrppZD1pSbOH6iSQYWeeeYZI8ls2bKlpruCIJ1zzjmmb9++1bLv+fPnG0nmww8/LPdYUVGRKSoqqpbjhsKXX35pJJlZs2b51b46/k0sXrzYuFwuc9FFF5lXX33V3H777SYiIsKMGTMmZMcAwgW54hzkSuUSExPNDTfc4LNu7Nixxu4/OWfNmmUiIiJM586dTffu3av8t1fdWVQT5w/APxMmTCj37/PIkSOmuLjY+/OhQ4eMJPPQQw/5tFu/fr2RZF577TVb+uoUlT2fgwYNMq1atbK1LxMmTDD169c3qamp5qyzzqryvXrGjBlGkrnqqqvMq6++am688UYjyTz55JMh6UtNnD9QlXr2lyedx+PxqLi4WNHR0TXdFa/CwkI1atSoprtR64TyeYuKigrJfpzs3nvvVdeuXfWf//xH9eodfzuKiYnRE088oTvvvFMdOnSo4R4CNYNccY66liu7d+9WXFxctR/HGKMjR46oQYMGFT5++eWXKy8vT02aNNGzzz5b5Sh6sgjAidxut8/Pe/bskaRy7227d++ucH0w6kLWVvZ8VodT/T1166236r777lODBg2UmZmpH374ocJ2hw8f1kMPPaRBgwZpwYIFkqRRo0bJ4/Fo8uTJGj16tE477bRqOw+gRtR0tTIclX7DdPJS+o20JDN27Fjz97//3XTq1MnUq1fPLFy40BhzfORIr169THx8vImOjjbnnnuumT9/foXHmTNnjjnvvPNMgwYNTFxcnOnTp49ZunSpT5vFixebCy64wDRs2NA0btzYXHbZZebbb7/1aTNixAjTqFEj8+OPP5qBAweaxo0bmyuuuKLKc/z555/N73//e9O8eXMTFRVlWrdubcaMGeMzYmHz5s3m6quvNqeddppp0KCBSUtLM++++67Pfj788EMjycybN8889thjpkWLFsbtdpuLL77YbNq0qdxxP//8czNw4EATFxdnGjZsaLp06WKmTp3q02b9+vXmqquuMqeddppxu90mNTXVvPPOOz5tZs2aZSSZTz75xNx9992madOmpmHDhmbIkCFm9+7d3natWrUq9zqWjgYp3ceKFSvMrbfeapo1a2bi4uKMMcZs3brV3Hrrreass84y0dHRJj4+3lx99dU+oxJKtz95KR0N0rdv33IjT3Jzc83vf/97k5CQYNxut+natauZPXu2T5stW7YYSeaZZ54xf/7zn03btm1NVFSU6dGjh1m1alXlL+qv9u3bZ+655x7TuXNn06hRI9OkSRMzYMAAs27dunKv28lLZaMMT/VvworvvvvOSDLTpk3zWf/LL78YSWby5MmW9w2EG3LlOHLFublSWd9HjBhR4fpSJSUl5vnnnzedOnUybrfbJCQkmNGjR5v9+/f79KFVq1Zm0KBBZsmSJSY1NdW43W7z/PPPn7LvxlQ9qjfYLCouLjYTJ0407du3N26328THx5vzzz/f/Oc//zHGmJCf/9KlS023bt2M2+02HTt2NG+//XZA/QHqso8//tj06NHDuN1u07ZtWzNjxowKRxa2atXKjBgxwhhTcX6XPl5ZFhgTWO5UlBnGBJbXP//8s7niiitMo0aNTNOmTc0999xjjh075tO2pKTETJ061XTu3Nm43W7TtGlTk5GRYb788kufdnPmzDHnnnuuiY6ONqeddpoZOnSo2b59+ymfX39yrrLns2/fvhWuL3XkyBEzfvx4065dOxMVFWXOOOMM88c//tEcOXLEpw9V/T11KlWNAn/vvfeMJPPee+/5rP/ss8+MJDNnzpwq911QUGDuvPNO06pVKxMVFWWaNWtm0tPTzZo1a4wxplrO/6yzzjJut9uce+65ZuXKlQH1BzCGkYUVuvLKK/XDDz/oH//4h55//nk1bdpUktSsWTNvmw8++EBvvfWWMjMz1bRpU7Vu3VqS9MILL+jyyy/XDTfcoOLiYr355pu65ppr9O6772rQoEHe7SdNmqSJEyeqd+/eevTRRxUVFaUvvvhCH3zwgfr37y9JmjNnjkaMGKGMjAw99dRTOnTokKZPn64LLrhAa9eu9R5Tko4dO6aMjAxdcMEFevbZZ9WwYcNKz2/nzp3q2bOn8vLyNHr0aHXo0EG//PKLFixYoEOHDikqKkq5ubnq3bu3Dh06pDvuuEOnn366/vrXv+ryyy/XggUL9Lvf/c5nn08++aQiIiJ07733Kj8/X08//bRuuOEGffHFF942y5Yt029/+1s1b95cd955p5KSkrR+/Xq9++67uvPOOyVJ3333nc4//3y1aNFC999/vxo1aqS33npLQ4YM0dtvv13uuLfffrtOO+00TZgwQVu3btXUqVOVmZmpefPmSZKmTp2q22+/XY0bN9ZDDz0kSUpMTPTZx2233aZmzZpp/PjxKiwslHR8suLPPvtMw4YN0xlnnKGtW7dq+vTp6tevn77//ns1bNhQF154oe644w69+OKLevDBB9WxY0dJ8v73ZIcPH1a/fv30448/KjMzU23atNH8+fN10003KS8vz/sclJo7d64OHDigP/zhD3K5XHr66ad15ZVX6qefflL9+vUrfX1/+uknLVq0SNdcc43atGmj3Nxc/fnPf1bfvn31/fffKzk5WR07dtSjjz6q8ePHa/To0erTp48kqXfv3hXu81T/JvLz83X06NFK+1QqOjpajRs3liStXbtWktSjRw+fNsnJyTrjjDO8jwNOQK6QK07PlQsvvFBz5szRjTfeqEsvvVTDhw+XJLVr1047d+7UsmXLNGfOnHL7/sMf/qDZs2dr5MiRuuOOO7Rlyxa9/PLLWrt2rT799FOffm3cuFHXXXed/vCHP2jUqFE6++yzK+2zv4LNookTJyorK0u33HKLevbsqYKCAq1evVpfffWVLr30Uv3hD38I2flv2rRJQ4cO1ZgxYzRixAjNmjVL11xzjZYsWaJLL73Ur/4AddU333yj/v37q1mzZpo4caKOHTumCRMmlHv/PtmVV16puLg43X333bruuut02WWXqXHjxkpMTFSLFi30xBNP6I477tB5553n3VeguVNRZgSS1yUlJcrIyFBaWpqeffZZvf/++3ruuefUrl073Xrrrd52N998s2bPnq2BAwfqlltu0bFjx/Txxx/r888/974HPv7443rkkUd07bXX6pZbbtGePXv00ksv6cILL9TatWurHA3oT85V9nw2atRI+fn5+vnnn/X8889Lkvczg8fj0eWXX65PPvlEo0ePVseOHfXNN9/o+eef1w8//FDu5iiV/T0VjMqyIjU1VREREVq7dq3+93//t9Ltx4wZowULFigzM1OdOnXSvn379Mknn2j9+vU699xz9dBDD4Xs/FeuXKl58+bpjjvukNvt1iuvvKIBAwZo1apV6ty5s1/9ASQxsrAyVX0LLclERESY7777rtxjhw4d8vm5uLjYdO7c2Vx88cXedZs2bTIRERHmd7/7nSkpKfFp7/F4jDHGHDhwwMTFxZlRo0b5PJ6Tk2NiY2N91pd+s3X//ff7dW7Dhw83ERER5b5FOvH4d911l5FkPv74Y+9jBw4cMG3atDGtW7f29rt0BEjHjh19Ro+88MILRpL55ptvjDHGHDt2zLRp08a0atXK/Pe//63wmMYYc8kll5guXbr4fEvi8XhM7969zZlnnuldV/pNXHp6us/2d999t4mMjDR5eXnedZXNLVW6jwsuuKDcN28nv47GGJOdnW0kmb/97W/edVXNLXXyCJCpU6caSebvf/+7d11xcbHp1auXady4sSkoKDDGlI0AOf30031GFrzzzjtGkvn3v/9d7lgnOnLkSLnfqy1bthi3220effRR77pQzllY0bdhFS2l39KeuL+Kvqk877zzzP/8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pkyZogEDBuj666/X7t27NW3aNLVv315ff/21t1379u310EMPafLkyerTp4+uvPJKud1uffnll0pOTlZWVpZiYmI0ffp03XjjjTr33HM1bNgwNWvWTNu3b9d7772n888/Xy+//LKlc3viiSf0n//8R3379vXefn3Xrl2aP3++PvnkE8XFxen+++/XP/7xDw0cOFB33HGH4uPj9de//lVbtmzR22+/HfClaREREZo+fboGDx6s7t27a+TIkWrevLk2bNig7777zhvU06ZN0wUXXKAuXbpo1KhRatu2rXJzc5Wdna2ff/5Z/+///b+Azzc1NVXTp0/XY489pvbt2yshIaHSOUBK/fa3v9WcOXMUGxurTp06KTs7W++//365uZm6d++uyMhIPfXUU8rPz5fb7dbFF19c4fxDo0eP1p///GfddNNNWrNmjVq3bq0FCxbo008/1dSpU9WkSZOAz62yvj/66KMaOXKkevfurW+++UZvvPFGuTko2rVrp7i4OM2YMUNNmjRRo0aNlJaWVuk8H1X9m7AyZ6EkPfPMM7r88svVv39/DRs2TN9++61efvll3XLLLd45twCnIFfIFafnSmVKf/fvuOMOZWRkKDIyUsOGDVPfvn31hz/8QVlZWVq3bp369++v+vXra9OmTZo/f75eeOEFy18c5efn66WXXpIkffrpp5Kkl19+WXFxcYqLi1NmZqa3bTBZ1KlTJ/Xr10+pqamKj4/X6tWrtWDBAp/9h+r8zzrrLN1888368ssvlZiYqJkzZyo3N9dnpLE//QHqokmTJmnJkiXq06ePbrvtNu8XK+ecc45PnoZCsLlTHXl90UUX6cYbb9SLL76oTZs2acCAAfJ4PPr444910UUXKTMzU+3atdNjjz2mBx54QFu3btWQIUPUpEkTbdmyRQsXLtTo0aN17733VnoMf3OuMqmpqZo3b57GjRun8847T40bN9bgwYN144036q233tKYMWP04Ycf6vzzz1dJSYk2bNigt956S0uXLq3wBmv+2LZtm+bMmSNJ3i88H3vsMUnHR+ffeOONko5f2jx58mSNHTtW11xzjTIyMvTxxx/r73//ux5//PEq54I8cOCAzjjjDF199dXq1q2bGjdurPfff19ffvmlzyjMUJ1/586dlZGRoTvuuENut1uvvPKKJHkLxf72B6j43uAwxhgzefJk06JF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pObNm1vqIAA4hbE4V5NhfqdqQ64BgHVWco1Mqz5kGgAEycochA69DDmgZ2Hs2LH6+9//rrlz56pJkybKyclRTk6ODh8+LEnavHmzJk+erDVr1mjr1q3617/+peHDh+vCCy9U165dq+UEAKC2KJ3bycqC6kGuAYB1ZFp4IdMAIEg23uBk2rRpat26taKjo5WWlqZVq1b5td2bb74pl8ulIUOGWDquvwIaWTh9+nRJUr9+/XzWz5o1SzfddJOioqL0/vvva+rUqSosLFRKSoquuuoqPfzwwyHrMADUViUmQiUm8DApceaXVWGBXAMA66zkGplWfcg0AAiSTSML582bp3HjxmnGjBlKS0vT1KlTlZGRoY0bNyohIaHS7bZu3ap7771Xffr0CfiYgQr4MuSqpKSkaOXKlUF1CACcyiOXPIEN6P51Oz5ZVRdyDQCss5JrZFr1IdMAIEg2FQunTJmiUaNGaeTIkZKkGTNm6L333tPMmTN1//33V7hNSUmJbrjhBk2aNEkff/yx8vLyAj5uIKyNlwQABIzLkAEATkKmAQAcJYjLkAsKCnyWE+8if6Li4mKtWbNG6enpJxw2Qunp6crOzq60a48++qgSEhJ08803h/acK0GxEAAAAAAAALAoJSVFsbGx3iUrK6vCdnv37lVJSYkSExN91icmJionJ6fCbT755BO9/vrreu2110Le78oEdBkyAMA663MWcskWACD8WJuzkEwDAISpIC5D3rFjh2JiYryr3W53SLp04MAB3XjjjXrttdfUtGnTkOzTHxQLAcAmx+d2CvzyKyvbAABQ3azkGpkGAAhbQRQLY2JifIqFlWnatKkiIyOVm5vrsz43N1dJSUnl2m/evFlbt27V4MGDves8Ho8kqV69etq4caPatWsXWJ/9QLEQAGziUYRKuMEJAMAhrOQamQYACFsuV+DFwl8Ld/6KiopSamqqli9friFDhvy6C4+WL1+uzMzMcu07dOigb775xmfdww8/rAMHDuiFF15QSkpKYP31E8VCALAJlyEDAJyEy5ABhJoJYPSxiy8fqkWdfg2sjCwMtL2kcePGacSIEerRo4d69uypqVOnqrCw0Ht35OHDh6tFixbKyspSdHS0Onfu7LN9XFycJJVbH0oUCwHAJh5FyMPIQgCAQ1jJNTINABC2bCoWDh06VHv27NH48eOVk5Oj7t27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Fb52pY/VVgMGDNCVV16pNm3aaPPmzXrwwQc1cOBAZWdnKzIysqa75xePx6O77rpL559/vjp37izp+GsWFRWluLg4n7a16TWr6Lwk6frrr1erVq2UnJysr7/+Wvfdd582btyof/7znzXYW9Q1Ts00iVyrLe+RlantuUamkWmoGU7NNTKtdrxHVqa2Z5pErpFr4StsioVONXDgQO//d+3aVWlpaWrVqpXeeust3XzzzTXYM/hj2LBh3v/v0qWLunbtqnbt2mnFihW65JJLarBn/hs7dqy+/fbbWjn/SlUqO6/Ro0d7/79Lly5q3ry5LrnkEm3evFnt2rWzu5uA45BrtVttzzUyjUwDQolMq91qe6ZJ5Bq5Fr7C5jLkpk2bKjIystwdfnJzc5WUlFRDvQq9uLg4nXXWWfrxxx9ruishU/r6OP21k6S2bduqadOmteb1y8zM1LvvvqsPP/xQZ5xxhnd9UlKSiouLlZeX59O+trxmlZ1XRdLS0iSp1rxmcIa6kmkSuVbb1aZcI9PINNScupJrZFrtVpsyTSLXJHItnIVNsTAqKkqpqalavny5d53H49Hy5cvVq1evGuxZaB08eFCbN29W8+bNa7orIdOmTRslJSX5vHYFBQX64osvHPXaSdLPP/+sffv2hf3rZ4xRZmamFi5cqA8++EBt2rTxeTw1NVX169f3ec02btyo7du3h/Vrdqrzqsi6deskKexfMzhLXck0iVyr7WpDrpFpZcg01JS6kmtkWu1WGzJNItdORK6FsZq8u8rJ3nzzTeN2u83s2bPN999/b0aPHm3i4uJMTk5OTXfNsnvuucesWLHCbNmyxXz66acmPT3dNG3a1OzevbumuxaQAwcOmLVr15q1a9caSWbKlClm7dq1Ztu2bcYYY5588kkTFxdn3nnnHfP111+bK664wrRp08YcPny4hntetarO68CBA+bee+812dnZZsuWLeb999835557rjnzzDPNkSNHarrrVbr11ltNbGysWbFihdm1a5d3OXTokLfNmDFjTMuWLc0HH3xgVq9ebXr16mV69epVg70+tVOd148//mgeffRRs3r1arNlyxbzzjvvmLZt25oLL7ywhnuOusiJmWYMuUau2Y9MI9MQHpyYa2QamVYTyDVyrTYIq2KhMca89NJLpmXLliYqKsr07NnTfP755zXdpaAMHTrUNG/e3ERFRZkWLVqYoUOHmh9//LGmuxWwDz/80Egqt4wYMcIYY4zH4zGPPPKISUxMNG6321xyySVm48aNNdtpP1R1XocOHTL9+/c3zZo1M/Xr1zetWrUyo0aNqhV/EFV0TpLMrFmzvG0OHz5sbrvtNnPaaaeZhg0bmt/97ndm165dNddpP5zqvLZv324uvPBCEx8fb9xut2nfvr354x//aPLz82u246iznJZpxpBr4c6JuUamkWkIH07LNTItvDkx04wh18i12sFljDHWxyUCAAAAAAAAcIqwmbMQAAAAAAAAQM2iWAgAAAAAAABAEsVCAAAAAAAAAL+iWAgAAAAAAABAEsVCAAAAAAAAAL+iWAgAAAAAAABAEsVCAAAAAAAAAL+iWAgAAAAAAABAEsVCAAAAAAAAAL+iWAgAAAAAAABAEsVCAAAAAAAAAL+iWAgAAAAAAABAkvT/AbXFMySuXKkSAAAAAElFTkSuQmCC\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAABQsAAAF2CAYAAADJMM7PAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAABqUElEQVR4nO3deXgUVd728bsTSIctiRGSEAy7Csg2BskDiqBGAjIo4wbqI8goDErc0Bl3FlHjirggjI7ADCMjggPOKA8MouAWRRBeN0BENoWEbZJAgATS5/0D06HJQnd1p9KpfD/XVZem+lTVqe7Qd/rXp065jDFGAAAAAAAAAOq8iJruAAAAAAAAAIDwQLEQAAAAAAAAgCSKhQAAAAAAAAB+RbEQAAAAAAAAgCSKhQAAAAAAAAB+RbEQAAAAAAAAgCSKhQAAAAAAAAB+RbEQAAAAAAAAgCSKhQAAAAAAAAB+RbEQqCb9+vVTv379arobAACHqA25kpubq6uvvlqnn366XC6Xpk6dWtNdAoBKTZw4US6Xy2dd69atddNNN/ms27Rpk/r376/Y2Fi5XC4tWrRIkvTll1+qd+/eatSokVwul9atW2dPx2u5yp5PAOGDYmElPvvsM02cOFF5eXk13RUE6ZVXXtHs2bOrZd/ff/+9Jk6cqK1bt1bL/qvTzp07NXHiRL//qKmufxP/+te/dO655yo6OlotW7bUhAkTdOzYsZAeAwgH5IpzkCuVu/vuu7V06VI98MADmjNnjgYMGKDFixdr4sSJtvZj48aNuvvuu9W7d29FR0fL5XJV+ZxWZxbVxPkDCK0RI0bom2++0eOPP645c+aoR48eOnr0qK655hrt379fzz//vObMmaNWrVrVdFdrhYqez7lz59r+BdOqVat02223KTU1VfXr1y9XOD7Z66+/ro4dOyo6OlpnnnmmXnrppZD1pSbOH6iSQYWeeeYZI8ls2bKlpruCIJ1zzjmmb9++1bLv+fPnG0nmww8/LPdYUVGRKSoqqpbjhsKXX35pJJlZs2b51b46/k0sXrzYuFwuc9FFF5lXX33V3H777SYiIsKMGTMmZMcAwgW54hzkSuUSExPNDTfc4LNu7Nixxu4/OWfNmmUiIiJM586dTffu3av8t1fdWVQT5w/APxMmTCj37/PIkSOmuLjY+/OhQ4eMJPPQQw/5tFu/fr2RZF577TVb+uoUlT2fgwYNMq1atbK1LxMmTDD169c3qamp5qyzzqryvXrGjBlGkrnqqqvMq6++am688UYjyTz55JMh6UtNnD9QlXr2lyedx+PxqLi4WNHR0TXdFa/CwkI1atSoprtR64TyeYuKigrJfpzs3nvvVdeuXfWf//xH9eodfzuKiYnRE088oTvvvFMdOnSo4R4CNYNccY66liu7d+9WXFxctR/HGKMjR46oQYMGFT5++eWXKy8vT02aNNGzzz5b5Sh6sgjAidxut8/Pe/bskaRy7227d++ucH0w6kLWVvZ8VodT/T1166236r777lODBg2UmZmpH374ocJ2hw8f1kMPPaRBgwZpwYIFkqRRo0bJ4/Fo8uTJGj16tE477bRqOw+gRtR0tTIclX7DdPJS+o20JDN27Fjz97//3XTq1MnUq1fPLFy40BhzfORIr169THx8vImOjjbnnnuumT9/foXHmTNnjjnvvPNMgwYNTFxcnOnTp49ZunSpT5vFixebCy64wDRs2NA0btzYXHbZZebbb7/1aTNixAjTqFEj8+OPP5qBAweaxo0bmyuuuKLKc/z555/N73//e9O8eXMTFRVlWrdubcaMGeMzYmHz5s3m6quvNqeddppp0KCBSUtLM++++67Pfj788EMjycybN8889thjpkWLFsbtdpuLL77YbNq0qdxxP//8czNw4EATFxdnGjZsaLp06WKmTp3q02b9+vXmqquuMqeddppxu90mNTXVvPPOOz5tZs2aZSSZTz75xNx9992madOmpmHDhmbIkCFm9+7d3natWrUq9zqWjgYp3ceKFSvMrbfeapo1a2bi4uKMMcZs3brV3Hrrreass84y0dHRJj4+3lx99dU+oxJKtz95KR0N0rdv33IjT3Jzc83vf/97k5CQYNxut+natauZPXu2T5stW7YYSeaZZ54xf/7zn03btm1NVFSU6dGjh1m1alXlL+qv9u3bZ+655x7TuXNn06hRI9OkSRMzYMAAs27dunKv28lLZaMMT/VvworvvvvOSDLTpk3zWf/LL78YSWby5MmW9w2EG3LlOHLFublSWd9HjBhR4fpSJSUl5vnnnzedOnUybrfbJCQkmNGjR5v9+/f79KFVq1Zm0KBBZsmSJSY1NdW43W7z/PPPn7LvxlQ9qjfYLCouLjYTJ0407du3N26328THx5vzzz/f/Oc//zHGmJCf/9KlS023bt2M2+02HTt2NG+//XZA/QHqso8//tj06NHDuN1u07ZtWzNjxowKRxa2atXKjBgxwhhTcX6XPl5ZFhgTWO5UlBnGBJbXP//8s7niiitMo0aNTNOmTc0999xjjh075tO2pKTETJ061XTu3Nm43W7TtGlTk5GRYb788kufdnPmzDHnnnuuiY6ONqeddpoZOnSo2b59+ymfX39yrrLns2/fvhWuL3XkyBEzfvx4065dOxMVFWXOOOMM88c//tEcOXLEpw9V/T11KlWNAn/vvfeMJPPee+/5rP/ss8+MJDNnzpwq911QUGDuvPNO06pVKxMVFWWaNWtm0tPTzZo1a4wxplrO/6yzzjJut9uce+65ZuXKlQH1BzCGkYUVuvLKK/XDDz/oH//4h55//nk1bdpUktSsWTNvmw8++EBvvfWWMjMz1bRpU7Vu3VqS9MILL+jyyy/XDTfcoOLiYr355pu65ppr9O6772rQoEHe7SdNmqSJEyeqd+/eevTRRxUVFaUvvvhCH3zwgfr37y9JmjNnjkaMGKGMjAw99dRTOnTokKZPn64LLrhAa9eu9R5Tko4dO6aMjAxdcMEFevbZZ9WwYcNKz2/nzp3q2bOn8vLyNHr0aHXo0EG//PKLFixYoEOHDikqKkq5ubnq3bu3Dh06pDvuuEOnn366/vrXv+ryyy/XggUL9Lvf/c5nn08++aQiIiJ07733Kj8/X08//bRuuOEGffHFF942y5Yt029/+1s1b95cd955p5KSkrR+/Xq9++67uvPOOyVJ3333nc4//3y1aNFC999/vxo1aqS33npLQ4YM0dtvv13uuLfffrtOO+00TZgwQVu3btXUqVOVmZmpefPmSZKmTp2q22+/XY0bN9ZDDz0kSUpMTPTZx2233aZmzZpp/PjxKiwslHR8suLPPvtMw4YN0xlnnKGtW7dq+vTp6tevn77//ns1bNhQF154oe644w69+OKLevDBB9WxY0dJ8v73ZIcPH1a/fv30448/KjMzU23atNH8+fN10003KS8vz/sclJo7d64OHDigP/zhD3K5XHr66ad15ZVX6qefflL9+vUrfX1/+uknLVq0SNdcc43atGmj3Nxc/fnPf1bfvn31/fffKzk5WR07dtSjjz6q8ePHa/To0erTp48kqXfv3hXu81T/JvLz83X06NFK+1QqOjpajRs3liStXbtWktSjRw+fNsnJyTrjjDO8jwNOQK6QK07PlQsvvFBz5szRjTfeqEsvvVTDhw+XJLVr1047d+7UsmXLNGfOnHL7/sMf/qDZs2dr5MiRuuOOO7Rlyxa9/PLLWrt2rT799FOffm3cuFHXXXed/vCHP2jUqFE6++yzK+2zv4LNookTJyorK0u33HKLevbsqYKCAq1evVpfffWVLr30Uv3hD38I2flv2rRJQ4cO1ZgxYzRixAjNmjVL11xzjZYsWaJLL73Ur/4AddU333yj/v37q1mzZpo4caKOHTumCRMmlHv/PtmVV16puLg43X333bruuut02WWXqXHjxkpMTFSLFi30xBNP6I477tB5553n3VeguVNRZgSS1yUlJcrIyFBaWpqeffZZvf/++3ruuefUrl073Xrrrd52N998s2bPnq2BAwfqlltu0bFjx/Txxx/r888/974HPv7443rkkUd07bXX6pZbbtGePXv00ksv6cILL9TatWurHA3oT85V9nw2atRI+fn5+vnnn/X8889Lkvczg8fj0eWXX65PPvlEo0ePVseOHfXNN9/o+eef1w8//FDu5iiV/T0VjMqyIjU1VREREVq7dq3+93//t9Ltx4wZowULFigzM1OdOnXSvn379Mknn2j9+vU699xz9dBDD4Xs/FeuXKl58+bpjjvukNvt1iuvvKIBAwZo1apV6ty5s1/9ASQxsrAyVX0LLclERESY7777rtxjhw4d8vm5uLjYdO7c2Vx88cXedZs2bTIRERHmd7/7nSkpKfFp7/F4jDHGHDhwwMTFxZlRo0b5PJ6Tk2NiY2N91pd+s3X//ff7dW7Dhw83ERER5b5FOvH4d911l5FkPv74Y+9jBw4cMG3atDGtW7f29rt0BEjHjh19Ro+88MILRpL55ptvjDHGHDt2zLRp08a0atXK/Pe//63wmMYYc8kll5guXbr4fEvi8XhM7969zZlnnuldV/pNXHp6us/2d999t4mMjDR5eXnedZXNLVW6jwsuuKDcN28nv47GGJOdnW0kmb/97W/edVXNLXXyCJCpU6caSebvf/+7d11xcbHp1auXady4sSkoKDDGlI0AOf30031GFrzzzjtGkvn3v/9d7lgnOnLkSLnfqy1bthi3220effRR77pQzllY0bdhFS2l39KeuL+Kvqk877zzzP/8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pkyZogEDBuj666/X7t27NW3aNLVv315ff/21t1379u310EMPafLkyerTp4+uvPJKud1uffnll0pOTlZWVpZiYmI0ffp03XjjjTr33HM1bNgwNWvWTNu3b9d7772n888/Xy+//LKlc3viiSf0n//8R3379vXefn3Xrl2aP3++PvnkE8XFxen+++/XP/7xDw0cOFB33HGH4uPj9de//lVbtmzR22+/HfClaREREZo+fboGDx6s7t27a+TIkWrevLk2bNig7777zhvU06ZN0wUXXKAuXbpo1KhRatu2rXJzc5Wdna2ff/5Z/+///b+Azzc1NVXTp0/XY489pvbt2yshIaHSOUBK/fa3v9WcOXMUGxurTp06KTs7W++//365uZm6d++uyMhIPfXUU8rPz5fb7dbFF19c4fxDo0eP1p///GfddNNNWrNmjVq3bq0FCxbo008/1dSpU9WkSZOAz62yvj/66KMaOXKkevfurW+++UZvvPFGuTko2rVrp7i4OM2YMUNNmjRRo0aNlJaWVuk8H1X9m7AyZ6EkPfPMM7r88svVv39/DRs2TN9++61efvll3XLLLd45twCnIFfIFafnSmVKf/fvuOMOZWRkKDIyUsOGDVPfvn31hz/8QVlZWVq3bp369++v+vXra9OmTZo/f75eeOEFy18c5efn66WXXpIkffrpp5Kkl19+WXFxcYqLi1NmZqa3bTBZ1KlTJ/Xr10+pqamKj4/X6tWrtWDBAp/9h+r8zzrrLN1888368ssvlZiYqJkzZyo3N9dnpLE//QHqokmTJmnJkiXq06ePbrvtNu8XK+ecc45PnoZCsLlTHXl90UUX6cYbb9SLL76oTZs2acCAAfJ4PPr444910UUXKTMzU+3atdNjjz2mBx54QFu3btWQIUPUpEkTbdmyRQsXLtTo0aN17733VnoMf3OuMqmpqZo3b57GjRun8847T40bN9bgwYN144036q233tKYMWP04Ycf6vzzz1dJSYk2bNigt956S0uXLq3wBmv+2LZtm+bMmSNJ3i88H3vsMUnHR+ffeOONko5f2jx58mSNHTtW11xzjTIyMvTxxx/r73//ux5//PEq54I8cOCAzjjjDF199dXq1q2bGjdurPfff19ffvmlzyjMUJ1/586dlZGRoTvuuENut1uvvPKKJHkLxf72B6j43uAwxhgzefJk06JF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pObNm1vqIAA4hbE4V5NhfqdqQ64BgHVWco1Mqz5kGgAEycochA69DDmgZ2Hs2LH6+9//rrlz56pJkybKyclRTk6ODh8+LEnavHmzJk+erDVr1mjr1q3617/+peHDh+vCCy9U165dq+UEAKC2KJ3bycqC6kGuAYB1ZFp4IdMAIEg23uBk2rRpat26taKjo5WWlqZVq1b5td2bb74pl8ulIUOGWDquvwIaWTh9+nRJUr9+/XzWz5o1SzfddJOioqL0/vvva+rUqSosLFRKSoquuuoqPfzwwyHrMADUViUmQiUm8DApceaXVWGBXAMA66zkGplWfcg0AAiSTSML582bp3HjxmnGjBlKS0vT1KlTlZGRoY0bNyohIaHS7bZu3ap7771Xffr0CfiYgQr4MuSqpKSkaOXKlUF1CACcyiOXPIEN6P51Oz5ZVRdyDQCss5JrZFr1IdMAIEg2FQunTJmiUaNGaeTIkZKkGTNm6L333tPMmTN1//33V7hNSUmJbrjhBk2aNEkff/yx8vLyAj5uIKyNlwQABIzLkAEATkKmAQAcJYjLkAsKCnyWE+8if6Li4mKtWbNG6enpJxw2Qunp6crOzq60a48++qgSEhJ08803h/acK0GxEAAAAAAAALAoJSVFsbGx3iUrK6vCdnv37lVJSYkSExN91icmJionJ6fCbT755BO9/vrreu2110Le78oEdBkyAMA663MWcskWACD8WJuzkEwDAISpIC5D3rFjh2JiYryr3W53SLp04MAB3XjjjXrttdfUtGnTkOzTHxQLAcAmx+d2CvzyKyvbAABQ3azkGpkGAAhbQRQLY2JifIqFlWnatKkiIyOVm5vrsz43N1dJSUnl2m/evFlbt27V4MGDves8Ho8kqV69etq4caPatWsXWJ/9QLEQAGziUYRKuMEJAMAhrOQamQYACFsuV+DFwl8Ld/6KiopSamqqli9friFDhvy6C4+WL1+uzMzMcu07dOigb775xmfdww8/rAMHDuiFF15QSkpKYP31E8VCALAJlyEDAJyEy5ABhJoJYPSxiy8fqkWdfg2sjCwMtL2kcePGacSIEerRo4d69uypqVOnqrCw0Ht35OHDh6tFixbKyspSdHS0Onfu7LN9XFycJJVbH0oUCwHAJh5FyMPIQgCAQ1jJNTINABC2bCoWDh06VHv27NH48eOVk5Oj7t27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Fb52pY/VVgMGDNCVV16pNm3aaPPmzXrwwQc1cOBAZWdnKzIysqa75xePx6O77rpL559/vjp37izp+GsWFRWluLg4n7a16TWr6Lwk6frrr1erVq2UnJysr7/+Wvfdd582btyof/7znzXYW9Q1Ts00iVyrLe+RlantuUamkWmoGU7NNTKtdrxHVqa2Z5pErpFr4StsioVONXDgQO//d+3aVWlpaWrVqpXeeust3XzzzTXYM/hj2LBh3v/v0qWLunbtqnbt2mnFihW65JJLarBn/hs7dqy+/fbbWjn/SlUqO6/Ro0d7/79Lly5q3ry5LrnkEm3evFnt2rWzu5uA45BrtVttzzUyjUwDQolMq91qe6ZJ5Bq5Fr7C5jLkpk2bKjIystwdfnJzc5WUlFRDvQq9uLg4nXXWWfrxxx9ruishU/r6OP21k6S2bduqadOmteb1y8zM1LvvvqsPP/xQZ5xxhnd9UlKSiouLlZeX59O+trxmlZ1XRdLS0iSp1rxmcIa6kmkSuVbb1aZcI9PINNScupJrZFrtVpsyTSLXJHItnIVNsTAqKkqpqalavny5d53H49Hy5cvVq1evGuxZaB08eFCbN29W8+bNa7orIdOmTRslJSX5vHYFBQX64osvHPXaSdLPP/+sffv2hf3rZ4xRZmamFi5cqA8++EBt2rTxeTw1NVX169f3ec02btyo7du3h/Vrdqrzqsi6deskKexfMzhLXck0iVyr7WpDrpFpZcg01JS6kmtkWu1WGzJNItdORK6FsZq8u8rJ3nzzTeN2u83s2bPN999/b0aPHm3i4uJMTk5OTXfNsnvuucesWLHCbNmyxXz66acmPT3dNG3a1OzevbumuxaQAwcOmLVr15q1a9caSWbKlClm7dq1Ztu2bcYYY5588kkTFxdn3nnnHfP111+bK664wrRp08YcPny4hntetarO68CBA+bee+812dnZZsuWLeb999835557rjnzzDPNkSNHarrrVbr11ltNbGysWbFihdm1a5d3OXTokLfNmDFjTMuWLc0HH3xgVq9ebXr16mV69epVg70+tVOd148//mgeffRRs3r1arNlyxbzzjvvmLZt25oLL7ywhnuOusiJmWYMuUau2Y9MI9MQHpyYa2QamVYTyDVyrTYIq2KhMca89NJLpmXLliYqKsr07NnTfP755zXdpaAMHTrUNG/e3ERFRZkWLVqYoUOHmh9//LGmuxWwDz/80Egqt4wYMcIYY4zH4zGPPPKISUxMNG6321xyySVm48aNNdtpP1R1XocOHTL9+/c3zZo1M/Xr1zetWrUyo0aNqhV/EFV0TpLMrFmzvG0OHz5sbrvtNnPaaaeZhg0bmt/97ndm165dNddpP5zqvLZv324uvPBCEx8fb9xut2nfvr354x//aPLz82u246iznJZpxpBr4c6JuUamkWkIH07LNTItvDkx04wh18i12sFljDHWxyUCAAAAAAAAcIqwmbMQAAAAAAAAQM2iWAgAAAAAAABAEsVCAAAAAAAAAL+iWAgAAAAAAABAEsVCAAAAAAAAAL+iWAgAAAAAAABAEsVCAAAAAAAAAL+iWAgAAAAAAABAEsVCAAAAAAAAAL+iWAgAAAAAAABAEsVCAAAAAAAAAL+iWAgAAAAAAABAkvT/AbXFMySuXKkSAAAAAElFTkSuQmCC", "text/plain": [ "
" ] diff --git a/fv3core/pace/fv3core/_config.py b/fv3core/pace/fv3core/_config.py index 51fb609f..e2f5c1f5 100644 --- a/fv3core/pace/fv3core/_config.py +++ b/fv3core/pace/fv3core/_config.py @@ -284,6 +284,9 @@ def __post_init__(self): dycore_config = self.from_f90nml(f90_nml) for var in dycore_config.__dict__.keys(): setattr(self, var, dycore_config.__dict__[var]) + # Single tile cartesian grids + if self.grid_type > 3: + self.nf_omega = 0 @classmethod def from_f90nml(self, f90_namelist: f90nml.Namelist) -> "DynamicalCoreConfig": diff --git a/fv3core/pace/fv3core/initialization/dycore_state.py b/fv3core/pace/fv3core/initialization/dycore_state.py index 9e4e4f1f..4901c799 100644 --- a/fv3core/pace/fv3core/initialization/dycore_state.py +++ b/fv3core/pace/fv3core/initialization/dycore_state.py @@ -365,7 +365,7 @@ def from_fortran_restart( cls, *, quantity_factory: pace.util.QuantityFactory, - communicator: pace.util.CubedSphereCommunicator, + communicator: pace.util.Communicator, path: str, ): state_dict: Mapping[str, pace.util.Quantity] = pace.util.open_restart( diff --git a/fv3core/pace/fv3core/initialization/geos_wrapper.py b/fv3core/pace/fv3core/initialization/geos_wrapper.py index 4fc34052..e08cbf9e 100644 --- a/fv3core/pace/fv3core/initialization/geos_wrapper.py +++ b/fv3core/pace/fv3core/initialization/geos_wrapper.py @@ -96,7 +96,7 @@ def __init__( ) self._grid_indexing = pace.dsl.stencil.GridIndexing.from_sizer_and_communicator( - sizer=sizer, cube=self.communicator + sizer=sizer, comm=self.communicator ) stencil_factory = pace.dsl.StencilFactory( config=stencil_config, grid_indexing=self._grid_indexing diff --git a/fv3core/pace/fv3core/stencils/a2b_ord4.py b/fv3core/pace/fv3core/stencils/a2b_ord4.py index 65ecfd51..ffbb807a 100644 --- a/fv3core/pace/fv3core/stencils/a2b_ord4.py +++ b/fv3core/pace/fv3core/stencils/a2b_ord4.py @@ -1,5 +1,6 @@ import gt4py.cartesian.gtscript as gtscript from gt4py.cartesian.gtscript import ( + __INLINED, PARALLEL, asin, computation, @@ -506,6 +507,27 @@ def a2b_interpolation( qout = 0.5 * (qxx + qyy) +@gtscript.function +def doubly_periodic_a2b_ord4(qin): + + qx = b1 * (qin[-1, 0, 0] + qin) + b2 * (qin[-2, 0, 0] + qin[1, 0, 0]) + qy = b1 * (qin[0, -1, 0] + qin) + b2 * (qin[0, -2, 0] + qin[0, 1, 0]) + qout = 0.5 * ( + a1 * (qx[0, -1, 0] + qx + qy[-1, 0, 0] + qy) + + a2 * (qx[0, -2, 0] + qx[0, 1, 0] + qy[-2, 0, 0] + qy[1, 0, 0]) + ) + return qout + + +def doubly_periodic_a2b_ord4_stencil(qout: FloatField, qin: FloatField): + from __externals__ import replace + + with computation(PARALLEL), interval(...): + qout = doubly_periodic_a2b_ord4(qin) + if __INLINED(replace): + qin = qout + + class AGrid2BGridFourthOrder: """ Fortran name is a2b_ord4, test module is A2B_Ord4 @@ -528,131 +550,144 @@ def __init__( replace: boolean, update qin to the B grid as well """ orchestrate(obj=self, config=stencil_factory.config.dace_config) - assert grid_type < 3 + assert grid_type in [0, 4] self._idx: GridIndexing = stencil_factory.grid_indexing self._stencil_config = stencil_factory.config - self._dxa = grid_data.dxa - self._dya = grid_data.dya - - self._lon_agrid = grid_data.lon_agrid - self._lat_agrid = grid_data.lat_agrid - self._lon = grid_data.lon - self._lat = grid_data.lat - # TODO: maybe compute locally edge_* variables - # This is the only place the model uses them - self._edge_w = grid_data.edge_w - self._edge_e = grid_data.edge_e - self._edge_s = grid_data.edge_s - self._edge_n = grid_data.edge_n - - self.replace = replace - - self._tmp_qx = quantity_factory.zeros( - dims=[X_INTERFACE_DIM, Y_DIM, z_dim], - units="unknown", - dtype=Float, - ) - self._tmp_qy = quantity_factory.zeros( - dims=[X_DIM, Y_INTERFACE_DIM, z_dim], - units="unknown", - dtype=Float, - ) - # TODO: the dimensions of tmp_qout_edges may not be correct, verify - # with Lucas and either update the code or remove this comment - self._tmp_qout_edges = quantity_factory.zeros( - dims=[X_DIM, Y_DIM, z_dim], - units="unknown", - dtype=Float, - ) - _, (z_domain,) = self._idx.get_origin_domain([z_dim]) - corner_domain = (1, 1, z_domain) + if grid_type < 3: + self._dxa = grid_data.dxa + self._dya = grid_data.dya + + self._lon_agrid = grid_data.lon_agrid + self._lat_agrid = grid_data.lat_agrid + self._lon = grid_data.lon + self._lat = grid_data.lat + # TODO: maybe compute locally edge_* variables + # This is the only place the model uses them + self._edge_w = grid_data.edge_w + self._edge_e = grid_data.edge_e + self._edge_s = grid_data.edge_s + self._edge_n = grid_data.edge_n + + self.replace = replace + self.grid_type = grid_type + + self._tmp_qx = quantity_factory.zeros( + dims=[X_INTERFACE_DIM, Y_DIM, z_dim], + units="unknown", + dtype=Float, + ) + self._tmp_qy = quantity_factory.zeros( + dims=[X_DIM, Y_INTERFACE_DIM, z_dim], + units="unknown", + dtype=Float, + ) + # TODO: the dimensions of tmp_qout_edges may not be correct, verify + # with Lucas and either update the code or remove this comment + self._tmp_qout_edges = quantity_factory.zeros( + dims=[X_DIM, Y_DIM, z_dim], + units="unknown", + dtype=Float, + ) - self._sw_corner_stencil = stencil_factory.from_origin_domain( - _sw_corner, - origin=self._idx.origin_compute(), - domain=corner_domain, - ) - self._nw_corner_stencil = stencil_factory.from_origin_domain( - _nw_corner, - origin=(self._idx.iec + 1, self._idx.jsc, self._idx.origin[2]), - domain=corner_domain, - ) - self._ne_corner_stencil = stencil_factory.from_origin_domain( - _ne_corner, - origin=(self._idx.iec + 1, self._idx.jec + 1, self._idx.origin[2]), - domain=corner_domain, - ) - self._se_corner_stencil = stencil_factory.from_origin_domain( - _se_corner, - origin=(self._idx.isc, self._idx.jec + 1, self._idx.origin[2]), - domain=corner_domain, - ) - js2 = self._idx.jsc + 1 if self._idx.south_edge else self._idx.jsc - je1 = self._idx.jec if self._idx.north_edge else self._idx.jec + 1 - dj2 = je1 - js2 + 1 - - # edge_w is singleton in the I-dimension to work around gt4py not yet - # supporting J-fields. As a result, the origin has to be zero for - # edge_w, anything higher is outside its index range - self._qout_x_edge_west = stencil_factory.from_origin_domain( - qout_x_edge, - origin={ - "_all_": (self._idx.isc, js2, self._idx.origin[2]), - "edge_w": (0, js2), - }, - domain=(1, dj2, z_domain), - ) - self._qout_x_edge_east = stencil_factory.from_origin_domain( - qout_x_edge, - origin={ - "_all_": (self._idx.iec + 1, js2, self._idx.origin[2]), - "edge_w": (0, js2), - }, - domain=(1, dj2, z_domain), - ) + _, (z_domain,) = self._idx.get_origin_domain([z_dim]) + corner_domain = (1, 1, z_domain) - is2 = self._idx.isc + 1 if self._idx.west_edge else self._idx.isc - ie1 = self._idx.iec if self._idx.east_edge else self._idx.iec + 1 - di2 = ie1 - is2 + 1 - self._qout_y_edge_south = stencil_factory.from_origin_domain( - qout_y_edge, - origin=(is2, self._idx.jsc, self._idx.origin[2]), - domain=(di2, 1, z_domain), - ) - self._qout_y_edge_north = stencil_factory.from_origin_domain( - qout_y_edge, - origin=(is2, self._idx.jec + 1, self._idx.origin[2]), - domain=(di2, 1, z_domain), - ) + self._sw_corner_stencil = stencil_factory.from_origin_domain( + _sw_corner, + origin=self._idx.origin_compute(), + domain=corner_domain, + ) + self._nw_corner_stencil = stencil_factory.from_origin_domain( + _nw_corner, + origin=(self._idx.iec + 1, self._idx.jsc, self._idx.origin[2]), + domain=corner_domain, + ) + self._ne_corner_stencil = stencil_factory.from_origin_domain( + _ne_corner, + origin=(self._idx.iec + 1, self._idx.jec + 1, self._idx.origin[2]), + domain=corner_domain, + ) + self._se_corner_stencil = stencil_factory.from_origin_domain( + _se_corner, + origin=(self._idx.isc, self._idx.jec + 1, self._idx.origin[2]), + domain=corner_domain, + ) + js2 = self._idx.jsc + 1 if self._idx.south_edge else self._idx.jsc + je1 = self._idx.jec if self._idx.north_edge else self._idx.jec + 1 + dj2 = je1 - js2 + 1 + + # edge_w is singleton in the I-dimension to work around gt4py not yet + # supporting J-fields. As a result, the origin has to be zero for + # edge_w, anything higher is outside its index range + self._qout_x_edge_west = stencil_factory.from_origin_domain( + qout_x_edge, + origin={ + "_all_": (self._idx.isc, js2, self._idx.origin[2]), + "edge_w": (0, js2), + }, + domain=(1, dj2, z_domain), + ) + self._qout_x_edge_east = stencil_factory.from_origin_domain( + qout_x_edge, + origin={ + "_all_": (self._idx.iec + 1, js2, self._idx.origin[2]), + "edge_w": (0, js2), + }, + domain=(1, dj2, z_domain), + ) - self._ppm_volume_mean_x_stencil = stencil_factory.from_dims_halo( - ppm_volume_mean_x, - compute_dims=[X_INTERFACE_DIM, Y_DIM, z_dim], - compute_halos=(0, 2), - ) + is2 = self._idx.isc + 1 if self._idx.west_edge else self._idx.isc + ie1 = self._idx.iec if self._idx.east_edge else self._idx.iec + 1 + di2 = ie1 - is2 + 1 + self._qout_y_edge_south = stencil_factory.from_origin_domain( + qout_y_edge, + origin=(is2, self._idx.jsc, self._idx.origin[2]), + domain=(di2, 1, z_domain), + ) + self._qout_y_edge_north = stencil_factory.from_origin_domain( + qout_y_edge, + origin=(is2, self._idx.jec + 1, self._idx.origin[2]), + domain=(di2, 1, z_domain), + ) - self._ppm_volume_mean_y_stencil = stencil_factory.from_dims_halo( - ppm_volume_mean_y, - compute_dims=[X_DIM, Y_INTERFACE_DIM, z_dim], - compute_halos=(2, 0), - ) + self._ppm_volume_mean_x_stencil = stencil_factory.from_dims_halo( + ppm_volume_mean_x, + compute_dims=[X_INTERFACE_DIM, Y_DIM, z_dim], + compute_halos=(0, 2), + ) - origin, domain = self._idx.get_origin_domain( - dims=(X_INTERFACE_DIM, Y_INTERFACE_DIM, z_dim), - ) - origin, domain = self._exclude_tile_edges(origin, domain) + self._ppm_volume_mean_y_stencil = stencil_factory.from_dims_halo( + ppm_volume_mean_y, + compute_dims=[X_DIM, Y_INTERFACE_DIM, z_dim], + compute_halos=(2, 0), + ) - ax_offsets = self._idx.axis_offsets( - origin, - domain, - ) - self._a2b_interpolation_stencil = stencil_factory.from_origin_domain( - a2b_interpolation, externals=ax_offsets, origin=origin, domain=domain - ) - self._copy_stencil = stencil_factory.from_dims_halo( - copy_defn, compute_dims=[X_INTERFACE_DIM, Y_INTERFACE_DIM, z_dim] - ) + origin, domain = self._idx.get_origin_domain( + dims=(X_INTERFACE_DIM, Y_INTERFACE_DIM, z_dim), + ) + origin, domain = self._exclude_tile_edges(origin, domain) + + ax_offsets = self._idx.axis_offsets( + origin, + domain, + ) + self._a2b_interpolation_stencil = stencil_factory.from_origin_domain( + a2b_interpolation, externals=ax_offsets, origin=origin, domain=domain + ) + self._copy_stencil = stencil_factory.from_dims_halo( + copy_defn, compute_dims=[X_INTERFACE_DIM, Y_INTERFACE_DIM, z_dim] + ) + + else: # grid type >= 3: + self._doubly_periodic_a2b_ord4 = stencil_factory.from_origin_domain( + doubly_periodic_a2b_ord4_stencil, + externals={ + "replace": replace, + }, + origin=self._idx.origin_compute(), + domain=self._idx.domain_compute(), + ) def _exclude_tile_edges(self, origin, domain, dims=("x", "y")): """ @@ -687,81 +722,85 @@ def __call__(self, qin: FloatField, qout: FloatField): qout (out): Output on B-grid """ - self._sw_corner_stencil( - qin, - qout, - self._tmp_qout_edges, - self._lon_agrid, - self._lat_agrid, - self._lon, - self._lat, - ) + if self.grid_type < 3: - self._nw_corner_stencil( - qin, - qout, - self._tmp_qout_edges, - self._lon_agrid, - self._lat_agrid, - self._lon, - self._lat, - ) - self._ne_corner_stencil( - qin, - qout, - self._tmp_qout_edges, - self._lon_agrid, - self._lat_agrid, - self._lon, - self._lat, - ) - self._se_corner_stencil( - qin, - qout, - self._tmp_qout_edges, - self._lon_agrid, - self._lat_agrid, - self._lon, - self._lat, - ) + self._sw_corner_stencil( + qin, + qout, + self._tmp_qout_edges, + self._lon_agrid, + self._lat_agrid, + self._lon, + self._lat, + ) - if self._idx.west_edge: - self._qout_x_edge_west( - qin, self._dxa, self._edge_w, qout, self._tmp_qout_edges + self._nw_corner_stencil( + qin, + qout, + self._tmp_qout_edges, + self._lon_agrid, + self._lat_agrid, + self._lon, + self._lat, ) - if self._idx.east_edge: - self._qout_x_edge_east( - qin, self._dxa, self._edge_e, qout, self._tmp_qout_edges + self._ne_corner_stencil( + qin, + qout, + self._tmp_qout_edges, + self._lon_agrid, + self._lat_agrid, + self._lon, + self._lat, + ) + self._se_corner_stencil( + qin, + qout, + self._tmp_qout_edges, + self._lon_agrid, + self._lat_agrid, + self._lon, + self._lat, ) - if self._idx.south_edge: - self._qout_y_edge_south( - qin, self._dya, self._edge_s, qout, self._tmp_qout_edges + if self._idx.west_edge: + self._qout_x_edge_west( + qin, self._dxa, self._edge_w, qout, self._tmp_qout_edges + ) + if self._idx.east_edge: + self._qout_x_edge_east( + qin, self._dxa, self._edge_e, qout, self._tmp_qout_edges + ) + + if self._idx.south_edge: + self._qout_y_edge_south( + qin, self._dya, self._edge_s, qout, self._tmp_qout_edges + ) + if self._idx.north_edge: + self._qout_y_edge_north( + qin, self._dya, self._edge_n, qout, self._tmp_qout_edges + ) + + self._ppm_volume_mean_x_stencil( + qin, + self._tmp_qx, + self._dxa, ) - if self._idx.north_edge: - self._qout_y_edge_north( - qin, self._dya, self._edge_n, qout, self._tmp_qout_edges + self._ppm_volume_mean_y_stencil( + qin, + self._tmp_qy, + self._dya, ) - self._ppm_volume_mean_x_stencil( - qin, - self._tmp_qx, - self._dxa, - ) - self._ppm_volume_mean_y_stencil( - qin, - self._tmp_qy, - self._dya, - ) - - self._a2b_interpolation_stencil( - self._tmp_qout_edges, - qout, - self._tmp_qx, - self._tmp_qy, - ) - if self.replace: - self._copy_stencil( + self._a2b_interpolation_stencil( + self._tmp_qout_edges, qout, - qin, + self._tmp_qx, + self._tmp_qy, ) + if self.replace: + self._copy_stencil( + qout, + qin, + ) + else: # grid type >= 3: + self._doubly_periodic_a2b_ord4(qout, qin) diff --git a/fv3core/pace/fv3core/stencils/c_sw.py b/fv3core/pace/fv3core/stencils/c_sw.py index ebb226c6..46b6030a 100644 --- a/fv3core/pace/fv3core/stencils/c_sw.py +++ b/fv3core/pace/fv3core/stencils/c_sw.py @@ -1,6 +1,6 @@ -from gt4py.cartesian.gtscript import ( +from gt4py.cartesian.gtscript import ( # noqa + __INLINED, PARALLEL, - compile_assert, computation, horizontal, interval, @@ -71,89 +71,109 @@ def divergence_corner( rarea_c (in): inverse cell areas on c-grid divg_d (out): divergence on d-grid (cell corners) """ - from __externals__ import i_end, i_start, j_end, j_start + # TODO: move grid metric terms to externals to import them at compile time + + from __externals__ import grid_type, i_end, i_start, j_end, j_start with computation(PARALLEL), interval(...): - uf = ( - (u - 0.25 * (va[0, -1, 0] + va) * (cos_sg4[0, -1] + cos_sg2)) - * dyc - * 0.5 - * (sin_sg4[0, -1] + sin_sg2) - ) - """c-grid (?) contravariant component of the wind in the x-direction""" - # TODO: refactor this into a call to contravariant() - - vf = ( - (v - 0.25 * (ua[-1, 0, 0] + ua) * (cos_sg3[-1, 0] + cos_sg1)) - * dxc - * 0.5 - * (sin_sg3[-1, 0] + sin_sg1) - ) + if __INLINED(grid_type == 4): + # with horizontal(region[i_start - 1: i_end + 2, j_start - 1: j_end + 2]): + # extend computation into the halo? + uf = u * dyc + vf = v * dxc + divg_d = rarea_c * (vf[0, -1, 0] - vf + uf[-1, 0, 0] - uf) - divg_d = (vf[0, -1, 0] - vf + uf[-1, 0, 0] - uf) * rarea_c - - # The original code is: - # --------- - # with horizontal(region[:, j_start], region[:, j_end + 1]): - # uf = u * dyc * 0.5 * (sin_sg4[0, -1] + sin_sg2) - # with horizontal(region[i_start, :], region[i_end + 1, :]): - # vf = v * dxc * 0.5 * (sin_sg3[-1, 0] + sin_sg1) - # with horizontal(region[i_start, j_start], region[i_end + 1, j_start]): - # divg_d = (-vf + uf[-1, 0, 0] - uf) * rarea_c - # with horizontal(region[i_end + 1, j_end + 1], region[i_start, j_end + 1]): - # divg_d = (vf[0, -1, 0] + uf[-1, 0, 0] - uf) * rarea_c - # --------- - # - # Code with regions restrictions: - # --------- - # variables ending with 1 are the shifted versions - # in the future we could use gtscript functions when they support shifts - - with horizontal(region[i_start, :], region[i_end + 1, :]): - vf0 = v * dxc * 0.5 * (sin_sg3[-1, 0] + sin_sg1) - vf1 = v[0, -1, 0] * dxc[0, -1] * 0.5 * (sin_sg3[-1, -1] + sin_sg1[0, -1]) - uf1 = ( - ( - u[-1, 0, 0] - - 0.25 - * (va[-1, -1, 0] + va[-1, 0, 0]) - * (cos_sg4[-1, -1] + cos_sg2[-1, 0]) - ) - * dyc[-1, 0] + else: + uf = ( + (u - 0.25 * (va[0, -1, 0] + va) * (cos_sg4[0, -1] + cos_sg2)) + * dyc * 0.5 - * (sin_sg4[-1, -1] + sin_sg2[-1, 0]) + * (sin_sg4[0, -1] + sin_sg2) ) - divg_d = (vf1 - vf0 + uf1 - uf) * rarea_c - - with horizontal(region[:, j_start], region[:, j_end + 1]): - uf0 = u * dyc * 0.5 * (sin_sg4[0, -1] + sin_sg2) - uf1 = u[-1, 0, 0] * dyc[-1, 0] * 0.5 * (sin_sg4[-1, -1] + sin_sg2[-1, 0]) - vf1 = ( - ( - v[0, -1, 0] - - 0.25 - * (ua[-1, -1, 0] + ua[0, -1, 0]) - * (cos_sg3[-1, -1] + cos_sg1[0, -1]) - ) - * dxc[0, -1] + """c-grid (?) contravariant component of the wind in the x-direction""" + # TODO: refactor this into a call to contravariant() + + vf = ( + (v - 0.25 * (ua[-1, 0, 0] + ua) * (cos_sg3[-1, 0] + cos_sg1)) + * dxc * 0.5 - * (sin_sg3[-1, -1] + sin_sg1[0, -1]) + * (sin_sg3[-1, 0] + sin_sg1) ) - divg_d = (vf1 - vf + uf1 - uf0) * rarea_c - with horizontal(region[i_start, j_start], region[i_end + 1, j_start]): - uf1 = u[-1, 0, 0] * dyc[-1, 0] * 0.5 * (sin_sg4[-1, -1] + sin_sg2[-1, 0]) - vf0 = v * dxc * 0.5 * (sin_sg3[-1, 0] + sin_sg1) - uf0 = u * dyc * 0.5 * (sin_sg4[0, -1] + sin_sg2) - divg_d = (-vf0 + uf1 - uf0) * rarea_c + divg_d = (vf[0, -1, 0] - vf + uf[-1, 0, 0] - uf) * rarea_c + + # The original code is: + # --------- + # with horizontal(region[:, j_start], region[:, j_end + 1]): + # uf = u * dyc * 0.5 * (sin_sg4[0, -1] + sin_sg2) + # with horizontal(region[i_start, :], region[i_end + 1, :]): + # vf = v * dxc * 0.5 * (sin_sg3[-1, 0] + sin_sg1) + # with horizontal(region[i_start, j_start], region[i_end + 1, j_start]): + # divg_d = (-vf + uf[-1, 0, 0] - uf) * rarea_c + # with horizontal(region[i_end + 1, j_end + 1], region[i_start, j_end + 1]): + # divg_d = (vf[0, -1, 0] + uf[-1, 0, 0] - uf) * rarea_c + # --------- + # + # Code with regions restrictions: + # --------- + # variables ending with 1 are the shifted versions + # in the future we could use gtscript functions when they support shifts + + with horizontal(region[i_start, :], region[i_end + 1, :]): + vf0 = v * dxc * 0.5 * (sin_sg3[-1, 0] + sin_sg1) + vf1 = ( + v[0, -1, 0] * dxc[0, -1] * 0.5 * (sin_sg3[-1, -1] + sin_sg1[0, -1]) + ) + uf1 = ( + ( + u[-1, 0, 0] + - 0.25 + * (va[-1, -1, 0] + va[-1, 0, 0]) + * (cos_sg4[-1, -1] + cos_sg2[-1, 0]) + ) + * dyc[-1, 0] + * 0.5 + * (sin_sg4[-1, -1] + sin_sg2[-1, 0]) + ) + divg_d = (vf1 - vf0 + uf1 - uf) * rarea_c + + with horizontal(region[:, j_start], region[:, j_end + 1]): + uf0 = u * dyc * 0.5 * (sin_sg4[0, -1] + sin_sg2) + uf1 = ( + u[-1, 0, 0] * dyc[-1, 0] * 0.5 * (sin_sg4[-1, -1] + sin_sg2[-1, 0]) + ) + vf1 = ( + ( + v[0, -1, 0] + - 0.25 + * (ua[-1, -1, 0] + ua[0, -1, 0]) + * (cos_sg3[-1, -1] + cos_sg1[0, -1]) + ) + * dxc[0, -1] + * 0.5 + * (sin_sg3[-1, -1] + sin_sg1[0, -1]) + ) + divg_d = (vf1 - vf + uf1 - uf0) * rarea_c + + with horizontal(region[i_start, j_start], region[i_end + 1, j_start]): + uf1 = ( + u[-1, 0, 0] * dyc[-1, 0] * 0.5 * (sin_sg4[-1, -1] + sin_sg2[-1, 0]) + ) + vf0 = v * dxc * 0.5 * (sin_sg3[-1, 0] + sin_sg1) + uf0 = u * dyc * 0.5 * (sin_sg4[0, -1] + sin_sg2) + divg_d = (-vf0 + uf1 - uf0) * rarea_c - with horizontal(region[i_end + 1, j_end + 1], region[i_start, j_end + 1]): - vf1 = v[0, -1, 0] * dxc[0, -1] * 0.5 * (sin_sg3[-1, -1] + sin_sg1[0, -1]) - uf1 = u[-1, 0, 0] * dyc[-1, 0] * 0.5 * (sin_sg4[-1, -1] + sin_sg2[-1, 0]) - uf0 = u * dyc * 0.5 * (sin_sg4[0, -1] + sin_sg2) - divg_d = (vf1 + uf1 - uf0) * rarea_c + with horizontal(region[i_end + 1, j_end + 1], region[i_start, j_end + 1]): + vf1 = ( + v[0, -1, 0] * dxc[0, -1] * 0.5 * (sin_sg3[-1, -1] + sin_sg1[0, -1]) + ) + uf1 = ( + u[-1, 0, 0] * dyc[-1, 0] * 0.5 * (sin_sg4[-1, -1] + sin_sg2[-1, 0]) + ) + uf0 = u * dyc * 0.5 * (sin_sg4[0, -1] + sin_sg2) + divg_d = (vf1 + uf1 - uf0) * rarea_c - # --------- + # --------- def geoadjust_ut( @@ -330,8 +350,7 @@ def transportdelp_update_vorticity_and_kineticenergy( from __externals__ import grid_type, i_end, i_start, j_end, j_start with computation(PARALLEL), interval(...): - compile_assert(grid_type < 3) - # additional assumption (not grid.nested) + # assume (not grid.nested) # corresponds to x fluxes function, but for y-direction fy1 = delp[0, -1, 0] if vtc > 0.0 else delp fy = pt[0, -1, 0] if vtc > 0.0 else pt @@ -346,20 +365,20 @@ def transportdelp_update_vorticity_and_kineticenergy( with computation(PARALLEL), interval(...): # update vorticity and kinetic energy - compile_assert(grid_type < 3) ke = uc if ua > 0.0 else uc[1, 0, 0] vort = vc if va > 0.0 else vc[0, 1, 0] - with horizontal(region[:, j_start - 1], region[:, j_end]): - vort = vort * sin_sg4 + u[0, 1, 0] * cos_sg4 if va <= 0.0 else vort - with horizontal(region[:, j_start], region[:, j_end + 1]): - vort = vort * sin_sg2 + u * cos_sg2 if va > 0.0 else vort + if __INLINED(grid_type < 3): + with horizontal(region[:, j_start - 1], region[:, j_end]): + vort = vort * sin_sg4 + u[0, 1, 0] * cos_sg4 if va <= 0.0 else vort + with horizontal(region[:, j_start], region[:, j_end + 1]): + vort = vort * sin_sg2 + u * cos_sg2 if va > 0.0 else vort - with horizontal(region[i_end, :], region[i_start - 1, :]): - ke = ke * sin_sg3 + v[1, 0, 0] * cos_sg3 if ua <= 0.0 else ke - with horizontal(region[i_end + 1, :], region[i_start, :]): - ke = ke * sin_sg1 + v * cos_sg1 if ua > 0.0 else ke + with horizontal(region[i_end, :], region[i_start - 1, :]): + ke = ke * sin_sg3 + v[1, 0, 0] * cos_sg3 if ua <= 0.0 else ke + with horizontal(region[i_end + 1, :], region[i_start, :]): + ke = ke * sin_sg1 + v * cos_sg1 if ua > 0.0 else ke ke = 0.5 * dt2 * (ua * ke + va * vort) @@ -431,12 +450,12 @@ def update_x_velocity( from __externals__ import grid_type, i_end, i_start with computation(PARALLEL), interval(...): - compile_assert(grid_type < 3) - # additional assumption: not __INLINED(spec.grid.nested) + # assume: not __INLINED(spec.grid.nested) tmp_flux = dt2 * (velocity - velocity_c * cosa) / sina - with horizontal(region[i_start, :], region[i_end + 1, :]): - tmp_flux = dt2 * velocity + if __INLINED(grid_type < 3): + with horizontal(region[i_start, :], region[i_end + 1, :]): + tmp_flux = dt2 * velocity flux = vorticity[0, 0, 0] if tmp_flux > 0.0 else vorticity[0, 1, 0] velocity_c = velocity_c + tmp_flux * flux + rdxc * (ke[-1, 0, 0] - ke) @@ -465,13 +484,13 @@ def update_y_velocity( from __externals__ import grid_type, j_end, j_start with computation(PARALLEL), interval(...): - compile_assert(grid_type < 3) - # additional assumption: not __INLINED(spec.grid.nested) + # assume: not __INLINED(spec.grid.nested) # first-order upwind voriticity flux tmp_flux = dt2 * (velocity - velocity_c * cosa) / sina - with horizontal(region[:, j_start], region[:, j_end + 1]): - tmp_flux = dt2 * velocity + if __INLINED(grid_type < 3): + with horizontal(region[:, j_start], region[:, j_end + 1]): + tmp_flux = dt2 * velocity flux = vorticity[0, 0, 0] if tmp_flux > 0.0 else vorticity[1, 0, 0] # forward-stepped y velocity @@ -498,6 +517,8 @@ def __init__( self.grid_data = grid_data self._dord4 = True self._fC = self.grid_data.fC + self._grid_data = grid_data + self._grid_type = grid_type # TODO: double-check the dimensions on these, they may be incorrect # as they are only documentation and not used by the code self.delpc = quantity_factory.zeros( @@ -550,6 +571,7 @@ def make_quantity() -> pace.util.Quantity: self._divergence_corner = stencil_factory.from_dims_halo( func=divergence_corner, compute_dims=[X_INTERFACE_DIM, Y_INTERFACE_DIM, Z_DIM], + externals={"grid_type": grid_type}, ) else: self._divergence_corner = None @@ -566,12 +588,13 @@ def make_quantity() -> pace.util.Quantity: compute_halos=(1, 1), ) - self._fill_corners_x_delp_pt_w_stencil = stencil_factory.from_dims_halo( - fill_corners_delp_pt_w, - externals={"fill_corners_func": corners.fill_corners_2cells_x}, - compute_dims=[X_DIM, Y_DIM, Z_DIM], - compute_halos=(3, 3), - ) + if grid_type < 3: + self._fill_corners_x_delp_pt_w_stencil = stencil_factory.from_dims_halo( + fill_corners_delp_pt_w, + externals={"fill_corners_func": corners.fill_corners_2cells_x}, + compute_dims=[X_DIM, Y_DIM, Z_DIM], + compute_halos=(3, 3), + ) self._compute_nonhydro_fluxes_x_stencil = stencil_factory.from_dims_halo( compute_nonhydrostatic_fluxes_x, @@ -579,12 +602,13 @@ def make_quantity() -> pace.util.Quantity: compute_halos=(1, 1), ) - self._fill_corners_y_delp_pt_w_stencil = stencil_factory.from_dims_halo( - fill_corners_delp_pt_w, - externals={"fill_corners_func": corners.fill_corners_2cells_y}, - compute_dims=[X_DIM, Y_DIM, Z_DIM], - compute_halos=(3, 3), - ) + if grid_type < 3: + self._fill_corners_y_delp_pt_w_stencil = stencil_factory.from_dims_halo( + fill_corners_delp_pt_w, + externals={"fill_corners_func": corners.fill_corners_2cells_y}, + compute_dims=[X_DIM, Y_DIM, Z_DIM], + compute_halos=(3, 3), + ) self._transportdelp_updatevorticity_and_ke = stencil_factory.from_dims_halo( func=transportdelp_update_vorticity_and_kineticenergy, @@ -703,13 +727,15 @@ def __call__( ) # TODO(eddied): We pass the same fields 2x to avoid GTC validation errors - self._fill_corners_x_delp_pt_w_stencil(delp, pt, w, delp, pt, w) + if self._grid_type < 3: + self._fill_corners_x_delp_pt_w_stencil(delp, pt, w, delp, pt, w) # TODO: why is there only a "x" version of this? Is the "y" verison folded # into the next routine? self._compute_nonhydro_fluxes_x_stencil( delp, pt, ut, w, self._tmp_fx, self._tmp_fx1, self._tmp_fx2 ) - self._fill_corners_y_delp_pt_w_stencil(delp, pt, w, delp, pt, w) + if self._grid_type < 3: + self._fill_corners_y_delp_pt_w_stencil(delp, pt, w, delp, pt, w) self._transportdelp_updatevorticity_and_ke( delp, pt, diff --git a/fv3core/pace/fv3core/stencils/d2a2c_vect.py b/fv3core/pace/fv3core/stencils/d2a2c_vect.py index e42d6972..1b3e4d33 100644 --- a/fv3core/pace/fv3core/stencils/d2a2c_vect.py +++ b/fv3core/pace/fv3core/stencils/d2a2c_vect.py @@ -391,6 +391,9 @@ def __init__( grid_type: int, dord4: bool, ): + if grid_type not in [0, 4]: + raise NotImplementedError(f"unimplemented grid_type {grid_type}") + orchestrate(obj=self, config=stencil_factory.config.dace_config) grid_indexing = stencil_factory.grid_indexing @@ -406,9 +409,8 @@ def __init__( self._sin_sg2 = grid_data.sin_sg2 self._sin_sg3 = grid_data.sin_sg3 self._sin_sg4 = grid_data.sin_sg4 + self._grid_type = grid_type - if grid_type >= 3: - raise NotImplementedError("unimplemented grid_type >= 3") self._big_number = 1e30 # 1e8 if 32 bit nx = grid_indexing.iec + 1 # grid.npx + 2 ny = grid_indexing.jec + 1 # grid.npy + 2 @@ -416,9 +418,38 @@ def __init__( j1 = grid_indexing.jsc - 1 id_ = 1 if dord4 else 0 pad = 2 + 2 * id_ - npt = 4 if not nested else 0 - if npt > grid_indexing.domain[0] - 1 or npt > grid_indexing.domain[1] - 1: - npt = 0 + if (grid_type < 3) and (not nested): + npt = 4 + if npt > grid_indexing.domain[0] - 1 or npt > grid_indexing.domain[1] - 1: + npt = 0 + ifirst = ( + grid_indexing.isc + 2 + if grid_indexing.west_edge + else grid_indexing.isc - 1 + ) + ilast = ( + grid_indexing.iec - 1 + if grid_indexing.east_edge + else grid_indexing.iec + 2 + ) + + jfirst = ( + grid_indexing.jsc + 2 + if grid_indexing.south_edge + else grid_indexing.jsc - 1 + ) + jlast = ( + grid_indexing.jec - 1 + if grid_indexing.north_edge + else grid_indexing.jec + 2 + ) + else: + npt = -2 + ifirst = grid_indexing.isc - 1 + ilast = grid_indexing.iec + 2 + jfirst = grid_indexing.jsc - 1 + jlast = grid_indexing.jec + 2 + self._utmp = quantity_factory.zeros( [X_DIM, Y_DIM, Z_DIM], units="m/s", @@ -430,30 +461,29 @@ def __init__( dtype=Float, ) - js1 = npt + OFFSET if grid_indexing.south_edge else grid_indexing.jsc - 1 - je1 = ny - npt if grid_indexing.north_edge else grid_indexing.jec + 1 - is1 = npt + OFFSET if grid_indexing.west_edge else grid_indexing.isd - ie1 = nx - npt if grid_indexing.east_edge else grid_indexing.ied + if (grid_type < 3) and (not nested): + js1 = npt + OFFSET if grid_indexing.south_edge else grid_indexing.jsc - 1 + je1 = ny - npt if grid_indexing.north_edge else grid_indexing.jec + 1 + is1 = npt + OFFSET if grid_indexing.west_edge else grid_indexing.isd + ie1 = nx - npt if grid_indexing.east_edge else grid_indexing.ied - is2 = npt + OFFSET if grid_indexing.west_edge else grid_indexing.isc - 1 - ie2 = nx - npt if grid_indexing.east_edge else grid_indexing.iec + 1 - js2 = npt + OFFSET if grid_indexing.south_edge else grid_indexing.jsd - je2 = ny - npt if grid_indexing.north_edge else grid_indexing.jed + is2 = npt + OFFSET if grid_indexing.west_edge else grid_indexing.isc - 1 + ie2 = nx - npt if grid_indexing.east_edge else grid_indexing.iec + 1 + js2 = npt + OFFSET if grid_indexing.south_edge else grid_indexing.jsd + je2 = ny - npt if grid_indexing.north_edge else grid_indexing.jed - ifirst = ( - grid_indexing.isc + 2 if grid_indexing.west_edge else grid_indexing.isc - 1 - ) - ilast = ( - grid_indexing.iec - 1 if grid_indexing.east_edge else grid_indexing.iec + 2 - ) - idiff = ilast - ifirst + 1 + else: + js1 = grid_indexing.jsc - 1 + je1 = grid_indexing.jec + 1 + is1 = grid_indexing.isd + ie1 = grid_indexing.ied - jfirst = ( - grid_indexing.jsc + 2 if grid_indexing.south_edge else grid_indexing.jsc - 1 - ) - jlast = ( - grid_indexing.jec - 1 if grid_indexing.north_edge else grid_indexing.jec + 2 - ) + is2 = grid_indexing.isc - 1 + ie2 = grid_indexing.iec + 1 + js2 = grid_indexing.jsd + je2 = grid_indexing.jed + + idiff = ilast - ifirst + 1 jdiff = jlast - jfirst + 1 self._set_tmps = stencil_factory.from_dims_halo( @@ -482,12 +512,13 @@ def __init__( else: d2a2c_avg_offset = 3 - self._avg_box = stencil_factory.from_dims_halo( - func=avg_box, - externals={"D2A2C_AVG_OFFSET": d2a2c_avg_offset}, - compute_dims=[X_DIM, Y_DIM, Z_DIM], - compute_halos=(3, 3), - ) + if self._grid_type < 3: + self._avg_box = stencil_factory.from_dims_halo( + func=avg_box, + externals={"D2A2C_AVG_OFFSET": d2a2c_avg_offset}, + compute_dims=[X_DIM, Y_DIM, Z_DIM], + compute_halos=(3, 3), + ) self._contravariant_components = stencil_factory.from_origin_domain( func=contravariant_components, @@ -510,17 +541,18 @@ def __init__( domain=(idiff, grid_indexing.domain[1] + 2, grid_indexing.domain[2]), ) - self._east_west_edges = stencil_factory.from_origin_domain( - func=east_west_edges, - externals={ - "i_end": ax_offsets_edges["i_end"], - "i_start": ax_offsets_edges["i_start"], - "local_je": ax_offsets_edges["local_je"], - "local_js": ax_offsets_edges["local_js"], - }, - origin=origin_edges, - domain=domain_edges, - ) + if grid_type < 3: + self._east_west_edges = stencil_factory.from_origin_domain( + func=east_west_edges, + externals={ + "i_end": ax_offsets_edges["i_end"], + "i_start": ax_offsets_edges["i_start"], + "local_je": ax_offsets_edges["local_je"], + "local_js": ax_offsets_edges["local_js"], + }, + origin=origin_edges, + domain=domain_edges, + ) # Ydir: self._fill_corners_y = stencil_factory.from_origin_domain( @@ -532,19 +564,20 @@ def __init__( domain=domain_edges, ) - self._north_south_edges = stencil_factory.from_origin_domain( - func=north_south_edges, - externals={ - "j_end": ax_offsets_edges["j_end"], - "j_start": ax_offsets_edges["j_start"], - "local_ie": ax_offsets_edges["local_ie"], - "local_is": ax_offsets_edges["local_is"], - "local_je": ax_offsets_edges["local_je"], - "local_js": ax_offsets_edges["local_js"], - }, - origin=origin_edges, - domain=domain_edges, - ) + if grid_type < 3: + self._north_south_edges = stencil_factory.from_origin_domain( + func=north_south_edges, + externals={ + "j_end": ax_offsets_edges["j_end"], + "j_start": ax_offsets_edges["j_start"], + "local_ie": ax_offsets_edges["local_ie"], + "local_is": ax_offsets_edges["local_is"], + "local_je": ax_offsets_edges["local_je"], + "local_js": ax_offsets_edges["local_js"], + }, + origin=origin_edges, + domain=domain_edges, + ) self._vt_main = stencil_factory.from_origin_domain( func=vt_main, @@ -583,12 +616,13 @@ def __call__(self, uc, vc, u, v, ua, va, utc, vtc): ) # tmp edges - self._avg_box( - u, - v, - self._utmp, - self._vtmp, - ) + if self._grid_type < 3: + self._avg_box( + u, + v, + self._utmp, + self._vtmp, + ) # contra-variant components at cell center self._contravariant_components( @@ -617,19 +651,20 @@ def __call__(self, uc, vc, u, v, ua, va, utc, vtc): utc, ) - self._east_west_edges( - u, - ua, - uc, - utc, - self._utmp, - v, - self._sin_sg1, - self._sin_sg3, - self._cosa_u, - self._rsin_u, - self._dxa, - ) + if self._grid_type < 3: + self._east_west_edges( + u, + ua, + uc, + utc, + self._utmp, + v, + self._sin_sg1, + self._sin_sg3, + self._cosa_u, + self._rsin_u, + self._dxa, + ) # Ydir: self._fill_corners_y( @@ -639,19 +674,20 @@ def __call__(self, uc, vc, u, v, ua, va, utc, vtc): va, ) - self._north_south_edges( - v, - va, - vc, - vtc, - self._vtmp, - u, - self._sin_sg2, - self._sin_sg4, - self._cosa_v, - self._rsin_v, - self._dya, - ) + if self._grid_type < 3: + self._north_south_edges( + v, + va, + vc, + vtc, + self._vtmp, + u, + self._sin_sg2, + self._sin_sg4, + self._cosa_v, + self._rsin_v, + self._dya, + ) self._vt_main( self._vtmp, diff --git a/fv3core/pace/fv3core/stencils/d_sw.py b/fv3core/pace/fv3core/stencils/d_sw.py index cc602f4e..e08af776 100644 --- a/fv3core/pace/fv3core/stencils/d_sw.py +++ b/fv3core/pace/fv3core/stencils/d_sw.py @@ -239,10 +239,16 @@ def compute_kinetic_energy( as defined in FV3 documentation by equation 6.3, multiplied by dt dt: timestep """ + from __externals__ import grid_type + with computation(PARALLEL), interval(...): - ub_contra, vb_contra = interpolate_uc_vc_to_cell_corners( - uc, vc, cosa, rsina, uc_contra, vc_contra - ) + if __INLINED(grid_type < 3): + ub_contra, vb_contra = interpolate_uc_vc_to_cell_corners( + uc, vc, cosa, rsina, uc_contra, vc_contra + ) + else: + ub_contra = 0.5 * (uc[0, -1, 0] + uc) + vb_contra = 0.5 * (vc[-1, 0, 0] + vc) advected_v = advect_v_along_y(v, vb_contra, rdy=rdy, dy=dy, dya=dya, dt=dt) advected_u = advect_u_along_x(u, ub_contra, rdx=rdx, dx=dx, dxa=dxa, dt=dt) # makes sure the kinetic energy part of the governing equation is computed @@ -757,7 +763,7 @@ def __init__( self._do_stochastic_ke_backscatter = config.do_skeb self.grid_indexing = stencil_factory.grid_indexing - assert config.grid_type < 3, "ubke and vbke only implemented for grid_type < 3" + self._grid_type = config.grid_type assert not config.inline_q, "inline_q not yet implemented" assert ( config.d_ext <= 0 @@ -855,6 +861,7 @@ def make_quantity(): self.fv_prep = FiniteVolumeFluxPrep( stencil_factory=stencil_factory, grid_data=grid_data, + grid_type=self._grid_type, ) self.divergence_damping = DivergenceDamping( stencil_factory, @@ -887,6 +894,7 @@ def make_quantity(): "mord": config.hord_mt, "xt_minmax": False, "yt_minmax": False, + "grid_type": config.grid_type, }, ) self._apply_fluxes = stencil_factory.from_dims_halo( @@ -932,7 +940,7 @@ def make_quantity(): ) ) - if (self._d_con > 1.e-5) or (self._do_stochastic_ke_backscatter): + if (self._d_con > 1.0e-5) or (self._do_stochastic_ke_backscatter): self._accumulate_heat_source_and_dissipation_estimate_stencil = ( stencil_factory.from_dims_halo( func=accumulate_heat_source_and_dissipation_estimate, @@ -1254,11 +1262,11 @@ def __call__( self._column_namelist["d_con"], ) - if (self._d_con > 1.e-5) or (self._do_stochastic_ke_backscatter): + if (self._d_con > 1.0e-5) or (self._do_stochastic_ke_backscatter): self._accumulate_heat_source_and_dissipation_estimate_stencil( self._tmp_heat_s, heat_source, self._tmp_diss_e, diss_est ) - + self._update_u_and_v_stencil( self._tmp_ut, self._tmp_vt, diff --git a/fv3core/pace/fv3core/stencils/divergence_damping.py b/fv3core/pace/fv3core/stencils/divergence_damping.py index 7aac03e7..a3e5a32b 100644 --- a/fv3core/pace/fv3core/stencils/divergence_damping.py +++ b/fv3core/pace/fv3core/stencils/divergence_damping.py @@ -6,6 +6,7 @@ horizontal, interval, region, + sqrt, ) import pace.fv3core.stencils.basic_operations as basic @@ -14,7 +15,10 @@ from pace.dsl.dace.orchestration import dace_inhibitor, orchestrate from pace.dsl.stencil import StencilFactory, get_stencils_with_varied_bounds from pace.dsl.typing import Float, FloatField, FloatFieldIJ, FloatFieldK -from pace.fv3core.stencils.a2b_ord4 import AGrid2BGridFourthOrder +from pace.fv3core.stencils.a2b_ord4 import ( + AGrid2BGridFourthOrder, + doubly_periodic_a2b_ord4, +) from pace.fv3core.stencils.d2a2c_vect import contravariant from pace.util import X_DIM, X_INTERFACE_DIM, Y_DIM, Y_INTERFACE_DIM, Z_DIM from pace.util.grid import DampingCoefficients, GridData @@ -251,6 +255,50 @@ def smagorinsky_diffusion_approx(delpc: FloatField, vort: FloatField, absdt: Flo vort = absdt * (delpc ** 2.0 + vort ** 2.0) ** 0.5 +def smag_corner( + u: FloatField, + v: FloatField, + dx: FloatFieldIJ, + dxc: FloatFieldIJ, + dy: FloatFieldIJ, + dyc: FloatFieldIJ, + rarea: FloatFieldIJ, + rarea_c: FloatFieldIJ, + smag_c: FloatField, + dt: Float, +): + """ + Smagorinsky diffusion for a doubly-periodic domain + Args: + u (in): d-grid u wind + v (in): d-grid v wind + dx (in): Distance between grid corners along the x-direction + dxc (in): Distance between grid centers along the x-direction + dy (in): Distance between grid corners along the y-direction + dyc (in): Distance between grid centers along the y-direction + rarea (in): 1/cell area + rarea_c (in): 1/ c-grid cell area + smag_c (out): tension shear strain on cell corners + dt (in): timestep + """ + + with computation(PARALLEL), interval(...): + # compute tension strain at corners: + shear = 0.0 + + ut = u * dyc + vt = v * dxc + smag_c_t = rarea_c * (vt[0, -1, 0] - vt - ut[-1, 0, 0] + ut) + + # compute shear strain: + vt2 = u * dx + ut2 = v * dy + wk = rarea * (vt2 - vt2[0, 1, 0] + ut2 - ut2[1, 0, 0]) + + shear = doubly_periodic_a2b_ord4(wk) + smag_c = dt * sqrt(shear ** 2 + smag_c_t ** 2) + + class DivergenceDamping: """ A large section in Fortran's d_sw that applies divergence damping @@ -277,7 +325,7 @@ def __init__( ) self.grid_indexing = stencil_factory.grid_indexing assert not nested, "nested not implemented" - assert grid_type < 3, "Not implemented, grid_type>=3, specifically smag_corner" + # assert grid_type < 3, "Not implemented, grid_type>=3" # TODO: make dddmp a compile-time external, instead of runtime scalar self._dddmp = dddmp # TODO: make da_min_c a compile-time external, instead of runtime scalar @@ -287,6 +335,7 @@ def __init__( self._grid_type = grid_type self._nord_column = nord_col self._d2_bg_column = d2_bg + self._rarea = grid_data.rarea self._rarea_c = grid_data.rarea_c self._sin_sg1 = grid_data.sin_sg1 self._sin_sg2 = grid_data.sin_sg2 @@ -296,6 +345,8 @@ def __init__( self._cosa_v = grid_data.cosa_v self._sina_u = grid_data.sina_u self._sina_v = grid_data.sina_v + self._dx = grid_data.dx + self._dy = grid_data.dy self._dxc = grid_data.dxc self._dyc = grid_data.dyc # TODO: maybe compute locally divg_* grid variables @@ -433,21 +484,31 @@ def __init__( compute_halos=(self.grid_indexing.n_halo, self.grid_indexing.n_halo), ) - self.a2b_ord4 = AGrid2BGridFourthOrder( - stencil_factory=high_k_stencil_factory, - quantity_factory=quantity_factory, - grid_data=grid_data, - grid_type=self._grid_type, - replace=False, - ) + if self._grid_type < 3: + self.a2b_ord4 = AGrid2BGridFourthOrder( + stencil_factory=high_k_stencil_factory, + quantity_factory=quantity_factory, + grid_data=grid_data, + grid_type=self._grid_type, + replace=False, + ) - self._smagorinksy_diffusion_approx_stencil = ( - high_k_stencil_factory.from_dims_halo( - func=smagorinsky_diffusion_approx, + self._smagorinksy_diffusion_approx_stencil = ( + high_k_stencil_factory.from_dims_halo( + func=smagorinsky_diffusion_approx, + compute_dims=[X_INTERFACE_DIM, Y_INTERFACE_DIM, Z_DIM], + compute_halos=(0, 0), + ) + ) + else: + self._smag_corner = high_k_stencil_factory.from_dims_halo( + func=smag_corner, + externals={ + "replace": False, + }, compute_dims=[X_INTERFACE_DIM, Y_INTERFACE_DIM, Z_DIM], compute_halos=(0, 0), ) - ) self._damping_nord_highorder_stencil = high_k_stencil_factory.from_dims_halo( func=damping_nord_highorder_stencil, @@ -614,12 +675,26 @@ def __call__( # take the cell centered relative vorticity and regrid it to cell corners # for smagorinsky diffusion # - self.a2b_ord4(rel_vort_agrid, damped_rel_vort_bgrid) - self._smagorinksy_diffusion_approx_stencil( - delpc, - damped_rel_vort_bgrid, - abs(dt), - ) + if self._grid_type < 3: + self.a2b_ord4(rel_vort_agrid, damped_rel_vort_bgrid) + self._smagorinksy_diffusion_approx_stencil( + delpc, + damped_rel_vort_bgrid, + abs(dt), + ) + else: + self._smag_corner( + u, + v, + self._dx, + self._dxc, + self._dy, + self._dyc, + self._rarea, + self._rarea_c, + damped_rel_vort_bgrid, + abs(dt), + ) da_min: Float = self._get_da_min() if self._stretched_grid: diff --git a/fv3core/pace/fv3core/stencils/dyn_core.py b/fv3core/pace/fv3core/stencils/dyn_core.py index 7a75790b..d8e3b8d3 100644 --- a/fv3core/pace/fv3core/stencils/dyn_core.py +++ b/fv3core/pace/fv3core/stencils/dyn_core.py @@ -243,7 +243,7 @@ class _HaloUpdaters(object): def __init__( self, - comm: pace.util.CubedSphereCommunicator, + comm: pace.util.Communicator, grid_indexing: GridIndexing, quantity_factory: pace.util.QuantityFactory, state: DycoreState, @@ -364,7 +364,7 @@ def __init__( def __init__( self, - comm: pace.util.CubedSphereCommunicator, + comm: pace.util.Communicator, stencil_factory: StencilFactory, quantity_factory: pace.util.QuantityFactory, grid_data: GridData, @@ -380,14 +380,14 @@ def __init__( ): """ Args: - comm: object for cubed sphere inter-process communication + comm: object for tile or cubed-sphere inter-process communication stencil_factory: creates stencils quantity_factory: creates quantities grid_data: metric terms defining the grid damping_coefficients: damping configuration - grid_type: ??? - nested: ??? - stretched_grid: ??? + grid_type: grid geometry used + nested: if the grid contains a nested, high-res region + stretched_grid: if the grid is stretched so tile faces cover different areas config: configuration settings pfull: atmospheric Eulerian grid reference pressure (Pa) phis: surface geopotential height @@ -560,6 +560,7 @@ def __init__( quantity_factory=quantity_factory, area=grid_data.area, dp_ref=grid_data.dp_ref, + grid_type=config.grid_type, ) ) diff --git a/fv3core/pace/fv3core/stencils/fv_dynamics.py b/fv3core/pace/fv3core/stencils/fv_dynamics.py index 3299e501..0ffc7572 100644 --- a/fv3core/pace/fv3core/stencils/fv_dynamics.py +++ b/fv3core/pace/fv3core/stencils/fv_dynamics.py @@ -90,7 +90,7 @@ class DynamicalCore: def __init__( self, - comm: pace.util.CubedSphereCommunicator, + comm: pace.util.Communicator, grid_data: GridData, stencil_factory: StencilFactory, quantity_factory: pace.util.QuantityFactory, @@ -103,7 +103,7 @@ def __init__( ): """ Args: - comm: object for cubed sphere inter-process communication + comm: object for cubed sphere or tile inter-process communication grid_data: metric terms defining the model grid stencil_factory: creates stencils damping_coefficients: damping configuration/constants @@ -276,7 +276,13 @@ def __init__( self.config.nf_omega, ) self._cubed_to_latlon = CubedToLatLon( - state, stencil_factory, quantity_factory, grid_data, config.c2l_ord, comm + state, + stencil_factory, + quantity_factory, + grid_data, + self.config.grid_type, + config.c2l_ord, + comm, ) self._cappa = self.acoustic_dynamics.cappa diff --git a/fv3core/pace/fv3core/stencils/fxadv.py b/fv3core/pace/fv3core/stencils/fxadv.py index 8fc410fa..1527c898 100644 --- a/fv3core/pace/fv3core/stencils/fxadv.py +++ b/fv3core/pace/fv3core/stencils/fxadv.py @@ -1,4 +1,11 @@ -from gt4py.cartesian.gtscript import PARALLEL, computation, horizontal, interval, region +from gt4py.cartesian.gtscript import ( + __INLINED, + PARALLEL, + computation, + horizontal, + interval, + region, +) from pace.dsl.dace import orchestrate from pace.dsl.stencil import StencilFactory @@ -28,24 +35,36 @@ def main_uc_vc_contra( uc_contra (out): contravariant c-grid x-wind vc_contra (out): contravariant c-grid y-wind """ - from __externals__ import j_end, j_start, local_ie, local_is, local_je, local_js + from __externals__ import ( + grid_type, + j_end, + j_start, + local_ie, + local_is, + local_je, + local_js, + ) with computation(PARALLEL), interval(...): - utmp = uc_contra - with horizontal(region[local_is - 1 : local_ie + 3, :]): - # for C-grid, v must be regridded to lie at the same point as u - v = 0.25 * (vc[-1, 0, 0] + vc + vc[-1, 1, 0] + vc[0, 1, 0]) - uc_contra = contravariant(uc, v, cosa_u, rsin_u) - # TODO: investigate whether this region operation is necessary - with horizontal( - region[:, j_start - 1 : j_start + 1], region[:, j_end : j_end + 2] - ): - uc_contra = utmp - - with horizontal(region[:, local_js - 1 : local_je + 3]): - # for C-grid, u must be regridded to lie at same point as v - u = 0.25 * (uc[0, -1, 0] + uc[1, -1, 0] + uc + uc[1, 0, 0]) - vc_contra = contravariant(vc, u, cosa_v, rsin_v) + if __INLINED(grid_type < 3): + utmp = uc_contra + with horizontal(region[local_is - 1 : local_ie + 3, :]): + # for C-grid, v must be regridded to lie at the same point as u + v = 0.25 * (vc[-1, 0, 0] + vc + vc[-1, 1, 0] + vc[0, 1, 0]) + uc_contra = contravariant(uc, v, cosa_u, rsin_u) + # TODO: investigate whether this region operation is necessary + with horizontal( + region[:, j_start - 1 : j_start + 1], region[:, j_end : j_end + 2] + ): + uc_contra = utmp + + with horizontal(region[:, local_js - 1 : local_je + 3]): + # for C-grid, u must be regridded to lie at same point as v + u = 0.25 * (uc[0, -1, 0] + uc[1, -1, 0] + uc + uc[1, 0, 0]) + vc_contra = contravariant(vc, u, cosa_v, rsin_v) + else: + uc_contra = uc + vc_contra = vc def uc_contra_y_edge( @@ -496,12 +515,14 @@ def __init__( self, stencil_factory: StencilFactory, grid_data: GridData, + grid_type: int, ): orchestrate( obj=self, config=stencil_factory.config.dace_config, ) grid_indexing = stencil_factory.grid_indexing + self._grid_type = grid_type self._tile_interior = not ( grid_indexing.west_edge or grid_indexing.east_edge @@ -533,26 +554,30 @@ def __init__( "domain": domain_corners, } self._main_uc_vc_contra_stencil = stencil_factory.from_origin_domain( - main_uc_vc_contra, **kwargs - ) - self._uc_contra_y_edge_stencil = stencil_factory.from_origin_domain( - uc_contra_y_edge, **kwargs - ) - self._vc_contra_y_edge_stencil = stencil_factory.from_origin_domain( - vc_contra_y_edge, **kwargs - ) - self._vc_contra_x_edge_stencil = stencil_factory.from_origin_domain( - vc_contra_x_edge, **kwargs - ) - self._uc_contra_x_edge_stencil = stencil_factory.from_origin_domain( - uc_contra_x_edge, **kwargs - ) - self._uc_contra_corners_stencil = stencil_factory.from_origin_domain( - uc_contra_corners, **kwargs_corners - ) - self._vc_contra_corners_stencil = stencil_factory.from_origin_domain( - vc_contra_corners, **kwargs_corners + main_uc_vc_contra, + externals={"grid_type": grid_type, **ax_offsets}, + origin=origin, + domain=domain, ) + if self._grid_type < 3: + self._uc_contra_y_edge_stencil = stencil_factory.from_origin_domain( + uc_contra_y_edge, **kwargs + ) + self._vc_contra_y_edge_stencil = stencil_factory.from_origin_domain( + vc_contra_y_edge, **kwargs + ) + self._vc_contra_x_edge_stencil = stencil_factory.from_origin_domain( + vc_contra_x_edge, **kwargs + ) + self._uc_contra_x_edge_stencil = stencil_factory.from_origin_domain( + uc_contra_x_edge, **kwargs + ) + self._uc_contra_corners_stencil = stencil_factory.from_origin_domain( + uc_contra_corners, **kwargs_corners + ) + self._vc_contra_corners_stencil = stencil_factory.from_origin_domain( + vc_contra_corners, **kwargs_corners + ) self._fxadv_fluxes_stencil = stencil_factory.from_origin_domain( fxadv_fluxes_stencil, **kwargs ) @@ -607,41 +632,46 @@ def __call__( uc_contra, vc_contra, ) - if not self._tile_interior: - self._uc_contra_y_edge_stencil(uc, self._sin_sg1, self._sin_sg3, uc_contra) - self._vc_contra_y_edge_stencil( - vc, - self._cosa_v, - uc_contra, - vc_contra, - ) - self._vc_contra_x_edge_stencil(vc, self._sin_sg2, self._sin_sg4, vc_contra) - self._uc_contra_x_edge_stencil( - uc, - self._cosa_u, - vc_contra, - uc_contra, - ) - # NOTE: this is aliasing memory - self._uc_contra_corners_stencil( - self._cosa_u, - self._cosa_v, - uc, - vc, - uc_contra, - uc_contra, - vc_contra, - ) - # NOTE: this is aliasing memory - self._vc_contra_corners_stencil( - self._cosa_u, - self._cosa_v, - uc, - vc, - uc_contra, - vc_contra, - vc_contra, - ) + if self._grid_type < 3: + if not self._tile_interior: + self._uc_contra_y_edge_stencil( + uc, self._sin_sg1, self._sin_sg3, uc_contra + ) + self._vc_contra_y_edge_stencil( + vc, + self._cosa_v, + uc_contra, + vc_contra, + ) + self._vc_contra_x_edge_stencil( + vc, self._sin_sg2, self._sin_sg4, vc_contra + ) + self._uc_contra_x_edge_stencil( + uc, + self._cosa_u, + vc_contra, + uc_contra, + ) + # NOTE: this is aliasing memory + self._uc_contra_corners_stencil( + self._cosa_u, + self._cosa_v, + uc, + vc, + uc_contra, + uc_contra, + vc_contra, + ) + # NOTE: this is aliasing memory + self._vc_contra_corners_stencil( + self._cosa_u, + self._cosa_v, + uc, + vc, + uc_contra, + vc_contra, + vc_contra, + ) self._fxadv_fluxes_stencil( self._sin_sg1, self._sin_sg2, diff --git a/fv3core/pace/fv3core/stencils/tracer_2d_1l.py b/fv3core/pace/fv3core/stencils/tracer_2d_1l.py index 475be6c5..02bc2dd6 100644 --- a/fv3core/pace/fv3core/stencils/tracer_2d_1l.py +++ b/fv3core/pace/fv3core/stencils/tracer_2d_1l.py @@ -181,7 +181,7 @@ def __init__( quantity_factory: pace.util.QuantityFactory, transport: FiniteVolumeTransport, grid_data, - comm: pace.util.CubedSphereCommunicator, + comm: pace.util.Communicator, tracers: Dict[str, pace.util.Quantity], ): orchestrate( diff --git a/fv3core/pace/fv3core/stencils/updatedzc.py b/fv3core/pace/fv3core/stencils/updatedzc.py index 70e004e6..bb0703ba 100644 --- a/fv3core/pace/fv3core/stencils/updatedzc.py +++ b/fv3core/pace/fv3core/stencils/updatedzc.py @@ -124,9 +124,11 @@ def __init__( quantity_factory: pace.util.QuantityFactory, area: pace.util.Quantity, dp_ref: pace.util.Quantity, + grid_type, ): grid_indexing = stencil_factory.grid_indexing self._area = area + self.grid_type = grid_type # TODO: this is needed because GridData.dp_ref does not have access # to a QuantityFactory, we should add a way to perform operations on # Quantity and persist the QuantityFactory choices @@ -158,18 +160,21 @@ def __init__( ) ax_offsets = grid_indexing.axis_offsets(full_origin, full_domain) - self._fill_corners_x_stencil = stencil_factory.from_origin_domain( - corners.fill_corners_2cells_x_stencil, - externals=ax_offsets, - origin=full_origin, - domain=full_domain, - ) - self._fill_corners_y_stencil = stencil_factory.from_origin_domain( - corners.fill_corners_2cells_y_stencil, - externals=ax_offsets, - origin=full_origin, - domain=full_domain, - ) + + if self.grid_type < 3: + self._fill_corners_x_stencil = stencil_factory.from_origin_domain( + corners.fill_corners_2cells_x_stencil, + externals=ax_offsets, + origin=full_origin, + domain=full_domain, + ) + self._fill_corners_y_stencil = stencil_factory.from_origin_domain( + corners.fill_corners_2cells_y_stencil, + externals=ax_offsets, + origin=full_origin, + domain=full_domain, + ) + self._update_dz_c = stencil_factory.from_origin_domain( update_dz_c, origin=grid_indexing.origin_compute(add=(-1, -1, 0)), @@ -202,8 +207,9 @@ def __call__( self._double_copy_stencil(gz, self._gz_x, self._gz_y) # TODO(eddied): We pass the same fields 2x to avoid GTC validation errors - self._fill_corners_x_stencil(self._gz_x, self._gz_x) - self._fill_corners_y_stencil(self._gz_y, self._gz_y) + if self.grid_type < 3: + self._fill_corners_x_stencil(self._gz_x, self._gz_x) + self._fill_corners_y_stencil(self._gz_y, self._gz_y) self._update_dz_c( self._dp_ref, diff --git a/fv3core/pace/fv3core/stencils/xppm.py b/fv3core/pace/fv3core/stencils/xppm.py index 675d022f..239e2d7f 100644 --- a/fv3core/pace/fv3core/stencils/xppm.py +++ b/fv3core/pace/fv3core/stencils/xppm.py @@ -156,7 +156,7 @@ def compute_al(q: FloatField, dxa: FloatFieldIJ): Returns: q interpolated to x-interfaces """ - from __externals__ import i_end, i_start, iord + from __externals__ import grid_type, i_end, i_start, iord compile_assert(iord < 8) @@ -166,17 +166,21 @@ def compute_al(q: FloatField, dxa: FloatFieldIJ): compile_assert(False) al = max(al, 0.0) - with horizontal(region[i_start - 1, :], region[i_end, :]): - al = ppm.c1 * q[-2, 0, 0] + ppm.c2 * q[-1, 0, 0] + ppm.c3 * q - with horizontal(region[i_start, :], region[i_end + 1, :]): - al = 0.5 * ( - ((2.0 * dxa[-1, 0] + dxa[-2, 0]) * q[-1, 0, 0] - dxa[-1, 0] * q[-2, 0, 0]) - / (dxa[-2, 0] + dxa[-1, 0]) - + ((2.0 * dxa[0, 0] + dxa[1, 0]) * q[0, 0, 0] - dxa[0, 0] * q[1, 0, 0]) - / (dxa[0, 0] + dxa[1, 0]) - ) - with horizontal(region[i_start + 1, :], region[i_end + 2, :]): - al = ppm.c3 * q[-1, 0, 0] + ppm.c2 * q[0, 0, 0] + ppm.c1 * q[1, 0, 0] + if __INLINED(grid_type < 3): + with horizontal(region[i_start - 1, :], region[i_end, :]): + al = ppm.c1 * q[-2, 0, 0] + ppm.c2 * q[-1, 0, 0] + ppm.c3 * q + with horizontal(region[i_start, :], region[i_end + 1, :]): + al = 0.5 * ( + ( + (2.0 * dxa[-1, 0] + dxa[-2, 0]) * q[-1, 0, 0] + - dxa[-1, 0] * q[-2, 0, 0] + ) + / (dxa[-2, 0] + dxa[-1, 0]) + + ((2.0 * dxa[0, 0] + dxa[1, 0]) * q[0, 0, 0] - dxa[0, 0] * q[1, 0, 0]) + / (dxa[0, 0] + dxa[1, 0]) + ) + with horizontal(region[i_start + 1, :], region[i_end + 2, :]): + al = ppm.c3 * q[-1, 0, 0] + ppm.c2 * q[0, 0, 0] + ppm.c1 * q[1, 0, 0] return al @@ -248,7 +252,7 @@ def bl_br_edges(bl, br, q, dxa, al, dm): @gtscript.function def compute_blbr_ord8plus(q: FloatField, dxa: FloatFieldIJ): - from __externals__ import i_end, i_start, iord + from __externals__ import grid_type, i_end, i_start, iord dm = dm_iord8plus(q) al = al_iord8plus(q, dm) @@ -256,12 +260,14 @@ def compute_blbr_ord8plus(q: FloatField, dxa: FloatFieldIJ): compile_assert(iord == 8) bl, br = blbr_iord8(q, al, dm) - bl, br = bl_br_edges(bl, br, q, dxa, al, dm) - with horizontal( - region[i_start - 1 : i_start + 2, :], region[i_end - 1 : i_end + 2, :] - ): - bl, br = ppm.pert_ppm_standard_constraint_fcn(q, bl, br) + if __INLINED(grid_type < 3): + bl, br = bl_br_edges(bl, br, q, dxa, al, dm) + + with horizontal( + region[i_start - 1 : i_start + 2, :], region[i_end - 1 : i_end + 2, :] + ): + bl, br = ppm.pert_ppm_standard_constraint_fcn(q, bl, br) return bl, br @@ -304,7 +310,7 @@ def __init__( # Arguments come from: # namelist.grid_type # grid.dxa - assert grid_type < 3 + assert (grid_type < 3) or (grid_type == 4) self._dxa = dxa ax_offsets = stencil_factory.grid_indexing.axis_offsets(origin, domain) self._compute_flux_stencil = stencil_factory.from_origin_domain( @@ -315,6 +321,7 @@ def __init__( "xt_minmax": True, "i_start": ax_offsets["i_start"], "i_end": ax_offsets["i_end"], + "grid_type": grid_type, }, origin=origin, domain=domain, diff --git a/fv3core/pace/fv3core/stencils/xtp_u.py b/fv3core/pace/fv3core/stencils/xtp_u.py index 5568376f..1b511e00 100644 --- a/fv3core/pace/fv3core/stencils/xtp_u.py +++ b/fv3core/pace/fv3core/stencils/xtp_u.py @@ -17,7 +17,7 @@ def get_bl_br(u, dx, dxa): bl: ??? br: ??? """ - from __externals__ import i_end, i_start, iord, j_end, j_start + from __externals__ import grid_type, i_end, i_start, iord, j_end, j_start if __INLINED(iord < 8): u_on_cell_corners = xppm.compute_al(u, dx) @@ -32,20 +32,24 @@ def get_bl_br(u, dx, dxa): compile_assert(iord == 8) bl, br = xppm.blbr_iord8(u, u_on_cell_corners, dm) - bl, br = xppm.bl_br_edges(bl, br, u, dxa, u_on_cell_corners, dm) - - with horizontal(region[i_start + 1, :], region[i_end - 1, :]): - bl, br = ppm.pert_ppm_standard_constraint_fcn(u, bl, br) - - # Zero corners - with horizontal( - region[i_start - 1 : i_start + 1, j_start], - region[i_start - 1 : i_start + 1, j_end + 1], - region[i_end : i_end + 2, j_start], - region[i_end : i_end + 2, j_end + 1], - ): - bl = 0.0 - br = 0.0 + + if __INLINED(grid_type < 3): + bl, br = xppm.bl_br_edges(bl, br, u, dxa, u_on_cell_corners, dm) + + with horizontal(region[i_start + 1, :], region[i_end - 1, :]): + bl, br = ppm.pert_ppm_standard_constraint_fcn(u, bl, br) + + if __INLINED(grid_type < 3): + # Zero corners + with horizontal( + region[i_start - 1 : i_start + 1, j_start], + region[i_start - 1 : i_start + 1, j_end + 1], + region[i_end : i_end + 2, j_start], + region[i_end : i_end + 2, j_end + 1], + ): + bl = 0.0 + br = 0.0 + return bl, br diff --git a/fv3core/pace/fv3core/stencils/yppm.py b/fv3core/pace/fv3core/stencils/yppm.py index b2ed1f2d..69389e2b 100644 --- a/fv3core/pace/fv3core/stencils/yppm.py +++ b/fv3core/pace/fv3core/stencils/yppm.py @@ -156,7 +156,7 @@ def compute_al(q: FloatField, dya: FloatFieldIJ): Returns: q interpolated to y-interfaces """ - from __externals__ import j_end, j_start, jord + from __externals__ import grid_type, j_end, j_start, jord compile_assert(jord < 8) @@ -166,17 +166,21 @@ def compute_al(q: FloatField, dya: FloatFieldIJ): compile_assert(False) al = max(al, 0.0) - with horizontal(region[:, j_start - 1], region[:, j_end]): - al = ppm.c1 * q[0, -2, 0] + ppm.c2 * q[0, -1, 0] + ppm.c3 * q - with horizontal(region[:, j_start], region[:, j_end + 1]): - al = 0.5 * ( - ((2.0 * dya[0, -1] + dya[0, -2]) * q[0, -1, 0] - dya[0, -1] * q[0, -2, 0]) - / (dya[0, -2] + dya[0, -1]) - + ((2.0 * dya[0, 0] + dya[0, 1]) * q[0, 0, 0] - dya[0, 0] * q[0, 1, 0]) - / (dya[0, 0] + dya[0, 1]) - ) - with horizontal(region[:, j_start + 1], region[:, j_end + 2]): - al = ppm.c3 * q[0, -1, 0] + ppm.c2 * q[0, 0, 0] + ppm.c1 * q[0, 1, 0] + if __INLINED(grid_type < 3): + with horizontal(region[:, j_start - 1], region[:, j_end]): + al = ppm.c1 * q[0, -2, 0] + ppm.c2 * q[0, -1, 0] + ppm.c3 * q + with horizontal(region[:, j_start], region[:, j_end + 1]): + al = 0.5 * ( + ( + (2.0 * dya[0, -1] + dya[0, -2]) * q[0, -1, 0] + - dya[0, -1] * q[0, -2, 0] + ) + / (dya[0, -2] + dya[0, -1]) + + ((2.0 * dya[0, 0] + dya[0, 1]) * q[0, 0, 0] - dya[0, 0] * q[0, 1, 0]) + / (dya[0, 0] + dya[0, 1]) + ) + with horizontal(region[:, j_start + 1], region[:, j_end + 2]): + al = ppm.c3 * q[0, -1, 0] + ppm.c2 * q[0, 0, 0] + ppm.c1 * q[0, 1, 0] return al @@ -248,7 +252,7 @@ def bl_br_edges(bl, br, q, dya, al, dm): @gtscript.function def compute_blbr_ord8plus(q: FloatField, dya: FloatFieldIJ): - from __externals__ import j_end, j_start, jord + from __externals__ import grid_type, j_end, j_start, jord dm = dm_jord8plus(q) al = al_jord8plus(q, dm) @@ -256,12 +260,14 @@ def compute_blbr_ord8plus(q: FloatField, dya: FloatFieldIJ): compile_assert(jord == 8) bl, br = blbr_jord8(q, al, dm) - bl, br = bl_br_edges(bl, br, q, dya, al, dm) - with horizontal( - region[:, j_start - 1 : j_start + 2], region[:, j_end - 1 : j_end + 2] - ): - bl, br = ppm.pert_ppm_standard_constraint_fcn(q, bl, br) + if __INLINED(grid_type < 3): + bl, br = bl_br_edges(bl, br, q, dya, al, dm) + + with horizontal( + region[:, j_start - 1 : j_start + 2], region[:, j_end - 1 : j_end + 2] + ): + bl, br = ppm.pert_ppm_standard_constraint_fcn(q, bl, br) return bl, br @@ -304,7 +310,7 @@ def __init__( # Arguments come from: # namelist.grid_type # grid.dya - assert grid_type < 3 + assert (grid_type < 3) or (grid_type == 4) self._dya = dya ax_offsets = stencil_factory.grid_indexing.axis_offsets(origin, domain) self._compute_flux_stencil = stencil_factory.from_origin_domain( @@ -315,6 +321,7 @@ def __init__( "yt_minmax": True, "j_start": ax_offsets["j_start"], "j_end": ax_offsets["j_end"], + "grid_type": grid_type, }, origin=origin, domain=domain, diff --git a/fv3core/pace/fv3core/stencils/ytp_v.py b/fv3core/pace/fv3core/stencils/ytp_v.py index 7d2acad4..8b4cb7d3 100644 --- a/fv3core/pace/fv3core/stencils/ytp_v.py +++ b/fv3core/pace/fv3core/stencils/ytp_v.py @@ -17,7 +17,7 @@ def get_bl_br(v, dy, dya): bl: ??? br: ??? """ - from __externals__ import i_end, i_start, j_end, j_start, jord + from __externals__ import grid_type, i_end, i_start, j_end, j_start, jord if __INLINED(jord < 8): v_on_cell_corners = yppm.compute_al(v, dy) @@ -32,20 +32,23 @@ def get_bl_br(v, dy, dya): compile_assert(jord == 8) bl, br = yppm.blbr_jord8(v, v_on_cell_corners, dm) - bl, br = yppm.bl_br_edges(bl, br, v, dya, v_on_cell_corners, dm) - - with horizontal(region[:, j_start + 1], region[:, j_end - 1]): - bl, br = ppm.pert_ppm_standard_constraint_fcn(v, bl, br) - - # Zero corners - with horizontal( - region[i_start, j_start - 1 : j_start + 1], - region[i_end + 1, j_start - 1 : j_start + 1], - region[i_start, j_end : j_end + 2], - region[i_end + 1, j_end : j_end + 2], - ): - bl = 0.0 - br = 0.0 + if __INLINED(grid_type < 3): + bl, br = yppm.bl_br_edges(bl, br, v, dya, v_on_cell_corners, dm) + + with horizontal(region[:, j_start + 1], region[:, j_end - 1]): + bl, br = ppm.pert_ppm_standard_constraint_fcn(v, bl, br) + + if __INLINED(grid_type < 3): + # Zero corners + with horizontal( + region[i_start, j_start - 1 : j_start + 1], + region[i_end + 1, j_start - 1 : j_start + 1], + region[i_start, j_end : j_end + 2], + region[i_end + 1, j_end : j_end + 2], + ): + bl = 0.0 + br = 0.0 + return bl, br diff --git a/fv3core/tests/conftest.py b/fv3core/tests/conftest.py index 23b9c366..f7e506a6 100644 --- a/fv3core/tests/conftest.py +++ b/fv3core/tests/conftest.py @@ -17,6 +17,7 @@ def pytest_addoption(parser): parser.addoption("--data_path", action="store", default="./") parser.addoption("--threshold_overrides_file", action="store", default=None) parser.addoption("--compute_grid", action="store_true") + parser.addoption("--dperiodic", action="store_true") def pytest_configure(config): diff --git a/fv3core/tests/mpi/test_doubly_periodic.py b/fv3core/tests/mpi/test_doubly_periodic.py index b129a913..5a4e6aa6 100644 --- a/fv3core/tests/mpi/test_doubly_periodic.py +++ b/fv3core/tests/mpi/test_doubly_periodic.py @@ -87,7 +87,7 @@ def setup_dycore() -> Tuple[pace.fv3core.DynamicalCore, List[Any]]: tile_rank=communicator.rank, ) grid_indexing = pace.dsl.stencil.GridIndexing.from_sizer_and_communicator( - sizer=sizer, cube=communicator + sizer=sizer, comm=communicator ) quantity_factory = pace.util.QuantityFactory.from_backend( sizer=sizer, backend=backend diff --git a/fv3core/tests/savepoint/translate/translate_a2b_ord4.py b/fv3core/tests/savepoint/translate/translate_a2b_ord4.py index 1d9290b3..be786a04 100644 --- a/fv3core/tests/savepoint/translate/translate_a2b_ord4.py +++ b/fv3core/tests/savepoint/translate/translate_a2b_ord4.py @@ -16,7 +16,15 @@ def __init__(self, stencil_factory: StencilFactory) -> None: dace_compiletime_args=["divdamp"], ) - def __call__(self, divdamp, wk, vort, delpc, dt): + def __call__( + self, + divdamp, + wk, + vort, + delpc, + dt, + grid_type, + ): # this function is kept because it has a translate test, if its # structure is changed significantly from __call__ of DivergenceDamping # consider deleting this method and the translate test, or altering the @@ -26,12 +34,15 @@ def __call__(self, divdamp, wk, vort, delpc, dt): divdamp._set_value(vort, 0.0) else: # TODO: what is wk/vort here? - divdamp.a2b_ord4(wk, vort) - divdamp._smagorinksy_diffusion_approx_stencil( - delpc, - vort, - abs(dt), - ) + if grid_type < 3: + divdamp.a2b_ord4(wk, vort) + divdamp._smagorinksy_diffusion_approx_stencil( + delpc, + vort, + abs(dt), + ) + else: + pass class TranslateA2B_Ord4(TranslateDycoreFortranData2Py): @@ -42,6 +53,7 @@ def __init__( stencil_factory: pace.dsl.StencilFactory, ): super().__init__(grid, namelist, stencil_factory) + assert namelist.grid_type < 3 self.in_vars["data_vars"] = {"wk": {}, "vort": {}, "delpc": {}, "nord_col": {}} self.in_vars["parameters"] = ["dt"] self.out_vars: Dict[str, Any] = {"wk": {}, "vort": {}} diff --git a/fv3core/tests/savepoint/translate/translate_cubedtolatlon.py b/fv3core/tests/savepoint/translate/translate_cubedtolatlon.py index 0cf420ca..526a61e3 100644 --- a/fv3core/tests/savepoint/translate/translate_cubedtolatlon.py +++ b/fv3core/tests/savepoint/translate/translate_cubedtolatlon.py @@ -31,6 +31,7 @@ def __init__( "v": self.grid.x3d_domain_dict(), } self.stencil_factory = stencil_factory + self.grid_type = namelist.grid_type def compute_parallel(self, inputs, communicator): self._base.make_storage_data_input_vars(inputs) @@ -53,6 +54,7 @@ def compute_parallel(self, inputs, communicator): grid_data=self.grid.grid_data, order=self.namelist.c2l_ord, comm=communicator, + grid_type=self.grid_type, ) self._cubed_to_latlon(**inputs) return self._base.slice_output(inputs) diff --git a/fv3core/tests/savepoint/translate/translate_fxadv.py b/fv3core/tests/savepoint/translate/translate_fxadv.py index 2338e546..3dec8293 100644 --- a/fv3core/tests/savepoint/translate/translate_fxadv.py +++ b/fv3core/tests/savepoint/translate/translate_fxadv.py @@ -23,6 +23,7 @@ def __init__( self.compute_func = FiniteVolumeFluxPrep( # type: ignore self.stencil_factory, self.grid.grid_data, + namelist.grid_type, ) self.in_vars["data_vars"] = { "uc": {}, diff --git a/fv3core/tests/savepoint/translate/translate_updatedzc.py b/fv3core/tests/savepoint/translate/translate_updatedzc.py index ea9541ff..ab0d11fa 100644 --- a/fv3core/tests/savepoint/translate/translate_updatedzc.py +++ b/fv3core/tests/savepoint/translate/translate_updatedzc.py @@ -21,6 +21,7 @@ def __init__( quantity_factory=self.grid.quantity_factory, area=grid.grid_data.area, dp_ref=grid.grid_data.dp_ref, + grid_type=namelist.grid_type, ) def compute(**kwargs): diff --git a/fv3core/tests/savepoint/translate/translate_xtp_u.py b/fv3core/tests/savepoint/translate/translate_xtp_u.py index e19682c7..39832a3d 100644 --- a/fv3core/tests/savepoint/translate/translate_xtp_u.py +++ b/fv3core/tests/savepoint/translate/translate_xtp_u.py @@ -34,7 +34,7 @@ def __init__( raise NotImplementedError( "Currently xtp_v is only supported for hord_mt == 5,6,7,8" ) - assert grid_type < 3 + assert (grid_type < 3) or (grid_type == 4) grid_indexing = stencil_factory.grid_indexing origin = grid_indexing.origin_compute() @@ -49,6 +49,7 @@ def __init__( "iord": iord, "mord": iord, "xt_minmax": False, + "grid_type": grid_type, **ax_offsets, }, origin=origin, diff --git a/fv3core/tests/savepoint/translate/translate_ytp_v.py b/fv3core/tests/savepoint/translate/translate_ytp_v.py index 63e779df..bf0afd16 100644 --- a/fv3core/tests/savepoint/translate/translate_ytp_v.py +++ b/fv3core/tests/savepoint/translate/translate_ytp_v.py @@ -34,7 +34,7 @@ def __init__( raise NotImplementedError( "Currently ytp_v is only supported for hord_mt == 5,6,7,8" ) - assert grid_type < 3 + assert (grid_type < 3) or (grid_type == 4) grid_indexing = stencil_factory.grid_indexing origin = grid_indexing.origin_compute() @@ -50,6 +50,7 @@ def __init__( "jord": jord, "mord": jord, "yt_minmax": False, + "grid_type": grid_type, **ax_offsets, }, origin=origin, diff --git a/physics/tests/conftest.py b/physics/tests/conftest.py index 23b9c366..f7e506a6 100644 --- a/physics/tests/conftest.py +++ b/physics/tests/conftest.py @@ -17,6 +17,7 @@ def pytest_addoption(parser): parser.addoption("--data_path", action="store", default="./") parser.addoption("--threshold_overrides_file", action="store", default=None) parser.addoption("--compute_grid", action="store_true") + parser.addoption("--dperiodic", action="store_true") def pytest_configure(config): diff --git a/stencils/pace/stencils/c2l_ord.py b/stencils/pace/stencils/c2l_ord.py index 7c16eb4f..23a68774 100644 --- a/stencils/pace/stencils/c2l_ord.py +++ b/stencils/pace/stencils/c2l_ord.py @@ -1,4 +1,11 @@ -from gt4py.cartesian.gtscript import PARALLEL, computation, horizontal, interval, region +from gt4py.cartesian.gtscript import ( + __INLINED, + PARALLEL, + computation, + horizontal, + interval, + region, +) import pace.dsl.gt4py_utils as utils import pace.util @@ -10,10 +17,45 @@ from pace.util.grid import GridData +A1 = 0.5625 +A2 = -0.0625 C1 = 1.125 C2 = -0.125 +def mock_exchange( + quantity, + domain_2d, +): + isc = domain_2d[0][0] + iec = domain_2d[0][1] + isd = domain_2d[1][0] + ied = domain_2d[1][1] + jsc = domain_2d[2][0] + jec = domain_2d[2][1] + jsd = domain_2d[3][0] + jed = domain_2d[3][1] + nhalo = isc - isd + + quantity[isd:isc, :, :] = quantity[iec - nhalo + 1 : iec + 1, :, :] + quantity[iec + 1 : ied + 1, :, :] = quantity[isc : isc + nhalo, :, :] + quantity[:, jsd:jsc, :] = quantity[:, jec - nhalo + 1 : jec + 1, :] + quantity[:, jec + 1 : jed + 1, :] = quantity[:, jsc : jsc + nhalo, :] + + quantity[isd:isc, jsd:jsc, :] = quantity[ + iec - nhalo + 1 : iec + 1, jec - nhalo + 1 : jec + 1, : + ] + quantity[isd:isc, jec + 1 : jed + 1, :] = quantity[ + iec - nhalo + 1 : iec + 1, jsc : jsc + nhalo, : + ] + quantity[iec + 1 : ied + 1, jsd:jsc, :] = quantity[ + isc : isc + nhalo, jec - nhalo + 1 : jec + 1, : + ] + quantity[iec + 1 : ied + 1, jec + 1 : jed + 1, :] = quantity[ + isc : isc + nhalo, jsc : jsc + nhalo, : + ] + + @utils.mark_untested("This namelist option is not tested") def c2l_ord2( u: FloatField, @@ -40,15 +82,21 @@ def c2l_ord2( ua (out): va (out): """ + from __externals__ import grid_type + with computation(PARALLEL), interval(...): - wu = u * dx - wv = v * dy - # Co-variant vorticity-conserving interpolation - u1 = 2.0 * (wu + wu[0, 1, 0]) / (dx + dx[0, 1]) - v1 = 2.0 * (wv + wv[1, 0, 0]) / (dy + dy[1, 0]) - # Cubed (cell center co-variant winds) to lat-lon - ua = a11 * u1 + a12 * v1 - va = a21 * u1 + a22 * v1 + if __INLINED(grid_type < 4): + wu = u * dx + wv = v * dy + # Co-variant vorticity-conserving interpolation + u1 = 2.0 * (wu + wu[0, 1, 0]) / (dx + dx[0, 1]) + v1 = 2.0 * (wv + wv[1, 0, 0]) / (dy + dy[1, 0]) + # Cubed (cell center co-variant winds) to lat-lon + ua = a11 * u1 + a12 * v1 + va = a21 * u1 + a22 * v1 + else: + ua = 0.5 * (u + u[0, 1, 0]) + va = 0.5 * (v + v[1, 0, 0]) def ord4_transform( @@ -77,24 +125,28 @@ def ord4_transform( va (out): """ with computation(PARALLEL), interval(...): - from __externals__ import i_end, i_start, j_end, j_start + from __externals__ import grid_type, i_end, i_start, j_end, j_start - utmp = C2 * (u[0, -1, 0] + u[0, 2, 0]) + C1 * (u + u[0, 1, 0]) - vtmp = C2 * (v[-1, 0, 0] + v[2, 0, 0]) + C1 * (v + v[1, 0, 0]) + if __INLINED(grid_type < 4): + utmp = C2 * (u[0, -1, 0] + u[0, 2, 0]) + C1 * (u + u[0, 1, 0]) + vtmp = C2 * (v[-1, 0, 0] + v[2, 0, 0]) + C1 * (v + v[1, 0, 0]) - # south/north edge - with horizontal(region[:, j_start], region[:, j_end]): - vtmp = 2.0 * ((v * dy) + (v[1, 0, 0] * dy[1, 0])) / (dy + dy[1, 0]) - utmp = 2.0 * (u * dx + u[0, 1, 0] * dx[0, 1]) / (dx + dx[0, 1]) + # south/north edge + with horizontal(region[:, j_start], region[:, j_end]): + vtmp = 2.0 * ((v * dy) + (v[1, 0, 0] * dy[1, 0])) / (dy + dy[1, 0]) + utmp = 2.0 * (u * dx + u[0, 1, 0] * dx[0, 1]) / (dx + dx[0, 1]) - # west/east edge - with horizontal(region[i_start, :], region[i_end, :]): - utmp = 2.0 * ((u * dx) + (u[0, 1, 0] * dx[0, 1])) / (dx + dx[0, 1]) - vtmp = 2.0 * ((v * dy) + (v[1, 0, 0] * dy[1, 0])) / (dy + dy[1, 0]) + # west/east edge + with horizontal(region[i_start, :], region[i_end, :]): + utmp = 2.0 * ((u * dx) + (u[0, 1, 0] * dx[0, 1])) / (dx + dx[0, 1]) + vtmp = 2.0 * ((v * dy) + (v[1, 0, 0] * dy[1, 0])) / (dy + dy[1, 0]) - # Transform local a-grid winds into latitude-longitude coordinates - ua = a11 * utmp + a12 * vtmp - va = a21 * utmp + a22 * vtmp + # Transform local a-grid winds into latitude-longitude coordinates + ua = a11 * utmp + a12 * vtmp + va = a21 * utmp + a22 * vtmp + else: + ua = A2 * (u[0, -1, 0] + u[0, 2, 0]) + A1 * (u + u[0, 1, 0]) + va = A2 * (v[-1, 0, 0] + v[2, 0, 0]) + A1 * (v + v[1, 0, 0]) class CubedToLatLon: @@ -108,8 +160,9 @@ def __init__( stencil_factory: StencilFactory, quantity_factory: pace.util.QuantityFactory, grid_data: GridData, + grid_type: int, order: int, - comm: pace.util.CubedSphereCommunicator, + comm: pace.util.Communicator, ): """ Initializes stencils to use either 2nd or 4th order of interpolation @@ -120,9 +173,23 @@ def __init__( order: Order of interpolation, must be 2 or 4 """ grid_indexing = stencil_factory.grid_indexing + isc = grid_indexing.isc + jsc = grid_indexing.jsc + iec = grid_indexing.iec + jec = grid_indexing.jec + isd = grid_indexing.isd + jsd = grid_indexing.jsd + ied = grid_indexing.ied + jed = grid_indexing.jed + self._domain = [[isc, iec], [isd, ied], [jsc, jec], [jsd, jed]] + self._n_halo = grid_indexing.n_halo self._dx = grid_data.dx self._dy = grid_data.dy + if comm.size == 1: + self.one_rank = True + else: + self.one_rank = False # TODO: maybe compute locally a* variables # They depend on z* and sin_sg5, which @@ -141,30 +208,34 @@ def __init__( halos = (0, 0) func = ord4_transform self._compute_cubed_to_latlon = stencil_factory.from_dims_halo( - func=func, compute_dims=[X_DIM, Y_DIM, Z_DIM], compute_halos=halos + func=func, + externals={"grid_type": grid_type}, + compute_dims=[X_DIM, Y_DIM, Z_DIM], + compute_halos=halos, ) origin = grid_indexing.origin_compute() shape = grid_indexing.max_shape - full_size_xyiz_halo_spec = quantity_factory.get_quantity_halo_spec( - dims=[X_DIM, Y_INTERFACE_DIM, Z_DIM], - n_halo=grid_indexing.n_halo, - dtype=Float, - ) - full_size_xiyz_halo_spec = quantity_factory.get_quantity_halo_spec( - dims=[X_INTERFACE_DIM, Y_DIM, Z_DIM], - n_halo=grid_indexing.n_halo, - dtype=Float, - ) - self.u__v = WrappedHaloUpdater( - comm.get_vector_halo_updater( - [full_size_xyiz_halo_spec], [full_size_xiyz_halo_spec] - ), - state, - ["u"], - ["v"], - comm=comm, - ) + if not self.one_rank: + full_size_xyiz_halo_spec = quantity_factory.get_quantity_halo_spec( + dims=[X_DIM, Y_INTERFACE_DIM, Z_DIM], + n_halo=grid_indexing.n_halo, + dtype=Float, + ) + full_size_xiyz_halo_spec = quantity_factory.get_quantity_halo_spec( + dims=[X_INTERFACE_DIM, Y_DIM, Z_DIM], + n_halo=grid_indexing.n_halo, + dtype=Float, + ) + self.u__v = WrappedHaloUpdater( + comm.get_vector_halo_updater( + [full_size_xyiz_halo_spec], [full_size_xiyz_halo_spec] + ), + state, + ["u"], + ["v"], + comm=comm, + ) def __call__( self, @@ -180,10 +251,14 @@ def __call__( v: y-wind on D-grid (in) ua: x-wind on A-grid (out) va: y-wind on A-grid (out) - comm: Cubed-sphere communicator + comm: Cubed-sphere or Tile communicator """ if self._do_ord4: - self.u__v.update() + if self.one_rank: + mock_exchange(u[:, :-1, :], self._domain) + mock_exchange(v[:-1, :, :], self._domain) + else: + self.u__v.update() self._compute_cubed_to_latlon( u, v, diff --git a/stencils/pace/stencils/fv_update_phys.py b/stencils/pace/stencils/fv_update_phys.py index 751d985a..d57ca4d9 100644 --- a/stencils/pace/stencils/fv_update_phys.py +++ b/stencils/pace/stencils/fv_update_phys.py @@ -87,12 +87,13 @@ def __init__( quantity_factory: pace.util.QuantityFactory, grid_data: GridData, namelist, - comm: pace.util.CubedSphereCommunicator, + comm: pace.util.Communicator, grid_info: DriverGridData, state: fv3core.DycoreState, u_dt: pace.util.Quantity, v_dt: pace.util.Quantity, ): + self._grid_type = namelist.grid_type orchestrate( obj=self, config=stencil_factory.config.dace_config, @@ -125,6 +126,7 @@ def __init__( grid_data=grid_data, order=namelist.c2l_ord, comm=comm, + grid_type=self._grid_type, ) origin = grid_indexing.origin_compute() shape = grid_indexing.max_shape diff --git a/stencils/pace/stencils/testing/conftest.py b/stencils/pace/stencils/testing/conftest.py index ce9946fc..256db95e 100644 --- a/stencils/pace/stencils/testing/conftest.py +++ b/stencils/pace/stencils/testing/conftest.py @@ -12,7 +12,7 @@ from pace.dsl.dace.dace_config import DaceConfig from pace.stencils.testing import ParallelTranslate, TranslateGrid from pace.stencils.testing.savepoint import SavepointCase, dataset_to_dict -from pace.util.communicator import CubedSphereCommunicator +from pace.util.communicator import CubedSphereCommunicator, TileCommunicator from pace.util.mpi import MPI @@ -103,8 +103,12 @@ def get_parallel_savepoint_names(metafunc, data_path): def get_ranks(metafunc, layout): only_rank = metafunc.config.getoption("which_rank") + dperiodic = metafunc.config.getoption("dperiodic") if only_rank is None: - total_ranks = 6 * layout[0] * layout[1] + if dperiodic: + total_ranks = layout[0] * layout[1] + else: + total_ranks = 6 * layout[0] * layout[1] return range(total_ranks) else: return [int(only_rank)] @@ -133,6 +137,7 @@ def sequential_savepoint_cases(metafunc, data_path, namelist_filename, *, backen stencil_config = get_config(backend, None) ranks = get_ranks(metafunc, namelist.layout) compute_grid = metafunc.config.getoption("compute_grid") + dperiodic = metafunc.config.getoption("dperiodic") return _savepoint_cases( savepoint_names, ranks, @@ -141,6 +146,7 @@ def sequential_savepoint_cases(metafunc, data_path, namelist_filename, *, backen backend, data_path, compute_grid, + dperiodic, ) @@ -152,6 +158,7 @@ def _savepoint_cases( backend, data_path, compute_grid: bool, + dperiodic: bool, ): return_list = [] ds_grid: xr.Dataset = xr.open_dataset(os.path.join(data_path, "Grid-Info.nc")).isel( @@ -165,7 +172,7 @@ def _savepoint_cases( backend=backend, ).python_grid() if compute_grid: - compute_grid_data(grid, namelist, backend, namelist.layout) + compute_grid_data(grid, namelist, backend, namelist.layout, dperiodic) stencil_factory = pace.dsl.stencil.StencilFactory( config=stencil_config, grid_indexing=grid.grid_indexing, @@ -191,12 +198,12 @@ def _savepoint_cases( return return_list -def compute_grid_data(grid, namelist, backend, layout): +def compute_grid_data(grid, namelist, backend, layout, dperiodic): grid.make_grid_data( npx=namelist.npx, npy=namelist.npy, npz=namelist.npz, - communicator=get_communicator(MPI.COMM_WORLD, layout), + communicator=get_communicator(MPI.COMM_WORLD, layout, dperiodic), backend=backend, ) @@ -205,7 +212,8 @@ def parallel_savepoint_cases( metafunc, data_path, namelist_filename, mpi_rank, *, backend: str, comm ): namelist = get_namelist(namelist_filename) - communicator = get_communicator(comm, namelist.layout) + dperiodic = metafunc.config.getoption("dperiodic") + communicator = get_communicator(comm, namelist.layout, dperiodic) stencil_config = get_config(backend, communicator) savepoint_names = get_parallel_savepoint_names(metafunc, data_path) compute_grid = metafunc.config.getoption("compute_grid") @@ -217,6 +225,7 @@ def parallel_savepoint_cases( backend, data_path, compute_grid, + dperiodic, ) @@ -261,9 +270,13 @@ def generate_parallel_stencil_tests(metafunc, *, backend: str): ) -def get_communicator(comm, layout): - partitioner = pace.util.CubedSpherePartitioner(pace.util.TilePartitioner(layout)) - communicator = pace.util.CubedSphereCommunicator(comm, partitioner) +def get_communicator(comm, layout, dperiodic): + if (MPI.COMM_WORLD.Get_size() > 1) and (not dperiodic): + partitioner = pace.util.CubedSpherePartitioner(pace.util.TilePartitioner(layout)) + communicator = pace.util.CubedSphereCommunicator(comm, partitioner) + else: + partitioner = pace.util.TilePartitioner(layout) + communicator = pace.util.TileCommunicator(comm, partitioner) return communicator @@ -280,3 +293,7 @@ def failure_stride(pytestconfig): @pytest.fixture() def compute_grid(pytestconfig): return pytestconfig.getoption("compute_grid") + +@pytest.fixture() +def dperiodic(pytestconfig): + return pytestconfig.getoption("dperiodic") diff --git a/stencils/pace/stencils/testing/test_translate.py b/stencils/pace/stencils/testing/test_translate.py index 14e8cef8..b2884c2d 100644 --- a/stencils/pace/stencils/testing/test_translate.py +++ b/stencils/pace/stencils/testing/test_translate.py @@ -327,6 +327,12 @@ def get_communicator(comm, layout): return communicator +def get_tile_communicator(comm, layout): + partitioner = pace.util.TilePartitioner(layout) + communicator = pace.util.TileCommunicator(comm, partitioner) + return communicator + + @pytest.mark.parallel @pytest.mark.skipif( MPI is None or MPI.COMM_WORLD.Get_size() == 1, @@ -343,11 +349,18 @@ def test_parallel_savepoint( compute_grid, xy_indices=True, ): - layout = ( - int((MPI.COMM_WORLD.Get_size() // 6) ** 0.5), - int((MPI.COMM_WORLD.Get_size() // 6) ** 0.5), - ) - communicator = get_communicator(MPI.COMM_WORLD, layout) + if MPI.COMM_WORLD.Get_size()%6 != 0: + layout = ( + int(MPI.COMM_WORLD.Get_size() ** 0.5), + int(MPI.COMM_WORLD.Get_size() ** 0.5), + ) + communicator = get_tile_communicator(MPI.COMM_WORLD, layout) + else: + layout = ( + int((MPI.COMM_WORLD.Get_size() // 6) ** 0.5), + int((MPI.COMM_WORLD.Get_size() // 6) ** 0.5), + ) + communicator = get_communicator(MPI.COMM_WORLD, layout) caplog.set_level(logging.DEBUG, logger="fv3core") if case.testobj is None: pytest.xfail( diff --git a/stencils/pace/stencils/update_atmos_state.py b/stencils/pace/stencils/update_atmos_state.py index cb97fabb..789e40ea 100644 --- a/stencils/pace/stencils/update_atmos_state.py +++ b/stencils/pace/stencils/update_atmos_state.py @@ -242,7 +242,7 @@ def __init__( stencil_factory: StencilFactory, grid_data: GridData, namelist, - comm: pace.util.CubedSphereCommunicator, + comm: pace.util.Communicator, grid_info: DriverGridData, state: fv3core.DycoreState, quantity_factory: pace.util.QuantityFactory, diff --git a/stencils/pace/stencils/update_dwind_phys.py b/stencils/pace/stencils/update_dwind_phys.py index 6be604a4..7fde5369 100644 --- a/stencils/pace/stencils/update_dwind_phys.py +++ b/stencils/pace/stencils/update_dwind_phys.py @@ -149,6 +149,19 @@ def update_vwind_stencil( v = v + dt5 * (ve_1 * ew2_1 + ve_2 * ew2_2 + ve_3 * ew2_3) +def doubly_periodic_wind_update( + u: FloatField, + v: FloatField, + u_dt: FloatField, + v_dt: FloatField, +): + from __externals__ import dt5 + + with computation(PARALLEL), interval(...): + u = u + dt5 * (u_dt[0, -1, 0] + u_dt) + v = v + dt5 * (v_dt[-1, 0, 0] + v_dt) + + class AGrid2DGridPhysics: """ Fortran name is update_dwinds_phys @@ -174,6 +187,7 @@ def __init__( self._jm2 = int((npy - 1) / 2) + 2 self._subtile_index = partitioner.subtile_index(rank) layout = self.namelist.layout + self._grid_type = namelist.grid_type self._subtile_width_x = int((npx - 1) / layout[0]) self._subtile_width_y = int((npy - 1) / layout[1]) @@ -190,233 +204,262 @@ def __init__( def make_quantity(): return quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="unknown") - self._ue_1 = make_quantity() - self._ue_2 = make_quantity() - self._ue_3 = make_quantity() - self._ut_1 = make_quantity() - self._ut_2 = make_quantity() - self._ut_3 = make_quantity() - self._ve_1 = make_quantity() - self._ve_2 = make_quantity() - self._ve_3 = make_quantity() - self._vt_1 = make_quantity() - self._vt_2 = make_quantity() - self._vt_3 = make_quantity() - - self._update_dwind_prep_stencil = stencil_factory.from_origin_domain( - update_dwind_prep_stencil, - origin=(grid_indexing.n_halo - 1, grid_indexing.n_halo - 1, 0), - domain=(nic + 2, njc + 2, npz), - ) - - self._set_winds_to_zero_stencil = stencil_factory.from_origin_domain( - set_winds_zero, - origin=(grid_indexing.n_halo - 1, grid_indexing.n_halo - 1, 0), - domain=(nic + 2, njc + 2, npz), - ) + if self._grid_type <= 3: + self._ue_1 = make_quantity() + self._ue_2 = make_quantity() + self._ue_3 = make_quantity() + self._ut_1 = make_quantity() + self._ut_2 = make_quantity() + self._ut_3 = make_quantity() + self._ve_1 = make_quantity() + self._ve_2 = make_quantity() + self._ve_3 = make_quantity() + self._vt_1 = make_quantity() + self._vt_2 = make_quantity() + self._vt_3 = make_quantity() + + self._update_dwind_prep_stencil = stencil_factory.from_origin_domain( + update_dwind_prep_stencil, + origin=(grid_indexing.n_halo - 1, grid_indexing.n_halo - 1, 0), + domain=(nic + 2, njc + 2, npz), + ) - self.global_is, self.global_js = self.local_to_global_indices( - grid_indexing.isc, grid_indexing.jsc - ) - self.global_ie, self.global_je = self.local_to_global_indices( - grid_indexing.iec, grid_indexing.jec - ) + self._set_winds_to_zero_stencil = stencil_factory.from_origin_domain( + set_winds_zero, + origin=(grid_indexing.n_halo - 1, grid_indexing.n_halo - 1, 0), + domain=(nic + 2, njc + 2, npz), + ) - if self.west_edge: - je_lower = self.global_to_local_y(min(self._jm2, self.global_je)) - origin_lower = (grid_indexing.n_halo, grid_indexing.n_halo, 0) - self._domain_lower_west = ( - 1, - je_lower - grid_indexing.jsc + 1, - npz, + self.global_is, self.global_js = self.local_to_global_indices( + grid_indexing.isc, grid_indexing.jsc ) - if self.global_js <= self._jm2: - if self._domain_lower_west[1] > 0: - self._update_dwind_y_edge_south_stencil1 = ( - stencil_factory.from_origin_domain( - update_dwind_y_edge_south_stencil, - origin=origin_lower, - domain=self._domain_lower_west, - ) - ) - if self.global_je > self._jm2: - js_upper = self.global_to_local_y(max(self._jm2 + 1, self.global_js)) - origin_upper = (grid_indexing.n_halo, js_upper, 0) - self._domain_upper_west = ( + self.global_ie, self.global_je = self.local_to_global_indices( + grid_indexing.iec, grid_indexing.jec + ) + + if self.west_edge: + je_lower = self.global_to_local_y(min(self._jm2, self.global_je)) + origin_lower = (grid_indexing.n_halo, grid_indexing.n_halo, 0) + self._domain_lower_west = ( 1, - grid_indexing.jec - js_upper + 1, + je_lower - grid_indexing.jsc + 1, npz, ) - if self._domain_upper_west[1] > 0: - self._update_dwind_y_edge_north_stencil1 = ( - stencil_factory.from_origin_domain( - update_dwind_y_edge_north_stencil, - origin=origin_upper, - domain=self._domain_upper_west, + if self.global_js <= self._jm2: + if self._domain_lower_west[1] > 0: + self._update_dwind_y_edge_south_stencil1 = ( + stencil_factory.from_origin_domain( + update_dwind_y_edge_south_stencil, + origin=origin_lower, + domain=self._domain_lower_west, + ) ) + if self.global_je > self._jm2: + js_upper = self.global_to_local_y( + max(self._jm2 + 1, self.global_js) ) - self._copy3_stencil1 = stencil_factory.from_origin_domain( - copy3_stencil, - origin=origin_upper, - domain=self._domain_upper_west, + origin_upper = (grid_indexing.n_halo, js_upper, 0) + self._domain_upper_west = ( + 1, + grid_indexing.jec - js_upper + 1, + npz, ) - if self.global_js <= self._jm2 and self._domain_lower_west[1] > 0: - self._copy3_stencil2 = stencil_factory.from_origin_domain( - copy3_stencil, origin=origin_lower, domain=self._domain_lower_west - ) - if self.east_edge: - i_origin = shape[0] - grid_indexing.n_halo - 1 - je_lower = self.global_to_local_y(min(self._jm2, self.global_je)) - origin_lower = (i_origin, grid_indexing.n_halo, 0) - self._domain_lower_east = ( - 1, - je_lower - grid_indexing.jsc + 1, - npz, - ) - if self.global_js <= self._jm2: - if self._domain_lower_east[1] > 0: - self._update_dwind_y_edge_south_stencil2 = ( - stencil_factory.from_origin_domain( - update_dwind_y_edge_south_stencil, - origin=origin_lower, - domain=self._domain_lower_east, + if self._domain_upper_west[1] > 0: + self._update_dwind_y_edge_north_stencil1 = ( + stencil_factory.from_origin_domain( + update_dwind_y_edge_north_stencil, + origin=origin_upper, + domain=self._domain_upper_west, + ) ) + self._copy3_stencil1 = stencil_factory.from_origin_domain( + copy3_stencil, + origin=origin_upper, + domain=self._domain_upper_west, + ) + if self.global_js <= self._jm2 and self._domain_lower_west[1] > 0: + self._copy3_stencil2 = stencil_factory.from_origin_domain( + copy3_stencil, + origin=origin_lower, + domain=self._domain_lower_west, ) - - if self.global_je > self._jm2: - js_upper = self.global_to_local_y(max(self._jm2 + 1, self.global_js)) - origin_upper = (i_origin, js_upper, 0) - self._domain_upper_east = ( + if self.east_edge: + i_origin = shape[0] - grid_indexing.n_halo - 1 + je_lower = self.global_to_local_y(min(self._jm2, self.global_je)) + origin_lower = (i_origin, grid_indexing.n_halo, 0) + self._domain_lower_east = ( 1, - grid_indexing.jec - js_upper + 1, + je_lower - grid_indexing.jsc + 1, npz, ) - if self._domain_upper_east[1] > 0: - self._update_dwind_y_edge_north_stencil2 = ( - stencil_factory.from_origin_domain( - update_dwind_y_edge_north_stencil, + if self.global_js <= self._jm2: + if self._domain_lower_east[1] > 0: + self._update_dwind_y_edge_south_stencil2 = ( + stencil_factory.from_origin_domain( + update_dwind_y_edge_south_stencil, + origin=origin_lower, + domain=self._domain_lower_east, + ) + ) + + if self.global_je > self._jm2: + js_upper = self.global_to_local_y( + max(self._jm2 + 1, self.global_js) + ) + origin_upper = (i_origin, js_upper, 0) + self._domain_upper_east = ( + 1, + grid_indexing.jec - js_upper + 1, + npz, + ) + if self._domain_upper_east[1] > 0: + self._update_dwind_y_edge_north_stencil2 = ( + stencil_factory.from_origin_domain( + update_dwind_y_edge_north_stencil, + origin=origin_upper, + domain=self._domain_upper_east, + ) + ) + self._copy3_stencil3 = stencil_factory.from_origin_domain( + copy3_stencil, origin=origin_upper, domain=self._domain_upper_east, ) - ) - self._copy3_stencil3 = stencil_factory.from_origin_domain( + if self.global_js <= self._jm2 and self._domain_lower_east[1] > 0: + self._copy3_stencil4 = stencil_factory.from_origin_domain( copy3_stencil, - origin=origin_upper, - domain=self._domain_upper_east, + origin=origin_lower, + domain=self._domain_lower_east, ) - if self.global_js <= self._jm2 and self._domain_lower_east[1] > 0: - self._copy3_stencil4 = stencil_factory.from_origin_domain( - copy3_stencil, origin=origin_lower, domain=self._domain_lower_east + if self.south_edge: + ie_lower = self.global_to_local_x(min(self._im2, self.global_ie)) + origin_lower = (grid_indexing.n_halo, grid_indexing.n_halo, 0) + self._domain_lower_south = ( + ie_lower - grid_indexing.isc + 1, + 1, + npz, ) - if self.south_edge: - ie_lower = self.global_to_local_x(min(self._im2, self.global_ie)) - origin_lower = (grid_indexing.n_halo, grid_indexing.n_halo, 0) - self._domain_lower_south = ( - ie_lower - grid_indexing.isc + 1, - 1, - npz, - ) - if self.global_is <= self._im2: - if self._domain_lower_south[0] > 0: - self._update_dwind_x_edge_west_stencil1 = ( + if self.global_is <= self._im2: + if self._domain_lower_south[0] > 0: + self._update_dwind_x_edge_west_stencil1 = ( + stencil_factory.from_origin_domain( + update_dwind_x_edge_west_stencil, + origin=origin_lower, + domain=self._domain_lower_south, + ) + ) + if self.global_ie > self._im2: + is_upper = self.global_to_local_x( + max(self._im2 + 1, self.global_is) + ) + origin_upper = (is_upper, grid_indexing.n_halo, 0) + self._domain_upper_south = ( + grid_indexing.iec - is_upper + 1, + 1, + npz, + ) + self._update_dwind_x_edge_east_stencil1 = ( stencil_factory.from_origin_domain( - update_dwind_x_edge_west_stencil, - origin=origin_lower, - domain=self._domain_lower_south, + update_dwind_x_edge_east_stencil, + origin=origin_upper, + domain=self._domain_upper_south, ) ) - if self.global_ie > self._im2: - is_upper = self.global_to_local_x(max(self._im2 + 1, self.global_is)) - origin_upper = (is_upper, grid_indexing.n_halo, 0) - self._domain_upper_south = ( - grid_indexing.iec - is_upper + 1, - 1, - npz, - ) - self._update_dwind_x_edge_east_stencil1 = ( - stencil_factory.from_origin_domain( - update_dwind_x_edge_east_stencil, + self._copy3_stencil5 = stencil_factory.from_origin_domain( + copy3_stencil, origin=origin_upper, domain=self._domain_upper_south, ) - ) - self._copy3_stencil5 = stencil_factory.from_origin_domain( - copy3_stencil, origin=origin_upper, domain=self._domain_upper_south - ) - if self.global_is <= self._im2 and self._domain_lower_south[0] > 0: - self._copy3_stencil6 = stencil_factory.from_origin_domain( - copy3_stencil, origin=origin_lower, domain=self._domain_lower_south - ) - if self.north_edge: - j_origin = shape[1] - grid_indexing.n_halo - 1 - ie_lower = self.global_to_local_x(min(self._im2, self.global_ie)) - origin_lower = (grid_indexing.n_halo, j_origin, 0) - self._domain_lower_north = ( - ie_lower - grid_indexing.isc + 1, - 1, - npz, - ) - if self.global_is < self._im2: - if self._domain_lower_north[0] > 0: - self._update_dwind_x_edge_west_stencil2 = ( - stencil_factory.from_origin_domain( - update_dwind_x_edge_west_stencil, - origin=origin_lower, - domain=self._domain_lower_north, - ) + if self.global_is <= self._im2 and self._domain_lower_south[0] > 0: + self._copy3_stencil6 = stencil_factory.from_origin_domain( + copy3_stencil, + origin=origin_lower, + domain=self._domain_lower_south, ) - if self.global_ie >= self._im2: - is_upper = self.global_to_local_x(max(self._im2 + 1, self.global_is)) - origin_upper = (is_upper, j_origin, 0) - self._domain_upper_north = ( - grid_indexing.iec - is_upper + 1, + if self.north_edge: + j_origin = shape[1] - grid_indexing.n_halo - 1 + ie_lower = self.global_to_local_x(min(self._im2, self.global_ie)) + origin_lower = (grid_indexing.n_halo, j_origin, 0) + self._domain_lower_north = ( + ie_lower - grid_indexing.isc + 1, 1, npz, ) - if self._domain_upper_north[0] > 0: - self._update_dwind_x_edge_east_stencil2 = ( - stencil_factory.from_origin_domain( - update_dwind_x_edge_east_stencil, + if self.global_is < self._im2: + if self._domain_lower_north[0] > 0: + self._update_dwind_x_edge_west_stencil2 = ( + stencil_factory.from_origin_domain( + update_dwind_x_edge_west_stencil, + origin=origin_lower, + domain=self._domain_lower_north, + ) + ) + if self.global_ie >= self._im2: + is_upper = self.global_to_local_x( + max(self._im2 + 1, self.global_is) + ) + origin_upper = (is_upper, j_origin, 0) + self._domain_upper_north = ( + grid_indexing.iec - is_upper + 1, + 1, + npz, + ) + if self._domain_upper_north[0] > 0: + self._update_dwind_x_edge_east_stencil2 = ( + stencil_factory.from_origin_domain( + update_dwind_x_edge_east_stencil, + origin=origin_upper, + domain=self._domain_upper_north, + ) + ) + self._copy3_stencil7 = stencil_factory.from_origin_domain( + copy3_stencil, origin=origin_upper, domain=self._domain_upper_north, ) - ) - self._copy3_stencil7 = stencil_factory.from_origin_domain( + if self.global_is < self._im2 and self._domain_lower_north[0] > 0: + self._copy3_stencil8 = stencil_factory.from_origin_domain( copy3_stencil, - origin=origin_upper, - domain=self._domain_upper_north, + origin=origin_lower, + domain=self._domain_lower_north, ) - if self.global_is < self._im2 and self._domain_lower_north[0] > 0: - self._copy3_stencil8 = stencil_factory.from_origin_domain( - copy3_stencil, origin=origin_lower, domain=self._domain_lower_north - ) - self._update_uwind_stencil = stencil_factory.from_origin_domain( - update_uwind_stencil, - origin=(grid_indexing.n_halo, grid_indexing.n_halo, 0), - domain=(nic, njc + 1, npz), - ) - self._update_vwind_stencil = stencil_factory.from_origin_domain( - update_vwind_stencil, - origin=(grid_indexing.n_halo, grid_indexing.n_halo, 0), - domain=(nic + 1, njc, npz), - ) - # [TODO] The following is waiting on grid code vlat and vlon - self._vlon1 = grid_info.vlon1 - self._vlon2 = grid_info.vlon2 - self._vlon3 = grid_info.vlon3 - self._vlat1 = grid_info.vlat1 - self._vlat2 = grid_info.vlat2 - self._vlat3 = grid_info.vlat3 - self._edge_vect_w = grid_info.edge_vect_w - self._edge_vect_e = grid_info.edge_vect_e - self._edge_vect_s = grid_info.edge_vect_s - self._edge_vect_n = grid_info.edge_vect_n - self._es1_1 = grid_info.es1_1 - self._es1_2 = grid_info.es1_2 - self._es1_3 = grid_info.es1_3 - self._ew2_1 = grid_info.ew2_1 - self._ew2_2 = grid_info.ew2_2 - self._ew2_3 = grid_info.ew2_3 + self._update_uwind_stencil = stencil_factory.from_origin_domain( + update_uwind_stencil, + origin=(grid_indexing.n_halo, grid_indexing.n_halo, 0), + domain=(nic, njc + 1, npz), + ) + self._update_vwind_stencil = stencil_factory.from_origin_domain( + update_vwind_stencil, + origin=(grid_indexing.n_halo, grid_indexing.n_halo, 0), + domain=(nic + 1, njc, npz), + ) + # [TODO] The following is waiting on grid code vlat and vlon + self._vlon1 = grid_info.vlon1 + self._vlon2 = grid_info.vlon2 + self._vlon3 = grid_info.vlon3 + self._vlat1 = grid_info.vlat1 + self._vlat2 = grid_info.vlat2 + self._vlat3 = grid_info.vlat3 + self._edge_vect_w = grid_info.edge_vect_w + self._edge_vect_e = grid_info.edge_vect_e + self._edge_vect_s = grid_info.edge_vect_s + self._edge_vect_n = grid_info.edge_vect_n + self._es1_1 = grid_info.es1_1 + self._es1_2 = grid_info.es1_2 + self._es1_3 = grid_info.es1_3 + self._ew2_1 = grid_info.ew2_1 + self._ew2_2 = grid_info.ew2_2 + self._ew2_3 = grid_info.ew2_3 + + else: # grid_type > 3: + self._doubly_periodic_wind_update = stencil_factory.from_origin_domain( + doubly_periodic_wind_update, + externals={ + "dt5": self._dt5, + }, + origin=grid_indexing.origin_compute(), + domain=grid_indexing.domain_compute(), + ) def global_to_local_1d(self, global_value, subtile_index, subtile_length): return global_value - subtile_index * subtile_length @@ -454,87 +497,97 @@ def __call__( Transforms the wind tendencies from A grid to D grid for the final update """ - self._update_dwind_prep_stencil( - u_dt, - v_dt, - self._vlon1, - self._vlon2, - self._vlon3, - self._vlat1, - self._vlat2, - self._vlat3, - self._ue_1, - self._ue_2, - self._ue_3, - self._ve_1, - self._ve_2, - self._ve_3, - ) - self._set_winds_to_zero_stencil(u_dt, v_dt) - if self.west_edge: - if self.global_js <= self._jm2: - if self._domain_lower_west[1] > 0: - self._update_dwind_y_edge_south_stencil1( - self._ve_1, - self._ve_2, - self._ve_3, - self._vt_1, - self._vt_2, - self._vt_3, - self._edge_vect_w, - ) - if self.global_je > self._jm2: - if self._domain_upper_west[1] > 0: - self._update_dwind_y_edge_north_stencil1( - self._ve_1, - self._ve_2, - self._ve_3, - self._vt_1, - self._vt_2, - self._vt_3, - self._edge_vect_w, - ) - self._copy3_stencil1( - self._vt_1, - self._vt_2, - self._vt_3, - self._ve_1, - self._ve_2, - self._ve_3, - ) - if self.global_js <= self._jm2 and self._domain_lower_west[1] > 0: - self._copy3_stencil2( - self._vt_1, - self._vt_2, - self._vt_3, - self._ve_1, - self._ve_2, - self._ve_3, - ) - if self.east_edge: - if self.global_js <= self._jm2: - if self._domain_lower_east[1] > 0: - self._update_dwind_y_edge_south_stencil2( - self._ve_1, - self._ve_2, - self._ve_3, + if self._grid_type <= 3: + self._update_dwind_prep_stencil( + u_dt, + v_dt, + self._vlon1, + self._vlon2, + self._vlon3, + self._vlat1, + self._vlat2, + self._vlat3, + self._ue_1, + self._ue_2, + self._ue_3, + self._ve_1, + self._ve_2, + self._ve_3, + ) + self._set_winds_to_zero_stencil(u_dt, v_dt) + if self.west_edge: + if self.global_js <= self._jm2: + if self._domain_lower_west[1] > 0: + self._update_dwind_y_edge_south_stencil1( + self._ve_1, + self._ve_2, + self._ve_3, + self._vt_1, + self._vt_2, + self._vt_3, + self._edge_vect_w, + ) + if self.global_je > self._jm2: + if self._domain_upper_west[1] > 0: + self._update_dwind_y_edge_north_stencil1( + self._ve_1, + self._ve_2, + self._ve_3, + self._vt_1, + self._vt_2, + self._vt_3, + self._edge_vect_w, + ) + self._copy3_stencil1( + self._vt_1, + self._vt_2, + self._vt_3, + self._ve_1, + self._ve_2, + self._ve_3, + ) + if self.global_js <= self._jm2 and self._domain_lower_west[1] > 0: + self._copy3_stencil2( self._vt_1, self._vt_2, self._vt_3, - self._edge_vect_e, - ) - if self.global_je > self._jm2: - if self._domain_upper_east[1] > 0: - self._update_dwind_y_edge_north_stencil2( self._ve_1, self._ve_2, self._ve_3, - self._vt_1, - self._vt_2, - self._vt_3, - self._edge_vect_e, ) - self._copy3_stencil3( + if self.east_edge: + if self.global_js <= self._jm2: + if self._domain_lower_east[1] > 0: + self._update_dwind_y_edge_south_stencil2( + self._ve_1, + self._ve_2, + self._ve_3, + self._vt_1, + self._vt_2, + self._vt_3, + self._edge_vect_e, + ) + if self.global_je > self._jm2: + if self._domain_upper_east[1] > 0: + self._update_dwind_y_edge_north_stencil2( + self._ve_1, + self._ve_2, + self._ve_3, + self._vt_1, + self._vt_2, + self._vt_3, + self._edge_vect_e, + ) + self._copy3_stencil3( + self._vt_1, + self._vt_2, + self._vt_3, + self._ve_1, + self._ve_2, + self._ve_3, + ) + if self.global_js <= self._jm2 and self._domain_lower_east[1] > 0: + self._copy3_stencil4( self._vt_1, self._vt_2, self._vt_3, @@ -542,79 +595,79 @@ def __call__( self._ve_2, self._ve_3, ) - if self.global_js <= self._jm2 and self._domain_lower_east[1] > 0: - self._copy3_stencil4( - self._vt_1, - self._vt_2, - self._vt_3, - self._ve_1, - self._ve_2, - self._ve_3, - ) - if self.south_edge: - if self.global_is <= self._im2: - if self._domain_lower_south[0] > 0: - self._update_dwind_x_edge_west_stencil1( - self._ue_1, - self._ue_2, - self._ue_3, - self._ut_1, - self._ut_2, - self._ut_3, - self._edge_vect_s, - ) - if self.global_ie > self._im2: - if self._domain_upper_south: - self._update_dwind_x_edge_east_stencil1( - self._ue_1, - self._ue_2, - self._ue_3, - self._ut_1, - self._ut_2, - self._ut_3, - self._edge_vect_s, - ) - self._copy3_stencil5( - self._ut_1, - self._ut_2, - self._ut_3, - self._ue_1, - self._ue_2, - self._ue_3, - ) - if self.global_is <= self._im2 and self._domain_lower_south[0] > 0: - self._copy3_stencil6( - self._ut_1, - self._ut_2, - self._ut_3, - self._ue_1, - self._ue_2, - self._ue_3, - ) - if self.north_edge: - if self.global_is < self._im2: - if self._domain_lower_north[0] > 0: - self._update_dwind_x_edge_west_stencil2( - self._ue_1, - self._ue_2, - self._ue_3, + if self.south_edge: + if self.global_is <= self._im2: + if self._domain_lower_south[0] > 0: + self._update_dwind_x_edge_west_stencil1( + self._ue_1, + self._ue_2, + self._ue_3, + self._ut_1, + self._ut_2, + self._ut_3, + self._edge_vect_s, + ) + if self.global_ie > self._im2: + if self._domain_upper_south: + self._update_dwind_x_edge_east_stencil1( + self._ue_1, + self._ue_2, + self._ue_3, + self._ut_1, + self._ut_2, + self._ut_3, + self._edge_vect_s, + ) + self._copy3_stencil5( + self._ut_1, + self._ut_2, + self._ut_3, + self._ue_1, + self._ue_2, + self._ue_3, + ) + if self.global_is <= self._im2 and self._domain_lower_south[0] > 0: + self._copy3_stencil6( self._ut_1, self._ut_2, self._ut_3, - self._edge_vect_n, - ) - if self.global_ie >= self._im2: - if self._domain_upper_north[0] > 0: - self._update_dwind_x_edge_east_stencil2( self._ue_1, self._ue_2, self._ue_3, - self._ut_1, - self._ut_2, - self._ut_3, - self._edge_vect_n, ) - self._copy3_stencil7( + if self.north_edge: + if self.global_is < self._im2: + if self._domain_lower_north[0] > 0: + self._update_dwind_x_edge_west_stencil2( + self._ue_1, + self._ue_2, + self._ue_3, + self._ut_1, + self._ut_2, + self._ut_3, + self._edge_vect_n, + ) + if self.global_ie >= self._im2: + if self._domain_upper_north[0] > 0: + self._update_dwind_x_edge_east_stencil2( + self._ue_1, + self._ue_2, + self._ue_3, + self._ut_1, + self._ut_2, + self._ut_3, + self._edge_vect_n, + ) + self._copy3_stencil7( + self._ut_1, + self._ut_2, + self._ut_3, + self._ue_1, + self._ue_2, + self._ue_3, + ) + if self.global_is < self._im2 and self._domain_lower_north[0] > 0: + self._copy3_stencil8( self._ut_1, self._ut_2, self._ut_3, @@ -622,32 +675,26 @@ def __call__( self._ue_2, self._ue_3, ) - if self.global_is < self._im2 and self._domain_lower_north[0] > 0: - self._copy3_stencil8( - self._ut_1, - self._ut_2, - self._ut_3, - self._ue_1, - self._ue_2, - self._ue_3, - ) - self._update_uwind_stencil( - u, - self._es1_1, - self._es1_2, - self._es1_3, - self._ue_1, - self._ue_2, - self._ue_3, - self._dt5, - ) - self._update_vwind_stencil( - v, - self._ew2_1, - self._ew2_2, - self._ew2_3, - self._ve_1, - self._ve_2, - self._ve_3, - self._dt5, - ) + self._update_uwind_stencil( + u, + self._es1_1, + self._es1_2, + self._es1_3, + self._ue_1, + self._ue_2, + self._ue_3, + self._dt5, + ) + self._update_vwind_stencil( + v, + self._ew2_1, + self._ew2_2, + self._ew2_3, + self._ve_1, + self._ve_2, + self._ve_3, + self._dt5, + ) + + else: # grid type > 3: + self._doubly_periodic_wind_update(u, v, u_dt, v_dt) diff --git a/tests/savepoint/conftest.py b/tests/savepoint/conftest.py index 65ef4696..825ddda5 100644 --- a/tests/savepoint/conftest.py +++ b/tests/savepoint/conftest.py @@ -31,6 +31,11 @@ def calibrate_thresholds(pytestconfig): calibrate_thresholds = pytestconfig.getoption("calibrate_thresholds") return calibrate_thresholds +@pytest.fixture() +def dperiodic(pytestconfig): + dperiodic = pytestconfig.getoption("dperiodic") + return dperiodic + def pytest_addoption(parser): parser.addoption( @@ -51,3 +56,9 @@ def pytest_addoption(parser): default=False, help="re-calibrate error thresholds for comparison to reference", ) + parser.addoption( + "--dperiodic", + action="store_true", + default=False, + help="configure tests for doubly-periodic domain", + ) diff --git a/tests/savepoint/test_checkpoints.py b/tests/savepoint/test_checkpoints.py index dacc6b5c..4d1c8db6 100644 --- a/tests/savepoint/test_checkpoints.py +++ b/tests/savepoint/test_checkpoints.py @@ -81,7 +81,7 @@ def test_fv_dynamics( extra_dim_lengths={}, layout=namelist.layout, ), - cube=communicator, + comm=communicator, ), ) grid = get_grid( diff --git a/util/pace/util/__init__.py b/util/pace/util/__init__.py index 4911f2cf..ac68338d 100644 --- a/util/pace/util/__init__.py +++ b/util/pace/util/__init__.py @@ -62,6 +62,7 @@ from .null_comm import NullComm from .partitioner import ( CubedSpherePartitioner, + Partitioner, TilePartitioner, get_tile_index, get_tile_number, diff --git a/util/pace/util/_legacy_restart.py b/util/pace/util/_legacy_restart.py index d841f591..e43b7f8d 100644 --- a/util/pace/util/_legacy_restart.py +++ b/util/pace/util/_legacy_restart.py @@ -5,7 +5,7 @@ from . import _xarray as xr from . import constants, filesystem, io from ._properties import RESTART_PROPERTIES, RestartProperties -from .communicator import CubedSphereCommunicator +from .communicator import Communicator from .partitioner import get_tile_index from .quantity import Quantity @@ -19,7 +19,7 @@ def open_restart( dirname: str, - communicator: CubedSphereCommunicator, + communicator: Communicator, label: str = "", only_names: Iterable[str] = None, to_state: dict = None, @@ -29,7 +29,7 @@ def open_restart( Args: dirname: location of restart files, can be local or remote - communicator: object for communication over the cubed sphere + communicator: object for communication over the cubed sphere or tile label: prepended string on the restart files to load only_names (optional): list of standard names to load to_state (optional): if given, assign loaded data into pre-allocated quantities diff --git a/util/pace/util/communicator.py b/util/pace/util/communicator.py index 0611fa98..abcd9697 100644 --- a/util/pace/util/communicator.py +++ b/util/pace/util/communicator.py @@ -76,11 +76,27 @@ def __init__( def tile(self) -> "TileCommunicator": pass + @classmethod + @abc.abstractmethod + def from_layout( + cls, + comm, + layout: Tuple[int, int], + force_cpu: bool = False, + timer: Optional[Timer] = None, + ): + pass + @property def rank(self) -> int: """rank of the current process within this communicator""" return self.comm.Get_rank() + @property + def size(self) -> int: + """Total number of ranks in this communicator""" + return self.comm.Get_size() + def _maybe_force_cpu(self, module: NumpyModule) -> NumpyModule: """ Get a numpy-like module depending on configuration and @@ -595,6 +611,17 @@ def __init__( ) self.partitioner: TilePartitioner = partitioner + @classmethod + def from_layout( + cls, + comm, + layout: Tuple[int, int], + force_cpu: bool = False, + timer: Optional[Timer] = None, + ) -> "TileCommunicator": + partitioner = TilePartitioner(layout=layout) + return cls(comm=comm, partitioner=partitioner, force_cpu=force_cpu, timer=timer) + @property def tile(self): return self diff --git a/util/pace/util/grid/generation.py b/util/pace/util/grid/generation.py index b78a7059..e3b8e749 100644 --- a/util/pace/util/grid/generation.py +++ b/util/pace/util/grid/generation.py @@ -220,7 +220,7 @@ def __init__( self, *, quantity_factory: util.QuantityFactory, - communicator: util.CubedSphereCommunicator, + communicator: util.Communicator, grid_type: int = 0, dx_const: float = 1000.0, dy_const: float = 1000.0, diff --git a/util/pace/util/partitioner.py b/util/pace/util/partitioner.py index 4ba46325..0e59ddfa 100644 --- a/util/pace/util/partitioner.py +++ b/util/pace/util/partitioner.py @@ -54,6 +54,11 @@ def get_tile_number(tile_rank: int, total_ranks: int) -> int: class Partitioner(abc.ABC): + @abc.abstractmethod + def __init__(self): + self.tile = None + self.layout = None + @abc.abstractmethod def boundary(self, boundary_type: int, rank: int) -> Optional[bd.SimpleBoundary]: ... @@ -119,7 +124,8 @@ def subtile_extent( """ pass - @abc.abstractproperty + @property + @abc.abstractmethod def total_ranks(self) -> int: pass @@ -133,6 +139,7 @@ def __init__( """Create an object for fv3gfs tile decomposition.""" self.layout = layout self.edge_interior_ratio = edge_interior_ratio + self.tile = self def tile_index(self, rank: int): return 0