From 79e6362b2eccd3b3268a94bec28264d881ff7e52 Mon Sep 17 00:00:00 2001 From: gabriel-trigo Date: Mon, 11 Nov 2024 21:48:24 -0500 Subject: [PATCH 1/9] Add implementation of parallelized MCTS algorithm --- poetry.lock | 98 +- pyproject.toml | 2 + smart_control/mcts/MonteCarloTreeSearch.py | 288 ++++++ smart_control/mcts/SchedulePolicy.py | 304 ++++++ smart_control/mcts/execute_policy_utils.py | 1004 ++++++++++++++++++++ smart_control/mcts/mcts_experiment.py | 237 +++++ smart_control/mcts/mcts_utils.py | 11 + smart_control/mcts/returns.json | 1 + 8 files changed, 1884 insertions(+), 61 deletions(-) create mode 100644 smart_control/mcts/MonteCarloTreeSearch.py create mode 100644 smart_control/mcts/SchedulePolicy.py create mode 100644 smart_control/mcts/execute_policy_utils.py create mode 100644 smart_control/mcts/mcts_experiment.py create mode 100644 smart_control/mcts/mcts_utils.py create mode 100644 smart_control/mcts/returns.json diff --git a/poetry.lock b/poetry.lock index fb95bed1..7e9565cc 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.4 and should not be changed by hand. [[package]] name = "absl-py" @@ -920,17 +920,6 @@ files = [ {file = "idna-3.8.tar.gz", hash = "sha256:d838c2c0ed6fced7693d5e8ab8e734d5f8fda53a039c0164afb0b82e771e3603"}, ] -[[package]] -name = "iniconfig" -version = "2.0.0" -description = "brain-dead simple config-ini parsing" -optional = false -python-versions = ">=3.7" -files = [ - {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, - {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, -] - [[package]] name = "ipykernel" version = "6.29.5" @@ -1388,6 +1377,20 @@ files = [ [package.dependencies] traitlets = "*" +[[package]] +name = "mctspy" +version = "0.1.1" +description = "Python implementation of monte carlo tree search for 2 players zero-sum game" +optional = false +python-versions = ">=3.5.7" +files = [ + {file = "mctspy-0.1.1-py3-none-any.whl", hash = "sha256:fc7a87aa7654971ede89b63a58d2ed3171a498937d38bd7b53b79f4dea880354"}, + {file = "mctspy-0.1.1.tar.gz", hash = "sha256:52d16193bdadeaca144bf28047367c13e8940a45d758a3a9c96c78d3b7226dfa"}, +] + +[package.dependencies] +numpy = ">=1.9.1" + [[package]] name = "mediapy" version = "1.2.2" @@ -1810,21 +1813,6 @@ docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx- test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] type = ["mypy (>=1.8)"] -[[package]] -name = "pluggy" -version = "1.5.0" -description = "plugin and hook calling mechanisms for python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, - {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, -] - -[package.extras] -dev = ["pre-commit", "tox"] -testing = ["pytest", "pytest-benchmark"] - [[package]] name = "portpicker" version = "1.6.0" @@ -2082,28 +2070,6 @@ files = [ [package.extras] diagrams = ["jinja2", "railroad-diagrams"] -[[package]] -name = "pytest" -version = "8.3.3" -description = "pytest: simple powerful testing with Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pytest-8.3.3-py3-none-any.whl", hash = "sha256:a6853c7375b2663155079443d2e45de913a911a11d669df02a50814944db57b2"}, - {file = "pytest-8.3.3.tar.gz", hash = "sha256:70b98107bd648308a7952b06e6ca9a50bc660be218d53c257cc1fc94fda10181"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "sys_platform == \"win32\""} -exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} -iniconfig = "*" -packaging = "*" -pluggy = ">=1.5,<2" -tomli = {version = ">=1", markers = "python_version < \"3.11\""} - -[package.extras] -dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] - [[package]] name = "python-dateutil" version = "2.9.0.post0" @@ -2777,17 +2743,6 @@ files = [ {file = "threadpoolctl-3.5.0.tar.gz", hash = "sha256:082433502dd922bf738de0d8bcc4fdcbf0979ff44c42bd40f5af8a282f6fa107"}, ] -[[package]] -name = "tomli" -version = "2.0.1" -description = "A lil' TOML parser" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, - {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, -] - [[package]] name = "tornado" version = "6.4.1" @@ -2808,6 +2763,27 @@ files = [ {file = "tornado-6.4.1.tar.gz", hash = "sha256:92d3ab53183d8c50f8204a51e6f91d18a15d5ef261e84d452800d4ff6fc504e9"}, ] +[[package]] +name = "tqdm" +version = "4.67.0" +description = "Fast, Extensible Progress Meter" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tqdm-4.67.0-py3-none-any.whl", hash = "sha256:0cd8af9d56911acab92182e88d763100d4788bdf421d251616040cc4d44863be"}, + {file = "tqdm-4.67.0.tar.gz", hash = "sha256:fe5a6f95e6fe0b9755e9469b77b9c3cf850048224ecaa8293d7d2d31f97d869a"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[package.extras] +dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"] +discord = ["requests"] +notebook = ["ipywidgets (>=6)"] +slack = ["slack-sdk"] +telegram = ["requests"] + [[package]] name = "traitlets" version = "5.14.3" @@ -2990,4 +2966,4 @@ files = [ [metadata] lock-version = "2.0" python-versions = ">=3.10.12,<3.12" -content-hash = "9cb3c0f4857b209a357ba76738b7fa451a1b4894ea384df9e415df3fa92198e0" +content-hash = "a1894e3925ed1d5be306cfad99666749b401b0d0252058670535aed093822cd6" diff --git a/pyproject.toml b/pyproject.toml index 9cbcd805..4c67d35e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -26,6 +26,8 @@ scikit-learn = "^1.5.1" ipykernel = "^6.29.5" typing-extensions = "^4.12.2" ipython = "^8.27.0" +mctspy = "^0.1.1" +tqdm = "^4.67.0" [build-system] diff --git a/smart_control/mcts/MonteCarloTreeSearch.py b/smart_control/mcts/MonteCarloTreeSearch.py new file mode 100644 index 00000000..d577d05b --- /dev/null +++ b/smart_control/mcts/MonteCarloTreeSearch.py @@ -0,0 +1,288 @@ +import numpy as np +import json +from smart_control.mcts.execute_policy_utils import compute_avg_return, load_environment +from mctspy.tree.nodes import MonteCarloTreeSearchNode +from mctspy.tree.search import MonteCarloTreeSearch + + +SECONDS_IN_AN_HOUR = 60 * 60 + + +""" + This class contains the state of the environment that corresponds to a certain + node in the Monter Carlo Tree Search tree. +""" +class NodeEnvironmentState: + + def __init__(self, node_temps, node_timestamp, node_state_return, node_previous_step): + self.node_temps = node_temps + self.node_timestamp = node_timestamp + self.node_previous_step = node_previous_step + self.node_state_return = node_state_return + + def __repr__(self): + + state = { + "node_timestamp": str(self.node_timestamp), + "node_state_return": self.node_state_return, + } + + return f"NodeEnvironmentState(\nf{json.dumps(state, indent=4)}\n)" + + +class SbsimMonteCarloTreeSearchNode(MonteCarloTreeSearchNode): + + def __init__(self, node_environment_state: NodeEnvironmentState, # this holds data for the state of the environment at this node + parent=None + ): + + super().__init__(None, parent) + self.children = { } + + # these values are used to keep track of the node score + self._q = 0 + self._n = 1 + self._cumulative_number_of_hours = 1 + + self.node_environment_state = node_environment_state # this is the state of the simulation at this node + + + def __repr__(self): + state = { + "timestamp": str(self.node_environment_state.node_timestamp), + "state_return": self.node_environment_state.node_state_return, + "cumulative_number_of_hours": self._cumulative_number_of_hours, + "children": list(self.children.keys()) + } + return f"SbsimMonteCarloTreeSearchNode(\n{ json.dumps(state, indent=4) }\n)" + + + def untried_actions(self, possible_actions): + return possible_actions - set(self.children.keys()) + + + def is_fully_expanded(self, possible_actions): + return len(self.untried_actions(possible_actions)) == 0 + + + @ property + def n(self): + return self._n + + + @ property + def q(self): + return self._q + + + @ staticmethod + def run_expansion(node_environment_state, policy): + env = SbSimMonteCarloTreeSearch.get_node_environment(node_environment_state) # get the environment at this node + return_val, _ = compute_avg_return(env, policy, time_zone="US/Pacific", render_interval_steps=1e30, trajectory_observers=None, num_steps=1) + + new_node_environment_state = NodeEnvironmentState( + node_temps=env.building._simulator._building.temp, + node_timestamp=env.building._simulator._current_timestamp, + node_state_return=node_environment_state.node_state_return + return_val, + node_previous_step=env.current_time_step() + ) + + return new_node_environment_state + + + def add_child(self, action, child_node_environment_state): + new_node = SbsimMonteCarloTreeSearchNode(child_node_environment_state, parent=self) + self.children[action] = new_node + return new_node + + + def backpropagate(self, result, number_of_hours): + self._q += result + self._n += 1 + self._cumulative_number_of_hours += number_of_hours + if self.parent: + self.parent.backpropagate(result, number_of_hours) + + + def calculate_score(self, c_param=1e-5): + return (self.q / self._cumulative_number_of_hours) + c_param * np.sqrt((2 * np.log(self.parent.n) / self.n)) + + + """ + This method runs a rollout from the current node to a certain number of steps + and returns the difference between the rollout return value and the baseline return + value, as well as the number of hours elapsed from the start of the episode to + the timestamp when the rollout ends + + Args: + env: Environment + node_environment_state: NodeEnvironmentState + rollout_policy: Policy + baseline_return_by_timestamp: Dict + rollout_steps: int + + Returns: + Tuple[float, float]: The return value of the rollout and the number of hours that the rollout took + """ + @ staticmethod + def run_rollout(env, # environment from which the rollout should begin + node_environment_state, # environment state of the environment before rollout + rollout_policy, # policy to use for the rollout + baseline_return_by_timestamp, # baseline return value by timestamp (obtained using the baseline policy) + rollout_steps # number of steps to rollout + ): + return_val, _ = compute_avg_return(env, rollout_policy, render_interval_steps=1e30, num_steps=rollout_steps) + + rollout_return = node_environment_state.node_state_return + return_val + rollout_timestamp = env.building._simulator._current_timestamp + + env.reset() + episode_start_timestamp = env.current_simulation_timestamp + + return_delta = (baseline_return_by_timestamp[rollout_timestamp] - rollout_return) + number_of_hours = (rollout_timestamp - episode_start_timestamp).total_seconds() / SECONDS_IN_AN_HOUR + + return return_delta, number_of_hours + + + def is_terminal_node(self): + return False + + + def best_child(self): + best_child, best_score = None, -1e30 + + for key in self.children: + c = self.children[key] + score = c.calculate_score() + + if score > best_score: + best_child = c + best_score = score + + return best_child + + + """ + This method spins up an environment using the config from @ param base_env_config + and then restores the state from @ param node_environment_state + + Args: + base_env_config: Dict + node_environment_state: NodeEnvironmentState + + Returns: + Environment: The environment with the state restored + """ + @ staticmethod + def get_node_environment(base_env_config, node_environment_state): + env = load_environment(base_env_config) + + env.building._simulator._building.temp = node_environment_state.node_temps + env.building._simulator._current_timestamp = node_environment_state.node_timestamp + env._current_time_step = node_environment_state.node_previous_step + + return env + + + def expand(self): + pass + + + def rollout(self): + pass + + def depth(self): + if not self.children: + return 1 + return 1 + max([child.depth() for child in self.children.values()]) + + +class SbSimMonteCarloTreeSearch(MonteCarloTreeSearch): + + def __init__(self, + node, + default_return_by_timestamp, + possible_actions, + base_env_config, + action_sequence, + rollout_steps=1, + expand_steps=1 + ): + + super().__init__(node) + self.default_return_by_timestamp = default_return_by_timestamp + self.possible_actions = possible_actions + self.base_env_config = base_env_config + self.action_sequence = action_sequence + self.rollout_steps = rollout_steps + self.expand_steps = expand_steps + + + """ + This is a recursive method to get the best @ param num_nodes nodes + in the MCTS tree + + Args: + num_nodes: int + c_param: float + + Returns: + List[tuple(SbsimMonteCarloTreeSearchNode, Tuple[float, float])]: List of the + nodes/action pairs that should be expanded + """ + def get_nodes_for_expansion(self, num_nodes=5, c_param=1e-5): + nodes_for_expansion = [] # each element is a tuple of (parent, node_to_expand, action) + + def recur(root): + if len(nodes_for_expansion) == num_nodes: return + + if not root.is_fully_expanded(self.possible_actions): + action = root.untried_actions(self.possible_actions).pop() + nodes_for_expansion.append((root, action)) + + nodes = [root.children[key] for key in root.children.keys()] + nodes.sort(key=lambda x: -(x.q / x._cumulative_number_of_hours) - c_param * np.sqrt((2 * np.log(root.n) / x.n))) + for node in nodes: + recur(node) + + recur(self.root) + return nodes_for_expansion + + + """ + This method takes in the results of the node expansions simulations (which are parallelized), and then + takes care of actually adding the new nodes onto the tree + + Args: + expansion_results: List[tuple(SbsimMonteCarloTreeSearchNode, tuple, NodeEnvironmentState)] + + Returns: + List[SbsimMonteCarloTreeSearchNode]: List of the newly created nodes + """ + def perform_expansions(self, expansion_results): + + new_nodes = [] + + for parent, action, state in expansion_results: + new_nodes.append(parent.add_child(action, state)) + + return new_nodes + + """ + This method takes in the results of the rollouts (which are parallelized), and then takes care + of actually backpropagating the results of the rollouts + + Args: + rollout_results: List[tuple(SbsimMonteCarloTreeSearchNode, float, NodeEnvironmentState)] + + Returns: + """ + def perform_backpropagations(self, rollout_results): + for node, result, number_of_hours in rollout_results: + node.backpropagate(result, number_of_hours) + + + def get_tree_depth(self): + return self.root.depth() + \ No newline at end of file diff --git a/smart_control/mcts/SchedulePolicy.py b/smart_control/mcts/SchedulePolicy.py new file mode 100644 index 00000000..0c687f93 --- /dev/null +++ b/smart_control/mcts/SchedulePolicy.py @@ -0,0 +1,304 @@ +import numpy as np +import pandas as pd +import enum +import tensorflow as tf +from typing import Union, Optional, cast +from dataclasses import dataclass +from tf_agents.trajectories import policy_step +from tf_agents.policies import tf_policy +from tf_agents.specs import tensor_spec +from tf_agents.typing import types + +# We're concerned with controlling Heatpumps/ACs and Hot Water Systems (HWS). +class DeviceType(enum.Enum): + AC = 0 + HWS = 1 + + +SetpointName = str # Identify the setpoint +SetpointValue = Union[float, int, bool] + + +@dataclass +class ScheduleEvent: + start_time: pd.Timedelta + device: DeviceType + setpoint_name: SetpointName + setpoint_value: SetpointValue + + +# A schedule is a list of times and setpoints for a device. +Schedule = list[ScheduleEvent] +ActionSequence = list[tuple[DeviceType, SetpointName]] + + +def to_rad(sin_theta: float, cos_theta: float) -> float: + """Converts a sin and cos theta to radians to extract the time.""" + + if sin_theta >= 0 and cos_theta >= 0: + return np.arccos(cos_theta) + elif sin_theta >= 0 and cos_theta < 0: + return np.pi - np.arcsin(sin_theta) + elif sin_theta < 0 and cos_theta < 0: + return np.pi - np.arcsin(sin_theta) + else: + return 2 * np.pi - np.arccos(cos_theta) + + +def to_dow(sin_theta: float, cos_theta: float) -> float: + """Converts a sin and cos theta to days to extract day of week.""" + theta = to_rad(sin_theta, cos_theta) + return np.floor(7 * theta / 2 / np.pi) + + +def to_hod(sin_theta: float, cos_theta: float) -> float: + """Converts a sin and cos theta to hours to extract hour of day.""" + theta = to_rad(sin_theta, cos_theta) + return np.floor(24 * theta / 2 / np.pi) + + +def find_schedule_action( + schedule: Schedule, + device: DeviceType, + setpoint_name: SetpointName, + timestamp: pd.Timedelta, +) -> SetpointValue: + """Finds the action for a schedule event for a time and schedule.""" + + # Get all the schedule events for the device and the setpoint, and turn it + # into a series. + device_schedule_dict = {} + for schedule_event in schedule: + if ( + schedule_event.device == device + and schedule_event.setpoint_name == setpoint_name + ): + device_schedule_dict[schedule_event.start_time] = ( + schedule_event.setpoint_value + ) + device_schedule = pd.Series(device_schedule_dict) + + # Get the indexes of the schedule events that fall before the timestamp. + + device_schedule_indexes = device_schedule.index[ + device_schedule.index <= timestamp + ] + + # If are no events preceedding the time, then choose the last + # (assuming it wraps around). + if device_schedule_indexes.empty: + return device_schedule.loc[device_schedule.index[-1]] + else: + return device_schedule.loc[device_schedule_indexes[-1]] + +# @title Define a schedule policy +class SchedulePolicy(tf_policy.TFPolicy): + """TF Policy implementation of the Schedule policy.""" + + def __init__( + self, + time_step_spec, + action_spec: types.NestedTensorSpec, + action_sequence: ActionSequence, + weekday_schedule_events: Schedule, + weekend_holiday_schedule_events: Schedule, + dow_sin_index: int, + dow_cos_index: int, + hod_sin_index: int, + hod_cos_index: int, + action_normalizers, + local_start_time: str = pd.Timestamp, + policy_state_spec: types.NestedTensorSpec = (), + info_spec: types.NestedTensorSpec = (), + name: Optional[str] = None, + ): + self.weekday_schedule_events = weekday_schedule_events + self.weekend_holiday_schedule_events = weekend_holiday_schedule_events + self.dow_sin_index = dow_sin_index + self.dow_cos_index = dow_cos_index + self.hod_sin_index = hod_sin_index + self.hod_cos_index = hod_cos_index + self.action_sequence = action_sequence + self.action_normalizers = action_normalizers + self.local_start_time = local_start_time + self.norm_mean = 0.0 + self.norm_std = 1.0 + + policy_state_spec = () + + super().__init__( + time_step_spec=time_step_spec, + action_spec=action_spec, + policy_state_spec=policy_state_spec, + info_spec=info_spec, + clip=False, + observation_and_action_constraint_splitter=None, + name=name, + ) + + def _normalize_action_map( + self, action_map: dict[tuple[DeviceType, SetpointName], SetpointValue] + ) -> dict[tuple[DeviceType, SetpointName], SetpointValue]: + + normalized_action_map = {} + + for k, v in action_map.items(): + for normalizer_k, normalizer in self.action_normalizers.items(): + if normalizer_k.endswith(k[1]): + + normed_v = normalizer.agent_value(v) + normalized_action_map[k] = normed_v + + return normalized_action_map + + def _get_action( + self, time_step + ) -> dict[tuple[DeviceType, SetpointName], SetpointValue]: + + observation = time_step.observation + action_spec = cast(tensor_spec.BoundedTensorSpec, self.action_spec) + dow_sin = (observation[self.dow_sin_index] * self.norm_std) + self.norm_mean + dow_cos = (observation[self.dow_cos_index] * self.norm_std) + self.norm_mean + hod_sin = (observation[self.hod_sin_index] * self.norm_std) + self.norm_mean + hod_cos = (observation[self.hod_cos_index] * self.norm_std) + self.norm_mean + + dow = to_dow(dow_sin, dow_cos) + hod = to_hod(hod_sin, hod_cos) + + timestamp = ( + pd.Timedelta(hod, unit='hour') + self.local_start_time.utcoffset() + ) + + if dow < 5: # weekday + + action_map = { + (tup[0], tup[1]): find_schedule_action( + self.weekday_schedule_events, tup[0], tup[1], timestamp + ) + for tup in self.action_sequence + } + + return action_map + + else: # Weekend + + action_map = { + (tup[0], tup[1]): find_schedule_action( + self.weekend_holiday_schedule_events, tup[0], tup[1], timestamp + ) + for tup in self.action_sequence + } + + return action_map + + def _action(self, time_step, policy_state, seed): + del seed + action_map = self._get_action(time_step) + normalized_action_map = self._normalize_action_map(action_map) + + action = np.array( + [ + normalized_action_map[device_setpoint] + for device_setpoint in self.action_sequence + ], + dtype=np.float32, + ) + + t_action = tf.convert_to_tensor(action) + + return policy_step.PolicyStep(t_action, (), ()) + + +def find_fixed_action( + schedule: Schedule, + device: DeviceType, + setpoint_name: SetpointName +) -> SetpointValue: + """Finds the action for a schedule event for a time and schedule.""" + + # Get all the schedule events for the device and the setpoint, and turn it + # into a series. + setpoint_dict = {} + for schedule_event in schedule: + if (schedule_event.device == device and schedule_event.setpoint_name == setpoint_name): + setpoint_value = schedule_event.setpoint_value + + return setpoint_value + + +class FixedActionPolicy(tf_policy.TFPolicy): + """TF Policy implementation of the Schedule policy.""" + + def __init__( + self, + time_step_spec, + action_spec: types.NestedTensorSpec, + action_sequence: ActionSequence, + schedule_events: Schedule, + action_normalizers, + policy_state_spec: types.NestedTensorSpec = (), + info_spec: types.NestedTensorSpec = (), + name: Optional[str] = None, + ): + self.schedule_events = schedule_events + self.action_sequence = action_sequence + self.action_normalizers = action_normalizers + self.norm_mean = 0.0 + self.norm_std = 1.0 + + policy_state_spec = () + + super().__init__( + time_step_spec=time_step_spec, + action_spec=action_spec, + policy_state_spec=policy_state_spec, + info_spec=info_spec, + clip=False, + observation_and_action_constraint_splitter=None, + name=name, + ) + + def _normalize_action_map( + self, action_map: dict[tuple[DeviceType, SetpointName], SetpointValue] + ) -> dict[tuple[DeviceType, SetpointName], SetpointValue]: + + normalized_action_map = {} + + for k, v in action_map.items(): + for normalizer_k, normalizer in self.action_normalizers.items(): + if normalizer_k.endswith(k[1]): + + normed_v = normalizer.agent_value(v) + normalized_action_map[k] = normed_v + + return normalized_action_map + + def _get_action( + self, time_step + ) -> dict[tuple[DeviceType, SetpointName], SetpointValue]: + + action_map = { + (tup[0], tup[1]): find_fixed_action( + self.schedule_events, tup[0], tup[1] + ) + for tup in self.action_sequence + } + + return action_map + + def _action(self, time_step, policy_state, seed): + del seed + action_map = self._get_action(time_step) + normalized_action_map = self._normalize_action_map(action_map) + + action = np.array( + [ + normalized_action_map[device_setpoint] + for device_setpoint in self.action_sequence + ], + dtype=np.float32, + ) + + t_action = tf.convert_to_tensor(action) + + return policy_step.PolicyStep(t_action, (), ()) diff --git a/smart_control/mcts/execute_policy_utils.py b/smart_control/mcts/execute_policy_utils.py new file mode 100644 index 00000000..728b9f59 --- /dev/null +++ b/smart_control/mcts/execute_policy_utils.py @@ -0,0 +1,1004 @@ +# @title Imports +import tensorflow as tf +import datetime +import pytz +import enum +import functools +import os +import os +import time +import gin +import matplotlib.pyplot as plt +import matplotlib.dates as mdates +import matplotlib.cm as cm +import mediapy as media +import reverb +import pandas as pd +import numpy as np +from IPython.display import clear_output +from matplotlib.ticker import MaxNLocator +from matplotlib import patches +from absl import logging +from dataclasses import dataclass +from typing import Final, Sequence +from typing import Optional +from typing import Union, cast +from tf_agents.specs import tensor_spec +from tf_agents.typing import types +from tf_agents.trajectories import trajectory +from tf_agents.trajectories import trajectory as trajectory_lib +from tf_agents.trajectories import time_step as ts +from tf_agents.trajectories import policy_step +from tf_agents.train.utils import train_utils +from tf_agents.train.utils import spec_utils +from tf_agents.train import triggers +from tf_agents.train import learner +from tf_agents.train import actor +from tf_agents.replay_buffers import reverb_utils +from tf_agents.replay_buffers import reverb_replay_buffer +from tf_agents.policies import tf_policy +from tf_agents.policies import random_py_policy +from tf_agents.policies import py_tf_eager_policy +from tf_agents.policies import greedy_policy +from tf_agents.networks import sequential +from tf_agents.networks import nest_map +from tf_agents.metrics import py_metrics +from tf_agents.keras_layers import inner_reshape +from tf_agents.drivers import py_driver +from tf_agents.agents.sac import tanh_normal_projection_network +from tf_agents.agents.sac import sac_agent +from smart_control.utils import environment_utils +from smart_control.utils import histogram_reducer +from smart_control.utils import writer_lib +from smart_control.utils import reader_lib +from smart_control.utils import observation_normalizer +from smart_control.utils import conversion_utils +from smart_control.utils import controller_writer +from smart_control.utils import controller_reader +from smart_control.utils import building_renderer +from smart_control.utils import bounded_action_normalizer +from smart_control.simulator import stochastic_convection_simulator +from smart_control.simulator import step_function_occupancy +from smart_control.simulator import simulator_building +from smart_control.simulator import rejection_simulator_building +from smart_control.simulator import randomized_arrival_departure_occupancy +from smart_control.reward import setpoint_energy_carbon_reward +from smart_control.reward import setpoint_energy_carbon_regret +from smart_control.reward import natural_gas_energy_cost +from smart_control.reward import electricity_energy_cost +from smart_control.proto import smart_control_normalization_pb2 +from smart_control.proto import smart_control_building_pb2 +from smart_control.environment.environment import Environment +from smart_control.environment import environment + + +os.environ['WRAPT_DISABLE_EXTENSIONS'] = 'true' + + +data_path = "/home/trigo/sbsim/sbsim/smart_control/configs/resources/sb1/" +metrics_path = "/home/trigo/sbsim/sbsim/metrics" # @param {type:"string"} +output_data_path = '/home/trigo/sbsim/sbsim/output' # @param {type:"string"} +root_dir = "/home/trigo/sbsim/sbsim/root" # @param {type:"string"} + + +# @title Plotting Utities +reward_shift = 0 +reward_scale = 1.0 +person_productivity_hour = 300.0 +KELVIN_TO_CELSIUS = 273.15 + + +# @title Plotting Utities +reward_shift = 0 +reward_scale = 1.0 +person_productivity_hour = 300.0 + + +KELVIN_TO_CELSIUS = 273.15 + + +def logging_info(*args): + logging.info(*args) + print(*args) + + +def render_env(env: environment.Environment): + """Renders the environment.""" + building_layout = env.building._simulator._building._floor_plan + + # create a renderer + renderer = building_renderer.BuildingRenderer(building_layout, 1) + + # get the current temps to render + # this also is not ideal, since the temps are not fully exposed. + # V Ideally this should be a publicly accessable field + temps = env.building._simulator._building.temp + + input_q = env.building._simulator._building.input_q + + # render + vmin = 285 + vmax = 305 + image = renderer.render( + temps, + cmap='bwr', + vmin=vmin, + vmax=vmax, + colorbar=False, + input_q=input_q, + diff_range=0.5, + diff_size=1, + ).convert('RGB') + media.show_image( + image, title='Environment %s' % env.current_simulation_timestamp + ) + + +def get_energy_timeseries(reward_infos, time_zone: str) -> pd.DataFrame: + """Returns a timeseries of energy rates.""" + + start_times = [] + end_times = [] + + device_ids = [] + device_types = [] + air_handler_blower_electrical_energy_rates = [] + air_handler_air_conditioner_energy_rates = [] + boiler_natural_gas_heating_energy_rates = [] + boiler_pump_electrical_energy_rates = [] + + for reward_info in reward_infos: + end_timestamp = conversion_utils.proto_to_pandas_timestamp( + reward_info.end_timestamp + ).tz_convert(time_zone) + start_timestamp = end_timestamp - pd.Timedelta(300, unit='second') + + for air_handler_id in reward_info.air_handler_reward_infos: + start_times.append(start_timestamp) + end_times.append(end_timestamp) + + device_ids.append(air_handler_id) + device_types.append('air_handler') + + air_handler_blower_electrical_energy_rates.append( + reward_info.air_handler_reward_infos[ + air_handler_id + ].blower_electrical_energy_rate + ) + air_handler_air_conditioner_energy_rates.append( + reward_info.air_handler_reward_infos[ + air_handler_id + ].air_conditioning_electrical_energy_rate + ) + boiler_natural_gas_heating_energy_rates.append(0) + boiler_pump_electrical_energy_rates.append(0) + + for boiler_id in reward_info.boiler_reward_infos: + start_times.append(start_timestamp) + end_times.append(end_timestamp) + + device_ids.append(boiler_id) + device_types.append('boiler') + + air_handler_blower_electrical_energy_rates.append(0) + air_handler_air_conditioner_energy_rates.append(0) + + boiler_natural_gas_heating_energy_rates.append( + reward_info.boiler_reward_infos[ + boiler_id + ].natural_gas_heating_energy_rate + ) + boiler_pump_electrical_energy_rates.append( + reward_info.boiler_reward_infos[boiler_id].pump_electrical_energy_rate + ) + + df_map = { + 'start_time': start_times, + 'end_time': end_times, + 'device_id': device_ids, + 'device_type': device_types, + 'air_handler_blower_electrical_energy_rate': ( + air_handler_blower_electrical_energy_rates + ), + 'air_handler_air_conditioner_energy_rate': ( + air_handler_air_conditioner_energy_rates + ), + 'boiler_natural_gas_heating_energy_rate': ( + boiler_natural_gas_heating_energy_rates + ), + 'boiler_pump_electrical_energy_rate': boiler_pump_electrical_energy_rates, + } + df = pd.DataFrame(df_map).sort_values('start_time') + return df + + +def get_outside_air_temperature_timeseries( + observation_responses, + time_zone: str, +) -> pd.Series: + """Returns a timeseries of outside air temperature.""" + temps = [] + for i in range(len(observation_responses)): + temp = [ + ( + conversion_utils.proto_to_pandas_timestamp( + sor.timestamp + ).tz_convert(time_zone) + - pd.Timedelta(300, unit='second'), + sor.continuous_value, + ) + for sor in observation_responses[i].single_observation_responses + if sor.single_observation_request.measurement_name + == 'outside_air_temperature_sensor' + ][0] + temps.append(temp) + + res = list(zip(*temps)) + return pd.Series(res[1], index=res[0]).sort_index() + + +def get_reward_timeseries( + reward_infos, + reward_responses, + time_zone: str, +) -> pd.DataFrame: + """Returns a timeseries of reward values.""" + cols = [ + 'agent_reward_value', + 'electricity_energy_cost', + 'carbon_emitted', + 'occupancy', + ] + df = pd.DataFrame(columns=cols) + + for i in range(min(len(reward_responses), len(reward_infos))): + step_start_timestamp = conversion_utils.proto_to_pandas_timestamp( + reward_infos[i].start_timestamp + ).tz_convert(time_zone) + step_end_timestamp = conversion_utils.proto_to_pandas_timestamp( + reward_infos[i].end_timestamp + ).tz_convert(time_zone) + delta_time_sec = (step_end_timestamp - + step_start_timestamp).total_seconds() + occupancy = np.sum([ + reward_infos[i].zone_reward_infos[zone_id].average_occupancy + for zone_id in reward_infos[i].zone_reward_infos + ]) + + df.loc[ + conversion_utils.proto_to_pandas_timestamp( + reward_infos[i].start_timestamp + ).tz_convert(time_zone) + ] = [ + reward_responses[i].agent_reward_value, + reward_responses[i].electricity_energy_cost, + reward_responses[i].carbon_emitted, + occupancy, + ] + + df = df.sort_index() + df['cumulative_reward'] = df['agent_reward_value'].cumsum() + logging_info('Cumulative reward: %4.2f' % df.iloc[-1]['cumulative_reward']) + return df + + +def format_plot( + ax1, xlabel: str, start_time: int, end_time: int, time_zone: str +): + """Formats a plot with common attributes.""" + ax1.set_facecolor('black') + ax1.xaxis.tick_top() + ax1.tick_params(axis='x', labelsize=12) + ax1.tick_params(axis='y', labelsize=12) + ax1.xaxis.set_major_formatter( + mdates.DateFormatter('%a %m/%d %H:%M', tz=pytz.timezone(time_zone)) + ) + ax1.grid(color='gray', linestyle='-', linewidth=1.0) + ax1.set_ylabel(xlabel, color='blue', fontsize=12) + ax1.set_xlim(left=start_time, right=end_time) + ax1.yaxis.set_major_locator(MaxNLocator(integer=True)) + ax1.legend(prop={'size': 10}) + + +def plot_occupancy_timeline( + ax1, reward_timeseries: pd.DataFrame, time_zone: str +): + local_times = [ts.tz_convert(time_zone) for ts in reward_timeseries.index] + ax1.plot( + local_times, + reward_timeseries['occupancy'], + color='cyan', + marker=None, + alpha=1, + lw=2, + linestyle='-', + label='Num Occupants', + ) + format_plot( + ax1, + 'Occupancy', + reward_timeseries.index.min(), + reward_timeseries.index.max(), + time_zone, + ) + + +def plot_energy_cost_timeline( + ax1, + reward_timeseries: pd.DataFrame, + time_zone: str, + cumulative: bool = False, +): + local_times = [ts.tz_convert(time_zone) for ts in reward_timeseries.index] + if cumulative: + feature_timeseries_cost = reward_timeseries[ + 'electricity_energy_cost' + ].cumsum() + else: + feature_timeseries_cost = reward_timeseries['electricity_energy_cost'] + ax1.plot( + local_times, + feature_timeseries_cost, + color='magenta', + marker=None, + alpha=1, + lw=2, + linestyle='-', + label='Electricity', + ) + + format_plot( + ax1, + 'Energy Cost [$]', + reward_timeseries.index.min(), + reward_timeseries.index.max(), + time_zone, + ) + + +def plot_reward_timeline(ax1, reward_timeseries, time_zone): + + local_times = [ts.tz_convert(time_zone) for ts in reward_timeseries.index] + + ax1.plot( + local_times, + reward_timeseries['cumulative_reward'], + color='royalblue', + marker=None, + alpha=1, + lw=6, + linestyle='-', + label='reward', + ) + format_plot( + ax1, + 'Agent Reward', + reward_timeseries.index.min(), + reward_timeseries.index.max(), + time_zone, + ) + + +def plot_energy_timeline(ax1, energy_timeseries, time_zone, cumulative=False): + + def _to_kwh( + energy_rate: float, + step_interval: pd.Timedelta = pd.Timedelta(5, unit='minute'), + ) -> float: + kw_power = energy_rate / 1000.0 + hwh_power = kw_power * step_interval / pd.Timedelta(1, unit='hour') + return hwh_power.cumsum() + + timeseries = energy_timeseries[ + energy_timeseries['device_type'] == 'air_handler' + ] + + if cumulative: + feature_timeseries_ac = _to_kwh( + timeseries['air_handler_air_conditioner_energy_rate'] + ) + feature_timeseries_blower = _to_kwh( + timeseries['air_handler_blower_electrical_energy_rate'] + ) + else: + feature_timeseries_ac = ( + timeseries['air_handler_air_conditioner_energy_rate'] / 1000.0 + ) + feature_timeseries_blower = ( + timeseries['air_handler_blower_electrical_energy_rate'] / 1000.0 + ) + + ax1.plot( + timeseries['start_time'], + feature_timeseries_ac, + color='magenta', + marker=None, + alpha=1, + lw=4, + linestyle='-', + label='AHU Electricity', + ) + ax1.plot( + timeseries['start_time'], + feature_timeseries_blower, + color='magenta', + marker=None, + alpha=1, + lw=4, + linestyle='--', + label='FAN Electricity', + ) + + timeseries = energy_timeseries[energy_timeseries['device_type'] == 'boiler'] + if cumulative: + feature_timeseries_gas = _to_kwh( + timeseries['boiler_natural_gas_heating_energy_rate'] + ) + feature_timeseries_pump = _to_kwh( + timeseries['boiler_pump_electrical_energy_rate'] + ) + else: + feature_timeseries_gas = ( + timeseries['boiler_natural_gas_heating_energy_rate'] / 1000.0 + ) + feature_timeseries_pump = ( + timeseries['boiler_pump_electrical_energy_rate'] / 1000.0 + ) + + ax1.plot( + timeseries['start_time'], + feature_timeseries_gas, + color='lime', + marker=None, + alpha=1, + lw=4, + linestyle='-', + label='BLR Gas', + ) + ax1.plot( + timeseries['start_time'], + feature_timeseries_pump, + color='lime', + marker=None, + alpha=1, + lw=4, + linestyle='--', + label='Pump Electricity', + ) + + if cumulative: + label = 'HVAC Energy Consumption [kWh]' + else: + label = 'HVAC Power Consumption [kW]' + + format_plot( + ax1, + label, + timeseries['start_time'].min(), + timeseries['end_time'].max(), + time_zone, + ) + + +def plot_carbon_timeline(ax1, reward_timeseries, time_zone, cumulative=False): + """Plots carbon-emission timeline.""" + + if cumulative: + feature_timeseries_carbon = reward_timeseries['carbon_emitted'].cumsum( + ) + else: + feature_timeseries_carbon = reward_timeseries['carbon_emitted'] + ax1.plot( + reward_timeseries.index, + feature_timeseries_carbon, + color='white', + marker=None, + alpha=1, + lw=4, + linestyle='-', + label='Carbon', + ) + format_plot( + ax1, + 'Carbon emission [kg]', + reward_timeseries.index.min(), + reward_timeseries.index.max(), + time_zone, + ) + + +def get_zone_timeseries(reward_infos, time_zone): + """Converts reward infos to a timeseries dataframe.""" + + start_times = [] + end_times = [] + zones = [] + heating_setpoints = [] + cooling_setpoints = [] + zone_air_temperatures = [] + air_flow_rate_setpoints = [] + air_flow_rates = [] + average_occupancies = [] + + for reward_info in reward_infos: + start_timestamp = conversion_utils.proto_to_pandas_timestamp( + reward_info.end_timestamp + ).tz_convert(time_zone) - pd.Timedelta(300, unit='second') + end_timestamp = conversion_utils.proto_to_pandas_timestamp( + reward_info.end_timestamp + ).tz_convert(time_zone) + + for zone_id in reward_info.zone_reward_infos: + zones.append(zone_id) + start_times.append(start_timestamp) + end_times.append(end_timestamp) + + heating_setpoints.append( + reward_info.zone_reward_infos[zone_id].heating_setpoint_temperature + ) + cooling_setpoints.append( + reward_info.zone_reward_infos[zone_id].cooling_setpoint_temperature + ) + + zone_air_temperatures.append( + reward_info.zone_reward_infos[zone_id].zone_air_temperature + ) + air_flow_rate_setpoints.append( + reward_info.zone_reward_infos[zone_id].air_flow_rate_setpoint + ) + air_flow_rates.append( + reward_info.zone_reward_infos[zone_id].air_flow_rate + ) + average_occupancies.append( + reward_info.zone_reward_infos[zone_id].average_occupancy + ) + + df_map = { + 'start_time': start_times, + 'end_time': end_times, + 'zone': zones, + 'heating_setpoint_temperature': heating_setpoints, + 'cooling_setpoint_temperature': cooling_setpoints, + 'zone_air_temperature': zone_air_temperatures, + 'air_flow_rate_setpoint': air_flow_rate_setpoints, + 'air_flow_rate': air_flow_rates, + 'average_occupancy': average_occupancies, + } + return pd.DataFrame(df_map).sort_values('start_time') + + +def get_action_timeseries(action_responses): + """Converts action responses to a dataframe.""" + timestamps = [] + device_ids = [] + setpoint_names = [] + setpoint_values = [] + response_types = [] + for action_response in action_responses: + + timestamp = conversion_utils.proto_to_pandas_timestamp( + action_response.timestamp + ) + for single_action_response in action_response.single_action_responses: + device_id = single_action_response.request.device_id + setpoint_name = single_action_response.request.setpoint_name + setpoint_value = single_action_response.request.continuous_value + response_type = single_action_response.response_type + + timestamps.append(timestamp) + device_ids.append(device_id) + setpoint_names.append(setpoint_name) + setpoint_values.append(setpoint_value) + response_types.append(response_type) + + return pd.DataFrame({ + 'timestamp': timestamps, + 'device_id': device_ids, + 'setpoint_name': setpoint_names, + 'setpoint_value': setpoint_values, + 'response_type': response_types, + }) + + +def plot_action_timeline(ax1, action_timeseries, action_tuple, time_zone): + """Plots action timeline.""" + + single_action_timeseries = action_timeseries[ + (action_timeseries['device_id'] == action_tuple[0]) + & (action_timeseries['setpoint_name'] == action_tuple[1]) + ] + single_action_timeseries = single_action_timeseries.sort_values( + by='timestamp' + ) + + if action_tuple[1] in [ + 'supply_water_setpoint', + 'supply_air_heating_temperature_setpoint', + ]: + single_action_timeseries['setpoint_value'] = ( + single_action_timeseries['setpoint_value'] - KELVIN_TO_CELSIUS + ) + + ax1.plot( + single_action_timeseries['timestamp'], + single_action_timeseries['setpoint_value'], + color='lime', + marker=None, + alpha=1, + lw=4, + linestyle='-', + label=action_tuple[1], + ) + title = '%s %s' % (action_tuple[0], action_tuple[1]) + format_plot( + ax1, + 'Action', + single_action_timeseries['timestamp'].min(), + single_action_timeseries['timestamp'].max(), + time_zone, + ) + + +def get_outside_air_temperature_timeseries(observation_responses, time_zone): + temps = [] + for i in range(len(observation_responses)): + temp = [ + ( + conversion_utils.proto_to_pandas_timestamp( + sor.timestamp + ).tz_convert(time_zone), + sor.continuous_value, + ) + for sor in observation_responses[i].single_observation_responses + if sor.single_observation_request.measurement_name + == 'outside_air_temperature_sensor' + ][0] + temps.append(temp) + + res = list(zip(*temps)) + return pd.Series(res[1], index=res[0]).sort_index() + + +def plot_temperature_timeline( + ax1, zone_timeseries, outside_air_temperature_timeseries, time_zone +): + zone_temps = pd.pivot_table( + zone_timeseries, + index=zone_timeseries['start_time'], + columns='zone', + values='zone_air_temperature', + ).sort_index() + zone_temps.quantile(q=0.25, axis=1) + zone_temp_stats = pd.DataFrame({ + 'min_temp': zone_temps.min(axis=1), + 'q25_temp': zone_temps.quantile(q=0.25, axis=1), + 'median_temp': zone_temps.median(axis=1), + 'q75_temp': zone_temps.quantile(q=0.75, axis=1), + 'max_temp': zone_temps.max(axis=1), + }) + + zone_heating_setpoints = ( + pd.pivot_table( + zone_timeseries, + index=zone_timeseries['start_time'], + columns='zone', + values='heating_setpoint_temperature', + ) + .sort_index() + .min(axis=1) + ) + zone_cooling_setpoints = ( + pd.pivot_table( + zone_timeseries, + index=zone_timeseries['start_time'], + columns='zone', + values='cooling_setpoint_temperature', + ) + .sort_index() + .max(axis=1) + ) + + ax1.plot( + zone_cooling_setpoints.index, + zone_cooling_setpoints - KELVIN_TO_CELSIUS, + color='yellow', + lw=1, + ) + ax1.plot( + zone_cooling_setpoints.index, + zone_heating_setpoints - KELVIN_TO_CELSIUS, + color='yellow', + lw=1, + ) + + ax1.fill_between( + zone_temp_stats.index, + zone_temp_stats['min_temp'] - KELVIN_TO_CELSIUS, + zone_temp_stats['max_temp'] - KELVIN_TO_CELSIUS, + facecolor='green', + alpha=0.8, + ) + ax1.fill_between( + zone_temp_stats.index, + zone_temp_stats['q25_temp'] - KELVIN_TO_CELSIUS, + zone_temp_stats['q75_temp'] - KELVIN_TO_CELSIUS, + facecolor='green', + alpha=0.8, + ) + ax1.plot( + zone_temp_stats.index, + zone_temp_stats['median_temp'] - KELVIN_TO_CELSIUS, + color='white', + lw=3, + alpha=1.0, + ) + ax1.plot( + outside_air_temperature_timeseries.index, + outside_air_temperature_timeseries - KELVIN_TO_CELSIUS, + color='magenta', + lw=3, + alpha=1.0, + ) + format_plot( + ax1, + 'Temperature [C]', + zone_temp_stats.index.min(), + zone_temp_stats.index.max(), + time_zone, + ) + + +def plot_timeseries_charts(reader, time_zone): + """Plots timeseries charts.""" + + observation_responses = reader.read_observation_responses( + pd.Timestamp.min, pd.Timestamp.max + ) + action_responses = reader.read_action_responses( + pd.Timestamp.min, pd.Timestamp.max + ) + reward_infos = reader.read_reward_infos(pd.Timestamp.min, pd.Timestamp.max) + reward_responses = reader.read_reward_responses( + pd.Timestamp.min, pd.Timestamp.max + ) + + if len(reward_infos) == 0 or len(reward_responses) == 0: + return + + action_timeseries = get_action_timeseries(action_responses) + action_tuples = list( + set([ + (row['device_id'], row['setpoint_name']) + for _, row in action_timeseries.iterrows() + ]) + ) + + reward_timeseries = get_reward_timeseries( + reward_infos, reward_responses, time_zone + ).sort_index() + outside_air_temperature_timeseries = get_outside_air_temperature_timeseries( + observation_responses, time_zone + ) + zone_timeseries = get_zone_timeseries(reward_infos, time_zone) + fig, axes = plt.subplots( + nrows=6 + len(action_tuples), + ncols=1, + gridspec_kw={ + 'height_ratios': [1, 1, 1, 1, 1, 1] + [1] * len(action_tuples) + }, + squeeze=True, + ) + fig.set_size_inches(24, 25) + + energy_timeseries = get_energy_timeseries(reward_infos, time_zone) + plot_reward_timeline(axes[0], reward_timeseries, time_zone) + plot_energy_timeline(axes[1], energy_timeseries, + time_zone, cumulative=True) + plot_energy_cost_timeline( + axes[2], reward_timeseries, time_zone, cumulative=True + ) + plot_carbon_timeline(axes[3], reward_timeseries, + time_zone, cumulative=True) + plot_occupancy_timeline(axes[4], reward_timeseries, time_zone) + plot_temperature_timeline( + axes[5], zone_timeseries, outside_air_temperature_timeseries, time_zone + ) + + for i, action_tuple in enumerate(action_tuples): + plot_action_timeline( + axes[6 + i], action_timeseries, action_tuple, time_zone + ) + + plt.show() + + +def remap_filepath(filepath) -> str: + return filepath + + +def load_environment(gin_config_file: str): + """Returns an Environment from a config file.""" + # Global definition is required by Gin library to instantiate Environment. + # global environment # pylint: disable=global-variable-not-assigned + + with gin.unlock_config(): + gin.clear_config() + gin.parse_config_file(gin_config_file) + print("Parsed config file") + return Environment() # pylint: disable=no-value-for-parameter + + +def get_latest_episode_reader( + metrics_path: str, +) -> controller_reader.ProtoReader: + + episode_infos = controller_reader.get_episode_data( + metrics_path).sort_index() + selected_episode = episode_infos.index[-1] + episode_path = os.path.join(metrics_path, selected_episode) + reader = controller_reader.ProtoReader(episode_path) + return reader + + +@gin.configurable +def get_histogram_path(): + return data_path + + +@gin.configurable +def get_reset_temp_values(): + reset_temps_filepath = remap_filepath( + os.path.join(data_path, "reset_temps.npy") + ) + + return np.load(reset_temps_filepath) + + +@gin.configurable +def get_zone_path(): + return remap_filepath( + os.path.join(data_path, "double_resolution_zone_1_2.npy") + ) + + +@gin.configurable +def get_metrics_path(): + return os.path.join(metrics_path, "metrics") + + +@gin.configurable +def get_weather_path(): + return remap_filepath( + os.path.join( + data_path, "local_weather_moffett_field_20230701_20231122.csv" + ) + ) + + +# @title Load the environments +histogram_parameters_tuples = ( + ('zone_air_temperature_sensor', (285., 286., 287., 288, 289., 290., 291., + 292., 293., 294., 295., 296., 297., 298., 299., 300., 301, 302, 303)), + ('supply_air_damper_percentage_command', (0.0, 0.2, 0.4, 0.6, 0.8, 1.0)), + ('supply_air_flowrate_setpoint', (0., 0.05, .1, .2, .3, .4, .5, .7, .9)), +) + + +@gin.configurable +def get_histogram_reducer(): + + reader = controller_reader.ProtoReader(data_path) + + hr = histogram_reducer.HistogramReducer( + histogram_parameters_tuples=histogram_parameters_tuples, + reader=reader, + normalize_reduce=True, + ) + return hr + + +# @title Define a method to execute the policy on the environment. +def get_trajectory(time_step, current_action: policy_step.PolicyStep): + """Get the trajectory for the current action and time step.""" + observation = time_step.observation + action = current_action.action + policy_info = () + reward = time_step.reward + discount = time_step.discount + + if time_step.is_first(): + traj = trajectory.first(observation, action, + policy_info, reward, discount) + + elif time_step.is_last(): + traj = trajectory.last(observation, action, + policy_info, reward, discount) + + else: + traj = trajectory.mid(observation, action, + policy_info, reward, discount) + return traj + + +def compute_avg_return( + environment, + policy, + num_episodes=1, + time_zone: str = "US/Pacific", + render_interval_steps: int = 24, + trajectory_observers=None, + num_steps=6 +): + """Computes the average return of the policy on the environment. + + Args: + environment: environment.Environment + policy: policy.Policy + num_episodes: total number of eposides to run. + time_zone: time zone of the environment + render_interval_steps: Number of steps to take between rendering. + trajectory_observers: list of trajectory observers for use in rendering. + """ + + total_return = 0.0 + return_by_simtime = [] + for _ in range(num_episodes): + + time_step = environment.current_time_step() + if not time_step: + time_step = environment.reset() + + episode_return = 0.0 + t0 = time.time() + epoch = t0 + + step_id = 0 + execution_times = [] + + for _ in range(num_steps): + + action_step = policy.action(time_step) + time_step = environment.step(action_step.action) + + if trajectory_observers is not None: + traj = get_trajectory(time_step, action_step) + for observer in trajectory_observers: + observer(traj) + + episode_return += time_step.reward + t1 = time.time() + dt = t1 - t0 + episode_seconds = t1 - epoch + execution_times.append(dt) + sim_time = environment.current_simulation_timestamp.tz_convert( + time_zone) + + return_by_simtime.append([sim_time, episode_return]) + + print( + "Step %5d Sim Time: %s, Reward: %8.2f, Return: %8.2f, Mean Step Time:" + " %8.2f s, Episode Time: %8.2f s" + % ( + step_id, + sim_time.strftime("%Y-%m-%d %H:%M"), + time_step.reward, + episode_return, + np.mean(execution_times), + episode_seconds, + ) + ) + + if (step_id > 0) and (step_id % render_interval_steps == 0): + if environment._metrics_path: + clear_output(wait=True) + reader = get_latest_episode_reader( + environment._metrics_path) + plot_timeseries_charts(reader, time_zone) + render_env(environment) + + t0 = t1 + step_id += 1 + total_return += episode_return + + avg_return = total_return / num_episodes + return avg_return, return_by_simtime diff --git a/smart_control/mcts/mcts_experiment.py b/smart_control/mcts/mcts_experiment.py new file mode 100644 index 00000000..6eace141 --- /dev/null +++ b/smart_control/mcts/mcts_experiment.py @@ -0,0 +1,237 @@ +import os +import json +import pandas as pd +import multiprocessing as mp +import argparse +from tqdm import tqdm +from tf_agents.train.utils import spec_utils +from smart_control.mcts.mcts_utils import get_available_actions +from smart_control.mcts.execute_policy_utils import load_environment, compute_avg_return +from smart_control.mcts.SchedulePolicy import SchedulePolicy, FixedActionPolicy, ScheduleEvent, DeviceType +from smart_control.mcts.MonteCarloTreeSearch import SbSimMonteCarloTreeSearch, SbsimMonteCarloTreeSearchNode, NodeEnvironmentState + + +data_path = "/home/trigo/sbsim/sbsim/smart_control/configs/resources/sb1/" +default_env_config = os.path.join(data_path, "sim_config.gin") +default_env = load_environment(default_env_config) +default_action_sequence = [ + (DeviceType.HWS, 'supply_water_setpoint'), + (DeviceType.AC, 'supply_air_heating_temperature_setpoint') +] + + +def get_policy_with_fixed_action(env, action): + schedule_events = [ + ScheduleEvent( + pd.Timedelta(0, unit='hour'), + DeviceType.AC, + 'supply_air_heating_temperature_setpoint', + action[0], + ), + ScheduleEvent( + pd.Timedelta(0, unit='hour'), + DeviceType.HWS, + 'supply_water_setpoint', + action[1], + ) + ] + + _, action_spec, time_step_spec = spec_utils.get_tensor_specs(env) + + policy = FixedActionPolicy( + time_step_spec=time_step_spec, + action_spec=action_spec, + action_sequence=default_action_sequence, + schedule_events=schedule_events, + action_normalizers=env._action_normalizers, + ) + + return policy + + +def get_default_schedule_policy(env): + hod_cos_index = default_env._field_names.index('hod_cos_000') + hod_sin_index = default_env._field_names.index('hod_sin_000') + dow_cos_index = default_env._field_names.index('dow_cos_000') + dow_sin_index = default_env._field_names.index('dow_sin_000') + + # Note that temperatures are specified in Kelvin: + weekday_schedule_events = [ + ScheduleEvent( + pd.Timedelta(6, unit='hour'), + DeviceType.AC, + 'supply_air_heating_temperature_setpoint', + 292.0, + ), + ScheduleEvent( + pd.Timedelta(19, unit='hour'), + DeviceType.AC, + 'supply_air_heating_temperature_setpoint', + 285.0, + ), + ScheduleEvent( + pd.Timedelta(6, unit='hour'), + DeviceType.HWS, + 'supply_water_setpoint', + 350.0, + ), + ScheduleEvent( + pd.Timedelta(19, unit='hour'), + DeviceType.HWS, + 'supply_water_setpoint', + 315.0, + ), + ] + + weekend_holiday_schedule_events = [ + ScheduleEvent( + pd.Timedelta(6, unit='hour'), + DeviceType.AC, + 'supply_air_heating_temperature_setpoint', + 285.0, + ), + ScheduleEvent( + pd.Timedelta(19, unit='hour'), + DeviceType.AC, + 'supply_air_heating_temperature_setpoint', + 285.0, + ), + ScheduleEvent( + pd.Timedelta(6, unit='hour'), + DeviceType.HWS, + 'supply_water_setpoint', + 315.0, + ), + ScheduleEvent( + pd.Timedelta(19, unit='hour'), + DeviceType.HWS, + 'supply_water_setpoint', + 315.0, + ), + ] + + action_normalizers = env._action_normalizers + + _, action_spec, time_step_spec = spec_utils.get_tensor_specs(env) + local_start_time = env.current_simulation_timestamp.tz_convert(tz='US/Pacific') + + schedule_policy = SchedulePolicy( + time_step_spec=time_step_spec, + action_spec=action_spec, + action_sequence=default_action_sequence, + weekday_schedule_events=weekday_schedule_events, + weekend_holiday_schedule_events=weekend_holiday_schedule_events, + dow_sin_index=dow_sin_index, + dow_cos_index=dow_cos_index, + hod_sin_index=hod_sin_index, + hod_cos_index=hod_cos_index, + local_start_time=local_start_time, + action_normalizers=action_normalizers, + ) + return schedule_policy + + +def main(): + + # Parse experiment arguments + parser = argparse.ArgumentParser() + parser.add_argument("--num_rollouts", type=int, default=50) + parser.add_argument("--expansion_num_steps", type=int, default=12) + parser.add_argument("--rollout_num_steps", type=int, default=12) + parser.add_argument("--num_processes", type=int, default=8) + + parser.add_argument("--t_water_low", type=int, default=285) + parser.add_argument("--t_water_high", type=int, default=300) + parser.add_argument("--t_air_low", type=int, default=310) + parser.add_argument("--t_air_high", type=int, default=350) + parser.add_argument("--t_water_step", type=int, default=5) + parser.add_argument("--t_air_step", type=int, default=10) + + args = parser.parse_args() + + + # Retrieve return information of default strategy + return_by_timestamp = {} + with open('./returns.json', 'r') as file: + data = json.load(file) + for timestamp, return_value in data: + return_by_timestamp[pd.Timestamp(timestamp)] = return_value + + # Get all possible actions + possible_actions = get_available_actions(args.t_water_low, + args.t_water_high, + args.t_air_low, + args.t_air_high, + args.t_water_step, + args.t_air_step) + + # Create Monte Carlo Tree + starting_node_environment_state = NodeEnvironmentState( + node_temps=default_env.building._simulator._building.temp, + node_timestamp=default_env.building._simulator._current_timestamp, + node_state_return=0, + node_previous_step=None) + root = SbsimMonteCarloTreeSearchNode(starting_node_environment_state) + tree = SbSimMonteCarloTreeSearch(root, + return_by_timestamp, + possible_actions, + default_env_config, + default_action_sequence, + ) + + mp.set_start_method("spawn") # required for multiprocessing to work + progress_bar = tqdm(total=args.num_rollouts) + + while progress_bar.n < args.num_rollouts: + + nodes_for_expansion = tree.get_nodes_for_expansion(num_nodes=args.num_processes) # nodes for expansion is a list of tuples (node, action) + expansion_work_items = [(node.node_environment_state, action) for node, action in nodes_for_expansion] + + + with mp.Pool(processes=args.num_processes) as pool: + expansion_results = pool.map(expansion_worker, expansion_work_items) + + expansion_results = [(x, y, z) for (x, y), z in zip(nodes_for_expansion, expansion_results)] + new_nodes = tree.perform_expansions(expansion_results) + + + rollout_items = [(node.node_environment_state, return_by_timestamp) for node in new_nodes] + with mp.Pool(processes=args.num_processes) as pool: + rollout_results = pool.map(rollout_worker, rollout_items) + + rollout_results = [(x, y, z) for x, (y, z) in zip(new_nodes, rollout_results)] + tree.perform_backpropagations(rollout_results) + + progress_bar.update(len(nodes_for_expansion)) + + print(f"Maximum tree depth: { tree.get_tree_depth() }") + + return + + +def expansion_worker(item): + node_environment_state, action = item + env = SbsimMonteCarloTreeSearchNode.get_node_environment(default_env_config, node_environment_state) + policy = get_policy_with_fixed_action(default_env, action) + + return_value, _ = compute_avg_return(env, policy) + + new_node_state = NodeEnvironmentState( + node_temps=env.building._simulator._building.temp, + node_timestamp=env.building._simulator._current_timestamp, + node_state_return=node_environment_state.node_state_return + return_value, + node_previous_step=env.current_time_step() + ) + + return new_node_state + +def rollout_worker(item): + node_environment_state, return_by_timestamp = item + env = SbsimMonteCarloTreeSearchNode.get_node_environment(default_env_config, node_environment_state) + rollout_policy = get_default_schedule_policy(default_env) + + return SbsimMonteCarloTreeSearchNode.run_rollout(env, node_environment_state, rollout_policy, return_by_timestamp, 12) + + +if __name__ == "__main__": + main() diff --git a/smart_control/mcts/mcts_utils.py b/smart_control/mcts/mcts_utils.py new file mode 100644 index 00000000..e0a41b3b --- /dev/null +++ b/smart_control/mcts/mcts_utils.py @@ -0,0 +1,11 @@ + +""" + This returns all possible actions given water and air temperature ranges and steps. + The number of actions returned by this method is the branching factor in the MCTS tree. +""" +def get_available_actions(t_water_low, t_water_high, t_air_low, t_air_high, water_step, air_step): + possible_actions = set() + for water_temp in range(t_water_low, t_water_high + water_step, water_step): + for air_temp in range(t_air_low, t_air_high + air_step, air_step): + possible_actions.add((water_temp, air_temp)) + return possible_actions diff --git a/smart_control/mcts/returns.json b/smart_control/mcts/returns.json new file mode 100644 index 00000000..5029e5cc --- /dev/null +++ b/smart_control/mcts/returns.json @@ -0,0 +1 @@ +[["2023-07-06T00:05:00-07:00", -0.01950560137629509], ["2023-07-06T00:10:00-07:00", -0.03901120275259018], ["2023-07-06T00:15:00-07:00", -0.05851680412888527], ["2023-07-06T00:20:00-07:00", -0.07802240550518036], ["2023-07-06T00:25:00-07:00", -0.09752800688147545], ["2023-07-06T00:30:00-07:00", -0.11703360825777054], ["2023-07-06T00:35:00-07:00", -0.13653920963406563], ["2023-07-06T00:40:00-07:00", -0.15604481101036072], ["2023-07-06T00:45:00-07:00", -0.1755504123866558], ["2023-07-06T00:50:00-07:00", -0.1950560137629509], ["2023-07-06T00:55:00-07:00", -0.214561615139246], ["2023-07-06T01:00:00-07:00", -0.23421856947243214], ["2023-07-06T01:05:00-07:00", -0.2538755238056183], ["2023-07-06T01:10:00-07:00", -0.27353247813880444], ["2023-07-06T01:15:00-07:00", -0.2931894324719906], ["2023-07-06T01:20:00-07:00", -0.31284638680517673], ["2023-07-06T01:25:00-07:00", -0.3325033411383629], ["2023-07-06T01:30:00-07:00", -0.35216029547154903], ["2023-07-06T01:35:00-07:00", -0.3718172498047352], ["2023-07-06T01:40:00-07:00", -0.39147420413792133], ["2023-07-06T01:45:00-07:00", -0.4111311584711075], ["2023-07-06T01:50:00-07:00", -0.43078811280429363], ["2023-07-06T01:55:00-07:00", -0.4504450671374798], ["2023-07-06T02:00:00-07:00", -0.4701610505580902], ["2023-07-06T02:05:00-07:00", -0.48987703397870064], ["2023-07-06T02:10:00-07:00", -0.5095930173993111], ["2023-07-06T02:15:00-07:00", -0.5293090008199215], ["2023-07-06T02:20:00-07:00", -0.5490249842405319], ["2023-07-06T02:25:00-07:00", -0.5687409676611423], ["2023-07-06T02:30:00-07:00", -0.5884569510817528], ["2023-07-06T02:35:00-07:00", -0.6081729345023632], ["2023-07-06T02:40:00-07:00", -0.6278889179229736], ["2023-07-06T02:45:00-07:00", -0.6476049013435841], ["2023-07-06T02:50:00-07:00", -0.6673208847641945], ["2023-07-06T02:55:00-07:00", -0.6870368681848049], ["2023-07-06T03:00:00-07:00", -0.7067711930721998], ["2023-07-06T03:05:00-07:00", -0.7265055179595947], ["2023-07-06T03:10:00-07:00", -0.7462398428469896], ["2023-07-06T03:15:00-07:00", -0.7659741677343845], ["2023-07-06T03:20:00-07:00", -0.7857084926217794], ["2023-07-06T03:25:00-07:00", -0.8054428175091743], ["2023-07-06T03:30:00-07:00", -0.8251771423965693], ["2023-07-06T03:35:00-07:00", -0.8449114672839642], ["2023-07-06T03:40:00-07:00", -0.8646457921713591], ["2023-07-06T03:45:00-07:00", -0.884380117058754], ["2023-07-06T03:50:00-07:00", -0.9041144419461489], ["2023-07-06T03:55:00-07:00", -0.9238487668335438], ["2023-07-06T04:00:00-07:00", -0.9435950517654419], ["2023-07-06T04:05:00-07:00", -0.9633418880403042], ["2023-07-06T04:10:00-07:00", -0.9830892775207758], ["2023-07-06T04:15:00-07:00", -1.0028372183442116], ["2023-07-06T04:20:00-07:00", -1.0225857105106115], ["2023-07-06T04:25:00-07:00", -1.0423347558826208], ["2023-07-06T04:30:00-07:00", -1.0620843525975943], ["2023-07-06T04:35:00-07:00", -1.0818345006555319], ["2023-07-06T04:40:00-07:00", -1.1015852000564337], ["2023-07-06T04:45:00-07:00", -1.1213364526629448], ["2023-07-06T04:50:00-07:00", -1.14108825661242], ["2023-07-06T04:55:00-07:00", -1.1608406119048595], ["2023-07-06T05:00:00-07:00", -1.1810077335685492], ["2023-07-06T05:05:00-07:00", -1.2011748552322388], ["2023-07-06T05:10:00-07:00", -1.2213419768959284], ["2023-07-06T05:15:00-07:00", -1.241509098559618], ["2023-07-06T05:20:00-07:00", -1.2616762202233076], ["2023-07-06T05:25:00-07:00", -1.2818433418869972], ["2023-07-06T05:30:00-07:00", -1.3020104635506868], ["2023-07-06T05:35:00-07:00", -1.3221775852143764], ["2023-07-06T05:40:00-07:00", -1.342344706878066], ["2023-07-06T05:45:00-07:00", -1.3625118285417557], ["2023-07-06T05:50:00-07:00", -1.3826789502054453], ["2023-07-06T05:55:00-07:00", -1.402846071869135], ["2023-07-06T06:00:00-07:00", -1.4230388831347227], ["2023-07-06T06:05:00-07:00", -1.4432316944003105], ["2023-07-06T06:10:00-07:00", -1.4662452768534422], ["2023-07-06T06:15:00-07:00", -1.4892589468508959], ["2023-07-06T06:20:00-07:00", -1.5122727453708649], ["2023-07-06T06:25:00-07:00", -1.5352866314351559], ["2023-07-06T06:30:00-07:00", -1.5583005659282207], ["2023-07-06T06:35:00-07:00", -1.581314578652382], ["2023-07-06T06:40:00-07:00", -1.6043287087231874], ["2023-07-06T06:45:00-07:00", -1.6273429058492184], ["2023-07-06T06:50:00-07:00", -1.6503572203218937], ["2023-07-06T06:55:00-07:00", -1.6733716242015362], ["2023-07-06T07:00:00-07:00", -1.6963879261165857], ["2023-07-06T07:05:00-07:00", -1.719371810555458], ["2023-07-06T07:10:00-07:00", -1.7423557825386524], ["2023-07-06T07:15:00-07:00", -1.765339881181717], ["2023-07-06T07:20:00-07:00", -1.7883240692317486], ["2023-07-06T07:25:00-07:00", -1.8113083634525537], ["2023-07-06T07:30:00-07:00", -1.834292747080326], ["2023-07-06T07:35:00-07:00", -1.857277236878872], ["2023-07-06T07:40:00-07:00", -1.8802618645131588], ["2023-07-06T07:45:00-07:00", -1.9032466188073158], ["2023-07-06T07:50:00-07:00", -1.9262314811348915], ["2023-07-06T07:55:00-07:00", -1.949216440320015], ["2023-07-06T08:00:00-07:00", -1.9722216222435236], ["2023-07-06T08:05:00-07:00", -1.9951640032231808], ["2023-07-06T08:10:00-07:00", -2.0180345326662064], ["2023-07-06T08:15:00-07:00", -2.040833130478859], ["2023-07-06T08:20:00-07:00", -2.0635598078370094], ["2023-07-06T08:25:00-07:00", -2.086214592680335], ["2023-07-06T08:30:00-07:00", -2.1087974179536104], ["2023-07-06T08:35:00-07:00", -2.131308302283287], ["2023-07-06T08:40:00-07:00", -2.153747197240591], ["2023-07-06T08:45:00-07:00", -2.1761141922324896], ["2023-07-06T08:50:00-07:00", -2.1984092369675636], ["2023-07-06T08:55:00-07:00", -2.220632331445813], ["2023-07-06T09:00:00-07:00", -2.242696950212121], ["2023-07-06T09:05:00-07:00", -2.2646272871643305], ["2023-07-06T09:10:00-07:00", -2.2864142302423716], ["2023-07-06T09:15:00-07:00", -2.3080578073859215], ["2023-07-06T09:20:00-07:00", -2.329557940363884], ["2023-07-06T09:25:00-07:00", -2.3509146496653557], ["2023-07-06T09:30:00-07:00", -2.3721278849989176], ["2023-07-06T09:35:00-07:00", -2.393197687342763], ["2023-07-06T09:40:00-07:00", -2.414124045521021], ["2023-07-06T09:45:00-07:00", -2.434906968846917], ["2023-07-06T09:50:00-07:00", -2.4555464684963226], ["2023-07-06T09:55:00-07:00", -2.4760424941778183], ["2023-07-06T10:00:00-07:00", -2.4962601363658905], ["2023-07-06T10:05:00-07:00", -2.5164777785539627], ["2023-07-06T10:10:00-07:00", -2.536695420742035], ["2023-07-06T10:15:00-07:00", -2.556913062930107], ["2023-07-06T10:20:00-07:00", -2.5771307051181793], ["2023-07-06T10:25:00-07:00", -2.5973483473062515], ["2023-07-06T10:30:00-07:00", -2.6175659894943237], ["2023-07-06T10:35:00-07:00", -2.637783631682396], ["2023-07-06T10:40:00-07:00", -2.658001273870468], ["2023-07-06T10:45:00-07:00", -2.6782189160585403], ["2023-07-06T10:50:00-07:00", -2.6984365582466125], ["2023-07-06T10:55:00-07:00", -2.7186542004346848], ["2023-07-06T11:00:00-07:00", -2.7387651093304157], ["2023-07-06T11:05:00-07:00", -2.7588754687458277], ["2023-07-06T11:10:00-07:00", -2.7789852805435658], ["2023-07-06T11:15:00-07:00", -2.799094542860985], ["2023-07-06T11:20:00-07:00", -2.81920325756073], ["2023-07-06T11:25:00-07:00", -2.839311422780156], ["2023-07-06T11:30:00-07:00", -2.8594190403819084], ["2023-07-06T11:35:00-07:00", -2.879526110365987], ["2023-07-06T11:40:00-07:00", -2.899632630869746], ["2023-07-06T11:45:00-07:00", -2.9197386037558317], ["2023-07-06T11:50:00-07:00", -2.939844027161598], ["2023-07-06T11:55:00-07:00", -2.959948902949691], ["2023-07-06T12:00:00-07:00", -2.9791763182729483], ["2023-07-06T12:05:00-07:00", -2.998403161764145], ["2023-07-06T12:10:00-07:00", -3.017629435285926], ["2023-07-06T12:15:00-07:00", -3.036855138838291], ["2023-07-06T12:20:00-07:00", -3.0560802705585957], ["2023-07-06T12:25:00-07:00", -3.0753048323094845], ["2023-07-06T12:30:00-07:00", -3.0945288222283125], ["2023-07-06T12:35:00-07:00", -3.113752242177725], ["2023-07-06T12:40:00-07:00", -3.1329750902950764], ["2023-07-06T12:45:00-07:00", -3.1521973684430122], ["2023-07-06T12:50:00-07:00", -3.1714190766215324], ["2023-07-06T12:55:00-07:00", -3.190640212967992], ["2023-07-06T13:00:00-07:00", -3.2098378650844097], ["2023-07-06T13:05:00-07:00", -3.2290360871702433], ["2023-07-06T13:10:00-07:00", -3.2482348810881376], ["2023-07-06T13:15:00-07:00", -3.267434246838093], ["2023-07-06T13:20:00-07:00", -3.286634184420109], ["2023-07-06T13:25:00-07:00", -3.3058346919715405], ["2023-07-06T13:30:00-07:00", -3.325035771355033], ["2023-07-06T13:35:00-07:00", -3.344237422570586], ["2023-07-06T13:40:00-07:00", -3.363439643755555], ["2023-07-06T13:45:00-07:00", -3.382642436772585], ["2023-07-06T13:50:00-07:00", -3.4018458016216755], ["2023-07-06T13:55:00-07:00", -3.421049738302827], ["2023-07-06T14:00:00-07:00", -3.440221792086959], ["2023-07-06T14:05:00-07:00", -3.45939327403903], ["2023-07-06T14:10:00-07:00", -3.4785641841590405], ["2023-07-06T14:15:00-07:00", -3.49773452244699], ["2023-07-06T14:20:00-07:00", -3.5169042889028788], ["2023-07-06T14:25:00-07:00", -3.5360734816640615], ["2023-07-06T14:30:00-07:00", -3.5552421025931835], ["2023-07-06T14:35:00-07:00", -3.5744101516902447], ["2023-07-06T14:40:00-07:00", -3.593577628955245], ["2023-07-06T14:45:00-07:00", -3.6127445343881845], ["2023-07-06T14:50:00-07:00", -3.631910866126418], ["2023-07-06T14:55:00-07:00", -3.651076626032591], ["2023-07-06T15:00:00-07:00", -3.6702127046883106], ["2023-07-06T15:05:00-07:00", -3.6893487833440304], ["2023-07-06T15:10:00-07:00", -3.70848486199975], ["2023-07-06T15:15:00-07:00", -3.72762094065547], ["2023-07-06T15:20:00-07:00", -3.7467570193111897], ["2023-07-06T15:25:00-07:00", -3.7658930979669094], ["2023-07-06T15:30:00-07:00", -3.785029176622629], ["2023-07-06T15:35:00-07:00", -3.804165255278349], ["2023-07-06T15:40:00-07:00", -3.8233013339340687], ["2023-07-06T15:45:00-07:00", -3.8424374125897884], ["2023-07-06T15:50:00-07:00", -3.861573491245508], ["2023-07-06T15:55:00-07:00", -3.880709569901228], ["2023-07-06T16:00:00-07:00", -3.8998215068131685], ["2023-07-06T16:05:00-07:00", -3.918933443725109], ["2023-07-06T16:10:00-07:00", -3.9380453806370497], ["2023-07-06T16:15:00-07:00", -3.9571573175489902], ["2023-07-06T16:20:00-07:00", -3.976269254460931], ["2023-07-06T16:25:00-07:00", -3.9953811913728714], ["2023-07-06T16:30:00-07:00", -4.014493128284812], ["2023-07-06T16:35:00-07:00", -4.0336050651967525], ["2023-07-06T16:40:00-07:00", -4.052717002108693], ["2023-07-06T16:45:00-07:00", -4.071828939020634], ["2023-07-06T16:50:00-07:00", -4.090940875932574], ["2023-07-06T16:55:00-07:00", -4.110052812844515], ["2023-07-06T17:00:00-07:00", -4.129139376804233], ["2023-07-06T17:05:00-07:00", -4.147973837330937], ["2023-07-06T17:10:00-07:00", -4.166808871552348], ["2023-07-06T17:15:00-07:00", -4.18564448133111], ["2023-07-06T17:20:00-07:00", -4.204480664804578], ["2023-07-06T17:25:00-07:00", -4.223317421972752], ["2023-07-06T17:30:00-07:00", -4.242154752835631], ["2023-07-06T17:35:00-07:00", -4.260992659255862], ["2023-07-06T17:40:00-07:00", -4.279831139370799], ["2023-07-06T17:45:00-07:00", -4.298670193180442], ["2023-07-06T17:50:00-07:00", -4.317509820684791], ["2023-07-06T17:55:00-07:00", -4.3363500237464905], ["2023-07-06T18:00:00-07:00", -4.355177840217948], ["2023-07-06T18:05:00-07:00", -4.374006230384111], ["2023-07-06T18:10:00-07:00", -4.392835194244981], ["2023-07-06T18:15:00-07:00", -4.411664733663201], ["2023-07-06T18:20:00-07:00", -4.430494846776128], ["2023-07-06T18:25:00-07:00", -4.449325535446405], ["2023-07-06T18:30:00-07:00", -4.468156797811389], ["2023-07-06T18:35:00-07:00", -4.486988635733724], ["2023-07-06T18:40:00-07:00", -4.505821047350764], ["2023-07-06T18:45:00-07:00", -4.524654034525156], ["2023-07-06T18:50:00-07:00", -4.543487595394254], ["2023-07-06T18:55:00-07:00", -4.562321729958057], ["2023-07-06T19:00:00-07:00", -4.581159135326743], ["2023-07-06T19:05:00-07:00", -4.59999711625278], ["2023-07-06T19:10:00-07:00", -4.618835670873523], ["2023-07-06T19:15:00-07:00", -4.6376747991889715], ["2023-07-06T19:20:00-07:00", -4.656514503061771], ["2023-07-06T19:25:00-07:00", -4.675354780629277], ["2023-07-06T19:30:00-07:00", -4.694195633754134], ["2023-07-06T19:35:00-07:00", -4.713037060573697], ["2023-07-06T19:40:00-07:00", -4.731879061087966], ["2023-07-06T19:45:00-07:00", -4.750721637159586], ["2023-07-06T19:50:00-07:00", -4.769564786925912], ["2023-07-06T19:55:00-07:00", -4.788408512249589], ["2023-07-06T20:00:00-07:00", -4.80725135281682], ["2023-07-06T20:05:00-07:00", -4.826094768941402], ["2023-07-06T20:10:00-07:00", -4.844938758760691], ["2023-07-06T20:15:00-07:00", -4.86378332413733], ["2023-07-06T20:20:00-07:00", -4.882628463208675], ["2023-07-06T20:25:00-07:00", -4.901474175974727], ["2023-07-06T20:30:00-07:00", -4.920320464298129], ["2023-07-06T20:35:00-07:00", -4.9391673263162374], ["2023-07-06T20:40:00-07:00", -4.958014763891697], ["2023-07-06T20:45:00-07:00", -4.976862775161862], ["2023-07-06T20:50:00-07:00", -4.995711361989379], ["2023-07-06T20:55:00-07:00", -5.0145605225116014], ["2023-07-06T21:00:00-07:00", -5.033415770158172], ["2023-07-06T21:05:00-07:00", -5.052271591499448], ["2023-07-06T21:10:00-07:00", -5.071127988398075], ["2023-07-06T21:15:00-07:00", -5.089984958991408], ["2023-07-06T21:20:00-07:00", -5.1088425032794476], ["2023-07-06T21:25:00-07:00", -5.127700623124838], ["2023-07-06T21:30:00-07:00", -5.146559316664934], ["2023-07-06T21:35:00-07:00", -5.165418583899736], ["2023-07-06T21:40:00-07:00", -5.18427842669189], ["2023-07-06T21:45:00-07:00", -5.203138843178749], ["2023-07-06T21:50:00-07:00", -5.221999833360314], ["2023-07-06T21:55:00-07:00", -5.240861399099231], ["2023-07-06T22:00:00-07:00", -5.259729729965329], ["2023-07-06T22:05:00-07:00", -5.278598060831428], ["2023-07-06T22:10:00-07:00", -5.297466391697526], ["2023-07-06T22:15:00-07:00", -5.316334722563624], ["2023-07-06T22:20:00-07:00", -5.335203053429723], ["2023-07-06T22:25:00-07:00", -5.354071384295821], ["2023-07-06T22:30:00-07:00", -5.37293971516192], ["2023-07-06T22:35:00-07:00", -5.391808046028018], ["2023-07-06T22:40:00-07:00", -5.410676376894116], ["2023-07-06T22:45:00-07:00", -5.429544707760215], ["2023-07-06T22:50:00-07:00", -5.448413038626313], ["2023-07-06T22:55:00-07:00", -5.46729288995266], ["2023-07-06T23:00:00-07:00", -5.486681712791324], ["2023-07-06T23:05:00-07:00", -5.506070535629988], ["2023-07-06T23:10:00-07:00", -5.525459358468652], ["2023-07-06T23:15:00-07:00", -5.544848181307316], ["2023-07-06T23:20:00-07:00", -5.56423700414598], ["2023-07-06T23:25:00-07:00", -5.583625826984644], ["2023-07-06T23:30:00-07:00", -5.603014649823308], ["2023-07-06T23:35:00-07:00", -5.622403472661972], ["2023-07-06T23:40:00-07:00", -5.641792295500636], ["2023-07-06T23:45:00-07:00", -5.6611811183393], ["2023-07-06T23:50:00-07:00", -5.680569941177964], ["2023-07-06T23:55:00-07:00", -5.699958764016628], ["2023-07-07T00:00:00-07:00", -5.719482254236937], ["2023-07-07T00:05:00-07:00", -5.739005744457245], ["2023-07-07T00:10:00-07:00", -5.758529234677553], ["2023-07-07T00:15:00-07:00", -5.7780527248978615], ["2023-07-07T00:20:00-07:00", -5.79757621511817], ["2023-07-07T00:25:00-07:00", -5.817099705338478], ["2023-07-07T00:30:00-07:00", -5.836623195558786], ["2023-07-07T00:35:00-07:00", -5.856146685779095], ["2023-07-07T00:40:00-07:00", -5.875670175999403], ["2023-07-07T00:45:00-07:00", -5.895193666219711], ["2023-07-07T00:50:00-07:00", -5.91471715644002], ["2023-07-07T00:55:00-07:00", -5.934240646660328], ["2023-07-07T01:00:00-07:00", -5.953915366902947], ["2023-07-07T01:05:00-07:00", -5.973590087145567], ["2023-07-07T01:10:00-07:00", -5.9932648073881865], ["2023-07-07T01:15:00-07:00", -6.012939527630806], ["2023-07-07T01:20:00-07:00", -6.0326142478734255], ["2023-07-07T01:25:00-07:00", -6.052288968116045], ["2023-07-07T01:30:00-07:00", -6.0719636883586645], ["2023-07-07T01:35:00-07:00", -6.091638408601284], ["2023-07-07T01:40:00-07:00", -6.1113131288439035], ["2023-07-07T01:45:00-07:00", -6.130987849086523], ["2023-07-07T01:50:00-07:00", -6.150662569329143], ["2023-07-07T01:55:00-07:00", -6.170337289571762], ["2023-07-07T02:00:00-07:00", -6.190070992335677], ["2023-07-07T02:05:00-07:00", -6.209804695099592], ["2023-07-07T02:10:00-07:00", -6.229538397863507], ["2023-07-07T02:15:00-07:00", -6.249272100627422], ["2023-07-07T02:20:00-07:00", -6.269005803391337], ["2023-07-07T02:25:00-07:00", -6.2887395061552525], ["2023-07-07T02:30:00-07:00", -6.3084732089191675], ["2023-07-07T02:35:00-07:00", -6.328206911683083], ["2023-07-07T02:40:00-07:00", -6.347940614446998], ["2023-07-07T02:45:00-07:00", -6.367674317210913], ["2023-07-07T02:50:00-07:00", -6.387408019974828], ["2023-07-07T02:55:00-07:00", -6.407141722738743], ["2023-07-07T03:00:00-07:00", -6.426893750205636], ["2023-07-07T03:05:00-07:00", -6.4466463308781385], ["2023-07-07T03:10:00-07:00", -6.466399462893605], ["2023-07-07T03:15:00-07:00", -6.486153148114681], ["2023-07-07T03:20:00-07:00", -6.505907384678721], ["2023-07-07T03:25:00-07:00", -6.525662174448371], ["2023-07-07T03:30:00-07:00", -6.545417515560985], ["2023-07-07T03:35:00-07:00", -6.565173409879208], ["2023-07-07T03:40:00-07:00", -6.584929855540395], ["2023-07-07T03:45:00-07:00", -6.604686854407191], ["2023-07-07T03:50:00-07:00", -6.624444404616952], ["2023-07-07T03:55:00-07:00", -6.644202506169677], ["2023-07-07T04:00:00-07:00", -6.663973107933998], ["2023-07-07T04:05:00-07:00", -6.683743709698319], ["2023-07-07T04:10:00-07:00", -6.703514311462641], ["2023-07-07T04:15:00-07:00", -6.723284913226962], ["2023-07-07T04:20:00-07:00", -6.743055514991283], ["2023-07-07T04:25:00-07:00", -6.762826116755605], ["2023-07-07T04:30:00-07:00", -6.782596718519926], ["2023-07-07T04:35:00-07:00", -6.802367320284247], ["2023-07-07T04:40:00-07:00", -6.822137922048569], ["2023-07-07T04:45:00-07:00", -6.84190852381289], ["2023-07-07T04:50:00-07:00", -6.861679125577211], ["2023-07-07T04:55:00-07:00", -6.881449727341533], ["2023-07-07T05:00:00-07:00", -6.901634208858013], ["2023-07-07T05:05:00-07:00", -6.921818690374494], ["2023-07-07T05:10:00-07:00", -6.942003171890974], ["2023-07-07T05:15:00-07:00", -6.9621876534074545], ["2023-07-07T05:20:00-07:00", -6.982372134923935], ["2023-07-07T05:25:00-07:00", -7.002556616440415], ["2023-07-07T05:30:00-07:00", -7.022741097956896], ["2023-07-07T05:35:00-07:00", -7.042925579473376], ["2023-07-07T05:40:00-07:00", -7.063110060989857], ["2023-07-07T05:45:00-07:00", -7.083294542506337], ["2023-07-07T05:50:00-07:00", -7.103479024022818], ["2023-07-07T05:55:00-07:00", -7.123663505539298], ["2023-07-07T06:00:00-07:00", -7.14387365616858], ["2023-07-07T06:05:00-07:00", -7.170278538018465], ["2023-07-07T06:10:00-07:00", -7.201182225719094], ["2023-07-07T06:15:00-07:00", -7.232086289674044], ["2023-07-07T06:20:00-07:00", -7.262990720570087], ["2023-07-07T06:25:00-07:00", -7.293895496055484], ["2023-07-07T06:30:00-07:00", -7.324800606817007], ["2023-07-07T06:35:00-07:00", -7.355706041678786], ["2023-07-07T06:40:00-07:00", -7.386611832305789], ["2023-07-07T06:45:00-07:00", -7.417517989873886], ["2023-07-07T06:50:00-07:00", -7.4484245125204325], ["2023-07-07T06:55:00-07:00", -7.479331433773041], ["2023-07-07T07:00:00-07:00", -7.510268563404679], ["2023-07-07T07:05:00-07:00", -7.541206069290638], ["2023-07-07T07:10:00-07:00", -7.572143962606788], ["2023-07-07T07:15:00-07:00", -7.603082202374935], ["2023-07-07T07:20:00-07:00", -7.633966583758593], ["2023-07-07T07:25:00-07:00", -7.664851343259215], ["2023-07-07T07:30:00-07:00", -7.695736426860094], ["2023-07-07T07:35:00-07:00", -7.726621909067035], ["2023-07-07T07:40:00-07:00", -7.757507810369134], ["2023-07-07T07:45:00-07:00", -7.788394035771489], ["2023-07-07T07:50:00-07:00", -7.819280680269003], ["2023-07-07T07:55:00-07:00", -7.850167753174901], ["2023-07-07T08:00:00-07:00", -7.881080789491534], ["2023-07-07T08:05:00-07:00", -7.9118596240878105], ["2023-07-07T08:10:00-07:00", -7.942484691739082], ["2023-07-07T08:15:00-07:00", -7.972955908626318], ["2023-07-07T08:20:00-07:00", -8.003273202106357], ["2023-07-07T08:25:00-07:00", -8.033436520025134], ["2023-07-07T08:30:00-07:00", -8.063445903360844], ["2023-07-07T08:35:00-07:00", -8.093301299959421], ["2023-07-07T08:40:00-07:00", -8.123002763837576], ["2023-07-07T08:45:00-07:00", -8.152550250291824], ["2023-07-07T08:50:00-07:00", -8.181943802163005], ["2023-07-07T08:55:00-07:00", -8.211183346807957], ["2023-07-07T09:00:00-07:00", -8.240161938592792], ["2023-07-07T09:05:00-07:00", -8.26912123337388], ["2023-07-07T09:10:00-07:00", -8.298080684617162], ["2023-07-07T09:15:00-07:00", -8.327040439471602], ["2023-07-07T09:20:00-07:00", -8.356000559404492], ["2023-07-07T09:25:00-07:00", -8.384961044415832], ["2023-07-07T09:30:00-07:00", -8.413921885192394], ["2023-07-07T09:35:00-07:00", -8.442883174866438], ["2023-07-07T09:40:00-07:00", -8.471844840794802], ["2023-07-07T09:45:00-07:00", -8.500806912779808], ["2023-07-07T09:50:00-07:00", -8.529769329354167], ["2023-07-07T09:55:00-07:00", -8.558732133358717], ["2023-07-07T10:00:00-07:00", -8.587490601465106], ["2023-07-07T10:05:00-07:00", -8.61624950543046], ["2023-07-07T10:10:00-07:00", -8.645008720457554], ["2023-07-07T10:15:00-07:00", -8.673768369480968], ["2023-07-07T10:20:00-07:00", -8.702528392896056], ["2023-07-07T10:25:00-07:00", -8.731288809329271], ["2023-07-07T10:30:00-07:00", -8.760325195267797], ["2023-07-07T10:35:00-07:00", -8.795192120596766], ["2023-07-07T10:40:00-07:00", -8.82977963425219], ["2023-07-07T10:45:00-07:00", -8.864367699250579], ["2023-07-07T10:50:00-07:00", -8.898956404998899], ["2023-07-07T10:55:00-07:00", -8.933545695617795], ["2023-07-07T11:00:00-07:00", -8.967960411682725], ["2023-07-07T11:05:00-07:00", -9.002576442435384], ["2023-07-07T11:10:00-07:00", -9.04290053807199], ["2023-07-07T11:15:00-07:00", -9.082864446565509], ["2023-07-07T11:20:00-07:00", -9.12274301983416], ["2023-07-07T11:25:00-07:00", -9.162536209449172], ["2023-07-07T11:30:00-07:00", -9.20224398933351], ["2023-07-07T11:35:00-07:00", -9.241866445168853], ["2023-07-07T11:40:00-07:00", -9.28140358440578], ["2023-07-07T11:45:00-07:00", -9.320855306461453], ["2023-07-07T11:50:00-07:00", -9.36022170074284], ["2023-07-07T11:55:00-07:00", -9.399502700194716], ["2023-07-07T12:00:00-07:00", -9.437042849138379], ["2023-07-07T12:05:00-07:00", -9.47450146637857], ["2023-07-07T12:10:00-07:00", -9.511878514662385], ["2023-07-07T12:15:00-07:00", -9.549173982813954], ["2023-07-07T12:20:00-07:00", -9.580931620672345], ["2023-07-07T12:25:00-07:00", -9.612612487748265], ["2023-07-07T12:30:00-07:00", -9.644216613844037], ["2023-07-07T12:35:00-07:00", -9.67574398778379], ["2023-07-07T12:40:00-07:00", -9.707194508984685], ["2023-07-07T12:45:00-07:00", -9.738568214699626], ["2023-07-07T12:50:00-07:00", -9.769865138456225], ["2023-07-07T12:55:00-07:00", -9.801085205748677], ["2023-07-07T13:00:00-07:00", -9.83219313621521], ["2023-07-07T13:05:00-07:00", -9.863291686400771], ["2023-07-07T13:10:00-07:00", -9.89439057186246], ["2023-07-07T13:15:00-07:00", -9.925489824265242], ["2023-07-07T13:20:00-07:00", -9.956589525565505], ["2023-07-07T13:25:00-07:00", -9.988023461773992], ["2023-07-07T13:30:00-07:00", -10.024888763204217], ["2023-07-07T13:35:00-07:00", -10.061400884762406], ["2023-07-07T13:40:00-07:00", -10.097913471981883], ["2023-07-07T13:45:00-07:00", -10.134426528587937], ["2023-07-07T13:50:00-07:00", -10.170940021052957], ["2023-07-07T13:55:00-07:00", -10.20745394565165], ["2023-07-07T14:00:00-07:00", -10.24390877224505], ["2023-07-07T14:05:00-07:00", -10.280364053323865], ["2023-07-07T14:10:00-07:00", -10.316819781437516], ["2023-07-07T14:15:00-07:00", -10.353276008740067], ["2023-07-07T14:20:00-07:00", -10.389732701703906], ["2023-07-07T14:25:00-07:00", -10.426189808174968], ["2023-07-07T14:30:00-07:00", -10.4626474250108], ["2023-07-07T14:35:00-07:00", -10.49910550750792], ["2023-07-07T14:40:00-07:00", -10.535564070567489], ["2023-07-07T14:45:00-07:00", -10.57202316634357], ["2023-07-07T14:50:00-07:00", -10.608482683077455], ["2023-07-07T14:55:00-07:00", -10.644942646846175], ["2023-07-07T15:00:00-07:00", -10.681349711492658], ["2023-07-07T15:05:00-07:00", -10.717757241800427], ["2023-07-07T15:10:00-07:00", -10.754165293648839], ["2023-07-07T15:15:00-07:00", -10.790573788806796], ["2023-07-07T15:20:00-07:00", -10.832376411184669], ["2023-07-07T15:25:00-07:00", -10.874179476872087], ["2023-07-07T15:30:00-07:00", -10.915983000770211], ["2023-07-07T15:35:00-07:00", -10.957787053659558], ["2023-07-07T15:40:00-07:00", -10.999591624364257], ["2023-07-07T15:45:00-07:00", -11.041396653279662], ["2023-07-07T15:50:00-07:00", -11.083202166482806], ["2023-07-07T15:55:00-07:00", -11.125008111819625], ["2023-07-07T16:00:00-07:00", -11.166763106361032], ["2023-07-07T16:05:00-07:00", -11.208443203940988], ["2023-07-07T16:10:00-07:00", -11.250120157375932], ["2023-07-07T16:15:00-07:00", -11.2971778716892], ["2023-07-07T16:20:00-07:00", -11.34961631335318], ["2023-07-07T16:25:00-07:00", -11.39667053706944], ["2023-07-07T16:30:00-07:00", -11.443723013624549], ["2023-07-07T16:35:00-07:00", -11.490773739293218], ["2023-07-07T16:40:00-07:00", -11.543205192312598], ["2023-07-07T16:45:00-07:00", -11.595634898170829], ["2023-07-07T16:50:00-07:00", -11.64806285686791], ["2023-07-07T16:55:00-07:00", -11.70048906467855], ["2023-07-07T17:00:00-07:00", -11.752844763919711], ["2023-07-07T17:05:00-07:00", -11.80432946421206], ["2023-07-07T17:10:00-07:00", -11.855815621092916], ["2023-07-07T17:15:00-07:00", -11.907303536310792], ["2023-07-07T17:20:00-07:00", -11.95879321359098], ["2023-07-07T17:25:00-07:00", -12.010284652933478], ["2023-07-07T17:30:00-07:00", -12.061777854338288], ["2023-07-07T17:35:00-07:00", -12.11327281780541], ["2023-07-07T17:40:00-07:00", -12.164769543334842], ["2023-07-07T17:45:00-07:00", -12.216268030926585], ["2023-07-07T17:50:00-07:00", -12.26776828058064], ["2023-07-07T17:55:00-07:00", -12.319270292297006], ["2023-07-07T18:00:00-07:00", -12.37073883600533], ["2023-07-07T18:05:00-07:00", -12.42220856808126], ["2023-07-07T18:10:00-07:00", -12.479049762710929], ["2023-07-07T18:15:00-07:00", -12.541262267157435], ["2023-07-07T18:20:00-07:00", -12.603474779054523], ["2023-07-07T18:25:00-07:00", -12.6656872946769], ["2023-07-07T18:30:00-07:00", -12.727899817749858], ["2023-07-07T18:35:00-07:00", -12.790112348273396], ["2023-07-07T18:40:00-07:00", -12.852324886247516], ["2023-07-07T18:45:00-07:00", -12.914537431672215], ["2023-07-07T18:50:00-07:00", -12.976749984547496], ["2023-07-07T18:55:00-07:00", -13.04946700297296], ["2023-07-07T19:00:00-07:00", -13.117060540243983], ["2023-07-07T19:05:00-07:00", -13.13589852117002], ["2023-07-07T19:10:00-07:00", -13.154737075790763], ["2023-07-07T19:15:00-07:00", -13.173576204106212], ["2023-07-07T19:20:00-07:00", -13.192415907979012], ["2023-07-07T19:25:00-07:00", -13.211256185546517], ["2023-07-07T19:30:00-07:00", -13.230097038671374], ["2023-07-07T19:35:00-07:00", -13.248938465490937], ["2023-07-07T19:40:00-07:00", -13.267780466005206], ["2023-07-07T19:45:00-07:00", -13.286623042076826], ["2023-07-07T19:50:00-07:00", -13.305466191843152], ["2023-07-07T19:55:00-07:00", -13.324309917166829], ["2023-07-07T20:00:00-07:00", -13.34315275773406], ["2023-07-07T20:05:00-07:00", -13.361996747553349], ["2023-07-07T20:10:00-07:00", -13.380841886624694], ["2023-07-07T20:15:00-07:00", -13.399688174948096], ["2023-07-07T20:20:00-07:00", -13.418535612523556], ["2023-07-07T20:25:00-07:00", -13.437384199351072], ["2023-07-07T20:30:00-07:00", -13.456233933568], ["2023-07-07T20:35:00-07:00", -13.475084817036986], ["2023-07-07T20:40:00-07:00", -13.493936849758029], ["2023-07-07T20:45:00-07:00", -13.512790031731129], ["2023-07-07T20:50:00-07:00", -13.531644362956285], ["2023-07-07T20:55:00-07:00", -13.5504998434335], ["2023-07-07T21:00:00-07:00", -13.569361982867122], ["2023-07-07T21:05:00-07:00", -13.588224122300744], ["2023-07-07T21:10:00-07:00", -13.607086261734366], ["2023-07-07T21:15:00-07:00", -13.625948401167989], ["2023-07-07T21:20:00-07:00", -13.644810540601611], ["2023-07-07T21:25:00-07:00", -13.663672680035233], ["2023-07-07T21:30:00-07:00", -13.682534819468856], ["2023-07-07T21:35:00-07:00", -13.701396958902478], ["2023-07-07T21:40:00-07:00", -13.7202590983361], ["2023-07-07T21:45:00-07:00", -13.739121237769723], ["2023-07-07T21:50:00-07:00", -13.757983377203345], ["2023-07-07T21:55:00-07:00", -13.776845516636968], ["2023-07-07T22:00:00-07:00", -13.795713847503066], ["2023-07-07T22:05:00-07:00", -13.814582178369164], ["2023-07-07T22:10:00-07:00", -13.833450509235263], ["2023-07-07T22:15:00-07:00", -13.852318840101361], ["2023-07-07T22:20:00-07:00", -13.87118717096746], ["2023-07-07T22:25:00-07:00", -13.890055501833558], ["2023-07-07T22:30:00-07:00", -13.908923832699656], ["2023-07-07T22:35:00-07:00", -13.927792163565755], ["2023-07-07T22:40:00-07:00", -13.946660494431853], ["2023-07-07T22:45:00-07:00", -13.965528825297952], ["2023-07-07T22:50:00-07:00", -13.98439715616405], ["2023-07-07T22:55:00-07:00", -14.003277007490396], ["2023-07-07T23:00:00-07:00", -14.022204961627722], ["2023-07-07T23:05:00-07:00", -14.041133489459753], ["2023-07-07T23:10:00-07:00", -14.06006259098649], ["2023-07-07T23:15:00-07:00", -14.078992264345288], ["2023-07-07T23:20:00-07:00", -14.097922511398792], ["2023-07-07T23:25:00-07:00", -14.116853330284357], ["2023-07-07T23:30:00-07:00", -14.135784722864628], ["2023-07-07T23:35:00-07:00", -14.154716689139605], ["2023-07-07T23:40:00-07:00", -14.173649227246642], ["2023-07-07T23:45:00-07:00", -14.192582339048386], ["2023-07-07T23:50:00-07:00", -14.211516024544835], ["2023-07-07T23:55:00-07:00", -14.230450281873345], ["2023-07-08T00:00:00-07:00", -14.249519739300013], ["2023-07-08T00:05:00-07:00", -14.26858919672668], ["2023-07-08T00:10:00-07:00", -14.287658654153347], ["2023-07-08T00:15:00-07:00", -14.306728111580014], ["2023-07-08T00:20:00-07:00", -14.325797569006681], ["2023-07-08T00:25:00-07:00", -14.344867026433349], ["2023-07-08T00:30:00-07:00", -14.363936483860016], ["2023-07-08T00:35:00-07:00", -14.383005941286683], ["2023-07-08T00:40:00-07:00", -14.40207539871335], ["2023-07-08T00:45:00-07:00", -14.421144856140018], ["2023-07-08T00:50:00-07:00", -14.440214313566685], ["2023-07-08T00:55:00-07:00", -14.459283770993352], ["2023-07-08T01:00:00-07:00", -14.478504413738847], ["2023-07-08T01:05:00-07:00", -14.497725056484342], ["2023-07-08T01:10:00-07:00", -14.516945699229836], ["2023-07-08T01:15:00-07:00", -14.536166341975331], ["2023-07-08T01:20:00-07:00", -14.555386984720826], ["2023-07-08T01:25:00-07:00", -14.574607627466321], ["2023-07-08T01:30:00-07:00", -14.593828270211816], ["2023-07-08T01:35:00-07:00", -14.61304891295731], ["2023-07-08T01:40:00-07:00", -14.632269555702806], ["2023-07-08T01:45:00-07:00", -14.6514901984483], ["2023-07-08T01:50:00-07:00", -14.670710841193795], ["2023-07-08T01:55:00-07:00", -14.68993148393929], ["2023-07-08T02:00:00-07:00", -14.709211090579629], ["2023-07-08T02:05:00-07:00", -14.728491261601448], ["2023-07-08T02:10:00-07:00", -14.747771997004747], ["2023-07-08T02:15:00-07:00", -14.767053296789527], ["2023-07-08T02:20:00-07:00", -14.786335160955787], ["2023-07-08T02:25:00-07:00", -14.805617589503527], ["2023-07-08T02:30:00-07:00", -14.824900582432747], ["2023-07-08T02:35:00-07:00", -14.844184139743447], ["2023-07-08T02:40:00-07:00", -14.863468261435628], ["2023-07-08T02:45:00-07:00", -14.882752947509289], ["2023-07-08T02:50:00-07:00", -14.90203819796443], ["2023-07-08T02:55:00-07:00", -14.921324012801051], ["2023-07-08T03:00:00-07:00", -14.94062870554626], ["2023-07-08T03:05:00-07:00", -14.959933398291469], ["2023-07-08T03:10:00-07:00", -14.979238091036677], ["2023-07-08T03:15:00-07:00", -14.998542783781886], ["2023-07-08T03:20:00-07:00", -15.017847476527095], ["2023-07-08T03:25:00-07:00", -15.037152169272304], ["2023-07-08T03:30:00-07:00", -15.056456862017512], ["2023-07-08T03:35:00-07:00", -15.075761554762721], ["2023-07-08T03:40:00-07:00", -15.09506624750793], ["2023-07-08T03:45:00-07:00", -15.114370940253139], ["2023-07-08T03:50:00-07:00", -15.133675632998347], ["2023-07-08T03:55:00-07:00", -15.152980325743556], ["2023-07-08T04:00:00-07:00", -15.172296961769462], ["2023-07-08T04:05:00-07:00", -15.191613597795367], ["2023-07-08T04:10:00-07:00", -15.210930233821273], ["2023-07-08T04:15:00-07:00", -15.230246869847178], ["2023-07-08T04:20:00-07:00", -15.249563505873084], ["2023-07-08T04:25:00-07:00", -15.26888014189899], ["2023-07-08T04:30:00-07:00", -15.288196777924895], ["2023-07-08T04:35:00-07:00", -15.307513413950801], ["2023-07-08T04:40:00-07:00", -15.326830049976707], ["2023-07-08T04:45:00-07:00", -15.346146686002612], ["2023-07-08T04:50:00-07:00", -15.365463322028518], ["2023-07-08T04:55:00-07:00", -15.384779958054423], ["2023-07-08T05:00:00-07:00", -15.404121236875653], ["2023-07-08T05:05:00-07:00", -15.423463080078363], ["2023-07-08T05:10:00-07:00", -15.442805485799909], ["2023-07-08T05:15:00-07:00", -15.462148454040289], ["2023-07-08T05:20:00-07:00", -15.481491984799504], ["2023-07-08T05:25:00-07:00", -15.500836078077555], ["2023-07-08T05:30:00-07:00", -15.520180735737085], ["2023-07-08T05:35:00-07:00", -15.539525955915451], ["2023-07-08T05:40:00-07:00", -15.558871738612652], ["2023-07-08T05:45:00-07:00", -15.578218083828688], ["2023-07-08T05:50:00-07:00", -15.597564991563559], ["2023-07-08T05:55:00-07:00", -15.61691246367991], ["2023-07-08T06:00:00-07:00", -15.636286150664091], ["2023-07-08T06:05:00-07:00", -15.655659276992083], ["2023-07-08T06:10:00-07:00", -15.680251194164157], ["2023-07-08T06:15:00-07:00", -15.704774759709835], ["2023-07-08T06:20:00-07:00", -15.729229971766472], ["2023-07-08T06:25:00-07:00", -15.753616727888584], ["2023-07-08T06:30:00-07:00", -15.777935095131397], ["2023-07-08T06:35:00-07:00", -15.802185034379363], ["2023-07-08T06:40:00-07:00", -15.826366659253836], ["2023-07-08T06:45:00-07:00", -15.85047983750701], ["2023-07-08T06:50:00-07:00", -15.874524597078562], ["2023-07-08T06:55:00-07:00", -15.898500910028815], ["2023-07-08T07:00:00-07:00", -15.922434341162443], ["2023-07-08T07:05:00-07:00", -15.946239115670323], ["2023-07-08T07:10:00-07:00", -15.969906587153673], ["2023-07-08T07:15:00-07:00", -15.993436641991138], ["2023-07-08T07:20:00-07:00", -16.01677294820547], ["2023-07-08T07:25:00-07:00", -16.039971781894565], ["2023-07-08T07:30:00-07:00", -16.063033198937774], ["2023-07-08T07:35:00-07:00", -16.085957154631615], ["2023-07-08T07:40:00-07:00", -16.108743600547314], ["2023-07-08T07:45:00-07:00", -16.131392508745193], ["2023-07-08T07:50:00-07:00", -16.153903944417834], ["2023-07-08T07:55:00-07:00", -16.176277935504913], ["2023-07-08T08:00:00-07:00", -16.1985348071903], ["2023-07-08T08:05:00-07:00", -16.220714457333088], ["2023-07-08T08:10:00-07:00", -16.242825493216515], ["2023-07-08T08:15:00-07:00", -16.264867898076773], ["2023-07-08T08:20:00-07:00", -16.286841737106442], ["2023-07-08T08:25:00-07:00", -16.308746991679072], ["2023-07-08T08:30:00-07:00", -16.330583671107888], ["2023-07-08T08:35:00-07:00", -16.352351831272244], ["2023-07-08T08:40:00-07:00", -16.374051474034786], ["2023-07-08T08:45:00-07:00", -16.395682523027062], ["2023-07-08T08:50:00-07:00", -16.417244985699654], ["2023-07-08T08:55:00-07:00", -16.43873887322843], ["2023-07-08T09:00:00-07:00", -16.46007688716054], ["2023-07-08T09:05:00-07:00", -16.481406655162573], ["2023-07-08T09:10:00-07:00", -16.502736872062087], ["2023-07-08T09:15:00-07:00", -16.524067563936114], ["2023-07-08T09:20:00-07:00", -16.545398684218526], ["2023-07-08T09:25:00-07:00", -16.566730309277773], ["2023-07-08T09:30:00-07:00", -16.588062399998307], ["2023-07-08T09:35:00-07:00", -16.609394939616323], ["2023-07-08T09:40:00-07:00", -16.630727963522077], ["2023-07-08T09:45:00-07:00", -16.65206147171557], ["2023-07-08T09:50:00-07:00", -16.67339545674622], ["2023-07-08T09:55:00-07:00", -16.69472990743816], ["2023-07-08T10:00:00-07:00", -16.7158977817744], ["2023-07-08T10:05:00-07:00", -16.73700660839677], ["2023-07-08T10:10:00-07:00", -16.75804782100022], ["2023-07-08T10:15:00-07:00", -16.779021373018622], ["2023-07-08T10:20:00-07:00", -16.79992724582553], ["2023-07-08T10:25:00-07:00", -16.820765357464552], ["2023-07-08T10:30:00-07:00", -16.841535789892077], ["2023-07-08T10:35:00-07:00", -16.86223853379488], ["2023-07-08T10:40:00-07:00", -16.882873570546508], ["2023-07-08T10:45:00-07:00", -16.903440974652767], ["2023-07-08T10:50:00-07:00", -16.92394069209695], ["2023-07-08T10:55:00-07:00", -16.944372655823827], ["2023-07-08T11:00:00-07:00", -16.964624598622322], ["2023-07-08T11:05:00-07:00", -16.984809262678027], ["2023-07-08T11:10:00-07:00", -17.0049265101552], ["2023-07-08T11:15:00-07:00", -17.024976413697004], ["2023-07-08T11:20:00-07:00", -17.044958900660276], ["2023-07-08T11:25:00-07:00", -17.06487406231463], ["2023-07-08T11:30:00-07:00", -17.08472190052271], ["2023-07-08T11:35:00-07:00", -17.104502394795418], ["2023-07-08T11:40:00-07:00", -17.124215554445982], ["2023-07-08T11:45:00-07:00", -17.143861344084144], ["2023-07-08T11:50:00-07:00", -17.163439752534032], ["2023-07-08T11:55:00-07:00", -17.182950790971518], ["2023-07-08T12:00:00-07:00", -17.202359521761537], ["2023-07-08T12:05:00-07:00", -17.22170103341341], ["2023-07-08T12:10:00-07:00", -17.240975281223655], ["2023-07-08T12:15:00-07:00", -17.260207833722234], ["2023-07-08T12:20:00-07:00", -17.279439814388752], ["2023-07-08T12:25:00-07:00", -17.298671225085855], ["2023-07-08T12:30:00-07:00", -17.31790206581354], ["2023-07-08T12:35:00-07:00", -17.337132334709167], ["2023-07-08T12:40:00-07:00", -17.356362033635378], ["2023-07-08T12:45:00-07:00", -17.375591160729527], ["2023-07-08T12:50:00-07:00", -17.39481971785426], ["2023-07-08T12:55:00-07:00", -17.414047703146935], ["2023-07-08T13:00:00-07:00", -17.4332522097975], ["2023-07-08T13:05:00-07:00", -17.452456146478653], ["2023-07-08T13:10:00-07:00", -17.471659511327744], ["2023-07-08T13:15:00-07:00", -17.490862304344773], ["2023-07-08T13:20:00-07:00", -17.510064525529742], ["2023-07-08T13:25:00-07:00", -17.529266176745296], ["2023-07-08T13:30:00-07:00", -17.548467256128788], ["2023-07-08T13:35:00-07:00", -17.56766776368022], ["2023-07-08T13:40:00-07:00", -17.586867701262236], ["2023-07-08T13:45:00-07:00", -17.60606706701219], ["2023-07-08T13:50:00-07:00", -17.625265860930085], ["2023-07-08T13:55:00-07:00", -17.64446408301592], ["2023-07-08T14:00:00-07:00", -17.66362927109003], ["2023-07-08T14:05:00-07:00", -17.682794459164143], ["2023-07-08T14:10:00-07:00", -17.701959647238255], ["2023-07-08T14:15:00-07:00", -17.721124835312366], ["2023-07-08T14:20:00-07:00", -17.74029002338648], ["2023-07-08T14:25:00-07:00", -17.75945521146059], ["2023-07-08T14:30:00-07:00", -17.778620399534702], ["2023-07-08T14:35:00-07:00", -17.797785587608814], ["2023-07-08T14:40:00-07:00", -17.816950775682926], ["2023-07-08T14:45:00-07:00", -17.836115963757038], ["2023-07-08T14:50:00-07:00", -17.85528115183115], ["2023-07-08T14:55:00-07:00", -17.874446339905262], ["2023-07-08T15:00:00-07:00", -17.89358241856098], ["2023-07-08T15:05:00-07:00", -17.9127184972167], ["2023-07-08T15:10:00-07:00", -17.93185457587242], ["2023-07-08T15:15:00-07:00", -17.95099065452814], ["2023-07-08T15:20:00-07:00", -17.97012673318386], ["2023-07-08T15:25:00-07:00", -17.98926281183958], ["2023-07-08T15:30:00-07:00", -18.0083988904953], ["2023-07-08T15:35:00-07:00", -18.02753496915102], ["2023-07-08T15:40:00-07:00", -18.04667104780674], ["2023-07-08T15:45:00-07:00", -18.06580712646246], ["2023-07-08T15:50:00-07:00", -18.08494320511818], ["2023-07-08T15:55:00-07:00", -18.1040792837739], ["2023-07-08T16:00:00-07:00", -18.12319122068584], ["2023-07-08T16:05:00-07:00", -18.142303731292486], ["2023-07-08T16:10:00-07:00", -18.16141681559384], ["2023-07-08T16:15:00-07:00", -18.180530473589897], ["2023-07-08T16:20:00-07:00", -18.19964470528066], ["2023-07-08T16:25:00-07:00", -18.218759510666132], ["2023-07-08T16:30:00-07:00", -18.23787488974631], ["2023-07-08T16:35:00-07:00", -18.25699084252119], ["2023-07-08T16:40:00-07:00", -18.27610736899078], ["2023-07-08T16:45:00-07:00", -18.295224469155073], ["2023-07-08T16:50:00-07:00", -18.314342143014073], ["2023-07-08T16:55:00-07:00", -18.33346039056778], ["2023-07-08T17:00:00-07:00", -18.352553844451904], ["2023-07-08T17:05:00-07:00", -18.371395194903016], ["2023-07-08T17:10:00-07:00", -18.390237119048834], ["2023-07-08T17:15:00-07:00", -18.409079618752003], ["2023-07-08T17:20:00-07:00", -18.427922692149878], ["2023-07-08T17:25:00-07:00", -18.44676633924246], ["2023-07-08T17:30:00-07:00", -18.46561056189239], ["2023-07-08T17:35:00-07:00", -18.484455358237028], ["2023-07-08T17:40:00-07:00", -18.503300728276372], ["2023-07-08T17:45:00-07:00", -18.52214667201042], ["2023-07-08T17:50:00-07:00", -18.540993191301823], ["2023-07-08T17:55:00-07:00", -18.55984028428793], ["2023-07-08T18:00:00-07:00", -18.578674994409084], ["2023-07-08T18:05:00-07:00", -18.597510853782296], ["2023-07-08T18:10:00-07:00", -18.616347862407565], ["2023-07-08T18:15:00-07:00", -18.635186018422246], ["2023-07-08T18:20:00-07:00", -18.654025323688984], ["2023-07-08T18:25:00-07:00", -18.67286577820778], ["2023-07-08T18:30:00-07:00", -18.69170738197863], ["2023-07-08T18:35:00-07:00", -18.71055013500154], ["2023-07-08T18:40:00-07:00", -18.729394037276506], ["2023-07-08T18:45:00-07:00", -18.74823908880353], ["2023-07-08T18:50:00-07:00", -18.76708528958261], ["2023-07-08T18:55:00-07:00", -18.785932639613748], ["2023-07-08T19:00:00-07:00", -18.804783832281828], ["2023-07-08T19:05:00-07:00", -18.823635598644614], ["2023-07-08T19:10:00-07:00", -18.84248794056475], ["2023-07-08T19:15:00-07:00", -18.861340856179595], ["2023-07-08T19:20:00-07:00", -18.88019434735179], ["2023-07-08T19:25:00-07:00", -18.89904841221869], ["2023-07-08T19:30:00-07:00", -18.917903050780296], ["2023-07-08T19:35:00-07:00", -18.936758264899254], ["2023-07-08T19:40:00-07:00", -18.955614052712917], ["2023-07-08T19:45:00-07:00", -18.974470416083932], ["2023-07-08T19:50:00-07:00", -18.993327353149652], ["2023-07-08T19:55:00-07:00", -19.01218486391008], ["2023-07-08T20:00:00-07:00", -19.031041491776705], ["2023-07-08T20:05:00-07:00", -19.04989869520068], ["2023-07-08T20:10:00-07:00", -19.068756472319365], ["2023-07-08T20:15:00-07:00", -19.0876148249954], ["2023-07-08T20:20:00-07:00", -19.10647375136614], ["2023-07-08T20:25:00-07:00", -19.12533325329423], ["2023-07-08T20:30:00-07:00", -19.144193328917027], ["2023-07-08T20:35:00-07:00", -19.16305397823453], ["2023-07-08T20:40:00-07:00", -19.181915203109384], ["2023-07-08T20:45:00-07:00", -19.200777001678944], ["2023-07-08T20:50:00-07:00", -19.219639375805855], ["2023-07-08T20:55:00-07:00", -19.238502323627472], ["2023-07-08T21:00:00-07:00", -19.257371354848146], ["2023-07-08T21:05:00-07:00", -19.276240961626172], ["2023-07-08T21:10:00-07:00", -19.295111142098904], ["2023-07-08T21:15:00-07:00", -19.31398189626634], ["2023-07-08T21:20:00-07:00", -19.33285322599113], ["2023-07-08T21:25:00-07:00", -19.351725129410625], ["2023-07-08T21:30:00-07:00", -19.370597606524825], ["2023-07-08T21:35:00-07:00", -19.389470659196377], ["2023-07-08T21:40:00-07:00", -19.408344285562634], ["2023-07-08T21:45:00-07:00", -19.427218485623598], ["2023-07-08T21:50:00-07:00", -19.446093261241913], ["2023-07-08T21:55:00-07:00", -19.464968610554934], ["2023-07-08T22:00:00-07:00", -19.48385072313249], ["2023-07-08T22:05:00-07:00", -19.50273283571005], ["2023-07-08T22:10:00-07:00", -19.521614948287606], ["2023-07-08T22:15:00-07:00", -19.540497060865164], ["2023-07-08T22:20:00-07:00", -19.55937917344272], ["2023-07-08T22:25:00-07:00", -19.57826128602028], ["2023-07-08T22:30:00-07:00", -19.597143398597836], ["2023-07-08T22:35:00-07:00", -19.616025511175394], ["2023-07-08T22:40:00-07:00", -19.63490762375295], ["2023-07-08T22:45:00-07:00", -19.65378973633051], ["2023-07-08T22:50:00-07:00", -19.672671848908067], ["2023-07-08T22:55:00-07:00", -19.691565480083227], ["2023-07-08T23:00:00-07:00", -19.71050718612969], ["2023-07-08T23:05:00-07:00", -19.72944889217615], ["2023-07-08T23:10:00-07:00", -19.748390598222613], ["2023-07-08T23:15:00-07:00", -19.767332304269075], ["2023-07-08T23:20:00-07:00", -19.786274010315537], ["2023-07-08T23:25:00-07:00", -19.805215716362], ["2023-07-08T23:30:00-07:00", -19.82415742240846], ["2023-07-08T23:35:00-07:00", -19.843099128454924], ["2023-07-08T23:40:00-07:00", -19.862040834501386], ["2023-07-08T23:45:00-07:00", -19.880982540547848], ["2023-07-08T23:50:00-07:00", -19.89992424659431], ["2023-07-08T23:55:00-07:00", -19.918865952640772], ["2023-07-09T00:00:00-07:00", -19.937942245975137], ["2023-07-09T00:05:00-07:00", -19.9570185393095], ["2023-07-09T00:10:00-07:00", -19.976094832643867], ["2023-07-09T00:15:00-07:00", -19.99517112597823], ["2023-07-09T00:20:00-07:00", -20.014247419312596], ["2023-07-09T00:25:00-07:00", -20.03332371264696], ["2023-07-09T00:30:00-07:00", -20.052400005981326], ["2023-07-09T00:35:00-07:00", -20.07147629931569], ["2023-07-09T00:40:00-07:00", -20.090552592650056], ["2023-07-09T00:45:00-07:00", -20.10962888598442], ["2023-07-09T00:50:00-07:00", -20.128705179318786], ["2023-07-09T00:55:00-07:00", -20.14778147265315], ["2023-07-09T01:00:00-07:00", -20.167008904740214], ["2023-07-09T01:05:00-07:00", -20.186236336827278], ["2023-07-09T01:10:00-07:00", -20.205463768914342], ["2023-07-09T01:15:00-07:00", -20.224691201001406], ["2023-07-09T01:20:00-07:00", -20.24391863308847], ["2023-07-09T01:25:00-07:00", -20.263146065175533], ["2023-07-09T01:30:00-07:00", -20.282373497262597], ["2023-07-09T01:35:00-07:00", -20.30160092934966], ["2023-07-09T01:40:00-07:00", -20.320828361436725], ["2023-07-09T01:45:00-07:00", -20.34005579352379], ["2023-07-09T01:50:00-07:00", -20.359283225610852], ["2023-07-09T01:55:00-07:00", -20.378510657697916], ["2023-07-09T02:00:00-07:00", -20.397797036916018], ["2023-07-09T02:05:00-07:00", -20.41708341613412], ["2023-07-09T02:10:00-07:00", -20.43636979535222], ["2023-07-09T02:15:00-07:00", -20.455656174570322], ["2023-07-09T02:20:00-07:00", -20.474942553788424], ["2023-07-09T02:25:00-07:00", -20.494228933006525], ["2023-07-09T02:30:00-07:00", -20.513515312224627], ["2023-07-09T02:35:00-07:00", -20.532801691442728], ["2023-07-09T02:40:00-07:00", -20.55208807066083], ["2023-07-09T02:45:00-07:00", -20.57137444987893], ["2023-07-09T02:50:00-07:00", -20.590660829097033], ["2023-07-09T02:55:00-07:00", -20.609947208315134], ["2023-07-09T03:00:00-07:00", -20.629251901060343], ["2023-07-09T03:05:00-07:00", -20.64855659380555], ["2023-07-09T03:10:00-07:00", -20.66786128655076], ["2023-07-09T03:15:00-07:00", -20.68716597929597], ["2023-07-09T03:20:00-07:00", -20.706470672041178], ["2023-07-09T03:25:00-07:00", -20.725775364786386], ["2023-07-09T03:30:00-07:00", -20.745080057531595], ["2023-07-09T03:35:00-07:00", -20.764384750276804], ["2023-07-09T03:40:00-07:00", -20.783689443022013], ["2023-07-09T03:45:00-07:00", -20.80299413576722], ["2023-07-09T03:50:00-07:00", -20.82229882851243], ["2023-07-09T03:55:00-07:00", -20.84160352125764], ["2023-07-09T04:00:00-07:00", -20.860920157283545], ["2023-07-09T04:05:00-07:00", -20.88023679330945], ["2023-07-09T04:10:00-07:00", -20.899553429335356], ["2023-07-09T04:15:00-07:00", -20.91887006536126], ["2023-07-09T04:20:00-07:00", -20.938186701387167], ["2023-07-09T04:25:00-07:00", -20.957503337413073], ["2023-07-09T04:30:00-07:00", -20.976819973438978], ["2023-07-09T04:35:00-07:00", -20.996136609464884], ["2023-07-09T04:40:00-07:00", -21.01545324549079], ["2023-07-09T04:45:00-07:00", -21.034769881516695], ["2023-07-09T04:50:00-07:00", -21.0540865175426], ["2023-07-09T04:55:00-07:00", -21.073403153568506], ["2023-07-09T05:00:00-07:00", -21.092744432389736], ["2023-07-09T05:05:00-07:00", -21.112085711210966], ["2023-07-09T05:10:00-07:00", -21.131426990032196], ["2023-07-09T05:15:00-07:00", -21.150768268853426], ["2023-07-09T05:20:00-07:00", -21.170109547674656], ["2023-07-09T05:25:00-07:00", -21.189450826495886], ["2023-07-09T05:30:00-07:00", -21.208792105317116], ["2023-07-09T05:35:00-07:00", -21.228133384138346], ["2023-07-09T05:40:00-07:00", -21.247474662959576], ["2023-07-09T05:45:00-07:00", -21.266815941780806], ["2023-07-09T05:50:00-07:00", -21.286157220602036], ["2023-07-09T05:55:00-07:00", -21.305498499423265], ["2023-07-09T06:00:00-07:00", -21.324865439906716], ["2023-07-09T06:05:00-07:00", -21.344232380390167], ["2023-07-09T06:10:00-07:00", -21.363599320873618], ["2023-07-09T06:15:00-07:00", -21.38296626135707], ["2023-07-09T06:20:00-07:00", -21.40233320184052], ["2023-07-09T06:25:00-07:00", -21.42170014232397], ["2023-07-09T06:30:00-07:00", -21.44106708280742], ["2023-07-09T06:35:00-07:00", -21.460434023290873], ["2023-07-09T06:40:00-07:00", -21.479800963774323], ["2023-07-09T06:45:00-07:00", -21.499167904257774], ["2023-07-09T06:50:00-07:00", -21.518534844741225], ["2023-07-09T06:55:00-07:00", -21.537901785224676], ["2023-07-09T07:00:00-07:00", -21.557289768010378], ["2023-07-09T07:05:00-07:00", -21.57667719013989], ["2023-07-09T07:10:00-07:00", -21.596064049750566], ["2023-07-09T07:15:00-07:00", -21.615450346842408], ["2023-07-09T07:20:00-07:00", -21.63483608327806], ["2023-07-09T07:25:00-07:00", -21.654221257194877], ["2023-07-09T07:30:00-07:00", -21.673605870455503], ["2023-07-09T07:35:00-07:00", -21.692989921197295], ["2023-07-09T07:40:00-07:00", -21.712373411282897], ["2023-07-09T07:45:00-07:00", -21.731756338849664], ["2023-07-09T07:50:00-07:00", -21.751138703897595], ["2023-07-09T07:55:00-07:00", -21.770520508289337], ["2023-07-09T08:00:00-07:00", -21.789919747039676], ["2023-07-09T08:05:00-07:00", -21.809318425133824], ["2023-07-09T08:10:00-07:00", -21.828716542571783], ["2023-07-09T08:15:00-07:00", -21.848114097490907], ["2023-07-09T08:20:00-07:00", -21.86751109175384], ["2023-07-09T08:25:00-07:00", -21.886907525360584], ["2023-07-09T08:30:00-07:00", -21.906303396448493], ["2023-07-09T08:35:00-07:00", -21.925698706880212], ["2023-07-09T08:40:00-07:00", -21.94509345665574], ["2023-07-09T08:45:00-07:00", -21.964487643912435], ["2023-07-09T08:50:00-07:00", -21.98388127051294], ["2023-07-09T08:55:00-07:00", -22.003274336457253], ["2023-07-09T09:00:00-07:00", -22.022586315870285], ["2023-07-09T09:05:00-07:00", -22.041897732764482], ["2023-07-09T09:10:00-07:00", -22.061208587139845], ["2023-07-09T09:15:00-07:00", -22.080518877133727], ["2023-07-09T09:20:00-07:00", -22.099828604608774], ["2023-07-09T09:25:00-07:00", -22.11913776770234], ["2023-07-09T09:30:00-07:00", -22.138446368277073], ["2023-07-09T09:35:00-07:00", -22.15775440633297], ["2023-07-09T09:40:00-07:00", -22.177061880007386], ["2023-07-09T09:45:00-07:00", -22.196368791162968], ["2023-07-09T09:50:00-07:00", -22.21567513793707], ["2023-07-09T09:55:00-07:00", -22.234980922192335], ["2023-07-09T10:00:00-07:00", -22.25413198210299], ["2023-07-09T10:05:00-07:00", -22.27328247576952], ["2023-07-09T10:10:00-07:00", -22.29243240132928], ["2023-07-09T10:15:00-07:00", -22.311581760644913], ["2023-07-09T10:20:00-07:00", -22.330730551853776], ["2023-07-09T10:25:00-07:00", -22.349878776818514], ["2023-07-09T10:30:00-07:00", -22.36902643367648], ["2023-07-09T10:35:00-07:00", -22.388173524290323], ["2023-07-09T10:40:00-07:00", -22.407320046797395], ["2023-07-09T10:45:00-07:00", -22.42646600306034], ["2023-07-09T10:50:00-07:00", -22.445611391216516], ["2023-07-09T10:55:00-07:00", -22.464756213128567], ["2023-07-09T11:00:00-07:00", -22.48379262536764], ["2023-07-09T11:05:00-07:00", -22.502829037606716], ["2023-07-09T11:10:00-07:00", -22.52186544984579], ["2023-07-09T11:15:00-07:00", -22.540901862084866], ["2023-07-09T11:20:00-07:00", -22.55993827432394], ["2023-07-09T11:25:00-07:00", -22.578974686563015], ["2023-07-09T11:30:00-07:00", -22.59801109880209], ["2023-07-09T11:35:00-07:00", -22.617047511041164], ["2023-07-09T11:40:00-07:00", -22.63608392328024], ["2023-07-09T11:45:00-07:00", -22.655120335519314], ["2023-07-09T11:50:00-07:00", -22.67415674775839], ["2023-07-09T11:55:00-07:00", -22.693193159997463], ["2023-07-09T12:00:00-07:00", -22.712194548919797], ["2023-07-09T12:05:00-07:00", -22.73119536601007], ["2023-07-09T12:10:00-07:00", -22.750195613130927], ["2023-07-09T12:15:00-07:00", -22.769195288419724], ["2023-07-09T12:20:00-07:00", -22.788194393739104], ["2023-07-09T12:25:00-07:00", -22.807192927226424], ["2023-07-09T12:30:00-07:00", -22.82619089074433], ["2023-07-09T12:35:00-07:00", -22.845188284292817], ["2023-07-09T12:40:00-07:00", -22.864185106009245], ["2023-07-09T12:45:00-07:00", -22.883181357756257], ["2023-07-09T12:50:00-07:00", -22.90217703767121], ["2023-07-09T12:55:00-07:00", -22.921172147616744], ["2023-07-09T13:00:00-07:00", -22.940143540501595], ["2023-07-09T13:05:00-07:00", -22.959114933386445], ["2023-07-09T13:10:00-07:00", -22.978086326271296], ["2023-07-09T13:15:00-07:00", -22.997057719156146], ["2023-07-09T13:20:00-07:00", -23.016029112040997], ["2023-07-09T13:25:00-07:00", -23.035000504925847], ["2023-07-09T13:30:00-07:00", -23.053971897810698], ["2023-07-09T13:35:00-07:00", -23.072943290695548], ["2023-07-09T13:40:00-07:00", -23.0919146835804], ["2023-07-09T13:45:00-07:00", -23.11088607646525], ["2023-07-09T13:50:00-07:00", -23.1298574693501], ["2023-07-09T13:55:00-07:00", -23.14882886223495], ["2023-07-09T14:00:00-07:00", -23.167767465114594], ["2023-07-09T14:05:00-07:00", -23.186705496162176], ["2023-07-09T14:10:00-07:00", -23.205642955377698], ["2023-07-09T14:15:00-07:00", -23.22457984276116], ["2023-07-09T14:20:00-07:00", -23.243516156449914], ["2023-07-09T14:25:00-07:00", -23.262451898306608], ["2023-07-09T14:30:00-07:00", -23.28138706833124], ["2023-07-09T14:35:00-07:00", -23.300321666523814], ["2023-07-09T14:40:00-07:00", -23.319255692884326], ["2023-07-09T14:45:00-07:00", -23.338189145550132], ["2023-07-09T14:50:00-07:00", -23.357122026383877], ["2023-07-09T14:55:00-07:00", -23.37605433538556], ["2023-07-09T15:00:00-07:00", -23.394956659525633], ["2023-07-09T15:05:00-07:00", -23.413858983665705], ["2023-07-09T15:10:00-07:00", -23.432761307805777], ["2023-07-09T15:15:00-07:00", -23.45166363194585], ["2023-07-09T15:20:00-07:00", -23.47056595608592], ["2023-07-09T15:25:00-07:00", -23.489468280225992], ["2023-07-09T15:30:00-07:00", -23.508370604366064], ["2023-07-09T15:35:00-07:00", -23.527272928506136], ["2023-07-09T15:40:00-07:00", -23.546175252646208], ["2023-07-09T15:45:00-07:00", -23.56507757678628], ["2023-07-09T15:50:00-07:00", -23.58397990092635], ["2023-07-09T15:55:00-07:00", -23.602882225066423], ["2023-07-09T16:00:00-07:00", -23.621760157868266], ["2023-07-09T16:05:00-07:00", -23.64063809067011], ["2023-07-09T16:10:00-07:00", -23.65951602347195], ["2023-07-09T16:15:00-07:00", -23.678393956273794], ["2023-07-09T16:20:00-07:00", -23.697271889075637], ["2023-07-09T16:25:00-07:00", -23.71614982187748], ["2023-07-09T16:30:00-07:00", -23.735027754679322], ["2023-07-09T16:35:00-07:00", -23.753905687481165], ["2023-07-09T16:40:00-07:00", -23.772783620283008], ["2023-07-09T16:45:00-07:00", -23.79166155308485], ["2023-07-09T16:50:00-07:00", -23.810539485886693], ["2023-07-09T16:55:00-07:00", -23.829417418688536], ["2023-07-09T17:00:00-07:00", -23.848269714042544], ["2023-07-09T17:05:00-07:00", -23.867122009396553], ["2023-07-09T17:10:00-07:00", -23.88597430475056], ["2023-07-09T17:15:00-07:00", -23.90482660010457], ["2023-07-09T17:20:00-07:00", -23.92367889545858], ["2023-07-09T17:25:00-07:00", -23.942531190812588], ["2023-07-09T17:30:00-07:00", -23.961383486166596], ["2023-07-09T17:35:00-07:00", -23.980235781520605], ["2023-07-09T17:40:00-07:00", -23.999088076874614], ["2023-07-09T17:45:00-07:00", -24.017940372228622], ["2023-07-09T17:50:00-07:00", -24.03679266758263], ["2023-07-09T17:55:00-07:00", -24.05564496293664], ["2023-07-09T18:00:00-07:00", -24.074484303593636], ["2023-07-09T18:05:00-07:00", -24.093324219807982], ["2023-07-09T18:10:00-07:00", -24.112164709717035], ["2023-07-09T18:15:00-07:00", -24.13100577518344], ["2023-07-09T18:20:00-07:00", -24.14984741434455], ["2023-07-09T18:25:00-07:00", -24.168689627200365], ["2023-07-09T18:30:00-07:00", -24.187532415613532], ["2023-07-09T18:35:00-07:00", -24.206375777721405], ["2023-07-09T18:40:00-07:00", -24.22521971538663], ["2023-07-09T18:45:00-07:00", -24.24406422674656], ["2023-07-09T18:50:00-07:00", -24.26290931366384], ["2023-07-09T18:55:00-07:00", -24.281754974275827], ["2023-07-09T19:00:00-07:00", -24.30060390383005], ["2023-07-09T19:05:00-07:00", -24.319453408941627], ["2023-07-09T19:10:00-07:00", -24.338303487747908], ["2023-07-09T19:15:00-07:00", -24.357154140248895], ["2023-07-09T19:20:00-07:00", -24.376005368307233], ["2023-07-09T19:25:00-07:00", -24.394857170060277], ["2023-07-09T19:30:00-07:00", -24.413709547370672], ["2023-07-09T19:35:00-07:00", -24.432562498375773], ["2023-07-09T19:40:00-07:00", -24.45141602307558], ["2023-07-09T19:45:00-07:00", -24.47027012333274], ["2023-07-09T19:50:00-07:00", -24.489124797284603], ["2023-07-09T19:55:00-07:00", -24.50798004679382], ["2023-07-09T20:00:00-07:00", -24.526834413409233], ["2023-07-09T20:05:00-07:00", -24.545688780024648], ["2023-07-09T20:10:00-07:00", -24.564543146640062], ["2023-07-09T20:15:00-07:00", -24.583397513255477], ["2023-07-09T20:20:00-07:00", -24.60225187987089], ["2023-07-09T20:25:00-07:00", -24.621106246486306], ["2023-07-09T20:30:00-07:00", -24.63996061310172], ["2023-07-09T20:35:00-07:00", -24.658814979717135], ["2023-07-09T20:40:00-07:00", -24.67766934633255], ["2023-07-09T20:45:00-07:00", -24.696523712947965], ["2023-07-09T20:50:00-07:00", -24.71537807956338], ["2023-07-09T20:55:00-07:00", -24.734232446178794], ["2023-07-09T21:00:00-07:00", -24.753092324361205], ["2023-07-09T21:05:00-07:00", -24.771952776238322], ["2023-07-09T21:10:00-07:00", -24.790813801810145], ["2023-07-09T21:15:00-07:00", -24.80967540293932], ["2023-07-09T21:20:00-07:00", -24.8285375777632], ["2023-07-09T21:25:00-07:00", -24.847400326281786], ["2023-07-09T21:30:00-07:00", -24.866263650357723], ["2023-07-09T21:35:00-07:00", -24.885127548128366], ["2023-07-09T21:40:00-07:00", -24.903992019593716], ["2023-07-09T21:45:00-07:00", -24.922857066616416], ["2023-07-09T21:50:00-07:00", -24.941722687333822], ["2023-07-09T21:55:00-07:00", -24.960588881745934], ["2023-07-09T22:00:00-07:00", -24.97946184128523], ["2023-07-09T22:05:00-07:00", -24.998334800824523], ["2023-07-09T22:10:00-07:00", -25.017207760363817], ["2023-07-09T22:15:00-07:00", -25.03608071990311], ["2023-07-09T22:20:00-07:00", -25.054953679442406], ["2023-07-09T22:25:00-07:00", -25.0738266389817], ["2023-07-09T22:30:00-07:00", -25.092699598520994], ["2023-07-09T22:35:00-07:00", -25.11157255806029], ["2023-07-09T22:40:00-07:00", -25.130445517599583], ["2023-07-09T22:45:00-07:00", -25.149318477138877], ["2023-07-09T22:50:00-07:00", -25.16819143667817], ["2023-07-09T22:55:00-07:00", -25.187064396217465], ["2023-07-09T23:00:00-07:00", -25.206446481868625], ["2023-07-09T23:05:00-07:00", -25.225828567519784], ["2023-07-09T23:10:00-07:00", -25.245210653170943], ["2023-07-09T23:15:00-07:00", -25.264592738822103], ["2023-07-09T23:20:00-07:00", -25.283974824473262], ["2023-07-09T23:25:00-07:00", -25.30335691012442], ["2023-07-09T23:30:00-07:00", -25.32273899577558], ["2023-07-09T23:35:00-07:00", -25.34212108142674], ["2023-07-09T23:40:00-07:00", -25.3615031670779], ["2023-07-09T23:45:00-07:00", -25.38088525272906], ["2023-07-09T23:50:00-07:00", -25.400267338380218], ["2023-07-09T23:55:00-07:00", -25.419649424031377], ["2023-07-10T00:00:00-07:00", -25.43916621990502], ["2023-07-10T00:05:00-07:00", -25.45868301577866], ["2023-07-10T00:10:00-07:00", -25.478199811652303], ["2023-07-10T00:15:00-07:00", -25.497716607525945], ["2023-07-10T00:20:00-07:00", -25.517233403399587], ["2023-07-10T00:25:00-07:00", -25.53675019927323], ["2023-07-10T00:30:00-07:00", -25.55626699514687], ["2023-07-10T00:35:00-07:00", -25.575783791020513], ["2023-07-10T00:40:00-07:00", -25.595300586894155], ["2023-07-10T00:45:00-07:00", -25.614817382767797], ["2023-07-10T00:50:00-07:00", -25.63433417864144], ["2023-07-10T00:55:00-07:00", -25.65385097451508], ["2023-07-10T01:00:00-07:00", -25.673519045114517], ["2023-07-10T01:05:00-07:00", -25.693187668919563], ["2023-07-10T01:10:00-07:00", -25.712856847792864], ["2023-07-10T01:15:00-07:00", -25.732526579871774], ["2023-07-10T01:20:00-07:00", -25.752196867018938], ["2023-07-10T01:25:00-07:00", -25.77186770737171], ["2023-07-10T01:30:00-07:00", -25.79153910279274], ["2023-07-10T01:35:00-07:00", -25.811211051419377], ["2023-07-10T01:40:00-07:00", -25.83088355511427], ["2023-07-10T01:45:00-07:00", -25.85055661201477], ["2023-07-10T01:50:00-07:00", -25.870230223983526], ["2023-07-10T01:55:00-07:00", -25.88990438915789], ["2023-07-10T02:00:00-07:00", -25.909638091921806], ["2023-07-10T02:05:00-07:00", -25.92937179468572], ["2023-07-10T02:10:00-07:00", -25.949105497449636], ["2023-07-10T02:15:00-07:00", -25.96883920021355], ["2023-07-10T02:20:00-07:00", -25.988572902977467], ["2023-07-10T02:25:00-07:00", -26.00830660574138], ["2023-07-10T02:30:00-07:00", -26.028040308505297], ["2023-07-10T02:35:00-07:00", -26.04777401126921], ["2023-07-10T02:40:00-07:00", -26.067507714033127], ["2023-07-10T02:45:00-07:00", -26.087241416797042], ["2023-07-10T02:50:00-07:00", -26.106975119560957], ["2023-07-10T02:55:00-07:00", -26.126708822324872], ["2023-07-10T03:00:00-07:00", -26.146460849791765], ["2023-07-10T03:05:00-07:00", -26.16621287725866], ["2023-07-10T03:10:00-07:00", -26.18596490472555], ["2023-07-10T03:15:00-07:00", -26.205716932192445], ["2023-07-10T03:20:00-07:00", -26.225468959659338], ["2023-07-10T03:25:00-07:00", -26.24522098712623], ["2023-07-10T03:30:00-07:00", -26.264973014593124], ["2023-07-10T03:35:00-07:00", -26.284725042060018], ["2023-07-10T03:40:00-07:00", -26.30447706952691], ["2023-07-10T03:45:00-07:00", -26.324229096993804], ["2023-07-10T03:50:00-07:00", -26.343981124460697], ["2023-07-10T03:55:00-07:00", -26.36373315192759], ["2023-07-10T04:00:00-07:00", -26.383497131988406], ["2023-07-10T04:05:00-07:00", -26.403261112049222], ["2023-07-10T04:10:00-07:00", -26.423025092110038], ["2023-07-10T04:15:00-07:00", -26.442789072170854], ["2023-07-10T04:20:00-07:00", -26.46255305223167], ["2023-07-10T04:25:00-07:00", -26.482317032292485], ["2023-07-10T04:30:00-07:00", -26.5020810123533], ["2023-07-10T04:35:00-07:00", -26.521844992414117], ["2023-07-10T04:40:00-07:00", -26.541608972474933], ["2023-07-10T04:45:00-07:00", -26.56137295253575], ["2023-07-10T04:50:00-07:00", -26.581136932596564], ["2023-07-10T04:55:00-07:00", -26.60090091265738], ["2023-07-10T05:00:00-07:00", -26.621078895404935], ["2023-07-10T05:05:00-07:00", -26.641257420182228], ["2023-07-10T05:10:00-07:00", -26.66143648698926], ["2023-07-10T05:15:00-07:00", -26.681616093963385], ["2023-07-10T05:20:00-07:00", -26.701796242967248], ["2023-07-10T05:25:00-07:00", -26.72197693400085], ["2023-07-10T05:30:00-07:00", -26.742158165201545], ["2023-07-10T05:35:00-07:00", -26.76233993843198], ["2023-07-10T05:40:00-07:00", -26.78252225369215], ["2023-07-10T05:45:00-07:00", -26.802705109119415], ["2023-07-10T05:50:00-07:00", -26.82288850657642], ["2023-07-10T05:55:00-07:00", -26.84307244606316], ["2023-07-10T06:00:00-07:00", -26.863282596692443], ["2023-07-10T06:05:00-07:00", -27.248624002560973], ["2023-07-10T06:10:00-07:00", -27.634768879041076], ["2023-07-10T06:15:00-07:00", -28.02091375552118], ["2023-07-10T06:20:00-07:00", -28.40705863200128], ["2023-07-10T06:25:00-07:00", -28.793203508481383], ["2023-07-10T06:30:00-07:00", -29.179348384961486], ["2023-07-10T06:35:00-07:00", -29.56549326144159], ["2023-07-10T06:40:00-07:00", -29.95163813792169], ["2023-07-10T06:45:00-07:00", -30.337783014401793], ["2023-07-10T06:50:00-07:00", -30.723927890881896], ["2023-07-10T06:55:00-07:00", -31.110072767362], ["2023-07-10T07:00:00-07:00", -31.659249817952514], ["2023-07-10T07:05:00-07:00", -32.16885415278375], ["2023-07-10T07:10:00-07:00", -32.69762024842203], ["2023-07-10T07:15:00-07:00", -33.22208414040506], ["2023-07-10T07:20:00-07:00", -33.73082152567804], ["2023-07-10T07:25:00-07:00", -34.23388532362878], ["2023-07-10T07:30:00-07:00", -34.73566791974008], ["2023-07-10T07:35:00-07:00", -35.23065016232431], ["2023-07-10T07:40:00-07:00", -35.723297065123916], ["2023-07-10T07:45:00-07:00", -36.21881133876741], ["2023-07-10T07:50:00-07:00", -36.708724772557616], ["2023-07-10T07:55:00-07:00", -37.19398230873048], ["2023-07-10T08:00:00-07:00", -37.67500657401979], ["2023-07-10T08:05:00-07:00", -38.15227157436311], ["2023-07-10T08:10:00-07:00", -38.630030220374465], ["2023-07-10T08:15:00-07:00", -39.10789433680475], ["2023-07-10T08:20:00-07:00", -39.57836804352701], ["2023-07-10T08:25:00-07:00", -40.04386649094522], ["2023-07-10T08:30:00-07:00", -40.50412521325052], ["2023-07-10T08:35:00-07:00", -40.95973608456552], ["2023-07-10T08:40:00-07:00", -41.413392996415496], ["2023-07-10T08:45:00-07:00", -41.8668428119272], ["2023-07-10T08:50:00-07:00", -42.318667417392135], ["2023-07-10T08:55:00-07:00", -42.768735682591796], ["2023-07-10T09:00:00-07:00", -43.21622741781175], ["2023-07-10T09:05:00-07:00", -43.660949205979705], ["2023-07-10T09:10:00-07:00", -44.10409549437463], ["2023-07-10T09:15:00-07:00", -44.54543406330049], ["2023-07-10T09:20:00-07:00", -44.9880192335695], ["2023-07-10T09:25:00-07:00", -45.429603999480605], ["2023-07-10T09:30:00-07:00", -45.87031794153154], ["2023-07-10T09:35:00-07:00", -46.310179537162185], ["2023-07-10T09:40:00-07:00", -46.74888009391725], ["2023-07-10T09:45:00-07:00", -47.185149585828185], ["2023-07-10T09:50:00-07:00", -47.619773691520095], ["2023-07-10T09:55:00-07:00", -48.05288637243211], ["2023-07-10T10:00:00-07:00", -48.4829339440912], ["2023-07-10T10:05:00-07:00", -48.90606421791017], ["2023-07-10T10:10:00-07:00", -49.32285917364061], ["2023-07-10T10:15:00-07:00", -49.73247671686113], ["2023-07-10T10:20:00-07:00", -50.14103288017213], ["2023-07-10T10:25:00-07:00", -50.54859400354326], ["2023-07-10T10:30:00-07:00", -50.955102717503905], ["2023-07-10T10:35:00-07:00", -51.36016703210771], ["2023-07-10T10:40:00-07:00", -51.76356795988977], ["2023-07-10T10:45:00-07:00", -52.16627917252481], ["2023-07-10T10:50:00-07:00", -52.573482846841216], ["2023-07-10T10:55:00-07:00", -52.97901931963861], ["2023-07-10T11:00:00-07:00", -53.37760484777391], ["2023-07-10T11:05:00-07:00", -53.781406885012984], ["2023-07-10T11:10:00-07:00", -54.189748203381896], ["2023-07-10T11:15:00-07:00", -54.59119493328035], ["2023-07-10T11:20:00-07:00", -54.992592161521316], ["2023-07-10T11:25:00-07:00", -55.40440577827394], ["2023-07-10T11:30:00-07:00", -55.81483796797693], ["2023-07-10T11:35:00-07:00", -56.224490677937865], ["2023-07-10T11:40:00-07:00", -56.63364780507982], ["2023-07-10T11:45:00-07:00", -57.04228404723108], ["2023-07-10T11:50:00-07:00", -57.44986814819276], ["2023-07-10T11:55:00-07:00", -57.85670772753656], ["2023-07-10T12:00:00-07:00", -58.24081144295633], ["2023-07-10T12:05:00-07:00", -58.61861220560968], ["2023-07-10T12:10:00-07:00", -58.995341842994094], ["2023-07-10T12:15:00-07:00", -59.37127131782472], ["2023-07-10T12:20:00-07:00", -59.74636188708246], ["2023-07-10T12:25:00-07:00", -60.1097002979368], ["2023-07-10T12:30:00-07:00", -60.47225803695619], ["2023-07-10T12:35:00-07:00", -60.834020083770156], ["2023-07-10T12:40:00-07:00", -61.194778924807906], ["2023-07-10T12:45:00-07:00", -61.53819183073938], ["2023-07-10T12:50:00-07:00", -61.88139042817056], ["2023-07-10T12:55:00-07:00", -62.23475990258157], ["2023-07-10T13:00:00-07:00", -62.586867129430175], ["2023-07-10T13:05:00-07:00", -62.9271595235914], ["2023-07-10T13:10:00-07:00", -63.25736660324037], ["2023-07-10T13:15:00-07:00", -63.59385318122804], ["2023-07-10T13:20:00-07:00", -63.930612897500396], ["2023-07-10T13:25:00-07:00", -64.2688211556524], ["2023-07-10T13:30:00-07:00", -64.61056516133249], ["2023-07-10T13:35:00-07:00", -64.9464371856302], ["2023-07-10T13:40:00-07:00", -65.28229922614992], ["2023-07-10T13:45:00-07:00", -65.61994413100183], ["2023-07-10T13:50:00-07:00", -65.95524186454713], ["2023-07-10T13:55:00-07:00", -66.29399979673326], ["2023-07-10T14:00:00-07:00", -66.6288664098829], ["2023-07-10T14:05:00-07:00", -66.96391028724611], ["2023-07-10T14:10:00-07:00", -67.30394223891199], ["2023-07-10T14:15:00-07:00", -67.63910258375108], ["2023-07-10T14:20:00-07:00", -67.98020750842988], ["2023-07-10T14:25:00-07:00", -68.31831437908113], ["2023-07-10T14:30:00-07:00", -68.65713915787637], ["2023-07-10T14:35:00-07:00", -68.98757479153574], ["2023-07-10T14:40:00-07:00", -69.32843089662492], ["2023-07-10T14:45:00-07:00", -69.67597520910203], ["2023-07-10T14:50:00-07:00", -70.0179351028055], ["2023-07-10T14:55:00-07:00", -70.36289129219949], ["2023-07-10T15:00:00-07:00", -70.69821847043931], ["2023-07-10T15:05:00-07:00", -71.04012477956712], ["2023-07-10T15:10:00-07:00", -71.36699724756181], ["2023-07-10T15:15:00-07:00", -71.69620431028306], ["2023-07-10T15:20:00-07:00", -72.0283329244703], ["2023-07-10T15:25:00-07:00", -72.36193433962762], ["2023-07-10T15:30:00-07:00", -72.69720596633852], ["2023-07-10T15:35:00-07:00", -73.034414594993], ["2023-07-10T15:40:00-07:00", -73.37102464400232], ["2023-07-10T15:45:00-07:00", -73.71245092712343], ["2023-07-10T15:50:00-07:00", -74.05330819450319], ["2023-07-10T15:55:00-07:00", -74.40476254187524], ["2023-07-10T16:00:00-07:00", -74.76056638918817], ["2023-07-10T16:05:00-07:00", -75.12467763386667], ["2023-07-10T16:10:00-07:00", -75.48694822750986], ["2023-07-10T16:15:00-07:00", -75.84848133288324], ["2023-07-10T16:20:00-07:00", -76.20883173309267], ["2023-07-10T16:25:00-07:00", -76.56300482712686], ["2023-07-10T16:30:00-07:00", -76.91634861193597], ["2023-07-10T16:35:00-07:00", -77.26359314285219], ["2023-07-10T16:40:00-07:00", -77.61058146320283], ["2023-07-10T16:45:00-07:00", -77.95669398270547], ["2023-07-10T16:50:00-07:00", -78.301932817325], ["2023-07-10T16:55:00-07:00", -78.65749553404748], ["2023-07-10T17:00:00-07:00", -79.00069425068796], ["2023-07-10T17:05:00-07:00", -79.3419593628496], ["2023-07-10T17:10:00-07:00", -79.67049578391016], ["2023-07-10T17:15:00-07:00", -80.00103343091905], ["2023-07-10T17:20:00-07:00", -80.34734038077295], ["2023-07-10T17:25:00-07:00", -80.65277201496065], ["2023-07-10T17:30:00-07:00", -80.98992458544672], ["2023-07-10T17:35:00-07:00", -81.33075973950326], ["2023-07-10T17:40:00-07:00", -81.67514548264444], ["2023-07-10T17:45:00-07:00", -82.02322045527399], ["2023-07-10T17:50:00-07:00", -82.38042370043695], ["2023-07-10T17:55:00-07:00", -82.74127528630197], ["2023-07-10T18:00:00-07:00", -83.10549676977098], ["2023-07-10T18:05:00-07:00", -83.47352892719209], ["2023-07-10T18:10:00-07:00", -83.84499079547822], ["2023-07-10T18:15:00-07:00", -84.2202293034643], ["2023-07-10T18:20:00-07:00", -84.59916788898408], ["2023-07-10T18:25:00-07:00", -84.8977066334337], ["2023-07-10T18:30:00-07:00", -85.19624713622034], ["2023-07-10T18:35:00-07:00", -85.50016072951257], ["2023-07-10T18:40:00-07:00", -85.81481868587434], ["2023-07-10T18:45:00-07:00", -86.12947840057313], ["2023-07-10T18:50:00-07:00", -86.44413990341127], ["2023-07-10T18:55:00-07:00", -86.75880316458642], ["2023-07-10T19:00:00-07:00", -87.07351375184953], ["2023-07-10T19:05:00-07:00", -87.09235173277557], ["2023-07-10T19:10:00-07:00", -87.11119028739631], ["2023-07-10T19:15:00-07:00", -87.13002941571176], ["2023-07-10T19:20:00-07:00", -87.14886911958456], ["2023-07-10T19:25:00-07:00", -87.16770939715207], ["2023-07-10T19:30:00-07:00", -87.18655025027692], ["2023-07-10T19:35:00-07:00", -87.20539167709649], ["2023-07-10T19:40:00-07:00", -87.22423367761075], ["2023-07-10T19:45:00-07:00", -87.24307625368237], ["2023-07-10T19:50:00-07:00", -87.2619194034487], ["2023-07-10T19:55:00-07:00", -87.28076312877238], ["2023-07-10T20:00:00-07:00", -87.29960596933961], ["2023-07-10T20:05:00-07:00", -87.31844938546419], ["2023-07-10T20:10:00-07:00", -87.33729337528348], ["2023-07-10T20:15:00-07:00", -87.35613794066012], ["2023-07-10T20:20:00-07:00", -87.37498307973146], ["2023-07-10T20:25:00-07:00", -87.39382879249752], ["2023-07-10T20:30:00-07:00", -87.41267508082092], ["2023-07-10T20:35:00-07:00", -87.43152194283903], ["2023-07-10T20:40:00-07:00", -87.45036938041449], ["2023-07-10T20:45:00-07:00", -87.46921739168465], ["2023-07-10T20:50:00-07:00", -87.48806597851217], ["2023-07-10T20:55:00-07:00", -87.50691513903439], ["2023-07-10T21:00:00-07:00", -87.52577038668096], ["2023-07-10T21:05:00-07:00", -87.54462563432753], ["2023-07-10T21:10:00-07:00", -87.5634808819741], ["2023-07-10T21:15:00-07:00", -87.58233612962067], ["2023-07-10T21:20:00-07:00", -87.60119137726724], ["2023-07-10T21:25:00-07:00", -87.62004662491381], ["2023-07-10T21:30:00-07:00", -87.63890187256038], ["2023-07-10T21:35:00-07:00", -87.65775712020695], ["2023-07-10T21:40:00-07:00", -87.67661236785352], ["2023-07-10T21:45:00-07:00", -87.69546761550009], ["2023-07-10T21:50:00-07:00", -87.71432286314666], ["2023-07-10T21:55:00-07:00", -87.73317811079323], ["2023-07-10T22:00:00-07:00", -87.75203955173492], ["2023-07-10T22:05:00-07:00", -87.77090156823397], ["2023-07-10T22:10:00-07:00", -87.78976415842772], ["2023-07-10T22:15:00-07:00", -87.80862732231617], ["2023-07-10T22:20:00-07:00", -87.82749105989933], ["2023-07-10T22:25:00-07:00", -87.84635537303984], ["2023-07-10T22:30:00-07:00", -87.86522025987506], ["2023-07-10T22:35:00-07:00", -87.88408572040498], ["2023-07-10T22:40:00-07:00", -87.90295175462961], ["2023-07-10T22:45:00-07:00", -87.92181836441159], ["2023-07-10T22:50:00-07:00", -87.94068554788828], ["2023-07-10T22:55:00-07:00", -87.95956482365727], ["2023-07-10T23:00:00-07:00", -87.97895364649594], ["2023-07-10T23:05:00-07:00", -87.9983424693346], ["2023-07-10T23:10:00-07:00", -88.01773129217327], ["2023-07-10T23:15:00-07:00", -88.03712011501193], ["2023-07-10T23:20:00-07:00", -88.0565089378506], ["2023-07-10T23:25:00-07:00", -88.07589776068926], ["2023-07-10T23:30:00-07:00", -88.09528658352792], ["2023-07-10T23:35:00-07:00", -88.11467540636659], ["2023-07-10T23:40:00-07:00", -88.13406422920525], ["2023-07-10T23:45:00-07:00", -88.15345305204391], ["2023-07-10T23:50:00-07:00", -88.17284187488258], ["2023-07-10T23:55:00-07:00", -88.19223069772124], ["2023-07-11T00:00:00-07:00", -88.21175418794155], ["2023-07-11T00:05:00-07:00", -88.23127767816186], ["2023-07-11T00:10:00-07:00", -88.25080116838217], ["2023-07-11T00:15:00-07:00", -88.27032465860248], ["2023-07-11T00:20:00-07:00", -88.28984814882278], ["2023-07-11T00:25:00-07:00", -88.30937163904309], ["2023-07-11T00:30:00-07:00", -88.3288951292634], ["2023-07-11T00:35:00-07:00", -88.34841861948371], ["2023-07-11T00:40:00-07:00", -88.36794210970402], ["2023-07-11T00:45:00-07:00", -88.38746559992433], ["2023-07-11T00:50:00-07:00", -88.40698909014463], ["2023-07-11T00:55:00-07:00", -88.42651258036494], ["2023-07-11T01:00:00-07:00", -88.44618730060756], ["2023-07-11T01:05:00-07:00", -88.46586257405579], ["2023-07-11T01:10:00-07:00", -88.48553840257227], ["2023-07-11T01:15:00-07:00", -88.50521478429437], ["2023-07-11T01:20:00-07:00", -88.52489172108471], ["2023-07-11T01:25:00-07:00", -88.54456921108067], ["2023-07-11T01:30:00-07:00", -88.56424725614488], ["2023-07-11T01:35:00-07:00", -88.5839258544147], ["2023-07-11T01:40:00-07:00", -88.60360500775278], ["2023-07-11T01:45:00-07:00", -88.62328471429646], ["2023-07-11T01:50:00-07:00", -88.6429649759084], ["2023-07-11T01:55:00-07:00", -88.66264579072595], ["2023-07-11T02:00:00-07:00", -88.68238612636924], ["2023-07-11T02:05:00-07:00", -88.70212646201253], ["2023-07-11T02:10:00-07:00", -88.72186679765582], ["2023-07-11T02:15:00-07:00", -88.74160713329911], ["2023-07-11T02:20:00-07:00", -88.7613474689424], ["2023-07-11T02:25:00-07:00", -88.7810878045857], ["2023-07-11T02:30:00-07:00", -88.80082814022899], ["2023-07-11T02:35:00-07:00", -88.82056847587228], ["2023-07-11T02:40:00-07:00", -88.84030881151557], ["2023-07-11T02:45:00-07:00", -88.86004914715886], ["2023-07-11T02:50:00-07:00", -88.87978948280215], ["2023-07-11T02:55:00-07:00", -88.89952981844544], ["2023-07-11T03:00:00-07:00", -88.91928847320378], ["2023-07-11T03:05:00-07:00", -88.93904712796211], ["2023-07-11T03:10:00-07:00", -88.95880578272045], ["2023-07-11T03:15:00-07:00", -88.97856443747878], ["2023-07-11T03:20:00-07:00", -88.99832309223711], ["2023-07-11T03:25:00-07:00", -89.01808174699545], ["2023-07-11T03:30:00-07:00", -89.03784040175378], ["2023-07-11T03:35:00-07:00", -89.05759905651212], ["2023-07-11T03:40:00-07:00", -89.07735771127045], ["2023-07-11T03:45:00-07:00", -89.09711636602879], ["2023-07-11T03:50:00-07:00", -89.11687502078712], ["2023-07-11T03:55:00-07:00", -89.13663367554545], ["2023-07-11T04:00:00-07:00", -89.15640427730978], ["2023-07-11T04:05:00-07:00", -89.1761748790741], ["2023-07-11T04:10:00-07:00", -89.19594548083842], ["2023-07-11T04:15:00-07:00", -89.21571608260274], ["2023-07-11T04:20:00-07:00", -89.23548668436706], ["2023-07-11T04:25:00-07:00", -89.25525728613138], ["2023-07-11T04:30:00-07:00", -89.2750278878957], ["2023-07-11T04:35:00-07:00", -89.29479848966002], ["2023-07-11T04:40:00-07:00", -89.31456909142435], ["2023-07-11T04:45:00-07:00", -89.33433969318867], ["2023-07-11T04:50:00-07:00", -89.35411029495299], ["2023-07-11T04:55:00-07:00", -89.37388089671731], ["2023-07-11T05:00:00-07:00", -89.39406537823379], ["2023-07-11T05:05:00-07:00", -89.41425039991736], ["2023-07-11T05:10:00-07:00", -89.43443596363068], ["2023-07-11T05:15:00-07:00", -89.45462206937373], ["2023-07-11T05:20:00-07:00", -89.47480871528387], ["2023-07-11T05:25:00-07:00", -89.49499590322375], ["2023-07-11T05:30:00-07:00", -89.51518363319337], ["2023-07-11T05:35:00-07:00", -89.53537190333009], ["2023-07-11T05:40:00-07:00", -89.55556071549654], ["2023-07-11T05:45:00-07:00", -89.57575006969273], ["2023-07-11T05:50:00-07:00", -89.59593996405602], ["2023-07-11T05:55:00-07:00", -89.61613040044904], ["2023-07-11T06:00:00-07:00", -89.63634704053402], ["2023-07-11T06:05:00-07:00", -90.02170641720295], ["2023-07-11T06:10:00-07:00", -90.40785564482212], ["2023-07-11T06:15:00-07:00", -90.79400376975536], ["2023-07-11T06:20:00-07:00", -91.180150821805], ["2023-07-11T06:25:00-07:00", -91.56629680097103], ["2023-07-11T06:30:00-07:00", -91.95244167745113], ["2023-07-11T06:35:00-07:00", -92.33858548104763], ["2023-07-11T06:40:00-07:00", -92.72472821176052], ["2023-07-11T06:45:00-07:00", -93.11086983978748], ["2023-07-11T06:50:00-07:00", -93.49701039493084], ["2023-07-11T06:55:00-07:00", -93.88314987719059], ["2023-07-11T07:00:00-07:00", -94.3558878749609], ["2023-07-11T07:05:00-07:00", -94.86357121169567], ["2023-07-11T07:10:00-07:00", -95.34141640365124], ["2023-07-11T07:15:00-07:00", -95.81621290743351], ["2023-07-11T07:20:00-07:00", -96.2853004783392], ["2023-07-11T07:25:00-07:00", -96.7414508908987], ["2023-07-11T07:30:00-07:00", -97.19447369873524], ["2023-07-11T07:35:00-07:00", -97.64462219178677], ["2023-07-11T07:40:00-07:00", -98.09308610856533], ["2023-07-11T07:45:00-07:00", -98.54015056788921], ["2023-07-11T07:50:00-07:00", -98.98441164195538], ["2023-07-11T07:55:00-07:00", -99.42659305036068], ["2023-07-11T08:00:00-07:00", -99.87261800467968], ["2023-07-11T08:05:00-07:00", -100.32005973160267], ["2023-07-11T08:10:00-07:00", -100.76339156925678], ["2023-07-11T08:15:00-07:00", -101.20291842520237], ["2023-07-11T08:20:00-07:00", -101.64013965427876], ["2023-07-11T08:25:00-07:00", -102.07481701672077], ["2023-07-11T08:30:00-07:00", -102.50831915438175], ["2023-07-11T08:35:00-07:00", -102.92933668196201], ["2023-07-11T08:40:00-07:00", -103.34012015163898], ["2023-07-11T08:45:00-07:00", -103.75141341984272], ["2023-07-11T08:50:00-07:00", -104.15574292838573], ["2023-07-11T08:55:00-07:00", -104.55869750678539], ["2023-07-11T09:00:00-07:00", -104.95263899862766], ["2023-07-11T09:05:00-07:00", -105.34761364758015], ["2023-07-11T09:10:00-07:00", -105.74160473048687], ["2023-07-11T09:15:00-07:00", -106.1288103312254], ["2023-07-11T09:20:00-07:00", -106.51505215466022], ["2023-07-11T09:25:00-07:00", -106.90226416289806], ["2023-07-11T09:30:00-07:00", -107.28238074481487], ["2023-07-11T09:35:00-07:00", -107.66126121580601], ["2023-07-11T09:40:00-07:00", -108.03577895462513], ["2023-07-11T09:45:00-07:00", -108.40904848277569], ["2023-07-11T09:50:00-07:00", -108.78120754659176], ["2023-07-11T09:55:00-07:00", -109.14726565778255], ["2023-07-11T10:00:00-07:00", -109.50932835042477], ["2023-07-11T10:05:00-07:00", -109.87053592503071], ["2023-07-11T10:10:00-07:00", -110.23092345893383], ["2023-07-11T10:15:00-07:00", -110.5902084261179], ["2023-07-11T10:20:00-07:00", -110.94871543347836], ["2023-07-11T10:25:00-07:00", -111.30647598206997], ["2023-07-11T10:30:00-07:00", -111.66436202824116], ["2023-07-11T10:35:00-07:00", -112.01060925424099], ["2023-07-11T10:40:00-07:00", -112.36213217675686], ["2023-07-11T10:45:00-07:00", -112.71868489682674], ["2023-07-11T10:50:00-07:00", -113.07509879767895], ["2023-07-11T10:55:00-07:00", -113.44237650930882], ["2023-07-11T11:00:00-07:00", -113.81251262128353], ["2023-07-11T11:05:00-07:00", -114.18124584853649], ["2023-07-11T11:10:00-07:00", -114.54965950548649], ["2023-07-11T11:15:00-07:00", -114.91883064806461], ["2023-07-11T11:20:00-07:00", -115.29311503469944], ["2023-07-11T11:25:00-07:00", -115.66677440702915], ["2023-07-11T11:30:00-07:00", -116.04011057317257], ["2023-07-11T11:35:00-07:00", -116.41314359009266], ["2023-07-11T11:40:00-07:00", -116.78020645678043], ["2023-07-11T11:45:00-07:00", -117.14697425067425], ["2023-07-11T11:50:00-07:00", -117.5134307295084], ["2023-07-11T11:55:00-07:00", -117.8795886784792], ["2023-07-11T12:00:00-07:00", -118.23001007735729], ["2023-07-11T12:05:00-07:00", -118.58014722168446], ["2023-07-11T12:10:00-07:00", -118.93001870810986], ["2023-07-11T12:15:00-07:00", -119.27964393794537], ["2023-07-11T12:20:00-07:00", -119.62881933152676], ["2023-07-11T12:25:00-07:00", -119.9723446816206], ["2023-07-11T12:30:00-07:00", -120.31589476764202], ["2023-07-11T12:35:00-07:00", -120.659235522151], ["2023-07-11T12:40:00-07:00", -120.99713431298733], ["2023-07-11T12:45:00-07:00", -121.3402551561594], ["2023-07-11T12:50:00-07:00", -121.67179997265339], ["2023-07-11T12:55:00-07:00", -122.00289608538151], ["2023-07-11T13:00:00-07:00", -122.33192799985409], ["2023-07-11T13:05:00-07:00", -122.66169230639935], ["2023-07-11T13:10:00-07:00", -122.98981569707394], ["2023-07-11T13:15:00-07:00", -123.31851606070995], ["2023-07-11T13:20:00-07:00", -123.64712227880955], ["2023-07-11T13:25:00-07:00", -123.97417034208775], ["2023-07-11T13:30:00-07:00", -124.30808718502522], ["2023-07-11T13:35:00-07:00", -124.64243488013744], ["2023-07-11T13:40:00-07:00", -124.97696979343891], ["2023-07-11T13:45:00-07:00", -125.31161276996136], ["2023-07-11T13:50:00-07:00", -125.64626659452915], ["2023-07-11T13:55:00-07:00", -125.9764411598444], ["2023-07-11T14:00:00-07:00", -126.30767197906971], ["2023-07-11T14:05:00-07:00", -126.63468037545681], ["2023-07-11T14:10:00-07:00", -126.95396940410137], ["2023-07-11T14:15:00-07:00", -127.26779998838902], ["2023-07-11T14:20:00-07:00", -127.58202819526196], ["2023-07-11T14:25:00-07:00", -127.89779879152775], ["2023-07-11T14:30:00-07:00", -128.21553774178028], ["2023-07-11T14:35:00-07:00", -128.54253761470318], ["2023-07-11T14:40:00-07:00", -128.87467776238918], ["2023-07-11T14:45:00-07:00", -129.19367222487926], ["2023-07-11T14:50:00-07:00", -129.51935835182667], ["2023-07-11T14:55:00-07:00", -129.84833438694477], ["2023-07-11T15:00:00-07:00", -130.1758065968752], ["2023-07-11T15:05:00-07:00", -130.51388157904148], ["2023-07-11T15:10:00-07:00", -130.85458321869373], ["2023-07-11T15:15:00-07:00", -131.18267087638378], ["2023-07-11T15:20:00-07:00", -131.5036946684122], ["2023-07-11T15:25:00-07:00", -131.83041705191135], ["2023-07-11T15:30:00-07:00", -132.143449857831], ["2023-07-11T15:35:00-07:00", -132.45991311967373], ["2023-07-11T15:40:00-07:00", -132.77637813985348], ["2023-07-11T15:45:00-07:00", -133.09284488856792], ["2023-07-11T15:50:00-07:00", -133.40931336581707], ["2023-07-11T15:55:00-07:00", -133.73117311298847], ["2023-07-11T16:00:00-07:00", -134.05261601507664], ["2023-07-11T16:05:00-07:00", -134.37944312393665], ["2023-07-11T16:10:00-07:00", -134.69550703465939], ["2023-07-11T16:15:00-07:00", -135.006190225482], ["2023-07-11T16:20:00-07:00", -135.3168751448393], ["2023-07-11T16:25:00-07:00", -135.62217934429646], ["2023-07-11T16:30:00-07:00", -135.92210279405117], ["2023-07-11T16:35:00-07:00", -136.2112630456686], ["2023-07-11T16:40:00-07:00", -136.4950425773859], ["2023-07-11T16:45:00-07:00", -136.77344135940075], ["2023-07-11T16:50:00-07:00", -137.05184189975262], ["2023-07-11T16:55:00-07:00", -137.33024416863918], ["2023-07-11T17:00:00-07:00", -137.602892562747], ["2023-07-11T17:05:00-07:00", -137.8746723085642], ["2023-07-11T17:10:00-07:00", -138.14645378291607], ["2023-07-11T17:15:00-07:00", -138.4182370454073], ["2023-07-11T17:20:00-07:00", -138.69002206623554], ["2023-07-11T17:25:00-07:00", -138.96180887520313], ["2023-07-11T17:30:00-07:00", -139.23359744250774], ["2023-07-11T17:35:00-07:00", -139.5053877979517], ["2023-07-11T17:40:00-07:00", -139.77717991173267], ["2023-07-11T17:45:00-07:00", -140.048973813653], ["2023-07-11T17:50:00-07:00", -140.32076947391033], ["2023-07-11T17:55:00-07:00", -140.5925668925047], ["2023-07-11T18:00:00-07:00", -140.86954836547375], ["2023-07-11T18:05:00-07:00", -141.1519034653902], ["2023-07-11T18:10:00-07:00", -141.43963326513767], ["2023-07-11T18:15:00-07:00", -141.72736658155918], ["2023-07-11T18:20:00-07:00", -142.01510341465473], ["2023-07-11T18:25:00-07:00", -142.30821506679058], ["2023-07-11T18:30:00-07:00", -142.6013302654028], ["2023-07-11T18:35:00-07:00", -142.89444898068905], ["2023-07-11T18:40:00-07:00", -143.1929425150156], ["2023-07-11T18:45:00-07:00", -143.49681086838245], ["2023-07-11T18:50:00-07:00", -143.80068276822567], ["2023-07-11T18:55:00-07:00", -144.10455818474293], ["2023-07-11T19:00:00-07:00", -144.4084811359644], ["2023-07-11T19:05:00-07:00", -144.42730590328574], ["2023-07-11T19:10:00-07:00", -144.44613181985915], ["2023-07-11T19:15:00-07:00", -144.4649588856846], ["2023-07-11T19:20:00-07:00", -144.48378710076213], ["2023-07-11T19:25:00-07:00", -144.5026164650917], ["2023-07-11T19:30:00-07:00", -144.5214469768107], ["2023-07-11T19:35:00-07:00", -144.54027863778174], ["2023-07-11T19:40:00-07:00", -144.55911144800484], ["2023-07-11T19:45:00-07:00", -144.57794540748], ["2023-07-11T19:50:00-07:00", -144.59678051620722], ["2023-07-11T19:55:00-07:00", -144.61561677232385], ["2023-07-11T20:00:00-07:00", -144.63445271924138], ["2023-07-11T20:05:00-07:00", -144.65328924171627], ["2023-07-11T20:10:00-07:00", -144.67212633788586], ["2023-07-11T20:15:00-07:00", -144.6909640096128], ["2023-07-11T20:20:00-07:00", -144.70980225503445], ["2023-07-11T20:25:00-07:00", -144.7286410741508], ["2023-07-11T20:30:00-07:00", -144.7474804688245], ["2023-07-11T20:35:00-07:00", -144.76632043719292], ["2023-07-11T20:40:00-07:00", -144.78516098111868], ["2023-07-11T20:45:00-07:00", -144.80400209873915], ["2023-07-11T20:50:00-07:00", -144.82284379005432], ["2023-07-11T20:55:00-07:00", -144.84168605692685], ["2023-07-11T21:00:00-07:00", -144.86053441278636], ["2023-07-11T21:05:00-07:00", -144.8793833423406], ["2023-07-11T21:10:00-07:00", -144.89823284558952], ["2023-07-11T21:15:00-07:00", -144.9170829243958], ["2023-07-11T21:20:00-07:00", -144.9359335768968], ["2023-07-11T21:25:00-07:00", -144.95478480309248], ["2023-07-11T21:30:00-07:00", -144.97363660484552], ["2023-07-11T21:35:00-07:00", -144.99248898029327], ["2023-07-11T21:40:00-07:00", -145.01134192943573], ["2023-07-11T21:45:00-07:00", -145.03019545413554], ["2023-07-11T21:50:00-07:00", -145.04904955253005], ["2023-07-11T21:55:00-07:00", -145.06790422648191], ["2023-07-11T22:00:00-07:00", -145.0867656674236], ["2023-07-11T22:05:00-07:00", -145.1056271083653], ["2023-07-11T22:10:00-07:00", -145.124488549307], ["2023-07-11T22:15:00-07:00", -145.14334999024868], ["2023-07-11T22:20:00-07:00", -145.16221143119037], ["2023-07-11T22:25:00-07:00", -145.18107287213206], ["2023-07-11T22:30:00-07:00", -145.19993431307375], ["2023-07-11T22:35:00-07:00", -145.21879575401545], ["2023-07-11T22:40:00-07:00", -145.23765719495714], ["2023-07-11T22:45:00-07:00", -145.25651863589883], ["2023-07-11T22:50:00-07:00", -145.27538007684052], ["2023-07-11T22:55:00-07:00", -145.2942530363798], ["2023-07-11T23:00:00-07:00", -145.31363512203097], ["2023-07-11T23:05:00-07:00", -145.33301777020097], ["2023-07-11T23:10:00-07:00", -145.35240097902715], ["2023-07-11T23:15:00-07:00", -145.37178474850953], ["2023-07-11T23:20:00-07:00", -145.39116908051074], ["2023-07-11T23:25:00-07:00", -145.41055397316813], ["2023-07-11T23:30:00-07:00", -145.42993942648172], ["2023-07-11T23:35:00-07:00", -145.44932544231415], ["2023-07-11T23:40:00-07:00", -145.46871201880276], ["2023-07-11T23:45:00-07:00", -145.4880991578102], ["2023-07-11T23:50:00-07:00", -145.50748685747385], ["2023-07-11T23:55:00-07:00", -145.52687511779368], ["2023-07-12T00:00:00-07:00", -145.546398608014], ["2023-07-12T00:05:00-07:00", -145.5659220982343], ["2023-07-12T00:10:00-07:00", -145.5854455884546], ["2023-07-12T00:15:00-07:00", -145.6049690786749], ["2023-07-12T00:20:00-07:00", -145.62449256889522], ["2023-07-12T00:25:00-07:00", -145.64401605911553], ["2023-07-12T00:30:00-07:00", -145.66353954933584], ["2023-07-12T00:35:00-07:00", -145.68306303955615], ["2023-07-12T00:40:00-07:00", -145.70258652977645], ["2023-07-12T00:45:00-07:00", -145.72211001999676], ["2023-07-12T00:50:00-07:00", -145.74163351021707], ["2023-07-12T00:55:00-07:00", -145.76115700043738], ["2023-07-12T01:00:00-07:00", -145.78083172068], ["2023-07-12T01:05:00-07:00", -145.80050699412823], ["2023-07-12T01:10:00-07:00", -145.8201828226447], ["2023-07-12T01:15:00-07:00", -145.8398592043668], ["2023-07-12T01:20:00-07:00", -145.85953614115715], ["2023-07-12T01:25:00-07:00", -145.8792136311531], ["2023-07-12T01:30:00-07:00", -145.89889167621732], ["2023-07-12T01:35:00-07:00", -145.91857027448714], ["2023-07-12T01:40:00-07:00", -145.9382494278252], ["2023-07-12T01:45:00-07:00", -145.9579291343689], ["2023-07-12T01:50:00-07:00", -145.97760939598083], ["2023-07-12T01:55:00-07:00", -145.99729021079838], ["2023-07-12T02:00:00-07:00", -146.01703054644167], ["2023-07-12T02:05:00-07:00", -146.03677088208497], ["2023-07-12T02:10:00-07:00", -146.05651121772826], ["2023-07-12T02:15:00-07:00", -146.07625155337155], ["2023-07-12T02:20:00-07:00", -146.09599188901484], ["2023-07-12T02:25:00-07:00", -146.11573222465813], ["2023-07-12T02:30:00-07:00", -146.13547256030142], ["2023-07-12T02:35:00-07:00", -146.15521289594471], ["2023-07-12T02:40:00-07:00", -146.174953231588], ["2023-07-12T02:45:00-07:00", -146.1946935672313], ["2023-07-12T02:50:00-07:00", -146.2144339028746], ["2023-07-12T02:55:00-07:00", -146.23417423851788], ["2023-07-12T03:00:00-07:00", -146.25393289327621], ["2023-07-12T03:05:00-07:00", -146.27369099482894], ["2023-07-12T03:10:00-07:00", -146.2934485450387], ["2023-07-12T03:15:00-07:00", -146.3132055439055], ["2023-07-12T03:20:00-07:00", -146.33296198956668], ["2023-07-12T03:25:00-07:00", -146.3527178838849], ["2023-07-12T03:30:00-07:00", -146.37247322499752], ["2023-07-12T03:35:00-07:00", -146.39222801476717], ["2023-07-12T03:40:00-07:00", -146.4119822513312], ["2023-07-12T03:45:00-07:00", -146.4317359365523], ["2023-07-12T03:50:00-07:00", -146.45148906856775], ["2023-07-12T03:55:00-07:00", -146.47124164924026], ["2023-07-12T04:00:00-07:00", -146.49100562930107], ["2023-07-12T04:05:00-07:00", -146.5107696093619], ["2023-07-12T04:10:00-07:00", -146.5305335894227], ["2023-07-12T04:15:00-07:00", -146.55029756948352], ["2023-07-12T04:20:00-07:00", -146.57006154954433], ["2023-07-12T04:25:00-07:00", -146.58982552960515], ["2023-07-12T04:30:00-07:00", -146.60958950966597], ["2023-07-12T04:35:00-07:00", -146.62935348972678], ["2023-07-12T04:40:00-07:00", -146.6491174697876], ["2023-07-12T04:45:00-07:00", -146.6688814498484], ["2023-07-12T04:50:00-07:00", -146.68864542990923], ["2023-07-12T04:55:00-07:00", -146.70840940997005], ["2023-07-12T05:00:00-07:00", -146.7285873927176], ["2023-07-12T05:05:00-07:00", -146.74876537546515], ["2023-07-12T05:10:00-07:00", -146.7689433582127], ["2023-07-12T05:15:00-07:00", -146.78912134096026], ["2023-07-12T05:20:00-07:00", -146.80929932370782], ["2023-07-12T05:25:00-07:00", -146.82947730645537], ["2023-07-12T05:30:00-07:00", -146.84965528920293], ["2023-07-12T05:35:00-07:00", -146.86983327195048], ["2023-07-12T05:40:00-07:00", -146.89001125469804], ["2023-07-12T05:45:00-07:00", -146.9101892374456], ["2023-07-12T05:50:00-07:00", -146.93036722019315], ["2023-07-12T05:55:00-07:00", -146.9505452029407], ["2023-07-12T06:00:00-07:00", -146.97074886225164], ["2023-07-12T06:05:00-07:00", -147.35606958530843], ["2023-07-12T06:10:00-07:00", -147.74220799468458], ["2023-07-12T06:15:00-07:00", -148.12834640406072], ["2023-07-12T06:20:00-07:00", -148.51448481343687], ["2023-07-12T06:25:00-07:00", -148.900623222813], ["2023-07-12T06:30:00-07:00", -149.28676163218915], ["2023-07-12T06:35:00-07:00", -149.6729000415653], ["2023-07-12T06:40:00-07:00", -150.05903845094144], ["2023-07-12T06:45:00-07:00", -150.4451768603176], ["2023-07-12T06:50:00-07:00", -150.83131526969373], ["2023-07-12T06:55:00-07:00", -151.21745367906988], ["2023-07-12T07:00:00-07:00", -151.60399838350713], ["2023-07-12T07:05:00-07:00", -152.08591376803815], ["2023-07-12T07:10:00-07:00", -152.5460278596729], ["2023-07-12T07:15:00-07:00", -152.98425178788602], ["2023-07-12T07:20:00-07:00", -153.4230786766857], ["2023-07-12T07:25:00-07:00", -153.87845095060766], ["2023-07-12T07:30:00-07:00", -154.32958050630987], ["2023-07-12T07:35:00-07:00", -154.778101881966], ["2023-07-12T07:40:00-07:00", -155.21793275140226], ["2023-07-12T07:45:00-07:00", -155.65322949551046], ["2023-07-12T07:50:00-07:00", -156.0903560128063], ["2023-07-12T07:55:00-07:00", -156.52747314237058], ["2023-07-12T08:00:00-07:00", -156.95926030538976], ["2023-07-12T08:05:00-07:00", -157.38984104059637], ["2023-07-12T08:10:00-07:00", -157.8201071228832], ["2023-07-12T08:15:00-07:00", -158.24727844260633], ["2023-07-12T08:20:00-07:00", -158.6605006363243], ["2023-07-12T08:25:00-07:00", -159.0683326330036], ["2023-07-12T08:30:00-07:00", -159.47526453994215], ["2023-07-12T08:35:00-07:00", -159.87988086603582], ["2023-07-12T08:40:00-07:00", -160.28759758733213], ["2023-07-12T08:45:00-07:00", -160.68820791505277], ["2023-07-12T08:50:00-07:00", -161.08157151006162], ["2023-07-12T08:55:00-07:00", -161.47577055357397], ["2023-07-12T09:00:00-07:00", -161.86145173572004], ["2023-07-12T09:05:00-07:00", -162.24536310695112], ["2023-07-12T09:10:00-07:00", -162.6223400440067], ["2023-07-12T09:15:00-07:00", -162.99798904918134], ["2023-07-12T09:20:00-07:00", -163.37233429215848], ["2023-07-12T09:25:00-07:00", -163.74538206122816], ["2023-07-12T09:30:00-07:00", -164.11717902682722], ["2023-07-12T09:35:00-07:00", -164.48192303441465], ["2023-07-12T09:40:00-07:00", -164.8408152665943], ["2023-07-12T09:45:00-07:00", -165.19823371432722], ["2023-07-12T09:50:00-07:00", -165.55395328067243], ["2023-07-12T09:55:00-07:00", -165.90855013392866], ["2023-07-12T10:00:00-07:00", -166.2595683541149], ["2023-07-12T10:05:00-07:00", -166.6092927660793], ["2023-07-12T10:10:00-07:00", -166.94593914411962], ["2023-07-12T10:15:00-07:00", -167.28140734694898], ["2023-07-12T10:20:00-07:00", -167.61616029404104], ["2023-07-12T10:25:00-07:00", -167.95020630024374], ["2023-07-12T10:30:00-07:00", -168.28305666707456], ["2023-07-12T10:35:00-07:00", -168.61524485610425], ["2023-07-12T10:40:00-07:00", -168.94703688286245], ["2023-07-12T10:45:00-07:00", -169.28627907298505], ["2023-07-12T10:50:00-07:00", -169.63602419756353], ["2023-07-12T10:55:00-07:00", -169.98429532907903], ["2023-07-12T11:00:00-07:00", -170.3359509613365], ["2023-07-12T11:05:00-07:00", -170.692145338282], ["2023-07-12T11:10:00-07:00", -171.04735442064703], ["2023-07-12T11:15:00-07:00", -171.4019122030586], ["2023-07-12T11:20:00-07:00", -171.7561723496765], ["2023-07-12T11:25:00-07:00", -172.11581238172948], ["2023-07-12T11:30:00-07:00", -172.47631802223623], ["2023-07-12T11:35:00-07:00", -172.84219469688833], ["2023-07-12T11:40:00-07:00", -173.20965208671987], ["2023-07-12T11:45:00-07:00", -173.57679920457304], ["2023-07-12T11:50:00-07:00", -173.93797748349607], ["2023-07-12T11:55:00-07:00", -174.29315598867834], ["2023-07-12T12:00:00-07:00", -174.63309331797063], ["2023-07-12T12:05:00-07:00", -174.97245716117322], ["2023-07-12T12:10:00-07:00", -175.31128354929388], ["2023-07-12T12:15:00-07:00", -175.6498434152454], ["2023-07-12T12:20:00-07:00", -175.9881260599941], ["2023-07-12T12:25:00-07:00", -176.30452199839056], ["2023-07-12T12:30:00-07:00", -176.6207017209381], ["2023-07-12T12:35:00-07:00", -176.9362100865692], ["2023-07-12T12:40:00-07:00", -177.24065210483968], ["2023-07-12T12:45:00-07:00", -177.54487430118024], ["2023-07-12T12:50:00-07:00", -177.84332065843046], ["2023-07-12T12:55:00-07:00", -178.13616042397916], ["2023-07-12T13:00:00-07:00", -178.4285029079765], ["2023-07-12T13:05:00-07:00", -178.7223033811897], ["2023-07-12T13:10:00-07:00", -179.02138220332563], ["2023-07-12T13:15:00-07:00", -179.3204212989658], ["2023-07-12T13:20:00-07:00", -179.6272344198078], ["2023-07-12T13:25:00-07:00", -179.9334602560848], ["2023-07-12T13:30:00-07:00", -180.24030359648168], ["2023-07-12T13:35:00-07:00", -180.54721902869642], ["2023-07-12T13:40:00-07:00", -180.85339375399053], ["2023-07-12T13:45:00-07:00", -181.16076191328466], ["2023-07-12T13:50:00-07:00", -181.46874581836164], ["2023-07-12T13:55:00-07:00", -181.77819948457181], ["2023-07-12T14:00:00-07:00", -182.09851353429258], ["2023-07-12T14:05:00-07:00", -182.41971003077924], ["2023-07-12T14:10:00-07:00", -182.74227442406118], ["2023-07-12T14:15:00-07:00", -183.06644376181066], ["2023-07-12T14:20:00-07:00", -183.39043184183538], ["2023-07-12T14:25:00-07:00", -183.70346476696432], ["2023-07-12T14:30:00-07:00", -184.01850753091276], ["2023-07-12T14:35:00-07:00", -184.33683910034597], ["2023-07-12T14:40:00-07:00", -184.65835415385664], ["2023-07-12T14:45:00-07:00", -184.96948429010808], ["2023-07-12T14:50:00-07:00", -185.28104238770902], ["2023-07-12T14:55:00-07:00", -185.58935307525098], ["2023-07-12T15:00:00-07:00", -185.89390381239355], ["2023-07-12T15:05:00-07:00", -186.1949677374214], ["2023-07-12T15:10:00-07:00", -186.48876838944852], ["2023-07-12T15:15:00-07:00", -186.77756123803556], ["2023-07-12T15:20:00-07:00", -187.0667599644512], ["2023-07-12T15:25:00-07:00", -187.36179994605482], ["2023-07-12T15:30:00-07:00", -187.65733953379095], ["2023-07-12T15:35:00-07:00", -187.95342456363142], ["2023-07-12T15:40:00-07:00", -188.25485392473638], ["2023-07-12T15:45:00-07:00", -188.54445688985288], ["2023-07-12T15:50:00-07:00", -188.82867207191885], ["2023-07-12T15:55:00-07:00", -189.11288901232183], ["2023-07-12T16:00:00-07:00", -189.40456317923963], ["2023-07-12T16:05:00-07:00", -189.69635941646993], ["2023-07-12T16:10:00-07:00", -189.98021032474935], ["2023-07-12T16:15:00-07:00", -190.25867875479162], ["2023-07-12T16:20:00-07:00", -190.53714715503156], ["2023-07-12T16:25:00-07:00", -190.8156155552715], ["2023-07-12T16:30:00-07:00", -191.09408395551145], ["2023-07-12T16:35:00-07:00", -191.3725523557514], ["2023-07-12T16:40:00-07:00", -191.64025579951704], ["2023-07-12T16:45:00-07:00", -191.9025767352432], ["2023-07-12T16:50:00-07:00", -192.15951519273221], ["2023-07-12T16:55:00-07:00", -192.41645365022123], ["2023-07-12T17:00:00-07:00", -192.67841633222997], ["2023-07-12T17:05:00-07:00", -192.93950860761106], ["2023-07-12T17:10:00-07:00", -193.20060088299215], ["2023-07-12T17:15:00-07:00", -193.46169315837324], ["2023-07-12T17:20:00-07:00", -193.72278546355665], ["2023-07-12T17:25:00-07:00", -193.98387776874006], ["2023-07-12T17:30:00-07:00", -194.2449701037258], ["2023-07-12T17:35:00-07:00", -194.50606243871152], ["2023-07-12T17:40:00-07:00", -194.76715480349958], ["2023-07-12T17:45:00-07:00", -195.02824716828763], ["2023-07-12T17:50:00-07:00", -195.289339562878], ["2023-07-12T17:55:00-07:00", -195.55580701492727], ["2023-07-12T18:00:00-07:00", -195.82746051810682], ["2023-07-12T18:05:00-07:00", -196.09911518357694], ["2023-07-12T18:10:00-07:00", -196.37077306769788], ["2023-07-12T18:15:00-07:00", -196.64780580066144], ["2023-07-12T18:20:00-07:00", -196.92484205029905], ["2023-07-12T18:25:00-07:00", -197.2018818166107], ["2023-07-12T18:30:00-07:00", -197.48429640196264], ["2023-07-12T18:35:00-07:00", -197.76671453379095], ["2023-07-12T18:40:00-07:00", -198.05450748465955], ["2023-07-12T18:45:00-07:00", -198.3423039522022], ["2023-07-12T18:50:00-07:00", -198.63547523878515], ["2023-07-12T18:55:00-07:00", -198.92865004204214], ["2023-07-12T19:00:00-07:00", -199.22187083028257], ["2023-07-12T19:05:00-07:00", -199.2407088112086], ["2023-07-12T19:10:00-07:00", -199.25954736582935], ["2023-07-12T19:15:00-07:00", -199.2783864941448], ["2023-07-12T19:20:00-07:00", -199.2972261980176], ["2023-07-12T19:25:00-07:00", -199.3160664755851], ["2023-07-12T19:30:00-07:00", -199.33490732870996], ["2023-07-12T19:35:00-07:00", -199.35374875552952], ["2023-07-12T19:40:00-07:00", -199.3725907560438], ["2023-07-12T19:45:00-07:00", -199.3914333321154], ["2023-07-12T19:50:00-07:00", -199.41027648188174], ["2023-07-12T19:55:00-07:00", -199.42912020720541], ["2023-07-12T20:00:00-07:00", -199.44796304777265], ["2023-07-12T20:05:00-07:00", -199.46680646389723], ["2023-07-12T20:10:00-07:00", -199.48565045371652], ["2023-07-12T20:15:00-07:00", -199.50449501909316], ["2023-07-12T20:20:00-07:00", -199.5233401581645], ["2023-07-12T20:25:00-07:00", -199.54218587093055], ["2023-07-12T20:30:00-07:00", -199.56103215925395], ["2023-07-12T20:35:00-07:00", -199.57987902127206], ["2023-07-12T20:40:00-07:00", -199.59872645884752], ["2023-07-12T20:45:00-07:00", -199.6175744701177], ["2023-07-12T20:50:00-07:00", -199.6364230569452], ["2023-07-12T20:55:00-07:00", -199.65527221746743], ["2023-07-12T21:00:00-07:00", -199.674127465114], ["2023-07-12T21:05:00-07:00", -199.69298271276057], ["2023-07-12T21:10:00-07:00", -199.71183796040714], ["2023-07-12T21:15:00-07:00", -199.7306932080537], ["2023-07-12T21:20:00-07:00", -199.74954845570028], ["2023-07-12T21:25:00-07:00", -199.76840370334685], ["2023-07-12T21:30:00-07:00", -199.78725895099342], ["2023-07-12T21:35:00-07:00", -199.80611419864], ["2023-07-12T21:40:00-07:00", -199.82496944628656], ["2023-07-12T21:45:00-07:00", -199.84382469393313], ["2023-07-12T21:50:00-07:00", -199.8626799415797], ["2023-07-12T21:55:00-07:00", -199.88153518922627], ["2023-07-12T22:00:00-07:00", -199.90039663016796], ["2023-07-12T22:05:00-07:00", -199.91925807110965], ["2023-07-12T22:10:00-07:00", -199.93811951205134], ["2023-07-12T22:15:00-07:00", -199.95698095299304], ["2023-07-12T22:20:00-07:00", -199.97584239393473], ["2023-07-12T22:25:00-07:00", -199.99470383487642], ["2023-07-12T22:30:00-07:00", -200.0135652758181], ["2023-07-12T22:35:00-07:00", -200.0324267167598], ["2023-07-12T22:40:00-07:00", -200.0512881577015], ["2023-07-12T22:45:00-07:00", -200.07014959864318], ["2023-07-12T22:50:00-07:00", -200.08901103958488], ["2023-07-12T22:55:00-07:00", -200.10788399912417], ["2023-07-12T23:00:00-07:00", -200.12726608477533], ["2023-07-12T23:05:00-07:00", -200.1466481704265], ["2023-07-12T23:10:00-07:00", -200.16603025607765], ["2023-07-12T23:15:00-07:00", -200.1854123417288], ["2023-07-12T23:20:00-07:00", -200.20479442737997], ["2023-07-12T23:25:00-07:00", -200.22417651303113], ["2023-07-12T23:30:00-07:00", -200.24355859868228], ["2023-07-12T23:35:00-07:00", -200.26294068433344], ["2023-07-12T23:40:00-07:00", -200.2823227699846], ["2023-07-12T23:45:00-07:00", -200.30170485563576], ["2023-07-12T23:50:00-07:00", -200.32108694128692], ["2023-07-12T23:55:00-07:00", -200.34046902693808], ["2023-07-13T00:00:00-07:00", -200.35998582281172], ["2023-07-13T00:05:00-07:00", -200.37950317561626], ["2023-07-13T00:10:00-07:00", -200.39902108721435], ["2023-07-13T00:15:00-07:00", -200.41853955574334], ["2023-07-13T00:20:00-07:00", -200.43805858306587], ["2023-07-13T00:25:00-07:00", -200.4575781673193], ["2023-07-13T00:30:00-07:00", -200.47709831036627], ["2023-07-13T00:35:00-07:00", -200.49661901034415], ["2023-07-13T00:40:00-07:00", -200.51614026911557], ["2023-07-13T00:45:00-07:00", -200.53566208668053], ["2023-07-13T00:50:00-07:00", -200.5551844611764], ["2023-07-13T00:55:00-07:00", -200.5747073944658], ["2023-07-13T01:00:00-07:00", -200.59438211470842], ["2023-07-13T01:05:00-07:00", -200.61405683495104], ["2023-07-13T01:10:00-07:00", -200.63373155519366], ["2023-07-13T01:15:00-07:00", -200.65340627543628], ["2023-07-13T01:20:00-07:00", -200.6730809956789], ["2023-07-13T01:25:00-07:00", -200.69275571592152], ["2023-07-13T01:30:00-07:00", -200.71243043616414], ["2023-07-13T01:35:00-07:00", -200.73210515640676], ["2023-07-13T01:40:00-07:00", -200.75177987664938], ["2023-07-13T01:45:00-07:00", -200.771454596892], ["2023-07-13T01:50:00-07:00", -200.79112931713462], ["2023-07-13T01:55:00-07:00", -200.81080403737724], ["2023-07-13T02:00:00-07:00", -200.83053774014115], ["2023-07-13T02:05:00-07:00", -200.85027144290507], ["2023-07-13T02:10:00-07:00", -200.87000514566898], ["2023-07-13T02:15:00-07:00", -200.8897388484329], ["2023-07-13T02:20:00-07:00", -200.9094725511968], ["2023-07-13T02:25:00-07:00", -200.92920625396073], ["2023-07-13T02:30:00-07:00", -200.94893995672464], ["2023-07-13T02:35:00-07:00", -200.96867365948856], ["2023-07-13T02:40:00-07:00", -200.98840736225247], ["2023-07-13T02:45:00-07:00", -201.0081410650164], ["2023-07-13T02:50:00-07:00", -201.0278747677803], ["2023-07-13T02:55:00-07:00", -201.04760847054422], ["2023-07-13T03:00:00-07:00", -201.0673604980111], ["2023-07-13T03:05:00-07:00", -201.087112525478], ["2023-07-13T03:10:00-07:00", -201.1068645529449], ["2023-07-13T03:15:00-07:00", -201.1266165804118], ["2023-07-13T03:20:00-07:00", -201.14636860787868], ["2023-07-13T03:25:00-07:00", -201.16612063534558], ["2023-07-13T03:30:00-07:00", -201.18587266281247], ["2023-07-13T03:35:00-07:00", -201.20562469027936], ["2023-07-13T03:40:00-07:00", -201.22537671774626], ["2023-07-13T03:45:00-07:00", -201.24512874521315], ["2023-07-13T03:50:00-07:00", -201.26488077268004], ["2023-07-13T03:55:00-07:00", -201.28463280014694], ["2023-07-13T04:00:00-07:00", -201.30439678020775], ["2023-07-13T04:05:00-07:00", -201.32416131161153], ["2023-07-13T04:10:00-07:00", -201.34392639435828], ["2023-07-13T04:15:00-07:00", -201.36369203031063], ["2023-07-13T04:20:00-07:00", -201.38345821760595], ["2023-07-13T04:25:00-07:00", -201.40322495624423], ["2023-07-13T04:30:00-07:00", -201.42299224622548], ["2023-07-13T04:35:00-07:00", -201.44276008941233], ["2023-07-13T04:40:00-07:00", -201.46252848394215], ["2023-07-13T04:45:00-07:00", -201.48229742981493], ["2023-07-13T04:50:00-07:00", -201.50206692889333], ["2023-07-13T04:55:00-07:00", -201.52183697931468], ["2023-07-13T05:00:00-07:00", -201.54202146083117], ["2023-07-13T05:05:00-07:00", -201.56220594234765], ["2023-07-13T05:10:00-07:00", -201.58239042386413], ["2023-07-13T05:15:00-07:00", -201.6025749053806], ["2023-07-13T05:20:00-07:00", -201.6227593868971], ["2023-07-13T05:25:00-07:00", -201.64294386841357], ["2023-07-13T05:30:00-07:00", -201.66312834993005], ["2023-07-13T05:35:00-07:00", -201.68331283144653], ["2023-07-13T05:40:00-07:00", -201.703497312963], ["2023-07-13T05:45:00-07:00", -201.7236817944795], ["2023-07-13T05:50:00-07:00", -201.74386627599597], ["2023-07-13T05:55:00-07:00", -201.76405075751245], ["2023-07-13T06:00:00-07:00", -201.78426090814173], ["2023-07-13T06:05:00-07:00", -202.16195459105074], ["2023-07-13T06:10:00-07:00", -202.54809839464724], ["2023-07-13T06:15:00-07:00", -202.93424166180193], ["2023-07-13T06:20:00-07:00", -203.32038439251482], ["2023-07-13T06:25:00-07:00", -203.7065265867859], ["2023-07-13T06:30:00-07:00", -204.09266821481287], ["2023-07-13T06:35:00-07:00", -204.47880930639803], ["2023-07-13T06:40:00-07:00", -204.8649498615414], ["2023-07-13T06:45:00-07:00", -205.25108988024294], ["2023-07-13T06:50:00-07:00", -205.6372293625027], ["2023-07-13T06:55:00-07:00", -206.02336830832064], ["2023-07-13T07:00:00-07:00", -206.50172380544245], ["2023-07-13T07:05:00-07:00", -207.00591150857508], ["2023-07-13T07:10:00-07:00", -207.51022795774043], ["2023-07-13T07:15:00-07:00", -208.00958261825144], ["2023-07-13T07:20:00-07:00", -208.48438552953303], ["2023-07-13T07:25:00-07:00", -208.95060897804797], ["2023-07-13T07:30:00-07:00", -209.40740085579455], ["2023-07-13T07:35:00-07:00", -209.86707581020892], ["2023-07-13T07:40:00-07:00", -210.32689691521227], ["2023-07-13T07:45:00-07:00", -210.7867267522961], ["2023-07-13T07:50:00-07:00", -211.23804489709437], ["2023-07-13T07:55:00-07:00", -211.68755258060992], ["2023-07-13T08:00:00-07:00", -212.13609633781016], ["2023-07-13T08:05:00-07:00", -212.5804545674473], ["2023-07-13T08:10:00-07:00", -213.01258791424334], ["2023-07-13T08:15:00-07:00", -213.44194341637194], ["2023-07-13T08:20:00-07:00", -213.8572690282017], ["2023-07-13T08:25:00-07:00", -214.277299920097], ["2023-07-13T08:30:00-07:00", -214.6954342816025], ["2023-07-13T08:35:00-07:00", -215.0987676475197], ["2023-07-13T08:40:00-07:00", -215.50018812157214], ["2023-07-13T08:45:00-07:00", -215.90022439695895], ["2023-07-13T08:50:00-07:00", -216.28708408214152], ["2023-07-13T08:55:00-07:00", -216.6724743936211], ["2023-07-13T09:00:00-07:00", -217.05406583286822], ["2023-07-13T09:05:00-07:00", -217.43468485213816], ["2023-07-13T09:10:00-07:00", -217.80862090922892], ["2023-07-13T09:15:00-07:00", -218.1831955704838], ["2023-07-13T09:20:00-07:00", -218.55643011070788], ["2023-07-13T09:25:00-07:00", -218.92878139950335], ["2023-07-13T09:30:00-07:00", -219.300272712484], ["2023-07-13T09:35:00-07:00", -219.6655286345631], ["2023-07-13T09:40:00-07:00", -220.02424944378436], ["2023-07-13T09:45:00-07:00", -220.3821736369282], ["2023-07-13T09:50:00-07:00", -220.7393287215382], ["2023-07-13T09:55:00-07:00", -221.09550441242754], ["2023-07-13T10:00:00-07:00", -221.4427733514458], ["2023-07-13T10:05:00-07:00", -221.78498707152903], ["2023-07-13T10:10:00-07:00", -222.12680358625948], ["2023-07-13T10:15:00-07:00", -222.4684468600899], ["2023-07-13T10:20:00-07:00", -222.80944071151316], ["2023-07-13T10:25:00-07:00", -223.14925132133067], ["2023-07-13T10:30:00-07:00", -223.48826197721064], ["2023-07-13T10:35:00-07:00", -223.82693652249873], ["2023-07-13T10:40:00-07:00", -224.16588125564158], ["2023-07-13T10:45:00-07:00", -224.52202219702303], ["2023-07-13T10:50:00-07:00", -224.88264037109911], ["2023-07-13T10:55:00-07:00", -225.242579260841], ["2023-07-13T11:00:00-07:00", -225.6006347630173], ["2023-07-13T11:05:00-07:00", -225.9638208542019], ["2023-07-13T11:10:00-07:00", -226.3264098558575], ["2023-07-13T11:15:00-07:00", -226.6884758863598], ["2023-07-13T11:20:00-07:00", -227.05032799579203], ["2023-07-13T11:25:00-07:00", -227.4175829384476], ["2023-07-13T11:30:00-07:00", -227.78398911096156], ["2023-07-13T11:35:00-07:00", -228.1500980053097], ["2023-07-13T11:40:00-07:00", -228.51594097353518], ["2023-07-13T11:45:00-07:00", -228.87585503794253], ["2023-07-13T11:50:00-07:00", -229.23548437096179], ["2023-07-13T11:55:00-07:00", -229.59488297440112], ["2023-07-13T12:00:00-07:00", -229.9388058874756], ["2023-07-13T12:05:00-07:00", -230.28232778050005], ["2023-07-13T12:10:00-07:00", -230.62562445737422], ["2023-07-13T12:15:00-07:00", -230.96846194006503], ["2023-07-13T12:20:00-07:00", -231.30566872097552], ["2023-07-13T12:25:00-07:00", -231.62127015925944], ["2023-07-13T12:30:00-07:00", -231.92584703303874], ["2023-07-13T12:35:00-07:00", -232.22991714812815], ["2023-07-13T12:40:00-07:00", -232.53379450179636], ["2023-07-13T12:45:00-07:00", -232.8320589158684], ["2023-07-13T12:50:00-07:00", -233.12472430802882], ["2023-07-13T12:55:00-07:00", -233.4174614045769], ["2023-07-13T13:00:00-07:00", -233.71483741141856], ["2023-07-13T13:05:00-07:00", -234.01049406267703], ["2023-07-13T13:10:00-07:00", -234.30658859945834], ["2023-07-13T13:15:00-07:00", -234.60743159987032], ["2023-07-13T13:20:00-07:00", -234.90838099457324], ["2023-07-13T13:25:00-07:00", -235.2100478503853], ["2023-07-13T13:30:00-07:00", -235.51159323193133], ["2023-07-13T13:35:00-07:00", -235.81365416385233], ["2023-07-13T13:40:00-07:00", -236.11604715324938], ["2023-07-13T13:45:00-07:00", -236.4195515010506], ["2023-07-13T13:50:00-07:00", -236.7246439550072], ["2023-07-13T13:55:00-07:00", -237.03645379282534], ["2023-07-13T14:00:00-07:00", -237.35430196858943], ["2023-07-13T14:05:00-07:00", -237.6721619758755], ["2023-07-13T14:10:00-07:00", -237.98818076588213], ["2023-07-13T14:15:00-07:00", -238.30541772581637], ["2023-07-13T14:20:00-07:00", -238.62579772807658], ["2023-07-13T14:25:00-07:00", -238.95420784689486], ["2023-07-13T14:30:00-07:00", -239.28664107061923], ["2023-07-13T14:35:00-07:00", -239.6251978073269], ["2023-07-13T14:40:00-07:00", -239.96006883122027], ["2023-07-13T14:45:00-07:00", -240.2725466284901], ["2023-07-13T14:50:00-07:00", -240.59128178097308], ["2023-07-13T14:55:00-07:00", -240.90450028516352], ["2023-07-13T15:00:00-07:00", -241.22307152487338], ["2023-07-13T15:05:00-07:00", -241.54210067726672], ["2023-07-13T15:10:00-07:00", -241.85022441484034], ["2023-07-13T15:15:00-07:00", -242.1588333044201], ["2023-07-13T15:20:00-07:00", -242.47808952070773], ["2023-07-13T15:25:00-07:00", -242.80253137089312], ["2023-07-13T15:30:00-07:00", -243.13141621090472], ["2023-07-13T15:35:00-07:00", -243.4600518438965], ["2023-07-13T15:40:00-07:00", -243.78842193819582], ["2023-07-13T15:45:00-07:00", -244.1165487859398], ["2023-07-13T15:50:00-07:00", -244.44637108780444], ["2023-07-13T15:55:00-07:00", -244.7651540134102], ["2023-07-13T16:00:00-07:00", -245.085652211681], ["2023-07-13T16:05:00-07:00", -245.40872831083834], ["2023-07-13T16:10:00-07:00", -245.7287801001221], ["2023-07-13T16:15:00-07:00", -246.04309315420687], ["2023-07-13T16:20:00-07:00", -246.35701666213572], ["2023-07-13T16:25:00-07:00", -246.66518304683268], ["2023-07-13T16:30:00-07:00", -246.972904631868], ["2023-07-13T16:35:00-07:00", -247.28020665980875], ["2023-07-13T16:40:00-07:00", -247.58161578513682], ["2023-07-13T16:45:00-07:00", -247.8828283343464], ["2023-07-13T16:50:00-07:00", -248.1912543270737], ["2023-07-13T16:55:00-07:00", -248.49912301637232], ["2023-07-13T17:00:00-07:00", -248.81725917197764], ["2023-07-13T17:05:00-07:00", -249.13381437398493], ["2023-07-13T17:10:00-07:00", -249.45809460617602], ["2023-07-13T17:15:00-07:00", -249.7847118768841], ["2023-07-13T17:20:00-07:00", -250.11355237104], ["2023-07-13T17:25:00-07:00", -250.44463212229311], ["2023-07-13T17:30:00-07:00", -250.8001911137253], ["2023-07-13T17:35:00-07:00", -251.1587784383446], ["2023-07-13T17:40:00-07:00", -251.56788767315447], ["2023-07-13T17:45:00-07:00", -251.98104758001864], ["2023-07-13T17:50:00-07:00", -252.39825592376292], ["2023-07-13T17:55:00-07:00", -252.81947041489184], ["2023-07-13T18:00:00-07:00", -253.24439350701869], ["2023-07-13T18:05:00-07:00", -253.67844144441187], ["2023-07-13T18:10:00-07:00", -254.12159780599177], ["2023-07-13T18:15:00-07:00", -254.57529489137232], ["2023-07-13T18:20:00-07:00", -255.0319574866444], ["2023-07-13T18:25:00-07:00", -255.49697048403323], ["2023-07-13T18:30:00-07:00", -255.97026995755732], ["2023-07-13T18:35:00-07:00", -256.44621733762324], ["2023-07-13T18:40:00-07:00", -256.9247965309769], ["2023-07-13T18:45:00-07:00", -257.4112258050591], ["2023-07-13T18:50:00-07:00", -257.9001172874123], ["2023-07-13T18:55:00-07:00", -258.3914529774338], ["2023-07-13T19:00:00-07:00", -258.6846104655415], ["2023-07-13T19:05:00-07:00", -258.7034283410758], ["2023-07-13T19:10:00-07:00", -258.7222473639995], ["2023-07-13T19:15:00-07:00", -258.74106753617525], ["2023-07-13T19:20:00-07:00", -258.7598888576031], ["2023-07-13T19:25:00-07:00", -258.77871132828295], ["2023-07-13T19:30:00-07:00", -258.7975349482149], ["2023-07-13T19:35:00-07:00", -258.81635971553624], ["2023-07-13T19:40:00-07:00", -258.83518563210964], ["2023-07-13T19:45:00-07:00", -258.8540126979351], ["2023-07-13T19:50:00-07:00", -258.8728409130126], ["2023-07-13T19:55:00-07:00", -258.8916702773422], ["2023-07-13T20:00:00-07:00", -258.91049933061004], ["2023-07-13T20:05:00-07:00", -258.9293289594352], ["2023-07-13T20:10:00-07:00", -258.9481591619551], ["2023-07-13T20:15:00-07:00", -258.9669899381697], ["2023-07-13T20:20:00-07:00", -258.98582128994167], ["2023-07-13T20:25:00-07:00", -259.0046532154083], ["2023-07-13T20:30:00-07:00", -259.02348571643233], ["2023-07-13T20:35:00-07:00", -259.04231879115105], ["2023-07-13T20:40:00-07:00", -259.0611524414271], ["2023-07-13T20:45:00-07:00", -259.0799866653979], ["2023-07-13T20:50:00-07:00", -259.09882146306336], ["2023-07-13T20:55:00-07:00", -259.1176568362862], ["2023-07-13T21:00:00-07:00", -259.13649830035865], ["2023-07-13T21:05:00-07:00", -259.1553403381258], ["2023-07-13T21:10:00-07:00", -259.1741829495877], ["2023-07-13T21:15:00-07:00", -259.19302613660693], ["2023-07-13T21:20:00-07:00", -259.21186989732087], ["2023-07-13T21:25:00-07:00", -259.2307142317295], ["2023-07-13T21:30:00-07:00", -259.2495591416955], ["2023-07-13T21:35:00-07:00", -259.2684046253562], ["2023-07-13T21:40:00-07:00", -259.2872506827116], ["2023-07-13T21:45:00-07:00", -259.30609731562436], ["2023-07-13T21:50:00-07:00", -259.3249445222318], ["2023-07-13T21:55:00-07:00", -259.343792302534], ["2023-07-13T22:00:00-07:00", -259.36264685355127], ["2023-07-13T22:05:00-07:00", -259.38150140456855], ["2023-07-13T22:10:00-07:00", -259.40035595558584], ["2023-07-13T22:15:00-07:00", -259.4192105066031], ["2023-07-13T22:20:00-07:00", -259.4380650576204], ["2023-07-13T22:25:00-07:00", -259.4569196086377], ["2023-07-13T22:30:00-07:00", -259.475774159655], ["2023-07-13T22:35:00-07:00", -259.49462871067226], ["2023-07-13T22:40:00-07:00", -259.51348326168954], ["2023-07-13T22:45:00-07:00", -259.5323378127068], ["2023-07-13T22:50:00-07:00", -259.5511923637241], ["2023-07-13T22:55:00-07:00", -259.570058433339], ["2023-07-13T23:00:00-07:00", -259.5894337836653], ["2023-07-13T23:05:00-07:00", -259.6088091339916], ["2023-07-13T23:10:00-07:00", -259.6281844843179], ["2023-07-13T23:15:00-07:00", -259.6475598346442], ["2023-07-13T23:20:00-07:00", -259.6669351849705], ["2023-07-13T23:25:00-07:00", -259.6863105352968], ["2023-07-13T23:30:00-07:00", -259.7056858856231], ["2023-07-13T23:35:00-07:00", -259.7250612359494], ["2023-07-13T23:40:00-07:00", -259.7444365862757], ["2023-07-13T23:45:00-07:00", -259.763811936602], ["2023-07-13T23:50:00-07:00", -259.7831872869283], ["2023-07-13T23:55:00-07:00", -259.8025626372546], ["2023-07-14T00:00:00-07:00", -259.8220727369189], ["2023-07-14T00:05:00-07:00", -259.8415833953768], ["2023-07-14T00:10:00-07:00", -259.8610946107656], ["2023-07-14T00:15:00-07:00", -259.8806063849479], ["2023-07-14T00:20:00-07:00", -259.9001187160611], ["2023-07-14T00:25:00-07:00", -259.9196316059679], ["2023-07-14T00:30:00-07:00", -259.93914505280554], ["2023-07-14T00:35:00-07:00", -259.95865905843675], ["2023-07-14T00:40:00-07:00", -259.97817362099886], ["2023-07-14T00:45:00-07:00", -259.9976887423545], ["2023-07-14T00:50:00-07:00", -260.0172044225037], ["2023-07-14T00:55:00-07:00", -260.0367206595838], ["2023-07-14T01:00:00-07:00", -260.05638873018324], ["2023-07-14T01:05:00-07:00", -260.0760573539883], ["2023-07-14T01:10:00-07:00", -260.0957265328616], ["2023-07-14T01:15:00-07:00", -260.1153962649405], ["2023-07-14T01:20:00-07:00", -260.13506655208766], ["2023-07-14T01:25:00-07:00", -260.15473739244044], ["2023-07-14T01:30:00-07:00", -260.17440878786147], ["2023-07-14T01:35:00-07:00", -260.1940807364881], ["2023-07-14T01:40:00-07:00", -260.213753240183], ["2023-07-14T01:45:00-07:00", -260.2334262970835], ["2023-07-14T01:50:00-07:00", -260.25309990905225], ["2023-07-14T01:55:00-07:00", -260.2727740742266], ["2023-07-14T02:00:00-07:00", -260.29250777699053], ["2023-07-14T02:05:00-07:00", -260.31224147975445], ["2023-07-14T02:10:00-07:00", -260.33197518251836], ["2023-07-14T02:15:00-07:00", -260.3517088852823], ["2023-07-14T02:20:00-07:00", -260.3714425880462], ["2023-07-14T02:25:00-07:00", -260.3911762908101], ["2023-07-14T02:30:00-07:00", -260.410909993574], ["2023-07-14T02:35:00-07:00", -260.43064369633794], ["2023-07-14T02:40:00-07:00", -260.45037739910185], ["2023-07-14T02:45:00-07:00", -260.47011110186577], ["2023-07-14T02:50:00-07:00", -260.4898448046297], ["2023-07-14T02:55:00-07:00", -260.5095785073936], ["2023-07-14T03:00:00-07:00", -260.5293305348605], ["2023-07-14T03:05:00-07:00", -260.5490825623274], ["2023-07-14T03:10:00-07:00", -260.5688345897943], ["2023-07-14T03:15:00-07:00", -260.58858661726117], ["2023-07-14T03:20:00-07:00", -260.60833864472806], ["2023-07-14T03:25:00-07:00", -260.62809067219496], ["2023-07-14T03:30:00-07:00", -260.64784269966185], ["2023-07-14T03:35:00-07:00", -260.66759472712874], ["2023-07-14T03:40:00-07:00", -260.68734675459564], ["2023-07-14T03:45:00-07:00", -260.70709878206253], ["2023-07-14T03:50:00-07:00", -260.7268508095294], ["2023-07-14T03:55:00-07:00", -260.7466028369963], ["2023-07-14T04:00:00-07:00", -260.76636681705713], ["2023-07-14T04:05:00-07:00", -260.78613079711795], ["2023-07-14T04:10:00-07:00", -260.80589477717876], ["2023-07-14T04:15:00-07:00", -260.8256587572396], ["2023-07-14T04:20:00-07:00", -260.8454227373004], ["2023-07-14T04:25:00-07:00", -260.8651867173612], ["2023-07-14T04:30:00-07:00", -260.884950697422], ["2023-07-14T04:35:00-07:00", -260.90471467748284], ["2023-07-14T04:40:00-07:00", -260.92447865754366], ["2023-07-14T04:45:00-07:00", -260.9442426376045], ["2023-07-14T04:50:00-07:00", -260.9640066176653], ["2023-07-14T04:55:00-07:00", -260.9837705977261], ["2023-07-14T05:00:00-07:00", -261.00394858047366], ["2023-07-14T05:05:00-07:00", -261.02412710525095], ["2023-07-14T05:10:00-07:00", -261.044306172058], ["2023-07-14T05:15:00-07:00", -261.0644857790321], ["2023-07-14T05:20:00-07:00", -261.084665928036], ["2023-07-14T05:25:00-07:00", -261.1048466190696], ["2023-07-14T05:30:00-07:00", -261.12502785027027], ["2023-07-14T05:35:00-07:00", -261.1452096235007], ["2023-07-14T05:40:00-07:00", -261.1653919387609], ["2023-07-14T05:45:00-07:00", -261.18557479418814], ["2023-07-14T05:50:00-07:00", -261.20575819164515], ["2023-07-14T05:55:00-07:00", -261.2259421311319], ["2023-07-14T06:00:00-07:00", -261.24615228176117], ["2023-07-14T06:05:00-07:00", -261.60656929016113], ["2023-07-14T06:10:00-07:00", -261.9927025735378], ["2023-07-14T06:15:00-07:00", -262.3784447610378], ["2023-07-14T06:20:00-07:00", -262.7594669163227], ["2023-07-14T06:25:00-07:00", -263.1456091105938], ["2023-07-14T06:30:00-07:00", -263.53175073862076], ["2023-07-14T06:35:00-07:00", -263.9175974428654], ["2023-07-14T06:40:00-07:00", -264.303049236536], ["2023-07-14T06:45:00-07:00", -264.68645387887955], ["2023-07-14T06:50:00-07:00", -265.0694697499275], ["2023-07-14T06:55:00-07:00", -265.45209684967995], ["2023-07-14T07:00:00-07:00", -265.9190616309643], ["2023-07-14T07:05:00-07:00", -266.3808365762234], ["2023-07-14T07:10:00-07:00", -266.8469267487526], ["2023-07-14T07:15:00-07:00", -267.3010649383068], ["2023-07-14T07:20:00-07:00", -267.7540296316147], ["2023-07-14T07:25:00-07:00", -268.1988907456398], ["2023-07-14T07:30:00-07:00", -268.637227922678], ["2023-07-14T07:35:00-07:00", -269.0805035531521], ["2023-07-14T07:40:00-07:00", -269.51708298921585], ["2023-07-14T07:45:00-07:00", -269.94938763976097], ["2023-07-14T07:50:00-07:00", -270.37906044721603], ["2023-07-14T07:55:00-07:00", -270.8055009543896], ["2023-07-14T08:00:00-07:00", -271.22945407032967], ["2023-07-14T08:05:00-07:00", -271.6405495107174], ["2023-07-14T08:10:00-07:00", -272.0468748509884], ["2023-07-14T08:15:00-07:00", -272.44747361540794], ["2023-07-14T08:20:00-07:00", -272.8400864303112], ["2023-07-14T08:25:00-07:00", -273.2335323393345], ["2023-07-14T08:30:00-07:00", -273.6187393665314], ["2023-07-14T08:35:00-07:00", -273.9955935180187], ["2023-07-14T08:40:00-07:00", -274.3649058043957], ["2023-07-14T08:45:00-07:00", -274.73349046707153], ["2023-07-14T08:50:00-07:00", -275.10111078619957], ["2023-07-14T08:55:00-07:00", -275.4630856215954], ["2023-07-14T09:00:00-07:00", -275.82115507125854], ["2023-07-14T09:05:00-07:00", -276.1777559220791], ["2023-07-14T09:10:00-07:00", -276.5328233540058], ["2023-07-14T09:15:00-07:00", -276.8861123621464], ["2023-07-14T09:20:00-07:00", -277.2259118258953], ["2023-07-14T09:25:00-07:00", -277.5643186569214], ["2023-07-14T09:30:00-07:00", -277.90469989180565], ["2023-07-14T09:35:00-07:00", -278.24345633387566], ["2023-07-14T09:40:00-07:00", -278.5814103484154], ["2023-07-14T09:45:00-07:00", -278.9175306558609], ["2023-07-14T09:50:00-07:00", -279.25186800956726], ["2023-07-14T09:55:00-07:00", -279.5790890157223], ["2023-07-14T10:00:00-07:00", -279.90295749902725], ["2023-07-14T10:05:00-07:00", -280.2258572280407], ["2023-07-14T10:10:00-07:00", -280.54777559638023], ["2023-07-14T10:15:00-07:00", -280.8687423169613], ["2023-07-14T10:20:00-07:00", -281.18904212117195], ["2023-07-14T10:25:00-07:00", -281.50866428017616], ["2023-07-14T10:30:00-07:00", -281.8276215195656], ["2023-07-14T10:35:00-07:00", -282.14617869257927], ["2023-07-14T10:40:00-07:00", -282.47012999653816], ["2023-07-14T10:45:00-07:00", -282.79888635873795], ["2023-07-14T10:50:00-07:00", -283.1267076432705], ["2023-07-14T10:55:00-07:00", -283.45387476682663], ["2023-07-14T11:00:00-07:00", -283.77306240797043], ["2023-07-14T11:05:00-07:00", -284.09676879644394], ["2023-07-14T11:10:00-07:00", -284.41989758610725], ["2023-07-14T11:15:00-07:00", -284.74842193722725], ["2023-07-14T11:20:00-07:00", -285.07043889164925], ["2023-07-14T11:25:00-07:00", -285.391916513443], ["2023-07-14T11:30:00-07:00", -285.7077321112156], ["2023-07-14T11:35:00-07:00", -286.02925366163254], ["2023-07-14T11:40:00-07:00", -286.35029911994934], ["2023-07-14T11:45:00-07:00", -286.6707150042057], ["2023-07-14T11:50:00-07:00", -286.99091655015945], ["2023-07-14T11:55:00-07:00", -287.29957005381584], ["2023-07-14T12:00:00-07:00", -287.5948764681816], ["2023-07-14T12:05:00-07:00", -287.88456735014915], ["2023-07-14T12:10:00-07:00", -288.17405983805656], ["2023-07-14T12:15:00-07:00", -288.46312069892883], ["2023-07-14T12:20:00-07:00", -288.7411822080612], ["2023-07-14T12:25:00-07:00", -289.01960039138794], ["2023-07-14T12:30:00-07:00", -289.3087100982666], ["2023-07-14T12:35:00-07:00", -289.592366874218], ["2023-07-14T12:40:00-07:00", -289.88676819205284], ["2023-07-14T12:45:00-07:00", -290.18080431222916], ["2023-07-14T12:50:00-07:00", -290.47412034869194], ["2023-07-14T12:55:00-07:00", -290.7619237601757], ["2023-07-14T13:00:00-07:00", -291.04395881295204], ["2023-07-14T13:05:00-07:00", -291.32942110300064], ["2023-07-14T13:10:00-07:00", -291.6124427318573], ["2023-07-14T13:15:00-07:00", -291.8956062197685], ["2023-07-14T13:20:00-07:00", -292.17978888750076], ["2023-07-14T13:25:00-07:00", -292.4665673673153], ["2023-07-14T13:30:00-07:00", -292.7543449103832], ["2023-07-14T13:35:00-07:00", -293.04322135448456], ["2023-07-14T13:40:00-07:00", -293.3375465273857], ["2023-07-14T13:45:00-07:00", -293.620651692152], ["2023-07-14T13:50:00-07:00", -293.90413531661034], ["2023-07-14T13:55:00-07:00", -294.18803745508194], ["2023-07-14T14:00:00-07:00", -294.47193044424057], ["2023-07-14T14:05:00-07:00", -294.7555501759052], ["2023-07-14T14:10:00-07:00", -295.03794607520103], ["2023-07-14T14:15:00-07:00", -295.32050558924675], ["2023-07-14T14:20:00-07:00", -295.59686267375946], ["2023-07-14T14:25:00-07:00", -295.8706403374672], ["2023-07-14T14:30:00-07:00", -296.1444162428379], ["2023-07-14T14:35:00-07:00", -296.42358842492104], ["2023-07-14T14:40:00-07:00", -296.69196274876595], ["2023-07-14T14:45:00-07:00", -296.96033531427383], ["2023-07-14T14:50:00-07:00", -297.2287061214447], ["2023-07-14T14:55:00-07:00", -297.5024732351303], ["2023-07-14T15:00:00-07:00", -297.77581042051315], ["2023-07-14T15:05:00-07:00", -298.0491464436054], ["2023-07-14T15:10:00-07:00", -298.32248228788376], ["2023-07-14T15:15:00-07:00", -298.5958181321621], ["2023-07-14T15:20:00-07:00", -298.86915397644043], ["2023-07-14T15:25:00-07:00", -299.14248979091644], ["2023-07-14T15:30:00-07:00", -299.40504655241966], ["2023-07-14T15:35:00-07:00", -299.66760328412056], ["2023-07-14T15:40:00-07:00", -299.93016001582146], ["2023-07-14T15:45:00-07:00", -300.19271674752235], ["2023-07-14T15:50:00-07:00", -300.4498839378357], ["2023-07-14T15:55:00-07:00", -300.7016615867615], ["2023-07-14T16:00:00-07:00", -300.94772993028164], ["2023-07-14T16:05:00-07:00", -301.19379884004593], ["2023-07-14T16:10:00-07:00", -301.43986934423447], ["2023-07-14T16:15:00-07:00", -301.69132405519485], ["2023-07-14T16:20:00-07:00", -301.9481630027294], ["2023-07-14T16:25:00-07:00", -302.1942387521267], ["2023-07-14T16:30:00-07:00", -302.44031624495983], ["2023-07-14T16:35:00-07:00", -302.68101301789284], ["2023-07-14T16:40:00-07:00", -302.9217115342617], ["2023-07-14T16:45:00-07:00", -303.16241179406643], ["2023-07-14T16:50:00-07:00", -303.40849627554417], ["2023-07-14T16:55:00-07:00", -303.6545825153589], ["2023-07-14T17:00:00-07:00", -303.8949593603611], ["2023-07-14T17:05:00-07:00", -304.13446755707264], ["2023-07-14T17:10:00-07:00", -304.3739775121212], ["2023-07-14T17:15:00-07:00", -304.61348924040794], ["2023-07-14T17:20:00-07:00", -304.8583777844906], ["2023-07-14T17:25:00-07:00", -305.1032681018114], ["2023-07-14T17:30:00-07:00", -305.3535352498293], ["2023-07-14T17:35:00-07:00", -305.6038041561842], ["2023-07-14T17:40:00-07:00", -305.859449878335], ["2023-07-14T17:45:00-07:00", -306.1150973588228], ["2023-07-14T17:50:00-07:00", -306.37074662745], ["2023-07-14T17:55:00-07:00", -306.6263976544142], ["2023-07-14T18:00:00-07:00", -306.88187266886234], ["2023-07-14T18:05:00-07:00", -307.13734944164753], ["2023-07-14T18:10:00-07:00", -307.398199275136], ["2023-07-14T18:15:00-07:00", -307.6590508669615], ["2023-07-14T18:20:00-07:00", -307.92527554929256], ["2023-07-14T18:25:00-07:00", -308.19150198996067], ["2023-07-14T18:30:00-07:00", -308.4577301889658], ["2023-07-14T18:35:00-07:00", -308.72396017611027], ["2023-07-14T18:40:00-07:00", -308.995563223958], ["2023-07-14T18:45:00-07:00", -309.2671680301428], ["2023-07-14T18:50:00-07:00", -309.54414589703083], ["2023-07-14T18:55:00-07:00", -309.8211255520582], ["2023-07-14T19:00:00-07:00", -310.09814707934856], ["2023-07-14T19:05:00-07:00", -310.1169574856758], ["2023-07-14T19:10:00-07:00", -310.1357684675604], ["2023-07-14T19:15:00-07:00", -310.1545800231397], ["2023-07-14T19:20:00-07:00", -310.17339215427637], ["2023-07-14T19:25:00-07:00", -310.19220485910773], ["2023-07-14T19:30:00-07:00", -310.2110181376338], ["2023-07-14T19:35:00-07:00", -310.2298319917172], ["2023-07-14T19:40:00-07:00", -310.24864641949534], ["2023-07-14T19:45:00-07:00", -310.2674614228308], ["2023-07-14T19:50:00-07:00", -310.286276999861], ["2023-07-14T19:55:00-07:00", -310.3050931505859], ["2023-07-14T20:00:00-07:00", -310.32390841655433], ["2023-07-14T20:05:00-07:00", -310.34272483177483], ["2023-07-14T20:10:00-07:00", -310.3615423962474], ["2023-07-14T20:15:00-07:00", -310.380361109972], ["2023-07-14T20:20:00-07:00", -310.399180971086], ["2023-07-14T20:25:00-07:00", -310.4180019814521], ["2023-07-14T20:30:00-07:00", -310.43682414107025], ["2023-07-14T20:35:00-07:00", -310.45564744994044], ["2023-07-14T20:40:00-07:00", -310.4744719080627], ["2023-07-14T20:45:00-07:00", -310.493297515437], ["2023-07-14T20:50:00-07:00", -310.5121242720634], ["2023-07-14T20:55:00-07:00", -310.53095217607915], ["2023-07-14T21:00:00-07:00", -310.5497867465019], ["2023-07-14T21:05:00-07:00", -310.56862189248204], ["2023-07-14T21:10:00-07:00", -310.58745761215687], ["2023-07-14T21:15:00-07:00", -310.6062939055264], ["2023-07-14T21:20:00-07:00", -310.6251307744533], ["2023-07-14T21:25:00-07:00", -310.64396821707487], ["2023-07-14T21:30:00-07:00", -310.66280623339117], ["2023-07-14T21:35:00-07:00", -310.6816448252648], ["2023-07-14T21:40:00-07:00", -310.70048399083316], ["2023-07-14T21:45:00-07:00", -310.7193237300962], ["2023-07-14T21:50:00-07:00", -310.73816404491663], ["2023-07-14T21:55:00-07:00", -310.75700493343174], ["2023-07-14T22:00:00-07:00", -310.7758525945246], ["2023-07-14T22:05:00-07:00", -310.7947008293122], ["2023-07-14T22:10:00-07:00", -310.8135496377945], ["2023-07-14T22:15:00-07:00", -310.83239902183414], ["2023-07-14T22:20:00-07:00", -310.8512489795685], ["2023-07-14T22:25:00-07:00", -310.87009951099753], ["2023-07-14T22:30:00-07:00", -310.88895061798394], ["2023-07-14T22:35:00-07:00", -310.90780229866505], ["2023-07-14T22:40:00-07:00", -310.92665455304086], ["2023-07-14T22:45:00-07:00", -310.9455073811114], ["2023-07-14T22:50:00-07:00", -310.96436078473926], ["2023-07-14T22:55:00-07:00", -310.98322628065944], ["2023-07-14T23:00:00-07:00", -311.00214048475027], ["2023-07-14T23:05:00-07:00", -311.02105526067317], ["2023-07-14T23:10:00-07:00", -311.03997061029077], ["2023-07-14T23:15:00-07:00", -311.0588865336031], ["2023-07-14T23:20:00-07:00", -311.07780302874744], ["2023-07-14T23:25:00-07:00", -311.0967200975865], ["2023-07-14T23:30:00-07:00", -311.11563773825765], ["2023-07-14T23:35:00-07:00", -311.1345559526235], ["2023-07-14T23:40:00-07:00", -311.15347474068403], ["2023-07-14T23:45:00-07:00", -311.17239410057664], ["2023-07-14T23:50:00-07:00", -311.19131403416395], ["2023-07-14T23:55:00-07:00", -311.2102345395833], ["2023-07-15T00:00:00-07:00", -311.2292903289199], ["2023-07-15T00:05:00-07:00", -311.24834611825645], ["2023-07-15T00:10:00-07:00", -311.267401907593], ["2023-07-15T00:15:00-07:00", -311.2864576969296], ["2023-07-15T00:20:00-07:00", -311.30551348626614], ["2023-07-15T00:25:00-07:00", -311.3245692756027], ["2023-07-15T00:30:00-07:00", -311.34362506493926], ["2023-07-15T00:35:00-07:00", -311.3626808542758], ["2023-07-15T00:40:00-07:00", -311.3817366436124], ["2023-07-15T00:45:00-07:00", -311.40079243294895], ["2023-07-15T00:50:00-07:00", -311.4198482222855], ["2023-07-15T00:55:00-07:00", -311.43890401162207], ["2023-07-15T01:00:00-07:00", -311.4581110756844], ["2023-07-15T01:05:00-07:00", -311.4773181397468], ["2023-07-15T01:10:00-07:00", -311.49652520380914], ["2023-07-15T01:15:00-07:00", -311.5157322678715], ["2023-07-15T01:20:00-07:00", -311.53493933193386], ["2023-07-15T01:25:00-07:00", -311.5541463959962], ["2023-07-15T01:30:00-07:00", -311.57335346005857], ["2023-07-15T01:35:00-07:00", -311.5925605241209], ["2023-07-15T01:40:00-07:00", -311.6117675881833], ["2023-07-15T01:45:00-07:00", -311.63097465224564], ["2023-07-15T01:50:00-07:00", -311.650181716308], ["2023-07-15T01:55:00-07:00", -311.66938878037035], ["2023-07-15T02:00:00-07:00", -311.68865484558046], ["2023-07-15T02:05:00-07:00", -311.70792091079056], ["2023-07-15T02:10:00-07:00", -311.72718697600067], ["2023-07-15T02:15:00-07:00", -311.74645304121077], ["2023-07-15T02:20:00-07:00", -311.7657191064209], ["2023-07-15T02:25:00-07:00", -311.784985171631], ["2023-07-15T02:30:00-07:00", -311.8042512368411], ["2023-07-15T02:35:00-07:00", -311.8235173020512], ["2023-07-15T02:40:00-07:00", -311.8427833672613], ["2023-07-15T02:45:00-07:00", -311.8620494324714], ["2023-07-15T02:50:00-07:00", -311.8813154976815], ["2023-07-15T02:55:00-07:00", -311.9005815628916], ["2023-07-15T03:00:00-07:00", -311.9198659583926], ["2023-07-15T03:05:00-07:00", -311.9391509182751], ["2023-07-15T03:10:00-07:00", -311.95843644067645], ["2023-07-15T03:15:00-07:00", -311.97772252745926], ["2023-07-15T03:20:00-07:00", -311.99700917862356], ["2023-07-15T03:25:00-07:00", -312.0162963923067], ["2023-07-15T03:30:00-07:00", -312.0355841703713], ["2023-07-15T03:35:00-07:00", -312.0548725128174], ["2023-07-15T03:40:00-07:00", -312.0741614177823], ["2023-07-15T03:45:00-07:00", -312.0934508871287], ["2023-07-15T03:50:00-07:00", -312.1127409208566], ["2023-07-15T03:55:00-07:00", -312.13203151896596], ["2023-07-15T04:00:00-07:00", -312.15133463032544], ["2023-07-15T04:05:00-07:00", -312.1706377416849], ["2023-07-15T04:10:00-07:00", -312.1899408530444], ["2023-07-15T04:15:00-07:00", -312.20924396440387], ["2023-07-15T04:20:00-07:00", -312.22854707576334], ["2023-07-15T04:25:00-07:00", -312.2478501871228], ["2023-07-15T04:30:00-07:00", -312.2671532984823], ["2023-07-15T04:35:00-07:00", -312.2864564098418], ["2023-07-15T04:40:00-07:00", -312.30575952120125], ["2023-07-15T04:45:00-07:00", -312.32506263256073], ["2023-07-15T04:50:00-07:00", -312.3443657439202], ["2023-07-15T04:55:00-07:00", -312.3636688552797], ["2023-07-15T05:00:00-07:00", -312.3829966261983], ["2023-07-15T05:05:00-07:00", -312.4023243971169], ["2023-07-15T05:10:00-07:00", -312.4216521680355], ["2023-07-15T05:15:00-07:00", -312.4409799389541], ["2023-07-15T05:20:00-07:00", -312.4603077098727], ["2023-07-15T05:25:00-07:00", -312.47963548079133], ["2023-07-15T05:30:00-07:00", -312.49896325170994], ["2023-07-15T05:35:00-07:00", -312.51829102262855], ["2023-07-15T05:40:00-07:00", -312.53761879354715], ["2023-07-15T05:45:00-07:00", -312.55694656446576], ["2023-07-15T05:50:00-07:00", -312.57627433538437], ["2023-07-15T05:55:00-07:00", -312.595602106303], ["2023-07-15T06:00:00-07:00", -312.61495555378497], ["2023-07-15T06:05:00-07:00", -312.63430900126696], ["2023-07-15T06:10:00-07:00", -312.6567215677351], ["2023-07-15T06:15:00-07:00", -312.67913461104035], ["2023-07-15T06:20:00-07:00", -312.7015481311828], ["2023-07-15T06:25:00-07:00", -312.72396211884916], ["2023-07-15T06:30:00-07:00", -312.74637657403946], ["2023-07-15T06:35:00-07:00", -312.76879152469337], ["2023-07-15T06:40:00-07:00", -312.79120695218444], ["2023-07-15T06:45:00-07:00", -312.813622828573], ["2023-07-15T06:50:00-07:00", -312.83603917248547], ["2023-07-15T06:55:00-07:00", -312.85845600254834], ["2023-07-15T07:00:00-07:00", -312.88089708052576], ["2023-07-15T07:05:00-07:00", -312.903338579461], ["2023-07-15T07:10:00-07:00", -312.92578051798046], ["2023-07-15T07:15:00-07:00", -312.9482229333371], ["2023-07-15T07:20:00-07:00", -312.97060946561396], ["2023-07-15T07:25:00-07:00", -312.99299646541476], ["2023-07-15T07:30:00-07:00", -313.01538395136595], ["2023-07-15T07:35:00-07:00", -313.0377718396485], ["2023-07-15T07:40:00-07:00", -313.0601601395756], ["2023-07-15T07:45:00-07:00", -313.08254887908697], ["2023-07-15T07:50:00-07:00", -313.10493804886937], ["2023-07-15T07:55:00-07:00", -313.1273276600987], ["2023-07-15T08:00:00-07:00", -313.1497382055968], ["2023-07-15T08:05:00-07:00", -313.1720889545977], ["2023-07-15T08:10:00-07:00", -313.1943712681532], ["2023-07-15T08:15:00-07:00", -313.21658500656486], ["2023-07-15T08:20:00-07:00", -313.2387301977724], ["2023-07-15T08:25:00-07:00", -313.2608068604022], ["2023-07-15T08:30:00-07:00", -313.28281493857503], ["2023-07-15T08:35:00-07:00", -313.304754441604], ["2023-07-15T08:40:00-07:00", -313.32662535086274], ["2023-07-15T08:45:00-07:00", -313.3484276663512], ["2023-07-15T08:50:00-07:00", -313.37016137875617], ["2023-07-15T08:55:00-07:00", -313.39182648807764], ["2023-07-15T09:00:00-07:00", -313.41333494335413], ["2023-07-15T09:05:00-07:00", -313.4347151312977], ["2023-07-15T09:10:00-07:00", -313.45595830120146], ["2023-07-15T09:15:00-07:00", -313.47706443443894], ["2023-07-15T09:20:00-07:00", -313.4980335030705], ["2023-07-15T09:25:00-07:00", -313.5188654512167], ["2023-07-15T09:30:00-07:00", -313.53956032544374], ["2023-07-15T09:35:00-07:00", -313.56011808663607], ["2023-07-15T09:40:00-07:00", -313.5805387366563], ["2023-07-15T09:45:00-07:00", -313.6008223500103], ["2023-07-15T09:50:00-07:00", -313.62096888944507], ["2023-07-15T09:55:00-07:00", -313.6409783177078], ["2023-07-15T10:00:00-07:00", -313.6606952380389], ["2023-07-15T10:05:00-07:00", -313.68027618154883], ["2023-07-15T10:10:00-07:00", -313.6997211370617], ["2023-07-15T10:15:00-07:00", -313.71909339539707], ["2023-07-15T10:20:00-07:00", -313.7384645193815], ["2023-07-15T10:25:00-07:00", -313.7578345090151], ["2023-07-15T10:30:00-07:00", -313.77720336429775], ["2023-07-15T10:35:00-07:00", -313.7965710852295], ["2023-07-15T10:40:00-07:00", -313.8159376718104], ["2023-07-15T10:45:00-07:00", -313.83530312404037], ["2023-07-15T10:50:00-07:00", -313.85466744191945], ["2023-07-15T10:55:00-07:00", -313.87403062544763], ["2023-07-15T11:00:00-07:00", -313.89328587614], ["2023-07-15T11:05:00-07:00", -313.91254055686295], ["2023-07-15T11:10:00-07:00", -313.9317946676165], ["2023-07-15T11:15:00-07:00", -313.9510482084006], ["2023-07-15T11:20:00-07:00", -313.9703011792153], ["2023-07-15T11:25:00-07:00", -313.9895535800606], ["2023-07-15T11:30:00-07:00", -314.0088054109365], ["2023-07-15T11:35:00-07:00", -314.02805667184293], ["2023-07-15T11:40:00-07:00", -314.04730736278], ["2023-07-15T11:45:00-07:00", -314.0665574837476], ["2023-07-15T11:50:00-07:00", -314.0858070347458], ["2023-07-15T11:55:00-07:00", -314.1050560157746], ["2023-07-15T12:00:00-07:00", -314.12426973320544], ["2023-07-15T12:05:00-07:00", -314.1434823088348], ["2023-07-15T12:10:00-07:00", -314.16269374266267], ["2023-07-15T12:15:00-07:00", -314.18190403468907], ["2023-07-15T12:20:00-07:00", -314.201113184914], ["2023-07-15T12:25:00-07:00", -314.22032119333744], ["2023-07-15T12:30:00-07:00", -314.2395280599594], ["2023-07-15T12:35:00-07:00", -314.2587337847799], ["2023-07-15T12:40:00-07:00", -314.27793836966157], ["2023-07-15T12:45:00-07:00", -314.29714181274176], ["2023-07-15T12:50:00-07:00", -314.31634411402047], ["2023-07-15T12:55:00-07:00", -314.3355452734977], ["2023-07-15T13:00:00-07:00", -314.35472235642374], ["2023-07-15T13:05:00-07:00", -314.37389829568565], ["2023-07-15T13:10:00-07:00", -314.3930730931461], ["2023-07-15T13:15:00-07:00", -314.4122467469424], ["2023-07-15T13:20:00-07:00", -314.43141925893724], ["2023-07-15T13:25:00-07:00", -314.45059062726796], ["2023-07-15T13:30:00-07:00", -314.4697608537972], ["2023-07-15T13:35:00-07:00", -314.4889299366623], ["2023-07-15T13:40:00-07:00", -314.50809787772596], ["2023-07-15T13:45:00-07:00", -314.5272646751255], ["2023-07-15T13:50:00-07:00", -314.5464303307235], ["2023-07-15T13:55:00-07:00", -314.56559484265745], ["2023-07-15T14:00:00-07:00", -314.5847257003188], ["2023-07-15T14:05:00-07:00", -314.6038554124534], ["2023-07-15T14:10:00-07:00", -314.6229839809239], ["2023-07-15T14:15:00-07:00", -314.64211140573025], ["2023-07-15T14:20:00-07:00", -314.66123768500984], ["2023-07-15T14:25:00-07:00", -314.6803628206253], ["2023-07-15T14:30:00-07:00", -314.6995553281158], ["2023-07-15T14:35:00-07:00", -314.71888028644025], ["2023-07-15T14:40:00-07:00", -314.73833773098886], ["2023-07-15T14:45:00-07:00", -314.7579275239259], ["2023-07-15T14:50:00-07:00", -314.77764977514744], ["2023-07-15T14:55:00-07:00", -314.79750451259315], ["2023-07-15T15:00:00-07:00", -314.81746109202504], ["2023-07-15T15:05:00-07:00", -314.83743456192315], ["2023-07-15T15:10:00-07:00", -314.85740803182125], ["2023-07-15T15:15:00-07:00", -314.87738131918013], ["2023-07-15T15:20:00-07:00", -314.89735441468656], ["2023-07-15T15:25:00-07:00", -314.91732726432383], ["2023-07-15T15:30:00-07:00", -314.937299894169], ["2023-07-15T15:35:00-07:00", -314.9572722595185], ["2023-07-15T15:40:00-07:00", -314.97724442370236], ["2023-07-15T15:45:00-07:00", -314.9972163774073], ["2023-07-15T15:50:00-07:00", -315.01718811132014], ["2023-07-15T15:55:00-07:00", -315.0371596533805], ["2023-07-15T16:00:00-07:00", -315.05710556171834], ["2023-07-15T16:05:00-07:00", -315.07705128006637], ["2023-07-15T16:10:00-07:00", -315.09699676930904], ["2023-07-15T16:15:00-07:00", -315.1169420219958], ["2023-07-15T16:20:00-07:00", -315.1368870642036], ["2023-07-15T16:25:00-07:00", -315.1568318605423], ["2023-07-15T16:30:00-07:00", -315.17677648179233], ["2023-07-15T16:35:00-07:00", -315.19672087579966], ["2023-07-15T16:40:00-07:00", -315.21666508726776], ["2023-07-15T16:45:00-07:00", -315.2366090975702], ["2023-07-15T16:50:00-07:00", -315.25655294395983], ["2023-07-15T16:55:00-07:00", -315.27649656124413], ["2023-07-15T17:00:00-07:00", -315.2964133359492], ["2023-07-15T17:05:00-07:00", -315.3160197548568], ["2023-07-15T17:10:00-07:00", -315.33555993437767], ["2023-07-15T17:15:00-07:00", -315.3550339564681], ["2023-07-15T17:20:00-07:00", -315.37444172240794], ["2023-07-15T17:25:00-07:00", -315.39378327690065], ["2023-07-15T17:30:00-07:00", -315.41305858269334], ["2023-07-15T17:35:00-07:00", -315.432267613709], ["2023-07-15T17:40:00-07:00", -315.45141041465104], ["2023-07-15T17:45:00-07:00", -315.47048695757985], ["2023-07-15T17:50:00-07:00", -315.48949725180864], ["2023-07-15T17:55:00-07:00", -315.50844135321677], ["2023-07-15T18:00:00-07:00", -315.5273061860353], ["2023-07-15T18:05:00-07:00", -315.54610478132963], ["2023-07-15T18:10:00-07:00", -315.56488548778], ["2023-07-15T18:15:00-07:00", -315.583666767925], ["2023-07-15T18:20:00-07:00", -315.6024486236274], ["2023-07-15T18:25:00-07:00", -315.62123105302453], ["2023-07-15T18:30:00-07:00", -315.64001405611634], ["2023-07-15T18:35:00-07:00", -315.6587976347655], ["2023-07-15T18:40:00-07:00", -315.6775817871094], ["2023-07-15T18:45:00-07:00", -315.6963665150106], ["2023-07-15T18:50:00-07:00", -315.7151518166065], ["2023-07-15T18:55:00-07:00", -315.7339376937598], ["2023-07-15T19:00:00-07:00", -315.75272684544325], ["2023-07-15T19:05:00-07:00", -315.77151657268405], ["2023-07-15T19:10:00-07:00", -315.79030687361956], ["2023-07-15T19:15:00-07:00", -315.8090977501124], ["2023-07-15T19:20:00-07:00", -315.8278892003], ["2023-07-15T19:25:00-07:00", -315.8466812260449], ["2023-07-15T19:30:00-07:00", -315.8654738254845], ["2023-07-15T19:35:00-07:00", -315.88426699861884], ["2023-07-15T19:40:00-07:00", -315.9030607473105], ["2023-07-15T19:45:00-07:00", -315.9218550696969], ["2023-07-15T19:50:00-07:00", -315.94064996764064], ["2023-07-15T19:55:00-07:00", -315.9594454392791], ["2023-07-15T20:00:00-07:00", -315.97824002429843], ["2023-07-15T20:05:00-07:00", -315.99703575856984], ["2023-07-15T20:10:00-07:00", -316.0158326420933], ["2023-07-15T20:15:00-07:00", -316.0346306730062], ["2023-07-15T20:20:00-07:00", -316.0534298531711], ["2023-07-15T20:25:00-07:00", -316.0722301825881], ["2023-07-15T20:30:00-07:00", -316.09103166125715], ["2023-07-15T20:35:00-07:00", -316.10983428917825], ["2023-07-15T20:40:00-07:00", -316.1286380663514], ["2023-07-15T20:45:00-07:00", -316.147442990914], ["2023-07-15T20:50:00-07:00", -316.1662490647286], ["2023-07-15T20:55:00-07:00", -316.1850562877953], ["2023-07-15T21:00:00-07:00", -316.2038701828569], ["2023-07-15T21:05:00-07:00", -316.2226852271706], ["2023-07-15T21:10:00-07:00", -316.24150141887367], ["2023-07-15T21:15:00-07:00", -316.2603187598288], ["2023-07-15T21:20:00-07:00", -316.279137250036], ["2023-07-15T21:25:00-07:00", -316.2979568876326], ["2023-07-15T21:30:00-07:00", -316.3167776744813], ["2023-07-15T21:35:00-07:00", -316.335599610582], ["2023-07-15T21:40:00-07:00", -316.3544226940721], ["2023-07-15T21:45:00-07:00", -316.3732469268143], ["2023-07-15T21:50:00-07:00", -316.39207230880857], ["2023-07-15T21:55:00-07:00", -316.41089884005487], ["2023-07-15T22:00:00-07:00", -316.42973272129893], ["2023-07-15T22:05:00-07:00", -316.4485677499324], ["2023-07-15T22:10:00-07:00", -316.46740392781794], ["2023-07-15T22:15:00-07:00", -316.4862412530929], ["2023-07-15T22:20:00-07:00", -316.5050797276199], ["2023-07-15T22:25:00-07:00", -316.5239193495363], ["2023-07-15T22:30:00-07:00", -316.54276012070477], ["2023-07-15T22:35:00-07:00", -316.56160203926265], ["2023-07-15T22:40:00-07:00", -316.5804451070726], ["2023-07-15T22:45:00-07:00", -316.59928932227194], ["2023-07-15T22:50:00-07:00", -316.61813468672335], ["2023-07-15T22:55:00-07:00", -316.6369927190244], ["2023-07-15T23:00:00-07:00", -316.65590004622936], ["2023-07-15T23:05:00-07:00", -316.6748073734343], ["2023-07-15T23:10:00-07:00", -316.69371470063925], ["2023-07-15T23:15:00-07:00", -316.7126220278442], ["2023-07-15T23:20:00-07:00", -316.73152935504913], ["2023-07-15T23:25:00-07:00", -316.7504366822541], ["2023-07-15T23:30:00-07:00", -316.769344009459], ["2023-07-15T23:35:00-07:00", -316.78825133666396], ["2023-07-15T23:40:00-07:00", -316.8071586638689], ["2023-07-15T23:45:00-07:00", -316.82606599107385], ["2023-07-15T23:50:00-07:00", -316.8449733182788], ["2023-07-15T23:55:00-07:00", -316.86388064548373], ["2023-07-16T00:00:00-07:00", -316.88292276486754], ["2023-07-16T00:05:00-07:00", -316.9019654523581], ["2023-07-16T00:10:00-07:00", -316.9210087098181], ["2023-07-16T00:15:00-07:00", -316.94005253724754], ["2023-07-16T00:20:00-07:00", -316.95909693464637], ["2023-07-16T00:25:00-07:00", -316.9781419020146], ["2023-07-16T00:30:00-07:00", -316.99718743748963], ["2023-07-16T00:35:00-07:00", -317.01623354293406], ["2023-07-16T00:40:00-07:00", -317.0352802183479], ["2023-07-16T00:45:00-07:00", -317.05432746373117], ["2023-07-16T00:50:00-07:00", -317.0733752772212], ["2023-07-16T00:55:00-07:00", -317.09242366068065], ["2023-07-16T01:00:00-07:00", -317.11162393540144], ["2023-07-16T01:05:00-07:00", -317.1308242101222], ["2023-07-16T01:10:00-07:00", -317.150024484843], ["2023-07-16T01:15:00-07:00", -317.1692247595638], ["2023-07-16T01:20:00-07:00", -317.1884250342846], ["2023-07-16T01:25:00-07:00", -317.2076253090054], ["2023-07-16T01:30:00-07:00", -317.22682558372617], ["2023-07-16T01:35:00-07:00", -317.24602585844696], ["2023-07-16T01:40:00-07:00", -317.26522613316774], ["2023-07-16T01:45:00-07:00", -317.28442640788853], ["2023-07-16T01:50:00-07:00", -317.3036266826093], ["2023-07-16T01:55:00-07:00", -317.3228269573301], ["2023-07-16T02:00:00-07:00", -317.34208624996245], ["2023-07-16T02:05:00-07:00", -317.3613455425948], ["2023-07-16T02:10:00-07:00", -317.38060483522713], ["2023-07-16T02:15:00-07:00", -317.3998641278595], ["2023-07-16T02:20:00-07:00", -317.4191234204918], ["2023-07-16T02:25:00-07:00", -317.43838271312416], ["2023-07-16T02:30:00-07:00", -317.4576420057565], ["2023-07-16T02:35:00-07:00", -317.47690129838884], ["2023-07-16T02:40:00-07:00", -317.4961605910212], ["2023-07-16T02:45:00-07:00", -317.5154198836535], ["2023-07-16T02:50:00-07:00", -317.53467917628586], ["2023-07-16T02:55:00-07:00", -317.5539384689182], ["2023-07-16T03:00:00-07:00", -317.57321609929204], ["2023-07-16T03:05:00-07:00", -317.5924937296659], ["2023-07-16T03:10:00-07:00", -317.6117713600397], ["2023-07-16T03:15:00-07:00", -317.63104899041355], ["2023-07-16T03:20:00-07:00", -317.6503266207874], ["2023-07-16T03:25:00-07:00", -317.6696042511612], ["2023-07-16T03:30:00-07:00", -317.68888188153505], ["2023-07-16T03:35:00-07:00", -317.7081595119089], ["2023-07-16T03:40:00-07:00", -317.7274371422827], ["2023-07-16T03:45:00-07:00", -317.74671477265656], ["2023-07-16T03:50:00-07:00", -317.7659924030304], ["2023-07-16T03:55:00-07:00", -317.78527003340423], ["2023-07-16T04:00:00-07:00", -317.8045596219599], ["2023-07-16T04:05:00-07:00", -317.8238492105156], ["2023-07-16T04:10:00-07:00", -317.8431387990713], ["2023-07-16T04:15:00-07:00", -317.862428387627], ["2023-07-16T04:20:00-07:00", -317.8817179761827], ["2023-07-16T04:25:00-07:00", -317.9010075647384], ["2023-07-16T04:30:00-07:00", -317.9202971532941], ["2023-07-16T04:35:00-07:00", -317.9395867418498], ["2023-07-16T04:40:00-07:00", -317.9588763304055], ["2023-07-16T04:45:00-07:00", -317.97816591896117], ["2023-07-16T04:50:00-07:00", -317.99745550751686], ["2023-07-16T04:55:00-07:00", -318.01674509607255], ["2023-07-16T05:00:00-07:00", -318.0360593572259], ["2023-07-16T05:05:00-07:00", -318.05537418089807], ["2023-07-16T05:10:00-07:00", -318.0746895670891], ["2023-07-16T05:15:00-07:00", -318.0940055157989], ["2023-07-16T05:20:00-07:00", -318.11332202889025], ["2023-07-16T05:25:00-07:00", -318.1326391045004], ["2023-07-16T05:30:00-07:00", -318.1519567426294], ["2023-07-16T05:35:00-07:00", -318.17127494327724], ["2023-07-16T05:40:00-07:00", -318.1905937064439], ["2023-07-16T05:45:00-07:00", -318.20991303399205], ["2023-07-16T05:50:00-07:00", -318.22923292405903], ["2023-07-16T05:55:00-07:00", -318.24855337664485], ["2023-07-16T06:00:00-07:00", -318.2679000776261], ["2023-07-16T06:05:00-07:00", -318.2872456535697], ["2023-07-16T06:10:00-07:00", -318.3065901044756], ["2023-07-16T06:15:00-07:00", -318.3259334322065], ["2023-07-16T06:20:00-07:00", -318.34527563489974], ["2023-07-16T06:25:00-07:00", -318.3646167125553], ["2023-07-16T06:30:00-07:00", -318.3839566651732], ["2023-07-16T06:35:00-07:00", -318.40329549461603], ["2023-07-16T06:40:00-07:00", -318.4226331990212], ["2023-07-16T06:45:00-07:00", -318.44196977838874], ["2023-07-16T06:50:00-07:00", -318.46130523458123], ["2023-07-16T06:55:00-07:00", -318.48063956573606], ["2023-07-16T07:00:00-07:00", -318.4999938458204], ["2023-07-16T07:05:00-07:00", -318.5193475652486], ["2023-07-16T07:10:00-07:00", -318.53870072215796], ["2023-07-16T07:15:00-07:00", -318.55805331654847], ["2023-07-16T07:20:00-07:00", -318.5774053502828], ["2023-07-16T07:25:00-07:00", -318.5967568214983], ["2023-07-16T07:30:00-07:00", -318.61610773205757], ["2023-07-16T07:35:00-07:00", -318.63545808009803], ["2023-07-16T07:40:00-07:00", -318.6548078674823], ["2023-07-16T07:45:00-07:00", -318.67415709234774], ["2023-07-16T07:50:00-07:00", -318.69350575469434], ["2023-07-16T07:55:00-07:00", -318.71285385638475], ["2023-07-16T08:00:00-07:00", -318.73221942037344], ["2023-07-16T08:05:00-07:00", -318.75158442370594], ["2023-07-16T08:10:00-07:00", -318.7709488645196], ["2023-07-16T08:15:00-07:00", -318.79031274467707], ["2023-07-16T08:20:00-07:00", -318.80967606417835], ["2023-07-16T08:25:00-07:00", -318.8290388211608], ["2023-07-16T08:30:00-07:00", -318.84840101748705], ["2023-07-16T08:35:00-07:00", -318.8677626531571], ["2023-07-16T08:40:00-07:00", -318.88712372630835], ["2023-07-16T08:45:00-07:00", -318.9064842388034], ["2023-07-16T08:50:00-07:00", -318.92584419064224], ["2023-07-16T08:55:00-07:00", -318.94520357996225], ["2023-07-16T09:00:00-07:00", -318.9644817635417], ["2023-07-16T09:05:00-07:00", -318.98375938273966], ["2023-07-16T09:10:00-07:00", -319.0030364394188], ["2023-07-16T09:15:00-07:00", -319.02231293171644], ["2023-07-16T09:20:00-07:00", -319.04158886149526], ["2023-07-16T09:25:00-07:00", -319.06086422875524], ["2023-07-16T09:30:00-07:00", -319.08013903163373], ["2023-07-16T09:35:00-07:00", -319.0994132719934], ["2023-07-16T09:40:00-07:00", -319.1186869479716], ["2023-07-16T09:45:00-07:00", -319.13796006143093], ["2023-07-16T09:50:00-07:00", -319.15723261237144], ["2023-07-16T09:55:00-07:00", -319.1765045989305], ["2023-07-16T10:00:00-07:00", -319.19562162831426], ["2023-07-16T10:05:00-07:00", -319.2147380914539], ["2023-07-16T10:10:00-07:00", -319.2338539864868], ["2023-07-16T10:15:00-07:00", -319.25296931527555], ["2023-07-16T10:20:00-07:00", -319.27208407595754], ["2023-07-16T10:25:00-07:00", -319.2911982703954], ["2023-07-16T10:30:00-07:00", -319.3103118967265], ["2023-07-16T10:35:00-07:00", -319.32942495681345], ["2023-07-16T10:40:00-07:00", -319.34853744879365], ["2023-07-16T10:45:00-07:00", -319.3676493745297], ["2023-07-16T10:50:00-07:00", -319.386760732159], ["2023-07-16T10:55:00-07:00", -319.4058715235442], ["2023-07-16T11:00:00-07:00", -319.4248737413436], ["2023-07-16T11:05:00-07:00", -319.4438742492348], ["2023-07-16T11:10:00-07:00", -319.4628730490804], ["2023-07-16T11:15:00-07:00", -319.4818701390177], ["2023-07-16T11:20:00-07:00", -319.5008655190468], ["2023-07-16T11:25:00-07:00", -319.5198591891676], ["2023-07-16T11:30:00-07:00", -319.5388511493802], ["2023-07-16T11:35:00-07:00", -319.55784139968455], ["2023-07-16T11:40:00-07:00", -319.57682994008064], ["2023-07-16T11:45:00-07:00", -319.5958167705685], ["2023-07-16T11:50:00-07:00", -319.61480189301074], ["2023-07-16T11:55:00-07:00", -319.63378530554473], ["2023-07-16T12:00:00-07:00", -319.65273189917207], ["2023-07-16T12:05:00-07:00", -319.6716773509979], ["2023-07-16T12:10:00-07:00", -319.6906216610223], ["2023-07-16T12:15:00-07:00", -319.70956483110785], ["2023-07-16T12:20:00-07:00", -319.7285068593919], ["2023-07-16T12:25:00-07:00", -319.7474477458745], ["2023-07-16T12:30:00-07:00", -319.76641975156963], ["2023-07-16T12:35:00-07:00", -319.7855248041451], ["2023-07-16T12:40:00-07:00", -319.80476292967796], ["2023-07-16T12:45:00-07:00", -319.82413413748145], ["2023-07-16T12:50:00-07:00", -319.8436383921653], ["2023-07-16T12:55:00-07:00", -319.86327571980655], ["2023-07-16T13:00:00-07:00", -319.88302187621593], ["2023-07-16T13:05:00-07:00", -319.90284305997193], ["2023-07-16T13:10:00-07:00", -319.922730807215], ["2023-07-16T13:15:00-07:00", -319.9426850453019], ["2023-07-16T13:20:00-07:00", -319.9627057183534], ["2023-07-16T13:25:00-07:00", -319.98279284499586], ["2023-07-16T13:30:00-07:00", -320.0029464047402], ["2023-07-16T13:35:00-07:00", -320.02316639199853], ["2023-07-16T13:40:00-07:00", -320.04345279559493], ["2023-07-16T13:45:00-07:00", -320.0638056695461], ["2023-07-16T13:50:00-07:00", -320.0842249970883], ["2023-07-16T13:55:00-07:00", -320.10471080616117], ["2023-07-16T14:00:00-07:00", -320.1252272631973], ["2023-07-16T14:05:00-07:00", -320.145694533363], ["2023-07-16T14:10:00-07:00", -320.16609567031264], ["2023-07-16T14:15:00-07:00", -320.1864304896444], ["2023-07-16T14:20:00-07:00", -320.2066989932209], ["2023-07-16T14:25:00-07:00", -320.22690116241574], ["2023-07-16T14:30:00-07:00", -320.2470369786024], ["2023-07-16T14:35:00-07:00", -320.2671063952148], ["2023-07-16T14:40:00-07:00", -320.2871094774455], ["2023-07-16T14:45:00-07:00", -320.3070461973548], ["2023-07-16T14:50:00-07:00", -320.32691656425595], ["2023-07-16T14:55:00-07:00", -320.3467205595225], ["2023-07-16T15:00:00-07:00", -320.36642739735544], ["2023-07-16T15:05:00-07:00", -320.3860102966428], ["2023-07-16T15:10:00-07:00", -320.4054607767612], ["2023-07-16T15:15:00-07:00", -320.4247788172215], ["2023-07-16T15:20:00-07:00", -320.44396441057324], ["2023-07-16T15:25:00-07:00", -320.46301752887666], ["2023-07-16T15:30:00-07:00", -320.4819381348789], ["2023-07-16T15:35:00-07:00", -320.500793479383], ["2023-07-16T15:40:00-07:00", -320.5196499694139], ["2023-07-16T15:45:00-07:00", -320.5385076068342], ["2023-07-16T15:50:00-07:00", -320.55736638978124], ["2023-07-16T15:55:00-07:00", -320.57622631825507], ["2023-07-16T16:00:00-07:00", -320.59506295621395], ["2023-07-16T16:05:00-07:00", -320.61389959417284], ["2023-07-16T16:10:00-07:00", -320.6327362321317], ["2023-07-16T16:15:00-07:00", -320.6515728700906], ["2023-07-16T16:20:00-07:00", -320.6704095080495], ["2023-07-16T16:25:00-07:00", -320.6892461460084], ["2023-07-16T16:30:00-07:00", -320.70808278396726], ["2023-07-16T16:35:00-07:00", -320.72691942192614], ["2023-07-16T16:40:00-07:00", -320.745756059885], ["2023-07-16T16:45:00-07:00", -320.7645926978439], ["2023-07-16T16:50:00-07:00", -320.7834293358028], ["2023-07-16T16:55:00-07:00", -320.8022659737617], ["2023-07-16T17:00:00-07:00", -320.8210769277066], ["2023-07-16T17:05:00-07:00", -320.8398890309036], ["2023-07-16T17:10:00-07:00", -320.85870228148997], ["2023-07-16T17:15:00-07:00", -320.8775166813284], ["2023-07-16T17:20:00-07:00", -320.8963322285563], ["2023-07-16T17:25:00-07:00", -320.9151489250362], ["2023-07-16T17:30:00-07:00", -320.9339667689055], ["2023-07-16T17:35:00-07:00", -320.9527857620269], ["2023-07-16T17:40:00-07:00", -320.9716059025377], ["2023-07-16T17:45:00-07:00", -320.99042719230056], ["2023-07-16T17:50:00-07:00", -321.0092496294528], ["2023-07-16T17:55:00-07:00", -321.02807321585715], ["2023-07-16T18:00:00-07:00", -321.0468849800527], ["2023-07-16T18:05:00-07:00", -321.0656973198056], ["2023-07-16T18:10:00-07:00", -321.08451023325324], ["2023-07-16T18:15:00-07:00", -321.1033237222582], ["2023-07-16T18:20:00-07:00", -321.1221377849579], ["2023-07-16T18:25:00-07:00", -321.14095242135227], ["2023-07-16T18:30:00-07:00", -321.159767633304], ["2023-07-16T18:35:00-07:00", -321.17858341895044], ["2023-07-16T18:40:00-07:00", -321.1973997801542], ["2023-07-16T18:45:00-07:00", -321.2162167150527], ["2023-07-16T18:50:00-07:00", -321.23503422550857], ["2023-07-16T18:55:00-07:00", -321.2538523096591], ["2023-07-16T19:00:00-07:00", -321.2726736664772], ["2023-07-16T19:05:00-07:00", -321.29149559699], ["2023-07-16T19:10:00-07:00", -321.3103181030601], ["2023-07-16T19:15:00-07:00", -321.32914118282497], ["2023-07-16T19:20:00-07:00", -321.34796483814716], ["2023-07-16T19:25:00-07:00", -321.36678906716406], ["2023-07-16T19:30:00-07:00", -321.38561386987567], ["2023-07-16T19:35:00-07:00", -321.4044392481446], ["2023-07-16T19:40:00-07:00", -321.4232652001083], ["2023-07-16T19:45:00-07:00", -321.4420917276293], ["2023-07-16T19:50:00-07:00", -321.460918828845], ["2023-07-16T19:55:00-07:00", -321.47974650375545], ["2023-07-16T20:00:00-07:00", -321.49857329390943], ["2023-07-16T20:05:00-07:00", -321.51740123331547], ["2023-07-16T20:10:00-07:00", -321.53623032197356], ["2023-07-16T20:15:00-07:00", -321.5550605598837], ["2023-07-16T20:20:00-07:00", -321.5738919470459], ["2023-07-16T20:25:00-07:00", -321.5927244834602], ["2023-07-16T20:30:00-07:00", -321.61155816726387], ["2023-07-16T20:35:00-07:00", -321.6303930003196], ["2023-07-16T20:40:00-07:00", -321.6492289826274], ["2023-07-16T20:45:00-07:00", -321.66806611418724], ["2023-07-16T20:50:00-07:00", -321.68690439499915], ["2023-07-16T20:55:00-07:00", -321.7057438250631], ["2023-07-16T21:00:00-07:00", -321.72458991780877], ["2023-07-16T21:05:00-07:00", -321.74343601055443], ["2023-07-16T21:10:00-07:00", -321.7622821033001], ["2023-07-16T21:15:00-07:00", -321.78112819604576], ["2023-07-16T21:20:00-07:00", -321.7999742887914], ["2023-07-16T21:25:00-07:00", -321.8188203815371], ["2023-07-16T21:30:00-07:00", -321.83766647428274], ["2023-07-16T21:35:00-07:00", -321.8565125670284], ["2023-07-16T21:40:00-07:00", -321.87535865977407], ["2023-07-16T21:45:00-07:00", -321.8942047525197], ["2023-07-16T21:50:00-07:00", -321.9130508452654], ["2023-07-16T21:55:00-07:00", -321.93189693801105], ["2023-07-16T22:00:00-07:00", -321.9507492277771], ["2023-07-16T22:05:00-07:00", -321.9696015175432], ["2023-07-16T22:10:00-07:00", -321.98845380730927], ["2023-07-16T22:15:00-07:00", -322.00730609707534], ["2023-07-16T22:20:00-07:00", -322.0261583868414], ["2023-07-16T22:25:00-07:00", -322.0450106766075], ["2023-07-16T22:30:00-07:00", -322.06386296637356], ["2023-07-16T22:35:00-07:00", -322.08271525613964], ["2023-07-16T22:40:00-07:00", -322.1015675459057], ["2023-07-16T22:45:00-07:00", -322.1204198356718], ["2023-07-16T22:50:00-07:00", -322.13927212543786], ["2023-07-16T22:55:00-07:00", -322.15812441520393], ["2023-07-16T23:00:00-07:00", -322.17748629301786], ["2023-07-16T23:05:00-07:00", -322.1968481708318], ["2023-07-16T23:10:00-07:00", -322.21621004864573], ["2023-07-16T23:15:00-07:00", -322.23557192645967], ["2023-07-16T23:20:00-07:00", -322.2549338042736], ["2023-07-16T23:25:00-07:00", -322.27429568208754], ["2023-07-16T23:30:00-07:00", -322.2936575599015], ["2023-07-16T23:35:00-07:00", -322.3130194377154], ["2023-07-16T23:40:00-07:00", -322.33238131552935], ["2023-07-16T23:45:00-07:00", -322.3517431933433], ["2023-07-16T23:50:00-07:00", -322.3711050711572], ["2023-07-16T23:55:00-07:00", -322.39046694897115], ["2023-07-17T00:00:00-07:00", -322.4099636580795], ["2023-07-17T00:05:00-07:00", -322.4294598083943], ["2023-07-17T00:10:00-07:00", -322.4489554017782], ["2023-07-17T00:15:00-07:00", -322.4684504363686], ["2023-07-17T00:20:00-07:00", -322.48794491402805], ["2023-07-17T00:25:00-07:00", -322.50743883289397], ["2023-07-17T00:30:00-07:00", -322.526932194829], ["2023-07-17T00:35:00-07:00", -322.54642499797046], ["2023-07-17T00:40:00-07:00", -322.5659172423184], ["2023-07-17T00:45:00-07:00", -322.5854089297354], ["2023-07-17T00:50:00-07:00", -322.6049000583589], ["2023-07-17T00:55:00-07:00", -322.6243906300515], ["2023-07-17T01:00:00-07:00", -322.6440321020782], ["2023-07-17T01:05:00-07:00", -322.6636741273105], ["2023-07-17T01:10:00-07:00", -322.6833167076111], ["2023-07-17T01:15:00-07:00", -322.70295984111726], ["2023-07-17T01:20:00-07:00", -322.7226035296917], ["2023-07-17T01:25:00-07:00", -322.74224777147174], ["2023-07-17T01:30:00-07:00", -322.76189256832004], ["2023-07-17T01:35:00-07:00", -322.78153791837394], ["2023-07-17T01:40:00-07:00", -322.8011838234961], ["2023-07-17T01:45:00-07:00", -322.8208302818239], ["2023-07-17T01:50:00-07:00", -322.8404772952199], ["2023-07-17T01:55:00-07:00", -322.86012486182153], ["2023-07-17T02:00:00-07:00", -322.87983203679323], ["2023-07-17T02:05:00-07:00", -322.89953976497054], ["2023-07-17T02:10:00-07:00", -322.91924804635346], ["2023-07-17T02:15:00-07:00", -322.93895687907934], ["2023-07-17T02:20:00-07:00", -322.95866626501083], ["2023-07-17T02:25:00-07:00", -322.97837620414793], ["2023-07-17T02:30:00-07:00", -322.99808669649065], ["2023-07-17T02:35:00-07:00", -323.0177977401763], ["2023-07-17T02:40:00-07:00", -323.0375093370676], ["2023-07-17T02:45:00-07:00", -323.0572214871645], ["2023-07-17T02:50:00-07:00", -323.07693418860435], ["2023-07-17T02:55:00-07:00", -323.0966474432498], ["2023-07-17T03:00:00-07:00", -323.1163795925677], ["2023-07-17T03:05:00-07:00", -323.13611174188554], ["2023-07-17T03:10:00-07:00", -323.1558438912034], ["2023-07-17T03:15:00-07:00", -323.17557604052126], ["2023-07-17T03:20:00-07:00", -323.1953081898391], ["2023-07-17T03:25:00-07:00", -323.215040339157], ["2023-07-17T03:30:00-07:00", -323.23477248847485], ["2023-07-17T03:35:00-07:00", -323.2545046377927], ["2023-07-17T03:40:00-07:00", -323.27423678711057], ["2023-07-17T03:45:00-07:00", -323.2939689364284], ["2023-07-17T03:50:00-07:00", -323.3137010857463], ["2023-07-17T03:55:00-07:00", -323.33343323506415], ["2023-07-17T04:00:00-07:00", -323.35317734628916], ["2023-07-17T04:05:00-07:00", -323.37292145751417], ["2023-07-17T04:10:00-07:00", -323.3926655687392], ["2023-07-17T04:15:00-07:00", -323.4124096799642], ["2023-07-17T04:20:00-07:00", -323.4321537911892], ["2023-07-17T04:25:00-07:00", -323.4518979024142], ["2023-07-17T04:30:00-07:00", -323.4716420136392], ["2023-07-17T04:35:00-07:00", -323.4913861248642], ["2023-07-17T04:40:00-07:00", -323.51113023608923], ["2023-07-17T04:45:00-07:00", -323.53087434731424], ["2023-07-17T04:50:00-07:00", -323.55061845853925], ["2023-07-17T04:55:00-07:00", -323.57036256976426], ["2023-07-17T05:00:00-07:00", -323.5905210599303], ["2023-07-17T05:05:00-07:00", -323.6106795500964], ["2023-07-17T05:10:00-07:00", -323.63083804026246], ["2023-07-17T05:15:00-07:00", -323.65099653042853], ["2023-07-17T05:20:00-07:00", -323.6711550205946], ["2023-07-17T05:25:00-07:00", -323.69131351076066], ["2023-07-17T05:30:00-07:00", -323.71147200092673], ["2023-07-17T05:35:00-07:00", -323.7316304910928], ["2023-07-17T05:40:00-07:00", -323.75178898125887], ["2023-07-17T05:45:00-07:00", -323.77194747142494], ["2023-07-17T05:50:00-07:00", -323.792105961591], ["2023-07-17T05:55:00-07:00", -323.8122644517571], ["2023-07-17T06:00:00-07:00", -323.8324486427009], ["2023-07-17T06:05:00-07:00", -324.2177106253803], ["2023-07-17T06:10:00-07:00", -324.6038295440376], ["2023-07-17T06:15:00-07:00", -324.9899484626949], ["2023-07-17T06:20:00-07:00", -325.3760673813522], ["2023-07-17T06:25:00-07:00", -325.7621863000095], ["2023-07-17T06:30:00-07:00", -326.1483052186668], ["2023-07-17T06:35:00-07:00", -326.5344241373241], ["2023-07-17T06:40:00-07:00", -326.9205430559814], ["2023-07-17T06:45:00-07:00", -327.3066619746387], ["2023-07-17T06:50:00-07:00", -327.692780893296], ["2023-07-17T06:55:00-07:00", -328.0788998119533], ["2023-07-17T07:00:00-07:00", -328.51916129514575], ["2023-07-17T07:05:00-07:00", -328.96278826519847], ["2023-07-17T07:10:00-07:00", -329.39612708613276], ["2023-07-17T07:15:00-07:00", -329.8405148796737], ["2023-07-17T07:20:00-07:00", -330.28594417497516], ["2023-07-17T07:25:00-07:00", -330.7332077138126], ["2023-07-17T07:30:00-07:00", -331.1734452061355], ["2023-07-17T07:35:00-07:00", -331.6094513647258], ["2023-07-17T07:40:00-07:00", -332.03779734298587], ["2023-07-17T07:45:00-07:00", -332.46366019174457], ["2023-07-17T07:50:00-07:00", -332.8862848393619], ["2023-07-17T07:55:00-07:00", -333.30578760430217], ["2023-07-17T08:00:00-07:00", -333.72406757995486], ["2023-07-17T08:05:00-07:00", -334.14044423028827], ["2023-07-17T08:10:00-07:00", -334.5545518808067], ["2023-07-17T08:15:00-07:00", -334.9690938703716], ["2023-07-17T08:20:00-07:00", -335.3815009407699], ["2023-07-17T08:25:00-07:00", -335.7951999120414], ["2023-07-17T08:30:00-07:00", -336.2084779255092], ["2023-07-17T08:35:00-07:00", -336.620149563998], ["2023-07-17T08:40:00-07:00", -337.03238106891513], ["2023-07-17T08:45:00-07:00", -337.443566005677], ["2023-07-17T08:50:00-07:00", -337.85357327386737], ["2023-07-17T08:55:00-07:00", -338.2614929191768], ["2023-07-17T09:00:00-07:00", -338.66655484959483], ["2023-07-17T09:05:00-07:00", -339.0705173127353], ["2023-07-17T09:10:00-07:00", -339.4730382375419], ["2023-07-17T09:15:00-07:00", -339.87493849918246], ["2023-07-17T09:20:00-07:00", -340.2756920270622], ["2023-07-17T09:25:00-07:00", -340.67562497779727], ["2023-07-17T09:30:00-07:00", -341.0749107412994], ["2023-07-17T09:35:00-07:00", -341.47430424019694], ["2023-07-17T09:40:00-07:00", -341.8712284974754], ["2023-07-17T09:45:00-07:00", -342.2619178406894], ["2023-07-17T09:50:00-07:00", -342.6515126042068], ["2023-07-17T09:55:00-07:00", -343.04110575839877], ["2023-07-17T10:00:00-07:00", -343.427401881665], ["2023-07-17T10:05:00-07:00", -343.8132323734462], ["2023-07-17T10:10:00-07:00", -344.19869826361537], ["2023-07-17T10:15:00-07:00", -344.5837345831096], ["2023-07-17T10:20:00-07:00", -344.96278316900134], ["2023-07-17T10:25:00-07:00", -345.34170169755816], ["2023-07-17T10:30:00-07:00", -345.7259481959045], ["2023-07-17T10:35:00-07:00", -346.10929487273097], ["2023-07-17T10:40:00-07:00", -346.48668442294], ["2023-07-17T10:45:00-07:00", -346.858115863055], ["2023-07-17T10:50:00-07:00", -347.22307608649135], ["2023-07-17T10:55:00-07:00", -347.5878158323467], ["2023-07-17T11:00:00-07:00", -347.950403790921], ["2023-07-17T11:05:00-07:00", -348.3127221278846], ["2023-07-17T11:10:00-07:00", -348.674834292382], ["2023-07-17T11:15:00-07:00", -349.0362574867904], ["2023-07-17T11:20:00-07:00", -349.39747278019786], ["2023-07-17T11:25:00-07:00", -349.7587340287864], ["2023-07-17T11:30:00-07:00", -350.11961905285716], ["2023-07-17T11:35:00-07:00", -350.48009626194835], ["2023-07-17T11:40:00-07:00", -350.84045008942485], ["2023-07-17T11:45:00-07:00", -351.18934194371104], ["2023-07-17T11:50:00-07:00", -351.53785813972354], ["2023-07-17T11:55:00-07:00", -351.8800968043506], ["2023-07-17T12:00:00-07:00", -352.19596345350146], ["2023-07-17T12:05:00-07:00", -352.51177440211177], ["2023-07-17T12:10:00-07:00", -352.82210601493716], ["2023-07-17T12:15:00-07:00", -353.13209922239184], ["2023-07-17T12:20:00-07:00", -353.426052313298], ["2023-07-17T12:25:00-07:00", -353.71996683999896], ["2023-07-17T12:30:00-07:00", -354.0132756642997], ["2023-07-17T12:35:00-07:00", -354.30112360045314], ["2023-07-17T12:40:00-07:00", -354.58890960738063], ["2023-07-17T12:45:00-07:00", -354.8769047372043], ["2023-07-17T12:50:00-07:00", -355.1702772192657], ["2023-07-17T12:55:00-07:00", -355.4640433900058], ["2023-07-17T13:00:00-07:00", -355.7635194770992], ["2023-07-17T13:05:00-07:00", -356.0632650665939], ["2023-07-17T13:10:00-07:00", -356.35822577401996], ["2023-07-17T13:15:00-07:00", -356.65937269851565], ["2023-07-17T13:20:00-07:00", -356.9608317129314], ["2023-07-17T13:25:00-07:00", -357.26238260790706], ["2023-07-17T13:30:00-07:00", -357.55887461826205], ["2023-07-17T13:35:00-07:00", -357.85031689330935], ["2023-07-17T13:40:00-07:00", -358.14584059640765], ["2023-07-17T13:45:00-07:00", -358.4417722634971], ["2023-07-17T13:50:00-07:00", -358.7325268499553], ["2023-07-17T13:55:00-07:00", -359.029027055949], ["2023-07-17T14:00:00-07:00", -359.32543398067355], ["2023-07-17T14:05:00-07:00", -359.6170179657638], ["2023-07-17T14:10:00-07:00", -359.90872065350413], ["2023-07-17T14:15:00-07:00", -360.18339465186], ["2023-07-17T14:20:00-07:00", -360.4581322185695], ["2023-07-17T14:25:00-07:00", -360.72208116576076], ["2023-07-17T14:30:00-07:00", -360.9860743395984], ["2023-07-17T14:35:00-07:00", -361.2480740658939], ["2023-07-17T14:40:00-07:00", -361.50460244342685], ["2023-07-17T14:45:00-07:00", -361.7611345462501], ["2023-07-17T14:50:00-07:00", -362.0176698677242], ["2023-07-17T14:55:00-07:00", -362.2796834819019], ["2023-07-17T15:00:00-07:00", -362.541291218251], ["2023-07-17T15:05:00-07:00", -362.7971992008388], ["2023-07-17T15:10:00-07:00", -363.05283964797854], ["2023-07-17T15:15:00-07:00", -363.3027593754232], ["2023-07-17T15:20:00-07:00", -363.5415187738836], ["2023-07-17T15:25:00-07:00", -363.7800241075456], ["2023-07-17T15:30:00-07:00", -364.01283602043986], ["2023-07-17T15:35:00-07:00", -364.2453980408609], ["2023-07-17T15:40:00-07:00", -364.4777100943029], ["2023-07-17T15:45:00-07:00", -364.709772285074], ["2023-07-17T15:50:00-07:00", -364.9361647926271], ["2023-07-17T15:55:00-07:00", -365.1623122654855], ["2023-07-17T16:00:00-07:00", -365.38792146369815], ["2023-07-17T16:05:00-07:00", -365.61328598484397], ["2023-07-17T16:10:00-07:00", -365.82761765643954], ["2023-07-17T16:15:00-07:00", -366.0471027158201], ["2023-07-17T16:20:00-07:00", -366.2609631381929], ["2023-07-17T16:25:00-07:00", -366.4747224114835], ["2023-07-17T16:30:00-07:00", -366.68310045823455], ["2023-07-17T16:35:00-07:00", -366.8860977701843], ["2023-07-17T16:40:00-07:00", -367.094479303807], ["2023-07-17T16:45:00-07:00", -367.3028625808656], ["2023-07-17T16:50:00-07:00", -367.5112476013601], ["2023-07-17T16:55:00-07:00", -367.7196343652904], ["2023-07-17T17:00:00-07:00", -367.9277387224138], ["2023-07-17T17:05:00-07:00", -368.1242243312299], ["2023-07-17T17:10:00-07:00", -368.31533662602305], ["2023-07-17T17:15:00-07:00", -368.5064506791532], ["2023-07-17T17:20:00-07:00", -368.69756650552154], ["2023-07-17T17:25:00-07:00", -368.8886840902269], ["2023-07-17T17:30:00-07:00", -369.07980343326926], ["2023-07-17T17:35:00-07:00", -369.27092453464866], ["2023-07-17T17:40:00-07:00", -369.46204740926623], ["2023-07-17T17:45:00-07:00", -369.65317204222083], ["2023-07-17T17:50:00-07:00", -369.84429843351245], ["2023-07-17T17:55:00-07:00", -370.0354265831411], ["2023-07-17T18:00:00-07:00", -370.2264236919582], ["2023-07-17T18:05:00-07:00", -370.4174225591123], ["2023-07-17T18:10:00-07:00", -370.60842318460345], ["2023-07-17T18:15:00-07:00", -370.7994255684316], ["2023-07-17T18:20:00-07:00", -370.99580101296306], ["2023-07-17T18:25:00-07:00", -371.1921782158315], ["2023-07-17T18:30:00-07:00", -371.39392847940326], ["2023-07-17T18:35:00-07:00", -371.5956805162132], ["2023-07-17T18:40:00-07:00", -371.7974343113601], ["2023-07-17T18:45:00-07:00", -371.9991898648441], ["2023-07-17T18:50:00-07:00", -372.20094717666507], ["2023-07-17T18:55:00-07:00", -372.4027062468231], ["2023-07-17T19:00:00-07:00", -372.6044962666929], ["2023-07-17T19:05:00-07:00", -372.6232997812331], ["2023-07-17T19:10:00-07:00", -372.642103869468], ["2023-07-17T19:15:00-07:00", -372.6609085313976], ["2023-07-17T19:20:00-07:00", -372.67971376888454], ["2023-07-17T19:25:00-07:00", -372.6985195800662], ["2023-07-17T19:30:00-07:00", -372.7173259668052], ["2023-07-17T19:35:00-07:00", -372.73613292723894], ["2023-07-17T19:40:00-07:00", -372.75494046136737], ["2023-07-17T19:45:00-07:00", -372.77374857105315], ["2023-07-17T19:50:00-07:00", -372.79255725443363], ["2023-07-17T19:55:00-07:00", -372.81136651337147], ["2023-07-17T20:00:00-07:00", -372.8301748856902], ["2023-07-17T20:05:00-07:00", -372.84898383170366], ["2023-07-17T20:10:00-07:00", -372.86779335327446], ["2023-07-17T20:15:00-07:00", -372.88660344854], ["2023-07-17T20:20:00-07:00", -372.90541411936283], ["2023-07-17T20:25:00-07:00", -372.9242253638804], ["2023-07-17T20:30:00-07:00", -372.9430371839553], ["2023-07-17T20:35:00-07:00", -372.96184957772493], ["2023-07-17T20:40:00-07:00", -372.98066254518926], ["2023-07-17T20:45:00-07:00", -372.99947608821094], ["2023-07-17T20:50:00-07:00", -373.0182902049273], ["2023-07-17T20:55:00-07:00", -373.03710489720106], ["2023-07-17T21:00:00-07:00", -373.0559256840497], ["2023-07-17T21:05:00-07:00", -373.0747470445931], ["2023-07-17T21:10:00-07:00", -373.0935689806938], ["2023-07-17T21:15:00-07:00", -373.11239149048924], ["2023-07-17T21:20:00-07:00", -373.1312145739794], ["2023-07-17T21:25:00-07:00", -373.15003823302686], ["2023-07-17T21:30:00-07:00", -373.16886246576905], ["2023-07-17T21:35:00-07:00", -373.18768727220595], ["2023-07-17T21:40:00-07:00", -373.2065126542002], ["2023-07-17T21:45:00-07:00", -373.22533860988915], ["2023-07-17T21:50:00-07:00", -373.24416514113545], ["2023-07-17T21:55:00-07:00", -373.26299224607646], ["2023-07-17T22:00:00-07:00", -373.2818261273205], ["2023-07-17T22:05:00-07:00", -373.3006605822593], ["2023-07-17T22:10:00-07:00", -373.3194956108928], ["2023-07-17T22:15:00-07:00", -373.33833121322095], ["2023-07-17T22:20:00-07:00", -373.3571673911065], ["2023-07-17T22:25:00-07:00", -373.3760041426867], ["2023-07-17T22:30:00-07:00", -373.39484146796167], ["2023-07-17T22:35:00-07:00", -373.4136793669313], ["2023-07-17T22:40:00-07:00", -373.4325178414583], ["2023-07-17T22:45:00-07:00", -373.45135688968], ["2023-07-17T22:50:00-07:00", -373.47019651159644], ["2023-07-17T22:55:00-07:00", -373.4890482276678], ["2023-07-17T23:00:00-07:00", -373.50841010548174], ["2023-07-17T23:05:00-07:00", -373.52777254395187], ["2023-07-17T23:10:00-07:00", -373.5471355430782], ["2023-07-17T23:15:00-07:00", -373.56649910472333], ["2023-07-17T23:20:00-07:00", -373.5858632270247], ["2023-07-17T23:25:00-07:00", -373.60522791184485], ["2023-07-17T23:30:00-07:00", -373.6245931573212], ["2023-07-17T23:35:00-07:00", -373.64395896345377], ["2023-07-17T23:40:00-07:00", -373.66332533210516], ["2023-07-17T23:45:00-07:00", -373.68269226141274], ["2023-07-17T23:50:00-07:00", -373.7020597513765], ["2023-07-17T23:55:00-07:00", -373.7214278038591], ["2023-07-18T00:00:00-07:00", -373.74093120731413], ["2023-07-18T00:05:00-07:00", -373.76043461076915], ["2023-07-18T00:10:00-07:00", -373.7799380142242], ["2023-07-18T00:15:00-07:00", -373.7994414176792], ["2023-07-18T00:20:00-07:00", -373.8189448211342], ["2023-07-18T00:25:00-07:00", -373.83844822458923], ["2023-07-18T00:30:00-07:00", -373.85795162804425], ["2023-07-18T00:35:00-07:00", -373.87745503149927], ["2023-07-18T00:40:00-07:00", -373.8969584349543], ["2023-07-18T00:45:00-07:00", -373.9164618384093], ["2023-07-18T00:50:00-07:00", -373.9359652418643], ["2023-07-18T00:55:00-07:00", -373.95546864531934], ["2023-07-18T01:00:00-07:00", -373.9751234166324], ["2023-07-18T01:05:00-07:00", -373.9947787411511], ["2023-07-18T01:10:00-07:00", -374.01443462073803], ["2023-07-18T01:15:00-07:00", -374.0340910535306], ["2023-07-18T01:20:00-07:00", -374.0537480413914], ["2023-07-18T01:25:00-07:00", -374.0734055824578], ["2023-07-18T01:30:00-07:00", -374.09306367859244], ["2023-07-18T01:35:00-07:00", -374.1127223279327], ["2023-07-18T01:40:00-07:00", -374.13238153234124], ["2023-07-18T01:45:00-07:00", -374.1520412899554], ["2023-07-18T01:50:00-07:00", -374.17170160263777], ["2023-07-18T01:55:00-07:00", -374.19136246852577], ["2023-07-18T02:00:00-07:00", -374.2110829073936], ["2023-07-18T02:05:00-07:00", -374.2308033462614], ["2023-07-18T02:10:00-07:00", -374.2505237851292], ["2023-07-18T02:15:00-07:00", -374.270244223997], ["2023-07-18T02:20:00-07:00", -374.2899646628648], ["2023-07-18T02:25:00-07:00", -374.3096851017326], ["2023-07-18T02:30:00-07:00", -374.3294055406004], ["2023-07-18T02:35:00-07:00", -374.3491259794682], ["2023-07-18T02:40:00-07:00", -374.36884641833603], ["2023-07-18T02:45:00-07:00", -374.38856685720384], ["2023-07-18T02:50:00-07:00", -374.40828729607165], ["2023-07-18T02:55:00-07:00", -374.42800773493946], ["2023-07-18T03:00:00-07:00", -374.4477465096861], ["2023-07-18T03:05:00-07:00", -374.46748528443277], ["2023-07-18T03:10:00-07:00", -374.4872240591794], ["2023-07-18T03:15:00-07:00", -374.5069628339261], ["2023-07-18T03:20:00-07:00", -374.52670160867274], ["2023-07-18T03:25:00-07:00", -374.5464403834194], ["2023-07-18T03:30:00-07:00", -374.56617915816605], ["2023-07-18T03:35:00-07:00", -374.5859179329127], ["2023-07-18T03:40:00-07:00", -374.60565670765936], ["2023-07-18T03:45:00-07:00", -374.625395482406], ["2023-07-18T03:50:00-07:00", -374.6451342571527], ["2023-07-18T03:55:00-07:00", -374.66487303189933], ["2023-07-18T04:00:00-07:00", -374.6846237666905], ["2023-07-18T04:05:00-07:00", -374.7043750528246], ["2023-07-18T04:10:00-07:00", -374.7241268903017], ["2023-07-18T04:15:00-07:00", -374.74387927912176], ["2023-07-18T04:20:00-07:00", -374.7636322211474], ["2023-07-18T04:25:00-07:00", -374.78338571451604], ["2023-07-18T04:30:00-07:00", -374.80313975922763], ["2023-07-18T04:35:00-07:00", -374.82289435714483], ["2023-07-18T04:40:00-07:00", -374.842649506405], ["2023-07-18T04:45:00-07:00", -374.8624052070081], ["2023-07-18T04:50:00-07:00", -374.88216146081686], ["2023-07-18T04:55:00-07:00", -374.90191826596856], ["2023-07-18T05:00:00-07:00", -374.92208975180984], ["2023-07-18T05:05:00-07:00", -374.9422612376511], ["2023-07-18T05:10:00-07:00", -374.9624327234924], ["2023-07-18T05:15:00-07:00", -374.98260420933366], ["2023-07-18T05:20:00-07:00", -375.00277569517493], ["2023-07-18T05:25:00-07:00", -375.0229471810162], ["2023-07-18T05:30:00-07:00", -375.0431186668575], ["2023-07-18T05:35:00-07:00", -375.06329015269876], ["2023-07-18T05:40:00-07:00", -375.08346163854003], ["2023-07-18T05:45:00-07:00", -375.1036331243813], ["2023-07-18T05:50:00-07:00", -375.1238046102226], ["2023-07-18T05:55:00-07:00", -375.14397609606385], ["2023-07-18T06:00:00-07:00", -375.1641732659191], ["2023-07-18T06:05:00-07:00", -375.3345101233572], ["2023-07-18T06:10:00-07:00", -375.5111230816692], ["2023-07-18T06:15:00-07:00", -375.68773434124887], ["2023-07-18T06:20:00-07:00", -375.8643434997648], ["2023-07-18T06:25:00-07:00", -376.04095054231584], ["2023-07-18T06:30:00-07:00", -376.2175555136055], ["2023-07-18T06:35:00-07:00", -376.39415820501745], ["2023-07-18T06:40:00-07:00", -376.5707585718483], ["2023-07-18T06:45:00-07:00", -376.7591456081718], ["2023-07-18T06:50:00-07:00", -376.94753030501306], ["2023-07-18T06:55:00-07:00", -377.14180672727525], ["2023-07-18T07:00:00-07:00", -377.3362834509462], ["2023-07-18T07:05:00-07:00", -377.5246697124094], ["2023-07-18T07:10:00-07:00", -377.71283893845975], ["2023-07-18T07:15:00-07:00", -377.90079108439386], ["2023-07-18T07:20:00-07:00", -378.08847179077566], ["2023-07-18T07:25:00-07:00", -378.25830895267427], ["2023-07-18T07:30:00-07:00", -378.42207448743284], ["2023-07-18T07:35:00-07:00", -378.580488121137], ["2023-07-18T07:40:00-07:00", -378.7444820161909], ["2023-07-18T07:45:00-07:00", -378.90823744796216], ["2023-07-18T07:50:00-07:00", -379.0653695669025], ["2023-07-18T07:55:00-07:00", -379.2164667006582], ["2023-07-18T08:00:00-07:00", -379.34997860156], ["2023-07-18T08:05:00-07:00", -379.4716418068856], ["2023-07-18T08:10:00-07:00", -379.59314578585327], ["2023-07-18T08:15:00-07:00", -379.7144906055182], ["2023-07-18T08:20:00-07:00", -379.8356763254851], ["2023-07-18T08:25:00-07:00", -379.9570816066116], ["2023-07-18T08:30:00-07:00", -380.078312529251], ["2023-07-18T08:35:00-07:00", -380.19321204535663], ["2023-07-18T08:40:00-07:00", -380.30795775167644], ["2023-07-18T08:45:00-07:00", -380.42254955880344], ["2023-07-18T08:50:00-07:00", -380.5369874667376], ["2023-07-18T08:55:00-07:00", -380.63969470374286], ["2023-07-18T09:00:00-07:00", -380.74185408465564], ["2023-07-18T09:05:00-07:00", -380.8438706230372], ["2023-07-18T09:10:00-07:00", -380.94574425928295], ["2023-07-18T09:15:00-07:00", -381.0478573497385], ["2023-07-18T09:20:00-07:00", -381.1557187791914], ["2023-07-18T09:25:00-07:00", -381.26325183175504], ["2023-07-18T09:30:00-07:00", -381.3707832302898], ["2023-07-18T09:35:00-07:00", -381.4783129747957], ["2023-07-18T09:40:00-07:00", -381.5858410652727], ["2023-07-18T09:45:00-07:00", -381.6933674942702], ["2023-07-18T09:50:00-07:00", -381.80089226923883], ["2023-07-18T09:55:00-07:00", -381.90841539017856], ["2023-07-18T10:00:00-07:00", -382.009418932721], ["2023-07-18T10:05:00-07:00", -382.1104208063334], ["2023-07-18T10:10:00-07:00", -382.2117061223835], ["2023-07-18T10:15:00-07:00", -382.3186905365437], ["2023-07-18T10:20:00-07:00", -382.4253894742578], ["2023-07-18T10:25:00-07:00", -382.5320867430419], ["2023-07-18T10:30:00-07:00", -382.63878234289587], ["2023-07-18T10:35:00-07:00", -382.7454762812704], ["2023-07-18T10:40:00-07:00", -382.85216855071485], ["2023-07-18T10:45:00-07:00", -382.95885915122926], ["2023-07-18T10:50:00-07:00", -383.0655480828136], ["2023-07-18T10:55:00-07:00", -383.16653328202665], ["2023-07-18T11:00:00-07:00", -383.2669773902744], ["2023-07-18T11:05:00-07:00", -383.3674203734845], ["2023-07-18T11:10:00-07:00", -383.46786321513355], ["2023-07-18T11:15:00-07:00", -383.5629149954766], ["2023-07-18T11:20:00-07:00", -383.6636497285217], ["2023-07-18T11:25:00-07:00", -383.76409257017076], ["2023-07-18T11:30:00-07:00", -383.8645354118198], ["2023-07-18T11:35:00-07:00", -383.95930742286146], ["2023-07-18T11:40:00-07:00", -384.0540794413537], ["2023-07-18T11:45:00-07:00", -384.1488514598459], ["2023-07-18T11:50:00-07:00", -384.2436234783381], ["2023-07-18T11:55:00-07:00", -384.33839549683034], ["2023-07-18T12:00:00-07:00", -384.4292534869164], ["2023-07-18T12:05:00-07:00", -384.5255272593349], ["2023-07-18T12:10:00-07:00", -384.6218038480729], ["2023-07-18T12:15:00-07:00", -384.7235026936978], ["2023-07-18T12:20:00-07:00", -384.81950374506414], ["2023-07-18T12:25:00-07:00", -384.91550130955875], ["2023-07-18T12:30:00-07:00", -385.011754816398], ["2023-07-18T12:35:00-07:00", -385.1080160792917], ["2023-07-18T12:40:00-07:00", -385.19858892820776], ["2023-07-18T12:45:00-07:00", -385.2891582902521], ["2023-07-18T12:50:00-07:00", -385.3799874316901], ["2023-07-18T12:55:00-07:00", -385.47623565606773], ["2023-07-18T13:00:00-07:00", -385.57209302298725], ["2023-07-18T13:05:00-07:00", -385.6679474618286], ["2023-07-18T13:10:00-07:00", -385.76410628668964], ["2023-07-18T13:15:00-07:00", -385.8660546001047], ["2023-07-18T13:20:00-07:00", -385.9730802681297], ["2023-07-18T13:25:00-07:00", -386.079742660746], ["2023-07-18T13:30:00-07:00", -386.18678662739694], ["2023-07-18T13:35:00-07:00", -386.2996952589601], ["2023-07-18T13:40:00-07:00", -386.4176158513874], ["2023-07-18T13:45:00-07:00", -386.5350863467902], ["2023-07-18T13:50:00-07:00", -386.6579626407474], ["2023-07-18T13:55:00-07:00", -386.7808371838182], ["2023-07-18T14:00:00-07:00", -386.90349844656885], ["2023-07-18T14:05:00-07:00", -387.02076104842126], ["2023-07-18T14:10:00-07:00", -387.1380250956863], ["2023-07-18T14:15:00-07:00", -387.25529088638723], ["2023-07-18T14:20:00-07:00", -387.378575688228], ["2023-07-18T14:25:00-07:00", -387.50188012979925], ["2023-07-18T14:30:00-07:00", -387.6245492082089], ["2023-07-18T14:35:00-07:00", -387.74722003750503], ["2023-07-18T14:40:00-07:00", -387.8644945602864], ["2023-07-18T14:45:00-07:00", -387.9817708339542], ["2023-07-18T14:50:00-07:00", -388.0990488510579], ["2023-07-18T14:55:00-07:00", -388.216328619048], ["2023-07-18T15:00:00-07:00", -388.3334289919585], ["2023-07-18T15:05:00-07:00", -388.45053110830486], ["2023-07-18T15:10:00-07:00", -388.56912577711046], ["2023-07-18T15:15:00-07:00", -388.68788960389793], ["2023-07-18T15:20:00-07:00", -388.8049969729036], ["2023-07-18T15:25:00-07:00", -388.92210609279573], ["2023-07-18T15:30:00-07:00", -389.0392169635743], ["2023-07-18T15:35:00-07:00", -389.1563295852393], ["2023-07-18T15:40:00-07:00", -389.27344395779073], ["2023-07-18T15:45:00-07:00", -389.3905600812286], ["2023-07-18T15:50:00-07:00", -389.50767795555294], ["2023-07-18T15:55:00-07:00", -389.6301871147007], ["2023-07-18T16:00:00-07:00", -389.7525407578796], ["2023-07-18T16:05:00-07:00", -389.874896151945], ["2023-07-18T16:10:00-07:00", -389.9972532968968], ["2023-07-18T16:15:00-07:00", -390.12499466352165], ["2023-07-18T16:20:00-07:00", -390.2527377884835], ["2023-07-18T16:25:00-07:00", -390.3804826568812], ["2023-07-18T16:30:00-07:00", -390.50822928361595], ["2023-07-18T16:35:00-07:00", -390.63597765378654], ["2023-07-18T16:40:00-07:00", -390.76372778229415], ["2023-07-18T16:45:00-07:00", -390.8914796542376], ["2023-07-18T16:50:00-07:00", -391.0192332845181], ["2023-07-18T16:55:00-07:00", -391.1469886582345], ["2023-07-18T17:00:00-07:00", -391.2799481432885], ["2023-07-18T17:05:00-07:00", -391.406663922593], ["2023-07-18T17:10:00-07:00", -391.5333814602345], ["2023-07-18T17:15:00-07:00", -391.66010075621307], ["2023-07-18T17:20:00-07:00", -391.78682181052864], ["2023-07-18T17:25:00-07:00", -391.9135446231812], ["2023-07-18T17:30:00-07:00", -392.040269209072], ["2023-07-18T17:35:00-07:00", -392.1669955532998], ["2023-07-18T17:40:00-07:00", -392.2937236558646], ["2023-07-18T17:45:00-07:00", -392.42045351676643], ["2023-07-18T17:50:00-07:00", -392.5471851360053], ["2023-07-18T17:55:00-07:00", -392.67929357104003], ["2023-07-18T18:00:00-07:00", -392.8113122712821], ["2023-07-18T18:05:00-07:00", -392.94333272986114], ["2023-07-18T18:10:00-07:00", -393.0753549467772], ["2023-07-18T18:15:00-07:00", -393.21275023929775], ["2023-07-18T18:20:00-07:00", -393.3501472901553], ["2023-07-18T18:25:00-07:00", -393.4929174017161], ["2023-07-18T18:30:00-07:00", -393.63568927161396], ["2023-07-18T18:35:00-07:00", -393.7784628998488], ["2023-07-18T18:40:00-07:00", -393.92660958878696], ["2023-07-18T18:45:00-07:00", -394.0747580360621], ["2023-07-18T18:50:00-07:00", -394.22827954404056], ["2023-07-18T18:55:00-07:00", -394.381802810356], ["2023-07-18T19:00:00-07:00", -394.540722085163], ["2023-07-18T19:05:00-07:00", -394.55956006608903], ["2023-07-18T19:10:00-07:00", -394.5783986207098], ["2023-07-18T19:15:00-07:00", -394.5972377490252], ["2023-07-18T19:20:00-07:00", -394.616077452898], ["2023-07-18T19:25:00-07:00", -394.63491773046553], ["2023-07-18T19:30:00-07:00", -394.6537585835904], ["2023-07-18T19:35:00-07:00", -394.67260001040995], ["2023-07-18T19:40:00-07:00", -394.6914420109242], ["2023-07-18T19:45:00-07:00", -394.71028458699584], ["2023-07-18T19:50:00-07:00", -394.72912773676217], ["2023-07-18T19:55:00-07:00", -394.74797146208584], ["2023-07-18T20:00:00-07:00", -394.7668143026531], ["2023-07-18T20:05:00-07:00", -394.78565771877766], ["2023-07-18T20:10:00-07:00", -394.80450170859694], ["2023-07-18T20:15:00-07:00", -394.8233462739736], ["2023-07-18T20:20:00-07:00", -394.84219141304493], ["2023-07-18T20:25:00-07:00", -394.861037125811], ["2023-07-18T20:30:00-07:00", -394.8798834141344], ["2023-07-18T20:35:00-07:00", -394.8987302761525], ["2023-07-18T20:40:00-07:00", -394.91757771372795], ["2023-07-18T20:45:00-07:00", -394.9364257249981], ["2023-07-18T20:50:00-07:00", -394.95527431182563], ["2023-07-18T20:55:00-07:00", -394.97412347234786], ["2023-07-18T21:00:00-07:00", -394.9929787199944], ["2023-07-18T21:05:00-07:00", -395.011833967641], ["2023-07-18T21:10:00-07:00", -395.03068921528757], ["2023-07-18T21:15:00-07:00", -395.04954446293414], ["2023-07-18T21:20:00-07:00", -395.0683997105807], ["2023-07-18T21:25:00-07:00", -395.0872549582273], ["2023-07-18T21:30:00-07:00", -395.10611020587385], ["2023-07-18T21:35:00-07:00", -395.1249654535204], ["2023-07-18T21:40:00-07:00", -395.143820701167], ["2023-07-18T21:45:00-07:00", -395.16267594881356], ["2023-07-18T21:50:00-07:00", -395.1815311964601], ["2023-07-18T21:55:00-07:00", -395.2003864441067], ["2023-07-18T22:00:00-07:00", -395.2192478850484], ["2023-07-18T22:05:00-07:00", -395.23810990154743], ["2023-07-18T22:10:00-07:00", -395.2569724917412], ["2023-07-18T22:15:00-07:00", -395.27583565562963], ["2023-07-18T22:20:00-07:00", -395.2946993932128], ["2023-07-18T22:25:00-07:00", -395.3135637063533], ["2023-07-18T22:30:00-07:00", -395.3324285931885], ["2023-07-18T22:35:00-07:00", -395.35129405371845], ["2023-07-18T22:40:00-07:00", -395.3701600879431], ["2023-07-18T22:45:00-07:00", -395.38902669772506], ["2023-07-18T22:50:00-07:00", -395.40789388120174], ["2023-07-18T22:55:00-07:00", -395.42677315697074], ["2023-07-18T23:00:00-07:00", -395.4461619798094], ["2023-07-18T23:05:00-07:00", -395.46555080264807], ["2023-07-18T23:10:00-07:00", -395.48493962548673], ["2023-07-18T23:15:00-07:00", -395.5043284483254], ["2023-07-18T23:20:00-07:00", -395.52371727116406], ["2023-07-18T23:25:00-07:00", -395.5431060940027], ["2023-07-18T23:30:00-07:00", -395.5624949168414], ["2023-07-18T23:35:00-07:00", -395.58188373968005], ["2023-07-18T23:40:00-07:00", -395.6012725625187], ["2023-07-18T23:45:00-07:00", -395.6206613853574], ["2023-07-18T23:50:00-07:00", -395.64005020819604], ["2023-07-18T23:55:00-07:00", -395.6594390310347], ["2023-07-19T00:00:00-07:00", -395.678962521255], ["2023-07-19T00:05:00-07:00", -395.6984860114753], ["2023-07-19T00:10:00-07:00", -395.71800950169563], ["2023-07-19T00:15:00-07:00", -395.73753299191594], ["2023-07-19T00:20:00-07:00", -395.75705648213625], ["2023-07-19T00:25:00-07:00", -395.77657997235656], ["2023-07-19T00:30:00-07:00", -395.79610346257687], ["2023-07-19T00:35:00-07:00", -395.8156269527972], ["2023-07-19T00:40:00-07:00", -395.8351504430175], ["2023-07-19T00:45:00-07:00", -395.8546739332378], ["2023-07-19T00:50:00-07:00", -395.8741974234581], ["2023-07-19T00:55:00-07:00", -395.8937209136784], ["2023-07-19T01:00:00-07:00", -395.913395633921], ["2023-07-19T01:05:00-07:00", -395.9330697990954], ["2023-07-19T01:10:00-07:00", -395.95274341106415], ["2023-07-19T01:15:00-07:00", -395.97241646796465], ["2023-07-19T01:20:00-07:00", -395.99208897165954], ["2023-07-19T01:25:00-07:00", -396.0117609202862], ["2023-07-19T01:30:00-07:00", -396.0314323157072], ["2023-07-19T01:35:00-07:00", -396.05110315606], ["2023-07-19T01:40:00-07:00", -396.07077344320714], ["2023-07-19T01:45:00-07:00", -396.09044317528605], ["2023-07-19T01:50:00-07:00", -396.11011235415936], ["2023-07-19T01:55:00-07:00", -396.1297809779644], ["2023-07-19T02:00:00-07:00", -396.1495080497116], ["2023-07-19T02:05:00-07:00", -396.16923512145877], ["2023-07-19T02:10:00-07:00", -396.18896219320595], ["2023-07-19T02:15:00-07:00", -396.20868926495314], ["2023-07-19T02:20:00-07:00", -396.2284163367003], ["2023-07-19T02:25:00-07:00", -396.2481434084475], ["2023-07-19T02:30:00-07:00", -396.2678704801947], ["2023-07-19T02:35:00-07:00", -396.2875975519419], ["2023-07-19T02:40:00-07:00", -396.30732462368906], ["2023-07-19T02:45:00-07:00", -396.32705169543624], ["2023-07-19T02:50:00-07:00", -396.3467787671834], ["2023-07-19T02:55:00-07:00", -396.3665058389306], ["2023-07-19T03:00:00-07:00", -396.3862512409687], ["2023-07-19T03:05:00-07:00", -396.4059966430068], ["2023-07-19T03:10:00-07:00", -396.4257420450449], ["2023-07-19T03:15:00-07:00", -396.445487447083], ["2023-07-19T03:20:00-07:00", -396.4652328491211], ["2023-07-19T03:25:00-07:00", -396.4849782511592], ["2023-07-19T03:30:00-07:00", -396.5047236531973], ["2023-07-19T03:35:00-07:00", -396.5244690552354], ["2023-07-19T03:40:00-07:00", -396.5442144572735], ["2023-07-19T03:45:00-07:00", -396.5639598593116], ["2023-07-19T03:50:00-07:00", -396.5837052613497], ["2023-07-19T03:55:00-07:00", -396.6034506633878], ["2023-07-19T04:00:00-07:00", -396.62320801988244], ["2023-07-19T04:05:00-07:00", -396.64296592772007], ["2023-07-19T04:10:00-07:00", -396.6627243887633], ["2023-07-19T04:15:00-07:00", -396.6824834011495], ["2023-07-19T04:20:00-07:00", -396.7022429648787], ["2023-07-19T04:25:00-07:00", -396.72200308181345], ["2023-07-19T04:30:00-07:00", -396.7417637500912], ["2023-07-19T04:35:00-07:00", -396.7615249697119], ["2023-07-19T04:40:00-07:00", -396.78128674067557], ["2023-07-19T04:45:00-07:00", -396.80104906484485], ["2023-07-19T04:50:00-07:00", -396.8208119403571], ["2023-07-19T04:55:00-07:00", -396.8405753672123], ["2023-07-19T05:00:00-07:00", -396.86075334995985], ["2023-07-19T05:05:00-07:00", -396.8809313327074], ["2023-07-19T05:10:00-07:00", -396.90110931545496], ["2023-07-19T05:15:00-07:00", -396.9212872982025], ["2023-07-19T05:20:00-07:00", -396.94146528095007], ["2023-07-19T05:25:00-07:00", -396.9616432636976], ["2023-07-19T05:30:00-07:00", -396.9818212464452], ["2023-07-19T05:35:00-07:00", -397.00199922919273], ["2023-07-19T05:40:00-07:00", -397.0221772119403], ["2023-07-19T05:45:00-07:00", -397.04235519468784], ["2023-07-19T05:50:00-07:00", -397.0625331774354], ["2023-07-19T05:55:00-07:00", -397.08271116018295], ["2023-07-19T06:00:00-07:00", -397.1029148194939], ["2023-07-19T06:05:00-07:00", -397.36541170813143], ["2023-07-19T06:10:00-07:00", -397.6393988225609], ["2023-07-19T06:15:00-07:00", -397.91904000379145], ["2023-07-19T06:20:00-07:00", -398.2102615330368], ["2023-07-19T06:25:00-07:00", -398.4952396247536], ["2023-07-19T06:30:00-07:00", -398.78744272328913], ["2023-07-19T06:35:00-07:00", -399.0852561984211], ["2023-07-19T06:40:00-07:00", -399.38275078870356], ["2023-07-19T06:45:00-07:00", -399.6858396027237], ["2023-07-19T06:50:00-07:00", -399.98702464438975], ["2023-07-19T06:55:00-07:00", -400.2937935683876], ["2023-07-19T07:00:00-07:00", -400.6005607340485], ["2023-07-19T07:05:00-07:00", -400.90137786604464], ["2023-07-19T07:10:00-07:00", -401.20218787528574], ["2023-07-19T07:15:00-07:00", -401.5029911790043], ["2023-07-19T07:20:00-07:00", -401.80373389460146], ["2023-07-19T07:25:00-07:00", -402.0867633614689], ["2023-07-19T07:30:00-07:00", -402.3638857398182], ["2023-07-19T07:35:00-07:00", -402.6351009104401], ["2023-07-19T07:40:00-07:00", -402.90040943957865], ["2023-07-19T07:45:00-07:00", -403.1598118338734], ["2023-07-19T07:50:00-07:00", -403.4192104730755], ["2023-07-19T07:55:00-07:00", -403.6668017003685], ["2023-07-19T08:00:00-07:00", -403.90870464779437], ["2023-07-19T08:05:00-07:00", -404.15014905668795], ["2023-07-19T08:10:00-07:00", -404.3792933020741], ["2023-07-19T08:15:00-07:00", -404.6020560506731], ["2023-07-19T08:20:00-07:00", -404.8188366089016], ["2023-07-19T08:25:00-07:00", -405.0409795437008], ["2023-07-19T08:30:00-07:00", -405.2622620854527], ["2023-07-19T08:35:00-07:00", -405.48305116035044], ["2023-07-19T08:40:00-07:00", -405.70334672369063], ["2023-07-19T08:45:00-07:00", -405.91733286716044], ["2023-07-19T08:50:00-07:00", -406.13083622790873], ["2023-07-19T08:55:00-07:00", -406.3438566122204], ["2023-07-19T09:00:00-07:00", -406.5555449221283], ["2023-07-19T09:05:00-07:00", -406.75504870153964], ["2023-07-19T09:10:00-07:00", -406.95453059114516], ["2023-07-19T09:15:00-07:00", -407.15400760807097], ["2023-07-19T09:20:00-07:00", -407.3477329108864], ["2023-07-19T09:25:00-07:00", -407.541453236714], ["2023-07-19T09:30:00-07:00", -407.72942184843123], ["2023-07-19T09:35:00-07:00", -407.9173854831606], ["2023-07-19T09:40:00-07:00", -408.1053441558033], ["2023-07-19T09:45:00-07:00", -408.2932978514582], ["2023-07-19T09:50:00-07:00", -408.4812465701252], ["2023-07-19T09:55:00-07:00", -408.6694842670113], ["2023-07-19T10:00:00-07:00", -408.8563031796366], ["2023-07-19T10:05:00-07:00", -409.03709555603564], ["2023-07-19T10:10:00-07:00", -409.21788902021945], ["2023-07-19T10:15:00-07:00", -409.3986841533333], ["2023-07-19T10:20:00-07:00", -409.57948094047606], ["2023-07-19T10:25:00-07:00", -409.76027939654887], ["2023-07-19T10:30:00-07:00", -409.9410795215517], ["2023-07-19T10:35:00-07:00", -410.1218813005835], ["2023-07-19T10:40:00-07:00", -410.296982685104], ["2023-07-19T10:45:00-07:00", -410.46638366021216], ["2023-07-19T10:50:00-07:00", -410.63578630425036], ["2023-07-19T10:55:00-07:00", -410.8051906172186], ["2023-07-19T11:00:00-07:00", -410.9736822936684], ["2023-07-19T11:05:00-07:00", -411.14243252016604], ["2023-07-19T11:10:00-07:00", -411.3168543372303], ["2023-07-19T11:15:00-07:00", -411.4910143557936], ["2023-07-19T11:20:00-07:00", -411.66517269052565], ["2023-07-19T11:25:00-07:00", -411.83932935632765], ["2023-07-19T11:30:00-07:00", -412.01348433829844], ["2023-07-19T11:35:00-07:00", -412.18251144327223], ["2023-07-19T11:40:00-07:00", -412.36316754855216], ["2023-07-19T11:45:00-07:00", -412.54893268086016], ["2023-07-19T11:50:00-07:00", -412.7344226036221], ["2023-07-19T11:55:00-07:00", -412.9199108425528], ["2023-07-19T12:00:00-07:00", -413.0919554773718], ["2023-07-19T12:05:00-07:00", -413.26942438818514], ["2023-07-19T12:10:00-07:00", -413.44662747718394], ["2023-07-19T12:15:00-07:00", -413.6238288227469], ["2023-07-19T12:20:00-07:00", -413.80102842487395], ["2023-07-19T12:25:00-07:00", -413.978226268664], ["2023-07-19T12:30:00-07:00", -414.15025987662375], ["2023-07-19T12:35:00-07:00", -414.32771548070014], ["2023-07-19T12:40:00-07:00", -414.49949383176863], ["2023-07-19T12:45:00-07:00", -414.6717882845551], ["2023-07-19T12:50:00-07:00", -414.84411683119833], ["2023-07-19T12:55:00-07:00", -415.0158899370581], ["2023-07-19T13:00:00-07:00", -415.1874516848475], ["2023-07-19T13:05:00-07:00", -415.35929785110056], ["2023-07-19T13:10:00-07:00", -415.5365853253752], ["2023-07-19T13:15:00-07:00", -415.71355327405035], ["2023-07-19T13:20:00-07:00", -415.8905212227255], ["2023-07-19T13:25:00-07:00", -416.06748917140067], ["2023-07-19T13:30:00-07:00", -416.2336420211941], ["2023-07-19T13:35:00-07:00", -416.39438732899725], ["2023-07-19T13:40:00-07:00", -416.5551326368004], ["2023-07-19T13:45:00-07:00", -416.7104703877121], ["2023-07-19T13:50:00-07:00", -416.8712156806141], ["2023-07-19T13:55:00-07:00", -417.0319609735161], ["2023-07-19T14:00:00-07:00", -417.1924283001572], ["2023-07-19T14:05:00-07:00", -417.3528956267983], ["2023-07-19T14:10:00-07:00", -417.50796490348876], ["2023-07-19T14:15:00-07:00", -417.65763613022864], ["2023-07-19T14:20:00-07:00", -417.8019093070179], ["2023-07-19T14:25:00-07:00", -417.9515805337578], ["2023-07-19T14:30:00-07:00", -418.10754249431193], ["2023-07-19T14:35:00-07:00", -418.2690528575331], ["2023-07-19T14:40:00-07:00", -418.418724084273], ["2023-07-19T14:45:00-07:00", -418.5683952961117], ["2023-07-19T14:50:00-07:00", -418.7180665079504], ["2023-07-19T14:55:00-07:00", -418.86773771978915], ["2023-07-19T15:00:00-07:00", -419.0171767119318], ["2023-07-19T15:05:00-07:00", -419.1666157040745], ["2023-07-19T15:10:00-07:00", -419.3160546962172], ["2023-07-19T15:15:00-07:00", -419.46549368835986], ["2023-07-19T15:20:00-07:00", -419.61493268050253], ["2023-07-19T15:25:00-07:00", -419.75898213125765], ["2023-07-19T15:30:00-07:00", -419.9030315820128], ["2023-07-19T15:35:00-07:00", -420.0416915062815], ["2023-07-19T15:40:00-07:00", -420.17496188916266], ["2023-07-19T15:45:00-07:00", -420.29745320416987], ["2023-07-19T15:50:00-07:00", -420.42533406056464], ["2023-07-19T15:55:00-07:00", -420.55860445834696], ["2023-07-19T16:00:00-07:00", -420.6970859263092], ["2023-07-19T16:05:00-07:00", -420.8301854971796], ["2023-07-19T16:10:00-07:00", -420.9632866624743], ["2023-07-19T16:15:00-07:00", -421.09638958610594], ["2023-07-19T16:20:00-07:00", -421.2241117898375], ["2023-07-19T16:25:00-07:00", -421.35183575190604], ["2023-07-19T16:30:00-07:00", -421.47828016616404], ["2023-07-19T16:35:00-07:00", -421.6110505256802], ["2023-07-19T16:40:00-07:00", -421.73877974785864], ["2023-07-19T16:45:00-07:00", -421.8665107283741], ["2023-07-19T16:50:00-07:00", -421.9888609889895], ["2023-07-19T16:55:00-07:00", -422.10583053715527], ["2023-07-19T17:00:00-07:00", -422.22264395840466], ["2023-07-19T17:05:00-07:00", -422.338588738814], ["2023-07-19T17:10:00-07:00", -422.45453527756035], ["2023-07-19T17:15:00-07:00", -422.5704835820943], ["2023-07-19T17:20:00-07:00", -422.69180870987475], ["2023-07-19T17:25:00-07:00", -422.8185106460005], ["2023-07-19T17:30:00-07:00", -422.95058939792216], ["2023-07-19T17:35:00-07:00", -423.082669923082], ["2023-07-19T17:40:00-07:00", -423.21475220657885], ["2023-07-19T17:45:00-07:00", -423.3626849744469], ["2023-07-19T17:50:00-07:00", -423.5108959469944], ["2023-07-19T17:55:00-07:00", -423.66448373533785], ["2023-07-19T18:00:00-07:00", -423.81796678341925], ["2023-07-19T18:05:00-07:00", -423.97145158983767], ["2023-07-19T18:10:00-07:00", -424.1249381545931], ["2023-07-19T18:15:00-07:00", -424.27842649258673], ["2023-07-19T18:20:00-07:00", -424.43728789128363], ["2023-07-19T18:25:00-07:00", -424.59615104831755], ["2023-07-19T18:30:00-07:00", -424.75501597858965], ["2023-07-19T18:35:00-07:00", -424.9138826671988], ["2023-07-19T18:40:00-07:00", -425.0727511141449], ["2023-07-19T18:45:00-07:00", -425.23162133432925], ["2023-07-19T18:50:00-07:00", -425.3904933128506], ["2023-07-19T18:55:00-07:00", -425.54936704970896], ["2023-07-19T19:00:00-07:00", -425.7082654926926], ["2023-07-19T19:05:00-07:00", -425.72709657996893], ["2023-07-19T19:10:00-07:00", -425.74592824094], ["2023-07-19T19:15:00-07:00", -425.76476047746837], ["2023-07-19T19:20:00-07:00", -425.7835932876915], ["2023-07-19T19:25:00-07:00", -425.8024266716093], ["2023-07-19T19:30:00-07:00", -425.82126063108444], ["2023-07-19T19:35:00-07:00", -425.8400951642543], ["2023-07-19T19:40:00-07:00", -425.8589302729815], ["2023-07-19T19:45:00-07:00", -425.87776595540345], ["2023-07-19T19:50:00-07:00", -425.8966022115201], ["2023-07-19T19:55:00-07:00", -425.91543904319406], ["2023-07-19T20:00:00-07:00", -425.9342749901116], ["2023-07-19T20:05:00-07:00", -425.9531120862812], ["2023-07-19T20:10:00-07:00", -425.9719503317028], ["2023-07-19T20:15:00-07:00", -425.99078972637653], ["2023-07-19T20:20:00-07:00", -426.0096302703023], ["2023-07-19T20:25:00-07:00", -426.02847196161747], ["2023-07-19T20:30:00-07:00", -426.0473148021847], ["2023-07-19T20:35:00-07:00", -426.066158792004], ["2023-07-19T20:40:00-07:00", -426.08500393107533], ["2023-07-19T20:45:00-07:00", -426.10385021939874], ["2023-07-19T20:50:00-07:00", -426.1226976569742], ["2023-07-19T20:55:00-07:00", -426.1415462438017], ["2023-07-19T21:00:00-07:00", -426.1604014914483], ["2023-07-19T21:05:00-07:00", -426.17925673909485], ["2023-07-19T21:10:00-07:00", -426.1981119867414], ["2023-07-19T21:15:00-07:00", -426.216967234388], ["2023-07-19T21:20:00-07:00", -426.23582248203456], ["2023-07-19T21:25:00-07:00", -426.25467772968113], ["2023-07-19T21:30:00-07:00", -426.2735329773277], ["2023-07-19T21:35:00-07:00", -426.2923882249743], ["2023-07-19T21:40:00-07:00", -426.31124347262084], ["2023-07-19T21:45:00-07:00", -426.3300987202674], ["2023-07-19T21:50:00-07:00", -426.348953967914], ["2023-07-19T21:55:00-07:00", -426.36780921556056], ["2023-07-19T22:00:00-07:00", -426.38667065650225], ["2023-07-19T22:05:00-07:00", -426.4055326730013], ["2023-07-19T22:10:00-07:00", -426.42439526319504], ["2023-07-19T22:15:00-07:00", -426.4432584270835], ["2023-07-19T22:20:00-07:00", -426.46212216466665], ["2023-07-19T22:25:00-07:00", -426.48098647780716], ["2023-07-19T22:30:00-07:00", -426.4998513646424], ["2023-07-19T22:35:00-07:00", -426.5187168251723], ["2023-07-19T22:40:00-07:00", -426.53758285939693], ["2023-07-19T22:45:00-07:00", -426.5564494691789], ["2023-07-19T22:50:00-07:00", -426.5753166526556], ["2023-07-19T22:55:00-07:00", -426.5941959284246], ["2023-07-19T23:00:00-07:00", -426.61358475126326], ["2023-07-19T23:05:00-07:00", -426.6329735741019], ["2023-07-19T23:10:00-07:00", -426.6523623969406], ["2023-07-19T23:15:00-07:00", -426.67175121977925], ["2023-07-19T23:20:00-07:00", -426.6911400426179], ["2023-07-19T23:25:00-07:00", -426.7105288654566], ["2023-07-19T23:30:00-07:00", -426.72991768829525], ["2023-07-19T23:35:00-07:00", -426.7493065111339], ["2023-07-19T23:40:00-07:00", -426.7686953339726], ["2023-07-19T23:45:00-07:00", -426.78808415681124], ["2023-07-19T23:50:00-07:00", -426.8074729796499], ["2023-07-19T23:55:00-07:00", -426.82686180248857], ["2023-07-20T00:00:00-07:00", -426.8463852927089], ["2023-07-20T00:05:00-07:00", -426.8659087829292]] \ No newline at end of file From 116879cb59105393bba15b10ec7fe49272876244 Mon Sep 17 00:00:00 2001 From: gabriel-trigo Date: Sun, 17 Nov 2024 21:06:31 -0500 Subject: [PATCH 2/9] fix: fix MCTS implementation (was calculating the node scores incorrectly) --- README.md | 14 +++-- smart_control/mcts/MonteCarloTreeSearch.py | 37 +++++++++-- smart_control/mcts/execute_policy_utils.py | 1 - smart_control/mcts/mcts_experiment.py | 73 +++++++++++++++------- 4 files changed, 91 insertions(+), 34 deletions(-) diff --git a/README.md b/README.md index ddebaad2..bc5c114a 100644 --- a/README.md +++ b/README.md @@ -30,17 +30,19 @@ Follow these steps to setup locally before you run the `notebooks/SAC_Demo.ipynb 2. Ensure you have `protoc` and `ffmpeg` installed, as well as `python >=3.10.12 and <3.12`. You can install these running `sudo apt install -y protobuf-compiler` and `sudo apt install -y ffmpeg` -3. Create a virtual environment by running `python -m venv .venv`. Then, install poetry with `pip install poetry` +3. Create a virtual environment by running `python -m venv .venv` and then activate it by running `source .venv/bin/activate`. -4. Install the dependencies by running `poetry install` +4. Then, install poetry with `pip install poetry` -5. Build the `.proto` files at `smart_control/proto`into python files by running `cd smart_control/proto && protoc --python_out=. smart_control_building.proto smart_control_normalization.proto smart_control_reward.proto && cd ../..` +5. Install the dependencies by running `poetry install` -6. Modify the value of `VIDEO_PATH_ROOT` at `smart_control/simulator/constants.py`. This is the path where simulation videos will be stored +6. Build the `.proto` files at `smart_control/proto`into python files by running `cd smart_control/proto && protoc --python_out=. smart_control_building.proto smart_control_normalization.proto smart_control_reward.proto && cd ../..` -7. Now in the `notebooks/SAC_Demo.ipynb` notebook, modify the values of `data_path`, `metrics_path`, `output_data_path` and `root_dir`. In particular, `data_path` should point to the `sim_config.gin` file at `smart_control/configs/sim_config.gin` +7. Modify the value of `VIDEO_PATH_ROOT` at `smart_control/simulator/constants.py`. This is the path where simulation videos will be stored -8. Now you are ready to run the `notebooks/SAC_Demo.ipynb` notebook +8. Now in the `notebooks/SAC_Demo.ipynb` notebook, modify the values of `data_path`, `metrics_path`, `output_data_path` and `root_dir`. In particular, `data_path` should point to the `sim_config.gin` file at `smart_control/configs/sim_config.gin` + +9. Now you are ready to run the `notebooks/SAC_Demo.ipynb` notebook ## Real World Data diff --git a/smart_control/mcts/MonteCarloTreeSearch.py b/smart_control/mcts/MonteCarloTreeSearch.py index d577d05b..b8a244b9 100644 --- a/smart_control/mcts/MonteCarloTreeSearch.py +++ b/smart_control/mcts/MonteCarloTreeSearch.py @@ -1,3 +1,4 @@ +from collections import defaultdict import numpy as np import json from smart_control.mcts.execute_policy_utils import compute_avg_return, load_environment @@ -76,9 +77,13 @@ def q(self): @ staticmethod - def run_expansion(node_environment_state, policy): - env = SbSimMonteCarloTreeSearch.get_node_environment(node_environment_state) # get the environment at this node - return_val, _ = compute_avg_return(env, policy, time_zone="US/Pacific", render_interval_steps=1e30, trajectory_observers=None, num_steps=1) + def run_expansion(env, node_environment_state, policy, num_steps=1): + return_val, _ = compute_avg_return(env, + policy, + time_zone="US/Pacific", + render_interval_steps=1e30, + trajectory_observers=None, + num_steps=num_steps) new_node_environment_state = NodeEnvironmentState( node_temps=env.building._simulator._building.temp, @@ -131,6 +136,7 @@ def run_rollout(env, # environment from which the rollout should begin baseline_return_by_timestamp, # baseline return value by timestamp (obtained using the baseline policy) rollout_steps # number of steps to rollout ): + return_val, _ = compute_avg_return(env, rollout_policy, render_interval_steps=1e30, num_steps=rollout_steps) rollout_return = node_environment_state.node_state_return + return_val @@ -139,7 +145,7 @@ def run_rollout(env, # environment from which the rollout should begin env.reset() episode_start_timestamp = env.current_simulation_timestamp - return_delta = (baseline_return_by_timestamp[rollout_timestamp] - rollout_return) + return_delta = (rollout_return - baseline_return_by_timestamp[rollout_timestamp]) number_of_hours = (rollout_timestamp - episode_start_timestamp).total_seconds() / SECONDS_IN_AN_HOUR return return_delta, number_of_hours @@ -150,6 +156,7 @@ def is_terminal_node(self): def best_child(self): + """ best_child, best_score = None, -1e30 for key in self.children: @@ -161,6 +168,8 @@ def best_child(self): best_score = score return best_child + """ + pass """ @@ -196,6 +205,17 @@ def depth(self): if not self.children: return 1 return 1 + max([child.depth() for child in self.children.values()]) + + def size(self): + if not self.children: + return 1 + return 1 + sum([child.size() for child in self.children.values()]) + + def get_returns_by_timestamp(self, result): + result[str(self.node_environment_state.node_timestamp)].append(self.node_environment_state.node_state_return) + for child in self.children.values(): + child.get_returns_by_timestamp(result) + return result class SbSimMonteCarloTreeSearch(MonteCarloTreeSearch): @@ -242,7 +262,7 @@ def recur(root): nodes_for_expansion.append((root, action)) nodes = [root.children[key] for key in root.children.keys()] - nodes.sort(key=lambda x: -(x.q / x._cumulative_number_of_hours) - c_param * np.sqrt((2 * np.log(root.n) / x.n))) + nodes.sort(key=lambda x: x.calculate_score(c_param=c_param), reverse=True) for node in nodes: recur(node) @@ -285,4 +305,11 @@ def perform_backpropagations(self, rollout_results): def get_tree_depth(self): return self.root.depth() + + def get_tree_size(self): + return self.root.size() + + def get_returns_by_timestamp(self): + result = defaultdict(lambda: []) + return self.root.get_returns_by_timestamp(result) \ No newline at end of file diff --git a/smart_control/mcts/execute_policy_utils.py b/smart_control/mcts/execute_policy_utils.py index 728b9f59..b6c3c57b 100644 --- a/smart_control/mcts/execute_policy_utils.py +++ b/smart_control/mcts/execute_policy_utils.py @@ -824,7 +824,6 @@ def load_environment(gin_config_file: str): with gin.unlock_config(): gin.clear_config() gin.parse_config_file(gin_config_file) - print("Parsed config file") return Environment() # pylint: disable=no-value-for-parameter diff --git a/smart_control/mcts/mcts_experiment.py b/smart_control/mcts/mcts_experiment.py index 6eace141..a054807c 100644 --- a/smart_control/mcts/mcts_experiment.py +++ b/smart_control/mcts/mcts_experiment.py @@ -3,6 +3,7 @@ import pandas as pd import multiprocessing as mp import argparse +from time import time from tqdm import tqdm from tf_agents.train.utils import spec_utils from smart_control.mcts.mcts_utils import get_available_actions @@ -133,6 +134,8 @@ def get_default_schedule_policy(env): def main(): + start_time = time() + # Parse experiment arguments parser = argparse.ArgumentParser() parser.add_argument("--num_rollouts", type=int, default=50) @@ -147,6 +150,9 @@ def main(): parser.add_argument("--t_water_step", type=int, default=5) parser.add_argument("--t_air_step", type=int, default=10) + # if True, uses only the two actions from the default schedule + parser.add_argument("--use_only_baseline_actions", type=bool, default=True) + args = parser.parse_args() @@ -158,12 +164,15 @@ def main(): return_by_timestamp[pd.Timestamp(timestamp)] = return_value # Get all possible actions - possible_actions = get_available_actions(args.t_water_low, - args.t_water_high, - args.t_air_low, - args.t_air_high, - args.t_water_step, - args.t_air_step) + if args.use_only_baseline_actions: + possible_actions = [(292, 350), (285, 315)] + else: + possible_actions = get_available_actions(args.t_water_low, + args.t_water_high, + args.t_air_low, + args.t_air_high, + args.t_water_step, + args.t_air_step) # Create Monte Carlo Tree starting_node_environment_state = NodeEnvironmentState( @@ -185,7 +194,7 @@ def main(): while progress_bar.n < args.num_rollouts: nodes_for_expansion = tree.get_nodes_for_expansion(num_nodes=args.num_processes) # nodes for expansion is a list of tuples (node, action) - expansion_work_items = [(node.node_environment_state, action) for node, action in nodes_for_expansion] + expansion_work_items = [(node.node_environment_state, action, args.expansion_num_steps) for node, action in nodes_for_expansion] with mp.Pool(processes=args.num_processes) as pool: @@ -195,7 +204,7 @@ def main(): new_nodes = tree.perform_expansions(expansion_results) - rollout_items = [(node.node_environment_state, return_by_timestamp) for node in new_nodes] + rollout_items = [(node.node_environment_state, return_by_timestamp, args.rollout_num_steps) for node in new_nodes] with mp.Pool(processes=args.num_processes) as pool: rollout_results = pool.map(rollout_worker, rollout_items) @@ -204,33 +213,53 @@ def main(): progress_bar.update(len(nodes_for_expansion)) - print(f"Maximum tree depth: { tree.get_tree_depth() }") + end_time = time() + + experiment_results = { + "args": { + "num_rollouts": args.num_rollouts, + "expansion_num_steps": args.expansion_num_steps, + "rollout_num_steps": args.rollout_num_steps, + "num_processes": args.num_processes, + "t_water_low": args.t_water_low, + "t_water_high": args.t_water_high, + "t_air_low": args.t_air_low, + "t_air_high": args.t_air_high, + "t_water_step": args.t_water_step, + "t_air_step": args.t_air_step + }, + + "tree_depth": tree.get_tree_depth(), + "tree_size": tree.get_tree_size(), + "returns_by_timestamp": tree.get_returns_by_timestamp(), + "experiment_time": end_time - start_time + } + + json.dump(experiment_results, + open(f"experiment_results_two_actions/num_rollouts{ args.num_rollouts }num_processes{ args.num_processes }.json", "w"), + indent=4) return def expansion_worker(item): - node_environment_state, action = item + node_environment_state, action, expansion_steps = item env = SbsimMonteCarloTreeSearchNode.get_node_environment(default_env_config, node_environment_state) policy = get_policy_with_fixed_action(default_env, action) - - return_value, _ = compute_avg_return(env, policy) - new_node_state = NodeEnvironmentState( - node_temps=env.building._simulator._building.temp, - node_timestamp=env.building._simulator._current_timestamp, - node_state_return=node_environment_state.node_state_return + return_value, - node_previous_step=env.current_time_step() - ) - - return new_node_state + return SbsimMonteCarloTreeSearchNode.run_expansion(env, node_environment_state, policy, num_steps=expansion_steps) + def rollout_worker(item): - node_environment_state, return_by_timestamp = item + node_environment_state, return_by_timestamp, rollout_steps = item env = SbsimMonteCarloTreeSearchNode.get_node_environment(default_env_config, node_environment_state) rollout_policy = get_default_schedule_policy(default_env) - return SbsimMonteCarloTreeSearchNode.run_rollout(env, node_environment_state, rollout_policy, return_by_timestamp, 12) + return SbsimMonteCarloTreeSearchNode.run_rollout(env, + node_environment_state, + rollout_policy, + return_by_timestamp, + rollout_steps=rollout_steps) if __name__ == "__main__": From 86c7cf4ae2565b1027da2a7e25a9f4b2e64e747b Mon Sep 17 00:00:00 2001 From: Gabriel Guerra Trigo Date: Wed, 5 Mar 2025 23:38:48 -0500 Subject: [PATCH 3/9] refactoring --- poetry.lock | 292 ++++- pyproject.toml | 2 + .../sim_config_2023_07_06_0700.gin | 614 ++++++++++ .../sim_config_2023_08_03_0700.gin | 614 ++++++++++ .../sim_config_2023_09_07_0700.gin | 614 ++++++++++ .../sim_config_2023_10_05_0700.gin | 614 ++++++++++ .../sim_config_2023_11_02_0700.gin | 614 ++++++++++ .../sim_config_1_day copy.gin | 614 ++++++++++ .../train_sim_configs/sim_config_4_day.gin | 614 ++++++++++ smart_control/mcts/MonteCarloTreeSearch.py | 315 ------ smart_control/mcts/SchedulePolicy.py | 304 ----- smart_control/mcts/execute_policy_utils.py | 1003 ----------------- smart_control/mcts/mcts_experiment.py | 266 ----- smart_control/mcts/mcts_utils.py | 11 - smart_control/mcts/returns.json | 1 - smart_control/notebooks/SAC_Demo.ipynb | 625 ++++++---- smart_control/notebooks/test.ipynb | 0 smart_control/refactor/agents/__init__.py | 8 + smart_control/refactor/agents/base_agent.py | 132 +++ .../refactor/agents/networks/__init__.py | 9 + .../refactor/agents/networks/sac_networks.py | 151 +++ smart_control/refactor/agents/sac_agent.py | 135 +++ smart_control/refactor/observers/__init__.py | 11 + .../refactor/observers/base_observer.py | 40 + .../refactor/observers/composite_observer.py | 57 + .../observers/print_status_observer.py | 79 ++ .../refactor/observers/rendering_observer.py | 536 +++++++++ smart_control/refactor/refactor_test.py | 184 +++ .../refactor/replay_buffer/replay_buffer.py | 164 +++ smart_control/refactor/replay_buffer_test.py | 165 +++ smart_control/refactor/utils/__init__.py | 53 + smart_control/refactor/utils/config.py | 167 +++ smart_control/refactor/utils/constants.py | 19 + .../refactor/utils/data_processing.py | 330 ++++++ smart_control/refactor/utils/metrics.py | 100 ++ smart_control/simulator/constants.py | 2 +- 36 files changed, 7346 insertions(+), 2113 deletions(-) create mode 100644 smart_control/configs/resources/sb1/test_sim_configs/sim_config_2023_07_06_0700.gin create mode 100644 smart_control/configs/resources/sb1/test_sim_configs/sim_config_2023_08_03_0700.gin create mode 100644 smart_control/configs/resources/sb1/test_sim_configs/sim_config_2023_09_07_0700.gin create mode 100644 smart_control/configs/resources/sb1/test_sim_configs/sim_config_2023_10_05_0700.gin create mode 100644 smart_control/configs/resources/sb1/test_sim_configs/sim_config_2023_11_02_0700.gin create mode 100644 smart_control/configs/resources/sb1/train_sim_configs/sim_config_1_day copy.gin create mode 100644 smart_control/configs/resources/sb1/train_sim_configs/sim_config_4_day.gin delete mode 100644 smart_control/mcts/MonteCarloTreeSearch.py delete mode 100644 smart_control/mcts/SchedulePolicy.py delete mode 100644 smart_control/mcts/execute_policy_utils.py delete mode 100644 smart_control/mcts/mcts_experiment.py delete mode 100644 smart_control/mcts/mcts_utils.py delete mode 100644 smart_control/mcts/returns.json create mode 100644 smart_control/notebooks/test.ipynb create mode 100644 smart_control/refactor/agents/__init__.py create mode 100644 smart_control/refactor/agents/base_agent.py create mode 100644 smart_control/refactor/agents/networks/__init__.py create mode 100644 smart_control/refactor/agents/networks/sac_networks.py create mode 100644 smart_control/refactor/agents/sac_agent.py create mode 100644 smart_control/refactor/observers/__init__.py create mode 100644 smart_control/refactor/observers/base_observer.py create mode 100644 smart_control/refactor/observers/composite_observer.py create mode 100644 smart_control/refactor/observers/print_status_observer.py create mode 100644 smart_control/refactor/observers/rendering_observer.py create mode 100644 smart_control/refactor/refactor_test.py create mode 100644 smart_control/refactor/replay_buffer/replay_buffer.py create mode 100644 smart_control/refactor/replay_buffer_test.py create mode 100644 smart_control/refactor/utils/__init__.py create mode 100644 smart_control/refactor/utils/config.py create mode 100644 smart_control/refactor/utils/constants.py create mode 100644 smart_control/refactor/utils/data_processing.py create mode 100644 smart_control/refactor/utils/metrics.py diff --git a/poetry.lock b/poetry.lock index 7e9565cc..2b6975cc 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.4 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.0.1 and should not be changed by hand. [[package]] name = "absl-py" @@ -6,6 +6,8 @@ version = "2.1.0" description = "Abseil Python Common Libraries, see https://github.com/abseil/abseil-py." optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "absl-py-2.1.0.tar.gz", hash = "sha256:7820790efbb316739cde8b4e19357243fc3608a152024288513dd968d7d959ff"}, {file = "absl_py-2.1.0-py3-none-any.whl", hash = "sha256:526a04eadab8b4ee719ce68f204172ead1027549089702d99b9059f129ff1308"}, @@ -17,6 +19,8 @@ version = "1.4.4" description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"}, {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"}, @@ -28,6 +32,8 @@ version = "0.1.4" description = "Disable App Nap on macOS >= 10.9" optional = false python-versions = ">=3.6" +groups = ["main"] +markers = "platform_system == \"Darwin\" and python_version <= \"3.11\"" files = [ {file = "appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c"}, {file = "appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee"}, @@ -39,6 +45,8 @@ version = "2.4.1" description = "Annotate AST trees with source code positions" optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "asttokens-2.4.1-py2.py3-none-any.whl", hash = "sha256:051ed49c3dcae8913ea7cd08e46a606dba30b79993209636c4875bc1d637bc24"}, {file = "asttokens-2.4.1.tar.gz", hash = "sha256:b03869718ba9a6eb027e134bfdf69f38a236d681c83c160d510768af11254ba0"}, @@ -57,6 +65,8 @@ version = "1.6.3" description = "An AST unparser for Python" optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "astunparse-1.6.3-py2.py3-none-any.whl", hash = "sha256:c2652417f2c8b5bb325c885ae329bdf3f86424075c4fd1a128674bc6fba4b8e8"}, {file = "astunparse-1.6.3.tar.gz", hash = "sha256:5ad93a8456f0d084c3456d059fd9a92cce667963232cbf763eac3bc5b7940872"}, @@ -72,6 +82,8 @@ version = "0.23.1" description = "The bidirectional mapping library for Python." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "bidict-0.23.1-py3-none-any.whl", hash = "sha256:5dae8d4d79b552a71cbabc7deb25dfe8ce710b17ff41711e13010ead2abfc3e5"}, {file = "bidict-0.23.1.tar.gz", hash = "sha256:03069d763bc387bbd20e7d49914e75fc4132a41937fa3405417e1a5a2d006d71"}, @@ -83,6 +95,8 @@ version = "5.5.0" description = "Extensible memoizing collections and decorators" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "cachetools-5.5.0-py3-none-any.whl", hash = "sha256:02134e8439cdc2ffb62023ce1debca2944c3f289d66bb17ead3ab3dede74b292"}, {file = "cachetools-5.5.0.tar.gz", hash = "sha256:2cc24fb4cbe39633fb7badd9db9ca6295d766d9c2995f245725a46715d050f2a"}, @@ -94,6 +108,8 @@ version = "2024.8.30" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8"}, {file = "certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"}, @@ -105,6 +121,8 @@ version = "1.17.1" description = "Foreign Function Interface for Python calling C code." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" and implementation_name == \"pypy\"" files = [ {file = "cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14"}, {file = "cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67"}, @@ -184,6 +202,8 @@ version = "3.3.2" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7.0" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, @@ -283,6 +303,8 @@ version = "3.0.0" description = "Pickler class to extend the standard pickle.Pickler functionality" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "cloudpickle-3.0.0-py3-none-any.whl", hash = "sha256:246ee7d0c295602a036e86369c77fecda4ab17b506496730f2f576d9016fd9c7"}, {file = "cloudpickle-3.0.0.tar.gz", hash = "sha256:996d9a482c6fb4f33c1a35335cf8afd065d2a56e973270364840712d9131a882"}, @@ -294,6 +316,8 @@ version = "0.4.6" description = "Cross-platform colored terminal text." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +groups = ["main"] +markers = "(sys_platform == \"win32\" or platform_system == \"Windows\") and python_version <= \"3.11\"" files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, @@ -305,6 +329,8 @@ version = "0.2.2" description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "comm-0.2.2-py3-none-any.whl", hash = "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3"}, {file = "comm-0.2.2.tar.gz", hash = "sha256:3fd7a84065306e07bea1773df6eb8282de51ba82f77c72f9c85716ab11fe980e"}, @@ -322,6 +348,8 @@ version = "1.3.0" description = "Python library for calculating contours of 2D quadrilateral grids" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "contourpy-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:880ea32e5c774634f9fcd46504bf9f080a41ad855f4fef54f5380f5133d343c7"}, {file = "contourpy-1.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:76c905ef940a4474a6289c71d53122a4f77766eef23c03cd57016ce19d0f7b42"}, @@ -406,6 +434,8 @@ version = "0.12.1" description = "Composable style cycles" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30"}, {file = "cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c"}, @@ -421,6 +451,8 @@ version = "1.8.5" description = "An implementation of the Debug Adapter Protocol for Python" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "debugpy-1.8.5-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:7e4d594367d6407a120b76bdaa03886e9eb652c05ba7f87e37418426ad2079f7"}, {file = "debugpy-1.8.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4413b7a3ede757dc33a273a17d685ea2b0c09dbd312cc03f5534a0fd4d40750a"}, @@ -452,6 +484,8 @@ version = "5.1.1" description = "Decorators for Humans" optional = false python-versions = ">=3.5" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, @@ -463,6 +497,8 @@ version = "0.14.0" description = "Reverb is an efficient and easy-to-use data storage and transport system designed for machine learning research." optional = false python-versions = ">=3" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "dm_reverb-0.14.0-cp310-cp310-manylinux2014_x86_64.whl", hash = "sha256:1388aea4a58117d2d93d35078d249728f580c3d3295d1c0fcfa9b41c6874f931"}, {file = "dm_reverb-0.14.0-cp311-cp311-manylinux2014_x86_64.whl", hash = "sha256:a670622248e98b800dc410fac9dab907e38154c306c3be8cf3b4ede54fcb48c6"}, @@ -483,6 +519,8 @@ version = "0.1.8" description = "Tree is a library for working with nested data structures." optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "dm-tree-0.1.8.tar.gz", hash = "sha256:0fcaabbb14e7980377439e7140bd05552739ca5e515ecb3119f234acee4b9430"}, {file = "dm_tree-0.1.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:35cc164a79336bfcfafb47e5f297898359123bbd3330c1967f0c4994f9cf9f60"}, @@ -538,6 +576,8 @@ version = "1.2.2" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version < \"3.11\"" files = [ {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, @@ -552,6 +592,8 @@ version = "2.1.0" description = "Get the currently executing AST node of a frame, and other information" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "executing-2.1.0-py2.py3-none-any.whl", hash = "sha256:8d63781349375b5ebccc3142f4b30350c0cd9c79f921cde38be2be4637e98eaf"}, {file = "executing-2.1.0.tar.gz", hash = "sha256:8ea27ddd260da8150fa5a708269c4a10e76161e2496ec3e587da9e3c0fe4b9ab"}, @@ -566,6 +608,8 @@ version = "24.3.25" description = "The FlatBuffers serialization format for Python" optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "flatbuffers-24.3.25-py2.py3-none-any.whl", hash = "sha256:8dbdec58f935f3765e4f7f3cf635ac3a77f83568138d6a2311f524ec96364812"}, {file = "flatbuffers-24.3.25.tar.gz", hash = "sha256:de2ec5b203f21441716617f38443e0a8ebf3d25bf0d9c0bb0ce68fa00ad546a4"}, @@ -577,6 +621,8 @@ version = "0.3" description = "Saves and loads to the cache a transformed versions of a source object." optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "flexcache-0.3-py3-none-any.whl", hash = "sha256:d43c9fea82336af6e0115e308d9d33a185390b8346a017564611f1466dcd2e32"}, {file = "flexcache-0.3.tar.gz", hash = "sha256:18743bd5a0621bfe2cf8d519e4c3bfdf57a269c15d1ced3fb4b64e0ff4600656"}, @@ -594,6 +640,8 @@ version = "0.3.1" description = "Parsing made fun ... using typing." optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "flexparser-0.3.1-py3-none-any.whl", hash = "sha256:2e3e2936bec1f9277f777ef77297522087d96adb09624d4fe4240fd56885c013"}, {file = "flexparser-0.3.1.tar.gz", hash = "sha256:36f795d82e50f5c9ae2fde1c33f21f88922fdd67b7629550a3cc4d0b40a66856"}, @@ -611,6 +659,8 @@ version = "4.53.1" description = "Tools to manipulate font files" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "fonttools-4.53.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0679a30b59d74b6242909945429dbddb08496935b82f91ea9bf6ad240ec23397"}, {file = "fonttools-4.53.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e8bf06b94694251861ba7fdeea15c8ec0967f84c3d4143ae9daf42bbc7717fe3"}, @@ -676,6 +726,8 @@ version = "0.6.0" description = "Python AST that abstracts the underlying Python version" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "gast-0.6.0-py3-none-any.whl", hash = "sha256:52b182313f7330389f72b069ba00f174cfe2a06411099547288839c6cbafbd54"}, {file = "gast-0.6.0.tar.gz", hash = "sha256:88fc5300d32c7ac6ca7b515310862f71e6fdf2c029bbec7c66c0f5dd47b6b1fb"}, @@ -687,6 +739,8 @@ version = "0.5.0" description = "Gin-Config: A lightweight configuration library for Python" optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "gin-config-0.5.0.tar.gz", hash = "sha256:0c6ea5026ded927c8c93c990b01c695257c1df446e45e549a158cfbc79e19ed6"}, {file = "gin_config-0.5.0-py3-none-any.whl", hash = "sha256:bddb7ca221ea2b46cdb59321e79fecf02d6e3b728906047fcd4076c297609fd6"}, @@ -706,6 +760,8 @@ version = "2.34.0" description = "Google Authentication Library" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "google_auth-2.34.0-py2.py3-none-any.whl", hash = "sha256:72fd4733b80b6d777dcde515628a9eb4a577339437012874ea286bca7261ee65"}, {file = "google_auth-2.34.0.tar.gz", hash = "sha256:8eb87396435c19b20d32abd2f984e31c191a15284af72eb922f10e5bde9c04cc"}, @@ -729,6 +785,8 @@ version = "1.2.1" description = "Google Authentication Library" optional = false python-versions = ">=3.6" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "google_auth_oauthlib-1.2.1-py2.py3-none-any.whl", hash = "sha256:2d58a27262d55aa1b87678c3ba7142a080098cbc2024f903c62355deb235d91f"}, {file = "google_auth_oauthlib-1.2.1.tar.gz", hash = "sha256:afd0cad092a2eaa53cd8e8298557d6de1034c6cb4a740500b5357b648af97263"}, @@ -747,6 +805,8 @@ version = "0.2.0" description = "pasta is an AST-based Python refactoring library" optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "google-pasta-0.2.0.tar.gz", hash = "sha256:c9f2c8dfc8f96d0d5808299920721be30c9eec37f2389f28904f454565c8a16e"}, {file = "google_pasta-0.2.0-py2-none-any.whl", hash = "sha256:4612951da876b1a10fe3960d7226f0c7682cf901e16ac06e473b267a5afa8954"}, @@ -762,6 +822,8 @@ version = "1.0.0" description = "." optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "google3-1.0.0-py2.py3-none-any.whl", hash = "sha256:f067267b90d7cb96635668feabdef2d2a17bce1375c46976834c64810cd8c4f0"}, {file = "google3-1.0.0.tar.gz", hash = "sha256:7fb6799c8a8480fd73f950d820a30786f1edb5583e5c6e38a9da91bce9a66a81"}, @@ -773,6 +835,8 @@ version = "1.66.1" description = "HTTP/2-based RPC framework" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "grpcio-1.66.1-cp310-cp310-linux_armv7l.whl", hash = "sha256:4877ba180591acdf127afe21ec1c7ff8a5ecf0fe2600f0d3c50e8c4a1cbc6492"}, {file = "grpcio-1.66.1-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:3750c5a00bd644c75f4507f77a804d0189d97a107eb1481945a0cf3af3e7a5ac"}, @@ -831,6 +895,8 @@ version = "0.23.0" description = "Gym: A universal API for reinforcement learning environments" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "gym-0.23.0.tar.gz", hash = "sha256:dbd3d0c50fc1260b57e6f12ba792152b73551730512623b7653d6dfb2f7a105d"}, ] @@ -857,6 +923,8 @@ version = "0.0.8" description = "Notices for gym" optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "gym-notices-0.0.8.tar.gz", hash = "sha256:ad25e200487cafa369728625fe064e88ada1346618526102659b4640f2b4b911"}, {file = "gym_notices-0.0.8-py3-none-any.whl", hash = "sha256:e5f82e00823a166747b4c2a07de63b6560b1acb880638547e0cabf825a01e463"}, @@ -868,6 +936,8 @@ version = "3.11.0" description = "Read and write HDF5 files from Python" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "h5py-3.11.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1625fd24ad6cfc9c1ccd44a66dac2396e7ee74940776792772819fc69f3a3731"}, {file = "h5py-3.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c072655ad1d5fe9ef462445d3e77a8166cbfa5e599045f8aa3c19b75315f10e5"}, @@ -901,6 +971,8 @@ version = "0.56" description = "Generate and work with holidays in Python" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "holidays-0.56-py3-none-any.whl", hash = "sha256:19b6410c3ae899ad5746917f106c5f07c899eba3afa3f4ca82981d3ed677f4c4"}, {file = "holidays-0.56.tar.gz", hash = "sha256:86e8550724d34f72b4db2292b2a70983067b2ee80eeaf18a30ea882d821814c5"}, @@ -915,6 +987,8 @@ version = "3.8" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.6" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "idna-3.8-py3-none-any.whl", hash = "sha256:050b4e5baadcd44d760cedbd2b8e639f2ff89bbc7a5730fcc662954303377aac"}, {file = "idna-3.8.tar.gz", hash = "sha256:d838c2c0ed6fced7693d5e8ab8e734d5f8fda53a039c0164afb0b82e771e3603"}, @@ -926,6 +1000,8 @@ version = "6.29.5" description = "IPython Kernel for Jupyter" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "ipykernel-6.29.5-py3-none-any.whl", hash = "sha256:afdb66ba5aa354b09b91379bac28ae4afebbb30e8b39510c9690afb7a10421b5"}, {file = "ipykernel-6.29.5.tar.gz", hash = "sha256:f093a22c4a40f8828f8e330a9c297cb93dcab13bd9678ded6de8e5cf81c56215"}, @@ -959,6 +1035,8 @@ version = "8.27.0" description = "IPython: Productive Interactive Computing" optional = false python-versions = ">=3.10" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "ipython-8.27.0-py3-none-any.whl", hash = "sha256:f68b3cb8bde357a5d7adc9598d57e22a45dfbea19eb6b98286fa3b288c9cd55c"}, {file = "ipython-8.27.0.tar.gz", hash = "sha256:0b99a2dc9f15fd68692e898e5568725c6d49c527d36a9fb5960ffbdeaa82ff7e"}, @@ -997,6 +1075,8 @@ version = "0.19.1" description = "An autocompletion tool for Python that can be used for text editors." optional = false python-versions = ">=3.6" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "jedi-0.19.1-py2.py3-none-any.whl", hash = "sha256:e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0"}, {file = "jedi-0.19.1.tar.gz", hash = "sha256:cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd"}, @@ -1016,6 +1096,8 @@ version = "1.4.2" description = "Lightweight pipelining with Python functions" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "joblib-1.4.2-py3-none-any.whl", hash = "sha256:06d478d5674cbc267e7496a410ee875abd68e4340feff4490bcb7afb88060ae6"}, {file = "joblib-1.4.2.tar.gz", hash = "sha256:2382c5816b2636fbd20a09e0f4e9dad4736765fdfb7dca582943b9c1366b3f0e"}, @@ -1027,6 +1109,8 @@ version = "8.6.2" description = "Jupyter protocol implementation and client libraries" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "jupyter_client-8.6.2-py3-none-any.whl", hash = "sha256:50cbc5c66fd1b8f65ecb66bc490ab73217993632809b6e505687de18e9dea39f"}, {file = "jupyter_client-8.6.2.tar.gz", hash = "sha256:2bda14d55ee5ba58552a8c53ae43d215ad9868853489213f37da060ced54d8df"}, @@ -1049,6 +1133,8 @@ version = "5.7.2" description = "Jupyter core package. A base package on which Jupyter projects rely." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "jupyter_core-5.7.2-py3-none-any.whl", hash = "sha256:4f7315d2f6b4bcf2e3e7cb6e46772eba760ae459cd1f59d29eb57b0a01bd7409"}, {file = "jupyter_core-5.7.2.tar.gz", hash = "sha256:aa5f8d32bbf6b431ac830496da7392035d6f61b4f54872f15c4bd2a9c3f536d9"}, @@ -1069,6 +1155,8 @@ version = "2.15.0" description = "Deep learning for humans." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "keras-2.15.0-py3-none-any.whl", hash = "sha256:2dcc6d2e30cf9c951064b63c1f4c404b966c59caf09e01f3549138ec8ee0dd1f"}, {file = "keras-2.15.0.tar.gz", hash = "sha256:81871d298c064dc4ac6b58440fdae67bfcf47c8d7ad28580fab401834c06a575"}, @@ -1080,6 +1168,8 @@ version = "1.4.7" description = "A fast implementation of the Cassowary constraint solver" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "kiwisolver-1.4.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8a9c83f75223d5e48b0bc9cb1bf2776cf01563e00ade8775ffe13b0b6e1af3a6"}, {file = "kiwisolver-1.4.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:58370b1ffbd35407444d57057b57da5d6549d2d854fa30249771775c63b5fe17"}, @@ -1203,6 +1293,8 @@ version = "18.1.1" description = "Clang Python Bindings, mirrored from the official LLVM repo: https://github.com/llvm/llvm-project/tree/main/clang/bindings/python, to make the installation process easier." optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "libclang-18.1.1-1-py2.py3-none-macosx_11_0_arm64.whl", hash = "sha256:0b2e143f0fac830156feb56f9231ff8338c20aecfe72b4ffe96f19e5a1dbb69a"}, {file = "libclang-18.1.1-py2.py3-none-macosx_10_9_x86_64.whl", hash = "sha256:6f14c3f194704e5d09769108f03185fce7acaf1d1ae4bbb2f30a72c2400cb7c5"}, @@ -1222,6 +1314,8 @@ version = "3.7" description = "Python implementation of John Gruber's Markdown." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "Markdown-3.7-py3-none-any.whl", hash = "sha256:7eb6df5690b81a1d7942992c97fad2938e956e79df20cbc6186e9c3a77b1c803"}, {file = "markdown-3.7.tar.gz", hash = "sha256:2ae2471477cfd02dbbf038d5d9bc226d40def84b4fe2986e49b59b6b472bbed2"}, @@ -1237,6 +1331,8 @@ version = "2.1.5" description = "Safely add untrusted strings to HTML/XML markup." optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"}, {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"}, @@ -1306,6 +1402,8 @@ version = "3.9.2" description = "Python plotting package" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "matplotlib-3.9.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:9d78bbc0cbc891ad55b4f39a48c22182e9bdaea7fc0e5dbd364f49f729ca1bbb"}, {file = "matplotlib-3.9.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c375cc72229614632c87355366bdf2570c2dac01ac66b8ad048d2dabadf2d0d4"}, @@ -1369,6 +1467,8 @@ version = "0.1.7" description = "Inline Matplotlib backend for Jupyter" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca"}, {file = "matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90"}, @@ -1383,6 +1483,8 @@ version = "0.1.1" description = "Python implementation of monte carlo tree search for 2 players zero-sum game" optional = false python-versions = ">=3.5.7" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "mctspy-0.1.1-py3-none-any.whl", hash = "sha256:fc7a87aa7654971ede89b63a58d2ed3171a498937d38bd7b53b79f4dea880354"}, {file = "mctspy-0.1.1.tar.gz", hash = "sha256:52d16193bdadeaca144bf28047367c13e8940a45d758a3a9c96c78d3b7226dfa"}, @@ -1397,6 +1499,8 @@ version = "1.2.2" description = "Read/write/show images and videos in an IPython notebook" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "mediapy-1.2.2-py3-none-any.whl", hash = "sha256:2b159c385120c6eca9c88ccf96a19fb2b5b5937c788cf430db637d27270618ba"}, {file = "mediapy-1.2.2.tar.gz", hash = "sha256:42d9a1aa93c183550b824dbb4f0de5da61aa5c84db8f01f063acd1f23b90ef0a"}, @@ -1417,6 +1521,8 @@ version = "0.3.2" description = "" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "ml_dtypes-0.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7afde548890a92b41c0fed3a6c525f1200a5727205f73dc21181a2726571bb53"}, {file = "ml_dtypes-0.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1a746fe5fb9cd974a91070174258f0be129c592b93f9ce7df6cc336416c3fbd"}, @@ -1452,6 +1558,8 @@ version = "1.6.0" description = "Patch asyncio to allow nested event loops" optional = false python-versions = ">=3.5" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c"}, {file = "nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe"}, @@ -1463,6 +1571,8 @@ version = "1.26.4" description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, @@ -1508,6 +1618,8 @@ version = "3.2.2" description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic" optional = false python-versions = ">=3.6" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "oauthlib-3.2.2-py3-none-any.whl", hash = "sha256:8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca"}, {file = "oauthlib-3.2.2.tar.gz", hash = "sha256:9859c40929662bec5d64f34d01c99e093149682a3f38915dc0655d5a633dd918"}, @@ -1524,6 +1636,8 @@ version = "4.10.0.84" description = "Wrapper package for OpenCV python bindings." optional = false python-versions = ">=3.6" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "opencv-python-4.10.0.84.tar.gz", hash = "sha256:72d234e4582e9658ffea8e9cae5b63d488ad06994ef12d81dc303b17472f3526"}, {file = "opencv_python-4.10.0.84-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:fc182f8f4cda51b45f01c64e4cbedfc2f00aff799debebc305d8d0210c43f251"}, @@ -1547,6 +1661,8 @@ version = "3.3.0" description = "Optimizing numpys einsum function" optional = false python-versions = ">=3.5" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "opt_einsum-3.3.0-py3-none-any.whl", hash = "sha256:2455e59e3947d3c275477df7f5205b30635e266fe6dc300e3d9f9646bfcea147"}, {file = "opt_einsum-3.3.0.tar.gz", hash = "sha256:59f6475f77bbc37dcf7cd748519c0ec60722e91e63ca114e68821c0c54a46549"}, @@ -1565,6 +1681,8 @@ version = "24.1" description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"}, {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"}, @@ -1576,6 +1694,8 @@ version = "2.2.2" description = "Powerful data structures for data analysis, time series, and statistics" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "pandas-2.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:90c6fca2acf139569e74e8781709dccb6fe25940488755716d1d354d6bc58bce"}, {file = "pandas-2.2.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c7adfc142dac335d8c1e0dcbd37eb8617eac386596eb9e1a1b77791cf2498238"}, @@ -1648,6 +1768,8 @@ version = "0.8.4" description = "A Python Parser" optional = false python-versions = ">=3.6" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18"}, {file = "parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d"}, @@ -1663,6 +1785,8 @@ version = "4.9.0" description = "Pexpect allows easy control of interactive console applications." optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\" and (sys_platform != \"win32\" and sys_platform != \"emscripten\")" files = [ {file = "pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523"}, {file = "pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f"}, @@ -1677,6 +1801,8 @@ version = "10.4.0" description = "Python Imaging Library (Fork)" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "pillow-10.4.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:4d9667937cfa347525b319ae34375c37b9ee6b525440f3ef48542fcf66f2731e"}, {file = "pillow-10.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:543f3dc61c18dafb755773efc89aae60d06b6596a63914107f75459cf984164d"}, @@ -1774,6 +1900,8 @@ version = "0.24.3" description = "Physical quantities module" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "Pint-0.24.3-py3-none-any.whl", hash = "sha256:d98667e46fd03a1b94694fbfa104ec30858684d8ab26952e2a348b48059089bb"}, {file = "pint-0.24.3.tar.gz", hash = "sha256:d54771093e8b94c4e0a35ac638c2444ddf3ef685652bab7675ffecfa0c5c5cdf"}, @@ -1803,6 +1931,8 @@ version = "4.2.2" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "platformdirs-4.2.2-py3-none-any.whl", hash = "sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee"}, {file = "platformdirs-4.2.2.tar.gz", hash = "sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3"}, @@ -1819,6 +1949,8 @@ version = "1.6.0" description = "A library to choose unique available network ports." optional = false python-versions = ">=3.6" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "portpicker-1.6.0-py3-none-any.whl", hash = "sha256:b2787a41404cf7edbe29b07b9e0ed863b09f2665dcc01c1eb0c2261c1e7d0755"}, {file = "portpicker-1.6.0.tar.gz", hash = "sha256:bd507fd6f96f65ee02781f2e674e9dc6c99bbfa6e3c39992e3916204c9d431fa"}, @@ -1833,6 +1965,8 @@ version = "3.0.47" description = "Library for building powerful interactive command lines in Python" optional = false python-versions = ">=3.7.0" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "prompt_toolkit-3.0.47-py3-none-any.whl", hash = "sha256:0d7bfa67001d5e39d02c224b663abc33687405033a8c422d0d675a5a13361d10"}, {file = "prompt_toolkit-3.0.47.tar.gz", hash = "sha256:1e1b29cb58080b1e69f207c893a1a7bf16d127a5c30c9d17a25a5d77792e5360"}, @@ -1847,6 +1981,8 @@ version = "3.20.3" description = "Protocol Buffers" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "protobuf-3.20.3-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:f4bd856d702e5b0d96a00ec6b307b0f51c1982c2bf9c0052cf9019e9a544ba99"}, {file = "protobuf-3.20.3-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9aae4406ea63d825636cc11ffb34ad3379335803216ee3a856787bcf5ccc751e"}, @@ -1878,6 +2014,8 @@ version = "6.0.0" description = "Cross-platform lib for process and system monitoring in Python." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "psutil-6.0.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a021da3e881cd935e64a3d0a20983bda0bb4cf80e4f74fa9bfcb1bc5785360c6"}, {file = "psutil-6.0.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:1287c2b95f1c0a364d23bc6f2ea2365a8d4d9b726a3be7294296ff7ba97c17f0"}, @@ -1907,6 +2045,8 @@ version = "0.7.0" description = "Run a subprocess in a pseudo terminal" optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\" and (sys_platform != \"win32\" and sys_platform != \"emscripten\")" files = [ {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, @@ -1918,6 +2058,8 @@ version = "0.2.3" description = "Safely evaluate AST nodes without side effects" optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0"}, {file = "pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42"}, @@ -1932,6 +2074,8 @@ version = "0.6.0" description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "pyasn1-0.6.0-py2.py3-none-any.whl", hash = "sha256:cca4bb0f2df5504f02f6f8a775b6e416ff9b0b3b16f7ee80b5a3153d9b804473"}, {file = "pyasn1-0.6.0.tar.gz", hash = "sha256:3a35ab2c4b5ef98e17dfdec8ab074046fbda76e281c5a706ccd82328cfc8f64c"}, @@ -1943,6 +2087,8 @@ version = "0.4.0" description = "A collection of ASN.1-based protocols modules" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "pyasn1_modules-0.4.0-py3-none-any.whl", hash = "sha256:be04f15b66c206eed667e0bb5ab27e2b1855ea54a842e5037738099e8ca4ae0b"}, {file = "pyasn1_modules-0.4.0.tar.gz", hash = "sha256:831dbcea1b177b28c9baddf4c6d1013c24c3accd14a1873fffaa6a2e905f17b6"}, @@ -1957,6 +2103,8 @@ version = "2.22" description = "C parser in Python" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" and implementation_name == \"pypy\"" files = [ {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, @@ -1968,6 +2116,8 @@ version = "2.1.3" description = "Python Game Development" optional = false python-versions = ">=3.6" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "pygame-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bfc8a0d863470ec673ff267caaff59b858e967ef78170dc04fc318a7c5f9dd33"}, {file = "pygame-2.1.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:64d37dc04a14df9519e2e87611cac6a144c6204365e3fdb0bfb86fa459e32f38"}, @@ -2048,6 +2198,8 @@ version = "2.18.0" description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"}, {file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"}, @@ -2062,6 +2214,8 @@ version = "3.1.4" description = "pyparsing module - Classes and methods to define and execute parsing grammars" optional = false python-versions = ">=3.6.8" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "pyparsing-3.1.4-py3-none-any.whl", hash = "sha256:a6a7ee4235a3f944aa1fa2249307708f893fe5717dc603503c6c7969c070fb7c"}, {file = "pyparsing-3.1.4.tar.gz", hash = "sha256:f86ec8d1a83f11977c9a6ea7598e8c27fc5cddfa5b07ea2241edbbde1d7bc032"}, @@ -2076,6 +2230,8 @@ version = "2.9.0.post0" description = "Extensions to the standard Python datetime module" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, @@ -2090,6 +2246,8 @@ version = "2024.1" description = "World timezone definitions, modern and historical" optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "pytz-2024.1-py2.py3-none-any.whl", hash = "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319"}, {file = "pytz-2024.1.tar.gz", hash = "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812"}, @@ -2101,6 +2259,8 @@ version = "306" description = "Python for Window Extensions" optional = false python-versions = "*" +groups = ["main"] +markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\" and python_version <= \"3.11\"" files = [ {file = "pywin32-306-cp310-cp310-win32.whl", hash = "sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d"}, {file = "pywin32-306-cp310-cp310-win_amd64.whl", hash = "sha256:84f4471dbca1887ea3803d8848a1616429ac94a4a8d05f4bc9c5dcfd42ca99c8"}, @@ -2118,12 +2278,78 @@ files = [ {file = "pywin32-306-cp39-cp39-win_amd64.whl", hash = "sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4"}, ] +[[package]] +name = "pyyaml" +version = "6.0.2" +description = "YAML parser and emitter for Python" +optional = false +python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\"" +files = [ + {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, + {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68"}, + {file = "PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99"}, + {file = "PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e"}, + {file = "PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5"}, + {file = "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b"}, + {file = "PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4"}, + {file = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652"}, + {file = "PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183"}, + {file = "PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563"}, + {file = "PyYAML-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083"}, + {file = "PyYAML-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706"}, + {file = "PyYAML-6.0.2-cp38-cp38-win32.whl", hash = "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a"}, + {file = "PyYAML-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725"}, + {file = "PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631"}, + {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"}, + {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"}, +] + [[package]] name = "pyzmq" version = "26.2.0" description = "Python bindings for 0MQ" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "pyzmq-26.2.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:ddf33d97d2f52d89f6e6e7ae66ee35a4d9ca6f36eda89c24591b0c40205a3629"}, {file = "pyzmq-26.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dacd995031a01d16eec825bf30802fceb2c3791ef24bcce48fa98ce40918c27b"}, @@ -2245,6 +2471,8 @@ version = "2.32.3" description = "Python HTTP for Humans." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, @@ -2266,6 +2494,8 @@ version = "2.0.0" description = "OAuthlib authentication support for Requests." optional = false python-versions = ">=3.4" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "requests-oauthlib-2.0.0.tar.gz", hash = "sha256:b3dffaebd884d8cd778494369603a9e7b58d29111bf6b41bdc2dcd87203af4e9"}, {file = "requests_oauthlib-2.0.0-py2.py3-none-any.whl", hash = "sha256:7dd8a5c40426b779b0868c404bdef9768deccf22749cde15852df527e6269b36"}, @@ -2284,6 +2514,8 @@ version = "4.9" description = "Pure-Python RSA implementation" optional = false python-versions = ">=3.6,<4" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "rsa-4.9-py3-none-any.whl", hash = "sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7"}, {file = "rsa-4.9.tar.gz", hash = "sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21"}, @@ -2298,6 +2530,8 @@ version = "1.5.1" description = "A set of python modules for machine learning and data mining" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "scikit_learn-1.5.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:781586c414f8cc58e71da4f3d7af311e0505a683e112f2f62919e3019abd3745"}, {file = "scikit_learn-1.5.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:f5b213bc29cc30a89a3130393b0e39c847a15d769d6e59539cd86b75d276b1a7"}, @@ -2343,6 +2577,8 @@ version = "1.14.1" description = "Fundamental algorithms for scientific computing in Python" optional = false python-versions = ">=3.10" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "scipy-1.14.1-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:b28d2ca4add7ac16ae8bb6632a3c86e4b9e4d52d3e34267f6e1b0c1f8d87e389"}, {file = "scipy-1.14.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:d0d2821003174de06b69e58cef2316a6622b60ee613121199cb2852a873f8cf3"}, @@ -2393,6 +2629,8 @@ version = "0.13.2" description = "Statistical data visualization" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "seaborn-0.13.2-py3-none-any.whl", hash = "sha256:636f8336facf092165e27924f223d3c62ca560b1f2bb5dff7ab7fad265361987"}, {file = "seaborn-0.13.2.tar.gz", hash = "sha256:93e60a40988f4d65e9f4885df477e2fdaff6b73a9ded434c1ab356dd57eefff7"}, @@ -2414,6 +2652,8 @@ version = "74.1.2" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "setuptools-74.1.2-py3-none-any.whl", hash = "sha256:5f4c08aa4d3ebcb57a50c33b1b07e94315d7fc7230f7115e47fc99776c8ce308"}, {file = "setuptools-74.1.2.tar.gz", hash = "sha256:95b40ed940a1c67eb70fc099094bd6e99c6ee7c23aa2306f4d2697ba7916f9c6"}, @@ -2434,6 +2674,8 @@ version = "1.16.0" description = "Python 2 and 3 compatibility utilities" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, @@ -2445,6 +2687,8 @@ version = "0.6.3" description = "Extract data from python stack frames and tracebacks for informative displays" optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695"}, {file = "stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9"}, @@ -2464,6 +2708,8 @@ version = "2.15.2" description = "TensorBoard lets you watch Tensors Flow" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "tensorboard-2.15.2-py3-none-any.whl", hash = "sha256:a6f6443728064d962caea6d34653e220e34ef8df764cb06a8212c17e1a8f0622"}, ] @@ -2488,6 +2734,8 @@ version = "0.7.2" description = "Fast data loading for TensorBoard" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "tensorboard_data_server-0.7.2-py3-none-any.whl", hash = "sha256:7e0610d205889588983836ec05dc098e80f97b7e7bbff7e994ebb78f578d0ddb"}, {file = "tensorboard_data_server-0.7.2-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:9fe5d24221b29625dbc7328b0436ca7fc1c23de4acf4d272f1180856e32f9f60"}, @@ -2500,6 +2748,8 @@ version = "2.15.1" description = "TensorFlow is an open source machine learning framework for everyone." optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "tensorflow-2.15.1-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:91b51a507007d63a70b65be307d701088d15042a6399c0e2312b53072226e909"}, {file = "tensorflow-2.15.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:10132acc072d59696c71ce7221d2d8e0e3ff1e6bc8688dbac6d7aed8e675b710"}, @@ -2553,6 +2803,8 @@ version = "2.15.1" description = "TensorFlow is an open source machine learning framework for everyone." optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "platform_system == \"Linux\" and (platform_machine == \"arm64\" or platform_machine == \"aarch64\") and python_version <= \"3.11\"" files = [ {file = "tensorflow_cpu_aws-2.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c781d95cb8c58d47cb012b7b4e77b2f3e8d4d47b45926bc54976506fa0c037cc"}, {file = "tensorflow_cpu_aws-2.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4c3a3a9363bf42999adedbbd514e3a133be2d62f61fee9cfa46aaefb087c09e"}, @@ -2592,6 +2844,8 @@ version = "2.15.0" description = "TensorFlow Estimator." optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "tensorflow_estimator-2.15.0-py2.py3-none-any.whl", hash = "sha256:aedf21eec7fb2dc91150fc91a1ce12bc44dbb72278a08b58e79ff87c9e28f153"}, ] @@ -2602,6 +2856,8 @@ version = "2.15.1" description = "TensorFlow is an open source machine learning framework for everyone." optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "platform_system == \"Windows\" and python_version <= \"3.11\"" files = [ {file = "tensorflow_intel-2.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:9f305142b3c5e239c82c463429b1f88726dd27d9f23523871f825493a9ffc5f4"}, {file = "tensorflow_intel-2.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:4f05059493f8203285ac5cea3b1955887a7903c1ca6f7a29e4b6ef912b1f934b"}, @@ -2641,6 +2897,8 @@ version = "0.37.1" description = "TensorFlow IO" optional = false python-versions = "<3.13,>=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "tensorflow_io_gcs_filesystem-0.37.1-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:249c12b830165841411ba71e08215d0e94277a49c551e6dd5d72aab54fe5491b"}, {file = "tensorflow_io_gcs_filesystem-0.37.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:257aab23470a0796978efc9c2bcf8b0bc80f22e6298612a4c0a50d3f4e88060c"}, @@ -2673,6 +2931,8 @@ version = "0.22.1" description = "Probabilistic modeling and statistical inference in TensorFlow" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "tensorflow_probability-0.22.1-py2.py3-none-any.whl", hash = "sha256:3035b936b028ea10bd3a9589329557f5b2c5ace813a6bff3f59acfe3226eef9b"}, ] @@ -2696,6 +2956,8 @@ version = "2.4.0" description = "ANSI color formatting for output in terminal" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "termcolor-2.4.0-py3-none-any.whl", hash = "sha256:9297c0df9c99445c2412e832e882a7884038a25617c60cea2ad69488d4040d63"}, {file = "termcolor-2.4.0.tar.gz", hash = "sha256:aab9e56047c8ac41ed798fa36d892a37aca6b3e9159f3e0c24bc64a9b3ac7b7a"}, @@ -2710,6 +2972,8 @@ version = "0.18.0" description = "TF-Agents: A Reinforcement Learning Library for TensorFlow" optional = false python-versions = ">=3" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "tf_agents-0.18.0-py3-none-any.whl", hash = "sha256:97b812f9baf54527e1a4e720d0d8ba1ef2d370c791b05954e3a826b47d0e7066"}, ] @@ -2738,6 +3002,8 @@ version = "3.5.0" description = "threadpoolctl" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "threadpoolctl-3.5.0-py3-none-any.whl", hash = "sha256:56c1e26c150397e58c4926da8eeee87533b1e32bef131bd4bf6a2f45f3185467"}, {file = "threadpoolctl-3.5.0.tar.gz", hash = "sha256:082433502dd922bf738de0d8bcc4fdcbf0979ff44c42bd40f5af8a282f6fa107"}, @@ -2749,6 +3015,8 @@ version = "6.4.1" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "tornado-6.4.1-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:163b0aafc8e23d8cdc3c9dfb24c5368af84a81e3364745ccb4427669bf84aec8"}, {file = "tornado-6.4.1-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:6d5ce3437e18a2b66fbadb183c1d3364fb03f2be71299e7d10dbeeb69f4b2a14"}, @@ -2769,6 +3037,8 @@ version = "4.67.0" description = "Fast, Extensible Progress Meter" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "tqdm-4.67.0-py3-none-any.whl", hash = "sha256:0cd8af9d56911acab92182e88d763100d4788bdf421d251616040cc4d44863be"}, {file = "tqdm-4.67.0.tar.gz", hash = "sha256:fe5a6f95e6fe0b9755e9469b77b9c3cf850048224ecaa8293d7d2d31f97d869a"}, @@ -2790,6 +3060,8 @@ version = "5.14.3" description = "Traitlets Python configuration system" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f"}, {file = "traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7"}, @@ -2805,6 +3077,8 @@ version = "4.12.2" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, @@ -2816,6 +3090,8 @@ version = "2024.1" description = "Provider of IANA time zone data" optional = false python-versions = ">=2" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "tzdata-2024.1-py2.py3-none-any.whl", hash = "sha256:9068bc196136463f5245e51efda838afa15aaeca9903f49050dfa2679db4d252"}, {file = "tzdata-2024.1.tar.gz", hash = "sha256:2674120f8d891909751c38abcdfd386ac0a5a1127954fbc332af6b5ceae07efd"}, @@ -2827,6 +3103,8 @@ version = "2.2.2" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "urllib3-2.2.2-py3-none-any.whl", hash = "sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472"}, {file = "urllib3-2.2.2.tar.gz", hash = "sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168"}, @@ -2844,6 +3122,8 @@ version = "0.2.13" description = "Measures the displayed width of unicode strings in a terminal" optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859"}, {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, @@ -2855,6 +3135,8 @@ version = "3.0.4" description = "The comprehensive WSGI web application library." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "werkzeug-3.0.4-py3-none-any.whl", hash = "sha256:02c9eb92b7d6c06f31a782811505d2157837cea66aaede3e217c7c27c039476c"}, {file = "werkzeug-3.0.4.tar.gz", hash = "sha256:34f2371506b250df4d4f84bfe7b0921e4762525762bbd936614909fe25cd7306"}, @@ -2872,6 +3154,8 @@ version = "0.44.0" description = "A built-package format for Python" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "wheel-0.44.0-py3-none-any.whl", hash = "sha256:2376a90c98cc337d18623527a97c31797bd02bad0033d41547043a1cbfbe448f"}, {file = "wheel-0.44.0.tar.gz", hash = "sha256:a29c3f2817e95ab89aa4660681ad547c0e9547f20e75b0562fe7723c9a2a9d49"}, @@ -2886,6 +3170,8 @@ version = "1.14.1" description = "Module for decorators, wrappers and monkey patching." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +groups = ["main"] +markers = "python_version <= \"3.11\"" files = [ {file = "wrapt-1.14.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:1b376b3f4896e7930f1f772ac4b064ac12598d1c38d04907e696cc4d794b43d3"}, {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:903500616422a40a98a5a3c4ff4ed9d0066f3b4c951fa286018ecdf0750194ef"}, @@ -2964,6 +3250,6 @@ files = [ ] [metadata] -lock-version = "2.0" +lock-version = "2.1" python-versions = ">=3.10.12,<3.12" -content-hash = "a1894e3925ed1d5be306cfad99666749b401b0d0252058670535aed093822cd6" +content-hash = "b423a73c9df62e91d6914b1b0e3da1aeaa2152e15b6655a854aef1ad7e3dc581" diff --git a/pyproject.toml b/pyproject.toml index 4c67d35e..b4fab52b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -28,6 +28,8 @@ typing-extensions = "^4.12.2" ipython = "^8.27.0" mctspy = "^0.1.1" tqdm = "^4.67.0" +wrapt = "1.14.1" +pyyaml = "^6.0.2" [build-system] diff --git a/smart_control/configs/resources/sb1/test_sim_configs/sim_config_2023_07_06_0700.gin b/smart_control/configs/resources/sb1/test_sim_configs/sim_config_2023_07_06_0700.gin new file mode 100644 index 00000000..d10166e8 --- /dev/null +++ b/smart_control/configs/resources/sb1/test_sim_configs/sim_config_2023_07_06_0700.gin @@ -0,0 +1,614 @@ +# Copyright 2024 Google LLC + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at + +# https://www.apache.org/licenses/LICENSE-2.0 + +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + # paths + controller_reader.ProtoReader.input_dir = @get_histogram_path() + floor_plan_filepath = @get_zone_path() + zone_map_filepath = @get_zone_path() + metrics_path = @get_metrics_path() + + # Weather conditions simulation + # W/m2/K + convection_coefficient = 100.0 + # Models the variable temperature as a sinusoid bounded by + # high and low temps, where minima occur at midnights and + # maxima occur at noon. + # K + ambient_high_temp = 283.0 + ambient_low_temp = 273.0 + + ReplayWeatherController.local_weather_path= @get_weather_path() + ReplayWeatherController.convection_coefficient = %convection_coefficient + + weather_controller = @ReplayWeatherController() + + # shuffle parameters + StochasticConvectionSimulator.p = 1.0 + StochasticConvectionSimulator.distance = 5 + StochasticConvectionSimulator.seed = 5 + + # Dimensional parameters of the Building + control_volume_cm = 10 + floor_height_cm = 300.0 + + # Thermal properties of the Building + # Thermal properties of the exterior building. + # W/m/K + exterior_cv_conductivity = 0.05 + # kg/m3 + exterior_cv_density = 1.0 + # J/Kg/K + exterior_cv_heat_capacity = 700.0 + + # Thermal properties of the interior walls. + interior_wall_cv_conductivity = 50.0 + # kg/m3 + interior_wall_cv_density = 1.0 + # J/Kg/K + interior_wall_cv_heat_capacity = 700.0 + + # Thermal properties of the "air" in the thermal zones. + # W/m/K + interior_cv_conductivity = 50.0 + # kg/m3 + interior_cv_density = 1.0 + # J/Kg/K + interior_cv_heat_capacity = 700.0 + + # Defines the initial uniform interior temp. + # K + initial_temp = 294.0 + + inside_air_properties/MaterialProperties: + conductivity = %interior_cv_conductivity + heat_capacity = %interior_cv_heat_capacity + density = %interior_cv_density + + inside_wall_properties/MaterialProperties: + conductivity = %interior_wall_cv_conductivity + heat_capacity = %interior_wall_cv_density + density = %interior_wall_cv_heat_capacity + + building_exterior_properties/MaterialProperties: + conductivity = %exterior_cv_conductivity + heat_capacity = %exterior_cv_heat_capacity + density = %exterior_cv_density + + sim/FloorPlanBasedBuilding: + cv_size_cm = %control_volume_cm + floor_height_cm = %floor_height_cm + initial_temp = %initial_temp + inside_air_properties = @inside_air_properties/MaterialProperties() + inside_wall_properties = @inside_wall_properties/MaterialProperties() + building_exterior_properties = @building_exterior_properties/MaterialProperties() + floor_plan_filepath = %floor_plan_filepath + zone_map_filepath = %zone_map_filepath + convection_simulator = @StochasticConvectionSimulator() + reset_temp_values = @get_reset_temp_values() + + # HVAC heating/cooling schedule + morning_start_hour = 6 + evening_start_hour = 19 + heating_setpoint_day = 294 + cooling_setpoint_day = 297 + heating_setpoint_night = 289 + cooling_setpoint_night = 298 + time_zone="US/Pacific" + + + hvac/SetpointSchedule: + morning_start_hour = %morning_start_hour + evening_start_hour = %evening_start_hour + comfort_temp_window = (%heating_setpoint_day, %cooling_setpoint_day) + eco_temp_window = (%heating_setpoint_night, %cooling_setpoint_night) + time_zone = %time_zone + + # HVAC Device Models and Configs + water_pump_differential_head = 6.0 + water_pump_efficiency = 0.98 + reheat_water_setpoint = 360.0 + boiler_heating_rate = 0.5 # K / min + boiler_cooling_rate = 0.1 # K / min + + # Pa or N/M2 + fan_differential_pressure = 10000.0 + fan_efficiency = 0.9 + + air_handler_heating_setpoint = 285.0 + air_handler_cooling_setpoint = 298.0 + # Percentage of fresh air in the recirculation. + air_handler_recirculation_ratio = 0.3 + + vav_max_air_flowrate = 0.035 + vav_reheat_water_flowrate = 0.03 + + hvac/AirHandler: + recirculation = %air_handler_recirculation_ratio + heating_air_temp_setpoint = %air_handler_heating_setpoint + cooling_air_temp_setpoint = %air_handler_cooling_setpoint + fan_differential_pressure = %fan_differential_pressure + fan_efficiency = %fan_efficiency + max_air_flow_rate = 8.67 + sim_weather_controller = %weather_controller + + hvac/Boiler: + reheat_water_setpoint = %reheat_water_setpoint + water_pump_differential_head = %water_pump_differential_head + water_pump_efficiency = %water_pump_efficiency + heating_rate = %boiler_heating_rate + cooling_rate = %boiler_cooling_rate + + sim/FloorPlanBasedHvac: + air_handler = @hvac/AirHandler() + boiler = @hvac/Boiler() + schedule = @hvac/SetpointSchedule() + vav_max_air_flow_rate = %vav_max_air_flowrate + vav_reheat_max_water_flow_rate = %vav_reheat_water_flowrate + + # Finite difference settings. + time_step_sec = 300 + convergence_threshold = 0.1 + iteration_limit = 100 + iteration_warning = 30 + start_timestamp = '2023-07-06 07:00:00+00:00' + + sim/to_timestamp.date_str = %start_timestamp + + sim_building/TFSimulator: + building = @sim/FloorPlanBasedBuilding() + hvac = @sim/FloorPlanBasedHvac() + weather_controller = %weather_controller + time_step_sec = %time_step_sec + convergence_threshold = %convergence_threshold + iteration_limit = %iteration_limit + iteration_warning = %iteration_warning + start_timestamp = @sim/to_timestamp() + + + work_occupancy = 1 + nonwork_occupancy = 0.1 + occupancy_start/local_time.time_str = %occupancy_start_time + occupancy_end/local_time.time_str = %occupancy_end_time + + + randomized_occupancy/RandomizedArrivalDepartureOccupancy: + zone_assignment = %work_occupancy + earliest_expected_arrival_hour = 7 + latest_expected_arrival_hour = 12 + earliest_expected_departure_hour = 13 + latest_expected_departure_hour = 18 + time_step_sec = %time_step_sec + time_zone = %time_zone + + + SimulatorBuilding.simulator = @sim_building/TFSimulator() + SimulatorBuilding.occupancy = @randomized_occupancy/RandomizedArrivalDepartureOccupancy() + + + # Reward Parameters taken from 3C reward function documented + # Average productivity per person in USD + max_productivity_personhour_usd = 300.00 + min_productivity_personhour_usd = 100.00 + productivity_midpoint_delta = 0.5 + productivity_decay_stiffness = 4.3 + + max_electricity_rate=160000 + max_natural_gas_rate=400000 + + # lowered productivity weight to force a lower water temp + # during occupied intervals + productivity_weight=0.2 + energy_cost_weight=0.4 + carbon_emission_weight=0.4 + + SetpointEnergyCarbonRegretFunction.max_productivity_personhour_usd = %max_productivity_personhour_usd + SetpointEnergyCarbonRegretFunction.min_productivity_personhour_usd = %min_productivity_personhour_usd + SetpointEnergyCarbonRegretFunction.max_electricity_rate = %max_electricity_rate + SetpointEnergyCarbonRegretFunction.max_natural_gas_rate = %max_natural_gas_rate + SetpointEnergyCarbonRegretFunction.productivity_decay_stiffness = %productivity_decay_stiffness + SetpointEnergyCarbonRegretFunction.productivity_midpoint_delta = %productivity_midpoint_delta + SetpointEnergyCarbonRegretFunction.electricity_energy_cost = @ElectricityEnergyCost() + SetpointEnergyCarbonRegretFunction.natural_gas_energy_cost = @NaturalGasEnergyCost() + SetpointEnergyCarbonRegretFunction.productivity_weight = %productivity_weight + SetpointEnergyCarbonRegretFunction.energy_cost_weight= %energy_cost_weight + SetpointEnergyCarbonRegretFunction.carbon_emission_weight = %carbon_emission_weight + + + # Action Normalization Parameters -> edited to match real building + supply_water_bounded_action_normalizer/set_action_normalization_constants.min_normalized_value = -1. + supply_water_bounded_action_normalizer/set_action_normalization_constants.max_normalized_value = 1.0 + supply_water_bounded_action_normalizer/set_action_normalization_constants.min_native_value = 310 + supply_water_bounded_action_normalizer/set_action_normalization_constants.max_native_value = 355.0 + + supply_air_heating_temperature_setpoint/set_action_normalization_constants.min_normalized_value = -1. + supply_air_heating_temperature_setpoint/set_action_normalization_constants.max_normalized_value = 1. + supply_air_heating_temperature_setpoint/set_action_normalization_constants.min_native_value = 285 + supply_air_heating_temperature_setpoint/set_action_normalization_constants.max_native_value = 300.0 + + action_normalizer_map = { + 'supply_water_setpoint': @supply_water_bounded_action_normalizer/set_action_normalization_constants(), + 'supply_air_heating_temperature_setpoint': @supply_air_heating_temperature_setpoint/set_action_normalization_constants() + } + ActionConfig: + action_normalizers = %action_normalizer_map + + default_actions = { + 'supply_water_setpoint': 340.0, + 'supply_air_cooling_temperature_setpoint': 300.0, + 'supply_air_heating_temperature_setpoint': 285.0 + } + + # Observation Normalization Parameters + temperature_observation_normalizer/set_observation_normalization_constants.field_id = 'temperature' + temperature_observation_normalizer/set_observation_normalization_constants.sample_mean = 310.0 + temperature_observation_normalizer/set_observation_normalization_constants.sample_variance = 2500.0 + + supply_water_setpoint_observation_normalizer/set_observation_normalization_constants.field_id = 'supply_water_setpoint' + supply_water_setpoint_observation_normalizer/set_observation_normalization_constants.sample_mean = 310.0 + supply_water_setpoint_observation_normalizer/set_observation_normalization_constants.sample_variance = 2500.0 + + air_flowrate_observation_normalizer/set_observation_normalization_constants.field_id = 'air_flowrate' + air_flowrate_observation_normalizer/set_observation_normalization_constants.sample_mean = 0.5 + air_flowrate_observation_normalizer/set_observation_normalization_constants.sample_variance = 4.0 + + differential_pressure_observation_normalizer/set_observation_normalization_constants.field_id = 'differential_pressure' + differential_pressure_observation_normalizer/set_observation_normalization_constants.sample_mean = 10000.0 + differential_pressure_observation_normalizer/set_observation_normalization_constants.sample_variance = 100000.0 + + percentage_observation_normalizer/set_observation_normalization_constants.field_id = 'percentage' + percentage_observation_normalizer/set_observation_normalization_constants.sample_mean = 0.50 + percentage_observation_normalizer/set_observation_normalization_constants.sample_variance = 1.0 + + request_count_observation_normalizer/set_observation_normalization_constants.field_id = 'request_count' + request_count_observation_normalizer/set_observation_normalization_constants.sample_mean = 100.0 + request_count_observation_normalizer/set_observation_normalization_constants.sample_variance = 25.0 + + # measurement 0 building_air_static_pressure_sensor + building_air_static_pressure_sensor_normalizer/set_observation_normalization_constants.field_id = 'building_air_static_pressure_sensor' + building_air_static_pressure_sensor_normalizer/set_observation_normalization_constants.sample_mean = 3.779228 + building_air_static_pressure_sensor_normalizer/set_observation_normalization_constants.sample_variance = 14.599437 + + # measurement 1 building_air_static_pressure_setpoint + building_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.field_id = 'building_air_static_pressure_setpoint' + building_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 7.472401 + building_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 0.000000 + + # measurement 2 cooling_percentage_command + cooling_percentage_command_normalizer/set_observation_normalization_constants.field_id = 'cooling_percentage_command' + cooling_percentage_command_normalizer/set_observation_normalization_constants.sample_mean = 9.658281 + cooling_percentage_command_normalizer/set_observation_normalization_constants.sample_variance = 295.833612 + + # measurement 3 differential_pressure_sensor + differential_pressure_sensor_normalizer/set_observation_normalization_constants.field_id = 'differential_pressure_sensor' + differential_pressure_sensor_normalizer/set_observation_normalization_constants.sample_mean = 31611.814379 + differential_pressure_sensor_normalizer/set_observation_normalization_constants.sample_variance = 1844378631.487996 + + # measurement 4 differential_pressure_setpoint + differential_pressure_setpoint_normalizer/set_observation_normalization_constants.field_id = 'differential_pressure_setpoint' + differential_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 83810.269540 + differential_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 14889040.603647 + + # measurement 5 discharge_air_temperature_sensor + discharge_air_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'discharge_air_temperature_sensor' + discharge_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 69.889025 + discharge_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 541.455462 + + # measurement 6 discharge_air_temperature_setpoint + discharge_air_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'discharge_air_temperature_setpoint' + discharge_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 57.665244 + discharge_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 97.254479 + + # measurement 7 exhaust_air_damper_percentage_command + exhaust_air_damper_percentage_command_normalizer/set_observation_normalization_constants.field_id = 'exhaust_air_damper_percentage_command' + exhaust_air_damper_percentage_command_normalizer/set_observation_normalization_constants.sample_mean = 25.000000 + exhaust_air_damper_percentage_command_normalizer/set_observation_normalization_constants.sample_variance = 0.000000 + + # measurement 8 exhaust_air_damper_percentage_sensor + exhaust_air_damper_percentage_sensor_normalizer/set_observation_normalization_constants.field_id = 'exhaust_air_damper_percentage_sensor' + exhaust_air_damper_percentage_sensor_normalizer/set_observation_normalization_constants.sample_mean = 10.680755 + exhaust_air_damper_percentage_sensor_normalizer/set_observation_normalization_constants.sample_variance = 539.207818 + + # measurement 9 exhaust_fan_speed_frequency_sensor + exhaust_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants.field_id = 'exhaust_fan_speed_frequency_sensor' + exhaust_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants.sample_mean = 4.273057 + exhaust_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants.sample_variance = 138.559759 + + # measurement 10 exhaust_fan_speed_percentage_command + exhaust_fan_speed_percentage_command_normalizer/set_observation_normalization_constants.field_id = 'exhaust_fan_speed_percentage_command' + exhaust_fan_speed_percentage_command_normalizer/set_observation_normalization_constants.sample_mean = 7.121761 + exhaust_fan_speed_percentage_command_normalizer/set_observation_normalization_constants.sample_variance = 384.888218 + + # measurement 11 heating_water_valve_percentage_command + heating_water_valve_percentage_command_normalizer/set_observation_normalization_constants.field_id = 'heating_water_valve_percentage_command' + heating_water_valve_percentage_command_normalizer/set_observation_normalization_constants.sample_mean = 3.105189 + heating_water_valve_percentage_command_normalizer/set_observation_normalization_constants.sample_variance = 202.006249 + + # measurement 12 mixed_air_temperature_sensor + mixed_air_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'mixed_air_temperature_sensor' + mixed_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 293.718710 + mixed_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 12.517696 + + # measurement 13 mixed_air_temperature_setpoint + mixed_air_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'mixed_air_temperature_setpoint' + mixed_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 288.218302 + mixed_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 3.186768 + + # measurement 14 outside_air_damper_percentage_command + outside_air_damper_percentage_command_normalizer/set_observation_normalization_constants.field_id = 'outside_air_damper_percentage_command' + outside_air_damper_percentage_command_normalizer/set_observation_normalization_constants.sample_mean = 34.504101 + outside_air_damper_percentage_command_normalizer/set_observation_normalization_constants.sample_variance = 2053.149002 + + # measurement 15 outside_air_dewpoint_temperature_sensor + outside_air_dewpoint_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'outside_air_dewpoint_temperature_sensor' + outside_air_dewpoint_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 285.774428 + outside_air_dewpoint_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 2.504610 + + # measurement 16 outside_air_flowrate_sensor + outside_air_flowrate_sensor_normalizer/set_observation_normalization_constants.field_id = 'outside_air_flowrate_sensor' + outside_air_flowrate_sensor_normalizer/set_observation_normalization_constants.sample_mean = 3.701930 + outside_air_flowrate_sensor_normalizer/set_observation_normalization_constants.sample_variance = 20.300565 + + # measurement 17 outside_air_flowrate_setpoint + outside_air_flowrate_setpoint_normalizer/set_observation_normalization_constants.field_id = 'outside_air_flowrate_setpoint' + outside_air_flowrate_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 8.730134 + outside_air_flowrate_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 0.240364 + + # measurement 18 outside_air_relative_humidity_sensor + outside_air_relative_humidity_sensor_normalizer/set_observation_normalization_constants.field_id = 'outside_air_relative_humidity_sensor' + outside_air_relative_humidity_sensor_normalizer/set_observation_normalization_constants.sample_mean = 71.799372 + outside_air_relative_humidity_sensor_normalizer/set_observation_normalization_constants.sample_variance = 172.388773 + + # measurement 19 outside_air_specificenthalpy_sensor + outside_air_specificenthalpy_sensor_normalizer/set_observation_normalization_constants.field_id = 'outside_air_specificenthalpy_sensor' + outside_air_specificenthalpy_sensor_normalizer/set_observation_normalization_constants.sample_mean = 60711.656343 + outside_air_specificenthalpy_sensor_normalizer/set_observation_normalization_constants.sample_variance = 25491060.173822 + + # measurement 20 outside_air_temperature_sensor + outside_air_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'outside_air_temperature_sensor' + outside_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 291.244931 + outside_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 12.904175 + + # measurement 21 outside_air_wetbulb_temperature_sensor + outside_air_wetbulb_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'outside_air_wetbulb_temperature_sensor' + outside_air_wetbulb_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 287.709943 + outside_air_wetbulb_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 3.594260 + + # measurement 22 program_differential_pressure_setpoint + program_differential_pressure_setpoint_normalizer/set_observation_normalization_constants.field_id = 'program_differential_pressure_setpoint' + program_differential_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 83808.578375 + program_differential_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 14897544.664858 + + # measurement 23 program_supply_air_static_pressure_setpoint + program_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.field_id = 'program_supply_air_static_pressure_setpoint' + program_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 163.396282 + program_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 1092.073231 + + # measurement 24 program_supply_air_temperature_setpoint + program_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'program_supply_air_temperature_setpoint' + program_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 289.490004 + program_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 2.854515 + + # measurement 25 program_supply_water_temperature_setpoint + program_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'program_supply_water_temperature_setpoint' + program_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 341.467705 + program_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 74.961483 + + # measurement 26 return_air_temperature_sensor + return_air_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'return_air_temperature_sensor' + return_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 295.602164 + return_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 11.309930 + + # measurement 27 return_water_temperature_sensor + return_water_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'return_water_temperature_sensor' + return_water_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 326.219913 + return_water_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 497.847788 + + # measurement 28 run_status + run_status_normalizer/set_observation_normalization_constants.field_id = 'run_status' + run_status_normalizer/set_observation_normalization_constants.sample_mean = -0.638340 + run_status_normalizer/set_observation_normalization_constants.sample_variance = 0.592523 + + # measurement 29 speed_frequency_sensor + speed_frequency_sensor_normalizer/set_observation_normalization_constants.field_id = 'speed_frequency_sensor' + speed_frequency_sensor_normalizer/set_observation_normalization_constants.sample_mean = 7.003487 + speed_frequency_sensor_normalizer/set_observation_normalization_constants.sample_variance = 227.751249 + + # measurement 30 speed_percentage_command + speed_percentage_command_normalizer/set_observation_normalization_constants.field_id = 'speed_percentage_command' + speed_percentage_command_normalizer/set_observation_normalization_constants.sample_mean = 11.330966 + speed_percentage_command_normalizer/set_observation_normalization_constants.sample_variance = 602.718159 + + # measurement 31 supervisor_supply_air_static_pressure_setpoint + supervisor_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.field_id = 'supervisor_supply_air_static_pressure_setpoint' + supervisor_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 179.409052 + supervisor_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 352.049768 + + # measurement 32 supervisor_supply_air_temperature_setpoint + supervisor_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'supervisor_supply_air_temperature_setpoint' + supervisor_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 290.2 + supervisor_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 9.66245 + + # measurement 33 supervisor_supply_water_temperature_setpoint + supervisor_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'supervisor_supply_water_temperature_setpoint' + supervisor_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 332.164444 + supervisor_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 1.534112 + + + # measurement 35 supply_air_flowrate_sensor + supply_air_flowrate_sensor_normalizer/set_observation_normalization_constants.field_id = 'supply_air_flowrate_sensor' + supply_air_flowrate_sensor_normalizer/set_observation_normalization_constants.sample_mean = 177.520026 + supply_air_flowrate_sensor_normalizer/set_observation_normalization_constants.sample_variance = 50499.153481 + + # measurement 37 supply_air_static_pressure_sensor + supply_air_static_pressure_sensor_normalizer/set_observation_normalization_constants.field_id = 'supply_air_static_pressure_sensor' + supply_air_static_pressure_sensor_normalizer/set_observation_normalization_constants.sample_mean = 128.527912 + supply_air_static_pressure_sensor_normalizer/set_observation_normalization_constants.sample_variance = 6679.599175 + + # measurement 38 supply_air_static_pressure_setpoint + supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.field_id = 'supply_air_static_pressure_setpoint' + supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 181.307432 + supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 361.757966 + + # measurement 39 supply_air_temperature_sensor + supply_air_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'supply_air_temperature_sensor' + supply_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 289.737939 + supply_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 6.265837 + + # measurement 40 supply_air_temperature_setpoint + supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'supply_air_temperature_setpoint' + supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 289.329414 + supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 3.186769 + + # measurement 41 supply_fan_run_status + supply_fan_run_status_normalizer/set_observation_normalization_constants.field_id = 'supply_fan_run_status' + supply_fan_run_status_normalizer/set_observation_normalization_constants.sample_mean = 0.439849 + supply_fan_run_status_normalizer/set_observation_normalization_constants.sample_variance = 0.806533 + + # measurement 42 supply_fan_speed_frequency_sensor + supply_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants.field_id = 'supply_fan_speed_frequency_sensor' + supply_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants.sample_mean = 15.926249 + supply_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants.sample_variance = 207.034194 + + # measurement 43 supply_fan_speed_percentage_command + supply_fan_speed_percentage_command_normalizer/set_observation_normalization_constants.field_id = 'supply_fan_speed_percentage_command' + supply_fan_speed_percentage_command_normalizer/set_observation_normalization_constants.sample_mean = 26.543748 + supply_fan_speed_percentage_command_normalizer/set_observation_normalization_constants.sample_variance = 575.094979 + + # measurement 44 supply_water_temperature_sensor + supply_water_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'supply_water_temperature_sensor' + supply_water_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 321.520315 + supply_water_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 658.413066 + + # measurement 45 supply_water_temperature_setpoint + supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'supply_water_temperature_setpoint' + supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 320.261985 + supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 240.195517 + + # measurement 46 zone_air_co2_concentration_sensor + zone_air_co2_concentration_sensor_normalizer/set_observation_normalization_constants.field_id = 'zone_air_co2_concentration_sensor' + zone_air_co2_concentration_sensor_normalizer/set_observation_normalization_constants.sample_mean = 432.092062 + zone_air_co2_concentration_sensor_normalizer/set_observation_normalization_constants.sample_variance = 962.903840 + + # measurement 47 zone_air_co2_concentration_setpoint + zone_air_co2_concentration_setpoint_normalizer/set_observation_normalization_constants.field_id = 'zone_air_co2_concentration_setpoint' + zone_air_co2_concentration_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 739.337708 + zone_air_co2_concentration_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 3618.117781 + + # measurement 48 zone_air_cooling_temperature_setpoint + zone_air_cooling_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'zone_air_cooling_temperature_setpoint' + zone_air_cooling_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 82.084227 + zone_air_cooling_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 402.158853 + + # measurement 49 zone_air_heating_temperature_setpoint + zone_air_heating_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'zone_air_heating_temperature_setpoint' + zone_air_heating_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 64.231868 + zone_air_heating_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 24.461668 + + # measurement 50 zone_air_temperature_sensor + zone_air_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'zone_air_temperature_sensor' + zone_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 190 + zone_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 408.113303 + + supervisor_run_command_normalizer/set_observation_normalization_constants.field_id = 'supervisor_run_command' + supervisor_run_command_normalizer/set_observation_normalization_constants.sample_mean = 0 + supervisor_run_command_normalizer/set_observation_normalization_constants.sample_variance = 1.0 + + observation_normalizer_map = { + 'building_air_static_pressure_sensor' : @building_air_static_pressure_sensor_normalizer/set_observation_normalization_constants(), + 'building_air_static_pressure_setpoint' : @building_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants(), + 'cooling_percentage_command' : @cooling_percentage_command_normalizer/set_observation_normalization_constants(), + 'differential_pressure_sensor' : @differential_pressure_sensor_normalizer/set_observation_normalization_constants(), + 'differential_pressure_setpoint' : @differential_pressure_setpoint_normalizer/set_observation_normalization_constants(), + 'discharge_air_temperature_sensor' : @discharge_air_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'discharge_air_temperature_setpoint' : @discharge_air_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'exhaust_air_damper_percentage_command' : @exhaust_air_damper_percentage_command_normalizer/set_observation_normalization_constants(), + 'exhaust_air_damper_percentage_sensor' : @exhaust_air_damper_percentage_sensor_normalizer/set_observation_normalization_constants(), + 'exhaust_fan_speed_frequency_sensor' : @exhaust_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants(), + 'exhaust_fan_speed_percentage_command' : @exhaust_fan_speed_percentage_command_normalizer/set_observation_normalization_constants(), + 'heating_water_valve_percentage_command' : @heating_water_valve_percentage_command_normalizer/set_observation_normalization_constants(), + 'mixed_air_temperature_sensor' : @mixed_air_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'mixed_air_temperature_setpoint' : @mixed_air_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'outside_air_damper_percentage_command' : @outside_air_damper_percentage_command_normalizer/set_observation_normalization_constants(), + 'outside_air_dewpoint_temperature_sensor' : @outside_air_dewpoint_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'outside_air_flowrate_sensor' : @outside_air_flowrate_sensor_normalizer/set_observation_normalization_constants(), + 'outside_air_flowrate_setpoint' : @outside_air_flowrate_setpoint_normalizer/set_observation_normalization_constants(), + 'outside_air_relative_humidity_sensor' : @outside_air_relative_humidity_sensor_normalizer/set_observation_normalization_constants(), + 'outside_air_specificenthalpy_sensor' : @outside_air_specificenthalpy_sensor_normalizer/set_observation_normalization_constants(), + 'outside_air_temperature_sensor' : @outside_air_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'outside_air_wetbulb_temperature_sensor' : @outside_air_wetbulb_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'program_differential_pressure_setpoint' : @program_differential_pressure_setpoint_normalizer/set_observation_normalization_constants(), + 'program_supply_air_static_pressure_setpoint' : @program_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants(), + 'program_supply_air_temperature_setpoint' : @program_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'program_supply_water_temperature_setpoint' : @program_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'return_air_temperature_sensor' : @return_air_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'return_water_temperature_sensor' : @return_water_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'run_status' : @run_status_normalizer/set_observation_normalization_constants(), + 'speed_frequency_sensor' : @speed_frequency_sensor_normalizer/set_observation_normalization_constants(), + 'speed_percentage_command' : @speed_percentage_command_normalizer/set_observation_normalization_constants(), + 'supervisor_supply_air_static_pressure_setpoint' : @supervisor_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants(), + 'supervisor_supply_air_temperature_setpoint' : @supervisor_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'supervisor_supply_water_temperature_setpoint' : @supervisor_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'supply_air_static_pressure_sensor' : @supply_air_static_pressure_sensor_normalizer/set_observation_normalization_constants(), + 'supply_air_static_pressure_setpoint' : @supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants(), + 'supply_air_temperature_sensor' : @supply_air_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'supply_air_temperature_setpoint' : @supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'supply_air_cooling_temperature_setpoint' : @supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'supply_air_heating_temperature_setpoint' : @supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants(), + + 'supply_fan_run_status' : @supply_fan_run_status_normalizer/set_observation_normalization_constants(), + 'supply_fan_speed_frequency_sensor' : @supply_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants(), + 'supply_fan_speed_percentage_command' : @supply_fan_speed_percentage_command_normalizer/set_observation_normalization_constants(), + 'supply_water_temperature_sensor' : @supply_water_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'supply_water_setpoint' : @supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'zone_air_co2_concentration_sensor' : @zone_air_co2_concentration_sensor_normalizer/set_observation_normalization_constants(), + 'zone_air_co2_concentration_setpoint' : @zone_air_co2_concentration_setpoint_normalizer/set_observation_normalization_constants(), + 'zone_air_cooling_temperature_setpoint' : @zone_air_cooling_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'zone_air_heating_temperature_setpoint' : @zone_air_heating_temperature_setpoint_normalizer/set_observation_normalization_constants(), + + 'cooling_request_count': @request_count_observation_normalizer/set_observation_normalization_constants(), + } + + StandardScoreObservationNormalizer: + normalization_constants = %observation_normalizer_map + + + histogram_parameters_tuples = ( + ('zone_air_temperature_sensor',(285., 286., 287., 288, 289., 290., 291., 292., 293., 294., 295., 296., 297., 298., 299., 300.,301,302,303)), + ('supply_air_damper_percentage_command',(0.0, 0.2, 0.4, 0.6, 0.8, 1.0)), + ('supply_air_flowrate_setpoint',( 0., 0.05, .1, .2, .3, .4, .5, .7, .9)), + ) + + # Top-level Environment parameters + discount_factor = 0.9 + num_days_in_episode=14 + metrics_reporting_interval=10 + label='tunable_simulator_sb1' + num_hod_features = 1 + num_dow_features = 1 + + Environment.building = @SimulatorBuilding() + Environment.reward_function = @SetpointEnergyCarbonRegretFunction() + Environment.observation_normalizer = @StandardScoreObservationNormalizer() + Environment.action_config = @ActionConfig() + Environment.metrics_reporting_interval = %metrics_reporting_interval + + Environment.discount_factor = %discount_factor + Environment.metrics_path = %metrics_path + Environment.label = %label + Environment.num_days_in_episode= %num_days_in_episode + Environment.default_actions = %default_actions + Environment.num_hod_features = %num_hod_features + Environment.num_dow_features = %num_dow_features + Environment.writer_factory =@controller_writer.ProtoWriterFactory() + Environment.observation_histogram_reducer = @get_histogram_reducer() diff --git a/smart_control/configs/resources/sb1/test_sim_configs/sim_config_2023_08_03_0700.gin b/smart_control/configs/resources/sb1/test_sim_configs/sim_config_2023_08_03_0700.gin new file mode 100644 index 00000000..b6bab769 --- /dev/null +++ b/smart_control/configs/resources/sb1/test_sim_configs/sim_config_2023_08_03_0700.gin @@ -0,0 +1,614 @@ +# Copyright 2024 Google LLC + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at + +# https://www.apache.org/licenses/LICENSE-2.0 + +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + # paths + controller_reader.ProtoReader.input_dir = @get_histogram_path() + floor_plan_filepath = @get_zone_path() + zone_map_filepath = @get_zone_path() + metrics_path = @get_metrics_path() + + # Weather conditions simulation + # W/m2/K + convection_coefficient = 100.0 + # Models the variable temperature as a sinusoid bounded by + # high and low temps, where minima occur at midnights and + # maxima occur at noon. + # K + ambient_high_temp = 283.0 + ambient_low_temp = 273.0 + + ReplayWeatherController.local_weather_path= @get_weather_path() + ReplayWeatherController.convection_coefficient = %convection_coefficient + + weather_controller = @ReplayWeatherController() + + # shuffle parameters + StochasticConvectionSimulator.p = 1.0 + StochasticConvectionSimulator.distance = 5 + StochasticConvectionSimulator.seed = 5 + + # Dimensional parameters of the Building + control_volume_cm = 10 + floor_height_cm = 300.0 + + # Thermal properties of the Building + # Thermal properties of the exterior building. + # W/m/K + exterior_cv_conductivity = 0.05 + # kg/m3 + exterior_cv_density = 1.0 + # J/Kg/K + exterior_cv_heat_capacity = 700.0 + + # Thermal properties of the interior walls. + interior_wall_cv_conductivity = 50.0 + # kg/m3 + interior_wall_cv_density = 1.0 + # J/Kg/K + interior_wall_cv_heat_capacity = 700.0 + + # Thermal properties of the "air" in the thermal zones. + # W/m/K + interior_cv_conductivity = 50.0 + # kg/m3 + interior_cv_density = 1.0 + # J/Kg/K + interior_cv_heat_capacity = 700.0 + + # Defines the initial uniform interior temp. + # K + initial_temp = 294.0 + + inside_air_properties/MaterialProperties: + conductivity = %interior_cv_conductivity + heat_capacity = %interior_cv_heat_capacity + density = %interior_cv_density + + inside_wall_properties/MaterialProperties: + conductivity = %interior_wall_cv_conductivity + heat_capacity = %interior_wall_cv_density + density = %interior_wall_cv_heat_capacity + + building_exterior_properties/MaterialProperties: + conductivity = %exterior_cv_conductivity + heat_capacity = %exterior_cv_heat_capacity + density = %exterior_cv_density + + sim/FloorPlanBasedBuilding: + cv_size_cm = %control_volume_cm + floor_height_cm = %floor_height_cm + initial_temp = %initial_temp + inside_air_properties = @inside_air_properties/MaterialProperties() + inside_wall_properties = @inside_wall_properties/MaterialProperties() + building_exterior_properties = @building_exterior_properties/MaterialProperties() + floor_plan_filepath = %floor_plan_filepath + zone_map_filepath = %zone_map_filepath + convection_simulator = @StochasticConvectionSimulator() + reset_temp_values = @get_reset_temp_values() + + # HVAC heating/cooling schedule + morning_start_hour = 6 + evening_start_hour = 19 + heating_setpoint_day = 294 + cooling_setpoint_day = 297 + heating_setpoint_night = 289 + cooling_setpoint_night = 298 + time_zone="US/Pacific" + + + hvac/SetpointSchedule: + morning_start_hour = %morning_start_hour + evening_start_hour = %evening_start_hour + comfort_temp_window = (%heating_setpoint_day, %cooling_setpoint_day) + eco_temp_window = (%heating_setpoint_night, %cooling_setpoint_night) + time_zone = %time_zone + + # HVAC Device Models and Configs + water_pump_differential_head = 6.0 + water_pump_efficiency = 0.98 + reheat_water_setpoint = 360.0 + boiler_heating_rate = 0.5 # K / min + boiler_cooling_rate = 0.1 # K / min + + # Pa or N/M2 + fan_differential_pressure = 10000.0 + fan_efficiency = 0.9 + + air_handler_heating_setpoint = 285.0 + air_handler_cooling_setpoint = 298.0 + # Percentage of fresh air in the recirculation. + air_handler_recirculation_ratio = 0.3 + + vav_max_air_flowrate = 0.035 + vav_reheat_water_flowrate = 0.03 + + hvac/AirHandler: + recirculation = %air_handler_recirculation_ratio + heating_air_temp_setpoint = %air_handler_heating_setpoint + cooling_air_temp_setpoint = %air_handler_cooling_setpoint + fan_differential_pressure = %fan_differential_pressure + fan_efficiency = %fan_efficiency + max_air_flow_rate = 8.67 + sim_weather_controller = %weather_controller + + hvac/Boiler: + reheat_water_setpoint = %reheat_water_setpoint + water_pump_differential_head = %water_pump_differential_head + water_pump_efficiency = %water_pump_efficiency + heating_rate = %boiler_heating_rate + cooling_rate = %boiler_cooling_rate + + sim/FloorPlanBasedHvac: + air_handler = @hvac/AirHandler() + boiler = @hvac/Boiler() + schedule = @hvac/SetpointSchedule() + vav_max_air_flow_rate = %vav_max_air_flowrate + vav_reheat_max_water_flow_rate = %vav_reheat_water_flowrate + + # Finite difference settings. + time_step_sec = 300 + convergence_threshold = 0.1 + iteration_limit = 100 + iteration_warning = 30 + start_timestamp = '2023-08-03 07:00:00+00:00' + + sim/to_timestamp.date_str = %start_timestamp + + sim_building/TFSimulator: + building = @sim/FloorPlanBasedBuilding() + hvac = @sim/FloorPlanBasedHvac() + weather_controller = %weather_controller + time_step_sec = %time_step_sec + convergence_threshold = %convergence_threshold + iteration_limit = %iteration_limit + iteration_warning = %iteration_warning + start_timestamp = @sim/to_timestamp() + + + work_occupancy = 1 + nonwork_occupancy = 0.1 + occupancy_start/local_time.time_str = %occupancy_start_time + occupancy_end/local_time.time_str = %occupancy_end_time + + + randomized_occupancy/RandomizedArrivalDepartureOccupancy: + zone_assignment = %work_occupancy + earliest_expected_arrival_hour = 7 + latest_expected_arrival_hour = 12 + earliest_expected_departure_hour = 13 + latest_expected_departure_hour = 18 + time_step_sec = %time_step_sec + time_zone = %time_zone + + + SimulatorBuilding.simulator = @sim_building/TFSimulator() + SimulatorBuilding.occupancy = @randomized_occupancy/RandomizedArrivalDepartureOccupancy() + + + # Reward Parameters taken from 3C reward function documented + # Average productivity per person in USD + max_productivity_personhour_usd = 300.00 + min_productivity_personhour_usd = 100.00 + productivity_midpoint_delta = 0.5 + productivity_decay_stiffness = 4.3 + + max_electricity_rate=160000 + max_natural_gas_rate=400000 + + # lowered productivity weight to force a lower water temp + # during occupied intervals + productivity_weight=0.2 + energy_cost_weight=0.4 + carbon_emission_weight=0.4 + + SetpointEnergyCarbonRegretFunction.max_productivity_personhour_usd = %max_productivity_personhour_usd + SetpointEnergyCarbonRegretFunction.min_productivity_personhour_usd = %min_productivity_personhour_usd + SetpointEnergyCarbonRegretFunction.max_electricity_rate = %max_electricity_rate + SetpointEnergyCarbonRegretFunction.max_natural_gas_rate = %max_natural_gas_rate + SetpointEnergyCarbonRegretFunction.productivity_decay_stiffness = %productivity_decay_stiffness + SetpointEnergyCarbonRegretFunction.productivity_midpoint_delta = %productivity_midpoint_delta + SetpointEnergyCarbonRegretFunction.electricity_energy_cost = @ElectricityEnergyCost() + SetpointEnergyCarbonRegretFunction.natural_gas_energy_cost = @NaturalGasEnergyCost() + SetpointEnergyCarbonRegretFunction.productivity_weight = %productivity_weight + SetpointEnergyCarbonRegretFunction.energy_cost_weight= %energy_cost_weight + SetpointEnergyCarbonRegretFunction.carbon_emission_weight = %carbon_emission_weight + + + # Action Normalization Parameters -> edited to match real building + supply_water_bounded_action_normalizer/set_action_normalization_constants.min_normalized_value = -1. + supply_water_bounded_action_normalizer/set_action_normalization_constants.max_normalized_value = 1.0 + supply_water_bounded_action_normalizer/set_action_normalization_constants.min_native_value = 310 + supply_water_bounded_action_normalizer/set_action_normalization_constants.max_native_value = 355.0 + + supply_air_heating_temperature_setpoint/set_action_normalization_constants.min_normalized_value = -1. + supply_air_heating_temperature_setpoint/set_action_normalization_constants.max_normalized_value = 1. + supply_air_heating_temperature_setpoint/set_action_normalization_constants.min_native_value = 285 + supply_air_heating_temperature_setpoint/set_action_normalization_constants.max_native_value = 300.0 + + action_normalizer_map = { + 'supply_water_setpoint': @supply_water_bounded_action_normalizer/set_action_normalization_constants(), + 'supply_air_heating_temperature_setpoint': @supply_air_heating_temperature_setpoint/set_action_normalization_constants() + } + ActionConfig: + action_normalizers = %action_normalizer_map + + default_actions = { + 'supply_water_setpoint': 340.0, + 'supply_air_cooling_temperature_setpoint': 300.0, + 'supply_air_heating_temperature_setpoint': 285.0 + } + + # Observation Normalization Parameters + temperature_observation_normalizer/set_observation_normalization_constants.field_id = 'temperature' + temperature_observation_normalizer/set_observation_normalization_constants.sample_mean = 310.0 + temperature_observation_normalizer/set_observation_normalization_constants.sample_variance = 2500.0 + + supply_water_setpoint_observation_normalizer/set_observation_normalization_constants.field_id = 'supply_water_setpoint' + supply_water_setpoint_observation_normalizer/set_observation_normalization_constants.sample_mean = 310.0 + supply_water_setpoint_observation_normalizer/set_observation_normalization_constants.sample_variance = 2500.0 + + air_flowrate_observation_normalizer/set_observation_normalization_constants.field_id = 'air_flowrate' + air_flowrate_observation_normalizer/set_observation_normalization_constants.sample_mean = 0.5 + air_flowrate_observation_normalizer/set_observation_normalization_constants.sample_variance = 4.0 + + differential_pressure_observation_normalizer/set_observation_normalization_constants.field_id = 'differential_pressure' + differential_pressure_observation_normalizer/set_observation_normalization_constants.sample_mean = 10000.0 + differential_pressure_observation_normalizer/set_observation_normalization_constants.sample_variance = 100000.0 + + percentage_observation_normalizer/set_observation_normalization_constants.field_id = 'percentage' + percentage_observation_normalizer/set_observation_normalization_constants.sample_mean = 0.50 + percentage_observation_normalizer/set_observation_normalization_constants.sample_variance = 1.0 + + request_count_observation_normalizer/set_observation_normalization_constants.field_id = 'request_count' + request_count_observation_normalizer/set_observation_normalization_constants.sample_mean = 100.0 + request_count_observation_normalizer/set_observation_normalization_constants.sample_variance = 25.0 + + # measurement 0 building_air_static_pressure_sensor + building_air_static_pressure_sensor_normalizer/set_observation_normalization_constants.field_id = 'building_air_static_pressure_sensor' + building_air_static_pressure_sensor_normalizer/set_observation_normalization_constants.sample_mean = 3.779228 + building_air_static_pressure_sensor_normalizer/set_observation_normalization_constants.sample_variance = 14.599437 + + # measurement 1 building_air_static_pressure_setpoint + building_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.field_id = 'building_air_static_pressure_setpoint' + building_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 7.472401 + building_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 0.000000 + + # measurement 2 cooling_percentage_command + cooling_percentage_command_normalizer/set_observation_normalization_constants.field_id = 'cooling_percentage_command' + cooling_percentage_command_normalizer/set_observation_normalization_constants.sample_mean = 9.658281 + cooling_percentage_command_normalizer/set_observation_normalization_constants.sample_variance = 295.833612 + + # measurement 3 differential_pressure_sensor + differential_pressure_sensor_normalizer/set_observation_normalization_constants.field_id = 'differential_pressure_sensor' + differential_pressure_sensor_normalizer/set_observation_normalization_constants.sample_mean = 31611.814379 + differential_pressure_sensor_normalizer/set_observation_normalization_constants.sample_variance = 1844378631.487996 + + # measurement 4 differential_pressure_setpoint + differential_pressure_setpoint_normalizer/set_observation_normalization_constants.field_id = 'differential_pressure_setpoint' + differential_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 83810.269540 + differential_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 14889040.603647 + + # measurement 5 discharge_air_temperature_sensor + discharge_air_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'discharge_air_temperature_sensor' + discharge_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 69.889025 + discharge_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 541.455462 + + # measurement 6 discharge_air_temperature_setpoint + discharge_air_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'discharge_air_temperature_setpoint' + discharge_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 57.665244 + discharge_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 97.254479 + + # measurement 7 exhaust_air_damper_percentage_command + exhaust_air_damper_percentage_command_normalizer/set_observation_normalization_constants.field_id = 'exhaust_air_damper_percentage_command' + exhaust_air_damper_percentage_command_normalizer/set_observation_normalization_constants.sample_mean = 25.000000 + exhaust_air_damper_percentage_command_normalizer/set_observation_normalization_constants.sample_variance = 0.000000 + + # measurement 8 exhaust_air_damper_percentage_sensor + exhaust_air_damper_percentage_sensor_normalizer/set_observation_normalization_constants.field_id = 'exhaust_air_damper_percentage_sensor' + exhaust_air_damper_percentage_sensor_normalizer/set_observation_normalization_constants.sample_mean = 10.680755 + exhaust_air_damper_percentage_sensor_normalizer/set_observation_normalization_constants.sample_variance = 539.207818 + + # measurement 9 exhaust_fan_speed_frequency_sensor + exhaust_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants.field_id = 'exhaust_fan_speed_frequency_sensor' + exhaust_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants.sample_mean = 4.273057 + exhaust_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants.sample_variance = 138.559759 + + # measurement 10 exhaust_fan_speed_percentage_command + exhaust_fan_speed_percentage_command_normalizer/set_observation_normalization_constants.field_id = 'exhaust_fan_speed_percentage_command' + exhaust_fan_speed_percentage_command_normalizer/set_observation_normalization_constants.sample_mean = 7.121761 + exhaust_fan_speed_percentage_command_normalizer/set_observation_normalization_constants.sample_variance = 384.888218 + + # measurement 11 heating_water_valve_percentage_command + heating_water_valve_percentage_command_normalizer/set_observation_normalization_constants.field_id = 'heating_water_valve_percentage_command' + heating_water_valve_percentage_command_normalizer/set_observation_normalization_constants.sample_mean = 3.105189 + heating_water_valve_percentage_command_normalizer/set_observation_normalization_constants.sample_variance = 202.006249 + + # measurement 12 mixed_air_temperature_sensor + mixed_air_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'mixed_air_temperature_sensor' + mixed_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 293.718710 + mixed_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 12.517696 + + # measurement 13 mixed_air_temperature_setpoint + mixed_air_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'mixed_air_temperature_setpoint' + mixed_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 288.218302 + mixed_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 3.186768 + + # measurement 14 outside_air_damper_percentage_command + outside_air_damper_percentage_command_normalizer/set_observation_normalization_constants.field_id = 'outside_air_damper_percentage_command' + outside_air_damper_percentage_command_normalizer/set_observation_normalization_constants.sample_mean = 34.504101 + outside_air_damper_percentage_command_normalizer/set_observation_normalization_constants.sample_variance = 2053.149002 + + # measurement 15 outside_air_dewpoint_temperature_sensor + outside_air_dewpoint_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'outside_air_dewpoint_temperature_sensor' + outside_air_dewpoint_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 285.774428 + outside_air_dewpoint_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 2.504610 + + # measurement 16 outside_air_flowrate_sensor + outside_air_flowrate_sensor_normalizer/set_observation_normalization_constants.field_id = 'outside_air_flowrate_sensor' + outside_air_flowrate_sensor_normalizer/set_observation_normalization_constants.sample_mean = 3.701930 + outside_air_flowrate_sensor_normalizer/set_observation_normalization_constants.sample_variance = 20.300565 + + # measurement 17 outside_air_flowrate_setpoint + outside_air_flowrate_setpoint_normalizer/set_observation_normalization_constants.field_id = 'outside_air_flowrate_setpoint' + outside_air_flowrate_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 8.730134 + outside_air_flowrate_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 0.240364 + + # measurement 18 outside_air_relative_humidity_sensor + outside_air_relative_humidity_sensor_normalizer/set_observation_normalization_constants.field_id = 'outside_air_relative_humidity_sensor' + outside_air_relative_humidity_sensor_normalizer/set_observation_normalization_constants.sample_mean = 71.799372 + outside_air_relative_humidity_sensor_normalizer/set_observation_normalization_constants.sample_variance = 172.388773 + + # measurement 19 outside_air_specificenthalpy_sensor + outside_air_specificenthalpy_sensor_normalizer/set_observation_normalization_constants.field_id = 'outside_air_specificenthalpy_sensor' + outside_air_specificenthalpy_sensor_normalizer/set_observation_normalization_constants.sample_mean = 60711.656343 + outside_air_specificenthalpy_sensor_normalizer/set_observation_normalization_constants.sample_variance = 25491060.173822 + + # measurement 20 outside_air_temperature_sensor + outside_air_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'outside_air_temperature_sensor' + outside_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 291.244931 + outside_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 12.904175 + + # measurement 21 outside_air_wetbulb_temperature_sensor + outside_air_wetbulb_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'outside_air_wetbulb_temperature_sensor' + outside_air_wetbulb_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 287.709943 + outside_air_wetbulb_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 3.594260 + + # measurement 22 program_differential_pressure_setpoint + program_differential_pressure_setpoint_normalizer/set_observation_normalization_constants.field_id = 'program_differential_pressure_setpoint' + program_differential_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 83808.578375 + program_differential_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 14897544.664858 + + # measurement 23 program_supply_air_static_pressure_setpoint + program_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.field_id = 'program_supply_air_static_pressure_setpoint' + program_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 163.396282 + program_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 1092.073231 + + # measurement 24 program_supply_air_temperature_setpoint + program_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'program_supply_air_temperature_setpoint' + program_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 289.490004 + program_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 2.854515 + + # measurement 25 program_supply_water_temperature_setpoint + program_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'program_supply_water_temperature_setpoint' + program_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 341.467705 + program_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 74.961483 + + # measurement 26 return_air_temperature_sensor + return_air_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'return_air_temperature_sensor' + return_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 295.602164 + return_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 11.309930 + + # measurement 27 return_water_temperature_sensor + return_water_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'return_water_temperature_sensor' + return_water_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 326.219913 + return_water_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 497.847788 + + # measurement 28 run_status + run_status_normalizer/set_observation_normalization_constants.field_id = 'run_status' + run_status_normalizer/set_observation_normalization_constants.sample_mean = -0.638340 + run_status_normalizer/set_observation_normalization_constants.sample_variance = 0.592523 + + # measurement 29 speed_frequency_sensor + speed_frequency_sensor_normalizer/set_observation_normalization_constants.field_id = 'speed_frequency_sensor' + speed_frequency_sensor_normalizer/set_observation_normalization_constants.sample_mean = 7.003487 + speed_frequency_sensor_normalizer/set_observation_normalization_constants.sample_variance = 227.751249 + + # measurement 30 speed_percentage_command + speed_percentage_command_normalizer/set_observation_normalization_constants.field_id = 'speed_percentage_command' + speed_percentage_command_normalizer/set_observation_normalization_constants.sample_mean = 11.330966 + speed_percentage_command_normalizer/set_observation_normalization_constants.sample_variance = 602.718159 + + # measurement 31 supervisor_supply_air_static_pressure_setpoint + supervisor_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.field_id = 'supervisor_supply_air_static_pressure_setpoint' + supervisor_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 179.409052 + supervisor_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 352.049768 + + # measurement 32 supervisor_supply_air_temperature_setpoint + supervisor_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'supervisor_supply_air_temperature_setpoint' + supervisor_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 290.2 + supervisor_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 9.66245 + + # measurement 33 supervisor_supply_water_temperature_setpoint + supervisor_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'supervisor_supply_water_temperature_setpoint' + supervisor_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 332.164444 + supervisor_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 1.534112 + + + # measurement 35 supply_air_flowrate_sensor + supply_air_flowrate_sensor_normalizer/set_observation_normalization_constants.field_id = 'supply_air_flowrate_sensor' + supply_air_flowrate_sensor_normalizer/set_observation_normalization_constants.sample_mean = 177.520026 + supply_air_flowrate_sensor_normalizer/set_observation_normalization_constants.sample_variance = 50499.153481 + + # measurement 37 supply_air_static_pressure_sensor + supply_air_static_pressure_sensor_normalizer/set_observation_normalization_constants.field_id = 'supply_air_static_pressure_sensor' + supply_air_static_pressure_sensor_normalizer/set_observation_normalization_constants.sample_mean = 128.527912 + supply_air_static_pressure_sensor_normalizer/set_observation_normalization_constants.sample_variance = 6679.599175 + + # measurement 38 supply_air_static_pressure_setpoint + supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.field_id = 'supply_air_static_pressure_setpoint' + supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 181.307432 + supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 361.757966 + + # measurement 39 supply_air_temperature_sensor + supply_air_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'supply_air_temperature_sensor' + supply_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 289.737939 + supply_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 6.265837 + + # measurement 40 supply_air_temperature_setpoint + supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'supply_air_temperature_setpoint' + supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 289.329414 + supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 3.186769 + + # measurement 41 supply_fan_run_status + supply_fan_run_status_normalizer/set_observation_normalization_constants.field_id = 'supply_fan_run_status' + supply_fan_run_status_normalizer/set_observation_normalization_constants.sample_mean = 0.439849 + supply_fan_run_status_normalizer/set_observation_normalization_constants.sample_variance = 0.806533 + + # measurement 42 supply_fan_speed_frequency_sensor + supply_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants.field_id = 'supply_fan_speed_frequency_sensor' + supply_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants.sample_mean = 15.926249 + supply_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants.sample_variance = 207.034194 + + # measurement 43 supply_fan_speed_percentage_command + supply_fan_speed_percentage_command_normalizer/set_observation_normalization_constants.field_id = 'supply_fan_speed_percentage_command' + supply_fan_speed_percentage_command_normalizer/set_observation_normalization_constants.sample_mean = 26.543748 + supply_fan_speed_percentage_command_normalizer/set_observation_normalization_constants.sample_variance = 575.094979 + + # measurement 44 supply_water_temperature_sensor + supply_water_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'supply_water_temperature_sensor' + supply_water_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 321.520315 + supply_water_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 658.413066 + + # measurement 45 supply_water_temperature_setpoint + supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'supply_water_temperature_setpoint' + supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 320.261985 + supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 240.195517 + + # measurement 46 zone_air_co2_concentration_sensor + zone_air_co2_concentration_sensor_normalizer/set_observation_normalization_constants.field_id = 'zone_air_co2_concentration_sensor' + zone_air_co2_concentration_sensor_normalizer/set_observation_normalization_constants.sample_mean = 432.092062 + zone_air_co2_concentration_sensor_normalizer/set_observation_normalization_constants.sample_variance = 962.903840 + + # measurement 47 zone_air_co2_concentration_setpoint + zone_air_co2_concentration_setpoint_normalizer/set_observation_normalization_constants.field_id = 'zone_air_co2_concentration_setpoint' + zone_air_co2_concentration_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 739.337708 + zone_air_co2_concentration_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 3618.117781 + + # measurement 48 zone_air_cooling_temperature_setpoint + zone_air_cooling_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'zone_air_cooling_temperature_setpoint' + zone_air_cooling_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 82.084227 + zone_air_cooling_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 402.158853 + + # measurement 49 zone_air_heating_temperature_setpoint + zone_air_heating_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'zone_air_heating_temperature_setpoint' + zone_air_heating_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 64.231868 + zone_air_heating_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 24.461668 + + # measurement 50 zone_air_temperature_sensor + zone_air_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'zone_air_temperature_sensor' + zone_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 190 + zone_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 408.113303 + + supervisor_run_command_normalizer/set_observation_normalization_constants.field_id = 'supervisor_run_command' + supervisor_run_command_normalizer/set_observation_normalization_constants.sample_mean = 0 + supervisor_run_command_normalizer/set_observation_normalization_constants.sample_variance = 1.0 + + observation_normalizer_map = { + 'building_air_static_pressure_sensor' : @building_air_static_pressure_sensor_normalizer/set_observation_normalization_constants(), + 'building_air_static_pressure_setpoint' : @building_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants(), + 'cooling_percentage_command' : @cooling_percentage_command_normalizer/set_observation_normalization_constants(), + 'differential_pressure_sensor' : @differential_pressure_sensor_normalizer/set_observation_normalization_constants(), + 'differential_pressure_setpoint' : @differential_pressure_setpoint_normalizer/set_observation_normalization_constants(), + 'discharge_air_temperature_sensor' : @discharge_air_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'discharge_air_temperature_setpoint' : @discharge_air_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'exhaust_air_damper_percentage_command' : @exhaust_air_damper_percentage_command_normalizer/set_observation_normalization_constants(), + 'exhaust_air_damper_percentage_sensor' : @exhaust_air_damper_percentage_sensor_normalizer/set_observation_normalization_constants(), + 'exhaust_fan_speed_frequency_sensor' : @exhaust_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants(), + 'exhaust_fan_speed_percentage_command' : @exhaust_fan_speed_percentage_command_normalizer/set_observation_normalization_constants(), + 'heating_water_valve_percentage_command' : @heating_water_valve_percentage_command_normalizer/set_observation_normalization_constants(), + 'mixed_air_temperature_sensor' : @mixed_air_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'mixed_air_temperature_setpoint' : @mixed_air_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'outside_air_damper_percentage_command' : @outside_air_damper_percentage_command_normalizer/set_observation_normalization_constants(), + 'outside_air_dewpoint_temperature_sensor' : @outside_air_dewpoint_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'outside_air_flowrate_sensor' : @outside_air_flowrate_sensor_normalizer/set_observation_normalization_constants(), + 'outside_air_flowrate_setpoint' : @outside_air_flowrate_setpoint_normalizer/set_observation_normalization_constants(), + 'outside_air_relative_humidity_sensor' : @outside_air_relative_humidity_sensor_normalizer/set_observation_normalization_constants(), + 'outside_air_specificenthalpy_sensor' : @outside_air_specificenthalpy_sensor_normalizer/set_observation_normalization_constants(), + 'outside_air_temperature_sensor' : @outside_air_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'outside_air_wetbulb_temperature_sensor' : @outside_air_wetbulb_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'program_differential_pressure_setpoint' : @program_differential_pressure_setpoint_normalizer/set_observation_normalization_constants(), + 'program_supply_air_static_pressure_setpoint' : @program_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants(), + 'program_supply_air_temperature_setpoint' : @program_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'program_supply_water_temperature_setpoint' : @program_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'return_air_temperature_sensor' : @return_air_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'return_water_temperature_sensor' : @return_water_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'run_status' : @run_status_normalizer/set_observation_normalization_constants(), + 'speed_frequency_sensor' : @speed_frequency_sensor_normalizer/set_observation_normalization_constants(), + 'speed_percentage_command' : @speed_percentage_command_normalizer/set_observation_normalization_constants(), + 'supervisor_supply_air_static_pressure_setpoint' : @supervisor_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants(), + 'supervisor_supply_air_temperature_setpoint' : @supervisor_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'supervisor_supply_water_temperature_setpoint' : @supervisor_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'supply_air_static_pressure_sensor' : @supply_air_static_pressure_sensor_normalizer/set_observation_normalization_constants(), + 'supply_air_static_pressure_setpoint' : @supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants(), + 'supply_air_temperature_sensor' : @supply_air_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'supply_air_temperature_setpoint' : @supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'supply_air_cooling_temperature_setpoint' : @supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'supply_air_heating_temperature_setpoint' : @supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants(), + + 'supply_fan_run_status' : @supply_fan_run_status_normalizer/set_observation_normalization_constants(), + 'supply_fan_speed_frequency_sensor' : @supply_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants(), + 'supply_fan_speed_percentage_command' : @supply_fan_speed_percentage_command_normalizer/set_observation_normalization_constants(), + 'supply_water_temperature_sensor' : @supply_water_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'supply_water_setpoint' : @supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'zone_air_co2_concentration_sensor' : @zone_air_co2_concentration_sensor_normalizer/set_observation_normalization_constants(), + 'zone_air_co2_concentration_setpoint' : @zone_air_co2_concentration_setpoint_normalizer/set_observation_normalization_constants(), + 'zone_air_cooling_temperature_setpoint' : @zone_air_cooling_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'zone_air_heating_temperature_setpoint' : @zone_air_heating_temperature_setpoint_normalizer/set_observation_normalization_constants(), + + 'cooling_request_count': @request_count_observation_normalizer/set_observation_normalization_constants(), + } + + StandardScoreObservationNormalizer: + normalization_constants = %observation_normalizer_map + + + histogram_parameters_tuples = ( + ('zone_air_temperature_sensor',(285., 286., 287., 288, 289., 290., 291., 292., 293., 294., 295., 296., 297., 298., 299., 300.,301,302,303)), + ('supply_air_damper_percentage_command',(0.0, 0.2, 0.4, 0.6, 0.8, 1.0)), + ('supply_air_flowrate_setpoint',( 0., 0.05, .1, .2, .3, .4, .5, .7, .9)), + ) + + # Top-level Environment parameters + discount_factor = 0.9 + num_days_in_episode=14 + metrics_reporting_interval=10 + label='tunable_simulator_sb1' + num_hod_features = 1 + num_dow_features = 1 + + Environment.building = @SimulatorBuilding() + Environment.reward_function = @SetpointEnergyCarbonRegretFunction() + Environment.observation_normalizer = @StandardScoreObservationNormalizer() + Environment.action_config = @ActionConfig() + Environment.metrics_reporting_interval = %metrics_reporting_interval + + Environment.discount_factor = %discount_factor + Environment.metrics_path = %metrics_path + Environment.label = %label + Environment.num_days_in_episode= %num_days_in_episode + Environment.default_actions = %default_actions + Environment.num_hod_features = %num_hod_features + Environment.num_dow_features = %num_dow_features + Environment.writer_factory =@controller_writer.ProtoWriterFactory() + Environment.observation_histogram_reducer = @get_histogram_reducer() diff --git a/smart_control/configs/resources/sb1/test_sim_configs/sim_config_2023_09_07_0700.gin b/smart_control/configs/resources/sb1/test_sim_configs/sim_config_2023_09_07_0700.gin new file mode 100644 index 00000000..8d1f14d2 --- /dev/null +++ b/smart_control/configs/resources/sb1/test_sim_configs/sim_config_2023_09_07_0700.gin @@ -0,0 +1,614 @@ +# Copyright 2024 Google LLC + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at + +# https://www.apache.org/licenses/LICENSE-2.0 + +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + # paths + controller_reader.ProtoReader.input_dir = @get_histogram_path() + floor_plan_filepath = @get_zone_path() + zone_map_filepath = @get_zone_path() + metrics_path = @get_metrics_path() + + # Weather conditions simulation + # W/m2/K + convection_coefficient = 100.0 + # Models the variable temperature as a sinusoid bounded by + # high and low temps, where minima occur at midnights and + # maxima occur at noon. + # K + ambient_high_temp = 283.0 + ambient_low_temp = 273.0 + + ReplayWeatherController.local_weather_path= @get_weather_path() + ReplayWeatherController.convection_coefficient = %convection_coefficient + + weather_controller = @ReplayWeatherController() + + # shuffle parameters + StochasticConvectionSimulator.p = 1.0 + StochasticConvectionSimulator.distance = 5 + StochasticConvectionSimulator.seed = 5 + + # Dimensional parameters of the Building + control_volume_cm = 10 + floor_height_cm = 300.0 + + # Thermal properties of the Building + # Thermal properties of the exterior building. + # W/m/K + exterior_cv_conductivity = 0.05 + # kg/m3 + exterior_cv_density = 1.0 + # J/Kg/K + exterior_cv_heat_capacity = 700.0 + + # Thermal properties of the interior walls. + interior_wall_cv_conductivity = 50.0 + # kg/m3 + interior_wall_cv_density = 1.0 + # J/Kg/K + interior_wall_cv_heat_capacity = 700.0 + + # Thermal properties of the "air" in the thermal zones. + # W/m/K + interior_cv_conductivity = 50.0 + # kg/m3 + interior_cv_density = 1.0 + # J/Kg/K + interior_cv_heat_capacity = 700.0 + + # Defines the initial uniform interior temp. + # K + initial_temp = 294.0 + + inside_air_properties/MaterialProperties: + conductivity = %interior_cv_conductivity + heat_capacity = %interior_cv_heat_capacity + density = %interior_cv_density + + inside_wall_properties/MaterialProperties: + conductivity = %interior_wall_cv_conductivity + heat_capacity = %interior_wall_cv_density + density = %interior_wall_cv_heat_capacity + + building_exterior_properties/MaterialProperties: + conductivity = %exterior_cv_conductivity + heat_capacity = %exterior_cv_heat_capacity + density = %exterior_cv_density + + sim/FloorPlanBasedBuilding: + cv_size_cm = %control_volume_cm + floor_height_cm = %floor_height_cm + initial_temp = %initial_temp + inside_air_properties = @inside_air_properties/MaterialProperties() + inside_wall_properties = @inside_wall_properties/MaterialProperties() + building_exterior_properties = @building_exterior_properties/MaterialProperties() + floor_plan_filepath = %floor_plan_filepath + zone_map_filepath = %zone_map_filepath + convection_simulator = @StochasticConvectionSimulator() + reset_temp_values = @get_reset_temp_values() + + # HVAC heating/cooling schedule + morning_start_hour = 6 + evening_start_hour = 19 + heating_setpoint_day = 294 + cooling_setpoint_day = 297 + heating_setpoint_night = 289 + cooling_setpoint_night = 298 + time_zone="US/Pacific" + + + hvac/SetpointSchedule: + morning_start_hour = %morning_start_hour + evening_start_hour = %evening_start_hour + comfort_temp_window = (%heating_setpoint_day, %cooling_setpoint_day) + eco_temp_window = (%heating_setpoint_night, %cooling_setpoint_night) + time_zone = %time_zone + + # HVAC Device Models and Configs + water_pump_differential_head = 6.0 + water_pump_efficiency = 0.98 + reheat_water_setpoint = 360.0 + boiler_heating_rate = 0.5 # K / min + boiler_cooling_rate = 0.1 # K / min + + # Pa or N/M2 + fan_differential_pressure = 10000.0 + fan_efficiency = 0.9 + + air_handler_heating_setpoint = 285.0 + air_handler_cooling_setpoint = 298.0 + # Percentage of fresh air in the recirculation. + air_handler_recirculation_ratio = 0.3 + + vav_max_air_flowrate = 0.035 + vav_reheat_water_flowrate = 0.03 + + hvac/AirHandler: + recirculation = %air_handler_recirculation_ratio + heating_air_temp_setpoint = %air_handler_heating_setpoint + cooling_air_temp_setpoint = %air_handler_cooling_setpoint + fan_differential_pressure = %fan_differential_pressure + fan_efficiency = %fan_efficiency + max_air_flow_rate = 8.67 + sim_weather_controller = %weather_controller + + hvac/Boiler: + reheat_water_setpoint = %reheat_water_setpoint + water_pump_differential_head = %water_pump_differential_head + water_pump_efficiency = %water_pump_efficiency + heating_rate = %boiler_heating_rate + cooling_rate = %boiler_cooling_rate + + sim/FloorPlanBasedHvac: + air_handler = @hvac/AirHandler() + boiler = @hvac/Boiler() + schedule = @hvac/SetpointSchedule() + vav_max_air_flow_rate = %vav_max_air_flowrate + vav_reheat_max_water_flow_rate = %vav_reheat_water_flowrate + + # Finite difference settings. + time_step_sec = 300 + convergence_threshold = 0.1 + iteration_limit = 100 + iteration_warning = 30 + start_timestamp = '2023-09-07 07:00:00+00:00' + + sim/to_timestamp.date_str = %start_timestamp + + sim_building/TFSimulator: + building = @sim/FloorPlanBasedBuilding() + hvac = @sim/FloorPlanBasedHvac() + weather_controller = %weather_controller + time_step_sec = %time_step_sec + convergence_threshold = %convergence_threshold + iteration_limit = %iteration_limit + iteration_warning = %iteration_warning + start_timestamp = @sim/to_timestamp() + + + work_occupancy = 1 + nonwork_occupancy = 0.1 + occupancy_start/local_time.time_str = %occupancy_start_time + occupancy_end/local_time.time_str = %occupancy_end_time + + + randomized_occupancy/RandomizedArrivalDepartureOccupancy: + zone_assignment = %work_occupancy + earliest_expected_arrival_hour = 7 + latest_expected_arrival_hour = 12 + earliest_expected_departure_hour = 13 + latest_expected_departure_hour = 18 + time_step_sec = %time_step_sec + time_zone = %time_zone + + + SimulatorBuilding.simulator = @sim_building/TFSimulator() + SimulatorBuilding.occupancy = @randomized_occupancy/RandomizedArrivalDepartureOccupancy() + + + # Reward Parameters taken from 3C reward function documented + # Average productivity per person in USD + max_productivity_personhour_usd = 300.00 + min_productivity_personhour_usd = 100.00 + productivity_midpoint_delta = 0.5 + productivity_decay_stiffness = 4.3 + + max_electricity_rate=160000 + max_natural_gas_rate=400000 + + # lowered productivity weight to force a lower water temp + # during occupied intervals + productivity_weight=0.2 + energy_cost_weight=0.4 + carbon_emission_weight=0.4 + + SetpointEnergyCarbonRegretFunction.max_productivity_personhour_usd = %max_productivity_personhour_usd + SetpointEnergyCarbonRegretFunction.min_productivity_personhour_usd = %min_productivity_personhour_usd + SetpointEnergyCarbonRegretFunction.max_electricity_rate = %max_electricity_rate + SetpointEnergyCarbonRegretFunction.max_natural_gas_rate = %max_natural_gas_rate + SetpointEnergyCarbonRegretFunction.productivity_decay_stiffness = %productivity_decay_stiffness + SetpointEnergyCarbonRegretFunction.productivity_midpoint_delta = %productivity_midpoint_delta + SetpointEnergyCarbonRegretFunction.electricity_energy_cost = @ElectricityEnergyCost() + SetpointEnergyCarbonRegretFunction.natural_gas_energy_cost = @NaturalGasEnergyCost() + SetpointEnergyCarbonRegretFunction.productivity_weight = %productivity_weight + SetpointEnergyCarbonRegretFunction.energy_cost_weight= %energy_cost_weight + SetpointEnergyCarbonRegretFunction.carbon_emission_weight = %carbon_emission_weight + + + # Action Normalization Parameters -> edited to match real building + supply_water_bounded_action_normalizer/set_action_normalization_constants.min_normalized_value = -1. + supply_water_bounded_action_normalizer/set_action_normalization_constants.max_normalized_value = 1.0 + supply_water_bounded_action_normalizer/set_action_normalization_constants.min_native_value = 310 + supply_water_bounded_action_normalizer/set_action_normalization_constants.max_native_value = 355.0 + + supply_air_heating_temperature_setpoint/set_action_normalization_constants.min_normalized_value = -1. + supply_air_heating_temperature_setpoint/set_action_normalization_constants.max_normalized_value = 1. + supply_air_heating_temperature_setpoint/set_action_normalization_constants.min_native_value = 285 + supply_air_heating_temperature_setpoint/set_action_normalization_constants.max_native_value = 300.0 + + action_normalizer_map = { + 'supply_water_setpoint': @supply_water_bounded_action_normalizer/set_action_normalization_constants(), + 'supply_air_heating_temperature_setpoint': @supply_air_heating_temperature_setpoint/set_action_normalization_constants() + } + ActionConfig: + action_normalizers = %action_normalizer_map + + default_actions = { + 'supply_water_setpoint': 340.0, + 'supply_air_cooling_temperature_setpoint': 300.0, + 'supply_air_heating_temperature_setpoint': 285.0 + } + + # Observation Normalization Parameters + temperature_observation_normalizer/set_observation_normalization_constants.field_id = 'temperature' + temperature_observation_normalizer/set_observation_normalization_constants.sample_mean = 310.0 + temperature_observation_normalizer/set_observation_normalization_constants.sample_variance = 2500.0 + + supply_water_setpoint_observation_normalizer/set_observation_normalization_constants.field_id = 'supply_water_setpoint' + supply_water_setpoint_observation_normalizer/set_observation_normalization_constants.sample_mean = 310.0 + supply_water_setpoint_observation_normalizer/set_observation_normalization_constants.sample_variance = 2500.0 + + air_flowrate_observation_normalizer/set_observation_normalization_constants.field_id = 'air_flowrate' + air_flowrate_observation_normalizer/set_observation_normalization_constants.sample_mean = 0.5 + air_flowrate_observation_normalizer/set_observation_normalization_constants.sample_variance = 4.0 + + differential_pressure_observation_normalizer/set_observation_normalization_constants.field_id = 'differential_pressure' + differential_pressure_observation_normalizer/set_observation_normalization_constants.sample_mean = 10000.0 + differential_pressure_observation_normalizer/set_observation_normalization_constants.sample_variance = 100000.0 + + percentage_observation_normalizer/set_observation_normalization_constants.field_id = 'percentage' + percentage_observation_normalizer/set_observation_normalization_constants.sample_mean = 0.50 + percentage_observation_normalizer/set_observation_normalization_constants.sample_variance = 1.0 + + request_count_observation_normalizer/set_observation_normalization_constants.field_id = 'request_count' + request_count_observation_normalizer/set_observation_normalization_constants.sample_mean = 100.0 + request_count_observation_normalizer/set_observation_normalization_constants.sample_variance = 25.0 + + # measurement 0 building_air_static_pressure_sensor + building_air_static_pressure_sensor_normalizer/set_observation_normalization_constants.field_id = 'building_air_static_pressure_sensor' + building_air_static_pressure_sensor_normalizer/set_observation_normalization_constants.sample_mean = 3.779228 + building_air_static_pressure_sensor_normalizer/set_observation_normalization_constants.sample_variance = 14.599437 + + # measurement 1 building_air_static_pressure_setpoint + building_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.field_id = 'building_air_static_pressure_setpoint' + building_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 7.472401 + building_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 0.000000 + + # measurement 2 cooling_percentage_command + cooling_percentage_command_normalizer/set_observation_normalization_constants.field_id = 'cooling_percentage_command' + cooling_percentage_command_normalizer/set_observation_normalization_constants.sample_mean = 9.658281 + cooling_percentage_command_normalizer/set_observation_normalization_constants.sample_variance = 295.833612 + + # measurement 3 differential_pressure_sensor + differential_pressure_sensor_normalizer/set_observation_normalization_constants.field_id = 'differential_pressure_sensor' + differential_pressure_sensor_normalizer/set_observation_normalization_constants.sample_mean = 31611.814379 + differential_pressure_sensor_normalizer/set_observation_normalization_constants.sample_variance = 1844378631.487996 + + # measurement 4 differential_pressure_setpoint + differential_pressure_setpoint_normalizer/set_observation_normalization_constants.field_id = 'differential_pressure_setpoint' + differential_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 83810.269540 + differential_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 14889040.603647 + + # measurement 5 discharge_air_temperature_sensor + discharge_air_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'discharge_air_temperature_sensor' + discharge_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 69.889025 + discharge_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 541.455462 + + # measurement 6 discharge_air_temperature_setpoint + discharge_air_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'discharge_air_temperature_setpoint' + discharge_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 57.665244 + discharge_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 97.254479 + + # measurement 7 exhaust_air_damper_percentage_command + exhaust_air_damper_percentage_command_normalizer/set_observation_normalization_constants.field_id = 'exhaust_air_damper_percentage_command' + exhaust_air_damper_percentage_command_normalizer/set_observation_normalization_constants.sample_mean = 25.000000 + exhaust_air_damper_percentage_command_normalizer/set_observation_normalization_constants.sample_variance = 0.000000 + + # measurement 8 exhaust_air_damper_percentage_sensor + exhaust_air_damper_percentage_sensor_normalizer/set_observation_normalization_constants.field_id = 'exhaust_air_damper_percentage_sensor' + exhaust_air_damper_percentage_sensor_normalizer/set_observation_normalization_constants.sample_mean = 10.680755 + exhaust_air_damper_percentage_sensor_normalizer/set_observation_normalization_constants.sample_variance = 539.207818 + + # measurement 9 exhaust_fan_speed_frequency_sensor + exhaust_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants.field_id = 'exhaust_fan_speed_frequency_sensor' + exhaust_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants.sample_mean = 4.273057 + exhaust_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants.sample_variance = 138.559759 + + # measurement 10 exhaust_fan_speed_percentage_command + exhaust_fan_speed_percentage_command_normalizer/set_observation_normalization_constants.field_id = 'exhaust_fan_speed_percentage_command' + exhaust_fan_speed_percentage_command_normalizer/set_observation_normalization_constants.sample_mean = 7.121761 + exhaust_fan_speed_percentage_command_normalizer/set_observation_normalization_constants.sample_variance = 384.888218 + + # measurement 11 heating_water_valve_percentage_command + heating_water_valve_percentage_command_normalizer/set_observation_normalization_constants.field_id = 'heating_water_valve_percentage_command' + heating_water_valve_percentage_command_normalizer/set_observation_normalization_constants.sample_mean = 3.105189 + heating_water_valve_percentage_command_normalizer/set_observation_normalization_constants.sample_variance = 202.006249 + + # measurement 12 mixed_air_temperature_sensor + mixed_air_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'mixed_air_temperature_sensor' + mixed_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 293.718710 + mixed_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 12.517696 + + # measurement 13 mixed_air_temperature_setpoint + mixed_air_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'mixed_air_temperature_setpoint' + mixed_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 288.218302 + mixed_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 3.186768 + + # measurement 14 outside_air_damper_percentage_command + outside_air_damper_percentage_command_normalizer/set_observation_normalization_constants.field_id = 'outside_air_damper_percentage_command' + outside_air_damper_percentage_command_normalizer/set_observation_normalization_constants.sample_mean = 34.504101 + outside_air_damper_percentage_command_normalizer/set_observation_normalization_constants.sample_variance = 2053.149002 + + # measurement 15 outside_air_dewpoint_temperature_sensor + outside_air_dewpoint_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'outside_air_dewpoint_temperature_sensor' + outside_air_dewpoint_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 285.774428 + outside_air_dewpoint_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 2.504610 + + # measurement 16 outside_air_flowrate_sensor + outside_air_flowrate_sensor_normalizer/set_observation_normalization_constants.field_id = 'outside_air_flowrate_sensor' + outside_air_flowrate_sensor_normalizer/set_observation_normalization_constants.sample_mean = 3.701930 + outside_air_flowrate_sensor_normalizer/set_observation_normalization_constants.sample_variance = 20.300565 + + # measurement 17 outside_air_flowrate_setpoint + outside_air_flowrate_setpoint_normalizer/set_observation_normalization_constants.field_id = 'outside_air_flowrate_setpoint' + outside_air_flowrate_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 8.730134 + outside_air_flowrate_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 0.240364 + + # measurement 18 outside_air_relative_humidity_sensor + outside_air_relative_humidity_sensor_normalizer/set_observation_normalization_constants.field_id = 'outside_air_relative_humidity_sensor' + outside_air_relative_humidity_sensor_normalizer/set_observation_normalization_constants.sample_mean = 71.799372 + outside_air_relative_humidity_sensor_normalizer/set_observation_normalization_constants.sample_variance = 172.388773 + + # measurement 19 outside_air_specificenthalpy_sensor + outside_air_specificenthalpy_sensor_normalizer/set_observation_normalization_constants.field_id = 'outside_air_specificenthalpy_sensor' + outside_air_specificenthalpy_sensor_normalizer/set_observation_normalization_constants.sample_mean = 60711.656343 + outside_air_specificenthalpy_sensor_normalizer/set_observation_normalization_constants.sample_variance = 25491060.173822 + + # measurement 20 outside_air_temperature_sensor + outside_air_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'outside_air_temperature_sensor' + outside_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 291.244931 + outside_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 12.904175 + + # measurement 21 outside_air_wetbulb_temperature_sensor + outside_air_wetbulb_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'outside_air_wetbulb_temperature_sensor' + outside_air_wetbulb_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 287.709943 + outside_air_wetbulb_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 3.594260 + + # measurement 22 program_differential_pressure_setpoint + program_differential_pressure_setpoint_normalizer/set_observation_normalization_constants.field_id = 'program_differential_pressure_setpoint' + program_differential_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 83808.578375 + program_differential_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 14897544.664858 + + # measurement 23 program_supply_air_static_pressure_setpoint + program_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.field_id = 'program_supply_air_static_pressure_setpoint' + program_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 163.396282 + program_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 1092.073231 + + # measurement 24 program_supply_air_temperature_setpoint + program_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'program_supply_air_temperature_setpoint' + program_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 289.490004 + program_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 2.854515 + + # measurement 25 program_supply_water_temperature_setpoint + program_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'program_supply_water_temperature_setpoint' + program_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 341.467705 + program_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 74.961483 + + # measurement 26 return_air_temperature_sensor + return_air_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'return_air_temperature_sensor' + return_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 295.602164 + return_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 11.309930 + + # measurement 27 return_water_temperature_sensor + return_water_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'return_water_temperature_sensor' + return_water_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 326.219913 + return_water_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 497.847788 + + # measurement 28 run_status + run_status_normalizer/set_observation_normalization_constants.field_id = 'run_status' + run_status_normalizer/set_observation_normalization_constants.sample_mean = -0.638340 + run_status_normalizer/set_observation_normalization_constants.sample_variance = 0.592523 + + # measurement 29 speed_frequency_sensor + speed_frequency_sensor_normalizer/set_observation_normalization_constants.field_id = 'speed_frequency_sensor' + speed_frequency_sensor_normalizer/set_observation_normalization_constants.sample_mean = 7.003487 + speed_frequency_sensor_normalizer/set_observation_normalization_constants.sample_variance = 227.751249 + + # measurement 30 speed_percentage_command + speed_percentage_command_normalizer/set_observation_normalization_constants.field_id = 'speed_percentage_command' + speed_percentage_command_normalizer/set_observation_normalization_constants.sample_mean = 11.330966 + speed_percentage_command_normalizer/set_observation_normalization_constants.sample_variance = 602.718159 + + # measurement 31 supervisor_supply_air_static_pressure_setpoint + supervisor_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.field_id = 'supervisor_supply_air_static_pressure_setpoint' + supervisor_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 179.409052 + supervisor_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 352.049768 + + # measurement 32 supervisor_supply_air_temperature_setpoint + supervisor_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'supervisor_supply_air_temperature_setpoint' + supervisor_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 290.2 + supervisor_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 9.66245 + + # measurement 33 supervisor_supply_water_temperature_setpoint + supervisor_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'supervisor_supply_water_temperature_setpoint' + supervisor_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 332.164444 + supervisor_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 1.534112 + + + # measurement 35 supply_air_flowrate_sensor + supply_air_flowrate_sensor_normalizer/set_observation_normalization_constants.field_id = 'supply_air_flowrate_sensor' + supply_air_flowrate_sensor_normalizer/set_observation_normalization_constants.sample_mean = 177.520026 + supply_air_flowrate_sensor_normalizer/set_observation_normalization_constants.sample_variance = 50499.153481 + + # measurement 37 supply_air_static_pressure_sensor + supply_air_static_pressure_sensor_normalizer/set_observation_normalization_constants.field_id = 'supply_air_static_pressure_sensor' + supply_air_static_pressure_sensor_normalizer/set_observation_normalization_constants.sample_mean = 128.527912 + supply_air_static_pressure_sensor_normalizer/set_observation_normalization_constants.sample_variance = 6679.599175 + + # measurement 38 supply_air_static_pressure_setpoint + supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.field_id = 'supply_air_static_pressure_setpoint' + supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 181.307432 + supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 361.757966 + + # measurement 39 supply_air_temperature_sensor + supply_air_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'supply_air_temperature_sensor' + supply_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 289.737939 + supply_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 6.265837 + + # measurement 40 supply_air_temperature_setpoint + supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'supply_air_temperature_setpoint' + supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 289.329414 + supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 3.186769 + + # measurement 41 supply_fan_run_status + supply_fan_run_status_normalizer/set_observation_normalization_constants.field_id = 'supply_fan_run_status' + supply_fan_run_status_normalizer/set_observation_normalization_constants.sample_mean = 0.439849 + supply_fan_run_status_normalizer/set_observation_normalization_constants.sample_variance = 0.806533 + + # measurement 42 supply_fan_speed_frequency_sensor + supply_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants.field_id = 'supply_fan_speed_frequency_sensor' + supply_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants.sample_mean = 15.926249 + supply_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants.sample_variance = 207.034194 + + # measurement 43 supply_fan_speed_percentage_command + supply_fan_speed_percentage_command_normalizer/set_observation_normalization_constants.field_id = 'supply_fan_speed_percentage_command' + supply_fan_speed_percentage_command_normalizer/set_observation_normalization_constants.sample_mean = 26.543748 + supply_fan_speed_percentage_command_normalizer/set_observation_normalization_constants.sample_variance = 575.094979 + + # measurement 44 supply_water_temperature_sensor + supply_water_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'supply_water_temperature_sensor' + supply_water_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 321.520315 + supply_water_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 658.413066 + + # measurement 45 supply_water_temperature_setpoint + supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'supply_water_temperature_setpoint' + supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 320.261985 + supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 240.195517 + + # measurement 46 zone_air_co2_concentration_sensor + zone_air_co2_concentration_sensor_normalizer/set_observation_normalization_constants.field_id = 'zone_air_co2_concentration_sensor' + zone_air_co2_concentration_sensor_normalizer/set_observation_normalization_constants.sample_mean = 432.092062 + zone_air_co2_concentration_sensor_normalizer/set_observation_normalization_constants.sample_variance = 962.903840 + + # measurement 47 zone_air_co2_concentration_setpoint + zone_air_co2_concentration_setpoint_normalizer/set_observation_normalization_constants.field_id = 'zone_air_co2_concentration_setpoint' + zone_air_co2_concentration_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 739.337708 + zone_air_co2_concentration_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 3618.117781 + + # measurement 48 zone_air_cooling_temperature_setpoint + zone_air_cooling_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'zone_air_cooling_temperature_setpoint' + zone_air_cooling_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 82.084227 + zone_air_cooling_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 402.158853 + + # measurement 49 zone_air_heating_temperature_setpoint + zone_air_heating_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'zone_air_heating_temperature_setpoint' + zone_air_heating_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 64.231868 + zone_air_heating_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 24.461668 + + # measurement 50 zone_air_temperature_sensor + zone_air_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'zone_air_temperature_sensor' + zone_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 190 + zone_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 408.113303 + + supervisor_run_command_normalizer/set_observation_normalization_constants.field_id = 'supervisor_run_command' + supervisor_run_command_normalizer/set_observation_normalization_constants.sample_mean = 0 + supervisor_run_command_normalizer/set_observation_normalization_constants.sample_variance = 1.0 + + observation_normalizer_map = { + 'building_air_static_pressure_sensor' : @building_air_static_pressure_sensor_normalizer/set_observation_normalization_constants(), + 'building_air_static_pressure_setpoint' : @building_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants(), + 'cooling_percentage_command' : @cooling_percentage_command_normalizer/set_observation_normalization_constants(), + 'differential_pressure_sensor' : @differential_pressure_sensor_normalizer/set_observation_normalization_constants(), + 'differential_pressure_setpoint' : @differential_pressure_setpoint_normalizer/set_observation_normalization_constants(), + 'discharge_air_temperature_sensor' : @discharge_air_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'discharge_air_temperature_setpoint' : @discharge_air_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'exhaust_air_damper_percentage_command' : @exhaust_air_damper_percentage_command_normalizer/set_observation_normalization_constants(), + 'exhaust_air_damper_percentage_sensor' : @exhaust_air_damper_percentage_sensor_normalizer/set_observation_normalization_constants(), + 'exhaust_fan_speed_frequency_sensor' : @exhaust_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants(), + 'exhaust_fan_speed_percentage_command' : @exhaust_fan_speed_percentage_command_normalizer/set_observation_normalization_constants(), + 'heating_water_valve_percentage_command' : @heating_water_valve_percentage_command_normalizer/set_observation_normalization_constants(), + 'mixed_air_temperature_sensor' : @mixed_air_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'mixed_air_temperature_setpoint' : @mixed_air_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'outside_air_damper_percentage_command' : @outside_air_damper_percentage_command_normalizer/set_observation_normalization_constants(), + 'outside_air_dewpoint_temperature_sensor' : @outside_air_dewpoint_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'outside_air_flowrate_sensor' : @outside_air_flowrate_sensor_normalizer/set_observation_normalization_constants(), + 'outside_air_flowrate_setpoint' : @outside_air_flowrate_setpoint_normalizer/set_observation_normalization_constants(), + 'outside_air_relative_humidity_sensor' : @outside_air_relative_humidity_sensor_normalizer/set_observation_normalization_constants(), + 'outside_air_specificenthalpy_sensor' : @outside_air_specificenthalpy_sensor_normalizer/set_observation_normalization_constants(), + 'outside_air_temperature_sensor' : @outside_air_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'outside_air_wetbulb_temperature_sensor' : @outside_air_wetbulb_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'program_differential_pressure_setpoint' : @program_differential_pressure_setpoint_normalizer/set_observation_normalization_constants(), + 'program_supply_air_static_pressure_setpoint' : @program_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants(), + 'program_supply_air_temperature_setpoint' : @program_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'program_supply_water_temperature_setpoint' : @program_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'return_air_temperature_sensor' : @return_air_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'return_water_temperature_sensor' : @return_water_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'run_status' : @run_status_normalizer/set_observation_normalization_constants(), + 'speed_frequency_sensor' : @speed_frequency_sensor_normalizer/set_observation_normalization_constants(), + 'speed_percentage_command' : @speed_percentage_command_normalizer/set_observation_normalization_constants(), + 'supervisor_supply_air_static_pressure_setpoint' : @supervisor_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants(), + 'supervisor_supply_air_temperature_setpoint' : @supervisor_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'supervisor_supply_water_temperature_setpoint' : @supervisor_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'supply_air_static_pressure_sensor' : @supply_air_static_pressure_sensor_normalizer/set_observation_normalization_constants(), + 'supply_air_static_pressure_setpoint' : @supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants(), + 'supply_air_temperature_sensor' : @supply_air_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'supply_air_temperature_setpoint' : @supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'supply_air_cooling_temperature_setpoint' : @supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'supply_air_heating_temperature_setpoint' : @supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants(), + + 'supply_fan_run_status' : @supply_fan_run_status_normalizer/set_observation_normalization_constants(), + 'supply_fan_speed_frequency_sensor' : @supply_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants(), + 'supply_fan_speed_percentage_command' : @supply_fan_speed_percentage_command_normalizer/set_observation_normalization_constants(), + 'supply_water_temperature_sensor' : @supply_water_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'supply_water_setpoint' : @supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'zone_air_co2_concentration_sensor' : @zone_air_co2_concentration_sensor_normalizer/set_observation_normalization_constants(), + 'zone_air_co2_concentration_setpoint' : @zone_air_co2_concentration_setpoint_normalizer/set_observation_normalization_constants(), + 'zone_air_cooling_temperature_setpoint' : @zone_air_cooling_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'zone_air_heating_temperature_setpoint' : @zone_air_heating_temperature_setpoint_normalizer/set_observation_normalization_constants(), + + 'cooling_request_count': @request_count_observation_normalizer/set_observation_normalization_constants(), + } + + StandardScoreObservationNormalizer: + normalization_constants = %observation_normalizer_map + + + histogram_parameters_tuples = ( + ('zone_air_temperature_sensor',(285., 286., 287., 288, 289., 290., 291., 292., 293., 294., 295., 296., 297., 298., 299., 300.,301,302,303)), + ('supply_air_damper_percentage_command',(0.0, 0.2, 0.4, 0.6, 0.8, 1.0)), + ('supply_air_flowrate_setpoint',( 0., 0.05, .1, .2, .3, .4, .5, .7, .9)), + ) + + # Top-level Environment parameters + discount_factor = 0.9 + num_days_in_episode=14 + metrics_reporting_interval=10 + label='tunable_simulator_sb1' + num_hod_features = 1 + num_dow_features = 1 + + Environment.building = @SimulatorBuilding() + Environment.reward_function = @SetpointEnergyCarbonRegretFunction() + Environment.observation_normalizer = @StandardScoreObservationNormalizer() + Environment.action_config = @ActionConfig() + Environment.metrics_reporting_interval = %metrics_reporting_interval + + Environment.discount_factor = %discount_factor + Environment.metrics_path = %metrics_path + Environment.label = %label + Environment.num_days_in_episode= %num_days_in_episode + Environment.default_actions = %default_actions + Environment.num_hod_features = %num_hod_features + Environment.num_dow_features = %num_dow_features + Environment.writer_factory =@controller_writer.ProtoWriterFactory() + Environment.observation_histogram_reducer = @get_histogram_reducer() diff --git a/smart_control/configs/resources/sb1/test_sim_configs/sim_config_2023_10_05_0700.gin b/smart_control/configs/resources/sb1/test_sim_configs/sim_config_2023_10_05_0700.gin new file mode 100644 index 00000000..27094aef --- /dev/null +++ b/smart_control/configs/resources/sb1/test_sim_configs/sim_config_2023_10_05_0700.gin @@ -0,0 +1,614 @@ +# Copyright 2024 Google LLC + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at + +# https://www.apache.org/licenses/LICENSE-2.0 + +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + # paths + controller_reader.ProtoReader.input_dir = @get_histogram_path() + floor_plan_filepath = @get_zone_path() + zone_map_filepath = @get_zone_path() + metrics_path = @get_metrics_path() + + # Weather conditions simulation + # W/m2/K + convection_coefficient = 100.0 + # Models the variable temperature as a sinusoid bounded by + # high and low temps, where minima occur at midnights and + # maxima occur at noon. + # K + ambient_high_temp = 283.0 + ambient_low_temp = 273.0 + + ReplayWeatherController.local_weather_path= @get_weather_path() + ReplayWeatherController.convection_coefficient = %convection_coefficient + + weather_controller = @ReplayWeatherController() + + # shuffle parameters + StochasticConvectionSimulator.p = 1.0 + StochasticConvectionSimulator.distance = 5 + StochasticConvectionSimulator.seed = 5 + + # Dimensional parameters of the Building + control_volume_cm = 10 + floor_height_cm = 300.0 + + # Thermal properties of the Building + # Thermal properties of the exterior building. + # W/m/K + exterior_cv_conductivity = 0.05 + # kg/m3 + exterior_cv_density = 1.0 + # J/Kg/K + exterior_cv_heat_capacity = 700.0 + + # Thermal properties of the interior walls. + interior_wall_cv_conductivity = 50.0 + # kg/m3 + interior_wall_cv_density = 1.0 + # J/Kg/K + interior_wall_cv_heat_capacity = 700.0 + + # Thermal properties of the "air" in the thermal zones. + # W/m/K + interior_cv_conductivity = 50.0 + # kg/m3 + interior_cv_density = 1.0 + # J/Kg/K + interior_cv_heat_capacity = 700.0 + + # Defines the initial uniform interior temp. + # K + initial_temp = 294.0 + + inside_air_properties/MaterialProperties: + conductivity = %interior_cv_conductivity + heat_capacity = %interior_cv_heat_capacity + density = %interior_cv_density + + inside_wall_properties/MaterialProperties: + conductivity = %interior_wall_cv_conductivity + heat_capacity = %interior_wall_cv_density + density = %interior_wall_cv_heat_capacity + + building_exterior_properties/MaterialProperties: + conductivity = %exterior_cv_conductivity + heat_capacity = %exterior_cv_heat_capacity + density = %exterior_cv_density + + sim/FloorPlanBasedBuilding: + cv_size_cm = %control_volume_cm + floor_height_cm = %floor_height_cm + initial_temp = %initial_temp + inside_air_properties = @inside_air_properties/MaterialProperties() + inside_wall_properties = @inside_wall_properties/MaterialProperties() + building_exterior_properties = @building_exterior_properties/MaterialProperties() + floor_plan_filepath = %floor_plan_filepath + zone_map_filepath = %zone_map_filepath + convection_simulator = @StochasticConvectionSimulator() + reset_temp_values = @get_reset_temp_values() + + # HVAC heating/cooling schedule + morning_start_hour = 6 + evening_start_hour = 19 + heating_setpoint_day = 294 + cooling_setpoint_day = 297 + heating_setpoint_night = 289 + cooling_setpoint_night = 298 + time_zone="US/Pacific" + + + hvac/SetpointSchedule: + morning_start_hour = %morning_start_hour + evening_start_hour = %evening_start_hour + comfort_temp_window = (%heating_setpoint_day, %cooling_setpoint_day) + eco_temp_window = (%heating_setpoint_night, %cooling_setpoint_night) + time_zone = %time_zone + + # HVAC Device Models and Configs + water_pump_differential_head = 6.0 + water_pump_efficiency = 0.98 + reheat_water_setpoint = 360.0 + boiler_heating_rate = 0.5 # K / min + boiler_cooling_rate = 0.1 # K / min + + # Pa or N/M2 + fan_differential_pressure = 10000.0 + fan_efficiency = 0.9 + + air_handler_heating_setpoint = 285.0 + air_handler_cooling_setpoint = 298.0 + # Percentage of fresh air in the recirculation. + air_handler_recirculation_ratio = 0.3 + + vav_max_air_flowrate = 0.035 + vav_reheat_water_flowrate = 0.03 + + hvac/AirHandler: + recirculation = %air_handler_recirculation_ratio + heating_air_temp_setpoint = %air_handler_heating_setpoint + cooling_air_temp_setpoint = %air_handler_cooling_setpoint + fan_differential_pressure = %fan_differential_pressure + fan_efficiency = %fan_efficiency + max_air_flow_rate = 8.67 + sim_weather_controller = %weather_controller + + hvac/Boiler: + reheat_water_setpoint = %reheat_water_setpoint + water_pump_differential_head = %water_pump_differential_head + water_pump_efficiency = %water_pump_efficiency + heating_rate = %boiler_heating_rate + cooling_rate = %boiler_cooling_rate + + sim/FloorPlanBasedHvac: + air_handler = @hvac/AirHandler() + boiler = @hvac/Boiler() + schedule = @hvac/SetpointSchedule() + vav_max_air_flow_rate = %vav_max_air_flowrate + vav_reheat_max_water_flow_rate = %vav_reheat_water_flowrate + + # Finite difference settings. + time_step_sec = 300 + convergence_threshold = 0.1 + iteration_limit = 100 + iteration_warning = 30 + start_timestamp = '2023-10-05 07:00:00+00:00' + + sim/to_timestamp.date_str = %start_timestamp + + sim_building/TFSimulator: + building = @sim/FloorPlanBasedBuilding() + hvac = @sim/FloorPlanBasedHvac() + weather_controller = %weather_controller + time_step_sec = %time_step_sec + convergence_threshold = %convergence_threshold + iteration_limit = %iteration_limit + iteration_warning = %iteration_warning + start_timestamp = @sim/to_timestamp() + + + work_occupancy = 1 + nonwork_occupancy = 0.1 + occupancy_start/local_time.time_str = %occupancy_start_time + occupancy_end/local_time.time_str = %occupancy_end_time + + + randomized_occupancy/RandomizedArrivalDepartureOccupancy: + zone_assignment = %work_occupancy + earliest_expected_arrival_hour = 7 + latest_expected_arrival_hour = 12 + earliest_expected_departure_hour = 13 + latest_expected_departure_hour = 18 + time_step_sec = %time_step_sec + time_zone = %time_zone + + + SimulatorBuilding.simulator = @sim_building/TFSimulator() + SimulatorBuilding.occupancy = @randomized_occupancy/RandomizedArrivalDepartureOccupancy() + + + # Reward Parameters taken from 3C reward function documented + # Average productivity per person in USD + max_productivity_personhour_usd = 300.00 + min_productivity_personhour_usd = 100.00 + productivity_midpoint_delta = 0.5 + productivity_decay_stiffness = 4.3 + + max_electricity_rate=160000 + max_natural_gas_rate=400000 + + # lowered productivity weight to force a lower water temp + # during occupied intervals + productivity_weight=0.2 + energy_cost_weight=0.4 + carbon_emission_weight=0.4 + + SetpointEnergyCarbonRegretFunction.max_productivity_personhour_usd = %max_productivity_personhour_usd + SetpointEnergyCarbonRegretFunction.min_productivity_personhour_usd = %min_productivity_personhour_usd + SetpointEnergyCarbonRegretFunction.max_electricity_rate = %max_electricity_rate + SetpointEnergyCarbonRegretFunction.max_natural_gas_rate = %max_natural_gas_rate + SetpointEnergyCarbonRegretFunction.productivity_decay_stiffness = %productivity_decay_stiffness + SetpointEnergyCarbonRegretFunction.productivity_midpoint_delta = %productivity_midpoint_delta + SetpointEnergyCarbonRegretFunction.electricity_energy_cost = @ElectricityEnergyCost() + SetpointEnergyCarbonRegretFunction.natural_gas_energy_cost = @NaturalGasEnergyCost() + SetpointEnergyCarbonRegretFunction.productivity_weight = %productivity_weight + SetpointEnergyCarbonRegretFunction.energy_cost_weight= %energy_cost_weight + SetpointEnergyCarbonRegretFunction.carbon_emission_weight = %carbon_emission_weight + + + # Action Normalization Parameters -> edited to match real building + supply_water_bounded_action_normalizer/set_action_normalization_constants.min_normalized_value = -1. + supply_water_bounded_action_normalizer/set_action_normalization_constants.max_normalized_value = 1.0 + supply_water_bounded_action_normalizer/set_action_normalization_constants.min_native_value = 310 + supply_water_bounded_action_normalizer/set_action_normalization_constants.max_native_value = 355.0 + + supply_air_heating_temperature_setpoint/set_action_normalization_constants.min_normalized_value = -1. + supply_air_heating_temperature_setpoint/set_action_normalization_constants.max_normalized_value = 1. + supply_air_heating_temperature_setpoint/set_action_normalization_constants.min_native_value = 285 + supply_air_heating_temperature_setpoint/set_action_normalization_constants.max_native_value = 300.0 + + action_normalizer_map = { + 'supply_water_setpoint': @supply_water_bounded_action_normalizer/set_action_normalization_constants(), + 'supply_air_heating_temperature_setpoint': @supply_air_heating_temperature_setpoint/set_action_normalization_constants() + } + ActionConfig: + action_normalizers = %action_normalizer_map + + default_actions = { + 'supply_water_setpoint': 340.0, + 'supply_air_cooling_temperature_setpoint': 300.0, + 'supply_air_heating_temperature_setpoint': 285.0 + } + + # Observation Normalization Parameters + temperature_observation_normalizer/set_observation_normalization_constants.field_id = 'temperature' + temperature_observation_normalizer/set_observation_normalization_constants.sample_mean = 310.0 + temperature_observation_normalizer/set_observation_normalization_constants.sample_variance = 2500.0 + + supply_water_setpoint_observation_normalizer/set_observation_normalization_constants.field_id = 'supply_water_setpoint' + supply_water_setpoint_observation_normalizer/set_observation_normalization_constants.sample_mean = 310.0 + supply_water_setpoint_observation_normalizer/set_observation_normalization_constants.sample_variance = 2500.0 + + air_flowrate_observation_normalizer/set_observation_normalization_constants.field_id = 'air_flowrate' + air_flowrate_observation_normalizer/set_observation_normalization_constants.sample_mean = 0.5 + air_flowrate_observation_normalizer/set_observation_normalization_constants.sample_variance = 4.0 + + differential_pressure_observation_normalizer/set_observation_normalization_constants.field_id = 'differential_pressure' + differential_pressure_observation_normalizer/set_observation_normalization_constants.sample_mean = 10000.0 + differential_pressure_observation_normalizer/set_observation_normalization_constants.sample_variance = 100000.0 + + percentage_observation_normalizer/set_observation_normalization_constants.field_id = 'percentage' + percentage_observation_normalizer/set_observation_normalization_constants.sample_mean = 0.50 + percentage_observation_normalizer/set_observation_normalization_constants.sample_variance = 1.0 + + request_count_observation_normalizer/set_observation_normalization_constants.field_id = 'request_count' + request_count_observation_normalizer/set_observation_normalization_constants.sample_mean = 100.0 + request_count_observation_normalizer/set_observation_normalization_constants.sample_variance = 25.0 + + # measurement 0 building_air_static_pressure_sensor + building_air_static_pressure_sensor_normalizer/set_observation_normalization_constants.field_id = 'building_air_static_pressure_sensor' + building_air_static_pressure_sensor_normalizer/set_observation_normalization_constants.sample_mean = 3.779228 + building_air_static_pressure_sensor_normalizer/set_observation_normalization_constants.sample_variance = 14.599437 + + # measurement 1 building_air_static_pressure_setpoint + building_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.field_id = 'building_air_static_pressure_setpoint' + building_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 7.472401 + building_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 0.000000 + + # measurement 2 cooling_percentage_command + cooling_percentage_command_normalizer/set_observation_normalization_constants.field_id = 'cooling_percentage_command' + cooling_percentage_command_normalizer/set_observation_normalization_constants.sample_mean = 9.658281 + cooling_percentage_command_normalizer/set_observation_normalization_constants.sample_variance = 295.833612 + + # measurement 3 differential_pressure_sensor + differential_pressure_sensor_normalizer/set_observation_normalization_constants.field_id = 'differential_pressure_sensor' + differential_pressure_sensor_normalizer/set_observation_normalization_constants.sample_mean = 31611.814379 + differential_pressure_sensor_normalizer/set_observation_normalization_constants.sample_variance = 1844378631.487996 + + # measurement 4 differential_pressure_setpoint + differential_pressure_setpoint_normalizer/set_observation_normalization_constants.field_id = 'differential_pressure_setpoint' + differential_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 83810.269540 + differential_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 14889040.603647 + + # measurement 5 discharge_air_temperature_sensor + discharge_air_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'discharge_air_temperature_sensor' + discharge_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 69.889025 + discharge_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 541.455462 + + # measurement 6 discharge_air_temperature_setpoint + discharge_air_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'discharge_air_temperature_setpoint' + discharge_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 57.665244 + discharge_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 97.254479 + + # measurement 7 exhaust_air_damper_percentage_command + exhaust_air_damper_percentage_command_normalizer/set_observation_normalization_constants.field_id = 'exhaust_air_damper_percentage_command' + exhaust_air_damper_percentage_command_normalizer/set_observation_normalization_constants.sample_mean = 25.000000 + exhaust_air_damper_percentage_command_normalizer/set_observation_normalization_constants.sample_variance = 0.000000 + + # measurement 8 exhaust_air_damper_percentage_sensor + exhaust_air_damper_percentage_sensor_normalizer/set_observation_normalization_constants.field_id = 'exhaust_air_damper_percentage_sensor' + exhaust_air_damper_percentage_sensor_normalizer/set_observation_normalization_constants.sample_mean = 10.680755 + exhaust_air_damper_percentage_sensor_normalizer/set_observation_normalization_constants.sample_variance = 539.207818 + + # measurement 9 exhaust_fan_speed_frequency_sensor + exhaust_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants.field_id = 'exhaust_fan_speed_frequency_sensor' + exhaust_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants.sample_mean = 4.273057 + exhaust_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants.sample_variance = 138.559759 + + # measurement 10 exhaust_fan_speed_percentage_command + exhaust_fan_speed_percentage_command_normalizer/set_observation_normalization_constants.field_id = 'exhaust_fan_speed_percentage_command' + exhaust_fan_speed_percentage_command_normalizer/set_observation_normalization_constants.sample_mean = 7.121761 + exhaust_fan_speed_percentage_command_normalizer/set_observation_normalization_constants.sample_variance = 384.888218 + + # measurement 11 heating_water_valve_percentage_command + heating_water_valve_percentage_command_normalizer/set_observation_normalization_constants.field_id = 'heating_water_valve_percentage_command' + heating_water_valve_percentage_command_normalizer/set_observation_normalization_constants.sample_mean = 3.105189 + heating_water_valve_percentage_command_normalizer/set_observation_normalization_constants.sample_variance = 202.006249 + + # measurement 12 mixed_air_temperature_sensor + mixed_air_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'mixed_air_temperature_sensor' + mixed_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 293.718710 + mixed_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 12.517696 + + # measurement 13 mixed_air_temperature_setpoint + mixed_air_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'mixed_air_temperature_setpoint' + mixed_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 288.218302 + mixed_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 3.186768 + + # measurement 14 outside_air_damper_percentage_command + outside_air_damper_percentage_command_normalizer/set_observation_normalization_constants.field_id = 'outside_air_damper_percentage_command' + outside_air_damper_percentage_command_normalizer/set_observation_normalization_constants.sample_mean = 34.504101 + outside_air_damper_percentage_command_normalizer/set_observation_normalization_constants.sample_variance = 2053.149002 + + # measurement 15 outside_air_dewpoint_temperature_sensor + outside_air_dewpoint_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'outside_air_dewpoint_temperature_sensor' + outside_air_dewpoint_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 285.774428 + outside_air_dewpoint_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 2.504610 + + # measurement 16 outside_air_flowrate_sensor + outside_air_flowrate_sensor_normalizer/set_observation_normalization_constants.field_id = 'outside_air_flowrate_sensor' + outside_air_flowrate_sensor_normalizer/set_observation_normalization_constants.sample_mean = 3.701930 + outside_air_flowrate_sensor_normalizer/set_observation_normalization_constants.sample_variance = 20.300565 + + # measurement 17 outside_air_flowrate_setpoint + outside_air_flowrate_setpoint_normalizer/set_observation_normalization_constants.field_id = 'outside_air_flowrate_setpoint' + outside_air_flowrate_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 8.730134 + outside_air_flowrate_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 0.240364 + + # measurement 18 outside_air_relative_humidity_sensor + outside_air_relative_humidity_sensor_normalizer/set_observation_normalization_constants.field_id = 'outside_air_relative_humidity_sensor' + outside_air_relative_humidity_sensor_normalizer/set_observation_normalization_constants.sample_mean = 71.799372 + outside_air_relative_humidity_sensor_normalizer/set_observation_normalization_constants.sample_variance = 172.388773 + + # measurement 19 outside_air_specificenthalpy_sensor + outside_air_specificenthalpy_sensor_normalizer/set_observation_normalization_constants.field_id = 'outside_air_specificenthalpy_sensor' + outside_air_specificenthalpy_sensor_normalizer/set_observation_normalization_constants.sample_mean = 60711.656343 + outside_air_specificenthalpy_sensor_normalizer/set_observation_normalization_constants.sample_variance = 25491060.173822 + + # measurement 20 outside_air_temperature_sensor + outside_air_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'outside_air_temperature_sensor' + outside_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 291.244931 + outside_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 12.904175 + + # measurement 21 outside_air_wetbulb_temperature_sensor + outside_air_wetbulb_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'outside_air_wetbulb_temperature_sensor' + outside_air_wetbulb_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 287.709943 + outside_air_wetbulb_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 3.594260 + + # measurement 22 program_differential_pressure_setpoint + program_differential_pressure_setpoint_normalizer/set_observation_normalization_constants.field_id = 'program_differential_pressure_setpoint' + program_differential_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 83808.578375 + program_differential_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 14897544.664858 + + # measurement 23 program_supply_air_static_pressure_setpoint + program_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.field_id = 'program_supply_air_static_pressure_setpoint' + program_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 163.396282 + program_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 1092.073231 + + # measurement 24 program_supply_air_temperature_setpoint + program_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'program_supply_air_temperature_setpoint' + program_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 289.490004 + program_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 2.854515 + + # measurement 25 program_supply_water_temperature_setpoint + program_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'program_supply_water_temperature_setpoint' + program_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 341.467705 + program_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 74.961483 + + # measurement 26 return_air_temperature_sensor + return_air_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'return_air_temperature_sensor' + return_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 295.602164 + return_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 11.309930 + + # measurement 27 return_water_temperature_sensor + return_water_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'return_water_temperature_sensor' + return_water_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 326.219913 + return_water_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 497.847788 + + # measurement 28 run_status + run_status_normalizer/set_observation_normalization_constants.field_id = 'run_status' + run_status_normalizer/set_observation_normalization_constants.sample_mean = -0.638340 + run_status_normalizer/set_observation_normalization_constants.sample_variance = 0.592523 + + # measurement 29 speed_frequency_sensor + speed_frequency_sensor_normalizer/set_observation_normalization_constants.field_id = 'speed_frequency_sensor' + speed_frequency_sensor_normalizer/set_observation_normalization_constants.sample_mean = 7.003487 + speed_frequency_sensor_normalizer/set_observation_normalization_constants.sample_variance = 227.751249 + + # measurement 30 speed_percentage_command + speed_percentage_command_normalizer/set_observation_normalization_constants.field_id = 'speed_percentage_command' + speed_percentage_command_normalizer/set_observation_normalization_constants.sample_mean = 11.330966 + speed_percentage_command_normalizer/set_observation_normalization_constants.sample_variance = 602.718159 + + # measurement 31 supervisor_supply_air_static_pressure_setpoint + supervisor_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.field_id = 'supervisor_supply_air_static_pressure_setpoint' + supervisor_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 179.409052 + supervisor_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 352.049768 + + # measurement 32 supervisor_supply_air_temperature_setpoint + supervisor_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'supervisor_supply_air_temperature_setpoint' + supervisor_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 290.2 + supervisor_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 9.66245 + + # measurement 33 supervisor_supply_water_temperature_setpoint + supervisor_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'supervisor_supply_water_temperature_setpoint' + supervisor_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 332.164444 + supervisor_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 1.534112 + + + # measurement 35 supply_air_flowrate_sensor + supply_air_flowrate_sensor_normalizer/set_observation_normalization_constants.field_id = 'supply_air_flowrate_sensor' + supply_air_flowrate_sensor_normalizer/set_observation_normalization_constants.sample_mean = 177.520026 + supply_air_flowrate_sensor_normalizer/set_observation_normalization_constants.sample_variance = 50499.153481 + + # measurement 37 supply_air_static_pressure_sensor + supply_air_static_pressure_sensor_normalizer/set_observation_normalization_constants.field_id = 'supply_air_static_pressure_sensor' + supply_air_static_pressure_sensor_normalizer/set_observation_normalization_constants.sample_mean = 128.527912 + supply_air_static_pressure_sensor_normalizer/set_observation_normalization_constants.sample_variance = 6679.599175 + + # measurement 38 supply_air_static_pressure_setpoint + supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.field_id = 'supply_air_static_pressure_setpoint' + supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 181.307432 + supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 361.757966 + + # measurement 39 supply_air_temperature_sensor + supply_air_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'supply_air_temperature_sensor' + supply_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 289.737939 + supply_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 6.265837 + + # measurement 40 supply_air_temperature_setpoint + supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'supply_air_temperature_setpoint' + supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 289.329414 + supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 3.186769 + + # measurement 41 supply_fan_run_status + supply_fan_run_status_normalizer/set_observation_normalization_constants.field_id = 'supply_fan_run_status' + supply_fan_run_status_normalizer/set_observation_normalization_constants.sample_mean = 0.439849 + supply_fan_run_status_normalizer/set_observation_normalization_constants.sample_variance = 0.806533 + + # measurement 42 supply_fan_speed_frequency_sensor + supply_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants.field_id = 'supply_fan_speed_frequency_sensor' + supply_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants.sample_mean = 15.926249 + supply_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants.sample_variance = 207.034194 + + # measurement 43 supply_fan_speed_percentage_command + supply_fan_speed_percentage_command_normalizer/set_observation_normalization_constants.field_id = 'supply_fan_speed_percentage_command' + supply_fan_speed_percentage_command_normalizer/set_observation_normalization_constants.sample_mean = 26.543748 + supply_fan_speed_percentage_command_normalizer/set_observation_normalization_constants.sample_variance = 575.094979 + + # measurement 44 supply_water_temperature_sensor + supply_water_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'supply_water_temperature_sensor' + supply_water_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 321.520315 + supply_water_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 658.413066 + + # measurement 45 supply_water_temperature_setpoint + supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'supply_water_temperature_setpoint' + supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 320.261985 + supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 240.195517 + + # measurement 46 zone_air_co2_concentration_sensor + zone_air_co2_concentration_sensor_normalizer/set_observation_normalization_constants.field_id = 'zone_air_co2_concentration_sensor' + zone_air_co2_concentration_sensor_normalizer/set_observation_normalization_constants.sample_mean = 432.092062 + zone_air_co2_concentration_sensor_normalizer/set_observation_normalization_constants.sample_variance = 962.903840 + + # measurement 47 zone_air_co2_concentration_setpoint + zone_air_co2_concentration_setpoint_normalizer/set_observation_normalization_constants.field_id = 'zone_air_co2_concentration_setpoint' + zone_air_co2_concentration_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 739.337708 + zone_air_co2_concentration_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 3618.117781 + + # measurement 48 zone_air_cooling_temperature_setpoint + zone_air_cooling_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'zone_air_cooling_temperature_setpoint' + zone_air_cooling_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 82.084227 + zone_air_cooling_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 402.158853 + + # measurement 49 zone_air_heating_temperature_setpoint + zone_air_heating_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'zone_air_heating_temperature_setpoint' + zone_air_heating_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 64.231868 + zone_air_heating_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 24.461668 + + # measurement 50 zone_air_temperature_sensor + zone_air_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'zone_air_temperature_sensor' + zone_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 190 + zone_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 408.113303 + + supervisor_run_command_normalizer/set_observation_normalization_constants.field_id = 'supervisor_run_command' + supervisor_run_command_normalizer/set_observation_normalization_constants.sample_mean = 0 + supervisor_run_command_normalizer/set_observation_normalization_constants.sample_variance = 1.0 + + observation_normalizer_map = { + 'building_air_static_pressure_sensor' : @building_air_static_pressure_sensor_normalizer/set_observation_normalization_constants(), + 'building_air_static_pressure_setpoint' : @building_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants(), + 'cooling_percentage_command' : @cooling_percentage_command_normalizer/set_observation_normalization_constants(), + 'differential_pressure_sensor' : @differential_pressure_sensor_normalizer/set_observation_normalization_constants(), + 'differential_pressure_setpoint' : @differential_pressure_setpoint_normalizer/set_observation_normalization_constants(), + 'discharge_air_temperature_sensor' : @discharge_air_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'discharge_air_temperature_setpoint' : @discharge_air_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'exhaust_air_damper_percentage_command' : @exhaust_air_damper_percentage_command_normalizer/set_observation_normalization_constants(), + 'exhaust_air_damper_percentage_sensor' : @exhaust_air_damper_percentage_sensor_normalizer/set_observation_normalization_constants(), + 'exhaust_fan_speed_frequency_sensor' : @exhaust_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants(), + 'exhaust_fan_speed_percentage_command' : @exhaust_fan_speed_percentage_command_normalizer/set_observation_normalization_constants(), + 'heating_water_valve_percentage_command' : @heating_water_valve_percentage_command_normalizer/set_observation_normalization_constants(), + 'mixed_air_temperature_sensor' : @mixed_air_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'mixed_air_temperature_setpoint' : @mixed_air_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'outside_air_damper_percentage_command' : @outside_air_damper_percentage_command_normalizer/set_observation_normalization_constants(), + 'outside_air_dewpoint_temperature_sensor' : @outside_air_dewpoint_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'outside_air_flowrate_sensor' : @outside_air_flowrate_sensor_normalizer/set_observation_normalization_constants(), + 'outside_air_flowrate_setpoint' : @outside_air_flowrate_setpoint_normalizer/set_observation_normalization_constants(), + 'outside_air_relative_humidity_sensor' : @outside_air_relative_humidity_sensor_normalizer/set_observation_normalization_constants(), + 'outside_air_specificenthalpy_sensor' : @outside_air_specificenthalpy_sensor_normalizer/set_observation_normalization_constants(), + 'outside_air_temperature_sensor' : @outside_air_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'outside_air_wetbulb_temperature_sensor' : @outside_air_wetbulb_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'program_differential_pressure_setpoint' : @program_differential_pressure_setpoint_normalizer/set_observation_normalization_constants(), + 'program_supply_air_static_pressure_setpoint' : @program_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants(), + 'program_supply_air_temperature_setpoint' : @program_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'program_supply_water_temperature_setpoint' : @program_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'return_air_temperature_sensor' : @return_air_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'return_water_temperature_sensor' : @return_water_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'run_status' : @run_status_normalizer/set_observation_normalization_constants(), + 'speed_frequency_sensor' : @speed_frequency_sensor_normalizer/set_observation_normalization_constants(), + 'speed_percentage_command' : @speed_percentage_command_normalizer/set_observation_normalization_constants(), + 'supervisor_supply_air_static_pressure_setpoint' : @supervisor_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants(), + 'supervisor_supply_air_temperature_setpoint' : @supervisor_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'supervisor_supply_water_temperature_setpoint' : @supervisor_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'supply_air_static_pressure_sensor' : @supply_air_static_pressure_sensor_normalizer/set_observation_normalization_constants(), + 'supply_air_static_pressure_setpoint' : @supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants(), + 'supply_air_temperature_sensor' : @supply_air_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'supply_air_temperature_setpoint' : @supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'supply_air_cooling_temperature_setpoint' : @supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'supply_air_heating_temperature_setpoint' : @supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants(), + + 'supply_fan_run_status' : @supply_fan_run_status_normalizer/set_observation_normalization_constants(), + 'supply_fan_speed_frequency_sensor' : @supply_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants(), + 'supply_fan_speed_percentage_command' : @supply_fan_speed_percentage_command_normalizer/set_observation_normalization_constants(), + 'supply_water_temperature_sensor' : @supply_water_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'supply_water_setpoint' : @supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'zone_air_co2_concentration_sensor' : @zone_air_co2_concentration_sensor_normalizer/set_observation_normalization_constants(), + 'zone_air_co2_concentration_setpoint' : @zone_air_co2_concentration_setpoint_normalizer/set_observation_normalization_constants(), + 'zone_air_cooling_temperature_setpoint' : @zone_air_cooling_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'zone_air_heating_temperature_setpoint' : @zone_air_heating_temperature_setpoint_normalizer/set_observation_normalization_constants(), + + 'cooling_request_count': @request_count_observation_normalizer/set_observation_normalization_constants(), + } + + StandardScoreObservationNormalizer: + normalization_constants = %observation_normalizer_map + + + histogram_parameters_tuples = ( + ('zone_air_temperature_sensor',(285., 286., 287., 288, 289., 290., 291., 292., 293., 294., 295., 296., 297., 298., 299., 300.,301,302,303)), + ('supply_air_damper_percentage_command',(0.0, 0.2, 0.4, 0.6, 0.8, 1.0)), + ('supply_air_flowrate_setpoint',( 0., 0.05, .1, .2, .3, .4, .5, .7, .9)), + ) + + # Top-level Environment parameters + discount_factor = 0.9 + num_days_in_episode=14 + metrics_reporting_interval=10 + label='tunable_simulator_sb1' + num_hod_features = 1 + num_dow_features = 1 + + Environment.building = @SimulatorBuilding() + Environment.reward_function = @SetpointEnergyCarbonRegretFunction() + Environment.observation_normalizer = @StandardScoreObservationNormalizer() + Environment.action_config = @ActionConfig() + Environment.metrics_reporting_interval = %metrics_reporting_interval + + Environment.discount_factor = %discount_factor + Environment.metrics_path = %metrics_path + Environment.label = %label + Environment.num_days_in_episode= %num_days_in_episode + Environment.default_actions = %default_actions + Environment.num_hod_features = %num_hod_features + Environment.num_dow_features = %num_dow_features + Environment.writer_factory =@controller_writer.ProtoWriterFactory() + Environment.observation_histogram_reducer = @get_histogram_reducer() diff --git a/smart_control/configs/resources/sb1/test_sim_configs/sim_config_2023_11_02_0700.gin b/smart_control/configs/resources/sb1/test_sim_configs/sim_config_2023_11_02_0700.gin new file mode 100644 index 00000000..d88de80c --- /dev/null +++ b/smart_control/configs/resources/sb1/test_sim_configs/sim_config_2023_11_02_0700.gin @@ -0,0 +1,614 @@ +# Copyright 2024 Google LLC + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at + +# https://www.apache.org/licenses/LICENSE-2.0 + +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + # paths + controller_reader.ProtoReader.input_dir = @get_histogram_path() + floor_plan_filepath = @get_zone_path() + zone_map_filepath = @get_zone_path() + metrics_path = @get_metrics_path() + + # Weather conditions simulation + # W/m2/K + convection_coefficient = 100.0 + # Models the variable temperature as a sinusoid bounded by + # high and low temps, where minima occur at midnights and + # maxima occur at noon. + # K + ambient_high_temp = 283.0 + ambient_low_temp = 273.0 + + ReplayWeatherController.local_weather_path= @get_weather_path() + ReplayWeatherController.convection_coefficient = %convection_coefficient + + weather_controller = @ReplayWeatherController() + + # shuffle parameters + StochasticConvectionSimulator.p = 1.0 + StochasticConvectionSimulator.distance = 5 + StochasticConvectionSimulator.seed = 5 + + # Dimensional parameters of the Building + control_volume_cm = 10 + floor_height_cm = 300.0 + + # Thermal properties of the Building + # Thermal properties of the exterior building. + # W/m/K + exterior_cv_conductivity = 0.05 + # kg/m3 + exterior_cv_density = 1.0 + # J/Kg/K + exterior_cv_heat_capacity = 700.0 + + # Thermal properties of the interior walls. + interior_wall_cv_conductivity = 50.0 + # kg/m3 + interior_wall_cv_density = 1.0 + # J/Kg/K + interior_wall_cv_heat_capacity = 700.0 + + # Thermal properties of the "air" in the thermal zones. + # W/m/K + interior_cv_conductivity = 50.0 + # kg/m3 + interior_cv_density = 1.0 + # J/Kg/K + interior_cv_heat_capacity = 700.0 + + # Defines the initial uniform interior temp. + # K + initial_temp = 294.0 + + inside_air_properties/MaterialProperties: + conductivity = %interior_cv_conductivity + heat_capacity = %interior_cv_heat_capacity + density = %interior_cv_density + + inside_wall_properties/MaterialProperties: + conductivity = %interior_wall_cv_conductivity + heat_capacity = %interior_wall_cv_density + density = %interior_wall_cv_heat_capacity + + building_exterior_properties/MaterialProperties: + conductivity = %exterior_cv_conductivity + heat_capacity = %exterior_cv_heat_capacity + density = %exterior_cv_density + + sim/FloorPlanBasedBuilding: + cv_size_cm = %control_volume_cm + floor_height_cm = %floor_height_cm + initial_temp = %initial_temp + inside_air_properties = @inside_air_properties/MaterialProperties() + inside_wall_properties = @inside_wall_properties/MaterialProperties() + building_exterior_properties = @building_exterior_properties/MaterialProperties() + floor_plan_filepath = %floor_plan_filepath + zone_map_filepath = %zone_map_filepath + convection_simulator = @StochasticConvectionSimulator() + reset_temp_values = @get_reset_temp_values() + + # HVAC heating/cooling schedule + morning_start_hour = 6 + evening_start_hour = 19 + heating_setpoint_day = 294 + cooling_setpoint_day = 297 + heating_setpoint_night = 289 + cooling_setpoint_night = 298 + time_zone="US/Pacific" + + + hvac/SetpointSchedule: + morning_start_hour = %morning_start_hour + evening_start_hour = %evening_start_hour + comfort_temp_window = (%heating_setpoint_day, %cooling_setpoint_day) + eco_temp_window = (%heating_setpoint_night, %cooling_setpoint_night) + time_zone = %time_zone + + # HVAC Device Models and Configs + water_pump_differential_head = 6.0 + water_pump_efficiency = 0.98 + reheat_water_setpoint = 360.0 + boiler_heating_rate = 0.5 # K / min + boiler_cooling_rate = 0.1 # K / min + + # Pa or N/M2 + fan_differential_pressure = 10000.0 + fan_efficiency = 0.9 + + air_handler_heating_setpoint = 285.0 + air_handler_cooling_setpoint = 298.0 + # Percentage of fresh air in the recirculation. + air_handler_recirculation_ratio = 0.3 + + vav_max_air_flowrate = 0.035 + vav_reheat_water_flowrate = 0.03 + + hvac/AirHandler: + recirculation = %air_handler_recirculation_ratio + heating_air_temp_setpoint = %air_handler_heating_setpoint + cooling_air_temp_setpoint = %air_handler_cooling_setpoint + fan_differential_pressure = %fan_differential_pressure + fan_efficiency = %fan_efficiency + max_air_flow_rate = 8.67 + sim_weather_controller = %weather_controller + + hvac/Boiler: + reheat_water_setpoint = %reheat_water_setpoint + water_pump_differential_head = %water_pump_differential_head + water_pump_efficiency = %water_pump_efficiency + heating_rate = %boiler_heating_rate + cooling_rate = %boiler_cooling_rate + + sim/FloorPlanBasedHvac: + air_handler = @hvac/AirHandler() + boiler = @hvac/Boiler() + schedule = @hvac/SetpointSchedule() + vav_max_air_flow_rate = %vav_max_air_flowrate + vav_reheat_max_water_flow_rate = %vav_reheat_water_flowrate + + # Finite difference settings. + time_step_sec = 300 + convergence_threshold = 0.1 + iteration_limit = 100 + iteration_warning = 30 + start_timestamp = '2023-11-02 07:00:00+00:00' + + sim/to_timestamp.date_str = %start_timestamp + + sim_building/TFSimulator: + building = @sim/FloorPlanBasedBuilding() + hvac = @sim/FloorPlanBasedHvac() + weather_controller = %weather_controller + time_step_sec = %time_step_sec + convergence_threshold = %convergence_threshold + iteration_limit = %iteration_limit + iteration_warning = %iteration_warning + start_timestamp = @sim/to_timestamp() + + + work_occupancy = 1 + nonwork_occupancy = 0.1 + occupancy_start/local_time.time_str = %occupancy_start_time + occupancy_end/local_time.time_str = %occupancy_end_time + + + randomized_occupancy/RandomizedArrivalDepartureOccupancy: + zone_assignment = %work_occupancy + earliest_expected_arrival_hour = 7 + latest_expected_arrival_hour = 12 + earliest_expected_departure_hour = 13 + latest_expected_departure_hour = 18 + time_step_sec = %time_step_sec + time_zone = %time_zone + + + SimulatorBuilding.simulator = @sim_building/TFSimulator() + SimulatorBuilding.occupancy = @randomized_occupancy/RandomizedArrivalDepartureOccupancy() + + + # Reward Parameters taken from 3C reward function documented + # Average productivity per person in USD + max_productivity_personhour_usd = 300.00 + min_productivity_personhour_usd = 100.00 + productivity_midpoint_delta = 0.5 + productivity_decay_stiffness = 4.3 + + max_electricity_rate=160000 + max_natural_gas_rate=400000 + + # lowered productivity weight to force a lower water temp + # during occupied intervals + productivity_weight=0.2 + energy_cost_weight=0.4 + carbon_emission_weight=0.4 + + SetpointEnergyCarbonRegretFunction.max_productivity_personhour_usd = %max_productivity_personhour_usd + SetpointEnergyCarbonRegretFunction.min_productivity_personhour_usd = %min_productivity_personhour_usd + SetpointEnergyCarbonRegretFunction.max_electricity_rate = %max_electricity_rate + SetpointEnergyCarbonRegretFunction.max_natural_gas_rate = %max_natural_gas_rate + SetpointEnergyCarbonRegretFunction.productivity_decay_stiffness = %productivity_decay_stiffness + SetpointEnergyCarbonRegretFunction.productivity_midpoint_delta = %productivity_midpoint_delta + SetpointEnergyCarbonRegretFunction.electricity_energy_cost = @ElectricityEnergyCost() + SetpointEnergyCarbonRegretFunction.natural_gas_energy_cost = @NaturalGasEnergyCost() + SetpointEnergyCarbonRegretFunction.productivity_weight = %productivity_weight + SetpointEnergyCarbonRegretFunction.energy_cost_weight= %energy_cost_weight + SetpointEnergyCarbonRegretFunction.carbon_emission_weight = %carbon_emission_weight + + + # Action Normalization Parameters -> edited to match real building + supply_water_bounded_action_normalizer/set_action_normalization_constants.min_normalized_value = -1. + supply_water_bounded_action_normalizer/set_action_normalization_constants.max_normalized_value = 1.0 + supply_water_bounded_action_normalizer/set_action_normalization_constants.min_native_value = 310 + supply_water_bounded_action_normalizer/set_action_normalization_constants.max_native_value = 355.0 + + supply_air_heating_temperature_setpoint/set_action_normalization_constants.min_normalized_value = -1. + supply_air_heating_temperature_setpoint/set_action_normalization_constants.max_normalized_value = 1. + supply_air_heating_temperature_setpoint/set_action_normalization_constants.min_native_value = 285 + supply_air_heating_temperature_setpoint/set_action_normalization_constants.max_native_value = 300.0 + + action_normalizer_map = { + 'supply_water_setpoint': @supply_water_bounded_action_normalizer/set_action_normalization_constants(), + 'supply_air_heating_temperature_setpoint': @supply_air_heating_temperature_setpoint/set_action_normalization_constants() + } + ActionConfig: + action_normalizers = %action_normalizer_map + + default_actions = { + 'supply_water_setpoint': 340.0, + 'supply_air_cooling_temperature_setpoint': 300.0, + 'supply_air_heating_temperature_setpoint': 285.0 + } + + # Observation Normalization Parameters + temperature_observation_normalizer/set_observation_normalization_constants.field_id = 'temperature' + temperature_observation_normalizer/set_observation_normalization_constants.sample_mean = 310.0 + temperature_observation_normalizer/set_observation_normalization_constants.sample_variance = 2500.0 + + supply_water_setpoint_observation_normalizer/set_observation_normalization_constants.field_id = 'supply_water_setpoint' + supply_water_setpoint_observation_normalizer/set_observation_normalization_constants.sample_mean = 310.0 + supply_water_setpoint_observation_normalizer/set_observation_normalization_constants.sample_variance = 2500.0 + + air_flowrate_observation_normalizer/set_observation_normalization_constants.field_id = 'air_flowrate' + air_flowrate_observation_normalizer/set_observation_normalization_constants.sample_mean = 0.5 + air_flowrate_observation_normalizer/set_observation_normalization_constants.sample_variance = 4.0 + + differential_pressure_observation_normalizer/set_observation_normalization_constants.field_id = 'differential_pressure' + differential_pressure_observation_normalizer/set_observation_normalization_constants.sample_mean = 10000.0 + differential_pressure_observation_normalizer/set_observation_normalization_constants.sample_variance = 100000.0 + + percentage_observation_normalizer/set_observation_normalization_constants.field_id = 'percentage' + percentage_observation_normalizer/set_observation_normalization_constants.sample_mean = 0.50 + percentage_observation_normalizer/set_observation_normalization_constants.sample_variance = 1.0 + + request_count_observation_normalizer/set_observation_normalization_constants.field_id = 'request_count' + request_count_observation_normalizer/set_observation_normalization_constants.sample_mean = 100.0 + request_count_observation_normalizer/set_observation_normalization_constants.sample_variance = 25.0 + + # measurement 0 building_air_static_pressure_sensor + building_air_static_pressure_sensor_normalizer/set_observation_normalization_constants.field_id = 'building_air_static_pressure_sensor' + building_air_static_pressure_sensor_normalizer/set_observation_normalization_constants.sample_mean = 3.779228 + building_air_static_pressure_sensor_normalizer/set_observation_normalization_constants.sample_variance = 14.599437 + + # measurement 1 building_air_static_pressure_setpoint + building_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.field_id = 'building_air_static_pressure_setpoint' + building_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 7.472401 + building_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 0.000000 + + # measurement 2 cooling_percentage_command + cooling_percentage_command_normalizer/set_observation_normalization_constants.field_id = 'cooling_percentage_command' + cooling_percentage_command_normalizer/set_observation_normalization_constants.sample_mean = 9.658281 + cooling_percentage_command_normalizer/set_observation_normalization_constants.sample_variance = 295.833612 + + # measurement 3 differential_pressure_sensor + differential_pressure_sensor_normalizer/set_observation_normalization_constants.field_id = 'differential_pressure_sensor' + differential_pressure_sensor_normalizer/set_observation_normalization_constants.sample_mean = 31611.814379 + differential_pressure_sensor_normalizer/set_observation_normalization_constants.sample_variance = 1844378631.487996 + + # measurement 4 differential_pressure_setpoint + differential_pressure_setpoint_normalizer/set_observation_normalization_constants.field_id = 'differential_pressure_setpoint' + differential_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 83810.269540 + differential_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 14889040.603647 + + # measurement 5 discharge_air_temperature_sensor + discharge_air_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'discharge_air_temperature_sensor' + discharge_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 69.889025 + discharge_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 541.455462 + + # measurement 6 discharge_air_temperature_setpoint + discharge_air_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'discharge_air_temperature_setpoint' + discharge_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 57.665244 + discharge_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 97.254479 + + # measurement 7 exhaust_air_damper_percentage_command + exhaust_air_damper_percentage_command_normalizer/set_observation_normalization_constants.field_id = 'exhaust_air_damper_percentage_command' + exhaust_air_damper_percentage_command_normalizer/set_observation_normalization_constants.sample_mean = 25.000000 + exhaust_air_damper_percentage_command_normalizer/set_observation_normalization_constants.sample_variance = 0.000000 + + # measurement 8 exhaust_air_damper_percentage_sensor + exhaust_air_damper_percentage_sensor_normalizer/set_observation_normalization_constants.field_id = 'exhaust_air_damper_percentage_sensor' + exhaust_air_damper_percentage_sensor_normalizer/set_observation_normalization_constants.sample_mean = 10.680755 + exhaust_air_damper_percentage_sensor_normalizer/set_observation_normalization_constants.sample_variance = 539.207818 + + # measurement 9 exhaust_fan_speed_frequency_sensor + exhaust_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants.field_id = 'exhaust_fan_speed_frequency_sensor' + exhaust_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants.sample_mean = 4.273057 + exhaust_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants.sample_variance = 138.559759 + + # measurement 10 exhaust_fan_speed_percentage_command + exhaust_fan_speed_percentage_command_normalizer/set_observation_normalization_constants.field_id = 'exhaust_fan_speed_percentage_command' + exhaust_fan_speed_percentage_command_normalizer/set_observation_normalization_constants.sample_mean = 7.121761 + exhaust_fan_speed_percentage_command_normalizer/set_observation_normalization_constants.sample_variance = 384.888218 + + # measurement 11 heating_water_valve_percentage_command + heating_water_valve_percentage_command_normalizer/set_observation_normalization_constants.field_id = 'heating_water_valve_percentage_command' + heating_water_valve_percentage_command_normalizer/set_observation_normalization_constants.sample_mean = 3.105189 + heating_water_valve_percentage_command_normalizer/set_observation_normalization_constants.sample_variance = 202.006249 + + # measurement 12 mixed_air_temperature_sensor + mixed_air_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'mixed_air_temperature_sensor' + mixed_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 293.718710 + mixed_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 12.517696 + + # measurement 13 mixed_air_temperature_setpoint + mixed_air_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'mixed_air_temperature_setpoint' + mixed_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 288.218302 + mixed_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 3.186768 + + # measurement 14 outside_air_damper_percentage_command + outside_air_damper_percentage_command_normalizer/set_observation_normalization_constants.field_id = 'outside_air_damper_percentage_command' + outside_air_damper_percentage_command_normalizer/set_observation_normalization_constants.sample_mean = 34.504101 + outside_air_damper_percentage_command_normalizer/set_observation_normalization_constants.sample_variance = 2053.149002 + + # measurement 15 outside_air_dewpoint_temperature_sensor + outside_air_dewpoint_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'outside_air_dewpoint_temperature_sensor' + outside_air_dewpoint_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 285.774428 + outside_air_dewpoint_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 2.504610 + + # measurement 16 outside_air_flowrate_sensor + outside_air_flowrate_sensor_normalizer/set_observation_normalization_constants.field_id = 'outside_air_flowrate_sensor' + outside_air_flowrate_sensor_normalizer/set_observation_normalization_constants.sample_mean = 3.701930 + outside_air_flowrate_sensor_normalizer/set_observation_normalization_constants.sample_variance = 20.300565 + + # measurement 17 outside_air_flowrate_setpoint + outside_air_flowrate_setpoint_normalizer/set_observation_normalization_constants.field_id = 'outside_air_flowrate_setpoint' + outside_air_flowrate_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 8.730134 + outside_air_flowrate_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 0.240364 + + # measurement 18 outside_air_relative_humidity_sensor + outside_air_relative_humidity_sensor_normalizer/set_observation_normalization_constants.field_id = 'outside_air_relative_humidity_sensor' + outside_air_relative_humidity_sensor_normalizer/set_observation_normalization_constants.sample_mean = 71.799372 + outside_air_relative_humidity_sensor_normalizer/set_observation_normalization_constants.sample_variance = 172.388773 + + # measurement 19 outside_air_specificenthalpy_sensor + outside_air_specificenthalpy_sensor_normalizer/set_observation_normalization_constants.field_id = 'outside_air_specificenthalpy_sensor' + outside_air_specificenthalpy_sensor_normalizer/set_observation_normalization_constants.sample_mean = 60711.656343 + outside_air_specificenthalpy_sensor_normalizer/set_observation_normalization_constants.sample_variance = 25491060.173822 + + # measurement 20 outside_air_temperature_sensor + outside_air_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'outside_air_temperature_sensor' + outside_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 291.244931 + outside_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 12.904175 + + # measurement 21 outside_air_wetbulb_temperature_sensor + outside_air_wetbulb_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'outside_air_wetbulb_temperature_sensor' + outside_air_wetbulb_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 287.709943 + outside_air_wetbulb_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 3.594260 + + # measurement 22 program_differential_pressure_setpoint + program_differential_pressure_setpoint_normalizer/set_observation_normalization_constants.field_id = 'program_differential_pressure_setpoint' + program_differential_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 83808.578375 + program_differential_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 14897544.664858 + + # measurement 23 program_supply_air_static_pressure_setpoint + program_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.field_id = 'program_supply_air_static_pressure_setpoint' + program_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 163.396282 + program_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 1092.073231 + + # measurement 24 program_supply_air_temperature_setpoint + program_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'program_supply_air_temperature_setpoint' + program_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 289.490004 + program_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 2.854515 + + # measurement 25 program_supply_water_temperature_setpoint + program_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'program_supply_water_temperature_setpoint' + program_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 341.467705 + program_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 74.961483 + + # measurement 26 return_air_temperature_sensor + return_air_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'return_air_temperature_sensor' + return_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 295.602164 + return_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 11.309930 + + # measurement 27 return_water_temperature_sensor + return_water_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'return_water_temperature_sensor' + return_water_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 326.219913 + return_water_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 497.847788 + + # measurement 28 run_status + run_status_normalizer/set_observation_normalization_constants.field_id = 'run_status' + run_status_normalizer/set_observation_normalization_constants.sample_mean = -0.638340 + run_status_normalizer/set_observation_normalization_constants.sample_variance = 0.592523 + + # measurement 29 speed_frequency_sensor + speed_frequency_sensor_normalizer/set_observation_normalization_constants.field_id = 'speed_frequency_sensor' + speed_frequency_sensor_normalizer/set_observation_normalization_constants.sample_mean = 7.003487 + speed_frequency_sensor_normalizer/set_observation_normalization_constants.sample_variance = 227.751249 + + # measurement 30 speed_percentage_command + speed_percentage_command_normalizer/set_observation_normalization_constants.field_id = 'speed_percentage_command' + speed_percentage_command_normalizer/set_observation_normalization_constants.sample_mean = 11.330966 + speed_percentage_command_normalizer/set_observation_normalization_constants.sample_variance = 602.718159 + + # measurement 31 supervisor_supply_air_static_pressure_setpoint + supervisor_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.field_id = 'supervisor_supply_air_static_pressure_setpoint' + supervisor_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 179.409052 + supervisor_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 352.049768 + + # measurement 32 supervisor_supply_air_temperature_setpoint + supervisor_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'supervisor_supply_air_temperature_setpoint' + supervisor_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 290.2 + supervisor_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 9.66245 + + # measurement 33 supervisor_supply_water_temperature_setpoint + supervisor_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'supervisor_supply_water_temperature_setpoint' + supervisor_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 332.164444 + supervisor_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 1.534112 + + + # measurement 35 supply_air_flowrate_sensor + supply_air_flowrate_sensor_normalizer/set_observation_normalization_constants.field_id = 'supply_air_flowrate_sensor' + supply_air_flowrate_sensor_normalizer/set_observation_normalization_constants.sample_mean = 177.520026 + supply_air_flowrate_sensor_normalizer/set_observation_normalization_constants.sample_variance = 50499.153481 + + # measurement 37 supply_air_static_pressure_sensor + supply_air_static_pressure_sensor_normalizer/set_observation_normalization_constants.field_id = 'supply_air_static_pressure_sensor' + supply_air_static_pressure_sensor_normalizer/set_observation_normalization_constants.sample_mean = 128.527912 + supply_air_static_pressure_sensor_normalizer/set_observation_normalization_constants.sample_variance = 6679.599175 + + # measurement 38 supply_air_static_pressure_setpoint + supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.field_id = 'supply_air_static_pressure_setpoint' + supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 181.307432 + supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 361.757966 + + # measurement 39 supply_air_temperature_sensor + supply_air_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'supply_air_temperature_sensor' + supply_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 289.737939 + supply_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 6.265837 + + # measurement 40 supply_air_temperature_setpoint + supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'supply_air_temperature_setpoint' + supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 289.329414 + supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 3.186769 + + # measurement 41 supply_fan_run_status + supply_fan_run_status_normalizer/set_observation_normalization_constants.field_id = 'supply_fan_run_status' + supply_fan_run_status_normalizer/set_observation_normalization_constants.sample_mean = 0.439849 + supply_fan_run_status_normalizer/set_observation_normalization_constants.sample_variance = 0.806533 + + # measurement 42 supply_fan_speed_frequency_sensor + supply_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants.field_id = 'supply_fan_speed_frequency_sensor' + supply_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants.sample_mean = 15.926249 + supply_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants.sample_variance = 207.034194 + + # measurement 43 supply_fan_speed_percentage_command + supply_fan_speed_percentage_command_normalizer/set_observation_normalization_constants.field_id = 'supply_fan_speed_percentage_command' + supply_fan_speed_percentage_command_normalizer/set_observation_normalization_constants.sample_mean = 26.543748 + supply_fan_speed_percentage_command_normalizer/set_observation_normalization_constants.sample_variance = 575.094979 + + # measurement 44 supply_water_temperature_sensor + supply_water_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'supply_water_temperature_sensor' + supply_water_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 321.520315 + supply_water_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 658.413066 + + # measurement 45 supply_water_temperature_setpoint + supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'supply_water_temperature_setpoint' + supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 320.261985 + supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 240.195517 + + # measurement 46 zone_air_co2_concentration_sensor + zone_air_co2_concentration_sensor_normalizer/set_observation_normalization_constants.field_id = 'zone_air_co2_concentration_sensor' + zone_air_co2_concentration_sensor_normalizer/set_observation_normalization_constants.sample_mean = 432.092062 + zone_air_co2_concentration_sensor_normalizer/set_observation_normalization_constants.sample_variance = 962.903840 + + # measurement 47 zone_air_co2_concentration_setpoint + zone_air_co2_concentration_setpoint_normalizer/set_observation_normalization_constants.field_id = 'zone_air_co2_concentration_setpoint' + zone_air_co2_concentration_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 739.337708 + zone_air_co2_concentration_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 3618.117781 + + # measurement 48 zone_air_cooling_temperature_setpoint + zone_air_cooling_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'zone_air_cooling_temperature_setpoint' + zone_air_cooling_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 82.084227 + zone_air_cooling_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 402.158853 + + # measurement 49 zone_air_heating_temperature_setpoint + zone_air_heating_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'zone_air_heating_temperature_setpoint' + zone_air_heating_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 64.231868 + zone_air_heating_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 24.461668 + + # measurement 50 zone_air_temperature_sensor + zone_air_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'zone_air_temperature_sensor' + zone_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 190 + zone_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 408.113303 + + supervisor_run_command_normalizer/set_observation_normalization_constants.field_id = 'supervisor_run_command' + supervisor_run_command_normalizer/set_observation_normalization_constants.sample_mean = 0 + supervisor_run_command_normalizer/set_observation_normalization_constants.sample_variance = 1.0 + + observation_normalizer_map = { + 'building_air_static_pressure_sensor' : @building_air_static_pressure_sensor_normalizer/set_observation_normalization_constants(), + 'building_air_static_pressure_setpoint' : @building_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants(), + 'cooling_percentage_command' : @cooling_percentage_command_normalizer/set_observation_normalization_constants(), + 'differential_pressure_sensor' : @differential_pressure_sensor_normalizer/set_observation_normalization_constants(), + 'differential_pressure_setpoint' : @differential_pressure_setpoint_normalizer/set_observation_normalization_constants(), + 'discharge_air_temperature_sensor' : @discharge_air_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'discharge_air_temperature_setpoint' : @discharge_air_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'exhaust_air_damper_percentage_command' : @exhaust_air_damper_percentage_command_normalizer/set_observation_normalization_constants(), + 'exhaust_air_damper_percentage_sensor' : @exhaust_air_damper_percentage_sensor_normalizer/set_observation_normalization_constants(), + 'exhaust_fan_speed_frequency_sensor' : @exhaust_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants(), + 'exhaust_fan_speed_percentage_command' : @exhaust_fan_speed_percentage_command_normalizer/set_observation_normalization_constants(), + 'heating_water_valve_percentage_command' : @heating_water_valve_percentage_command_normalizer/set_observation_normalization_constants(), + 'mixed_air_temperature_sensor' : @mixed_air_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'mixed_air_temperature_setpoint' : @mixed_air_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'outside_air_damper_percentage_command' : @outside_air_damper_percentage_command_normalizer/set_observation_normalization_constants(), + 'outside_air_dewpoint_temperature_sensor' : @outside_air_dewpoint_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'outside_air_flowrate_sensor' : @outside_air_flowrate_sensor_normalizer/set_observation_normalization_constants(), + 'outside_air_flowrate_setpoint' : @outside_air_flowrate_setpoint_normalizer/set_observation_normalization_constants(), + 'outside_air_relative_humidity_sensor' : @outside_air_relative_humidity_sensor_normalizer/set_observation_normalization_constants(), + 'outside_air_specificenthalpy_sensor' : @outside_air_specificenthalpy_sensor_normalizer/set_observation_normalization_constants(), + 'outside_air_temperature_sensor' : @outside_air_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'outside_air_wetbulb_temperature_sensor' : @outside_air_wetbulb_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'program_differential_pressure_setpoint' : @program_differential_pressure_setpoint_normalizer/set_observation_normalization_constants(), + 'program_supply_air_static_pressure_setpoint' : @program_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants(), + 'program_supply_air_temperature_setpoint' : @program_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'program_supply_water_temperature_setpoint' : @program_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'return_air_temperature_sensor' : @return_air_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'return_water_temperature_sensor' : @return_water_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'run_status' : @run_status_normalizer/set_observation_normalization_constants(), + 'speed_frequency_sensor' : @speed_frequency_sensor_normalizer/set_observation_normalization_constants(), + 'speed_percentage_command' : @speed_percentage_command_normalizer/set_observation_normalization_constants(), + 'supervisor_supply_air_static_pressure_setpoint' : @supervisor_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants(), + 'supervisor_supply_air_temperature_setpoint' : @supervisor_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'supervisor_supply_water_temperature_setpoint' : @supervisor_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'supply_air_static_pressure_sensor' : @supply_air_static_pressure_sensor_normalizer/set_observation_normalization_constants(), + 'supply_air_static_pressure_setpoint' : @supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants(), + 'supply_air_temperature_sensor' : @supply_air_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'supply_air_temperature_setpoint' : @supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'supply_air_cooling_temperature_setpoint' : @supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'supply_air_heating_temperature_setpoint' : @supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants(), + + 'supply_fan_run_status' : @supply_fan_run_status_normalizer/set_observation_normalization_constants(), + 'supply_fan_speed_frequency_sensor' : @supply_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants(), + 'supply_fan_speed_percentage_command' : @supply_fan_speed_percentage_command_normalizer/set_observation_normalization_constants(), + 'supply_water_temperature_sensor' : @supply_water_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'supply_water_setpoint' : @supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'zone_air_co2_concentration_sensor' : @zone_air_co2_concentration_sensor_normalizer/set_observation_normalization_constants(), + 'zone_air_co2_concentration_setpoint' : @zone_air_co2_concentration_setpoint_normalizer/set_observation_normalization_constants(), + 'zone_air_cooling_temperature_setpoint' : @zone_air_cooling_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'zone_air_heating_temperature_setpoint' : @zone_air_heating_temperature_setpoint_normalizer/set_observation_normalization_constants(), + + 'cooling_request_count': @request_count_observation_normalizer/set_observation_normalization_constants(), + } + + StandardScoreObservationNormalizer: + normalization_constants = %observation_normalizer_map + + + histogram_parameters_tuples = ( + ('zone_air_temperature_sensor',(285., 286., 287., 288, 289., 290., 291., 292., 293., 294., 295., 296., 297., 298., 299., 300.,301,302,303)), + ('supply_air_damper_percentage_command',(0.0, 0.2, 0.4, 0.6, 0.8, 1.0)), + ('supply_air_flowrate_setpoint',( 0., 0.05, .1, .2, .3, .4, .5, .7, .9)), + ) + + # Top-level Environment parameters + discount_factor = 0.9 + num_days_in_episode=14 + metrics_reporting_interval=10 + label='tunable_simulator_sb1' + num_hod_features = 1 + num_dow_features = 1 + + Environment.building = @SimulatorBuilding() + Environment.reward_function = @SetpointEnergyCarbonRegretFunction() + Environment.observation_normalizer = @StandardScoreObservationNormalizer() + Environment.action_config = @ActionConfig() + Environment.metrics_reporting_interval = %metrics_reporting_interval + + Environment.discount_factor = %discount_factor + Environment.metrics_path = %metrics_path + Environment.label = %label + Environment.num_days_in_episode= %num_days_in_episode + Environment.default_actions = %default_actions + Environment.num_hod_features = %num_hod_features + Environment.num_dow_features = %num_dow_features + Environment.writer_factory =@controller_writer.ProtoWriterFactory() + Environment.observation_histogram_reducer = @get_histogram_reducer() diff --git a/smart_control/configs/resources/sb1/train_sim_configs/sim_config_1_day copy.gin b/smart_control/configs/resources/sb1/train_sim_configs/sim_config_1_day copy.gin new file mode 100644 index 00000000..22e006c4 --- /dev/null +++ b/smart_control/configs/resources/sb1/train_sim_configs/sim_config_1_day copy.gin @@ -0,0 +1,614 @@ +# Copyright 2024 Google LLC + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at + +# https://www.apache.org/licenses/LICENSE-2.0 + +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + # paths + controller_reader.ProtoReader.input_dir = @get_histogram_path() + floor_plan_filepath = @get_zone_path() + zone_map_filepath = @get_zone_path() + metrics_path = @get_metrics_path() + + # Weather conditions simulation + # W/m2/K + convection_coefficient = 100.0 + # Models the variable temperature as a sinusoid bounded by + # high and low temps, where minima occur at midnights and + # maxima occur at noon. + # K + ambient_high_temp = 283.0 + ambient_low_temp = 273.0 + + ReplayWeatherController.local_weather_path= @get_weather_path() + ReplayWeatherController.convection_coefficient = %convection_coefficient + + weather_controller = @ReplayWeatherController() + + # shuffle parameters + StochasticConvectionSimulator.p = 1.0 + StochasticConvectionSimulator.distance = 5 + StochasticConvectionSimulator.seed = 5 + + # Dimensional parameters of the Building + control_volume_cm = 10 + floor_height_cm = 300.0 + + # Thermal properties of the Building + # Thermal properties of the exterior building. + # W/m/K + exterior_cv_conductivity = 0.05 + # kg/m3 + exterior_cv_density = 1.0 + # J/Kg/K + exterior_cv_heat_capacity = 700.0 + + # Thermal properties of the interior walls. + interior_wall_cv_conductivity = 50.0 + # kg/m3 + interior_wall_cv_density = 1.0 + # J/Kg/K + interior_wall_cv_heat_capacity = 700.0 + + # Thermal properties of the "air" in the thermal zones. + # W/m/K + interior_cv_conductivity = 50.0 + # kg/m3 + interior_cv_density = 1.0 + # J/Kg/K + interior_cv_heat_capacity = 700.0 + + # Defines the initial uniform interior temp. + # K + initial_temp = 294.0 + + inside_air_properties/MaterialProperties: + conductivity = %interior_cv_conductivity + heat_capacity = %interior_cv_heat_capacity + density = %interior_cv_density + + inside_wall_properties/MaterialProperties: + conductivity = %interior_wall_cv_conductivity + heat_capacity = %interior_wall_cv_density + density = %interior_wall_cv_heat_capacity + + building_exterior_properties/MaterialProperties: + conductivity = %exterior_cv_conductivity + heat_capacity = %exterior_cv_heat_capacity + density = %exterior_cv_density + + sim/FloorPlanBasedBuilding: + cv_size_cm = %control_volume_cm + floor_height_cm = %floor_height_cm + initial_temp = %initial_temp + inside_air_properties = @inside_air_properties/MaterialProperties() + inside_wall_properties = @inside_wall_properties/MaterialProperties() + building_exterior_properties = @building_exterior_properties/MaterialProperties() + floor_plan_filepath = %floor_plan_filepath + zone_map_filepath = %zone_map_filepath + convection_simulator = @StochasticConvectionSimulator() + reset_temp_values = @get_reset_temp_values() + + # HVAC heating/cooling schedule + morning_start_hour = 6 + evening_start_hour = 19 + heating_setpoint_day = 294 + cooling_setpoint_day = 297 + heating_setpoint_night = 289 + cooling_setpoint_night = 298 + time_zone="US/Pacific" + + + hvac/SetpointSchedule: + morning_start_hour = %morning_start_hour + evening_start_hour = %evening_start_hour + comfort_temp_window = (%heating_setpoint_day, %cooling_setpoint_day) + eco_temp_window = (%heating_setpoint_night, %cooling_setpoint_night) + time_zone = %time_zone + + # HVAC Device Models and Configs + water_pump_differential_head = 6.0 + water_pump_efficiency = 0.98 + reheat_water_setpoint = 360.0 + boiler_heating_rate = 0.5 # K / min + boiler_cooling_rate = 0.1 # K / min + + # Pa or N/M2 + fan_differential_pressure = 10000.0 + fan_efficiency = 0.9 + + air_handler_heating_setpoint = 285.0 + air_handler_cooling_setpoint = 298.0 + # Percentage of fresh air in the recirculation. + air_handler_recirculation_ratio = 0.3 + + vav_max_air_flowrate = 0.035 + vav_reheat_water_flowrate = 0.03 + + hvac/AirHandler: + recirculation = %air_handler_recirculation_ratio + heating_air_temp_setpoint = %air_handler_heating_setpoint + cooling_air_temp_setpoint = %air_handler_cooling_setpoint + fan_differential_pressure = %fan_differential_pressure + fan_efficiency = %fan_efficiency + max_air_flow_rate = 8.67 + sim_weather_controller = %weather_controller + + hvac/Boiler: + reheat_water_setpoint = %reheat_water_setpoint + water_pump_differential_head = %water_pump_differential_head + water_pump_efficiency = %water_pump_efficiency + heating_rate = %boiler_heating_rate + cooling_rate = %boiler_cooling_rate + + sim/FloorPlanBasedHvac: + air_handler = @hvac/AirHandler() + boiler = @hvac/Boiler() + schedule = @hvac/SetpointSchedule() + vav_max_air_flow_rate = %vav_max_air_flowrate + vav_reheat_max_water_flow_rate = %vav_reheat_water_flowrate + + # Finite difference settings. + time_step_sec = 300 + convergence_threshold = 0.1 + iteration_limit = 100 + iteration_warning = 30 + start_timestamp = '2023-07-06 07:00:00+00:00' + + sim/to_timestamp.date_str = %start_timestamp + + sim_building/TFSimulator: + building = @sim/FloorPlanBasedBuilding() + hvac = @sim/FloorPlanBasedHvac() + weather_controller = %weather_controller + time_step_sec = %time_step_sec + convergence_threshold = %convergence_threshold + iteration_limit = %iteration_limit + iteration_warning = %iteration_warning + start_timestamp = @sim/to_timestamp() + + + work_occupancy = 1 + nonwork_occupancy = 0.1 + occupancy_start/local_time.time_str = %occupancy_start_time + occupancy_end/local_time.time_str = %occupancy_end_time + + + randomized_occupancy/RandomizedArrivalDepartureOccupancy: + zone_assignment = %work_occupancy + earliest_expected_arrival_hour = 7 + latest_expected_arrival_hour = 12 + earliest_expected_departure_hour = 13 + latest_expected_departure_hour = 18 + time_step_sec = %time_step_sec + time_zone = %time_zone + + + SimulatorBuilding.simulator = @sim_building/TFSimulator() + SimulatorBuilding.occupancy = @randomized_occupancy/RandomizedArrivalDepartureOccupancy() + + + # Reward Parameters taken from 3C reward function documented + # Average productivity per person in USD + max_productivity_personhour_usd = 300.00 + min_productivity_personhour_usd = 100.00 + productivity_midpoint_delta = 0.5 + productivity_decay_stiffness = 4.3 + + max_electricity_rate=160000 + max_natural_gas_rate=400000 + + # lowered productivity weight to force a lower water temp + # during occupied intervals + productivity_weight=0.2 + energy_cost_weight=0.4 + carbon_emission_weight=0.4 + + SetpointEnergyCarbonRegretFunction.max_productivity_personhour_usd = %max_productivity_personhour_usd + SetpointEnergyCarbonRegretFunction.min_productivity_personhour_usd = %min_productivity_personhour_usd + SetpointEnergyCarbonRegretFunction.max_electricity_rate = %max_electricity_rate + SetpointEnergyCarbonRegretFunction.max_natural_gas_rate = %max_natural_gas_rate + SetpointEnergyCarbonRegretFunction.productivity_decay_stiffness = %productivity_decay_stiffness + SetpointEnergyCarbonRegretFunction.productivity_midpoint_delta = %productivity_midpoint_delta + SetpointEnergyCarbonRegretFunction.electricity_energy_cost = @ElectricityEnergyCost() + SetpointEnergyCarbonRegretFunction.natural_gas_energy_cost = @NaturalGasEnergyCost() + SetpointEnergyCarbonRegretFunction.productivity_weight = %productivity_weight + SetpointEnergyCarbonRegretFunction.energy_cost_weight= %energy_cost_weight + SetpointEnergyCarbonRegretFunction.carbon_emission_weight = %carbon_emission_weight + + + # Action Normalization Parameters -> edited to match real building + supply_water_bounded_action_normalizer/set_action_normalization_constants.min_normalized_value = -1. + supply_water_bounded_action_normalizer/set_action_normalization_constants.max_normalized_value = 1.0 + supply_water_bounded_action_normalizer/set_action_normalization_constants.min_native_value = 310 + supply_water_bounded_action_normalizer/set_action_normalization_constants.max_native_value = 355.0 + + supply_air_heating_temperature_setpoint/set_action_normalization_constants.min_normalized_value = -1. + supply_air_heating_temperature_setpoint/set_action_normalization_constants.max_normalized_value = 1. + supply_air_heating_temperature_setpoint/set_action_normalization_constants.min_native_value = 285 + supply_air_heating_temperature_setpoint/set_action_normalization_constants.max_native_value = 300.0 + + action_normalizer_map = { + 'supply_water_setpoint': @supply_water_bounded_action_normalizer/set_action_normalization_constants(), + 'supply_air_heating_temperature_setpoint': @supply_air_heating_temperature_setpoint/set_action_normalization_constants() + } + ActionConfig: + action_normalizers = %action_normalizer_map + + default_actions = { + 'supply_water_setpoint': 340.0, + 'supply_air_cooling_temperature_setpoint': 300.0, + 'supply_air_heating_temperature_setpoint': 285.0 + } + + # Observation Normalization Parameters + temperature_observation_normalizer/set_observation_normalization_constants.field_id = 'temperature' + temperature_observation_normalizer/set_observation_normalization_constants.sample_mean = 310.0 + temperature_observation_normalizer/set_observation_normalization_constants.sample_variance = 2500.0 + + supply_water_setpoint_observation_normalizer/set_observation_normalization_constants.field_id = 'supply_water_setpoint' + supply_water_setpoint_observation_normalizer/set_observation_normalization_constants.sample_mean = 310.0 + supply_water_setpoint_observation_normalizer/set_observation_normalization_constants.sample_variance = 2500.0 + + air_flowrate_observation_normalizer/set_observation_normalization_constants.field_id = 'air_flowrate' + air_flowrate_observation_normalizer/set_observation_normalization_constants.sample_mean = 0.5 + air_flowrate_observation_normalizer/set_observation_normalization_constants.sample_variance = 4.0 + + differential_pressure_observation_normalizer/set_observation_normalization_constants.field_id = 'differential_pressure' + differential_pressure_observation_normalizer/set_observation_normalization_constants.sample_mean = 10000.0 + differential_pressure_observation_normalizer/set_observation_normalization_constants.sample_variance = 100000.0 + + percentage_observation_normalizer/set_observation_normalization_constants.field_id = 'percentage' + percentage_observation_normalizer/set_observation_normalization_constants.sample_mean = 0.50 + percentage_observation_normalizer/set_observation_normalization_constants.sample_variance = 1.0 + + request_count_observation_normalizer/set_observation_normalization_constants.field_id = 'request_count' + request_count_observation_normalizer/set_observation_normalization_constants.sample_mean = 100.0 + request_count_observation_normalizer/set_observation_normalization_constants.sample_variance = 25.0 + + # measurement 0 building_air_static_pressure_sensor + building_air_static_pressure_sensor_normalizer/set_observation_normalization_constants.field_id = 'building_air_static_pressure_sensor' + building_air_static_pressure_sensor_normalizer/set_observation_normalization_constants.sample_mean = 3.779228 + building_air_static_pressure_sensor_normalizer/set_observation_normalization_constants.sample_variance = 14.599437 + + # measurement 1 building_air_static_pressure_setpoint + building_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.field_id = 'building_air_static_pressure_setpoint' + building_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 7.472401 + building_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 0.000000 + + # measurement 2 cooling_percentage_command + cooling_percentage_command_normalizer/set_observation_normalization_constants.field_id = 'cooling_percentage_command' + cooling_percentage_command_normalizer/set_observation_normalization_constants.sample_mean = 9.658281 + cooling_percentage_command_normalizer/set_observation_normalization_constants.sample_variance = 295.833612 + + # measurement 3 differential_pressure_sensor + differential_pressure_sensor_normalizer/set_observation_normalization_constants.field_id = 'differential_pressure_sensor' + differential_pressure_sensor_normalizer/set_observation_normalization_constants.sample_mean = 31611.814379 + differential_pressure_sensor_normalizer/set_observation_normalization_constants.sample_variance = 1844378631.487996 + + # measurement 4 differential_pressure_setpoint + differential_pressure_setpoint_normalizer/set_observation_normalization_constants.field_id = 'differential_pressure_setpoint' + differential_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 83810.269540 + differential_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 14889040.603647 + + # measurement 5 discharge_air_temperature_sensor + discharge_air_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'discharge_air_temperature_sensor' + discharge_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 69.889025 + discharge_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 541.455462 + + # measurement 6 discharge_air_temperature_setpoint + discharge_air_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'discharge_air_temperature_setpoint' + discharge_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 57.665244 + discharge_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 97.254479 + + # measurement 7 exhaust_air_damper_percentage_command + exhaust_air_damper_percentage_command_normalizer/set_observation_normalization_constants.field_id = 'exhaust_air_damper_percentage_command' + exhaust_air_damper_percentage_command_normalizer/set_observation_normalization_constants.sample_mean = 25.000000 + exhaust_air_damper_percentage_command_normalizer/set_observation_normalization_constants.sample_variance = 0.000000 + + # measurement 8 exhaust_air_damper_percentage_sensor + exhaust_air_damper_percentage_sensor_normalizer/set_observation_normalization_constants.field_id = 'exhaust_air_damper_percentage_sensor' + exhaust_air_damper_percentage_sensor_normalizer/set_observation_normalization_constants.sample_mean = 10.680755 + exhaust_air_damper_percentage_sensor_normalizer/set_observation_normalization_constants.sample_variance = 539.207818 + + # measurement 9 exhaust_fan_speed_frequency_sensor + exhaust_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants.field_id = 'exhaust_fan_speed_frequency_sensor' + exhaust_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants.sample_mean = 4.273057 + exhaust_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants.sample_variance = 138.559759 + + # measurement 10 exhaust_fan_speed_percentage_command + exhaust_fan_speed_percentage_command_normalizer/set_observation_normalization_constants.field_id = 'exhaust_fan_speed_percentage_command' + exhaust_fan_speed_percentage_command_normalizer/set_observation_normalization_constants.sample_mean = 7.121761 + exhaust_fan_speed_percentage_command_normalizer/set_observation_normalization_constants.sample_variance = 384.888218 + + # measurement 11 heating_water_valve_percentage_command + heating_water_valve_percentage_command_normalizer/set_observation_normalization_constants.field_id = 'heating_water_valve_percentage_command' + heating_water_valve_percentage_command_normalizer/set_observation_normalization_constants.sample_mean = 3.105189 + heating_water_valve_percentage_command_normalizer/set_observation_normalization_constants.sample_variance = 202.006249 + + # measurement 12 mixed_air_temperature_sensor + mixed_air_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'mixed_air_temperature_sensor' + mixed_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 293.718710 + mixed_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 12.517696 + + # measurement 13 mixed_air_temperature_setpoint + mixed_air_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'mixed_air_temperature_setpoint' + mixed_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 288.218302 + mixed_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 3.186768 + + # measurement 14 outside_air_damper_percentage_command + outside_air_damper_percentage_command_normalizer/set_observation_normalization_constants.field_id = 'outside_air_damper_percentage_command' + outside_air_damper_percentage_command_normalizer/set_observation_normalization_constants.sample_mean = 34.504101 + outside_air_damper_percentage_command_normalizer/set_observation_normalization_constants.sample_variance = 2053.149002 + + # measurement 15 outside_air_dewpoint_temperature_sensor + outside_air_dewpoint_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'outside_air_dewpoint_temperature_sensor' + outside_air_dewpoint_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 285.774428 + outside_air_dewpoint_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 2.504610 + + # measurement 16 outside_air_flowrate_sensor + outside_air_flowrate_sensor_normalizer/set_observation_normalization_constants.field_id = 'outside_air_flowrate_sensor' + outside_air_flowrate_sensor_normalizer/set_observation_normalization_constants.sample_mean = 3.701930 + outside_air_flowrate_sensor_normalizer/set_observation_normalization_constants.sample_variance = 20.300565 + + # measurement 17 outside_air_flowrate_setpoint + outside_air_flowrate_setpoint_normalizer/set_observation_normalization_constants.field_id = 'outside_air_flowrate_setpoint' + outside_air_flowrate_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 8.730134 + outside_air_flowrate_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 0.240364 + + # measurement 18 outside_air_relative_humidity_sensor + outside_air_relative_humidity_sensor_normalizer/set_observation_normalization_constants.field_id = 'outside_air_relative_humidity_sensor' + outside_air_relative_humidity_sensor_normalizer/set_observation_normalization_constants.sample_mean = 71.799372 + outside_air_relative_humidity_sensor_normalizer/set_observation_normalization_constants.sample_variance = 172.388773 + + # measurement 19 outside_air_specificenthalpy_sensor + outside_air_specificenthalpy_sensor_normalizer/set_observation_normalization_constants.field_id = 'outside_air_specificenthalpy_sensor' + outside_air_specificenthalpy_sensor_normalizer/set_observation_normalization_constants.sample_mean = 60711.656343 + outside_air_specificenthalpy_sensor_normalizer/set_observation_normalization_constants.sample_variance = 25491060.173822 + + # measurement 20 outside_air_temperature_sensor + outside_air_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'outside_air_temperature_sensor' + outside_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 291.244931 + outside_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 12.904175 + + # measurement 21 outside_air_wetbulb_temperature_sensor + outside_air_wetbulb_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'outside_air_wetbulb_temperature_sensor' + outside_air_wetbulb_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 287.709943 + outside_air_wetbulb_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 3.594260 + + # measurement 22 program_differential_pressure_setpoint + program_differential_pressure_setpoint_normalizer/set_observation_normalization_constants.field_id = 'program_differential_pressure_setpoint' + program_differential_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 83808.578375 + program_differential_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 14897544.664858 + + # measurement 23 program_supply_air_static_pressure_setpoint + program_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.field_id = 'program_supply_air_static_pressure_setpoint' + program_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 163.396282 + program_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 1092.073231 + + # measurement 24 program_supply_air_temperature_setpoint + program_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'program_supply_air_temperature_setpoint' + program_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 289.490004 + program_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 2.854515 + + # measurement 25 program_supply_water_temperature_setpoint + program_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'program_supply_water_temperature_setpoint' + program_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 341.467705 + program_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 74.961483 + + # measurement 26 return_air_temperature_sensor + return_air_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'return_air_temperature_sensor' + return_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 295.602164 + return_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 11.309930 + + # measurement 27 return_water_temperature_sensor + return_water_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'return_water_temperature_sensor' + return_water_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 326.219913 + return_water_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 497.847788 + + # measurement 28 run_status + run_status_normalizer/set_observation_normalization_constants.field_id = 'run_status' + run_status_normalizer/set_observation_normalization_constants.sample_mean = -0.638340 + run_status_normalizer/set_observation_normalization_constants.sample_variance = 0.592523 + + # measurement 29 speed_frequency_sensor + speed_frequency_sensor_normalizer/set_observation_normalization_constants.field_id = 'speed_frequency_sensor' + speed_frequency_sensor_normalizer/set_observation_normalization_constants.sample_mean = 7.003487 + speed_frequency_sensor_normalizer/set_observation_normalization_constants.sample_variance = 227.751249 + + # measurement 30 speed_percentage_command + speed_percentage_command_normalizer/set_observation_normalization_constants.field_id = 'speed_percentage_command' + speed_percentage_command_normalizer/set_observation_normalization_constants.sample_mean = 11.330966 + speed_percentage_command_normalizer/set_observation_normalization_constants.sample_variance = 602.718159 + + # measurement 31 supervisor_supply_air_static_pressure_setpoint + supervisor_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.field_id = 'supervisor_supply_air_static_pressure_setpoint' + supervisor_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 179.409052 + supervisor_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 352.049768 + + # measurement 32 supervisor_supply_air_temperature_setpoint + supervisor_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'supervisor_supply_air_temperature_setpoint' + supervisor_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 290.2 + supervisor_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 9.66245 + + # measurement 33 supervisor_supply_water_temperature_setpoint + supervisor_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'supervisor_supply_water_temperature_setpoint' + supervisor_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 332.164444 + supervisor_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 1.534112 + + + # measurement 35 supply_air_flowrate_sensor + supply_air_flowrate_sensor_normalizer/set_observation_normalization_constants.field_id = 'supply_air_flowrate_sensor' + supply_air_flowrate_sensor_normalizer/set_observation_normalization_constants.sample_mean = 177.520026 + supply_air_flowrate_sensor_normalizer/set_observation_normalization_constants.sample_variance = 50499.153481 + + # measurement 37 supply_air_static_pressure_sensor + supply_air_static_pressure_sensor_normalizer/set_observation_normalization_constants.field_id = 'supply_air_static_pressure_sensor' + supply_air_static_pressure_sensor_normalizer/set_observation_normalization_constants.sample_mean = 128.527912 + supply_air_static_pressure_sensor_normalizer/set_observation_normalization_constants.sample_variance = 6679.599175 + + # measurement 38 supply_air_static_pressure_setpoint + supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.field_id = 'supply_air_static_pressure_setpoint' + supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 181.307432 + supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 361.757966 + + # measurement 39 supply_air_temperature_sensor + supply_air_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'supply_air_temperature_sensor' + supply_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 289.737939 + supply_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 6.265837 + + # measurement 40 supply_air_temperature_setpoint + supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'supply_air_temperature_setpoint' + supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 289.329414 + supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 3.186769 + + # measurement 41 supply_fan_run_status + supply_fan_run_status_normalizer/set_observation_normalization_constants.field_id = 'supply_fan_run_status' + supply_fan_run_status_normalizer/set_observation_normalization_constants.sample_mean = 0.439849 + supply_fan_run_status_normalizer/set_observation_normalization_constants.sample_variance = 0.806533 + + # measurement 42 supply_fan_speed_frequency_sensor + supply_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants.field_id = 'supply_fan_speed_frequency_sensor' + supply_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants.sample_mean = 15.926249 + supply_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants.sample_variance = 207.034194 + + # measurement 43 supply_fan_speed_percentage_command + supply_fan_speed_percentage_command_normalizer/set_observation_normalization_constants.field_id = 'supply_fan_speed_percentage_command' + supply_fan_speed_percentage_command_normalizer/set_observation_normalization_constants.sample_mean = 26.543748 + supply_fan_speed_percentage_command_normalizer/set_observation_normalization_constants.sample_variance = 575.094979 + + # measurement 44 supply_water_temperature_sensor + supply_water_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'supply_water_temperature_sensor' + supply_water_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 321.520315 + supply_water_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 658.413066 + + # measurement 45 supply_water_temperature_setpoint + supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'supply_water_temperature_setpoint' + supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 320.261985 + supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 240.195517 + + # measurement 46 zone_air_co2_concentration_sensor + zone_air_co2_concentration_sensor_normalizer/set_observation_normalization_constants.field_id = 'zone_air_co2_concentration_sensor' + zone_air_co2_concentration_sensor_normalizer/set_observation_normalization_constants.sample_mean = 432.092062 + zone_air_co2_concentration_sensor_normalizer/set_observation_normalization_constants.sample_variance = 962.903840 + + # measurement 47 zone_air_co2_concentration_setpoint + zone_air_co2_concentration_setpoint_normalizer/set_observation_normalization_constants.field_id = 'zone_air_co2_concentration_setpoint' + zone_air_co2_concentration_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 739.337708 + zone_air_co2_concentration_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 3618.117781 + + # measurement 48 zone_air_cooling_temperature_setpoint + zone_air_cooling_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'zone_air_cooling_temperature_setpoint' + zone_air_cooling_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 82.084227 + zone_air_cooling_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 402.158853 + + # measurement 49 zone_air_heating_temperature_setpoint + zone_air_heating_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'zone_air_heating_temperature_setpoint' + zone_air_heating_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 64.231868 + zone_air_heating_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 24.461668 + + # measurement 50 zone_air_temperature_sensor + zone_air_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'zone_air_temperature_sensor' + zone_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 190 + zone_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 408.113303 + + supervisor_run_command_normalizer/set_observation_normalization_constants.field_id = 'supervisor_run_command' + supervisor_run_command_normalizer/set_observation_normalization_constants.sample_mean = 0 + supervisor_run_command_normalizer/set_observation_normalization_constants.sample_variance = 1.0 + + observation_normalizer_map = { + 'building_air_static_pressure_sensor' : @building_air_static_pressure_sensor_normalizer/set_observation_normalization_constants(), + 'building_air_static_pressure_setpoint' : @building_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants(), + 'cooling_percentage_command' : @cooling_percentage_command_normalizer/set_observation_normalization_constants(), + 'differential_pressure_sensor' : @differential_pressure_sensor_normalizer/set_observation_normalization_constants(), + 'differential_pressure_setpoint' : @differential_pressure_setpoint_normalizer/set_observation_normalization_constants(), + 'discharge_air_temperature_sensor' : @discharge_air_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'discharge_air_temperature_setpoint' : @discharge_air_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'exhaust_air_damper_percentage_command' : @exhaust_air_damper_percentage_command_normalizer/set_observation_normalization_constants(), + 'exhaust_air_damper_percentage_sensor' : @exhaust_air_damper_percentage_sensor_normalizer/set_observation_normalization_constants(), + 'exhaust_fan_speed_frequency_sensor' : @exhaust_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants(), + 'exhaust_fan_speed_percentage_command' : @exhaust_fan_speed_percentage_command_normalizer/set_observation_normalization_constants(), + 'heating_water_valve_percentage_command' : @heating_water_valve_percentage_command_normalizer/set_observation_normalization_constants(), + 'mixed_air_temperature_sensor' : @mixed_air_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'mixed_air_temperature_setpoint' : @mixed_air_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'outside_air_damper_percentage_command' : @outside_air_damper_percentage_command_normalizer/set_observation_normalization_constants(), + 'outside_air_dewpoint_temperature_sensor' : @outside_air_dewpoint_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'outside_air_flowrate_sensor' : @outside_air_flowrate_sensor_normalizer/set_observation_normalization_constants(), + 'outside_air_flowrate_setpoint' : @outside_air_flowrate_setpoint_normalizer/set_observation_normalization_constants(), + 'outside_air_relative_humidity_sensor' : @outside_air_relative_humidity_sensor_normalizer/set_observation_normalization_constants(), + 'outside_air_specificenthalpy_sensor' : @outside_air_specificenthalpy_sensor_normalizer/set_observation_normalization_constants(), + 'outside_air_temperature_sensor' : @outside_air_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'outside_air_wetbulb_temperature_sensor' : @outside_air_wetbulb_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'program_differential_pressure_setpoint' : @program_differential_pressure_setpoint_normalizer/set_observation_normalization_constants(), + 'program_supply_air_static_pressure_setpoint' : @program_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants(), + 'program_supply_air_temperature_setpoint' : @program_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'program_supply_water_temperature_setpoint' : @program_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'return_air_temperature_sensor' : @return_air_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'return_water_temperature_sensor' : @return_water_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'run_status' : @run_status_normalizer/set_observation_normalization_constants(), + 'speed_frequency_sensor' : @speed_frequency_sensor_normalizer/set_observation_normalization_constants(), + 'speed_percentage_command' : @speed_percentage_command_normalizer/set_observation_normalization_constants(), + 'supervisor_supply_air_static_pressure_setpoint' : @supervisor_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants(), + 'supervisor_supply_air_temperature_setpoint' : @supervisor_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'supervisor_supply_water_temperature_setpoint' : @supervisor_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'supply_air_static_pressure_sensor' : @supply_air_static_pressure_sensor_normalizer/set_observation_normalization_constants(), + 'supply_air_static_pressure_setpoint' : @supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants(), + 'supply_air_temperature_sensor' : @supply_air_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'supply_air_temperature_setpoint' : @supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'supply_air_cooling_temperature_setpoint' : @supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'supply_air_heating_temperature_setpoint' : @supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants(), + + 'supply_fan_run_status' : @supply_fan_run_status_normalizer/set_observation_normalization_constants(), + 'supply_fan_speed_frequency_sensor' : @supply_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants(), + 'supply_fan_speed_percentage_command' : @supply_fan_speed_percentage_command_normalizer/set_observation_normalization_constants(), + 'supply_water_temperature_sensor' : @supply_water_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'supply_water_setpoint' : @supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'zone_air_co2_concentration_sensor' : @zone_air_co2_concentration_sensor_normalizer/set_observation_normalization_constants(), + 'zone_air_co2_concentration_setpoint' : @zone_air_co2_concentration_setpoint_normalizer/set_observation_normalization_constants(), + 'zone_air_cooling_temperature_setpoint' : @zone_air_cooling_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'zone_air_heating_temperature_setpoint' : @zone_air_heating_temperature_setpoint_normalizer/set_observation_normalization_constants(), + + 'cooling_request_count': @request_count_observation_normalizer/set_observation_normalization_constants(), + } + + StandardScoreObservationNormalizer: + normalization_constants = %observation_normalizer_map + + + histogram_parameters_tuples = ( + ('zone_air_temperature_sensor',(285., 286., 287., 288, 289., 290., 291., 292., 293., 294., 295., 296., 297., 298., 299., 300.,301,302,303)), + ('supply_air_damper_percentage_command',(0.0, 0.2, 0.4, 0.6, 0.8, 1.0)), + ('supply_air_flowrate_setpoint',( 0., 0.05, .1, .2, .3, .4, .5, .7, .9)), + ) + + # Top-level Environment parameters + discount_factor = 0.9 + num_days_in_episode=1 + metrics_reporting_interval=10 + label='tunable_simulator_sb1' + num_hod_features = 1 + num_dow_features = 1 + + Environment.building = @SimulatorBuilding() + Environment.reward_function = @SetpointEnergyCarbonRegretFunction() + Environment.observation_normalizer = @StandardScoreObservationNormalizer() + Environment.action_config = @ActionConfig() + Environment.metrics_reporting_interval = %metrics_reporting_interval + + Environment.discount_factor = %discount_factor + Environment.metrics_path = %metrics_path + Environment.label = %label + Environment.num_days_in_episode= %num_days_in_episode + Environment.default_actions = %default_actions + Environment.num_hod_features = %num_hod_features + Environment.num_dow_features = %num_dow_features + Environment.writer_factory =@controller_writer.ProtoWriterFactory() + Environment.observation_histogram_reducer = @get_histogram_reducer() diff --git a/smart_control/configs/resources/sb1/train_sim_configs/sim_config_4_day.gin b/smart_control/configs/resources/sb1/train_sim_configs/sim_config_4_day.gin new file mode 100644 index 00000000..a171b529 --- /dev/null +++ b/smart_control/configs/resources/sb1/train_sim_configs/sim_config_4_day.gin @@ -0,0 +1,614 @@ +# Copyright 2024 Google LLC + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at + +# https://www.apache.org/licenses/LICENSE-2.0 + +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + # paths + controller_reader.ProtoReader.input_dir = @get_histogram_path() + floor_plan_filepath = @get_zone_path() + zone_map_filepath = @get_zone_path() + metrics_path = @get_metrics_path() + + # Weather conditions simulation + # W/m2/K + convection_coefficient = 100.0 + # Models the variable temperature as a sinusoid bounded by + # high and low temps, where minima occur at midnights and + # maxima occur at noon. + # K + ambient_high_temp = 283.0 + ambient_low_temp = 273.0 + + ReplayWeatherController.local_weather_path= @get_weather_path() + ReplayWeatherController.convection_coefficient = %convection_coefficient + + weather_controller = @ReplayWeatherController() + + # shuffle parameters + StochasticConvectionSimulator.p = 1.0 + StochasticConvectionSimulator.distance = 5 + StochasticConvectionSimulator.seed = 5 + + # Dimensional parameters of the Building + control_volume_cm = 10 + floor_height_cm = 300.0 + + # Thermal properties of the Building + # Thermal properties of the exterior building. + # W/m/K + exterior_cv_conductivity = 0.05 + # kg/m3 + exterior_cv_density = 1.0 + # J/Kg/K + exterior_cv_heat_capacity = 700.0 + + # Thermal properties of the interior walls. + interior_wall_cv_conductivity = 50.0 + # kg/m3 + interior_wall_cv_density = 1.0 + # J/Kg/K + interior_wall_cv_heat_capacity = 700.0 + + # Thermal properties of the "air" in the thermal zones. + # W/m/K + interior_cv_conductivity = 50.0 + # kg/m3 + interior_cv_density = 1.0 + # J/Kg/K + interior_cv_heat_capacity = 700.0 + + # Defines the initial uniform interior temp. + # K + initial_temp = 294.0 + + inside_air_properties/MaterialProperties: + conductivity = %interior_cv_conductivity + heat_capacity = %interior_cv_heat_capacity + density = %interior_cv_density + + inside_wall_properties/MaterialProperties: + conductivity = %interior_wall_cv_conductivity + heat_capacity = %interior_wall_cv_density + density = %interior_wall_cv_heat_capacity + + building_exterior_properties/MaterialProperties: + conductivity = %exterior_cv_conductivity + heat_capacity = %exterior_cv_heat_capacity + density = %exterior_cv_density + + sim/FloorPlanBasedBuilding: + cv_size_cm = %control_volume_cm + floor_height_cm = %floor_height_cm + initial_temp = %initial_temp + inside_air_properties = @inside_air_properties/MaterialProperties() + inside_wall_properties = @inside_wall_properties/MaterialProperties() + building_exterior_properties = @building_exterior_properties/MaterialProperties() + floor_plan_filepath = %floor_plan_filepath + zone_map_filepath = %zone_map_filepath + convection_simulator = @StochasticConvectionSimulator() + reset_temp_values = @get_reset_temp_values() + + # HVAC heating/cooling schedule + morning_start_hour = 6 + evening_start_hour = 19 + heating_setpoint_day = 294 + cooling_setpoint_day = 297 + heating_setpoint_night = 289 + cooling_setpoint_night = 298 + time_zone="US/Pacific" + + + hvac/SetpointSchedule: + morning_start_hour = %morning_start_hour + evening_start_hour = %evening_start_hour + comfort_temp_window = (%heating_setpoint_day, %cooling_setpoint_day) + eco_temp_window = (%heating_setpoint_night, %cooling_setpoint_night) + time_zone = %time_zone + + # HVAC Device Models and Configs + water_pump_differential_head = 6.0 + water_pump_efficiency = 0.98 + reheat_water_setpoint = 360.0 + boiler_heating_rate = 0.5 # K / min + boiler_cooling_rate = 0.1 # K / min + + # Pa or N/M2 + fan_differential_pressure = 10000.0 + fan_efficiency = 0.9 + + air_handler_heating_setpoint = 285.0 + air_handler_cooling_setpoint = 298.0 + # Percentage of fresh air in the recirculation. + air_handler_recirculation_ratio = 0.3 + + vav_max_air_flowrate = 0.035 + vav_reheat_water_flowrate = 0.03 + + hvac/AirHandler: + recirculation = %air_handler_recirculation_ratio + heating_air_temp_setpoint = %air_handler_heating_setpoint + cooling_air_temp_setpoint = %air_handler_cooling_setpoint + fan_differential_pressure = %fan_differential_pressure + fan_efficiency = %fan_efficiency + max_air_flow_rate = 8.67 + sim_weather_controller = %weather_controller + + hvac/Boiler: + reheat_water_setpoint = %reheat_water_setpoint + water_pump_differential_head = %water_pump_differential_head + water_pump_efficiency = %water_pump_efficiency + heating_rate = %boiler_heating_rate + cooling_rate = %boiler_cooling_rate + + sim/FloorPlanBasedHvac: + air_handler = @hvac/AirHandler() + boiler = @hvac/Boiler() + schedule = @hvac/SetpointSchedule() + vav_max_air_flow_rate = %vav_max_air_flowrate + vav_reheat_max_water_flow_rate = %vav_reheat_water_flowrate + + # Finite difference settings. + time_step_sec = 300 + convergence_threshold = 0.1 + iteration_limit = 100 + iteration_warning = 30 + start_timestamp = '2023-07-06 07:00:00+00:00' + + sim/to_timestamp.date_str = %start_timestamp + + sim_building/TFSimulator: + building = @sim/FloorPlanBasedBuilding() + hvac = @sim/FloorPlanBasedHvac() + weather_controller = %weather_controller + time_step_sec = %time_step_sec + convergence_threshold = %convergence_threshold + iteration_limit = %iteration_limit + iteration_warning = %iteration_warning + start_timestamp = @sim/to_timestamp() + + + work_occupancy = 1 + nonwork_occupancy = 0.1 + occupancy_start/local_time.time_str = %occupancy_start_time + occupancy_end/local_time.time_str = %occupancy_end_time + + + randomized_occupancy/RandomizedArrivalDepartureOccupancy: + zone_assignment = %work_occupancy + earliest_expected_arrival_hour = 7 + latest_expected_arrival_hour = 12 + earliest_expected_departure_hour = 13 + latest_expected_departure_hour = 18 + time_step_sec = %time_step_sec + time_zone = %time_zone + + + SimulatorBuilding.simulator = @sim_building/TFSimulator() + SimulatorBuilding.occupancy = @randomized_occupancy/RandomizedArrivalDepartureOccupancy() + + + # Reward Parameters taken from 3C reward function documented + # Average productivity per person in USD + max_productivity_personhour_usd = 300.00 + min_productivity_personhour_usd = 100.00 + productivity_midpoint_delta = 0.5 + productivity_decay_stiffness = 4.3 + + max_electricity_rate=160000 + max_natural_gas_rate=400000 + + # lowered productivity weight to force a lower water temp + # during occupied intervals + productivity_weight=0.2 + energy_cost_weight=0.4 + carbon_emission_weight=0.4 + + SetpointEnergyCarbonRegretFunction.max_productivity_personhour_usd = %max_productivity_personhour_usd + SetpointEnergyCarbonRegretFunction.min_productivity_personhour_usd = %min_productivity_personhour_usd + SetpointEnergyCarbonRegretFunction.max_electricity_rate = %max_electricity_rate + SetpointEnergyCarbonRegretFunction.max_natural_gas_rate = %max_natural_gas_rate + SetpointEnergyCarbonRegretFunction.productivity_decay_stiffness = %productivity_decay_stiffness + SetpointEnergyCarbonRegretFunction.productivity_midpoint_delta = %productivity_midpoint_delta + SetpointEnergyCarbonRegretFunction.electricity_energy_cost = @ElectricityEnergyCost() + SetpointEnergyCarbonRegretFunction.natural_gas_energy_cost = @NaturalGasEnergyCost() + SetpointEnergyCarbonRegretFunction.productivity_weight = %productivity_weight + SetpointEnergyCarbonRegretFunction.energy_cost_weight= %energy_cost_weight + SetpointEnergyCarbonRegretFunction.carbon_emission_weight = %carbon_emission_weight + + + # Action Normalization Parameters -> edited to match real building + supply_water_bounded_action_normalizer/set_action_normalization_constants.min_normalized_value = -1. + supply_water_bounded_action_normalizer/set_action_normalization_constants.max_normalized_value = 1.0 + supply_water_bounded_action_normalizer/set_action_normalization_constants.min_native_value = 310 + supply_water_bounded_action_normalizer/set_action_normalization_constants.max_native_value = 355.0 + + supply_air_heating_temperature_setpoint/set_action_normalization_constants.min_normalized_value = -1. + supply_air_heating_temperature_setpoint/set_action_normalization_constants.max_normalized_value = 1. + supply_air_heating_temperature_setpoint/set_action_normalization_constants.min_native_value = 285 + supply_air_heating_temperature_setpoint/set_action_normalization_constants.max_native_value = 300.0 + + action_normalizer_map = { + 'supply_water_setpoint': @supply_water_bounded_action_normalizer/set_action_normalization_constants(), + 'supply_air_heating_temperature_setpoint': @supply_air_heating_temperature_setpoint/set_action_normalization_constants() + } + ActionConfig: + action_normalizers = %action_normalizer_map + + default_actions = { + 'supply_water_setpoint': 340.0, + 'supply_air_cooling_temperature_setpoint': 300.0, + 'supply_air_heating_temperature_setpoint': 285.0 + } + + # Observation Normalization Parameters + temperature_observation_normalizer/set_observation_normalization_constants.field_id = 'temperature' + temperature_observation_normalizer/set_observation_normalization_constants.sample_mean = 310.0 + temperature_observation_normalizer/set_observation_normalization_constants.sample_variance = 2500.0 + + supply_water_setpoint_observation_normalizer/set_observation_normalization_constants.field_id = 'supply_water_setpoint' + supply_water_setpoint_observation_normalizer/set_observation_normalization_constants.sample_mean = 310.0 + supply_water_setpoint_observation_normalizer/set_observation_normalization_constants.sample_variance = 2500.0 + + air_flowrate_observation_normalizer/set_observation_normalization_constants.field_id = 'air_flowrate' + air_flowrate_observation_normalizer/set_observation_normalization_constants.sample_mean = 0.5 + air_flowrate_observation_normalizer/set_observation_normalization_constants.sample_variance = 4.0 + + differential_pressure_observation_normalizer/set_observation_normalization_constants.field_id = 'differential_pressure' + differential_pressure_observation_normalizer/set_observation_normalization_constants.sample_mean = 10000.0 + differential_pressure_observation_normalizer/set_observation_normalization_constants.sample_variance = 100000.0 + + percentage_observation_normalizer/set_observation_normalization_constants.field_id = 'percentage' + percentage_observation_normalizer/set_observation_normalization_constants.sample_mean = 0.50 + percentage_observation_normalizer/set_observation_normalization_constants.sample_variance = 1.0 + + request_count_observation_normalizer/set_observation_normalization_constants.field_id = 'request_count' + request_count_observation_normalizer/set_observation_normalization_constants.sample_mean = 100.0 + request_count_observation_normalizer/set_observation_normalization_constants.sample_variance = 25.0 + + # measurement 0 building_air_static_pressure_sensor + building_air_static_pressure_sensor_normalizer/set_observation_normalization_constants.field_id = 'building_air_static_pressure_sensor' + building_air_static_pressure_sensor_normalizer/set_observation_normalization_constants.sample_mean = 3.779228 + building_air_static_pressure_sensor_normalizer/set_observation_normalization_constants.sample_variance = 14.599437 + + # measurement 1 building_air_static_pressure_setpoint + building_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.field_id = 'building_air_static_pressure_setpoint' + building_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 7.472401 + building_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 0.000000 + + # measurement 2 cooling_percentage_command + cooling_percentage_command_normalizer/set_observation_normalization_constants.field_id = 'cooling_percentage_command' + cooling_percentage_command_normalizer/set_observation_normalization_constants.sample_mean = 9.658281 + cooling_percentage_command_normalizer/set_observation_normalization_constants.sample_variance = 295.833612 + + # measurement 3 differential_pressure_sensor + differential_pressure_sensor_normalizer/set_observation_normalization_constants.field_id = 'differential_pressure_sensor' + differential_pressure_sensor_normalizer/set_observation_normalization_constants.sample_mean = 31611.814379 + differential_pressure_sensor_normalizer/set_observation_normalization_constants.sample_variance = 1844378631.487996 + + # measurement 4 differential_pressure_setpoint + differential_pressure_setpoint_normalizer/set_observation_normalization_constants.field_id = 'differential_pressure_setpoint' + differential_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 83810.269540 + differential_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 14889040.603647 + + # measurement 5 discharge_air_temperature_sensor + discharge_air_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'discharge_air_temperature_sensor' + discharge_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 69.889025 + discharge_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 541.455462 + + # measurement 6 discharge_air_temperature_setpoint + discharge_air_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'discharge_air_temperature_setpoint' + discharge_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 57.665244 + discharge_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 97.254479 + + # measurement 7 exhaust_air_damper_percentage_command + exhaust_air_damper_percentage_command_normalizer/set_observation_normalization_constants.field_id = 'exhaust_air_damper_percentage_command' + exhaust_air_damper_percentage_command_normalizer/set_observation_normalization_constants.sample_mean = 25.000000 + exhaust_air_damper_percentage_command_normalizer/set_observation_normalization_constants.sample_variance = 0.000000 + + # measurement 8 exhaust_air_damper_percentage_sensor + exhaust_air_damper_percentage_sensor_normalizer/set_observation_normalization_constants.field_id = 'exhaust_air_damper_percentage_sensor' + exhaust_air_damper_percentage_sensor_normalizer/set_observation_normalization_constants.sample_mean = 10.680755 + exhaust_air_damper_percentage_sensor_normalizer/set_observation_normalization_constants.sample_variance = 539.207818 + + # measurement 9 exhaust_fan_speed_frequency_sensor + exhaust_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants.field_id = 'exhaust_fan_speed_frequency_sensor' + exhaust_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants.sample_mean = 4.273057 + exhaust_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants.sample_variance = 138.559759 + + # measurement 10 exhaust_fan_speed_percentage_command + exhaust_fan_speed_percentage_command_normalizer/set_observation_normalization_constants.field_id = 'exhaust_fan_speed_percentage_command' + exhaust_fan_speed_percentage_command_normalizer/set_observation_normalization_constants.sample_mean = 7.121761 + exhaust_fan_speed_percentage_command_normalizer/set_observation_normalization_constants.sample_variance = 384.888218 + + # measurement 11 heating_water_valve_percentage_command + heating_water_valve_percentage_command_normalizer/set_observation_normalization_constants.field_id = 'heating_water_valve_percentage_command' + heating_water_valve_percentage_command_normalizer/set_observation_normalization_constants.sample_mean = 3.105189 + heating_water_valve_percentage_command_normalizer/set_observation_normalization_constants.sample_variance = 202.006249 + + # measurement 12 mixed_air_temperature_sensor + mixed_air_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'mixed_air_temperature_sensor' + mixed_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 293.718710 + mixed_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 12.517696 + + # measurement 13 mixed_air_temperature_setpoint + mixed_air_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'mixed_air_temperature_setpoint' + mixed_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 288.218302 + mixed_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 3.186768 + + # measurement 14 outside_air_damper_percentage_command + outside_air_damper_percentage_command_normalizer/set_observation_normalization_constants.field_id = 'outside_air_damper_percentage_command' + outside_air_damper_percentage_command_normalizer/set_observation_normalization_constants.sample_mean = 34.504101 + outside_air_damper_percentage_command_normalizer/set_observation_normalization_constants.sample_variance = 2053.149002 + + # measurement 15 outside_air_dewpoint_temperature_sensor + outside_air_dewpoint_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'outside_air_dewpoint_temperature_sensor' + outside_air_dewpoint_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 285.774428 + outside_air_dewpoint_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 2.504610 + + # measurement 16 outside_air_flowrate_sensor + outside_air_flowrate_sensor_normalizer/set_observation_normalization_constants.field_id = 'outside_air_flowrate_sensor' + outside_air_flowrate_sensor_normalizer/set_observation_normalization_constants.sample_mean = 3.701930 + outside_air_flowrate_sensor_normalizer/set_observation_normalization_constants.sample_variance = 20.300565 + + # measurement 17 outside_air_flowrate_setpoint + outside_air_flowrate_setpoint_normalizer/set_observation_normalization_constants.field_id = 'outside_air_flowrate_setpoint' + outside_air_flowrate_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 8.730134 + outside_air_flowrate_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 0.240364 + + # measurement 18 outside_air_relative_humidity_sensor + outside_air_relative_humidity_sensor_normalizer/set_observation_normalization_constants.field_id = 'outside_air_relative_humidity_sensor' + outside_air_relative_humidity_sensor_normalizer/set_observation_normalization_constants.sample_mean = 71.799372 + outside_air_relative_humidity_sensor_normalizer/set_observation_normalization_constants.sample_variance = 172.388773 + + # measurement 19 outside_air_specificenthalpy_sensor + outside_air_specificenthalpy_sensor_normalizer/set_observation_normalization_constants.field_id = 'outside_air_specificenthalpy_sensor' + outside_air_specificenthalpy_sensor_normalizer/set_observation_normalization_constants.sample_mean = 60711.656343 + outside_air_specificenthalpy_sensor_normalizer/set_observation_normalization_constants.sample_variance = 25491060.173822 + + # measurement 20 outside_air_temperature_sensor + outside_air_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'outside_air_temperature_sensor' + outside_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 291.244931 + outside_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 12.904175 + + # measurement 21 outside_air_wetbulb_temperature_sensor + outside_air_wetbulb_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'outside_air_wetbulb_temperature_sensor' + outside_air_wetbulb_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 287.709943 + outside_air_wetbulb_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 3.594260 + + # measurement 22 program_differential_pressure_setpoint + program_differential_pressure_setpoint_normalizer/set_observation_normalization_constants.field_id = 'program_differential_pressure_setpoint' + program_differential_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 83808.578375 + program_differential_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 14897544.664858 + + # measurement 23 program_supply_air_static_pressure_setpoint + program_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.field_id = 'program_supply_air_static_pressure_setpoint' + program_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 163.396282 + program_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 1092.073231 + + # measurement 24 program_supply_air_temperature_setpoint + program_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'program_supply_air_temperature_setpoint' + program_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 289.490004 + program_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 2.854515 + + # measurement 25 program_supply_water_temperature_setpoint + program_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'program_supply_water_temperature_setpoint' + program_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 341.467705 + program_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 74.961483 + + # measurement 26 return_air_temperature_sensor + return_air_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'return_air_temperature_sensor' + return_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 295.602164 + return_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 11.309930 + + # measurement 27 return_water_temperature_sensor + return_water_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'return_water_temperature_sensor' + return_water_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 326.219913 + return_water_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 497.847788 + + # measurement 28 run_status + run_status_normalizer/set_observation_normalization_constants.field_id = 'run_status' + run_status_normalizer/set_observation_normalization_constants.sample_mean = -0.638340 + run_status_normalizer/set_observation_normalization_constants.sample_variance = 0.592523 + + # measurement 29 speed_frequency_sensor + speed_frequency_sensor_normalizer/set_observation_normalization_constants.field_id = 'speed_frequency_sensor' + speed_frequency_sensor_normalizer/set_observation_normalization_constants.sample_mean = 7.003487 + speed_frequency_sensor_normalizer/set_observation_normalization_constants.sample_variance = 227.751249 + + # measurement 30 speed_percentage_command + speed_percentage_command_normalizer/set_observation_normalization_constants.field_id = 'speed_percentage_command' + speed_percentage_command_normalizer/set_observation_normalization_constants.sample_mean = 11.330966 + speed_percentage_command_normalizer/set_observation_normalization_constants.sample_variance = 602.718159 + + # measurement 31 supervisor_supply_air_static_pressure_setpoint + supervisor_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.field_id = 'supervisor_supply_air_static_pressure_setpoint' + supervisor_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 179.409052 + supervisor_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 352.049768 + + # measurement 32 supervisor_supply_air_temperature_setpoint + supervisor_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'supervisor_supply_air_temperature_setpoint' + supervisor_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 290.2 + supervisor_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 9.66245 + + # measurement 33 supervisor_supply_water_temperature_setpoint + supervisor_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'supervisor_supply_water_temperature_setpoint' + supervisor_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 332.164444 + supervisor_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 1.534112 + + + # measurement 35 supply_air_flowrate_sensor + supply_air_flowrate_sensor_normalizer/set_observation_normalization_constants.field_id = 'supply_air_flowrate_sensor' + supply_air_flowrate_sensor_normalizer/set_observation_normalization_constants.sample_mean = 177.520026 + supply_air_flowrate_sensor_normalizer/set_observation_normalization_constants.sample_variance = 50499.153481 + + # measurement 37 supply_air_static_pressure_sensor + supply_air_static_pressure_sensor_normalizer/set_observation_normalization_constants.field_id = 'supply_air_static_pressure_sensor' + supply_air_static_pressure_sensor_normalizer/set_observation_normalization_constants.sample_mean = 128.527912 + supply_air_static_pressure_sensor_normalizer/set_observation_normalization_constants.sample_variance = 6679.599175 + + # measurement 38 supply_air_static_pressure_setpoint + supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.field_id = 'supply_air_static_pressure_setpoint' + supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 181.307432 + supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 361.757966 + + # measurement 39 supply_air_temperature_sensor + supply_air_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'supply_air_temperature_sensor' + supply_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 289.737939 + supply_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 6.265837 + + # measurement 40 supply_air_temperature_setpoint + supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'supply_air_temperature_setpoint' + supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 289.329414 + supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 3.186769 + + # measurement 41 supply_fan_run_status + supply_fan_run_status_normalizer/set_observation_normalization_constants.field_id = 'supply_fan_run_status' + supply_fan_run_status_normalizer/set_observation_normalization_constants.sample_mean = 0.439849 + supply_fan_run_status_normalizer/set_observation_normalization_constants.sample_variance = 0.806533 + + # measurement 42 supply_fan_speed_frequency_sensor + supply_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants.field_id = 'supply_fan_speed_frequency_sensor' + supply_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants.sample_mean = 15.926249 + supply_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants.sample_variance = 207.034194 + + # measurement 43 supply_fan_speed_percentage_command + supply_fan_speed_percentage_command_normalizer/set_observation_normalization_constants.field_id = 'supply_fan_speed_percentage_command' + supply_fan_speed_percentage_command_normalizer/set_observation_normalization_constants.sample_mean = 26.543748 + supply_fan_speed_percentage_command_normalizer/set_observation_normalization_constants.sample_variance = 575.094979 + + # measurement 44 supply_water_temperature_sensor + supply_water_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'supply_water_temperature_sensor' + supply_water_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 321.520315 + supply_water_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 658.413066 + + # measurement 45 supply_water_temperature_setpoint + supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'supply_water_temperature_setpoint' + supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 320.261985 + supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 240.195517 + + # measurement 46 zone_air_co2_concentration_sensor + zone_air_co2_concentration_sensor_normalizer/set_observation_normalization_constants.field_id = 'zone_air_co2_concentration_sensor' + zone_air_co2_concentration_sensor_normalizer/set_observation_normalization_constants.sample_mean = 432.092062 + zone_air_co2_concentration_sensor_normalizer/set_observation_normalization_constants.sample_variance = 962.903840 + + # measurement 47 zone_air_co2_concentration_setpoint + zone_air_co2_concentration_setpoint_normalizer/set_observation_normalization_constants.field_id = 'zone_air_co2_concentration_setpoint' + zone_air_co2_concentration_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 739.337708 + zone_air_co2_concentration_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 3618.117781 + + # measurement 48 zone_air_cooling_temperature_setpoint + zone_air_cooling_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'zone_air_cooling_temperature_setpoint' + zone_air_cooling_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 82.084227 + zone_air_cooling_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 402.158853 + + # measurement 49 zone_air_heating_temperature_setpoint + zone_air_heating_temperature_setpoint_normalizer/set_observation_normalization_constants.field_id = 'zone_air_heating_temperature_setpoint' + zone_air_heating_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_mean = 64.231868 + zone_air_heating_temperature_setpoint_normalizer/set_observation_normalization_constants.sample_variance = 24.461668 + + # measurement 50 zone_air_temperature_sensor + zone_air_temperature_sensor_normalizer/set_observation_normalization_constants.field_id = 'zone_air_temperature_sensor' + zone_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_mean = 190 + zone_air_temperature_sensor_normalizer/set_observation_normalization_constants.sample_variance = 408.113303 + + supervisor_run_command_normalizer/set_observation_normalization_constants.field_id = 'supervisor_run_command' + supervisor_run_command_normalizer/set_observation_normalization_constants.sample_mean = 0 + supervisor_run_command_normalizer/set_observation_normalization_constants.sample_variance = 1.0 + + observation_normalizer_map = { + 'building_air_static_pressure_sensor' : @building_air_static_pressure_sensor_normalizer/set_observation_normalization_constants(), + 'building_air_static_pressure_setpoint' : @building_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants(), + 'cooling_percentage_command' : @cooling_percentage_command_normalizer/set_observation_normalization_constants(), + 'differential_pressure_sensor' : @differential_pressure_sensor_normalizer/set_observation_normalization_constants(), + 'differential_pressure_setpoint' : @differential_pressure_setpoint_normalizer/set_observation_normalization_constants(), + 'discharge_air_temperature_sensor' : @discharge_air_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'discharge_air_temperature_setpoint' : @discharge_air_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'exhaust_air_damper_percentage_command' : @exhaust_air_damper_percentage_command_normalizer/set_observation_normalization_constants(), + 'exhaust_air_damper_percentage_sensor' : @exhaust_air_damper_percentage_sensor_normalizer/set_observation_normalization_constants(), + 'exhaust_fan_speed_frequency_sensor' : @exhaust_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants(), + 'exhaust_fan_speed_percentage_command' : @exhaust_fan_speed_percentage_command_normalizer/set_observation_normalization_constants(), + 'heating_water_valve_percentage_command' : @heating_water_valve_percentage_command_normalizer/set_observation_normalization_constants(), + 'mixed_air_temperature_sensor' : @mixed_air_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'mixed_air_temperature_setpoint' : @mixed_air_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'outside_air_damper_percentage_command' : @outside_air_damper_percentage_command_normalizer/set_observation_normalization_constants(), + 'outside_air_dewpoint_temperature_sensor' : @outside_air_dewpoint_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'outside_air_flowrate_sensor' : @outside_air_flowrate_sensor_normalizer/set_observation_normalization_constants(), + 'outside_air_flowrate_setpoint' : @outside_air_flowrate_setpoint_normalizer/set_observation_normalization_constants(), + 'outside_air_relative_humidity_sensor' : @outside_air_relative_humidity_sensor_normalizer/set_observation_normalization_constants(), + 'outside_air_specificenthalpy_sensor' : @outside_air_specificenthalpy_sensor_normalizer/set_observation_normalization_constants(), + 'outside_air_temperature_sensor' : @outside_air_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'outside_air_wetbulb_temperature_sensor' : @outside_air_wetbulb_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'program_differential_pressure_setpoint' : @program_differential_pressure_setpoint_normalizer/set_observation_normalization_constants(), + 'program_supply_air_static_pressure_setpoint' : @program_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants(), + 'program_supply_air_temperature_setpoint' : @program_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'program_supply_water_temperature_setpoint' : @program_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'return_air_temperature_sensor' : @return_air_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'return_water_temperature_sensor' : @return_water_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'run_status' : @run_status_normalizer/set_observation_normalization_constants(), + 'speed_frequency_sensor' : @speed_frequency_sensor_normalizer/set_observation_normalization_constants(), + 'speed_percentage_command' : @speed_percentage_command_normalizer/set_observation_normalization_constants(), + 'supervisor_supply_air_static_pressure_setpoint' : @supervisor_supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants(), + 'supervisor_supply_air_temperature_setpoint' : @supervisor_supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'supervisor_supply_water_temperature_setpoint' : @supervisor_supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'supply_air_static_pressure_sensor' : @supply_air_static_pressure_sensor_normalizer/set_observation_normalization_constants(), + 'supply_air_static_pressure_setpoint' : @supply_air_static_pressure_setpoint_normalizer/set_observation_normalization_constants(), + 'supply_air_temperature_sensor' : @supply_air_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'supply_air_temperature_setpoint' : @supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'supply_air_cooling_temperature_setpoint' : @supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'supply_air_heating_temperature_setpoint' : @supply_air_temperature_setpoint_normalizer/set_observation_normalization_constants(), + + 'supply_fan_run_status' : @supply_fan_run_status_normalizer/set_observation_normalization_constants(), + 'supply_fan_speed_frequency_sensor' : @supply_fan_speed_frequency_sensor_normalizer/set_observation_normalization_constants(), + 'supply_fan_speed_percentage_command' : @supply_fan_speed_percentage_command_normalizer/set_observation_normalization_constants(), + 'supply_water_temperature_sensor' : @supply_water_temperature_sensor_normalizer/set_observation_normalization_constants(), + 'supply_water_setpoint' : @supply_water_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'zone_air_co2_concentration_sensor' : @zone_air_co2_concentration_sensor_normalizer/set_observation_normalization_constants(), + 'zone_air_co2_concentration_setpoint' : @zone_air_co2_concentration_setpoint_normalizer/set_observation_normalization_constants(), + 'zone_air_cooling_temperature_setpoint' : @zone_air_cooling_temperature_setpoint_normalizer/set_observation_normalization_constants(), + 'zone_air_heating_temperature_setpoint' : @zone_air_heating_temperature_setpoint_normalizer/set_observation_normalization_constants(), + + 'cooling_request_count': @request_count_observation_normalizer/set_observation_normalization_constants(), + } + + StandardScoreObservationNormalizer: + normalization_constants = %observation_normalizer_map + + + histogram_parameters_tuples = ( + ('zone_air_temperature_sensor',(285., 286., 287., 288, 289., 290., 291., 292., 293., 294., 295., 296., 297., 298., 299., 300.,301,302,303)), + ('supply_air_damper_percentage_command',(0.0, 0.2, 0.4, 0.6, 0.8, 1.0)), + ('supply_air_flowrate_setpoint',( 0., 0.05, .1, .2, .3, .4, .5, .7, .9)), + ) + + # Top-level Environment parameters + discount_factor = 0.9 + num_days_in_episode=4 + metrics_reporting_interval=10 + label='tunable_simulator_sb1' + num_hod_features = 1 + num_dow_features = 1 + + Environment.building = @SimulatorBuilding() + Environment.reward_function = @SetpointEnergyCarbonRegretFunction() + Environment.observation_normalizer = @StandardScoreObservationNormalizer() + Environment.action_config = @ActionConfig() + Environment.metrics_reporting_interval = %metrics_reporting_interval + + Environment.discount_factor = %discount_factor + Environment.metrics_path = %metrics_path + Environment.label = %label + Environment.num_days_in_episode= %num_days_in_episode + Environment.default_actions = %default_actions + Environment.num_hod_features = %num_hod_features + Environment.num_dow_features = %num_dow_features + Environment.writer_factory =@controller_writer.ProtoWriterFactory() + Environment.observation_histogram_reducer = @get_histogram_reducer() diff --git a/smart_control/mcts/MonteCarloTreeSearch.py b/smart_control/mcts/MonteCarloTreeSearch.py deleted file mode 100644 index b8a244b9..00000000 --- a/smart_control/mcts/MonteCarloTreeSearch.py +++ /dev/null @@ -1,315 +0,0 @@ -from collections import defaultdict -import numpy as np -import json -from smart_control.mcts.execute_policy_utils import compute_avg_return, load_environment -from mctspy.tree.nodes import MonteCarloTreeSearchNode -from mctspy.tree.search import MonteCarloTreeSearch - - -SECONDS_IN_AN_HOUR = 60 * 60 - - -""" - This class contains the state of the environment that corresponds to a certain - node in the Monter Carlo Tree Search tree. -""" -class NodeEnvironmentState: - - def __init__(self, node_temps, node_timestamp, node_state_return, node_previous_step): - self.node_temps = node_temps - self.node_timestamp = node_timestamp - self.node_previous_step = node_previous_step - self.node_state_return = node_state_return - - def __repr__(self): - - state = { - "node_timestamp": str(self.node_timestamp), - "node_state_return": self.node_state_return, - } - - return f"NodeEnvironmentState(\nf{json.dumps(state, indent=4)}\n)" - - -class SbsimMonteCarloTreeSearchNode(MonteCarloTreeSearchNode): - - def __init__(self, node_environment_state: NodeEnvironmentState, # this holds data for the state of the environment at this node - parent=None - ): - - super().__init__(None, parent) - self.children = { } - - # these values are used to keep track of the node score - self._q = 0 - self._n = 1 - self._cumulative_number_of_hours = 1 - - self.node_environment_state = node_environment_state # this is the state of the simulation at this node - - - def __repr__(self): - state = { - "timestamp": str(self.node_environment_state.node_timestamp), - "state_return": self.node_environment_state.node_state_return, - "cumulative_number_of_hours": self._cumulative_number_of_hours, - "children": list(self.children.keys()) - } - return f"SbsimMonteCarloTreeSearchNode(\n{ json.dumps(state, indent=4) }\n)" - - - def untried_actions(self, possible_actions): - return possible_actions - set(self.children.keys()) - - - def is_fully_expanded(self, possible_actions): - return len(self.untried_actions(possible_actions)) == 0 - - - @ property - def n(self): - return self._n - - - @ property - def q(self): - return self._q - - - @ staticmethod - def run_expansion(env, node_environment_state, policy, num_steps=1): - return_val, _ = compute_avg_return(env, - policy, - time_zone="US/Pacific", - render_interval_steps=1e30, - trajectory_observers=None, - num_steps=num_steps) - - new_node_environment_state = NodeEnvironmentState( - node_temps=env.building._simulator._building.temp, - node_timestamp=env.building._simulator._current_timestamp, - node_state_return=node_environment_state.node_state_return + return_val, - node_previous_step=env.current_time_step() - ) - - return new_node_environment_state - - - def add_child(self, action, child_node_environment_state): - new_node = SbsimMonteCarloTreeSearchNode(child_node_environment_state, parent=self) - self.children[action] = new_node - return new_node - - - def backpropagate(self, result, number_of_hours): - self._q += result - self._n += 1 - self._cumulative_number_of_hours += number_of_hours - if self.parent: - self.parent.backpropagate(result, number_of_hours) - - - def calculate_score(self, c_param=1e-5): - return (self.q / self._cumulative_number_of_hours) + c_param * np.sqrt((2 * np.log(self.parent.n) / self.n)) - - - """ - This method runs a rollout from the current node to a certain number of steps - and returns the difference between the rollout return value and the baseline return - value, as well as the number of hours elapsed from the start of the episode to - the timestamp when the rollout ends - - Args: - env: Environment - node_environment_state: NodeEnvironmentState - rollout_policy: Policy - baseline_return_by_timestamp: Dict - rollout_steps: int - - Returns: - Tuple[float, float]: The return value of the rollout and the number of hours that the rollout took - """ - @ staticmethod - def run_rollout(env, # environment from which the rollout should begin - node_environment_state, # environment state of the environment before rollout - rollout_policy, # policy to use for the rollout - baseline_return_by_timestamp, # baseline return value by timestamp (obtained using the baseline policy) - rollout_steps # number of steps to rollout - ): - - return_val, _ = compute_avg_return(env, rollout_policy, render_interval_steps=1e30, num_steps=rollout_steps) - - rollout_return = node_environment_state.node_state_return + return_val - rollout_timestamp = env.building._simulator._current_timestamp - - env.reset() - episode_start_timestamp = env.current_simulation_timestamp - - return_delta = (rollout_return - baseline_return_by_timestamp[rollout_timestamp]) - number_of_hours = (rollout_timestamp - episode_start_timestamp).total_seconds() / SECONDS_IN_AN_HOUR - - return return_delta, number_of_hours - - - def is_terminal_node(self): - return False - - - def best_child(self): - """ - best_child, best_score = None, -1e30 - - for key in self.children: - c = self.children[key] - score = c.calculate_score() - - if score > best_score: - best_child = c - best_score = score - - return best_child - """ - pass - - - """ - This method spins up an environment using the config from @ param base_env_config - and then restores the state from @ param node_environment_state - - Args: - base_env_config: Dict - node_environment_state: NodeEnvironmentState - - Returns: - Environment: The environment with the state restored - """ - @ staticmethod - def get_node_environment(base_env_config, node_environment_state): - env = load_environment(base_env_config) - - env.building._simulator._building.temp = node_environment_state.node_temps - env.building._simulator._current_timestamp = node_environment_state.node_timestamp - env._current_time_step = node_environment_state.node_previous_step - - return env - - - def expand(self): - pass - - - def rollout(self): - pass - - def depth(self): - if not self.children: - return 1 - return 1 + max([child.depth() for child in self.children.values()]) - - def size(self): - if not self.children: - return 1 - return 1 + sum([child.size() for child in self.children.values()]) - - def get_returns_by_timestamp(self, result): - result[str(self.node_environment_state.node_timestamp)].append(self.node_environment_state.node_state_return) - for child in self.children.values(): - child.get_returns_by_timestamp(result) - return result - - -class SbSimMonteCarloTreeSearch(MonteCarloTreeSearch): - - def __init__(self, - node, - default_return_by_timestamp, - possible_actions, - base_env_config, - action_sequence, - rollout_steps=1, - expand_steps=1 - ): - - super().__init__(node) - self.default_return_by_timestamp = default_return_by_timestamp - self.possible_actions = possible_actions - self.base_env_config = base_env_config - self.action_sequence = action_sequence - self.rollout_steps = rollout_steps - self.expand_steps = expand_steps - - - """ - This is a recursive method to get the best @ param num_nodes nodes - in the MCTS tree - - Args: - num_nodes: int - c_param: float - - Returns: - List[tuple(SbsimMonteCarloTreeSearchNode, Tuple[float, float])]: List of the - nodes/action pairs that should be expanded - """ - def get_nodes_for_expansion(self, num_nodes=5, c_param=1e-5): - nodes_for_expansion = [] # each element is a tuple of (parent, node_to_expand, action) - - def recur(root): - if len(nodes_for_expansion) == num_nodes: return - - if not root.is_fully_expanded(self.possible_actions): - action = root.untried_actions(self.possible_actions).pop() - nodes_for_expansion.append((root, action)) - - nodes = [root.children[key] for key in root.children.keys()] - nodes.sort(key=lambda x: x.calculate_score(c_param=c_param), reverse=True) - for node in nodes: - recur(node) - - recur(self.root) - return nodes_for_expansion - - - """ - This method takes in the results of the node expansions simulations (which are parallelized), and then - takes care of actually adding the new nodes onto the tree - - Args: - expansion_results: List[tuple(SbsimMonteCarloTreeSearchNode, tuple, NodeEnvironmentState)] - - Returns: - List[SbsimMonteCarloTreeSearchNode]: List of the newly created nodes - """ - def perform_expansions(self, expansion_results): - - new_nodes = [] - - for parent, action, state in expansion_results: - new_nodes.append(parent.add_child(action, state)) - - return new_nodes - - """ - This method takes in the results of the rollouts (which are parallelized), and then takes care - of actually backpropagating the results of the rollouts - - Args: - rollout_results: List[tuple(SbsimMonteCarloTreeSearchNode, float, NodeEnvironmentState)] - - Returns: - """ - def perform_backpropagations(self, rollout_results): - for node, result, number_of_hours in rollout_results: - node.backpropagate(result, number_of_hours) - - - def get_tree_depth(self): - return self.root.depth() - - def get_tree_size(self): - return self.root.size() - - def get_returns_by_timestamp(self): - result = defaultdict(lambda: []) - return self.root.get_returns_by_timestamp(result) - \ No newline at end of file diff --git a/smart_control/mcts/SchedulePolicy.py b/smart_control/mcts/SchedulePolicy.py deleted file mode 100644 index 0c687f93..00000000 --- a/smart_control/mcts/SchedulePolicy.py +++ /dev/null @@ -1,304 +0,0 @@ -import numpy as np -import pandas as pd -import enum -import tensorflow as tf -from typing import Union, Optional, cast -from dataclasses import dataclass -from tf_agents.trajectories import policy_step -from tf_agents.policies import tf_policy -from tf_agents.specs import tensor_spec -from tf_agents.typing import types - -# We're concerned with controlling Heatpumps/ACs and Hot Water Systems (HWS). -class DeviceType(enum.Enum): - AC = 0 - HWS = 1 - - -SetpointName = str # Identify the setpoint -SetpointValue = Union[float, int, bool] - - -@dataclass -class ScheduleEvent: - start_time: pd.Timedelta - device: DeviceType - setpoint_name: SetpointName - setpoint_value: SetpointValue - - -# A schedule is a list of times and setpoints for a device. -Schedule = list[ScheduleEvent] -ActionSequence = list[tuple[DeviceType, SetpointName]] - - -def to_rad(sin_theta: float, cos_theta: float) -> float: - """Converts a sin and cos theta to radians to extract the time.""" - - if sin_theta >= 0 and cos_theta >= 0: - return np.arccos(cos_theta) - elif sin_theta >= 0 and cos_theta < 0: - return np.pi - np.arcsin(sin_theta) - elif sin_theta < 0 and cos_theta < 0: - return np.pi - np.arcsin(sin_theta) - else: - return 2 * np.pi - np.arccos(cos_theta) - - -def to_dow(sin_theta: float, cos_theta: float) -> float: - """Converts a sin and cos theta to days to extract day of week.""" - theta = to_rad(sin_theta, cos_theta) - return np.floor(7 * theta / 2 / np.pi) - - -def to_hod(sin_theta: float, cos_theta: float) -> float: - """Converts a sin and cos theta to hours to extract hour of day.""" - theta = to_rad(sin_theta, cos_theta) - return np.floor(24 * theta / 2 / np.pi) - - -def find_schedule_action( - schedule: Schedule, - device: DeviceType, - setpoint_name: SetpointName, - timestamp: pd.Timedelta, -) -> SetpointValue: - """Finds the action for a schedule event for a time and schedule.""" - - # Get all the schedule events for the device and the setpoint, and turn it - # into a series. - device_schedule_dict = {} - for schedule_event in schedule: - if ( - schedule_event.device == device - and schedule_event.setpoint_name == setpoint_name - ): - device_schedule_dict[schedule_event.start_time] = ( - schedule_event.setpoint_value - ) - device_schedule = pd.Series(device_schedule_dict) - - # Get the indexes of the schedule events that fall before the timestamp. - - device_schedule_indexes = device_schedule.index[ - device_schedule.index <= timestamp - ] - - # If are no events preceedding the time, then choose the last - # (assuming it wraps around). - if device_schedule_indexes.empty: - return device_schedule.loc[device_schedule.index[-1]] - else: - return device_schedule.loc[device_schedule_indexes[-1]] - -# @title Define a schedule policy -class SchedulePolicy(tf_policy.TFPolicy): - """TF Policy implementation of the Schedule policy.""" - - def __init__( - self, - time_step_spec, - action_spec: types.NestedTensorSpec, - action_sequence: ActionSequence, - weekday_schedule_events: Schedule, - weekend_holiday_schedule_events: Schedule, - dow_sin_index: int, - dow_cos_index: int, - hod_sin_index: int, - hod_cos_index: int, - action_normalizers, - local_start_time: str = pd.Timestamp, - policy_state_spec: types.NestedTensorSpec = (), - info_spec: types.NestedTensorSpec = (), - name: Optional[str] = None, - ): - self.weekday_schedule_events = weekday_schedule_events - self.weekend_holiday_schedule_events = weekend_holiday_schedule_events - self.dow_sin_index = dow_sin_index - self.dow_cos_index = dow_cos_index - self.hod_sin_index = hod_sin_index - self.hod_cos_index = hod_cos_index - self.action_sequence = action_sequence - self.action_normalizers = action_normalizers - self.local_start_time = local_start_time - self.norm_mean = 0.0 - self.norm_std = 1.0 - - policy_state_spec = () - - super().__init__( - time_step_spec=time_step_spec, - action_spec=action_spec, - policy_state_spec=policy_state_spec, - info_spec=info_spec, - clip=False, - observation_and_action_constraint_splitter=None, - name=name, - ) - - def _normalize_action_map( - self, action_map: dict[tuple[DeviceType, SetpointName], SetpointValue] - ) -> dict[tuple[DeviceType, SetpointName], SetpointValue]: - - normalized_action_map = {} - - for k, v in action_map.items(): - for normalizer_k, normalizer in self.action_normalizers.items(): - if normalizer_k.endswith(k[1]): - - normed_v = normalizer.agent_value(v) - normalized_action_map[k] = normed_v - - return normalized_action_map - - def _get_action( - self, time_step - ) -> dict[tuple[DeviceType, SetpointName], SetpointValue]: - - observation = time_step.observation - action_spec = cast(tensor_spec.BoundedTensorSpec, self.action_spec) - dow_sin = (observation[self.dow_sin_index] * self.norm_std) + self.norm_mean - dow_cos = (observation[self.dow_cos_index] * self.norm_std) + self.norm_mean - hod_sin = (observation[self.hod_sin_index] * self.norm_std) + self.norm_mean - hod_cos = (observation[self.hod_cos_index] * self.norm_std) + self.norm_mean - - dow = to_dow(dow_sin, dow_cos) - hod = to_hod(hod_sin, hod_cos) - - timestamp = ( - pd.Timedelta(hod, unit='hour') + self.local_start_time.utcoffset() - ) - - if dow < 5: # weekday - - action_map = { - (tup[0], tup[1]): find_schedule_action( - self.weekday_schedule_events, tup[0], tup[1], timestamp - ) - for tup in self.action_sequence - } - - return action_map - - else: # Weekend - - action_map = { - (tup[0], tup[1]): find_schedule_action( - self.weekend_holiday_schedule_events, tup[0], tup[1], timestamp - ) - for tup in self.action_sequence - } - - return action_map - - def _action(self, time_step, policy_state, seed): - del seed - action_map = self._get_action(time_step) - normalized_action_map = self._normalize_action_map(action_map) - - action = np.array( - [ - normalized_action_map[device_setpoint] - for device_setpoint in self.action_sequence - ], - dtype=np.float32, - ) - - t_action = tf.convert_to_tensor(action) - - return policy_step.PolicyStep(t_action, (), ()) - - -def find_fixed_action( - schedule: Schedule, - device: DeviceType, - setpoint_name: SetpointName -) -> SetpointValue: - """Finds the action for a schedule event for a time and schedule.""" - - # Get all the schedule events for the device and the setpoint, and turn it - # into a series. - setpoint_dict = {} - for schedule_event in schedule: - if (schedule_event.device == device and schedule_event.setpoint_name == setpoint_name): - setpoint_value = schedule_event.setpoint_value - - return setpoint_value - - -class FixedActionPolicy(tf_policy.TFPolicy): - """TF Policy implementation of the Schedule policy.""" - - def __init__( - self, - time_step_spec, - action_spec: types.NestedTensorSpec, - action_sequence: ActionSequence, - schedule_events: Schedule, - action_normalizers, - policy_state_spec: types.NestedTensorSpec = (), - info_spec: types.NestedTensorSpec = (), - name: Optional[str] = None, - ): - self.schedule_events = schedule_events - self.action_sequence = action_sequence - self.action_normalizers = action_normalizers - self.norm_mean = 0.0 - self.norm_std = 1.0 - - policy_state_spec = () - - super().__init__( - time_step_spec=time_step_spec, - action_spec=action_spec, - policy_state_spec=policy_state_spec, - info_spec=info_spec, - clip=False, - observation_and_action_constraint_splitter=None, - name=name, - ) - - def _normalize_action_map( - self, action_map: dict[tuple[DeviceType, SetpointName], SetpointValue] - ) -> dict[tuple[DeviceType, SetpointName], SetpointValue]: - - normalized_action_map = {} - - for k, v in action_map.items(): - for normalizer_k, normalizer in self.action_normalizers.items(): - if normalizer_k.endswith(k[1]): - - normed_v = normalizer.agent_value(v) - normalized_action_map[k] = normed_v - - return normalized_action_map - - def _get_action( - self, time_step - ) -> dict[tuple[DeviceType, SetpointName], SetpointValue]: - - action_map = { - (tup[0], tup[1]): find_fixed_action( - self.schedule_events, tup[0], tup[1] - ) - for tup in self.action_sequence - } - - return action_map - - def _action(self, time_step, policy_state, seed): - del seed - action_map = self._get_action(time_step) - normalized_action_map = self._normalize_action_map(action_map) - - action = np.array( - [ - normalized_action_map[device_setpoint] - for device_setpoint in self.action_sequence - ], - dtype=np.float32, - ) - - t_action = tf.convert_to_tensor(action) - - return policy_step.PolicyStep(t_action, (), ()) diff --git a/smart_control/mcts/execute_policy_utils.py b/smart_control/mcts/execute_policy_utils.py deleted file mode 100644 index b6c3c57b..00000000 --- a/smart_control/mcts/execute_policy_utils.py +++ /dev/null @@ -1,1003 +0,0 @@ -# @title Imports -import tensorflow as tf -import datetime -import pytz -import enum -import functools -import os -import os -import time -import gin -import matplotlib.pyplot as plt -import matplotlib.dates as mdates -import matplotlib.cm as cm -import mediapy as media -import reverb -import pandas as pd -import numpy as np -from IPython.display import clear_output -from matplotlib.ticker import MaxNLocator -from matplotlib import patches -from absl import logging -from dataclasses import dataclass -from typing import Final, Sequence -from typing import Optional -from typing import Union, cast -from tf_agents.specs import tensor_spec -from tf_agents.typing import types -from tf_agents.trajectories import trajectory -from tf_agents.trajectories import trajectory as trajectory_lib -from tf_agents.trajectories import time_step as ts -from tf_agents.trajectories import policy_step -from tf_agents.train.utils import train_utils -from tf_agents.train.utils import spec_utils -from tf_agents.train import triggers -from tf_agents.train import learner -from tf_agents.train import actor -from tf_agents.replay_buffers import reverb_utils -from tf_agents.replay_buffers import reverb_replay_buffer -from tf_agents.policies import tf_policy -from tf_agents.policies import random_py_policy -from tf_agents.policies import py_tf_eager_policy -from tf_agents.policies import greedy_policy -from tf_agents.networks import sequential -from tf_agents.networks import nest_map -from tf_agents.metrics import py_metrics -from tf_agents.keras_layers import inner_reshape -from tf_agents.drivers import py_driver -from tf_agents.agents.sac import tanh_normal_projection_network -from tf_agents.agents.sac import sac_agent -from smart_control.utils import environment_utils -from smart_control.utils import histogram_reducer -from smart_control.utils import writer_lib -from smart_control.utils import reader_lib -from smart_control.utils import observation_normalizer -from smart_control.utils import conversion_utils -from smart_control.utils import controller_writer -from smart_control.utils import controller_reader -from smart_control.utils import building_renderer -from smart_control.utils import bounded_action_normalizer -from smart_control.simulator import stochastic_convection_simulator -from smart_control.simulator import step_function_occupancy -from smart_control.simulator import simulator_building -from smart_control.simulator import rejection_simulator_building -from smart_control.simulator import randomized_arrival_departure_occupancy -from smart_control.reward import setpoint_energy_carbon_reward -from smart_control.reward import setpoint_energy_carbon_regret -from smart_control.reward import natural_gas_energy_cost -from smart_control.reward import electricity_energy_cost -from smart_control.proto import smart_control_normalization_pb2 -from smart_control.proto import smart_control_building_pb2 -from smart_control.environment.environment import Environment -from smart_control.environment import environment - - -os.environ['WRAPT_DISABLE_EXTENSIONS'] = 'true' - - -data_path = "/home/trigo/sbsim/sbsim/smart_control/configs/resources/sb1/" -metrics_path = "/home/trigo/sbsim/sbsim/metrics" # @param {type:"string"} -output_data_path = '/home/trigo/sbsim/sbsim/output' # @param {type:"string"} -root_dir = "/home/trigo/sbsim/sbsim/root" # @param {type:"string"} - - -# @title Plotting Utities -reward_shift = 0 -reward_scale = 1.0 -person_productivity_hour = 300.0 -KELVIN_TO_CELSIUS = 273.15 - - -# @title Plotting Utities -reward_shift = 0 -reward_scale = 1.0 -person_productivity_hour = 300.0 - - -KELVIN_TO_CELSIUS = 273.15 - - -def logging_info(*args): - logging.info(*args) - print(*args) - - -def render_env(env: environment.Environment): - """Renders the environment.""" - building_layout = env.building._simulator._building._floor_plan - - # create a renderer - renderer = building_renderer.BuildingRenderer(building_layout, 1) - - # get the current temps to render - # this also is not ideal, since the temps are not fully exposed. - # V Ideally this should be a publicly accessable field - temps = env.building._simulator._building.temp - - input_q = env.building._simulator._building.input_q - - # render - vmin = 285 - vmax = 305 - image = renderer.render( - temps, - cmap='bwr', - vmin=vmin, - vmax=vmax, - colorbar=False, - input_q=input_q, - diff_range=0.5, - diff_size=1, - ).convert('RGB') - media.show_image( - image, title='Environment %s' % env.current_simulation_timestamp - ) - - -def get_energy_timeseries(reward_infos, time_zone: str) -> pd.DataFrame: - """Returns a timeseries of energy rates.""" - - start_times = [] - end_times = [] - - device_ids = [] - device_types = [] - air_handler_blower_electrical_energy_rates = [] - air_handler_air_conditioner_energy_rates = [] - boiler_natural_gas_heating_energy_rates = [] - boiler_pump_electrical_energy_rates = [] - - for reward_info in reward_infos: - end_timestamp = conversion_utils.proto_to_pandas_timestamp( - reward_info.end_timestamp - ).tz_convert(time_zone) - start_timestamp = end_timestamp - pd.Timedelta(300, unit='second') - - for air_handler_id in reward_info.air_handler_reward_infos: - start_times.append(start_timestamp) - end_times.append(end_timestamp) - - device_ids.append(air_handler_id) - device_types.append('air_handler') - - air_handler_blower_electrical_energy_rates.append( - reward_info.air_handler_reward_infos[ - air_handler_id - ].blower_electrical_energy_rate - ) - air_handler_air_conditioner_energy_rates.append( - reward_info.air_handler_reward_infos[ - air_handler_id - ].air_conditioning_electrical_energy_rate - ) - boiler_natural_gas_heating_energy_rates.append(0) - boiler_pump_electrical_energy_rates.append(0) - - for boiler_id in reward_info.boiler_reward_infos: - start_times.append(start_timestamp) - end_times.append(end_timestamp) - - device_ids.append(boiler_id) - device_types.append('boiler') - - air_handler_blower_electrical_energy_rates.append(0) - air_handler_air_conditioner_energy_rates.append(0) - - boiler_natural_gas_heating_energy_rates.append( - reward_info.boiler_reward_infos[ - boiler_id - ].natural_gas_heating_energy_rate - ) - boiler_pump_electrical_energy_rates.append( - reward_info.boiler_reward_infos[boiler_id].pump_electrical_energy_rate - ) - - df_map = { - 'start_time': start_times, - 'end_time': end_times, - 'device_id': device_ids, - 'device_type': device_types, - 'air_handler_blower_electrical_energy_rate': ( - air_handler_blower_electrical_energy_rates - ), - 'air_handler_air_conditioner_energy_rate': ( - air_handler_air_conditioner_energy_rates - ), - 'boiler_natural_gas_heating_energy_rate': ( - boiler_natural_gas_heating_energy_rates - ), - 'boiler_pump_electrical_energy_rate': boiler_pump_electrical_energy_rates, - } - df = pd.DataFrame(df_map).sort_values('start_time') - return df - - -def get_outside_air_temperature_timeseries( - observation_responses, - time_zone: str, -) -> pd.Series: - """Returns a timeseries of outside air temperature.""" - temps = [] - for i in range(len(observation_responses)): - temp = [ - ( - conversion_utils.proto_to_pandas_timestamp( - sor.timestamp - ).tz_convert(time_zone) - - pd.Timedelta(300, unit='second'), - sor.continuous_value, - ) - for sor in observation_responses[i].single_observation_responses - if sor.single_observation_request.measurement_name - == 'outside_air_temperature_sensor' - ][0] - temps.append(temp) - - res = list(zip(*temps)) - return pd.Series(res[1], index=res[0]).sort_index() - - -def get_reward_timeseries( - reward_infos, - reward_responses, - time_zone: str, -) -> pd.DataFrame: - """Returns a timeseries of reward values.""" - cols = [ - 'agent_reward_value', - 'electricity_energy_cost', - 'carbon_emitted', - 'occupancy', - ] - df = pd.DataFrame(columns=cols) - - for i in range(min(len(reward_responses), len(reward_infos))): - step_start_timestamp = conversion_utils.proto_to_pandas_timestamp( - reward_infos[i].start_timestamp - ).tz_convert(time_zone) - step_end_timestamp = conversion_utils.proto_to_pandas_timestamp( - reward_infos[i].end_timestamp - ).tz_convert(time_zone) - delta_time_sec = (step_end_timestamp - - step_start_timestamp).total_seconds() - occupancy = np.sum([ - reward_infos[i].zone_reward_infos[zone_id].average_occupancy - for zone_id in reward_infos[i].zone_reward_infos - ]) - - df.loc[ - conversion_utils.proto_to_pandas_timestamp( - reward_infos[i].start_timestamp - ).tz_convert(time_zone) - ] = [ - reward_responses[i].agent_reward_value, - reward_responses[i].electricity_energy_cost, - reward_responses[i].carbon_emitted, - occupancy, - ] - - df = df.sort_index() - df['cumulative_reward'] = df['agent_reward_value'].cumsum() - logging_info('Cumulative reward: %4.2f' % df.iloc[-1]['cumulative_reward']) - return df - - -def format_plot( - ax1, xlabel: str, start_time: int, end_time: int, time_zone: str -): - """Formats a plot with common attributes.""" - ax1.set_facecolor('black') - ax1.xaxis.tick_top() - ax1.tick_params(axis='x', labelsize=12) - ax1.tick_params(axis='y', labelsize=12) - ax1.xaxis.set_major_formatter( - mdates.DateFormatter('%a %m/%d %H:%M', tz=pytz.timezone(time_zone)) - ) - ax1.grid(color='gray', linestyle='-', linewidth=1.0) - ax1.set_ylabel(xlabel, color='blue', fontsize=12) - ax1.set_xlim(left=start_time, right=end_time) - ax1.yaxis.set_major_locator(MaxNLocator(integer=True)) - ax1.legend(prop={'size': 10}) - - -def plot_occupancy_timeline( - ax1, reward_timeseries: pd.DataFrame, time_zone: str -): - local_times = [ts.tz_convert(time_zone) for ts in reward_timeseries.index] - ax1.plot( - local_times, - reward_timeseries['occupancy'], - color='cyan', - marker=None, - alpha=1, - lw=2, - linestyle='-', - label='Num Occupants', - ) - format_plot( - ax1, - 'Occupancy', - reward_timeseries.index.min(), - reward_timeseries.index.max(), - time_zone, - ) - - -def plot_energy_cost_timeline( - ax1, - reward_timeseries: pd.DataFrame, - time_zone: str, - cumulative: bool = False, -): - local_times = [ts.tz_convert(time_zone) for ts in reward_timeseries.index] - if cumulative: - feature_timeseries_cost = reward_timeseries[ - 'electricity_energy_cost' - ].cumsum() - else: - feature_timeseries_cost = reward_timeseries['electricity_energy_cost'] - ax1.plot( - local_times, - feature_timeseries_cost, - color='magenta', - marker=None, - alpha=1, - lw=2, - linestyle='-', - label='Electricity', - ) - - format_plot( - ax1, - 'Energy Cost [$]', - reward_timeseries.index.min(), - reward_timeseries.index.max(), - time_zone, - ) - - -def plot_reward_timeline(ax1, reward_timeseries, time_zone): - - local_times = [ts.tz_convert(time_zone) for ts in reward_timeseries.index] - - ax1.plot( - local_times, - reward_timeseries['cumulative_reward'], - color='royalblue', - marker=None, - alpha=1, - lw=6, - linestyle='-', - label='reward', - ) - format_plot( - ax1, - 'Agent Reward', - reward_timeseries.index.min(), - reward_timeseries.index.max(), - time_zone, - ) - - -def plot_energy_timeline(ax1, energy_timeseries, time_zone, cumulative=False): - - def _to_kwh( - energy_rate: float, - step_interval: pd.Timedelta = pd.Timedelta(5, unit='minute'), - ) -> float: - kw_power = energy_rate / 1000.0 - hwh_power = kw_power * step_interval / pd.Timedelta(1, unit='hour') - return hwh_power.cumsum() - - timeseries = energy_timeseries[ - energy_timeseries['device_type'] == 'air_handler' - ] - - if cumulative: - feature_timeseries_ac = _to_kwh( - timeseries['air_handler_air_conditioner_energy_rate'] - ) - feature_timeseries_blower = _to_kwh( - timeseries['air_handler_blower_electrical_energy_rate'] - ) - else: - feature_timeseries_ac = ( - timeseries['air_handler_air_conditioner_energy_rate'] / 1000.0 - ) - feature_timeseries_blower = ( - timeseries['air_handler_blower_electrical_energy_rate'] / 1000.0 - ) - - ax1.plot( - timeseries['start_time'], - feature_timeseries_ac, - color='magenta', - marker=None, - alpha=1, - lw=4, - linestyle='-', - label='AHU Electricity', - ) - ax1.plot( - timeseries['start_time'], - feature_timeseries_blower, - color='magenta', - marker=None, - alpha=1, - lw=4, - linestyle='--', - label='FAN Electricity', - ) - - timeseries = energy_timeseries[energy_timeseries['device_type'] == 'boiler'] - if cumulative: - feature_timeseries_gas = _to_kwh( - timeseries['boiler_natural_gas_heating_energy_rate'] - ) - feature_timeseries_pump = _to_kwh( - timeseries['boiler_pump_electrical_energy_rate'] - ) - else: - feature_timeseries_gas = ( - timeseries['boiler_natural_gas_heating_energy_rate'] / 1000.0 - ) - feature_timeseries_pump = ( - timeseries['boiler_pump_electrical_energy_rate'] / 1000.0 - ) - - ax1.plot( - timeseries['start_time'], - feature_timeseries_gas, - color='lime', - marker=None, - alpha=1, - lw=4, - linestyle='-', - label='BLR Gas', - ) - ax1.plot( - timeseries['start_time'], - feature_timeseries_pump, - color='lime', - marker=None, - alpha=1, - lw=4, - linestyle='--', - label='Pump Electricity', - ) - - if cumulative: - label = 'HVAC Energy Consumption [kWh]' - else: - label = 'HVAC Power Consumption [kW]' - - format_plot( - ax1, - label, - timeseries['start_time'].min(), - timeseries['end_time'].max(), - time_zone, - ) - - -def plot_carbon_timeline(ax1, reward_timeseries, time_zone, cumulative=False): - """Plots carbon-emission timeline.""" - - if cumulative: - feature_timeseries_carbon = reward_timeseries['carbon_emitted'].cumsum( - ) - else: - feature_timeseries_carbon = reward_timeseries['carbon_emitted'] - ax1.plot( - reward_timeseries.index, - feature_timeseries_carbon, - color='white', - marker=None, - alpha=1, - lw=4, - linestyle='-', - label='Carbon', - ) - format_plot( - ax1, - 'Carbon emission [kg]', - reward_timeseries.index.min(), - reward_timeseries.index.max(), - time_zone, - ) - - -def get_zone_timeseries(reward_infos, time_zone): - """Converts reward infos to a timeseries dataframe.""" - - start_times = [] - end_times = [] - zones = [] - heating_setpoints = [] - cooling_setpoints = [] - zone_air_temperatures = [] - air_flow_rate_setpoints = [] - air_flow_rates = [] - average_occupancies = [] - - for reward_info in reward_infos: - start_timestamp = conversion_utils.proto_to_pandas_timestamp( - reward_info.end_timestamp - ).tz_convert(time_zone) - pd.Timedelta(300, unit='second') - end_timestamp = conversion_utils.proto_to_pandas_timestamp( - reward_info.end_timestamp - ).tz_convert(time_zone) - - for zone_id in reward_info.zone_reward_infos: - zones.append(zone_id) - start_times.append(start_timestamp) - end_times.append(end_timestamp) - - heating_setpoints.append( - reward_info.zone_reward_infos[zone_id].heating_setpoint_temperature - ) - cooling_setpoints.append( - reward_info.zone_reward_infos[zone_id].cooling_setpoint_temperature - ) - - zone_air_temperatures.append( - reward_info.zone_reward_infos[zone_id].zone_air_temperature - ) - air_flow_rate_setpoints.append( - reward_info.zone_reward_infos[zone_id].air_flow_rate_setpoint - ) - air_flow_rates.append( - reward_info.zone_reward_infos[zone_id].air_flow_rate - ) - average_occupancies.append( - reward_info.zone_reward_infos[zone_id].average_occupancy - ) - - df_map = { - 'start_time': start_times, - 'end_time': end_times, - 'zone': zones, - 'heating_setpoint_temperature': heating_setpoints, - 'cooling_setpoint_temperature': cooling_setpoints, - 'zone_air_temperature': zone_air_temperatures, - 'air_flow_rate_setpoint': air_flow_rate_setpoints, - 'air_flow_rate': air_flow_rates, - 'average_occupancy': average_occupancies, - } - return pd.DataFrame(df_map).sort_values('start_time') - - -def get_action_timeseries(action_responses): - """Converts action responses to a dataframe.""" - timestamps = [] - device_ids = [] - setpoint_names = [] - setpoint_values = [] - response_types = [] - for action_response in action_responses: - - timestamp = conversion_utils.proto_to_pandas_timestamp( - action_response.timestamp - ) - for single_action_response in action_response.single_action_responses: - device_id = single_action_response.request.device_id - setpoint_name = single_action_response.request.setpoint_name - setpoint_value = single_action_response.request.continuous_value - response_type = single_action_response.response_type - - timestamps.append(timestamp) - device_ids.append(device_id) - setpoint_names.append(setpoint_name) - setpoint_values.append(setpoint_value) - response_types.append(response_type) - - return pd.DataFrame({ - 'timestamp': timestamps, - 'device_id': device_ids, - 'setpoint_name': setpoint_names, - 'setpoint_value': setpoint_values, - 'response_type': response_types, - }) - - -def plot_action_timeline(ax1, action_timeseries, action_tuple, time_zone): - """Plots action timeline.""" - - single_action_timeseries = action_timeseries[ - (action_timeseries['device_id'] == action_tuple[0]) - & (action_timeseries['setpoint_name'] == action_tuple[1]) - ] - single_action_timeseries = single_action_timeseries.sort_values( - by='timestamp' - ) - - if action_tuple[1] in [ - 'supply_water_setpoint', - 'supply_air_heating_temperature_setpoint', - ]: - single_action_timeseries['setpoint_value'] = ( - single_action_timeseries['setpoint_value'] - KELVIN_TO_CELSIUS - ) - - ax1.plot( - single_action_timeseries['timestamp'], - single_action_timeseries['setpoint_value'], - color='lime', - marker=None, - alpha=1, - lw=4, - linestyle='-', - label=action_tuple[1], - ) - title = '%s %s' % (action_tuple[0], action_tuple[1]) - format_plot( - ax1, - 'Action', - single_action_timeseries['timestamp'].min(), - single_action_timeseries['timestamp'].max(), - time_zone, - ) - - -def get_outside_air_temperature_timeseries(observation_responses, time_zone): - temps = [] - for i in range(len(observation_responses)): - temp = [ - ( - conversion_utils.proto_to_pandas_timestamp( - sor.timestamp - ).tz_convert(time_zone), - sor.continuous_value, - ) - for sor in observation_responses[i].single_observation_responses - if sor.single_observation_request.measurement_name - == 'outside_air_temperature_sensor' - ][0] - temps.append(temp) - - res = list(zip(*temps)) - return pd.Series(res[1], index=res[0]).sort_index() - - -def plot_temperature_timeline( - ax1, zone_timeseries, outside_air_temperature_timeseries, time_zone -): - zone_temps = pd.pivot_table( - zone_timeseries, - index=zone_timeseries['start_time'], - columns='zone', - values='zone_air_temperature', - ).sort_index() - zone_temps.quantile(q=0.25, axis=1) - zone_temp_stats = pd.DataFrame({ - 'min_temp': zone_temps.min(axis=1), - 'q25_temp': zone_temps.quantile(q=0.25, axis=1), - 'median_temp': zone_temps.median(axis=1), - 'q75_temp': zone_temps.quantile(q=0.75, axis=1), - 'max_temp': zone_temps.max(axis=1), - }) - - zone_heating_setpoints = ( - pd.pivot_table( - zone_timeseries, - index=zone_timeseries['start_time'], - columns='zone', - values='heating_setpoint_temperature', - ) - .sort_index() - .min(axis=1) - ) - zone_cooling_setpoints = ( - pd.pivot_table( - zone_timeseries, - index=zone_timeseries['start_time'], - columns='zone', - values='cooling_setpoint_temperature', - ) - .sort_index() - .max(axis=1) - ) - - ax1.plot( - zone_cooling_setpoints.index, - zone_cooling_setpoints - KELVIN_TO_CELSIUS, - color='yellow', - lw=1, - ) - ax1.plot( - zone_cooling_setpoints.index, - zone_heating_setpoints - KELVIN_TO_CELSIUS, - color='yellow', - lw=1, - ) - - ax1.fill_between( - zone_temp_stats.index, - zone_temp_stats['min_temp'] - KELVIN_TO_CELSIUS, - zone_temp_stats['max_temp'] - KELVIN_TO_CELSIUS, - facecolor='green', - alpha=0.8, - ) - ax1.fill_between( - zone_temp_stats.index, - zone_temp_stats['q25_temp'] - KELVIN_TO_CELSIUS, - zone_temp_stats['q75_temp'] - KELVIN_TO_CELSIUS, - facecolor='green', - alpha=0.8, - ) - ax1.plot( - zone_temp_stats.index, - zone_temp_stats['median_temp'] - KELVIN_TO_CELSIUS, - color='white', - lw=3, - alpha=1.0, - ) - ax1.plot( - outside_air_temperature_timeseries.index, - outside_air_temperature_timeseries - KELVIN_TO_CELSIUS, - color='magenta', - lw=3, - alpha=1.0, - ) - format_plot( - ax1, - 'Temperature [C]', - zone_temp_stats.index.min(), - zone_temp_stats.index.max(), - time_zone, - ) - - -def plot_timeseries_charts(reader, time_zone): - """Plots timeseries charts.""" - - observation_responses = reader.read_observation_responses( - pd.Timestamp.min, pd.Timestamp.max - ) - action_responses = reader.read_action_responses( - pd.Timestamp.min, pd.Timestamp.max - ) - reward_infos = reader.read_reward_infos(pd.Timestamp.min, pd.Timestamp.max) - reward_responses = reader.read_reward_responses( - pd.Timestamp.min, pd.Timestamp.max - ) - - if len(reward_infos) == 0 or len(reward_responses) == 0: - return - - action_timeseries = get_action_timeseries(action_responses) - action_tuples = list( - set([ - (row['device_id'], row['setpoint_name']) - for _, row in action_timeseries.iterrows() - ]) - ) - - reward_timeseries = get_reward_timeseries( - reward_infos, reward_responses, time_zone - ).sort_index() - outside_air_temperature_timeseries = get_outside_air_temperature_timeseries( - observation_responses, time_zone - ) - zone_timeseries = get_zone_timeseries(reward_infos, time_zone) - fig, axes = plt.subplots( - nrows=6 + len(action_tuples), - ncols=1, - gridspec_kw={ - 'height_ratios': [1, 1, 1, 1, 1, 1] + [1] * len(action_tuples) - }, - squeeze=True, - ) - fig.set_size_inches(24, 25) - - energy_timeseries = get_energy_timeseries(reward_infos, time_zone) - plot_reward_timeline(axes[0], reward_timeseries, time_zone) - plot_energy_timeline(axes[1], energy_timeseries, - time_zone, cumulative=True) - plot_energy_cost_timeline( - axes[2], reward_timeseries, time_zone, cumulative=True - ) - plot_carbon_timeline(axes[3], reward_timeseries, - time_zone, cumulative=True) - plot_occupancy_timeline(axes[4], reward_timeseries, time_zone) - plot_temperature_timeline( - axes[5], zone_timeseries, outside_air_temperature_timeseries, time_zone - ) - - for i, action_tuple in enumerate(action_tuples): - plot_action_timeline( - axes[6 + i], action_timeseries, action_tuple, time_zone - ) - - plt.show() - - -def remap_filepath(filepath) -> str: - return filepath - - -def load_environment(gin_config_file: str): - """Returns an Environment from a config file.""" - # Global definition is required by Gin library to instantiate Environment. - # global environment # pylint: disable=global-variable-not-assigned - - with gin.unlock_config(): - gin.clear_config() - gin.parse_config_file(gin_config_file) - return Environment() # pylint: disable=no-value-for-parameter - - -def get_latest_episode_reader( - metrics_path: str, -) -> controller_reader.ProtoReader: - - episode_infos = controller_reader.get_episode_data( - metrics_path).sort_index() - selected_episode = episode_infos.index[-1] - episode_path = os.path.join(metrics_path, selected_episode) - reader = controller_reader.ProtoReader(episode_path) - return reader - - -@gin.configurable -def get_histogram_path(): - return data_path - - -@gin.configurable -def get_reset_temp_values(): - reset_temps_filepath = remap_filepath( - os.path.join(data_path, "reset_temps.npy") - ) - - return np.load(reset_temps_filepath) - - -@gin.configurable -def get_zone_path(): - return remap_filepath( - os.path.join(data_path, "double_resolution_zone_1_2.npy") - ) - - -@gin.configurable -def get_metrics_path(): - return os.path.join(metrics_path, "metrics") - - -@gin.configurable -def get_weather_path(): - return remap_filepath( - os.path.join( - data_path, "local_weather_moffett_field_20230701_20231122.csv" - ) - ) - - -# @title Load the environments -histogram_parameters_tuples = ( - ('zone_air_temperature_sensor', (285., 286., 287., 288, 289., 290., 291., - 292., 293., 294., 295., 296., 297., 298., 299., 300., 301, 302, 303)), - ('supply_air_damper_percentage_command', (0.0, 0.2, 0.4, 0.6, 0.8, 1.0)), - ('supply_air_flowrate_setpoint', (0., 0.05, .1, .2, .3, .4, .5, .7, .9)), -) - - -@gin.configurable -def get_histogram_reducer(): - - reader = controller_reader.ProtoReader(data_path) - - hr = histogram_reducer.HistogramReducer( - histogram_parameters_tuples=histogram_parameters_tuples, - reader=reader, - normalize_reduce=True, - ) - return hr - - -# @title Define a method to execute the policy on the environment. -def get_trajectory(time_step, current_action: policy_step.PolicyStep): - """Get the trajectory for the current action and time step.""" - observation = time_step.observation - action = current_action.action - policy_info = () - reward = time_step.reward - discount = time_step.discount - - if time_step.is_first(): - traj = trajectory.first(observation, action, - policy_info, reward, discount) - - elif time_step.is_last(): - traj = trajectory.last(observation, action, - policy_info, reward, discount) - - else: - traj = trajectory.mid(observation, action, - policy_info, reward, discount) - return traj - - -def compute_avg_return( - environment, - policy, - num_episodes=1, - time_zone: str = "US/Pacific", - render_interval_steps: int = 24, - trajectory_observers=None, - num_steps=6 -): - """Computes the average return of the policy on the environment. - - Args: - environment: environment.Environment - policy: policy.Policy - num_episodes: total number of eposides to run. - time_zone: time zone of the environment - render_interval_steps: Number of steps to take between rendering. - trajectory_observers: list of trajectory observers for use in rendering. - """ - - total_return = 0.0 - return_by_simtime = [] - for _ in range(num_episodes): - - time_step = environment.current_time_step() - if not time_step: - time_step = environment.reset() - - episode_return = 0.0 - t0 = time.time() - epoch = t0 - - step_id = 0 - execution_times = [] - - for _ in range(num_steps): - - action_step = policy.action(time_step) - time_step = environment.step(action_step.action) - - if trajectory_observers is not None: - traj = get_trajectory(time_step, action_step) - for observer in trajectory_observers: - observer(traj) - - episode_return += time_step.reward - t1 = time.time() - dt = t1 - t0 - episode_seconds = t1 - epoch - execution_times.append(dt) - sim_time = environment.current_simulation_timestamp.tz_convert( - time_zone) - - return_by_simtime.append([sim_time, episode_return]) - - print( - "Step %5d Sim Time: %s, Reward: %8.2f, Return: %8.2f, Mean Step Time:" - " %8.2f s, Episode Time: %8.2f s" - % ( - step_id, - sim_time.strftime("%Y-%m-%d %H:%M"), - time_step.reward, - episode_return, - np.mean(execution_times), - episode_seconds, - ) - ) - - if (step_id > 0) and (step_id % render_interval_steps == 0): - if environment._metrics_path: - clear_output(wait=True) - reader = get_latest_episode_reader( - environment._metrics_path) - plot_timeseries_charts(reader, time_zone) - render_env(environment) - - t0 = t1 - step_id += 1 - total_return += episode_return - - avg_return = total_return / num_episodes - return avg_return, return_by_simtime diff --git a/smart_control/mcts/mcts_experiment.py b/smart_control/mcts/mcts_experiment.py deleted file mode 100644 index a054807c..00000000 --- a/smart_control/mcts/mcts_experiment.py +++ /dev/null @@ -1,266 +0,0 @@ -import os -import json -import pandas as pd -import multiprocessing as mp -import argparse -from time import time -from tqdm import tqdm -from tf_agents.train.utils import spec_utils -from smart_control.mcts.mcts_utils import get_available_actions -from smart_control.mcts.execute_policy_utils import load_environment, compute_avg_return -from smart_control.mcts.SchedulePolicy import SchedulePolicy, FixedActionPolicy, ScheduleEvent, DeviceType -from smart_control.mcts.MonteCarloTreeSearch import SbSimMonteCarloTreeSearch, SbsimMonteCarloTreeSearchNode, NodeEnvironmentState - - -data_path = "/home/trigo/sbsim/sbsim/smart_control/configs/resources/sb1/" -default_env_config = os.path.join(data_path, "sim_config.gin") -default_env = load_environment(default_env_config) -default_action_sequence = [ - (DeviceType.HWS, 'supply_water_setpoint'), - (DeviceType.AC, 'supply_air_heating_temperature_setpoint') -] - - -def get_policy_with_fixed_action(env, action): - schedule_events = [ - ScheduleEvent( - pd.Timedelta(0, unit='hour'), - DeviceType.AC, - 'supply_air_heating_temperature_setpoint', - action[0], - ), - ScheduleEvent( - pd.Timedelta(0, unit='hour'), - DeviceType.HWS, - 'supply_water_setpoint', - action[1], - ) - ] - - _, action_spec, time_step_spec = spec_utils.get_tensor_specs(env) - - policy = FixedActionPolicy( - time_step_spec=time_step_spec, - action_spec=action_spec, - action_sequence=default_action_sequence, - schedule_events=schedule_events, - action_normalizers=env._action_normalizers, - ) - - return policy - - -def get_default_schedule_policy(env): - hod_cos_index = default_env._field_names.index('hod_cos_000') - hod_sin_index = default_env._field_names.index('hod_sin_000') - dow_cos_index = default_env._field_names.index('dow_cos_000') - dow_sin_index = default_env._field_names.index('dow_sin_000') - - # Note that temperatures are specified in Kelvin: - weekday_schedule_events = [ - ScheduleEvent( - pd.Timedelta(6, unit='hour'), - DeviceType.AC, - 'supply_air_heating_temperature_setpoint', - 292.0, - ), - ScheduleEvent( - pd.Timedelta(19, unit='hour'), - DeviceType.AC, - 'supply_air_heating_temperature_setpoint', - 285.0, - ), - ScheduleEvent( - pd.Timedelta(6, unit='hour'), - DeviceType.HWS, - 'supply_water_setpoint', - 350.0, - ), - ScheduleEvent( - pd.Timedelta(19, unit='hour'), - DeviceType.HWS, - 'supply_water_setpoint', - 315.0, - ), - ] - - weekend_holiday_schedule_events = [ - ScheduleEvent( - pd.Timedelta(6, unit='hour'), - DeviceType.AC, - 'supply_air_heating_temperature_setpoint', - 285.0, - ), - ScheduleEvent( - pd.Timedelta(19, unit='hour'), - DeviceType.AC, - 'supply_air_heating_temperature_setpoint', - 285.0, - ), - ScheduleEvent( - pd.Timedelta(6, unit='hour'), - DeviceType.HWS, - 'supply_water_setpoint', - 315.0, - ), - ScheduleEvent( - pd.Timedelta(19, unit='hour'), - DeviceType.HWS, - 'supply_water_setpoint', - 315.0, - ), - ] - - action_normalizers = env._action_normalizers - - _, action_spec, time_step_spec = spec_utils.get_tensor_specs(env) - local_start_time = env.current_simulation_timestamp.tz_convert(tz='US/Pacific') - - schedule_policy = SchedulePolicy( - time_step_spec=time_step_spec, - action_spec=action_spec, - action_sequence=default_action_sequence, - weekday_schedule_events=weekday_schedule_events, - weekend_holiday_schedule_events=weekend_holiday_schedule_events, - dow_sin_index=dow_sin_index, - dow_cos_index=dow_cos_index, - hod_sin_index=hod_sin_index, - hod_cos_index=hod_cos_index, - local_start_time=local_start_time, - action_normalizers=action_normalizers, - ) - return schedule_policy - - -def main(): - - start_time = time() - - # Parse experiment arguments - parser = argparse.ArgumentParser() - parser.add_argument("--num_rollouts", type=int, default=50) - parser.add_argument("--expansion_num_steps", type=int, default=12) - parser.add_argument("--rollout_num_steps", type=int, default=12) - parser.add_argument("--num_processes", type=int, default=8) - - parser.add_argument("--t_water_low", type=int, default=285) - parser.add_argument("--t_water_high", type=int, default=300) - parser.add_argument("--t_air_low", type=int, default=310) - parser.add_argument("--t_air_high", type=int, default=350) - parser.add_argument("--t_water_step", type=int, default=5) - parser.add_argument("--t_air_step", type=int, default=10) - - # if True, uses only the two actions from the default schedule - parser.add_argument("--use_only_baseline_actions", type=bool, default=True) - - args = parser.parse_args() - - - # Retrieve return information of default strategy - return_by_timestamp = {} - with open('./returns.json', 'r') as file: - data = json.load(file) - for timestamp, return_value in data: - return_by_timestamp[pd.Timestamp(timestamp)] = return_value - - # Get all possible actions - if args.use_only_baseline_actions: - possible_actions = [(292, 350), (285, 315)] - else: - possible_actions = get_available_actions(args.t_water_low, - args.t_water_high, - args.t_air_low, - args.t_air_high, - args.t_water_step, - args.t_air_step) - - # Create Monte Carlo Tree - starting_node_environment_state = NodeEnvironmentState( - node_temps=default_env.building._simulator._building.temp, - node_timestamp=default_env.building._simulator._current_timestamp, - node_state_return=0, - node_previous_step=None) - root = SbsimMonteCarloTreeSearchNode(starting_node_environment_state) - tree = SbSimMonteCarloTreeSearch(root, - return_by_timestamp, - possible_actions, - default_env_config, - default_action_sequence, - ) - - mp.set_start_method("spawn") # required for multiprocessing to work - progress_bar = tqdm(total=args.num_rollouts) - - while progress_bar.n < args.num_rollouts: - - nodes_for_expansion = tree.get_nodes_for_expansion(num_nodes=args.num_processes) # nodes for expansion is a list of tuples (node, action) - expansion_work_items = [(node.node_environment_state, action, args.expansion_num_steps) for node, action in nodes_for_expansion] - - - with mp.Pool(processes=args.num_processes) as pool: - expansion_results = pool.map(expansion_worker, expansion_work_items) - - expansion_results = [(x, y, z) for (x, y), z in zip(nodes_for_expansion, expansion_results)] - new_nodes = tree.perform_expansions(expansion_results) - - - rollout_items = [(node.node_environment_state, return_by_timestamp, args.rollout_num_steps) for node in new_nodes] - with mp.Pool(processes=args.num_processes) as pool: - rollout_results = pool.map(rollout_worker, rollout_items) - - rollout_results = [(x, y, z) for x, (y, z) in zip(new_nodes, rollout_results)] - tree.perform_backpropagations(rollout_results) - - progress_bar.update(len(nodes_for_expansion)) - - end_time = time() - - experiment_results = { - "args": { - "num_rollouts": args.num_rollouts, - "expansion_num_steps": args.expansion_num_steps, - "rollout_num_steps": args.rollout_num_steps, - "num_processes": args.num_processes, - "t_water_low": args.t_water_low, - "t_water_high": args.t_water_high, - "t_air_low": args.t_air_low, - "t_air_high": args.t_air_high, - "t_water_step": args.t_water_step, - "t_air_step": args.t_air_step - }, - - "tree_depth": tree.get_tree_depth(), - "tree_size": tree.get_tree_size(), - "returns_by_timestamp": tree.get_returns_by_timestamp(), - "experiment_time": end_time - start_time - } - - json.dump(experiment_results, - open(f"experiment_results_two_actions/num_rollouts{ args.num_rollouts }num_processes{ args.num_processes }.json", "w"), - indent=4) - - return - - -def expansion_worker(item): - node_environment_state, action, expansion_steps = item - env = SbsimMonteCarloTreeSearchNode.get_node_environment(default_env_config, node_environment_state) - policy = get_policy_with_fixed_action(default_env, action) - - return SbsimMonteCarloTreeSearchNode.run_expansion(env, node_environment_state, policy, num_steps=expansion_steps) - - -def rollout_worker(item): - node_environment_state, return_by_timestamp, rollout_steps = item - env = SbsimMonteCarloTreeSearchNode.get_node_environment(default_env_config, node_environment_state) - rollout_policy = get_default_schedule_policy(default_env) - - return SbsimMonteCarloTreeSearchNode.run_rollout(env, - node_environment_state, - rollout_policy, - return_by_timestamp, - rollout_steps=rollout_steps) - - -if __name__ == "__main__": - main() diff --git a/smart_control/mcts/mcts_utils.py b/smart_control/mcts/mcts_utils.py deleted file mode 100644 index e0a41b3b..00000000 --- a/smart_control/mcts/mcts_utils.py +++ /dev/null @@ -1,11 +0,0 @@ - -""" - This returns all possible actions given water and air temperature ranges and steps. - The number of actions returned by this method is the branching factor in the MCTS tree. -""" -def get_available_actions(t_water_low, t_water_high, t_air_low, t_air_high, water_step, air_step): - possible_actions = set() - for water_temp in range(t_water_low, t_water_high + water_step, water_step): - for air_temp in range(t_air_low, t_air_high + air_step, air_step): - possible_actions.add((water_temp, air_temp)) - return possible_actions diff --git a/smart_control/mcts/returns.json b/smart_control/mcts/returns.json deleted file mode 100644 index 5029e5cc..00000000 --- a/smart_control/mcts/returns.json +++ /dev/null @@ -1 +0,0 @@ -[["2023-07-06T00:05:00-07:00", -0.01950560137629509], ["2023-07-06T00:10:00-07:00", -0.03901120275259018], ["2023-07-06T00:15:00-07:00", -0.05851680412888527], ["2023-07-06T00:20:00-07:00", -0.07802240550518036], ["2023-07-06T00:25:00-07:00", -0.09752800688147545], ["2023-07-06T00:30:00-07:00", -0.11703360825777054], ["2023-07-06T00:35:00-07:00", -0.13653920963406563], ["2023-07-06T00:40:00-07:00", -0.15604481101036072], ["2023-07-06T00:45:00-07:00", -0.1755504123866558], ["2023-07-06T00:50:00-07:00", -0.1950560137629509], ["2023-07-06T00:55:00-07:00", -0.214561615139246], ["2023-07-06T01:00:00-07:00", -0.23421856947243214], ["2023-07-06T01:05:00-07:00", -0.2538755238056183], ["2023-07-06T01:10:00-07:00", -0.27353247813880444], ["2023-07-06T01:15:00-07:00", -0.2931894324719906], ["2023-07-06T01:20:00-07:00", -0.31284638680517673], ["2023-07-06T01:25:00-07:00", -0.3325033411383629], ["2023-07-06T01:30:00-07:00", -0.35216029547154903], ["2023-07-06T01:35:00-07:00", -0.3718172498047352], ["2023-07-06T01:40:00-07:00", -0.39147420413792133], ["2023-07-06T01:45:00-07:00", -0.4111311584711075], ["2023-07-06T01:50:00-07:00", -0.43078811280429363], ["2023-07-06T01:55:00-07:00", -0.4504450671374798], ["2023-07-06T02:00:00-07:00", -0.4701610505580902], ["2023-07-06T02:05:00-07:00", -0.48987703397870064], ["2023-07-06T02:10:00-07:00", -0.5095930173993111], ["2023-07-06T02:15:00-07:00", -0.5293090008199215], ["2023-07-06T02:20:00-07:00", -0.5490249842405319], ["2023-07-06T02:25:00-07:00", -0.5687409676611423], ["2023-07-06T02:30:00-07:00", -0.5884569510817528], ["2023-07-06T02:35:00-07:00", -0.6081729345023632], ["2023-07-06T02:40:00-07:00", -0.6278889179229736], ["2023-07-06T02:45:00-07:00", -0.6476049013435841], ["2023-07-06T02:50:00-07:00", -0.6673208847641945], ["2023-07-06T02:55:00-07:00", -0.6870368681848049], ["2023-07-06T03:00:00-07:00", -0.7067711930721998], ["2023-07-06T03:05:00-07:00", -0.7265055179595947], ["2023-07-06T03:10:00-07:00", -0.7462398428469896], ["2023-07-06T03:15:00-07:00", -0.7659741677343845], ["2023-07-06T03:20:00-07:00", -0.7857084926217794], ["2023-07-06T03:25:00-07:00", -0.8054428175091743], ["2023-07-06T03:30:00-07:00", -0.8251771423965693], ["2023-07-06T03:35:00-07:00", -0.8449114672839642], ["2023-07-06T03:40:00-07:00", -0.8646457921713591], ["2023-07-06T03:45:00-07:00", -0.884380117058754], ["2023-07-06T03:50:00-07:00", -0.9041144419461489], ["2023-07-06T03:55:00-07:00", -0.9238487668335438], ["2023-07-06T04:00:00-07:00", -0.9435950517654419], ["2023-07-06T04:05:00-07:00", -0.9633418880403042], ["2023-07-06T04:10:00-07:00", -0.9830892775207758], ["2023-07-06T04:15:00-07:00", -1.0028372183442116], ["2023-07-06T04:20:00-07:00", -1.0225857105106115], ["2023-07-06T04:25:00-07:00", -1.0423347558826208], ["2023-07-06T04:30:00-07:00", -1.0620843525975943], ["2023-07-06T04:35:00-07:00", -1.0818345006555319], ["2023-07-06T04:40:00-07:00", -1.1015852000564337], ["2023-07-06T04:45:00-07:00", -1.1213364526629448], ["2023-07-06T04:50:00-07:00", -1.14108825661242], ["2023-07-06T04:55:00-07:00", -1.1608406119048595], ["2023-07-06T05:00:00-07:00", -1.1810077335685492], ["2023-07-06T05:05:00-07:00", -1.2011748552322388], ["2023-07-06T05:10:00-07:00", -1.2213419768959284], ["2023-07-06T05:15:00-07:00", -1.241509098559618], ["2023-07-06T05:20:00-07:00", -1.2616762202233076], ["2023-07-06T05:25:00-07:00", -1.2818433418869972], ["2023-07-06T05:30:00-07:00", -1.3020104635506868], ["2023-07-06T05:35:00-07:00", -1.3221775852143764], ["2023-07-06T05:40:00-07:00", -1.342344706878066], ["2023-07-06T05:45:00-07:00", -1.3625118285417557], ["2023-07-06T05:50:00-07:00", -1.3826789502054453], ["2023-07-06T05:55:00-07:00", -1.402846071869135], ["2023-07-06T06:00:00-07:00", -1.4230388831347227], ["2023-07-06T06:05:00-07:00", -1.4432316944003105], ["2023-07-06T06:10:00-07:00", -1.4662452768534422], ["2023-07-06T06:15:00-07:00", -1.4892589468508959], ["2023-07-06T06:20:00-07:00", -1.5122727453708649], ["2023-07-06T06:25:00-07:00", -1.5352866314351559], ["2023-07-06T06:30:00-07:00", -1.5583005659282207], ["2023-07-06T06:35:00-07:00", -1.581314578652382], ["2023-07-06T06:40:00-07:00", -1.6043287087231874], ["2023-07-06T06:45:00-07:00", -1.6273429058492184], ["2023-07-06T06:50:00-07:00", -1.6503572203218937], ["2023-07-06T06:55:00-07:00", -1.6733716242015362], ["2023-07-06T07:00:00-07:00", -1.6963879261165857], ["2023-07-06T07:05:00-07:00", -1.719371810555458], ["2023-07-06T07:10:00-07:00", -1.7423557825386524], ["2023-07-06T07:15:00-07:00", -1.765339881181717], ["2023-07-06T07:20:00-07:00", -1.7883240692317486], ["2023-07-06T07:25:00-07:00", -1.8113083634525537], ["2023-07-06T07:30:00-07:00", -1.834292747080326], ["2023-07-06T07:35:00-07:00", -1.857277236878872], ["2023-07-06T07:40:00-07:00", -1.8802618645131588], ["2023-07-06T07:45:00-07:00", -1.9032466188073158], ["2023-07-06T07:50:00-07:00", -1.9262314811348915], ["2023-07-06T07:55:00-07:00", -1.949216440320015], ["2023-07-06T08:00:00-07:00", -1.9722216222435236], ["2023-07-06T08:05:00-07:00", -1.9951640032231808], ["2023-07-06T08:10:00-07:00", -2.0180345326662064], ["2023-07-06T08:15:00-07:00", -2.040833130478859], ["2023-07-06T08:20:00-07:00", -2.0635598078370094], ["2023-07-06T08:25:00-07:00", -2.086214592680335], ["2023-07-06T08:30:00-07:00", -2.1087974179536104], ["2023-07-06T08:35:00-07:00", -2.131308302283287], ["2023-07-06T08:40:00-07:00", -2.153747197240591], ["2023-07-06T08:45:00-07:00", -2.1761141922324896], ["2023-07-06T08:50:00-07:00", -2.1984092369675636], ["2023-07-06T08:55:00-07:00", -2.220632331445813], ["2023-07-06T09:00:00-07:00", -2.242696950212121], ["2023-07-06T09:05:00-07:00", -2.2646272871643305], ["2023-07-06T09:10:00-07:00", -2.2864142302423716], ["2023-07-06T09:15:00-07:00", -2.3080578073859215], ["2023-07-06T09:20:00-07:00", -2.329557940363884], ["2023-07-06T09:25:00-07:00", -2.3509146496653557], ["2023-07-06T09:30:00-07:00", -2.3721278849989176], ["2023-07-06T09:35:00-07:00", -2.393197687342763], ["2023-07-06T09:40:00-07:00", -2.414124045521021], ["2023-07-06T09:45:00-07:00", -2.434906968846917], ["2023-07-06T09:50:00-07:00", -2.4555464684963226], ["2023-07-06T09:55:00-07:00", -2.4760424941778183], ["2023-07-06T10:00:00-07:00", -2.4962601363658905], ["2023-07-06T10:05:00-07:00", -2.5164777785539627], ["2023-07-06T10:10:00-07:00", -2.536695420742035], ["2023-07-06T10:15:00-07:00", -2.556913062930107], ["2023-07-06T10:20:00-07:00", -2.5771307051181793], ["2023-07-06T10:25:00-07:00", -2.5973483473062515], ["2023-07-06T10:30:00-07:00", -2.6175659894943237], ["2023-07-06T10:35:00-07:00", -2.637783631682396], ["2023-07-06T10:40:00-07:00", -2.658001273870468], ["2023-07-06T10:45:00-07:00", -2.6782189160585403], ["2023-07-06T10:50:00-07:00", -2.6984365582466125], ["2023-07-06T10:55:00-07:00", -2.7186542004346848], ["2023-07-06T11:00:00-07:00", -2.7387651093304157], ["2023-07-06T11:05:00-07:00", -2.7588754687458277], ["2023-07-06T11:10:00-07:00", -2.7789852805435658], ["2023-07-06T11:15:00-07:00", -2.799094542860985], ["2023-07-06T11:20:00-07:00", -2.81920325756073], ["2023-07-06T11:25:00-07:00", -2.839311422780156], ["2023-07-06T11:30:00-07:00", -2.8594190403819084], ["2023-07-06T11:35:00-07:00", -2.879526110365987], ["2023-07-06T11:40:00-07:00", -2.899632630869746], ["2023-07-06T11:45:00-07:00", -2.9197386037558317], ["2023-07-06T11:50:00-07:00", -2.939844027161598], ["2023-07-06T11:55:00-07:00", -2.959948902949691], ["2023-07-06T12:00:00-07:00", -2.9791763182729483], ["2023-07-06T12:05:00-07:00", -2.998403161764145], ["2023-07-06T12:10:00-07:00", -3.017629435285926], ["2023-07-06T12:15:00-07:00", -3.036855138838291], ["2023-07-06T12:20:00-07:00", -3.0560802705585957], ["2023-07-06T12:25:00-07:00", -3.0753048323094845], ["2023-07-06T12:30:00-07:00", -3.0945288222283125], ["2023-07-06T12:35:00-07:00", -3.113752242177725], ["2023-07-06T12:40:00-07:00", -3.1329750902950764], ["2023-07-06T12:45:00-07:00", -3.1521973684430122], ["2023-07-06T12:50:00-07:00", -3.1714190766215324], ["2023-07-06T12:55:00-07:00", -3.190640212967992], ["2023-07-06T13:00:00-07:00", -3.2098378650844097], ["2023-07-06T13:05:00-07:00", -3.2290360871702433], ["2023-07-06T13:10:00-07:00", -3.2482348810881376], ["2023-07-06T13:15:00-07:00", -3.267434246838093], ["2023-07-06T13:20:00-07:00", -3.286634184420109], ["2023-07-06T13:25:00-07:00", -3.3058346919715405], ["2023-07-06T13:30:00-07:00", -3.325035771355033], ["2023-07-06T13:35:00-07:00", -3.344237422570586], ["2023-07-06T13:40:00-07:00", -3.363439643755555], ["2023-07-06T13:45:00-07:00", -3.382642436772585], ["2023-07-06T13:50:00-07:00", -3.4018458016216755], ["2023-07-06T13:55:00-07:00", -3.421049738302827], ["2023-07-06T14:00:00-07:00", -3.440221792086959], ["2023-07-06T14:05:00-07:00", -3.45939327403903], ["2023-07-06T14:10:00-07:00", -3.4785641841590405], ["2023-07-06T14:15:00-07:00", -3.49773452244699], ["2023-07-06T14:20:00-07:00", -3.5169042889028788], ["2023-07-06T14:25:00-07:00", -3.5360734816640615], ["2023-07-06T14:30:00-07:00", -3.5552421025931835], ["2023-07-06T14:35:00-07:00", -3.5744101516902447], ["2023-07-06T14:40:00-07:00", -3.593577628955245], ["2023-07-06T14:45:00-07:00", -3.6127445343881845], ["2023-07-06T14:50:00-07:00", -3.631910866126418], ["2023-07-06T14:55:00-07:00", -3.651076626032591], ["2023-07-06T15:00:00-07:00", -3.6702127046883106], ["2023-07-06T15:05:00-07:00", -3.6893487833440304], ["2023-07-06T15:10:00-07:00", -3.70848486199975], ["2023-07-06T15:15:00-07:00", -3.72762094065547], ["2023-07-06T15:20:00-07:00", -3.7467570193111897], ["2023-07-06T15:25:00-07:00", -3.7658930979669094], ["2023-07-06T15:30:00-07:00", -3.785029176622629], ["2023-07-06T15:35:00-07:00", -3.804165255278349], ["2023-07-06T15:40:00-07:00", -3.8233013339340687], ["2023-07-06T15:45:00-07:00", -3.8424374125897884], ["2023-07-06T15:50:00-07:00", -3.861573491245508], ["2023-07-06T15:55:00-07:00", -3.880709569901228], ["2023-07-06T16:00:00-07:00", -3.8998215068131685], ["2023-07-06T16:05:00-07:00", -3.918933443725109], ["2023-07-06T16:10:00-07:00", -3.9380453806370497], ["2023-07-06T16:15:00-07:00", -3.9571573175489902], ["2023-07-06T16:20:00-07:00", -3.976269254460931], ["2023-07-06T16:25:00-07:00", -3.9953811913728714], ["2023-07-06T16:30:00-07:00", -4.014493128284812], ["2023-07-06T16:35:00-07:00", -4.0336050651967525], ["2023-07-06T16:40:00-07:00", -4.052717002108693], ["2023-07-06T16:45:00-07:00", -4.071828939020634], ["2023-07-06T16:50:00-07:00", -4.090940875932574], ["2023-07-06T16:55:00-07:00", -4.110052812844515], ["2023-07-06T17:00:00-07:00", -4.129139376804233], ["2023-07-06T17:05:00-07:00", -4.147973837330937], ["2023-07-06T17:10:00-07:00", -4.166808871552348], ["2023-07-06T17:15:00-07:00", -4.18564448133111], ["2023-07-06T17:20:00-07:00", -4.204480664804578], ["2023-07-06T17:25:00-07:00", -4.223317421972752], ["2023-07-06T17:30:00-07:00", -4.242154752835631], ["2023-07-06T17:35:00-07:00", -4.260992659255862], ["2023-07-06T17:40:00-07:00", -4.279831139370799], ["2023-07-06T17:45:00-07:00", -4.298670193180442], ["2023-07-06T17:50:00-07:00", -4.317509820684791], ["2023-07-06T17:55:00-07:00", -4.3363500237464905], ["2023-07-06T18:00:00-07:00", -4.355177840217948], ["2023-07-06T18:05:00-07:00", -4.374006230384111], ["2023-07-06T18:10:00-07:00", -4.392835194244981], ["2023-07-06T18:15:00-07:00", -4.411664733663201], ["2023-07-06T18:20:00-07:00", -4.430494846776128], ["2023-07-06T18:25:00-07:00", -4.449325535446405], ["2023-07-06T18:30:00-07:00", -4.468156797811389], ["2023-07-06T18:35:00-07:00", -4.486988635733724], ["2023-07-06T18:40:00-07:00", -4.505821047350764], ["2023-07-06T18:45:00-07:00", -4.524654034525156], ["2023-07-06T18:50:00-07:00", -4.543487595394254], ["2023-07-06T18:55:00-07:00", -4.562321729958057], ["2023-07-06T19:00:00-07:00", -4.581159135326743], ["2023-07-06T19:05:00-07:00", -4.59999711625278], ["2023-07-06T19:10:00-07:00", -4.618835670873523], ["2023-07-06T19:15:00-07:00", -4.6376747991889715], ["2023-07-06T19:20:00-07:00", -4.656514503061771], ["2023-07-06T19:25:00-07:00", -4.675354780629277], ["2023-07-06T19:30:00-07:00", -4.694195633754134], ["2023-07-06T19:35:00-07:00", -4.713037060573697], ["2023-07-06T19:40:00-07:00", -4.731879061087966], ["2023-07-06T19:45:00-07:00", -4.750721637159586], ["2023-07-06T19:50:00-07:00", -4.769564786925912], ["2023-07-06T19:55:00-07:00", -4.788408512249589], ["2023-07-06T20:00:00-07:00", -4.80725135281682], ["2023-07-06T20:05:00-07:00", -4.826094768941402], ["2023-07-06T20:10:00-07:00", -4.844938758760691], ["2023-07-06T20:15:00-07:00", -4.86378332413733], ["2023-07-06T20:20:00-07:00", -4.882628463208675], ["2023-07-06T20:25:00-07:00", -4.901474175974727], ["2023-07-06T20:30:00-07:00", -4.920320464298129], ["2023-07-06T20:35:00-07:00", -4.9391673263162374], ["2023-07-06T20:40:00-07:00", -4.958014763891697], ["2023-07-06T20:45:00-07:00", -4.976862775161862], ["2023-07-06T20:50:00-07:00", -4.995711361989379], ["2023-07-06T20:55:00-07:00", -5.0145605225116014], ["2023-07-06T21:00:00-07:00", -5.033415770158172], ["2023-07-06T21:05:00-07:00", -5.052271591499448], ["2023-07-06T21:10:00-07:00", -5.071127988398075], ["2023-07-06T21:15:00-07:00", -5.089984958991408], ["2023-07-06T21:20:00-07:00", -5.1088425032794476], ["2023-07-06T21:25:00-07:00", -5.127700623124838], ["2023-07-06T21:30:00-07:00", -5.146559316664934], ["2023-07-06T21:35:00-07:00", -5.165418583899736], ["2023-07-06T21:40:00-07:00", -5.18427842669189], ["2023-07-06T21:45:00-07:00", -5.203138843178749], ["2023-07-06T21:50:00-07:00", -5.221999833360314], ["2023-07-06T21:55:00-07:00", -5.240861399099231], ["2023-07-06T22:00:00-07:00", -5.259729729965329], ["2023-07-06T22:05:00-07:00", -5.278598060831428], ["2023-07-06T22:10:00-07:00", -5.297466391697526], ["2023-07-06T22:15:00-07:00", -5.316334722563624], ["2023-07-06T22:20:00-07:00", -5.335203053429723], ["2023-07-06T22:25:00-07:00", -5.354071384295821], ["2023-07-06T22:30:00-07:00", -5.37293971516192], ["2023-07-06T22:35:00-07:00", -5.391808046028018], ["2023-07-06T22:40:00-07:00", -5.410676376894116], ["2023-07-06T22:45:00-07:00", -5.429544707760215], ["2023-07-06T22:50:00-07:00", -5.448413038626313], ["2023-07-06T22:55:00-07:00", -5.46729288995266], ["2023-07-06T23:00:00-07:00", -5.486681712791324], ["2023-07-06T23:05:00-07:00", -5.506070535629988], ["2023-07-06T23:10:00-07:00", -5.525459358468652], ["2023-07-06T23:15:00-07:00", -5.544848181307316], ["2023-07-06T23:20:00-07:00", -5.56423700414598], ["2023-07-06T23:25:00-07:00", -5.583625826984644], ["2023-07-06T23:30:00-07:00", -5.603014649823308], ["2023-07-06T23:35:00-07:00", -5.622403472661972], ["2023-07-06T23:40:00-07:00", -5.641792295500636], ["2023-07-06T23:45:00-07:00", -5.6611811183393], ["2023-07-06T23:50:00-07:00", -5.680569941177964], ["2023-07-06T23:55:00-07:00", -5.699958764016628], ["2023-07-07T00:00:00-07:00", -5.719482254236937], ["2023-07-07T00:05:00-07:00", -5.739005744457245], ["2023-07-07T00:10:00-07:00", -5.758529234677553], ["2023-07-07T00:15:00-07:00", -5.7780527248978615], ["2023-07-07T00:20:00-07:00", -5.79757621511817], ["2023-07-07T00:25:00-07:00", -5.817099705338478], ["2023-07-07T00:30:00-07:00", -5.836623195558786], ["2023-07-07T00:35:00-07:00", -5.856146685779095], ["2023-07-07T00:40:00-07:00", -5.875670175999403], ["2023-07-07T00:45:00-07:00", -5.895193666219711], ["2023-07-07T00:50:00-07:00", -5.91471715644002], ["2023-07-07T00:55:00-07:00", -5.934240646660328], ["2023-07-07T01:00:00-07:00", -5.953915366902947], ["2023-07-07T01:05:00-07:00", -5.973590087145567], ["2023-07-07T01:10:00-07:00", -5.9932648073881865], ["2023-07-07T01:15:00-07:00", -6.012939527630806], ["2023-07-07T01:20:00-07:00", -6.0326142478734255], ["2023-07-07T01:25:00-07:00", -6.052288968116045], ["2023-07-07T01:30:00-07:00", -6.0719636883586645], ["2023-07-07T01:35:00-07:00", -6.091638408601284], ["2023-07-07T01:40:00-07:00", -6.1113131288439035], ["2023-07-07T01:45:00-07:00", -6.130987849086523], ["2023-07-07T01:50:00-07:00", -6.150662569329143], ["2023-07-07T01:55:00-07:00", -6.170337289571762], ["2023-07-07T02:00:00-07:00", -6.190070992335677], ["2023-07-07T02:05:00-07:00", -6.209804695099592], ["2023-07-07T02:10:00-07:00", -6.229538397863507], ["2023-07-07T02:15:00-07:00", -6.249272100627422], ["2023-07-07T02:20:00-07:00", -6.269005803391337], ["2023-07-07T02:25:00-07:00", -6.2887395061552525], ["2023-07-07T02:30:00-07:00", -6.3084732089191675], ["2023-07-07T02:35:00-07:00", -6.328206911683083], ["2023-07-07T02:40:00-07:00", -6.347940614446998], ["2023-07-07T02:45:00-07:00", -6.367674317210913], ["2023-07-07T02:50:00-07:00", -6.387408019974828], ["2023-07-07T02:55:00-07:00", -6.407141722738743], ["2023-07-07T03:00:00-07:00", -6.426893750205636], ["2023-07-07T03:05:00-07:00", -6.4466463308781385], ["2023-07-07T03:10:00-07:00", -6.466399462893605], ["2023-07-07T03:15:00-07:00", -6.486153148114681], ["2023-07-07T03:20:00-07:00", -6.505907384678721], ["2023-07-07T03:25:00-07:00", -6.525662174448371], ["2023-07-07T03:30:00-07:00", -6.545417515560985], ["2023-07-07T03:35:00-07:00", -6.565173409879208], ["2023-07-07T03:40:00-07:00", -6.584929855540395], ["2023-07-07T03:45:00-07:00", -6.604686854407191], ["2023-07-07T03:50:00-07:00", -6.624444404616952], ["2023-07-07T03:55:00-07:00", -6.644202506169677], ["2023-07-07T04:00:00-07:00", -6.663973107933998], ["2023-07-07T04:05:00-07:00", -6.683743709698319], ["2023-07-07T04:10:00-07:00", -6.703514311462641], ["2023-07-07T04:15:00-07:00", -6.723284913226962], ["2023-07-07T04:20:00-07:00", -6.743055514991283], ["2023-07-07T04:25:00-07:00", -6.762826116755605], ["2023-07-07T04:30:00-07:00", -6.782596718519926], ["2023-07-07T04:35:00-07:00", -6.802367320284247], ["2023-07-07T04:40:00-07:00", -6.822137922048569], ["2023-07-07T04:45:00-07:00", -6.84190852381289], ["2023-07-07T04:50:00-07:00", -6.861679125577211], ["2023-07-07T04:55:00-07:00", -6.881449727341533], ["2023-07-07T05:00:00-07:00", -6.901634208858013], ["2023-07-07T05:05:00-07:00", -6.921818690374494], ["2023-07-07T05:10:00-07:00", -6.942003171890974], ["2023-07-07T05:15:00-07:00", -6.9621876534074545], ["2023-07-07T05:20:00-07:00", -6.982372134923935], ["2023-07-07T05:25:00-07:00", -7.002556616440415], ["2023-07-07T05:30:00-07:00", -7.022741097956896], ["2023-07-07T05:35:00-07:00", -7.042925579473376], ["2023-07-07T05:40:00-07:00", -7.063110060989857], ["2023-07-07T05:45:00-07:00", -7.083294542506337], ["2023-07-07T05:50:00-07:00", -7.103479024022818], ["2023-07-07T05:55:00-07:00", -7.123663505539298], ["2023-07-07T06:00:00-07:00", -7.14387365616858], ["2023-07-07T06:05:00-07:00", -7.170278538018465], ["2023-07-07T06:10:00-07:00", -7.201182225719094], ["2023-07-07T06:15:00-07:00", -7.232086289674044], ["2023-07-07T06:20:00-07:00", -7.262990720570087], ["2023-07-07T06:25:00-07:00", -7.293895496055484], ["2023-07-07T06:30:00-07:00", -7.324800606817007], ["2023-07-07T06:35:00-07:00", -7.355706041678786], ["2023-07-07T06:40:00-07:00", -7.386611832305789], ["2023-07-07T06:45:00-07:00", -7.417517989873886], ["2023-07-07T06:50:00-07:00", -7.4484245125204325], ["2023-07-07T06:55:00-07:00", -7.479331433773041], ["2023-07-07T07:00:00-07:00", -7.510268563404679], ["2023-07-07T07:05:00-07:00", -7.541206069290638], ["2023-07-07T07:10:00-07:00", -7.572143962606788], ["2023-07-07T07:15:00-07:00", -7.603082202374935], ["2023-07-07T07:20:00-07:00", -7.633966583758593], ["2023-07-07T07:25:00-07:00", -7.664851343259215], ["2023-07-07T07:30:00-07:00", -7.695736426860094], ["2023-07-07T07:35:00-07:00", -7.726621909067035], ["2023-07-07T07:40:00-07:00", -7.757507810369134], ["2023-07-07T07:45:00-07:00", -7.788394035771489], ["2023-07-07T07:50:00-07:00", -7.819280680269003], ["2023-07-07T07:55:00-07:00", -7.850167753174901], ["2023-07-07T08:00:00-07:00", -7.881080789491534], ["2023-07-07T08:05:00-07:00", -7.9118596240878105], ["2023-07-07T08:10:00-07:00", -7.942484691739082], ["2023-07-07T08:15:00-07:00", -7.972955908626318], ["2023-07-07T08:20:00-07:00", -8.003273202106357], ["2023-07-07T08:25:00-07:00", -8.033436520025134], ["2023-07-07T08:30:00-07:00", -8.063445903360844], ["2023-07-07T08:35:00-07:00", -8.093301299959421], ["2023-07-07T08:40:00-07:00", -8.123002763837576], ["2023-07-07T08:45:00-07:00", -8.152550250291824], ["2023-07-07T08:50:00-07:00", -8.181943802163005], ["2023-07-07T08:55:00-07:00", -8.211183346807957], ["2023-07-07T09:00:00-07:00", -8.240161938592792], ["2023-07-07T09:05:00-07:00", -8.26912123337388], ["2023-07-07T09:10:00-07:00", -8.298080684617162], ["2023-07-07T09:15:00-07:00", -8.327040439471602], ["2023-07-07T09:20:00-07:00", -8.356000559404492], ["2023-07-07T09:25:00-07:00", -8.384961044415832], ["2023-07-07T09:30:00-07:00", -8.413921885192394], ["2023-07-07T09:35:00-07:00", -8.442883174866438], ["2023-07-07T09:40:00-07:00", -8.471844840794802], ["2023-07-07T09:45:00-07:00", -8.500806912779808], ["2023-07-07T09:50:00-07:00", -8.529769329354167], ["2023-07-07T09:55:00-07:00", -8.558732133358717], ["2023-07-07T10:00:00-07:00", -8.587490601465106], ["2023-07-07T10:05:00-07:00", -8.61624950543046], ["2023-07-07T10:10:00-07:00", -8.645008720457554], ["2023-07-07T10:15:00-07:00", -8.673768369480968], ["2023-07-07T10:20:00-07:00", -8.702528392896056], ["2023-07-07T10:25:00-07:00", -8.731288809329271], ["2023-07-07T10:30:00-07:00", -8.760325195267797], ["2023-07-07T10:35:00-07:00", -8.795192120596766], ["2023-07-07T10:40:00-07:00", -8.82977963425219], ["2023-07-07T10:45:00-07:00", -8.864367699250579], ["2023-07-07T10:50:00-07:00", -8.898956404998899], ["2023-07-07T10:55:00-07:00", -8.933545695617795], ["2023-07-07T11:00:00-07:00", -8.967960411682725], ["2023-07-07T11:05:00-07:00", -9.002576442435384], ["2023-07-07T11:10:00-07:00", -9.04290053807199], ["2023-07-07T11:15:00-07:00", -9.082864446565509], ["2023-07-07T11:20:00-07:00", -9.12274301983416], ["2023-07-07T11:25:00-07:00", -9.162536209449172], ["2023-07-07T11:30:00-07:00", -9.20224398933351], ["2023-07-07T11:35:00-07:00", -9.241866445168853], ["2023-07-07T11:40:00-07:00", -9.28140358440578], ["2023-07-07T11:45:00-07:00", -9.320855306461453], ["2023-07-07T11:50:00-07:00", -9.36022170074284], ["2023-07-07T11:55:00-07:00", -9.399502700194716], ["2023-07-07T12:00:00-07:00", -9.437042849138379], ["2023-07-07T12:05:00-07:00", -9.47450146637857], ["2023-07-07T12:10:00-07:00", -9.511878514662385], ["2023-07-07T12:15:00-07:00", -9.549173982813954], ["2023-07-07T12:20:00-07:00", -9.580931620672345], ["2023-07-07T12:25:00-07:00", -9.612612487748265], ["2023-07-07T12:30:00-07:00", -9.644216613844037], ["2023-07-07T12:35:00-07:00", -9.67574398778379], ["2023-07-07T12:40:00-07:00", -9.707194508984685], ["2023-07-07T12:45:00-07:00", -9.738568214699626], ["2023-07-07T12:50:00-07:00", -9.769865138456225], ["2023-07-07T12:55:00-07:00", -9.801085205748677], ["2023-07-07T13:00:00-07:00", -9.83219313621521], ["2023-07-07T13:05:00-07:00", -9.863291686400771], ["2023-07-07T13:10:00-07:00", -9.89439057186246], ["2023-07-07T13:15:00-07:00", -9.925489824265242], ["2023-07-07T13:20:00-07:00", -9.956589525565505], ["2023-07-07T13:25:00-07:00", -9.988023461773992], ["2023-07-07T13:30:00-07:00", -10.024888763204217], ["2023-07-07T13:35:00-07:00", -10.061400884762406], ["2023-07-07T13:40:00-07:00", -10.097913471981883], ["2023-07-07T13:45:00-07:00", -10.134426528587937], ["2023-07-07T13:50:00-07:00", -10.170940021052957], ["2023-07-07T13:55:00-07:00", -10.20745394565165], ["2023-07-07T14:00:00-07:00", -10.24390877224505], ["2023-07-07T14:05:00-07:00", -10.280364053323865], ["2023-07-07T14:10:00-07:00", -10.316819781437516], ["2023-07-07T14:15:00-07:00", -10.353276008740067], ["2023-07-07T14:20:00-07:00", -10.389732701703906], ["2023-07-07T14:25:00-07:00", -10.426189808174968], ["2023-07-07T14:30:00-07:00", -10.4626474250108], ["2023-07-07T14:35:00-07:00", -10.49910550750792], ["2023-07-07T14:40:00-07:00", -10.535564070567489], ["2023-07-07T14:45:00-07:00", -10.57202316634357], ["2023-07-07T14:50:00-07:00", -10.608482683077455], ["2023-07-07T14:55:00-07:00", -10.644942646846175], ["2023-07-07T15:00:00-07:00", -10.681349711492658], ["2023-07-07T15:05:00-07:00", -10.717757241800427], ["2023-07-07T15:10:00-07:00", -10.754165293648839], ["2023-07-07T15:15:00-07:00", -10.790573788806796], ["2023-07-07T15:20:00-07:00", -10.832376411184669], ["2023-07-07T15:25:00-07:00", -10.874179476872087], ["2023-07-07T15:30:00-07:00", -10.915983000770211], ["2023-07-07T15:35:00-07:00", -10.957787053659558], ["2023-07-07T15:40:00-07:00", -10.999591624364257], ["2023-07-07T15:45:00-07:00", -11.041396653279662], ["2023-07-07T15:50:00-07:00", -11.083202166482806], ["2023-07-07T15:55:00-07:00", -11.125008111819625], ["2023-07-07T16:00:00-07:00", -11.166763106361032], ["2023-07-07T16:05:00-07:00", -11.208443203940988], ["2023-07-07T16:10:00-07:00", -11.250120157375932], ["2023-07-07T16:15:00-07:00", -11.2971778716892], ["2023-07-07T16:20:00-07:00", -11.34961631335318], ["2023-07-07T16:25:00-07:00", -11.39667053706944], ["2023-07-07T16:30:00-07:00", -11.443723013624549], ["2023-07-07T16:35:00-07:00", -11.490773739293218], ["2023-07-07T16:40:00-07:00", -11.543205192312598], ["2023-07-07T16:45:00-07:00", -11.595634898170829], ["2023-07-07T16:50:00-07:00", -11.64806285686791], ["2023-07-07T16:55:00-07:00", -11.70048906467855], ["2023-07-07T17:00:00-07:00", -11.752844763919711], ["2023-07-07T17:05:00-07:00", -11.80432946421206], ["2023-07-07T17:10:00-07:00", -11.855815621092916], ["2023-07-07T17:15:00-07:00", -11.907303536310792], ["2023-07-07T17:20:00-07:00", -11.95879321359098], ["2023-07-07T17:25:00-07:00", -12.010284652933478], ["2023-07-07T17:30:00-07:00", -12.061777854338288], ["2023-07-07T17:35:00-07:00", -12.11327281780541], ["2023-07-07T17:40:00-07:00", -12.164769543334842], ["2023-07-07T17:45:00-07:00", -12.216268030926585], ["2023-07-07T17:50:00-07:00", -12.26776828058064], ["2023-07-07T17:55:00-07:00", -12.319270292297006], ["2023-07-07T18:00:00-07:00", -12.37073883600533], ["2023-07-07T18:05:00-07:00", -12.42220856808126], ["2023-07-07T18:10:00-07:00", -12.479049762710929], ["2023-07-07T18:15:00-07:00", -12.541262267157435], ["2023-07-07T18:20:00-07:00", -12.603474779054523], ["2023-07-07T18:25:00-07:00", -12.6656872946769], ["2023-07-07T18:30:00-07:00", -12.727899817749858], ["2023-07-07T18:35:00-07:00", -12.790112348273396], ["2023-07-07T18:40:00-07:00", -12.852324886247516], ["2023-07-07T18:45:00-07:00", -12.914537431672215], ["2023-07-07T18:50:00-07:00", -12.976749984547496], ["2023-07-07T18:55:00-07:00", -13.04946700297296], ["2023-07-07T19:00:00-07:00", -13.117060540243983], ["2023-07-07T19:05:00-07:00", -13.13589852117002], ["2023-07-07T19:10:00-07:00", -13.154737075790763], ["2023-07-07T19:15:00-07:00", -13.173576204106212], ["2023-07-07T19:20:00-07:00", -13.192415907979012], ["2023-07-07T19:25:00-07:00", -13.211256185546517], ["2023-07-07T19:30:00-07:00", -13.230097038671374], ["2023-07-07T19:35:00-07:00", -13.248938465490937], ["2023-07-07T19:40:00-07:00", -13.267780466005206], ["2023-07-07T19:45:00-07:00", -13.286623042076826], ["2023-07-07T19:50:00-07:00", -13.305466191843152], ["2023-07-07T19:55:00-07:00", -13.324309917166829], ["2023-07-07T20:00:00-07:00", -13.34315275773406], ["2023-07-07T20:05:00-07:00", -13.361996747553349], ["2023-07-07T20:10:00-07:00", -13.380841886624694], ["2023-07-07T20:15:00-07:00", -13.399688174948096], ["2023-07-07T20:20:00-07:00", -13.418535612523556], ["2023-07-07T20:25:00-07:00", -13.437384199351072], ["2023-07-07T20:30:00-07:00", -13.456233933568], ["2023-07-07T20:35:00-07:00", -13.475084817036986], ["2023-07-07T20:40:00-07:00", -13.493936849758029], ["2023-07-07T20:45:00-07:00", -13.512790031731129], ["2023-07-07T20:50:00-07:00", -13.531644362956285], ["2023-07-07T20:55:00-07:00", -13.5504998434335], ["2023-07-07T21:00:00-07:00", -13.569361982867122], ["2023-07-07T21:05:00-07:00", -13.588224122300744], ["2023-07-07T21:10:00-07:00", -13.607086261734366], ["2023-07-07T21:15:00-07:00", -13.625948401167989], ["2023-07-07T21:20:00-07:00", -13.644810540601611], ["2023-07-07T21:25:00-07:00", -13.663672680035233], ["2023-07-07T21:30:00-07:00", -13.682534819468856], ["2023-07-07T21:35:00-07:00", -13.701396958902478], ["2023-07-07T21:40:00-07:00", -13.7202590983361], ["2023-07-07T21:45:00-07:00", -13.739121237769723], ["2023-07-07T21:50:00-07:00", -13.757983377203345], ["2023-07-07T21:55:00-07:00", -13.776845516636968], ["2023-07-07T22:00:00-07:00", -13.795713847503066], ["2023-07-07T22:05:00-07:00", -13.814582178369164], ["2023-07-07T22:10:00-07:00", -13.833450509235263], ["2023-07-07T22:15:00-07:00", -13.852318840101361], ["2023-07-07T22:20:00-07:00", -13.87118717096746], ["2023-07-07T22:25:00-07:00", -13.890055501833558], ["2023-07-07T22:30:00-07:00", -13.908923832699656], ["2023-07-07T22:35:00-07:00", -13.927792163565755], ["2023-07-07T22:40:00-07:00", -13.946660494431853], ["2023-07-07T22:45:00-07:00", -13.965528825297952], ["2023-07-07T22:50:00-07:00", -13.98439715616405], ["2023-07-07T22:55:00-07:00", -14.003277007490396], ["2023-07-07T23:00:00-07:00", -14.022204961627722], ["2023-07-07T23:05:00-07:00", -14.041133489459753], ["2023-07-07T23:10:00-07:00", -14.06006259098649], ["2023-07-07T23:15:00-07:00", -14.078992264345288], ["2023-07-07T23:20:00-07:00", -14.097922511398792], ["2023-07-07T23:25:00-07:00", -14.116853330284357], ["2023-07-07T23:30:00-07:00", -14.135784722864628], ["2023-07-07T23:35:00-07:00", -14.154716689139605], ["2023-07-07T23:40:00-07:00", -14.173649227246642], ["2023-07-07T23:45:00-07:00", -14.192582339048386], ["2023-07-07T23:50:00-07:00", -14.211516024544835], ["2023-07-07T23:55:00-07:00", -14.230450281873345], ["2023-07-08T00:00:00-07:00", -14.249519739300013], ["2023-07-08T00:05:00-07:00", -14.26858919672668], ["2023-07-08T00:10:00-07:00", -14.287658654153347], ["2023-07-08T00:15:00-07:00", -14.306728111580014], ["2023-07-08T00:20:00-07:00", -14.325797569006681], ["2023-07-08T00:25:00-07:00", -14.344867026433349], ["2023-07-08T00:30:00-07:00", -14.363936483860016], ["2023-07-08T00:35:00-07:00", -14.383005941286683], ["2023-07-08T00:40:00-07:00", -14.40207539871335], ["2023-07-08T00:45:00-07:00", -14.421144856140018], ["2023-07-08T00:50:00-07:00", -14.440214313566685], ["2023-07-08T00:55:00-07:00", -14.459283770993352], ["2023-07-08T01:00:00-07:00", -14.478504413738847], ["2023-07-08T01:05:00-07:00", -14.497725056484342], ["2023-07-08T01:10:00-07:00", -14.516945699229836], ["2023-07-08T01:15:00-07:00", -14.536166341975331], ["2023-07-08T01:20:00-07:00", -14.555386984720826], ["2023-07-08T01:25:00-07:00", -14.574607627466321], ["2023-07-08T01:30:00-07:00", -14.593828270211816], ["2023-07-08T01:35:00-07:00", -14.61304891295731], ["2023-07-08T01:40:00-07:00", -14.632269555702806], ["2023-07-08T01:45:00-07:00", -14.6514901984483], ["2023-07-08T01:50:00-07:00", -14.670710841193795], ["2023-07-08T01:55:00-07:00", -14.68993148393929], ["2023-07-08T02:00:00-07:00", -14.709211090579629], ["2023-07-08T02:05:00-07:00", -14.728491261601448], ["2023-07-08T02:10:00-07:00", -14.747771997004747], ["2023-07-08T02:15:00-07:00", -14.767053296789527], ["2023-07-08T02:20:00-07:00", -14.786335160955787], ["2023-07-08T02:25:00-07:00", -14.805617589503527], ["2023-07-08T02:30:00-07:00", -14.824900582432747], ["2023-07-08T02:35:00-07:00", -14.844184139743447], ["2023-07-08T02:40:00-07:00", -14.863468261435628], ["2023-07-08T02:45:00-07:00", -14.882752947509289], ["2023-07-08T02:50:00-07:00", -14.90203819796443], ["2023-07-08T02:55:00-07:00", -14.921324012801051], ["2023-07-08T03:00:00-07:00", -14.94062870554626], ["2023-07-08T03:05:00-07:00", -14.959933398291469], ["2023-07-08T03:10:00-07:00", -14.979238091036677], ["2023-07-08T03:15:00-07:00", -14.998542783781886], ["2023-07-08T03:20:00-07:00", -15.017847476527095], ["2023-07-08T03:25:00-07:00", -15.037152169272304], ["2023-07-08T03:30:00-07:00", -15.056456862017512], ["2023-07-08T03:35:00-07:00", -15.075761554762721], ["2023-07-08T03:40:00-07:00", -15.09506624750793], ["2023-07-08T03:45:00-07:00", -15.114370940253139], ["2023-07-08T03:50:00-07:00", -15.133675632998347], ["2023-07-08T03:55:00-07:00", -15.152980325743556], ["2023-07-08T04:00:00-07:00", -15.172296961769462], ["2023-07-08T04:05:00-07:00", -15.191613597795367], ["2023-07-08T04:10:00-07:00", -15.210930233821273], ["2023-07-08T04:15:00-07:00", -15.230246869847178], ["2023-07-08T04:20:00-07:00", -15.249563505873084], ["2023-07-08T04:25:00-07:00", -15.26888014189899], ["2023-07-08T04:30:00-07:00", -15.288196777924895], ["2023-07-08T04:35:00-07:00", -15.307513413950801], ["2023-07-08T04:40:00-07:00", -15.326830049976707], ["2023-07-08T04:45:00-07:00", -15.346146686002612], ["2023-07-08T04:50:00-07:00", -15.365463322028518], ["2023-07-08T04:55:00-07:00", -15.384779958054423], ["2023-07-08T05:00:00-07:00", -15.404121236875653], ["2023-07-08T05:05:00-07:00", -15.423463080078363], ["2023-07-08T05:10:00-07:00", -15.442805485799909], ["2023-07-08T05:15:00-07:00", -15.462148454040289], ["2023-07-08T05:20:00-07:00", -15.481491984799504], ["2023-07-08T05:25:00-07:00", -15.500836078077555], ["2023-07-08T05:30:00-07:00", -15.520180735737085], ["2023-07-08T05:35:00-07:00", -15.539525955915451], ["2023-07-08T05:40:00-07:00", -15.558871738612652], ["2023-07-08T05:45:00-07:00", -15.578218083828688], ["2023-07-08T05:50:00-07:00", -15.597564991563559], ["2023-07-08T05:55:00-07:00", -15.61691246367991], ["2023-07-08T06:00:00-07:00", -15.636286150664091], ["2023-07-08T06:05:00-07:00", -15.655659276992083], ["2023-07-08T06:10:00-07:00", -15.680251194164157], ["2023-07-08T06:15:00-07:00", -15.704774759709835], ["2023-07-08T06:20:00-07:00", -15.729229971766472], ["2023-07-08T06:25:00-07:00", -15.753616727888584], ["2023-07-08T06:30:00-07:00", -15.777935095131397], ["2023-07-08T06:35:00-07:00", -15.802185034379363], ["2023-07-08T06:40:00-07:00", -15.826366659253836], ["2023-07-08T06:45:00-07:00", -15.85047983750701], ["2023-07-08T06:50:00-07:00", -15.874524597078562], ["2023-07-08T06:55:00-07:00", -15.898500910028815], ["2023-07-08T07:00:00-07:00", -15.922434341162443], ["2023-07-08T07:05:00-07:00", -15.946239115670323], ["2023-07-08T07:10:00-07:00", -15.969906587153673], ["2023-07-08T07:15:00-07:00", -15.993436641991138], ["2023-07-08T07:20:00-07:00", -16.01677294820547], ["2023-07-08T07:25:00-07:00", -16.039971781894565], ["2023-07-08T07:30:00-07:00", -16.063033198937774], ["2023-07-08T07:35:00-07:00", -16.085957154631615], ["2023-07-08T07:40:00-07:00", -16.108743600547314], ["2023-07-08T07:45:00-07:00", -16.131392508745193], ["2023-07-08T07:50:00-07:00", -16.153903944417834], ["2023-07-08T07:55:00-07:00", -16.176277935504913], ["2023-07-08T08:00:00-07:00", -16.1985348071903], ["2023-07-08T08:05:00-07:00", -16.220714457333088], ["2023-07-08T08:10:00-07:00", -16.242825493216515], ["2023-07-08T08:15:00-07:00", -16.264867898076773], ["2023-07-08T08:20:00-07:00", -16.286841737106442], ["2023-07-08T08:25:00-07:00", -16.308746991679072], ["2023-07-08T08:30:00-07:00", -16.330583671107888], ["2023-07-08T08:35:00-07:00", -16.352351831272244], ["2023-07-08T08:40:00-07:00", -16.374051474034786], ["2023-07-08T08:45:00-07:00", -16.395682523027062], ["2023-07-08T08:50:00-07:00", -16.417244985699654], ["2023-07-08T08:55:00-07:00", -16.43873887322843], ["2023-07-08T09:00:00-07:00", -16.46007688716054], ["2023-07-08T09:05:00-07:00", -16.481406655162573], ["2023-07-08T09:10:00-07:00", -16.502736872062087], ["2023-07-08T09:15:00-07:00", -16.524067563936114], ["2023-07-08T09:20:00-07:00", -16.545398684218526], ["2023-07-08T09:25:00-07:00", -16.566730309277773], ["2023-07-08T09:30:00-07:00", -16.588062399998307], ["2023-07-08T09:35:00-07:00", -16.609394939616323], ["2023-07-08T09:40:00-07:00", -16.630727963522077], ["2023-07-08T09:45:00-07:00", -16.65206147171557], ["2023-07-08T09:50:00-07:00", -16.67339545674622], ["2023-07-08T09:55:00-07:00", -16.69472990743816], ["2023-07-08T10:00:00-07:00", -16.7158977817744], ["2023-07-08T10:05:00-07:00", -16.73700660839677], ["2023-07-08T10:10:00-07:00", -16.75804782100022], ["2023-07-08T10:15:00-07:00", -16.779021373018622], ["2023-07-08T10:20:00-07:00", -16.79992724582553], ["2023-07-08T10:25:00-07:00", -16.820765357464552], ["2023-07-08T10:30:00-07:00", -16.841535789892077], ["2023-07-08T10:35:00-07:00", -16.86223853379488], ["2023-07-08T10:40:00-07:00", -16.882873570546508], ["2023-07-08T10:45:00-07:00", -16.903440974652767], ["2023-07-08T10:50:00-07:00", -16.92394069209695], ["2023-07-08T10:55:00-07:00", -16.944372655823827], ["2023-07-08T11:00:00-07:00", -16.964624598622322], ["2023-07-08T11:05:00-07:00", -16.984809262678027], ["2023-07-08T11:10:00-07:00", -17.0049265101552], ["2023-07-08T11:15:00-07:00", -17.024976413697004], ["2023-07-08T11:20:00-07:00", -17.044958900660276], ["2023-07-08T11:25:00-07:00", -17.06487406231463], ["2023-07-08T11:30:00-07:00", -17.08472190052271], ["2023-07-08T11:35:00-07:00", -17.104502394795418], ["2023-07-08T11:40:00-07:00", -17.124215554445982], ["2023-07-08T11:45:00-07:00", -17.143861344084144], ["2023-07-08T11:50:00-07:00", -17.163439752534032], ["2023-07-08T11:55:00-07:00", -17.182950790971518], ["2023-07-08T12:00:00-07:00", -17.202359521761537], ["2023-07-08T12:05:00-07:00", -17.22170103341341], ["2023-07-08T12:10:00-07:00", -17.240975281223655], ["2023-07-08T12:15:00-07:00", -17.260207833722234], ["2023-07-08T12:20:00-07:00", -17.279439814388752], ["2023-07-08T12:25:00-07:00", -17.298671225085855], ["2023-07-08T12:30:00-07:00", -17.31790206581354], ["2023-07-08T12:35:00-07:00", -17.337132334709167], ["2023-07-08T12:40:00-07:00", -17.356362033635378], ["2023-07-08T12:45:00-07:00", -17.375591160729527], ["2023-07-08T12:50:00-07:00", -17.39481971785426], ["2023-07-08T12:55:00-07:00", -17.414047703146935], ["2023-07-08T13:00:00-07:00", -17.4332522097975], ["2023-07-08T13:05:00-07:00", -17.452456146478653], ["2023-07-08T13:10:00-07:00", -17.471659511327744], ["2023-07-08T13:15:00-07:00", -17.490862304344773], ["2023-07-08T13:20:00-07:00", -17.510064525529742], ["2023-07-08T13:25:00-07:00", -17.529266176745296], ["2023-07-08T13:30:00-07:00", -17.548467256128788], ["2023-07-08T13:35:00-07:00", -17.56766776368022], ["2023-07-08T13:40:00-07:00", -17.586867701262236], ["2023-07-08T13:45:00-07:00", -17.60606706701219], ["2023-07-08T13:50:00-07:00", -17.625265860930085], ["2023-07-08T13:55:00-07:00", -17.64446408301592], ["2023-07-08T14:00:00-07:00", -17.66362927109003], ["2023-07-08T14:05:00-07:00", -17.682794459164143], ["2023-07-08T14:10:00-07:00", -17.701959647238255], ["2023-07-08T14:15:00-07:00", -17.721124835312366], ["2023-07-08T14:20:00-07:00", -17.74029002338648], ["2023-07-08T14:25:00-07:00", -17.75945521146059], ["2023-07-08T14:30:00-07:00", -17.778620399534702], ["2023-07-08T14:35:00-07:00", -17.797785587608814], ["2023-07-08T14:40:00-07:00", -17.816950775682926], ["2023-07-08T14:45:00-07:00", -17.836115963757038], ["2023-07-08T14:50:00-07:00", -17.85528115183115], ["2023-07-08T14:55:00-07:00", -17.874446339905262], ["2023-07-08T15:00:00-07:00", -17.89358241856098], ["2023-07-08T15:05:00-07:00", -17.9127184972167], ["2023-07-08T15:10:00-07:00", -17.93185457587242], ["2023-07-08T15:15:00-07:00", -17.95099065452814], ["2023-07-08T15:20:00-07:00", -17.97012673318386], ["2023-07-08T15:25:00-07:00", -17.98926281183958], ["2023-07-08T15:30:00-07:00", -18.0083988904953], ["2023-07-08T15:35:00-07:00", -18.02753496915102], ["2023-07-08T15:40:00-07:00", -18.04667104780674], ["2023-07-08T15:45:00-07:00", -18.06580712646246], ["2023-07-08T15:50:00-07:00", -18.08494320511818], ["2023-07-08T15:55:00-07:00", -18.1040792837739], ["2023-07-08T16:00:00-07:00", -18.12319122068584], ["2023-07-08T16:05:00-07:00", -18.142303731292486], ["2023-07-08T16:10:00-07:00", -18.16141681559384], ["2023-07-08T16:15:00-07:00", -18.180530473589897], ["2023-07-08T16:20:00-07:00", -18.19964470528066], ["2023-07-08T16:25:00-07:00", -18.218759510666132], ["2023-07-08T16:30:00-07:00", -18.23787488974631], ["2023-07-08T16:35:00-07:00", -18.25699084252119], ["2023-07-08T16:40:00-07:00", -18.27610736899078], ["2023-07-08T16:45:00-07:00", -18.295224469155073], ["2023-07-08T16:50:00-07:00", -18.314342143014073], ["2023-07-08T16:55:00-07:00", -18.33346039056778], ["2023-07-08T17:00:00-07:00", -18.352553844451904], ["2023-07-08T17:05:00-07:00", -18.371395194903016], ["2023-07-08T17:10:00-07:00", -18.390237119048834], ["2023-07-08T17:15:00-07:00", -18.409079618752003], ["2023-07-08T17:20:00-07:00", -18.427922692149878], ["2023-07-08T17:25:00-07:00", -18.44676633924246], ["2023-07-08T17:30:00-07:00", -18.46561056189239], ["2023-07-08T17:35:00-07:00", -18.484455358237028], ["2023-07-08T17:40:00-07:00", -18.503300728276372], ["2023-07-08T17:45:00-07:00", -18.52214667201042], ["2023-07-08T17:50:00-07:00", -18.540993191301823], ["2023-07-08T17:55:00-07:00", -18.55984028428793], ["2023-07-08T18:00:00-07:00", -18.578674994409084], ["2023-07-08T18:05:00-07:00", -18.597510853782296], ["2023-07-08T18:10:00-07:00", -18.616347862407565], ["2023-07-08T18:15:00-07:00", -18.635186018422246], ["2023-07-08T18:20:00-07:00", -18.654025323688984], ["2023-07-08T18:25:00-07:00", -18.67286577820778], ["2023-07-08T18:30:00-07:00", -18.69170738197863], ["2023-07-08T18:35:00-07:00", -18.71055013500154], ["2023-07-08T18:40:00-07:00", -18.729394037276506], ["2023-07-08T18:45:00-07:00", -18.74823908880353], ["2023-07-08T18:50:00-07:00", -18.76708528958261], ["2023-07-08T18:55:00-07:00", -18.785932639613748], ["2023-07-08T19:00:00-07:00", -18.804783832281828], ["2023-07-08T19:05:00-07:00", -18.823635598644614], ["2023-07-08T19:10:00-07:00", -18.84248794056475], ["2023-07-08T19:15:00-07:00", -18.861340856179595], ["2023-07-08T19:20:00-07:00", -18.88019434735179], ["2023-07-08T19:25:00-07:00", -18.89904841221869], ["2023-07-08T19:30:00-07:00", -18.917903050780296], ["2023-07-08T19:35:00-07:00", -18.936758264899254], ["2023-07-08T19:40:00-07:00", -18.955614052712917], ["2023-07-08T19:45:00-07:00", -18.974470416083932], ["2023-07-08T19:50:00-07:00", -18.993327353149652], ["2023-07-08T19:55:00-07:00", -19.01218486391008], ["2023-07-08T20:00:00-07:00", -19.031041491776705], ["2023-07-08T20:05:00-07:00", -19.04989869520068], ["2023-07-08T20:10:00-07:00", -19.068756472319365], ["2023-07-08T20:15:00-07:00", -19.0876148249954], ["2023-07-08T20:20:00-07:00", -19.10647375136614], ["2023-07-08T20:25:00-07:00", -19.12533325329423], ["2023-07-08T20:30:00-07:00", -19.144193328917027], ["2023-07-08T20:35:00-07:00", -19.16305397823453], ["2023-07-08T20:40:00-07:00", -19.181915203109384], ["2023-07-08T20:45:00-07:00", -19.200777001678944], ["2023-07-08T20:50:00-07:00", -19.219639375805855], ["2023-07-08T20:55:00-07:00", -19.238502323627472], ["2023-07-08T21:00:00-07:00", -19.257371354848146], ["2023-07-08T21:05:00-07:00", -19.276240961626172], ["2023-07-08T21:10:00-07:00", -19.295111142098904], ["2023-07-08T21:15:00-07:00", -19.31398189626634], ["2023-07-08T21:20:00-07:00", -19.33285322599113], ["2023-07-08T21:25:00-07:00", -19.351725129410625], ["2023-07-08T21:30:00-07:00", -19.370597606524825], ["2023-07-08T21:35:00-07:00", -19.389470659196377], ["2023-07-08T21:40:00-07:00", -19.408344285562634], ["2023-07-08T21:45:00-07:00", -19.427218485623598], ["2023-07-08T21:50:00-07:00", -19.446093261241913], ["2023-07-08T21:55:00-07:00", -19.464968610554934], ["2023-07-08T22:00:00-07:00", -19.48385072313249], ["2023-07-08T22:05:00-07:00", -19.50273283571005], ["2023-07-08T22:10:00-07:00", -19.521614948287606], ["2023-07-08T22:15:00-07:00", -19.540497060865164], ["2023-07-08T22:20:00-07:00", -19.55937917344272], ["2023-07-08T22:25:00-07:00", -19.57826128602028], ["2023-07-08T22:30:00-07:00", -19.597143398597836], ["2023-07-08T22:35:00-07:00", -19.616025511175394], ["2023-07-08T22:40:00-07:00", -19.63490762375295], ["2023-07-08T22:45:00-07:00", -19.65378973633051], ["2023-07-08T22:50:00-07:00", -19.672671848908067], ["2023-07-08T22:55:00-07:00", -19.691565480083227], ["2023-07-08T23:00:00-07:00", -19.71050718612969], ["2023-07-08T23:05:00-07:00", -19.72944889217615], ["2023-07-08T23:10:00-07:00", -19.748390598222613], ["2023-07-08T23:15:00-07:00", -19.767332304269075], ["2023-07-08T23:20:00-07:00", -19.786274010315537], ["2023-07-08T23:25:00-07:00", -19.805215716362], ["2023-07-08T23:30:00-07:00", -19.82415742240846], ["2023-07-08T23:35:00-07:00", -19.843099128454924], ["2023-07-08T23:40:00-07:00", -19.862040834501386], ["2023-07-08T23:45:00-07:00", -19.880982540547848], ["2023-07-08T23:50:00-07:00", -19.89992424659431], ["2023-07-08T23:55:00-07:00", -19.918865952640772], ["2023-07-09T00:00:00-07:00", -19.937942245975137], ["2023-07-09T00:05:00-07:00", -19.9570185393095], ["2023-07-09T00:10:00-07:00", -19.976094832643867], ["2023-07-09T00:15:00-07:00", -19.99517112597823], ["2023-07-09T00:20:00-07:00", -20.014247419312596], ["2023-07-09T00:25:00-07:00", -20.03332371264696], ["2023-07-09T00:30:00-07:00", -20.052400005981326], ["2023-07-09T00:35:00-07:00", -20.07147629931569], ["2023-07-09T00:40:00-07:00", -20.090552592650056], ["2023-07-09T00:45:00-07:00", -20.10962888598442], ["2023-07-09T00:50:00-07:00", -20.128705179318786], ["2023-07-09T00:55:00-07:00", -20.14778147265315], ["2023-07-09T01:00:00-07:00", -20.167008904740214], ["2023-07-09T01:05:00-07:00", -20.186236336827278], ["2023-07-09T01:10:00-07:00", -20.205463768914342], ["2023-07-09T01:15:00-07:00", -20.224691201001406], ["2023-07-09T01:20:00-07:00", -20.24391863308847], ["2023-07-09T01:25:00-07:00", -20.263146065175533], ["2023-07-09T01:30:00-07:00", -20.282373497262597], ["2023-07-09T01:35:00-07:00", -20.30160092934966], ["2023-07-09T01:40:00-07:00", -20.320828361436725], ["2023-07-09T01:45:00-07:00", -20.34005579352379], ["2023-07-09T01:50:00-07:00", -20.359283225610852], ["2023-07-09T01:55:00-07:00", -20.378510657697916], ["2023-07-09T02:00:00-07:00", -20.397797036916018], ["2023-07-09T02:05:00-07:00", -20.41708341613412], ["2023-07-09T02:10:00-07:00", -20.43636979535222], ["2023-07-09T02:15:00-07:00", -20.455656174570322], ["2023-07-09T02:20:00-07:00", -20.474942553788424], ["2023-07-09T02:25:00-07:00", -20.494228933006525], ["2023-07-09T02:30:00-07:00", -20.513515312224627], ["2023-07-09T02:35:00-07:00", -20.532801691442728], ["2023-07-09T02:40:00-07:00", -20.55208807066083], ["2023-07-09T02:45:00-07:00", -20.57137444987893], ["2023-07-09T02:50:00-07:00", -20.590660829097033], ["2023-07-09T02:55:00-07:00", -20.609947208315134], ["2023-07-09T03:00:00-07:00", -20.629251901060343], ["2023-07-09T03:05:00-07:00", -20.64855659380555], ["2023-07-09T03:10:00-07:00", -20.66786128655076], ["2023-07-09T03:15:00-07:00", -20.68716597929597], ["2023-07-09T03:20:00-07:00", -20.706470672041178], ["2023-07-09T03:25:00-07:00", -20.725775364786386], ["2023-07-09T03:30:00-07:00", -20.745080057531595], ["2023-07-09T03:35:00-07:00", -20.764384750276804], ["2023-07-09T03:40:00-07:00", -20.783689443022013], ["2023-07-09T03:45:00-07:00", -20.80299413576722], ["2023-07-09T03:50:00-07:00", -20.82229882851243], ["2023-07-09T03:55:00-07:00", -20.84160352125764], ["2023-07-09T04:00:00-07:00", -20.860920157283545], ["2023-07-09T04:05:00-07:00", -20.88023679330945], ["2023-07-09T04:10:00-07:00", -20.899553429335356], ["2023-07-09T04:15:00-07:00", -20.91887006536126], ["2023-07-09T04:20:00-07:00", -20.938186701387167], ["2023-07-09T04:25:00-07:00", -20.957503337413073], ["2023-07-09T04:30:00-07:00", -20.976819973438978], ["2023-07-09T04:35:00-07:00", -20.996136609464884], ["2023-07-09T04:40:00-07:00", -21.01545324549079], ["2023-07-09T04:45:00-07:00", -21.034769881516695], ["2023-07-09T04:50:00-07:00", -21.0540865175426], ["2023-07-09T04:55:00-07:00", -21.073403153568506], ["2023-07-09T05:00:00-07:00", -21.092744432389736], ["2023-07-09T05:05:00-07:00", -21.112085711210966], ["2023-07-09T05:10:00-07:00", -21.131426990032196], ["2023-07-09T05:15:00-07:00", -21.150768268853426], ["2023-07-09T05:20:00-07:00", -21.170109547674656], ["2023-07-09T05:25:00-07:00", -21.189450826495886], ["2023-07-09T05:30:00-07:00", -21.208792105317116], ["2023-07-09T05:35:00-07:00", -21.228133384138346], ["2023-07-09T05:40:00-07:00", -21.247474662959576], ["2023-07-09T05:45:00-07:00", -21.266815941780806], ["2023-07-09T05:50:00-07:00", -21.286157220602036], ["2023-07-09T05:55:00-07:00", -21.305498499423265], ["2023-07-09T06:00:00-07:00", -21.324865439906716], ["2023-07-09T06:05:00-07:00", -21.344232380390167], ["2023-07-09T06:10:00-07:00", -21.363599320873618], ["2023-07-09T06:15:00-07:00", -21.38296626135707], ["2023-07-09T06:20:00-07:00", -21.40233320184052], ["2023-07-09T06:25:00-07:00", -21.42170014232397], ["2023-07-09T06:30:00-07:00", -21.44106708280742], ["2023-07-09T06:35:00-07:00", -21.460434023290873], ["2023-07-09T06:40:00-07:00", -21.479800963774323], ["2023-07-09T06:45:00-07:00", -21.499167904257774], ["2023-07-09T06:50:00-07:00", -21.518534844741225], ["2023-07-09T06:55:00-07:00", -21.537901785224676], ["2023-07-09T07:00:00-07:00", -21.557289768010378], ["2023-07-09T07:05:00-07:00", -21.57667719013989], ["2023-07-09T07:10:00-07:00", -21.596064049750566], ["2023-07-09T07:15:00-07:00", -21.615450346842408], ["2023-07-09T07:20:00-07:00", -21.63483608327806], ["2023-07-09T07:25:00-07:00", -21.654221257194877], ["2023-07-09T07:30:00-07:00", -21.673605870455503], ["2023-07-09T07:35:00-07:00", -21.692989921197295], ["2023-07-09T07:40:00-07:00", -21.712373411282897], ["2023-07-09T07:45:00-07:00", -21.731756338849664], ["2023-07-09T07:50:00-07:00", -21.751138703897595], ["2023-07-09T07:55:00-07:00", -21.770520508289337], ["2023-07-09T08:00:00-07:00", -21.789919747039676], ["2023-07-09T08:05:00-07:00", -21.809318425133824], ["2023-07-09T08:10:00-07:00", -21.828716542571783], ["2023-07-09T08:15:00-07:00", -21.848114097490907], ["2023-07-09T08:20:00-07:00", -21.86751109175384], ["2023-07-09T08:25:00-07:00", -21.886907525360584], ["2023-07-09T08:30:00-07:00", -21.906303396448493], ["2023-07-09T08:35:00-07:00", -21.925698706880212], ["2023-07-09T08:40:00-07:00", -21.94509345665574], ["2023-07-09T08:45:00-07:00", -21.964487643912435], ["2023-07-09T08:50:00-07:00", -21.98388127051294], ["2023-07-09T08:55:00-07:00", -22.003274336457253], ["2023-07-09T09:00:00-07:00", -22.022586315870285], ["2023-07-09T09:05:00-07:00", -22.041897732764482], ["2023-07-09T09:10:00-07:00", -22.061208587139845], ["2023-07-09T09:15:00-07:00", -22.080518877133727], ["2023-07-09T09:20:00-07:00", -22.099828604608774], ["2023-07-09T09:25:00-07:00", -22.11913776770234], ["2023-07-09T09:30:00-07:00", -22.138446368277073], ["2023-07-09T09:35:00-07:00", -22.15775440633297], ["2023-07-09T09:40:00-07:00", -22.177061880007386], ["2023-07-09T09:45:00-07:00", -22.196368791162968], ["2023-07-09T09:50:00-07:00", -22.21567513793707], ["2023-07-09T09:55:00-07:00", -22.234980922192335], ["2023-07-09T10:00:00-07:00", -22.25413198210299], ["2023-07-09T10:05:00-07:00", -22.27328247576952], ["2023-07-09T10:10:00-07:00", -22.29243240132928], ["2023-07-09T10:15:00-07:00", -22.311581760644913], ["2023-07-09T10:20:00-07:00", -22.330730551853776], ["2023-07-09T10:25:00-07:00", -22.349878776818514], ["2023-07-09T10:30:00-07:00", -22.36902643367648], ["2023-07-09T10:35:00-07:00", -22.388173524290323], ["2023-07-09T10:40:00-07:00", -22.407320046797395], ["2023-07-09T10:45:00-07:00", -22.42646600306034], ["2023-07-09T10:50:00-07:00", -22.445611391216516], ["2023-07-09T10:55:00-07:00", -22.464756213128567], ["2023-07-09T11:00:00-07:00", -22.48379262536764], ["2023-07-09T11:05:00-07:00", -22.502829037606716], ["2023-07-09T11:10:00-07:00", -22.52186544984579], ["2023-07-09T11:15:00-07:00", -22.540901862084866], ["2023-07-09T11:20:00-07:00", -22.55993827432394], ["2023-07-09T11:25:00-07:00", -22.578974686563015], ["2023-07-09T11:30:00-07:00", -22.59801109880209], ["2023-07-09T11:35:00-07:00", -22.617047511041164], ["2023-07-09T11:40:00-07:00", -22.63608392328024], ["2023-07-09T11:45:00-07:00", -22.655120335519314], ["2023-07-09T11:50:00-07:00", -22.67415674775839], ["2023-07-09T11:55:00-07:00", -22.693193159997463], ["2023-07-09T12:00:00-07:00", -22.712194548919797], ["2023-07-09T12:05:00-07:00", -22.73119536601007], ["2023-07-09T12:10:00-07:00", -22.750195613130927], ["2023-07-09T12:15:00-07:00", -22.769195288419724], ["2023-07-09T12:20:00-07:00", -22.788194393739104], ["2023-07-09T12:25:00-07:00", -22.807192927226424], ["2023-07-09T12:30:00-07:00", -22.82619089074433], ["2023-07-09T12:35:00-07:00", -22.845188284292817], ["2023-07-09T12:40:00-07:00", -22.864185106009245], ["2023-07-09T12:45:00-07:00", -22.883181357756257], ["2023-07-09T12:50:00-07:00", -22.90217703767121], ["2023-07-09T12:55:00-07:00", -22.921172147616744], ["2023-07-09T13:00:00-07:00", -22.940143540501595], ["2023-07-09T13:05:00-07:00", -22.959114933386445], ["2023-07-09T13:10:00-07:00", -22.978086326271296], ["2023-07-09T13:15:00-07:00", -22.997057719156146], ["2023-07-09T13:20:00-07:00", -23.016029112040997], ["2023-07-09T13:25:00-07:00", -23.035000504925847], ["2023-07-09T13:30:00-07:00", -23.053971897810698], ["2023-07-09T13:35:00-07:00", -23.072943290695548], ["2023-07-09T13:40:00-07:00", -23.0919146835804], ["2023-07-09T13:45:00-07:00", -23.11088607646525], ["2023-07-09T13:50:00-07:00", -23.1298574693501], ["2023-07-09T13:55:00-07:00", -23.14882886223495], ["2023-07-09T14:00:00-07:00", -23.167767465114594], ["2023-07-09T14:05:00-07:00", -23.186705496162176], ["2023-07-09T14:10:00-07:00", -23.205642955377698], ["2023-07-09T14:15:00-07:00", -23.22457984276116], ["2023-07-09T14:20:00-07:00", -23.243516156449914], ["2023-07-09T14:25:00-07:00", -23.262451898306608], ["2023-07-09T14:30:00-07:00", -23.28138706833124], ["2023-07-09T14:35:00-07:00", -23.300321666523814], ["2023-07-09T14:40:00-07:00", -23.319255692884326], ["2023-07-09T14:45:00-07:00", -23.338189145550132], ["2023-07-09T14:50:00-07:00", -23.357122026383877], ["2023-07-09T14:55:00-07:00", -23.37605433538556], ["2023-07-09T15:00:00-07:00", -23.394956659525633], ["2023-07-09T15:05:00-07:00", -23.413858983665705], ["2023-07-09T15:10:00-07:00", -23.432761307805777], ["2023-07-09T15:15:00-07:00", -23.45166363194585], ["2023-07-09T15:20:00-07:00", -23.47056595608592], ["2023-07-09T15:25:00-07:00", -23.489468280225992], ["2023-07-09T15:30:00-07:00", -23.508370604366064], ["2023-07-09T15:35:00-07:00", -23.527272928506136], ["2023-07-09T15:40:00-07:00", -23.546175252646208], ["2023-07-09T15:45:00-07:00", -23.56507757678628], ["2023-07-09T15:50:00-07:00", -23.58397990092635], ["2023-07-09T15:55:00-07:00", -23.602882225066423], ["2023-07-09T16:00:00-07:00", -23.621760157868266], ["2023-07-09T16:05:00-07:00", -23.64063809067011], ["2023-07-09T16:10:00-07:00", -23.65951602347195], ["2023-07-09T16:15:00-07:00", -23.678393956273794], ["2023-07-09T16:20:00-07:00", -23.697271889075637], ["2023-07-09T16:25:00-07:00", -23.71614982187748], ["2023-07-09T16:30:00-07:00", -23.735027754679322], ["2023-07-09T16:35:00-07:00", -23.753905687481165], ["2023-07-09T16:40:00-07:00", -23.772783620283008], ["2023-07-09T16:45:00-07:00", -23.79166155308485], ["2023-07-09T16:50:00-07:00", -23.810539485886693], ["2023-07-09T16:55:00-07:00", -23.829417418688536], ["2023-07-09T17:00:00-07:00", -23.848269714042544], ["2023-07-09T17:05:00-07:00", -23.867122009396553], ["2023-07-09T17:10:00-07:00", -23.88597430475056], ["2023-07-09T17:15:00-07:00", -23.90482660010457], ["2023-07-09T17:20:00-07:00", -23.92367889545858], ["2023-07-09T17:25:00-07:00", -23.942531190812588], ["2023-07-09T17:30:00-07:00", -23.961383486166596], ["2023-07-09T17:35:00-07:00", -23.980235781520605], ["2023-07-09T17:40:00-07:00", -23.999088076874614], ["2023-07-09T17:45:00-07:00", -24.017940372228622], ["2023-07-09T17:50:00-07:00", -24.03679266758263], ["2023-07-09T17:55:00-07:00", -24.05564496293664], ["2023-07-09T18:00:00-07:00", -24.074484303593636], ["2023-07-09T18:05:00-07:00", -24.093324219807982], ["2023-07-09T18:10:00-07:00", -24.112164709717035], ["2023-07-09T18:15:00-07:00", -24.13100577518344], ["2023-07-09T18:20:00-07:00", -24.14984741434455], ["2023-07-09T18:25:00-07:00", -24.168689627200365], ["2023-07-09T18:30:00-07:00", -24.187532415613532], ["2023-07-09T18:35:00-07:00", -24.206375777721405], ["2023-07-09T18:40:00-07:00", -24.22521971538663], ["2023-07-09T18:45:00-07:00", -24.24406422674656], ["2023-07-09T18:50:00-07:00", -24.26290931366384], ["2023-07-09T18:55:00-07:00", -24.281754974275827], ["2023-07-09T19:00:00-07:00", -24.30060390383005], ["2023-07-09T19:05:00-07:00", -24.319453408941627], ["2023-07-09T19:10:00-07:00", -24.338303487747908], ["2023-07-09T19:15:00-07:00", -24.357154140248895], ["2023-07-09T19:20:00-07:00", -24.376005368307233], ["2023-07-09T19:25:00-07:00", -24.394857170060277], ["2023-07-09T19:30:00-07:00", -24.413709547370672], ["2023-07-09T19:35:00-07:00", -24.432562498375773], ["2023-07-09T19:40:00-07:00", -24.45141602307558], ["2023-07-09T19:45:00-07:00", -24.47027012333274], ["2023-07-09T19:50:00-07:00", -24.489124797284603], ["2023-07-09T19:55:00-07:00", -24.50798004679382], ["2023-07-09T20:00:00-07:00", -24.526834413409233], ["2023-07-09T20:05:00-07:00", -24.545688780024648], ["2023-07-09T20:10:00-07:00", -24.564543146640062], ["2023-07-09T20:15:00-07:00", -24.583397513255477], ["2023-07-09T20:20:00-07:00", -24.60225187987089], ["2023-07-09T20:25:00-07:00", -24.621106246486306], ["2023-07-09T20:30:00-07:00", -24.63996061310172], ["2023-07-09T20:35:00-07:00", -24.658814979717135], ["2023-07-09T20:40:00-07:00", -24.67766934633255], ["2023-07-09T20:45:00-07:00", -24.696523712947965], ["2023-07-09T20:50:00-07:00", -24.71537807956338], ["2023-07-09T20:55:00-07:00", -24.734232446178794], ["2023-07-09T21:00:00-07:00", -24.753092324361205], ["2023-07-09T21:05:00-07:00", -24.771952776238322], ["2023-07-09T21:10:00-07:00", -24.790813801810145], ["2023-07-09T21:15:00-07:00", -24.80967540293932], ["2023-07-09T21:20:00-07:00", -24.8285375777632], ["2023-07-09T21:25:00-07:00", -24.847400326281786], ["2023-07-09T21:30:00-07:00", -24.866263650357723], ["2023-07-09T21:35:00-07:00", -24.885127548128366], ["2023-07-09T21:40:00-07:00", -24.903992019593716], ["2023-07-09T21:45:00-07:00", -24.922857066616416], ["2023-07-09T21:50:00-07:00", -24.941722687333822], ["2023-07-09T21:55:00-07:00", -24.960588881745934], ["2023-07-09T22:00:00-07:00", -24.97946184128523], ["2023-07-09T22:05:00-07:00", -24.998334800824523], ["2023-07-09T22:10:00-07:00", -25.017207760363817], ["2023-07-09T22:15:00-07:00", -25.03608071990311], ["2023-07-09T22:20:00-07:00", -25.054953679442406], ["2023-07-09T22:25:00-07:00", -25.0738266389817], ["2023-07-09T22:30:00-07:00", -25.092699598520994], ["2023-07-09T22:35:00-07:00", -25.11157255806029], ["2023-07-09T22:40:00-07:00", -25.130445517599583], ["2023-07-09T22:45:00-07:00", -25.149318477138877], ["2023-07-09T22:50:00-07:00", -25.16819143667817], ["2023-07-09T22:55:00-07:00", -25.187064396217465], ["2023-07-09T23:00:00-07:00", -25.206446481868625], ["2023-07-09T23:05:00-07:00", -25.225828567519784], ["2023-07-09T23:10:00-07:00", -25.245210653170943], ["2023-07-09T23:15:00-07:00", -25.264592738822103], ["2023-07-09T23:20:00-07:00", -25.283974824473262], ["2023-07-09T23:25:00-07:00", -25.30335691012442], ["2023-07-09T23:30:00-07:00", -25.32273899577558], ["2023-07-09T23:35:00-07:00", -25.34212108142674], ["2023-07-09T23:40:00-07:00", -25.3615031670779], ["2023-07-09T23:45:00-07:00", -25.38088525272906], ["2023-07-09T23:50:00-07:00", -25.400267338380218], ["2023-07-09T23:55:00-07:00", -25.419649424031377], ["2023-07-10T00:00:00-07:00", -25.43916621990502], ["2023-07-10T00:05:00-07:00", -25.45868301577866], ["2023-07-10T00:10:00-07:00", -25.478199811652303], ["2023-07-10T00:15:00-07:00", -25.497716607525945], ["2023-07-10T00:20:00-07:00", -25.517233403399587], ["2023-07-10T00:25:00-07:00", -25.53675019927323], ["2023-07-10T00:30:00-07:00", -25.55626699514687], ["2023-07-10T00:35:00-07:00", -25.575783791020513], ["2023-07-10T00:40:00-07:00", -25.595300586894155], ["2023-07-10T00:45:00-07:00", -25.614817382767797], ["2023-07-10T00:50:00-07:00", -25.63433417864144], ["2023-07-10T00:55:00-07:00", -25.65385097451508], ["2023-07-10T01:00:00-07:00", -25.673519045114517], ["2023-07-10T01:05:00-07:00", -25.693187668919563], ["2023-07-10T01:10:00-07:00", -25.712856847792864], ["2023-07-10T01:15:00-07:00", -25.732526579871774], ["2023-07-10T01:20:00-07:00", -25.752196867018938], ["2023-07-10T01:25:00-07:00", -25.77186770737171], ["2023-07-10T01:30:00-07:00", -25.79153910279274], ["2023-07-10T01:35:00-07:00", -25.811211051419377], ["2023-07-10T01:40:00-07:00", -25.83088355511427], ["2023-07-10T01:45:00-07:00", -25.85055661201477], ["2023-07-10T01:50:00-07:00", -25.870230223983526], ["2023-07-10T01:55:00-07:00", -25.88990438915789], ["2023-07-10T02:00:00-07:00", -25.909638091921806], ["2023-07-10T02:05:00-07:00", -25.92937179468572], ["2023-07-10T02:10:00-07:00", -25.949105497449636], ["2023-07-10T02:15:00-07:00", -25.96883920021355], ["2023-07-10T02:20:00-07:00", -25.988572902977467], ["2023-07-10T02:25:00-07:00", -26.00830660574138], ["2023-07-10T02:30:00-07:00", -26.028040308505297], ["2023-07-10T02:35:00-07:00", -26.04777401126921], ["2023-07-10T02:40:00-07:00", -26.067507714033127], ["2023-07-10T02:45:00-07:00", -26.087241416797042], ["2023-07-10T02:50:00-07:00", -26.106975119560957], ["2023-07-10T02:55:00-07:00", -26.126708822324872], ["2023-07-10T03:00:00-07:00", -26.146460849791765], ["2023-07-10T03:05:00-07:00", -26.16621287725866], ["2023-07-10T03:10:00-07:00", -26.18596490472555], ["2023-07-10T03:15:00-07:00", -26.205716932192445], ["2023-07-10T03:20:00-07:00", -26.225468959659338], ["2023-07-10T03:25:00-07:00", -26.24522098712623], ["2023-07-10T03:30:00-07:00", -26.264973014593124], ["2023-07-10T03:35:00-07:00", -26.284725042060018], ["2023-07-10T03:40:00-07:00", -26.30447706952691], ["2023-07-10T03:45:00-07:00", -26.324229096993804], ["2023-07-10T03:50:00-07:00", -26.343981124460697], ["2023-07-10T03:55:00-07:00", -26.36373315192759], ["2023-07-10T04:00:00-07:00", -26.383497131988406], ["2023-07-10T04:05:00-07:00", -26.403261112049222], ["2023-07-10T04:10:00-07:00", -26.423025092110038], ["2023-07-10T04:15:00-07:00", -26.442789072170854], ["2023-07-10T04:20:00-07:00", -26.46255305223167], ["2023-07-10T04:25:00-07:00", -26.482317032292485], ["2023-07-10T04:30:00-07:00", -26.5020810123533], ["2023-07-10T04:35:00-07:00", -26.521844992414117], ["2023-07-10T04:40:00-07:00", -26.541608972474933], ["2023-07-10T04:45:00-07:00", -26.56137295253575], ["2023-07-10T04:50:00-07:00", -26.581136932596564], ["2023-07-10T04:55:00-07:00", -26.60090091265738], ["2023-07-10T05:00:00-07:00", -26.621078895404935], ["2023-07-10T05:05:00-07:00", -26.641257420182228], ["2023-07-10T05:10:00-07:00", -26.66143648698926], ["2023-07-10T05:15:00-07:00", -26.681616093963385], ["2023-07-10T05:20:00-07:00", -26.701796242967248], ["2023-07-10T05:25:00-07:00", -26.72197693400085], ["2023-07-10T05:30:00-07:00", -26.742158165201545], ["2023-07-10T05:35:00-07:00", -26.76233993843198], ["2023-07-10T05:40:00-07:00", -26.78252225369215], ["2023-07-10T05:45:00-07:00", -26.802705109119415], ["2023-07-10T05:50:00-07:00", -26.82288850657642], ["2023-07-10T05:55:00-07:00", -26.84307244606316], ["2023-07-10T06:00:00-07:00", -26.863282596692443], ["2023-07-10T06:05:00-07:00", -27.248624002560973], ["2023-07-10T06:10:00-07:00", -27.634768879041076], ["2023-07-10T06:15:00-07:00", -28.02091375552118], ["2023-07-10T06:20:00-07:00", -28.40705863200128], ["2023-07-10T06:25:00-07:00", -28.793203508481383], ["2023-07-10T06:30:00-07:00", -29.179348384961486], ["2023-07-10T06:35:00-07:00", -29.56549326144159], ["2023-07-10T06:40:00-07:00", -29.95163813792169], ["2023-07-10T06:45:00-07:00", -30.337783014401793], ["2023-07-10T06:50:00-07:00", -30.723927890881896], ["2023-07-10T06:55:00-07:00", -31.110072767362], ["2023-07-10T07:00:00-07:00", -31.659249817952514], ["2023-07-10T07:05:00-07:00", -32.16885415278375], ["2023-07-10T07:10:00-07:00", -32.69762024842203], ["2023-07-10T07:15:00-07:00", -33.22208414040506], ["2023-07-10T07:20:00-07:00", -33.73082152567804], ["2023-07-10T07:25:00-07:00", -34.23388532362878], ["2023-07-10T07:30:00-07:00", -34.73566791974008], ["2023-07-10T07:35:00-07:00", -35.23065016232431], ["2023-07-10T07:40:00-07:00", -35.723297065123916], ["2023-07-10T07:45:00-07:00", -36.21881133876741], ["2023-07-10T07:50:00-07:00", -36.708724772557616], ["2023-07-10T07:55:00-07:00", -37.19398230873048], ["2023-07-10T08:00:00-07:00", -37.67500657401979], ["2023-07-10T08:05:00-07:00", -38.15227157436311], ["2023-07-10T08:10:00-07:00", -38.630030220374465], ["2023-07-10T08:15:00-07:00", -39.10789433680475], ["2023-07-10T08:20:00-07:00", -39.57836804352701], ["2023-07-10T08:25:00-07:00", -40.04386649094522], ["2023-07-10T08:30:00-07:00", -40.50412521325052], ["2023-07-10T08:35:00-07:00", -40.95973608456552], ["2023-07-10T08:40:00-07:00", -41.413392996415496], ["2023-07-10T08:45:00-07:00", -41.8668428119272], ["2023-07-10T08:50:00-07:00", -42.318667417392135], ["2023-07-10T08:55:00-07:00", -42.768735682591796], ["2023-07-10T09:00:00-07:00", -43.21622741781175], ["2023-07-10T09:05:00-07:00", -43.660949205979705], ["2023-07-10T09:10:00-07:00", -44.10409549437463], ["2023-07-10T09:15:00-07:00", -44.54543406330049], ["2023-07-10T09:20:00-07:00", -44.9880192335695], ["2023-07-10T09:25:00-07:00", -45.429603999480605], ["2023-07-10T09:30:00-07:00", -45.87031794153154], ["2023-07-10T09:35:00-07:00", -46.310179537162185], ["2023-07-10T09:40:00-07:00", -46.74888009391725], ["2023-07-10T09:45:00-07:00", -47.185149585828185], ["2023-07-10T09:50:00-07:00", -47.619773691520095], ["2023-07-10T09:55:00-07:00", -48.05288637243211], ["2023-07-10T10:00:00-07:00", -48.4829339440912], ["2023-07-10T10:05:00-07:00", -48.90606421791017], ["2023-07-10T10:10:00-07:00", -49.32285917364061], ["2023-07-10T10:15:00-07:00", -49.73247671686113], ["2023-07-10T10:20:00-07:00", -50.14103288017213], ["2023-07-10T10:25:00-07:00", -50.54859400354326], ["2023-07-10T10:30:00-07:00", -50.955102717503905], ["2023-07-10T10:35:00-07:00", -51.36016703210771], ["2023-07-10T10:40:00-07:00", -51.76356795988977], ["2023-07-10T10:45:00-07:00", -52.16627917252481], ["2023-07-10T10:50:00-07:00", -52.573482846841216], ["2023-07-10T10:55:00-07:00", -52.97901931963861], ["2023-07-10T11:00:00-07:00", -53.37760484777391], ["2023-07-10T11:05:00-07:00", -53.781406885012984], ["2023-07-10T11:10:00-07:00", -54.189748203381896], ["2023-07-10T11:15:00-07:00", -54.59119493328035], ["2023-07-10T11:20:00-07:00", -54.992592161521316], ["2023-07-10T11:25:00-07:00", -55.40440577827394], ["2023-07-10T11:30:00-07:00", -55.81483796797693], ["2023-07-10T11:35:00-07:00", -56.224490677937865], ["2023-07-10T11:40:00-07:00", -56.63364780507982], ["2023-07-10T11:45:00-07:00", -57.04228404723108], ["2023-07-10T11:50:00-07:00", -57.44986814819276], ["2023-07-10T11:55:00-07:00", -57.85670772753656], ["2023-07-10T12:00:00-07:00", -58.24081144295633], ["2023-07-10T12:05:00-07:00", -58.61861220560968], ["2023-07-10T12:10:00-07:00", -58.995341842994094], ["2023-07-10T12:15:00-07:00", -59.37127131782472], ["2023-07-10T12:20:00-07:00", -59.74636188708246], ["2023-07-10T12:25:00-07:00", -60.1097002979368], ["2023-07-10T12:30:00-07:00", -60.47225803695619], ["2023-07-10T12:35:00-07:00", -60.834020083770156], ["2023-07-10T12:40:00-07:00", -61.194778924807906], ["2023-07-10T12:45:00-07:00", -61.53819183073938], ["2023-07-10T12:50:00-07:00", -61.88139042817056], ["2023-07-10T12:55:00-07:00", -62.23475990258157], ["2023-07-10T13:00:00-07:00", -62.586867129430175], ["2023-07-10T13:05:00-07:00", -62.9271595235914], ["2023-07-10T13:10:00-07:00", -63.25736660324037], ["2023-07-10T13:15:00-07:00", -63.59385318122804], ["2023-07-10T13:20:00-07:00", -63.930612897500396], ["2023-07-10T13:25:00-07:00", -64.2688211556524], ["2023-07-10T13:30:00-07:00", -64.61056516133249], ["2023-07-10T13:35:00-07:00", -64.9464371856302], ["2023-07-10T13:40:00-07:00", -65.28229922614992], ["2023-07-10T13:45:00-07:00", -65.61994413100183], ["2023-07-10T13:50:00-07:00", -65.95524186454713], ["2023-07-10T13:55:00-07:00", -66.29399979673326], ["2023-07-10T14:00:00-07:00", -66.6288664098829], ["2023-07-10T14:05:00-07:00", -66.96391028724611], ["2023-07-10T14:10:00-07:00", -67.30394223891199], ["2023-07-10T14:15:00-07:00", -67.63910258375108], ["2023-07-10T14:20:00-07:00", -67.98020750842988], ["2023-07-10T14:25:00-07:00", -68.31831437908113], ["2023-07-10T14:30:00-07:00", -68.65713915787637], ["2023-07-10T14:35:00-07:00", -68.98757479153574], ["2023-07-10T14:40:00-07:00", -69.32843089662492], ["2023-07-10T14:45:00-07:00", -69.67597520910203], ["2023-07-10T14:50:00-07:00", -70.0179351028055], ["2023-07-10T14:55:00-07:00", -70.36289129219949], ["2023-07-10T15:00:00-07:00", -70.69821847043931], ["2023-07-10T15:05:00-07:00", -71.04012477956712], ["2023-07-10T15:10:00-07:00", -71.36699724756181], ["2023-07-10T15:15:00-07:00", -71.69620431028306], ["2023-07-10T15:20:00-07:00", -72.0283329244703], ["2023-07-10T15:25:00-07:00", -72.36193433962762], ["2023-07-10T15:30:00-07:00", -72.69720596633852], ["2023-07-10T15:35:00-07:00", -73.034414594993], ["2023-07-10T15:40:00-07:00", -73.37102464400232], ["2023-07-10T15:45:00-07:00", -73.71245092712343], ["2023-07-10T15:50:00-07:00", -74.05330819450319], ["2023-07-10T15:55:00-07:00", -74.40476254187524], ["2023-07-10T16:00:00-07:00", -74.76056638918817], ["2023-07-10T16:05:00-07:00", -75.12467763386667], ["2023-07-10T16:10:00-07:00", -75.48694822750986], ["2023-07-10T16:15:00-07:00", -75.84848133288324], ["2023-07-10T16:20:00-07:00", -76.20883173309267], ["2023-07-10T16:25:00-07:00", -76.56300482712686], ["2023-07-10T16:30:00-07:00", -76.91634861193597], ["2023-07-10T16:35:00-07:00", -77.26359314285219], ["2023-07-10T16:40:00-07:00", -77.61058146320283], ["2023-07-10T16:45:00-07:00", -77.95669398270547], ["2023-07-10T16:50:00-07:00", -78.301932817325], ["2023-07-10T16:55:00-07:00", -78.65749553404748], ["2023-07-10T17:00:00-07:00", -79.00069425068796], ["2023-07-10T17:05:00-07:00", -79.3419593628496], ["2023-07-10T17:10:00-07:00", -79.67049578391016], ["2023-07-10T17:15:00-07:00", -80.00103343091905], ["2023-07-10T17:20:00-07:00", -80.34734038077295], ["2023-07-10T17:25:00-07:00", -80.65277201496065], ["2023-07-10T17:30:00-07:00", -80.98992458544672], ["2023-07-10T17:35:00-07:00", -81.33075973950326], ["2023-07-10T17:40:00-07:00", -81.67514548264444], ["2023-07-10T17:45:00-07:00", -82.02322045527399], ["2023-07-10T17:50:00-07:00", -82.38042370043695], ["2023-07-10T17:55:00-07:00", -82.74127528630197], ["2023-07-10T18:00:00-07:00", -83.10549676977098], ["2023-07-10T18:05:00-07:00", -83.47352892719209], ["2023-07-10T18:10:00-07:00", -83.84499079547822], ["2023-07-10T18:15:00-07:00", -84.2202293034643], ["2023-07-10T18:20:00-07:00", -84.59916788898408], ["2023-07-10T18:25:00-07:00", -84.8977066334337], ["2023-07-10T18:30:00-07:00", -85.19624713622034], ["2023-07-10T18:35:00-07:00", -85.50016072951257], ["2023-07-10T18:40:00-07:00", -85.81481868587434], ["2023-07-10T18:45:00-07:00", -86.12947840057313], ["2023-07-10T18:50:00-07:00", -86.44413990341127], ["2023-07-10T18:55:00-07:00", -86.75880316458642], ["2023-07-10T19:00:00-07:00", -87.07351375184953], ["2023-07-10T19:05:00-07:00", -87.09235173277557], ["2023-07-10T19:10:00-07:00", -87.11119028739631], ["2023-07-10T19:15:00-07:00", -87.13002941571176], ["2023-07-10T19:20:00-07:00", -87.14886911958456], ["2023-07-10T19:25:00-07:00", -87.16770939715207], ["2023-07-10T19:30:00-07:00", -87.18655025027692], ["2023-07-10T19:35:00-07:00", -87.20539167709649], ["2023-07-10T19:40:00-07:00", -87.22423367761075], ["2023-07-10T19:45:00-07:00", -87.24307625368237], ["2023-07-10T19:50:00-07:00", -87.2619194034487], ["2023-07-10T19:55:00-07:00", -87.28076312877238], ["2023-07-10T20:00:00-07:00", -87.29960596933961], ["2023-07-10T20:05:00-07:00", -87.31844938546419], ["2023-07-10T20:10:00-07:00", -87.33729337528348], ["2023-07-10T20:15:00-07:00", -87.35613794066012], ["2023-07-10T20:20:00-07:00", -87.37498307973146], ["2023-07-10T20:25:00-07:00", -87.39382879249752], ["2023-07-10T20:30:00-07:00", -87.41267508082092], ["2023-07-10T20:35:00-07:00", -87.43152194283903], ["2023-07-10T20:40:00-07:00", -87.45036938041449], ["2023-07-10T20:45:00-07:00", -87.46921739168465], ["2023-07-10T20:50:00-07:00", -87.48806597851217], ["2023-07-10T20:55:00-07:00", -87.50691513903439], ["2023-07-10T21:00:00-07:00", -87.52577038668096], ["2023-07-10T21:05:00-07:00", -87.54462563432753], ["2023-07-10T21:10:00-07:00", -87.5634808819741], ["2023-07-10T21:15:00-07:00", -87.58233612962067], ["2023-07-10T21:20:00-07:00", -87.60119137726724], ["2023-07-10T21:25:00-07:00", -87.62004662491381], ["2023-07-10T21:30:00-07:00", -87.63890187256038], ["2023-07-10T21:35:00-07:00", -87.65775712020695], ["2023-07-10T21:40:00-07:00", -87.67661236785352], ["2023-07-10T21:45:00-07:00", -87.69546761550009], ["2023-07-10T21:50:00-07:00", -87.71432286314666], ["2023-07-10T21:55:00-07:00", -87.73317811079323], ["2023-07-10T22:00:00-07:00", -87.75203955173492], ["2023-07-10T22:05:00-07:00", -87.77090156823397], ["2023-07-10T22:10:00-07:00", -87.78976415842772], ["2023-07-10T22:15:00-07:00", -87.80862732231617], ["2023-07-10T22:20:00-07:00", -87.82749105989933], ["2023-07-10T22:25:00-07:00", -87.84635537303984], ["2023-07-10T22:30:00-07:00", -87.86522025987506], ["2023-07-10T22:35:00-07:00", -87.88408572040498], ["2023-07-10T22:40:00-07:00", -87.90295175462961], ["2023-07-10T22:45:00-07:00", -87.92181836441159], ["2023-07-10T22:50:00-07:00", -87.94068554788828], ["2023-07-10T22:55:00-07:00", -87.95956482365727], ["2023-07-10T23:00:00-07:00", -87.97895364649594], ["2023-07-10T23:05:00-07:00", -87.9983424693346], ["2023-07-10T23:10:00-07:00", -88.01773129217327], ["2023-07-10T23:15:00-07:00", -88.03712011501193], ["2023-07-10T23:20:00-07:00", -88.0565089378506], ["2023-07-10T23:25:00-07:00", -88.07589776068926], ["2023-07-10T23:30:00-07:00", -88.09528658352792], ["2023-07-10T23:35:00-07:00", -88.11467540636659], ["2023-07-10T23:40:00-07:00", -88.13406422920525], ["2023-07-10T23:45:00-07:00", -88.15345305204391], ["2023-07-10T23:50:00-07:00", -88.17284187488258], ["2023-07-10T23:55:00-07:00", -88.19223069772124], ["2023-07-11T00:00:00-07:00", -88.21175418794155], ["2023-07-11T00:05:00-07:00", -88.23127767816186], ["2023-07-11T00:10:00-07:00", -88.25080116838217], ["2023-07-11T00:15:00-07:00", -88.27032465860248], ["2023-07-11T00:20:00-07:00", -88.28984814882278], ["2023-07-11T00:25:00-07:00", -88.30937163904309], ["2023-07-11T00:30:00-07:00", -88.3288951292634], ["2023-07-11T00:35:00-07:00", -88.34841861948371], ["2023-07-11T00:40:00-07:00", -88.36794210970402], ["2023-07-11T00:45:00-07:00", -88.38746559992433], ["2023-07-11T00:50:00-07:00", -88.40698909014463], ["2023-07-11T00:55:00-07:00", -88.42651258036494], ["2023-07-11T01:00:00-07:00", -88.44618730060756], ["2023-07-11T01:05:00-07:00", -88.46586257405579], ["2023-07-11T01:10:00-07:00", -88.48553840257227], ["2023-07-11T01:15:00-07:00", -88.50521478429437], ["2023-07-11T01:20:00-07:00", -88.52489172108471], ["2023-07-11T01:25:00-07:00", -88.54456921108067], ["2023-07-11T01:30:00-07:00", -88.56424725614488], ["2023-07-11T01:35:00-07:00", -88.5839258544147], ["2023-07-11T01:40:00-07:00", -88.60360500775278], ["2023-07-11T01:45:00-07:00", -88.62328471429646], ["2023-07-11T01:50:00-07:00", -88.6429649759084], ["2023-07-11T01:55:00-07:00", -88.66264579072595], ["2023-07-11T02:00:00-07:00", -88.68238612636924], ["2023-07-11T02:05:00-07:00", -88.70212646201253], ["2023-07-11T02:10:00-07:00", -88.72186679765582], ["2023-07-11T02:15:00-07:00", -88.74160713329911], ["2023-07-11T02:20:00-07:00", -88.7613474689424], ["2023-07-11T02:25:00-07:00", -88.7810878045857], ["2023-07-11T02:30:00-07:00", -88.80082814022899], ["2023-07-11T02:35:00-07:00", -88.82056847587228], ["2023-07-11T02:40:00-07:00", -88.84030881151557], ["2023-07-11T02:45:00-07:00", -88.86004914715886], ["2023-07-11T02:50:00-07:00", -88.87978948280215], ["2023-07-11T02:55:00-07:00", -88.89952981844544], ["2023-07-11T03:00:00-07:00", -88.91928847320378], ["2023-07-11T03:05:00-07:00", -88.93904712796211], ["2023-07-11T03:10:00-07:00", -88.95880578272045], ["2023-07-11T03:15:00-07:00", -88.97856443747878], ["2023-07-11T03:20:00-07:00", -88.99832309223711], ["2023-07-11T03:25:00-07:00", -89.01808174699545], ["2023-07-11T03:30:00-07:00", -89.03784040175378], ["2023-07-11T03:35:00-07:00", -89.05759905651212], ["2023-07-11T03:40:00-07:00", -89.07735771127045], ["2023-07-11T03:45:00-07:00", -89.09711636602879], ["2023-07-11T03:50:00-07:00", -89.11687502078712], ["2023-07-11T03:55:00-07:00", -89.13663367554545], ["2023-07-11T04:00:00-07:00", -89.15640427730978], ["2023-07-11T04:05:00-07:00", -89.1761748790741], ["2023-07-11T04:10:00-07:00", -89.19594548083842], ["2023-07-11T04:15:00-07:00", -89.21571608260274], ["2023-07-11T04:20:00-07:00", -89.23548668436706], ["2023-07-11T04:25:00-07:00", -89.25525728613138], ["2023-07-11T04:30:00-07:00", -89.2750278878957], ["2023-07-11T04:35:00-07:00", -89.29479848966002], ["2023-07-11T04:40:00-07:00", -89.31456909142435], ["2023-07-11T04:45:00-07:00", -89.33433969318867], ["2023-07-11T04:50:00-07:00", -89.35411029495299], ["2023-07-11T04:55:00-07:00", -89.37388089671731], ["2023-07-11T05:00:00-07:00", -89.39406537823379], ["2023-07-11T05:05:00-07:00", -89.41425039991736], ["2023-07-11T05:10:00-07:00", -89.43443596363068], ["2023-07-11T05:15:00-07:00", -89.45462206937373], ["2023-07-11T05:20:00-07:00", -89.47480871528387], ["2023-07-11T05:25:00-07:00", -89.49499590322375], ["2023-07-11T05:30:00-07:00", -89.51518363319337], ["2023-07-11T05:35:00-07:00", -89.53537190333009], ["2023-07-11T05:40:00-07:00", -89.55556071549654], ["2023-07-11T05:45:00-07:00", -89.57575006969273], ["2023-07-11T05:50:00-07:00", -89.59593996405602], ["2023-07-11T05:55:00-07:00", -89.61613040044904], ["2023-07-11T06:00:00-07:00", -89.63634704053402], ["2023-07-11T06:05:00-07:00", -90.02170641720295], ["2023-07-11T06:10:00-07:00", -90.40785564482212], ["2023-07-11T06:15:00-07:00", -90.79400376975536], ["2023-07-11T06:20:00-07:00", -91.180150821805], ["2023-07-11T06:25:00-07:00", -91.56629680097103], ["2023-07-11T06:30:00-07:00", -91.95244167745113], ["2023-07-11T06:35:00-07:00", -92.33858548104763], ["2023-07-11T06:40:00-07:00", -92.72472821176052], ["2023-07-11T06:45:00-07:00", -93.11086983978748], ["2023-07-11T06:50:00-07:00", -93.49701039493084], ["2023-07-11T06:55:00-07:00", -93.88314987719059], ["2023-07-11T07:00:00-07:00", -94.3558878749609], ["2023-07-11T07:05:00-07:00", -94.86357121169567], ["2023-07-11T07:10:00-07:00", -95.34141640365124], ["2023-07-11T07:15:00-07:00", -95.81621290743351], ["2023-07-11T07:20:00-07:00", -96.2853004783392], ["2023-07-11T07:25:00-07:00", -96.7414508908987], ["2023-07-11T07:30:00-07:00", -97.19447369873524], ["2023-07-11T07:35:00-07:00", -97.64462219178677], ["2023-07-11T07:40:00-07:00", -98.09308610856533], ["2023-07-11T07:45:00-07:00", -98.54015056788921], ["2023-07-11T07:50:00-07:00", -98.98441164195538], ["2023-07-11T07:55:00-07:00", -99.42659305036068], ["2023-07-11T08:00:00-07:00", -99.87261800467968], ["2023-07-11T08:05:00-07:00", -100.32005973160267], ["2023-07-11T08:10:00-07:00", -100.76339156925678], ["2023-07-11T08:15:00-07:00", -101.20291842520237], ["2023-07-11T08:20:00-07:00", -101.64013965427876], ["2023-07-11T08:25:00-07:00", -102.07481701672077], ["2023-07-11T08:30:00-07:00", -102.50831915438175], ["2023-07-11T08:35:00-07:00", -102.92933668196201], ["2023-07-11T08:40:00-07:00", -103.34012015163898], ["2023-07-11T08:45:00-07:00", -103.75141341984272], ["2023-07-11T08:50:00-07:00", -104.15574292838573], ["2023-07-11T08:55:00-07:00", -104.55869750678539], ["2023-07-11T09:00:00-07:00", -104.95263899862766], ["2023-07-11T09:05:00-07:00", -105.34761364758015], ["2023-07-11T09:10:00-07:00", -105.74160473048687], ["2023-07-11T09:15:00-07:00", -106.1288103312254], ["2023-07-11T09:20:00-07:00", -106.51505215466022], ["2023-07-11T09:25:00-07:00", -106.90226416289806], ["2023-07-11T09:30:00-07:00", -107.28238074481487], ["2023-07-11T09:35:00-07:00", -107.66126121580601], ["2023-07-11T09:40:00-07:00", -108.03577895462513], ["2023-07-11T09:45:00-07:00", -108.40904848277569], ["2023-07-11T09:50:00-07:00", -108.78120754659176], ["2023-07-11T09:55:00-07:00", -109.14726565778255], ["2023-07-11T10:00:00-07:00", -109.50932835042477], ["2023-07-11T10:05:00-07:00", -109.87053592503071], ["2023-07-11T10:10:00-07:00", -110.23092345893383], ["2023-07-11T10:15:00-07:00", -110.5902084261179], ["2023-07-11T10:20:00-07:00", -110.94871543347836], ["2023-07-11T10:25:00-07:00", -111.30647598206997], ["2023-07-11T10:30:00-07:00", -111.66436202824116], ["2023-07-11T10:35:00-07:00", -112.01060925424099], ["2023-07-11T10:40:00-07:00", -112.36213217675686], ["2023-07-11T10:45:00-07:00", -112.71868489682674], ["2023-07-11T10:50:00-07:00", -113.07509879767895], ["2023-07-11T10:55:00-07:00", -113.44237650930882], ["2023-07-11T11:00:00-07:00", -113.81251262128353], ["2023-07-11T11:05:00-07:00", -114.18124584853649], ["2023-07-11T11:10:00-07:00", -114.54965950548649], ["2023-07-11T11:15:00-07:00", -114.91883064806461], ["2023-07-11T11:20:00-07:00", -115.29311503469944], ["2023-07-11T11:25:00-07:00", -115.66677440702915], ["2023-07-11T11:30:00-07:00", -116.04011057317257], ["2023-07-11T11:35:00-07:00", -116.41314359009266], ["2023-07-11T11:40:00-07:00", -116.78020645678043], ["2023-07-11T11:45:00-07:00", -117.14697425067425], ["2023-07-11T11:50:00-07:00", -117.5134307295084], ["2023-07-11T11:55:00-07:00", -117.8795886784792], ["2023-07-11T12:00:00-07:00", -118.23001007735729], ["2023-07-11T12:05:00-07:00", -118.58014722168446], ["2023-07-11T12:10:00-07:00", -118.93001870810986], ["2023-07-11T12:15:00-07:00", -119.27964393794537], ["2023-07-11T12:20:00-07:00", -119.62881933152676], ["2023-07-11T12:25:00-07:00", -119.9723446816206], ["2023-07-11T12:30:00-07:00", -120.31589476764202], ["2023-07-11T12:35:00-07:00", -120.659235522151], ["2023-07-11T12:40:00-07:00", -120.99713431298733], ["2023-07-11T12:45:00-07:00", -121.3402551561594], ["2023-07-11T12:50:00-07:00", -121.67179997265339], ["2023-07-11T12:55:00-07:00", -122.00289608538151], ["2023-07-11T13:00:00-07:00", -122.33192799985409], ["2023-07-11T13:05:00-07:00", -122.66169230639935], ["2023-07-11T13:10:00-07:00", -122.98981569707394], ["2023-07-11T13:15:00-07:00", -123.31851606070995], ["2023-07-11T13:20:00-07:00", -123.64712227880955], ["2023-07-11T13:25:00-07:00", -123.97417034208775], ["2023-07-11T13:30:00-07:00", -124.30808718502522], ["2023-07-11T13:35:00-07:00", -124.64243488013744], ["2023-07-11T13:40:00-07:00", -124.97696979343891], ["2023-07-11T13:45:00-07:00", -125.31161276996136], ["2023-07-11T13:50:00-07:00", -125.64626659452915], ["2023-07-11T13:55:00-07:00", -125.9764411598444], ["2023-07-11T14:00:00-07:00", -126.30767197906971], ["2023-07-11T14:05:00-07:00", -126.63468037545681], ["2023-07-11T14:10:00-07:00", -126.95396940410137], ["2023-07-11T14:15:00-07:00", -127.26779998838902], ["2023-07-11T14:20:00-07:00", -127.58202819526196], ["2023-07-11T14:25:00-07:00", -127.89779879152775], ["2023-07-11T14:30:00-07:00", -128.21553774178028], ["2023-07-11T14:35:00-07:00", -128.54253761470318], ["2023-07-11T14:40:00-07:00", -128.87467776238918], ["2023-07-11T14:45:00-07:00", -129.19367222487926], ["2023-07-11T14:50:00-07:00", -129.51935835182667], ["2023-07-11T14:55:00-07:00", -129.84833438694477], ["2023-07-11T15:00:00-07:00", -130.1758065968752], ["2023-07-11T15:05:00-07:00", -130.51388157904148], ["2023-07-11T15:10:00-07:00", -130.85458321869373], ["2023-07-11T15:15:00-07:00", -131.18267087638378], ["2023-07-11T15:20:00-07:00", -131.5036946684122], ["2023-07-11T15:25:00-07:00", -131.83041705191135], ["2023-07-11T15:30:00-07:00", -132.143449857831], ["2023-07-11T15:35:00-07:00", -132.45991311967373], ["2023-07-11T15:40:00-07:00", -132.77637813985348], ["2023-07-11T15:45:00-07:00", -133.09284488856792], ["2023-07-11T15:50:00-07:00", -133.40931336581707], ["2023-07-11T15:55:00-07:00", -133.73117311298847], ["2023-07-11T16:00:00-07:00", -134.05261601507664], ["2023-07-11T16:05:00-07:00", -134.37944312393665], ["2023-07-11T16:10:00-07:00", -134.69550703465939], ["2023-07-11T16:15:00-07:00", -135.006190225482], ["2023-07-11T16:20:00-07:00", -135.3168751448393], ["2023-07-11T16:25:00-07:00", -135.62217934429646], ["2023-07-11T16:30:00-07:00", -135.92210279405117], ["2023-07-11T16:35:00-07:00", -136.2112630456686], ["2023-07-11T16:40:00-07:00", -136.4950425773859], ["2023-07-11T16:45:00-07:00", -136.77344135940075], ["2023-07-11T16:50:00-07:00", -137.05184189975262], ["2023-07-11T16:55:00-07:00", -137.33024416863918], ["2023-07-11T17:00:00-07:00", -137.602892562747], ["2023-07-11T17:05:00-07:00", -137.8746723085642], ["2023-07-11T17:10:00-07:00", -138.14645378291607], ["2023-07-11T17:15:00-07:00", -138.4182370454073], ["2023-07-11T17:20:00-07:00", -138.69002206623554], ["2023-07-11T17:25:00-07:00", -138.96180887520313], ["2023-07-11T17:30:00-07:00", -139.23359744250774], ["2023-07-11T17:35:00-07:00", -139.5053877979517], ["2023-07-11T17:40:00-07:00", -139.77717991173267], ["2023-07-11T17:45:00-07:00", -140.048973813653], ["2023-07-11T17:50:00-07:00", -140.32076947391033], ["2023-07-11T17:55:00-07:00", -140.5925668925047], ["2023-07-11T18:00:00-07:00", -140.86954836547375], ["2023-07-11T18:05:00-07:00", -141.1519034653902], ["2023-07-11T18:10:00-07:00", -141.43963326513767], ["2023-07-11T18:15:00-07:00", -141.72736658155918], ["2023-07-11T18:20:00-07:00", -142.01510341465473], ["2023-07-11T18:25:00-07:00", -142.30821506679058], ["2023-07-11T18:30:00-07:00", -142.6013302654028], ["2023-07-11T18:35:00-07:00", -142.89444898068905], ["2023-07-11T18:40:00-07:00", -143.1929425150156], ["2023-07-11T18:45:00-07:00", -143.49681086838245], ["2023-07-11T18:50:00-07:00", -143.80068276822567], ["2023-07-11T18:55:00-07:00", -144.10455818474293], ["2023-07-11T19:00:00-07:00", -144.4084811359644], ["2023-07-11T19:05:00-07:00", -144.42730590328574], ["2023-07-11T19:10:00-07:00", -144.44613181985915], ["2023-07-11T19:15:00-07:00", -144.4649588856846], ["2023-07-11T19:20:00-07:00", -144.48378710076213], ["2023-07-11T19:25:00-07:00", -144.5026164650917], ["2023-07-11T19:30:00-07:00", -144.5214469768107], ["2023-07-11T19:35:00-07:00", -144.54027863778174], ["2023-07-11T19:40:00-07:00", -144.55911144800484], ["2023-07-11T19:45:00-07:00", -144.57794540748], ["2023-07-11T19:50:00-07:00", -144.59678051620722], ["2023-07-11T19:55:00-07:00", -144.61561677232385], ["2023-07-11T20:00:00-07:00", -144.63445271924138], ["2023-07-11T20:05:00-07:00", -144.65328924171627], ["2023-07-11T20:10:00-07:00", -144.67212633788586], ["2023-07-11T20:15:00-07:00", -144.6909640096128], ["2023-07-11T20:20:00-07:00", -144.70980225503445], ["2023-07-11T20:25:00-07:00", -144.7286410741508], ["2023-07-11T20:30:00-07:00", -144.7474804688245], ["2023-07-11T20:35:00-07:00", -144.76632043719292], ["2023-07-11T20:40:00-07:00", -144.78516098111868], ["2023-07-11T20:45:00-07:00", -144.80400209873915], ["2023-07-11T20:50:00-07:00", -144.82284379005432], ["2023-07-11T20:55:00-07:00", -144.84168605692685], ["2023-07-11T21:00:00-07:00", -144.86053441278636], ["2023-07-11T21:05:00-07:00", -144.8793833423406], ["2023-07-11T21:10:00-07:00", -144.89823284558952], ["2023-07-11T21:15:00-07:00", -144.9170829243958], ["2023-07-11T21:20:00-07:00", -144.9359335768968], ["2023-07-11T21:25:00-07:00", -144.95478480309248], ["2023-07-11T21:30:00-07:00", -144.97363660484552], ["2023-07-11T21:35:00-07:00", -144.99248898029327], ["2023-07-11T21:40:00-07:00", -145.01134192943573], ["2023-07-11T21:45:00-07:00", -145.03019545413554], ["2023-07-11T21:50:00-07:00", -145.04904955253005], ["2023-07-11T21:55:00-07:00", -145.06790422648191], ["2023-07-11T22:00:00-07:00", -145.0867656674236], ["2023-07-11T22:05:00-07:00", -145.1056271083653], ["2023-07-11T22:10:00-07:00", -145.124488549307], ["2023-07-11T22:15:00-07:00", -145.14334999024868], ["2023-07-11T22:20:00-07:00", -145.16221143119037], ["2023-07-11T22:25:00-07:00", -145.18107287213206], ["2023-07-11T22:30:00-07:00", -145.19993431307375], ["2023-07-11T22:35:00-07:00", -145.21879575401545], ["2023-07-11T22:40:00-07:00", -145.23765719495714], ["2023-07-11T22:45:00-07:00", -145.25651863589883], ["2023-07-11T22:50:00-07:00", -145.27538007684052], ["2023-07-11T22:55:00-07:00", -145.2942530363798], ["2023-07-11T23:00:00-07:00", -145.31363512203097], ["2023-07-11T23:05:00-07:00", -145.33301777020097], ["2023-07-11T23:10:00-07:00", -145.35240097902715], ["2023-07-11T23:15:00-07:00", -145.37178474850953], ["2023-07-11T23:20:00-07:00", -145.39116908051074], ["2023-07-11T23:25:00-07:00", -145.41055397316813], ["2023-07-11T23:30:00-07:00", -145.42993942648172], ["2023-07-11T23:35:00-07:00", -145.44932544231415], ["2023-07-11T23:40:00-07:00", -145.46871201880276], ["2023-07-11T23:45:00-07:00", -145.4880991578102], ["2023-07-11T23:50:00-07:00", -145.50748685747385], ["2023-07-11T23:55:00-07:00", -145.52687511779368], ["2023-07-12T00:00:00-07:00", -145.546398608014], ["2023-07-12T00:05:00-07:00", -145.5659220982343], ["2023-07-12T00:10:00-07:00", -145.5854455884546], ["2023-07-12T00:15:00-07:00", -145.6049690786749], ["2023-07-12T00:20:00-07:00", -145.62449256889522], ["2023-07-12T00:25:00-07:00", -145.64401605911553], ["2023-07-12T00:30:00-07:00", -145.66353954933584], ["2023-07-12T00:35:00-07:00", -145.68306303955615], ["2023-07-12T00:40:00-07:00", -145.70258652977645], ["2023-07-12T00:45:00-07:00", -145.72211001999676], ["2023-07-12T00:50:00-07:00", -145.74163351021707], ["2023-07-12T00:55:00-07:00", -145.76115700043738], ["2023-07-12T01:00:00-07:00", -145.78083172068], ["2023-07-12T01:05:00-07:00", -145.80050699412823], ["2023-07-12T01:10:00-07:00", -145.8201828226447], ["2023-07-12T01:15:00-07:00", -145.8398592043668], ["2023-07-12T01:20:00-07:00", -145.85953614115715], ["2023-07-12T01:25:00-07:00", -145.8792136311531], ["2023-07-12T01:30:00-07:00", -145.89889167621732], ["2023-07-12T01:35:00-07:00", -145.91857027448714], ["2023-07-12T01:40:00-07:00", -145.9382494278252], ["2023-07-12T01:45:00-07:00", -145.9579291343689], ["2023-07-12T01:50:00-07:00", -145.97760939598083], ["2023-07-12T01:55:00-07:00", -145.99729021079838], ["2023-07-12T02:00:00-07:00", -146.01703054644167], ["2023-07-12T02:05:00-07:00", -146.03677088208497], ["2023-07-12T02:10:00-07:00", -146.05651121772826], ["2023-07-12T02:15:00-07:00", -146.07625155337155], ["2023-07-12T02:20:00-07:00", -146.09599188901484], ["2023-07-12T02:25:00-07:00", -146.11573222465813], ["2023-07-12T02:30:00-07:00", -146.13547256030142], ["2023-07-12T02:35:00-07:00", -146.15521289594471], ["2023-07-12T02:40:00-07:00", -146.174953231588], ["2023-07-12T02:45:00-07:00", -146.1946935672313], ["2023-07-12T02:50:00-07:00", -146.2144339028746], ["2023-07-12T02:55:00-07:00", -146.23417423851788], ["2023-07-12T03:00:00-07:00", -146.25393289327621], ["2023-07-12T03:05:00-07:00", -146.27369099482894], ["2023-07-12T03:10:00-07:00", -146.2934485450387], ["2023-07-12T03:15:00-07:00", -146.3132055439055], ["2023-07-12T03:20:00-07:00", -146.33296198956668], ["2023-07-12T03:25:00-07:00", -146.3527178838849], ["2023-07-12T03:30:00-07:00", -146.37247322499752], ["2023-07-12T03:35:00-07:00", -146.39222801476717], ["2023-07-12T03:40:00-07:00", -146.4119822513312], ["2023-07-12T03:45:00-07:00", -146.4317359365523], ["2023-07-12T03:50:00-07:00", -146.45148906856775], ["2023-07-12T03:55:00-07:00", -146.47124164924026], ["2023-07-12T04:00:00-07:00", -146.49100562930107], ["2023-07-12T04:05:00-07:00", -146.5107696093619], ["2023-07-12T04:10:00-07:00", -146.5305335894227], ["2023-07-12T04:15:00-07:00", -146.55029756948352], ["2023-07-12T04:20:00-07:00", -146.57006154954433], ["2023-07-12T04:25:00-07:00", -146.58982552960515], ["2023-07-12T04:30:00-07:00", -146.60958950966597], ["2023-07-12T04:35:00-07:00", -146.62935348972678], ["2023-07-12T04:40:00-07:00", -146.6491174697876], ["2023-07-12T04:45:00-07:00", -146.6688814498484], ["2023-07-12T04:50:00-07:00", -146.68864542990923], ["2023-07-12T04:55:00-07:00", -146.70840940997005], ["2023-07-12T05:00:00-07:00", -146.7285873927176], ["2023-07-12T05:05:00-07:00", -146.74876537546515], ["2023-07-12T05:10:00-07:00", -146.7689433582127], ["2023-07-12T05:15:00-07:00", -146.78912134096026], ["2023-07-12T05:20:00-07:00", -146.80929932370782], ["2023-07-12T05:25:00-07:00", -146.82947730645537], ["2023-07-12T05:30:00-07:00", -146.84965528920293], ["2023-07-12T05:35:00-07:00", -146.86983327195048], ["2023-07-12T05:40:00-07:00", -146.89001125469804], ["2023-07-12T05:45:00-07:00", -146.9101892374456], ["2023-07-12T05:50:00-07:00", -146.93036722019315], ["2023-07-12T05:55:00-07:00", -146.9505452029407], ["2023-07-12T06:00:00-07:00", -146.97074886225164], ["2023-07-12T06:05:00-07:00", -147.35606958530843], ["2023-07-12T06:10:00-07:00", -147.74220799468458], ["2023-07-12T06:15:00-07:00", -148.12834640406072], ["2023-07-12T06:20:00-07:00", -148.51448481343687], ["2023-07-12T06:25:00-07:00", -148.900623222813], ["2023-07-12T06:30:00-07:00", -149.28676163218915], ["2023-07-12T06:35:00-07:00", -149.6729000415653], ["2023-07-12T06:40:00-07:00", -150.05903845094144], ["2023-07-12T06:45:00-07:00", -150.4451768603176], ["2023-07-12T06:50:00-07:00", -150.83131526969373], ["2023-07-12T06:55:00-07:00", -151.21745367906988], ["2023-07-12T07:00:00-07:00", -151.60399838350713], ["2023-07-12T07:05:00-07:00", -152.08591376803815], ["2023-07-12T07:10:00-07:00", -152.5460278596729], ["2023-07-12T07:15:00-07:00", -152.98425178788602], ["2023-07-12T07:20:00-07:00", -153.4230786766857], ["2023-07-12T07:25:00-07:00", -153.87845095060766], ["2023-07-12T07:30:00-07:00", -154.32958050630987], ["2023-07-12T07:35:00-07:00", -154.778101881966], ["2023-07-12T07:40:00-07:00", -155.21793275140226], ["2023-07-12T07:45:00-07:00", -155.65322949551046], ["2023-07-12T07:50:00-07:00", -156.0903560128063], ["2023-07-12T07:55:00-07:00", -156.52747314237058], ["2023-07-12T08:00:00-07:00", -156.95926030538976], ["2023-07-12T08:05:00-07:00", -157.38984104059637], ["2023-07-12T08:10:00-07:00", -157.8201071228832], ["2023-07-12T08:15:00-07:00", -158.24727844260633], ["2023-07-12T08:20:00-07:00", -158.6605006363243], ["2023-07-12T08:25:00-07:00", -159.0683326330036], ["2023-07-12T08:30:00-07:00", -159.47526453994215], ["2023-07-12T08:35:00-07:00", -159.87988086603582], ["2023-07-12T08:40:00-07:00", -160.28759758733213], ["2023-07-12T08:45:00-07:00", -160.68820791505277], ["2023-07-12T08:50:00-07:00", -161.08157151006162], ["2023-07-12T08:55:00-07:00", -161.47577055357397], ["2023-07-12T09:00:00-07:00", -161.86145173572004], ["2023-07-12T09:05:00-07:00", -162.24536310695112], ["2023-07-12T09:10:00-07:00", -162.6223400440067], ["2023-07-12T09:15:00-07:00", -162.99798904918134], ["2023-07-12T09:20:00-07:00", -163.37233429215848], ["2023-07-12T09:25:00-07:00", -163.74538206122816], ["2023-07-12T09:30:00-07:00", -164.11717902682722], ["2023-07-12T09:35:00-07:00", -164.48192303441465], ["2023-07-12T09:40:00-07:00", -164.8408152665943], ["2023-07-12T09:45:00-07:00", -165.19823371432722], ["2023-07-12T09:50:00-07:00", -165.55395328067243], ["2023-07-12T09:55:00-07:00", -165.90855013392866], ["2023-07-12T10:00:00-07:00", -166.2595683541149], ["2023-07-12T10:05:00-07:00", -166.6092927660793], ["2023-07-12T10:10:00-07:00", -166.94593914411962], ["2023-07-12T10:15:00-07:00", -167.28140734694898], ["2023-07-12T10:20:00-07:00", -167.61616029404104], ["2023-07-12T10:25:00-07:00", -167.95020630024374], ["2023-07-12T10:30:00-07:00", -168.28305666707456], ["2023-07-12T10:35:00-07:00", -168.61524485610425], ["2023-07-12T10:40:00-07:00", -168.94703688286245], ["2023-07-12T10:45:00-07:00", -169.28627907298505], ["2023-07-12T10:50:00-07:00", -169.63602419756353], ["2023-07-12T10:55:00-07:00", -169.98429532907903], ["2023-07-12T11:00:00-07:00", -170.3359509613365], ["2023-07-12T11:05:00-07:00", -170.692145338282], ["2023-07-12T11:10:00-07:00", -171.04735442064703], ["2023-07-12T11:15:00-07:00", -171.4019122030586], ["2023-07-12T11:20:00-07:00", -171.7561723496765], ["2023-07-12T11:25:00-07:00", -172.11581238172948], ["2023-07-12T11:30:00-07:00", -172.47631802223623], ["2023-07-12T11:35:00-07:00", -172.84219469688833], ["2023-07-12T11:40:00-07:00", -173.20965208671987], ["2023-07-12T11:45:00-07:00", -173.57679920457304], ["2023-07-12T11:50:00-07:00", -173.93797748349607], ["2023-07-12T11:55:00-07:00", -174.29315598867834], ["2023-07-12T12:00:00-07:00", -174.63309331797063], ["2023-07-12T12:05:00-07:00", -174.97245716117322], ["2023-07-12T12:10:00-07:00", -175.31128354929388], ["2023-07-12T12:15:00-07:00", -175.6498434152454], ["2023-07-12T12:20:00-07:00", -175.9881260599941], ["2023-07-12T12:25:00-07:00", -176.30452199839056], ["2023-07-12T12:30:00-07:00", -176.6207017209381], ["2023-07-12T12:35:00-07:00", -176.9362100865692], ["2023-07-12T12:40:00-07:00", -177.24065210483968], ["2023-07-12T12:45:00-07:00", -177.54487430118024], ["2023-07-12T12:50:00-07:00", -177.84332065843046], ["2023-07-12T12:55:00-07:00", -178.13616042397916], ["2023-07-12T13:00:00-07:00", -178.4285029079765], ["2023-07-12T13:05:00-07:00", -178.7223033811897], ["2023-07-12T13:10:00-07:00", -179.02138220332563], ["2023-07-12T13:15:00-07:00", -179.3204212989658], ["2023-07-12T13:20:00-07:00", -179.6272344198078], ["2023-07-12T13:25:00-07:00", -179.9334602560848], ["2023-07-12T13:30:00-07:00", -180.24030359648168], ["2023-07-12T13:35:00-07:00", -180.54721902869642], ["2023-07-12T13:40:00-07:00", -180.85339375399053], ["2023-07-12T13:45:00-07:00", -181.16076191328466], ["2023-07-12T13:50:00-07:00", -181.46874581836164], ["2023-07-12T13:55:00-07:00", -181.77819948457181], ["2023-07-12T14:00:00-07:00", -182.09851353429258], ["2023-07-12T14:05:00-07:00", -182.41971003077924], ["2023-07-12T14:10:00-07:00", -182.74227442406118], ["2023-07-12T14:15:00-07:00", -183.06644376181066], ["2023-07-12T14:20:00-07:00", -183.39043184183538], ["2023-07-12T14:25:00-07:00", -183.70346476696432], ["2023-07-12T14:30:00-07:00", -184.01850753091276], ["2023-07-12T14:35:00-07:00", -184.33683910034597], ["2023-07-12T14:40:00-07:00", -184.65835415385664], ["2023-07-12T14:45:00-07:00", -184.96948429010808], ["2023-07-12T14:50:00-07:00", -185.28104238770902], ["2023-07-12T14:55:00-07:00", -185.58935307525098], ["2023-07-12T15:00:00-07:00", -185.89390381239355], ["2023-07-12T15:05:00-07:00", -186.1949677374214], ["2023-07-12T15:10:00-07:00", -186.48876838944852], ["2023-07-12T15:15:00-07:00", -186.77756123803556], ["2023-07-12T15:20:00-07:00", -187.0667599644512], ["2023-07-12T15:25:00-07:00", -187.36179994605482], ["2023-07-12T15:30:00-07:00", -187.65733953379095], ["2023-07-12T15:35:00-07:00", -187.95342456363142], ["2023-07-12T15:40:00-07:00", -188.25485392473638], ["2023-07-12T15:45:00-07:00", -188.54445688985288], ["2023-07-12T15:50:00-07:00", -188.82867207191885], ["2023-07-12T15:55:00-07:00", -189.11288901232183], ["2023-07-12T16:00:00-07:00", -189.40456317923963], ["2023-07-12T16:05:00-07:00", -189.69635941646993], ["2023-07-12T16:10:00-07:00", -189.98021032474935], ["2023-07-12T16:15:00-07:00", -190.25867875479162], ["2023-07-12T16:20:00-07:00", -190.53714715503156], ["2023-07-12T16:25:00-07:00", -190.8156155552715], ["2023-07-12T16:30:00-07:00", -191.09408395551145], ["2023-07-12T16:35:00-07:00", -191.3725523557514], ["2023-07-12T16:40:00-07:00", -191.64025579951704], ["2023-07-12T16:45:00-07:00", -191.9025767352432], ["2023-07-12T16:50:00-07:00", -192.15951519273221], ["2023-07-12T16:55:00-07:00", -192.41645365022123], ["2023-07-12T17:00:00-07:00", -192.67841633222997], ["2023-07-12T17:05:00-07:00", -192.93950860761106], ["2023-07-12T17:10:00-07:00", -193.20060088299215], ["2023-07-12T17:15:00-07:00", -193.46169315837324], ["2023-07-12T17:20:00-07:00", -193.72278546355665], ["2023-07-12T17:25:00-07:00", -193.98387776874006], ["2023-07-12T17:30:00-07:00", -194.2449701037258], ["2023-07-12T17:35:00-07:00", -194.50606243871152], ["2023-07-12T17:40:00-07:00", -194.76715480349958], ["2023-07-12T17:45:00-07:00", -195.02824716828763], ["2023-07-12T17:50:00-07:00", -195.289339562878], ["2023-07-12T17:55:00-07:00", -195.55580701492727], ["2023-07-12T18:00:00-07:00", -195.82746051810682], ["2023-07-12T18:05:00-07:00", -196.09911518357694], ["2023-07-12T18:10:00-07:00", -196.37077306769788], ["2023-07-12T18:15:00-07:00", -196.64780580066144], ["2023-07-12T18:20:00-07:00", -196.92484205029905], ["2023-07-12T18:25:00-07:00", -197.2018818166107], ["2023-07-12T18:30:00-07:00", -197.48429640196264], ["2023-07-12T18:35:00-07:00", -197.76671453379095], ["2023-07-12T18:40:00-07:00", -198.05450748465955], ["2023-07-12T18:45:00-07:00", -198.3423039522022], ["2023-07-12T18:50:00-07:00", -198.63547523878515], ["2023-07-12T18:55:00-07:00", -198.92865004204214], ["2023-07-12T19:00:00-07:00", -199.22187083028257], ["2023-07-12T19:05:00-07:00", -199.2407088112086], ["2023-07-12T19:10:00-07:00", -199.25954736582935], ["2023-07-12T19:15:00-07:00", -199.2783864941448], ["2023-07-12T19:20:00-07:00", -199.2972261980176], ["2023-07-12T19:25:00-07:00", -199.3160664755851], ["2023-07-12T19:30:00-07:00", -199.33490732870996], ["2023-07-12T19:35:00-07:00", -199.35374875552952], ["2023-07-12T19:40:00-07:00", -199.3725907560438], ["2023-07-12T19:45:00-07:00", -199.3914333321154], ["2023-07-12T19:50:00-07:00", -199.41027648188174], ["2023-07-12T19:55:00-07:00", -199.42912020720541], ["2023-07-12T20:00:00-07:00", -199.44796304777265], ["2023-07-12T20:05:00-07:00", -199.46680646389723], ["2023-07-12T20:10:00-07:00", -199.48565045371652], ["2023-07-12T20:15:00-07:00", -199.50449501909316], ["2023-07-12T20:20:00-07:00", -199.5233401581645], ["2023-07-12T20:25:00-07:00", -199.54218587093055], ["2023-07-12T20:30:00-07:00", -199.56103215925395], ["2023-07-12T20:35:00-07:00", -199.57987902127206], ["2023-07-12T20:40:00-07:00", -199.59872645884752], ["2023-07-12T20:45:00-07:00", -199.6175744701177], ["2023-07-12T20:50:00-07:00", -199.6364230569452], ["2023-07-12T20:55:00-07:00", -199.65527221746743], ["2023-07-12T21:00:00-07:00", -199.674127465114], ["2023-07-12T21:05:00-07:00", -199.69298271276057], ["2023-07-12T21:10:00-07:00", -199.71183796040714], ["2023-07-12T21:15:00-07:00", -199.7306932080537], ["2023-07-12T21:20:00-07:00", -199.74954845570028], ["2023-07-12T21:25:00-07:00", -199.76840370334685], ["2023-07-12T21:30:00-07:00", -199.78725895099342], ["2023-07-12T21:35:00-07:00", -199.80611419864], ["2023-07-12T21:40:00-07:00", -199.82496944628656], ["2023-07-12T21:45:00-07:00", -199.84382469393313], ["2023-07-12T21:50:00-07:00", -199.8626799415797], ["2023-07-12T21:55:00-07:00", -199.88153518922627], ["2023-07-12T22:00:00-07:00", -199.90039663016796], ["2023-07-12T22:05:00-07:00", -199.91925807110965], ["2023-07-12T22:10:00-07:00", -199.93811951205134], ["2023-07-12T22:15:00-07:00", -199.95698095299304], ["2023-07-12T22:20:00-07:00", -199.97584239393473], ["2023-07-12T22:25:00-07:00", -199.99470383487642], ["2023-07-12T22:30:00-07:00", -200.0135652758181], ["2023-07-12T22:35:00-07:00", -200.0324267167598], ["2023-07-12T22:40:00-07:00", -200.0512881577015], ["2023-07-12T22:45:00-07:00", -200.07014959864318], ["2023-07-12T22:50:00-07:00", -200.08901103958488], ["2023-07-12T22:55:00-07:00", -200.10788399912417], ["2023-07-12T23:00:00-07:00", -200.12726608477533], ["2023-07-12T23:05:00-07:00", -200.1466481704265], ["2023-07-12T23:10:00-07:00", -200.16603025607765], ["2023-07-12T23:15:00-07:00", -200.1854123417288], ["2023-07-12T23:20:00-07:00", -200.20479442737997], ["2023-07-12T23:25:00-07:00", -200.22417651303113], ["2023-07-12T23:30:00-07:00", -200.24355859868228], ["2023-07-12T23:35:00-07:00", -200.26294068433344], ["2023-07-12T23:40:00-07:00", -200.2823227699846], ["2023-07-12T23:45:00-07:00", -200.30170485563576], ["2023-07-12T23:50:00-07:00", -200.32108694128692], ["2023-07-12T23:55:00-07:00", -200.34046902693808], ["2023-07-13T00:00:00-07:00", -200.35998582281172], ["2023-07-13T00:05:00-07:00", -200.37950317561626], ["2023-07-13T00:10:00-07:00", -200.39902108721435], ["2023-07-13T00:15:00-07:00", -200.41853955574334], ["2023-07-13T00:20:00-07:00", -200.43805858306587], ["2023-07-13T00:25:00-07:00", -200.4575781673193], ["2023-07-13T00:30:00-07:00", -200.47709831036627], ["2023-07-13T00:35:00-07:00", -200.49661901034415], ["2023-07-13T00:40:00-07:00", -200.51614026911557], ["2023-07-13T00:45:00-07:00", -200.53566208668053], ["2023-07-13T00:50:00-07:00", -200.5551844611764], ["2023-07-13T00:55:00-07:00", -200.5747073944658], ["2023-07-13T01:00:00-07:00", -200.59438211470842], ["2023-07-13T01:05:00-07:00", -200.61405683495104], ["2023-07-13T01:10:00-07:00", -200.63373155519366], ["2023-07-13T01:15:00-07:00", -200.65340627543628], ["2023-07-13T01:20:00-07:00", -200.6730809956789], ["2023-07-13T01:25:00-07:00", -200.69275571592152], ["2023-07-13T01:30:00-07:00", -200.71243043616414], ["2023-07-13T01:35:00-07:00", -200.73210515640676], ["2023-07-13T01:40:00-07:00", -200.75177987664938], ["2023-07-13T01:45:00-07:00", -200.771454596892], ["2023-07-13T01:50:00-07:00", -200.79112931713462], ["2023-07-13T01:55:00-07:00", -200.81080403737724], ["2023-07-13T02:00:00-07:00", -200.83053774014115], ["2023-07-13T02:05:00-07:00", -200.85027144290507], ["2023-07-13T02:10:00-07:00", -200.87000514566898], ["2023-07-13T02:15:00-07:00", -200.8897388484329], ["2023-07-13T02:20:00-07:00", -200.9094725511968], ["2023-07-13T02:25:00-07:00", -200.92920625396073], ["2023-07-13T02:30:00-07:00", -200.94893995672464], ["2023-07-13T02:35:00-07:00", -200.96867365948856], ["2023-07-13T02:40:00-07:00", -200.98840736225247], ["2023-07-13T02:45:00-07:00", -201.0081410650164], ["2023-07-13T02:50:00-07:00", -201.0278747677803], ["2023-07-13T02:55:00-07:00", -201.04760847054422], ["2023-07-13T03:00:00-07:00", -201.0673604980111], ["2023-07-13T03:05:00-07:00", -201.087112525478], ["2023-07-13T03:10:00-07:00", -201.1068645529449], ["2023-07-13T03:15:00-07:00", -201.1266165804118], ["2023-07-13T03:20:00-07:00", -201.14636860787868], ["2023-07-13T03:25:00-07:00", -201.16612063534558], ["2023-07-13T03:30:00-07:00", -201.18587266281247], ["2023-07-13T03:35:00-07:00", -201.20562469027936], ["2023-07-13T03:40:00-07:00", -201.22537671774626], ["2023-07-13T03:45:00-07:00", -201.24512874521315], ["2023-07-13T03:50:00-07:00", -201.26488077268004], ["2023-07-13T03:55:00-07:00", -201.28463280014694], ["2023-07-13T04:00:00-07:00", -201.30439678020775], ["2023-07-13T04:05:00-07:00", -201.32416131161153], ["2023-07-13T04:10:00-07:00", -201.34392639435828], ["2023-07-13T04:15:00-07:00", -201.36369203031063], ["2023-07-13T04:20:00-07:00", -201.38345821760595], ["2023-07-13T04:25:00-07:00", -201.40322495624423], ["2023-07-13T04:30:00-07:00", -201.42299224622548], ["2023-07-13T04:35:00-07:00", -201.44276008941233], ["2023-07-13T04:40:00-07:00", -201.46252848394215], ["2023-07-13T04:45:00-07:00", -201.48229742981493], ["2023-07-13T04:50:00-07:00", -201.50206692889333], ["2023-07-13T04:55:00-07:00", -201.52183697931468], ["2023-07-13T05:00:00-07:00", -201.54202146083117], ["2023-07-13T05:05:00-07:00", -201.56220594234765], ["2023-07-13T05:10:00-07:00", -201.58239042386413], ["2023-07-13T05:15:00-07:00", -201.6025749053806], ["2023-07-13T05:20:00-07:00", -201.6227593868971], ["2023-07-13T05:25:00-07:00", -201.64294386841357], ["2023-07-13T05:30:00-07:00", -201.66312834993005], ["2023-07-13T05:35:00-07:00", -201.68331283144653], ["2023-07-13T05:40:00-07:00", -201.703497312963], ["2023-07-13T05:45:00-07:00", -201.7236817944795], ["2023-07-13T05:50:00-07:00", -201.74386627599597], ["2023-07-13T05:55:00-07:00", -201.76405075751245], ["2023-07-13T06:00:00-07:00", -201.78426090814173], ["2023-07-13T06:05:00-07:00", -202.16195459105074], ["2023-07-13T06:10:00-07:00", -202.54809839464724], ["2023-07-13T06:15:00-07:00", -202.93424166180193], ["2023-07-13T06:20:00-07:00", -203.32038439251482], ["2023-07-13T06:25:00-07:00", -203.7065265867859], ["2023-07-13T06:30:00-07:00", -204.09266821481287], ["2023-07-13T06:35:00-07:00", -204.47880930639803], ["2023-07-13T06:40:00-07:00", -204.8649498615414], ["2023-07-13T06:45:00-07:00", -205.25108988024294], ["2023-07-13T06:50:00-07:00", -205.6372293625027], ["2023-07-13T06:55:00-07:00", -206.02336830832064], ["2023-07-13T07:00:00-07:00", -206.50172380544245], ["2023-07-13T07:05:00-07:00", -207.00591150857508], ["2023-07-13T07:10:00-07:00", -207.51022795774043], ["2023-07-13T07:15:00-07:00", -208.00958261825144], ["2023-07-13T07:20:00-07:00", -208.48438552953303], ["2023-07-13T07:25:00-07:00", -208.95060897804797], ["2023-07-13T07:30:00-07:00", -209.40740085579455], ["2023-07-13T07:35:00-07:00", -209.86707581020892], ["2023-07-13T07:40:00-07:00", -210.32689691521227], ["2023-07-13T07:45:00-07:00", -210.7867267522961], ["2023-07-13T07:50:00-07:00", -211.23804489709437], ["2023-07-13T07:55:00-07:00", -211.68755258060992], ["2023-07-13T08:00:00-07:00", -212.13609633781016], ["2023-07-13T08:05:00-07:00", -212.5804545674473], ["2023-07-13T08:10:00-07:00", -213.01258791424334], ["2023-07-13T08:15:00-07:00", -213.44194341637194], ["2023-07-13T08:20:00-07:00", -213.8572690282017], ["2023-07-13T08:25:00-07:00", -214.277299920097], ["2023-07-13T08:30:00-07:00", -214.6954342816025], ["2023-07-13T08:35:00-07:00", -215.0987676475197], ["2023-07-13T08:40:00-07:00", -215.50018812157214], ["2023-07-13T08:45:00-07:00", -215.90022439695895], ["2023-07-13T08:50:00-07:00", -216.28708408214152], ["2023-07-13T08:55:00-07:00", -216.6724743936211], ["2023-07-13T09:00:00-07:00", -217.05406583286822], ["2023-07-13T09:05:00-07:00", -217.43468485213816], ["2023-07-13T09:10:00-07:00", -217.80862090922892], ["2023-07-13T09:15:00-07:00", -218.1831955704838], ["2023-07-13T09:20:00-07:00", -218.55643011070788], ["2023-07-13T09:25:00-07:00", -218.92878139950335], ["2023-07-13T09:30:00-07:00", -219.300272712484], ["2023-07-13T09:35:00-07:00", -219.6655286345631], ["2023-07-13T09:40:00-07:00", -220.02424944378436], ["2023-07-13T09:45:00-07:00", -220.3821736369282], ["2023-07-13T09:50:00-07:00", -220.7393287215382], ["2023-07-13T09:55:00-07:00", -221.09550441242754], ["2023-07-13T10:00:00-07:00", -221.4427733514458], ["2023-07-13T10:05:00-07:00", -221.78498707152903], ["2023-07-13T10:10:00-07:00", -222.12680358625948], ["2023-07-13T10:15:00-07:00", -222.4684468600899], ["2023-07-13T10:20:00-07:00", -222.80944071151316], ["2023-07-13T10:25:00-07:00", -223.14925132133067], ["2023-07-13T10:30:00-07:00", -223.48826197721064], ["2023-07-13T10:35:00-07:00", -223.82693652249873], ["2023-07-13T10:40:00-07:00", -224.16588125564158], ["2023-07-13T10:45:00-07:00", -224.52202219702303], ["2023-07-13T10:50:00-07:00", -224.88264037109911], ["2023-07-13T10:55:00-07:00", -225.242579260841], ["2023-07-13T11:00:00-07:00", -225.6006347630173], ["2023-07-13T11:05:00-07:00", -225.9638208542019], ["2023-07-13T11:10:00-07:00", -226.3264098558575], ["2023-07-13T11:15:00-07:00", -226.6884758863598], ["2023-07-13T11:20:00-07:00", -227.05032799579203], ["2023-07-13T11:25:00-07:00", -227.4175829384476], ["2023-07-13T11:30:00-07:00", -227.78398911096156], ["2023-07-13T11:35:00-07:00", -228.1500980053097], ["2023-07-13T11:40:00-07:00", -228.51594097353518], ["2023-07-13T11:45:00-07:00", -228.87585503794253], ["2023-07-13T11:50:00-07:00", -229.23548437096179], ["2023-07-13T11:55:00-07:00", -229.59488297440112], ["2023-07-13T12:00:00-07:00", -229.9388058874756], ["2023-07-13T12:05:00-07:00", -230.28232778050005], ["2023-07-13T12:10:00-07:00", -230.62562445737422], ["2023-07-13T12:15:00-07:00", -230.96846194006503], ["2023-07-13T12:20:00-07:00", -231.30566872097552], ["2023-07-13T12:25:00-07:00", -231.62127015925944], ["2023-07-13T12:30:00-07:00", -231.92584703303874], ["2023-07-13T12:35:00-07:00", -232.22991714812815], ["2023-07-13T12:40:00-07:00", -232.53379450179636], ["2023-07-13T12:45:00-07:00", -232.8320589158684], ["2023-07-13T12:50:00-07:00", -233.12472430802882], ["2023-07-13T12:55:00-07:00", -233.4174614045769], ["2023-07-13T13:00:00-07:00", -233.71483741141856], ["2023-07-13T13:05:00-07:00", -234.01049406267703], ["2023-07-13T13:10:00-07:00", -234.30658859945834], ["2023-07-13T13:15:00-07:00", -234.60743159987032], ["2023-07-13T13:20:00-07:00", -234.90838099457324], ["2023-07-13T13:25:00-07:00", -235.2100478503853], ["2023-07-13T13:30:00-07:00", -235.51159323193133], ["2023-07-13T13:35:00-07:00", -235.81365416385233], ["2023-07-13T13:40:00-07:00", -236.11604715324938], ["2023-07-13T13:45:00-07:00", -236.4195515010506], ["2023-07-13T13:50:00-07:00", -236.7246439550072], ["2023-07-13T13:55:00-07:00", -237.03645379282534], ["2023-07-13T14:00:00-07:00", -237.35430196858943], ["2023-07-13T14:05:00-07:00", -237.6721619758755], ["2023-07-13T14:10:00-07:00", -237.98818076588213], ["2023-07-13T14:15:00-07:00", -238.30541772581637], ["2023-07-13T14:20:00-07:00", -238.62579772807658], ["2023-07-13T14:25:00-07:00", -238.95420784689486], ["2023-07-13T14:30:00-07:00", -239.28664107061923], ["2023-07-13T14:35:00-07:00", -239.6251978073269], ["2023-07-13T14:40:00-07:00", -239.96006883122027], ["2023-07-13T14:45:00-07:00", -240.2725466284901], ["2023-07-13T14:50:00-07:00", -240.59128178097308], ["2023-07-13T14:55:00-07:00", -240.90450028516352], ["2023-07-13T15:00:00-07:00", -241.22307152487338], ["2023-07-13T15:05:00-07:00", -241.54210067726672], ["2023-07-13T15:10:00-07:00", -241.85022441484034], ["2023-07-13T15:15:00-07:00", -242.1588333044201], ["2023-07-13T15:20:00-07:00", -242.47808952070773], ["2023-07-13T15:25:00-07:00", -242.80253137089312], ["2023-07-13T15:30:00-07:00", -243.13141621090472], ["2023-07-13T15:35:00-07:00", -243.4600518438965], ["2023-07-13T15:40:00-07:00", -243.78842193819582], ["2023-07-13T15:45:00-07:00", -244.1165487859398], ["2023-07-13T15:50:00-07:00", -244.44637108780444], ["2023-07-13T15:55:00-07:00", -244.7651540134102], ["2023-07-13T16:00:00-07:00", -245.085652211681], ["2023-07-13T16:05:00-07:00", -245.40872831083834], ["2023-07-13T16:10:00-07:00", -245.7287801001221], ["2023-07-13T16:15:00-07:00", -246.04309315420687], ["2023-07-13T16:20:00-07:00", -246.35701666213572], ["2023-07-13T16:25:00-07:00", -246.66518304683268], ["2023-07-13T16:30:00-07:00", -246.972904631868], ["2023-07-13T16:35:00-07:00", -247.28020665980875], ["2023-07-13T16:40:00-07:00", -247.58161578513682], ["2023-07-13T16:45:00-07:00", -247.8828283343464], ["2023-07-13T16:50:00-07:00", -248.1912543270737], ["2023-07-13T16:55:00-07:00", -248.49912301637232], ["2023-07-13T17:00:00-07:00", -248.81725917197764], ["2023-07-13T17:05:00-07:00", -249.13381437398493], ["2023-07-13T17:10:00-07:00", -249.45809460617602], ["2023-07-13T17:15:00-07:00", -249.7847118768841], ["2023-07-13T17:20:00-07:00", -250.11355237104], ["2023-07-13T17:25:00-07:00", -250.44463212229311], ["2023-07-13T17:30:00-07:00", -250.8001911137253], ["2023-07-13T17:35:00-07:00", -251.1587784383446], ["2023-07-13T17:40:00-07:00", -251.56788767315447], ["2023-07-13T17:45:00-07:00", -251.98104758001864], ["2023-07-13T17:50:00-07:00", -252.39825592376292], ["2023-07-13T17:55:00-07:00", -252.81947041489184], ["2023-07-13T18:00:00-07:00", -253.24439350701869], ["2023-07-13T18:05:00-07:00", -253.67844144441187], ["2023-07-13T18:10:00-07:00", -254.12159780599177], ["2023-07-13T18:15:00-07:00", -254.57529489137232], ["2023-07-13T18:20:00-07:00", -255.0319574866444], ["2023-07-13T18:25:00-07:00", -255.49697048403323], ["2023-07-13T18:30:00-07:00", -255.97026995755732], ["2023-07-13T18:35:00-07:00", -256.44621733762324], ["2023-07-13T18:40:00-07:00", -256.9247965309769], ["2023-07-13T18:45:00-07:00", -257.4112258050591], ["2023-07-13T18:50:00-07:00", -257.9001172874123], ["2023-07-13T18:55:00-07:00", -258.3914529774338], ["2023-07-13T19:00:00-07:00", -258.6846104655415], ["2023-07-13T19:05:00-07:00", -258.7034283410758], ["2023-07-13T19:10:00-07:00", -258.7222473639995], ["2023-07-13T19:15:00-07:00", -258.74106753617525], ["2023-07-13T19:20:00-07:00", -258.7598888576031], ["2023-07-13T19:25:00-07:00", -258.77871132828295], ["2023-07-13T19:30:00-07:00", -258.7975349482149], ["2023-07-13T19:35:00-07:00", -258.81635971553624], ["2023-07-13T19:40:00-07:00", -258.83518563210964], ["2023-07-13T19:45:00-07:00", -258.8540126979351], ["2023-07-13T19:50:00-07:00", -258.8728409130126], ["2023-07-13T19:55:00-07:00", -258.8916702773422], ["2023-07-13T20:00:00-07:00", -258.91049933061004], ["2023-07-13T20:05:00-07:00", -258.9293289594352], ["2023-07-13T20:10:00-07:00", -258.9481591619551], ["2023-07-13T20:15:00-07:00", -258.9669899381697], ["2023-07-13T20:20:00-07:00", -258.98582128994167], ["2023-07-13T20:25:00-07:00", -259.0046532154083], ["2023-07-13T20:30:00-07:00", -259.02348571643233], ["2023-07-13T20:35:00-07:00", -259.04231879115105], ["2023-07-13T20:40:00-07:00", -259.0611524414271], ["2023-07-13T20:45:00-07:00", -259.0799866653979], ["2023-07-13T20:50:00-07:00", -259.09882146306336], ["2023-07-13T20:55:00-07:00", -259.1176568362862], ["2023-07-13T21:00:00-07:00", -259.13649830035865], ["2023-07-13T21:05:00-07:00", -259.1553403381258], ["2023-07-13T21:10:00-07:00", -259.1741829495877], ["2023-07-13T21:15:00-07:00", -259.19302613660693], ["2023-07-13T21:20:00-07:00", -259.21186989732087], ["2023-07-13T21:25:00-07:00", -259.2307142317295], ["2023-07-13T21:30:00-07:00", -259.2495591416955], ["2023-07-13T21:35:00-07:00", -259.2684046253562], ["2023-07-13T21:40:00-07:00", -259.2872506827116], ["2023-07-13T21:45:00-07:00", -259.30609731562436], ["2023-07-13T21:50:00-07:00", -259.3249445222318], ["2023-07-13T21:55:00-07:00", -259.343792302534], ["2023-07-13T22:00:00-07:00", -259.36264685355127], ["2023-07-13T22:05:00-07:00", -259.38150140456855], ["2023-07-13T22:10:00-07:00", -259.40035595558584], ["2023-07-13T22:15:00-07:00", -259.4192105066031], ["2023-07-13T22:20:00-07:00", -259.4380650576204], ["2023-07-13T22:25:00-07:00", -259.4569196086377], ["2023-07-13T22:30:00-07:00", -259.475774159655], ["2023-07-13T22:35:00-07:00", -259.49462871067226], ["2023-07-13T22:40:00-07:00", -259.51348326168954], ["2023-07-13T22:45:00-07:00", -259.5323378127068], ["2023-07-13T22:50:00-07:00", -259.5511923637241], ["2023-07-13T22:55:00-07:00", -259.570058433339], ["2023-07-13T23:00:00-07:00", -259.5894337836653], ["2023-07-13T23:05:00-07:00", -259.6088091339916], ["2023-07-13T23:10:00-07:00", -259.6281844843179], ["2023-07-13T23:15:00-07:00", -259.6475598346442], ["2023-07-13T23:20:00-07:00", -259.6669351849705], ["2023-07-13T23:25:00-07:00", -259.6863105352968], ["2023-07-13T23:30:00-07:00", -259.7056858856231], ["2023-07-13T23:35:00-07:00", -259.7250612359494], ["2023-07-13T23:40:00-07:00", -259.7444365862757], ["2023-07-13T23:45:00-07:00", -259.763811936602], ["2023-07-13T23:50:00-07:00", -259.7831872869283], ["2023-07-13T23:55:00-07:00", -259.8025626372546], ["2023-07-14T00:00:00-07:00", -259.8220727369189], ["2023-07-14T00:05:00-07:00", -259.8415833953768], ["2023-07-14T00:10:00-07:00", -259.8610946107656], ["2023-07-14T00:15:00-07:00", -259.8806063849479], ["2023-07-14T00:20:00-07:00", -259.9001187160611], ["2023-07-14T00:25:00-07:00", -259.9196316059679], ["2023-07-14T00:30:00-07:00", -259.93914505280554], ["2023-07-14T00:35:00-07:00", -259.95865905843675], ["2023-07-14T00:40:00-07:00", -259.97817362099886], ["2023-07-14T00:45:00-07:00", -259.9976887423545], ["2023-07-14T00:50:00-07:00", -260.0172044225037], ["2023-07-14T00:55:00-07:00", -260.0367206595838], ["2023-07-14T01:00:00-07:00", -260.05638873018324], ["2023-07-14T01:05:00-07:00", -260.0760573539883], ["2023-07-14T01:10:00-07:00", -260.0957265328616], ["2023-07-14T01:15:00-07:00", -260.1153962649405], ["2023-07-14T01:20:00-07:00", -260.13506655208766], ["2023-07-14T01:25:00-07:00", -260.15473739244044], ["2023-07-14T01:30:00-07:00", -260.17440878786147], ["2023-07-14T01:35:00-07:00", -260.1940807364881], ["2023-07-14T01:40:00-07:00", -260.213753240183], ["2023-07-14T01:45:00-07:00", -260.2334262970835], ["2023-07-14T01:50:00-07:00", -260.25309990905225], ["2023-07-14T01:55:00-07:00", -260.2727740742266], ["2023-07-14T02:00:00-07:00", -260.29250777699053], ["2023-07-14T02:05:00-07:00", -260.31224147975445], ["2023-07-14T02:10:00-07:00", -260.33197518251836], ["2023-07-14T02:15:00-07:00", -260.3517088852823], ["2023-07-14T02:20:00-07:00", -260.3714425880462], ["2023-07-14T02:25:00-07:00", -260.3911762908101], ["2023-07-14T02:30:00-07:00", -260.410909993574], ["2023-07-14T02:35:00-07:00", -260.43064369633794], ["2023-07-14T02:40:00-07:00", -260.45037739910185], ["2023-07-14T02:45:00-07:00", -260.47011110186577], ["2023-07-14T02:50:00-07:00", -260.4898448046297], ["2023-07-14T02:55:00-07:00", -260.5095785073936], ["2023-07-14T03:00:00-07:00", -260.5293305348605], ["2023-07-14T03:05:00-07:00", -260.5490825623274], ["2023-07-14T03:10:00-07:00", -260.5688345897943], ["2023-07-14T03:15:00-07:00", -260.58858661726117], ["2023-07-14T03:20:00-07:00", -260.60833864472806], ["2023-07-14T03:25:00-07:00", -260.62809067219496], ["2023-07-14T03:30:00-07:00", -260.64784269966185], ["2023-07-14T03:35:00-07:00", -260.66759472712874], ["2023-07-14T03:40:00-07:00", -260.68734675459564], ["2023-07-14T03:45:00-07:00", -260.70709878206253], ["2023-07-14T03:50:00-07:00", -260.7268508095294], ["2023-07-14T03:55:00-07:00", -260.7466028369963], ["2023-07-14T04:00:00-07:00", -260.76636681705713], ["2023-07-14T04:05:00-07:00", -260.78613079711795], ["2023-07-14T04:10:00-07:00", -260.80589477717876], ["2023-07-14T04:15:00-07:00", -260.8256587572396], ["2023-07-14T04:20:00-07:00", -260.8454227373004], ["2023-07-14T04:25:00-07:00", -260.8651867173612], ["2023-07-14T04:30:00-07:00", -260.884950697422], ["2023-07-14T04:35:00-07:00", -260.90471467748284], ["2023-07-14T04:40:00-07:00", -260.92447865754366], ["2023-07-14T04:45:00-07:00", -260.9442426376045], ["2023-07-14T04:50:00-07:00", -260.9640066176653], ["2023-07-14T04:55:00-07:00", -260.9837705977261], ["2023-07-14T05:00:00-07:00", -261.00394858047366], ["2023-07-14T05:05:00-07:00", -261.02412710525095], ["2023-07-14T05:10:00-07:00", -261.044306172058], ["2023-07-14T05:15:00-07:00", -261.0644857790321], ["2023-07-14T05:20:00-07:00", -261.084665928036], ["2023-07-14T05:25:00-07:00", -261.1048466190696], ["2023-07-14T05:30:00-07:00", -261.12502785027027], ["2023-07-14T05:35:00-07:00", -261.1452096235007], ["2023-07-14T05:40:00-07:00", -261.1653919387609], ["2023-07-14T05:45:00-07:00", -261.18557479418814], ["2023-07-14T05:50:00-07:00", -261.20575819164515], ["2023-07-14T05:55:00-07:00", -261.2259421311319], ["2023-07-14T06:00:00-07:00", -261.24615228176117], ["2023-07-14T06:05:00-07:00", -261.60656929016113], ["2023-07-14T06:10:00-07:00", -261.9927025735378], ["2023-07-14T06:15:00-07:00", -262.3784447610378], ["2023-07-14T06:20:00-07:00", -262.7594669163227], ["2023-07-14T06:25:00-07:00", -263.1456091105938], ["2023-07-14T06:30:00-07:00", -263.53175073862076], ["2023-07-14T06:35:00-07:00", -263.9175974428654], ["2023-07-14T06:40:00-07:00", -264.303049236536], ["2023-07-14T06:45:00-07:00", -264.68645387887955], ["2023-07-14T06:50:00-07:00", -265.0694697499275], ["2023-07-14T06:55:00-07:00", -265.45209684967995], ["2023-07-14T07:00:00-07:00", -265.9190616309643], ["2023-07-14T07:05:00-07:00", -266.3808365762234], ["2023-07-14T07:10:00-07:00", -266.8469267487526], ["2023-07-14T07:15:00-07:00", -267.3010649383068], ["2023-07-14T07:20:00-07:00", -267.7540296316147], ["2023-07-14T07:25:00-07:00", -268.1988907456398], ["2023-07-14T07:30:00-07:00", -268.637227922678], ["2023-07-14T07:35:00-07:00", -269.0805035531521], ["2023-07-14T07:40:00-07:00", -269.51708298921585], ["2023-07-14T07:45:00-07:00", -269.94938763976097], ["2023-07-14T07:50:00-07:00", -270.37906044721603], ["2023-07-14T07:55:00-07:00", -270.8055009543896], ["2023-07-14T08:00:00-07:00", -271.22945407032967], ["2023-07-14T08:05:00-07:00", -271.6405495107174], ["2023-07-14T08:10:00-07:00", -272.0468748509884], ["2023-07-14T08:15:00-07:00", -272.44747361540794], ["2023-07-14T08:20:00-07:00", -272.8400864303112], ["2023-07-14T08:25:00-07:00", -273.2335323393345], ["2023-07-14T08:30:00-07:00", -273.6187393665314], ["2023-07-14T08:35:00-07:00", -273.9955935180187], ["2023-07-14T08:40:00-07:00", -274.3649058043957], ["2023-07-14T08:45:00-07:00", -274.73349046707153], ["2023-07-14T08:50:00-07:00", -275.10111078619957], ["2023-07-14T08:55:00-07:00", -275.4630856215954], ["2023-07-14T09:00:00-07:00", -275.82115507125854], ["2023-07-14T09:05:00-07:00", -276.1777559220791], ["2023-07-14T09:10:00-07:00", -276.5328233540058], ["2023-07-14T09:15:00-07:00", -276.8861123621464], ["2023-07-14T09:20:00-07:00", -277.2259118258953], ["2023-07-14T09:25:00-07:00", -277.5643186569214], ["2023-07-14T09:30:00-07:00", -277.90469989180565], ["2023-07-14T09:35:00-07:00", -278.24345633387566], ["2023-07-14T09:40:00-07:00", -278.5814103484154], ["2023-07-14T09:45:00-07:00", -278.9175306558609], ["2023-07-14T09:50:00-07:00", -279.25186800956726], ["2023-07-14T09:55:00-07:00", -279.5790890157223], ["2023-07-14T10:00:00-07:00", -279.90295749902725], ["2023-07-14T10:05:00-07:00", -280.2258572280407], ["2023-07-14T10:10:00-07:00", -280.54777559638023], ["2023-07-14T10:15:00-07:00", -280.8687423169613], ["2023-07-14T10:20:00-07:00", -281.18904212117195], ["2023-07-14T10:25:00-07:00", -281.50866428017616], ["2023-07-14T10:30:00-07:00", -281.8276215195656], ["2023-07-14T10:35:00-07:00", -282.14617869257927], ["2023-07-14T10:40:00-07:00", -282.47012999653816], ["2023-07-14T10:45:00-07:00", -282.79888635873795], ["2023-07-14T10:50:00-07:00", -283.1267076432705], ["2023-07-14T10:55:00-07:00", -283.45387476682663], ["2023-07-14T11:00:00-07:00", -283.77306240797043], ["2023-07-14T11:05:00-07:00", -284.09676879644394], ["2023-07-14T11:10:00-07:00", -284.41989758610725], ["2023-07-14T11:15:00-07:00", -284.74842193722725], ["2023-07-14T11:20:00-07:00", -285.07043889164925], ["2023-07-14T11:25:00-07:00", -285.391916513443], ["2023-07-14T11:30:00-07:00", -285.7077321112156], ["2023-07-14T11:35:00-07:00", -286.02925366163254], ["2023-07-14T11:40:00-07:00", -286.35029911994934], ["2023-07-14T11:45:00-07:00", -286.6707150042057], ["2023-07-14T11:50:00-07:00", -286.99091655015945], ["2023-07-14T11:55:00-07:00", -287.29957005381584], ["2023-07-14T12:00:00-07:00", -287.5948764681816], ["2023-07-14T12:05:00-07:00", -287.88456735014915], ["2023-07-14T12:10:00-07:00", -288.17405983805656], ["2023-07-14T12:15:00-07:00", -288.46312069892883], ["2023-07-14T12:20:00-07:00", -288.7411822080612], ["2023-07-14T12:25:00-07:00", -289.01960039138794], ["2023-07-14T12:30:00-07:00", -289.3087100982666], ["2023-07-14T12:35:00-07:00", -289.592366874218], ["2023-07-14T12:40:00-07:00", -289.88676819205284], ["2023-07-14T12:45:00-07:00", -290.18080431222916], ["2023-07-14T12:50:00-07:00", -290.47412034869194], ["2023-07-14T12:55:00-07:00", -290.7619237601757], ["2023-07-14T13:00:00-07:00", -291.04395881295204], ["2023-07-14T13:05:00-07:00", -291.32942110300064], ["2023-07-14T13:10:00-07:00", -291.6124427318573], ["2023-07-14T13:15:00-07:00", -291.8956062197685], ["2023-07-14T13:20:00-07:00", -292.17978888750076], ["2023-07-14T13:25:00-07:00", -292.4665673673153], ["2023-07-14T13:30:00-07:00", -292.7543449103832], ["2023-07-14T13:35:00-07:00", -293.04322135448456], ["2023-07-14T13:40:00-07:00", -293.3375465273857], ["2023-07-14T13:45:00-07:00", -293.620651692152], ["2023-07-14T13:50:00-07:00", -293.90413531661034], ["2023-07-14T13:55:00-07:00", -294.18803745508194], ["2023-07-14T14:00:00-07:00", -294.47193044424057], ["2023-07-14T14:05:00-07:00", -294.7555501759052], ["2023-07-14T14:10:00-07:00", -295.03794607520103], ["2023-07-14T14:15:00-07:00", -295.32050558924675], ["2023-07-14T14:20:00-07:00", -295.59686267375946], ["2023-07-14T14:25:00-07:00", -295.8706403374672], ["2023-07-14T14:30:00-07:00", -296.1444162428379], ["2023-07-14T14:35:00-07:00", -296.42358842492104], ["2023-07-14T14:40:00-07:00", -296.69196274876595], ["2023-07-14T14:45:00-07:00", -296.96033531427383], ["2023-07-14T14:50:00-07:00", -297.2287061214447], ["2023-07-14T14:55:00-07:00", -297.5024732351303], ["2023-07-14T15:00:00-07:00", -297.77581042051315], ["2023-07-14T15:05:00-07:00", -298.0491464436054], ["2023-07-14T15:10:00-07:00", -298.32248228788376], ["2023-07-14T15:15:00-07:00", -298.5958181321621], ["2023-07-14T15:20:00-07:00", -298.86915397644043], ["2023-07-14T15:25:00-07:00", -299.14248979091644], ["2023-07-14T15:30:00-07:00", -299.40504655241966], ["2023-07-14T15:35:00-07:00", -299.66760328412056], ["2023-07-14T15:40:00-07:00", -299.93016001582146], ["2023-07-14T15:45:00-07:00", -300.19271674752235], ["2023-07-14T15:50:00-07:00", -300.4498839378357], ["2023-07-14T15:55:00-07:00", -300.7016615867615], ["2023-07-14T16:00:00-07:00", -300.94772993028164], ["2023-07-14T16:05:00-07:00", -301.19379884004593], ["2023-07-14T16:10:00-07:00", -301.43986934423447], ["2023-07-14T16:15:00-07:00", -301.69132405519485], ["2023-07-14T16:20:00-07:00", -301.9481630027294], ["2023-07-14T16:25:00-07:00", -302.1942387521267], ["2023-07-14T16:30:00-07:00", -302.44031624495983], ["2023-07-14T16:35:00-07:00", -302.68101301789284], ["2023-07-14T16:40:00-07:00", -302.9217115342617], ["2023-07-14T16:45:00-07:00", -303.16241179406643], ["2023-07-14T16:50:00-07:00", -303.40849627554417], ["2023-07-14T16:55:00-07:00", -303.6545825153589], ["2023-07-14T17:00:00-07:00", -303.8949593603611], ["2023-07-14T17:05:00-07:00", -304.13446755707264], ["2023-07-14T17:10:00-07:00", -304.3739775121212], ["2023-07-14T17:15:00-07:00", -304.61348924040794], ["2023-07-14T17:20:00-07:00", -304.8583777844906], ["2023-07-14T17:25:00-07:00", -305.1032681018114], ["2023-07-14T17:30:00-07:00", -305.3535352498293], ["2023-07-14T17:35:00-07:00", -305.6038041561842], ["2023-07-14T17:40:00-07:00", -305.859449878335], ["2023-07-14T17:45:00-07:00", -306.1150973588228], ["2023-07-14T17:50:00-07:00", -306.37074662745], ["2023-07-14T17:55:00-07:00", -306.6263976544142], ["2023-07-14T18:00:00-07:00", -306.88187266886234], ["2023-07-14T18:05:00-07:00", -307.13734944164753], ["2023-07-14T18:10:00-07:00", -307.398199275136], ["2023-07-14T18:15:00-07:00", -307.6590508669615], ["2023-07-14T18:20:00-07:00", -307.92527554929256], ["2023-07-14T18:25:00-07:00", -308.19150198996067], ["2023-07-14T18:30:00-07:00", -308.4577301889658], ["2023-07-14T18:35:00-07:00", -308.72396017611027], ["2023-07-14T18:40:00-07:00", -308.995563223958], ["2023-07-14T18:45:00-07:00", -309.2671680301428], ["2023-07-14T18:50:00-07:00", -309.54414589703083], ["2023-07-14T18:55:00-07:00", -309.8211255520582], ["2023-07-14T19:00:00-07:00", -310.09814707934856], ["2023-07-14T19:05:00-07:00", -310.1169574856758], ["2023-07-14T19:10:00-07:00", -310.1357684675604], ["2023-07-14T19:15:00-07:00", -310.1545800231397], ["2023-07-14T19:20:00-07:00", -310.17339215427637], ["2023-07-14T19:25:00-07:00", -310.19220485910773], ["2023-07-14T19:30:00-07:00", -310.2110181376338], ["2023-07-14T19:35:00-07:00", -310.2298319917172], ["2023-07-14T19:40:00-07:00", -310.24864641949534], ["2023-07-14T19:45:00-07:00", -310.2674614228308], ["2023-07-14T19:50:00-07:00", -310.286276999861], ["2023-07-14T19:55:00-07:00", -310.3050931505859], ["2023-07-14T20:00:00-07:00", -310.32390841655433], ["2023-07-14T20:05:00-07:00", -310.34272483177483], ["2023-07-14T20:10:00-07:00", -310.3615423962474], ["2023-07-14T20:15:00-07:00", -310.380361109972], ["2023-07-14T20:20:00-07:00", -310.399180971086], ["2023-07-14T20:25:00-07:00", -310.4180019814521], ["2023-07-14T20:30:00-07:00", -310.43682414107025], ["2023-07-14T20:35:00-07:00", -310.45564744994044], ["2023-07-14T20:40:00-07:00", -310.4744719080627], ["2023-07-14T20:45:00-07:00", -310.493297515437], ["2023-07-14T20:50:00-07:00", -310.5121242720634], ["2023-07-14T20:55:00-07:00", -310.53095217607915], ["2023-07-14T21:00:00-07:00", -310.5497867465019], ["2023-07-14T21:05:00-07:00", -310.56862189248204], ["2023-07-14T21:10:00-07:00", -310.58745761215687], ["2023-07-14T21:15:00-07:00", -310.6062939055264], ["2023-07-14T21:20:00-07:00", -310.6251307744533], ["2023-07-14T21:25:00-07:00", -310.64396821707487], ["2023-07-14T21:30:00-07:00", -310.66280623339117], ["2023-07-14T21:35:00-07:00", -310.6816448252648], ["2023-07-14T21:40:00-07:00", -310.70048399083316], ["2023-07-14T21:45:00-07:00", -310.7193237300962], ["2023-07-14T21:50:00-07:00", -310.73816404491663], ["2023-07-14T21:55:00-07:00", -310.75700493343174], ["2023-07-14T22:00:00-07:00", -310.7758525945246], ["2023-07-14T22:05:00-07:00", -310.7947008293122], ["2023-07-14T22:10:00-07:00", -310.8135496377945], ["2023-07-14T22:15:00-07:00", -310.83239902183414], ["2023-07-14T22:20:00-07:00", -310.8512489795685], ["2023-07-14T22:25:00-07:00", -310.87009951099753], ["2023-07-14T22:30:00-07:00", -310.88895061798394], ["2023-07-14T22:35:00-07:00", -310.90780229866505], ["2023-07-14T22:40:00-07:00", -310.92665455304086], ["2023-07-14T22:45:00-07:00", -310.9455073811114], ["2023-07-14T22:50:00-07:00", -310.96436078473926], ["2023-07-14T22:55:00-07:00", -310.98322628065944], ["2023-07-14T23:00:00-07:00", -311.00214048475027], ["2023-07-14T23:05:00-07:00", -311.02105526067317], ["2023-07-14T23:10:00-07:00", -311.03997061029077], ["2023-07-14T23:15:00-07:00", -311.0588865336031], ["2023-07-14T23:20:00-07:00", -311.07780302874744], ["2023-07-14T23:25:00-07:00", -311.0967200975865], ["2023-07-14T23:30:00-07:00", -311.11563773825765], ["2023-07-14T23:35:00-07:00", -311.1345559526235], ["2023-07-14T23:40:00-07:00", -311.15347474068403], ["2023-07-14T23:45:00-07:00", -311.17239410057664], ["2023-07-14T23:50:00-07:00", -311.19131403416395], ["2023-07-14T23:55:00-07:00", -311.2102345395833], ["2023-07-15T00:00:00-07:00", -311.2292903289199], ["2023-07-15T00:05:00-07:00", -311.24834611825645], ["2023-07-15T00:10:00-07:00", -311.267401907593], ["2023-07-15T00:15:00-07:00", -311.2864576969296], ["2023-07-15T00:20:00-07:00", -311.30551348626614], ["2023-07-15T00:25:00-07:00", -311.3245692756027], ["2023-07-15T00:30:00-07:00", -311.34362506493926], ["2023-07-15T00:35:00-07:00", -311.3626808542758], ["2023-07-15T00:40:00-07:00", -311.3817366436124], ["2023-07-15T00:45:00-07:00", -311.40079243294895], ["2023-07-15T00:50:00-07:00", -311.4198482222855], ["2023-07-15T00:55:00-07:00", -311.43890401162207], ["2023-07-15T01:00:00-07:00", -311.4581110756844], ["2023-07-15T01:05:00-07:00", -311.4773181397468], ["2023-07-15T01:10:00-07:00", -311.49652520380914], ["2023-07-15T01:15:00-07:00", -311.5157322678715], ["2023-07-15T01:20:00-07:00", -311.53493933193386], ["2023-07-15T01:25:00-07:00", -311.5541463959962], ["2023-07-15T01:30:00-07:00", -311.57335346005857], ["2023-07-15T01:35:00-07:00", -311.5925605241209], ["2023-07-15T01:40:00-07:00", -311.6117675881833], ["2023-07-15T01:45:00-07:00", -311.63097465224564], ["2023-07-15T01:50:00-07:00", -311.650181716308], ["2023-07-15T01:55:00-07:00", -311.66938878037035], ["2023-07-15T02:00:00-07:00", -311.68865484558046], ["2023-07-15T02:05:00-07:00", -311.70792091079056], ["2023-07-15T02:10:00-07:00", -311.72718697600067], ["2023-07-15T02:15:00-07:00", -311.74645304121077], ["2023-07-15T02:20:00-07:00", -311.7657191064209], ["2023-07-15T02:25:00-07:00", -311.784985171631], ["2023-07-15T02:30:00-07:00", -311.8042512368411], ["2023-07-15T02:35:00-07:00", -311.8235173020512], ["2023-07-15T02:40:00-07:00", -311.8427833672613], ["2023-07-15T02:45:00-07:00", -311.8620494324714], ["2023-07-15T02:50:00-07:00", -311.8813154976815], ["2023-07-15T02:55:00-07:00", -311.9005815628916], ["2023-07-15T03:00:00-07:00", -311.9198659583926], ["2023-07-15T03:05:00-07:00", -311.9391509182751], ["2023-07-15T03:10:00-07:00", -311.95843644067645], ["2023-07-15T03:15:00-07:00", -311.97772252745926], ["2023-07-15T03:20:00-07:00", -311.99700917862356], ["2023-07-15T03:25:00-07:00", -312.0162963923067], ["2023-07-15T03:30:00-07:00", -312.0355841703713], ["2023-07-15T03:35:00-07:00", -312.0548725128174], ["2023-07-15T03:40:00-07:00", -312.0741614177823], ["2023-07-15T03:45:00-07:00", -312.0934508871287], ["2023-07-15T03:50:00-07:00", -312.1127409208566], ["2023-07-15T03:55:00-07:00", -312.13203151896596], ["2023-07-15T04:00:00-07:00", -312.15133463032544], ["2023-07-15T04:05:00-07:00", -312.1706377416849], ["2023-07-15T04:10:00-07:00", -312.1899408530444], ["2023-07-15T04:15:00-07:00", -312.20924396440387], ["2023-07-15T04:20:00-07:00", -312.22854707576334], ["2023-07-15T04:25:00-07:00", -312.2478501871228], ["2023-07-15T04:30:00-07:00", -312.2671532984823], ["2023-07-15T04:35:00-07:00", -312.2864564098418], ["2023-07-15T04:40:00-07:00", -312.30575952120125], ["2023-07-15T04:45:00-07:00", -312.32506263256073], ["2023-07-15T04:50:00-07:00", -312.3443657439202], ["2023-07-15T04:55:00-07:00", -312.3636688552797], ["2023-07-15T05:00:00-07:00", -312.3829966261983], ["2023-07-15T05:05:00-07:00", -312.4023243971169], ["2023-07-15T05:10:00-07:00", -312.4216521680355], ["2023-07-15T05:15:00-07:00", -312.4409799389541], ["2023-07-15T05:20:00-07:00", -312.4603077098727], ["2023-07-15T05:25:00-07:00", -312.47963548079133], ["2023-07-15T05:30:00-07:00", -312.49896325170994], ["2023-07-15T05:35:00-07:00", -312.51829102262855], ["2023-07-15T05:40:00-07:00", -312.53761879354715], ["2023-07-15T05:45:00-07:00", -312.55694656446576], ["2023-07-15T05:50:00-07:00", -312.57627433538437], ["2023-07-15T05:55:00-07:00", -312.595602106303], ["2023-07-15T06:00:00-07:00", -312.61495555378497], ["2023-07-15T06:05:00-07:00", -312.63430900126696], ["2023-07-15T06:10:00-07:00", -312.6567215677351], ["2023-07-15T06:15:00-07:00", -312.67913461104035], ["2023-07-15T06:20:00-07:00", -312.7015481311828], ["2023-07-15T06:25:00-07:00", -312.72396211884916], ["2023-07-15T06:30:00-07:00", -312.74637657403946], ["2023-07-15T06:35:00-07:00", -312.76879152469337], ["2023-07-15T06:40:00-07:00", -312.79120695218444], ["2023-07-15T06:45:00-07:00", -312.813622828573], ["2023-07-15T06:50:00-07:00", -312.83603917248547], ["2023-07-15T06:55:00-07:00", -312.85845600254834], ["2023-07-15T07:00:00-07:00", -312.88089708052576], ["2023-07-15T07:05:00-07:00", -312.903338579461], ["2023-07-15T07:10:00-07:00", -312.92578051798046], ["2023-07-15T07:15:00-07:00", -312.9482229333371], ["2023-07-15T07:20:00-07:00", -312.97060946561396], ["2023-07-15T07:25:00-07:00", -312.99299646541476], ["2023-07-15T07:30:00-07:00", -313.01538395136595], ["2023-07-15T07:35:00-07:00", -313.0377718396485], ["2023-07-15T07:40:00-07:00", -313.0601601395756], ["2023-07-15T07:45:00-07:00", -313.08254887908697], ["2023-07-15T07:50:00-07:00", -313.10493804886937], ["2023-07-15T07:55:00-07:00", -313.1273276600987], ["2023-07-15T08:00:00-07:00", -313.1497382055968], ["2023-07-15T08:05:00-07:00", -313.1720889545977], ["2023-07-15T08:10:00-07:00", -313.1943712681532], ["2023-07-15T08:15:00-07:00", -313.21658500656486], ["2023-07-15T08:20:00-07:00", -313.2387301977724], ["2023-07-15T08:25:00-07:00", -313.2608068604022], ["2023-07-15T08:30:00-07:00", -313.28281493857503], ["2023-07-15T08:35:00-07:00", -313.304754441604], ["2023-07-15T08:40:00-07:00", -313.32662535086274], ["2023-07-15T08:45:00-07:00", -313.3484276663512], ["2023-07-15T08:50:00-07:00", -313.37016137875617], ["2023-07-15T08:55:00-07:00", -313.39182648807764], ["2023-07-15T09:00:00-07:00", -313.41333494335413], ["2023-07-15T09:05:00-07:00", -313.4347151312977], ["2023-07-15T09:10:00-07:00", -313.45595830120146], ["2023-07-15T09:15:00-07:00", -313.47706443443894], ["2023-07-15T09:20:00-07:00", -313.4980335030705], ["2023-07-15T09:25:00-07:00", -313.5188654512167], ["2023-07-15T09:30:00-07:00", -313.53956032544374], ["2023-07-15T09:35:00-07:00", -313.56011808663607], ["2023-07-15T09:40:00-07:00", -313.5805387366563], ["2023-07-15T09:45:00-07:00", -313.6008223500103], ["2023-07-15T09:50:00-07:00", -313.62096888944507], ["2023-07-15T09:55:00-07:00", -313.6409783177078], ["2023-07-15T10:00:00-07:00", -313.6606952380389], ["2023-07-15T10:05:00-07:00", -313.68027618154883], ["2023-07-15T10:10:00-07:00", -313.6997211370617], ["2023-07-15T10:15:00-07:00", -313.71909339539707], ["2023-07-15T10:20:00-07:00", -313.7384645193815], ["2023-07-15T10:25:00-07:00", -313.7578345090151], ["2023-07-15T10:30:00-07:00", -313.77720336429775], ["2023-07-15T10:35:00-07:00", -313.7965710852295], ["2023-07-15T10:40:00-07:00", -313.8159376718104], ["2023-07-15T10:45:00-07:00", -313.83530312404037], ["2023-07-15T10:50:00-07:00", -313.85466744191945], ["2023-07-15T10:55:00-07:00", -313.87403062544763], ["2023-07-15T11:00:00-07:00", -313.89328587614], ["2023-07-15T11:05:00-07:00", -313.91254055686295], ["2023-07-15T11:10:00-07:00", -313.9317946676165], ["2023-07-15T11:15:00-07:00", -313.9510482084006], ["2023-07-15T11:20:00-07:00", -313.9703011792153], ["2023-07-15T11:25:00-07:00", -313.9895535800606], ["2023-07-15T11:30:00-07:00", -314.0088054109365], ["2023-07-15T11:35:00-07:00", -314.02805667184293], ["2023-07-15T11:40:00-07:00", -314.04730736278], ["2023-07-15T11:45:00-07:00", -314.0665574837476], ["2023-07-15T11:50:00-07:00", -314.0858070347458], ["2023-07-15T11:55:00-07:00", -314.1050560157746], ["2023-07-15T12:00:00-07:00", -314.12426973320544], ["2023-07-15T12:05:00-07:00", -314.1434823088348], ["2023-07-15T12:10:00-07:00", -314.16269374266267], ["2023-07-15T12:15:00-07:00", -314.18190403468907], ["2023-07-15T12:20:00-07:00", -314.201113184914], ["2023-07-15T12:25:00-07:00", -314.22032119333744], ["2023-07-15T12:30:00-07:00", -314.2395280599594], ["2023-07-15T12:35:00-07:00", -314.2587337847799], ["2023-07-15T12:40:00-07:00", -314.27793836966157], ["2023-07-15T12:45:00-07:00", -314.29714181274176], ["2023-07-15T12:50:00-07:00", -314.31634411402047], ["2023-07-15T12:55:00-07:00", -314.3355452734977], ["2023-07-15T13:00:00-07:00", -314.35472235642374], ["2023-07-15T13:05:00-07:00", -314.37389829568565], ["2023-07-15T13:10:00-07:00", -314.3930730931461], ["2023-07-15T13:15:00-07:00", -314.4122467469424], ["2023-07-15T13:20:00-07:00", -314.43141925893724], ["2023-07-15T13:25:00-07:00", -314.45059062726796], ["2023-07-15T13:30:00-07:00", -314.4697608537972], ["2023-07-15T13:35:00-07:00", -314.4889299366623], ["2023-07-15T13:40:00-07:00", -314.50809787772596], ["2023-07-15T13:45:00-07:00", -314.5272646751255], ["2023-07-15T13:50:00-07:00", -314.5464303307235], ["2023-07-15T13:55:00-07:00", -314.56559484265745], ["2023-07-15T14:00:00-07:00", -314.5847257003188], ["2023-07-15T14:05:00-07:00", -314.6038554124534], ["2023-07-15T14:10:00-07:00", -314.6229839809239], ["2023-07-15T14:15:00-07:00", -314.64211140573025], ["2023-07-15T14:20:00-07:00", -314.66123768500984], ["2023-07-15T14:25:00-07:00", -314.6803628206253], ["2023-07-15T14:30:00-07:00", -314.6995553281158], ["2023-07-15T14:35:00-07:00", -314.71888028644025], ["2023-07-15T14:40:00-07:00", -314.73833773098886], ["2023-07-15T14:45:00-07:00", -314.7579275239259], ["2023-07-15T14:50:00-07:00", -314.77764977514744], ["2023-07-15T14:55:00-07:00", -314.79750451259315], ["2023-07-15T15:00:00-07:00", -314.81746109202504], ["2023-07-15T15:05:00-07:00", -314.83743456192315], ["2023-07-15T15:10:00-07:00", -314.85740803182125], ["2023-07-15T15:15:00-07:00", -314.87738131918013], ["2023-07-15T15:20:00-07:00", -314.89735441468656], ["2023-07-15T15:25:00-07:00", -314.91732726432383], ["2023-07-15T15:30:00-07:00", -314.937299894169], ["2023-07-15T15:35:00-07:00", -314.9572722595185], ["2023-07-15T15:40:00-07:00", -314.97724442370236], ["2023-07-15T15:45:00-07:00", -314.9972163774073], ["2023-07-15T15:50:00-07:00", -315.01718811132014], ["2023-07-15T15:55:00-07:00", -315.0371596533805], ["2023-07-15T16:00:00-07:00", -315.05710556171834], ["2023-07-15T16:05:00-07:00", -315.07705128006637], ["2023-07-15T16:10:00-07:00", -315.09699676930904], ["2023-07-15T16:15:00-07:00", -315.1169420219958], ["2023-07-15T16:20:00-07:00", -315.1368870642036], ["2023-07-15T16:25:00-07:00", -315.1568318605423], ["2023-07-15T16:30:00-07:00", -315.17677648179233], ["2023-07-15T16:35:00-07:00", -315.19672087579966], ["2023-07-15T16:40:00-07:00", -315.21666508726776], ["2023-07-15T16:45:00-07:00", -315.2366090975702], ["2023-07-15T16:50:00-07:00", -315.25655294395983], ["2023-07-15T16:55:00-07:00", -315.27649656124413], ["2023-07-15T17:00:00-07:00", -315.2964133359492], ["2023-07-15T17:05:00-07:00", -315.3160197548568], ["2023-07-15T17:10:00-07:00", -315.33555993437767], ["2023-07-15T17:15:00-07:00", -315.3550339564681], ["2023-07-15T17:20:00-07:00", -315.37444172240794], ["2023-07-15T17:25:00-07:00", -315.39378327690065], ["2023-07-15T17:30:00-07:00", -315.41305858269334], ["2023-07-15T17:35:00-07:00", -315.432267613709], ["2023-07-15T17:40:00-07:00", -315.45141041465104], ["2023-07-15T17:45:00-07:00", -315.47048695757985], ["2023-07-15T17:50:00-07:00", -315.48949725180864], ["2023-07-15T17:55:00-07:00", -315.50844135321677], ["2023-07-15T18:00:00-07:00", -315.5273061860353], ["2023-07-15T18:05:00-07:00", -315.54610478132963], ["2023-07-15T18:10:00-07:00", -315.56488548778], ["2023-07-15T18:15:00-07:00", -315.583666767925], ["2023-07-15T18:20:00-07:00", -315.6024486236274], ["2023-07-15T18:25:00-07:00", -315.62123105302453], ["2023-07-15T18:30:00-07:00", -315.64001405611634], ["2023-07-15T18:35:00-07:00", -315.6587976347655], ["2023-07-15T18:40:00-07:00", -315.6775817871094], ["2023-07-15T18:45:00-07:00", -315.6963665150106], ["2023-07-15T18:50:00-07:00", -315.7151518166065], ["2023-07-15T18:55:00-07:00", -315.7339376937598], ["2023-07-15T19:00:00-07:00", -315.75272684544325], ["2023-07-15T19:05:00-07:00", -315.77151657268405], ["2023-07-15T19:10:00-07:00", -315.79030687361956], ["2023-07-15T19:15:00-07:00", -315.8090977501124], ["2023-07-15T19:20:00-07:00", -315.8278892003], ["2023-07-15T19:25:00-07:00", -315.8466812260449], ["2023-07-15T19:30:00-07:00", -315.8654738254845], ["2023-07-15T19:35:00-07:00", -315.88426699861884], ["2023-07-15T19:40:00-07:00", -315.9030607473105], ["2023-07-15T19:45:00-07:00", -315.9218550696969], ["2023-07-15T19:50:00-07:00", -315.94064996764064], ["2023-07-15T19:55:00-07:00", -315.9594454392791], ["2023-07-15T20:00:00-07:00", -315.97824002429843], ["2023-07-15T20:05:00-07:00", -315.99703575856984], ["2023-07-15T20:10:00-07:00", -316.0158326420933], ["2023-07-15T20:15:00-07:00", -316.0346306730062], ["2023-07-15T20:20:00-07:00", -316.0534298531711], ["2023-07-15T20:25:00-07:00", -316.0722301825881], ["2023-07-15T20:30:00-07:00", -316.09103166125715], ["2023-07-15T20:35:00-07:00", -316.10983428917825], ["2023-07-15T20:40:00-07:00", -316.1286380663514], ["2023-07-15T20:45:00-07:00", -316.147442990914], ["2023-07-15T20:50:00-07:00", -316.1662490647286], ["2023-07-15T20:55:00-07:00", -316.1850562877953], ["2023-07-15T21:00:00-07:00", -316.2038701828569], ["2023-07-15T21:05:00-07:00", -316.2226852271706], ["2023-07-15T21:10:00-07:00", -316.24150141887367], ["2023-07-15T21:15:00-07:00", -316.2603187598288], ["2023-07-15T21:20:00-07:00", -316.279137250036], ["2023-07-15T21:25:00-07:00", -316.2979568876326], ["2023-07-15T21:30:00-07:00", -316.3167776744813], ["2023-07-15T21:35:00-07:00", -316.335599610582], ["2023-07-15T21:40:00-07:00", -316.3544226940721], ["2023-07-15T21:45:00-07:00", -316.3732469268143], ["2023-07-15T21:50:00-07:00", -316.39207230880857], ["2023-07-15T21:55:00-07:00", -316.41089884005487], ["2023-07-15T22:00:00-07:00", -316.42973272129893], ["2023-07-15T22:05:00-07:00", -316.4485677499324], ["2023-07-15T22:10:00-07:00", -316.46740392781794], ["2023-07-15T22:15:00-07:00", -316.4862412530929], ["2023-07-15T22:20:00-07:00", -316.5050797276199], ["2023-07-15T22:25:00-07:00", -316.5239193495363], ["2023-07-15T22:30:00-07:00", -316.54276012070477], ["2023-07-15T22:35:00-07:00", -316.56160203926265], ["2023-07-15T22:40:00-07:00", -316.5804451070726], ["2023-07-15T22:45:00-07:00", -316.59928932227194], ["2023-07-15T22:50:00-07:00", -316.61813468672335], ["2023-07-15T22:55:00-07:00", -316.6369927190244], ["2023-07-15T23:00:00-07:00", -316.65590004622936], ["2023-07-15T23:05:00-07:00", -316.6748073734343], ["2023-07-15T23:10:00-07:00", -316.69371470063925], ["2023-07-15T23:15:00-07:00", -316.7126220278442], ["2023-07-15T23:20:00-07:00", -316.73152935504913], ["2023-07-15T23:25:00-07:00", -316.7504366822541], ["2023-07-15T23:30:00-07:00", -316.769344009459], ["2023-07-15T23:35:00-07:00", -316.78825133666396], ["2023-07-15T23:40:00-07:00", -316.8071586638689], ["2023-07-15T23:45:00-07:00", -316.82606599107385], ["2023-07-15T23:50:00-07:00", -316.8449733182788], ["2023-07-15T23:55:00-07:00", -316.86388064548373], ["2023-07-16T00:00:00-07:00", -316.88292276486754], ["2023-07-16T00:05:00-07:00", -316.9019654523581], ["2023-07-16T00:10:00-07:00", -316.9210087098181], ["2023-07-16T00:15:00-07:00", -316.94005253724754], ["2023-07-16T00:20:00-07:00", -316.95909693464637], ["2023-07-16T00:25:00-07:00", -316.9781419020146], ["2023-07-16T00:30:00-07:00", -316.99718743748963], ["2023-07-16T00:35:00-07:00", -317.01623354293406], ["2023-07-16T00:40:00-07:00", -317.0352802183479], ["2023-07-16T00:45:00-07:00", -317.05432746373117], ["2023-07-16T00:50:00-07:00", -317.0733752772212], ["2023-07-16T00:55:00-07:00", -317.09242366068065], ["2023-07-16T01:00:00-07:00", -317.11162393540144], ["2023-07-16T01:05:00-07:00", -317.1308242101222], ["2023-07-16T01:10:00-07:00", -317.150024484843], ["2023-07-16T01:15:00-07:00", -317.1692247595638], ["2023-07-16T01:20:00-07:00", -317.1884250342846], ["2023-07-16T01:25:00-07:00", -317.2076253090054], ["2023-07-16T01:30:00-07:00", -317.22682558372617], ["2023-07-16T01:35:00-07:00", -317.24602585844696], ["2023-07-16T01:40:00-07:00", -317.26522613316774], ["2023-07-16T01:45:00-07:00", -317.28442640788853], ["2023-07-16T01:50:00-07:00", -317.3036266826093], ["2023-07-16T01:55:00-07:00", -317.3228269573301], ["2023-07-16T02:00:00-07:00", -317.34208624996245], ["2023-07-16T02:05:00-07:00", -317.3613455425948], ["2023-07-16T02:10:00-07:00", -317.38060483522713], ["2023-07-16T02:15:00-07:00", -317.3998641278595], ["2023-07-16T02:20:00-07:00", -317.4191234204918], ["2023-07-16T02:25:00-07:00", -317.43838271312416], ["2023-07-16T02:30:00-07:00", -317.4576420057565], ["2023-07-16T02:35:00-07:00", -317.47690129838884], ["2023-07-16T02:40:00-07:00", -317.4961605910212], ["2023-07-16T02:45:00-07:00", -317.5154198836535], ["2023-07-16T02:50:00-07:00", -317.53467917628586], ["2023-07-16T02:55:00-07:00", -317.5539384689182], ["2023-07-16T03:00:00-07:00", -317.57321609929204], ["2023-07-16T03:05:00-07:00", -317.5924937296659], ["2023-07-16T03:10:00-07:00", -317.6117713600397], ["2023-07-16T03:15:00-07:00", -317.63104899041355], ["2023-07-16T03:20:00-07:00", -317.6503266207874], ["2023-07-16T03:25:00-07:00", -317.6696042511612], ["2023-07-16T03:30:00-07:00", -317.68888188153505], ["2023-07-16T03:35:00-07:00", -317.7081595119089], ["2023-07-16T03:40:00-07:00", -317.7274371422827], ["2023-07-16T03:45:00-07:00", -317.74671477265656], ["2023-07-16T03:50:00-07:00", -317.7659924030304], ["2023-07-16T03:55:00-07:00", -317.78527003340423], ["2023-07-16T04:00:00-07:00", -317.8045596219599], ["2023-07-16T04:05:00-07:00", -317.8238492105156], ["2023-07-16T04:10:00-07:00", -317.8431387990713], ["2023-07-16T04:15:00-07:00", -317.862428387627], ["2023-07-16T04:20:00-07:00", -317.8817179761827], ["2023-07-16T04:25:00-07:00", -317.9010075647384], ["2023-07-16T04:30:00-07:00", -317.9202971532941], ["2023-07-16T04:35:00-07:00", -317.9395867418498], ["2023-07-16T04:40:00-07:00", -317.9588763304055], ["2023-07-16T04:45:00-07:00", -317.97816591896117], ["2023-07-16T04:50:00-07:00", -317.99745550751686], ["2023-07-16T04:55:00-07:00", -318.01674509607255], ["2023-07-16T05:00:00-07:00", -318.0360593572259], ["2023-07-16T05:05:00-07:00", -318.05537418089807], ["2023-07-16T05:10:00-07:00", -318.0746895670891], ["2023-07-16T05:15:00-07:00", -318.0940055157989], ["2023-07-16T05:20:00-07:00", -318.11332202889025], ["2023-07-16T05:25:00-07:00", -318.1326391045004], ["2023-07-16T05:30:00-07:00", -318.1519567426294], ["2023-07-16T05:35:00-07:00", -318.17127494327724], ["2023-07-16T05:40:00-07:00", -318.1905937064439], ["2023-07-16T05:45:00-07:00", -318.20991303399205], ["2023-07-16T05:50:00-07:00", -318.22923292405903], ["2023-07-16T05:55:00-07:00", -318.24855337664485], ["2023-07-16T06:00:00-07:00", -318.2679000776261], ["2023-07-16T06:05:00-07:00", -318.2872456535697], ["2023-07-16T06:10:00-07:00", -318.3065901044756], ["2023-07-16T06:15:00-07:00", -318.3259334322065], ["2023-07-16T06:20:00-07:00", -318.34527563489974], ["2023-07-16T06:25:00-07:00", -318.3646167125553], ["2023-07-16T06:30:00-07:00", -318.3839566651732], ["2023-07-16T06:35:00-07:00", -318.40329549461603], ["2023-07-16T06:40:00-07:00", -318.4226331990212], ["2023-07-16T06:45:00-07:00", -318.44196977838874], ["2023-07-16T06:50:00-07:00", -318.46130523458123], ["2023-07-16T06:55:00-07:00", -318.48063956573606], ["2023-07-16T07:00:00-07:00", -318.4999938458204], ["2023-07-16T07:05:00-07:00", -318.5193475652486], ["2023-07-16T07:10:00-07:00", -318.53870072215796], ["2023-07-16T07:15:00-07:00", -318.55805331654847], ["2023-07-16T07:20:00-07:00", -318.5774053502828], ["2023-07-16T07:25:00-07:00", -318.5967568214983], ["2023-07-16T07:30:00-07:00", -318.61610773205757], ["2023-07-16T07:35:00-07:00", -318.63545808009803], ["2023-07-16T07:40:00-07:00", -318.6548078674823], ["2023-07-16T07:45:00-07:00", -318.67415709234774], ["2023-07-16T07:50:00-07:00", -318.69350575469434], ["2023-07-16T07:55:00-07:00", -318.71285385638475], ["2023-07-16T08:00:00-07:00", -318.73221942037344], ["2023-07-16T08:05:00-07:00", -318.75158442370594], ["2023-07-16T08:10:00-07:00", -318.7709488645196], ["2023-07-16T08:15:00-07:00", -318.79031274467707], ["2023-07-16T08:20:00-07:00", -318.80967606417835], ["2023-07-16T08:25:00-07:00", -318.8290388211608], ["2023-07-16T08:30:00-07:00", -318.84840101748705], ["2023-07-16T08:35:00-07:00", -318.8677626531571], ["2023-07-16T08:40:00-07:00", -318.88712372630835], ["2023-07-16T08:45:00-07:00", -318.9064842388034], ["2023-07-16T08:50:00-07:00", -318.92584419064224], ["2023-07-16T08:55:00-07:00", -318.94520357996225], ["2023-07-16T09:00:00-07:00", -318.9644817635417], ["2023-07-16T09:05:00-07:00", -318.98375938273966], ["2023-07-16T09:10:00-07:00", -319.0030364394188], ["2023-07-16T09:15:00-07:00", -319.02231293171644], ["2023-07-16T09:20:00-07:00", -319.04158886149526], ["2023-07-16T09:25:00-07:00", -319.06086422875524], ["2023-07-16T09:30:00-07:00", -319.08013903163373], ["2023-07-16T09:35:00-07:00", -319.0994132719934], ["2023-07-16T09:40:00-07:00", -319.1186869479716], ["2023-07-16T09:45:00-07:00", -319.13796006143093], ["2023-07-16T09:50:00-07:00", -319.15723261237144], ["2023-07-16T09:55:00-07:00", -319.1765045989305], ["2023-07-16T10:00:00-07:00", -319.19562162831426], ["2023-07-16T10:05:00-07:00", -319.2147380914539], ["2023-07-16T10:10:00-07:00", -319.2338539864868], ["2023-07-16T10:15:00-07:00", -319.25296931527555], ["2023-07-16T10:20:00-07:00", -319.27208407595754], ["2023-07-16T10:25:00-07:00", -319.2911982703954], ["2023-07-16T10:30:00-07:00", -319.3103118967265], ["2023-07-16T10:35:00-07:00", -319.32942495681345], ["2023-07-16T10:40:00-07:00", -319.34853744879365], ["2023-07-16T10:45:00-07:00", -319.3676493745297], ["2023-07-16T10:50:00-07:00", -319.386760732159], ["2023-07-16T10:55:00-07:00", -319.4058715235442], ["2023-07-16T11:00:00-07:00", -319.4248737413436], ["2023-07-16T11:05:00-07:00", -319.4438742492348], ["2023-07-16T11:10:00-07:00", -319.4628730490804], ["2023-07-16T11:15:00-07:00", -319.4818701390177], ["2023-07-16T11:20:00-07:00", -319.5008655190468], ["2023-07-16T11:25:00-07:00", -319.5198591891676], ["2023-07-16T11:30:00-07:00", -319.5388511493802], ["2023-07-16T11:35:00-07:00", -319.55784139968455], ["2023-07-16T11:40:00-07:00", -319.57682994008064], ["2023-07-16T11:45:00-07:00", -319.5958167705685], ["2023-07-16T11:50:00-07:00", -319.61480189301074], ["2023-07-16T11:55:00-07:00", -319.63378530554473], ["2023-07-16T12:00:00-07:00", -319.65273189917207], ["2023-07-16T12:05:00-07:00", -319.6716773509979], ["2023-07-16T12:10:00-07:00", -319.6906216610223], ["2023-07-16T12:15:00-07:00", -319.70956483110785], ["2023-07-16T12:20:00-07:00", -319.7285068593919], ["2023-07-16T12:25:00-07:00", -319.7474477458745], ["2023-07-16T12:30:00-07:00", -319.76641975156963], ["2023-07-16T12:35:00-07:00", -319.7855248041451], ["2023-07-16T12:40:00-07:00", -319.80476292967796], ["2023-07-16T12:45:00-07:00", -319.82413413748145], ["2023-07-16T12:50:00-07:00", -319.8436383921653], ["2023-07-16T12:55:00-07:00", -319.86327571980655], ["2023-07-16T13:00:00-07:00", -319.88302187621593], ["2023-07-16T13:05:00-07:00", -319.90284305997193], ["2023-07-16T13:10:00-07:00", -319.922730807215], ["2023-07-16T13:15:00-07:00", -319.9426850453019], ["2023-07-16T13:20:00-07:00", -319.9627057183534], ["2023-07-16T13:25:00-07:00", -319.98279284499586], ["2023-07-16T13:30:00-07:00", -320.0029464047402], ["2023-07-16T13:35:00-07:00", -320.02316639199853], ["2023-07-16T13:40:00-07:00", -320.04345279559493], ["2023-07-16T13:45:00-07:00", -320.0638056695461], ["2023-07-16T13:50:00-07:00", -320.0842249970883], ["2023-07-16T13:55:00-07:00", -320.10471080616117], ["2023-07-16T14:00:00-07:00", -320.1252272631973], ["2023-07-16T14:05:00-07:00", -320.145694533363], ["2023-07-16T14:10:00-07:00", -320.16609567031264], ["2023-07-16T14:15:00-07:00", -320.1864304896444], ["2023-07-16T14:20:00-07:00", -320.2066989932209], ["2023-07-16T14:25:00-07:00", -320.22690116241574], ["2023-07-16T14:30:00-07:00", -320.2470369786024], ["2023-07-16T14:35:00-07:00", -320.2671063952148], ["2023-07-16T14:40:00-07:00", -320.2871094774455], ["2023-07-16T14:45:00-07:00", -320.3070461973548], ["2023-07-16T14:50:00-07:00", -320.32691656425595], ["2023-07-16T14:55:00-07:00", -320.3467205595225], ["2023-07-16T15:00:00-07:00", -320.36642739735544], ["2023-07-16T15:05:00-07:00", -320.3860102966428], ["2023-07-16T15:10:00-07:00", -320.4054607767612], ["2023-07-16T15:15:00-07:00", -320.4247788172215], ["2023-07-16T15:20:00-07:00", -320.44396441057324], ["2023-07-16T15:25:00-07:00", -320.46301752887666], ["2023-07-16T15:30:00-07:00", -320.4819381348789], ["2023-07-16T15:35:00-07:00", -320.500793479383], ["2023-07-16T15:40:00-07:00", -320.5196499694139], ["2023-07-16T15:45:00-07:00", -320.5385076068342], ["2023-07-16T15:50:00-07:00", -320.55736638978124], ["2023-07-16T15:55:00-07:00", -320.57622631825507], ["2023-07-16T16:00:00-07:00", -320.59506295621395], ["2023-07-16T16:05:00-07:00", -320.61389959417284], ["2023-07-16T16:10:00-07:00", -320.6327362321317], ["2023-07-16T16:15:00-07:00", -320.6515728700906], ["2023-07-16T16:20:00-07:00", -320.6704095080495], ["2023-07-16T16:25:00-07:00", -320.6892461460084], ["2023-07-16T16:30:00-07:00", -320.70808278396726], ["2023-07-16T16:35:00-07:00", -320.72691942192614], ["2023-07-16T16:40:00-07:00", -320.745756059885], ["2023-07-16T16:45:00-07:00", -320.7645926978439], ["2023-07-16T16:50:00-07:00", -320.7834293358028], ["2023-07-16T16:55:00-07:00", -320.8022659737617], ["2023-07-16T17:00:00-07:00", -320.8210769277066], ["2023-07-16T17:05:00-07:00", -320.8398890309036], ["2023-07-16T17:10:00-07:00", -320.85870228148997], ["2023-07-16T17:15:00-07:00", -320.8775166813284], ["2023-07-16T17:20:00-07:00", -320.8963322285563], ["2023-07-16T17:25:00-07:00", -320.9151489250362], ["2023-07-16T17:30:00-07:00", -320.9339667689055], ["2023-07-16T17:35:00-07:00", -320.9527857620269], ["2023-07-16T17:40:00-07:00", -320.9716059025377], ["2023-07-16T17:45:00-07:00", -320.99042719230056], ["2023-07-16T17:50:00-07:00", -321.0092496294528], ["2023-07-16T17:55:00-07:00", -321.02807321585715], ["2023-07-16T18:00:00-07:00", -321.0468849800527], ["2023-07-16T18:05:00-07:00", -321.0656973198056], ["2023-07-16T18:10:00-07:00", -321.08451023325324], ["2023-07-16T18:15:00-07:00", -321.1033237222582], ["2023-07-16T18:20:00-07:00", -321.1221377849579], ["2023-07-16T18:25:00-07:00", -321.14095242135227], ["2023-07-16T18:30:00-07:00", -321.159767633304], ["2023-07-16T18:35:00-07:00", -321.17858341895044], ["2023-07-16T18:40:00-07:00", -321.1973997801542], ["2023-07-16T18:45:00-07:00", -321.2162167150527], ["2023-07-16T18:50:00-07:00", -321.23503422550857], ["2023-07-16T18:55:00-07:00", -321.2538523096591], ["2023-07-16T19:00:00-07:00", -321.2726736664772], ["2023-07-16T19:05:00-07:00", -321.29149559699], ["2023-07-16T19:10:00-07:00", -321.3103181030601], ["2023-07-16T19:15:00-07:00", -321.32914118282497], ["2023-07-16T19:20:00-07:00", -321.34796483814716], ["2023-07-16T19:25:00-07:00", -321.36678906716406], ["2023-07-16T19:30:00-07:00", -321.38561386987567], ["2023-07-16T19:35:00-07:00", -321.4044392481446], ["2023-07-16T19:40:00-07:00", -321.4232652001083], ["2023-07-16T19:45:00-07:00", -321.4420917276293], ["2023-07-16T19:50:00-07:00", -321.460918828845], ["2023-07-16T19:55:00-07:00", -321.47974650375545], ["2023-07-16T20:00:00-07:00", -321.49857329390943], ["2023-07-16T20:05:00-07:00", -321.51740123331547], ["2023-07-16T20:10:00-07:00", -321.53623032197356], ["2023-07-16T20:15:00-07:00", -321.5550605598837], ["2023-07-16T20:20:00-07:00", -321.5738919470459], ["2023-07-16T20:25:00-07:00", -321.5927244834602], ["2023-07-16T20:30:00-07:00", -321.61155816726387], ["2023-07-16T20:35:00-07:00", -321.6303930003196], ["2023-07-16T20:40:00-07:00", -321.6492289826274], ["2023-07-16T20:45:00-07:00", -321.66806611418724], ["2023-07-16T20:50:00-07:00", -321.68690439499915], ["2023-07-16T20:55:00-07:00", -321.7057438250631], ["2023-07-16T21:00:00-07:00", -321.72458991780877], ["2023-07-16T21:05:00-07:00", -321.74343601055443], ["2023-07-16T21:10:00-07:00", -321.7622821033001], ["2023-07-16T21:15:00-07:00", -321.78112819604576], ["2023-07-16T21:20:00-07:00", -321.7999742887914], ["2023-07-16T21:25:00-07:00", -321.8188203815371], ["2023-07-16T21:30:00-07:00", -321.83766647428274], ["2023-07-16T21:35:00-07:00", -321.8565125670284], ["2023-07-16T21:40:00-07:00", -321.87535865977407], ["2023-07-16T21:45:00-07:00", -321.8942047525197], ["2023-07-16T21:50:00-07:00", -321.9130508452654], ["2023-07-16T21:55:00-07:00", -321.93189693801105], ["2023-07-16T22:00:00-07:00", -321.9507492277771], ["2023-07-16T22:05:00-07:00", -321.9696015175432], ["2023-07-16T22:10:00-07:00", -321.98845380730927], ["2023-07-16T22:15:00-07:00", -322.00730609707534], ["2023-07-16T22:20:00-07:00", -322.0261583868414], ["2023-07-16T22:25:00-07:00", -322.0450106766075], ["2023-07-16T22:30:00-07:00", -322.06386296637356], ["2023-07-16T22:35:00-07:00", -322.08271525613964], ["2023-07-16T22:40:00-07:00", -322.1015675459057], ["2023-07-16T22:45:00-07:00", -322.1204198356718], ["2023-07-16T22:50:00-07:00", -322.13927212543786], ["2023-07-16T22:55:00-07:00", -322.15812441520393], ["2023-07-16T23:00:00-07:00", -322.17748629301786], ["2023-07-16T23:05:00-07:00", -322.1968481708318], ["2023-07-16T23:10:00-07:00", -322.21621004864573], ["2023-07-16T23:15:00-07:00", -322.23557192645967], ["2023-07-16T23:20:00-07:00", -322.2549338042736], ["2023-07-16T23:25:00-07:00", -322.27429568208754], ["2023-07-16T23:30:00-07:00", -322.2936575599015], ["2023-07-16T23:35:00-07:00", -322.3130194377154], ["2023-07-16T23:40:00-07:00", -322.33238131552935], ["2023-07-16T23:45:00-07:00", -322.3517431933433], ["2023-07-16T23:50:00-07:00", -322.3711050711572], ["2023-07-16T23:55:00-07:00", -322.39046694897115], ["2023-07-17T00:00:00-07:00", -322.4099636580795], ["2023-07-17T00:05:00-07:00", -322.4294598083943], ["2023-07-17T00:10:00-07:00", -322.4489554017782], ["2023-07-17T00:15:00-07:00", -322.4684504363686], ["2023-07-17T00:20:00-07:00", -322.48794491402805], ["2023-07-17T00:25:00-07:00", -322.50743883289397], ["2023-07-17T00:30:00-07:00", -322.526932194829], ["2023-07-17T00:35:00-07:00", -322.54642499797046], ["2023-07-17T00:40:00-07:00", -322.5659172423184], ["2023-07-17T00:45:00-07:00", -322.5854089297354], ["2023-07-17T00:50:00-07:00", -322.6049000583589], ["2023-07-17T00:55:00-07:00", -322.6243906300515], ["2023-07-17T01:00:00-07:00", -322.6440321020782], ["2023-07-17T01:05:00-07:00", -322.6636741273105], ["2023-07-17T01:10:00-07:00", -322.6833167076111], ["2023-07-17T01:15:00-07:00", -322.70295984111726], ["2023-07-17T01:20:00-07:00", -322.7226035296917], ["2023-07-17T01:25:00-07:00", -322.74224777147174], ["2023-07-17T01:30:00-07:00", -322.76189256832004], ["2023-07-17T01:35:00-07:00", -322.78153791837394], ["2023-07-17T01:40:00-07:00", -322.8011838234961], ["2023-07-17T01:45:00-07:00", -322.8208302818239], ["2023-07-17T01:50:00-07:00", -322.8404772952199], ["2023-07-17T01:55:00-07:00", -322.86012486182153], ["2023-07-17T02:00:00-07:00", -322.87983203679323], ["2023-07-17T02:05:00-07:00", -322.89953976497054], ["2023-07-17T02:10:00-07:00", -322.91924804635346], ["2023-07-17T02:15:00-07:00", -322.93895687907934], ["2023-07-17T02:20:00-07:00", -322.95866626501083], ["2023-07-17T02:25:00-07:00", -322.97837620414793], ["2023-07-17T02:30:00-07:00", -322.99808669649065], ["2023-07-17T02:35:00-07:00", -323.0177977401763], ["2023-07-17T02:40:00-07:00", -323.0375093370676], ["2023-07-17T02:45:00-07:00", -323.0572214871645], ["2023-07-17T02:50:00-07:00", -323.07693418860435], ["2023-07-17T02:55:00-07:00", -323.0966474432498], ["2023-07-17T03:00:00-07:00", -323.1163795925677], ["2023-07-17T03:05:00-07:00", -323.13611174188554], ["2023-07-17T03:10:00-07:00", -323.1558438912034], ["2023-07-17T03:15:00-07:00", -323.17557604052126], ["2023-07-17T03:20:00-07:00", -323.1953081898391], ["2023-07-17T03:25:00-07:00", -323.215040339157], ["2023-07-17T03:30:00-07:00", -323.23477248847485], ["2023-07-17T03:35:00-07:00", -323.2545046377927], ["2023-07-17T03:40:00-07:00", -323.27423678711057], ["2023-07-17T03:45:00-07:00", -323.2939689364284], ["2023-07-17T03:50:00-07:00", -323.3137010857463], ["2023-07-17T03:55:00-07:00", -323.33343323506415], ["2023-07-17T04:00:00-07:00", -323.35317734628916], ["2023-07-17T04:05:00-07:00", -323.37292145751417], ["2023-07-17T04:10:00-07:00", -323.3926655687392], ["2023-07-17T04:15:00-07:00", -323.4124096799642], ["2023-07-17T04:20:00-07:00", -323.4321537911892], ["2023-07-17T04:25:00-07:00", -323.4518979024142], ["2023-07-17T04:30:00-07:00", -323.4716420136392], ["2023-07-17T04:35:00-07:00", -323.4913861248642], ["2023-07-17T04:40:00-07:00", -323.51113023608923], ["2023-07-17T04:45:00-07:00", -323.53087434731424], ["2023-07-17T04:50:00-07:00", -323.55061845853925], ["2023-07-17T04:55:00-07:00", -323.57036256976426], ["2023-07-17T05:00:00-07:00", -323.5905210599303], ["2023-07-17T05:05:00-07:00", -323.6106795500964], ["2023-07-17T05:10:00-07:00", -323.63083804026246], ["2023-07-17T05:15:00-07:00", -323.65099653042853], ["2023-07-17T05:20:00-07:00", -323.6711550205946], ["2023-07-17T05:25:00-07:00", -323.69131351076066], ["2023-07-17T05:30:00-07:00", -323.71147200092673], ["2023-07-17T05:35:00-07:00", -323.7316304910928], ["2023-07-17T05:40:00-07:00", -323.75178898125887], ["2023-07-17T05:45:00-07:00", -323.77194747142494], ["2023-07-17T05:50:00-07:00", -323.792105961591], ["2023-07-17T05:55:00-07:00", -323.8122644517571], ["2023-07-17T06:00:00-07:00", -323.8324486427009], ["2023-07-17T06:05:00-07:00", -324.2177106253803], ["2023-07-17T06:10:00-07:00", -324.6038295440376], ["2023-07-17T06:15:00-07:00", -324.9899484626949], ["2023-07-17T06:20:00-07:00", -325.3760673813522], ["2023-07-17T06:25:00-07:00", -325.7621863000095], ["2023-07-17T06:30:00-07:00", -326.1483052186668], ["2023-07-17T06:35:00-07:00", -326.5344241373241], ["2023-07-17T06:40:00-07:00", -326.9205430559814], ["2023-07-17T06:45:00-07:00", -327.3066619746387], ["2023-07-17T06:50:00-07:00", -327.692780893296], ["2023-07-17T06:55:00-07:00", -328.0788998119533], ["2023-07-17T07:00:00-07:00", -328.51916129514575], ["2023-07-17T07:05:00-07:00", -328.96278826519847], ["2023-07-17T07:10:00-07:00", -329.39612708613276], ["2023-07-17T07:15:00-07:00", -329.8405148796737], ["2023-07-17T07:20:00-07:00", -330.28594417497516], ["2023-07-17T07:25:00-07:00", -330.7332077138126], ["2023-07-17T07:30:00-07:00", -331.1734452061355], ["2023-07-17T07:35:00-07:00", -331.6094513647258], ["2023-07-17T07:40:00-07:00", -332.03779734298587], ["2023-07-17T07:45:00-07:00", -332.46366019174457], ["2023-07-17T07:50:00-07:00", -332.8862848393619], ["2023-07-17T07:55:00-07:00", -333.30578760430217], ["2023-07-17T08:00:00-07:00", -333.72406757995486], ["2023-07-17T08:05:00-07:00", -334.14044423028827], ["2023-07-17T08:10:00-07:00", -334.5545518808067], ["2023-07-17T08:15:00-07:00", -334.9690938703716], ["2023-07-17T08:20:00-07:00", -335.3815009407699], ["2023-07-17T08:25:00-07:00", -335.7951999120414], ["2023-07-17T08:30:00-07:00", -336.2084779255092], ["2023-07-17T08:35:00-07:00", -336.620149563998], ["2023-07-17T08:40:00-07:00", -337.03238106891513], ["2023-07-17T08:45:00-07:00", -337.443566005677], ["2023-07-17T08:50:00-07:00", -337.85357327386737], ["2023-07-17T08:55:00-07:00", -338.2614929191768], ["2023-07-17T09:00:00-07:00", -338.66655484959483], ["2023-07-17T09:05:00-07:00", -339.0705173127353], ["2023-07-17T09:10:00-07:00", -339.4730382375419], ["2023-07-17T09:15:00-07:00", -339.87493849918246], ["2023-07-17T09:20:00-07:00", -340.2756920270622], ["2023-07-17T09:25:00-07:00", -340.67562497779727], ["2023-07-17T09:30:00-07:00", -341.0749107412994], ["2023-07-17T09:35:00-07:00", -341.47430424019694], ["2023-07-17T09:40:00-07:00", -341.8712284974754], ["2023-07-17T09:45:00-07:00", -342.2619178406894], ["2023-07-17T09:50:00-07:00", -342.6515126042068], ["2023-07-17T09:55:00-07:00", -343.04110575839877], ["2023-07-17T10:00:00-07:00", -343.427401881665], ["2023-07-17T10:05:00-07:00", -343.8132323734462], ["2023-07-17T10:10:00-07:00", -344.19869826361537], ["2023-07-17T10:15:00-07:00", -344.5837345831096], ["2023-07-17T10:20:00-07:00", -344.96278316900134], ["2023-07-17T10:25:00-07:00", -345.34170169755816], ["2023-07-17T10:30:00-07:00", -345.7259481959045], ["2023-07-17T10:35:00-07:00", -346.10929487273097], ["2023-07-17T10:40:00-07:00", -346.48668442294], ["2023-07-17T10:45:00-07:00", -346.858115863055], ["2023-07-17T10:50:00-07:00", -347.22307608649135], ["2023-07-17T10:55:00-07:00", -347.5878158323467], ["2023-07-17T11:00:00-07:00", -347.950403790921], ["2023-07-17T11:05:00-07:00", -348.3127221278846], ["2023-07-17T11:10:00-07:00", -348.674834292382], ["2023-07-17T11:15:00-07:00", -349.0362574867904], ["2023-07-17T11:20:00-07:00", -349.39747278019786], ["2023-07-17T11:25:00-07:00", -349.7587340287864], ["2023-07-17T11:30:00-07:00", -350.11961905285716], ["2023-07-17T11:35:00-07:00", -350.48009626194835], ["2023-07-17T11:40:00-07:00", -350.84045008942485], ["2023-07-17T11:45:00-07:00", -351.18934194371104], ["2023-07-17T11:50:00-07:00", -351.53785813972354], ["2023-07-17T11:55:00-07:00", -351.8800968043506], ["2023-07-17T12:00:00-07:00", -352.19596345350146], ["2023-07-17T12:05:00-07:00", -352.51177440211177], ["2023-07-17T12:10:00-07:00", -352.82210601493716], ["2023-07-17T12:15:00-07:00", -353.13209922239184], ["2023-07-17T12:20:00-07:00", -353.426052313298], ["2023-07-17T12:25:00-07:00", -353.71996683999896], ["2023-07-17T12:30:00-07:00", -354.0132756642997], ["2023-07-17T12:35:00-07:00", -354.30112360045314], ["2023-07-17T12:40:00-07:00", -354.58890960738063], ["2023-07-17T12:45:00-07:00", -354.8769047372043], ["2023-07-17T12:50:00-07:00", -355.1702772192657], ["2023-07-17T12:55:00-07:00", -355.4640433900058], ["2023-07-17T13:00:00-07:00", -355.7635194770992], ["2023-07-17T13:05:00-07:00", -356.0632650665939], ["2023-07-17T13:10:00-07:00", -356.35822577401996], ["2023-07-17T13:15:00-07:00", -356.65937269851565], ["2023-07-17T13:20:00-07:00", -356.9608317129314], ["2023-07-17T13:25:00-07:00", -357.26238260790706], ["2023-07-17T13:30:00-07:00", -357.55887461826205], ["2023-07-17T13:35:00-07:00", -357.85031689330935], ["2023-07-17T13:40:00-07:00", -358.14584059640765], ["2023-07-17T13:45:00-07:00", -358.4417722634971], ["2023-07-17T13:50:00-07:00", -358.7325268499553], ["2023-07-17T13:55:00-07:00", -359.029027055949], ["2023-07-17T14:00:00-07:00", -359.32543398067355], ["2023-07-17T14:05:00-07:00", -359.6170179657638], ["2023-07-17T14:10:00-07:00", -359.90872065350413], ["2023-07-17T14:15:00-07:00", -360.18339465186], ["2023-07-17T14:20:00-07:00", -360.4581322185695], ["2023-07-17T14:25:00-07:00", -360.72208116576076], ["2023-07-17T14:30:00-07:00", -360.9860743395984], ["2023-07-17T14:35:00-07:00", -361.2480740658939], ["2023-07-17T14:40:00-07:00", -361.50460244342685], ["2023-07-17T14:45:00-07:00", -361.7611345462501], ["2023-07-17T14:50:00-07:00", -362.0176698677242], ["2023-07-17T14:55:00-07:00", -362.2796834819019], ["2023-07-17T15:00:00-07:00", -362.541291218251], ["2023-07-17T15:05:00-07:00", -362.7971992008388], ["2023-07-17T15:10:00-07:00", -363.05283964797854], ["2023-07-17T15:15:00-07:00", -363.3027593754232], ["2023-07-17T15:20:00-07:00", -363.5415187738836], ["2023-07-17T15:25:00-07:00", -363.7800241075456], ["2023-07-17T15:30:00-07:00", -364.01283602043986], ["2023-07-17T15:35:00-07:00", -364.2453980408609], ["2023-07-17T15:40:00-07:00", -364.4777100943029], ["2023-07-17T15:45:00-07:00", -364.709772285074], ["2023-07-17T15:50:00-07:00", -364.9361647926271], ["2023-07-17T15:55:00-07:00", -365.1623122654855], ["2023-07-17T16:00:00-07:00", -365.38792146369815], ["2023-07-17T16:05:00-07:00", -365.61328598484397], ["2023-07-17T16:10:00-07:00", -365.82761765643954], ["2023-07-17T16:15:00-07:00", -366.0471027158201], ["2023-07-17T16:20:00-07:00", -366.2609631381929], ["2023-07-17T16:25:00-07:00", -366.4747224114835], ["2023-07-17T16:30:00-07:00", -366.68310045823455], ["2023-07-17T16:35:00-07:00", -366.8860977701843], ["2023-07-17T16:40:00-07:00", -367.094479303807], ["2023-07-17T16:45:00-07:00", -367.3028625808656], ["2023-07-17T16:50:00-07:00", -367.5112476013601], ["2023-07-17T16:55:00-07:00", -367.7196343652904], ["2023-07-17T17:00:00-07:00", -367.9277387224138], ["2023-07-17T17:05:00-07:00", -368.1242243312299], ["2023-07-17T17:10:00-07:00", -368.31533662602305], ["2023-07-17T17:15:00-07:00", -368.5064506791532], ["2023-07-17T17:20:00-07:00", -368.69756650552154], ["2023-07-17T17:25:00-07:00", -368.8886840902269], ["2023-07-17T17:30:00-07:00", -369.07980343326926], ["2023-07-17T17:35:00-07:00", -369.27092453464866], ["2023-07-17T17:40:00-07:00", -369.46204740926623], ["2023-07-17T17:45:00-07:00", -369.65317204222083], ["2023-07-17T17:50:00-07:00", -369.84429843351245], ["2023-07-17T17:55:00-07:00", -370.0354265831411], ["2023-07-17T18:00:00-07:00", -370.2264236919582], ["2023-07-17T18:05:00-07:00", -370.4174225591123], ["2023-07-17T18:10:00-07:00", -370.60842318460345], ["2023-07-17T18:15:00-07:00", -370.7994255684316], ["2023-07-17T18:20:00-07:00", -370.99580101296306], ["2023-07-17T18:25:00-07:00", -371.1921782158315], ["2023-07-17T18:30:00-07:00", -371.39392847940326], ["2023-07-17T18:35:00-07:00", -371.5956805162132], ["2023-07-17T18:40:00-07:00", -371.7974343113601], ["2023-07-17T18:45:00-07:00", -371.9991898648441], ["2023-07-17T18:50:00-07:00", -372.20094717666507], ["2023-07-17T18:55:00-07:00", -372.4027062468231], ["2023-07-17T19:00:00-07:00", -372.6044962666929], ["2023-07-17T19:05:00-07:00", -372.6232997812331], ["2023-07-17T19:10:00-07:00", -372.642103869468], ["2023-07-17T19:15:00-07:00", -372.6609085313976], ["2023-07-17T19:20:00-07:00", -372.67971376888454], ["2023-07-17T19:25:00-07:00", -372.6985195800662], ["2023-07-17T19:30:00-07:00", -372.7173259668052], ["2023-07-17T19:35:00-07:00", -372.73613292723894], ["2023-07-17T19:40:00-07:00", -372.75494046136737], ["2023-07-17T19:45:00-07:00", -372.77374857105315], ["2023-07-17T19:50:00-07:00", -372.79255725443363], ["2023-07-17T19:55:00-07:00", -372.81136651337147], ["2023-07-17T20:00:00-07:00", -372.8301748856902], ["2023-07-17T20:05:00-07:00", -372.84898383170366], ["2023-07-17T20:10:00-07:00", -372.86779335327446], ["2023-07-17T20:15:00-07:00", -372.88660344854], ["2023-07-17T20:20:00-07:00", -372.90541411936283], ["2023-07-17T20:25:00-07:00", -372.9242253638804], ["2023-07-17T20:30:00-07:00", -372.9430371839553], ["2023-07-17T20:35:00-07:00", -372.96184957772493], ["2023-07-17T20:40:00-07:00", -372.98066254518926], ["2023-07-17T20:45:00-07:00", -372.99947608821094], ["2023-07-17T20:50:00-07:00", -373.0182902049273], ["2023-07-17T20:55:00-07:00", -373.03710489720106], ["2023-07-17T21:00:00-07:00", -373.0559256840497], ["2023-07-17T21:05:00-07:00", -373.0747470445931], ["2023-07-17T21:10:00-07:00", -373.0935689806938], ["2023-07-17T21:15:00-07:00", -373.11239149048924], ["2023-07-17T21:20:00-07:00", -373.1312145739794], ["2023-07-17T21:25:00-07:00", -373.15003823302686], ["2023-07-17T21:30:00-07:00", -373.16886246576905], ["2023-07-17T21:35:00-07:00", -373.18768727220595], ["2023-07-17T21:40:00-07:00", -373.2065126542002], ["2023-07-17T21:45:00-07:00", -373.22533860988915], ["2023-07-17T21:50:00-07:00", -373.24416514113545], ["2023-07-17T21:55:00-07:00", -373.26299224607646], ["2023-07-17T22:00:00-07:00", -373.2818261273205], ["2023-07-17T22:05:00-07:00", -373.3006605822593], ["2023-07-17T22:10:00-07:00", -373.3194956108928], ["2023-07-17T22:15:00-07:00", -373.33833121322095], ["2023-07-17T22:20:00-07:00", -373.3571673911065], ["2023-07-17T22:25:00-07:00", -373.3760041426867], ["2023-07-17T22:30:00-07:00", -373.39484146796167], ["2023-07-17T22:35:00-07:00", -373.4136793669313], ["2023-07-17T22:40:00-07:00", -373.4325178414583], ["2023-07-17T22:45:00-07:00", -373.45135688968], ["2023-07-17T22:50:00-07:00", -373.47019651159644], ["2023-07-17T22:55:00-07:00", -373.4890482276678], ["2023-07-17T23:00:00-07:00", -373.50841010548174], ["2023-07-17T23:05:00-07:00", -373.52777254395187], ["2023-07-17T23:10:00-07:00", -373.5471355430782], ["2023-07-17T23:15:00-07:00", -373.56649910472333], ["2023-07-17T23:20:00-07:00", -373.5858632270247], ["2023-07-17T23:25:00-07:00", -373.60522791184485], ["2023-07-17T23:30:00-07:00", -373.6245931573212], ["2023-07-17T23:35:00-07:00", -373.64395896345377], ["2023-07-17T23:40:00-07:00", -373.66332533210516], ["2023-07-17T23:45:00-07:00", -373.68269226141274], ["2023-07-17T23:50:00-07:00", -373.7020597513765], ["2023-07-17T23:55:00-07:00", -373.7214278038591], ["2023-07-18T00:00:00-07:00", -373.74093120731413], ["2023-07-18T00:05:00-07:00", -373.76043461076915], ["2023-07-18T00:10:00-07:00", -373.7799380142242], ["2023-07-18T00:15:00-07:00", -373.7994414176792], ["2023-07-18T00:20:00-07:00", -373.8189448211342], ["2023-07-18T00:25:00-07:00", -373.83844822458923], ["2023-07-18T00:30:00-07:00", -373.85795162804425], ["2023-07-18T00:35:00-07:00", -373.87745503149927], ["2023-07-18T00:40:00-07:00", -373.8969584349543], ["2023-07-18T00:45:00-07:00", -373.9164618384093], ["2023-07-18T00:50:00-07:00", -373.9359652418643], ["2023-07-18T00:55:00-07:00", -373.95546864531934], ["2023-07-18T01:00:00-07:00", -373.9751234166324], ["2023-07-18T01:05:00-07:00", -373.9947787411511], ["2023-07-18T01:10:00-07:00", -374.01443462073803], ["2023-07-18T01:15:00-07:00", -374.0340910535306], ["2023-07-18T01:20:00-07:00", -374.0537480413914], ["2023-07-18T01:25:00-07:00", -374.0734055824578], ["2023-07-18T01:30:00-07:00", -374.09306367859244], ["2023-07-18T01:35:00-07:00", -374.1127223279327], ["2023-07-18T01:40:00-07:00", -374.13238153234124], ["2023-07-18T01:45:00-07:00", -374.1520412899554], ["2023-07-18T01:50:00-07:00", -374.17170160263777], ["2023-07-18T01:55:00-07:00", -374.19136246852577], ["2023-07-18T02:00:00-07:00", -374.2110829073936], ["2023-07-18T02:05:00-07:00", -374.2308033462614], ["2023-07-18T02:10:00-07:00", -374.2505237851292], ["2023-07-18T02:15:00-07:00", -374.270244223997], ["2023-07-18T02:20:00-07:00", -374.2899646628648], ["2023-07-18T02:25:00-07:00", -374.3096851017326], ["2023-07-18T02:30:00-07:00", -374.3294055406004], ["2023-07-18T02:35:00-07:00", -374.3491259794682], ["2023-07-18T02:40:00-07:00", -374.36884641833603], ["2023-07-18T02:45:00-07:00", -374.38856685720384], ["2023-07-18T02:50:00-07:00", -374.40828729607165], ["2023-07-18T02:55:00-07:00", -374.42800773493946], ["2023-07-18T03:00:00-07:00", -374.4477465096861], ["2023-07-18T03:05:00-07:00", -374.46748528443277], ["2023-07-18T03:10:00-07:00", -374.4872240591794], ["2023-07-18T03:15:00-07:00", -374.5069628339261], ["2023-07-18T03:20:00-07:00", -374.52670160867274], ["2023-07-18T03:25:00-07:00", -374.5464403834194], ["2023-07-18T03:30:00-07:00", -374.56617915816605], ["2023-07-18T03:35:00-07:00", -374.5859179329127], ["2023-07-18T03:40:00-07:00", -374.60565670765936], ["2023-07-18T03:45:00-07:00", -374.625395482406], ["2023-07-18T03:50:00-07:00", -374.6451342571527], ["2023-07-18T03:55:00-07:00", -374.66487303189933], ["2023-07-18T04:00:00-07:00", -374.6846237666905], ["2023-07-18T04:05:00-07:00", -374.7043750528246], ["2023-07-18T04:10:00-07:00", -374.7241268903017], ["2023-07-18T04:15:00-07:00", -374.74387927912176], ["2023-07-18T04:20:00-07:00", -374.7636322211474], ["2023-07-18T04:25:00-07:00", -374.78338571451604], ["2023-07-18T04:30:00-07:00", -374.80313975922763], ["2023-07-18T04:35:00-07:00", -374.82289435714483], ["2023-07-18T04:40:00-07:00", -374.842649506405], ["2023-07-18T04:45:00-07:00", -374.8624052070081], ["2023-07-18T04:50:00-07:00", -374.88216146081686], ["2023-07-18T04:55:00-07:00", -374.90191826596856], ["2023-07-18T05:00:00-07:00", -374.92208975180984], ["2023-07-18T05:05:00-07:00", -374.9422612376511], ["2023-07-18T05:10:00-07:00", -374.9624327234924], ["2023-07-18T05:15:00-07:00", -374.98260420933366], ["2023-07-18T05:20:00-07:00", -375.00277569517493], ["2023-07-18T05:25:00-07:00", -375.0229471810162], ["2023-07-18T05:30:00-07:00", -375.0431186668575], ["2023-07-18T05:35:00-07:00", -375.06329015269876], ["2023-07-18T05:40:00-07:00", -375.08346163854003], ["2023-07-18T05:45:00-07:00", -375.1036331243813], ["2023-07-18T05:50:00-07:00", -375.1238046102226], ["2023-07-18T05:55:00-07:00", -375.14397609606385], ["2023-07-18T06:00:00-07:00", -375.1641732659191], ["2023-07-18T06:05:00-07:00", -375.3345101233572], ["2023-07-18T06:10:00-07:00", -375.5111230816692], ["2023-07-18T06:15:00-07:00", -375.68773434124887], ["2023-07-18T06:20:00-07:00", -375.8643434997648], ["2023-07-18T06:25:00-07:00", -376.04095054231584], ["2023-07-18T06:30:00-07:00", -376.2175555136055], ["2023-07-18T06:35:00-07:00", -376.39415820501745], ["2023-07-18T06:40:00-07:00", -376.5707585718483], ["2023-07-18T06:45:00-07:00", -376.7591456081718], ["2023-07-18T06:50:00-07:00", -376.94753030501306], ["2023-07-18T06:55:00-07:00", -377.14180672727525], ["2023-07-18T07:00:00-07:00", -377.3362834509462], ["2023-07-18T07:05:00-07:00", -377.5246697124094], ["2023-07-18T07:10:00-07:00", -377.71283893845975], ["2023-07-18T07:15:00-07:00", -377.90079108439386], ["2023-07-18T07:20:00-07:00", -378.08847179077566], ["2023-07-18T07:25:00-07:00", -378.25830895267427], ["2023-07-18T07:30:00-07:00", -378.42207448743284], ["2023-07-18T07:35:00-07:00", -378.580488121137], ["2023-07-18T07:40:00-07:00", -378.7444820161909], ["2023-07-18T07:45:00-07:00", -378.90823744796216], ["2023-07-18T07:50:00-07:00", -379.0653695669025], ["2023-07-18T07:55:00-07:00", -379.2164667006582], ["2023-07-18T08:00:00-07:00", -379.34997860156], ["2023-07-18T08:05:00-07:00", -379.4716418068856], ["2023-07-18T08:10:00-07:00", -379.59314578585327], ["2023-07-18T08:15:00-07:00", -379.7144906055182], ["2023-07-18T08:20:00-07:00", -379.8356763254851], ["2023-07-18T08:25:00-07:00", -379.9570816066116], ["2023-07-18T08:30:00-07:00", -380.078312529251], ["2023-07-18T08:35:00-07:00", -380.19321204535663], ["2023-07-18T08:40:00-07:00", -380.30795775167644], ["2023-07-18T08:45:00-07:00", -380.42254955880344], ["2023-07-18T08:50:00-07:00", -380.5369874667376], ["2023-07-18T08:55:00-07:00", -380.63969470374286], ["2023-07-18T09:00:00-07:00", -380.74185408465564], ["2023-07-18T09:05:00-07:00", -380.8438706230372], ["2023-07-18T09:10:00-07:00", -380.94574425928295], ["2023-07-18T09:15:00-07:00", -381.0478573497385], ["2023-07-18T09:20:00-07:00", -381.1557187791914], ["2023-07-18T09:25:00-07:00", -381.26325183175504], ["2023-07-18T09:30:00-07:00", -381.3707832302898], ["2023-07-18T09:35:00-07:00", -381.4783129747957], ["2023-07-18T09:40:00-07:00", -381.5858410652727], ["2023-07-18T09:45:00-07:00", -381.6933674942702], ["2023-07-18T09:50:00-07:00", -381.80089226923883], ["2023-07-18T09:55:00-07:00", -381.90841539017856], ["2023-07-18T10:00:00-07:00", -382.009418932721], ["2023-07-18T10:05:00-07:00", -382.1104208063334], ["2023-07-18T10:10:00-07:00", -382.2117061223835], ["2023-07-18T10:15:00-07:00", -382.3186905365437], ["2023-07-18T10:20:00-07:00", -382.4253894742578], ["2023-07-18T10:25:00-07:00", -382.5320867430419], ["2023-07-18T10:30:00-07:00", -382.63878234289587], ["2023-07-18T10:35:00-07:00", -382.7454762812704], ["2023-07-18T10:40:00-07:00", -382.85216855071485], ["2023-07-18T10:45:00-07:00", -382.95885915122926], ["2023-07-18T10:50:00-07:00", -383.0655480828136], ["2023-07-18T10:55:00-07:00", -383.16653328202665], ["2023-07-18T11:00:00-07:00", -383.2669773902744], ["2023-07-18T11:05:00-07:00", -383.3674203734845], ["2023-07-18T11:10:00-07:00", -383.46786321513355], ["2023-07-18T11:15:00-07:00", -383.5629149954766], ["2023-07-18T11:20:00-07:00", -383.6636497285217], ["2023-07-18T11:25:00-07:00", -383.76409257017076], ["2023-07-18T11:30:00-07:00", -383.8645354118198], ["2023-07-18T11:35:00-07:00", -383.95930742286146], ["2023-07-18T11:40:00-07:00", -384.0540794413537], ["2023-07-18T11:45:00-07:00", -384.1488514598459], ["2023-07-18T11:50:00-07:00", -384.2436234783381], ["2023-07-18T11:55:00-07:00", -384.33839549683034], ["2023-07-18T12:00:00-07:00", -384.4292534869164], ["2023-07-18T12:05:00-07:00", -384.5255272593349], ["2023-07-18T12:10:00-07:00", -384.6218038480729], ["2023-07-18T12:15:00-07:00", -384.7235026936978], ["2023-07-18T12:20:00-07:00", -384.81950374506414], ["2023-07-18T12:25:00-07:00", -384.91550130955875], ["2023-07-18T12:30:00-07:00", -385.011754816398], ["2023-07-18T12:35:00-07:00", -385.1080160792917], ["2023-07-18T12:40:00-07:00", -385.19858892820776], ["2023-07-18T12:45:00-07:00", -385.2891582902521], ["2023-07-18T12:50:00-07:00", -385.3799874316901], ["2023-07-18T12:55:00-07:00", -385.47623565606773], ["2023-07-18T13:00:00-07:00", -385.57209302298725], ["2023-07-18T13:05:00-07:00", -385.6679474618286], ["2023-07-18T13:10:00-07:00", -385.76410628668964], ["2023-07-18T13:15:00-07:00", -385.8660546001047], ["2023-07-18T13:20:00-07:00", -385.9730802681297], ["2023-07-18T13:25:00-07:00", -386.079742660746], ["2023-07-18T13:30:00-07:00", -386.18678662739694], ["2023-07-18T13:35:00-07:00", -386.2996952589601], ["2023-07-18T13:40:00-07:00", -386.4176158513874], ["2023-07-18T13:45:00-07:00", -386.5350863467902], ["2023-07-18T13:50:00-07:00", -386.6579626407474], ["2023-07-18T13:55:00-07:00", -386.7808371838182], ["2023-07-18T14:00:00-07:00", -386.90349844656885], ["2023-07-18T14:05:00-07:00", -387.02076104842126], ["2023-07-18T14:10:00-07:00", -387.1380250956863], ["2023-07-18T14:15:00-07:00", -387.25529088638723], ["2023-07-18T14:20:00-07:00", -387.378575688228], ["2023-07-18T14:25:00-07:00", -387.50188012979925], ["2023-07-18T14:30:00-07:00", -387.6245492082089], ["2023-07-18T14:35:00-07:00", -387.74722003750503], ["2023-07-18T14:40:00-07:00", -387.8644945602864], ["2023-07-18T14:45:00-07:00", -387.9817708339542], ["2023-07-18T14:50:00-07:00", -388.0990488510579], ["2023-07-18T14:55:00-07:00", -388.216328619048], ["2023-07-18T15:00:00-07:00", -388.3334289919585], ["2023-07-18T15:05:00-07:00", -388.45053110830486], ["2023-07-18T15:10:00-07:00", -388.56912577711046], ["2023-07-18T15:15:00-07:00", -388.68788960389793], ["2023-07-18T15:20:00-07:00", -388.8049969729036], ["2023-07-18T15:25:00-07:00", -388.92210609279573], ["2023-07-18T15:30:00-07:00", -389.0392169635743], ["2023-07-18T15:35:00-07:00", -389.1563295852393], ["2023-07-18T15:40:00-07:00", -389.27344395779073], ["2023-07-18T15:45:00-07:00", -389.3905600812286], ["2023-07-18T15:50:00-07:00", -389.50767795555294], ["2023-07-18T15:55:00-07:00", -389.6301871147007], ["2023-07-18T16:00:00-07:00", -389.7525407578796], ["2023-07-18T16:05:00-07:00", -389.874896151945], ["2023-07-18T16:10:00-07:00", -389.9972532968968], ["2023-07-18T16:15:00-07:00", -390.12499466352165], ["2023-07-18T16:20:00-07:00", -390.2527377884835], ["2023-07-18T16:25:00-07:00", -390.3804826568812], ["2023-07-18T16:30:00-07:00", -390.50822928361595], ["2023-07-18T16:35:00-07:00", -390.63597765378654], ["2023-07-18T16:40:00-07:00", -390.76372778229415], ["2023-07-18T16:45:00-07:00", -390.8914796542376], ["2023-07-18T16:50:00-07:00", -391.0192332845181], ["2023-07-18T16:55:00-07:00", -391.1469886582345], ["2023-07-18T17:00:00-07:00", -391.2799481432885], ["2023-07-18T17:05:00-07:00", -391.406663922593], ["2023-07-18T17:10:00-07:00", -391.5333814602345], ["2023-07-18T17:15:00-07:00", -391.66010075621307], ["2023-07-18T17:20:00-07:00", -391.78682181052864], ["2023-07-18T17:25:00-07:00", -391.9135446231812], ["2023-07-18T17:30:00-07:00", -392.040269209072], ["2023-07-18T17:35:00-07:00", -392.1669955532998], ["2023-07-18T17:40:00-07:00", -392.2937236558646], ["2023-07-18T17:45:00-07:00", -392.42045351676643], ["2023-07-18T17:50:00-07:00", -392.5471851360053], ["2023-07-18T17:55:00-07:00", -392.67929357104003], ["2023-07-18T18:00:00-07:00", -392.8113122712821], ["2023-07-18T18:05:00-07:00", -392.94333272986114], ["2023-07-18T18:10:00-07:00", -393.0753549467772], ["2023-07-18T18:15:00-07:00", -393.21275023929775], ["2023-07-18T18:20:00-07:00", -393.3501472901553], ["2023-07-18T18:25:00-07:00", -393.4929174017161], ["2023-07-18T18:30:00-07:00", -393.63568927161396], ["2023-07-18T18:35:00-07:00", -393.7784628998488], ["2023-07-18T18:40:00-07:00", -393.92660958878696], ["2023-07-18T18:45:00-07:00", -394.0747580360621], ["2023-07-18T18:50:00-07:00", -394.22827954404056], ["2023-07-18T18:55:00-07:00", -394.381802810356], ["2023-07-18T19:00:00-07:00", -394.540722085163], ["2023-07-18T19:05:00-07:00", -394.55956006608903], ["2023-07-18T19:10:00-07:00", -394.5783986207098], ["2023-07-18T19:15:00-07:00", -394.5972377490252], ["2023-07-18T19:20:00-07:00", -394.616077452898], ["2023-07-18T19:25:00-07:00", -394.63491773046553], ["2023-07-18T19:30:00-07:00", -394.6537585835904], ["2023-07-18T19:35:00-07:00", -394.67260001040995], ["2023-07-18T19:40:00-07:00", -394.6914420109242], ["2023-07-18T19:45:00-07:00", -394.71028458699584], ["2023-07-18T19:50:00-07:00", -394.72912773676217], ["2023-07-18T19:55:00-07:00", -394.74797146208584], ["2023-07-18T20:00:00-07:00", -394.7668143026531], ["2023-07-18T20:05:00-07:00", -394.78565771877766], ["2023-07-18T20:10:00-07:00", -394.80450170859694], ["2023-07-18T20:15:00-07:00", -394.8233462739736], ["2023-07-18T20:20:00-07:00", -394.84219141304493], ["2023-07-18T20:25:00-07:00", -394.861037125811], ["2023-07-18T20:30:00-07:00", -394.8798834141344], ["2023-07-18T20:35:00-07:00", -394.8987302761525], ["2023-07-18T20:40:00-07:00", -394.91757771372795], ["2023-07-18T20:45:00-07:00", -394.9364257249981], ["2023-07-18T20:50:00-07:00", -394.95527431182563], ["2023-07-18T20:55:00-07:00", -394.97412347234786], ["2023-07-18T21:00:00-07:00", -394.9929787199944], ["2023-07-18T21:05:00-07:00", -395.011833967641], ["2023-07-18T21:10:00-07:00", -395.03068921528757], ["2023-07-18T21:15:00-07:00", -395.04954446293414], ["2023-07-18T21:20:00-07:00", -395.0683997105807], ["2023-07-18T21:25:00-07:00", -395.0872549582273], ["2023-07-18T21:30:00-07:00", -395.10611020587385], ["2023-07-18T21:35:00-07:00", -395.1249654535204], ["2023-07-18T21:40:00-07:00", -395.143820701167], ["2023-07-18T21:45:00-07:00", -395.16267594881356], ["2023-07-18T21:50:00-07:00", -395.1815311964601], ["2023-07-18T21:55:00-07:00", -395.2003864441067], ["2023-07-18T22:00:00-07:00", -395.2192478850484], ["2023-07-18T22:05:00-07:00", -395.23810990154743], ["2023-07-18T22:10:00-07:00", -395.2569724917412], ["2023-07-18T22:15:00-07:00", -395.27583565562963], ["2023-07-18T22:20:00-07:00", -395.2946993932128], ["2023-07-18T22:25:00-07:00", -395.3135637063533], ["2023-07-18T22:30:00-07:00", -395.3324285931885], ["2023-07-18T22:35:00-07:00", -395.35129405371845], ["2023-07-18T22:40:00-07:00", -395.3701600879431], ["2023-07-18T22:45:00-07:00", -395.38902669772506], ["2023-07-18T22:50:00-07:00", -395.40789388120174], ["2023-07-18T22:55:00-07:00", -395.42677315697074], ["2023-07-18T23:00:00-07:00", -395.4461619798094], ["2023-07-18T23:05:00-07:00", -395.46555080264807], ["2023-07-18T23:10:00-07:00", -395.48493962548673], ["2023-07-18T23:15:00-07:00", -395.5043284483254], ["2023-07-18T23:20:00-07:00", -395.52371727116406], ["2023-07-18T23:25:00-07:00", -395.5431060940027], ["2023-07-18T23:30:00-07:00", -395.5624949168414], ["2023-07-18T23:35:00-07:00", -395.58188373968005], ["2023-07-18T23:40:00-07:00", -395.6012725625187], ["2023-07-18T23:45:00-07:00", -395.6206613853574], ["2023-07-18T23:50:00-07:00", -395.64005020819604], ["2023-07-18T23:55:00-07:00", -395.6594390310347], ["2023-07-19T00:00:00-07:00", -395.678962521255], ["2023-07-19T00:05:00-07:00", -395.6984860114753], ["2023-07-19T00:10:00-07:00", -395.71800950169563], ["2023-07-19T00:15:00-07:00", -395.73753299191594], ["2023-07-19T00:20:00-07:00", -395.75705648213625], ["2023-07-19T00:25:00-07:00", -395.77657997235656], ["2023-07-19T00:30:00-07:00", -395.79610346257687], ["2023-07-19T00:35:00-07:00", -395.8156269527972], ["2023-07-19T00:40:00-07:00", -395.8351504430175], ["2023-07-19T00:45:00-07:00", -395.8546739332378], ["2023-07-19T00:50:00-07:00", -395.8741974234581], ["2023-07-19T00:55:00-07:00", -395.8937209136784], ["2023-07-19T01:00:00-07:00", -395.913395633921], ["2023-07-19T01:05:00-07:00", -395.9330697990954], ["2023-07-19T01:10:00-07:00", -395.95274341106415], ["2023-07-19T01:15:00-07:00", -395.97241646796465], ["2023-07-19T01:20:00-07:00", -395.99208897165954], ["2023-07-19T01:25:00-07:00", -396.0117609202862], ["2023-07-19T01:30:00-07:00", -396.0314323157072], ["2023-07-19T01:35:00-07:00", -396.05110315606], ["2023-07-19T01:40:00-07:00", -396.07077344320714], ["2023-07-19T01:45:00-07:00", -396.09044317528605], ["2023-07-19T01:50:00-07:00", -396.11011235415936], ["2023-07-19T01:55:00-07:00", -396.1297809779644], ["2023-07-19T02:00:00-07:00", -396.1495080497116], ["2023-07-19T02:05:00-07:00", -396.16923512145877], ["2023-07-19T02:10:00-07:00", -396.18896219320595], ["2023-07-19T02:15:00-07:00", -396.20868926495314], ["2023-07-19T02:20:00-07:00", -396.2284163367003], ["2023-07-19T02:25:00-07:00", -396.2481434084475], ["2023-07-19T02:30:00-07:00", -396.2678704801947], ["2023-07-19T02:35:00-07:00", -396.2875975519419], ["2023-07-19T02:40:00-07:00", -396.30732462368906], ["2023-07-19T02:45:00-07:00", -396.32705169543624], ["2023-07-19T02:50:00-07:00", -396.3467787671834], ["2023-07-19T02:55:00-07:00", -396.3665058389306], ["2023-07-19T03:00:00-07:00", -396.3862512409687], ["2023-07-19T03:05:00-07:00", -396.4059966430068], ["2023-07-19T03:10:00-07:00", -396.4257420450449], ["2023-07-19T03:15:00-07:00", -396.445487447083], ["2023-07-19T03:20:00-07:00", -396.4652328491211], ["2023-07-19T03:25:00-07:00", -396.4849782511592], ["2023-07-19T03:30:00-07:00", -396.5047236531973], ["2023-07-19T03:35:00-07:00", -396.5244690552354], ["2023-07-19T03:40:00-07:00", -396.5442144572735], ["2023-07-19T03:45:00-07:00", -396.5639598593116], ["2023-07-19T03:50:00-07:00", -396.5837052613497], ["2023-07-19T03:55:00-07:00", -396.6034506633878], ["2023-07-19T04:00:00-07:00", -396.62320801988244], ["2023-07-19T04:05:00-07:00", -396.64296592772007], ["2023-07-19T04:10:00-07:00", -396.6627243887633], ["2023-07-19T04:15:00-07:00", -396.6824834011495], ["2023-07-19T04:20:00-07:00", -396.7022429648787], ["2023-07-19T04:25:00-07:00", -396.72200308181345], ["2023-07-19T04:30:00-07:00", -396.7417637500912], ["2023-07-19T04:35:00-07:00", -396.7615249697119], ["2023-07-19T04:40:00-07:00", -396.78128674067557], ["2023-07-19T04:45:00-07:00", -396.80104906484485], ["2023-07-19T04:50:00-07:00", -396.8208119403571], ["2023-07-19T04:55:00-07:00", -396.8405753672123], ["2023-07-19T05:00:00-07:00", -396.86075334995985], ["2023-07-19T05:05:00-07:00", -396.8809313327074], ["2023-07-19T05:10:00-07:00", -396.90110931545496], ["2023-07-19T05:15:00-07:00", -396.9212872982025], ["2023-07-19T05:20:00-07:00", -396.94146528095007], ["2023-07-19T05:25:00-07:00", -396.9616432636976], ["2023-07-19T05:30:00-07:00", -396.9818212464452], ["2023-07-19T05:35:00-07:00", -397.00199922919273], ["2023-07-19T05:40:00-07:00", -397.0221772119403], ["2023-07-19T05:45:00-07:00", -397.04235519468784], ["2023-07-19T05:50:00-07:00", -397.0625331774354], ["2023-07-19T05:55:00-07:00", -397.08271116018295], ["2023-07-19T06:00:00-07:00", -397.1029148194939], ["2023-07-19T06:05:00-07:00", -397.36541170813143], ["2023-07-19T06:10:00-07:00", -397.6393988225609], ["2023-07-19T06:15:00-07:00", -397.91904000379145], ["2023-07-19T06:20:00-07:00", -398.2102615330368], ["2023-07-19T06:25:00-07:00", -398.4952396247536], ["2023-07-19T06:30:00-07:00", -398.78744272328913], ["2023-07-19T06:35:00-07:00", -399.0852561984211], ["2023-07-19T06:40:00-07:00", -399.38275078870356], ["2023-07-19T06:45:00-07:00", -399.6858396027237], ["2023-07-19T06:50:00-07:00", -399.98702464438975], ["2023-07-19T06:55:00-07:00", -400.2937935683876], ["2023-07-19T07:00:00-07:00", -400.6005607340485], ["2023-07-19T07:05:00-07:00", -400.90137786604464], ["2023-07-19T07:10:00-07:00", -401.20218787528574], ["2023-07-19T07:15:00-07:00", -401.5029911790043], ["2023-07-19T07:20:00-07:00", -401.80373389460146], ["2023-07-19T07:25:00-07:00", -402.0867633614689], ["2023-07-19T07:30:00-07:00", -402.3638857398182], ["2023-07-19T07:35:00-07:00", -402.6351009104401], ["2023-07-19T07:40:00-07:00", -402.90040943957865], ["2023-07-19T07:45:00-07:00", -403.1598118338734], ["2023-07-19T07:50:00-07:00", -403.4192104730755], ["2023-07-19T07:55:00-07:00", -403.6668017003685], ["2023-07-19T08:00:00-07:00", -403.90870464779437], ["2023-07-19T08:05:00-07:00", -404.15014905668795], ["2023-07-19T08:10:00-07:00", -404.3792933020741], ["2023-07-19T08:15:00-07:00", -404.6020560506731], ["2023-07-19T08:20:00-07:00", -404.8188366089016], ["2023-07-19T08:25:00-07:00", -405.0409795437008], ["2023-07-19T08:30:00-07:00", -405.2622620854527], ["2023-07-19T08:35:00-07:00", -405.48305116035044], ["2023-07-19T08:40:00-07:00", -405.70334672369063], ["2023-07-19T08:45:00-07:00", -405.91733286716044], ["2023-07-19T08:50:00-07:00", -406.13083622790873], ["2023-07-19T08:55:00-07:00", -406.3438566122204], ["2023-07-19T09:00:00-07:00", -406.5555449221283], ["2023-07-19T09:05:00-07:00", -406.75504870153964], ["2023-07-19T09:10:00-07:00", -406.95453059114516], ["2023-07-19T09:15:00-07:00", -407.15400760807097], ["2023-07-19T09:20:00-07:00", -407.3477329108864], ["2023-07-19T09:25:00-07:00", -407.541453236714], ["2023-07-19T09:30:00-07:00", -407.72942184843123], ["2023-07-19T09:35:00-07:00", -407.9173854831606], ["2023-07-19T09:40:00-07:00", -408.1053441558033], ["2023-07-19T09:45:00-07:00", -408.2932978514582], ["2023-07-19T09:50:00-07:00", -408.4812465701252], ["2023-07-19T09:55:00-07:00", -408.6694842670113], ["2023-07-19T10:00:00-07:00", -408.8563031796366], ["2023-07-19T10:05:00-07:00", -409.03709555603564], ["2023-07-19T10:10:00-07:00", -409.21788902021945], ["2023-07-19T10:15:00-07:00", -409.3986841533333], ["2023-07-19T10:20:00-07:00", -409.57948094047606], ["2023-07-19T10:25:00-07:00", -409.76027939654887], ["2023-07-19T10:30:00-07:00", -409.9410795215517], ["2023-07-19T10:35:00-07:00", -410.1218813005835], ["2023-07-19T10:40:00-07:00", -410.296982685104], ["2023-07-19T10:45:00-07:00", -410.46638366021216], ["2023-07-19T10:50:00-07:00", -410.63578630425036], ["2023-07-19T10:55:00-07:00", -410.8051906172186], ["2023-07-19T11:00:00-07:00", -410.9736822936684], ["2023-07-19T11:05:00-07:00", -411.14243252016604], ["2023-07-19T11:10:00-07:00", -411.3168543372303], ["2023-07-19T11:15:00-07:00", -411.4910143557936], ["2023-07-19T11:20:00-07:00", -411.66517269052565], ["2023-07-19T11:25:00-07:00", -411.83932935632765], ["2023-07-19T11:30:00-07:00", -412.01348433829844], ["2023-07-19T11:35:00-07:00", -412.18251144327223], ["2023-07-19T11:40:00-07:00", -412.36316754855216], ["2023-07-19T11:45:00-07:00", -412.54893268086016], ["2023-07-19T11:50:00-07:00", -412.7344226036221], ["2023-07-19T11:55:00-07:00", -412.9199108425528], ["2023-07-19T12:00:00-07:00", -413.0919554773718], ["2023-07-19T12:05:00-07:00", -413.26942438818514], ["2023-07-19T12:10:00-07:00", -413.44662747718394], ["2023-07-19T12:15:00-07:00", -413.6238288227469], ["2023-07-19T12:20:00-07:00", -413.80102842487395], ["2023-07-19T12:25:00-07:00", -413.978226268664], ["2023-07-19T12:30:00-07:00", -414.15025987662375], ["2023-07-19T12:35:00-07:00", -414.32771548070014], ["2023-07-19T12:40:00-07:00", -414.49949383176863], ["2023-07-19T12:45:00-07:00", -414.6717882845551], ["2023-07-19T12:50:00-07:00", -414.84411683119833], ["2023-07-19T12:55:00-07:00", -415.0158899370581], ["2023-07-19T13:00:00-07:00", -415.1874516848475], ["2023-07-19T13:05:00-07:00", -415.35929785110056], ["2023-07-19T13:10:00-07:00", -415.5365853253752], ["2023-07-19T13:15:00-07:00", -415.71355327405035], ["2023-07-19T13:20:00-07:00", -415.8905212227255], ["2023-07-19T13:25:00-07:00", -416.06748917140067], ["2023-07-19T13:30:00-07:00", -416.2336420211941], ["2023-07-19T13:35:00-07:00", -416.39438732899725], ["2023-07-19T13:40:00-07:00", -416.5551326368004], ["2023-07-19T13:45:00-07:00", -416.7104703877121], ["2023-07-19T13:50:00-07:00", -416.8712156806141], ["2023-07-19T13:55:00-07:00", -417.0319609735161], ["2023-07-19T14:00:00-07:00", -417.1924283001572], ["2023-07-19T14:05:00-07:00", -417.3528956267983], ["2023-07-19T14:10:00-07:00", -417.50796490348876], ["2023-07-19T14:15:00-07:00", -417.65763613022864], ["2023-07-19T14:20:00-07:00", -417.8019093070179], ["2023-07-19T14:25:00-07:00", -417.9515805337578], ["2023-07-19T14:30:00-07:00", -418.10754249431193], ["2023-07-19T14:35:00-07:00", -418.2690528575331], ["2023-07-19T14:40:00-07:00", -418.418724084273], ["2023-07-19T14:45:00-07:00", -418.5683952961117], ["2023-07-19T14:50:00-07:00", -418.7180665079504], ["2023-07-19T14:55:00-07:00", -418.86773771978915], ["2023-07-19T15:00:00-07:00", -419.0171767119318], ["2023-07-19T15:05:00-07:00", -419.1666157040745], ["2023-07-19T15:10:00-07:00", -419.3160546962172], ["2023-07-19T15:15:00-07:00", -419.46549368835986], ["2023-07-19T15:20:00-07:00", -419.61493268050253], ["2023-07-19T15:25:00-07:00", -419.75898213125765], ["2023-07-19T15:30:00-07:00", -419.9030315820128], ["2023-07-19T15:35:00-07:00", -420.0416915062815], ["2023-07-19T15:40:00-07:00", -420.17496188916266], ["2023-07-19T15:45:00-07:00", -420.29745320416987], ["2023-07-19T15:50:00-07:00", -420.42533406056464], ["2023-07-19T15:55:00-07:00", -420.55860445834696], ["2023-07-19T16:00:00-07:00", -420.6970859263092], ["2023-07-19T16:05:00-07:00", -420.8301854971796], ["2023-07-19T16:10:00-07:00", -420.9632866624743], ["2023-07-19T16:15:00-07:00", -421.09638958610594], ["2023-07-19T16:20:00-07:00", -421.2241117898375], ["2023-07-19T16:25:00-07:00", -421.35183575190604], ["2023-07-19T16:30:00-07:00", -421.47828016616404], ["2023-07-19T16:35:00-07:00", -421.6110505256802], ["2023-07-19T16:40:00-07:00", -421.73877974785864], ["2023-07-19T16:45:00-07:00", -421.8665107283741], ["2023-07-19T16:50:00-07:00", -421.9888609889895], ["2023-07-19T16:55:00-07:00", -422.10583053715527], ["2023-07-19T17:00:00-07:00", -422.22264395840466], ["2023-07-19T17:05:00-07:00", -422.338588738814], ["2023-07-19T17:10:00-07:00", -422.45453527756035], ["2023-07-19T17:15:00-07:00", -422.5704835820943], ["2023-07-19T17:20:00-07:00", -422.69180870987475], ["2023-07-19T17:25:00-07:00", -422.8185106460005], ["2023-07-19T17:30:00-07:00", -422.95058939792216], ["2023-07-19T17:35:00-07:00", -423.082669923082], ["2023-07-19T17:40:00-07:00", -423.21475220657885], ["2023-07-19T17:45:00-07:00", -423.3626849744469], ["2023-07-19T17:50:00-07:00", -423.5108959469944], ["2023-07-19T17:55:00-07:00", -423.66448373533785], ["2023-07-19T18:00:00-07:00", -423.81796678341925], ["2023-07-19T18:05:00-07:00", -423.97145158983767], ["2023-07-19T18:10:00-07:00", -424.1249381545931], ["2023-07-19T18:15:00-07:00", -424.27842649258673], ["2023-07-19T18:20:00-07:00", -424.43728789128363], ["2023-07-19T18:25:00-07:00", -424.59615104831755], ["2023-07-19T18:30:00-07:00", -424.75501597858965], ["2023-07-19T18:35:00-07:00", -424.9138826671988], ["2023-07-19T18:40:00-07:00", -425.0727511141449], ["2023-07-19T18:45:00-07:00", -425.23162133432925], ["2023-07-19T18:50:00-07:00", -425.3904933128506], ["2023-07-19T18:55:00-07:00", -425.54936704970896], ["2023-07-19T19:00:00-07:00", -425.7082654926926], ["2023-07-19T19:05:00-07:00", -425.72709657996893], ["2023-07-19T19:10:00-07:00", -425.74592824094], ["2023-07-19T19:15:00-07:00", -425.76476047746837], ["2023-07-19T19:20:00-07:00", -425.7835932876915], ["2023-07-19T19:25:00-07:00", -425.8024266716093], ["2023-07-19T19:30:00-07:00", -425.82126063108444], ["2023-07-19T19:35:00-07:00", -425.8400951642543], ["2023-07-19T19:40:00-07:00", -425.8589302729815], ["2023-07-19T19:45:00-07:00", -425.87776595540345], ["2023-07-19T19:50:00-07:00", -425.8966022115201], ["2023-07-19T19:55:00-07:00", -425.91543904319406], ["2023-07-19T20:00:00-07:00", -425.9342749901116], ["2023-07-19T20:05:00-07:00", -425.9531120862812], ["2023-07-19T20:10:00-07:00", -425.9719503317028], ["2023-07-19T20:15:00-07:00", -425.99078972637653], ["2023-07-19T20:20:00-07:00", -426.0096302703023], ["2023-07-19T20:25:00-07:00", -426.02847196161747], ["2023-07-19T20:30:00-07:00", -426.0473148021847], ["2023-07-19T20:35:00-07:00", -426.066158792004], ["2023-07-19T20:40:00-07:00", -426.08500393107533], ["2023-07-19T20:45:00-07:00", -426.10385021939874], ["2023-07-19T20:50:00-07:00", -426.1226976569742], ["2023-07-19T20:55:00-07:00", -426.1415462438017], ["2023-07-19T21:00:00-07:00", -426.1604014914483], ["2023-07-19T21:05:00-07:00", -426.17925673909485], ["2023-07-19T21:10:00-07:00", -426.1981119867414], ["2023-07-19T21:15:00-07:00", -426.216967234388], ["2023-07-19T21:20:00-07:00", -426.23582248203456], ["2023-07-19T21:25:00-07:00", -426.25467772968113], ["2023-07-19T21:30:00-07:00", -426.2735329773277], ["2023-07-19T21:35:00-07:00", -426.2923882249743], ["2023-07-19T21:40:00-07:00", -426.31124347262084], ["2023-07-19T21:45:00-07:00", -426.3300987202674], ["2023-07-19T21:50:00-07:00", -426.348953967914], ["2023-07-19T21:55:00-07:00", -426.36780921556056], ["2023-07-19T22:00:00-07:00", -426.38667065650225], ["2023-07-19T22:05:00-07:00", -426.4055326730013], ["2023-07-19T22:10:00-07:00", -426.42439526319504], ["2023-07-19T22:15:00-07:00", -426.4432584270835], ["2023-07-19T22:20:00-07:00", -426.46212216466665], ["2023-07-19T22:25:00-07:00", -426.48098647780716], ["2023-07-19T22:30:00-07:00", -426.4998513646424], ["2023-07-19T22:35:00-07:00", -426.5187168251723], ["2023-07-19T22:40:00-07:00", -426.53758285939693], ["2023-07-19T22:45:00-07:00", -426.5564494691789], ["2023-07-19T22:50:00-07:00", -426.5753166526556], ["2023-07-19T22:55:00-07:00", -426.5941959284246], ["2023-07-19T23:00:00-07:00", -426.61358475126326], ["2023-07-19T23:05:00-07:00", -426.6329735741019], ["2023-07-19T23:10:00-07:00", -426.6523623969406], ["2023-07-19T23:15:00-07:00", -426.67175121977925], ["2023-07-19T23:20:00-07:00", -426.6911400426179], ["2023-07-19T23:25:00-07:00", -426.7105288654566], ["2023-07-19T23:30:00-07:00", -426.72991768829525], ["2023-07-19T23:35:00-07:00", -426.7493065111339], ["2023-07-19T23:40:00-07:00", -426.7686953339726], ["2023-07-19T23:45:00-07:00", -426.78808415681124], ["2023-07-19T23:50:00-07:00", -426.8074729796499], ["2023-07-19T23:55:00-07:00", -426.82686180248857], ["2023-07-20T00:00:00-07:00", -426.8463852927089], ["2023-07-20T00:05:00-07:00", -426.8659087829292]] \ No newline at end of file diff --git a/smart_control/notebooks/SAC_Demo.ipynb b/smart_control/notebooks/SAC_Demo.ipynb index bd8b7ba3..d22563f7 100644 --- a/smart_control/notebooks/SAC_Demo.ipynb +++ b/smart_control/notebooks/SAC_Demo.ipynb @@ -52,12 +52,25 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 2, "metadata": { "cellView": "form", "id": "YchP7JXbSXS1" }, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2025-01-19 19:32:12.003677: E external/local_xla/xla/stream_executor/cuda/cuda_dnn.cc:9261] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered\n", + "2025-01-19 19:32:12.003724: E external/local_xla/xla/stream_executor/cuda/cuda_fft.cc:607] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered\n", + "2025-01-19 19:32:12.005910: E external/local_xla/xla/stream_executor/cuda/cuda_blas.cc:1515] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered\n", + "2025-01-19 19:32:12.016121: I tensorflow/core/platform/cpu_feature_guard.cc:182] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.\n", + "To enable the following instructions: AVX2 AVX512F FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.\n", + "2025-01-19 19:32:12.880106: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT\n" + ] + } + ], "source": [ "# @title Imports\n", "from dataclasses import dataclass\n", @@ -70,6 +83,7 @@ "from typing import Final, Sequence\n", "from typing import Optional\n", "from typing import Union, cast\n", + "os.environ['WRAPT_DISABLE_EXTENSIONS'] = 'true'\n", "\n", "from absl import logging\n", "import gin\n", @@ -132,7 +146,9 @@ "from tf_agents.trajectories import time_step as ts\n", "from tf_agents.trajectories import trajectory as trajectory_lib\n", "from tf_agents.trajectories import trajectory\n", - "from tf_agents.typing import types" + "from tf_agents.typing import types\n", + "\n", + "gin.enter_interactive_mode()" ] }, { @@ -151,10 +167,10 @@ " logging.info(*args)\n", " print(*args)\n", "\n", - "data_path = \"third_party/py/smart_buildings/smart_control/configs/resources/sb1/\" #@param {type:\"string\"}\n", - "metrics_path = \"/usr/local/google/home/metrics\" #@param {type:\"string\"}\n", - "output_data_path = '/usr/local/google/home/smart_buildings/smart_control/sb_colab_demo' #@param {type:\"string\"}\n", - "root_dir = \"/usr/local/google/root\" #@param {type:\"string\"}\n", + "data_path = \"/home/gabriel-user/projects/sbsim/smart_control/configs/resources/sb1/\" #@param {type:\"string\"}\n", + "metrics_path = \"/home/gabriel-user/projects/sbsim/smart_control/metrics/\" #@param {type:\"string\"}\n", + "output_data_path = '/home/gabriel-user/projects/sbsim/smart_control/output_data' #@param {type:\"string\"}\n", + "root_dir = \"/home/gabriel-user/projects/sbsim/\" #@param {type:\"string\"}\n", "\n", "\n", "@gin.configurable\n", @@ -1001,70 +1017,56 @@ "name": "stdout", "output_type": "stream", "text": [ - "/home/trigo/sbsim/sbsim/smart_control/configs/resources/sb1/sim_config.gin\n", - "/home/trigo/sbsim/sbsim/smart_control/configs/resources/sb1/sim_config.gin\n" + "/home/gabriel-user/projects/sbsim/smart_control/configs/resources/sb1/sim_config.gin\n", + "/home/gabriel-user/projects/sbsim/smart_control/configs/resources/sb1/sim_config.gin\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "/home/trigo/sbsim/sbsim/smart_control/simulator/building_utils.py:283: UserWarning: Connected components is showing that there are 4 or fewer\n", + "/home/gabriel-user/projects/sbsim/smart_control/simulator/building_utils.py:283: UserWarning: Connected components is showing that there are 4 or fewer\n", " rooms in your building. You may have your 0's and 1's inverted in the\n", " floor_plan. Remember that for the connectedComponents function,\n", " 0's must code for exterior space and exterior or interior walls,\n", " and 1's must code for interior space.\n", " warnings.warn(\"\"\"Connected components is showing that there are 4 or fewer\n", - "2024-09-10 15:33:00.980440: I external/local_xla/xla/stream_executor/cuda/cuda_executor.cc:901] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n", - "2024-09-10 15:33:00.980533: I external/local_xla/xla/stream_executor/cuda/cuda_executor.cc:901] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n", - "2024-09-10 15:33:00.980722: W tensorflow/core/common_runtime/gpu/gpu_device.cc:2256] Cannot dlopen some GPU libraries. Please make sure the missing libraries mentioned above are installed properly if you would like to use GPU. Follow the guide at https://www.tensorflow.org/install/gpu for how to download and setup the required libraries for your platform.\n", + "2025-01-19 19:32:29.257087: W tensorflow/core/common_runtime/gpu/gpu_device.cc:2256] Cannot dlopen some GPU libraries. Please make sure the missing libraries mentioned above are installed properly if you would like to use GPU. Follow the guide at https://www.tensorflow.org/install/gpu for how to download and setup the required libraries for your platform.\n", "Skipping registering GPU devices...\n", - "/home/trigo/sbsim/sbsim/smart_control/reward/electricity_energy_cost.py:147: UnitStrippedWarning: The unit of the quantity is stripped when downcasting to ndarray.\n", + "/home/gabriel-user/projects/sbsim/smart_control/reward/electricity_energy_cost.py:147: UnitStrippedWarning: The unit of the quantity is stripped when downcasting to ndarray.\n", " np.array(carbon_emission_rates) / 1.0e6 / 3600.0\n", - "/home/trigo/sbsim/sbsim/smart_control/reward/electricity_energy_cost.py:152: UnitStrippedWarning: The unit of the quantity is stripped when downcasting to ndarray.\n", + "/home/gabriel-user/projects/sbsim/smart_control/reward/electricity_energy_cost.py:152: UnitStrippedWarning: The unit of the quantity is stripped when downcasting to ndarray.\n", " np.array(weekday_energy_prices)\n", - "/home/trigo/sbsim/sbsim/smart_control/reward/electricity_energy_cost.py:159: UnitStrippedWarning: The unit of the quantity is stripped when downcasting to ndarray.\n", + "/home/gabriel-user/projects/sbsim/smart_control/reward/electricity_energy_cost.py:159: UnitStrippedWarning: The unit of the quantity is stripped when downcasting to ndarray.\n", " np.array(weekend_energy_prices)\n", - "/home/trigo/sbsim/sbsim/smart_control/simulator/building_utils.py:283: UserWarning: Connected components is showing that there are 4 or fewer\n", + "/home/gabriel-user/projects/sbsim/smart_control/simulator/building_utils.py:283: UserWarning: Connected components is showing that there are 4 or fewer\n", " rooms in your building. You may have your 0's and 1's inverted in the\n", " floor_plan. Remember that for the connectedComponents function,\n", " 0's must code for exterior space and exterior or interior walls,\n", " and 1's must code for interior space.\n", " warnings.warn(\"\"\"Connected components is showing that there are 4 or fewer\n", - "/home/trigo/sbsim/sbsim/smart_control/reward/electricity_energy_cost.py:147: UnitStrippedWarning: The unit of the quantity is stripped when downcasting to ndarray.\n", + "/home/gabriel-user/projects/sbsim/smart_control/reward/electricity_energy_cost.py:147: UnitStrippedWarning: The unit of the quantity is stripped when downcasting to ndarray.\n", " np.array(carbon_emission_rates) / 1.0e6 / 3600.0\n", - "/home/trigo/sbsim/sbsim/smart_control/reward/electricity_energy_cost.py:152: UnitStrippedWarning: The unit of the quantity is stripped when downcasting to ndarray.\n", + "/home/gabriel-user/projects/sbsim/smart_control/reward/electricity_energy_cost.py:152: UnitStrippedWarning: The unit of the quantity is stripped when downcasting to ndarray.\n", " np.array(weekday_energy_prices)\n", - "/home/trigo/sbsim/sbsim/smart_control/reward/electricity_energy_cost.py:159: UnitStrippedWarning: The unit of the quantity is stripped when downcasting to ndarray.\n", + "/home/gabriel-user/projects/sbsim/smart_control/reward/electricity_energy_cost.py:159: UnitStrippedWarning: The unit of the quantity is stripped when downcasting to ndarray.\n", " np.array(weekend_energy_prices)\n", - "/home/trigo/sbsim/sbsim/smart_control/simulator/building_utils.py:283: UserWarning: Connected components is showing that there are 4 or fewer\n", + "/home/gabriel-user/projects/sbsim/smart_control/simulator/building_utils.py:283: UserWarning: Connected components is showing that there are 4 or fewer\n", " rooms in your building. You may have your 0's and 1's inverted in the\n", " floor_plan. Remember that for the connectedComponents function,\n", " 0's must code for exterior space and exterior or interior walls,\n", " and 1's must code for interior space.\n", " warnings.warn(\"\"\"Connected components is showing that there are 4 or fewer\n", - "/home/trigo/sbsim/sbsim/smart_control/reward/electricity_energy_cost.py:147: UnitStrippedWarning: The unit of the quantity is stripped when downcasting to ndarray.\n", + "/home/gabriel-user/projects/sbsim/smart_control/reward/electricity_energy_cost.py:147: UnitStrippedWarning: The unit of the quantity is stripped when downcasting to ndarray.\n", " np.array(carbon_emission_rates) / 1.0e6 / 3600.0\n", - "/home/trigo/sbsim/sbsim/smart_control/reward/electricity_energy_cost.py:152: UnitStrippedWarning: The unit of the quantity is stripped when downcasting to ndarray.\n", + "/home/gabriel-user/projects/sbsim/smart_control/reward/electricity_energy_cost.py:152: UnitStrippedWarning: The unit of the quantity is stripped when downcasting to ndarray.\n", " np.array(weekday_energy_prices)\n", - "/home/trigo/sbsim/sbsim/smart_control/reward/electricity_energy_cost.py:159: UnitStrippedWarning: The unit of the quantity is stripped when downcasting to ndarray.\n", + "/home/gabriel-user/projects/sbsim/smart_control/reward/electricity_energy_cost.py:159: UnitStrippedWarning: The unit of the quantity is stripped when downcasting to ndarray.\n", " np.array(weekend_energy_prices)\n" ] } ], "source": [ - "@gin.configurable\n", - "def to_timestamp(date_str: str) -> pd.Timestamp:\n", - " \"\"\"Utilty macro for gin config.\"\"\"\n", - " return pd.Timestamp(date_str)\n", - "\n", - "\n", - "@gin.configurable\n", - "def local_time(time_str: str) -> pd.Timedelta:\n", - " \"\"\"Utilty macro for gin config.\"\"\"\n", - " return pd.Timedelta(time_str)\n", - "\n", - "\n", "@gin.configurable\n", "def enumerate_zones(\n", " n_building_x: int, n_building_y: int\n", @@ -1078,30 +1080,6 @@ "\n", "\n", "@gin.configurable\n", - "def set_observation_normalization_constants(\n", - " field_id: str, sample_mean: float, sample_variance: float\n", - ") -> smart_control_normalization_pb2.ContinuousVariableInfo:\n", - " return smart_control_normalization_pb2.ContinuousVariableInfo(\n", - " id=field_id, sample_mean=sample_mean, sample_variance=sample_variance\n", - " )\n", - "\n", - "\n", - "@gin.configurable\n", - "def set_action_normalization_constants(\n", - " min_native_value,\n", - " max_native_value,\n", - " min_normalized_value,\n", - " max_normalized_value,\n", - ") -> bounded_action_normalizer.BoundedActionNormalizer:\n", - " return bounded_action_normalizer.BoundedActionNormalizer(\n", - " min_native_value,\n", - " max_native_value,\n", - " min_normalized_value,\n", - " max_normalized_value,\n", - " )\n", - "\n", - "\n", - "@gin.configurable\n", "def get_zones_from_config(\n", " configuration_path: str,\n", ") -> Sequence[smart_control_building_pb2.ZoneInfo]:\n", @@ -1668,31 +1646,208 @@ "name": "stdout", "output_type": "stream", "text": [ - "Step 0 Sim Time: 2023-07-06 00:05, Reward: -0.02, Return: -0.02, Mean Step Time: 14.57 s, Episode Time: 14.57 s\n", - "Step 1 Sim Time: 2023-07-06 00:10, Reward: -0.02, Return: -0.04, Mean Step Time: 7.73 s, Episode Time: 15.46 s\n", - "Step 2 Sim Time: 2023-07-06 00:15, Reward: -0.02, Return: -0.06, Mean Step Time: 5.44 s, Episode Time: 16.33 s\n", - "Step 3 Sim Time: 2023-07-06 00:20, Reward: -0.02, Return: -0.08, Mean Step Time: 4.30 s, Episode Time: 17.20 s\n", - "Step 4 Sim Time: 2023-07-06 00:25, Reward: -0.02, Return: -0.10, Mean Step Time: 3.63 s, Episode Time: 18.14 s\n", - "Step 5 Sim Time: 2023-07-06 00:30, Reward: -0.02, Return: -0.12, Mean Step Time: 3.18 s, Episode Time: 19.05 s\n", - "Step 6 Sim Time: 2023-07-06 00:35, Reward: -0.02, Return: -0.14, Mean Step Time: 2.84 s, Episode Time: 19.91 s\n", - "Step 7 Sim Time: 2023-07-06 00:40, Reward: -0.02, Return: -0.16, Mean Step Time: 2.60 s, Episode Time: 20.80 s\n" + "Cumulative reward: -22.74\n" ] }, { - "ename": "KeyboardInterrupt", - "evalue": "", + "name": "stderr", + "output_type": "stream", + "text": [ + "/tmp/ipykernel_58992/713712357.py:203: UserWarning: No artists with labels found to put in legend. Note that artists whose label start with an underscore are ignored when legend() is called with no argument.\n", + " ax1.legend(prop={'size': 10})\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAB98AAAe0CAYAAAD4VtK4AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdeXjcVdn/8c/sS/Zk0qRLulPKDq1QUAotm0CVxbYsglABUUF9HtkRELCIbD8EAYtULIpFVhEEHhAQKBQEgaIsZSuUljZt9nX2mfP7Y5JJpllmkiaZpHm/rmuu+c75npm5T5rcnZl7zjkWY4wRAAAAAAAAAAAAAADoN2u2AwAAAAAAAAAAAAAAYKSj+A4AAAAAAAAAAAAAwHai+A4AAAAAAAAAAAAAwHai+A4AAAAAAAAAAAAAwHai+A4AAAAAAAAAAAAAwHai+A4AAAAAAAAAAAAAwHai+A4AAAAAAAAAAAAAwHai+A4AAAAAAAAAAAAAwHai+A4AAAAAAAAAAAAAwHai+A4AAAAAAAAAAAAAwHai+A5gSL344ouyWCx6+OGHsx0KgBGuPZ+8+OKL2Q4FwDBFngAAAAAAAMBQovgOYLtZLJaMLtn44PvVV1/VgQceKK/Xq/Lycv3kJz9RS0tLSp8lS5b0GvemTZu6PO5tt92mgoICRSIRSVI8HtcNN9ygKVOmyO12a88999Rf/vKXbmOKx+NatmyZ9t57b3k8HpWUlOiQQw7Rf/7zn7TjeeCBB3Tqqadqp512ksVi0bx587rt9+9//1s/+tGPtNtuuyknJ0cTJ07UCSecoI8//jjtc3T2+OOPa9asWXK73Zo4caKuvPJKRaPRLv0aGhp09tlnq7S0VDk5OZo/f77efvvtPj0XRqd77rmnx7+9Sy65ZMCeJxQK6eKLL9a4cePk8Xg0Z84cPfvssyl91q9f32su+N73vtflcePxuEpLS3XDDTck29auXasjjzxSubm5Ki4u1ne+8x1VV1en3O+qq67q9blWr16ddkx9+bvL9G+5J5mMqf3nkWkuBDJFnuhfnqisrNQll1yi+fPnKy8vr8fXYn6/X3fccYeOOOIIjR07Vnl5edpnn320bNkyxWKxjH9+Q5mTAEl69913tWjRIk2aNElut1vjx4/X4Ycfrttuu61fj/fb3/5W99xzT5/uk8nv8rx583r8O3Y4HN0+7vnnn69dd901eTuT/CQl8s2dd96pvffeW7m5uSorK9NRRx2lV199NeMx3X333dpll13kdru100479fjz3LRpk0444QQVFhYqPz9fxx57rD777LOMnyfTMUmZvacDukOeGPg8sWzZMi1evFgTJ06UxWLRkiVLuu33/PPP64wzztCMGTPk9Xo1depUnXXWWaqsrMzoedoNVU7C6DLQuWEgZPI73Nv7IovFopUrV3Z53HfffVcWi0VvvPFGsi3T1+LPPvts8v/foqIiLVq0SOvXr894TEP5OQKfX2KgkScGP0+88cYbOuecczR79mw5HA5ZLJZu+23cuFFXX3219ttvPxUVFcnn82nevHl67rnnMnqedkP+2aYBgO107733plwOP/xwI6lL+5YtW8wLL7xgJJmHHnpo0ONas2aNcbvdZp999jHLli0zl112mXG5XObII49M6ffqq692ifVPf/qT8Xq9Ztddd+32sb/+9a+bRYsWJW9fcsklRpL53ve+Z+666y6zYMECI8n85S9/6XLf008/3djtdnPGGWeY5cuXm1tuucWcfvrp5h//+EfaMR188MEmNzfXzJ8/3xQVFZmDDz64234LFy405eXl5sc//rFZvny5Wbp0qSkrKzM5OTnm3XffTfs8xhjz1FNPGYvFYubPn2/uuusu8+Mf/9hYrVbzgx/8IKVfLBYzX/3qV01OTo656qqrzO2332523XVXk5eXZz7++OOMnguj14oVK4wk84tf/KLL3+GaNWt6vW8sFjOBQMDEYrG0z3PSSScZu91uLrjgAvO73/3OHHDAAcZut5uXX3452aelpaVLDPfee6855ZRTjCTz4IMPdnnc1157zUgy7733njHGmI0bNxqfz2emTZtmbr31VvPLX/7SFBUVmb322suEQqHk/f7zn/90+1wVFRWmqKgopW9PY8/07y7Tv+WeZDomY/qWC4FMkSf6lyfaX3PttNNO5oADDjCSzAsvvNCl37vvvmssFos57LDDzA033GDuvPNOc/zxxxtJ5rTTTkv7czNmaHMSYIwxq1evNk6n00yfPt0sXbrULF++3Pz85z83RxxxhJk2bVq/HnO33Xbr8bV1dzL9Xf7HP/7R5e/4zjvvNJLM0Ucf3e1j77zzzuaCCy5I3s4kPxljzHnnnWckmVNPPdX87ne/M9dff72ZOnWqsdvt5vXXX087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1P9S9ttvP/n9/j7vM4/RqbGxUTU1NSmXzpYuXaonn3xSF1xwga699lo5nc6MH3vNmjWaMWOG8vPzU9rb/0bfeeedHu97//33Kx6Pd5uftmzZojVr1ujoo4+WlNh7qaqqqsvfTftz9ZZ3JGnlypWqqKjQQQcdlG5IGf/d9eVvedOmTdpll1106aWXprRlOqZMcyHQX+SJvuWJ7bVlyxZJ6vK64dBDD9Whhx6a0jYYOQnozaRJk/TWW2/pvffeS9t32bJlmjRpkn72s5/p//2//6eKigqdc845uuOOO5J9brnlFk2YMEEzZ87Uvffeq3vvvVeXXXZZj4+5Pb/L1dXVevbZZ3XccccpJyeny/mnnnpKhx9+uOx2e/K5MslP7Xs833PPPVq5cqU2bNig//73v1qyZImKiop09tln9/JT6nlMs2fPltVqTZ6Px+P673//22MeW7dunZqbm5Ntp512WpfXBpmOaXve0wHkiYHPE9urpaVFLS0tXV5b3H777dpll11S9podrJwE9CU39NUJJ5yg5uZm/epXv9IJJ5yge+65R1dffXWv99ne3+GVK1fK4/HoW9/6VpdzzzzzjCwWi4444ghJmeelUCgkKZEztuX1erV58+bke4XuDNbnCHx+iaFCnhj8PDEQtmzZIq/XK6/Xm2wbTp9t2jPuCQADKBgM6p133kl+MF5UVKT/+Z//0Xvvvafdd999ux+/srJSkjR27Ngu58aOHauXX365x/s+88wzqq2t7fHLAE899ZS++93vpjxXWVmZLBZLl+eRpM2bN0uS1q1bJ2OM7r//ftntdt1www0qKCjQrbfeqpNOOkn5+fk68sgj+zbQPli5cqU2bdqkX/ziF2n7pvv5tY+pvW93RYDO499jjz36GzZGicMOO6xLmzEmeRwMBvXmm292+6IuncrKyh5/lyWl/D5va+XKlRo7dqwOOeSQLueeeuopud3u5Ll0fzd1dXUKhUJyuVxdzr///vv673//q4suuqhLLulpTJn83fXlb7mn58l0TJnmQqC/yBN9yxPbIxwO65ZbbtGUKVO07777pu0/VDkJaHfBBRfoqKOO0t5776399ttPc+fO1aGHHqr58+fL4XCk9H3ppZdS8sKPfvQjHXnkkbr55pt17rnnSpKOO+44XX755fL5fDr11FPTPv/2/C4/8MADikaj3b7X8Pv9evHF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1q1bl9I2GDkJ6M0LL7zQ7eyQp556SpK08847S+qYWdK5b2Njo1asWNHlvjk5Od1+8bc7/fldXrNmjdauXdtrzth2eysp8/zU/oHx/fffn3L/t99+Wx999JH22WefXsd0yCGHqLi4WMuWLUtpX7Zsmbxeb0o+W7Rokf7973+nfID10Ucf6Z///GeXPLZhwwZ9+OGH/RpTf97TAe3IEwOfJ/qitbVVRx99tDZt2qSnnnpKO+20U499a2pq9OGHH8rv9yfbBisnAZnmhvz8fPl8Pq1atSqlX+f3uwOlP7/D9913nyZOnKgDDzywy7mtW7fq7bff7vJeZHtfi990002qrKzU+eefn3ZMg/E5Ap9fYqiQJ4YmT/TFjTfeqJtuukk/+9nP9D//8z899htWn20aABhg5557rukpvbzwwgtGknnooYdS2j///HMjyaxYsSLZ9vTTTxtJZv78+WbZsmXmggsuMOXl5WbatGnm4IMPThvHW2+9ZVwul9lnn33MsmXLzGWXXWbcbrc54ogjuu1/2223GUnm6aef7vb8aaedZubNm9ftuQsvvNBIMmeffbZZvny5WbBggZFkVq5cmdJvy5YtZuzYsSYvL89ceeWV5uabbzYzZswwHo/HvPPOO2nH9NJLL5mlS5eapUuXmjFjxpjJkycnb7/00kvJfv/zP/9jJJlvfvOb5t577+1y6WzFihVdfvbGGPP3v//dWCwWc8ghh5i77rrL/OQnPzFWq9V873vfS+kXjUbN/vvvb3Jzc83VV19t7rjjDrPbbruZvLw88+GHH6YdE0a39t+/f//7392e7ylndD73wgsvpH2exYsXG7vdbi688ELzu9/9znz1q181drs95e+mXTQaNWVlZWb//ffv9rE+++wzI8m8+OKLXc5t2LDBlJSUmGnTppnf/OY35tprrzVFRUVmjz32MMFgsEv/v//970aSufPOO9OOYdsYM/27y/RvuT0Pn3766f0eU6a5EOgL8kT/8oQxJvka4aSTTjKSzBlnnJFsa7d+/XpTUFBgPB6PueOOO7q8ZvjPf/6T8piTJk0ykyZN6vLzGOicBPRmt912M1OmTDHnnXeeueuuu8ztt99uvv3tbxubzWYmT55s6uvrjTHGfPjhh8bpdJo99tjD3H777ea6664z06ZNM3vttZeRZD7//PPkY55zzjnGYrGYpUuXmr/85S/m+eef7zWGvv4un3/++UZSj6+PDzroILNkyZJuz2Wanw4//HAjyRx//PFm2bJl5uc//7kpKioyOTk5Gb0uv+OOO4wks2jRIrN8+XJz2mmnGUnml7/8ZUq/pqYmM23aNDNmzBhzww03mF//+temoqLCjBs3zlRVVaX0Pfjgg7t9b5jpmPr6ng5oR54YnDzx+OOPJ19LOJ1Os88++yRvd37NcOyxxyZfe2z72uLRRx9Necwrr7yy29drg5GTgExzgzHGXHLJJUaSOfPMM82yZcvMySefbGbPnm0kmSuvvDLZr/13uLq6OuW52t/HdM4j3enr7/C7775rJJlLLrmk28f7wx/+YDwej/H7/V3OZZqX7r33XnPccceZm2++2dx1113mhBNOMJLMWWed1etY2g3G5wh8fomhQp4Ymjyxfv365GuIOXPmGEnJ23/605+S/f76178aSWannXbqts6xZcuWZN/h9NkmxXcAA26giu/GGPP//t//M+PHjzcul8t87WtfM2+++aY5+OCDMyq+G2PMyy+/bL761a8at9ttSktLzbnnnmuampq67bv//vubMWPGmGg02uVcPB5P/ufWnVgsZq699lozadIk43Q6zW677Wb+/Oc/d9t33bp15vjjjzf5+fnG4/GYQw45xLzxxhsZjaf9P+ruLp3/Q2//kKunS2c9vXg1xphHH33U7L333sblcpkJEyaYyy+/3ITD4S796urqzJlnnmlKSkqM1+s1Bx98cI9FEqCzoSqqBQKB5Bd4XC6X2XfffXv8ok37F39+85vfdHv+9ttvNwUFBSYSiXR7/r333jNHHHGE8Xq9prCw0JxyyikpLwQ7O+mkk4zD4TC1tbVpx7CtvvzdZfK33NML1L6MqS+5EMgUeaL/eSKT1wLtP6NMXl8Y033x3ZiBz0lAb/7v//7PnHHGGWbmzJkmNzfXOJ1OM336dPPjH//YbN26NaXv448/bvbcc0/jdrvN5MmTzfXXX2/+8Ic/dPmQa8uWLWbBggUmLy/PSMro/Uamv8uxWMyMHz/ezJo1q9vHaWhoMHa73Tz44IPdns80P/n9fvOLX/zC7Lrrrsbj8ZiCggLzjW98w6xZsybtWNrdddddZueddzZOp9NMmzbN/PrXvzbxeLxLv40bN5pFixaZ/Px8k5uba77xjW+YTz75pEu/norvfcm5fXlPB7Qj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Htnqtl5AUCWCwhMIDosvSsiH/LPcfWgsgaGV/1n+vuj3gMDwUzR68QUl30VERERERERERERERERETpGCvDQK8tLIOvqXx7p+AaH/3ovelqR3/VNL31csJd9FRERERERERERERERERE5D1oJsctL3kpO+16v6/oERtpnzRT8r/zOj/oRkfUjRPj8/pYt9SX9NEREREREREREREREREZH/gML8DLLzM8hO2+VFbQsBwVElkvJFS91XjqtNk6YtT/pY/4uUfBcREREREREREREREREROesYCnKPUZB7DI5t/7c0KYm67YdU3LDOYH4VPQAREREREREREREREREREZEznZLvIiIiIiIiIiIiIiIiIiIi5aTku4iIiIiIiIiIiIiIiIiISDkp+V4GxpiKHoKInKasVis5OTlYrdaKHoqInKYUJ0TEE8UJEXFHMUJEPFGcEBFPFCdExBOr1Upubi6gvGhpWYz+YqW2d+9eatSoUdHDEBERERERERERERERERE5afbs2UP16tUrehhnDCXfy8BqtbJ//34iIyOxWCwVPRwREREREREREREREREREZ8xxpCenk7VqlXx89Ni6t5S8l1ERERERERERERERERERKSc9DEFERERERERERERERERERGRclLyXUREREREREREREREREREpJyUfBcRERERERERERERERERESmngNIeMGpU+Tq8805o0KB8bYiIiIiIiIiIiIiIiIiIiJxOLMYYU5oD/MoxV95igdWroXv3srchIiIiIiIiIiIiIiIiIiJyuilTKv3118FqLd13SgqULs0vIiIiIiIiIiIiIiIiIiJyZih18j0qCoKCSt+Rv3/RsYGBpT9WRERERERERERERERERETkdFbqZedFRERERERERERERERERETEXjnu4C4iIiIiIiIiIiIiIiIiIiIAAb5sLCMDjh51fm/3mjV92ZOIiIiIiIiIiIiIiIiIiMjpo9zJ95wcePhhePllSE11Xa+wsLw9iYiIiIiIiIiIiIiIiIiInJ7KnXy/7TZ49VXo3x86dYKYGB+MSkT+k9auXUu3bt14++23GThwYEUPR0TOcMUxZc2aNXTt2rWihyMipxnFCBEREREREREROdXKfc/3d9+Fm2+Gd96Bu++GIUOcf4vIf5PFYvHqe+3atad8bOvWrePCCy8kLCyMxMRERo0aRUZG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klzWA7zuU8ST8rwRKuvjdMmSJTRq1IjWrVs77Pv6669JS0uzS055eu5UrlzZ6acov/nmG3bt2lWqGa3enlNZ42HJftwdX/KcvI2HIieDYkT5LVy4kAceeIBbbrmFhx56yOvjTlU8EnEmKCiINm3aMHXqVGbPnk1+fj5vv/02UHTbpx49enD48GGefvppPvzwQ1avXs3o0aOBohkfZVHWx/KSJUsA1ytYrFq1yuFDL94+v7788ks2b97sMBunQYMGNG7c2GFZyBMlJSVRWFhISkqKXXleXh6pqam2forjVHle/ytmyKmkGOGbGFEWe/bsoXfv3kRFRbFq1SqnS946cyrjkZzd3MWHslyT9OZa54nK+jjevXs3X331FYMGDXK6FPaqVauoXbs2TZo0sZWVJjYFBQXx0ksvsX//fr788kv+/PNP24ogfn5+1K9f3+U5ncprCLp+KSeTYoR9X76KEWU1fPhwPvjgAxYuXOj0tn/OVPQ1zTIl3196CW64ATIy4LnnYPBgqFYN6teHoUOL9v/xR1laFhEpEhMTw7FjxxzKd+3a5fHYZs2aERAQwA8//GBXnpeXx08//USLFi2cHrd48WIiIiKcLiFz7Ngx1q1bZ/eJMIAWLVqQlZXFli1b7Mq///57234oCtCJiYns27fPoe39+/cTEhLi9ZtRb+Tk5HDZZZexdetWPvjgA7v/TD0pHvOJf7/9+/ezd+9eu79fixYt2Lhxo8OFie+//56wsDC3SwSLnCotWrRg69atDks8nvg8PXHftm3bXF78+vDDD2nSpAm1a9e2lVWrVo24uDiH5w7A+vXr3cYei8XCNddc490J4f1zrzTPZ2dKc07exkOR081/MUaU1vLly7n55pu54ooreOGFF0p17KmKRyKeFK9OVXyBZOXKleTm5rJixQpGjhxJnz596Nmzp9MP67i6gOZMWR/LS5YsoV69erRv395hn7PbWxX35U18OnjwIOD8gl9+fr7HFbZcndMPP/yA1Wq17ffz8+Pcc891Gse+//576tat6/E9jbfnVNb3dCKuKEaUPUaUVmpqKr179yY3N5dPPvnE6b1WXTmV8Uik2InxoXhG6onXJb25JlkaZX0cv/HGGxhj3L4XOfHDOmWJTQkJCXTq1ImGDRtSWFjI2rVradeundtZrafyGoKuX8qpohjhuxhRFvfddx8LFizgmWee4eqrr/b6uIq+plmm5PuNN/6bYE9Jgfffh3vugYQEePNNGDECmjaF+Hjo3x+eeqosvYjI2axevXp89913dsuNffDBB+zZs8fjsVFRUfTs2ZPXX3+d9PR0W/miRYvIyMhg0KBBDsccOnSIzz77jMsvv5ywsDCH/Z9++ikAvXv3tivv168fgYGBvPjii7YyYwxz5syhWrVqdOzY0VZ+5ZVXsmfPHlavXm0rO3z4MMuXL6d79+5O7xdbFoWFhVx55ZV8++23vP3223To0MFl3ePHj/PHH3/YLanXtGlTzjnnHObNm2f35nz27NlYLBYGDhxoKxs4cCAHDx7k3XfftTunt99+m8suu8zpDD6RU23gwIEUFhYyb948W1lubi4LFiygXbt21KhRw+GY4pknrpJdq1atcrj4BTBgwACHWPX555+zdetWp7Gn+JOzF154ocMSVJ7OyZvnXmmez/n5+fzxxx8Onwj19pxKEw9FTif/xRhRGl9++SVXXXUVnTt3ZvHixW5fj2zfvp3t27fblZ2MeCTizpo1a5zOEFm1ahUAjRo1Av6dXVKy7vHjx1mwYIHDseHh4U4/+OtMWR7LmzZtYsuWLW5jxom3twLv41PxBeM333zT7viNGzfy559/0rJlS7fn1L17dypXrszs2bPtymfPnk1YWJhdPBs4cCAbNmywu4j1559/8r///c8hju3evZs/TpiZ4e05leU9nQgoRpyMGFEamZmZ9OnTh3379rFq1SoaNGjgsu7hw4f5448/yMrKspWdrHgkAt7Hh0qVKhEbG8uXX35pV6/ke11fKcvjeMmSJdSsWZMLL7zQYd/BgwfZuHGjw3uR8r4Wf/LJJzlw4AD33nuvx3M6GdcQdP1STgXFiFMTI0pjxowZPPnkk4wfP5677rrLZb3T8pqm8bGcHGO++sqYadOM6dDBGIvFGD8/X/ciIqer22+/3bgKLWvWrDGAefvtt+3Kd+zYYQCzYMECW9nHH39sANOtWzcze/ZsM2bMGJOYmGjq1atnunTp4nEcP/74owkODjYtW7Y0s2fPNg8++KAJCQkxvXv3dlr/+eefN4D5+OOPne6/4YYbTNeuXZ3uu++++wxgRowYYebPn28uueQSA5jFixfb1UtOTjZJSUkmMjLSTJo0yTz99NOmYcOGJjQ01Pz0008ez+mLL74wU6ZMMVOmTDHx8fGmdu3atu0vvvjCVu+uu+4ygLnsssvMokWLHL5LWrBggcPf3hhjVq5caSwWi+nevbuZN2+eGTVqlPHz8zPDhw+3q1dQUGDat29vIiIizMMPP2xeeOEF07RpUxMZGWn++OMPj+ckUvwY3LBhg9P9ruJGyX1r1qzx2M+gQYNMQECAue+++8zcuXNNx44dTUBAgN1zp1hBQYFJSEgw7du3d9rW33//bQCzdu1ah327d+82VapUMfXq1TPPPfecmTp1qomJiTHnnnuuycnJcai/cuVKA5g5c+Z4PIcTx+jtc8/b53NxLB4yZEiZz8nbeCjiLcWIssUIY4ztNcJVV11lAHPjjTfayort3LnTREVFmdDQUPPCCy84vGb4+eef7dqsVauWqVWrlsPfw9fxSMSdpk2bmjp16ph77rnHzJs3z8yaNctcc801xt/f39SuXdscPXrUGGPMH3/8YYKCgsy5555rZs2aZaZNm2bq1atnzjvvPAOYHTt22Nq87bbbjMViMVOmTDFvvPGG+fzzz92OobSP5XvvvdcALl8fd+7c2QwdOtTpPm/jU69evQxgLr/8cjN79mwzceJEExMTY8LDw716Xf7CCy8YwAwcONDMnz/f3HDDDQYwjz32mF29tLQ0U69ePRMfH2+mT59unnnmGVOjRg1TtWpVk5KSYle3S5cuTt8bentOpX1PJ2KMYsTJihErVqywvY4ICgoyLVu2tG2XfL3Qr18/2+uOE19XvPfee3ZtTpo0yelrtZMRj0SM8T4+GGPM2LFjDWBuuukmM3v2bHP11Veb1q1bG8BMmjTJVq/4cXzo0CG7vorfx5SMJc6U9nH866+/GsCMHTvWaXuvvPKKCQ0NNVlZWQ77vI1NixYtMv379zdPP/20mTdvnhk8eLABzM033+z2XIqdjGsIun4pp4JixKmJETt37rS9hmjXrp0BbNuvvfaard67775rANOgQQOnOY7k5GRb3dPxmqZPk+/bthnz6qvGDB9uTJMmRUl3f39jzjvPl72IyOnMV8l3Y4x56qmnTLVq1UxwcLC54IILzA8//GC6dOniVfLdGGO++uor07FjRxMSEmLi4uLM7bffbtLS0pzWbd++vYmPjzcFBQUO+6xWq+0/OGcKCwvN1KlTTa1atUxQUJBp2rSpef31153W3b59u7n88stNpUqVTGhoqOnevbtZv369V+dT/J+1s++S/6kXX+Ry9V2Sqxevxhjz3nvvmRYtWpjg4GBTvXp189BDD5m8vDyHekeOHDE33XSTqVKligkLCzNdunRxmSQROdGpSqxlZ2fbPsQTHBxs2rRp4/LDNsUf/nnuueec7p81a5aJiooy+fn5Tvdv3rzZ9O7d24SFhZno6Ghz7bXX2r0gLOmqq64ygYGBJjU11eM5nKg0zz1vns+uXqiW5pxKEw9FvKEYUfYY4c1rgeK/kTevL4xxnnw3xvfxSMSdjz76yNx4443mnHPOMRERESYoKMjUr1/f3HnnnebgwYN2dVesWGGaN29uQkJCTO3atc0TTzxhXnnlFYcLXcnJyeaSSy4xkZGRBvDq/Ya3j+XCwkJTrVo106pVK6ftHDt2zAQEBJilS5c63e9tfMrKyjKPPPKIadKkiQkNDTVRUVHm0ksvNZs2bfJ4LsXmzZtnGjVqZIKCgky9evXMM888Y6xWq0O9PXv2mIEDB5pKlSqZiIgIc+mll5q//vrLoZ6r5HtpYm5p3tOJGKMYcbJixJAhQ1y+Xih5PaFWrVou6534GsJV8t0Y38cjEWNKFx+ysrLMTTfdZKKiokxkZKQZPHiwSUlJ8XlizZjSPY6LE36//PKL0/0DBw40ffr0cdmXN7Hp+++/N507dzYxMTEmJCTEnHfeeWbOnDlOn4Ou+Poagq5fyqmgGHFqYoS76xAlX2O5y4Wc+PrhdLymaTHGyToKXigshB9/hG+++fc7JQUiI6FdO+jYsei7ffuiMhGRM9X69etp164dv/32W6nunS4i/019+vQhIiKCpUuXVvRQROQ0pBghIqWxdOlSrr32Wg4fPkxUVFRFD0dETjOKESLirYKCAqpUqcLjjz/ObbfdVtHDEZHTjGLEqRVQloO6dYMNGyA7G+rUKUqyT5oEF1wAzZqBxeLrYYqIVKypU6cq8S4iAHTt2pVOnTpV9DBE5DSlGCEipREdHc1zzz2npJqIOKUYISLeOnLkCKNHj+byyy+v6KGIyGlIMeLUKtPMdz8/CAiAK6+EK64oSr4nJJyM4YmIiIiIiIiIiIiIiIiIiJz+ypR8f//9f5ea37gR8vP/nQF/wQVFP8899ySMVkRERERERERERERERERE5DRU5nu+F8vNhfXrYd26omT8unVw5AhERRXd+704Gd+jh6+GLCIiIiIiIiIiIiIiIiIicnopd/LdmT/+gK+/hgUL4Lvviu4BX1Dg615ERERERERERERERERERERODwG+aqiwEH78sWj2+9dfF/1MSSna5+/vq15EREREREREREREREREREROP2VOvqen/7vU/NdfFy09n50NxkBkJLRvDxdeWPTdvr0vhywiIiIiIiIiIiIiIiIiInJ68SvLQS1bQuXK0KcPPPoobN0Kl1wCM2cWzX4/ehQ++QQmTIBu3SA01MejFhE5TeXm5jJ58mRyc3MreigichpSjBARTxQnRMQdxQgR8URxQkTcUYwQEU8UJ8qvTPd8b9IEOnX6d2Z7nTonY2giImeetLQ0oqKiOH78OJUqVaro4YjIaUYxQkQ8UZwQEXcUI0TEE8UJEXFHMUJEPFGcKL8yLTv/++///m61eq5/5EjRTHkREREREREREREREREREZH/ojItO1/S9dcX3efdlf37oXPn8vYiIiIiIiIiIiIiIiIiIiJy+irTzPeS3n8fbroJXnnFcd+OHdCjB+TllbeX04vVamX//v1ERkZisVgqejgichpJS0uz+ykiUpJihIh4ojghIu4oRoiIJ4oTIuKOYoSIeFIyThhjSE9Pp2rVqvj5lXs+91mjTPd8L+nTT6FfPxg6FGbP/rd8yxbo2ROCg+Gzz6Bu3XKO9DSyd+9eatSoUdHDEBERERERERERERERERE5afbs2UP16tUrehhnjHJ/TKF3b3j77aKZ73ffXVT2449FS81HR8PXX/+3Eu8AkZGRFT0EETlNJSQkMHbsWBISEip6KCJyGlKMEBFPFCdExB3FCBHxRHFCRNxRjBART5zFCeVFS6fcy84DXHopvPEGXHUVpKTAqlVQvz588glUqeKLHk4vWmpeRFzx8/MjJCRES7CIiFOKESLiieKEiLijGCEinihOiIg7ihEi4omzOKG8aOn4LMJecQW89hosXQrnnQdr1vw3E+8iIiIiIiIiIiIiIiIiIiInKvXM9+bN3e8PCYEDB+CCC/4ts1jg559L25OIiIiIiIiIiIiIiIiIiMiZodQz3ytXLprR7uq7TRuoVs2+rHLl0g9s6NChWCwWl9/79u0jKyuLF154gd69e5OUlERkZCQtW7Zk9uzZFBYWOrRptVqZPn06derUISQkhObNm/PGG2+UfnAiIiIiIiIiIiIiIiIiIiIllHrm+9q1J2EUTowc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LUL/dr2k/amQXTebXQ/t8rr+ihUrGDx4MCtWrODQoUPExcWdxNG5tmzZMsLD7YNe5cqVK2QsxQoKCggJCSEkJMTrY2JiYk7iiERERERERERERERERM5sEUR4TKgnkUQs3k3QrE51j3V8PQvdH3/iiOMgrpdrTyWVjWzkEIecJtWLyzLJ9OnY5NQ57ZPvb731FgUFBU6XnN+1axd9+/bFYrEwcOBA3n77bbv9zZs3p3nz5gBUr16du+++mxkzZpCfn0+bNm14//33+eqrr1i8eDH+/v4nZfyhf4cS8avn5R5OF1lZWaxevZpXX32V1NRUPvjgA4YNG1YhY6lcuTKRkZFe1bVarbz66qu8//77pKamUrNmTW666SZ69Ohhq7N9+3ZmzZrFpk2bMMbQsGFDJk2axKpVq/jwww+BolnpAHPmzCEpKYl+/frx2GOPsWzZMn777TfGjh0L4LDs/JdffslLL73E9u3bCQ0NpWXLlsyYMQOwXwGgePWG++67Dyi6HcKcOXPo378/CxcutFuVYcmSJbzxxhssX77c5YdKRERERERERERERERETkcWLFShCkc44nY2eDjhpJPu075P5RLweeSR/M9XKJ4n5LamtU/6ldPTaZ98X7x4MfHx8fTs2dNh344dOzh+/DgAt99+u8P+SZMm2ZLvANOmTSMmJoa5c+eycOFCGjRowOuvv657cZfw2WefUatWLWrXrs3FF1/M008/zdChQ7FYLBU9NLcWLlzIRx99xNixY6lRowabNm1i4sSJREdH07p1a1JSUhg5ciStWrXixRdfJDw8nJ9//pmCggKuu+46duzYQWZmJhMnTgQgKiqKQ4cOAfDCCy9w11130ahRI4KDg/n222/t+v7666+5//77GTZsGA8//DD5+fl88803Tsf56quv0rt3byZOnEiHDh3w9/cnJiaGtm3bsnLlSrvk+wcffMCll16qxLuIiIiIiIiIiIiIiJw2AgkkgQSnM9NLfiWQQCCB1KIWu9ntsr1MMskgw6t7l3vLm+S7pyXg00l3OjP9xBnrWvpdSjrtk+8nJjpL6tq1K8Z4/2D28/Nj3LhxjBs3zhdD+09avnw5F198MQAdOnQgIyODjRs30rq1/adwbrrpJoekcG5uLg0bNvTZWC655BK77cTERJYuXepQLy8vjwULFvDCCy/YrXTw888/895779G6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l156iYCAALp27UrNmjUdlk/avHkzEyZM4P7776dDhw6Eh4cDMHDgQJ588knmzZvHmDFjAMjNzWXBggW0a9eOGjV89x/SmWry5Ml8+OGHDuXvvvuu7e+zYMEC5syZwx133MH1119vV2/lypU88sgjtG/fnueff95Wnp6eTvfu3ZkzZw6tW7cuVd8ntuVLpUnmT58+nYAA754uzZs356OPPrLdCmHlypU8/fTTrFmzpjzDFREREREREREREZEzQAghNKax28R6IomEEOJ1m75IhJeWN33uZjfLWOYysX6Yw1ix+nRcIiKns3In3wcNgmefhdq14c474Z9cN5mZMGsWvPQS3H136dtt2bIlN954I6+88goFBQV06dKFtWvX8vbbbzNu3DiqVq3qdKn46OhooCix2r9/f1t5u3btGDRoEOPGjSMlJYX69evz6quvsnPnTl5++eXSD7AMzrnxHJ+2d6TXEVKu9u39Fjp06MDEiRPtymJiYmy/r1y5kuuvv54VK1Y4JN8B/P392bBhAz/88APnn39+ufsOCvJ835mTKT8/n8DAQKKiorw+JjAwkNjY2JM4KhERERERERERERE5lUIIIYkkqlCFH/jBbd1GNGIjG33afyKJHuv4Ivl+lKN2ifQAAijA9W12k0lmEIPK3a+IyH9FuZPvU6bATz/B+PEwcSIU58P374eCAujWDR55pGxtz5kzh5o1a7JgwQLee+89atWqxTPPPMPdZcnmA6+99hoTJkxg0aJFHD16lObNm/PBBx/QuXPnsg2wlCJ+jfBpexnnZvi0PShKdrtKHP/444/k5uZyyy23sGrVKn7++WfOO+88uzqhoaH07NmTWbNmsXDhQp/17UxycjLPPvss3333HX5+frRo0YJ7773X7kMZK1as4PXXX2fv3r1UqlSJ7t27c//999O3b18A7rvvPgCSkpJYsWIF8+bNY+3atQwePJgFCxZw4MAB1q9f77DsfF5eHnPnzuXjjz/m6NGjJCQkMHToUPr162e37PzWrVt55J8nQJs2bQAYPnw4FouFzz77jLfeesvunK655ho6derErbfeWqq/nYiIiIiIiIiIiIiUXvHS7ycu937ibPVoogHIJ59ggjEYl20mk+zzcZZn5nshhaSQwuGAwwTXCeaHvT/wd/bfTpd+zyHH10MXETmrlDv5HhYGn38Oy5fDRx/B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VnJyckhOLlr+qkePHrzxxhv069ePDh06cMEFF9CpUycCAvRwFxERERERERER33mFV6hKVVtiPY64crVXkUvAu0u+A/SiF8c4xgEOaOl3ERERERd8lo3cvRv+/huOHgXj5MOMV1zhq57OLHWz61b0EEo1htDQUGrUqGHbPuecc+jWrRvvv/8+t956q9ftVK1alcjISGrXrs3Ro0cZP3488+bNc1m/Ro0a7Nq1y64sJibG9l3S5MmTOX78OPfeey+JiYkEBQVx4403kp+fDxTdJ37ZsmWsX7+e9evX88QTT7Bo0SLmzZunBLyIiIiIiIiIiABFS79XprLDrPTi3x/gAXaxy20bfehDAgk+G5M3yffSznx3t/R7cdlv/OaxnR/4oVT9ioiIiJyNyp2J3L0bbrwR1vyzGpKzxLvFAoWF5e3pzPTQrocqegjlYrFY8PPzIycnp8xtDBo0iIULF7JmzRq6devmtM7//d//8dBDD/HFF1+4vO97sV9++YUHHniACy64AIDk5GSOHTtmVyckJITOnTvTuXNnBg4cyKBBg9i2bRvnnHNOmc9DREREREREREROfwEEkECC0+XeS24nkEAQQS7bmctcj8n3AxzwafI9kUSPdYqT75lkOiTSMyMzadKjCW99+Ra/HfmNAxzQ0u8iIiIip1C5k+9DhsC338LYsdCuHURF+WJYUlHy8vI4fPgwAOnp6SxdupSsrCzbfeCL7d+/nz///NOurGbNmk7bDAkJoX///sybN4+uXbtisVgc6vTu3Zs1a9bw4IMPMmTIEDp06EDlypU5cOAAq1evxt/f31a3Ro0arFq1isaNG5OZmclzzz1HcHCwbf/KlSuxWq00bdqUkJAQPvroI4KDg0lM9PzmRUREREREREREzjxtact85vtk6fdiFbEEvDfJ9/WsJ5JIMshw2JcUkcTIFiP54vsvTsq94UVERETEvXIn37/7Dh54AB5+2BfDkYr27bffcvHFFwMQHh5OrVq1mDZtGq1bt7ar98wzzzgcO3/+fJftDho0iMWLF/PZZ5/Rq1cvh/0Wi4WpU6fy/vvvs3LlShYtWkRBQQHx8fG0adOG0aNH2+pOmDCBxx57jOuvv56EhARuu+02nn32Wdv+yMhIXn31VZ555hmsViv169fn6aefJjo6urR/DhEREREREREROcncLf2eRBIFFNCTnm7b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ERERERERkdNLuZPva9f6YBQiIiIiIiJyVvLHn2pUsyXUT0yw16QmYYQ5PXYBCzwm33ezm3rU89l4a1GLQALJJ99lne1s52Iu9lmfIiIiIiIiInJmKHfyXURERERERMSTKlRhAAMckuvVqFbmmem1qOWxzi52lantwxzmb/5mxwlff/EXBRSUqU0RERERERER+W/zSfK9sBBefx0+/BB2/XNdo1YtuPRSuPZax3vAe+O3335j8uTJ/PjjjyQnJxMWFkaTJk247777uOyyywCwWq289tprvPvuu2zatIkjR45Qp04drrrqKsaMGUNISIhDuy+//DJPPvkkO3bsoEaNGowaNYo777yzPKcvIiIiIiJy1oollqpU5Rd+cVsvjjjmMtenfZcn+Z5FFjvY4ZBgL97OIMOnYxURERERERGR/75yJ9+PH4f/+z/YsAEiI6Fu3aLy1avhnXdg9mz45BOoVKl07e7atYv09HSGDBlC1apVycrK4p133qFv377MnTuXESNGkJWVxbBh/8/efcdHVaV/HP/MpCckISSkQSgqKKCAICisggVs2Kmiq6JiAStiQf3ZWBEF24oilgUVrIgLKKviCoqIoIiuuiiWpaaHQAjpmfP7I2TMZHpyQwJ83/c1r5m599xzzg0zDzP3mXPuOE444QSuu+46kpOTWbNmDffffz///ve/+fTTT7HZbM4658yZw3XXXcfw4cOZNGkSq1at4qabbqKkpIQ777yzsX8KERERERGRg0oMMXSgAxn7Fk+Po4jCgYNIIn1Oxb6VrZb3rwMd/JZZzWrmMIctbGEzm50J9lxyLe+PiIiIiIiIiBzaGp18v+ceWL8ennkGxo+HsLCa9ZWV8NJLcNNNNWWeeSa4es8++2zOPvtsl3U33HADffv25YknnuCaa64hPDyc1atXM3DgQGeZ8ePH06lTJ2cCfsiQIQCUlpZyzz33MGzYMBYuXOgs63A4mDp1Ktdccw0JCQkN/0OIiIiIiIgcQMIIox3tfCbXEwjsO5IdO+1ox2Y2ey1TQgl55NGWtpb0P5dcSijxW275vkVEREREREREpKk1Ovn+3nswYULNra6wMLj+eti4ERYuDD757klISAgZGRl8/fXXAISHh7sk3mtdeOGF3H///WzcuNGZfF+xYgUFBQVMqNfRiRMnsmDBAj744AMuvfTSxndSRERERESkhbuWa3mO57Bjt6zOjnT0mXyHmtHvgSTfq6hiO9vZwha2spUtdZat+5ZSSi3quYiIiIiIiIiINRqdfC8ogCOP9L79qKNg586G1793715KS0vZvXs3S5Ys4V//+hejR4/2uU92djYASUlJznUbNmwA4LjjjnMp27dvX+x2Oxs2bPCafC8vL6e8vNz5vKioCICUlBTsdutOVonIga827tSNPyIitRQjRMSfgOKEgTgTR7vqdqRXp5NenV7z2FFzvzVkK7e2vtVnO9Wl1dh3Wftdpld8LzZFb/JZJmdnDpRDia2E7SHbnbcdITuc9ztCdpBtz6baVu21ntb7FpFDjT5LiIg/ihMi4otihIj4UzdOOBwOcnJymrlHBx6bMcY0poKjj4b27eHDDz1vP/NM2LYNfvqpYfVfd911zJkzBwC73c5FF13ECy+84HOK+KFDh7Ju3Tq2bNlC69atgZop659//nmqqqrcyicnJ3PaaafxxhtveKzvgQce4MEHH3Rbf9dddxEZGdmAoxIREREREfEspDKEuKI44nfHE18UT/zueOJ21zyvXR9REeF1//zEfJ698VmfbaRvT2f8S+Mt7feKU1bw+eDPfZaJLYqlKrSK0qhSsFnavIiIiIiIiIhYqKysjOnTp7N7927i4uKauzsHjEaPfJ8wAW64Ac4+G265Bbp2rVn/yy/w97/D8uUwa1bD67/lllsYMWIEmZmZvP3221RXV1NRUeG1/LRp0/jkk0947rnnnIl3qLnme3h4uMd9IiMjKS31PmXhlClTmDRpkvN5UVERGRkZzJ07VyPfRcRFUlISw4cP59133yU/P7+5uyMiLYxihIh4cvneyzmp/CTaOdrR3rQnsSqxUfVF74xmzvNzfCa3k6uTGU/Dku/llJMZkklmSCY7QnaQGZLJ9pDtrP9hPb/8/EsDey0igdBnCRHxR3FCRHxRjBARf+rGidzc3ObuzgHJkuR7bi5Mnw4ffeS6LSwM7ruv5trvDXXUUUdx1FFHAXDZZZdx+umnc+6557J27VpsNtezSW+99Rb33nsvV111FdfXazQqKspr0r6srIyoqCivfYiIiCAiwn1kiaZaEBFv8vPzycrKau5uiEgLpRghcvBKIIEMMuhABzLI4Hu+50u+9LlPV7pyNmdb1odoE01ZdhmFFHotk002FVQQjusPlB04yCSTbfuWrWx1e5xHHqbagPdZ4UWkiemzhIj4ozghIr4oRoiIP/n5+cqDNlCjk+8ADzxQM/r9k09gy5aadR07wpAhYPWlQ0aMGMG1117Lpk2bOLLOxeaXL1/OZZddxrBhw3j++efd9ktLS6O6uprc3FySk5Od6ysqKigoKCA9Pd3ajoqIiIiIyEGlNa1pRzvSSacd7ZwJ9rr3McS47DOTmX6T79vYZnlfO9DBZ/LdYHiURymm2CWxnkkmVbhfqktERERERERERPyzJPkONUn2MWOsqs272unhd+/e7Vy3du1aLrzwQo477jjefvttQkPdD6t3794AfPPNN5x99p+jSr755hscDodzu4iIiIiIHLou4iIyyKBdnaU22R5NdND1ZZDht8xWtjakq272steZRDcYv+Xv4z5L2hURERERERERkRoNSr7v3g2jR8OgQXD33d7LPfwwfPEFvPMOtGoVXBv1R6gDVFZW8uqrrxIVFUX37t0B2LhxI8OGDaNTp068//77XqePP/XUU2nTpg2zZ892Sb7Pnj2b6Ohohg0bFlwHRURERESkxUsk0ZlAX8c6drLTZ/m/83fa0c6y9jvQwW+ZQEa+V1HFDnY4k+ue7n2NdBcRERERERERkabXoOT7rFnw5Zfw2mu+y40fD489Bs8+C3feGVwb1157LUVFRQwaNIh27dqRnZ3NggUL+Pnnn3n88cdp1aoVe/bs4YwzzqCwsJDbb7+dDz74wKWOww8/nAEDBgA113yfOnUqEydOZOTIkZxxxhmsWrWK+fPn8/DDD9OmTZvgOigiIiIiIs0mggi3ken1R6unk04kkc59zuAMPuZjn/XuYIelyfdAR77nkss2tpEbkUubXm34aONH/LTnJ2dyPYssHDgs65eIiIiIiIiIiFivQcn3996rmWK+bVvf5ZKT4eKL4d13g0++jx49mpdffpnZs2dTUFBAbGwsffv25dFHH+W8884DoKCggG3bakaJ3HXXXW51XH755c7kO8CECRMICwvj8ccfZ8mSJWRkZPDkk09y8803B9c5ERERERFpUnHEcRIneZz+vR3tSCQx6DoDSarvYEdDuutVOumEEurzOuo/8zMppACQ1iaNa8++ljnb5pC1J8vSvoiIiIiIiIiISNNqUPL955/hmmsCK9unDyxYEHwbY8aMYYyfi8h36tQJY/xfy7Cu8ePHM378+OA7JCIiIiIijRJNNOmkk0QSX/GVz7Kd6cz7vG9p++mk+y2TSWZQdVZSyXa2+5wO3lfiXUREREREREREDh4NSr4Hme/GodkRRUREREQOWnbsJJPscer3us9b0xqoSVhHEIHB+xcLq0egQ/Aj33ezmx3sIJNMdtRZap9vZzs55Gg6eBERERERERERARqYfO/QAdavD6zs+vU15UVERERE5MCUSird6e71+uqppBIaxFeLMMJoS1tyyfVaJp98yikngggrDgEILPn+D/7Bu7zLDnawl72WtS0iIiIiIiIiIge/BiXfhw2D2bNh8mTo0sV7uV9/hfnz4frrG9o9ERERERFpCiGEkEoqIYSwla0+y17JlTzMw5a23452PpPvUDMFfGc6B1VvIYUuo9TrjlT/lV/97p+zbxEREREREREREQlWg5Lvd9wBr7wCgwfDk0/C8OEQWqemqip491247TaIjobbb7equyIiIiIi4k888T6nf08nnRRSCCGExSzmAi7wWV9TTAGfTjob2OCzTN3kewUVXqd/r/u8lFLL+yoiIiIiIiIiIhKIBiXfk5Nh2TK48EIYOxaioqBrV4iNhT17YNMmKC2F1FT44ANISbG62yIiIiIih6YMMuhAB9JI85pYjyEm4PqCvQ66VQJp90ZuxIGDHeyggAKf14gXERERERERERFpbg1KvgP06wc//QTPPw9Ll8LGjVBUBHFx0KsXnHsuXHcdtG5tYW9FRERERA5CCSSQRhp5+xZfXuM1BjPYsrabMvleRpnXUeprWet3f38j40VERERERERERFqSBiffAeLj4c47a25W+/rrr3nllVdYsWIFmzdvJjExkRNOOIG//e1vdO3a1eM+lZWV9OrVi40bNzJjxgwmT57sst3hcDBz5kxmz55NVlYWXbt2ZcqUKVx88cXWH4CIiIiIHNJCCCGZZNJII5VU0jwsqfuWSCIBmMhEnuM5n/VmkWVpP1NIIZRQqqjyWsZT8j2HHI9J9brrdrLT0r6KiIiIiIiIiIi0ZI1KvjelRx99lNWrVzNy5Eh69uxJdnY2s2bNok+fPnz11VccffTRbvs888wzbN261Wud99xzD9OnT2f8+PH069ePxYsXM3bsWGw2G2PGjGnKwxERERGRg0w44ZzDOR4T6mmkkUwyduxB1ZlGmt8yViff7dhJIcXn6PYiihjBCGdSPYssKqm0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rs+p32sfl1Dity4l3kVERERERERERKQ5WZZ837MHFi6sGe3+2Wdgt8NZZ8F998G559Y8f+89uO02GDcO9s327tV3330HwNKlS1m6dKnb9ksvvTToPk6fPp2EhATmzJnDvHnz6NKlC/Pnz2fs2LFB1yUiIiISNANRJVEcWXkk3enuMaFem2iPI85vde1p7zP5DjWJcCuT76mk+i2zne1sY5vfqd9zyNHU7yIiIiIiIiIiInLQaHTyffHimoT7++9DWRn06wdPPQVjxkBiomvZESOgsBAmTvRf78qVKxvUn06dOmGM8bjNbrczZcoUpkyZ0qC6RURERDyxYcPg+fNHraEMZWn2UiIei+AO7rCk3UBHofekpyXtFVMc0Aj0NayhAx0saVNERERERERERETkQNHo5PuFF0JGBtx6a8013Y880nf5Xr3gkksa26qIiIhI04sk0u/U76mkUkQRR+L7Q1AhhUQQYWn/rJoCvoACv9O+Z5FFMcVWdFtERERERERERETkoNTo5Punn8LJJwdevn//mpuIiIhIc4kllna08zntexpptKZ1QPUFMkV8NtmN7LW7QJLv61hHIokek+m1U79XUGF530REREREREREREQONY1OvgeTeBcRERFpKnbstKUtDhzkkeez7AxmcC3XWtZ2NNHEEUcRRV7L5JBjSVsllDgT6dvY5rf87H2LiIiIiIiIiIiIiDStRiffH3rI93abDSIjoX17GDQI2rVrbIsiIiJyKIkgwjka3dfU7ymkEEIIf+fv3MzNPutsilHotdPPe1NJJQX2AhIdiR63F1IY0NTvvtoQERERERERERERkebT6OT7Aw/UJNgBjHHdVn99SAiMHw+zZoHd3tiWRURE5GBwIifSnvZep35vQ5ug6rPqOujBSiONTWzyWebV6Ffpe2xfPvz+Q34u+tklwV5OueV9EhEREREREREREZH9p9HJ9+3bYdgwOPZYuPFGOOKImvW//grPPAP/+Q+89RYUF8NTT8GcOZCeDvfe29iWRUREpKWxYaMtbZ2J83WsYyc7fe7zBm/QnvaW9WF/JN/LKHMble5vqnuAGbEzuPa0a5n32zyyiqz/AYCIiIiIiIiIiIiINJ9GJ98nTICjjoJ//MN1fZ8+MHcujBkDd90FCxfCvHmQmwuvvqrku4iIyIEkjDCPU77XX5dCCqF1Pl6cyZl8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He19e14eREQ0thURkQNDhImg53c9mVg8kRhi3JLsscQGXef+GoVeXwopbGe71+1FFHEv97ol2nPJpYoqy/sjIiIiIiIiIiIiIiLSkjU6+d6nD3zwAUyY4L6tqgrefBNOOKGxrYiI7H8hhJBCisuI9PnMp4wyn/td+M8LuZALLetHIMl3X6PQ/dnDHo/XTw9kVPrDPNzgdkVERERERERERERERA4mjU6+T5kC55wD118PY8bUrMvJgU8+gWnTYONGmDWrsa2IiFgniqiAp363Y3fZdwUr+J3fvdZdbiunNLKUqLIoy/rb0JHv+eT7nPa9dtnLXsv6KiIiIiIiIiIiIiIicqhqdPL9rLNg3jy4+WZ44YWadZdeCsZAXBy8+ioMGtTYVvz79ddf+b//+z+++OILdu7cSYcOHRg7diyTJ08mus68+F9++SV33HEH3377LXFxcYwaNYpp06bRqlWrpu+kiOxXvenNX/mrW5I9nvgG15lGms/kO8Ce2D37Pfn+GZ9xPuc7E+o55Pi8XruIiIiIiIiIiIiIiIhYq9HJd4C//hUuugg+/hh++63mOvCHHw5nnAGxwV/eOGjbtm2jf//+xMfHc8MNN9CmTRvWrFnD/fffz/r161m8eDEA3333HaeddhrdunXjiSeeYPv27cycOZNff/2Vf/3rX03fUREJWgghJJPsNlK9mGKe4imf+3amM5OYZGl/AkmEF7cqJjkvOah6SyhxG5Feu2xhi9/9M8lkCUuCalNERERERERERERERESsY0nyHSAmBi607hLHQXnttdfYtWsXX3zxBT169ADgmmuuweFw8Oqrr1JYWEhCQgJ33303CQkJrFy5kri4OAA6derE+PHj+fjjjzn99NOb5wBEDkGRRAY09XsyyW5TvwP8wi9+k++epmJvrECT77V2sjOgqd/3sMfyvoqIiIiIiIiIiIiIiMj+Y1nyfc8e2LIFCgtrppyvrymnni8qKgIgJSXFZX1aWhp2u53w8HCKiopYvnw5t956qzPxDnDZZZdx66238vbbbyv5LtKEJjOZszjLmVxvTetG1RdIEjyb7Ea14UkqqX7L/Pu0f3NV9lX8kPcD5ZRb3gcRERERERERERERERFpeRqdfC8ogBtugHffherqmnXGgM3m+rh2W1M4+eSTefTRR7nqqqt48MEHSUxM5Msvv2T27NncdNNN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NCj5XlYGt9wCPXrAjTd6L/f3v8PGjTX3YWEN7KGF0tLS2LHDfaRk7X8y6enpwVUYb0Wv/lSMdaMpA1W4b9mfyinnP1iQbA7ST/y039vMJ5+leE5KNKX1rPdfaJL/IsHYvW/x6Ulr2wTYQQCjn9+wts1d+xZPytLKiP5LNGHXh2GyrJuaz2D4FT8/SMkFoi1rEoCcfYtPF1nbZgUVbGKT70Ir8T9SMUhZBPCF4wRr2yyhxH+yacG+m4UCet90tLbN4n2LTzP23SyUiedLyjiVAK2tbXPPvsUTR4iDPfF7CH0gFHOttTHC77H+BrSxrEkAivYtPo2xts0qqsjFz69uPweSrG3X73ECDLKuvdprfBbg54dca4FLrGs3YNXN0KaIiIiIiIiIiEgLZ2/ITi+8APPmwbBhvssNGwZz58JLLzWkFev17t2bTZs2UVTkevJ07dq1zu0iIiIiIiIiIiIiIiIiIiLBalDy/e23YfhwOOww3+UOPxxGjoQ3LB512lAjRoygurqaF154wbmuvLycuXPncvzxx+s67iIiIiIiIiIiIiIiIiIi0iANmnb+hx/gkgCntxw4EJbu/1m3PTr++OMZOXIkU6ZMITc3lyOOOIJXXnmFzZs38/LLLzd390RERERERERERERERERE5ADVoOR7RQWEhwdWNjwcyssb0krTePXVV/m///s/XnvtNQoLC+nZsyfvv/8+gwZZeJFOERERERERERERERERERE5pDQo+Z6eDj/+GFjZH3+sKd9SREZGMmPGDGbMmNHcXRERERERERERERERERERkYNEg675PmQIvPoq5Ob6LpebW1Nu6NCGtNJyGWOauwsi0kI5HA7KyspwOBzN3RURaYEUI0TEH8UJEfFFMUJE/FGcEBFfFCNExB9PcUJ50eDYTAP+Yn/8AcccA507w8svw/HHu5dZuxauvrqm7H/+A4cfbkV3W4bt27eTkZHR3N0QEREREREREREREREREWky27Zto3379s3djQNGg5LvAB98ABdfDHv3wmGH1STjY2Nhz56aqeZ//x2io+H11+Hcc63udvNyOBxkZmYSGxuLzWZr7u6IiIiIiIiIiIiIiIiIiFjGGMOePXtIT0/Hbm/QZOqHpAYn3wE2b4ZHH4X334cdO/5cn54O55wDd9xRk5gXERERERERERERERERERE5mDUq+V7Xnj1QVARxcTUj4OtyOEA/iBARERERERERERERERERkYOVZSnx2Fho18418f7113DLLTXrRUREREREREREREREREREDlahVlf422+wYEHNtd5/+w1CQuDEE61uRUREREREREREREREREREpOWwZNr53Fx4882apPs339SsO+00GDcOzj4b4uMb24KIiIiIiIiIiIiIiIiIiEjL1eDk+969sGhRTcL9008hNBSGDYOBA+G222DhQrjoIqu7KyIiIiIiIiIiIiIiIiIi0vI06JrvF18MKSlw9dU108r/4x81o9/feQfOO8/qLoqIiIiIiIiIiIiIiIiIiLRsDbrm+1tvQefONUn3wYOt7pKIiIiIiIiIiIiIiIiIiMiBpUEj3ydPhspKOPVUOOYYeOQR+OMPq7smIiIiIiIiIiIiIiIiIiJyYGhQ8v2xx2DrVvjkEzj+eJgxA7p0qXk8Zw7YbFZ3U0REREREREREREREREREpOWyGWNMYyupqIClS+H112HZMigvrxkRP3o0nHtuzWMREREREREREREREREREZGDlSXJ97p274a3365JxH/+ec26jh01Lb2IiIiIiIiIiIiIiIiIiBy8GnzN9++/97wtPh7Gj4cVK2DLFpg2DWJjG9NFETmYrFy5EpvNxsKFC5u7KyJygKuNJytXrmzurohIC6U4ISIiIiIiIiIi+1ODku9PPAF9+kCPHvDII7B5s+dy7dvDnXd6T9SLyMHBZrMFdGuOE99ffvklJ554ItHR0aSmpnLTTTdRXFzsUuaKK67w2e8dO3a41fvMM88QHx9PZWUlAA6Hg8cee4zOnTsTGRlJz549eeONNzz2yeFwMHv2bHr37k1UVBSJiYmceuqpfB9AsHzrrbe49NJL6dKlCzabjZNPPtljua+//pobbriBHj16EBMTQ4cOHRg1ahSbNm3y20ZdS5YsoU+fPkRGRtKhQwfuv/9+qqqq3Mrt2rWLa665hrZt2xITE8Mpp5zCt99+G1RbcmiaN2+e1/feXXfdZVk75eXl3HnnnaSnpxMVFcXxxx/P8uXLXcps3rzZZywYP368W70Oh4O2bdvy2GOPOddt3LiRM888k1atWtGmTRv++te/kpeX57LfAw884LOt1atX+z2mYN53gb6XvQnkmGr/HoHGQpFAKU40LE5kZWVx1113ccoppxAbG+v1s1hJSQnPPvssp59+OmlpacTGxnLssccye/ZsqqurA/777c+YJALwww8/MGLECDp27EhkZCTt2rVj6NChPPPMMw2q77nnnmPevHlB7RPIa/nkk0/2+j4OCwvzWO9tt91G9+7dnc8DiU9QE2+ef/55evfuTatWrUhJSeGss87iyy+/DPiYXn75Zbp160ZkZCRdunTx+vfcsWMHo0aNonXr1sTFxXH++efzRxBTHgZ6TBDYdzoRTxQnrI8Ts2fPZuTIkXTo0AGbzcYVV1zhsdy///1vrrzySrp27Up0dDSHHXYYV199NVlZWQG1U2t/xSQ5tFgdG6wQyGvY1/cim83GggUL3Or94YcfsNlsrFu3zrku0M/iy5cvd/7/m5CQwIgRI9jsLRHkwf48j6Dzl2I1xYmmjxPr1q1jwoQJ9O3bl7CwMGw2m8dy27Zt48EHH6R///4kJCSQlJTEySefzCeffBJQO7X2+7lN0wC//mrMAw8Yc9RRxthsxtjtxvzlL8bMnm1Mfn5DahSRA9lrr73mchs6dKgB3NZnZ2ebFStWGMC88847Td6vDRs2mMjISHPsscea2bNnm3vuucdERESYM88806Xcl19+6dbXV1991URHR5vu3bt7rPuMM84wI0aMcD6/6667DGDGjx9vXnjhBTNs2DADmDfeeMNt38svv9yEhoaaK6+80rz44ovmqaeeMpdffrn5+OOP/R7T4MGDTatWrcwpp5xiEhISzODBgz2WGz58uElNTTU33nijefHFF83UqVNNSkqKiYmJMT/88IPfdowxZtmyZcZms5lTTjnFvPDCC+bGG280drvdXHfddS7lqqurzcCBA01MTIx54IEHzKxZs0z37t1NbGys2bRpU0BtyaFr7ty5BjAPPfSQ2/tww4YNPvetrq42paWlprq62m87Y8aMMaGhoWby5Mlmzpw5ZsCAASY0NNSsWrXKWaa4uNitD6+99pq55JJLDGDefvttt3rXrFljAPPjjz8aY4zZtm2bSUpKMocffrh5+umnzcMPP2wSEhJMr169THl5uXO/77//3mNbGRkZJiEhwaWst2MP9H0X6HvZm0CPyZjgYqFIoBQnGhYnaj9zdenSxQwYMMAAZsWKFW7lfvjhB2Oz2cyQIUPMY489Zp5//nlz4YUXGsBcdtllfv9uxuzfmCRijDGrV6824eHh5ogjjjBTp041L774ornvvvvM6aefbg4//PAG1dmjRw+vn609CfS1/PHHH7u9j59//nkDmLPPPttj3UceeaSZPHmy83kg8ckYYyZNmmQAc+mll5o5c+aYRx991Bx22GEmNDTUrF271u8x1fZr+PDh5oUXXjB//etfDWCmT5/uUm7Pnj2mS5cuJjk52Tz66KPmiSeeMBkZGaZ9+/YmP8CTQoEeU6Df6UTqU5xomjjRsWNH06ZNG3PmmWea0NBQc/nll3ss17dvX9O5c2dzxx13mBdffNFMmTLFxMbGmpSUFJOVleW3HWP2b0ySQ0dTxIbGCvQ1/Pvvv3v8ftCnTx8TEhLi8b31yCOPmOTkZONwOIwxgcelpUuXGrvdbo477jjz9NNPm6lTp5qkpCTTrl07k5ub6/eY9ud5BJ2/FKspTuyfOHH//febsLAw07dvX9O1a1fjLV39zDPPmKioKHPxxRebWbNmmaeeesr06dPHAOYf//hHQH+/5ji32aDke13r1xszaZIx7dvXJOLDw40591xj3nzTmJKSxtYuIgeiiRMneg2W+zP5ftZZZ5m0tDSze/du57oXX3zRAOajjz7yue+qVasMYB5++GG3bXv37jWRkZFm7ty5xhhjtm/fbsLCwszEiROdZRwOhznppJNM+/btTVVVlXP9W2+9ZQCzaNGiBh3T1q1bnQkEX1/8V69e7fYfx6ZNm0xERIS55JJLAmqre/fuplevXqaystK57p577jE2m81s3LjRua72mOr+m+bm5prWrVubiy++ONBDk0NUbVLt66+/DnifQBNptdauXWsAM2PGDJc6Dj/8cDNgwAC/+5922mkmLi7OlJaWum37v//7P9OxY0fn8+uvv95ERUWZLVu2ONctX77cAGbOnDk+29m6daux2Wxm/PjxfvsUzPsu0PeyN4EeUzCxUCQYihN/CiZOFBUVmYKCAmOMMe+8847X5HteXp7zhwF1jRs3zgDm119/9dvW/oxJIsYYc/bZZ5u2bduawsJCt205OTkNqjPYpFpjXsuvvfaaAcyCBQvctv3+++8u79dA41NlZaWJiopy+YGwMcb88ccfBjA33XSTzz6VlJSYxMREM2zYMJf1l1xyiYmJiTE7d+50rnv00UcNYNatW+dct3HjRhMSEmKmTJnis51gjsmYxn2nk0Ob4oT1ccIYYzZv3uw8OR8TE+M1+f7ZZ5+5fRb77LPPDGDuuecev+3sz5gkh5amiA2N1ZjXcElJiYmNjTVDhw71uP2kk05yeZ8GGpe6d+9ujjjiCJdzi999952x2+1m0qRJfo9pf55H0PlLsZrixP6JE9nZ2aZkXxLZVz7pxx9/NHl5eS7rysrKzFFHHWXat2/vtx1jmufcZqOT7392wJhPPzXm6quNadOmJhEfG2vMX/9qzIcfWtWKiBwIAkm+v/XWW+Zvf/ubadeunYmIiDCnnnqq28ndjh07evwiN3jwYL9feHfv3m1CQ0PN7bff7rK+vLzctGrVylx11VU+97/++uuNzWYz//vf/9y2LVmyxNhsNpOdnW2MMebZZ581gPnpp59cyr3++usGcPml+fHHH2/69+9vjKn5xWVxcbHPfvgS7Bd/Y4zp06eP6dOnj8u6Xbt2mY0bN5pdu3Y51/30008GMM8++6xL2R07dhjATJ061blu5MiRJiUlxe2L9TXXXGOio6NNWVlZUH2UQ4u/pFptzHjjjTfMPffcY9LT043NZjOFhYXObZ6SSXXdfvvtJiQkxOWkrTHGTJs2zQBm69atXvfNzMw0drvdXHHFFR639+nTx0yYMMH5PDk52YwcOdKtXNeuXc1pp53ms5+1H6RXrlzps5wxgb/vgnkvV1RUmI0bN5rMzEyXsoEeUzCxUCQYihN/CiZO1OUr+e7NkiVLDGCWLFnisv63334zv/32m8u6pohJIr4ceeSR5uSTTw6o7D/+8Q9zyimnmLZt25rw8HDTrVs389xzz7mU6dixowFcbr4+Zzf2tXzWWWeZmJgYj98F/v73v5v4+Hjnya5A41NJSYkBXE4UGVMzY4fdbjd33nmnzz598MEHBjAffPCBy/ovv/zSOatZrX79+pl+/fq51eFpNNCWLVvckoyBHlNjv9PJoU1xwvo4UZ+v5Ls3bdq0MRdddJHLury8PLNx40azd+9e57qmikkigcaG//3vfwZwDrypCzD333+/8/n999/v/NHq5ZdfbuLj401cXJy54oorXF7X3jTmNVybUJ43b57btsLCQhMSEuKcnSvQuFRQUGAAt/9/jak5F5menu73mJriPILOX8r+ojixf+JEXb7ySd7UzuZTVFTkXNeSzm026JrvnthscMop8OKLkJ0N//wn/OUvMH8+DBtmVSsicrCYPn067733HpMnT2bKlCl89dVXXHLJJZbV/8MP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gj2mYOKXzl/K/qI40fRxojFKSkoYOXIkUVFRTJ8+3WVbSzq32ajk+7p1cMst0K4dnHEGLFgAJ50Eb74JOTkwbx4MGQIezkOJyCGuQ4cOLs8TEhIAKCwstKT+2i/PtVOg1FVWVub15HxxcTGLFy/mjDPOIDEx0W37Bx98QEpKiss0JVFRUV7bqduX2vvOnTtz/PHHO8u1atWKc889l3Xr1lFVVRXoIQYsOzubYcOGER8fz8KFC/3+GqxuXwP5+wV6/CK+9O/fnyFDhrjc6urcuXOD627oa9RXoquyspLly5e7fED1977x1pYxhtdff52jjz6anj17+jscZz3BxJ1gY2HddnztX78txQJpSooTwcWJhpoxYwYvvvgiU6dOdU6X78/+ikkidfXr149FixZRWFjIunXrmDJlCnv27GHEiBHO0RYAq1evZsiQIcTExNC6dWvatm3L3XffDdDgpFpDX8t//PEHa9asYfTo0W4/bIGa7xrHHXec8/JWtW0F8v6qqqpiyJAhxMfHM2vWLC688EKuv/56PvnkE37//XdmzJjh95hqT5T5OqaGxrH6bSlmyP6gOGFtnGion3/+mQsvvJCjjz6al156KaB99mdMkkNPoLEhWA0519mY1/CCBQto06aNy49xan399dfk5eUF9V2kbjsPPfQQV111FY899hhdu3bluOOOIzQ0lKuuugqoOZdpxTE19jyCzl9KU1GcaNo40VDV1dWMGTOG//73vyxcuJD09HS/+zTXuc0GpcXvuw+6dIEBA+Dvf4fDDoNZsyArC5YsgVGjYN8PAUREPPKWAK47KsLblKrV1dV+66+dCqR2WpG6srKyvAbmf/7zn5SUlPiccv7MM8906VtaWhrZ2dluIzpq265tq/Y+xcO1OJKTk6msrGTv3r3+Di0ou3fv5qyzzmLXrl18+OGHAf2HBMH9/dLS0ryWAwJuU8SXxnwJauhr9PXXX+fII4+kb9++btu++OILioqKXBJT/t43bdq08fjrydWrV7Nly5agRrMGekwNjYV12/G1f91jCjQWijQVxYnGmzdvHnfeeSfXXXcd9957b8D77a+YJOJJeHg4/fr1Y9q0acyePZvKykreeecdoOayT6eddhr5+fk88cQTfPDBByxfvpxbb70VqBnt0RANfS2//vrrgPcZLJYtW+b2o5dA31+ff/45P/74I+edd55LuS5dutCtWze3KSHrS0tLo7q6mtzcXJf1FRUVFBQUONupjVON+fyvmCH7m+KENXGiIbZt28bpp59OfHw8y5Yt8zjlrSf7MybJoctXbGjIOclAznXW19DX8NatW1m1ahUjR470OA32smXL6NSpE927d3euCyYuhYeH89JLL5GZmcnnn3/OL7/8wkcffcTu3bux2+0cccQRXo9pf55H0PlLaWqKE65tWRUnGmr8+PG8//77zJs3z+Ol/zxprnObDUq+/+1vEBYGDz0Ef/wBX3wB118Pbdo0pDYREc8SEhLYtWuX2/otW7b43ffoo48mNDSUb775xmV9RUUF3333Hb179/a434IFC2jVqpXbl1GAXbt28eWXX7r8Ggygd+/elJSUsHHjRpf1a9eudW6HmuCcmprKjh073OrOzMwkMjIy4C+igSgrK+Pcc89l06ZNvP/++y7/kfpT2+f6f7/MzEy2b9/u8vfr3bs33377rdtJibVr1xIdHU3Xrl0bfAwiVujduzebNm1ym8Kp/nu0/rbffvvN60mvDz74gO7du9OpUyfnunbt2tG2bVu39w3AunXrfMYdm83G2LFjAzsgAn/fBfNe9iSYYwo0Foq0RAdjnAjW4sWLufrqq7nooot49tlng9p3f8UkEX9qZ6eqPTmydOlSysvLWbJkCddeey1nn302Q4YM8fhjHW8nzzxp6Gv59ddf5/DDD+eEE05w2+bp8la1bQUSn3JycgDPJ/sqKyv9zrDl7Zi++eYbHA6Hc7vdbueYY47xGMfWrl3LYYcd5vc7TaDH1NDvdCK+KE40PE4Eq6CggNNPP53y8nI++ugjj9da9WZ/xiQRcI8NtaNR65+XDOScZDAa+hp+4403MMb4/C5S/4c6DYlLKSkpnHTSSXTt2pXq6mpWrlzJ8ccf73NE6/48j6Dzl7I/KU5YFyca4vbbb2fu3Lk8+eSTXHzxxQHv11znNhuUfF+/Hv77X7jnHqhzLklExFKHH344X331lctUY++//z7btm3zu298fDxDhgxh/vz57Nmzx7n+tddeo7i4mJEjR7rtk5eXxyeffMKFF15IdHS02/aPP/4YgNNPP91l/fnnn09YWBjPPfecc50xhueff5527doxcOBA5/rRo0ezbds2l+vU5ufns3jxYk499VSP14ttiOrqakaPHs2aNWt45513GDBggNeyu3fv5ueff3aZTq9Hjx4cddRRvPDCCy5fzGfPno3NZmPEiBHOdSNGjCAnJ4dFixa5HNM777zDueee63EEn8j+NGLECKqrq3nhhRec68rLy5k7dy7HH388GRkZbvvUjjjxluhatmyZ20kvgOHDh7vFqX//+99s2rTJY9yp/cXsiSee6Db1lL9jCuR9F8x7ubKykp9//tntl6CBHlMwsVCkpTkY40QwPv/8c8aMGcOgQYNYsGCBz88jv//+O7///rvLuqaISSK+rFixwuPokGXLlgFw5JFHAn+OLKlbdvfu3cydO9dt35iYGI8//PWkIa/lDRs2sHHjRp8xo/7lrSDw+FR7wvjNN9902f/bb7/ll19+4dhjj/V5TKeeeipt2rRh9uzZLutnz55NdHS0SzwbMWIEX3/9tcsJrF9++YVPP/3ULY5t3bqVn3/+uUHH1JDvdCK1FCesjxPB2Lt3L2effTY7duxg2bJldOnSxWvZ/Px8fv75Z0pKSpzrmiomiQQaG+Li4khKSuLzzz93KVf3+65VGvIafv311+nQoQMnnnii27acnBy+/fZbt+8ijf0sPnPmTLKysrjtttv8HlNTnEfQ+UvZXxQn9k+cCMaMGTOYOXMmd999NzfffLPXci3q3KYREbHYxIkTjbfwsmLFCgOYd955x2X9//73PwOYuXPnOtd9+OGHBjCnnHKKmT17tpk8ebJJTU01hx9+uBk8eLDffqxfv95ERESYY4891syePdvcc889JjIy0px++ukeyz/zzDMGMB9++KHH7Zdddpk5+eSTPW67/fbbDWCuueYa8+KLL5phw4YZwCxYsMClXHZ2tklLSzOxsbHm/vvvN0888YTp2rWriYqKMt99953fY/rss8/M1KlTzdSpU01ycrLp1KmT8/lnn33mLHfzzTcbwJx77rnmtddec7vVNXfuXLe/vTHGLF261NhsNnPqqaeaF154wdx0003Gbreb8ePHu5SrqqoyJ5xwgmnVqpV58MEHzbPPPmt69OhhYmNjzc8//+z3mOTQVvv6+/rrrz1u9xYz6m5bsWKF33ZGjhxpQkNDze23327mzJljBg4caEJDQ13eN7WqqqpMSkqKOeGEEzzW9ccffxjArFy50m3b1q1bTWJiojn88MPN3//+dzNt2jSTkJBgjjnmGFNWVuZWfunSpQYwzz//vN9jqN/HQN93gb6Xa+Pw5Zdf3uBjCjQWigRDcaJhccIY4/yMMGbMGAOYK6+80rmu1ubNm018fLyJiooyzz77rNtnhu+//96lzo4dO5qOHTu6/T2sjkkivvTo0cN07tzZTJo0ybzwwgtm1qxZZuzYsSYkJMR06tTJFBYWGmOM+fnnn014eLg55phjzKxZs8z06dPN4Ycfbnr16mUA87///c9Z54QJE4zNZjNTp041b7zxhvn3v//tsw/BvpZvu+02A3j9fDxo0CBzxRVXeNwWaHwaOnSoAcyFF15oZs+ebe677z6TkJBgYmJiAvpc/uyzzxrAjBgxwrz44ovmsssuM4B5+OGHXcoVFRWZww8/3CQnJ5vHHnvMPPnkkyYjI8Okp6eb3Nxcl7KDBw/2+N0w0GMK9judSC3FiaaJE0uWLHF+lggPDzfHHnus83ndzwznn3++87NH/c8W7733nkud999/v8fPa00Rk0QCjQ3GGHPXXXcZwFx11VVm9uzZ5uKLLzZ9+/Y1gLn//vud5Wpfw3l5eS5t1X6PqRtHPAn2NfzDDz8YwNx1110e6/vHP/5hoqKiTElJidu2QOPSa6+9Zi644ALzxBNPmBdeeMGMGjXKAObqq6/2eSy1muI8gs5fyv6iOLF/4sTmzZudnyGOP/54Azifv/rqq85yixYtMoDp0qWLxzxHdna2s2xLOrfZoOT7MccEd+vZsyGtiMiByqrkuzHGPP7446Zdu3YmIiLC/OUvfzHffPONGTx4cEDJd2OMWbVqlRk4cKCJjIw0bdu2NRMnTjRFRUUey55wwgkmOTnZVFVVuW1zOBzO/9w8qa6uNtOmTTMdO3Y04eHhpkePHmb+/Pkey/7+++/mwgsvNHFxcSYqKsqceuqpZt26dQEdT+1/1J5udf9Drz3J5e1Wl7cPr8YY895775nevXubiIgI0759e3PvvfeaiooKt3I7d+40V111lUlMTDTR0dFm8ODBXpMkInXtr6RaaWmp8wc8ERERpl+/fl5/aFP7w5+///3vHrfPmjXLxMfHm8rKSo/bf/zxR3P66aeb6Oho07p1a3PJJZe4fBCsa8yYMSYsLMwUFBT4PYb6gnnfBfJe9vYBNZhjCiYWigRKcaLhcSKQzwK1f6NAPl8Y4zn5boz1MUnEl3/961/myiuvNEcddZRp1aqVCQ8PN0cccYS58cYbTU5OjkvZJUuWmJ49e5rIyEjTqVMn8+ijj5p//OMfbie5srOzzbBhw0xsbKwBAvq+Eehrubq62rRr18706dPHYz27du0yoaGh5u233/a4PdD4VFJSYh566CHTvXt3ExUVZeLj480555xjNmzY4PdYar3wwgvmyCOPNOHh4ebwww83Tz75pHE4HG7ltm3bZkaMGGHi4uJMq1atzDnnnGN+/fVXt3Leku/BxNxgvtOJ1FKcaJo4cfnll3v9zFD3nELHjh29lqv/OcJb8t0Y62OSSDCxoaSkxFx11VUmPj7exMbGmlGjRpnc3FzLk2rGBPcark32/ec///G4fcSIEebss8/22lYgcWnt2rVm0KBBJiEhwURGRppevXqZ559/3uP7zxurzyPo/KXsL4oT+ydO+DoXUfczlq98SP3PDy3p3KbNGA/zJ/hx8slQ9zJHlZXw5ZfQsyfsu8yBmxUrgm1FRKTlWLduHccffzw//fRTUNdOF5GDz9lnn02rVq14++23m7srItJCKU6ISDDefvttLrnkEvLz84mPj2/u7ohIC6Q4ISKBqKqqIjExkUceeYQJEyY0d3dEpAVSnNg/Qhuy08qVrs/z8yE5GZ54Ak491YJeiYi0QNOmTVPiXUQ4+eSTOemkk5q7GyLSgilOiEgwWrduzd///ncl1ETEK8UJEQnEzp07ufXWW7nwwgubuysi0kIpTuwfDRr5Xl9BAbRtC598ouS7iIiIiIiIiIiIiIiIiIgceuzN3QEREREREREREREREREREZEDnZLvIiIiIiIiIiIiIiIiIiIijaTku4iIiIiIiIiIiIiIiIiISCOFNmSnb791fb57d839r79C69ae9+nTpyEtiYiIiIiIiIiIiIiIiIiItHwNGvl+3HHQr9+ftyFDatZPmOC6vl+/P8uKiBwKysvLeeCBBygvL2/urohIC6U4ISL+KE6IiC+KESLij+KEiPijOCEi/ihONJzNGGOC3emVV4Jv6PLLg99HRORAU1RURHx8PLt37yYuLq65uyMiLZDihIj4ozghIr4oRoiIP4oTIuKP4oSI+KM40XANmnZeiXQREREREREREREREREREZE/NWjaeREREREREREREREREREREflTg0a+H+ocDgeZmZnExsZis9mauzsi0oIUFRW53IuI1Kc4ISL+KE6IiC+KESLij+KEiPijOCEi/tTGhx07dtCq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MWDAAO677z6XdeHh4c3UG6isrCQsLCyoywuEhYWRlJTUhL0SERERERERERERERGRphBHnM8Eet37JJIIx/o81i52+Uym1z4uoACD59m45dCk5Lu4CA8PDzhxnZ2dzdNPP81XX32F3W6nd+/e3HbbbaSnpzvLLFmyhPnz57N9+3bi4uI49dRTueOOOzjvvPMAuP322wFIS0tjyZIlvPDCC6xcuZJRo0Yxd+5csrKyWLdundu08xUVFcyZM4cPP/yQwsJCUlJSuOKKKzj//PNdpp3ftGkTDz30EFAz0h5g/Pjx2Gw2PvnkE9566y2XYxo7diwnnXQS119/feP+kCIiIiIiIiIiIiIiIkIrWgWUSK8dmR5BhOV9KKOMPPKc07v7us8mmzLKLO+DHBqUfN9Pul3WjbCCsP3ebmViJRtf3Wh5vVVVVdx0000cc8wxvPjii4SEhPDyyy9z00038cYbbxAWFsbChQt56qmnmDhxIgMHDqS4uJjvv/8egFdeeYXTTz+d++67jwEDBhASEuKse/v27Xz66ac89thj2O12j+3ff//9/PDDD0yePJkuXbqQmZnJrl273Mr17NmTSZMmMWfOHBYuXAhAdHQ0e/bs4aWXXuKnn36iR48eAPzyyy/89ttvPPbYYxb/tURERERERERERERERA5OKaTQla4cyZF03be0p70zqR5JpOVtVlDhcp10f0n1PeyxvA8inij5vp+EFYQRntt807cH6osvvmDQoEEu68aNG8e4ceNc1n388cc4HA7uvfdebDYbUJMQP+WUU1i/fj0nnHAC//jHP7jkkku4+OKLnfvVJroTEhIAiI2NdRtpX1lZyYMPPugsU9+WLVv45JNPmDVrFscffzwA7du391g2LCyMVq1aYbPZXNqJjo7mhBNOYOnSpc4+LV26lD59+nitS0RERERERERERERE5FAUTbQzsV6bZK+9jyfwSwd7U0llwIn0XHIposiCoxKxnpLv+0llYuUB0W7fvn256667XNbFxcW5lfv111/Zvn07gwcPdllfUVHB9u3b2blzJ3l5ec6p3oORlpbmNfEOsGnTJkJCQujbt2/Qddd1wQUXMHXqVG699VbsdjsffvghkyZNalSdIiIiIiIiIiIiIiIiB6IQQuhIR7fk+pEcSXuCG7hYRRX55Lslzr0l03exq2kOSmQ/U/J9P2mKqd+bQlRUFBkZGX7LlZaWctRRRzF16lS3bQkJCc7R8A0RGel7+pGICGuu9XHSSScRFhbGypUrCQsLo6qqilNPPdWSukVERERERERERERERFoKO3aSSSaddNLqLe1oxxH7lnACn8XZgYMtbOEXfmETm1zut7Mdg2nCIxJpmZR8lwY58sgjWb58OQkJCbRq1cpjmfT0dL7++muOO+44j9tDQ0NxOBxBt33EEUfgcDhYv369c9p5X8LCwjy2ExoayjnnnMPSpUsJCwvj9NNP95v4FxERERERERERERERaSmiiSaZZFJIIZVU0kjzmGBPJpkQQhrURj75bsn1TWziN36jnHKLj0jkwKbku7ioqKggPz/fZV1oaCitW7d2WXfWWWcxf/58Jk+ezLXXXktycjLZ2dmsWLGCv/71r6SkpDB+/HimT59OQkICAwcOpKSkhO+//57Ro0cDNcn5devW0bNnT8LDwz1Ob+9Jeno6w4YNY+rUqUyePJkuXbqQnZ3Nzp07GTp0qFv5tLQ0SkpKWLduHV27diUyMtKZZD///PMZNWoUAC+99FKwfy4RERERERERERERERHL2LCRQAIppDiT6r7uW+F5gGSwyijjV351S7BvYhM72WlJGyKHAiXfxcWaNWs466yzXNZ17NiRhQsXuqyLjIxkzpw5zJo1izvuuIOSkhLatm1Lv379iImJAeCcc86hoqKC119/naeffprWrVtz2mmnOeu4+eabeeqpp/jnP/9JcnIyS5YsCbifd911F8899xyPPvoou3fvJjU1lSuuuMJj2V69ejF8+HDuvvtudu/ezfjx47nmmmsA6NChAz179mT37t0cffTRAbcvIiIiIiIiIiIiIiLSUOmkc6SHJYMMwgizrJ0qqsgmmywvSyaZZJFFNtk4CH62YhFxpeS7OD3wwAM88MADXrd//fXXLs+TkpJ8lge46KKLuOiiizxuGzRoEIMGDXJZd8011zgT43XNmTPH5XlERAS33nort956q1vZvn37uvX1rrvu4q677nIra4whLy+PESNG+DwOERERERERERERERGRYMQTT5c6S1e6chRH0ZWuxBLbqLoLKCCHHHLJdd57SrLnkadrr4vsR0q+yyGrsLCQjz/+mIKCAs4999zm7o6IiIiIiIiIiIiIiLRwIYSQSCLJJNN231L/cRppdKELbWkbVN172MPv/E42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MERERERERERERERE5ABix04iibSlLckku90nk0w72tGe9qSRRgghjWovn3y271uyyPKZTC+jzKKjFBERKwWdfD/vvMY1+PDDcMwxgZffvHmz3zLGBDf1yfjx4xk/fnxQ+4iIiIiIiIiIiIiIyIHLjp02tPGYTPe0LpFEy66nnkOOM7Feu2xjm/PxDnYooS4ichAIOvn+/vuQlAQxMcHt53DA9u1wyy3BtigiIiIiIiIiIiIiIuLKhs2ZTPc2Or3utkQSGz06vT4HDpfEet2Eeu2SSSbllFvaroiItEwNmnb+qadg7Njg9snPh+TkhrQmIiIiIiIiIiIiIiIHOxs2WtM6oFHptcl0q66hXlcxxeSSSx55bvf1H2eTTSWVlvdBREQOTEH/r9SrF7RpE3xDYWE1+8bGBr+viIiIiIiIiIiIiIgcHGzY6EQnjqm3dKELYYRZ3l4JJeTuWwJJqJdSankfRETk0BB08n3DhoY1FB/f8H1FRERERERERERERKTliiOOFFJIrrO09bIkkUQ44Q1uq5RSr4l0T4n1EkosPFIRERHvrJ+PRUREREREREREREREDmjhhDund6+fVPe0RBDRqPbKKecXfiGTTL8J9b3stegoRURErNUkyXeHA37+GaKioHPnpmhBRERERERERERERESCEU44KaSQ6mWpm0xvTWvL26+gwjkafQtb+KHO8iu/UkWV5W2KiIjsT41Kvn/wAfz+O9x005/rtm+Hs8+Gn36qeT5gALz3HrRt25iWRERERERERERERESkvkginSPUa5eUfUv95Hob2ljadhVVzhHpdZcccpxJ9rpLEUWWti8iItLSNCr5PmUK9O3ruu6222DzZpg5Eyoq4G9/g3vvhTlzGtOSiIiIiIiIiIiIiMjBL4QQEkl0m9a9foK9dokjztL2d7ObHHLcEur1k+u55FJIIQZjafsiIiIHsgYn342BjRvhllv+XFdWBosXw0MPwa231qyrqICXXmpkL0VEREREREREREREDnCxxNKe9mSQQfs6S+3zFFJIJBE7dkvb3ctessgi28uSs2/JJZdyyi1tW0RE5FASdPJ93Diw2WqS6tXV8Oab8MUXNdsKC2vWf/ZZzTXfAbZtg8xMuPLKmucXXADnnWdR70VEREREREREREREWoBEEmlXZ/GUXLdylHoBBeSS63Ha91xyXZLre9lrWbsiIiLiXdDJ9yuuqLmvqIDXX4dBg+Ckk2rWvfoqxMXBHXf8Wf7772H1arj88prnnTo1rsMiIiIiIiIiIiIiIvtLOOGkk+6SWK+/pJNOJJGNaqeMMrLI8jnde+2STz5VVFl0hCIiImKVoJPvgwf/+bhDB1izBu66C0pLYeJEGDLEtcyWLdC+ves6EREREREREREREZHm1oY2PpPq7WhHW9o2up0SSti+b9nGNufjuusKKLDgiERERKQ5Nfia7wD33QdXXw2JiTVT0FdXw4IFrmUWLaoZHS8iIiIiIiIiIiIi0tRs2Egggba0JZlkUkhxS6i3pz3ppBNFVKPb28lOdnhY6ibaCym04MhERESkpWtU8v3KK+Gww2DZMggJgUsugaOP/nP7rl01ifkJExpWf3FxMTNmzGDt2rWsW7eOwsJC5s6dyxW1c9/XsXHjRm699Va++OILwsPDGTZsGE888QRt27r+KtHhcDBz5kxmz55NVlYWXbt2ZcqUKVx88cUN66SIiIiIiIiIiIiINKk44kgm2ZlQ9/a47b4ltHGnvgGopJJMMj0m1muXTDIppdSCIxQREZGDQaM/gZx8cs3Nk9at4eWXG153fn4+Dz30EB06dKBXr16sXLnSY7nt27czaNAg4uPjmTZtGsXFxcycOZMffviBdevWER4e7ix7zz33MH36dMaPH0+/fv1YvHgxY8eOxWazMWbMmIZ3VkREREREREREREQCYsNGBhmkkuo1iV53XQQRlra/i10uI9Q9JdbzyMNgLG1XREREDm6N//lfE0pLSyMrK4vU1FS++eYb+vXr57HctGnT2Lt3L+vXr6dDhw4A9O/fn6FDhzJv3jyuueYaAHbs2MHjjz/OxIkTmTVrFgBXX301gwcP5vbbb2fkyJGEhITsn4MTEREREREREREROQi1pjUppJBKqsf7dNI5kiOJJtrSdssoI488cvctdR/XH8FeQomlbYuIiIhAA5LvixZB//7Qvn1w+1VWwtKlNdd/T0oKbJ+IiAhSU1P9lnv33Xc555xznIl3gCFDhtC1a1fefvttZ/J98eLFVFZWMqHOPPg2m43rr7+esWPHsmbNGk488cTgDkxERERERERERETkIJdAAil+ltrkulWj1CupJG/f4imhXvu49n4PeyxpV0RERKShgk6+jxwJr70GY8cGt19RUc2+y5fDqacG26p3O3bsIDc3l+OOO85tW//+/Vm2bJnz+YYNG4iJiaFbt25u5Wq3e0q+l5eXU15e7nxeVFQEQEpKCna73ZLjEJGDQ9K+XxclBforIxE55ChOiIg/ihMi4otihIj40+A4YSDFkUK3ym50q+rGUVVHcUTVEaRUp5DkSCKccP91BKiaajaHbObX0F/JDMmkwF5Avj2ffHs+BSEFFNhrbrttuzG2wKZ9b7VvERH/9HlCRPxRfGi4oJPvxsCqVVBVFdx+xcXBthSYrKwsoGaK+vrS0tLYuXMn5eXlRERE/D979x0fRZ3/cfy9m95JsqkQQWlSVETFciqiyKmcFcGOIoqeHcSC5ZBTwN5ORdQTFFEP29nwFPyJInhiAQWFA0FKIG1TSW/f3x9h1yy7yW6ymyzl9ZzHPHan7Hy/E7IfduedmVFOTo7S0tJksVjc1pOkHTt2eGxj5syZmjZtmtv8cePGKTIy0t9dALAPGjVqVLC7AGAPR50A4A11AkBrqBEAvGmtToTXhCs1P1WpealKy09Tal6qUvNTFV3V/svAGxlVxFSoPLb8j8fYCpXHlP/xPLZc5THlqoqukrG6hurRitYBuwYAnYPPEwBaU11dHewu7JXadc/32bObxj1BVVWVpKZL1O/OEYxXVVUpIiLC+djaep5MmTJFkyZNck6XlZUpKytLc+bM4cx3AC5sNptGjRqld955R3a7PdjdAbAHok4A8IY6AaA11AgA3jSvE1X5Vepd31t96vuoT30f9a7vrb71fXVAg28Bd6MaZbfaVWAtkN1qV35IvnO6wFoge0jT83xrvoqsRWq0NDa9sGrXWNBhuwnAD3yeAOCNzWbTyJEjg92NvVKbw/fff/evQR9u4d4mUVFRkuRyWXgHx19kONaJioryab3dRUREeAzt8/Ly2tdpAPs8u93uvDIHAHhCnQDgDXUCQGuoEQBCFapUpSpDGUpXuvOxZ2lPHT/veF31+1Xq2tjV5+3t0A6t3m1Yq7WqbqyWGjtwRwAEDZ8nACDw2hy+d+/eEd1oP8cl4z39B5GTk6OkpCRncJ6RkaEvvvhCxhiXS887XpuZmdkJPQYAAAAAAAAAdxZZlKQkpSjFY7De/LlNNlnl4aqclZI2ttzGTu3UGq1xC9qLVNRh+wUAALC/aNdl5/ckXbt2VUpKir7//nu3ZStWrNCgQYOc04MGDdJLL72ktWvXqn///s753377rXM5AAAAAAAAAASCRRYlKlGpSlXKrsHTc8djspIVGqBDtiWWEq0xa/SrftVardWvu4ZsZQdk+wAAAHC314fvkjRq1Ci98sor2rZtm7KysiRJn3/+udavX6+JEyc61zv77LM1ceJEPffcc3rmmWckScYYPf/88+ratauOO+64oPQfAAAAAAAAwJ7PEaa3FKLvHqgHMkx3qFGNcnYNubsGx/Mc5ag+uV6nXHGKHp//uHJyuZw0AABAZ9rjw/dnnnlGJSUl2rFjhyTpww8/VHZ2019n3njjjUpISNBdd92lt956S8OGDdPNN9+s8vJyPfLIIzrkkEM0btw457a6deumW265RY888ojq6up01FFH6d///reWLl2q+fPnKyQkJCj7CAAAAAAAAKDzNQ/TfQnUbbIFPEyXpCpVKV/5KlCB87FABS6huuOxRCWtbisjPEPHxB0jWVpdDQAAAB1gjw/fH330UW3ZssU5/e677+rdd9+VJF166aVKSEhQVlaWvvzyS02aNEl33nmnwsPDNXLkSD322GPO+707PPjgg0pMTNTs2bM1d+5c9e7dW6+99pouvvjiTt0vAAAAAAAAAIFlkUVd1MVriO543pFhevMgvXmg7ul5hSoC3gcAAAB0vj0+fN+8ebNP6w0YMECffvqp1/WsVqumTJmiKVOm+NkzAAAAAAAAAJ0lXOHKVKa6qZuylKVuzYYsZamruipVqR0SplerutUgffd5hOkAAAD7J78/iR50kPTkk9JZZ3le/tFH0k03SZs2+dsSAAAAAAAAgH1RhCLUVV1bDNa7qZvSlBaw9qpV3aYz08tVHrC2AQAAsO/yO3zfvFkqb+WzZ3m51Oyq8QAAAAAAAAD2E3GKc17q3fGYpjS3oD1FKX6106hG5e4afAnUCdMBAADQEQJyDSaLpeVl330ndekSiFYAAAAAAAAABFOsYt3C9ObPd3+MUITfbTaoQTu0Q9m7hm3a5nzumM5VrupVH4A9BAAAANqvXeH7U081jVJT8H7LLdLdd7uvV1oqlZRIF1/c/g4CAAAAAAAA6BgximlTmB6pyIC2X696bdf2FoP1bGUrV7lqUENA2wUAAAA6QrvC99RUacCApuebN0tduzaNzVksUkyMdMQR0nXX+dlLAAAAAAAAAH6JVayO0BE6dtdwjI5RqlID3k69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n3/eSDJnnHGGx2337dvXTJ482TntS30yxphJkyYZSebSSy81s2fPNg899JA56KCDTGhoqPn222+97pOjX6NGjTIvvPCCueyyy4wk8+CDD7qst3PnTtO7d2+TmppqHnroIfP444+brKws061bN2O32336+fm6T75+pwN2R53omDrRvXt3k5SUZE477TQTGhpqLr/8co/rHXHEEebAAw80t99+u3nxxRfNlClTTFxcnElLSzM5OTle2zGmc2sS9h8dURv85evv8MaNGz1+Pxg8eLAJCQnx+N6aOXOmSU1NNY2NjcYY3+vShx9+aKxWqznyyCPNU089Ze6//35js9lM165dTX5+vtd96szjCBy/RKBRJzqnTkydOtWEhYWZI444wvTp08e0FFf/4x//MFFRUeaiiy4yzzzzjHnyySfN4MGDjSTz8ssv+/TzC8axTcJ3AAF3/fXXt1gsOzN8P/30001GRoYpLS11znvxxReNJPPpp5+2+tqlS5caSWb69OluyyoqKkxkZKSZM2eOMcaY7OxsExYWZq6//nrnOo2NjeaEE04w3bp1M/X19c75//rXv4wk8+6777Zrn7Zu3eoMEFr74r9s2TK3/zjWr19vIiIizCWXXOJTW/379zeHHXaYqaurc867++67jcViMWvXrnXOc+xT83/T/Px806VLF3PRRRf5umvYTzlCte+++87n1/gapDl8++23RpJ55JFHXLbRs2dPc+yxx3p9/SmnnGLi4+NNVVWV27J7773XdO/e3Tn917/+1URFRZktW7Y45y1atMhIMrNnz261na1btxqLxWKuvvpqr31qy/vO1/dyS3zdp7bUQqAtqBN/aEudKCsrM4WFhcYYY956660Ww/eCggLnHwY0N27cOCPJbNiwwWtbnVmTAGOMOeOMM0xKSoopLi52W5aXl9eubbY1VPPnd3nevHlGkpk/f77bso0bN7q8X32tT3V1dSYqKsrlD4SNMWbTpk1Gkrnpppta7VNlZaVJTk42I0eOdJl/ySWXmJiYGFNUVOSc99BDDxlJZsWKFc55a9euNSEhIWbKlCmtttOWfTLGv+902L9RJwJfJ4wxZvPmzc6D8zExMS2G719++aXbZ7Evv/zSSDJ3332313Y6syZh/9IRtcFf/vwOV1ZWmri4OHPqqad6XH7CCSe4vE99rUv9+/c3vXr1cjm2uGrVKmO1Ws2kSZO87lNnHkfg+CUCjTrROXUiNzfXVFZWGmNaz5PWrFljCgoKXOZVV1ebgw8+2HTr1s1rO8YE59gm4TuAgPMlfP/Xv/5lHnjgAdO1a1cTERFhTj75ZLeDu927d/f4RW7o0KFev/CWlpaa0NBQc9ttt7nMr6mpMbGxsWb8+PGtvv6vf/2rsVgs5vfff3db9sEHHxiLxWJyc3ONMcY8++yzRpL55ZdfXNZ7/fXXjSSXvzQ/+uijzZAhQ4wxTX9xWV5e3mo/WtPWL/7GGDN48GAzePBgl3klJSVm7dq1pqSkxDnvl19+MZLMs88+67Lu9u3bjSRz//33O+eNHj3apKWluX2xnjBhgomOjjbV1dVt6iP2L95CNUfNeOONN8zdd99tMjMzjcViMcXFxc5lnsKk5m677TYTEhLictDWGGNmzJhhJJmtW7e2+NodO3YYq9VqrrjiCo/LBw8ebK677jrndGpqqhk9erTben369DGnnHJKq/10fJBesmRJq+sZ4/v7ri3v5draWrN27VqzY8cOl3V93ae21EKgLagTf2hLnWiutfC9JR988IGRZD744AOX+b/99pv57bffXOZ1RE0CWtO3b19z0kkn+bTuyy+/bIYNG2ZSUlJMeHi46devn3nuuedc1unevbuR5DK29jnb39/l008/3cTExHj8LvD000+bhIQE58EuX+tTZWWlkeRyoMiYpit2WK1Wc8cdd7Tap48//thIMh9//LHL/OXLlzuvauZw1FFHmaOOOsptG57OBtqyZYtbyOjrPvn7nQ77N+pE4OvE7loL31uSlJRkzjvvPJd5BQUFZu3ataaiosI5r6NqEuBrbfj999+NJOeJN81JMlOnTnVOT5061flHq5dffrlJSEgw8fHx5oorrnD5vW6JP7/DjkB57ty5bsuKi4tNSEiI8+pcvtalwsJCI8nt/19jmo5FZmZmet2njjiOwPFLdBbqROfUieZay5Na4riaT1lZmXPennRsk3u+AwiKBx98UO+9954mT56sKVOm6L///a8uueSSgG1/9erVqq+v15FHHukyPzw8XIMGDdLKlStbfG1dXZ0WLFig4447Tj169HBbvnDhQh1xxBFKS0uTJK1cuVIxMTHq16+fy3pDhgxxLpeksrIyrVixQkcddZTuuusuJSQkKDY2VgcddJAWLFjgz+76xBijvLw8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wrWtQNWJ9rr66qv10Ucfae7cuR5v/edJsI5tEr4D2GMlJiaqpKTEbf6WLVu8vnbgwIEKDQ3V999/7zK/trZWq1at0qBBgzy+bv78+YqNjXX7MipJJSUlWr58uctfg0nSoEGDVFlZqbVr17rM//bbb53LpabinJ6eru3bt7tte8eOHYqMjPT5i6gvqqurdeaZZ2r9+vX66KOPXP4j9cbR591/fjt27FB2drbLz2/QoEH68ccf3Q5KfPvtt4qOjlafPn3avQ9AIAwaNEjr1693u4TT7u/R3Zf99ttvLR70+vjjj9W/f3/16NHDOa9r165KSUlxe99I0ooVK1qtOxaLRRdffLFvOyTf33dteS970pZ98rUWAnuifbFOtNX777+vq666Suedd56effbZNr22s2oS4I3j6lSOgyMffvihampq9MEHH+iaa67RGWecoeHDh3v8Y52WDp550t7f5ddff109e/bUMccc47bM0+2tHG35Up/y8vIkeT7YV1dX5/UKWy3t0/fff6/GxkbncqvVqkMOOcRjHfv222910EEHef1O4+s+tfc7HdAa6kT760RbFRYWasSIEaqpqdGnn37q8V6rLenMmgRI7rXBcTbq7sclfTkm2Rbt/R1+4403ZIxp9bvI7n+o0566lJaWphNOOEF9+vRRQ0ODlixZoqOPPrrVM1o78zgCxy/RmagTgasT7XHbbbdpzpw5euKJJ3TRRRf5/LpgHdskfAewx+rZs6f++9//ulxq7KOPPtK2bdu8vjYhIUHDhw/Xa6+9pp07dzrnz5s3T+Xl5Ro9erTbawoKCrR48WKde+65io6Odlv+2WefSZJGjBjhMv/ss89WWFiYnnvuOec8Y4yef/55de3aVccdd5xz/gUXXKBt27a53KfWbrfr/fff18knn+zxfrHt0dDQoAsuuEDffPON3nrrLR177LEtrltaWqp169a5XE5vwIABOvjgg/XCCy+4fDGfNWuWLBaLzj//fOe8888/X3l5eXr33Xdd9umtt97SmWee6fEMPqAznX/++WpoaNALL7zgnFdTU6M5c+bo6KOPVlZWlttrHGectBR0LVy40O2glySNGjXKrU59/vnnWr9+vce64/iL2eOPP97t0lPe9smX911b3st1dXVat26d21+C+rpPbamFwJ5mX6wTbfHVV1/pwgsv1Iknnqj58+e3+nlk48aN2rhxo8u8jqhJQGu++OILj2eHLFy4UJLUt29fSX+cWdJ83dLSUs2ZM8fttTExMR7/8NeT9vwur1y5UmvXrm21Zux+eyvJ9/rkOGD85ptvurz+xx9/1P/+9z8dfvjhre7TySefrKSkJM2aNctl/qxZsxQdHe1Sz84//3x99913Lgew/ve//+n//u//3OrY1q1btW7dunbtU3u+0wEO1InA14m2qKio0BlnnKHt27dr4cKF6t27d4vr2u12rVu3TpWVlc55HVWTAF9rQ3x8vGw2m7766iuX9Zp/3w2U9vwOv/766zrggAN0/PHHuy3Ly8vTjz/+6PZdxN/P4o8++qhycnJ06623et2njjiOwPFLdBbqROfUibZ45JFH9Oijj+quu+7SzTff3OJ6e9SxTQMAAXb99deblsrLF198YSSZt956y2X+77//biSZOXPmOOf95z//MZLMsGHDzKxZs8zkyZNNenq66dmzpxk6dKjXfvzwww8mIiLCHH744WbWrFnm7rvvNpGRkWbEiBEe1//HP/5hJJn//Oc/HpePHTvWnHTSSR6X3XbbbUaSmTBhgnnxxRfNyJEjjSQzf/58l/Vyc3NNRkaGiYuLM1OnTjWPP/646dOnj4mKijKrVq3yuk9ffvmluf/++839999vUlNTTY8ePZzTX375pXO9m2++2UgyZ555ppk3b57b2NycOXPcfvbGGPPhhx8ai8ViTj75ZPPCCy+Ym266yVitVnP11Ve7rFdfX2+OOeYYExsba6ZNm2aeffZZM2DAABMXF2fWrVvndZ+wf3P8/n333Xcel7dUM5ov++KLL7y2M3r0aBMaGmpuu+02M3v2bHPccceZ0NBQl/eNQ319vUlLSzPHHHOMx21t2rTJSDJLlixxW7Z161aTnJxsevbsaZ5++mkzY8YMk5iYaA455BBTXV3ttv6HH35oJJnnn3/e6z7s3kdf33e+vpcddfjyyy9v9z75WguBtqBOtK9OGGOcnxEuvPBCI8lceeWVznkOmzdvNgkJCSYqKso8++yzbp8ZfvrpJ5dtdu/e3XTv3t3t5xHomgS0ZsCAAebAAw80kyZNMi+88IJ55plnzMUXX2xCQkJMjx49THFxsTHGmHXr1pnw8HBzyCGHmGeeecY8+OCDpmfPnuawww4zkszvv//u3OZ1111nLBaLuf/++80bb7xhPv/881b70Nbf5VtvvdVIavHz8YknnmiuuOIKj8t8rU+nnnqqkWTOPfdcM2vWLPO3v/3NJCYmmpiYGJ8+lz/77LNGkjn//PPNiy++aMaOHWskmenTp7usV1ZWZnr27GlSU1PNww8/bJ544gmTlZVlMjMzTX5+vsu6Q4cO9fjd0Nd9aut3OsCBOtExdeKDDz5wfpYIDw83hx9+uHO6+WeGs88+2/nZY/fPFu+9957LNqdOnerx81pH1CTA19pgjDF33nmnkWTGjx9vZs2aZS666CJzxBFHGElm6tSpzvUcv8MFBQUubTm+xzSvI5609Xd49erVRpK58847PW7v5ZdfNlFRUaaystJtma91ad68eeacc84xjz/+uHnhhRfMmDFjjCRz1VVXtbovDh1xHIHjl+gs1InOqRObN292foY4+uijjSTn9Kuvvupc79133zWSTO/evT3mHLm5uc5196Rjm4TvAAIuUOG7McY89thjpmvXriYiIsL86U9/Mt9//70ZOnSoT+G7McYsXbrUHHfccSYyMtKkpKSY66+/3pSVlXlc95hjjjGpqammvr7ebVljY6PzPzdPGhoazIwZM0z37t1NeHi4GTBggHnttdc8rrtx40Zz7rnnmvj4eBMVFWVOPvlks2LFCp/2x/Eftaex+X/ojoNcLY3NtfTh1Rhj3nvvPTNo0CATERFhunXrZu655x5TW1vrtl5RUZEZP368SU5ONtHR0Wbo0KEthiRAc50VqlVVVTn/gCciIsIcddRRLf6hjeMPf55++mmPy5955hmTkJBg6urqPC5fs2aNGTFihImOjjZdunQxl1xyicsHweYuvPBCExYWZgoLC73uw+7a8r7z5b3c0gfUtuxTW2oh4CvqRPvrhC+fBRw/I18+XxjjOXw3JvA1CWjNJ598Yq688kpz8MEHm9jYWBMeHm569eplbrzxRpOXl+ey7gcffGAOPfRQExkZaXr06GEeeugh8/LLL7sd5MrNzTUjR440cXFxRpJP3zd8/V1uaGgwXbt2NYMHD/a4nZKSEhMaGmoWLFjgcbmv9amystL8/e9/N/379zdRUVEmISHB/OUvfzErV670ui8OL7zwgunbt68JDw83PXv2NE888YRpbGx0W2/btm3m/PPPN/Hx8SY2Ntb85S9/MRs2bHBbr6XwvS01ty3f6QAH6kTH1InLL7+8xc8MzY8pdO/evcX1dv8c0VL4bkzgaxLQltpQWVlpxo8fbxISEkxcXJwZM2aMyc/PD3ioZkzbfocdYd/PP//scfn5559vzjjjjBbb8qUuffvtt+bEE080iYmJJjIy0hx22GHm+eef9/j+a0mgjyNw/BKdhTrROXWitWMRzT9jtZaH7P75YU86tmkxxsP1EwAALlasWKGjjz5av/zyS5vunQ5g33PGGWcoNjZWCxYsCHZXAOyhqBMA2mLBggW65JJLZLfblZCQEOzuANgDUScA+KK+vl7JycmaOXOmrrvuumB3B8AeiDrROUKD3QEA2FvMmDGD4B2ATjrpJJ1wwgnB7gaAPRh1AkBbdOnSRU8//TSBGoAWUScA+KKoqEgTJ07UueeeG+yuANhDUSc6B2e+AwAAAAAAAAAAAADgJ2uwOwAAAAAAAAAAAAAAwN6O8B0AAAAAAAAAAAAAAD8RvgMAAAAAAAAAAAAA4CfCdwAAAAAAAAAAAAAA/ET4DgABVFNTo/vuu081NTXB7gqAPRR1AoA31AkAraFGAPCGOgHAG+oEAG+oE+1nMcaYYHcCAPYVZWVlSkhIUGlpqeLj44PdHQB7IOoEAG+oEwBaQ40A4A11AoA31AkA3lAn2o8z3wEAAAAAAAAAAAAA8BPhOwAAAAAAAAAAAAAAfgoNdgf2Ro2NjdqxY4fi4uJksViC3R0Ae5CysjKXRwDYHXUCgDfUCQCtoUYA8IY6AcAb6gQAbxz1Yfv27YqNjZXVyvncvuKe7+2QnZ2trKysYHcDAAAAAAAAAAAAADrMtm3b1K1bt2B3Y6/Bnym0Q1xcXLC7AGAPlZaWpjvvvFNpaWnB7gqAPRR1AoA31AkAraFGAPCGOgHAG+oEAG/S0tI0ceJESeSibUX43g5cah5AS6xWqyIjI7kEC4AWUScAeEOdANAaagQAb6gTALyhTgDwxmq1KiIiQhK5aFtRWQEAAAAAAAAAAAAA8BPhOwAAAAAAAAAAAAAAfiJ8BwAAAAAAAAAAAADAT6HB7sC+LDo6WjabjXshBIkxRna7XZWVlcHuCgAAAAAAAAAAALDHs1qtSk5Ols1mC3ZX9kqE7x3AYrFo3LhxOuussxQeHk74HiTGGNXW1uqDDz7QnDlzZIwJdpcAAAAAAAAAAACATtWlSxelpKQoNTXVOe4+7Zhns9lktVpVVlamyZMnB7vrex3C9w4wbtw4XXTRRerSpUuwuwJJF110kSTp5ZdfDnJPAAAAAAAAAAAAgPazWq1KSkpyBuUpKSnOcfdpxxgeHh7sbu83CN8DLCYmRmeddRbB+x6kS5cuOuuss/Tmm29yCXoAAAAAAAAAAADsMcLDw1sMzz1NJycny2q1BrvbaAHhe4AlJyfz1yN7oPDwcNlsNm3dujXYXQEAAAAAAAAAAMA+zGKxKCUlRd26dVO3bt2UlZWlbt26KS0tzS1Mj4+PD3Z3EUD7TPi+YcMG3Xvvvfr6669VVFSkAw44QBdffLEmT56s6Oho53rLly/X7bffrh9//FHx8fEaM2aMZsyYodjY2ID0w2KxcI/3PRD/LgAAAAAAAAAAAPCX1WpVamqqM1DffczKylLXrl05WXc/tU+E79u2bdOQIUOUkJCgG264QUlJSfrmm280depU/fDDD3r//fclSatWrdIpp5yifv366fHHH1d2drYeffRRbdiwQZ988kmQ9wIAAAAAAAAAAABAsISEhCg9Pd1joO54npmZqbCwsGB3NSAaGxtlt9uVn5+vgoIC5efnKz8/X1VVVerRo0ewu7dX2ifC93nz5qmkpERff/21BgwYIEmaMGGCGhsb9eqrr6q4uFiJiYm66667lJiYqCVLljgv4dCjRw9dffXV+uyzzzRixIhg7sY+77777lN5ebkeffTRYHcFAAAAAAAAAAAA+4EuXbo4L/Oempra6vPU1FSFhu7d8WlhYaHsdrsKCgpcAvXmo2N+YWGhGhsb3baRkZGhyy+/PAi93/vt3b89u5SVlUmS0tLSXOZnZGTIarUqPDxcZWVlWrRokSZOnOhy74SxY8dq4sSJWrBgAeH7Lna7XXPmzNHXX3+tgoICJSYmqk+fPrrooos0ZMiQYHcPAAAAAAAAAAAA+6mYmBilpqa2ODYP1G022159+fe6ujoVFBS4hOmtTRcWFqqhoSHY3d6v7RPh+0knnaSHHnpI48eP17Rp05ScnKzly5dr1qxZuummmxQTE6Nly5apvr5eRx55pMtrw8PDNWjQIK1cubLF7dfU1KimpsY53Tzst1qtLuumpqYqJCREoaGhe+U9xrdv364rrrhCcXFxmjRpknr37q26ujp98803euSRR/Tvf/+7zdtsaGiQxWKR1WqVxWLp9EtxGGMUEhKi1NRU1dbWdmrb2P/YbDaXRwDYHXUCgDfUCQCtoUYA8IY6AcAb6gT2NKGhoUpKSpLNZpPNZlNycrLzeUpKisu0zWZTVFRUsLvcbpWVlSosLHQZi4qKVFRU5DLteO7IJH3hyMICgfrQfhZjjAl2JwLhgQce0IwZM1RVVeWcd/fdd+uBBx6QJL399tsaPXq0vvrqK51wwgkurx0zZoyWLl2qnJwcj9u+7777NG3aNLf5d955pyIjI13mxcTE6E9/+pO6du2q0NBQJSQkBP2+D3V1dSotLfVp3csuu0y//vqrli5dqujoaJdlpaWlSkhI0OzZs7VgwQJt2bJFXbp00amnnqp77rlHMTExkqR//etfuu+++/TUU09pxowZ2rRpk5YtW6bHHntMZWVlGjhwoObMmaPa2lqdc845uv/++51/dVRTU6MHHnhA77//vsrLy3XooYfqvvvu06BBgyRJy5cv1+jRo/Xmm29qxowZWr9+vQYMGKDHH39cvXr18rhP9fX12r59u5YtW6aKiop2/hQBAAAAAAAAAADgi4iICMXExDjH2NhY5/Po6GiXZbvnUXur6upqlZWVtTo2P9l3T1ddXa0HH3xQpaWlLlcVR+s69Mz3Qw/17/UvvST5epXzHj166MQTT9SoUaOUnJysjz/+WDNmzFB6erpuuOEGZygfERHh9trIyEiX0H53U6ZM0aRJk5zTZWVlysrK0pw5c9zOfO/WrZsOO+wwFRUVyWKxKCEhIeiXs3BcksKb0tJSffHFF7rhhhtUUVHhMaguKChQZWWlbr31VmVmZmr79u2aMWOG7r77bt19992SpJ07d6qyslJPPvmk7r77bnXp0kXGGFVXV2vp0qWSpBdeeEE7duzQ1KlTFRERoRtvvFGS9NBDD2nx4sWaNm2aMjIyNHfuXF100UX68MMPlZCQoJKSEknS9OnTdfPNNysxMVHTp0/XTTfdpFdeecXjfhljVF5ergULFig7O7s9P0LAZzabTaNGjdI777wju90e7O4A2ANRJwB4Q50A0BpqBABvqBMAvKFOIFBCQkLUvXt39enTR71793Y+9urVa58J1B2Ki4uVk5OjHTt2KCcnx2XcsWOHcnNzVV5eHuxuBozNZtPIkSOD3Y29UoeG72vWSAcfLO12K3av6uqkb76RfP0dffPNNzVhwgStX79e3bp1kySdd955amxs1B133KGLLrrIeQkKT39RUl1d3eolKiIiIjyG9nl5eW7zwsPD1dDQoPr6eklNwW+wGWNUV1fndb3ff/9dxhhlZWW1uv4FF1zgfJ6amqprr71WM2fO1O233y5Jzv2//fbb1adPH+e6jY2NCgsL0z333KPIyEh1795d11xzjZ5++mlNmDBBNTU1euuttzR16lQdffTRkqS77rpL//3vf/XOO+/osssuc96n4tprr9Vhhx0mSRo7dqxuueUWlZeXe/x3cvQpPz+/xasbAIFmt9v5fQPQKuoEAG+oEwBaQ40A4A11AoA31An4Kjw8XL1791b//v3Vv39/9evXT/3791efPn1azGX2FoWFhSooKFB+fr7zMTs7W9u2bVN2drays7O1fft2VVZWBrur2Et0+D3f77lHuvjitr3GbpfackuC5557TocffrgzeHc466yzNHfuXK1cuVIZGRmS5PE/kpycHGVmZratk/sgX/9Q4Ntvv9XcuXO1ZcsWVVRUqKGhQTU1NaqurnZehj8sLEy9e/d2e23v3r1dLtV/yCGHqLKyUnl5eSovL1d9fb0zVJea7vMxYMAA/f77727bcXDcd6K4uFjp6em+7zAAAAAAAAAAAAAkSVFRUTr44IOd4bpj7Nmzp0JDOzxSDIiioiK3ML2goMDjvMLCQufJtECgdOg75eyzpaystr8uMrLptb4G8Hl5eUpMTHSb7zh7u76+XgMHDlRoaKi+//57jRkzxrlObW2tVq1a5TJvf5WVlSWLxaLNmze3uM6OHTs0adIkjRo1Stddd53i4+P1008/6f7771ddXZ0zWI+IiJDFYumwvnoq8o2NjR3WHgAAAAAAAAAAwN4sNjZWKSkpzjE9PV19+/Z1hu09evRwu91ysFVVVSkvL0/5+fkex+bL7HY7YTqCrkPD9/fea9/rYmPb9to+ffros88+0/r1610uc/7GG2/IarXq0EMPVUJCgoYPH67XXntN9957r+Li4iRJ8+bNU3l5uUaPHt2+znrR2r3kO4uvfUhISNAxxxyjt99+WxdeeKHbpfh37typdevWqbGxUbfccouzAC9evNjnvmzYsMHlDPk1a9YoOjpaaWlp6tKli8LCwvTTTz85r1RQX1+vX3/9VRdeeKHPbQAAAAAAAAAAAOzroqKilJqa6jKmpKS4PTrG1m7B3FkaGhpkt9tbDNN3D9UrKiqC3WWgTfaOa0R4cdttt+mTTz7RCSecoBtuuEHJycn66KOP9Mknn+iqq65yXlJ++vTpOu644zR06FBNmDBB2dnZeuyxxzRixAiddtppHdK3LVu2dMh2O8rtt9+uq666SpdffrmuvfZa9erVSw0NDfr222/1zjvvaPr06aqvr9e//vUvnXDCCfr555/17rvv+rz9uro6PfDAA7ryyiuVk5Oj2bNna/To0bJarYqKitKoUaP09NNPKz4+Xunp6Xr11VdVXV2ts88+uwP3GgAAAAAAAAAAILhCQkKcobmncfdlsbGxwe6yi9raWq1fv15r167Vhg0blJub6xaoFxUVcSVj7NM6NXz/6qvWl1ssTZec79ZN2nXis09OPPFELV++XPfdd5+ee+45FRYW6sADD9T06dN1++23O9cbPHiwFi9erDvuuEMTJ05UXFycxo8fr5kzZ7Zzj/Y93bp102uvvaaXX35ZTz75pOx2uxITE3XwwQfrzjvvVJ8+fTRx4kS9+uqrevbZZ3X44Yfr+uuv19SpU33a/lFHHaWsrCxNmDBBdXV1GjFihCZMmOBcfsMNN8gYo6lTp6qyslL9+vVzhvEAAAAAAAAAAAB7O6vVqoMOOkgDBgzQwIEDNWDAAA0YMEB9+/ZVREREsLvnVVVVldatW6dff/3VOa5du1YbN27ksu/Y73Vq+H7SSU0Buy9695amTZMuuMC39YcMGaKFCxd6Xe/444/XsmXLfNvofspms+n22293+cOF5i6++GJdfPHFLvPOOOMM5/MzzzxTZ555ptvr7rvvPufza665xuO2IyIiNHnyZE2ePNnj8iOOOELfffedy7y+ffu6zQMAAAAAAAAAAAim0NBQ9ezZUwcffLD69evnDNkPPvjgPeIS8N7s3LnTJVx3PN+yZQtnrwMt6NTw/T//ke64Q6qpka6+WurVq2n+hg3SSy9JUVHSPfdIW7ZIs2dLF18shYRI55/fmb0EAAAAAAAAAAAAWhcVFSWbzeYcMzMz1bdvX2fY3rNnT4WFhQW7m14VFRXpl19+cQnYf/31V23fvj3YXQP2Op0evkdGSt9+K4WHuy677rqmM+P/+1/poYeka6+Vjjyy6TnhOwAAAAAAAAAAADpSVFSU877qze+v7um5zWZTdHR0sLvcotLSUhUUFLiM+fn5bvOys7OVn58f7O4C+4xODd/nz286s3334F1qCuUvuUSaPr0pcI+MlC69VLr//s7sIQAAAAAAAAAAAPYFYWFhPofpqampio2NDXaXW1RVVaX8/HyPoyNYd4x2u101NTXB7jKwX+rU8L2iQsrLa3l5To5UXv7HdJcuTZedBwAAAAAAAAAAALp06aK0tDRnYJ6amtridJcuXYLdXZ/U1NRo3bp1+uWXX7Ru3Trt2LHDLVgvbx6gAdhjdWr4fvLJ0pNPSsccI/3lL67LPvxQeuop6ZRT/pi3apXUo0cndhAAAAAAAAAAAACdKiMjQxkZGV7D9NTU1L3iHuotqaur0//+9z/98ssvLuNvv/2mhoaGYHcPQAB0avj+zDPSsGHS2WdLXbtKPXs2zd+4Udq+XereXfrHP5rmVVdLW7dKV13VmT30X2Njo4wxwe4GdmOM4T8uAAAAAAAAAACCLCkpSUcddZSOPvpoDRkyREOGDFFKSkqwuxVQpaWlWrdundatW6e1a9c6n2/cuFH19fXB7h6ADtSp4fsBB0irV0vPPy99+qm0ZUvT/H79pFtuka65RoqJaZoXGSktXNiZvQuMnJwc2e12xcXFKTIyMtjdgaTq6mrZ7Xbl5uYGuysAAAAAAAAAAOw3IiIiNGjQIGfQfvTRR6tXr17B7la7lJWVuVwG3m63q6CgQIWFhbLb7bLb7SosLNTvv/9OHgHsxzo1fJek6Ghp0qSmcV9UX1+vW2+9VX/961915JFHKjQ0VBaLJdjd2i8ZY1RfX6/vvvtOzz//PH9NBgAAAAAAAABAB7FYLOrbt6/zbPajjz5ahx122B57mfiqqirnfdWbh+q7P3dM19TUBLvLAPYCnRq+P/usdP31LS+vr5fGjpVef71t273iiiv0yiuvtLg8OztbXbt2lSQtX75ct99+u3788UfFx8drzJgxmjFjhmJjY9vWaCsKCgp0//33KyEhQfHx8YTvQWKMUVlZmUpLS7kVAAAAAAAAAAAA7WSxWJSYmKiUlBTZbDbZbDbn89TUVB1yyCE66qijlJCQELQ+1tfXq6CgQHl5ec7APC8vz2OQnp+fr4qKiqD1FcC+q1PD95tukqKipCuvdF9WUyONGiUtWtT27V5zzTUaPny4yzxjjK699lr16NHDGbyvWrVKp5xyivr166fHH39c2dnZevTRR7VhwwZ98skn7dmlFhljVFJSopKSkoBuFwAAAAAAAAAAwB9Wq1VpaWlKSUlpcWwesCcnJyskJKTT+1lWVuYM0x1jS9PFxcWciAcg6Do1fJ82TZowQQoPly699I/5FRXSmWdK33wjvf1227d77LHH6thjj3WZ9/XXX6uyslKXXHKJc95dd92lxMRELVmyRPHx8ZKkHj166Oqrr9Znn32mESNGtGu/AAAAAAAAAAAAgiUyMrLVIL35mJqaqoSEBN17773B7rYqKyv1ww8/aMWKFfrll1+cQbrjjPXq6upgdxEA2qRTw/d77pGqq6Vx45oC+DFjpOJi6fTTpV9/lRYulIYNC0xbr7/+uiwWiy6++GJJTX8dtWjRIk2cONEZvEvS2LFjNXHiRC1YsIDwHQAAAAAAAAAABF1sbKzPYXpKSkpAb63bURobG/XLL7/o22+/1YoVK7RixQqtWbNGDQ0Nwe4aAARMp4bvkvTAA00B/GWXSSUl0jPPSNu3N11u/uijA9NGXV2dFixYoOOOO049evSQJK1evVr19fU68sgjXdYNDw/XoEGDtHLlysA0DgAAAAAAAAAA4EFsbKwyMzO9jlFRUcHuqt+2bdvmDNq//fZb/fjjjyovLw92twCgQ3V6+C5Jjz7aFMD/9a9SWpr05ZfSwIGB2/6nn36qwsJCl0vO5+TkSJIyMjLc1s/IyNDSpUtb3F5NTY1qamqc02VlZZKktLQ0Wa3WQHUbwD7AZrO5PALA7qgTALyhTgBoDTUCgDfUCSA4oqKilJKSovT0dKWlpSktLc3j87i4uGB3tUMUFxdrzZo1WrlypVauXKlVq1YpLy/PZZ24uLh9dv+BfQ2fI9qvQ8P3m25qeZnFIsXESIMGSS+84Dr/qaf8a/f1119XWFiYxowZ45xXVVUlSYqIiHBbPzIy0rnck5kzZ2ratGlu88eNG6fIyEj/OgtgnzRq1KhgdwHAHo46AcAb6gSA1lAjAHhDnQD8Z7FYFB0drdjYWK/jvscVx2kAAQAASURBVJQVNDY2qrKyUhUVFc7Hqqoq57RjbD7d2NjofH2PHj2cVyUGsPeqrq4Odhf2Sh0avj/zjPd1/vMf12l/w/fy8nK9//77+vOf/6zk5GTnfMclWpqfwe5QXV3d6iVcpkyZokmTJjmny8rKlJWVpTlz5nDmOwAXNptNo0aN0jvvvCO73R7s7gDYA1EnAHhDnQDQGmoEAG+oE0DrEhISZLPZlJycrOTkZNlsNuf07o9JSUn7RAZQXV2toqIiFRYWqrCwUOXl5bLZbFqxYoW2bt3qsqyoqEilpaUyxgS72wCCyGazaeTIkcHuxl6pQ8P3Zn/o1Gn+/e9/q7Ky0uWS89Ifl5t3XH6+uZycHGVmZra4zYiICI9nzO9+yRQAcLDb7R7rDQA4UCcAeEOdANAaagQAb6gT2F/ExsYqJSVFqampzrH59O7Pw8LCgt1lv5WXl6ugoMDncff7rGdkZOiaa67R7NmzqRMAEGBBued7R5o/f75iY2N11llnucwfOHCgQkND9f3337tcjr62tlarVq1ymQcAAAAAAAAAADpfZGSkMzBvKURvPt3aVW33JoWFhdqxY4d27Nih7du3Ky8vr8UwnUtBA8Cea58K3wsKCrR48WJddNFFio6OdlmWkJCg4cOH67XXXtO9996ruLg4SdK8efNUXl6u0aNHB6PLAAAAAAAAAADsd7p06aLDDjtMgwYNcj727NlT8fHxwe5aQJWVlWn79u3OYN3TmJOT4/GWuQCAvU+Hhu+HHio9+KB0xhlte11pqXTCCdJLL0lDhvj+un/961+qr693u+S8w/Tp03Xcccdp6NChmjBhgrKzs/XYY49pxIgROu2009rWSQAAAAAAAAAA4CI+Pl5paWlKS0tTenq6x8euXbuqa9euwe6qXwoLC5WTk6Pc3FyXcfdQffdLvgMA9m0dGr6vWdMUpLdVfX3Ta9v6f9L8+fOVmpqq4cOHe1w+ePBgLV68WHfccYcmTpyouLg4jR8/XjNnzmx7JwEAAAAAAAAA2E/Ex8crMzOz1TE9PX2vvQx8Y2Oj7Ha78vPzlZ+fr4KCAufj7iF7fn6+amtrg91lAMAeqMMvO3/LLdLdd7ftNY2NksXS9ra++eYbr+scf/zxWrZsWds3DgAAAAAAAADAPiY6OtprqJ6ZmamYmJhgd7XNiouLnWF680B99+f5+fkqKipSY2NjsLsMANjLdWj4fvnl/r0+MzMw/QAAAAAAAAAAYH+SmJio9PR0ZWRkKCMjw+PzzMxMJSQkBLurPtu5c6dbaN7StN1uV11dXbC7DADYz3Ro+D5nTkduHQAAAAAAAACA/UdoaKhSU1PdQvTdg/X09HRFRkYGu7s+a2xs1Pr16/Xzzz9ry5YtHgP1goICVVVVBburAAC0qsMvOw8AAAAAAAAAAFoWGhqq9PT0Vu+lnpGRIZvNJqvVGuzutkttba3y8vKUm5urvLw8bd26VT/99JN++uknrV69WpWVlcHuIgAAfiN8BwAAAAAAAACgA1itVqWmpnq9n3pKSspeG6oXFBRox44d2rFjh3Jzc51j86A9Ly9PxcXFwe4qAAAdjvAdAAAAAAAAAIA2sFqtSklJcV7iffcwvWvXrsrMzFRaWppCQ/fOw/DFxcXOUL2lMTc3V7W1tcHuKgAAe4y98399AAAAAAAAAAACLD4+3hmo7z42v596SkqKQkJCgt3ddikpKVFubq5ycnJaDNVzcnK4vzoAAO1A+A4AAAAAAAAA2Gd16dJFKSkpzjEtLa3FgD0qKirY3W2XhoYG52Xec3JynI/NnzsuB0+oDgBAxyF8BwAAAAAAAADsNRISEpSamqrU1FRnoN7Sc5vNpvDw8GB3ud2qqqqcZ6K3FqoXFBSosbEx2N0FAGC/F5Tw/ddfpU2bpOJiyRj35WPHdn6fAAAAAAAAAACdLzQ0VDabTWlpaUpNTfX6uDeH6Q61tbWtXvbdMZaUlAS7qwAAoA06NXzfuFG69FJpxQrPobskWSztD99//PFH3Xffffr6669VXV2tgw46SBMmTNBNN93kXGf58uW6/fbb9eOPPyo+Pl5jxozRjBkzFBsb275GAQAAAAAAAAAuYmJinGenewvTbTZbsLsbMA0NDcrNzfUaqhcWFsq0dJAcAADstTo1fL/mGmn1aunJJ6UTTpASEwO37c8++0xnnnmmDj/8cN17772KjY3Vxo0blZ2d7Vxn1apVOuWUU9SvXz89/vjjys7O1qOPPqoNGzbok08+CVxnAAAAAAAAAGAfYrFYlJSU5PPZ6TExMcHuckBVVla63De9+ZiXl+cM1fPz89XQ0BDs7gIAgCDp1PB92TLprrukG28M7HbLyso0duxYjRw5Um+//basVqvH9e666y4lJiZqyZIlio+PlyT16NFDV199tT777DONGDEisB0DAAAAAAAAgL1EeHi4+vfvr0GDBmnQoEE6+OCDlZ6e7ryHemhoUO5i2mHq6+uVl5fnMVDffSwvLw92dwEAwF6gUz8t2WxSQkLgt/v6668rLy9P06dPl9VqVUVFhaKiolxC+LKyMi1atEgTJ050Bu+SNHbsWE2cOFELFiwgfAcAAAAAAACwX0hKStJhhx3mDNoHDRqkfv36KSwsLNhd80thYaEKCgpUUFCg/Pz8Fp/n5uZy6XcAABBwnRq+X3ut9Npr0vXXSyEhgdvu4sWLFR8fr+3bt+ucc87R+vXrFRMTo8suu0xPPPGEIiMjtXr1atXX1+vII490eW14eLgGDRqklStXtrj9mpoa1dTUOKfLysokSWlpaS2eZQ9g/+S4R9m+dK8yAIFFnQDgDXUCQGuoEQC82b1OhIaG6qCDDtLBBx+sgw8+WP3799eAAQPUtWvXYHbTZxUVFbLb7SooKHAG63a7XYWFhW6PxcXFqq+v92m7YWFhSk9P7+DeA3smPk8A8Ib60H6dGr736SM1NEiHHSZdeaWUleU5hD/vvLZtd8OGDaqvr9fZZ5+t8ePHa+bMmVqyZIn+8Y9/qKSkRG+88YZycnIkSRkZGW6vz8jI0NKlS1vc/syZMzVt2jS3+ePGjVNkZGTbOgtgvzBq1KhgdwHAHo46AcAb6gSA1lAjAHiSkJCg1NRUpaam6txzz1VaWppsNptCAnkmlJ+MMaqsrFRFRYXHsby83GW6rq7O43ZCQ0OVnp5OgA74gc8TAFpTXV0d7C7slTo1fL/ggj+eT57seR2LpSmgb4vy8nJVVlbq2muv1dNPPy1JOu+881RbW6vZs2fr73//u6qqqiRJERERbq+PjIx0LvdkypQpmjRpknO6rKxMWVlZmjNnDme+A3Bhs9k0atQovfPOO7Lb7cHuDoA9EHUCgDfUCQCtoUYA+5fIyEglJyfLZrO5jMnJyUpJSXGZTk5ODtol42tqalzOSneMnqaLiorU0NYDwAACis8TALyx2WwaOXJksLuxV+rU8P2LLzpmu1FRUZKkiy66yGX+xRdfrNmzZ+ubb75RdHS0JLlcPt6hurrauQ1PIiIiPIb2eXl5/nQbwD7Mbrc7r7gBAJ5QJwB4Q50A0BpqBLB3Cg0Nlc1mU0pKinN0nKnuaYyPjw9qf3fs2KFNmzYpLy9P+fn5LT6WlpYGtZ8A2ofPEwAQeJ0avg8d2jHbzczM1C+//KK0tDSX+ampqZKk4uJi9ezZU5I8/keSk5OjzMzMjukcAAAAAAAAgH1S8zA9NTXVJVDfPWBPSUlRUlJSsLvsUUNDg9atW6dVq1Y5x59++kkFBQXB7hoAAMBepVPD9+Z+/VXasqXpeffuUv/+7d/WEUccoUWLFmn79u3q27evc/6OHTskSSkpKRo4cKBCQ0P1/fffa8yYMc51amtrtWrVKpd5AAAAAAAAAPZPze+bnpaW5nIm+u7Te2qY3pqdO3dq9erVWrlypTNoX7NmDfd1BQAACIBOD9/ff1+aNEnavNl1/oEHSo8/Lp11Vtu3OWbMGD344IP65z//qZNPPtk5/6WXXlJoaKhOOukkJSQkaPjw4Xrttdd07733Ki4uTpI0b948lZeXa/To0X7sFQAAAAAAAIA9UVhYmMvl3b0F6p5uP7k3qq2t1bp167RmzRqtXr3a+bjFcUYUAAAAAq5Tw/eFC6VRo5rOdJ8xQ+rXr2n+2rXSCy9I550nffSRdNppbdvu4YcfriuvvFIvv/yy6uvrNXToUC1ZskRvvfWWpkyZ4ryk/PTp03Xcccdp6NChmjBhgrKzs/XYY49pxIgROq2tjQIAAAAAAAAImvj4eGVmZjrHrl27KjMzUxkZGS6B+t54drovSkpKlJ+f7zLm5eUpNzdXhxxyiB566CFt3bo12N0EAADYr3Rq+H7//dKhh0pLl0oxMX/MP+ss6YYbpOOPl6ZNa3v4LknPP/+8DjjgAM2ZM0fvvfeeunfvrieeeEK33HKLc53Bgwf/P3v3HR5FufZx/LdJSCOFJJuEAAGkNxXpcgRFEJXYkGI9KipYUBRsgA1EQQU5FhTBV0ERPaLgOahY0CM2EARBQelIT9skJKS3ef9Ys2TJJpuy2U35fq5rrp19ZnbmnrB7Mzv3Ps/o66+/1iOPPKLJkycrODhYt912m+bMmVPzgwMAAAAAAABQY35+fg6L6qfPBwUFeTpUl8rPz7crop9eWD99ys/Pd7idmJgYNW/eXAUFBW4+AgAAALi1+P7779Ye76UL7yWaNpVuuUWaPr16227SpImefPJJPfnkkxWud9555+mnn36q3k4AAAAAAAAAVIu/v78iIyMVHR1dYVE9IiLC06G6REFBgZKTk5WUlKTk5OQy86c/P3HihKdDBgAAQA25tfju7y+lppa/PDXVug4AAAAAAACAus3Hx0dms9nufuolk6O24OBgT4dcI0VFRbaCeWJiol3x3FGBPT093dMhAwAAwM3cWny/8ELppZesw8qfe679so0bpZdfloYPd2dEAAAAAAAAACTJ19dXkZGR5U4lRfWSKSwszNMh19jJkyfL3DO9vKHfU1JSZBiGp0MGAABAHebW4vvzz1uL7uedJ/XrJ3XubG3fvVvatEmKipKee86dEQEAAAAAAACNh6+vr3r37q2BAweqf//+io2NtRXTQ0JCPB2eSyQnJys+Pr7cInrp5zk5OZ4OFwAAAA2IW4vvZ5xhve/7nDnS559LH3xgbW/TRrrvPmnqVGsBHgAAAAAAAEDNnXHGGerXr5/69++v/v37q3fv3vLz8/N0WNWSnp6uY8eO6fjx47ap9PNjx44pISFBBQUFng4VAAAAjZRbi++Stbj+r39ZJwAAAAAAAACuERYWpr59+9oK7f369VNkZKSnw3IqNzfXaVE9Pj5eWVlZng4VAAAAqJDbi+8AAAAAAAAAaiY0NFSdOnWyK7R36tTJ02HZ5Obm2oZ2T05Othv2vWRY+JICe1pamqfDBQAAAFyiVovvt94qmUzS4sWSt7f1uTMmk/Tmm7UZFQAAAAAAAFC3+Pj4KDIyUlFRUYqOjrZ7PH0+KirK7UPH5+XlKTk52eF0emE9KSlJJ0+edGt8AAAAQF1Qq8X3//1P8vKSioutxff//c9aXK+Is+UAAAAAAABAfRAUFFSmkF5eQT0iIsLt8RUUFOiPP/5QfHx8hYX15ORkiukAAABAJdRq8f3gwYqfu8q6des0ZMgQh8s2bNigAQMG2J6vX79eDz/8sH799VeFhIRo7Nixmj17toKCgmonOAAAAAAAADQIoaGhMpvNioyMtHssmS/puV5SWA8ICPB0yHaSkpK0ceNGbdiwQT/99JN++eUX5eTkeDosAAAAoMFoUPd8nzRpkvr27WvX1qFDB9v8tm3bNHToUHXt2lXz58/X0aNHNW/ePO3du1eff/65u8MFAAAAAACAhzRp0sSucF6ZxyZNmng67ErLycnRli1btHHjRm3atEkbN27UoUOHPB0WAAAA0KC5tfh+8qR04oQUG3uq7fhx6fXXpbw8adQoqV+/6m9/0KBBGj16dLnLp0+frrCwMK1bt04hISGSpLZt22r8+PH66quvNHz48OrvHAAAAAAAAB5TXq/08h5DQ0M9HbLLFBcXa+fOndq4caOt2L5jxw4VFhZ6OjQAAACgUXFr8X3CBOmvv6Sff7Y+z8iQBgyQjh613hv+pZekL76QLrig+vs4efKkAgIC5ONjf2gZGRlau3atJk+ebCu8S9JNN92kyZMna8WKFRTfAQAAAAAA6ghvb2/bMO7l3Te99D3T/fz8PB1yrcnMzFRiYqKSkpKUlJRkm09MTNQff/yhzZs3c092AAAAoA5wa/H9xx+lO+449fzdd60939evl7p3l4YOlZ5+uvrF93HjxikzM1Pe3t4aNGiQ5s6dqz59+kiStm/frsLCQtvzEr6+vurZs6e2bt1azaMCAAAAAABAZYWHhysmJkbNmze3PZaeLymoR0REyMvLy9Ph1ori4mJZLJYyhXRHxfXk5GRlZ2d7OmQAAAAAleDW4rvFIrVseer56tXSeedZe79L0k03STNnVn27vr6+GjVqlEaMGCGz2aw///xT8+bN06BBg7R+/Xqdc845io+PlyTFxMSUeX1MTIx++OGHcrefl5envLw82/OMjAxJUnR0dIP9Egigesxms90jAJyOPAHAGfIEgIrU1Rzh5+dn66XuaIqMjFR0dLTMZrN8fX09HW6tyMrKUmpqqiwWi92UnJyslJQU27zFYlFaWpqKiooqtd3Q0NAGNUQ+al9dzRMA6g7yBABnyA/V59bie7NmUkKCdT4nR/rhB+nRR0sF4yNV54e8AwcO1MCBA23Pr7jiCo0ePVpnnXWWpk2bpi+++EI5OTmS5HAIMn9/f9tyR+bMmaOZDn4VMG7cOPn7+1c9YAAN3qhRozwdAoA6jjwBwBnyBICKuCtHBAQEKCgoyDYFBwfbPS+ZAgIC3BKPuxQXFysnJ0dZWVnKzs4uMzlqL+/+6t7e3rYfIQDuxLkEAGfIEwAqkpub6+kQ6iW3Ft8HDpRee03q0sV6b/fcXOnKK08t37PHvmd8TXTo0EFXXnmlVq1apaKiItuXwNI92Evk5uZW+CVx2rRpmjJliu15RkaGYmNjtWTJEnq+A7BjNps1atQorVy5UhaLxdPhAKiDyBMAnCFPAKhITXNEcHCwIiIiFBERofDw8DKP4eHhMpvNtt7qDaWXelZWllJSUpSamlrmsfRU0nbixAkZhuHpsIFq4VwCgDPkCQDOmM1mxcXFeTqMesmtxffnnpOGD5dKfkz1wAPWe71LUlGR9OGH0iWXuG5/sbGxys/PV1ZWlm24+ZLh50uLj49XixYtyt2On5+fwx7ziYmJrgsWQINisVgc5hsAKEGeAOAMeQJARUqGMI+IiFBkZKTMZrMiIyPt5k9va0hDvmdmZjq8X3pycrJtaPeSR4vFQq8dNEqcSwBwhjwBAK7n1uJ7hw7S7t3Sn39KoaFS27anlmVnSwsWSGef7br9HThwQP7+/goKClKPHj3k4+OjzZs3a+zYsbZ18vPztW3bNrs2AAAAAAAATzOZTAoPD7f1Qu/evbsuv/xy9evXT/fdd5+aNWvm6RBdKi0tTQkJCUpMTLRNJYX104vs2dW5byEAAAAA1DK3Ft8lqUkTxwX24GD7IeirIjk5WZGRkXZtv/32m1avXq1LL71UXl5eCg0N1bBhw/Tuu+/q8ccfV3BwsCRp2bJlyszM1JgxY6q3cwAAAAAAgEowmUwKCwtTZGSkraBeev70R7PZLG9vb0+HXSMFBQVKSEhQQkKC4uPj7R5Pn3d0q0AAAAAAqE/cWnzftk3auVO67rpTbV9+KT3zjJSXJ11/vXTffVXf7jXXXKOAgAANHDhQUVFR+vPPP7V48WIFBgbq2Wefta33zDPPaODAgTr//PM1YcIEHT16VC+88IKGDx+uS1w53j0AAAAAAGgUmjVrVmEBvfSj2WyWj4/b+0HUipJe6s6K6qmpqdw7HQAAAECj4dZvfA8/LAUGniq+//WXNHKkFBEhtWghTZkiBQRIEyZUbbtXXXWVli9frvnz5ysjI0ORkZG6+uqr9eSTT6pDhw629Xr16qWvv/5ajzzyiCZPnqzg4GDddtttmjNnjguPEgAAAAAA1FchISFVKqY3lHuoS9b7qJfcJ728Ynp8fLwSExO5hzoAAAAAOODW4vtvv0kPPXTq+TvvSN7e0tatktksXXON9PrrVS++T5o0SZMmTarUuuedd55++umnqu0AAAAAAAA0COHh4RowYID69eundu3alSmq+/n5eTpElyguLlZKSoqtmF760VGbxWKhoA4AAAAANeTW4nt6urWXe4k1a6SLLrIW3iXr/OefuzMiAAAAAADQkEVERGjw4MG64IILdMEFF+iss87ydEg1Fh8fr/Xr1+vIkSPlFtXT0tJUXFzs6VABAAAAoFFxa/E9JsZ6z3dJio+XtmyRxo07tTwzU/LycmdEAAAAAACgIamvxfbi4mJb4TwpKancx9TUVI0ZM0aLFi1SfHy8p8MGAAAAAJTi1uL7lVdKr7wi5eZKGzdKfn7We76X+O03qV07d0YEAAAAAADqs7pcbK9MMb10Ub0yPdVjYmLcEDkAAAAAoDrcWnx/+mkpOVlatkxq1kxaulSKjrYuy8iQPvpImjjRnREBAAAAAID6xJPF9rS0tEoV0kuGfy8qKnJbbAAAAAAAz3Nr8T0oSFq+vPxlR49KgYHujAgAAAAAANRVPj4+io6OVr9+/Wql2J6dna1jx45VupheUFDgsn0DAAAAABoetxbfK+LlJYWGejoKAAAAAABQmwICAhQdHa3o6GhFRUXZPZ4+HxER4dJ9JyQkaN26dVq3bp3Wr1+vP//8k97pAAAAAACXqdXi+1NPSSaT9Oij1uL6U085f43JJD3+eG1GBQAAAAAAXKlZs2YOi+eOiutBQUFui6t0sX3dunXavXu32/YNAAAAAGh8arX4PmOGtZj+yCOSr6/1uTMU3wEAAAAA8Cxvb29FRkY67ZkeFRWlqKgo+fr6ejpkSRTbAQAAAACeVavF9+Liip8DAAAAAAD38Pf3r1TP9KioKEVERMjLy8vTITtFsR0AAAAAUJfUmXu+u9Izzzyjxx57TN27d9eOHTvslq1fv14PP/ywfv31V4WEhGjs2LGaPXu2W4e9AwAAAADAFUJDQ532TC95DAkJ8XS4NUaxHQAAAABQlzW44vvRo0c1e/ZsNW3atMyybdu2aejQoeratavmz5+vo0ePat68edq7d68+//xzD0QLAAAAAMAp3t7eMpvNZXqkl1dQ9/Pz83TILmWxWJSYmKikpCQlJiba5o8dO6aff/6ZYjsAAAAAoE5ze/H93Xelt96SDhyQ0tIkw7BfbjJJ6enV3/6DDz6oAQMGqKioSBaLxW7Z9OnTFRYWpnXr1tl+8d+2bVuNHz9eX331lYYPH179HQMAAAAA4EBwcLDt3uil75NeeippN5vNng7XpQoKCsoU0k+fL3m0WCwqLCz0dMgAAAAAAFSbW4vvjzwizZsntWwp9ekjhYa6dvvff/+9PvroI23dulX33nuv3bKMjAytXbtWkydPthtq76abbtLkyZO1YsUKiu8AAAAAAKeaNGkis9nstJBeMvn7+3s6ZJfKzMx0WkgvmU9LS/N0uAAAAAAAuI1bi+9vvCFddpn08ceSl5drt11UVKR7771Xt99+u84888wyy7dv367CwkL16dPHrt3X11c9e/bU1q1by912Xl6e8vLybM8zMjIkSdHR0fJy9YEAqNdKeio1tB5LAFyHPAHAGfKEZ4SGhspsNisiIkJms7ncKSIiQmFhYZ4O1+VSU1NlsViUnJyslJQUJScn255bLBa7+ZycnEpt09/fXzExMbUceeNDjgDgDHkCgDPkCQDOkB+qz+3Dzo8Y4frCuyS9/vrrOnTokL7++muHy+Pj4yXJ4Rf/mJgY/fDDD+Vue86cOZo5c2aZ9nHjxjW4HgwAXGPUqFGeDgFAHUeeAOAMecI1AgMDFRISotDQUNtjUFCQmjZtajd5e3t7OlSXKioqUlZWlm3KzMxUdna2MjMz7dqysrKUnZ2t4uJih9sJDg5WcHCwzjjjDDcfAZwhRwBwhjwBwBnyBICK5ObmejqEesmtxffLLpN+/FG64w7XbjclJUVPPPGEHn/8cUVGRjpcp+SX+X5+fmWW+fv7V/jL/WnTpmnKlCm25xkZGYqNjdWSJUvo+Q7Ajtls1qhRo7Ry5UpZLBZPhwOgDiJPAHCGPFF5oaGhatGihVq0aKGYmBjbfOm2gIAAT4fpMtnZ2UpOTi7TO710r/SSx/T0dBmG4emQUQvIEQCcIU8AcIY8AcAZs9msuLg4T4dRL7m1+P7KK9Lll0v33CPdeqsUGys56lwQHl617T722GMKDw8vc5/30kouuJQePr5Ebm5uhRdk/Pz8HBbtExMTqxYogEbDYrHYRtwAAEfIEwCcacx5wsvLS1FRUWrZsqVatmypFi1a2OZbtmyp2NhYxcbGKigoyNOh1khxcbEsFovd/dJPn0rfRz07O9vTIaMOacw5AkDlkCcAOEOeAADXc2vxvWlTaeBAae5caeHC8tcrKqr8Nvfu3avFixfrxRdf1PHjx23tubm5Kigo0MGDBxUSEmIbbt7RfyTx8fFq0aJF5XcKAAAAAKix5s2bq3PnzurSpYvdY+vWreXj4/a7pLlEZmZmpYrpSUlJSklJKXe4dwAAAAAAUP+49WrGPfdIb7whDRgg9e8vhYbWfJvHjh1TcXGxJk2apEmTJpVZfsYZZ+i+++7TzJkz5ePjo82bN2vs2LG25fn5+dq2bZtdGwAAAADANfz8/NShQweHRfZQV3wprGVFRUVKTk6uVDE9OTmZ3ukAAAAAADRibi2+f/CB9M9/SkuXum6bPXr00Mcff1ym/bHHHtPJkyf10ksvqX379goNDdWwYcP07rvv6vHHH1dwcLAkadmyZcrMzNSYMWNcFxQAAAAANDJRUVFliutdunRR27Zt5e3ofmMedPLkSSUkJDgtpiclJSk1NZV7pwMAAAAAgEpxa/G9SRNrr3dXMpvNuuqqq8q0v/jii5Jkt+yZZ57RwIEDdf7552vChAk6evSoXnjhBQ0fPlyXXHKJawMDAAAAgHouKChIkZGRioyMVFRUlG2+9BQdHa327durWbNmng5XkpSTk6MjR45UOGVkZHg6TAAAAAAA0AC5tfh+7bXSJ59Id97pzr2e0qtXL3399dd65JFHNHnyZAUHB+u2227TnDlzPBMQAAAAALhRSEiIXeG8vIJ6Sbu/v7+nQ7aTm5ur48eP68iRIzp69KjDwnpKSoqnwwQAAAAAAI2UW4vv11wj3XuvFBcn3Xqr1Lq15Gj0wV69ar6vdevWOWw/77zz9NNPP9V8BwAAAADgYc2aNSu3cH56m9lslp+fn6dDrlBiYqJ2796tPXv26PDhwzp27JiOHTum48eP69ixY0pNTfV0iAAAAAAAAOVya/F90CDr47Zt0hdflF1uGJLJJBUVuTMqAAAAAPA8k8mksLAwdejQQa1bt9all14qHx+fcnunR0ZGqkmTJp4Ou8ry8/O1b98+7dq1S7t377Y97t69WydOnPB0eAAAAAAAANXm1uL7kiXu3BsAAAAAeI6Xl5fCw8MrHNa99GQ2m+Xjc+or2rhx4zwYfc0lJSXZFddLHv/66y8V8YtrAAAAAADQALm1+H7zze7cGwAAAAC4lp+fn9q1a6fo6GinBfWIiAh5O7rPVgORkZGh5ORkJScnKz4+vkwv9rS0NE+HCAAAAAAA4FZuLb6XFh8vJSVJHTpITZt6KgoAAAAAKCsoKEhdu3a1Td26dVPXrl3Vrl27BltQT09PV1JSkq2gXnpy1J6Xl+fpkAEAAAAAAOoUtxff//tf6ZFHpL17rc/XrpUuvFCyWKSLLpKeeEIaOdLdUQEAAABobPz9/dW+fXt17NixzNSyZUtPh1djaWlp5RbOT2+3WCzKz8/3dMgAAAAAAAD1mluL7598Il19tXTuudL110szZpxaZjZLLVtKS5dSfAcAAADgGk2bNlVsbKzDAnurVq3k5eXl6RArLSUlpcKe6KXbLRaLCgsLPR0yAAAAAABAo+LW4vtTT0mDB0vffiulpNgX3yVrUX7RIndGBAAAAKC+CQwMVHR0tKKjo9W8eXO7x9PbmtbRe1wVFxfbFdNLF87z8/N1zjnn6IMPPtCuXbuUlJSklJQUFRUVeTpsAAAAAAAAVMCtxfcdO6T588tfHh1tvQ88AAAAgMbF39+/UsX06OhoBQcHezrcMoqKimSxWCp1r/Tk5GSlpKSouLjY4bZiYmLk6+urn376SfHx8W4+EgAAAAAAAFSXW4vvgYFSVlb5yw8ckCIiqr7dP/74QzNmzNCWLVuUkJCgwMBAdevWTQ899JAuv/xyu3V37typyZMn68cff5Svr6/i4uI0f/58RUZGVn3HAAAAABxq0qSJzGazbYqMjLSbP72oHhIS4umQK3TixAn9+eef2rlzp/78808dOnTIrrCempoqwzA8HSYAAAAAAAA8yK3F9yFDpLfflu6/v+yyhATpjTekyy6r+nYPHTqkkydP6uabb1aLFi2UnZ2tlStX6oorrtCiRYs0YcIESdLRo0c1ePBghYaGavbs2crMzNS8efO0fft2bdq0Sb6+vjU7QAAAAKABMplMCg0NdVhEP32+5DE0NNTTYVdZUVGRDh06pL1792rv3r3atWuXreCekJDg6fAAAAAAAABQx7m1+P7MM9KAAVLfvtKYMZLJJH35pfS//1nv9W4Y0pNPVn27I0aM0IgRI+za7rnnHvXu3Vvz58+3Fd9nz56trKwsbdmyRa1bt5Yk9evXTxdddJGWLl1qWw8AAABoyPz8/CpdRC+ZfHzc+tWh1hQXF+vw4cO2AvvevXu1b98+7d27V3/99Zfy8/M9HSIAAAAAAADqKbdeQevcWfrxR+m++6THH7cW2+fOtS674ALp1Veltm1dsy9vb2/Fxsbql19+sbWtXLlSl112ma3wLknDhg1Tp06dtGLFCorvAAAAqNeaNWumfv36qXXr1g6L6CXzQUFBng61VhQWFiopKUkJCQlKTEy0e/zrr7+0d+9eHThwQHl5eZ4OFQAAAAAAAA2Q27uvdO8uff21lJYm7dsnFRdL7dpJrrjlelZWlnJycpSenq7Vq1fr888/1zXXXCNJOnbsmJKSktSnT58yr+vXr5/WrFlT7nbz8vLsLtBlZGRIkqKjo+Xl5VXzwAE0GGaz2e4RAE5HnoCrNGnSRG3atFHv3r3Vp08f9enTR507d/Z0WC5XVFQki8Uii8Wi5ORkJSUlyWKx2N1vvWRKS0tzet/18PBwN0VefeQJABUhRwBwhjwBwBnyBABnyA/V57GxI8PCrMPPu9IDDzygRYsWSZK8vLx09dVXa8GCBZKk+Ph4SVJMTEyZ18XExCg1NVV5eXny8/Mrs3zOnDmaOXNmmfZx48bJ39/flYcAoIEYNWqUp0MAUMeRJ+BIkyZN1LRpUwUFBalp06a2qfTzkvmAgABPh1tthmEoKytLWVlZyszMVGZmpm2+dFtmZqZycnIcFtRNJpOioqIUFRXlgSNwD/IEgIqQIwA4Q54A4Ax5AkBFcnNzPR1CvdQwbtz4t/vvv1+jR4/W8ePHtWLFChUVFdnu2ZiTkyNJDovrJQX0nJwch8unTZumKVOm2J5nZGQoNjZWS5Ysoec7ADtms1mjRo3SypUrZbFYPB0OgDqIPNE4RUREqF27dmrRokWZIeAjIiJs84GBgZ4OtVqysrKUkpKi1NRUpaam2uZLt5WeTpw4oeLiYk+HXWeRJwBUhBwBwBnyBABnyBMAnDGbzYqLi/N0GPVSgyq+d+nSRV26dJEk3XTTTRo+fLguv/xybdy40dYzyNH9HUt+uVFe7yE/Pz+HRfnExERXhQ6ggbFYLLYRNwDAEfJEw2M2m9WxY0fb1KFDB9tjaGiop8OrtMLCQrth3k+fP70tJSWFX0LXEvIEgIqQIwA4Q54A4Ax5AgBcr0EV3083evRo3XHHHdqzZ49tuHlH/5HEx8crPDzcYYEdAAAAKBEREVFugb1Zs2aeDs+h9PR0h0X08grq6enpTu+bDgAAAAAAAKCsBl18LxlqPj09XZ07d1ZkZKQ2b95cZr1NmzapZ8+ebo4OAAAAdY2vr6/at2+vTp06qVOnTmrTpo1at26t1q1bq02bNnW2wC5J+/fv1/r167VhwwZt2rRJx48fl8ViUUFBgadDAwAAAAAAABqFBlF8T0pKUlRUlF1bQUGB3nnnHQUEBKhbt26SpFGjRuntt9/WkSNHFBsbK0n65ptvtGfPHk2ePNntcQMAAMD9vLy8FBsbayuwl57atGkjb29vT4fokMViUWJiohISEpSYmGibdu/erfXr1yspKcnTIQIAAAAAAACNmkeK7ydPSocOSWlpkqMRLQcPrtr27rjjDmVkZGjw4MFq2bKlEhIStHz5cu3atUsvvPCCgoKCJEnTp0/Xhx9+qCFDhui+++5TZmam5s6dqzPPPFPjxo1zwZEBAACgrggKClKXLl3UrVs3de3a1VZg79Chg/z9/T0dnvLy8pSUlKTExESnjxaLRUVFRZ4OGQAAAAAAAEAF3Fp8T0mR7rlHWrlScnTt0DAkk8nxsopcc801evPNN7Vw4UKlpKQoODhYvXv31nPPPacrrrjCtl5sbKy+++47TZkyRVOnTpWvr6/i4uL0wgsvcL93AACAeiYgIEDR0dGKiopSVFSUWrZsqS5duqhr167q2rWrWrdu7dH4srKytG/fPu3du9f2uH//fh0/flxJSUlKT0/3aHwAAAAAAAAAXMutxffx46VPPpEmTZIGDZLCwlyz3WuvvVbXXnttpdbt3r27vvzyS9fsGAAAAC5jMpkUHh6uqKgou6J6yfzpbSWjG3lSSYG9pLheutAeHx/v6fAAAAAAAAAAuJFbi+9ffSVNniw9/7w79woAAABP8fX1rbCAXno+MjJSPj4euStSuYqLixUfH6/Dhw/r8OHDOnjwoF2R/fjx454OEQAAAAAAAEAd4darm4GBUtu27twjAAAAXK1Zs2ZOe6WXPIaGhno63Eo5fvy49uzZU2b666+/lJ+f7+nwAAAAAAAAANQDbi2+33ij9PHH0t13u3OvAAAAqIiPj48iIyMrNdR7VFSUfH19PR1ytaSnp2v37t1lCux79+5VZmamp8MDAAAAAAAAUM+5tfg+erT03XfSJZdIEyZIsbGSt3fZ9Xr1cmdUAAAADU9QUJDTXuklbREREZ4O16USEhK0c+dO7dy5U3/++adtnnuwAwAAAAAAAKhNbi2+n3feqfm1a8suNwzJZJKKitwXEwAAQH3Tpk0bnXnmmerQoUO5RfWAgABPh+lS+fn5SkxMVFJSkpKSkmzzp7cdPnxYaWlpng4XAAAAAAAAQCPk1uL7kiXu3BsAAED9FhISojPPPFNnnXWW7bFHjx715j7qzpw4ccJhAd1RW3p6uqfDBQAAAAAAAIAKubX4fvPN7twbAABA/eDj46NOnTqVKbS3adPG06FVSWFhoZKTk8stoJd+TE5OVl5enqdDBgAAAAAAAACXcWvxvbTMTOnIEet8bKwUFOSpSAAAANwnKipK7du311133aU2bdrorLPOUteuXeXn5+fp0Bw6efKk017pJY9paWkyDMPTIQMAAAAAAACAR7i9+P7LL9LDD0s//igVF1vbvLykQYOk55+X+vRxd0QAAAA1FxwcrOjoaLup5B7sJVPnzp1lNps9GmdxcbEsFkulhnpPTk5Wdna2R+MFAAAAAAAAgPrCrcX3jRulCy6QfH2l22+Xuna1tu/cKb3/vjR4sLRundSvX9W2+8svv+jtt9/Wt99+q4MHDyoiIkIDBgzQ008/rU6dOtmtu3PnTk2ePFk//vijfH19FRcXp/nz5ysyMtIlxwgAABoGk8mk8PDwMgV0R0X1qKgoBQQEeCzWnJycSg31npSUJIvFouKSX0ACAAAAAAAAAFzGrcX3Rx+VWra09npv3tx+2YwZ0j/+YV1n7dqqbfe5557TTz/9pDFjxuiss85SQkKCFixYoF69eunnn39Wjx49JElHjx7V4MGDFRoaqtmzZyszM1Pz5s3T9u3btWnTJvn6+rrmQAEAQJ0UFBSkyMhImc1mRUZG2qaSYnrponpkZKSaNGni6ZDtHDp0SL///ru2b99uezx8+LAyMzM9HRoAAAAAAAAANHpu7/n+xBNlC++SFB0tTZggzZpV9e1OmTJF7733nl3x/JprrtGZZ56pZ599Vu+++64kafbs2crKytKWLVvUunVrSVK/fv100UUXaenSpZowYUK1jgsAALifyWRSWFiYw2J6yXR6u7+/v6fDrpSMjIwyRfYdO3YoPT3d06EBAAAAAAAAAMrh1uK7l5dUWFj+8qIi6zpVNXDgwDJtHTt2VPfu3bVz505b28qVK3XZZZfZCu+SNGzYMHXq1EkrVqyg+A4AgAf5+PgoIiLCYRHdUSE9IiJCPj5uPZVxucLCQu3evduuyP7777/r8OHDng4NAAAAAAAAAFBFbr1iPXCg9Oqr0vXXS23a2C87fFh67TXr0POuYBiGEhMT1b17d0nSsWPHlJSUpD59+pRZt1+/flqzZk2528rLy1NeXp7teUZGhiQpOjpaXtX5tQCABstsNts9Ao2Zv7+/IiIiFB4eroiICLupdFvJfLNmzTwdcq0oLCxUSkqKLBaLEhMTdeTIEYWEhOi9997T5s2b7c4xSsTExHggUgB1BecTACpCjgDgDHkCgDPkCQDOkB+qz63F99mzpcGDpS5dpJEjpU6drO27d0v//a/k4yPNmeOafS1fvlzHjh3TU089JUmKj4+X5PhidkxMjFJTU5WXlyc/P78yy+fMmaOZM2eWaR83bly9Gb4WgHuNGjXK0yEALufr66vAwEA1bdpUTZs2tc0HBgbazZc8lr4dTENTWFiozMxMZWVl2abSz0vmMzMzlZOT43AbPXr0UI8ePdwcOYD6hPMJABUhRwBwhjwBwBnyBICK5ObmejqEesmtxfdzzrHe9/3RR6XVq6XsbGt7YKB0ySXS009L3brVfD+7du3SxIkTde655+rmm2+WJNuFb0fF9ZICek5OjsPl06ZN05QpU2zPMzIyFBsbqyVLltDzHYAds9msUaNGaeXKlbJYLJ4OB6hQcHCwIiIiZDabHfZIP729of/gLDMzU8nJybJYLLJYLLb55OTkMu0nT56s9n7IEwCcIU8AqAg5AoAz5AkAzpAnADhjNpsVFxfn6TDqJbffKLVbN+njj6XiYik52doWGVm9e707kpCQoLi4OIWGhuqjjz6St7e3JCkgIECSHA7tWvLLjZJ1Tufn5+ewKJ+YmOiaoAE0OBaLxTbiBuAuzZo1U1RUlMP7pTtqb8g90yUpLS2tTAH99Kn0svJ6qNcW8gQAZ8gTACpCjgDgDHkCgDPkCQBwPbcX30uYTNapZN4V0tPTdemll+rEiRP64Ycf1KJFC9uykuHmHf1HEh8fr/DwcIcFdgAAPMnb21uRkZGKjo5Wy5Yt1blzZ7Vt27ZMMd1sNqtJkyaeDrfWFBUVKSUlpVJF9JLnhYWFng4bAAAAAAAAANCIuL34/uef0hNPSF9+aT/s/MUXSzNmSNW99Wlubq4uv/xy7dmzR19//bW6nTZ+fcuWLRUZGanNmzeXee2mTZvUs2fP6u0YAIAqCg4OltlsthXOo6OjFR0draioKNt8yWQ2mz0dbq3Iy8urVBG9ZEpLS5NhGJ4OGwAAAAAAAACAcrm1+P7DD9Kll1qHnL/ySqlTJ2v77t3We8B//rn0xRfSoEFV225RUZGuueYabdiwQf/973917rnnOlxv1KhRevvtt3XkyBHFxsZKkr755hvt2bNHkydPrsmhAQAaKW9vb4WHh9v1QC/96KitIY60cvLkSacF9NLLa3LPdAAAAAAAAAAA6iK3Ft8nT5aioqTvvpP+rn3bHDkiDR4sTZki/fJL1bb7wAMPaPXq1br88suVmpqqd9991275jTfeKEmaPn26PvzwQw0ZMkT33XefMjMzNXfuXJ155pkaN25cTQ4NANBABAYGVqqAXjIfFhYmLy8vT4ftcunp6bZieVJSUrmF9KSkJFksFuXm5no6ZAAAAAAAAAAAPMqtxfc//pBmzSpbeJesbXfdZR16vqq2bdsmSfrkk0/0ySeflFleUnyPjY3Vd999pylTpmjq1Kny9fVVXFycXnjhhQbZCxEAcEpQUJCioqLs7pXerl079ejRQ61atbIV1QMDAz0daq1ITU2tsIB+es/0/Px8T4cMAAAAAAAAAEC94tbie5s2Ul5e+cvz8x0X5p1Zt25dpdft3r27vvzyy6rvBABQp/j6+ioyMtJWUHc0lV4eEBDg6ZBdytHQ7uX1ULdYLCosLPR0yAAAAAAAAAAANGhuLb4/8YR16Pm4OKlnT/tlW7dKr7wivfiiOyMCANQVJpNJ4eHhFRbTS0/NmjXzdMi1IiUlRUlJSUpMTFRiYmKZ+QMHDmjfvn0M8w4AAAAAAAAAQB1Tq8X3SZPKtkVHS717SwMHSh06WNv27pU2bJB69JB+/lm67rrajAoA4C5NmzatdDE9MjJS3t7eng7Z5VJSUux6oJd+LJkvKbAnJyeroKDA0yEDAAAAAAAAAIBqqNXi+4IF5S/76SfrVNr27dKOHdJLL9VmVAAAV/Dy8lKzZs1s907v3r27unfvri5duqh58+aKiopqcPdPz8vLc1pILz2fmpqqoqIiT4cNAAAAAAAAAADcoFaL78XFtbl1AICrmEwmNWvWTGaz2TZFRETYPT+9LTw8XF5eXp4OvcYyMjK0a9cuJSQkOC2qZ2ZmejpcAAAAAAAAAABQR7ntnu+5udLixdZ7vQ8e7K69AkDj5u3trejoaMXExFQ4RUdHy9fX19PhukxmZqaSkpLKTMnJybbHkvnjx497OlwAAAAAAAAAANAAuK347u8vPfKI9PLLFN8BoKb8/PycFtRjYmIUGRnZIHqnFxQUOCyil1dgz87O9nTIAAAAAAAAAACgkXFb8V2SevSQDh505x4BoH7w8/OrcIh3s9msqKgoW1E9LCzM0yHXWEpKSrkF9NOnEydOeDpcAAAAAAAAAACACrm1+P7MM9L110tDhkjDhrlzzwDgPl5eXoqKiipTPHd0D/WSKSgoyNNhu0RhYaH27dunffv2KTExsdxiusViUWFhoafDBQAAAAAAAAAAcBm3Ft8XLJDCw6WLL5bOOMM6BQTYr2MySf/9b9W2m5mZqblz52rjxo3atGmT0tLStGTJEt1yyy1l1t25c6cmT56sH3/8Ub6+voqLi9P8+fMVGRlZ/QMD0GB5e3srPDzcYcHcUTE9MjJSISEhevzxxz0dukvl5OQoOTlZKSkpslgstqnkeVJSknbu3Kk9e/YoPz/f0+ECAAAAAAAAAAC4nVuL77//bi2ut24tFRVJ+/aVXcdkqvp2LRaLnnrqKbVu3Vpnn3221q1b53C9o0ePavDgwQoNDdXs2bOVmZmpefPmafv27dq0aZN8fX2rvnMA9YbJZFJYWFilC+lms1nh4eGeDrtWFBYWKjExUfHx8UpISFB8fLzi4+OVnJzssLiek5Pj6ZABAAAAAAAAAADqNLcW32vrfu8xMTGKj49X8+bNtXnzZvXt29fherNnz1ZWVpa2bNmi1q1bS5L69euniy66SEuXLtWECRNqJ0AAtSI0NLTcYdwdFdPDw8Pl7e3t6bBrVW5urq2QXtFksVhUXFzs6XABAAAAAAAAAAAaDLcW32uLn5+fmjdv7nS9lStX6rLLLrMV3iVp2LBh6tSpk1asWEHxHfAwPz8/dejQQbGxsU6L6REREWrSpImnQ3aL4uJipaamymKx2PVSdzSdOHHC0+ECAAAAAAAAAAA0Sh4rvp88KaWnS446XpaqjbvMsWPHlJSUpD59+pRZ1q9fP61Zs6bc1+bl5SkvL8/2PCMjQ5IUHR0tLy8v1wcLNGAmk0ktWrRQhw4d1K5dO7Vv317t2rVTu3bt1KpVq0bxmUpLS1NaWppSU1NtjxVN6enpleqlHhAQoICAADccAYCaMJvNdo8AcDryBICKkCMAOEOeAOAMeQKAM+SH6nN78X3hQmn+fOnAgfLXKSpy/X7j4+MlWYeoP11MTIxSU1OVl5cnPz+/MsvnzJmjmTNnlmkfN26c/P39XR8s0AD4+/vbeqtHRETYpvDw8AbVYz03N1fZ2dnKzs5WTk6Obb68KScnR4ZhlLu9kJAQhYSEqG3btu47CAAeMWrUKE+HAKCOI08AqAg5AoAz5AkAzpAnAFQkNzfX0yHUS24tvr/+ujRxonTxxdKtt0qPPipNniz5+0tLl0rR0dKkSbWz75ycHElyWFwvKaDn5OQ4XD5t2jRNmTLF9jwjI0OxsbFasmRJo+ilC5zO19dXkZGRioiIUGRkpG0q6cHevn17hYeHezrMKsvKyrLrce6sV3paWpoKCgrstmE2mzVq1CitXLlSFovFQ0cCoC4jTwBwhjwBoCLkCADOkCcAOEOeAOCM2WxWXFycp8Ool9xafH/lFWvh/fPPpZQUa/E9Lk668ELp4YelPn2s7bWhZCjm0sPHlyj55UZ5wzX7+fk5LMonJia6MELAs4KCghQdHW2boqKiyp1v1qyZp8N1Kjc3V8nJybJYLLYpJSXF7vnpy1z5Ky6LxWIbcQMAHCFPAHCGPAGgIuQIAM6QJwA4Q54AANdza/F9/35rz3dJKhl1Oj/f+hgaKt1+u/Taa9IDD7h+3yXDzTv6jyQ+Pl7h4eEOC+xAfWUymRQeHu60kF4yX5fvFZ6fn19uwby8Ynp2dranwwYAAAAAAAAAAEAj4tbie2ioVFhonQ8JkQIDpSNHTi0PDpYSEmpn3y1btlRkZKQ2b95cZtmmTZvUs2fP2tkx4EI+Pj6KjIysVO/0qKgo+fi49SNebcePH9fu3bu1Z88e7d69W/v27VNCQoKtkH7y5ElPhwgAAAAAAAAAAABUyK2VuR49pN9+O/V8wABp4UJpxAipuFhatEjq1Kn29j9q1Ci9/fbbOnLkiGJjYyVJ33zzjfbs2aPJkyfX3o6BSoiOjlbnzp3VsWPHcod/j4iI8HSY1Xby5Em7AvuePXtsU2ZmpqfDAwAAAAAAAAAAAGrErcX3G2+UXn9dysuT/PykmTOlYcOk1q2ty5s0kVaurN62FyxYoBMnTuj48eOSpE8++URHjx6VJN17770KDQ3V9OnT9eGHH2rIkCG67777lJmZqblz5+rMM8/UuHHjXHGIQIV8fX3VoUMHde7cWV26dLF7rA/3UXemsLBQBw4cKFNk3717txJqa1gLAAAAAAAAAAAAoA5wa/F93DjrVOIf/5D++EP65BPJ21saPrz6Pd/nzZunQ4cO2Z6vWrVKq1atkiTdeOONCg0NVWxsrL777jtNmTJFU6dOla+vr+Li4vTCCy9wv3e4VFRUlMMC+xlnnCFvb29Ph1clRUVFSk5OVlJSkhITE5WYmGg3f/rzwpJ7SwAAAAAAAAAAAACNiMdvCN2unXTffTXfzsGDByu1Xvfu3fXll1/WfIdotHx9fWU2m2U2mxUZGamWLVuqffv2at++vTp06KBOnTopLCzM02FWKC8vz2Hh3FFRPSUlRcXFxZ4OGQAAAAAAAAAAAKjTar34npsr3X+/1L27dO+95a/38svSzp3WxyZNajsq4JTg4GBFRkbaiunO5kNDQz0dskMZGRnlFtJPL6pnZGR4OlwAAAAAAAAAAACgQan14vvixdLSpdKff1a8Xlyc9PDD0llnSXfdVdtRoaHy8vJSREREucVzR8X0unzLAYvFUmEhvWQ+KSlJOTk5ng4XAAAAAAAAAAAAaLRqvfi+YoU0apR1ePmKtG8vjRkjvf8+xXec4ufnV6kiesnz8PBweXl5eTrsSisoKNC+ffu0e/du7dq1y/Z46NAhJScnc/90AAAAAAAAAAAAoJ6o9eL79u3SDTdUbt2BA6VPPqndeOBZISEhTgvopZ8HBQV5OmSXSE5OthXXSxfa//rrLwrsAAAAAAAAAAAAQANQ68X3/HzJ17dy6/r6Snl5tRsPXMfb21vh4eGVLqabzWb5VvbNUA9lZ2dr//792r9/v12Bfffu3UpNTfV0eAAAAAAAAAAAAABqUa0X31u0kHbsqNy6O3ZY14dn+Pv7V2po95L5sLCwejXEe3VkZWUpOTlZycnJslgstvnTnx88eFDx8fGeDhcAAAAAAAAAAACAh9R68X3YMOmdd6Rp06SoqPLXS0qyrjdmTG1H1HiEhoZW+l7pDWmI94qkpKSUKZxXNJ+Tk+PpkAEAAAAAAAAAAADUA7VefH/kEendd6ULL5TefFPq37/sOhs3SrffLuXmSg89VNsRNQwBAQFq3ry5oqOjbY9t2rRRp06d1LFjR3Xo0EGBgYGeDrNW5efnl1s4d1RIT0lJUVFRkafDBgAAAAAAAAAAANAA1XrxvV07acUK6brrpIEDrc/PPFMKDpZOnrQONb9/vxQYKP3731L79rUdUd3l6+trV0wv/Xh6W0hIiKfDdbmTJ09WWEA//XlGRoanQwYAAAAAAAAAAAAASW4ovktSXJz0++/Sc89Jn34q/ec/p5a1aCGNHy89/LC1MF/b8vLy9MQTT2jZsmVKS0vTWWedpaeffloXXXRRrezPx8dHkZGRFRbSS9rCwsJqJQZPKC4uVmpqaqWL6RaLRbm5uZ4OGwAAAAAAAAAAAACqxS3Fd0lq21ZauNA6nTwpZWRIISHWHvDudMstt+ijjz7S/fffr44dO2rp0qUaMWKEvv32W5133nlV2la3bt3UsmXLCovqkZGRtXQk7pWfn1+p3uglz1NTUxniHQAAAAAAAAAAAECj4bbie2nBwe4vukvSpk2b9O9//1tz587Vgw8+KEm66aab1KNHDz388MNav359lba3YcOGejv8+8mTJ6tUTGeIdwAAAAAAAAAAAAAon0eK757y0UcfydvbWxMmTLC1+fv767bbbtP06dN15MgRxcbGejDCmktPT9fevXu1Z88e/fXXX0pKSipTULdYLMrLy/N0qAAAAAAAAAAAAADQYDSq4vvWrVvVqVOnMr3V+/XrJ0natm2bw+J7Xl6eXbHa3b3Ai4uLlZKSYiueJyUlyWKx2ArrpdtTU1Odbi88PNwNUQONk9lstnsEgNORJwA4Q54AUBFyBABnyBMAnCFPAHCG/FB9JsMwDE8H4S49evRQdHS0vvnmG7v2P//8U927d9frr7+uO+64o8zrZsyYoZkzZ5ZpT09Pr9Gw89nZ2crMzFRWVpYyMzPLzJdM2dnZakT/TAAAAAAAAAAAAAA8KDc3V88++2yN66GNTaPq+Z6TkyM/P78y7f7+/rbljkybNk1TpkyxPc/IyCh3ePr09PQyvdId9VS3WCwqKChwwVEBqEvMZrNGjRqllStXymKxeDocAHUQeQKAM+QJABUhRwBwhjwBwBnyBABnzGaz4uLiPB1GvdSoiu8BAQEO73Wem5trW+6In5+fw6L9pEmTlJaWpoSEBCUmJioxMdG2LQCNm8ViUXx8vKfDAFCHkScAOEOeAFARcgQAZ8gTAJwhTwCA6zWq4ntMTIyOHTtWpr3kP5cWLVpUaXtvv/22S+ICAAAAAAAAAAAAANRvXp4OwJ169uypPXv2KCMjw65948aNtuUAAAAAAAAAAAAAAFRVoyq+jx49WkVFRVq8eLGtLS8vT0uWLFH//v3LvY87AAAAAAAAAAAAAAAVaVTDzvfv319jxozRtGnTlJSUpA4dOujtt9/WwYMH9eabb3o6PAAAAAAAAAAAAABAPdWoiu+S9M477+jxxx/XsmXLlJaWprPOOkuffvqpBg8e7OnQAAAAAAAAAAAAAAD1VKMrvvv7+2vu3LmaO3dutbdhGIYLIwLQkBQXFys3N1fFxcWeDgVAHUWeAOAMeQJARcgRAJwhTwBwhjwBwJni4mLl5eVJoi5aVSaDv1iVHT16lPvDAwAAAAAAAAAAAGjQjhw5olatWnk6jHqD4ns1FBcX6/jx4woODpbJZPJ0OAAAAAAAAAAAAADgMoZh6OTJk2rRooW8vLw8HU69QfEdAAAAAAAAAAAAAIAa4mcKAAAAAAAAAAAAAADUEMV3AAAAAAAAAAAAAABqiOI7AAAAAAAAAAAAAAA1RPEdAAAAAAAAAAAAAIAaovgOAAAAAAAAAAAAAEANUXwHAAAAAAAAAAAAAKCGKL4DAAAAAAAAAAAAAFBDFN8BAAAAAAAAAAAAAKghiu8AAAAAAAAAAAAAANQQxXcAAAAAAAAAAAAAAGqI4jsAAAAAAAAAAAAAADVE8R2AW61bt04mk0kfffSRp0MBUM+V5JN169Z5OhQAdRR5AgAAAAAAAO5E8R1AjZlMpkpNnrjwvX79ep133nkKDAxU8+bNNWnSJGVmZtqtc8stt1QY97Fjx8ps95VXXlFoaKgKCgokScXFxXr++ed1xhlnyN/fX2eddZbef/99hzEVFxdr4cKF6tmzpwICAhQREaELL7xQv/32m9Pj+eCDD3TjjTeqY8eOMplMuuCCCxyu98svv+iee+5R9+7d1bRpU7Vu3Vpjx47Vnj17nO6jtNWrV6tXr17y9/dX69at9eSTT6qwsLDMeidOnNCECRMUGRmppk2basiQIfr111+rtC80TkuXLi33szd16lSX7ScvL0+PPPKIWrRooYCAAPXv319r1661W+fgwYMV5oLx48eX2W5xcbEiIyP1/PPP29p27typSy65REFBQQoPD9c///lPJScn271uxowZFe7rp59+cnpMVfncVfazXJ7KHFPJ36OyuRCoLPJE9fJEfHy8pk6dqiFDhig4OLjcc7Hs7Gy9+uqrGj58uGJiYhQcHKxzzjlHCxcuVFFRUaX/fu7MSYAkbd++XaNHj1abNm3k7++vli1b6qKLLtIrr7xSre299tprWrp0aZVeU5n38gUXXFDu57hJkyYOt/vAAw+oW7dutueVyU+SNd+8/vrr6tmzp4KCghQdHa1LL71U69evr/Qxvfnmm+ratav8/f3VsWPHcv+ex44d09ixY9WsWTOFhIToyiuv1IEDByq9n8oek1S573SAI+QJ1+eJhQsXasyYMWrdurVMJpNuueUWh+t98803uvXWW9WpUycFBgaqXbt2uv322xUfH1+p/ZRwV05C4+Lq3OAKlXkPV/S9yGQyafny5WW2u337dplMJm3atMnWVtlz8bVr19r+/w0LC9Po0aN18ODBSh+TO68jcP0SrkaeqP08sWnTJt19993q3bu3mjRpIpPJ5HC9I0eOaObMmerXr5/CwsJkNpt1wQUX6Ouvv67Ufkq4/dqmAQA1tGzZMrvpoosuMiSVaU9ISDC+/fZbQ5Lx4Ycf1npcW7duNfz9/Y1zzjnHWLhwofHoo48afn5+xiWXXGK33vr168vE+s477xiBgYFGt27dHG774osvNkaPHm17PnXqVEOSMX78eGPx4sVGXFycIcl4//33y7z25ptvNnx8fIxbb73VeOONN4wXX3zRuPnmm42vvvrK6TGdf/75RlBQkDFkyBAjLCzMOP/88x2uN2rUKKN58+bGvffea7zxxhvGrFmzjOjoaKNp06bG9u3bne7HMAxjzZo1hslkMoYMGWIsXrzYuPfeew0vLy/jzjvvtFuvqKjIGDhwoNG0aVNjxowZxoIFC4xu3boZwcHBxp49eyq1LzReS5YsMSQZTz31VJnP4datWyt8bVFRkZGTk2MUFRU53c+1115r+Pj4GA8++KCxaNEi49xzzzV8fHyMH374wbZOZmZmmRiWLVtm3HDDDYYkY8WKFWW2u2HDBkOSsWPHDsMwDOPIkSOG2Ww22rdvb7z00kvGM888Y4SFhRlnn322kZeXZ3vdb7/95nBfsbGxRlhYmN265R17ZT93lf0sl6eyx2QYVcuFQGWRJ6qXJ0rOuTp27Gice+65hiTj22+/LbPe9u3bDZPJZAwbNsx4/vnnjddff90YOXKkIcm46aabnP7dDMO9OQkwDMP46aefDF9fX6NDhw7GrFmzjDfeeMN44oknjOHDhxvt27ev1ja7d+9e7rm1I5V9L3/11VdlPsevv/66IckYMWKEw2137tzZePDBB23PK5OfDMMwpkyZYkgybrzxRmPRokXGc889Z7Rr187w8fExNm7c6PSYSuIaNWqUsXjxYuOf//ynIcl49tln7dY7efKk0bFjRyMqKsp47rnnjPnz5xuxsbFGq1atDIvFUqm/X2WPqbLf6YDTkSdqJ0+0adPGCA8PNy655BLDx8fHuPnmmx2u17t3b+OMM84wHn74YeONN94wpk2bZgQHBxvR0dFGfHy80/0YhntzEhqP2sgNNVXZ9/D+/fsdfj/o1auX4e3t7fCzNWfOHCMqKsooLi42DKPyeemTTz4xvLy8jD59+hgvvfSSMWvWLMNsNhstW7Y0kpKSnB6TO68jcP0SrkaecE+eePLJJ40mTZoYvXv3Njp16mSUV65+5ZVXjICAAOO6664zFixYYLz44otGr169DEnGW2+9Vam/nyeubVJ8B+ByEydOLDdZurP4fumllxox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11136frrr9c333yjiIgIPf3001U4wqrZtWuXJk6cqHPPPVc333yz3bJbbrlFhmHolltusbVV5e9X2eMHKvLqq69q7dq1dlNpN998c7UKalL136N79uzRli1bdO2115b5ZbRkLaoNGTLEFpezz01F+1q+fLkkVXoEkMoeU1U+y23btpVhGFq6dKndfip6/en7IhegNpEnqpYnauKee+7Rn3/+qQULFth61ZU4ePCgDh48aNdWGzkJqMhFF12kDRs26IorrtBvv/2m559/XhdffLFatmyp1atX261bOi+UjKBx/vnn68CBA0pPT6/W/mv6XSMyMlIXXXRRmWX/+9//lJeXp0svvdRuX5XNGcHBwerevbsmTpyoVatW6bXXXlNhYaGuuuqqMqOFODqm8kYMKX1MVc1j69ats/uhVFWOiZyBmiBPuD5P1MT333+vmTNnauzYsWV+sDhjxgwZhqELLrjA1lZbOQmoSm6oqjvvvNPu+aBBg5SSkqKMjIxyX1OT9/BHH32k/Px8h98PiouL9cUXX5S5flnRvkqWe3l56Y477tA333yjadOmae/evdqyZYvGjh2r/Pz8CmOq6jFVJX9x/RLuQp6o/TxRE9nZ2RozZowCAgL07LPP2i2rS9c2Kb4D8IjWrVvbPQ8LC5MkpaWluWT7JV+eS4ZAKS03N7fci/OZmZn673//q4svvlgRERFlln/22WeKjo62G6YkICCg3P2UjqXk8YwzzlD//v1t6wUFBenyyy/Xpk2bVFhYWNlDrLSEhATFxcUpNDRUH330kdNfg5WOtTJ/v8oeP1CRfv36adiwYXZTaWeccUa1t13d92hFha6CggKtXbvW7gTV2eemvH0ZhqH33ntPPXr00FlnneXscGzbqUreqWouLL2fil5/+r7IBahN5Imq5Ynqmjt3rt544w3NmjXLNly+M+7KSUBpffv21apVq5SWlqZNmzZp2rRpOnnypEaPHm3rbSFJP/30k4YNG6amTZuqWbNmioyM1PTp0yWp2kW16r6XDxw4oA0bNuiaa64p88MWyfpdo0+fPrbbW5XsqzKfr8LCQg0bNkyhoaFasGCBRo4cqbvuuktff/219u/fr7lz5zo9ppILZRUdU3Xz2On7ImfAHcgTrs0T1bVr1y6NHDlSPXr00P/93/9V6jXuzElofCqbG6qqOtc6a/IeXr58ucLDw+1+jFPil19+UXJycpW+i5Tez1NPPaXbbrtNzz//vDp16qQ+ffrIx8dHt912myTrtUxXHFNNryNw/RK1hTxRu3miuoqKinTttdfqzz//1EcffaQWLVo4fY2nrm1SfAfgEeUVgEv3iihvSNWioiKn2y8ZCqRkWJHS4uPjy03M//nPf5SdnV3hkPOXXHKJXWwxMTFKSEgo06OjZN8l+yp5LP0luURUVJQKCgqUlZXl7NCqJD09XZdeeqlOnDihL774olL/IUlV+/vFxMSUu56kSu8TqEhNvgRV9z363nvvqXPnzurdu3eZZT/++KMyMjLsClPOPjfh4eEOfz35008/6dChQ1XqzVrZY6puLiy9n4peX/qYKpsLgdpCnqi5pUuX6pFHHtGdd96pxx57rNKvc1dOAhzx9fVV3759NXv2bC1cuFAFBQX68MMPJVlv+zR06FBZLBbNnz9fn332mdauXavJkydLsvb2qI7qvpffe+89SeWPYLFmzZoyP3qp7Ofr+++/144dO3TFFVfYrdexY0d17dq1zJCQp4uJiVFRUZGSkpLs2vPz85WSkmLbT0meqsn5PzkD7kaecE2eqI4jR45o+PDhCg0N1Zo1axwOeeuIO3MSGq+KckN1rklW5lrn6ar7Hj58+LB++OEHjRkzxuEw2GvWrFHbtm3VrVs3W1tV8pKvr6/+7//+T8ePH9f333+v3bt368svv1R6erq8vLzUoUOHco/JndcRuH6J2kaesN+Xq/JEdY0fP16ffvqpli5d6vDWf4546tomxXcAdVZYWJhOnDhRpv3QoUNOX9ujRw/5+Pho8+bNdu35+fnatm2bevbs6fB1y5cvV1BQUJkvo5J04sQJrV+/3u7XYJLUs2dPZWdna+fOnXbtGzdutC2XrMm5efPmOnbsWJltHz9+XP7+/pX+IloZubm5uvzyy7Vnzx59+umndv+ROlMS8+l/v+PHj+vo0aN2f7+ePXvq119/LXNRYuPGjQoMDFSnTp2qfQyAK/Ts2VN79uwpM4TT6Z/R05ft27ev3Iten332mbp166a2bdva2lq2bKnIyMgynxtJ2rRpU4V5x2Qy6frrr6/cAanyn7uqfJYdqcoxVTYXAnVRQ8wTVfXf//5Xt99+u66++mq9+uqrVXqtu3IS4EzJ6FQlF0c++eQT5eXlafXq1brjjjs0YsQIDRs2zOGPdcq7eOZIdd/L7733ntq3b68BAwaUWebo9lYl+6pMfkpMTJTk+GJfQUGB0xG2yjumzZs3q7i42Lbcy8tLZ555psM8tnHjRrVr187pd5rKHlN1v9MBFSFPVD9PVFVKSoqGDx+uvLw8ffnllw7vtVoed+YkQCqbG0p6o55+XbIy1ySrorrv4ffff1+GYVT4XeT0H+pUJy9FR0dr0KBB6tSpk4qKirRu3Tr179+/wh6t7ryOwPVLuBN5wnV5ojoeeughLVmyRP/617903XXXVfp1nrq2SfEdQJ3Vvn17/fzzz3ZDjX366ac6cuSI09eGhoZq2LBhevfdd3Xy5Elb+7Jly5SZmakxY8aUeU1ycrK+/vprjRw5UoGBgWWWf/XVV5Kk4cOH27VfeeWVatKkiV577TVbm2EYev3119WyZUsNHDjQ1n7NNdfoyJEjdveptVgs+u9//6sLL7zQ4f1iq6OoqEjXXHONNmzYoA8//FDnnntuueump6dr165ddsPpde/eXV26dNHixYvtvpgvXLhQJpNJo0ePtrWNHj1aiYmJWrVqld0xffjhh7r88ssd9uAD3Gn06NEqKirS4sWLbW15eXlasmSJ+vfvr9jY2DKvKelxUl6ha82aNWUueknSqFGjyuSpb775Rnv27HGYd0p+MXveeeeVGXrK2TFV5nNXlc9yQUGBdu3aVeaXoJU9pqrkQqCuaYh5oiq+//57XXvttRo8eLCWL19e4fnI/v37tX//fru22shJQEW+/fZbh71D1qxZI0nq3LmzpFM9S0qvm56eriVLlpR5bdOmTR3+8NeR6ryXt27dqp07d1aYM06/vZVU+fxUcsH43//+t93rf/31V+3evVvnnHNOhcd04YUXKjw8XAsXLrRrX7hwoQIDA+3y2ejRo/XLL7/YXcDavXu3/ve//5XJY4cPH9auXbuqdUzV+U4HlCBPuD5PVEVWVpZGjBihY8eOac2aNerYsWO561osFu3atUvZ2dm2ttrKSUBlc0NISIjMZrO+//57u/VKf991leq8h9977z21bt1a5513XplliYmJ+vXXX8t8F6npufi8efMUHx+vBx54wOkx1cZ1BK5fwl3IE+7JE1Uxd+5czZs3T9OnT9d9991X7np16tqmAQAuNnHiRKO89PLtt98akowPP/zQrv2vv/4yJBlLliyxtX3xxReGJGPIkCHGwoULjQcffNBo3ry50b59e+P88893GseWLVsMPz8/45xzzjEWLlxoPProo4a/v78xfPhwh+u/8sorhiTjiy++cLj8pptuMi644AKHyx566CFDkjFhwgTjjTfeMOLi4gxJxvLly+3WS0hIMGJiYozg4GDjySefNObPn2906tTJCAgIMLZt2+b0mL777jtj1qxZxqxZs4yoqCijbdu2tuffffedbb377rvPkGRcfvnlxrJly8pMpS1ZsqTM394wDOOTTz4xTCaTceGFFxqLFy82Jk2aZHh5eRnjx4+3W6+wsNAYMGCAERQUZMycOdN49dVXje7duxvBwcHGrl27nB4TGreS998vv/zicHl5OaP0sm+//dbpfsaMGWP4+PgYDz30kLFo0SJj4MCBho+Pj93npkRhYaERHR1tDBgwwOG2Dhw4YEgy1q1bV2bZ4cOHjYiICKN9+/bGyy+/bMyePdsICwszzjzzTCM3N7fM+p988okhyXj99dedHsPpMVb2c1fZz3JJHr755purfUyVzYVAVZAnqpcnDMOwnSNce+21hiTj1ltvtbWVOHjwoBEaGmoEBAQYr776aplzht9++81um23atDHatGlT5u/h6pwEVKR79+7GGWecYUyZMsVYvHixsWDBAuP66683vL29jbZt2xppaWmGYRjGrl27DF9fX+PMM880FixYYDz77LNG+/btjbPPPtuQZPz111+2bd59992GyWQyZs2aZbz//vvGN998U2EMVX0vP/DAA4akcs+PBw8ebNxyyy0Ol1U2P1100UWGJGPkyJHGwoULjSeeeMIICwszmjZtWqnz8ldffdWQZIwePdp44403jJtuusmQZDzzzDN262VkZBjt27c3oqKijOeff97417/+ZcTGxhotWrQwkpKS7NY9//zzHX43rOwxVfU7HVCCPFE7eWL16tW2cwlfX1/jnHPOsT0vfc5w5ZVX2s49Tj+3+Pjjj+22+eSTTzo8X6uNnARUNjcYhmFMnTrVkGTcdtttxsKFC43rrrvO6N27tyHJePLJJ23rlbyHk5OT7fZV8j2mdB5xpKrv4e3btxuSjKlTpzrc3ltvvWUEBAQY2dnZZZZVNi8tW7bMuOqqq4z58+cbixcvNsaOHWtIMm6//fYKj6VEbVxH4Pol3IU84Z48cfDgQds5RP/+/Q1JtufvvPOObb1Vq1YZkoyO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8bRokbVnlyQtWCDdd5909Gj9LLxL1gv7Jb8SbNlSatHCs/EAANAQdetW9pzi4ouljRtPFd6Li6WpU6WxY6VDh6Rjx5xPni68S9Lu3dI331jnO3aU+vXzbDwAAAAAgAahb9++ioiI0NKlS8tdZ/Hixbr++uvt2t577z1dccUVtuczZszQgw8+qCVLlujiiy/WkCFD9MYbb6iwsFAvvfSShg4dqri4OK1evbrCeJ5//nn5+PjolVdeUe/evdW8eXP94x//0KuvvqqkpCQtXLjQtm5+fr5eeeUVxcXFaeDAgRo5cqT++9//2pbv379fkydP1gUXXKDzzz9f48eP19GjRyVJd9xxh1544QW7fT/44IOaMWOG7fkVV1yh//u//9Ojjz6qQYMGacSIEVpx2qi2y5cv17XXXqtBgwYpLi5Ozz77rLKzs23LP/nkEw0ZMkQbNmzQmDFjNHjwYN17772yWCy2v+1nn32m7777Tn379lXfvn21ZcsWFRQU6Pnnn9cll1yif/zjH7r88su1ZMmSCv92cJ063fO9JhISEiRJZrPZ1rZ161ZJUp8+fezW7d27t7y8vLR161bdeOONZbaVl5envLw82/OMjAxJUnR0tLy86vTvF4AGpygmRmmLF6ugd2+n63rFxyvy5ZflFRPjhsisSnJO6dzjChk7dyrr71E8wi6+WP5ffOHS7QNwn9rKEwCqpzgkRCcWLFDe3//Plsd04oSa3X23/Netk2r53KI28kTWV18pY+hQSVLIRRep6eHDLts2APfiXAKAM+QJAM6QJ+qWqKgoeXt7y8fHx+42ynWdl5eXfHx8NGnSJE2bNk033nijoqOj5e3tLUlq0qSJbT2TyWR7LsnhOps3b1bz5s311ltvadu2bZoxY4Z27NihXr16admyZfrqq680Z84cnXfeeYqOji4TT3p6un7++Wfdc889Cg4OtlsWExOjESNGaO3atXrsscdkMpn06KOP6vfff9fUqVPVqVMnHTt2TCdOnFCTJk2UmJioO+64Q3369NHixYsVFBSkrVu32o7DZDLJy8vL7pgctb377ru67bbbNHHiRK1fv17z5s1Tu3btdO6550qSfHx8NHXqVLVo0ULHjh3T7NmztWDBAj366KO2v1Nubq6WL1+uZ555Rl5eXnr00Uf18ssva86cORo3bpwOHTqkrKwszZw5U5IUGhqq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5Ej16dNHK1ascPhh6NmzpyRp8+bNdu2bN29WcXGxbTkAN/P2lhYsOFV4//xzqW9faft268Xw0lNjLbxL1gvmJfr29VwcAADUVb6+1lF0hg6VevWyTuecc6rw/p//SP37S7t22Z9fNBacSwAAAAAAakmHDh10ySWX6IMPPrBr7927t9LS0vTOO+/o6NGjWrFihTZs2FArMTz00EPKz8/XpEmT9OuvvyohIUHr16/XPffco6ioKNuI2S1atFBcXJxmzZqldevW6dixY9qyZYvWrl0rSRozZoyysrI0ffp0/fnnnzp8+LDWrFmjgwcPSpL69u2rH3/8UT/++KMOHjyoZ599VidPniwTz2+//aZ33nlHhw4d0ooVK/TNN9/o2muvlWS93UBhYaE++OADHT16VGvWrNGqVauqfMwtWrTQvn37dPDgQZ04cUKFhYVavny5vvzySx08eFCHDh3SN998o4iICAUHB1fzL4uqaBDF9507dyouLk5t27bVp59+Wu7w8RdeeKHCw8O1cOFCu/aFCxcqMDCQexcAntKrl9SsmXX+88+lyy6TyrmXSqNW+oJ5v36eiwMAgLrqoYekknu6FxVJeXnWKSlJmj7d2uPdwZfhRmPTplPzFN8BAAAAAC52xx13qLi42K7tjDPO0COPPKIPP/xQ119/vf7880/deOONtbL/1q1b65133lGLFi00bdo0jRw5UrNnz1afPn305ptv2vX6njp1qoYOHarnnntOY8aM0TPPPKOcnBxJ1p7tCxcuVE5Oju644w7ddNNN+s9//mPr+HvFFVcoLi5OM2bM0B133KGWLVuqT58+ZeK54YYbtHPnTt1444166623dP/99+vcc8+VJHXq1EmTJ0/WO++8o2uvvVaff/65Jk6cWOVjvuqqq9SmTRvdfPPNuuiii/Tbb78pMDBQ77zzjm666SbdfPPNOn78uF566SVbD3vUrjo/7PyCBQt04sQJHT9+XJL0ySef6OjRo5Kke++9V15eXrr44ouVlpamhx56SJ999pnd69u3b297IwcEBGjWrFmaOHGixowZo4svvlg//PCD3n33XT3zzDMKDw9378EBsLrgglPz//mPdNp/zvjb1q2n5ksKCwAAwKpnT+mxx6zzhYVS797S7797NKQ6Z88e633eQ0P5IR8AAAAAoEZmzJhRpq1FixZav359mfZRo0Zp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d+mlGpmf75b9AqgZziUAOEOeAOAMeQJARXJzc/+fvfuOj6Ja/zj+3U0nQARCCUVAitIUUFH4iYAiglhAqoqKFwUV9V672CvYrh1pV9GLWBBEQbkqeEURvYAKigpioRPA0AKEtN3z+2PYZDfZzZZsMimfN6997dmZMzPPhs3J7DxnzrE7hEopKsl3j9RU6YYbrMcff1hJ+NmzpREjpJQUaehQ6YorpDPOiOZRpeuvv17XXXedxowZozvuuENut1uPPvpoQbL9yJEjPs8JR+/C8ZaYmFiwvqgJEybolltuKXidmZmpZs2aaebMmdz5jioju29fZSUnS5JiFi/Wq5Mn2xxR5ZSamqohQ4Zo3rx5ysjIKJdjGknO88+Xu0kT/XHssZry5ptyHjxYLscGED472gmgPJmkJO26+WZJkmP/fn16771y5OfbHFXlUt7thLtmTenaayVJ67KytHvatDI/JoDIcS4BIBjaCQDB0E4ACCY1NVUDBw60O4xKKarJd29JSdb0w4mJkjGSwyF98IH0yitS167S669L7dtH51jXXnuttm7dqqeeekqvv/66JOmUU07RHXfcoccee0w1j85h7Rma3nsIeY/s7Gy/Q9dLVrLeX8J+165d0XkDgN2Skqw5I47KnjmzoPMKIpORkVG+P8N586SbbpLi47WrSxfpnXfK79gAIlLu7QRQXkaPlmrXliSZ99/Xzq1b7Y2nEivXdmLPHqlePeU2bkzbBFQSnEsACIZ2AkAwtBMAEH1RvW374EFp5kypb1+peXPp7rulFi2kuXOlnTulHTusfNDu3dJVV0XzyNJjjz2mXbt2admyZfrxxx+1atUqud1uSVLbtm0lFQ437++PSXp6uho3bhzdoIDK4t57Jc8Q80uXWolcVC7vv19YHjTIrigAALDmn/KYMsW+OBCeTZus56ZNpaNTeQEAAAAAACA8UUm+f/CBNHy41LChNGaMlYR/7jkr2f7++9LFF0txcdY1nKFDrTzf6tXROLKvOnXq6IwzzlCnTp0kSUuWLFHTpk11wgknSJI6duyo2NhYffvttz7b5ebmas2aNercuXP0gwIqukaNpNtus8q5uQVDjqKSWbZM2rvXKp93nhQfb288AIDq6dRTrYckffedtHKlvfEgdJ7ke2yslYAHAAAAAABA2KKSfB88WFqxQrr5ZmndOqs8frxUr57/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edkyyeWyNx7A29KlhWVPJxEAAAAAAIBKpEok33fv3l1sWV5env79738rKSlJ7du3lyQNGTJEH374obZu3VpQ77PPPtOGDRs0bNiwcosXiAjJd1Rkt91WmMAZN06KibE3HgCAf94JTe9EJ1ARfP21lJdnlUm+AwAAAACASqhKzPk+btw4ZWZm6swzz1STJk20c+dOzZ49W+vXr9c///lP1axZU5J09913691331WfPn3097//XYcOHdJTTz2lTp066aqrrrL5XQBBkHxHRbZli/Thh9JFF0lNm0oXXijNn293VACAoki+oyI7fFhatUrq0UNq105q2JB53wEAAAAAQKVSJe58HzFihJxOp6ZMmaLrrrtOzzzzjJo2baoPPvhAt9xyS0G9Zs2a6YsvvlCrVq1011136cknn9R5552nxYsXM987Kj7v5PuGDfbFAQQyeXJh+frr7YsDABBYjx7Wc2Ym872jYvLuFHL33dLZZ9sWCgAAAAAAQLiqxJ3vI0eO1MiRI0Oq26FDB33yySdlHBFQBjzJ9y1brLuCgIpmyRLpt9+kNm2kvn2lrl2l77+3OyoAgEdysnTssVZ57Vrme0fFtHSplXSXpJtush6XXy698YatYQEAAAAAAISiStz5DlR59etLdetaZYacR0VljPTCC4Wvp02TnPyZAYAKo23bwjLnE6iovvpK2r7dd9no0baEAgAAAAAAEC6yIkBlcPzxhWUulqMimzpV+uknq3zKKdL48fbGAwAo5D2FDecTqKiOHJFOP91KuG/ebC3r1UuqU8fWsAAAAAAAAEJB8h2oDLhYjsoiP18aN67w9WOPSU2a2BcPAKAQ5xOoLLZtk15/XXr3Xet1bKw0cKC9MQEAAAAAAISA5DtQGXCxHJXJ119bQ85LUq1avkPRAwDsw/kEKpv33y8sDxpkVxQAAAAAAAAhI/kOVAZcLEdlc9dd0q5dVvnii6ULL7Q3HgBA4flEbq60caO9sQCh+OYbafduq9y/v5SYaG88AAAAAAAAQZB8ByoDz8XyzEwpPd3eWIBQ7N8v/eMfha/feIM71gDATk6n1LatVf79d8nlsjceIBRut7RggVVOTpYGDLA3HgAAAAAAgCBIvgMVXUKC1LKlVeaud1Qmb78tffSRVa5VS5o/XzKm8LFhg3TOOfbGCADVRfPmhXcNcz6BysQz77skjRtn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qTN69OgS496+fXux/b744otKSUlRXl6eJMntduvJJ59Uy5YtlZiYqBNPPFFvvfWW35jcbremTJmizp07KykpSfXq1dNZZ52lH374Iej7eeeddzRq1Ci1adNGDodDvXv39ltv1apVuuGGG9ShQwclJyfr2GOP1fDhw7Vhw4agx/C2YMECde3aVYmJiTr22GP1wAMPKD8/v1i9/fv3a+zYsapfv76Sk5PVp08fff/992EdC9XTa6+9FvB376677oracXJycnTnnXeqcePGSkpK0mmnnabFixf71Nm0aVOJbcE111xTbL9ut1v169fXk08+WbBs3bp16t+/v2rWrKm6devq8ssv119//eWz3YMPPljisZYvXx70PYXzexfq73Igobwnz88j1LYQCBXtRGTtRHp6uu666y716dNHtWrVCngulpWVpcmTJ6tfv35KS0tTrVq11KVLF02ZMkUulyvkn195tkmAJK1du1ZDhw5V8+bNlZiYqCZNmuicc87Riy++GNH+Xn75Zb322mthbRPKZ7l3794Bf4/j4uL87vfWW29V+/btC16H0j5JVnszdepUde7cWTVr1lTDhg01YMAAff311yG/p1deeUXt2rVTYmKi2rRpE/DnuX37dg0fPlzHHHOMateurYsuukh//vlnyMcJ9T1JoX2nA/yhnYh+OzFlyhQNGzZMxx57rBwOh0aPHu233meffaa//e1vatu2rWrUqKHjjjtOV199tdLT00M6jkd5tUmoXqLdNkRDKJ/hkr4XORwOzZ49u9h+165dK4fDoZUrVxYsC/VcfPHixQV/f+vUqaOhQ4dq06ZNIb+n8ryOwPVLRBvtRNm3EytXrtT111+vk08+WXFxcXI4HH7rbd26VQ899JC6deumOnXqKDU1Vb1799aSJUtCOo5HuV/bNABQSrNmzfJ5nHPOOUZSseU7d+40n3/+uZFk3n333TKPa/Xq1SYxMdF06dLFTJkyxdxzzz0mISHB9O/f36fe119/XSzWf//736ZGjRqmffv2fvd97rnnmqFDhxa8vuuuu4wkc80115jp06ebgQMHGknmrbfeKrbtlVdeaWJjY83f/vY3M2PGDPPcc8+ZK6+80nz66adB31OvXr1MzZo1TZ8+fUydOnVMr169/NYbMmSIadSokbnxxhvNjBkzzCOPPGIaNmxokpOTzdq1a4Mexxhj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h/QHSQrv55eWlhawnqSQjwmUpDRfgiL9jL755ps6/vjjdfLJJxdb99VXXykzM9MnMRXs96Zu3bp+e08uX75cmzdvDutu1lDfU6RtofdxStre+z2F2hYCZYV2ovRee+013Xnnnbr22mt17733hrxdebVJgD/x8fE69dRTNXHiRE2ZMkV5eXl69913JVnTPp199tnKyMjQM888o48++kiLFy/WzTffLMm62yMSkX6W33zzTUmBR7BYtGhRsU4vof5+ffnll/rpp5904YUX+tRr06aN2rVrV2xIyKLS0tLkcrm0e/dun+W5ubnas2dPwXE87VRpzv9pM1DeaCei005EYuvWrerXr59SUlK0aNEiv0Pe+lOebRKqr5LahkiuSYZyrbOoSD/DW7Zs0bJlyzRs2DC/w2AvWrRILVq0UPv27QuWhdMuxcfH61//+pd27NihL7/8Ur/++qs++eQTHThwQE6nU61btw74nsrzOgLXL1HWaCd8jxWtdiJS11xzjT788EO99tprfqf+88eua5sk3wFUWHXq1NH+/fuLLd+8eXPQbTt27KjY2Fh9++23Pstzc3O1Zs0ade7c2e92s2fPVs2aNYt9GZWk/fv36+uvv/bpDSZJnTt3VlZWltatW+ezfMWKFQXrJatxbtSokbZv315s3zt27FBiYmLIX0RDkZ2drQsuuEAbNmzQhx9+6POHNBhPzEV/fjt27NC2bdt8fn6dO3fW999/X+yixIoVK1SjRg21bds24vcAREPnzp21YcOGYkM4Ff0dLbru999/D3jR66OPPlL79u3VokWLgmVNmjRR/fr1i/3eSNLKlStLbHccDocuvfTS0N6QQv+9C+d32Z9w3lOobSFQEVXFdiJcH3zwga6++mpdfPHFmjx5cljbllebBATjGZ3Kc3Fk4cKFysnJ0YIFCzRu3Didd9556tu3r9/OOoEunvkT6Wf5zTffVKtWrXT66acXW+dveivPsUJpn3bt2iXJ/8W+vLy8oCNsBXpP3377rdxud8F6p9OpTp06+W3HVqxYoeOOOy7od5pQ31Ok3+mAktBORN5OhGvPnj3q16+fcnJy9Mknn/idazWQ8myTAKl42+C5G7XodclQrkmGI9LP8FtvvSVjTInfRYp21ImkXWrYsKF69uyptm3byuVyaenSpTrttNNKvKO1PK8jcP0S5Yl2InrtRCRuv/12zZw5U88++6wuueSSkLez69omyXcAFVarVq30v//9z2eosQ8//FBbt24Num1KSor69u2rN954QwcPHixYPmvWLB06dEjDhg0rts1ff/2lJUuWaPDgwapRo0ax9Z9++qkkqV+/fj7LL7roIsXFxenll18uWGaM0dSpU9WkSRP16NGjYPmIESO0detWn3lqMzIy9MEHH+iss87yO19sJFwul0aMGKFvvvlG7777rrp37x6w7oEDB7R+/Xqf4fQ6dOigE044QdOnT/f5Yj5lyhQ5HA4NHTq0YNnQoUO1a9cuvffeez7v6d1339UFF1zg9w4+oDwNHTpULpdL06dPL1iWk5OjmTNn6rTTTlOzZs2KbeO54yRQomvRokXFLnpJ0pAhQ4q1U5999pk2bNjgt93x9Jg944wzig09Few9hfJ7F87vcl5entavX1+sJ2io7ymcthCoaKpiOxGOL7/8UiNHjtSZZ56p2bNnl3g+8scff+iPP/7wWVYWbRJQks8//9zv3SGLFi2SJB1//PGSCu8s8a574MABzZw5s9i2ycnJfjv++hPJZ3n16tVat25diW1G0emtpNDbJ88F47fffttn+++//16//vqrunTpUuJ7Ouuss1S3bl1NmTLFZ/mUKVNUo0YNn/Zs6NChWrVqlc8FrF9//VX//e9/i7VjW7Zs0fr16yN6T5F8pwM8aCei306E4/DhwzrvvPO0fft2LVq0SG3atAlYNyMjQ+vXr1dWVlbBsrJqk4BQ24batWsrNTVVX375pU897++70RLJZ/jNN9/UscceqzPOOKPYul27dun7778v9l2ktOfiTz/9tNLT03XrrbcGfU9lcR2B65coL7QT5dNOhOOpp57S008/rbvvvlt///vfA9arUNc2DQBE2fjx402g5uXzzz83ksy7777rs3zjxo1Gkpk5c2bBso8//thIMn369DFTpkwxt912m2nUqJFp1aqV6dWrV9A4vvvuO5OQkGC6dOlipkyZYu655x6TmJho+vXr57f+iy++aCSZjz/+2O/6K664wvTu3dvvuttvv91IMmPHjjUzZswwAwcONJLM7Nmzfert3LnTpKWlmVq1apkHHnjAPPPMM6Zt27YmKSnJrFmzJuh7+uKLL8wjjzxiHnnkEdOgQQPTokWLgtdffPFFQb2///3vRpK54IILzKxZs4o9vM2cObPYz94YYxYuXGgcDoc566yzzPTp081NN91knE6nueaaa3zq5efnm9NPP93UrFnTPPTQQ2by5MmmQ4cOplatWmb9+vVB3xOqN8/nb9WqVX7XB2ozvNd9/vnnQY8zbNgwExsba26//XYzbdo006NHDxMbG+vze+ORn59vGjZsaE4//XS/+/rzzz+NJLN06dJi67Zs2WLq1atnWrVqZV544QUzceJEU6dOHdOpUyeTnZ1drP7ChQuNJDN16tSg76FojKH+3oX6u+xph6+88sqI31OobSEQDtqJyNoJY0zBOcLIkSONJPO3v/2tYJnHpk2bTEpKiklKSjKTJ08uds7www8/+OyzefPmpnnz5sV+HtFuk4CSdOjQwbRs2dLccsstZvr06eall14yl156qYmJiTEtWrQw+/btM8YYs379ehMfH286depkXnrpJfP444+bVq1amZNOOslIMhs3bizY5/XXX28cDod55JFHzFtvvWU+++yzEmMI97N86623GkkBz4/PPPNMM3r0aL/rQm2fzjnnHCPJDB482EyZMsXcf//9pk6dOiY5OTmk8/LJkycbSWbo0KFmxowZ5oorrjCSzGOPPeZTLzMz07Rq1co0aNDAPPnkk+bZZ581zZo1M40bNza7d+/2qdurVy+/3w1DfU/hfqcDPGgnyqadWLBgQcG5RHx8vOnSpUvBa+9zhosuuqjg3KPoucX8+fN99vnAAw/4PV8rizYJCLVtMMaYu+66y0gyY8aMMVOmTDGXXHKJOfnkk40k88ADDxTU83yG//rrL59jeb7HeLcj/oT7GV67dq2RZO666y6/+3v11VdNUlKSycrKKrYu1HZp1qxZZtCgQeaZZ54x06dPN8OHDzeSzNVXX13ie/Eoi+sIXL9EeaGdKJ92YtOmTQXnEKeddpqRVPD63//+d0G99957z0gybdq08Zvn2LlzZ0HdinRtk+Q7gKiLVvLdGGP++c9/miZNmpiEhATzf//3f+bbb781vXr1Cin5bowxy5YtMz169DCJiYmmfv36Zvz48SYzM9Nv3dNPP900aNDA5OfnF1vndrsL/rj543K5zMSJE03z5s1NfHy86dChg3njjTf81v3jjz/M4MGDTe3atU1SUpI566yzzMqVK0N6P54/1P4e3n/QPRe5Aj28BTp5NcaY+fPnm86dO5uEhATTtGlTc++995rc3Nxi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/Ysl2YULFyhSpIjZaYiIiIiIiIiIiIiIiIiIpJp//vmHRx55xOw00g0V35MhKiqKS5cukTNnTiwWi9npiIiIiIiIiIiIiIiIiIg4jGEY3Llzh0KFCuHiosXUE0vFdxERERERERERERERERERkRTS1xRERERERERERERERERERERSSMV3ERERERERERERERERERGRFFLxXUREREREREREREREREREJIVUfBcREREREREREREREREREUkhFd9FRERERERERERERERERERSSMV3ERERERERERERERERERGRFFLxXUREREREREREREREREREJIVUfBcREREREREREREREREREUkhFd9FRERERERERERERERERERSSMV3ERERERERERERERERERGRFFLxXUREREREREREREREREREJIVUfBcrO3bswGKxsG7dOrNTEZE0SH2EiDhSTJ+yY8cOs1MRkTRIfYSIiIiIiIiIpDcqvmcCFoslUQ8zBrV2795NnTp1yJYtGwULFqRfv34EBwdbbdO5c+d487548aLNfufNm4e3tzfh4eEAREVFMX36dEqUKIGnpycVK1bkk08+sZtTVFQUixYtonLlymTNmpW8efPSoEEDjh49mqhz2rhxI1WrVsXT05OiRYsyZswYIiIirLZZuXJlnOdz5cqVRB0nKed0+vRpmjZtSo4cOciTJw9vvPEG169fT9RxJONTH+G8PmLt2rV06NCBUqVKYbFYePbZZ+1ul5xzsmf58uWUKVMGT09PSpUqxbx58+xud/HiRdq2bUuuXLnw8vLixRdf5MyZM4k6hkh872nDhg1z2HFCQ0MZOnQohQoVImvWrNSsWZPvv//eapuzZ8/G+9rp3r27zX6joqLIly8f06dPj21LzPvm2LFj4z3Wrl27Ejyn27dv06NHD/Lly0f27NmpX78+hw4dstmuePHido/Rq1evxP7zJfpaICn9oUhiqI9IXh9x+fJlhg0bRv369cmZM2ec12LJOSd7knItkNjrC5H4HD9+nNatW1OsWDE8PT0pXLgwjRs3Tvb/TwsXLmTlypVJek5iPrs/++yzcb6+smTJYne/gwYNomzZsrG/J6Z/guj+ZvHixVSuXJkcOXJQoEABmjVrxu7duxN9Tol5fcbVP3l6eib6OIk9J0jcZzoRe9RPOL6fWLRoEW3atKFo0aJYLBY6d+5sd7vknJO9XDVuKanF0f2DIyTmejq+z0YWi4VVq1bZ7Pf48eNYLBb27dsX25aYvgng+++/j30Pzp07N61bt+bs2bOJPqfEvDbj+zyyZs2aRB8rseeU2HEUEbO5mZ2ApL6PPvrI6vcPP/yQ77//3qa9TJkynD592ml5HTlyhIYNG1KmTBlmzZrFhQsXmDlzJn/88QfffPNN7HY9e/akUaNGVs81DINevXpRvHhxChcubLPvzZs389xzz8VeEI4cOZKpU6fSvXt3qlevzpdffkn79u2xWCy8+uqrVs/18/Nj1apVdOzYkbfeeou7d+9y+PBhrl27luA5ffPNN7z00ks8++yzzJs3j+PHjzNx4kSuXbvGokWLbLYfP348JUqUsGrLlStXgsdJyjlduHCBevXq4e3tzeTJkwkODmbmzJkcP36cffv24e7unqjjScalPsJ5fcSiRYs4ePAg1atX58aNG3Ful5xzetiSJUvo1asXrVq1YuDAgezcuZN+/fpx7949hg4dGrtdcHAw9evXJzAwkBEjRpAlSxZmz57NM888w5EjR8ibN2+CxxIB++9p5cuXj/c59erV4/79+4l6L+rcuTPr1q3j7bffplSpUqxcuZLmzZuzfft26tSpA0C+fPls+i6Ab7/9llWrVvHcc8/ZxPbt20dAQAAtWrQAEv+++corr/DYY4/Z7G/EiBEEBwdTvXr1eM8nKiqKFi1acPToUYYMGYKPjw8LFy7k2Wef5eDBg5QqVcpq+8qVKzNo0CCrttKlS8d7jBhJuRZISn8okhTqI6Ilto/47bffmDZtGqVKlaJChQrs2bPH7nbJOaeHJeVaILHXFyLx2b17N/Xr16do0aJ0796dggUL8s8//7B3717mzp1L3759k7zPhQsX4uPjE2ch6WGJ/ew+cuRIunXrZvXcu3fv0qtXrzhfX5s3b+aFF16I/T0x/RPAkCFDmDVrFh06dODNN9/k9u3bLFmyhGeeeYZdu3ZRo0aNeM8pqa/PRYsWkSNHjtjfXV1d4/9He0Bizymxn+lEHqZ+InX6iWnTpnHnzh1q1KjB5cuX49wuOedkbx8at5TUkBr9Q0ol9nq6Xr16dq/dZ8+ezdGjR2nYsKFNbPPmzeTPnz/280Ni+6avvvqKF198kapVqzJ16lSCgoKYO3cuderU4fDhw+TLly/ec0rqa/O1116jefPmVm21atVK1L9fYs8pqeMoIqYyJNPp06ePEdd/+u3btxuA8dlnn6V6Hs2aNTN8fX2NwMDA2LalS5cagLFly5Z4n7tz504DMCZNmmQTu3v3ruHp6WmsWLHCMAzDuHDhgpElSxajT58+sdtERUUZdevWNR555BEjIiIitn3t2rUGYGzYsCFZ51S2bFmjUqVKRnh4eGzbyJEjDYvFYpw+fTq2bcWKFQZg7N+/P1nHSco59e7d28iaNatx7ty52Lbvv//eAIwlS5Yk6/iSsamPSL0+4vz580ZkZKRhGIZRrlw545lnnkn0c+M7p4fdu3fPyJs3r9GiRQur9tdff93Inj27cfPmzdi2adOmGYCxb9++2LbTp08brq6uxvDhwxOdn2ReyXlPu3//fuxrITF++eUXAzBmzJhhtY9HH33UqFWrVoLPb9iwoeHl5WXcv3/fJjZq1CijWLFisb+n5H3z/PnzhsViMbp3755gTjH9yYP96bVr14xcuXIZr732mtW2xYoVs3k9J0Vizykp/aFIYqmP+E9S+oigoCDjxo0bhmEYxmeffWYAxvbt2xN8Xoz4zulhib0WSMr1hUh8mjdvbuTLl8+4deuWTezq1avJ2mdSr60T+9ndno8++sgAjFWrVtnE/vrrL6vXa2L7p/DwcCNr1qxG69atrfZ35swZAzD69esXb05JeX2OGTPGAIzr16/Hu8+4JKXPTclnOsnc1E84vp8wDMM4e/asERUVZRiGYWTPnt3o1KlTgs9JzDk9TOOWkppSo39IqZSMrd27d8/ImTOn0bhxY7vxunXrWr1WE9s3lS1b1njssceM0NDQ2LYjR44YLi4uxsCBAxM8p8S+Nv/++2+bPiypEntOSRlHETGbiu+ZUGIKa2vXrjUmTpxoFC5c2PDw8DAaNGhg/PHHH1bbFitWzO5F2jPPPJPgxWxgYKDh5uZmDBkyxKo9NDTUyJEjh9G1a9d4n9+7d2/DYrEYf//9t01s48aNhsViMa5cuWIYhmEsWLDAAIyTJ09abbd69WoDMHbu3BnbVrNmTaNGjRqGYRhGZGSkERwcHG8eDzp58qQBGAsWLLBqv3jxogEYEyZMiG17cBAyKCgo3sHsS5cuGadPnzbCwsJi25JyTvnz5zfatGljs9/SpUsbDRs2TPT5SeahPiKao/uIhyX1g39c53T9+nXj9OnTxt27d2PbNm/ebADG5s2brbbdvXu3ARgfffRRbFv16tWN6tWr2xzvueeeMx599NFE5yeZV0KFtZh+45NPPjFGjhxpFCpUyLBYLMatW7diYwkVlIYMGWK4urpaDdwahmFMnjzZAIzz58/H+dxLly4ZLi4uRufOne3Gq1atarz55puxv6fkfTPmA/eOHTvi3c4wDKNNmzZGgQIFbAqMPXr0MLJly2aEhITEtsUU30NDQ+Ptd8LCwozTp08bly5dsmpP7DklpT8USSz1Ef9JSh/xoKQW3+M7p9OnT1sNoBlG4q8FknJ9IRKfxx9/3Hj22WcTta2/v79Rv359I1++fIa7u7tRpkwZY+HChVbbFCtWzACsHvFdZyfls7s9zZo1M7Jnz273Pfm9994zvL29YwePE9s/3bt3zwCsClWGYRjBwcGGi4uLMXTo0HhzSsrrM6b4fu3aNSMwMDC2EGfPuXPnbIqMiT2nlH6mk8xN/YTj+4mHJbX4Htc5adxSnC2x/UNMUThm8s2DAGPMmDGxv8e8N/7xxx9Gp06dDG9vb8PLy8vo3Lmz1XhbXFIythZTUF65cqVN7NatW4arq6vx6aefGoaR+L7pxo0bBmDzHmwY0eORhQoVSvCcEvvafLD4HhwcbFXsf9jt27eN06dPG7dv345tS0p/m5RxFBGz6Z7vYtfUqVP5/PPPGTx4MMOHD2fv3r28/vrrDtv/8ePHiYiIoFq1albt7u7uVK5cmcOHD8f53PDwcD799FNq165N8eLFbeJff/01Tz75JAUKFADg8OHDZM+enTJlylhtF7MUU8yxgoKC2LdvH9WrV2fEiBF4e3uTI0cOSpYsyaeffprgOcXs5+FzKlSoEI888ojdc6pfvz5eXl5ky5aNli1b8scff9hsM3z4cMqUKWN1j+fEntPFixe5du2aTU4x28b37ywSH/URSe8jUiK+c5o/fz5lypSxuvdTXP3Rk08+iYuLS2w8KiqKY8eOxdlH/PXXX9y5c8fBZyMZVWBgIAEBAVaPB02YMIHNmzczePBgJk+enKTlAw8fPkzp0qXx8vKyao95nR45ciTO565Zs4aoqCi7fdSVK1c4fPhw7NJoKX3fXLVqFUWKFKFevXoJnRKHDx+matWquLhYX47XqFGDe/fu8fvvv1u1//DDD2TLlo0cOXJQvHhx5s6da7PPixcvUqZMGYYPH27VlthzSmx/KJIc6iOS1kekRHznVKZMGTp27Bj7e1KuBRJ7fSGSkGLFinHw4EFOnDiR4LaLFi2iWLFijBgxgnfffZciRYrw5ptvsmDBgtht5syZwyOPPMITTzzBRx99xEcffcTIkSPj3GdyPrvHuH79Ot9//z0vvfQS2bNnt4l//fXXNG7cGDc3t9hjJaZ/irnH88qVK1m1ahXnz5/n2LFjdO7cmdy5c9OjR494/pWS9/osWbIk3t7e5MyZkw4dOnD16lWbbTp27GhzXZDYc0rJZzoR9ROO7ydSIr5z0rilOFtS+oekatu2LXfu3GHKlCm0bduWlStXMm7cuHifk9KxtVWrVpE1a1ZeeeUVm9iWLVuwWCyxt3tIbN8UGhoKRPcbD8uWLRuXLl3iypUrceaUnNfmuHHjyJEjB56enlSvXp3vvvvOZpvPP/+cMmXK8Pnnn8e2JaW/Teo4ioiZdM93sSskJIQjR47EDnrlzp2b/v37c+LEiQTvzZgYMfcV8vX1tYn5+vqyc+fOOJ+7ZcsWbty4EWeh7+uvv6ZLly5WxypQoAAWi8XmOACXLl0C4K+//sIwDNasWYObmxvTp0/H29ubuXPn8uqrr+Ll5UXTpk2TfU4xx4HoN7nOnTvHFt8PHjzIrFmzqF27NocOHaJIkSJxHicp55RQTjdv3iQ0NBQPD494jyfyMPURSe8jUiKhc3rY5cuXcXV1JX/+/Fbt7u7u5M2bN/acYvqAuP6dIfr8H3/88RSegWQGjRo1smkzDCP27yEhIRw4cMDuh7+EXL58OcH/T+OyatUqfH19adCggU3s66+/xtPTMzaWkvfNkydPcuzYMf73v//Z9CdxnZO9AtyD51ShQgUAKlasSJ06dXj88ce5ceMGK1eu5O233+bSpUtMmzYtweMk9pwS2x+KJIf6iKT1ESkR3zk9LCnXAom9vhBJyODBg2nWrBmVK1emRo0a1K1bl4YNG1K/fn2yZMlite2PP/5o1S+89dZbNG3alFmzZtGnTx8AXnrpJd555x18fHzo0KFDgsdPymf3h61du5aIiAi71+X37t1jx44dVvcmTUr/9PHHH9OuXTurcyhZsiS7du2iZMmSCZ5TYl+fuXPn5q233qJWrVp4eHiwc+dOFixYwL59+zhw4IBNAdDesRJzTin5TCeifsLx/URKxHdO9mjcUlJTUvqHpKpSpQrLly+P/f3GjRssX7483s/dKRlbu3nzJt9++y0vvfQSOXPmtIlv3ryZp59+Gm9vbyDxfVOBAgXIlSsXu3btstrmxo0bnDp1CogusBcsWNDuOSXlteni4sJzzz3Hyy+/TOHChTlz5gyzZs2iWbNmbNy4kRYtWtg9RmKP9WAfmJRxFBGzqfgudnXp0sVqtkndunUBOHPmjEMKa/fv3wewe/Hk6ekZG7dn9erVZMmShbZt29rETpw4wfnz56069fv378d5nAdzCQ4OBqLfhPbu3UvNmjUBaNmyJSVKlGDixInxFtYSOqegoKDY39u2bWuV/0svvUSTJk2oV68ekyZNYvHixbGxlStXsnLlSptjJeacEsopvn2JxEd9RNL7iJSI75zGjh3L2LFjrdru378f54zBB//9EttHiCTGggULKF26dJzxTp06JauoBol/nT7s999/5+DBgwwYMMDmm9EQXVirX79+bF4ped9ctWoVQKIHpJJyThs3brTapkuXLjRr1oxZs2bRt29fHnnkEQCKFy9uVcxM6jkl999ZJDHURyStj0iuhM4puX1EzM/EXF+IJKRx48bs2bOHKVOmsGXLFvbs2cP06dPJly8fy5Yto2XLlrHbPtgvBAYGEh4ezjPPPMOWLVsIDAyMHYxOiqR8dn/Y6tWryZcvH40bN7aJ/fDDD4SGhtKsWTOrYyW2f8qZMyflypWjVq1aNGzYkCtXrjB16lReeukldu7ciY+PT7znlNjXZ//+/a3irVq1okaNGrz++ussXLiQYcOGxcZ27Nhh91iOGI9QnyHxUT/h+H4iJeI7J41birMlpX9Iql69eln9XrduXT7//HOCgoLi/HJaSsbW1q1bR1hYmN3PCFFRUXz77bcMGTIk0ceK6ZtcXFzo2bMn06ZNY/jw4fj5+REUFMT//vc/wsLC4s0pKefk4eFB0aJF2bJli9U2b7zxBmXLlmXQoEFWY7CdO3emc+fOSTrWg/2txiwkPdGy82JX0aJFrX7PnTs3ALdu3XLI/mMujGOWQHlQSEhInANvwcHBfPnllzRp0oS8efPaxDdv3kyBAgWslinJmjVrnMd5MJeYnyVKlIgtqgHkyJGDF154gX379hEREeHwc4pRp04datasydatW+PdLuZYSTmnxGwrkhTqI5LeRyRXQudkT9asWWMvph/24L+f+ghxpBo1atCo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iPLaJEnbtm3Trl27HMo87Qt4078AyrJu3TqXGWRr166VJLVp00bS/2Wfnbxvdna2Fi9e7PTZmJgYlwt/XfHm3r3U5s2btXXr1jJjxqmvt5I8j0+lg8UvvfSSw+e//fZbbd++XZ07dy6zTd5cn67GI+bNm6cDBw44jUfs2rVL27Ztq1CbKnJPB5QiTvg+TlREeW2SGLeE/3kaH+Lj45WYmKhPPvnEYb+T/136SkXG1pYvX66mTZuqe/fuTtv27dunb7/91ql/XZHYdLLZs2crIyNDd999d7lt8vTadNWv2LNnj5577jmdeeaZ9sx26UR83rZtm8MrQbxpk6fjKEC1YFDj3HrrrcbdX/26deuMJPPKK684lP/5559Gklm8eLG97J133jGSTO/evc28efPMPffcY5KSkkyLFi1Mr169yq3Hpk2bTEREhOncubOZN2+emThxoomMjDQXX3yxy/2ffPJJI8m88847LrePGTPGXHDBBS633XvvvUaSufHGG83ChQvNgAEDjCSzbNkyh/327t1rkpOTTVxcnJk0aZKZM2eOad26tYmKijLfffdduW1avXq1sdlspk+fPmbBggXm9ttvNyEhIeaGG25w2K9ly5Zm+PDh5pFHHjHz5883N954owkLCzMpKSlm7969Dvtec801RpL5888/K9SmXbt2mXr16pkWLVqYJ554wkyfPt3UqVPHnHHGGSY/P7/cNqHmIUZUXYz4+OOPzbRp08y0adNMgwYNTGpqqv3njz/+2Os2GWPMpEmTjCSzbt06h/KnnnrKSDLDhg0zCxcuNGPGjDGSzL///W+H/XJyckyLFi1MgwYNzKxZs8xjjz1mUlJSTKNGjcz+/fvLbROwePFiI8l88803Lre7ixsnbzv1368rw4cPN2FhYebee+81zzzzjDnvvPNMWFiYy2unqKjINGzY0Jx77rkuj/XHH38YSWb9+vVO27z93ly9erWRZObPn19uG06t47nnnmtiY2PNlClTzFNPPWXat29v4uLizLZt2+z7LV682LRo0cLcd999Zv78+Wb69OmmQ4cORpKZPn26wzFLY/E111xT4TZ5Gg8BTxEjKhYjjDH2PsLIkSONJHPttdfay7xtUylJTv0wb/oCnvYvgLK0b9/eNG/e3Nx1111mwYIFZu7cueaqq64yoaGhJjU11Rw+fNgYY8y2bdtMeHi4OeOMM8zcuXPNzJkzTYsWLUzHjh2d7pFvueUWY7PZzLRp08yKFSvMhx9+WGYdPL13L3X33XcbSQ7f0Sfr2bOnGTt2rMttnsaniy66yEgyQ4YMMfPmzTP/+te/TJ06dUxMTIzb857M0+szKirKjB071jz66KPmqaeeMqNGjTI2m8106tTJHD161GHfXr16ubw39LRN3t7TAaWIE1UTJ9588017XyI8PNx07tzZ/vOWLVu8bpMxjFvC/zyND8YYc//99xtJ5rrrrjPz5s0zo0aNMmeffbaRZCZNmmTfr3Rs7cCBAw7nKr2XOfXf96m8HVv74YcfjCRz//33uzzec889Z6KiokxeXp7TNk9j09KlS83gwYPNnDlzzIIFC8yIESOMJHP99deX2ZZSnl6bY8eONT169DCTJ082CxYsMA8++KCpV6+eCQ8Pd7qPK/19njx+7E2bPB1HAaoDJt9rIF9NrBljzKOPPmoaN25sIiIizPnnn282btxoevXq5dHEmjHGfPrpp+a8884zkZGRpn79+ubWW281OTk5Lvc999xzTYMGDUxRUZHTtpKSEvuXmyvFxcVm+vTpplmzZiY8PNy0b9/evPjiiy73/f33382QIUNMfHy8iYqKMn369DEbNmzwqD3GGPP666+bTp06mYiICNOkSRPz0EMPmePHjzvsM3HiRNOpUyeTkJBgatWqZZo2bWpuvvlmp4l3Y9x3Yr1p048//mguvvhiEx0dbWrXrm2uvvpql+cCjCFGVGWMKO3Mu/pzcqffkzadekxXExMLFiwwbdq0MeHh4aZFixbmscceMyUlJU77/fXXX2bYsGEmPj7exMbGmssuu8z8+uuvHrUJ8NfE2rFjx+yLeCIiIkxaWprbhSmli3+eeOIJl9vnzp1rEhISTGFhocvt3nxvjhw50tSqVcscPHiw3Dac6tChQ+a6664z9erVM9HR0aZXr15Ov8eNGzeagQMHmsaNG5vw8HATGxtrunfvblauXOl0PHeT7960yZt4CHiCGFHxGOGuz+Cqn1Zem04+pqt+mDd9AU/7F4A7b7/9trn22mvN6aefbmJjY014eLhp2bKlmTBhgtm3b5/Dvm+++aY588wzTWRkpElNTTWPPPKIee6555zukffu3WsGDBhg4uLi3P47P5Un9+7GnPhubNy4sTnrrLNcHicrK8uEhYW5/G42xvP4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UL59+3alpaXpr7/+Krc9y5Yt08iRI9WjRw8NGDBAM2fOVF5enn37qY9tX7Bgga666ir973//0+WXX67zzz+/3HOU1vWJJ57QhRdeqEsuuUQLFixw2H7kyBE9/PDDuuiii3TBBRfo5ptv1i+//GLfvnv3bt1999265JJL1LNnT40ZM0Zff/21ffv48eOVkZGhxx57TGlpaUpLSyuz/mvXrtWgQYN0wQUX6MEHH9TRo0ft+xw9elQPPfSQevTooX79+mn58uUeZ0W7q4ckbd68WUOGDFHXrl01YMAAzZ49W8eOHbNvHzRokJ599llNmjRJPXv21MCBA/Xxxx/r8OHDuvvuu9WzZ0+NGjVKP//8s/0zpe1bv369rrjiCp1//vmaMGGC9u7d61Cvjz/+WKNHj9b555+vyy+/XAsXLlRRUZF9e+m/u7vuuks9evTQc889p+LiYk2bNk2XX365unfvrqFDh2rFihUOv8s1a9bo448/trd106ZNLrO2S/9NpqenO9T7448/1ogRI3T++edr7969On78uP773/+qf//+6tGjh8aOHatNmzaV+3uXpIyMDN15553q06ePevTooREjRujzzz+3b//tt990++23q2fPnrrkkkv0r3/9S1lZWZJOZPB/++23eumll+xtSU9Pt7fls88+06hRo3T++edr3Lhx+u233xzO/dFHH2nEiBE677zzNGjQIL344osO2099GkJaWpr+97//6d5771X37t11xRVX6OOPP5Z04tUSN910kySpT58+SktLc4gjqDoMBwC+wOpywLpYXQ6gOiDzHbAu3vkOoLpgbAKwLp7KV+NkZmZq4sSJGjRokFauXKn58+erd+/eMsbzv/cXX3xRrVq10osvvqhrrrlGc+bMcZhElqT58+erT58+WrZsmfr166eJEyfqzz//dDqWzWbToEGDtHr1aofy1atXq3PnzkpJSSm3PjabTffcc49efvllTZ48WRs3btQTTzxR5md2796tjz76SLNmzdKyZcs8aLX01ltvKSoqSosXL9btt9+uRYsWObT7/vvv16FDh/T444/rhRdeUJs2bXTLLbcoOztbkpSXl6fzzz9fTz31lF588UV169ZNd999t32SedasWWrQoIHGjx+vt99+W2+//bbbuuzZs0fr16/XnDlz9Nhjj+nbb7/V888/b9/+2GOP6fvvv9ej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xMRowIABevzxx7Vx40b9/vvvmjZtmkJCQhyytMviqh7XXHONtmzZookTJ2rbtm3atWuXPv74Y82aNatC9TxZWFiY/vOf/+jHH3/U1q1bNXXqVJ1xxhn2yfjrr79ea9as0cKFC/X777/rzz//1Hvvvad58+aVedyUlBRt3bpVX375pXbu3Kl58+bZ/z5KNWrUSL/99pt27NihrKwsFRUVKSUlRQ0bNtTChQu1a9cuffbZZ1q2bFm57WjWrJn69eunyZMn66OPPtKePXv0008/afHixfrss8/K/fyjjz6qL7/8Unv27NG2bdu0adMm+wT58OHDlZOTo4ceekg//fSTdu/erS+//FJTpkyxT3AnJyfrxx9/VHp6urKyshwm4hctWqQNGzbot99+05QpU1S7dm1dcMEFkqTRo0frm2++0aJFi7Rz50699dZbWrlypUaPHl1und1JTk6WzWbTZ599psOHDysvL6/Cx4LnyHwHfMHVMhZucAFrYPIdQHXgbkks/Qmg+nN3nbLUHYC/MTYBWBdjEzVOTEyMvv32W61YsUJHjx5VUlKS7rjjDp1//vkqKirSL7/8osmTJys0NFSjRo3SOeec43SMq6++Wlu3btXChQsVExOjO+64Q926dXPY58Ybb9R7772nRx55RImJiXr44Yd12mllPxp/0KBBWrx4sQYOHOhxe1q3bq0777xTL7zwgp566il17txZt956qyZNmuTxMXzBZrPpv//9r+bNm6epU6fq8OHDqlevnjp37mx/x/mdd96padOm6brrrlPt2rU1ZswYHT161OE448eP14wZMzRkyBAdP35c33zzTYXqc+edd2rGjBm68847FRMTozFjxmjfvn0Oj2gvi6t6tGrVSosWLdKCBQt07bXXyhijJk2a6KKLLqpQHU8WGRmpMWPG6KGHHtKBAwfUqVMn/fOf/7Rv79atmx577DEtWrRIzz//vMLCwpSamqrLL7+8zONeccUV2r59ux588EHZbDZdfPHFGjZsmL744gv7PoMHD9amTZt0zTXXKC8vT/Pnz9fZZ5+tf//735o5c6auuuoqtWvXTjfffLPuv//+ctsyadIkPfvss3r88ce1f/9+1a5dWx06dFCPHj3K/WxJSYlmzZql/fv3KyYmRt26ddOdd94pSapfv74WLVqkJ598UhMmTNDx48eVnJysbt262Z/6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9f777zvss2PHjjKvnRtuuMHpuCUlJapfv75mzZplL/Pke3Py5Mllnuvzzz8vt01ZWVm68cYbVb9+fcXExKh379769ttvnfZLTU11eY6bbrrJ01+fx30Bb+Ih4AliRMViREZGhu6//3717t1bcXFxbvtiFWmTK970BTztXwBl+eGHHzRs2DA1a9ZMkZGRaty4sS666KIK/3t6+umntWTJEq8+48m9+wUXXOD2+qpVq5bL4959991q166d/WdP4pN0It7Mnz9fnTp1UmxsrBo2bKhLL71UX3zxhcdt8uT6dBefIiMjPT6Pp22SPLunA1whTvg+TsybN0/Dhw9X06ZNZbPZNHbsWJf7VaRNrurKuCWqiq/jgy940p8u697IZrNp2bJlTsf94YcfZLPZtGHDBnuZJ7FJkt5//337d3CdOnU0bNgw7dixw+M2eXJtlnU/8tJLL3l8Lk/b5Ok4ChBoYYGuAKre0qVLHX5+4YUX9P777zuVt23bVlu3bvVbvb777jtdeOGFatu2rebMmaPdu3dr9uzZ+vXXX/X222/b9xs/frz69u3r8FljjG666SalpqaqcePGTsdes2aNLr74YnuHcOLEiZo5c6ZuuOEGpaWl6Y033tBVV10lm82mkSNHOnz22muv1bJlyzRmzBjddtttOnr0qDZv3qz9+/eX26a3335bgwcP1gUXXKAnn3xSP/zwgx5++GHt379f8+bNc9p/6tSpat68uUNZ7dq1yz2PN23avXu3evbsqYSEBE2fPl25ubmaPXu2fvjhB23YsEHh4eEenQ/Bixjhvxgxb948bdq0SWlpaTp48KDb/SrSplM988wzuummmzR06FDddddd+vTTT3X77bcrLy9P9913n32/3Nxc9e7dW9nZ2XrwwQdVq1YtPfbYY+rVq5e+++471atXr9xzAZLr77QOHTqU+ZmePXvq2LFjHn0XjR07Vq+++qruuOMOtWrVSkuWLFH//v21bt06de/eXZJUv359p9glSe+8846WLVumiy++2Gnbhg0blJmZqQEDBkjy/HvziiuuUMuWLZ2O9+CDDyo3N1dpaWlltqekpEQDBgzQli1bdO+99yoxMVFPP/20LrjgAm3atEmtWrVy2L9Tp066++67Hcpat25d5jlKedMX8CYeAt4gRpzgaYzYvn27HnnkEbVq1UpnnHGGvvzyS5f7VaRNp/KmL+Bp/wIoyxdffKHevXuradOmuuGGG5SUlKS//vpLX331lR5//HFNmDDB62M+/fTTSkxMdDuRdCpP790nTpyo66+/3uGzR48e1U033eT2+lqzZo0GDhxo/9mT+CRJ9957r+bMmaPRo0frlltuUVZWlp555hn16tVLn3/+ubp06VJmm7y9PufNm6fY2Fj7z6GhoWX/0k7iaZs8vacDTkWcqJo48cgjj+jIkSPq0qWLMjIy3O5XkTa5OgbjlqgKVREfKsvT/nTPnj1d9t0fe+wxbdmyRRdeeKHTtjVr1qhBgwb2+wdPY9Nbb72lyy+/XGeddZZmzpypnJwcPf744+revbs2b96s+vXrl9kmb6/NUaNGqX///g5l3bp18+j352mbvB1HAQLKoMa59dZbjbu/+nXr1hlJ5pVXXqnyelx66aUmOTnZZGdn28sWLlxoJJl33323zM9++umnRpL597//7bTt6NGjJjIy0ixevNgYY8zu3btNrVq1zK233mrfp6SkxPTo0cM0adLEFBUV2ctffvllI8msWrWqQm1q166d6dixoyksLLSXTZw40dhsNrN161Z72eLFi40k880331ToPN606eabbzZRUVFm586d9rL333/fSDLPPPNMhc6P4EaMqLoYsWvXLlNcXGyMMaZ9+/amV69eHn+2rDadKi8vz9SrV88MGDDAofzqq682MTEx5tChQ/ayRx55xEgyGzZssJdt3brVhIaGmgceeMDj+qHmqsh32rFjx+zXgie+/vprI8n85z//cThGixYtTLdu3cr9/IUXXmji4+PNsWPHnLb985//NM2aNbP/XJnvzV27dhmbzWZuuOGGcutUGk9Ojqf79+83tWvXNqNGjXLYt1mzZk7Xszc8bZM38RDwFDHi/3gTI3JycszBgweNMca88sorRpJZt25duZ8rVVabTuVpX8Cb/gVQlv79+5v69eubw4cPO23bt29fhY7pbd/a03t3V5YuXWokmWXLljlt+/333x2uV0/jU2FhoYmKijLDhg1zON4ff/xhJJnbb7+9zDp5c31OmjTJSDIHDhwo85jueBNzK3NPh5qNOOH7OGGMMTt27DAlJSXGGGNiYmLMNddcU+5nPGnTqRi3RFWqivhQWZUZW8vLyzNxcXHmoosucrm9R48eDteqp7GpXbt2pmXLlqagoMBe9t1335mQkBBz1113ldsmT6/NP//80ymGecvTNnkzjgIEGpPvNZAnE2svv/yyefjhh03jxo1NRESE6dOnj/n1118d9m3WrJnLTlqvXr3K7cxmZ2ebsLAwc++99zqUFxQUmNjYWHPdddeV+fmbb77Z2Gw28+effzpte/PNN43NZjN79+41xhjz1FNPGUnmp59+cthv+fLlRpL59NNP7WVdu3Y1Xbp0McYYU1xcbHJzc8usx8l++uknI8k89dRTDuV79uwxksy0adPsZScPQubk5JQ5mJ2enm62bt1qjh8/bi/zpk0NGjQww4cPdzpu69atzYUXXuhx+1BzECNO8HWMOJW3N/7u2nTgwAGzdetWc/ToUXvZmjVrjCSzZs0ah32/+OILI8ksXbrUXpaWlmbS0tKcznfxxRebFi1aeFw/1FzlTayVxo0VK1aYiRMnmkaNGhmbzWYOHz5s31behNK9995rQkNDHQZujTFm+vTpRpLZtWuX28+mp6ebkJAQM3bsWJfbzzrrLHPLLbfYf67M92bpDff69evL3M8YY4YPH24aNmzoNMF44403mujoaJOfn28vK518LygoKDPuHD9+3GzdutWkp6c7lHvaJm/iIeApYsT/8SZGnMzbyfey2rR161aHATRjPO8LeNO/AMrSpk0bc8EFF3i073PPPWd69+5t6tevb8LDw03btm3N008/7bBPs2bNjCSHP2X1s725d3fl0ksvNTExMS6/k5944gmTkJBgHzz2ND7l5eUZSQ4TVcYYk5uba0JCQsx9991XZp28uT5LJ9/3799vsrOz7RNxruzcudNpktHTNlX2ng41G3HC93HiVN5OvrtrE+OW8DdP40PppHBp8s3JJJlJkybZfy79bvz111/NNddcYxISEkx8fLwZO3asw3ibO5UZWyudUF6yZInTtsOHD5vQ0FCzcuVKY4znsengwYNGktN3sDEnxiMbNWpUbps8vTZPnnzPzc11mOw/VVZWltm6davJysqyl3kTb70ZRwECjXe+w6WZM2fq9ddf1z333KMHHnhAX331la6++mqfHf+HH35QUVGRzjnnHIfy8PBwderUSZs3b3b72cLCQq1cuVLnnXeeUlNTnbavXbtWZ599tho2bChJ2rx5s2JiYtS2bVuH/UofxVR6rpycHG3YsEFpaWl68MEHlZCQoNjYWJ122mlauXJluW0qPc6pbWrUqJGaNGnisk29e/dWfHy8oqOjNWjQIP36669O+zzwwANq27atwzuePW3Tnj17tH//fqc6le5b1u8ZKAsxwvsYURlltWnu3Llq27atw7uf3MWjs88+WyEhIfbtJSUl+v77793GiN9//11HjhzxcWsQrLKzs5WZmenw52TTpk3TmjVrdM8992j69OlePT5w8+bNat26teLj4x3KS6/T7777zu1nX3rpJZWUlLiMUXv37tXmzZvtj0ar7PfmsmXLlJKSop49e5bXJG3evFlnnXWWQkIcu+NdunRRXl6efvnlF4fyjz76SNHR0YqNjVVqaqoef/xxp2Pu2bNHbdu21QMPPOBQ5mmbPI2HQEUQI7yLEZVRVpvatm2rMWPG2H/2pi/gaf8CKE+zZs20adMm/fjjj+XuO2/ePDVr1kwPPvigHn30UaWkpOiWW27RU089Zd/nv//9r5o0aaLTTz9dS5cu1dKlSzVx4kS3x6zIvXupAwcO6P3339fgwYMVExPjtH3t2rW66KKLFBYWZj+XJ/Gp9B3PS5Ys0bJly7Rr1y59//33Gjt2rOrUqaMbb7yxjN9Sxa7P0047TQkJCYqLi9Po0aO1b98+p33GjBnj1C/wtE2VuacDiBO+jxOVUVabGLeEv3kTH7w1YsQIHTlyRDNmzNCIESO0ZMkSTZkypczPVHZsbdmyZYqKitIVV1zhtO3dd9+VzWazv+7B09hUUFAg6UTcOFV0dLTS09O1d+9et3WqyLU5ZcoUxcbGKjIyUmlpaXrvvfec9nn99dfVtm1bvf766/Yyb+Ktt+MoQCDxzne4lJ+fr++++84+6FWnTh39/e9/148//ljuuxk9UfpeoeTkZKdtycnJ+vTTT91+9t1339XBgwfdTvStXbtW48aNczhXw4YNZbPZnM4jSenp6ZKk33//XcYYvfTSSwoLC9OsWbOUkJCgxx9/XCNHjlR8fLz69etX4TaVnkc68SU3duxY++T7pk2bNGfOHJ133nn69ttvlZKS4vY83rSpvDodOnRIBQUFioiIKPN8wKmIEd7HiMoor02nysjIUGhoqBo0aOBQHh4ernr16tnbVBoD3P2epRPtb9OmTSVbgJqgb9++TmXGGPv/5+fna+PGjS5v/sqTkZFR7r9Td5YtW6bk5GT16dPHadvatWsVGRlp31aZ782ffvpJ33//vf7xj384xRN3bXI1AXdym8444wxJ0plnnqnu3burTZs2OnjwoJYsWaI77rhD6enpeuSRR8o9j6dt8jQeAhVBjPAuRlRGWW06lTd9AU/7F0B57rnnHl166aXq1KmTunTpoh49eujCCy9U7969VatWLYd9P/74Y4e4cNttt6lfv36aM2eObr31VknS4MGD9dBDDykxMVGjR48u9/ze3Luf6uWXX1ZRUZHLfnleXp7Wr1/v8G5Sb+LTiy++qCuvvNKhDaeddpo+//xznXbaaeW2ydPrs06dOrrtttvUrVs3RURE6NNPP9VTTz2lDRs2aOPGjU4TgK7O5UmbKnNPBxAnfB8nKqOsNrnCuCWqkjfxwVudO3fWs88+a//54MGDevbZZ8u8767M2NqhQ4f0zjvvaPDgwYqLi3PavmbNGp1//vlKSEiQ5HlsatiwoWrXrq3PP//cYZ+DBw/q559/lnRigj0pKcllm7y5NkNCQnTxxRdryJAhaty4sf744w/NmTNHl156qd58800NGDDA5Tk8PdfJMdCbcRQg0Jh8h0vjxo1zyDbp0aOHJOmPP/7wycTasWPHJMll5ykyMtK+3ZXly5erVq1aGjFihNO2H3/8Ubt27XII6seOHXN7npPrkpubK+nEl9BXX32lrl27SpIGDRqk5s2b6+GHHy5zYq28NuXk5Nh/HjFihEP9Bw8erEsuuUQ9e/bUv//9b82fP9++bcmSJVqyZInTuTxpU3l1KutYQFmIEd7HiMooq02TJ0/W5MmTHcqOHTvmNmPw5N+fpzEC8MRTTz2l1q1bu91+zTXXVGhSTfL8Oj3VL7/8ok2bNunOO+90WhktnZhY6927t71elfneXLZsmSR5PCDlTZvefPNNh33GjRunSy+9VHPmzNGECRPUpEkTSVJqaqrDZKa3baro7xnwBDHCuxhRUeW1qaIxovS/nvQvgPJcdNFF+vLLLzVjxgy9++67+vLLLzVr1izVr19fixYt0qBBg+z7nhwXsrOzVVhYqF69eundd99Vdna2fTDaG97cu59q+fLlql+/vi666CKnbR999JEKCgp06aWXOpzL0/gUFxen9u3bq1u3brrwwgu1d+9ezZw5U4MHD9ann36qxMTEMtvk6fX597//3WH70KFD1aVLF1199dV6+umndf/999u3rV+/3uW5fDEeQcxAWYgTvo8TlVFWmxi3hL95Ex+8ddNNNzn83KNHD73++uvKyclxuzitMmNrr776qo4fP+7yHqGkpETvvPOO7r33Xo/PVRqbQkJCNH78eD3yyCN64IEHdO211yonJ0f/+Mc/dPz48TLr5E2bIiIi1LRpU7377rsO+/ztb39Tu3btdPfddzuMwY4dO1Zjx4716lwnx1vGLGAlPHYeLjVt2tTh5zp16kiSDh8+7JPjl3aMSx+BcrL8/Hy3A2+5ubl64403dMkll6hevXpO29esWaOGDRs6PKYkKirK7XlOrkvpf5s3b26fVJOk2NhYDRw4UBs2bFBRUZHP21Sqe/fu6tq1qz744IMy9ys9lzdt8mRfwBvECO9jREWV1yZXoqKi7J3pU538+yNGwJe6dOmivn37Ovw5WfPmzSt8bE+v01OVNdlVWFio999/3+FGsKLXhDFGy5cvV4cOHXTmmWeW1xz7cSp67dlsNt15550qKipyOSh+6nkkz9pUmToB5SFGeBcjKsrbSX5vY4Qn/QvAE2lpaVq1apUOHz6sDRs26IEHHtCRI0c0bNgwe0aWJH3++efq27evYmJiVLt2bdWvX18PPvigpBOTbBVR0XuNP/74Q19++aWuvPJK++OiT7ZmzRqdc8459tdblZ7Lk+urqKhIffv2VUJCgubOnashQ4bo5ptv1gcffKDff/9d//nPf8ptU2Wuz6uuukpJSUl+HY8gZqA8xAnfxomKKq9NrjBuiarmaXzwVkXGOyvz73jZsmWqW7euw4KcUt98840OHDjg1f3IyeeZOnWqrrvuOs2aNUutW7fWOeeco7CwMF133XWSToxnVkWbJKlu3boaN26ctm/frt27d7vdz9s2MWYBK2HyHS6Fhoa6LD85U8Ld4xKLi4vLPX7po0BKHytysoyMDDVq1Mjl5/73v/8pLy+vzMdJ9+vXz6FuycnJ2rt3r1OWR+m5S89V+t+TO8ClGjRooMLCQh09etTnbTpZSkqKDh06VO5+nrapvDrVrVuX1aOoEGKEI09iREWV1yZXkpOTVVxcrP379zuUHz9+XAcPHrS3pTQGuPs9S/IodgGeqMxNUHJycoX+nS5fvlxt2rTR2Wef7bTts88+U05Ojv1dzqXnOfm4p57L3ffm559/rp07d3p9nVbm2it9RU15/QZv2uRpPASqAjHCN8pqkyve9AU87V8A3ggPD1daWpqmT5+uefPmqbCwUK+88oqkE699uvDCC5WZmak5c+ZozZo1ev/993XnnXdKOpERVhEVvddYvny5JPeLW9auXesQM0rP5cn19cknn+jHH390ytZr1aqV2rZt6/TY2FP54vr0ZjzC05hxcvmp+xIz4CnihG/iREWV1yZXGLeEv5QVHyoyLunJeOepKjq2tmvXLn366acaPny4y8flr127VqmpqWrXrp29zJvYFB4erkWLFik9PV2ffPKJtm/fbn8iSEhIiFq2bOm2Tb64Nn01ZnFymyo7jgL4E5PvqLA6deooKyvLqXznzp3lfrZDhw4KCwvTxo0bHcqPHz+u7777Tp06dXL5uWXLlik2Ntbl42OysrL0xRdfOL1HpFOnTsrLy9PWrVsdyr/++mv7dulEcE5KStKePXucjp2enq7IyEiX7145+TySnNqUnp6u3bt3u23Tyf744w/Vr1+/3P08bVPjxo1Vv359pzpJ0oYNGzyqE1BRxAjfKKtN7riLRxs3blRJSYl9e0hIiM444wyXMeLrr7/WaaedViVtArzVqVMn/fLLL06Pdzz1Oj1122+//eZ2kGjNmjVq166dUlNT7WUV/d5ctmyZbDabrrrqKs8a9P/r/O233zoNCH799deKjo4u8/Hc0ok+g6Ry+w3etMnTeAhUN8EYIyqivDa54k1fwNP+BVBRpU+nKh1AXb16tQoKCvTmm29q/Pjx6t+/v/r27etysY67AXZXKnrvvnz5crVo0ULnnnuu0zZXr7cqPZcn8Wnfvn2SXE8IFBYWlvuErcpen8YY7dixw+PxCE/aVNF7OqAsxImKx4mKKqtN7jBuiUA4NT6UZq2fOjbpybikNyo6trZixQoZY8q8Hzl1sU5FYlPDhg3Vo0cPtW7dWsXFxVq/fr26du1aZua7L65NT8csvGlTZcdRAH9i8h0V1qJFC3311VcOjzZ766239Ndff5X72YSEBPXt21cvvviijhw5Yi9funSpcnNzNXz4cKfPHDhwQB988IGGDBmi6Ohop+3vvfeeJOniiy92KL/88stVq1YtPf300/YyY4zmz5+vxo0b67zzzrOXX3nllfrrr7/0/vvv28syMzP1xhtvqE+fPi7fm1iqffv2Ov3007VgwQKHjvC8efNks9k0bNgwh7acau3atdq0aZPTO6MzMjK0bds2FRYWVqhNQ4cOdfp7+fDDD/XLL7+4/D0DvkKMqLzy2lR6/m3btikvL89e1qdPH9WtW1fz5s1z2HfevHmKjo52uNkfNmyYvvnmG4dO7vbt2/XRRx8RI1BtDBs2TMXFxVqwYIG9rKCgQIsXL1bXrl3tK6pPVpqh4W6ya+3atU4DX5L335ulK+u7d+/u9Ii68tq0b98+rVq1yl6WmZmpV155RQMHDrSvIj906JDTAFthYaFmzpyp8PBw9e7d26F827ZtTivBPW2TN/EQqE6CMUZURHltkqRt27Zp165dDmWe9gW86V8AZVm3bp3LDLK1a9dKktq0aSPp/7LPTt43OztbixcvdvpsTEyMy4W/rnhz715q8+bN2rp1a5kx49TXW0mex6fSweKXXnrJ4fPffvuttm/frs6dO5fZJm+uT1fjEfPmzdOBAwecxiN27dqlbdu2VahNFbmnA0oRJ3wfJyqivDZJjFvC/zyND/Hx8UpMTNQnn3zisN/J/y59pSJja8uXL1fTpk3VvXt3p2379u3Tt99+69S/rkhsOtns2bOVkZGhu+++u9w2eXptuupX7NmzR88995zOPPNMe2a7dCI+b9u2zeGVIN60ydNxFKBaMKhxbr31VuPur37dunVGknnllVccyv/8808jySxevNhe9s477xhJpnfv3mbevHnmnnvuMUlJSaZFixamV69e5dZj06ZNJiIiwnTu3NnMmzfPTJw40URGRpqLL77Y5f5PPvmkkWTeeecdl9vHjBljLrjgApfb7r33XiPJ3HjjjWbhwoVmwIABRpJZtmyZw3579+41ycnJJi4uzkyaNMnMmTPHtG7d2kRFRZnvvvuu3DatXr3a2Gw206dPH7NgwQJz++23m5CQEHPDDTc47NeyZUszfPhw88gjj5j58+ebG2+80YSFhZmUlBSzd+9eh32vueYaI8n8+eefFWrTrl27TL169UyLFi3ME088YaZPn27q1KljzjjjDJOfn19um1DzECOqLkZ8/PHHZtq0aWbatGmmQYMGJjU11f7zxx9/7HWbjDFm0qRJRpJZt26dQ/lTTz1lJJlhw4aZhQsXmjFjxhhJ5t///rfDfjk5OaZFixamQYMGZtasWeaxxx4zKSkpplGjRmb//v3ltglYvHixkWS++eYbl9vdxY2Tt53679eV4cOHm7CwMHPvvfeaZ555xpx33nkmLCzM5bVTVFRkGjZsaM4991yXx/rjjz+MJLN+/Xqnbd5+b65evdpIMvPnzy+3DafW8dxzzzWxsbFmypQp5qmnnjLt27c3cXFxZtu2bfb9Fi9ebFq0aGHuu+8+M3/+fDN9+nTToUMHI8lMnz7d4Zilsfiaa66pcJs8jYeAp4gRFYsRxhh7H2HkyJFGkrn22mvtZd62qZQkp36YN30BT/sXQFnat29vmjdvbu666y6zYMECM3fuXHPVVVeZ0NBQk5qaag4fPmyMMWbbtm0mPDzcnHHGGWbu3Llm5syZpkWLFqZjx45O98i33HKLsdlsZtq0aWbFihXmww8/LLMOnt67l7r77ruNJIfv6JP17NnTjB071uU2T+PTRRddZCSZIUOGmHnz5pl//etfpk6dOiYmJsbteU/m6fUZFRVlxo4dax599FHz1FNPmVGjRhmbzWY6depkjh496rBvr169XN4betomb+/pgFLEiaqJE2+++aa9LxEeHm46d+5s/3nLli1et8kYxi3hf57GB2OMuf/++40kc91115l58+aZUaNGmbPPPttIMpMmTbLvVzq2duDAAYdzld7LnPrv+1Tejq398MMPRpK5//77XR7vueeeM1FRUSYvL89pm6exaenSpWbw4MFmzpw5ZsGCBWbEiBFGkrn++uvLbEspT6/NsWPHmh49epjJkyebBQsWmAcffNDUq1fPhIeHO93Hlf4+Tx4/9qZNno6jANUBk+81kK8m1owx5tFHHzWNGzc2ERER5vzzzzcbN240vXr18mhizRhjPv30U3PeeeeZyMhIU79+fXPrrbeanJwcl/uee+65pkGDBqaoqMhpW0lJif3LzZXi4mIzffp006xZMxMeHm7at29vXnzxRZf7/v7772bIkCEmPj7eREVFmT59+pgNGzZ41B5jjHn99ddNp06dTEREhGnSpIl56KGHzPHjxx32mThxounUqZNJSEgwtWrVMk2bNjU333yz08S7Me47sd606ccffzQXX3yxiY6ONrVr1zZXX321y3MBxhAjqjJGlHbmXf05udPvSZtOPaariYkFCxaYNm3amPDwcNOiRQvz2GOPmZKSEqf9/vrrLzNs2DATHx9vYmNjzWWXXWZ+/fVXj9oE+Gti7dixY/ZFPBERESYtLc3twpTSxT9PPPGEy+1z5841CQkJprCw0OV2b743R44caWrVqmUOHjxYbhtOdejQIXPdddeZevXqmejo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nTs1cOBALV++XCeeeKIjdTrptNNO0/Tp09WvXz+3m3JYEyZMUHFxsWbOnOl43YWFhYqJiVFSUtKvuv7X/m/q9/uVl5enP/7xj9qxY0fAZwcz3wsLC5WSklKv9h9LPLf058CBA3rppZd00UUX1U28S1JCQoIk6dxzz62beJek1q1b67zzztP69ett64yLi1NcXHDQk60WzJWfn6+cnBznKrT4fquuqHb2HgBCoyy4yBftc/45AcBzHH1OFFoX79uzT+JRBES2POviwgOF2pezL7xtAWCUcLxzVJRU8F4DmKAyuMgf5Sc2ARyhhg0bqqampm5C+pE2j+jHhB9dbVP7svYav318SOqurq5WVVWVY3U5XafTampq6t226urqkO6K4PP55Pf7Q/LfMDExUZJ+dd1H8r9pTU2N9uzZw3eOQzw3+f6Pf/xDpaWlAVvOS1KLFi0k1Z7TfqiMjAx99tlnYWkfPMpqAwSfRRmAyGPRV/1RntsUBkCks9tMifEEEPns+imbpAEIN2ITgLmITQAh8WPCj/oq+Su3m/GrvPXWW1qwYIF27Nih+Ph4dezYUX/5y180btw4dezYUXfddVfdtePGjVN6err++Mc/SpIGDRqkQYMGaevWrVq3bp0aNWqkG2+8UcOGDav7ne7du+u+++7TunXrtGHDBjVr1kxjx45V//79g9ri9/t15ZVX6sorr9T1119fV/7999/ruuuu0wsvvBCQ5HqomTNnavv27ZoxY4YkadmyZZoxY4ZmzZqlc845R5I0ZMgQ3XDDDRo8eLC+/vpr/c///I++//57VVdXq2PHjvrDH/5Ql609aNAgSdI999wjScrKytKaNWskSe+8844WLFigrVu3Ki0tTZdddplGjhxZN8F+8O+9fv16ffLJJ7r++us1atQo27YXFRXpz3/+sz766COVlZUpIyNDN954Y10bdu/erVmzZunDDz9UdHS0TjvtNN11111q0aKF5s+fr5dffrnuvpI0d+5cZWVl6YorrtCUKVO0fPlyff/992rZsqXuvfdenXHGGXX3/vTTT/Xkk09q8+bNSklJ0cCBA3XrrbfW/V1Gjx4d8P+FQYMGaciQIfr555/11ltvqVGjRrrpppt05ZVXSpKuuOIKSdJ1110nSTr99NPrjuRGaHkuHLB06VIlJyfXdYSDunTpotjYWO3cuTPod3bt2qX0dLYHRz00sCirsSgDEHks+iovuADCzmosITGeAExg00/90YwnAIQZsQnAXBZ91RfN6hngWJGfn68//vGPGjRokFasWKG5c+fq/PPP15GcGr1kyRKdcMIJWrJkiW644QZNnz5dH330UcA1c+fOVb9+/bR06VJdfPHF+uMf/6itW7cG1RUVFaVBgwbpn//8Z0D5P//5T3Xr1u2wE+9S7STv559/rpqa2ofbZ599piZNmujTTz+VJO3Zs0c7duyom3guLS3VwIEDtXDhQi1atEitW7fWHXfcUXf++OLFiyVJEydO1CuvvFL382effaZJkybpmmuu0fPPP68HH3xQ//rXv7Ro0aKA9ixYsEB9+/bVc889FzR3eKi5c+dq69atmjVrllasWKH77rtPTZo0kVSbQT527FglJiZqwYIFWrhwoRISEjR27FhVVVXpuuuu04ABA9SzZ0+98soreuWVV9S1a9e6umfNmqXrrrtOS5YsUZcuXXTXXXepoKCg7r/JuHHjdPLJJ2vZsmW6//77tWbNGv3tb387bHuXLl2qk046SUuWLNHQoUP12GOPadu2bZKkZ555RpI0e/ZsvfLKK/rzn/982LrgHE9Nvufl5enNN9/UkCFD6rZfOKhRo0a69NJLtX79en333Xd15d9++63Wr1+vCy64INzNhZewuhwwF5PvACKB3aicgDkQ+ch8BxApiE0A5iLzHTim5efnq6amRueff75atGihDh066Kqrrgqa5zqcrl276sYbb1SbNm109dVXq1+/flq2bFnANQMGDNDgwYPVpk0b3XrrrTrppJP0/PPPW9Z32WWX6aefftLXX38tqXbi+bXXXvvFyWtJ6tatm0pLS/X999/L7/frs88+029+8xtt2LBBUm2Gd0ZGRt0kfvfu3XXppZeqbdu2ateunR588EFVVFTUXd+0aVNJtfN8aWlpdT8vWLBAN9xwgy677DK1bNlSZ511lkaPHq0XXnghoD0XXXSRBg0apJYtW6p58+aHbfvu3bvVqVMnnXzyyWrRooXOOuss9e7dW5L0+uuvy+fzafz48erQoYPatWunSZMmaffu3fr000+VmJiouLg4NWzYUGlpaUpLS1NsbGxd3cOGDVO/fv3Url073X///UpKSqrL4F+1apUyMzN17733qm3bturbt69GjRqlpUuXyuezH9Cdc845uuqqq9SqVSvdcMMNAYscDv53aty4sdLS0tS4ceNf/N8OzvDUtvPPP/+8qqurg7acP+jRRx/VW2+9pX79+mns2LGSpCeffFKpqal68MEHw9lUeA2rywFzWYxdWF0OIOzsMt95HAGRz27cb9evASBUiE0A5iIxADimnXDCCerevbuuvfZanX322TrrrLPUv39/paSk/Oo6unTpEvTz8uXLf/GaTZs2WdaXnp6uc889V2vWrNEpp5yidevWqaqqSgMGDPjFtjRq1EgnnHCCPv30U8XGxiomJkZDhgzR/PnzVVpaqg0bNqhbt2511+/du1dz5szRhg0btG/fPvl8PpWXl2v37t2Hvc/mzZv15ZdfBmS6+3w+VVRUqLy8XPHx8ZKkk0466RfbfFB2drbuu+8+fffddzr77LPVp08fnXrqqXX327Fjh/r06RPwO5WVldqxY8cv1v3f//1jYmJ08skn1+08sHXrVnXp0kVRUVF115x66qkqLS3Vnj17bBcNnHDCCXX/HhUVpWbNmmnfvn2/+u+L0PDU5PvSpUuVkZFh2/lPPvlkvfPOO7rvvvv0yCOPKDo6Wv369dPjjz+u4447LsythadYrS7nBRcwAy+4ACIBme+Auez6KZnvAMKN2ARgLmITQEi0L2vvdhN+VRsaNGig2bNn68svv9SHH36oFStWaM6cOVq0aJGio6ODtp+vrq4OVXMDXHHFFZo0aZLuvPNO/fOf/9SAAQPqJrR/yRlnnKENGzaoYcOGOv3009W4cWO1bdtWn3/+uTZs2BCQRPvQQw+psLBQd911l5o3b66GDRvqpptuUlVV1WHvUVZWplGjRun8888P+qxhw4Z1/56QkPAr/8bSueeeq3/+8596//339dFHH+l3v/udhg4dqnHjxqmsrEwnnniiHn744aDfO5hlHm4NGgSvvjyS4woQGp6afP/ggw9+8ZrTTz9db7zxRhhag2OK1epyMtUAM7C1G4BIQOY7YC6bfsqZ7wDCjtgEYC525QNCYvz28W434VeLiorSqaeeqlNPPVW33HKLBg0apLVr16pJkybau3dv3XU1NTXasmWLsrKyAn5/48aNQT+3bds2oOyrr77SwIEDA67p2LGjbZvOPfdcJSQkaPXq1frggw80f/78X/33Of3007VmzRo1aNBAPXv2lFQ7If/666/rp59+qjvvXZK+/PJL3XfffTr33HMl1W79fvAs9INiYmKCtl/v1KmTtm/f/otn0B+ppk2b6rLLLtNll12mF154QU8++aTGjRunTp066Y033lDTpk2VnJxs+buxsbF1Z90fauPGjTr99NMl1S6g+PbbbzVs2DBJUrt27fTvf/9bfr+/Lvv9iy++UFJSkjIyMo7q73Fwy/vDbVuP0GAtPuAEVpcD5mJ1OYBIQOY7YC4y3wFECmITgLmITQDHtI0bN2rRokX65ptvtHv3br399tvav3+/2rZtq+7du+u9997Te++9p23btmnatGkqLi4OquOLL77Q3//+d23fvl0rVqzQW2+9pWuuuSbgmrfeektr1qzR9u3bNW/ePH399dd1k79WGjRooMsuu0yzZ89W69at1bVr11/9dzp47vt7771XN9F+xhln6NVXX1VaWpratGlTd22rVq30v//7v9q6das2btyoiRMnKi4uLqC+Fi1a6OOPP1Z+fr6KiookSbfccotefvllLViwQFu2bNHWrVv1+uuva86cOb+6nYeaO3eu3nnnHf3888/asmWL3n333bpFDJdccomaNGmiu+++W5999pl27typTz/9VE888YRyc3Pr2vnDDz9o27ZtKigoCNilYOXKlXr77be1bds2/fnPf1ZxcbEGDRokSRo6dKhyc3P1+OOPa9u2bXrnnXc0f/58DR8+XNHRR/dy2bRpU8XFxemDDz7Q3r17deDAgaP+74Ij46nMd8A1rC4HzMXqcgCRgMx3wFx2/ZQz3wGEG7EJwFzsygcc05KSkrRhwwY999xzKikpUfPmzTVu3Dide+65qq6u1qZNm/TQQw+pQYMGuvbaa3XmmWcG1fGb3/xG3377rRYsWKCkpCSNGzeuLuP8oFGjRun111/XY489prS0ND3yyCNq3/7w2+IPGjRIixYt0uWXX35Ef6eUlBQdf/zx2rdvX93kdbdu3eTz+eqyvw+aMGGCpkyZouuvv16ZmZm67bbbNGvWrIBr7rjjDs2cOVP/+Mc/lJGRoTVr1qhnz56aMWOGFi5cqMWLFysmJkZt27bVFVdccURt/W+xsbGaPXu2du3apfj4eJ122mmaMmWKJCk+Pl7z5s3T008/rXvvvVelpaVKT09X9+7dlZSUJEkaPHiwPv30U91www0qLS3V3Llz63Yp+P3vf6/Fixdr06ZNatmypf7yl7+oSZMmkqSMjAzNnDlTTz75pIYPH66UlBQNGjRIN91001H/XWJiYnT33Xdr4cKFmjdvnk477TTNmzfvqOvDr8fkO+AEVpcD5mJ1OYBIQOY7YC4y3wFECmITgLmITQDHtHbt2umpp56y/CwmJkb333+/7r///rqy2NhYpaenKy8vr64sKSlJU6dOPex90tPT9fTTT1t+1qJFC33yySdB5Xl5eYqJidGll176a/4qAZYtWxbwc+PGjfXxxx8HXdepUyf9/e9/Dyjr379/wM+9e/dW7969g363Z8+eQYsM/pvV3+lwbr75Zt188822n6elpemhhx6y/bxp06ZB/4137dolSWrbtq2eeeYZ298944wztHjxYtvPD504X7NmTdA1h/43Hzx4sAYPHmxbJ0KDyXfACawuB8zF6nIAkYDMd8BcnPkOIFIQmwDMxa58ACJMZWWl9u/fr/nz56t///5q1qyZ200CjMHkO+AEqxdcVpcDZmB1OYBIYDf5zngCiHx2/ZRt5wGEG7EJwFzEJgBEmNdee02PPPKIOnbsqMmTJwd89sorr9hm2Tdv3lwrVqwIRxOPytSpU/XKK69YfnbJJZfogQceCHOL4EVMvgNOsNrajcWpgBlYXQ4gEthtT83jCIh8dv2UbecBhFOUTTljCcAMNrvyRdl2bgD4P1bbjx/qSLdfv/zyy23Pee/du7c6d+5s+VlMTGRPO44ePVrXXXed5WcHz213mt2W/vCuyO4FgClYXQ6Yi9XlACIBme+Auch8BxAJ7Bb8MJYAzGATm2DyHUAkSkpKCtlEdailpqYqNTXV7WbA4zyxFv/GG29UVFSU7Z+dO3eqtLRUs2fP1oUXXqisrCw1atRI3bp105w5c1RTw5sI6onMd8BcnPkOIBKQ+Q6Yy66fEisHEE52C34YSwBmYFc+wBE+n09+P3E94Ej5/X76joM8kfk+evRoDRgwIKDM7/drzJgxatu2rY477jht3LhRt99+u/r3768//OEPSklJ0WuvvabbbrtNH374oRYvXuxS6+EJZL4D5rLoq7zgAgg7Mt8Bc9n0U38DAhcAwoixBGA2duUDHJGTk6P8/Hw1atRI8fHxbjcnZPx+v6qrq5kshSNqampUWFiovLw8t5viGZ6YfO/Zs6d69uwZUPbee++ptLRUv/nNbyRJzZs311dffaVTTjml7prRo0frpptu0qJFizRhwgR16NAhrO2Gh5D5DpiLF1wAkYCtYgFzceY7gEjALjqA2diVD3BEdXW17rrrLt16660688wzFRMTo6go721J1aBBA5WVlenAgQPs7Ix68fv9Kiws1JQpU1RWVuZ2czzDE5PvVpYtW6aoqCgNHz5ckpSWlqa0tLSg64YMGaJFixbp22+/ZfIdR4/Md8BcVsGoKMkvXnIBhBFbxQLm4sx3AJGAzHfAbOzKBzgmLy9PDz/8sBo3bqyUlBRPTr5nZGRo2LBhWrFihfbs2eN2c2Awv9+vvLw8Jt4d5snJ96qqKq1YsULnnHOO2rZte9hrd+/eLUmWE/MHVVRUqKKiou7noqIiSVJmZqaio0lnMMnB/50P97/30dgdsztooi6hYYKaZDVx9D4AnFeUUKQSlQSVp2WkKYrDWgFYCMV4orhxsQ7oQFB5ZnqmouMYbwKRrCatRnsUHPBKapSkpKwkF1oEINKFYizha+xTrnKDypMTk9Uoq5Fj9wEQGvti96lCFQFl/ii/4zFM4FhTVVXldhNCory8XCUlJSovL1dlZaXbzYHhmjRpoiZNmlh+5vP5lJsbPMbE4Xly8v21117T3r1767act1NZWamZM2eqXbt26t69u+11U6dO1eTJk4PKR44c6elzQ7wsOzvb0fqmJUxTucoDyjqe0FFDRg9x9D4AnPd6l9e1XuuDygdnD1aMz5NfkwAc4uR44u0eb+sdvRNUPvKGkYqvZLwJRLLCRoWaoRlB5V1O66JzRp/jQosAmMLJsURJQoke1+NB5T3O7KHeo3s7dh8AobG8zXJ9p+8CyvxRfsdjmAC8hWcEQq28vFzTpk1zuxnGifL7/Z7bV3f48OFatWqVcnJy1KxZM9vrRo0apQULFujll1/WpZdeanudVeZ7q1atyHw3UFpamrKzs7V69Wrl5+c7Vu/u73bLn3JI5vtzCWpyVxPH7gEgNIoeKFLJ7cGZ76eceYr27drnQosARLpQjCeK7ynWgTstMt+Pz1R0GeNNIJLVZNRoz+fBme/NpzdX1BPsogMgWCjGEjXNarTnq+BnUaNHGyn56WRH7gEgdPbP26/yywMTe1IKU9SmVxtHY5gAvCFU8xzAoQ5mvhcWFiolJcXt5hjDcyl9Bw4c0EsvvaSLLrrosBPvjz/+uBYsWKCHH374sBPvkhQXF6e4uLigcrZaMFd+fr5ycnKcq9AiJl52oExlOZyTAUS8Iuvi/P35ys3hOQ/AnqPjCZshQ+6uXB2yuQ6ASGNznnJJeYmKc4rD2xYARnF0LGGTWlNcUMyzCDBBaXCRL9rnfAwTgKfwjAAik+fSaP7xj3+otLT0sFvOP/PMM7rvvvs0ZswYjR8/Poytg2dZ9SSbIByACGPXVz33DQkgotk9cxhPAJHPrp+S9A4gnBhLAGaz6Kv+KM9tWAsAwDHBc1MLS5cuVXJysgYNGmT5+UsvvaRbbrlFV155pWbPnh3m1sGzGliU+cLeCgBHw66vWvVrAAgVu2cO4wkg8tn0U38DAuYAwoixBGA2i77K5DsAAGby1OR7Xl6e3nzzTQ0ZMkSJiYlBn69bt07XXHONevfuraVLl3JeO5xj9ZLL6nLADGS+A4gEdgFzxhNA5LPrpyzkAxBOZL4DZiPzHQAAz/DUme/PP/+8qqurLbec3759uwYNGqSoqCgNHTpUK1euDPi8a9eu6tq1a7iaCq+xeslldTlgBrtstWhecgGEEQt+AHPZjfvp1wDCicx3wGwWfdUXTQcGAMBEnpp8X7p0qTIyMjRgwICgz7Zu3arCwkJJ0u9+97ugzydNmsTkO44eZ74D5iLzHUAksAqYV4e9FQCOhs1YgoV8AMKKzHfAbGS+AwDgGZ6afP/ggw9sP+vbt6/8fgYsCAG7F1wWpwJm4Mx3AJGAXXQAc5H5DiASkPkOmI0z3wEA8AzCAUB9cUYrYDbOaQUQCayeOYwlADMwlgAQCYhNAGaz6KtsOw8AgJmYfAfqi8x3wGx2W8WywhxAOHGEDWAuMt8BRAJiE4DZyHwHAMAzCAcA9cXqcsBsbDsPIBJYPXMIlgNmYPIdQCQgNgGYjTPfAQDwDMIBQH2xuhwwm10wim9IAOFE5jtgNqtstWgC5gDCiNgEYDbGEgAAeAZTC0B9sbocMBuZ7wAiAZnvgNmsxv6MJQCEE7EJwGwciQcAgGcw+Q7Ul10v4gUXMAMvuAAiAZnvgNms+mtU2FsB4FhGbAIwG7vyAQDgGXx9A/Vlt7qcbDXADGS+A4gEZL4DZrPqr4wlAIQTsQnAbMQmAADwDE9Nvm/YsEGDBg1SamqqEhMT1blzZz355JN1n/t8Ps2dO1ennXaakpOTlZmZqUsuuUTr1693sdUwHqvLAbOxuhxAJCDzHTCbRX/lnFYAYUVsAjAbsQkAADwjxu0GOOX111/X5Zdfrm7dumnChAlKTk7Wli1btGPHjrpr7rnnHk2fPl3XXXedbrvtNhUUFGjevHnq06eP3n//ffXo0cPFvwGMxepywGysLgcQCch8B8xG5jsAtxGbAMxm01dZzAcAgHk8MfleVFSkESNGaODAgVq1apWio4OXBFZXV2vOnDkaOnSonn322bryq666Su3bt9fSpUuZfMfRsXvBZXU5YAa7vso5rQDCyWo8wVgCMIdVfyVTDUA4kfkOmI3MdwAAPMMTX9/Lli1Tbm6upkyZoujoaJWUlMjnC1wuWFVVpbKyMmVmZgaUZ2RkKDo6WgkJCeFsMrzErhexuhwwg93q8gasLgcQRlbjCcYSgDms+qsn3rYBGIPMd8Bs7MoHAIBneCIc8OabbyolJUU7d+5Up06dlJycrJSUFN16660qLy+XJCUkJOiss87SM888o6VLl+qnn37Sl19+qRtvvFFNmzbVqFGjXP5bwFhkvgNmY3U5gEhA5jtgNqsz31nIByCcyHwHzEZsAgAAz/DEtvObN29WdXW1rrjiCt18882aOnWq1q5dq6eeekoFBQV67rnnJElLlizR1Vdfreuuu67ud9u3b6/3339f7du3t62/oqJCFRUVdT8XFRVJkjIzMy23uEfkSktLC/inE6qbVytPeUHlKY1SlJSV5Nh9AIRGWUqZClQQVN44tbEaZjUMf4MARLxQjCf2JexThSoCyhpENVBGVoZj9wAQOrnKle+QlLW4+Dg1zWrqUosARLJQjCXK08u1X/uDylObpiouK86x+wAIjQNJB1Ss4qDy1PRURWcRfwYQKBRjCcCKz+dTbm6u280wTpTf7zd+Of7xxx+vH3/8UWPGjNGcOXPqyseMGaN58+Zp06ZNOuGEE5Sbm6t77rlHKSkp6t+/v3bv3q1p06YpMTFR7777ru2D6qGHHtLkyZODyu+//37Fx8eH7O8FM+Q3y9fTv386qHzgvwaq+6fdXWgRgCPxzYnfaMXVK4LKRy4aqTY/tXGhRQCORc/+5llt6bAloCwtL02//5/fu9QiAEfiL3f+RcUpgQHzk78+WcNWDXOpRQCONZtO2KRlw5cFlY/4+wi132qfcAIgMrx3znt684I3g8rveuIuNSpp5EKLAACQysvLNW3aNBUWFiolJcXt5hjDE5PvnTt31tdff6133nlHvXv3ritft26d+vTpo8WLF2v48OHq1q2b+vbtq6eeeqrums2bN+uUU07RnXfeqccee8yyfqvM91atWpH5bqC0tDRlZ2dr9erVys/Pd6TOqg5Vyl8XXFfjexorcWmiI/cAEDrlF5Vr/6LgDJF2N7VT+avlLrQIQKQLxXhi7/K9quxdGVAW822M0vunO1I/gNDK/SRXvuMCM99T3kxR0gh2wgIQLBRjifILy7X/GYvM96GpiltP5jsQ6Q6MOaDiicGZ7ycOOFGF3xS60CIAkSwUYwnAysHMdybfj4wntp1v0aKFvv76a2VmZgaUZ2TUbtO5f/9+rVu3Ths3btT06dMDrjnhhBN00kkn6f3337etPy4uTnFxwS8qbLVgrvz8fOXk5DhTWap1ceG+QhXmMDgGIp7N+LTwQKH25ewLb1sAGMXR8US1RVFltXP1AwityuCiiuoKFeUUhb8tAIzh6FjCJvywb88+ieEEEPmC185IkvYV7tOenD3hbQsAYzg6lgDgGE+kbZ9xxhmSpJ07dwaU79q1S5KUnp5eN1FeU1MT9PtVVVWqrraIeAK/hl0v8tmUA4gswV8LtTzxDQnAGFbPHLvnE4DIYzX2ZywBIJyITQBms+mr/ijjN60FAOCY44lwwLBhtefo/fWvfw0oX7hwoWJiYtS3b1917NhRkrR8+fKAazZs2KDvv/9e3bp1C09j4T0NbMoJmANmsHvBjeYFF0AYWY0nCJYD5rAa+3vibRuAMYhNAGaz66t2fRsAAEQsT2w7361bN910003629/+purqavXp00dr167VypUr9cADD6hFixZq0aKFLrjgAi1evFhFRUW68MILlZOTo6eeekoJCQkaN26c238NmIrV5YDZyHwHEAnIfAfMRuY7ALcRmwDMZtdXGU8AAGAcT0y+S9LcuXPVunVrLVq0SC+++KLatGmjGTNmBEyqv/TSS3riiSe0fPlyvfrqq2rYsKF69eqlhx9+WJ06dXKv8TAbq8sBs9m94LK6HEA4kfkOmM1i7O9vwC46AMKI2ARgNjLfAQDwDM9MvsfGxmrSpEmaNGmS7TUJCQmaMGGCJkyYEMaWwfN4wQXMRuY7gEhgNZ5gLAGYg23nAbjN7pnDeAIwg01f5cx3AADMQzgAqC+2dgPMxpnvACKB1XiCsQRgDradB+A2u8QAxhOAGdiVDwAAzyAcANQXme+A2ch8BxAJyHwHzGbVXwmWAwgnMt8BsxGbAADAM/j6BuqLzHfAbKwuBxAJyHwHzGbRX9lFB0BYkfkOmI3YBAAAnsHkO1BfZL4DZmN1OYBIQOY7YDbOfAfgNjLfAbNx5jsAAJ5BOACoLzLfAbPZveCSrQYgnKzGEwTLAXNw5jsAt5H5DpiNzHcAADyDcABQX2S+A2aze8HlGxJAOFmNJwiWA+bgzHcAbiPzHTAbu/IBAOAZfH0D9UXmO2A2uxdcAuYAwonMd8BsnPkOwG1kvgNmI/MdAADPYPIdqC8y3wGz8YILIBKQ+Q6YjTPfAbiN2ARgNo7EAwDAMzwVDtiwYYMGDRqk1NRUJSYmqnPnznryySctry0oKFBGRoaioqK0atWqMLcUnkLmO2A2u2BUVFhbAeBYR+Y7YDbOfAfgNmITgNk4Eg8AAM+IcbsBTnn99dd1+eWXq1u3bpowYYKSk5O1ZcsW7dixw/L6iRMnqrS0NMythCexuhwwm80Lrr8Bq8sBhBGZ74DZOPMdgNuITQBm40g8AAA8wxOT70VFRRoxYoQGDhyoVatWKTr68EsCN27cqDlz5mjixImaOHFimFoJz2J1OWA2uxdcVpcDCCcy3wGzceY7ALcRmwDMRuY7AACe4Ymv72XLlik3N1dTpkxRdHS0SkpK5PPZv13ccccdGjJkiHr16hXGVsKzWF0OmI0z3wFEAjLfAbNx5jsAtxGbAMzGme8AAHiGJzLf33zzTaWkpGjnzp0aPHiwNm3apKSkJF1//fWaMWOG4uPj665duXKl1q9fr2+//Vbbtm37VfVXVFSooqKi7ueioiJJUmZm5i9m2SOypKWlBfzTCWVpZSpQQVB5s6bN1DCroWP3ARAa1c2qlae8oPKkRklKykpyoUUAIl0oxhO7Y3fLr8DAWkLDBDXJauLYPQCEzr7YfapQRUBZdMNoZWRluNQiAJEsFGOJ4sbFOqADQeWZ6ZmKjiN2BUS6iiYV2qd9QeUpTVIUnxVv8RsAjmWhGEsAVnw+n3Jzc91uhnE8Mfm+efNmVVdX64orrtDNN9+sqVOnau3atXrqqadUUFCg5557TpJUVlamu+++W3feeafatm37qyffp06dqsmTJweVjxw5MmBiH+bIzs52rK4vunyhF/Vi8D2GZKvF2S0cuw+A0ChMKdQMzQgq73JaF50z+hwXWgTAFE6OJ6YlTFO5ygPKOnboqCGjhzh2DwChs7z1cn2n7wLKEpMTNXr0aJdaBMAETo4l3u7xtt7RO0HlI28YqfhKYldApNvadqsWa3FQec/zeurEjBNdaBEAEzg5lgCslJeXa9q0aW43wzhRfr/f+L1rjj/+eP34448aM2aM5syZU1c+ZswYzZs3T5s2bdIJJ5ygSZMmacGCBdq0aZOSk5O1du1anX/++Vq5cqWGDh1qW79V5nurVq3IfDdQWlqasrOztXr1auXn5ztSZ+lVpSqcVRh8rwvSFPt1rCP3ABA6NZk12vPZnqDy5tObK+qJKBdaBCDShWI8sfu73fKnHJL5vjxBTf7QxJH6AYTW/vn7VX5Z4AKa2N2xSjudTBQAwUIxlii+p1gH7rTIfD8+U9FlxK6ASFdxVoX2vRic+d76jtaqWlnlQosARLJQjCUAKwcz3wsLC5WSkuJ2c4wR9sz3/ful556Tfvyx9t8PnfqPipL++tcjqzMhIUGSdO211waUDx8+XPPmzdMHH3yg2NhYPf7445o9e7aSk5OPqP64uDjFxcUFlbPVgrny8/OVk5PjTGVFNvfIzZccugWAELI5U7mkvETFOcXhbQsAozg6nrBY61N2oExlOWXO1A8gtEqDi2r8Nc49IwB4kqNjCZshQ+6uXB2yuQ6ASBR8Gp4kqaikSAU5BWFtCgBzODqWAOCYsE6+v/aaNHSoVFIipaRITZsGXxN1FEmGLVq00Ndff63MzMyA8oyM2vP19u/fr4kTJ+q4445T375967ab3717tyQpLy9P27ZtU+vWrclkx5FrYFNeE9ZWADhadn2VpHcA4WQ1nmAsAZjDqr/avScAQCjYhbMYTwBmsOurhKoBADBOWCff77pLat5ceuEFqUsX5+o944wz9MYbb2jnzp3q1KlTXfmuXbskSenp6frpp5/0ww8/qH379kG/f9ttt0mqnaRv0qSJcw3DscFuEGyTTQsgwti84PobGH8qCwCTWI0nCJYD5rAa+xMsBxBOdgt+iE0AZrDrqyzmAwDAOGGdfP/hB+nxx52deJekYcOGadq0afrrX/+qfv361ZUvXLhQMTEx6tu3r1q3bh109sXGjRs1YcIE3XvvverZs6eSkpKcbRiODWS+A2aze8ElYA4gnKzGEwTLAXNYjP390SzkAxBGZL4DZiPzHQAAzwjr5PsJJ0jFITg+t1u3brrpppv0t7/9TdXV1erTp4/Wrl2rlStX6oEHHlCLFi3UokWLoN87mOXevXt3DR482PmG4dhA5jtgNrsXXFaXAwgnMt8Bs5H5DsBtvL8AZrOJI7KYDwAA84R18v2RR6Tf/U4aPlxq29bZuufOnavWrVtr0aJFevHFF9WmTRvNmDFD48aNc/ZGwKHIfAfMZrdQhjPfAYQTme+A2TjzHYDbrBb8VIe9FQCOFpnvAAB4Rlgn3996S0pPl046SbrgAqlVK6nBIQGJqChp1qwjrzs2NlaTJk3SpEmTfvXv9O3bV34/qwdRT2S+A2bjzHcAbrNb7MNCPsAcZL4DcBsL+QCzceY7AACeEdbJ96ef/r9//9e/rK852sl3wDVkvgNm4wUXgNvsnjcEzAFzcOY7ALdZjSeISwDmIPMdAADPCOvku48AIryIzHfAbLzgAnCb3fOGgDlgDjLfAbjN6plDXAIwB2e+AwDgGYQDgPoi8x0wm11Aim9IAOFC5jtgPs58B+A2Mt8Bs9n1V8YTAAAYJ6yZ7wdt3Sq98oq0fXvtz23aSJdcIrVr50ZrgHoiYA6Yz6egyXZWlwMIGxbyAeazGvu78rYN4JhF5jtgNhIDAADwjLCHA+66q/ZM90O3oI+OlsaNk554ItwtAuqJrWIB81lMvrO6HEDYcIQNYD7G/gDcRuY7YDaOxAMAwDPC+vX9l79IM2ZIV14pffCBVFBQ++eDD6ShQ2s/mzEjnC0CHEC2GmA+q/4aFfZWADhWMZYAzMdWsQDcZhXhYywBmMOmv7IrHwAA5glr5vuCBdKgQdKKFYHlZ50lLV8ulZdL8+ZJd94ZzlYB9US2GmA+zmkF4CZ20QHMd7itYunLAMLB6v2FuARgDrv+SmwCAADjhDXzfds26aKL7D+/6KLaa47Whg0bNGjQIKWmpioxMVGdO3fWk08+GXDN+vXrdd555ykxMVHNmzfX2LFjdeDAgaO/KUC2GmA+i5dcVpcDCBu7sQQBc8AcZL4DcBuZ74DZ2HYeAADPCGvme0aG9MUX9p9/8YWUnn50db/++uu6/PLL1a1bN02YMEHJycnasmWLduzYUXfN559/rv79++ukk07S9OnTtWPHDj3xxBPavHmzXnnllaO7MUDmO2A+Mt8BuInMd8B8h8t8B4BwIPMdMBtjCQAAPCOsk+9XXSXNmiW1bSvdfruUlFRbXlIiPf20tHChNG7ckddbVFSkESNGaODAgVq1apWio61HJQ8++KCaNm2qtWvXKiUlRZLUtm1b/fa3v9Xrr7+uCy+88Oj+Yji2kfkOmM/qJZcz3wGEC5nvgPnIfAfgNjLfAbNx5jsAAJ4R1rVzDz8s9ekjPfig1LRp7SR827a1//7AA7Wf/elPR17vsmXLlJubqylTpig6OlolJSXy+QKjlUVFRXrjjTd03XXX1U28S9KIESOUnJysFYceRA/8WmS+A+Yj8x2Am8h8B8xHthoAt5H5DpiNM98BAPCMsGa+JyZKb70lvfSS9Mor0vbtteUXXyxdeql0+eVS1FFkGr755ptKSUnRzp07NXjwYG3atElJSUm6/vrrNWPGDMXHx+urr75SdXW1zjzzzIDfbdiwoU477TR99tlntvVXVFSooqKi7ueioiJJUmZmpm2WPSJTWlpawD+dUJRSpBKVBJU3z2yuKFJnASPkKle+Q950GyY0VJOsJu40CEBEc3o8UZ1VrTzlBZWnNEpRUlaSI/cAEFrFicU6oANB5ZnHZSo6kXdGAIFCEZvYl7hPFaoIKGugBsrIynDsHgBCx5fsU65yg8oTkxPVKKuRCy0CEMlCMZYArPh8PuXmBn8/4fDCOvl+0BVX1P5xyubNm1VdXa0rrrhCN998s6ZOnaq1a9fqqaeeUkFBgZ577jnl5ORIkrKysoJ+PysrS++++65t/VOnTtXkyZODykeOHKn4+Hjn/iIIm+zsbMfqeuXUV/SRPgos9EtjRo9x7B4AQuuJuCeCAuYt27TUVaOvcqlFAEzg1HhiX9N9elJPBpWf1/M89Yjp4cg9AITWujPX6d/6d1D5iBtHKKmURTQArDkZm1jSdol+0A8BZU1Smmj06NGO3QNA6FTEVmiqpgaVn3jKieo3up8LLQJgAifHEoCV8vJyTZs2ze1mGCfK7/cbf3DM8ccfrx9//FFjxozRnDlz6srHjBmjefPmadOmTfrwww81YsQIffTRR+rRIzCIOWLECK1Zs0YFBQWW9Vtlvrdq1YrMdwOlpaUpOztbq1evVn5+viN1Fk4pVOnI0sDCKimrTfBCDwCRKffTXPmyAjPfG7/WWIkjE11qEYBI5vR4orp9tfLes8h8vz9FSX9n0g4wwYHfHVDxH4uDyjNOzVCDPPaLBRAoFLGJfUv3qeL8wMz3mE0xSu+b7kj9AELLH+/X7h93B5WnL0hXzCRX8ucARLBQjCUAKwcz3wsLCwOO9MbhhfSbu107KTpa+u47KTa29udf2lY+KkrasuXI7pOQkCBJuvbaawPKhw8frnnz5umDDz5QYmLtBMp/T6IfVF5eXleHlbi4OMXFxQWVs9WCufLz8+t2Q6i3cosyn5yrH0DoVQUXVVRXqDCnMPxtAWAMx8YTja2Li/YVqSinqP71Awi9AuviPfl7JF4LANhwNDZRbVFUWU1sAjBFQ+vi0opSleQEH3cJAJLDYwkAjgnp5HufPrWT6QeTww/+7LQWLVro66+/VmZmZkB5RkbtuVb79+/X8ccfL8l6QjQnJ0ctWrRwvmE4NlhtflAT9lYAqA9fcJG/gfEbwwAwhd1GShbPJgARym78z0ZpAMLFapMNYhOAOez6KxvoAABgnJBOvj/zzOF/dsoZZ5yhN954Qzt37lSnTp3qynft2iVJSk9PV+fOnRUTE6P//Oc/GjZsWN01lZWV+vzzzwPKgCNiNQgmWA6Yxeoll2A5gHCxC6gRMAfMYTf+J2AOIFys3l+ITQDmsOuvIUhkAwAAoRXWqYW//13ats3+8+3ba685Ugcnzv/6178GlC9cuFAxMTHq27evGjdurAEDBmjJkiUqLv6/s/ieffZZHThwQFddddWR3xiQyHwHvMDqJZfJdwDhQuY7YD4y3wG4jcx3wGw2m++xKx8AAOYJaeb7oUaOlJ59Vmrb1vrzDz+svWbEiCOrt1u3brrpppv0t7/9TdXV1erTp4/Wrl2rlStX6oEHHqjbUn7KlCk655xz1KdPH40aNUo7duzQX/7yF1144YW6+OKL6/eXw7GLF1zAfGS+A3ATme+A+dgqFoDbSAwAzFet4Gg9sQkAAIwT1sl3/y8s1CspkWKOskVz585V69attWjRIr344otq06aNZsyYoXHjxtVdc/rpp+vNN9/UfffdpzvvvFONGjXSzTffrKlTpx7dTQGJrd0AL7AISrG6HEDY2AXUCJgD5rAb/xMwBxAuHIkHmM+qz7KQDwAA44R88v3LL6XPP/+/n999V6quDr6uoECaO1fq2PHo7hMbG6tJkyZp0qRJh73uvPPO0/vvv390NwGskPkOmI9t5wG4yS6gRsAcMAeZ7wDcRuY7YD6rPsuZ7wAAGCfkk+8vvihNnlz771FR0rx5tX+sNGlydGe+A64i8x0wH9vOA3ATme+A+ch8B+A2Mt8B81n0WXblAwDAPCGffB81Srrsstot53v0kP70J+mSSwKviYqSkpKk448/+m3nAdeQ+Q6Yj8x3AG4i8x0wH5nvANxG5jtgPhIDAADwhJBPdWdl1f6RpLfflk4+WUpPD/VdgTAi8x0wH2e+A3ATme+A+ch8B+A2Mt8B83HmOwAAnhDWUECXLlJOjv3nX30l7d8fvvYAjiDzHTAfme8A3ETmO2A+Mt8BuI3Md8B8nPkOAIAnhHVq4c47a7ehtzN6tHT33eFrD+AIMt8B87G1GwA3kfkOmI/MdwBuI/MdMB9nvgMA4AlhDQX8+9/SoEH2n19+ufTmm+FrD+AIMt8B85H5DsBNZL4D5iPzHYDbyHwHzEdiAAAAnhDWr++8PCktzf7zZs2kPXvC1x7AEawuB8zHme8A3GQ3OUfAHDCH3fifyXcA4UJsAjAfZ74DAOAJYZ18z8qSPvvM/vNPP5XS04+83rVr1yoqKsryz4cffhhwbWVlpR599FGdeOKJio+PV2ZmpgYOHKgdO3Yc+Y0BidXlgBeQ+Q7ATXbPGwLmgDnsxv+MJwCEC7vyAeYj8x0AAE+ICefNBg+WZs+WLrkkePv5l16SFi2Sbr316OsfO3asunfvHlDWoUOHun+vqqrSwIEDtX79ev32t79V165dtX//fn300UcqLCxUy5Ytj/7mOHaxuhwwHy+4ANxE5jtgPjLfAbjN6v2F2ARgFqsz36PZlQ8AANOEdfL9oYdqz3QfMkQ69VSpc+fa8o0bpc8/l04+WZo8+ejr79Wrl4YOHWr7+YwZM/TOO+/ovffeU48ePY7+RsB/I/MdMJ9VnyVYDiBc7Bb7MJ4AzEHmOwC3kfkOmI/YBAAAnhDWUEDjxtKHH0rjx0tVVdKqVbV/qqqkiROljz+W/PVczFdcXKzq6uqgcp/Pp1mzZmnIkCHq0aOHqqurVVpaWr+bARKZ74AXsLocgJvsAmqMJwBzkPkOwG1kvgPm40g8AAA8IayZ75KUlFSb3f7fGe7l5dI//ykNHy69+mrtz0dj5MiROnDggBo0aKBevXrp8ccf15lnnilJ+uabb7Rr1y517dpVo0aN0uLFi1VZWakuXbpo1qxZOv/8823rraioUEVFRd3PRUVFkqTMzExFRzMCMklaWlrAP52QH5+vKlUFlMVGxyoty7l7AAitfTH7VKGKgLIGsQ2UkZXhUosARDKnxxNlzcpUoIKg8mZNm6lhVkNH7gEgtCoaV2if9gWVN01rqviseBdaBCCShSI2kRubK98hM3fxDePVNKupY/cAEFp7ovao5pD099j4WKVmpbrUIgCRKhRjCcCKz+dTbm6u280wTtgn3w/y+6W33pKWLpVefFEqLpbS0mon4I9Uw4YNlZ2drUsvvVRpaWn65ptv9MQTT6hXr15av369unXrps2bN0uq3Xo+NTVV8+bNkyQ9+uijuvjii/XJJ5+oa9eulvVPnTpVky32wx85cqTi4wmkmCg7O9uxuhZmLdQO7Qgoy0jL0G9H/9axewAIrWWtl2mTNgWUJTVK0ujRo11qEQATODWe+KrzV1qt1UHlQ64YopbdWzpyDwChtaXdFj2rZ4PKL7nsEnXs1NGFFgEwgZOxiT8n/lmlCtzhsWP7jrpy9JWO3QNAaD2d8rTylR9QlpmVqetHX+9SiwBEOifHEoCV8vJyTZs2ze1mGCfK76/vRu9H5tNPayfcly+Xdu+WoqKka66Rfv976eyza392wg8//KCuXbuqd+/eevXVV/Xss89qxIgRatiwoX744Qe1atVKkvTTTz+pQ4cOGjZsmJYsWWJZl1Xme6tWrch8N1BaWpqys7O1evVq5efn//Iv/Ar5/8pX1emHZL7/J1Zpg1h1Bphi31/3qeKSwMz32J2xSutOPwYQzOnxRNmQMhXMLgi+z0Vpiv0qtt71Awi9inMrtG+lReb7DU0V/wYLtgEECkVsYvfXu+VvGhjiS1iRoCbjmjhSP4DQy/t3nqpPDDxONfmDZDXKbuRSiwBEqlCMJQArBzPfCwsLlZKS4nZzjBGWzPcff6ydcF+6VNq8WTruOOk3v5F69JCuvlrKzpZ69nT2nh06dNAVV1yhF154QTU1NUpISJAknXvuuXUT75LUunVrnXfeeVq/fr1tXXFxcYqLiwsqZ6sFc+Xn5ysnJ8eZyizOY6oqq3KufgChVxpcVKMa+jGAw3JsPFFsU/+efInHEGCGPdbF+wv3048B2HI0NmGRzFJ2oExlOWXO1A8g9CqCiyqrK4lNALDl6FgCgGNCPvnes6f08ce1W8oPHSotXCidd17tZ1u2hPberVq1UmVlpUpKStSiRQtJtee0HyojI0OfffZZaBsD77La/MBiQh5ABKuxKGNjEwDhYve8sXo2AYhMduN/xhMAwqWBRRmxCcAsVn3Wqm8DAICIFvLJ948+ktq1k6ZPlwYOlGLCeMr8jz/+qPj4eCUnJ6tLly6KjY3Vzp07g67btWuX0tPTw9cweIvVIJhgOWAWqxdcguUAwsUuoEbAHDCH3fifgDmAcLF6fyE2AZiFxAAAADwh5F/fTz8tZWVJQ4ZIzZtLo0dLb78tOXnSfF5eXlDZF198oTVr1ujCCy9UdHS0GjVqpEsvvVTr16/Xd999V3fdt99+q/Xr1+uCCy5wrkE4tpD5DpjP6gWXYDmAcCHzHTAfme8A3EbmO2A+iz7rb+BgEB0AAIRFyPPQb7ut9s/WrbVnvi9bJi1YUDsRf/75UlRU7Z/6uPrqq5WQkKBzzjlHGRkZ+uabbzR//nwlJiZq2rRpddc9+uijeuutt9SvXz+NHTtWkvTkk08qNTVVDz74YP0agWMXme+A+axecKN5wQUQJmS+A+Yj8x2A28h8B8xn1WfrGTcHAADhF7Z1+O3aSePHS998I33yiXTNNdLatbUZ8LfdJo0aJf3rX1J5+ZHXPXjwYOXn52v69Om67bbb9Pzzz+vKK6/Uf/7zH5100kl115188sl65513dMopp+iRRx7Ro48+qh49euj999/Xcccd59xfFscWVpcD5mNrNwBuspucI2AOmMNu/M/kO4BwITYBmI8z3wEA8IQwnsD+f844o/bPE09I//63tGSJ9Pzz0sKFUmKidODAkdU3duzYukz2X3L66afrjTfeOIpWAzZYXQ6YjzPfAbjJ7nlDwBwwh934n/EEgHBhVz7AfCQGAADgCa5+fUdHSwMGSM88I+XmSs89J/Xv72aLgKPA6nLAfJz5DsBNZL4D5iPzHYCb7LalJjYBmIUz3wEA8ISIWTsXHy9dfbX00ktutwQ4QmS+A+az6LOc+Q4gbOxG5IwnAHOQ+Q7ATSzkA7yBzHcAADyBr2+gvsh8B8zHtvMA3GQXMGc8AZiDzHcAbuIIG8AbiE0AAOAJfH0D9UXmO2A+tp0H4CYy3wHzkfkOwE1kvgPeYLUrH9vOAwBgHEIBQH2R+Q6Yj9XlANxE5jtgPjLfAbiJzHfAG4hNAADgCXx9A/VF5jtgPs5VA+AmMt8B85H5DsBNZL4D3kBsAgAAT+DrG6gvq5dcXnABs9hlhPAtCSAcyHwHzGc3/ifzHUA4sJAP8AYm3wEA8ARPfH2vXbtWUVFRln8+/PBDSVJpaalmz56tCy+8UFlZWWrUqJG6deumOXPmqKaGtxHUg1UvIlgOmIWAOQA3ETAHzMdCPgBuYiEf4A1WfZa4BAAAxolxuwFOGjt2rLp37x5Q1qFDB0nSjz/+qNtvv139+/fXH/7wB6WkpOi1117Tbbfdpg8//FCLFy92o8nwAjLfAfMRMAfgJgLmgPlYyAfATSzkA7zBos/6o/3hbwcAAKgXT02+9+rVS0OHDrX8rHnz5vrqq690yimn1JWNHj1aN910kxYtWqQJEybUTdQDR8QqoEawHDALAXMAbuKcVsB8duN/xhIAwoGFfIA3WPVZkgIAADCO576+i4uLVV1dHVSelpYWMPF+0JAhQyRJ3377bcjbBo+y6kUEywGzkPkOwE12zxoC5oA57Mb/jCUAhAOZ74A3cOY7AACe4Kmv75EjRyolJUXx8fE6//zz9Z///OcXf2f37t2SaifngaNC5jtgPjLfAbiJzHfAfGS+A3ATme+AN3DmOwAAnuCJbecbNmyo7OxsXXrppUpLS9M333yjJ554Qr169dL69evVrVs3y9+rrKzUzJkz1a5du6Cz4v9bRUWFKioq6n4uKiqSJGVmZio62lPrFzzv4CILJxdb5ETnBJUlxieqcVZjx+4BILSKk4p1QAeCyjNbZCo6kec8gEBOjyeKGhWpRCVB5c0zmytKUY7cA0Bo+Rr5lKvcoPLkxslqlNXIhRYBiGROjyWqm1crT3lB5SnJKUrKSnLkHgBCr6BhgcpUFlAW1SBKWVlZLrUIQKQKxTwHYMXn8yk3N/hdF4cX5ff7/W43IhR++OEHde3aVb1799arr75qec2oUaO0YMECvfzyy7r00ktt63rooYc0efLkoPL7779f8fHxjrUZZnpo0kNBZWd9dJYuefWS8DcGwFFZd946/bv/v4PK73n8HiWVEqwCEFqvXPyKPjrro8BCv/TQnx5yozkAjkJFwwpNfWBqUHnvdb3V7+1+LrQIwLFkX9N9enLsk0Hll/zvJTrrk7NcaBGAo/GPQf/Q590+DyiLK4/TA4894E6DAADHvPLyck2bNk2FhYVKSUlxuznG8OzkuyRde+21euGFF1RaWqoGDQL36Hn88cd177336uGHH9b48eMPW49V5nurVq3IfDdQWlqasrOztXr1auXn59e7Pr/82r1rd1B50rwkpUzmQQSY4sDvDqj4j8VB5RldM9Qgnz3eAARyejxR+EihSm8qDSyskrLakOECmMKf4NfuLRbvBbOSlPIY7wUAAjk9lqhuV6289y0y3+9PUdLfWUwMmKLgiQKVDQ/MfI8+EK3MjpkutQhApHJ6LAHYOZj5zuT7kfHEtvN2WrVqpcrKSpWUlAT8n+KZZ57RfffdpzFjxvzixLskxcXFKS4uLqicrRbMlZ+fr5yc4O3ij5jNnFxJcYlKcoK3jwUQoQqsi/fk75EceFQA8CbHxhPlFmU+OVM3gPAIfl2UJJWU8V4AwJ5jYwmbOGjR/iIV5RTVv34A4RF8Gp780X7eCwDYcmwsAcBRnk7b/vHHHxUfH6/k5OS6spdeekm33HKLrrzySs2ePdvF1sET7HpQTVhbAaC+7PosSe8AwsFqPMFYAjCLXZ/19Bs3gIhh997CeAIwi0Wf9Ud7dtNaAAA8yxOhgLy84K21vvjiC61Zs0YXXnhh3dbw69at0zXXXKPevXtr6dKlbBmP+rN7wfWFtRUA6suuz/I1ASAcrMYTjCUAs9j1WRbyAQgHu/cWxhOAWaz6LHEJAACM44lt56+++molJCTonHPOUUZGhr755hvNnz9fiYmJmjZtmiRp+/btGjRokKKiojR06FCtXLkyoI6uXbuqa9eubjQfJiPzHfAGMt8BuInMd8B8LOQD4CYy3wFvsOqzxCUAADCOJybfBw8erKVLl2r69OkqKipSenq6rrzySk2aNEkdOnSQJG3dulWFhYWSpN/97ndBdUyaNInJdxw5XnABbyBgDsBNZL4D3lCj4P5MwBxAOJAYAHgDk+8AAHiCJybfx44dq7Fjxx72mr59+8rv54wcOIyt3QBvIPMdgJvIfAe8wafgsQML+QCEA0fiAd5g12ejJBHWBgDAGIQCgPog8x3wBjLfAbiJzHfAG8hWA+AWMt8Bb7Drs8QmAAAwCl/dQH2wuhzwBjLfAbjJ6llDsBwwj9U7AGMJAOFAbALwBrs+y3gCAACjMPkO1AerywFvIPMdgJusnjUEywHzWL0DMJYAEA7EJgBvIPMdAABP4KsbqA9WlwPeQOY7ADeR+Q54A5nvANxCbALwBjLfAQDwBCbfgfpgdTngDawuB+Amq2cNYwnAPGS+A3ALsQnAG4hNAADgCXx1A/XB6nLAG1hdDsBNVs8axhKAech8B+AWYhOANxCbAADAE5h8B+qD1eWAN7C6HICbyHwHvIHMdwBuITYBeAOxCQAAPIGvbqA+WF0OeAOrywG4icx3wBvIfAfgFmITgDcQmwAAwBM8Ofk+ZcoURUVFqXPnzgHlPp9Pc+fO1Wmnnabk5GRlZmbqkksu0fr1611qKYzH6nLAG+z6LC+4AMKBzHfAG8h8B+AWu/cWxhOAWYhNAADgCZ4LBezYsUOPPvqokpKSgj675557dOutt6pLly6aPn267rrrLm3atEl9+vTRxx9/7EJrYTxWlwPeYNdnPfctCSAikfkOeAOZ7wDcYvfewngCMAuxCQAAPCHG7QY47e6779bZZ5+tmpoa5efn15VXV1drzpw5Gjp0qJ599tm68quuukrt27fX0qVL1aNHDzeaDJOR+Q54A6vLAbiJzHfAG8h8B+AWMt8BbyA2AQCAJ3gqFLBu3TqtWrVKM2fODPqsqqpKZWVlyszMDCjPyMhQdHS0EhISwtRKeAqZ74A3sLocgJvIfAe8gcx3AG4h8x3wBmITAAB4gmcy32tqanT77bfrlltuUZcuXYI+T0hI0FlnnaVnnnlGPXv2VK9evVRQUKCHH35YTZs21ahRo2zrrqioUEVFRd3PRUVFkqTMzExFRzP6MUlaWlrAP+urqnmV8pUfVN64UWMlZiU6cg8AoVfRuEL7tC+ovGl6U8VnxbvQIgCRzOnxRH5CvqpUFVAWGx2rtCxn6gcQHnu0RzWHpKzFJcYpNSvVpRYBiFROjyXK0spUoIKg8mZNm6lhVkNH7gEg9EqSS1SkoqDy9Kx0xVR6JowPwAFOjyUAOz6fT7m5uW43wzie+daeO3eutm/frjfffNP2miVLlujqq6/WddddV1fWvn17vf/++2rfvr3t702dOlWTJ08OKh85cqTi45mUMVF2drYj9ezM2qkFWhBU3r9vf3Vt1tWRewAIvS3tt+hZPRtUfsnAS9SxU0cXWgTABE6NJxZmLdQO7Qgoy0jL0G9H/9aR+gGEx9MpTwctzG3ZpqWuH329Sy0CEOmcGkt8dcpXWq3VQeVDBg1RyzNbOnIPAKH3yZmf6GW9HFR+zfBr1GxfMxdaBCDSOTWWAOyUl5dr2rRpbjfDOFF+v9/vdiPqa+/everYsaMefPBB3XXXXZKkvn37Kj8/Xxs3bqy7Ljc3V/fcc49SUlLUv39/7d69W9OmTVNiYqLeffdd21VCVpnvrVq1IvPdQGlpacrOztbq1auVnx+csX6kKrtVau/Le4PKm9zWRAn/4CgDwBQV51Zo30qLzPcbmir+DRZZAQjk9Hgi/1/5qjr9kMz3/8QqbRAr2AGT5L2dp+pO1QFlDdc1VLNrCJYDCOT0WKJsSJkKZhcElTe7uJkafknmO2CKkutKVPRni8z33umK+cEzOXQAHOD0WAKwczDzvbCwUCkpKW43xxie+NYeP368UlNTdfvtt9teU11drQEDBqhv37566qmn6soHDBigU045RY8//rgee+wxy9+Ni4tTXFxcUDlbLZgrPz9fOTk59a+ojXVxQX6BCnIK6l8/gPDIsy7eX7BfcuBRAcCbHBtP1AQXVZVXOVM3gPCpCC6qrKqkLwOw5dhYIniuTpK0N3cv7zOASYJzAiRJefl59GUAlhwbSwBwlPGT75s3b9b8+fM1c+ZM7dq1q668vLxcVVVV2rZtm1JSUvT5559r48aNmj59esDvn3DCCTrppJP0/vvvh7vp8IIGNuW+sLYCQH1ZTHxJsu/jAOAkq2eN3XMJQOSyegdgLAEgHIhNAN5g12cZTwAAYBTjJ9937twpn8+nsWPHauzYsUGft2vXTnfccYfOOussSVJNTXAks6qqStXV1UHlwC+yO3WAgDlgFrs+y8kiAMLB6lnDWAIwj1W/ZSwBIByITQDeQGwCAABPMH7yvXPnznrxxReDysePH6/i4mLNmjVLxx9/vCorKyVJy5cv18UXX1x33YYNG/T9999r1KhRYWszPITV5YA3sLocgJusnjWMJQDzkPkOwC3EJgBvIDYBAIAnGD/5npaWpsGDBweVz5w5U5ICPrvgggu0ePFiFRUV6cILL1ROTo6eeuopJSQkaNy4cWFpLzyG1eWAN7C6HICbyHwHvIHMdwBuITYBeAOxCQAAPMH4yfcj8dJLL+mJJ57Q8uXL9eqrr6phw4bq1auXHn74YXXq1Mnt5sFErC4HvIHV5QDcROY74A1kvgNwC7EJwBuITQAA4AmenXxfu3ZtUFlCQoImTJigCRMmhL9B8CZWlwPewOpyAG4i8x3wBjLfAbiF2ATgDcQmAADwBL66gfpgdTngDawuB+AmMt8BbyDzHYBbiE0A3kBsAgAAT2DyHagPVpcD3mDXZ3nBBRAOZL4D3kDmOwC32L23MJ4AzEJsAgAATyAUANQHq8sBb7Drs3xLAggHMt8BbyDzHYBb7N5bGE8AZiE2AQCAJ/DVDdQHq8sBb2B1OQA3WT1rGEsA5rHqt4wlAIQDsQnAG4hNAADgCUy+A/XBtvOAN7C6HICbrJ41ZKoB5mHbeQBuITYBeINdn2U8AQCAUfjqBuqDbecBb2B1OQA3kfkOeAPbzgNwC7EJwBvs+izjCQAAjMLkO1AfrC4HvIHMdwBuIvMd8AYy3wG4hdgE4A1kvgMA4Ame/OqeMmWKoqKi1LlzZ9trCgoKlJGRoaioKK1atSqMrYOnsLoc8AYy3wG4icx3wBvIfAfgFmITgDeQ+Q4AgCd4bvJ9x44devTRR5WUlHTY6yZOnKjS0tIwtQqexepywBtYXQ7ATVbPGsYSgHnIfAfgFmITgDcQmwAAwBM899V999136+yzz9aZZ55pe83GjRs1Z84c3XfffWFsGTyJ1eWAN7C6HICbrJ41jCUA85D5DsAtxCYAbyA2AQCAJ3hq8n3dunVatWqVZs6cedjr7rjjDg0ZMkS9evUKT8PgXawuB7yB1eUA3ETmO+ANZL4DcAuxCcAbiE0AAOAJMW43wCk1NTW6/fbbdcstt6hLly62161cuVLr16/Xt99+q23btv2quisqKlRRUVH3c1FRkSQpMzNT0dGMfkySlpYW8M/6KkktUZGKgu/TLE2xWbGO3ANA6Pma+JSr3KDy5CbJapTVyIUWAYhkTo8nchrkBJUlxieqcVZjR+oHEB774/arXOUBZdGx0crMynSpRQAildNjiaLGRSpRSVB588zmiqqJcuQeAEKvMrVSe7U3qLxJWhMlZCW40CIAkcrpsQRgx+fzKTc3OG6Ow/PM5PvcuXO1fft2vfnmm7bXlJWV6e6779add96ptm3b/urJ96lTp2ry5MlB5SNHjlR8fPzRNhkuys7OdqSeT878RC/r5aDya666Rmn7+OIDTFEeV65pmhZUfmaPM9V3dN/wNwiAEZwaT/wp5k/yHbLHZOeTO+vS0Zc6Uj+A8Hjh+Bf0pb4MKItLiNPo0aNdahGASOfUWOK1017TB/ogqHz0LaMVJSbfAVPszNqpBVoQVN5vQD91bd7VhRYBiHROjSUAO+Xl5Zo2LThujsPzxOT73r17NXHiRE2YMEHp6em2102bNk1VVVV68MEHj6j+Bx54QH/4wx/qfi4qKlKrVq20aNEiMt8Nk5aWpuzsbK1evVr5+fn1rq+kskQaGFz+/HPPK2abJ7oXcEzwJfmk+4PL//PZf/T9vO/D3yAAEc3p8YRvQvDhjhu/3Kif5/1c77oBhE/BiQXSqYFl5VXlmjdvnivtARC5nB5LFLYolHoGl8+fN7/edQMIn6ouVdKo4PK31r6lD1YHL7ABcOxyeiwB2PH5gmNW+GWemB0cP368UlNTdfvtt9tes23bNj3++OOaPXu2kpOTj6j+uLg4xcXFBZWz1YK58vPzlZMTvMXrESu2Ls7LyZMcqB5AmNjs3nag9IAO5BwIb1sAGMOx8YTFWs7SolKV5pTWv24A4WMxZPBH+Z15TgDwJMfGEuUWZdXi+QOYxianrLC4UIU5heFtCwAjODaWAOAo4yffN2/erPnz52vmzJnatWtXXXl5ebmqqqq0bds2paSkaOLEiTruuOPUt2/fuu3md+/eLUnKy8vTtm3b1Lp1azLZcWQa2JSzGAgwi12f5SsBQKjZPWcYSwDmseq3du8LAOAkq/EEYwnAPMQmAADwBOMn33fu3Cmfz6exY8dq7NixQZ+3a9dOd9xxh3766Sf98MMPat++fdA1t912myRp//79atKkSaibDC+xC6bVhLUVAOrLrs8SMAcQaowlAO+w6reMJQCEg9WzhrEEYB5iEwAAeILxk++dO3fWiy++GFQ+fvx4FRcXa9asWTr++ONVWFgYdPbFxo0bNWHCBN17773q2bOnkpKSwtVseAXZaoA3sLocgFsYSwDeYdVvGUsACAcy3wFvIDYBAIAnGD/5npaWpsGDBweVz5w5U5IsPzvoYJZ79+7dD3sdYItsNcAb7F5wWV0OINQYSwDeQeY7ALeQ+Q54A5nvAAB4AuvmgPqw60G85ALmseq3fEsCCDXGEoB3MPkOwC1W4wnGEoB57PotsQkAAIxifOa7nbVr1/7iNX379pXf7z/6mzQTgx/D1DSr0YHEA6ppViNVO1Bhik0527sB5vEpOECeLCndhbYAiGiOjicYSwDeYddvMw/zGYBjkuOxCatTFHnuAOax67dNRGwCQADHxxKAHZ+kvW43wjxR/nrNPh+bioqK1LhxY6lQ9gFTHNsaSypyuxEAjkiZpHi3GwEA/994SVPcbgSAI/JnSfe43QgA+P/2qHbxDwBztJT0s9uNAADgvxRJaiwVFhYqJYUJ0V+LvG0gFFhhDpiHfgsgkvBMAsxDvwUQSXgmAeah3wIA4AlMvgOhwFYvgHmq3G4AAPwXnkmAeei3ACIJzyTAPPRbAAA8gcl3wGlfSip3uxEAjtgnbjcAAP4LzyTAPB+73QAA+C88kwDz5Ena5nYjAABAfTH5DjipXJzzCJjqj5IK3W4EAEhaIek9txsB4Ii9JulfbjcCACTlS/qT240AcFT+IDLgAQAwXIzbDTDaJElxbjcCR6JRSiP16NFDH3/8sYqLip2tfJ+k1yVtd7ZaAGHysaSTpMZXN9aZA88MzXMCgCeEbDxRo9qM9/f+/78DMEulpCul1CGpOv2W0/XRJx8xlgBgKaSxiV2qXQy0x9lqAYTJi5JOklKyU9T9gu7EJgBYCulYAvhvFW43wExMvtfHTLcbgCOVnJWsXqN76Zt536g4hy8lAIfIkRKfT1SvJjwnANhjPAHAVpUU926czjv5PH0972ueEQAsMZYAcFhbpKRnk9QrkecEAGuMJYDIxrbzAAAAAAAAAAAAAADUE5PvAAAAAAAAAAAAAADUE5PvAAAAAAAAAAAAAADUE5PvAAAAAAAAAAAAAADUE5PvR8Hv97vdBBwln8+n8vJy+Xw+t5sCIELxnADwS3hOADgcnhEAfgnPCQC/hOcEgMPhGYFwY170yET5+S92xHbs2KFWrVq53QwAAAAAAAAAAAAACJmff/5ZLVu2dLsZxmDy/Sj4fD7t2rVLjRo1UlRUlNvNAQAAAAAAAAAAAADH+P1+FRcXq0WLFoqOZjP1X4vJdwAAAAAAAAAAAAAA6ollCgAAAAAAAAAAAAAA1BOT7wAAAAAAAAAAAAAA1BOT7wAAAAAAAAAAAAAA1BOT7wAAAAAAAAAAAAAA1BOT7wAAAAAAAAAAAAAA1BOT7wAAAAAAAAAAAAAA1BOT7wAAAAAAAAAAAAAA1NP/A+L0MgZBKRlmAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "
\n", + "
Environment 2023-07-09 19:05:00+00:00
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Step 1009 Sim Time: 2023-07-09 12:10, Reward: -0.02, Return: -22.76, Mean Step Time: 2.32 s, Episode Time: 2346.10 s\n", + "Step 1010 Sim Time: 2023-07-09 12:15, Reward: -0.02, Return: -22.78, Mean Step Time: 2.32 s, Episode Time: 2348.43 s\n", + "Step 1011 Sim Time: 2023-07-09 12:20, Reward: -0.02, Return: -22.79, Mean Step Time: 2.32 s, Episode Time: 2350.68 s\n", + "Step 1012 Sim Time: 2023-07-09 12:25, Reward: -0.02, Return: -22.81, Mean Step Time: 2.32 s, Episode Time: 2352.93 s\n", + "Step 1013 Sim Time: 2023-07-09 12:30, Reward: -0.02, Return: -22.83, Mean Step Time: 2.32 s, Episode Time: 2355.31 s\n", + "Step 1014 Sim Time: 2023-07-09 12:35, Reward: -0.02, Return: -22.85, Mean Step Time: 2.32 s, Episode Time: 2357.58 s\n", + "Step 1015 Sim Time: 2023-07-09 12:40, Reward: -0.02, Return: -22.87, Mean Step Time: 2.32 s, Episode Time: 2359.88 s\n", + "Step 1016 Sim Time: 2023-07-09 12:45, Reward: -0.02, Return: -22.89, Mean Step Time: 2.32 s, Episode Time: 2362.15 s\n", + "Step 1017 Sim Time: 2023-07-09 12:50, Reward: -0.02, Return: -22.91, Mean Step Time: 2.32 s, Episode Time: 2364.34 s\n", + "Step 1018 Sim Time: 2023-07-09 12:55, Reward: -0.02, Return: -22.93, Mean Step Time: 2.32 s, Episode Time: 2366.60 s\n", + "Step 1019 Sim Time: 2023-07-09 13:00, Reward: -0.02, Return: -22.95, Mean Step Time: 2.32 s, Episode Time: 2368.90 s\n", + "Step 1020 Sim Time: 2023-07-09 13:05, Reward: -0.02, Return: -22.97, Mean Step Time: 2.32 s, Episode Time: 2371.19 s\n", + "Step 1021 Sim Time: 2023-07-09 13:10, Reward: -0.02, Return: -22.98, Mean Step Time: 2.32 s, Episode Time: 2373.46 s\n", + "Step 1022 Sim Time: 2023-07-09 13:15, Reward: -0.02, Return: -23.00, Mean Step Time: 2.32 s, Episode Time: 2375.72 s\n", + "Step 1023 Sim Time: 2023-07-09 13:20, Reward: -0.02, Return: -23.02, Mean Step Time: 2.32 s, Episode Time: 2377.97 s\n", + "Step 1024 Sim Time: 2023-07-09 13:25, Reward: -0.02, Return: -23.04, Mean Step Time: 2.32 s, Episode Time: 2380.18 s\n", + "Step 1025 Sim Time: 2023-07-09 13:30, Reward: -0.02, Return: -23.06, Mean Step Time: 2.32 s, Episode Time: 2382.46 s\n", + "Step 1026 Sim Time: 2023-07-09 13:35, Reward: -0.02, Return: -23.08, Mean Step Time: 2.32 s, Episode Time: 2384.70 s\n", + "Step 1027 Sim Time: 2023-07-09 13:40, Reward: -0.02, Return: -23.10, Mean Step Time: 2.32 s, Episode Time: 2386.95 s\n", + "Step 1028 Sim Time: 2023-07-09 13:45, Reward: -0.02, Return: -23.12, Mean Step Time: 2.32 s, Episode Time: 2389.28 s\n", + "Step 1029 Sim Time: 2023-07-09 13:50, Reward: -0.02, Return: -23.14, Mean Step Time: 2.32 s, Episode Time: 2391.58 s\n", + "Step 1030 Sim Time: 2023-07-09 13:55, Reward: -0.02, Return: -23.15, Mean Step Time: 2.32 s, Episode Time: 2393.98 s\n", + "Step 1031 Sim Time: 2023-07-09 14:00, Reward: -0.02, Return: -23.17, Mean Step Time: 2.32 s, Episode Time: 2396.25 s\n", + "Step 1032 Sim Time: 2023-07-09 14:05, Reward: -0.02, Return: -23.19, Mean Step Time: 2.32 s, Episode Time: 2398.51 s\n", + "Step 1033 Sim Time: 2023-07-09 14:10, Reward: -0.02, Return: -23.21, Mean Step Time: 2.32 s, Episode Time: 2400.74 s\n", + "Step 1034 Sim Time: 2023-07-09 14:15, Reward: -0.02, Return: -23.23, Mean Step Time: 2.32 s, Episode Time: 2402.99 s\n", + "Step 1035 Sim Time: 2023-07-09 14:20, Reward: -0.02, Return: -23.25, Mean Step Time: 2.32 s, Episode Time: 2405.23 s\n", + "Step 1036 Sim Time: 2023-07-09 14:25, Reward: -0.02, Return: -23.27, Mean Step Time: 2.32 s, Episode Time: 2407.64 s\n", + "Step 1037 Sim Time: 2023-07-09 14:30, Reward: -0.02, Return: -23.29, Mean Step Time: 2.32 s, Episode Time: 2409.81 s\n", + "Step 1038 Sim Time: 2023-07-09 14:35, Reward: -0.02, Return: -23.31, Mean Step Time: 2.32 s, Episode Time: 2412.13 s\n", + "Step 1039 Sim Time: 2023-07-09 14:40, Reward: -0.02, Return: -23.33, Mean Step Time: 2.32 s, Episode Time: 2414.42 s\n", + "Step 1040 Sim Time: 2023-07-09 14:45, Reward: -0.02, Return: -23.34, Mean Step Time: 2.32 s, Episode Time: 2416.75 s\n", + "Step 1041 Sim Time: 2023-07-09 14:50, Reward: -0.02, Return: -23.36, Mean Step Time: 2.32 s, Episode Time: 2418.98 s\n", + "Step 1042 Sim Time: 2023-07-09 14:55, Reward: -0.02, Return: -23.38, Mean Step Time: 2.32 s, Episode Time: 2421.23 s\n", + "Step 1043 Sim Time: 2023-07-09 15:00, Reward: -0.02, Return: -23.40, Mean Step Time: 2.32 s, Episode Time: 2423.52 s\n", + "Step 1044 Sim Time: 2023-07-09 15:05, Reward: -0.02, Return: -23.42, Mean Step Time: 2.32 s, Episode Time: 2425.89 s\n", + "Step 1045 Sim Time: 2023-07-09 15:10, Reward: -0.02, Return: -23.44, Mean Step Time: 2.32 s, Episode Time: 2428.21 s\n", + "Step 1046 Sim Time: 2023-07-09 15:15, Reward: -0.02, Return: -23.46, Mean Step Time: 2.32 s, Episode Time: 2430.54 s\n", + "Step 1047 Sim Time: 2023-07-09 15:20, Reward: -0.02, Return: -23.48, Mean Step Time: 2.32 s, Episode Time: 2432.85 s\n", + "Step 1048 Sim Time: 2023-07-09 15:25, Reward: -0.02, Return: -23.50, Mean Step Time: 2.32 s, Episode Time: 2435.11 s\n", + "Step 1049 Sim Time: 2023-07-09 15:30, Reward: -0.02, Return: -23.51, Mean Step Time: 2.32 s, Episode Time: 2437.43 s\n", + "Step 1050 Sim Time: 2023-07-09 15:35, Reward: -0.02, Return: -23.53, Mean Step Time: 2.32 s, Episode Time: 2439.66 s\n", + "Step 1051 Sim Time: 2023-07-09 15:40, Reward: -0.02, Return: -23.55, Mean Step Time: 2.32 s, Episode Time: 2442.08 s\n", + "Step 1052 Sim Time: 2023-07-09 15:45, Reward: -0.02, Return: -23.57, Mean Step Time: 2.32 s, Episode Time: 2444.38 s\n", + "Step 1053 Sim Time: 2023-07-09 15:50, Reward: -0.02, Return: -23.59, Mean Step Time: 2.32 s, Episode Time: 2446.89 s\n", + "Step 1054 Sim Time: 2023-07-09 15:55, Reward: -0.02, Return: -23.61, Mean Step Time: 2.32 s, Episode Time: 2449.48 s\n", + "Step 1055 Sim Time: 2023-07-09 16:00, Reward: -0.02, Return: -23.63, Mean Step Time: 2.32 s, Episode Time: 2452.02 s\n", + "Step 1056 Sim Time: 2023-07-09 16:05, Reward: -0.02, Return: -23.65, Mean Step Time: 2.32 s, Episode Time: 2454.54 s\n", + "Step 1057 Sim Time: 2023-07-09 16:10, Reward: -0.02, Return: -23.67, Mean Step Time: 2.32 s, Episode Time: 2457.22 s\n", + "Step 1058 Sim Time: 2023-07-09 16:15, Reward: -0.02, Return: -23.68, Mean Step Time: 2.32 s, Episode Time: 2459.72 s\n", + "Step 1059 Sim Time: 2023-07-09 16:20, Reward: -0.02, Return: -23.70, Mean Step Time: 2.32 s, Episode Time: 2462.46 s\n", + "Step 1060 Sim Time: 2023-07-09 16:25, Reward: -0.02, Return: -23.72, Mean Step Time: 2.32 s, Episode Time: 2464.94 s\n", + "Step 1061 Sim Time: 2023-07-09 16:30, Reward: -0.02, Return: -23.74, Mean Step Time: 2.32 s, Episode Time: 2467.40 s\n", + "Step 1062 Sim Time: 2023-07-09 16:35, Reward: -0.02, Return: -23.76, Mean Step Time: 2.32 s, Episode Time: 2469.89 s\n", + "Step 1063 Sim Time: 2023-07-09 16:40, Reward: -0.02, Return: -23.78, Mean Step Time: 2.32 s, Episode Time: 2472.36 s\n", + "Step 1064 Sim Time: 2023-07-09 16:45, Reward: -0.02, Return: -23.80, Mean Step Time: 2.32 s, Episode Time: 2474.85 s\n", + "Step 1065 Sim Time: 2023-07-09 16:50, Reward: -0.02, Return: -23.82, Mean Step Time: 2.32 s, Episode Time: 2477.44 s\n", + "Step 1066 Sim Time: 2023-07-09 16:55, Reward: -0.02, Return: -23.84, Mean Step Time: 2.32 s, Episode Time: 2479.93 s\n", + "Step 1067 Sim Time: 2023-07-09 17:00, Reward: -0.02, Return: -23.85, Mean Step Time: 2.32 s, Episode Time: 2482.44 s\n", + "Step 1068 Sim Time: 2023-07-09 17:05, Reward: -0.02, Return: -23.87, Mean Step Time: 2.32 s, Episode Time: 2484.87 s\n", + "Step 1069 Sim Time: 2023-07-09 17:10, Reward: -0.02, Return: -23.89, Mean Step Time: 2.32 s, Episode Time: 2487.26 s\n", + "Step 1070 Sim Time: 2023-07-09 17:15, Reward: -0.02, Return: -23.91, Mean Step Time: 2.32 s, Episode Time: 2489.58 s\n", + "Step 1071 Sim Time: 2023-07-09 17:20, Reward: -0.02, Return: -23.93, Mean Step Time: 2.32 s, Episode Time: 2491.89 s\n", + "Step 1072 Sim Time: 2023-07-09 17:25, Reward: -0.02, Return: -23.95, Mean Step Time: 2.32 s, Episode Time: 2494.19 s\n", + "Step 1073 Sim Time: 2023-07-09 17:30, Reward: -0.02, Return: -23.97, Mean Step Time: 2.32 s, Episode Time: 2496.44 s\n", + "Step 1074 Sim Time: 2023-07-09 17:35, Reward: -0.02, Return: -23.99, Mean Step Time: 2.32 s, Episode Time: 2498.74 s\n", + "Step 1075 Sim Time: 2023-07-09 17:40, Reward: -0.02, Return: -24.01, Mean Step Time: 2.32 s, Episode Time: 2501.17 s\n", + "Step 1076 Sim Time: 2023-07-09 17:45, Reward: -0.02, Return: -24.02, Mean Step Time: 2.32 s, Episode Time: 2503.70 s\n", + "Step 1077 Sim Time: 2023-07-09 17:50, Reward: -0.02, Return: -24.04, Mean Step Time: 2.32 s, Episode Time: 2506.21 s\n", + "Step 1078 Sim Time: 2023-07-09 17:55, Reward: -0.02, Return: -24.06, Mean Step Time: 2.33 s, Episode Time: 2508.72 s\n", + "Step 1079 Sim Time: 2023-07-09 18:00, Reward: -0.02, Return: -24.08, Mean Step Time: 2.33 s, Episode Time: 2511.11 s\n", + "Step 1080 Sim Time: 2023-07-09 18:05, Reward: -0.02, Return: -24.10, Mean Step Time: 2.33 s, Episode Time: 2513.39 s\n", + "Step 1081 Sim Time: 2023-07-09 18:10, Reward: -0.02, Return: -24.12, Mean Step Time: 2.33 s, Episode Time: 2515.67 s\n", + "Step 1082 Sim Time: 2023-07-09 18:15, Reward: -0.02, Return: -24.14, Mean Step Time: 2.32 s, Episode Time: 2517.97 s\n", + "Step 1083 Sim Time: 2023-07-09 18:20, Reward: -0.02, Return: -24.16, Mean Step Time: 2.33 s, Episode Time: 2520.34 s\n", + "Step 1084 Sim Time: 2023-07-09 18:25, Reward: -0.02, Return: -24.17, Mean Step Time: 2.32 s, Episode Time: 2522.60 s\n", + "Step 1085 Sim Time: 2023-07-09 18:30, Reward: -0.02, Return: -24.19, Mean Step Time: 2.32 s, Episode Time: 2524.88 s\n", + "Step 1086 Sim Time: 2023-07-09 18:35, Reward: -0.02, Return: -24.21, Mean Step Time: 2.32 s, Episode Time: 2527.21 s\n", + "Step 1087 Sim Time: 2023-07-09 18:40, Reward: -0.02, Return: -24.23, Mean Step Time: 2.32 s, Episode Time: 2529.43 s\n", + "Step 1088 Sim Time: 2023-07-09 18:45, Reward: -0.02, Return: -24.25, Mean Step Time: 2.32 s, Episode Time: 2531.67 s\n", + "Step 1089 Sim Time: 2023-07-09 18:50, Reward: -0.02, Return: -24.27, Mean Step Time: 2.32 s, Episode Time: 2533.88 s\n", + "Step 1090 Sim Time: 2023-07-09 18:55, Reward: -0.02, Return: -24.29, Mean Step Time: 2.32 s, Episode Time: 2536.34 s\n", + "Step 1091 Sim Time: 2023-07-09 19:00, Reward: -0.02, Return: -24.31, Mean Step Time: 2.32 s, Episode Time: 2538.67 s\n", + "Step 1092 Sim Time: 2023-07-09 19:05, Reward: -0.02, Return: -24.33, Mean Step Time: 2.32 s, Episode Time: 2540.94 s\n", + "Step 1093 Sim Time: 2023-07-09 19:10, Reward: -0.02, Return: -24.34, Mean Step Time: 2.32 s, Episode Time: 2543.15 s\n", + "Step 1094 Sim Time: 2023-07-09 19:15, Reward: -0.02, Return: -24.36, Mean Step Time: 2.32 s, Episode Time: 2545.41 s\n", + "Step 1095 Sim Time: 2023-07-09 19:20, Reward: -0.02, Return: -24.38, Mean Step Time: 2.32 s, Episode Time: 2547.69 s\n", + "Step 1096 Sim Time: 2023-07-09 19:25, Reward: -0.02, Return: -24.40, Mean Step Time: 2.32 s, Episode Time: 2550.01 s\n", + "Step 1097 Sim Time: 2023-07-09 19:30, Reward: -0.02, Return: -24.42, Mean Step Time: 2.32 s, Episode Time: 2552.22 s\n", + "Step 1098 Sim Time: 2023-07-09 19:35, Reward: -0.02, Return: -24.44, Mean Step Time: 2.32 s, Episode Time: 2554.47 s\n", + "Step 1099 Sim Time: 2023-07-09 19:40, Reward: -0.02, Return: -24.46, Mean Step Time: 2.32 s, Episode Time: 2556.80 s\n", + "Step 1100 Sim Time: 2023-07-09 19:45, Reward: -0.02, Return: -24.48, Mean Step Time: 2.32 s, Episode Time: 2559.10 s\n", + "Step 1101 Sim Time: 2023-07-09 19:50, Reward: -0.02, Return: -24.50, Mean Step Time: 2.32 s, Episode Time: 2561.36 s\n", + "Step 1102 Sim Time: 2023-07-09 19:55, Reward: -0.02, Return: -24.51, Mean Step Time: 2.32 s, Episode Time: 2563.53 s\n", + "Step 1103 Sim Time: 2023-07-09 20:00, Reward: -0.02, Return: -24.53, Mean Step Time: 2.32 s, Episode Time: 2565.79 s\n", + "Step 1104 Sim Time: 2023-07-09 20:05, Reward: -0.02, Return: -24.55, Mean Step Time: 2.32 s, Episode Time: 2568.03 s\n", + "Step 1105 Sim Time: 2023-07-09 20:10, Reward: -0.02, Return: -24.57, Mean Step Time: 2.32 s, Episode Time: 2570.34 s\n", + "Step 1106 Sim Time: 2023-07-09 20:15, Reward: -0.02, Return: -24.59, Mean Step Time: 2.32 s, Episode Time: 2572.56 s\n", + "Step 1107 Sim Time: 2023-07-09 20:20, Reward: -0.02, Return: -24.61, Mean Step Time: 2.32 s, Episode Time: 2574.83 s\n", + "Step 1108 Sim Time: 2023-07-09 20:25, Reward: -0.02, Return: -24.63, Mean Step Time: 2.32 s, Episode Time: 2577.07 s\n", + "Step 1109 Sim Time: 2023-07-09 20:30, Reward: -0.02, Return: -24.65, Mean Step Time: 2.32 s, Episode Time: 2579.30 s\n", + "Step 1110 Sim Time: 2023-07-09 20:35, Reward: -0.02, Return: -24.66, Mean Step Time: 2.32 s, Episode Time: 2581.74 s\n", + "Step 1111 Sim Time: 2023-07-09 20:40, Reward: -0.02, Return: -24.68, Mean Step Time: 2.32 s, Episode Time: 2583.96 s\n", + "Step 1112 Sim Time: 2023-07-09 20:45, Reward: -0.02, Return: -24.70, Mean Step Time: 2.32 s, Episode Time: 2586.21 s\n", + "Step 1113 Sim Time: 2023-07-09 20:50, Reward: -0.02, Return: -24.72, Mean Step Time: 2.32 s, Episode Time: 2588.43 s\n", + "Step 1114 Sim Time: 2023-07-09 20:55, Reward: -0.02, Return: -24.74, Mean Step Time: 2.32 s, Episode Time: 2590.66 s\n", + "Step 1115 Sim Time: 2023-07-09 21:00, Reward: -0.02, Return: -24.76, Mean Step Time: 2.32 s, Episode Time: 2592.85 s\n", + "Step 1116 Sim Time: 2023-07-09 21:05, Reward: -0.02, Return: -24.78, Mean Step Time: 2.32 s, Episode Time: 2595.19 s\n", + "Step 1117 Sim Time: 2023-07-09 21:10, Reward: -0.02, Return: -24.80, Mean Step Time: 2.32 s, Episode Time: 2597.37 s\n", + "Step 1118 Sim Time: 2023-07-09 21:15, Reward: -0.02, Return: -24.82, Mean Step Time: 2.32 s, Episode Time: 2599.62 s\n", + "Step 1119 Sim Time: 2023-07-09 21:20, Reward: -0.02, Return: -24.83, Mean Step Time: 2.32 s, Episode Time: 2601.81 s\n", + "Step 1120 Sim Time: 2023-07-09 21:25, Reward: -0.02, Return: -24.85, Mean Step Time: 2.32 s, Episode Time: 2603.98 s\n", + "Step 1121 Sim Time: 2023-07-09 21:30, Reward: -0.02, Return: -24.87, Mean Step Time: 2.32 s, Episode Time: 2606.22 s\n", + "Step 1122 Sim Time: 2023-07-09 21:35, Reward: -0.02, Return: -24.89, Mean Step Time: 2.32 s, Episode Time: 2608.40 s\n", + "Step 1123 Sim Time: 2023-07-09 21:40, Reward: -0.02, Return: -24.91, Mean Step Time: 2.32 s, Episode Time: 2610.58 s\n", + "Step 1124 Sim Time: 2023-07-09 21:45, Reward: -0.02, Return: -24.93, Mean Step Time: 2.32 s, Episode Time: 2612.78 s\n", + "Step 1125 Sim Time: 2023-07-09 21:50, Reward: -0.02, Return: -24.95, Mean Step Time: 2.32 s, Episode Time: 2614.99 s\n", + "Step 1126 Sim Time: 2023-07-09 21:55, Reward: -0.02, Return: -24.97, Mean Step Time: 2.32 s, Episode Time: 2617.24 s\n", + "Step 1127 Sim Time: 2023-07-09 22:00, Reward: -0.02, Return: -24.99, Mean Step Time: 2.32 s, Episode Time: 2619.42 s\n", + "Step 1128 Sim Time: 2023-07-09 22:05, Reward: -0.02, Return: -25.00, Mean Step Time: 2.32 s, Episode Time: 2621.63 s\n", + "Step 1129 Sim Time: 2023-07-09 22:10, Reward: -0.02, Return: -25.02, Mean Step Time: 2.32 s, Episode Time: 2623.91 s\n", + "Step 1130 Sim Time: 2023-07-09 22:15, Reward: -0.02, Return: -25.04, Mean Step Time: 2.32 s, Episode Time: 2626.09 s\n", + "Step 1131 Sim Time: 2023-07-09 22:20, Reward: -0.02, Return: -25.06, Mean Step Time: 2.32 s, Episode Time: 2628.26 s\n", + "Step 1132 Sim Time: 2023-07-09 22:25, Reward: -0.02, Return: -25.08, Mean Step Time: 2.32 s, Episode Time: 2631.59 s\n", + "Step 1133 Sim Time: 2023-07-09 22:30, Reward: -0.02, Return: -25.10, Mean Step Time: 2.32 s, Episode Time: 2633.77 s\n", + "Step 1134 Sim Time: 2023-07-09 22:35, Reward: -0.02, Return: -25.12, Mean Step Time: 2.32 s, Episode Time: 2635.95 s\n", + "Step 1135 Sim Time: 2023-07-09 22:40, Reward: -0.02, Return: -25.14, Mean Step Time: 2.32 s, Episode Time: 2638.21 s\n", + "Step 1136 Sim Time: 2023-07-09 22:45, Reward: -0.02, Return: -25.16, Mean Step Time: 2.32 s, Episode Time: 2640.41 s\n", + "Step 1137 Sim Time: 2023-07-09 22:50, Reward: -0.02, Return: -25.17, Mean Step Time: 2.32 s, Episode Time: 2642.68 s\n", + "Step 1138 Sim Time: 2023-07-09 22:55, Reward: -0.02, Return: -25.19, Mean Step Time: 2.32 s, Episode Time: 2644.93 s\n", + "Step 1139 Sim Time: 2023-07-09 23:00, Reward: -0.02, Return: -25.21, Mean Step Time: 2.32 s, Episode Time: 2647.16 s\n", + "Step 1140 Sim Time: 2023-07-09 23:05, Reward: -0.02, Return: -25.23, Mean Step Time: 2.32 s, Episode Time: 2649.36 s\n", + "Step 1141 Sim Time: 2023-07-09 23:10, Reward: -0.02, Return: -25.25, Mean Step Time: 2.32 s, Episode Time: 2651.61 s\n", + "Step 1142 Sim Time: 2023-07-09 23:15, Reward: -0.02, Return: -25.27, Mean Step Time: 2.32 s, Episode Time: 2653.82 s\n", + "Step 1143 Sim Time: 2023-07-09 23:20, Reward: -0.02, Return: -25.29, Mean Step Time: 2.32 s, Episode Time: 2656.02 s\n", + "Step 1144 Sim Time: 2023-07-09 23:25, Reward: -0.02, Return: -25.31, Mean Step Time: 2.32 s, Episode Time: 2658.23 s\n", + "Step 1145 Sim Time: 2023-07-09 23:30, Reward: -0.02, Return: -25.33, Mean Step Time: 2.32 s, Episode Time: 2660.41 s\n", + "Step 1146 Sim Time: 2023-07-09 23:35, Reward: -0.02, Return: -25.35, Mean Step Time: 2.32 s, Episode Time: 2662.64 s\n", + "Step 1147 Sim Time: 2023-07-09 23:40, Reward: -0.02, Return: -25.37, Mean Step Time: 2.32 s, Episode Time: 2664.84 s\n", + "Step 1148 Sim Time: 2023-07-09 23:45, Reward: -0.02, Return: -25.39, Mean Step Time: 2.32 s, Episode Time: 2667.02 s\n", + "Step 1149 Sim Time: 2023-07-09 23:50, Reward: -0.02, Return: -25.41, Mean Step Time: 2.32 s, Episode Time: 2669.11 s\n", + "Step 1150 Sim Time: 2023-07-09 23:55, Reward: -0.02, Return: -25.43, Mean Step Time: 2.32 s, Episode Time: 2671.44 s\n" + ] + }, + { + "ename": "RuntimeError", + "evalue": "Program 'ffmpeg' is not found; perhaps install ffmpeg using 'apt install ffmpeg'.", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", + "\u001b[0;31mRuntimeError\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn[12], line 3\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;66;03m# @title Optionally, execute the schedule policy on the environment\u001b[39;00m\n\u001b[1;32m 2\u001b[0m \u001b[38;5;66;03m# Optional\u001b[39;00m\n\u001b[0;32m----> 3\u001b[0m \u001b[43mcompute_avg_return\u001b[49m\u001b[43m(\u001b[49m\u001b[43meval_env\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mschedule_policy\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtime_zone\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mUS/Pacific\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrender_interval_steps\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m144\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtrajectory_observers\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m)\u001b[49m\n", "Cell \u001b[0;32mIn[7], line 57\u001b[0m, in \u001b[0;36mcompute_avg_return\u001b[0;34m(environment, policy, num_episodes, time_zone, render_interval_steps, trajectory_observers)\u001b[0m\n\u001b[1;32m 54\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m time_step\u001b[38;5;241m.\u001b[39mis_last():\n\u001b[1;32m 56\u001b[0m action_step \u001b[38;5;241m=\u001b[39m policy\u001b[38;5;241m.\u001b[39maction(time_step)\n\u001b[0;32m---> 57\u001b[0m time_step \u001b[38;5;241m=\u001b[39m \u001b[43menvironment\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mstep\u001b[49m\u001b[43m(\u001b[49m\u001b[43maction_step\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43maction\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 59\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m trajectory_observers \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 60\u001b[0m traj \u001b[38;5;241m=\u001b[39m get_trajectory(time_step, action_step)\n", - "File \u001b[0;32m~/sbsim/sbsim/.venv/lib/python3.10/site-packages/tf_agents/environments/py_environment.py:236\u001b[0m, in \u001b[0;36mPyEnvironment.step\u001b[0;34m(self, action)\u001b[0m\n\u001b[1;32m 231\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_current_time_step \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mshould_reset(\n\u001b[1;32m 232\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_current_time_step\n\u001b[1;32m 233\u001b[0m ):\n\u001b[1;32m 234\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mreset()\n\u001b[0;32m--> 236\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_current_time_step \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_step\u001b[49m\u001b[43m(\u001b[49m\u001b[43maction\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 237\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_current_time_step\n", - "File \u001b[0;32m~/sbsim/sbsim/smart_control/environment/environment.py:1297\u001b[0m, in \u001b[0;36mEnvironment._step\u001b[0;34m(self, action)\u001b[0m\n\u001b[1;32m 1291\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_metrics_writer\u001b[38;5;241m.\u001b[39mwrite_action_response(\n\u001b[1;32m 1292\u001b[0m action_response, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcurrent_simulation_timestamp\n\u001b[1;32m 1293\u001b[0m )\n\u001b[1;32m 1295\u001b[0m last_timestamp \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcurrent_simulation_timestamp\n\u001b[0;32m-> 1297\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbuilding\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mwait_time\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1299\u001b[0m observation \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_get_observation()\n\u001b[1;32m 1301\u001b[0m \u001b[38;5;66;03m# We need to signal to the Actor that action was rejected and not to\u001b[39;00m\n\u001b[1;32m 1302\u001b[0m \u001b[38;5;66;03m# append this observation/action request to the trajectory.\u001b[39;00m\n\u001b[1;32m 1303\u001b[0m \u001b[38;5;66;03m# Since TimeStep cannot be extended and it is checked for NaNs,\u001b[39;00m\n\u001b[1;32m 1304\u001b[0m \u001b[38;5;66;03m# we apply -inf as a reward to indicate the rejection.\u001b[39;00m\n\u001b[1;32m 1305\u001b[0m \u001b[38;5;66;03m# This requires a specialized Actor extension class to handle the\u001b[39;00m\n\u001b[1;32m 1306\u001b[0m \u001b[38;5;66;03m# rejection.\u001b[39;00m\n", - "File \u001b[0;32m~/sbsim/sbsim/smart_control/simulator/simulator_building.py:268\u001b[0m, in \u001b[0;36mSimulatorBuilding.wait_time\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 266\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"Returns after a certain amount of time.\"\"\"\u001b[39;00m\n\u001b[1;32m 267\u001b[0m \u001b[38;5;66;03m# Update the building state.\u001b[39;00m\n\u001b[0;32m--> 268\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_simulator\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mexecute_step_sim\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/sbsim/sbsim/smart_control/simulator/simulator_flexible_floor_plan.py:150\u001b[0m, in \u001b[0;36mSimulatorFlexibleGeometries.execute_step_sim\u001b[0;34m(self, video_filename)\u001b[0m\n\u001b[1;32m 145\u001b[0m convection_coefficient \u001b[38;5;241m=\u001b[39m (\n\u001b[1;32m 146\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_weather_controller\u001b[38;5;241m.\u001b[39mget_air_convection_coefficient(current_ts)\n\u001b[1;32m 147\u001b[0m )\n\u001b[1;32m 149\u001b[0m \u001b[38;5;66;03m# Update each control volume.\u001b[39;00m\n\u001b[0;32m--> 150\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfinite_differences_timestep\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 151\u001b[0m \u001b[43m \u001b[49m\u001b[43mambient_temperature\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mambient_temperature\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 152\u001b[0m \u001b[43m \u001b[49m\u001b[43mconvection_coefficient\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mconvection_coefficient\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 153\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 155\u001b[0m \u001b[38;5;66;03m# Simulate airflow\u001b[39;00m\n\u001b[1;32m 156\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_building\u001b[38;5;241m.\u001b[39mapply_convection()\n", - "File \u001b[0;32m~/sbsim/sbsim/smart_control/simulator/simulator.py:349\u001b[0m, in \u001b[0;36mSimulator.finite_differences_timestep\u001b[0;34m(self, ambient_temperature, convection_coefficient)\u001b[0m\n\u001b[1;32m 347\u001b[0m converged_successfully \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mFalse\u001b[39;00m\n\u001b[1;32m 348\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m iteration_count \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_iteration_limit):\n\u001b[0;32m--> 349\u001b[0m temp_estimate, max_delta \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mupdate_temperature_estimates\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 350\u001b[0m \u001b[43m \u001b[49m\u001b[43mtemp_estimate\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 351\u001b[0m \u001b[43m \u001b[49m\u001b[43mambient_temperature\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mambient_temperature\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 352\u001b[0m \u001b[43m \u001b[49m\u001b[43mconvection_coefficient\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mconvection_coefficient\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 353\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 354\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m iteration_count \u001b[38;5;241m+\u001b[39m \u001b[38;5;241m1\u001b[39m \u001b[38;5;241m==\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_iteration_warning:\n\u001b[1;32m 355\u001b[0m logging\u001b[38;5;241m.\u001b[39mwarning(\n\u001b[1;32m 356\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mStep \u001b[39m\u001b[38;5;132;01m%d\u001b[39;00m\u001b[38;5;124m, not converged in \u001b[39m\u001b[38;5;132;01m%d\u001b[39;00m\u001b[38;5;124m steps, max_delta = \u001b[39m\u001b[38;5;132;01m%3.3f\u001b[39;00m\u001b[38;5;124m'\u001b[39m,\n\u001b[1;32m 357\u001b[0m iteration_count,\n\u001b[1;32m 358\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_iteration_warning,\n\u001b[1;32m 359\u001b[0m max_delta,\n\u001b[1;32m 360\u001b[0m )\n", - "\u001b[0;31mKeyboardInterrupt\u001b[0m: " + "File \u001b[0;32m~/projects/sbsim/.venv/lib/python3.10/site-packages/tf_agents/environments/py_environment.py:236\u001b[0m, in \u001b[0;36mPyEnvironment.step\u001b[0;34m(self, action)\u001b[0m\n\u001b[1;32m 231\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_current_time_step \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mshould_reset(\n\u001b[1;32m 232\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_current_time_step\n\u001b[1;32m 233\u001b[0m ):\n\u001b[1;32m 234\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mreset()\n\u001b[0;32m--> 236\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_current_time_step \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_step\u001b[49m\u001b[43m(\u001b[49m\u001b[43maction\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 237\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_current_time_step\n", + "File \u001b[0;32m~/projects/sbsim/smart_control/environment/environment.py:1297\u001b[0m, in \u001b[0;36mEnvironment._step\u001b[0;34m(self, action)\u001b[0m\n\u001b[1;32m 1291\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_metrics_writer\u001b[38;5;241m.\u001b[39mwrite_action_response(\n\u001b[1;32m 1292\u001b[0m action_response, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcurrent_simulation_timestamp\n\u001b[1;32m 1293\u001b[0m )\n\u001b[1;32m 1295\u001b[0m last_timestamp \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcurrent_simulation_timestamp\n\u001b[0;32m-> 1297\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbuilding\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mwait_time\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1299\u001b[0m observation \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_get_observation()\n\u001b[1;32m 1301\u001b[0m \u001b[38;5;66;03m# We need to signal to the Actor that action was rejected and not to\u001b[39;00m\n\u001b[1;32m 1302\u001b[0m \u001b[38;5;66;03m# append this observation/action request to the trajectory.\u001b[39;00m\n\u001b[1;32m 1303\u001b[0m \u001b[38;5;66;03m# Since TimeStep cannot be extended and it is checked for NaNs,\u001b[39;00m\n\u001b[1;32m 1304\u001b[0m \u001b[38;5;66;03m# we apply -inf as a reward to indicate the rejection.\u001b[39;00m\n\u001b[1;32m 1305\u001b[0m \u001b[38;5;66;03m# This requires a specialized Actor extension class to handle the\u001b[39;00m\n\u001b[1;32m 1306\u001b[0m \u001b[38;5;66;03m# rejection.\u001b[39;00m\n", + "File \u001b[0;32m~/projects/sbsim/smart_control/simulator/simulator_building.py:268\u001b[0m, in \u001b[0;36mSimulatorBuilding.wait_time\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 266\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"Returns after a certain amount of time.\"\"\"\u001b[39;00m\n\u001b[1;32m 267\u001b[0m \u001b[38;5;66;03m# Update the building state.\u001b[39;00m\n\u001b[0;32m--> 268\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_simulator\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mexecute_step_sim\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/projects/sbsim/smart_control/simulator/simulator_flexible_floor_plan.py:190\u001b[0m, in \u001b[0;36mSimulatorFlexibleGeometries.execute_step_sim\u001b[0;34m(self, video_filename)\u001b[0m\n\u001b[1;32m 187\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_log_and_plotter\u001b[38;5;241m.\u001b[39mlog(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_building\u001b[38;5;241m.\u001b[39mtemp)\n\u001b[1;32m 189\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcurrent_timestamp \u001b[38;5;241m==\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_start_timestamp \u001b[38;5;241m+\u001b[39m pd\u001b[38;5;241m.\u001b[39mTimedelta(days\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m4\u001b[39m):\n\u001b[0;32m--> 190\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_video\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpath\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mconstants\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mVIDEO_PATH_ROOT\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m+\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mvideo_filename\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/projects/sbsim/smart_control/simulator/simulator_flexible_floor_plan.py:325\u001b[0m, in \u001b[0;36mSimulatorFlexibleGeometries.get_video\u001b[0;34m(self, path)\u001b[0m\n\u001b[1;32m 315\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mget_video\u001b[39m(\u001b[38;5;28mself\u001b[39m, path: \u001b[38;5;28mstr\u001b[39m) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 316\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Wraps the get_video function from the visual_logger.\u001b[39;00m\n\u001b[1;32m 317\u001b[0m \n\u001b[1;32m 318\u001b[0m \u001b[38;5;124;03m Args:\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 322\u001b[0m \u001b[38;5;124;03m None\u001b[39;00m\n\u001b[1;32m 323\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 325\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_log_and_plotter\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_video\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 326\u001b[0m \u001b[43m \u001b[49m\u001b[43mfile_path\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mpath\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfps\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m12\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mvmin\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m280\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mvmax\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m300\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcmap\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mrainbow\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\n\u001b[1;32m 327\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/projects/sbsim/smart_control/utils/visual_logger.py:88\u001b[0m, in \u001b[0;36mVisualLogger.get_video\u001b[0;34m(self, file_path, fps, vmin, vmax, cmap, alpha, wall_color, grid)\u001b[0m\n\u001b[1;32m 65\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mget_video\u001b[39m(\n\u001b[1;32m 66\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 67\u001b[0m file_path: \u001b[38;5;28mstr\u001b[39m,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 74\u001b[0m grid: \u001b[38;5;28mbool\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m,\n\u001b[1;32m 75\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 76\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Creates a video of all the logged temperatures.\u001b[39;00m\n\u001b[1;32m 77\u001b[0m \n\u001b[1;32m 78\u001b[0m \u001b[38;5;124;03m Args:\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 86\u001b[0m \u001b[38;5;124;03m grid: boolean flag. If False, walls are solid, if True, a grid pattern\u001b[39;00m\n\u001b[1;32m 87\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m---> 88\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_renderer\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_video\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 89\u001b[0m \u001b[43m \u001b[49m\u001b[43mfile_path\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mfile_path\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 90\u001b[0m \u001b[43m \u001b[49m\u001b[43mtemperature_arrays\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_temperature_arrays\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 91\u001b[0m \u001b[43m \u001b[49m\u001b[43mfps\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mfps\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 92\u001b[0m \u001b[43m \u001b[49m\u001b[43mvmin\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mvmin\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 93\u001b[0m \u001b[43m \u001b[49m\u001b[43mvmax\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mvmax\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 94\u001b[0m \u001b[43m \u001b[49m\u001b[43mcmap\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcmap\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 95\u001b[0m \u001b[43m \u001b[49m\u001b[43malpha\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43malpha\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 96\u001b[0m \u001b[43m \u001b[49m\u001b[43mwall_color\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mwall_color\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 97\u001b[0m \u001b[43m \u001b[49m\u001b[43mgrid\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mgrid\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 98\u001b[0m \u001b[43m \u001b[49m\u001b[43mtimestamps\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_timestamps\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 99\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/projects/sbsim/smart_control/utils/building_renderer.py:285\u001b[0m, in \u001b[0;36mBuildingRenderer.get_video\u001b[0;34m(self, file_path, temperature_arrays, fps, vmin, vmax, cmap, alpha, wall_color, grid, timestamps)\u001b[0m\n\u001b[1;32m 258\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mget_video\u001b[39m(\n\u001b[1;32m 259\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 260\u001b[0m file_path: \u001b[38;5;28mstr\u001b[39m,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 269\u001b[0m timestamps: Optional[List[pd\u001b[38;5;241m.\u001b[39mTimestamp]] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 270\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 271\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Creates a video of all the logged temperatures.\u001b[39;00m\n\u001b[1;32m 272\u001b[0m \n\u001b[1;32m 273\u001b[0m \u001b[38;5;124;03m Args:\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 283\u001b[0m \u001b[38;5;124;03m timestamps: optional list of timestamps to render\u001b[39;00m\n\u001b[1;32m 284\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 285\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m media\u001b[38;5;241m.\u001b[39mVideoWriter(\n\u001b[1;32m 286\u001b[0m file_path, shape\u001b[38;5;241m=\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_mask\u001b[38;5;241m.\u001b[39msize[\u001b[38;5;241m1\u001b[39m], \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_mask\u001b[38;5;241m.\u001b[39msize[\u001b[38;5;241m0\u001b[39m]), fps\u001b[38;5;241m=\u001b[39mfps\n\u001b[1;32m 287\u001b[0m ) \u001b[38;5;28;01mas\u001b[39;00m w:\n\u001b[1;32m 288\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m idx, temperature_array \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28menumerate\u001b[39m(temperature_arrays):\n\u001b[1;32m 289\u001b[0m ts \u001b[38;5;241m=\u001b[39m timestamps[idx] \u001b[38;5;28;01mif\u001b[39;00m timestamps \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n", + "File \u001b[0;32m~/projects/sbsim/.venv/lib/python3.10/site-packages/mediapy/__init__.py:1571\u001b[0m, in \u001b[0;36mVideoWriter.__enter__\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 1570\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m__enter__\u001b[39m(\u001b[38;5;28mself\u001b[39m) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mVideoWriter\u001b[39m\u001b[38;5;124m'\u001b[39m:\n\u001b[0;32m-> 1571\u001b[0m ffmpeg_path \u001b[38;5;241m=\u001b[39m \u001b[43m_get_ffmpeg_path\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1572\u001b[0m input_pix_fmt \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_get_pix_fmt(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdtype, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39minput_format)\n\u001b[1;32m 1573\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n", + "File \u001b[0;32m~/projects/sbsim/.venv/lib/python3.10/site-packages/mediapy/__init__.py:1170\u001b[0m, in \u001b[0;36m_get_ffmpeg_path\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1168\u001b[0m path \u001b[38;5;241m=\u001b[39m _search_for_ffmpeg_path()\n\u001b[1;32m 1169\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m path:\n\u001b[0;32m-> 1170\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mRuntimeError\u001b[39;00m(\n\u001b[1;32m 1171\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mProgram \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m{\u001b[39;00m_config\u001b[38;5;241m.\u001b[39mffmpeg_name_or_path\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m is not found;\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 1172\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m perhaps install ffmpeg using \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mapt install ffmpeg\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 1173\u001b[0m )\n\u001b[1;32m 1174\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m path\n", + "\u001b[0;31mRuntimeError\u001b[0m: Program 'ffmpeg' is not found; perhaps install ffmpeg using 'apt install ffmpeg'." ] } ], @@ -1715,7 +1870,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 12, "metadata": { "cellView": "form", "id": "zBjFBpkabFHR" @@ -1842,7 +1997,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 13, "metadata": { "cellView": "form", "id": "CeVkerwYcng2" @@ -1890,7 +2045,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 14, "metadata": { "cellView": "form", "id": "NW0pzLvjbSnP" @@ -1952,7 +2107,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 15, "metadata": { "cellView": "form", "id": "vX2zGUWJGWAl" @@ -1962,18 +2117,107 @@ "name": "stdout", "output_type": "stream", "text": [ - "reverb_checkpoint_dir=/home/trigo/sbsim/sbsim/output/reverb_checkpoint\n", - "reverb_server_port=40929\n", - "num_frames in replay buffer=0\n" + "reverb_checkpoint_dir=/home/gabriel-user/projects/sbsim/smart_control/output_data/reverb_checkpoint\n", + "reverb_server_port=41997\n", + "num_frames in replay buffer=4030\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "[reverb/cc/platform/tfrecord_checkpointer.cc:162] Initializing TFRecordCheckpointer in /home/trigo/sbsim/sbsim/output/reverb_checkpoint.\n", - "[reverb/cc/platform/tfrecord_checkpointer.cc:565] Loading latest checkpoint from /home/trigo/sbsim/sbsim/output/reverb_checkpoint\n", - "[reverb/cc/platform/default/server.cc:71] Started replay server on port 40929\n" + "[reverb/cc/platform/tfrecord_checkpointer.cc:162] Initializing TFRecordCheckpointer in /home/gabriel-user/projects/sbsim/smart_control/output_data/reverb_checkpoint.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:565] Loading latest checkpoint from /home/gabriel-user/projects/sbsim/smart_control/output_data/reverb_checkpoint\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:286] Loading checkpoint from /home/gabriel-user/projects/sbsim/smart_control/output_data/reverb_checkpoint/2025-01-19T14:52:48.90926213-05:00\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:295] Loading and verifying metadata of the checkpointed tables.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:341] Metadata for table 'uniform_table' was successfully loaded and verified.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:404] Successfully loaded and verified metadata for all (1) tables. We'll now proceed to read the data referenced by the items in the table.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 1 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 101 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 201 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 301 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 401 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 501 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 601 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 701 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 801 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 901 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 1001 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 1101 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 1201 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 1301 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 1401 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 1501 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 1601 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 1701 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 1801 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 1901 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 2001 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 2101 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 2201 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 2301 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 2401 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 2501 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 2601 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 2701 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 2801 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 2901 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 3001 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 3101 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 3201 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 3301 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 3401 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 3501 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 3601 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 3701 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 3801 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 3901 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 4001 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 4101 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 4201 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 4301 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 4401 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 4501 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 4601 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 4701 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 4801 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 4901 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 5001 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 5101 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 5201 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 5301 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 5401 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 5501 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 5601 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 5701 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 5801 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 5901 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 6001 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 6101 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 6201 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 6301 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 6401 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 6501 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 6601 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 6701 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 6801 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 6901 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 7001 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 7101 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 7201 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 7301 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 7401 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 7501 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 7601 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 7701 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 7801 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 7901 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 8001 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:447] Still reading compressed trajectory data. 8101 records have been read so far.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:457] Completed reading compressed trajectory data. We'll now start assembling the checkpointed tables.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:534] Table uniform_table and 4030 items have been successfully loaded from checkpoint at path /home/gabriel-user/projects/sbsim/smart_control/output_data/reverb_checkpoint/2025-01-19T14:52:48.90926213-05:00.\n", + "[reverb/cc/platform/tfrecord_checkpointer.cc:540] Successfully loaded 1 tables from /home/gabriel-user/projects/sbsim/smart_control/output_data/reverb_checkpoint/2025-01-19T14:52:48.90926213-05:00\n", + "[reverb/cc/platform/default/server.cc:71] Started replay server on port 41997\n" ] } ], @@ -2022,7 +2266,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 16, "metadata": { "cellView": "form", "id": "BwY7StuMkuV4" @@ -2047,7 +2291,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 17, "metadata": { "cellView": "form", "id": "dJ_EMQkZdw8q" @@ -2193,7 +2437,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 18, "metadata": { "cellView": "form", "id": "ZGq3SY0kKwsa" @@ -2203,104 +2447,10 @@ "name": "stdout", "output_type": "stream", "text": [ - "Cumulative reward: -57.74\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/tmp/ipykernel_103100/713712357.py:203: UserWarning: No artists with labels found to put in legend. Note that artists whose label start with an underscore are ignored when legend() is called with no argument.\n", - " ax1.legend(prop={'size': 10})\n" - ] - }, - { - "data": { - "image/png": "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YrGY1157LVLn9XpNbm6u+de//hUz2VhSUmImT55sOnXqZNLS0kzv3r3NtGnTIkm0SpXvdV588UXTr18/k5aWZvr27Wtef/31OsdXn/cfsey1116me/fuMesmT55c44qwtX22b+jnBD77tAzETtPHzs5a4mcfrlEPNBN33HGHXnzxRV155ZWaMmWKPv30U5122mlJ6//bb79VIBDQvvvuG1WelpamQYMGacmSJTVu6/f79dxzz+nggw9Wt27dqtW/9tprGjJkiPLz8yVJS5YsUUZGhvbaa6+odvvvv3+kXpKKi4v1+eefa7/99tO1116rnJwcZWZmao899tBzzz3XkMONizFGGzZsUF5eXlT5iy++qL322ksvvvhipKxyzDv//Dp06KBOnTpF/fyWLFmiwYMHy2qN/hO8//77q6ysTCtXrkz2oexWioqKtHnz5qhbVVOnTtWrr76qK6+8UrfffrvS0tLi7nvJkiXq3bu3srOzo8orX7tLly6tcdtnnnlGoVAoZtyuX79eS5YsiVzjZ82aNdq4cWO111PlvmqLR0maM2eOOnfurEMPPbSuQ4r79Vif1/iaNWu01157acqUKVFl8R5TvH8jkFzETv1ip6HWr18vSdX+xxx22GE67LDDosoaI05Rf127dtWXX36pZcuW1dl25syZ6tq1q6699lr961//UufOnXXRRRdpxowZkTb33nuvOnXqpD59+mj27NmaPXu2rrvuuhr7bMjvd9OmTVq0aJFGjx6tjIyMavWvvfaajjjiCNnt9si+4onZymsdPvHEE5ozZ45Wr16tb775RhMnTlRubq4mTZpUy0+p5mMaMmSIrFZrpD4UCumbb76pMbZ//vlnbd++PVJ2xhlnVPsfEu8xNeQ9MWIjdpIfOw1VUlKikpKSav+Dpk+frr322ivqmseNFaeIrT7xUl8nn3yytm/frn/84x86+eST9cQTT+iWW26pdZuG/l7nzJkjt9utk046qVrdm2++KYvFoiOPPFJS/LHq9XolheNoZ+np6Vq7dm3kfVYsjfW5hO8JUovYafzYSYb169crPT1d6enpkTK+P0itbt266aCDDtLcuXMjZa+//rqKioo0YcKEau2NMRo1apTuueceHX300br77ru155576qqrrtLkyZOrtf/www910UUXacKECbrrrrtUXl6usWPHasuWLbWOK973HzVtu3z5cp166qkx61977bXIdwj10dDPCXz2aVmInfil+nXWHD772ONuCSClysvLtXTp0khiJDc3V5dddpmWLVum/v37N7j/devWSZIKCgqq1RUUFOiDDz6ocds333xTW7ZsqXHiwGuvvaazzjoral/5+fmyWCzV9iNJa9eulST9/PPPMsbomWeekd1u11133aWcnBzdd999mjBhgrKzs3X00UfX70DrYc6cOVqzZo1uvfXWOtvW9fOrPKbKtrGSQFWPf8CAAYkOe7d3+OGHVyszxkQel5eX64svvoj54bQu69atq/F3LCnq97yzOXPmqKCgQCNHjqxW99prr8nlckXq6no9bd26VV6vV06ns1r9d999p2+++UZ///vfq8VYTccUz+uxPq/xmvYT7zHF+zcCyUXs1C92GsLn8+nee+9V9+7dtd9++9XZvqniFLW78sordcwxx2jQoEHaf//9NXToUB122GEaMWKEHA5HVNv3338/Klb++te/Rj6MX3zxxZKk0aNH6/rrr1deXp5OP/30OvffkN/vs88+q0AgEPO9WllZmd577z3NnDkzal/xxux//vMfnXLKKVHHsMcee+ijjz7SHnvsUecx2Ww2tWvXLqo8LS1Nbdq0ieynMnbrGtOee+5Z677iOaaGvCdGbMRO8mOnoe699175fD6dcsopdbZtyjhF/eKlvvbZZx899thjkedbtmzRY489pjvvvLPGbRrye926daveeOMNjR49WllZWdXqX331Vf3pT39STk6OpPhjNT8/X61atdJHH30U1WbLli36/vvvJYWTfO3bt495TE35uYTvCZoOsdP4sdNQP/30k+bPn6/x48fLZrPV2pbvD5rWqaeeqilTpsjj8cjtdmvOnDkaNmyYOnToUK3tggUL9M477+i2226LTJS8+OKLNX78eN13333661//qh49ekTaL1++XN9//32kbMSIEdp77701d+5c/fWvf61xTPG+/4hlzpw5khTz/duvv/6qFStWRL1/i1dDPyfw2aflIXbik+rXWXP47MMZ9UAzcdZZZ0WdvTh06FBJ0i+//JKU/j0ejyTFTF64XK5IfSxPP/20HA6HTj755Gp1y5Yt0+rVq3XcccdF7aum/VQdS0lJiaTwh4aXX35ZF154oU499VS9/fbbatOmjW677bZ6HGH9rFixQhdffLEOOuggnXnmmVF1EydOlDFGEydOjJTV5+cX7/EjMTNmzNCiRYuiblWdeeaZCSUapcR/dytXrtSXX36pCRMmVDtDQgonG0eMGBEZV12vp9r2VdubqljiPab6vMa7desmY4yeeOKJqP3Utv3O+yJGmh6xU7/YaYi//vWv+v777zV9+vTIWZiVVq1apVWrVkWVNUacov6OOOIIffLJJxo1apS+/vpr3XXXXTrqqKPUsWNHLViwIKpt1VipXK1i2LBh+uWXX1RUVJTQ/hv6Xq1t27Y64ogjqtW988478nq9OuaYY6L2FW8cZWVlqV+/frr44os1f/58/fvf/1YgENDo0aOrrcwR65hqWp2j6jHVN7bfe++9qIlG9Tkm4ij5iJ3kx05DLF68WLfccotOPvnkapPgbr75ZhljNHz48EhZY8UpYqtPvNTXBRdcEPV86NCh2rJli4qLi2vcpiG/1+eff14+ny/me6tQKKQ33nij2vcEte2rst5qter888/X22+/rSlTpujHH3/Ul19+qZNPPlk+n6/WMdX3mOoT03xPkFrETuPHTkOUlZVp/PjxcrvduuOOO6Lq+P4g9U4++WR5PB4tXLhQ27dv18KFC2s9o9Zms+nSSy+NKr/iiitkjNHrr78eVX744YdHJR8HDhyo7OzsOr/Pjvf9x85CoZCeeeYZ7bPPPtXOMpfCE11ycnJ0yCGH1Lr/msYkJf45gc8+LQ+xE59Uvs6ay2cfEvVAM9GlS5eo57m5uZKkbdu2JaX/yi/FKpfCqqq8vLzG5ExJSYlefvllHXXUUWrTpk21+ldffVX5+flRy4C43e4a91N1LJX33bt31wEHHBBpl5mZqRNOOEGff/65AoFAvIcYt/Xr1+u4445TTk6Onn/++Tpn+lYdazw/v3iPH4nZf//9dfjhh0fdqurevXvCfSf6u6stAej3+7Vo0aKoD9p1vZ5q2pcxRk8//bT69++vgQMH1nU4kX7qE4/1/RtRdT+1bb/zvoiRpkfs1C92EjVt2jQ98sgjmjp1atxLhjVVnKJu++23n+bPn69t27bp888/15QpU7R9+3aNGzcuciaSJH300Uc6/PDDlZGRoVatWqlt27a69tprJSnhZGOiv99ffvlFn3zyiU455ZRqE0Ok8Hu1fffdN3KJosp9xfOaCwQCOvzww5WTk6Pp06drzJgxuvDCC/XWW2/p559/1rRp0+o8psovhms7pkRje+d9EUepQ+wkN3YStWLFCo0ZM0b9+/fXo48+Gtc2TRmnCIs3Xuorke8UGvJ7nTNnjlq3bh01maXS//73P23atKle7+Oq7ufWW2/VOeeco7vuuku9e/fWvvvuK7vdrnPOOUdS+DuDZBxTQz+X8D1B0yJ2Gjd2EhUMBjVhwgR9//33ev7552Oeabozvj9oWm3bttXhhx+up59+WvPnz1cwGNS4ceNitv3tt9/UoUOHaqs9VCb2fvvtt6jyneNHCsdQXd9nx/v+Y2fvv/++1qxZU+ME/FdffVVHHnlkzPd2dUnG92J89mlZiJ34pOp11pw++5CoB5qJmpLFVWfM1bRUbzAYrLP/yiU5KpciqWrdunU1vpF+6aWXVFZWVuuy90cffXTU2AoKCrR+/fpqs/0q9125r8r7ql9+VWrXrp38fr9KS0vrOrR6KSoq0jHHHKPCwkK98cYbcX2AkOr38ysoKKixnaS494nENOSff6K/u6efflp77rmnhgwZUq3uww8/VHFxcVTCrq7XU+vWrWPO2Pvoo4/022+/1euM4HiPKdG/EVX3U9v2VY8p3r8RaFrETsM98cQTuvrqq3XBBRfo+uuvj3u7popTxC8tLU377befbr/9ds2cOVN+v1/z5s2TFL50z2GHHabNmzfr7rvv1quvvqpFixbpb3/7m6TwTPVEJPr7ffrppyXVvFpErOvMxfuaW7x4sZYtW6ZRo0ZFtevVq5f22muvakur7qygoEDBYFAbN26MKvf5fNqyZUtkP5Wx25D3T8TRroHYSU7sJOL333/XkUceqZycHL322msxl1OOpSnjFNFqi5dEPvvH853CzhL9va5evVoffPCBxo8fH3PZ8ddee03dunVT3759I2X1idW0tDQ9+uijWrt2rRYvXqwffvhBb775poqKimS1WtWzZ88aj6kpP5fwPUFqEDvR+0pW7CTqvPPO08KFC/XEE0/EvJxZLHx/0PROPfVUvf7663rwwQd1zDHHqFWrVknpN5H4keJ//7GzOXPmyGq16s9//nO1usrLFiVyje3KMUkN+16Mzz4tD7FTt1S8zprbZx8S9UALkpubq8LCwmrlO8/IiqV///6y2+364osvosp9Pp+WLl2qQYMGxdxuzpw5yszMrPYlkyQVFhbq448/jprpK0mDBg1SWVmZli9fHlX+2WefReql8B+z9u3ba82aNdX6Xrt2rVwuV9x/ZONRXl6uE044QStXrtTChQujPvjUpXLMO//81q5dqz/++CPq5zdo0CB99dVX1b5s/Oyzz5Senq7evXsnfAxoXIMGDdLKlSurLXG382t357qffvqp1hmJffv2Vbdu3SJlHTt2VNu2bau9niTp888/rzUeLRZLjcssxRLv67E+r/FY6nNM8f6NQPPREmOnvl5++WWde+65OumkkzRjxox6bdtUcYrEVK4aVPlh7JVXXpHX69WCBQt0/vnn69hjj9Xhhx8ec7JLTV8Wx5Lo7/fpp59Wjx49dOCBB1ari3WJosp9xROzGzZskBT7y22/31/nykc1HdMXX3yhUCgUqbdarRowYEDM2P7ss8+0xx571PmeMN5jSvQ9MeqP2Ek8dupry5YtOvLII+X1evXmm2/GvJZiTZoyTlGzneOl8ozenT//x/PZvz4S/b3OnTtXxpha38ft/GVvIrGan5+voUOHqnfv3goGg3rvvfd0wAEH1HpWcFN+LuF7gtQjdpIXO4m46qqrNGvWLN1zzz0xkz814fuDpjdmzBhZrVZ9+umntX4u7tq1q9auXavt27dHla9YsSJSnwzxvv+oyuv16oUXXtDw4cNjJshiXbaoPhr6OYHPPi0TsVO3pn6dNcfPPiTqgRakR48e+vTTT6OW51i4cKF+//33OrfNycnR4Ycfrv/85z9R/zBmz56tkpISjR8/vto2mzZt0ltvvaUxY8YoPT29Wv1///tfSdKRRx4ZVX7iiSfK4XDo3//+d6TMGKMHH3xQHTt21MEHHxwpP+WUU/T7779HXSt58+bNevnllzVy5MiY1yxORDAY1CmnnKJPPvlE8+bN00EHHVRj26KiIq1YsSJq+c1+/fqpT58+evjhh6O+cJs5c6YsFkvUsjfjxo3Thg0bNH/+/Khjmjdvnk444YSYZ3ti1zBu3DgFg0E9/PDDkTKv16tZs2bpgAMOUOfOnattU3k2Vm3XKNr5S15JGjt2bLX4ffvtt7Vy5cqY8Vh5lsAhhxwSc3mk2o4pntdjfV7jfr9fK1asqDarMN5jqs/fCDQPLTF26mPx4sWaMGGCDj300Mgs5Zr8/PPP+vnnn6PKGiNOUX/vvvtuzNnrr732miRpzz33lLRj5nvVtkVFRZo1a1a1bTMyMmJOsowlkd/vkiVLtHz58lrjaOdLFEnxx2xl0uCZZ56J2v6rr77SDz/8oH322afWYxo5cqRat26tmTNnRpXPnDlT6enpUTE+btw4/e9//4v6IPzDDz/onXfeqRbbq1evjnzhUd9jSuQ9MWpH7CQ/duqjtLRUxx57rNasWaPXXntNvXr1qrHt5s2btWLFCpWVlUXKGitOEVu88ZKdna28vDwtXrw4ql3V98/Jksjv9emnn1aXLl1iXsd0w4YN+uqrr6q9j2vo+5h//vOfWrduna644oo6j6kxPpfwPUFqETtNEzv1MW3aNP3zn//Utddeq8suu6zGdnx/sGvIzMzUzJkzdfPNN+uEE06osd2xxx6rYDCo6dOnR5Xfc889slgsCSfydlaf9x+VXnvtNRUWFta6GtLOly2qj4Z+TuCzT8tE7NStKV9nzfazjwGQchdffLGpKRzfffddI8nMmzcvqvzXX381ksysWbMiZW+88YaRZEaMGGFmzpxprrzyStO+fXvTo0cPM2zYsDrH8eWXXxqn02n22WcfM3PmTHPdddcZl8tljjzyyJjtH3jgASPJvPHGGzHrzzjjDDN8+PCYdVdddZWRZCZNmmQeeeQRc9xxxxlJZs6cOVHt1q9fbwoKCkxWVpa56aabzN1332169+5t3G63Wbp0aZ3H9P7775upU6eaqVOnmnbt2plu3bpFnr///vuRdpdddpmRZE444QQze/bsareqZs2aVe1nb4wxr7zyirFYLGbkyJHm4YcfNpdeeqmxWq3mvPPOi2oXCATMgQceaDIzM80tt9xiZsyYYfr162eysrLMihUr6jwmxFb5e/nf//4Xs76mWKpa9+6779a5n/Hjxxu73W6uuuoq89BDD5mDDz7Y2O32qNdTpUAgYPLz882BBx4Ys69ffvnFSDLvvfdetbrVq1ebNm3amB49epj777/f3H777SY3N9cMGDDAlJeXV2v/yiuvGEnmwQcfrPMYdh5jvK/HeF/jlX+fzjzzzISPKd6/EWg4Yiex2DHGRP6fTJgwwUgyZ599dqSs0qpVq0xOTo5xu91mxowZ1f6/fP3111F9du3a1XTt2rXazyPZcYr669evn+nevbuZPHmyefjhh8306dPNqaeeamw2m+nWrZvZtm2bMcaYFStWmLS0NDNgwAAzffp0c8cdd5gePXqYvffe20gyv/76a6TPiy66yFgsFjN16lQz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a8+ePZQuXdr6vGHDhgAcOHDAru7Bgwedzs4XEREREREREREREREROT8ZsjKTycpMJiPFuy1bLL72FwCcldT3sSb9Q+0uAPA5u651BYB/LwzwD8HH54JKYYp45KJ/lR87dswmIQ+wZs0atm3bxoMPPmgtq1mzJldffTUrVqwgPj6e6OhoAD755BP27dvHAw88UKTjFhERERERERERERERETlfGZNFVvppsgphCXSLT0BO8v7sRP6///exJvVDbRL8ORcHhNjvd9YFAH7+oV4fq4inLvpE/bXXXkv9+vVp1KgRERERbN++nQULFhAbG8u4ceNs6s6cOZP27dtz3XXXMWTIEE6ePMmMGTOoUaMG99xzTzEdgYiIiIiIiIiIiIiIiMilw2Snk5mWTmbaSa+37eMX5CCRH3rWBQBnrxIQjK/fubcF+G+FANvbAtjfx10kLxd9ov6WW25h9erVfPLJJyQnJxMTE8OgQYOYMGGC3f3oW7duzccff8zjjz/OuHHjCAkJ4aabbmLatGmEhYUV0xGIiIiIiIiIiIiIiIiIiDdkZ6aSnZlKBgnebdjiY3MLgNwZ/NZbANhcBBD8720DQl24ACAYH98A745VzgsXfaJ+ypQpTJkyxeX67dq1o127doU4IhERERERERERERERERG5qJhssjKSyMpI8nrTFh///5L4dkl/2xUAcrbb3xbA2W0DLD6+Xh+vuOaiT9SLiIiIiIiIiIiIiIiIiFyoTHYGmekZZKaf8nrbPr6B/87id7Tsv/PbAgQFBXt9LJcaJepFRERERERERERERERERC5B2VlpZGelAYlu7XfuLcbFfT7FPQAREREREREREREREREREZFLiRL1IiIiIiIiIiIiIiIiIiIiRUiJehERERERERERERERERERkSKkRH0hMMYU9xBELijZ2dmkpqaSnZ1d3EMRuaAodkQ8o9gRcZ/iRsQzih0Rzyh2RDyj2BHxjGJHxDO5MaO8qOcsRt89r9u/fz+xsbHFPQwRERERERERERERERERkUKzb98+KlasWNzDuCApUV8IsrOzOXjwIOHh4VgsluIejoiIiIiIiIiIiIiIiIiI1xhjOH36NOXLl8fHR4u4e0KJehERERERERERERERERERkSKkyxtERERERERERERERERERESKkBL1IiIiIiIiIiIiIiIiIiIiRUiJehERERERERERERERERERkSLk50qlBx8sWCcPPADVqxesDRERERERERERERERERERkYuBxRhj8qvkU4B59xYLrFsHbdp43oaIiIiIiIiIiIiIiIiIiMjFwuUU/BtvQHa2e4+jRyH/ywBEREREREREREREREREREQuHS4l6iMiICDA/cZ9fXP29fd3f18REREREREREREREREREZGLkUtL34uIiIiIiIiIiIiIiIiIiIh3FODu8yIiIiIiIiIiIiIiIiIiIuIuv4I2kJQEiYmO70V/2WUFbV1EREREREREREREREREROTi4lGiPjUVJk2C116DhATn9bKyPB2WiIiIiIiIiIiIiIiIiIjIxcmjRP2998LixXDTTdC8OURGenlUImK1ceNGWrduzbvvvkvPnj2LezgiF6XcONuwYQOtWrUq7uGIXBAUNyIiIiIiIiIiIiKe8+ge9e+/D3ffDe+9Bw89BP36OX6IiGMWi8Wlx8aNG4t8bF9//TXXXXcdISEhlCtXjgcffJCkpCSbOv37989z3AcOHLBr96WXXiIiIoKMjAwAsrOzmTZtGlWqVCEoKIi6devy1ltvORxTdnY2s2fPpl69egQHBxMVFUWbNm344Ycf8j2ed955h9tvv53q1atjsVicJpO2bNnC/fffT506dQgNDeWyyy6jd+/e7Nq1K98+zhYXF0eDBg0ICgrisssuY8KECWRmZtrVO3HiBIMHD6Z06dKEhobSunVrtm/f7lZfYmvRokVOX5NjxozxWj9paWk88sgjlC9fnuDgYJo2bcq6dets6uzduzfPGBk0aJBdu9nZ2ZQuXZpp06ZZy3bu3MkNN9xAWFgYpUqV4o477uDYsWM2+02cODHPvr766qt8j8md16Orr3FnXDmm3O+Hq78jxHOKG8/i5tChQ4wZM4bWrVsTHh7u9G92cnIyL7/8Mh06dCAmJobw8HDq16/P7NmzyXJj6amijFFx7qeffqJnz55UqlSJoKAgKlSoQPv27XnppZc8au+VV15h0aJFbu3jys+3VatWTl/b/v7+DtsdOXIktWvXtj53JWYhJwbnzJlDvXr1CAsLo2zZsnTs2JGvv/7a5WN67bXXqFWrFkFBQVSvXt3p9/PAgQP07t2bkiVLUqJECbp168aePXtc7sfVYwLX3g+L6xQ73o+d2bNn06tXLy677DIsFgv9+/d3WO/TTz/lrrvuokaNGoSEhHD55Zdz9913c+jQIZf6yVVUcSrejxdvcOXnmtd7SovFwtKlS+3a/emnn7BYLGzevNla5ur7mHXr1ll/T0dGRtKzZ0/27t3r8jEV5TmJPiMoGoqdwo+dzZs3c++999KwYUP8/f2xWCwO6+3bt49JkybRpEkTIiMjiY6OplWrVqxfv96lfnLps4PCc/brbtOmTXbbjTHExsZisVjo0qVLMYwwhyvvPypXruw0fqpXr+6w3R49etCpUyfA9XP7XAU9T9C5z4VLcVM8cXPJnPcYD5QsacycOZ7sKSLGGLNkyRKbR/v27Q1gV3748GGzYcMGA5h333230Me1Y8cOExQUZOrXr29mz55tHn30URMYGGhuuOEGm3pff/213Vhff/11ExISYmrXru2w7euvv9707NnT+nzMmDEGMIMGDTLz5s0znTt3NoB566237Pbt16+f8fPzM3fddZeZP3++ef75502/fv3MJ598ku8xtWzZ0oSFhZnWrVubyMhI07JlS4f1evToYcqVK2ceeOABM3/+fDN58mRTtmxZExoaan766ad8+zHGmDVr1hiLxWJat25t5s2bZx544AHj4+Njhg4dalMvKyvLXHvttSY0NNRMnDjRzJo1y9SuXduEh4ebXbt2udSX2Fu4cKEBzBNPPGH3+tyxY0ee+2ZlZZmUlBSTlZWVbz99+vQxfn5+ZtSoUWbu3LmmWbNmxs/Pz3z55ZfWOklJSXZjWLJkibntttsMYJYtW2bX7jfffGMA8/PPPxtjjNm3b5+Jjo42VatWNS+88IJ58sknTWRkpLn66qtNWlqadb8ffvjBYV+xsbEmMjLSpq6zY3f19ejqa9wZV4/JGPd+R4jnFDeexU3u3+bq1aubZs2aGcBs2LDBrt5PP/1kLBaLadeunZk2bZqZM2eOufnmmw1g7rzzzny/b8YUbYyKc1999ZUJCAgw1apVM5MnTzbz588348ePNx06dDBVq1b1qM06deo4fV/iiKs/308++cTutT1nzhwDmE6dOjlsu2bNmmbUqFHW567ErDHGjBgxwgDm9ttvN3PnzjXPPPOMufzyy42fn5/57rvv8j2m3HH16NHDzJs3z9xxxx0GME8//bRNvdOnT5vq1aubMmXKmGeeecbMmDHDxMbGmooVK5r4+HiXvn+uHpOr74fFNYqdwomdSpUq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9erVY9euXXbL3J372j13259//pnnlYm1a9emcuXK1rIKFSpQunRpu9cTwObNm/OMR4vF4nS5JUdcfT268xp3xJ1jcvV3hFwYLsa4cdeKFSu4++676d69Oy+//LJb+xZVjIpnclcMyj0hW7lyJWlpacTFxTFkyBA6depEu3btHF7s4uzDYkc8/fm++eabVK1alWuuucZum6PbE+X25UrMHjlyBHD84XZGRka+qx45O6atW7eSnZ1t3e7j48NVV13lMLa/++47Lr/88nzfD7p6TJ6+Hxb3KXY8jx13JSQk0KFDB9LS0li7dq3D+yk6U5RxKs6dGy+5M3rPPfd35bzfHZ7+XN966y2MMXm+jzv3A19PYrVs2bI0b96cGjVqkJWVxcaNG2natGmes4KL8pxEnxEUP8WO92LHEw8//DALFy5k5syZDhNAzuizg6J388034+Pjw7fffpvneXGlSpU4ePAgp0+ftin/7d+kUKVKlbwyHlfff5wtLS2N9957j1atWjlMkjm6bZE7CnqeoHOfi4/iJn9F/Rq7kM97XE7U33XXf8n4o0fhww9hxAgoWxbefhsGD4Y6daBMGbjpJnjuObfHIiIFVLVqVb799lubZTpWrVrFvn378t03IiKCdu3a8cYbb9j84ViyZAlJSUn06tXLbp9jx46xfv16br75ZkJCQuy2f/LJJwB06NDBprxbt274+/vzyiuvWMuMMcyZM4cKFSpw7bXXWstvueUW9u3bZ3O/5Pj4eFasWEGbNm0c3rfYE1lZWdxyyy188803vPvuuzRr1sxp3ZMnT/Lbb7/ZLMFZp04drrjiCubNm2fzodvs2bOxWCw2y9/07NmTI0eO8P7779sc07vvvsuNN97ocMannB969uxJVlYW8+bNs5alpaWxcOFCmjZtSmxsrN0+uTOy8rpX0bkf9AL06NHDLn4//fRTdu3a5TAec2cKXHfddQ6XScrrmFx5PbrzGs/IyOC3336zu7rQ1WNy53eEnP8uxrhxxxdffEGfPn1o0aKF9UplZ3bv3s3u3bttygojRsV9GzZscHgF+5o1awCoWbMm8N/V72fXPXnyJAsXLrTbNzQ01OEFlo548vPdsWMHO3fuzDOOzr09Ebges7lJg7fffttm/+3bt/P7779Tv379PI+pTZs2lCpVitmzZ9uUz549m5CQEJsY79mzJ1u2bLE5Gf7999/57LPP7GL7n3/+sX7o4e4xefJ+WPKm2PF+7LjjzJkzdOrUiQMHDrBmzRqqV6/utG58fDy//fYbycnJ1rLCilNxzNV4KVGiBNHR0XzxxRc29c5+7+wtnvxc33zzTS677DKH9zI9cuQI27dvt3sfV9D3Mc8++yyHDh1i5MiR+R5TYZyT6DOC4qXYKZrYccf06dN59tlnGTduHMOGDXNaT58dnB/CwsKYPXs2EydO5MYbb3Rar1OnTmRlZTFr1iyb8pkzZ2KxWDxO5p3LnfcfudasWcOJEyfyXA3p3NsWuaOg5wk697n4KG7yV5SvsQv+vMd4QWqqMV9+aczTTxvTrJkxFosxPj7eaFnk0nDfffcZZ+G4YcMGA5h3333Xpvyvv/4ygFm4cKG17OOPPzaAad26tZk9e7YZNWqUKVeunKlatapp2bJlvuPYtm2bCQwMNPXr1zezZ882jz76qAkKCjIdOnRwWP+ll14ygPn4448dbr/zzjtNq1atHG57+OGHDWAGDx5s5s+fbzp37mwAs3TpUpt6hw8fNjExMSY8PNxMmDDBzJgxw9SoUcMEBweb77//Pt9j+vzzz83kyZPN5MmTTZkyZUzlypWtzz///HNrvWHDhhnA3HjjjWbJkiV2j7MtXLjQ7ntvjDErV640FovFtGnTxsybN888+OCDxsfHxwwaNMimXmZmprnmmmtMWFiYmTRpknn55ZdNnTp1THh4uPntt9/yPSZxLPfnsmXLFofbncXS2ds2bNiQbz+9evUyfn5+5uGHHzZz58411157rfHz87N5PeXKzMw0ZcuWNddcc43Dtvbs2WMAs3HjRrtt//zzj4mKijJVq1Y1L774opk6daqJjIw0V111lUlNTbWrv3LlSgOYOXPm5HsM547R1dejq6/x3N9P/fr18/iYXP0dIQWjuPEsbowx1r8lffr0MYC56667rGW59u7dayIiIkxwcLB5+eWX7f62/PDDDzZtVqpUyVSqVMnu++HtGBX31alTx1SpUsWMGDHCzJs3z8yaNcvceuutxtfX11SuXNkkJiYaY4z57bffTEBAgLnqqqvMrFmzzNNPP22qVq1qrr76agOYv/76y9rmvffeaywWi5k8ebJ56623zKeffprnGNz9+Y4cOdIATt9btGjRwvTv39/hNldjtn379gYwN998s5k9e7YZP368iYyMNKGhoS69p3n55ZcNYHr27Gnmz59v7rzzTgOYJ5980qbeqVOnTNWqVU2ZMmXMtGnTzMyZM01sbKwpX768OXr0qE3dli1bOnxf7eoxuft+WPKm2Cmc2ImLi7P+zQkICDD169e3Pj/7b0u3bt2sf6PO/Rv0wQcf2LQ5YcIEh3/XCyNOxTFX48UYY8aMGWMAM3DgQDN79mzTt29f07BhQwOYCRMmWOvl/lyPHTtm01fue8CzY8sRd3+uP/30kwHMmDFjHLa3YMECExwcbJKTk+22uRqrS5YsMTfddJOZMWOGmTdvnundu7cBzN13353nseQqjHMSfUZQvBQ7RRM7e/futf6tadq0qQGsz19//XVrvffff98Apnr16g4/Xzt8+LC1rj47KB75fQ6Qq1KlSqZz587W51lZWaZ169bGYrGYwYMHm5dfftn6XuOhhx6y2Rcw9913n8M2z/15O+Lq+49cPXr0MIGBgebEiRNOj2XixIkOt7lybm9Mwc8TdO5zYVPc2CqquLlUznsKnKj/809jFi82ZtAgY2rXzknQ+/oac/XVBW1Z5NLhrUS9McY899xzpkKFCiYwMND873//M1u3bjUtW7Z0KVFvjDFffvmlufbaa01QUJApXbq0ue+++8ypU6cc1r3mmmtMmTJlTGZmpt227Oxs6y8rR7KysszUqVNNpUqVTEBAgKlTp4554403HNbdvXu3ufnmm02JEiVMcHCwadOmjdm8ebNLx5P7i9fR4+yTsNw3Ns4eZ3N2Em6MMR988IGpV6+eCQwMNBUrVjSPPfaYSU9Pt6t3/PhxM3DgQBMVFWVCQkJMy5Yt8/1DL3krqoRjSkqK9SKYwMBA07hxY6cXq+RePPPiiy863D5r1iwTERFhMjIyHG7/+eefTYcOHUxISIgpWbKkue2222xOas/Wp08f4+/vbxISEvI9hnO583p05TXu7GTbnWNy53eEeE5x43ncuPI3I/d75MrfIWMcJ+qN8X6Mivs++ugjc9ddd5krrrjChIWFmYCAAFOtWjXzwAMPmCNHjtjUjYuLM3Xr1jVBQUGmcuXK5plnnjELFiyw+1D38OHDpnPnziY8PNwALr1Xc/Xnm5WVZSpUqGAaNGjgsJ0TJ04YPz8/s2zZMofbXY3Z5ORk88QTT5jatWub4OBgExERYbp06WJ27NiR77HkmjdvnqlZs6YJCAgwVatWNTNnzjTZ2dl29fbt22d69uxpSpQoYcLCwkyXLl3MH3/8YVfP2YdV7vwecuf9sORNsVM4sdOvXz+nf1vOPkepVKmS03rn/r1x9oGVMd6PU3HMnXhJTk42AwcONBERESY8PNz07t3bHD161OvJRmPc+7nmJkF//PFHh9t79uxpOnXq5LQvV2L1u+++My1atDCRkZEmKCjIXH311WbOnDkOX5POePucRJ8RFC/FTtHETl7nNmf/Lc7rc7hz/87os4Pi4WnC0RhjTp8+bYYPH27Kly9v/P39TfXq1c306dPtXkcFTTga4/r7j5MnT5qgoCDTvXt3h+38/PPPBnD6WbKrnwcbU/DzBJ37XLgUN7aKKm4ulfMeizEO1gZyIisLtm2Dr77673H0KISHQ9OmcO21OY9rrskpE5FL1+bNm2natCm//PKLW/d6F7mUdOrUibCwMJYtW1bcQxG5YChuRApu2bJl3HbbbcTHxxMREVHcwxG5YCh2RDyXmZlJVFQUTz31FPfee29xD0fkgqHYESmYadOmMWPGDA4dOoTFYinu4YhcEBQ3RcvP1YqtW8OWLZCSAlWq5CTkJ0yA//0PrrwS9LMSkXNNnTpVSXqRPLRq1YrmzZsX9zBELiiKG5GCK1myJC+++KISjSJuUuyIeO748eMMHz6cm2++ubiHInJBUeyIFEzlypWt9wMXEdcoboqWyzPqfXzAzw9uuQW6d89J1JctW9jDExERERERERERERERERERubi4nKj/8MP/lrvfvh0yMv6bWf+//+X8e9VVhTxaERERERERERERERERERGRC5xb96jPlZYGmzfD11/nJO6//hqOH4eIiJx71ecm7tu2LYwhi4iIiIiIiIiIiIiIiIiIXLg8StQ78ttvsGkTLFwI336bc8/6zExvtCwiIiIiIiIiIiIiIiIiInLx8CvIzllZsG1bzqz6TZty/j16NGebr683hiciIiIiIiIiIiIiIiIiInJxcStRf/r0f8vdb9qUs/x9SgoYA+HhcM01cN11OY9rrimsIYuIiIiIiIiIiIiIiIiIiFy4fFytWL8+lCoFnTrBlCmwaxd07gzPP58zqz4xEdauhccfh9atITi4EEctIheVtLQ0Jk6cSFpaWnEPReSCobgR8YxiR8Qzih0R9yluRDyj2BHxjGJHxH2KGxHPKHa8x+V71NeuDc2b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8Jp+znlKuTyluIfg8hji4uLIysqiU6dO1jJjDP7+/owePZqwsDBredmyZYmNjbXZPzAw0OZ5aGgoZ86csevn9OnTNm05U758eZfuUZ+SknN8M2fOpEyZMjbb/P39HY7NHUFBQQXa7gp/f386derEypUrad26NR9//DEjR44scLsiIiIiIiIiIiIiIiJyfgshhD704R7uoRGN8qw7lKH5Jurl/OFRon7tWujZE86cgRIl4N8Vu214etvypKQkpk+fznfffcfmzZtJTExk4cKF9O/f367uzp07GT58OJs2bSIgIIDOnTszY8YMSpcuba2zd+9eu9ndud566y369Onjdpve8vdjf3u9zcKQmZnJ6tWreeihh2jatKnNtocffpi1a9fSo0cPt9qsVKkSO3futCv//fffueyyywo03rNVqVKFgIAAjhw5YjfzP1f16tVZtWoVmZmZDmfV+/v7k5WV5VH/1apVY8uWLXTt2tWl+n5+fmRnZ9uV33TTTfTp04d3332XrKwsWrdu7dF4RERERERERERERERE5PxXi1oMZSh3ciclKenSPm1oQ01q8ju/F+7gxCs8StSPHAnlysH778NVV3l3QPHx8TzxxBNcdtllXH311WzcuNFhvf3799OiRQsiIiKYOnUqSUlJPPvss/z0009s3ryZgIAAm/p9+/a1mQ0OOfdZL0ibl4pNmzZx+vRpunXrZjfbvU2bNqxYscLtRH3fvn0ZPHgwCxYsoHXr1mRlZfHJJ5/w448/Mnr06Hz3P378OGlpaTZlJUuWtEu0h4aGcvvttzNjxgyys7OpV68eSUlJ/PDDD4SGhtKlSxd69erFO++8w7hx4+jfvz9hYWH8/PPP1K5dm8qVK1O+fHm+/fZb9u7dS8mSJV2a8Z9r0KBB3HvvvVSsWJEOHTqQlZXFV199Rb9+/RzWL1++PJs3b6Zu3boEBARQokQJIOeCgyuvvJJZs2bRtWtXr8zUFxERERERERERERERkfOHP/50pzv3cA8taenWvsc4xmu8xklOFtLoxNs8StT/+SdMn+79JD1ATEwMhw4doly5cmzdupXGjRs7rDd16lTOnDnDtm3brDOwmzRpQvv27Vm0aBGDBw+2qd+gQQNuv/32PPt2t81LxYoVK2jSpInDBHWbNm14/fXX+eOPPwgNDXW5zauvvpoXXniBV199laVLl2Kx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uCiYYJdmuJ/9FYj9rZ0B1rOen/k5z/7iiacc5bw2flcS9amkMpzhXutTpDh5lKivXx927XK+fdeunGXxC8sXX3zBE088QYcOHYiKiuLbb79l4cKF3HDDDQwbNsym7pNPPsm1115Ly5YtGTx4MPv37+e5556jQ4cO3HDDDdZ6TZs2pVevXowdO5ajR49SrVo1Fi9ezN69e3nttdcK72AuEBMnTmT16tXW5xEREdSqVYsHH3yQ6tWrW8sbN27M9OnTadWqlV0b27ZtY+hZyyyULFmS2rVr88ADD1CtWrU8+zfG8OGHH7Jy5Ur27NlDdnY25cqVo0mTJtxyyy26kEJERERERERERERERC4aAQRYE+l/8VeedXvQg9d5nRBCvNa/K0lzbyfqo4jyWlsiFwKPEvUvvQSdO8Pll8PgwRAcnFOekgJz5sCyZbBmjTeHaatChQr4+voyffp0Tp8+TZUqVZgyZQojRozAz8/2kBo0aMD69et55JFHGD58OOHh4QwcOJCnnnrKrt3XX3+dxx9/nCVLlpCYmEjdunVZtWoVLVq0KJTjmFJpCnuC9xRK2666POVyHvv7MZfqNmvWjPHjxwOQkJDAnDlzGD58OKtWrXKrz+XLlxMaGkp8fDwvvPACDz30EB988AH+jpZoICdJ/9hjj/H555/Tv39/hg8fTunSpTl27BgbN27ktddeY+LEiW6NQUREREREREREREREpCj44edwNruzWe7RRBNOzirRW9lKYxrn2f4Zzng1SQ+uJeoTSPBKX0kkEU88hznslfZELhQeJer79wdfXxgxImeJ+/Llc8oPHoTMzJzn/frZ7mOxwA8/FHC0/6patSpr1651uf51113HV199lW+9oKAgpk+fzvTp0wsyPJftCd7DT2E/FUlf3hAQEEB0dM4v5ujoaPr168egQYNITEwkMjLS5XZKlSpFeHg40dHR9O3bl5EjR7J3716bmflnW7duHZ988gnPPvssLVu2tJaXK1eOq666CmOMteyXX37hlVde4ffffyczM5MaNWowYsQIrrjiCiAn6T9//nzi4uI4fvw4ERERtG3b1nq7AxEREREREREREREREU+NZjTNaW6TdC9JSY/bc3Vmu7d52m8qqRzjGPFOvhJIsHueSqrXxy9yIfAoUV+qFERFwbl51cqVvTAiuSAkJyfz0UcfERsbS0REhEdt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/oLjjoN27eDFF6FnT+c269bBtdeWt/3xR2jfPtjh1g87duygVatWdR2GiIiIiIiIiIiIiIiIiEiN2b59Oy1btqzrMOolnwv1AO+9ByNGQF4eHHFEeeE+Lg5ycspPd//nnxAdDa+9Bv3712TYhzabzcauXbuIi4vDYrHUdTgiIiIiIiIiIiIiIiIiIkFjjCEnJ4fmzZtjtfp8EnepxK9CPcDWrfDYY/Duu7Bz57/TmzeHCy+E228vL+KLiIiIiIiIiIiIiIiIiIiIM78L9ZXl5EB2NjRqVH5kfWU2G+jLEyIiIiIiIiIiIiIiIiIiIo6qVUqPi4MWLRyL9Bs2wM03l08XERERERERERERERERERERR6HB6OSPP2DRovJr0//xB4SEwGmnBaNnERERERERERERERERERGRhiXgU9/v2QNvvFFeoP/22/Jp554Lo0ZB374QHx/MMEVERERERERERERERERERBoGvwr1eXmwdGl5cf6TTyA0FPr1g1NPhVtvhSVL4JJLajJcERERERERERERERERERGR+s3na9SPGAEpKXDtteWntn/ppfKj6t96CwYMqMkQRUREREREREREREREREREGg6fr1H/5pvQrl15gf7MM2syJBERERERERERERERERERkYbL5yPqJ02CkhI45xw47jh49FH466+aDE1ERERERERERERERERERKTh8blQP306/PMPrF4NPXvCjBnQoUP573PngsVSk2GKiIiIiIiIiIiIiIiIiIg0DBZjjAlkweJieOcdeO01WLkSiorKj7QfNgz69y//XURERERERERERERERERERBwFXKiv7MABWLy4vGj/+efl09q00anxRUREREREREREREREREREqvLrGvU//OB6Xnw8jB4Na9bAtm3wyCMQFxesEEUOb59++ikWi4UlS5bUdSgiDVZFnn366ad1HYpIvaLcEREREREREREREQmMz4X6mTOhWzc45hh49FHYutV1u5Yt4Y473Bf1RQQsFotP97oofHz11VecdtppREdH06xZM2688UZyc3Md2lx11VUe4965c6dTv8888wzx8fGUlJQAYLPZmD59Ou3atSMyMpIuXbrw+uuvu4zJZrMxe/ZsunbtSlRUFElJSZxzzjn84MMbzZtvvslll11Ghw4dsFgsnHXWWS7bbdiwgeuvv55jjjmGmJgYWrduzdChQ9myZYvXMSpbsWIF3bp1IzIyktatW3P//fdTWlrq1G7//v2MGTOGJk2aEBMTw9lnn83//d//+TWWOFqwYIHb1+Sdd94ZtHGKioq44447aN68OVFRUfTs2ZNVq1Y5tNm6davHHBk9erRTvzabjSZNmjB9+nT7tE2bNnH++ecTGxtLYmIil19+OXv37nVYbsqUKR7HWrt2rdd18uf16Otr3B1f1qni7+Hre4RUj3InsNxJS0vjzjvv5OyzzyYuLs7t/9v5+fk8++yz9OnTh9TUVOLi4jjhhBOYPXs2ZWVlPv/9ajNPxb2ffvqJwYMH06ZNGyIjI2nRogW9e/fmmWeeCai/5557jgULFvi1jC/P71lnneX2tR0WFuay31tvvZXOnTvbH/uSs1Ceg3PmzKFr167ExsaSkpLCBRdcwFdffeXzOr344oscffTRREZG0qFDB7d/z507dzJ06FAaN25Mo0aNuOiii/jLj9O4+bpO4NtnYvGdcif4uTN79myGDBlC69atsVgsXHXVVS7bffzxx1x99dV07NiR6OhojjjiCK699lrS0tJ8GqdCbeWpBD9fgsGX59XTZ0qLxcKiRYuc+v3pp5+wWCysX7/ePs3XzzGrVq2yv08nJCQwePBgtrrbWelCbW6XaD9B7VDu1HzurF+/nvHjx9O9e3fCwsKwWCwu223fvp0HHniAk046iYSEBJKTkznrrLNYvXq1T+NU0P6DmlP5dffll186zTfG0KpVKywWCxdeeGEdRFjOl88fbdu2dZs/HTp0cNnvoEGD6Nu3L+D7tn2F6m4naNunflPu1E3uNPhtH+Oj3383ZsoUYzp1MsZiMcZqNeY//zFm9mxjMjJ87UVEjDHm1Vdfdbj37t3bAE7T09PTzZo1awxg3nrrrRqPa+PGjSYyMtKccMIJZvbs2ebuu+82ERER5vzzz3do99VXXznF+sorr5jo6GjTuXNnl32fd955ZvDgwfbHd955pwHM6NGjzbx580y/fv0MYF5//XWnZa+88koTGhpqrr76avP888+bp556ylx55ZXmo48+8rpOZ555pomNjTVnn322SUhIMGeeeabLdoMGDTLNmjUzN9xwg3n++efN1KlTTUpKiomJiTE//fST13GMMWblypXGYrGYs88+28ybN8/ccMMNxmq1muuuu86hXVlZmTn11FNNTEyMmTJl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0qlTJ1599VVeffVV7r77brd9Vuf53bt3L6tWreLiiy8mJibGaf7KlSvp3bs3oaGh9rF8ydmKax0uWLCARYsW8c8///Djjz9y1VVXkZCQwJgxYzz8ldyvU/fu3bFarfb5NpuNH3/80W1u//nnn+Tk5NinXXHFFU7/h/i6TtX5TCyuKXeCnzvVlZubS25urtP/QbNmzeLoo492uOZxTeWpuOZPvvhr6NCh5OTk8OijjzJ06FAWLFjAAw884HGZ6j6vixYtIioqiksuucRp3ocffojFYqFPnz6A77laVFQElOdRVdHR0ezatcv+OcuVmtou0X6CuqXcqfncCYb09HSio6OJjo62T9P+g7rVtm1bTjnlFF5//XX7tPfff58DBw4wfPhwp/bGGAYMGMCTTz7J+eefz8yZMznqqKO47bbbmDhxolP7L7/8kvHjxzN8+HCmT59OYWEhgwYNIjMz02Ncvn7+cLfspk2bGDlypMv5K1eutO9D8Ed1txO07dOwKHd8V9evs/qw7RPqc0sPiovh3Xfhtdfg00/Lpx2sx4lIkBQWFvL999/bCyMJCQncdNNN/Pzzzxx77LHV7j8tLQ2A1NRUp3mpqal88cUXbpf98MMPyczMdPvFgZUrVzJq1CiHsVJSUrBYLE7jAOzatQuAP//8E2MMb7zxBqGhoUyfPp34+Hiefvpphg8fTqNGjTj//PP9W1E/LFq0iJ07d/Lggw96bevt71exThVtXRWBKq//cccdF2jYh71evXo5TTPG2H8vLCzk22+/dblx6k1aWprb5xhweJ6rWrRoEampqZxzzjlO81auXElkZKR9nrfX0759+ygqKiIiIsJp/i+//MKPP/7I7bff7pRj7tbJl9ejP69xd+P4uk6+vkdIcCl3/Mud6iguLuapp56iXbt29OjRw2v72spT8WzSpElccMEFdO3alZNOOonTTz+dc889l7PPPpuwsDCHtp999plDrlx//fX2jfEJEyYAcPHFF3PPPfeQnJzMZZdd5nX86jy/b775JqWlpS4/q+Xn5/Ppp58ye/Zsh7F8zdmFCxcybNgwh3U44ogjWLt2LUcccYTXdQoJCaFp06YO08PDw0lKSrKPU5G73mI66qijPI7lyzpV5zOxuKbcCX7uVNdTTz1FcXExw4YN89q2NvNU/MsXf51wwgm8+OKL9seZmZm8+OKLPPbY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f+91nT777DMzdepUM3XqVNO0aVPTtm1b++PPPvvM3u6mm24ygOnfv7959dVXne6VzZ8/3+lvb4wx77zzjrFYLOacc84x8+bNMzfeeKOxWq1m9OjRDu1KS0vNySefbGJjY80DDzxgnn32WXPMMceYuLg4s3nzZq/rJK5VPC8bNmxwOd9dLlWet2bNGq/jDBkyxISGhprbbrvNzJ0715x66qkmNDTU4fVUobS01KSkpJiTTz7ZZV9//fWXAcynn37qNO+ff/4xSUlJpn379ua///2veeSRR0xCQoI57rjjTGFhoVP7d955xwBmzpw5Xtehaoy+vh59fY1XvD9deeWVAa+Tr+8RUn3KncByxxhj//9k+PDhBjBXX321fVqFrVu3mvj4eBMVFWWeffZZp/9ffvjhB4c+27RpY9q0aeP09wh2nor/jjnmGNOuXTszceJEM2/ePDNr1iwzcuRIExISYtq2bWuysrKMMcZs3rzZhIeHm+OOO87MmjXLTJs2zbRv394cf/zxBjB///23vc/x48cbi8Vipk6dal5//XXz8ccfe4zB3+f31ltvNYDbzxdnnHGGueqqq1zO8zVne/fubQAzcOBAM3v2bHPfffeZhIQEExMT49PnmmeffdYAZvDgweb55583V1xxhQHMww8/7NAuOzvbtG/f3jRt2tRMnz7dPPnkk6ZVq1amefPmZs+ePQ5tzzzzTJefrX1dJ38/E4tnyp2ayZ0VK1bY/88JDw83J5xwgv1x5f9bLrroIvv/UVX/D1q2bJlDn/fff7/L/9drIk/FNV/zxRhj7rzzTgOYa665xsyePduMGDHCdO/e3QDm/vvvt7ereF737t3rMFbFZ8DKueWKv8/rTz/9ZABz5513uuzvpZdeMlFRUSY/P99pnq+5+uqrr5qLL77YzJw508ybN88MHTrUAObaa6/1uC4VamK7RPsJ6pZyp3ZyZ+vWrfb/a3r27GkA++NXXnnF3m7p0qUGMB06dHC5jy09Pd3eVvsP6oa3/QAV2rRpY/r162d/XFZWZs4++2xjsVjMmDFjzLPPPmv/rHHzzTc7LAuYCRMmuOyz6vPtiq+fPyoMGjTIREREmP3797tdlylTpric58u2vTHV307Qtk/9p9xxVFu509C3fXwu1B93nH/3Ll38ikPksBasQr0xxjzxxBOmRYsWJiIiwvznP/8x3377rTnzzDN9KtQbY8wXX3xhTj31VBMZGWmaNGliJkyYYLKzs122Pfnkk03Tpk1NaWmp0zybzWZ/k3KlrKzMPPLII6ZNmzYmPDzcHHPMMWbhwoUu2/75559m4MCBplGjRiYqKsqcc845Zv369T6tT8Ubrqt75Q2wig817u6VudsAN8aYZcuWma5du5qIiAjTsmVLc88995ji4mKndvv27TPXXHONSUpKMtHR0ebMM8/0+h+8eFZbxcaCggL7l2AiIiJMjx493H5ZpeLLM//9739dzp81a5aJj483JSUlLuf//PPPpk+fPiY6Oto0btzYXHrppQ4btJUNHz7chIWFmczMTK/rUJU/r0dfXuPuNrT9WSd/3iOkepQ7geeOL/9vVPyNfPm/yBjXhXpjgp+n4r/333/fXH311aZTp04mNjbWhIeHmyOPPNLccMMNZvfu3Q5tV6xYYbp06WIiIyNN27ZtzWOPPWZeeuklp5266enppl+/fiYuLs4APn1e8/X5LSsrMy1atDDdunVz2c/+/ftNaGioWbx4scv5vuZsfn6+efDBB03nzp1NVFSUiY+PNxdeeKHZuHGj13WpMG/ePHPUUUeZ8PBw0759e/Pkk08am83m1G779u1m8ODBplGjRiY2NtZceOGF5vfff3dq525nlT/vQ/58JhbPlDs1kztXXnml2/9bKm+ntGnTxm27qv/fuNtZZUzw81Rc8ydf8vPzzTXXXGPi4+NNXFycGTp0qNmzZ0/Qi43G+Pe8VhRBf/zxR5fzBw8ebPr27et2LF9ydd26deaMM84wCQkJJjIy0hx//PFmzpw5Ll+T7gR7u0T7CeqWcqd2csfTtk3l/4s97Yur+v+M9h/UjUCLjcYYk5OTY2655RbTvHlzExYWZjp06GBmzJjh9DqqbrHRGN8/fxw4cMBERkaaSy65xGU/P//8swHc7k/2dZ+wMdXfTtC2T/2m3HFUW7nT0Ld9LMa4OC+QC2edBZUvA1dSAl99BV26wMHL+zhZs8aXnkWkIVq/fj09e/bkl19+8eta7yKHk759+xIbG8vixYvrOhSRekW5I1J9ixcv5tJLLyUjI4P4+Pi6Dkek3lDuiASutLSUpKQkHn30UcaPH1/X4YjUG8odkeqZPn06M2fOJC0tDUvlIpeIeKTcqR2hvjb89FPHxxkZ0LQpzJwJ55wT5KhEpEF45JFHVKQX8eCss87i9NNPr+swROod5Y5I9TVu3Jj//ve/KjSK+Em5IxK4ffv2ccsttzBw4MC6DkWkXlHuiFRP27Zt7dcCFxHfKXdqh89H1FeVmQlNmsDq1SrUi4iIiIiIiIiIiIiIiIiI+Mpa1wGIiIiIiIiIiIiIiIiIiIgcTlSoFxERERERERERERERERERqUUq1IuIiIiIiIiIiIiIiIiIiNSiUF8b/t//OT4+cKD85++/Q+PGrpfp1i3AqERERERERERERERERERERBoon4+oP/FE6NHj33uvXuXTx493nN6jx79tRUR8UVRUxJQpUygqKqrrUETqFeWOSGCUOyL+U96IBEa5IxIY5Y5IYJQ7IoFR7ogERrlTfRZjjPGl4csv+9/5lVf6v4yIHH6ys7OJj4/nwIEDNGrUqK7DEak3lDsigVHuiPhPeSMSGOWOSGCUOyKBUe6IBEa5IxIY5U71+XzqexXdRUREREREREREREREREREqs/nU9+LiIiIiIiIiIiIiIiIiIhI9fl8RL34zmazsWvXLuLi4rBYLHUdjsghLzs72+GniPhGuSMSGOWOiP+UNyKBUe6IBEa5IxIY5Y5IYJQ7IoE5cOAAUF4XlcD4fI36Q8kvv/zClClT+O6770hPTyc6OprOnTtz22230b9/f4e2NpuNuXPnMnfuXH777Teio6M5/vjjefLJJzn++OMd2j3++OPMnj2btLQ0OnbsyOTJkxkxYoTf8e3YsYNWrVpVez1FRERERERERERERERERA5Vf/75J0cccURdh1Ev1ctT32/bto2cnByuvPJKnn76ae69914ABgwYwLx58xzaXn311dx44410796dZ555hvvuu4/WrVuzZ88eh3Z33303d9xxB7179+aZZ56hdevWjBw5kjfeeMPv+OLi4gJfOZHDUEpKCnfeeScpKSl1HYpIvaLcEQmMckfEf8obkcAod0QCo9wRCYxyRyQwyh2RwDRp0gSApKSkOo6k/qqXp77v27cvffv2dZh2/fXX0717d2bOnMmYMWMAWLx4MS+//DJLly5l4MCBbvvbuXMnTzzxBBMmTGDWrFkAXHvttZx55pncdtttDBkyhJCQEJ/j0+nuRfxjtVqJjIzEaq2X3x0SqTPKHZHAKHdE/Ke8EQmMckckMModkcAod0QCo9wRCUxFzqguGrgG864TEhJCq1at2L9/v33azJkzOemkkxg4cCA2m428vDyXyy5fvpySkhLGjx9vn2axWBg3bhw7duzg66+/runwRURERERERERERERERETkMFEvj6ivkJeXR0FBAQcOHGDFihW8//77DBs2DIDs7GzWr1/P+PHjueuuu3jmmWfIzc2lXbt2TJs2jaFDh9r72bhxIzExMRx99NEO/Z900kn2+aeddprbOIqKiigqKrI/zs7OBspPl6JvYIl4l5yc7PBTRHyj3BEJjHJHxH/KG5HAKHdEAqPcEQmMckckMModkcAkJCSwe/fuug6jXrMYY0xdBxGo6667jrlz5wLlp1e45JJLmDdvHgkJCWzcuJFu3bqRlJREaGgo999/P/Hx8Tz99NNs2LCBlStXcv755wNw4YUXsmnTJv7880+H/vPz84mJieHOO+/k0UcfdRvHlClTeOCBB5ym33nnnURGRgZxjUVERERERERERERERERE6lZhYSHTpk3jwIEDNGrUqK7DqZfq9RH1N998M4MHD2bXrl0sXryYsrIyiouLAcjNzQUgMzOTb775hp49ewIwYMAA2rVrx0MPPWQv1BcUFBAREeHUf0WRvaCgwGMckydPZuLEifbH2dnZtGrVivnz57s9oj4qKoqEhAQdcd8A2Gw2srKyvL5OxL3k5GQGDRrE22+/TUZGRl2HI1JvKHdEAqPcEfGf8kYkMModkcAod0QCo9wRCYxyRyQwCQkJdR1CvVevC/WdOnWiU6dOAFxxxRX06dOH/v37s27dOqKiogBo166dvUgPEBsbS//+/Vm4cCGlpaWEhoYSFRXlcOr6CoWFhQD2vtyJiIhwWeh3dboHi8XCqFGjGDBgAOHh4VgsFt9XWA5JxhiKi4tZsWIF8+fPpx6fpKLOZWRkkJaWVtdhiNQ7yh2RwCh3RPynvBEJjHJHJDDKHZHAKHdEAqPcEfGPzWar6xDqvXpdqK9q8ODBjB07li1bttC8eXOg/DrxVTVt2pSSkhLy8vKIj48nNTWVNWvWYIxxKJxXvCFX9BUMo0aNYsSIETRu3DhofcqhYcSIEQC89NJLdRyJiIiIiIiIiIiIiIiIiG/CCCPm4C2WWPvvnh7HZsdyHdfVdej1WoMq1FecevzAgQMcddRRNGvWjJ07dzq127VrF5GRkcTFxQHQtWtXXnjhBTZt2kTnzp3t7datW2efHwwxMTEMGDBARfoGqnHjxgwYMIA33niD/Pz8ug5HREREREREREREREREGggrVr+L6a4eu5oXRpjf8WQXZKtQX031slC/Z88emjZt6jCtpKSEV155haioKHuxfdiwYTz99NOsWrWK3r17A+WnLlm+fDnnnHOO/frwF110EbfccgvPPfccs2bNAspPZz5nzhxatGjBqaeeGpS4k5KSCA8PD0pfcmgKDw8nOTmZf/75p65DERERERERERERERERkVoWTbTPBXJ/iuuRRNb1qkmQ1ctC/dixY8nOzuaMM86gRYsWpKens2jRIjZv3swTTzxBbGwsAJMnT2bx4sUMGjSIiRMnEh8fz5w5cygpKeGRRx6x99eyZUtuvvlmZsyYQUlJCT169OB///sfX3zxBYsWLSIkJCQocVssFl2TvoHTcywiIiIiIiIiIiIiInJoCyfc76POfZ13qCullFxyyTt4c/e7t8fhieGwr67Xpn6rl4X6YcOG8eKLLzJ79mwyMzOJi4uje/fuPPbYYwwYMMDeLiUlhS+//JJJkybx5JNPUlJSwimnnMLChQs5/vjjHfqcNm0aCQkJzJ07lwULFtChQwcWLlzIyJEja3v1RERERERERERERERERA5rUUQ5FMSDeQs9xEukNmw+F8z9LbYXUxyUGFPCUoLSz+Hs0H4VujF8+HCGDx/uU9sjjjiCpUuXem1ntVqZPHkykydPrm54IiIiIiIiIiIiIiIiIg2aBYvDad59OZ27L7fogzcr1rpeRa/yyQ9aAb3y4wIK6nrVpBbUy0K9HHp69OjBjBkzOOuss2p97LFjx9KxY0duvfVWr22/++47rrvuOj755BPi4uJqIToREREREREREREREZG6E0mky4J5da6ZXnGrD4ooCkrxvOrjfPKxYavr1ZN6TIV68cmUKVN47733nKaffPLJPPPMM0Efz5/C//Tp0wkN9e2l3KVLF95//31iY8uvEfLOO+8wc+ZM1qxZU51wRUREREREREREREREalQEETSjGakubs1oRgIJTkX1aKIJIaSuQ/cqz89b1SPZPd3KKKvr1RNxSYV68dkpp5zCfffd5zAtPDy8jqKBkpISwsLCiI+P93mZsLAwkpOTazAqERERERERERERERERz6xYnYrqCSS4LcSnkkoCCXUac9UCeNWjzd1N8zS94jTvBlOn6yZSF1SoF5+Fh4f7XOROT0/n6aef5ptvvsFqtdK1a1duvfVWmjdvbm+zYsUKFi5cyI4dO2jUqBHnnHMOt99+OwMGDADgtttuAyA1NZUVK1Ywb948Pv30U4YOHcr8+fNJS0tj/fr1Tqe+Ly4uZu7cuXzwwQdkZWWRkpLCVVddxUUXXeRw6vstW7bw4IMPAuVH8AOMHj0ai8XC6tWrefPNNx3WaeTIkZx++umMGzeuen9IERERERERERERERE55IUS6te11f25HnskkTUScwEFfhXRfZ2WT76K6SJBpkL9IeDoK44mLDOs1sctSSph0yubgt5vaWkpN954I8cddxzPP/88ISEhvPjii9x44428/vrrhIWFsWTJEp566ikmTJjAqaeeSm5uLj/88AMAL7/8Mn369OG+++7jlFNOISTk31Oy7Nixg08++YTp06djtVpdjn///ffz008/MWnSJDp06MCuXbvYv3+/U7suXbowceJE5s6dy5IlSwCIjo4mJyeHF154gV9++YVjjjkGgN9++40//viD6dOnB/mvJSIiIiIiIiIiIiIitaURjRjPeDrRiRhiSNyXSPuX2jNw70DCCXcotodTd2cVriyffNJ8uO1jn66ZLlKPqFB/CAjLDCN8z6HxZu/Jl19+yRlnnOEwbdSoUYwaNcph2kcffYTNZuOee+7BYrEA5cXzs88+m++++46TTz6Zl156iUsvvZQRI0bYl6soiicklJ+6JS4uzukI/pKSEh544AF7m6q2bdvG6tWrmTVrFj179gSgZcuWLtuGhYURGxuLxWJxGCc6OpqTTz6Zd955xx7TO++8Q7du3dz2JSIiIiIiIiIiIiIih7amNOVDPqQrXf+dWAT8U7PjllHm9TrqueSSTbbLAnwOOTUboIjUCRXqDwElSSX1Ytzu3btz5513Okxr1KiRU7vff/+dHTt2cOaZZzpMLy4uZseOHezbt4+9e/faTzfvj9TUVLdFeoAtW7YQEhJC9+7d/e67sosvvpipU6dyyy23YLVa+eCDD5g4cWK1+hQRERERERERERERkbrRhjasYhUd6OByfimlHq+j7svN3fJFFNXy2opIfVAvC/W//PILU6ZM4bvvviM9PZ3o6Gg6d+7MbbfdRv/+/QGw2Wy88sorLF26lI0bN7Jv3z7atWvH8OHDmTRpEpGRztf+ePHFF3n88cf5+++/adWqFTfeeCM3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ERERERERERERERHxXwghzGe+Q5H+Bm7gQR6sw6hERLxrUIX6ilPUHzhwwD5t3bp1DBw4kBNPPJHFixe7vDZ8165dAfj2228dpn/77bfYbDb7/OoyxmCM+9OrSP2n51hEREREREREREREpHaEE85iFnMlVwJQSimXczmzmFXHkYmIeFcvC/VVj3yH8tOTv/LKK0RFRdG5c2cANm3aRL9+/Wjbti3vvvuu21PYn3POOSQmJjJ79myH6bNnzyY6Opp+/foFJe7MzEy3p9iXhqG4uFjXsBERERERERERERERqWHRRPMO73AJlwBQRBFDGMJCFtZxZCIivqmX16gfO3Ys2dnZnHHGGbRo0YL09HQWLVrE5s2beeKJJ4iNjSUnJ4fzzjuPrKwsbrvtNt577z2HPtq3b88pp5wClF+jfurUqUyYMIEhQ4Zw3nnn8cUXX7Bw4UIefvhhEhMTgxJ3Xl4eK1asYMSIETRu3DgofcqhY//+/axYsYL8fB8veCMiIiIiIiIiIiIiIn6LJ573eI//8B8A8sjjYi5mNavrODIREd/Vy0L9sGHDePHFF5k9ezaZmZnExcXRvXt3HnvsMQYMGACUH72+fft2AO68806nPq688kp7oR5g/PjxhIWF8cQTT7BixQpatWrFk08+yU033RTU2OfPnw/AgAEDCA8Px2KxBLV/qX3GGIqLi1mxYoX9+RURERERERERERERkX+FE07MwVs00fbfPU1zN70VrUglFYAssuhHP77m6zpeQxER/9TLQv3w4cMZPny4xzZt27b1+1rho0ePZvTo0dUJzStjDC+99BJvvPEGycnJKtQ3AMYYMjIydCS9iIiIiIiIiIiIiNRbVqwBF859aRtaAyWp3eymD334kR+D3reISE2rl4X6hiA/P59//vmnrsMQEREREREREREREZF6IoqooBXOq06PJLKuV88nNmzkk893fMcYxrCFLXUdkohIQFSoFxERERERERERERERqSURRJBEEskkk0QSCZVuiSS6/D2BBBrTGCvWug7fJ4UUklfplk++w2N303xpW0BBXa+eiEhQqFAvIiIiIiIiIiIiIiISoMY0punBWxOa0JSmJLu4VRTn44ir65AppdTnIrk/hfb8g7cyyup6FUVEDnkq1IuIiIiIiIiIiIiIiFQSSSRtaUs72tGCFvYCfMXPit+b0IQwwmos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AAAA95CoB7zAYrE4dfNG4uPrr79W586dFRISotq1a2v8+PFKS0uzaTNs2LBS+33gwAG79b744ouKjIxUbm6uJKmgoEBPPfWUGjZsqKCgIF188cV6++23HfapoKBA8+bNU+vWrRUcHKwaNWroyiuv1A8//FDmeN59910NGTJEjRs3lsViUdeuXR22+/bbbzVu3Dg1b95coaGhOu+889S/f3/t3r27zG0Ut2rVKrVt21ZBQUE677zzNHXqVOXl5dm1O3HihEaNGqWaNWsqNDRU3bp103//+1+XtgVbixYtKvE1OWXKlArbTnZ2tu6//37VqVNHwcHBuvTSS7Vu3TqbNnv27Ck1RkaOHGm33oKCAtWsWVNPPfWUtWznzp265pprFBYWpurVq+uWW27R33//bbPcI488Uuq2Nm/eXOaYXHk9OvsaL4kzYyr6ezj7PwLlQ+y4FztJSUmaMmWKunXrpvDw8BLftzMyMjR37lz16NFDsbGxCg8PV5s2bTRv3jzl5+c7/ferzDhFyX766Sf17dtX9evXV1BQkOrWraurr75aL774olvre+mll7Ro0SKXlnHm+e3atWuJr21/f3+H67333nvVrFkz67wzMSsVxuD8+fPVunVrhYWFKSYmRj179tTXX3/t9Jhee+01NW3aVEFBQWrcuHGJf88DBw6of//+qlatmiIiInTDDTfojz/+cHo7zo5Jcu4zMZxH7FR87MybN0/9+vXTeeedJ4vFomHDhjls99lnn+m2225TkyZNFBISovPPP18jRoxQUlKSU9spUllxioqPl4rgzPNa2mdKi8WixMREu/X+9NNPslgs2rZtm7XM2c8x69ats/6fjoqKUt++fbVnzx6nx1SZ+yV8T1A5iB3Px862bds0ZswYtWvXTv7+/rJYLA7b7du3T9OmTVOHDh0UFRWl6Ohode3aVevXr3dqO0X4/sBzir/uvvrqK7t6Y4zi4uJksVh03XXXeaGHhZz5/NGgQYMS46dx48YO1xsfH69rr71WkvP79kXKu5/Avk/VRux4J3bO+n0fA6DSLV682OZ29dVXG0l25YcOHTIbNmwwksx7773n8X5t377dBAUFmTZt2ph58+aZBx980AQGBpprrrnGpt3XX39t19c333zThISEmGbNmjlc97///W/Tt29f6/yUKVOMJDNy5Ejz8ssvm169ehlJ5u2337ZbdujQocbPz8/cdttt5pVXXjHPPfecGTp0qPn000/LHFOXLl1MWFiY6datm4mKijJdunRx2C4+Pt7Url3b3HXXXeaVV14xM2bMMDExMSY0NNT89NNPZW7HGGPWrFljLBaL6datm3n55ZfNXXfdZXx8fMydd95p0y4/P9906tTJhIaGmkceecTMmTPHNGvWzISHh5vdu3c7tS3YW7hwoZFkpk+fbvf63L59e6nL5ufnm8zMTJOfn1/mdgYOHGj8/PzMpEmTzIIFC0zHjh2Nn5+f2bRpk7VNWlqaXR8WL15sbr75ZiPJLF261G69W7ZsMZLMzz//bIwxZt++fSY6Oto0atTIPP/88+axxx4zUVFRplWrViY7O9u63A8//OBwW3FxcSYqKsqmbUljd/b16OxrvCTOjskY1/5HoHyIHfdip+j9uXHjxqZjx45GktmwYYNdu59++slYLBbTvXt389RTT5n58+ebPn36GEnm1ltvLfPvZkzlxilKtnnzZhMQEGAuuOACM2PGDPPKK6+Yhx9+2PTo0cM0atTIrXU2b968xM8mjjj7/H766ad2r+358+cbSebaa691uO4LL7zQTJo0yTrvTMwaY8zEiRONJDNkyBCzYMEC8+STT5rzzz/f+Pn5ma1bt5Y5pqJ+xcfHm5dfftnccsstRpKZOXOmTbuTJ0+axo0bm1q1apknn3zSPPPMMyYuLs7Uq1fPJCcnO/X3c3ZMzn4mhnOIHc/ETv369U316tXNNddcY/z8/MzQoUMdtmvXrp1p2LChue+++8wrr7xiEhISTHh4uImJiTFJSUllbseYyo3Tc50n4qW8nH1ef//9d4efrdq2bWt8fX0dvt6eeOIJU6tWLVNQUGCMcT5WV69ebXx8fMwll1xinn/+eTNjxgwTHR1t6tata44cOVLmmCpzv4TvCSoHsVM5sTN16lTj7+9v2rVrZ5o0aWJKSi28+OKLJjg42AwaNMjMmTPHPPfcc6Zt27ZGknn99ded+vvx/YFnFX0PEBQUZEaPHm1XX7S/GxgYaHr16uWFHjr/+eP999+3i59HH33USDJjxoyxW29OTo4JDw83c+bMMcY4v29vTPn3E9j3qfqIHe/Eztm+70OiHjgDjB07tsQPt5WZqO/Zs6eJjY01KSkp1rJXXnnFSDJr164tddlNmzYZSeaxxx6zq0tPTzdBQUFm4cKFxhhj9u/fb/z9/c3YsWOtbQoKCszll19u6tWrZ/Ly8qzl7777rpFkVqxY4daY/vrrL2sCqbQv9DZv3mz3QX/37t0mMDDQ3HzzzU5tq1mzZqZVq1YmNzfXWvbggw8ai8Vidu7caS0rGlPx5/TIkSOmWrVqZtCgQc4ODacp+qD07bffOr2MswnGIlu3bjWSzKxZs2zW0ahRI9OxY8cyl7/qqqtMRESEyczMtKv7z3/+Y+rXr2+dHz16tAkODjZ79+61lq1bt85IMgsWLCh1O3/99ZexWCxm5MiRZfbJldejs6/xkjg7Jlf+R6D8iJ1/uBI7qamp5ujRo8YYY957770Sd0j+/vtv648Iihs+fLiRZH799dcyt1WZcYqSXXvttaZmzZrm+PHjdnWHDx92a52uJhvL8/wuXrzYSDKJiYl2db///rvNa9jZmM3NzTXBwcE2P8Y0xpg//vjDSDLjx48vtU8ZGRmmRo0adl9g3HzzzSY0NNQcO3bMWvbkk08aSWbbtm3Wsp07dxpfX1+TkJBQ6nZcGZMx5ftMDHvETsXHjjHG7Nmzx5qgCQ0NLfHLqi+++MLuPfuLL74wksyDDz5Y5nYqM07hmXgpr/I8rxkZGSY8PNxcffXVDusvv/xym9eus7HarFkzc8EFF9jsw+/YscP4+PiYiRMnljmmytwv4XuCykHsVE7sHDp0yGRkZBhjSv8u8+effzZ///23TVlWVpa56KKLTL169crcjjF8f+BpRd8D3HTTTSY6OtrmtWOMMSNHjjTt2rUz9evX90qy0ZXPH47MmDHDSDKbN2+2q/vss8+MJPPnn38aY5zftzemfPsJ7PucHYidyo8dY87+fR8S9cAZwJlE/bvvvmseffRRU7duXRMYGGiuvPJKuy/369ev7/CfVJcuXcr8IislJcX4+fmZyZMn25RnZ2ebsLAwc/vtt5e6/OjRo43FYrH+oy5u1apVxmKxmEOHDhljjJk7d66RZP7v//7Ppt1bb71lJNn8su/SSy81HTp0MMYU/sI8LS2t1H6UxtUv9Iwxpm3btqZt27Y2ZSdOnDA7d+40J06csJb93//9n5Fk5s6da9P2wIEDRpKZMWOGtaxfv34mJibG7k1j1KhRJiQkxGRlZbnURxQqK9lYFEtvv/22efDBB02dOnWMxWIxx48ft9aV9GGiyOTJk42vr6/NhwpjjHn88ceNJPPXX3+VuOzBgweNj4+PGTZsmMP6tm3b2vxasVatWqZfv3527Zo0aWKuuuqqUvtZ9EFh48aNpbYzxvnXoyuv8ZycHLNz505z8OBBm7bOjsmV/xEoP2LnH67ETnFl7ZA4smrVKiPJrFq1yqb8t99+M7/99ptNmSfiFK678MILTdeuXZ1q+/rrr5tu3bqZmjVrmoCAANO0aVPz0ksv2bSpX7++kWRzK+1zSnmf3549e5rQ0FCHn6VeeOEFExkZaf2SwdmYzcjIMJJsvhg1pvDsGD4+Pub+++8vtU8fffSRkWQ++ugjm/Kvv/7aSIVnmyrSvn170759e7t1ODpSbu/evXbJV2fHVN7PxLBH7FR87JyutC+rSlK9enVz00032ZT9/fffZufOnSY9Pd1a5qk4hWPOxsuff/5pJFl/DF+cJDN16lTr/NSpU60/Dhw6dKiJjIw0ERERZtiwYTbPdUnK87wWJZ8XLVpkV3f8+HHj6+trPWOSs7F69OhRI8nu/7Qxhfv8derUKXNMntgv4XsC7yJ2Kid2iivtu8ySFJ1NJjU11VrG9wfeUfQ9wHvvvWcsFotZs2aNtS47O9tERUWZp59+2mGyMS0tzUycONHUq1fPBAQEmCZNmphZs2ZZk2hFij7rvP/++6Z58+YmICDANGvWzHz88cdl9s+Vzx+ONG3a1DRs2NBh3cSJE0s8I2xp+/bl3U9g3+fsQOxUfuyc7mzc9+Ea9UAVMXPmTL3//vuaNGmSEhIS9M033+jmm2+usPX/9NNPysvL0yWXXGJTHhAQoNatW2v79u0lLpubm6ulS5eqU6dOatCggV39mjVr1K5dO8XExEiStm/frtDQUDVt2tSmXYcOHaz1kpSamqpt27apffv2euCBBxQZGamwsDCdf/75Wrp0aXmG6xRjjA4fPqzo6Gib8vfff19NmzbV+++/by0r6vPpf786deqoXr16Nn+/7du3q23btvLxsf0X3KFDB2VkZGj37t0VPZRzSkpKipKTk21uxc2YMUMfffSRJk2apMcff1wBAQFOr3v79u1q0qSJIiIibMqLXrs7duwocdl33nlHBQUFDuP20KFD2r59u/UaPwcOHNCRI0fsXk9F2yotHiUpMTFRcXFxuuKKK8oaktOvR1de4wcOHFDTpk2VkJBgU+bsmJz9H4GKRey4FjvldejQIUmye4+56qqrdNVVV9mUeSJO4br69evr+++/188//1xm23nz5ql+/fp64IEH9PTTTysuLk5jxozR3LlzrW2ee+451atXTxdddJEWL16sxYsX68EHHyxxneV5fv/++2+tW7dON954o0JDQ+3q16xZo6uvvlp+fn7WbTkTs0XXOly0aJESExP1119/6ccff9SwYcMUFRWlUaNGlfJXKnlM7dq1k4+Pj7W+oKBAP/74Y4mx/fvvv+vkyZPWsltvvdXuPcTZMZXnMzEcI3YqPnbKKy0tTWlpaXbvQXPmzFHTpk1trnnsqTiFY67Ei6v69++vkydP6oknnlD//v21aNEiTZs2rdRlyvu8JiYmKjg4WDfddJNd3dq1a2WxWNSjRw9Jzsdqdna2pMI4Ol1ISIgOHjxo/ZzliKf2S/iewLuIHc/HTkU4dOiQQkJCFBISYi3j+wPvatCggTp27Ki3337bWvbxxx8rJSVFAwcOtGtvjNH111+vZ599Vtdcc42eeeYZXXjhhZo8ebImTpxo1/6rr77SmDFjNHDgQD311FPKyspSfHy8jh49Wmq/nP38UdKyO3fu1ODBgx3Wr1mzxvodgivKu5/Avs/ZhdhxnrdfZ1Vh38fP6ZYAvCorK0s7duywJkaioqJ099136+eff1aLFi3Kvf6kpCRJUmxsrF1dbGysNm3aVOKya9eu1dGjR0v84cCaNWs0fPhwm23FxMTIYrHYbUeSDh48KEn6/fffZYzRO++8Iz8/Pz311FOKjIzU888/r4EDByoiIkLXXHONawN1QWJiog4cOKDp06eX2basv1/RmIraOkoCFR9/y5Yt3e32Oa979+52ZcYY6+OsrCx99913DndOy5KUlFTicyzJ5nk+XWJiomJjY3XllVfa1a1Zs0ZBQUHWurJeT8eOHVN2drYCAwPt6v/v//5PP/74o+677z67GCtpTM68Hl15jZe0HWfH5Oz/CFQsYse12CmPnJwcPffcc2rYsKHat29fZvvKilOUbtKkSerZs6dat26tDh066PLLL9dVV12lbt26yd/f36btF198YRMr48aNs+6Mjx07VpJ044036qGHHlJ0dLSGDBlS5vbL8/y+++67ysvLc/hZLSMjQxs3btS8efNstuVszC5ZskQDBgywGcP555+vzZs36/zzzy9zTL6+vqpVq5ZNeUBAgGrUqGHdTlHsltWn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quK+D4l64CzSqFEjffPNNzan5/jwww+1b9++MpeNjIxU9+7dtWTJEps3jMWLFystLU39+vWzW+bvv//W+vXr1adPH4WEhNjVf/rpp5KkHj162JTfcMMN8vf310svvWQtM8Zo/vz5qlu3rjp16mQtHzBggPbt22dzreTk5GStXLlSV155pcNrFrsjPz9fAwYM0JYtW/Tee++pY8eOJbZNSUnRrl27bE6/2bx5c1100UV6+eWXbb5wmzdvniwWi81pb/r27avDhw9rxYoVNmN677331Lt3b4dHe+LM0LdvX+Xn5+vll1+2lmVnZ2vhwoW69NJLFRcXZ7dM0dFYpV2j6PQveSUpPj7eLn4/++wz7d6922E8Fh0l0LlzZ4enRyptTM68Hl15jefm5mrXrl12vyp0dkyu/I9A1XA2xo4rvvzySw0cOFBXXHGF9VfKJfn999/1+++/25R5Ik7hug0bNjj89fqaNWskSRdeeKGkf375XrxtSkqKFi5caLdsaGiowx9ZOuLO87t9+3bt3Lmz1Dg6/RJFkvMxW5Q0eOedd2yW/+9//6v//e9/atOmTaljuvLKK1W9enXNmzfPpnzevHkKCQmxifG+ffvq22+/tdkR/t///qfPP//cLrb/+usv6xcero7Jnc/EKB2xU/Gx44r09HRde+21OnDggNasWaPGjRuX2DY5OVm7du1SRkaGtcxTcQrHnI2XiIgIRUdH68svv7RpV/zzc0Vx53l96623dN555zm8junhw4f13//+1+5zXHk/x8yePVtJSUm69957yxyTJ/ZL+J7Au4idyokdV8yaNUuzZ8/WAw88oLvvvrvEdnx/cGYICwvTvHnz9Mgjj6h3794ltrv22muVn5+vOXPm2JQ/++yzslgsbifyTufK548ia9as0YkTJ0o9G9Lply1yRXn3E9j3OTsRO2WrzNdZld33MQC8buzYsaakcNywYYORZN577z2b8j///NNIMgsXLrSWffLJJ0aS6datm5k3b56ZNGmSqV27tmnUqJHp0qVLmf34/vvvTWBgoGnTpo2ZN2+eefDBB01QUJDp0aOHw/YvvviikWQ++eQTh/W33nqr6dq1q8O6yZMnG0lm1KhR5pVXXjG9evUykkxiYqJNu0OHDpnY2FgTHh5upk6dap555hnTpEkTExwcbHbs2FHmmL744gszY8YMM2PGDFOr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EB0dbXMPwDnEDuAeYgdwHXEDuIfYAdxD7ADuIXYA9xA7gHuioqJ0+PBhb3ejSjtrEvWJiYk6cOCApk+fLklKSkqSJMXGxtq1jY2N1bFjx5Sdna3AwEAlJSUpJibG7hcfRcsePHiw1G0/8cQTmjZtml358OHDFRQU5NZ4gHNRfHy8t7sAVEnEDuAeYgdwHXEDuIfYAdxD7ADuIXYA9xA7gGuysrL0yy+/eLsbVdpZkajftWuXxo4dq44dO2ro0KGSpMzMTElSYGCgXfui5HlmZqYCAwOt96W1K01CQoImTpxonU9NTVVcXJwWLlzIEfWAE6KjoxUfH6/ly5crOTnZ290BqgxiB3APsQO4jrgB3EPsAO4hdgD3EDuAe4gdwD1RUVHe7kKVV+UT9YcOHVKvXr0UGRmpZcuWydfXV5IUHBwsSTanpC+SlZVl0yY4ONipdiUJDAx0mOgv7XQPISEhio6O5roNXmKMUXJysjIyMrzdFRSTnJxsPRsGAOcRO4B7iB3AdcQN4B5iB3APsQO4h9gB3EPsACXz9fVVaGiowsLCrPexsbEcUV9OVTpRn5KSop49e+rEiRPatGmT6tSpY60rOm29o3+qSUlJql69ujW5Hhsbqw0bNsgYY5M4L1q2+HrLy2KxaPjw4br++usVEBBAot5LjDHKycnRqlWrtHDhQhljvN0lAAAAAAAAAAAAwG3+/v6KiIiwSaiHhobaJdlLKiupztEBy6mpqYqMjPTCKM8eVTZRn5WVpd69e2v37t1av369mjVrZlNft25d1axZU999953dstu2bVPr1q2t861bt9arr76qnTt32qxn69at1vqKMnz4cA0aNEjVqlWrsHXCfYMGDZIkvf76617uCQAAAAAAAAAAAM41FotFYWFhioiIUEREhMLDw62PXS1zlFDHmatKJurz8/M1YMAAbdmyRStXrlTHjh0dtouPj9cbb7yhffv2KS4uTpL02Wefaffu3ZowYYK13Q033KAJEybopZde0pw5cyQVHnE9f/581a1bV506daqQfoeGhur6668nSX8GqVatmq6//nq98847nAYfAAAAAAAAAAAAJQoODnb66PSyyoon23FuqpKJ+nvvvVerVq1S7969dezYMS1ZssSmfsiQIZKkBx54QO+99566deumu+++W2lpaZo1a5Zatmyp4cOHW9vXq1dP99xz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vTlz5mjhwoWVeowzv9+LL764zOe2v7+/w+3ef//9at++vXXdmZyVinNw3rx56tixo8LCwhQXF6fLL79c3333ndNzev3119WuXTsFBQWpdevWZf48Dxw4oMGDB6tevXqKiIjQ1VdfrV27djm9H2fnJDn3mhjOI3eqP3fmzp2rQYMGqWnTprJYLBoxYoTDcV999ZVuueUWtWnTRiEhIWrZsqVuvfVWJSYmOrWfEp7KU1R/vlQHZ36v5b2mtFgsWrJkid12f/31V1ksFm3evNna5uzrmDVr1lj/TkdFRWngwIHavXu303Py5PsSPifwDHLH/bmzefNm3XHHHercubP8/f1lsVgcjtu3b5+mTJmirl27KioqSjExMbr44ov15ZdfOrWfEnx+4D6ln3fffvutXb8xRgkJCbJYLLriiiu8EGExZ15/NG/evMz8ad26tcPtDhgwQH379pXk/Hv7ElV9n8B7n9qN3PFO7tT59z4GgMctWrTIZunVq5eRZNd+6NAhs3btWiPJvP/++26Pa+vWrSYoKMicddZZZu7cuWby5MkmMDDQ9OnTx2bcd999ZxfrW2+9ZUJCQkz79u0dbvuyyy4zAwcOtK5PnDjRSDKjRo0y8+fPN/369TOSzDvvvGP32Jtuusn4+fmZW265xbz66qvmhRdeMDfddJP54osvKpzTRRddZMLCwswll1xioqKizEUXXeRw3IABA0zDhg3NXXfdZV599VUzdepUExcXZ0JDQ82vv/5a4X6MMWbVqlXGYrGYSy65xMyfP9/cddddxsfHx9x+++024woLC023bt1MaGioeeyxx8ysWbNM+/btTXh4uNmxY4dT+4K9BQsWGEnm8ccft3t+bt26tdzHFhYWmuzsbFNYWFjhfoYMGWL8/PzM+PHjzSuvvGLOO+884+fnZ9avX28dk5GRYRfDokWLzPXXX28kmaVLl9ptd+PGjUaS+e2334wxxuzbt8/ExMSYVq1amRdffNE8+eSTJioqypx55pkmNzfX+riff/7Z4b4SEhJMVFSUzdiy5u7s89HZ53hZnJ2TMZX7G4GqIXdcy52S/8+tW7c25513npFk1q5dazfu119/NRaLxfTs2dM888wzZt68eaZ///5Gkrnxxhsr/LkZ49k8Rdk2bNhgAgICzCmnnGKmTp1qXn31VfN///d/pnfv3qZVq1YubbNDhw5l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HSs3Lmdff5T12O3bt2vYsGEO+1etWmX9DKEyqvo+gfc+dQu54zxvP89qw3sfP6dHAvCqnJwc/fTTT9bCSFRUlO655x799ttvOu2006q8/cTERElSfHy8XV98fLzWr19f5mM///xzHTt2rMwvDqxatUo333yzzb7i4uJksVjs9iNJBw8elCTt3LlTxhi9++678vPz0zPPPKPIyEi9+OKLGjJkiCIiItSnT5/KTbQSlixZogMHDujxxx+vcGxFP7+SOZWMdVQEKj3/008/3dWwT3o9e/a0azPGWO/n5ORoy5YtDt+cViQxMbHM37Ekm9/ziZYsWaL4+Hj16NHDrm/VqlUKCgqy9lX0fDp+/Lhyc3MVGBho1/+///1Pv/zyix544AG7HCtrTs48HyvzHC9rP87Oydm/Eahe5E7lcqcq8vLy9MILL6hFixbq0qVLheM9laco3/jx43X55ZerY8eO6tq1q7p3765LL71Ul1xyifz9/W3Gfv311za5cuedd1rfjI8dO1aSdM011+jhhx9WTEyMhg8fXuH+q/L7fe+991RQUODwtVpWVpbWrVunuXPn2uzL2ZxdvHixrrvuOps5tGzZUhs2bFDLli0rnJOvr68aNGhg0x4QEKD69etb91OSuxXF1LZt23L35cycqvKaGI6RO9WfO1X1wgsvKC8vT9ddd12FYz2Zp6hcvlTWWWedpddff926fuzYMb3++ut6+umny3xMVX6vx48f1+rVq3XNNdcoPDzcrv/TTz/V+eefr8jISEnO52pcXJzq1aunDRs22Iw5duyYtm3bJqm4yNewYUOHc/Lk+xI+J/Accsf9uVNVf/31l1asWKFBgwbJ19e33LF8fuBZw4YN06RJk5Sdna3g4GAtWbJEF110kRo1amQ3duXKlfrPf/6jJ554wvpFybFjx2rQoEF68cUXdeedd6pVq1bW8du3b9e2bdusbZdcconOPPNMvfPOO7rzzjvLjMnZ1x+OLFmyRJIcvn77+++/9fvvv9u8fnNWVd8n8N6n7iF3nOPt51lteO/DEfVALXHzzTfbHL3YvXt3SdKuXbuqZfvZ2dmS5LB4ERQUZO135O2335a/v78GDx5s1/fbb79p79696tevn82+ytpP6VgyMjIkFb9p+OijjzRmzBgNGzZMX331lerXr68nnniiEjOsnN9//11jx47Veeedp5tuusmmb8SIETLGaMSIEda2yvz8nJ0/XDN79mytWbPGZintpptucqnQKLn+u9uxY4d++OEHDRkyxO4ICam42HjJJZdY46ro+VTevsp7UeWIs3OqzHO8efPmMsZo4cKFNvsp7/En7osc8Txyp3K5UxV33nmntm3bplmzZlmPwiyxe/du7d6926bNHXmKyuvVq5c2btyoq666Sj///LOeeeYZXXbZZWrcuLFWrlxpM7Z0rpScreKiiy7Srl27lJqa6tL+q/paLTY2Vr169bLr+89//qPc3FxdfvnlNvtyNo/Cw8PVoUMHjR07VitWrNCcOXNUUFCga665xu7MHI7mVNbZOUrPqbK5vW7dOpsvGlVmTuRR9SN3qj93quKbb77RlClTNHjwYLsvwT322GMyxujiiy+2trkrT+FYZfKlsm6//Xab9e7du+vYsWNKS0sr8zFV+b0uW7ZMeXl5Dl9bFRUVafXq1XafE5S3r5J+Hx8f3Xbbbfrqq680adIk/fnnn/rhhx80ePBg5eXllRtTZedUmZzmcwLvInfcnztVkZWVpUGDBik4OFjTp0+36ePzA+8bPHiwsrOz9cknnyg9PV2ffPJJuUfU+vr66u6777Zpv//++2WM0WeffWbT3rNnT5vi4xlnnKGIiIgKP8929vXHiYqKivTuu+/qrLPOsjvKXCr+oktkZKQuuOCCcvdfVkyS6+8TeO9T95A7zvHm86y2vPehUA/UEk2bNrVZj4qKkiQlJydXy/ZLPhQrORVWaTk5OWUWZzIyMvTRRx/psssuU/369e36P/30U8XFxdmcBiQ4OLjM/ZSOpeS2RYsWOuecc6zjwsLCdOWVV2rz5s0qKChwdopOO3TokPr166fIyEgtW7aswm/6lo7VmZ+fs/OHa7p27aqePXvaLKW1aNHC5W27+rsrrwCYn5+vNWvW2LzRruj5VNa+jDF6++23ddppp+mMM86oaDrW7VQmHyv7N6L0fsp7/In7Ikc8j9ypXO64asaMGXr11Vc1depUp08Z5qk8RcW6dOmiFStWKDk5WZs3b9akSZOUnp6ugQMHWo9EkqQNGzaoZ8+eCg0NVb169RQbG6uHHnpIklwuNrr6+921a5c2btyo6667zu6LIVLxa7Wzzz7beomikn0585wrKChQz549FRkZqVmzZql///4aM2aMvvzyS+3cuVMzZsyocE4lHwyXNydXc/vEfZFH3kPuVG/uuOr3339X//79ddppp+m1115z6jGezFMUczZfKsuVzxSq8ntdsmSJoqOjbb7MUuL777/X0aNHK/U6rvR+Hn/8cY0cOVLPPPOM2rRpo7PPPlt+fn4aOXKkpOLPDKpjTlV9X8LnBJ5F7rg3d1xVWFioIUOGaNu2bVq2bJnDI01PxOcHnhUbG6uePXvq7bff1ooVK1RYWKiBAwc6HLtnzx41atTI7mwPJYW9PXv22LSfmD9ScQ5V9Hm2s68/TvT111/rwIEDZX4B/9NPP1Xv3r0dvrarSHV8LsZ7n7qF3HGOt55ntem9D4V6oJYoq1hc+htzZZ2qt7CwsMLtl5ySo+RUJKUlJiaW+UL6ww8/VFZWVrmnve/Tp49NbPHx8Tp06JDdt/1K9l2yr5Lb0h9+lWjQoIHy8/OVmZlZ0dQqJTU1VZdffrlSUlK0evVqp95ASJX7+cXHx5c5TpLT+4RrqvLP39Xf3dtvv622bduqc+fOdn3ffvut0tLSbAp2FT2foqOjHX5jb8OGDdqzZ0+ljgh2dk6u/o0ovZ/yHl96Ts7+jYBnkTtVt3DhQj344IO6/fbb9fDDDzv9OE/lKZwXEBCgLl26aNq0aZo7d67y8/P1/vvvSyq+dM+ll16qpKQkPffcc/r000+1Zs0a3XfffZKKv6nuCld/v2+//bakss8W4eg6c84+57755hv99ttvuuqqq2zGtW7dWu3atbM7teqJ4uPjVVhYqCNHjti05+Xl6dixY9b9lORuVV4/kUc1A7lTPbnjin379ql3796KjIzUqlWrHJ5O2RFP5ilslZcvrrz3d+YzhRO5+nvdu3ev1q9fr0GDBjk87fiqVavUvHlztW/f3tpWmVwNCAjQa6+9poMHD+qbb77RH3/8oc8//1ypqany8fHRKaecUuacPPm+hM8JvIPcsd1XdeWOq0aNGqVPPvlECxcudHg5M0f4/MDzhg0bps8++0zz5s3T5Zdfrnr16lXLdl3JH8n51x8nWrJkiXx8fDR06FC7vpLLFrlyje2SmKSqfS7Ge5+6h9ypmDeeZ7XtvQ+FeqAOiYqKUkpKil37id/IcuS0006Tn5+ftmzZYtOel5enn376SR07dnT4uCVLligsLMzuQyZJSklJ0XfffWfzTV9J6tixo7KysrR9+3ab9k2bNln7peI/Zg0bNtSBAwfstn3w4EEFBQU5/UfWGTk5Obryyiu1Y8cOffLJJzZvfCpSEvOJP7+DBw9q//79Nj+/jh076scff7T7sHHTpk0KCQlRmzZtXJ4D3Ktjx47asWOH3SnuTnzuntj3119/lfuNxPbt26t58+bWtsaNGys2Ntbu+SRJmzdvLjcfLRZLmadZcsTZ52NlnuOOVGZOzv6NQO1RF3Onsj766CPdeuutuvbaazV79uxKPdZTeQrXlJw1qOTN2Mcff6zc3FytXLlSt912m/r27auePXs6/LJLWR8WO+Lq7/ftt99Wq1atdO6559r1ObpEUcm+nMnZw4cPS3L84XZ+fn6FZz4qa05btmxRUVGRtd/Hx0enn366w9zetGmTWrZsWeFrQmfn5OprYlQeueN67lTWsWPH1Lt3b+Xm5urzzz93eC3FsngyT1G2E/Ol5IjeE9//O/PevzJc/b2+8847MsaU+zruxA97XcnVuLg4de/eXW3atFFhYaHWrVunc845p9yjgj35voTPCbyP3Km+3HHFhAkTtGDBAj3//PMOiz9l4fMDz+vfv798fHz03//+t9z3xc2aNdPBgweVnp5u0/77779b+6uDs68/SsvNzdXy5ct18cUXOyyQObpsUWVU9X0C733qJnKnYp5+ntXG9z4U6oE6pFWrVvrvf/9rc3qOTz75RPv27avwsZGRkerZs6cWL15s8w9j0aJFysjI0KBBg+wec/ToUX355Zfq37+/QkJC7Pq/+OILSVLv3r1t2q+++mr5+/trzpw51jZjjObNm6fGjRurW7du1vbrrrtO+/bts7lWclJSkj766CP16NHD4TWLXVFYWKjrrrtOGzdu1Pvvv6/zzjuvzLGpqan6/fffbU6/2aFDB5166qmaP3++zQduc+fOlcVisTntzcCBA3X48GGtWLHCZk7vv/++rrzySodHe6JmGDhwoAoLCzV//nxrW25urhYsWKBzzjlHCQkJdo8pORqrvGsUnfghryQNGDDALn+/+uor7dixw2E+lhwlcMEFFzg8PVJ5c3Lm+ViZ53h+fr5+//13u28VOjunyvyNQO1QF3OnMr755hsNGTJEF154ofVbymXZuXOndu7cadPmjjxF5a1du9bht9dXrVolSWrbtq2kf7/5XnpsamqqFixYYPfY0NBQh1+ydMSV3+/WrVu1ffv2cvPoxEsUSc7nbEnR4N1337V5/I8//qg//vhDZ511Vrlz6tGjh6KjozV37lyb9rlz5yokJMQmxwcOHKjvv//e5o3wH3/8of/85z92ub13717rBx6VnZMrr4lRPnKn+nOnMjIzM9W3b18dOHBAq1atUuvWrcscm5SUpN9//11ZWVnWNnflKRxzNl8iIiIUExOjb775xmZc6dfP1cWV3+vbb7+tpk2bOryO6eHDh/Xjjz/avY6r6uuYmTNnKjExUffff3+Fc3LH+xI+J/AucsczuVMZM2bM0MyZM/XQQw/pnnvuKXMcnx/UDGFhYZo7d64ee+wxXXnllWWO69u3rwoLCzVr1iyb9ueff14Wi8XlQt6JKvP6o8SqVauUkpJS7tmQTrxsUWVU9X0C733qJnKnYp58ntXa9z4GgNeNHTvWlJWOa9euNZLM+++/b9P+999/G0lmwYIF1rbVq1cbSeaSSy4xc+fONePHjzcNGzY0rVq1MhdddFGFcfzwww8mMDDQnHXWWWbu3Llm8uTJJigoyPTu3dvh+JdfftlIMqtXr3bYf+ONN5qLL77YYd+ECROMJDN69Gjz6quvmn79+hlJZsmSJTbjDh06ZOLj4014eLh59NFHzXPPPWfatGljgoODzU8//VThnL7++mszdepUM3XqVNOgQQPTvHlz6/rXX39tHXfPPfcYSebKK680ixYtsltKW7Bggd3P3hhjPv74Y2OxWEyPHj3M/Pnzzd133218fHzMqFGjbMYVFBSYc88914SFhZkpU6aY2bNnmw4dOpjw8HDz+++/VzgnOFbye/n+++8d9peVS6X71q5dW+F+Bg0aZPz8/MyECRPMK6+8Yrp162b8/Pxsnk8lCgoKTFxcnDn33HMdbmvXrl1Gklm3bp1d3969e039+vVNq1atzEsvvWSmTZtmoqKizOmnn25ycnLsxn/88cdGkpk3b16FczgxRmefj84+x0v+Pt10000uz8nZvxGoOnLHtdwxxlj/nwwZMsRIMrfccou1rcTu3btNZGSkCQ4ONrNnz7b7//Lzzz/bbLNZs2amWbNmdj+P6s5TVF6HDh1MixYtzLhx48z8+fPNrFmzzLBhw4yvr69p3ry5SU5ONsYY8/vvv5uAgABz+umnm1mzZpnp06ebVq1amTPPPNNIMn///bd1m3fccYexWCxm6tSp5p133jFfffVVuTFU9vd7//33G0llvr648MILzYgRIxz2OZuzvXr1MpJM//79zdy5c83//d//maioKBMaGurU65rZs2cbSWbgwIHm1VdfNTfeeKORZJ588kmbcWlpaaZVq1amQYMG5plnnjHPP/+8SUhIMI0aNTJHjhyxGXvRRRc5fG3t7Jwq+5oY5SN33JM7K1eutP7PCQgIMGeddZZ1vfT/lquvvtr6P+rE/0EffPCBzTYfffRRh//X3ZGncMzZfDHGmIkTJxpJZuTIkWbu3Llm6NChpnPnzkaSefTRR63jSn6vR48etdlXyWvA0rnlSGV/r7/++quRZCZOnOhwe2+88YYJDg42WVlZdn3O5uqiRYvMNddcY5577jkzf/58M3jwYCPJ3HrrreXOpYQ73pfwOYF3kTueyZ3du3db/9ecc845RpJ1/a233rKOW7FihZFkWrdu7fAztkOHDlnH8vmBd1T0OUCJZs2amX79+lnXCwsLzSWXXGIsFosZPXq0mT17tvW1xr333mvzWElm7NixDrd54u/bEWdff5QYMGCACQwMNCkpKWXO5bHHHnPY58x7e2Oq/j6B9z61H7ljy1O5U9ff+1CoB2qA6irUG2PMs88+axo3bmwCAwPN+eefb7Zs2WIuuugipwr1xhizfv16061bNxMUFGRiY2PN2LFjTVpamsOx5557rmnQoIEpKCiw6ysqKrL+kXKksLDQTJs2zTRr1swEBASYDh06mMWLFzscu3PnTtO/f38TERFhgoODTY8ePczmzZudmk/JH1xHS+k3YCUvaspaSivrDbgxxnzwwQemY8eOJjAw0DRp0sQ8/PDDJi8vz27c8ePHzciRI039+vVNSEiIueiiiyr8B4/yearYmJ2dbf0STGBgoOnSpUuZX1Yp+fLMSy+95LB/1qxZJjIy0uTn5zvs/+2330zv3r1NSEiIqVevnrn++utt3tCWNmTIEOPv72+OHTtW4RxOVJnnozPP8bLeaFdmTpX5G4GqIXdczx1n/m+U/Iyc+V9kjONCvTHVn6eovM8++8zccsst5tRTTzVhYWEmICDAnHLKKeauu+4yhw8fthm7cuVKc8YZZ5igoCDTvHlz8/TTT5s33njD7kPdQ4cOmX79+pnw8HAjyanXa87+fgsLC03jxo1Np06dHG4nJSXF+Pn5maVLlzrsdzZns7KyzOOPP27at29vgoODTWRkpLniiivM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LZMkDR8+XKGhoYqKitKaNWs0duxYTZgwQf7+/urbt69efPFFp+vT9+rVS3PmzNGsWbN08uRJVapUSV27dtVjjz2mdu3aFfm2ASiAPXuk5GQpMFBq0cLqaACgZMo80enIEenkSWtjKc6yj8oUHk6hHgAAAAAAoKyKipJuu83ejo+XhgyRUlOtjQnFWoku1O/du9et5Vq0aKGvv/46z2WGDh2qoUOHFkJUACyXkSH9+afUvr3UuLEUHCwlJVkdFQCUHGFhUvXq9jbD3ucte6G+alXr4gAAAAAAAIC1Hn5Y8ve3t197zV6sB/LAhTQBlE5bttjvfX2l1q2tjQUASpJOnaS//sp6zLD3eaNQDwAAAAAAgOrVpTvvtLcTEyUuqw03UKgHUDplFuolictXAIB7/P2lJUucC870qM8bhXoAAAAAAACMG2e/HK8kzZ4tHT9ubTwoESjUAyidtm7NalOoBwD33HabVKtW1uNdu6SPPrIunpIgNjarHR5uXRwAAAAAAACwRps20v/9n7195oz04ouWhoOSg0I9gNLp99+l9HR7m0I9AFyYn580cWLW4x49pCZNOPv3QuhRDwAAAAAAUHY1aiStWiWVL29/PG+edOSItTGhxKBQD6B0OnMm67rKLVvah3MGAOTuyiulevXs7a++klavtjScEoNCPQAAAAAAQNn11FNZoyyuWyc9+qi18aBEoVAPoPTKvE59uXL2Yj0AIHfdumW133nHujhKGgr1AAAAAAAAZVNgoHTttfb28ePSNddIp09bGxNKFAr1AEqv33/Pajdtal0cAFASZC/Ur11rXRwlzenT9lFcJK5RDwAAAAAAUJb06iVVqGBv//e/0qlTloaDkodCPYDS659/stoNG1oXBwAUd0FBUocO9vbOnVxHK79iY+339KgHAAAAAAAoOwYMyGovW2ZdHCixykSh/pdfflHv3r0VEhKiihUrqlevXvr1119dLvvTTz/p8ssvV3BwsKpXr677779fiYmJRRswgMKRvVDfoIF1cQBAcdepk/0yIRK96T2ROfw9PeoBAAAAAADKhubNpRtusLfj46VvvrE0HJRMpb5Qv2XLFl1++eXas2ePJk+erCeeeEJ///23unXrpr/++stp2V9//VVXXnmlkpKS9NJLL+nOO+/UvHnzNGjQIIuiB1Age/ZktelRDwCuPf+89N13WY8p1OdfZqG+XDmpUiVLQwEAAAAAAICX1a4tffutFBJif7x4sZSaam1MKJH8vL2CjRuljh29vZbcPf744woKCtL69etVpUoVSdLw4cPVuHFjTZo0SZ988olj2UmTJiksLEyrV69WyLnkqlu3ru666y7973//U69evSzZBgAeOnNGio6WatakRz0AuHLNNdK4cc7TKNTnX2ahXrL3qo+LsywUAAAAAAAAeNkzz0jVq9vbP/8sjR9vbTwosbzeo75zZ6lxY2nqVOfOrUXlhx9+UM+ePR1FekmKjIxUt27d9PnnnzuGtU9ISNCqVas0fPhwR5Fekm699VZVqFBBixcvLvLYARSC3bvt9xERUoUK1sYCAMXN4487P37qKenAAWtiKckyr1EvcZ16AAAAAACA0qxBA2noUHs7Nla6+mr70PeAB7zeo/7996VFi+yF+ilT7JdAveUWafBgqXJlb69dSklJUVBQUI7pwcHBSk1N1bZt29SpUyf98ccfSktL08UXX+y0nL+/v9q0aaOtW7fmuY6UlBTH44SEBElSRESEfHxK/dUFgAILP3dN33AvXNs37tAhnclcT6dOKvfnn4W+DsAq3swdlH4pl1+uE507S5L8duxQeM+eshkjRUZaHJn3FXbunEpOVuK5dliTJgrcu7dQXhcoTvjOATxD7gCeIXcAz5A7gGfIHeRH3FNP6YyvrySp4ptvqkJAQJk4nuZKWFiYjhw5YnUYJZrNGGOKYkWxsdJHH0kffCBt2CD5+0u9e0vDh0vXXWd/7A2tW7dWSkqKtm/fLt9ziZOamqpGjRpp//79Wrp0qQYMGKClS5dq0KBBWrt2rbp06eL0GoMHD9YPP/ygmJgYl+uYMmWKnnzyyRzTJ0yYoMDAwMLfKABuW3v55fruyislSYMWL1aLHTssjggAiofl11+v39q0kSQN+OQTtdq2zdqASrCf27XT5/36SZL6rVih9nmc4AkAAAAAAICSyUh69pFHlBIYqIDkZD34yisKzNaRt6xJTk7Ws88+q/j4eKfRyuE+r/eozxQeLo0ZY7/t3m0v2C9aJN10kxQaKg0cKN16q3T55YW73nvuuUd33323Ro4cqYcfflgZGRl6+umnHUX3M2fOON0HBATkeI3AwEDHfFcmTpyosWPHOh4nJCQoKipK8+fPp0c94Ibw8HANGDBAn3zyiWKzDx9cCM7ExEjnCvVf/f23fpw7t1BfH7CSN3MHpd/R22+3N86c0bqHHtJPqanWBlSECjt3knv3ls4V6ldv26af+a5BKcR3DuAZcgfwDLkDeIbcATxD7sBdGZUqKWXyZEmS2bxZ7732msURWSssLMzqEEq8IivUZxcUJAUHS4GBkjGSzSZ9+qn09ttSu3bSe+9JzZsXzrr+7//+TwcOHNDzzz+v9957T5J08cUX6+GHH9YzzzyjCueuWZ05PH6KizNfkpOTXQ6fnykgIMBlgZ/hHoD8iY2NzXXkCo9t3uxonqpWTacK+/WBYsAruYPSLSpKql3b3t6wQYf37bM2HosUWu5s3+5ongoJ4bsGpRrfOYBnyB3AM+QO4BlyB/AMuYMLiohwNFP/+qvMf14yMjKsDqHEK7Lu3qdOSfPnSz17SnXqSJMmSXXrSkuXSocPS4cOSR9/LB09KmV28CoszzzzjI4cOaIffvhBv//+uzZv3uz48DRu3FiSFHnu+hGukiomJkY1atQo3KAAFI3du7PaDRpYFwcAFCfZL/Ozdq11cZQW2U90qFPHujgAAAAAAADgPdmP+5TRji8oXF4v1H/6qTR4sP0kk5Ej7QX7V16xF+b/+1/pxhulcuUkX1/78PePPSZ547KeYWFhuvzyy9WqVStJ0jfffKNatWqpadOmkqSWLVvKz89PP//8s9PzUlNT9euvv6rNuWu4Aihh4uOluDh7m+IJANh165bVplBfcEeOSJmjMvFdAwAAAAAAUDpRqEch83qhvn9/aeNG6cEHpR077O1775WqVHG9/EUXScOGeTemjz/+WJs3b9Z//vMfxzXkQ0ND1bNnT73//vs6deqUY9mFCxcqMTFRgwYN8m5QALwn8wszKsp+rQ0AKOu6drXfnz0rbdhgbSylgTHS/v32dt26loYCAAAAAAAAL6FQj0Lm9WvUf/ed1L27+8tfcon9VljWrl2rp556Sr169VKVKlW0YcMGzZ8/X71799YDDzzgtOwzzzyjSy+9VN26ddOoUaN08OBBvfjii+rVq5d69+5deEEBKFr79tnPAvL3lyIj7UN6AEBZdeml0rkRhbR5s5SUZG08pcW+fVKjRlJIiFSpUtZoLgAAAAAAACgdKNSjkHm9R31+ivTeULNmTfn6+ur555/Xvffeqx9//FFPP/20Pv30U/n5OZ+n0K5dO33zzTcKCgrSgw8+qHnz5mnkyJFaunSpRdEDKBRcOxgAsjz2WFZ73jzr4iht+K4BAAAAAAAo3TKP+aSnS9HR1saCUsHrPeofe0z6/HPp119dz2/bVrrhBmnyZO+sv0GDBvr666/dXv7yyy/XunXrvBMMAGucXzxZv966WADASt27S9dcY2//+6+0aJGl4ZQq53/X/PabdbEAAAAAAACg8GUW6qOjpbQ0a2NBqeD1HvVLl2YdD3alTx/p44+9HQWAMo1ejgAgXXyx9OmnWY+fe44disLEdw0AAAAAAEDpFRwsVa1qbzPsPQqJ1wv1+/dLDRrkPr9ePT7PALws+z+ZunUtCwMALPXWW/brp0vS119Lb79tbTylDYV6AAAAAACA0qt27aw2hU0UEq8X6itUyPvz+u+/UmCgt6MAUKZRPAFQ1lWvLl10kb29bZvUvz+96Qsb3zUAAAAAAAClV/ZOgBTqUUi8Xqjv3l2aO9d+uYbzHTggzZsn9ejh7SgAlGlHj0pnztjbFE8AlEVdu2a1V6zI+p+IwnPwoJSebm8zegsAAAAAAEDpMnhwVnvXLuviQKni5+0VTJ0qXXKJ1KKFNHKk/V6yd+Z65x3JGPsyAOBV+/ZJTZtSqAdQNmUv1K9ZY10cpVlamnTokBQVJTVubL9uWVKS1VEBAAAAAACgoOrWlW65xd4+cUJavtzScFB6eL1HfZMm0g8/2Edbffll6c477bdXXpHatLHPa9bM21EAKPMyh6IpX16qUsXaWACgqGUW6tPTpZ9+sjaW0uz77+33ISHS6NHWxgIAAAAAAIDC8fDDkt+5vs+vviqdOmVtPCg1vF6ol6TWre2dt44elTZssN+OHpVWr7bPAwCv27Mnq920qXVxAEBRq1xZatXK3t6yRUpMtDae0uy557La48dLgYHWxQIAAAAAAICCK1dOGjrU3j51Snr9dWvjQalSJIX6TOHh9mHwL7nE3gaAIvPrr1nttm0tCwMAitxll2W1Gfbeu7Zvl5YutbcjI6XrrrM2HgAAAAAAABTMFVdIlSrZ2ytWSCdPWhoOShevX6Neso+y+vXX9g6tJ0/ar0ufnc0mPf64d9Y9YsQIvffee7nOP3jwoGrWrKnu3btrjYuD11dffbW++uor7wQHoOhs3ZrVbtfOujgAoKi1b5/V3rjRujjKigULpIED7e3WraXFi62NBwAAAAAAAJ4bMCCr/ckn1sWBUsnrhfqff7Z/hg8ezFmgz+TNQv3o0aPVs2dPp2nGGP3f//2f6tatq5o1azqm16pVS9OnT3datkaNGt4JDEDR+uMPKS3Nfh0ZCvUAypLso4j88ot1cZQVf/6Z1W7WzLo4AAAAAAAAUDC+vtINN9jbp09LdOxFIfN6of6ee6QzZ6T//lfq0iVrdIii0rlzZ3Xu3Nlp2o8//qikpCQNGzbMaXpoaKiGDx9elOEBKCrJyfYhiVu3lpo3lwICpJQUq6MCAO/LPDkpLk76919LQykT9u61f+cEBtq/bwAAAAAAAFAydeggVa1qb69caS94AoXI69eo//136ZFHpH79ir5In5sPPvhANptNN998c455aWlpSkxMtCAqAF63ZYv9vlw5qWVLa2MBgKJQtapUq5a9nf0SIPCejAxp5057u2FD+3cOAAAAAAAASp6LL85qf/utdXGg1PJ6ob5WrdyHvLfC2bNntXjxYl166aWqW7eu07xdu3apfPnyqlixoqpXr67HH39cZ8+etSZQAIWP69QDKGuyD3ufebISvG/HDvu9n5+9WA8AAAAAAICSJ3sdgWNr8AKvD33/yCPSCy9Io0ZJISHeXtuFff311zp+/HiOYe8bNGigHj16qFWrVjp9+rSWLl2qp59+Wrt27dLHH3+c52umpKQoJdsQ2gkJCZKkiIgI+fh4/VwIoMQLDw93uveW1H37dPxcO+DGG1X588+9uj7A24oqd1ByJXbrplPn2pX27FFQZKSl8RQX3s6dUwcOKHN8pkqXXaaguDivrAcoSnznAJ4hdwDPkDuAZ8gdwDPkDnJz7JJLlCZJaWmqHhsrG8fWnISFhenIkSNWh1Gi2Yzxbn/3l16SFi2SDhyQhgyRoqIkX9/zgrBJDz7ozSiy3HzzzVq6dKliYmJUpUqVPJcdNWqU3nzzTa1fv16dOnXKdbkpU6boySefzDF9woQJCgwMLHDMAApHmo+PXn3gAZ06d9bQ3bNnK+LoUYujAgDv+WjwYO1s1kySdM+sWaoWG2txRGXDn82aacngwZKkHt9/r25r11ocEQAAAAAAAPLjrK+vpk2aJOPjo2pHjuieOXOsDqnYSU5O1rPPPqv4+HiFFIfe2iWQ1wv17nQot9mk9HRvRmGXmJioiIgIXXHFFfrss88uuPxff/2lpk2baurUqXrsscdyXc5Vj/qoqCh61ANuCg8P14ABA/TJJ58o1stFpNN33qmEp56SJAV+9pnCRo/26voAbyrK3EHJk1arlo6tWyeVKyfbyZOKaNVKtowMq8MqFrydO2cbNVLsmjWSpMBPP1XY3XcX+jqAosZ3DuAZcgfwDLkDeIbcATxD7sCV1NatdfyrryRJQYsXq9J//mNtQMVQWFiYtm/fTqG+ALw+9P2//3p7De7773//q6SkpBzD3ucmKipKknTixIk8lwsICFBAQECO6Qz3AORPbGysYmJivLuSF16QxoyRqlVTcr9+itm4UXrmGe+uE/CyIskdlDyPPy6VKydJMq++qsPR0RYHVPx4LXdiY6XUVMnfX8nXXKOYtm2llSsLfz2ABfjOATxD7gCeIXcAz5A7gGfIHTi59lpH88y6dTrDZyOHDDoFFZjXu3vXqePerSgsWrRIFSpU0HXXXefW8nv27JEkVa1a1ZthAShKZ85I48dnPX76aalnT+viAQBvqFFDuuMOe/vUKem116yNp6w5e1aaPdve9veXliyRqle3NiYAAAAAAAC4r127rPaWLdbFgVKtzIzLfuzYMX3zzTfq37+/goODneYlJCQ4DV0vScYYPf3005Kkq6++usjiBFAEFiyQJk3KenzNNdbFAgDeMH68lDnaz6xZ0smT1sZTFj30kLRsmb0dHCxdcYW18QAAAAAAAMB92Qv1v/5qWRgo3bw+9L0k/f679Prr9hNO4uOl80dCsNmk3bu9G8PHH3+stLQ0l8Peb9myRUOHDtXQoUPVsGFDnTlzRsuXL9e6des0atQotcuejABKh3fflaZNs7ebNbM0FAAoVNWqSaNG2dtJSdJLL1kbT1mVni7NmyfdeKP9cbt20gcfWBsTAAAAAAAALszPT2rd2t7etUtKTLQ2HpRaXi/Ur14t9e4thYVJF18sbd1q71CUnCytXy+1aCG1b+/tKOzD3lerVk09XQxxXadOHXXp0kXLly/X4cOH5ePjo2bNmmnOnDkalXmgG0DpEhMjxcVJlSpJzZtbHQ0AFJ5777X34JakuXOlY8esjacs27o1q82JnwAAAAAAACVD06ZSYKC9zbD38CKvF+qfeEKqX1/asEFKTbV38po0yV6s37jRPuL0c895Owpp/fr1uc6rV6+eFi9e7P0gABQvO3ZInTtLdepI5ctLp09bHREAFFzv3lntF1+0Lg5IR49K0dFSzZpS27ZWRwMAAAAAAAB3cH16FBGvX6N+yxZp5EgpJETy9bVPS0+333fsKI0eLT3+uLejAAAXtm/Pajdtal0cAFBYKlTI2pHYts1eJIa1MnfmKlWS6tWzNBQAAAAAAAC4gUI9iojXC/V+flLFivZ2pUpSuXL2zkWZ6td3rpUBQJHZsSOrzXXqAZQGl15q//ElSWvWWBsL7LLvzDH8PQAAAAAAQPGXfWTE7Jc2BAqZ1wv1DRtKf/9tb9ts9k6ry5dnzf/iC6l6dW9HAQAuZD9LiOvUAygNunbNaq9da10cyEKhHgAAAAAAoOSw2bIK9fv2SSdOWBsPSjWvF+r79JE+/FBKS7M/HjtWWrZMatTIfluxwj78PQAUOXrUAyhtunXLav/wg3VxIEv2Qv0ll1gXBwAAAAAAAC6sbt2socJ//dXKSFAGeL1Q//jj0m+/ZV2f/rbbpAULpJYtpYsukt55R3rkEW9HAQAu7NsnJSXZ2/SoB1DShYVlFYL//luKibE2HtgdPCjt329vX3qp/TpQAAAAAAAAKJ4aNsxq79xpXRwoE7xeqC9XTqpSxT5SRKbhw+3D3y9dKo0Y4e0IACAXxkj//GNv163r/I8KAEqa+++X/P3t7S+/tDYWOMu8DEFwMMPfAwAAAAAAFGcNGmS1M+sHgJd4vVCfKT1d2rRJWrzYftu82T4NACy1d6/93t9fioy0NBQA8FjFitIDD9jbaWnSSy9ZGw+cZRbqJalrV+viAAAAAAAAQN6y96jfvdu6OFAmFEmh/t13pVq1pM6dpSFD7LdOnaSaNe1D3wOAZfbty2rXqWNdHABQEMOH24e+l6SFC53/t8F62Qv13bpZFwcAAAAAAADyRo96FCGvF+rnzpXuuMPeUfWNN6Rvv7XfZs2yT7vrLmnOHG9HAQC5oFAPoDRo1iyrzVmQxc9ff0lHjtjbl18u+RTZoFYAAAAAAADIj8we9SkpUnS0tbGg1PP6UcLnnpO6dJE2bpRGj5Z69LDf/u//7EPhX3qpNGOGt6OQtmzZouuuu06VK1dWcHCwWrZsqddee81pmZ9++kmXX365goODVb16dd1///1KTEz0fnAArEOhHkBpkP3SHQcOWBcHcvfDD/b70FCpeXNrYwEAAAAAAEBONptUv769vWePlJFhbTwo9bxeqD98WBo8WCpXLue8cuXsw+BndjDylv/973/q3Lmzjh49qscff1yvvvqqrr32Wh08eNCxzK+//qorr7xSSUlJeumll3TnnXdq3rx5GjRokHeDA2AtCvUASoPshfrDh62LA7nbvDmr3batdXEAAAAAAADAtchIKTjY3ub69CgCft5eQdu20q5duc/ftUtq08Z7609ISNCtt96qvn37aunSpfLJZajRSZMmKSwsTKtXr1ZISIgkqW7durrrrrv0v//9T7169fJekACsQ6EeQGmQWag/ccI+LBeKny1bstpt20oLF1oXCwAAAAAAAHLi+vQoYl7vUf/669LixdKrr0pnzmRNP3NGevll+7yZM723/g8++EBHjhzRM888Ix8fH50+fVoZ5w1VkZCQoFWrVmn48OGOIr0k3XrrrapQoYIWL17svQABWOvo0ax/TnXrWhoKAHgss1AfE2NtHMjd1q1Z7XbtrIsDAAAAAAAArmVen16iUI8i4fUe9SNGSL6+0tix0sMPSzVq2KcfOiSlpdkf33ab83NsNum33wpn/d98841CQkIUHR2tG264Qbt27VL58uV1yy236OWXX1ZgYKD++OMPpaWl6eKLL3Z6rr+/v9q0aaOt2Q+supCSkqKUbL3XEhISJEkRERG59uAHkCU8PNzpvqgdPXRI6Q0ayFa3riIiI2WzJAog/6zOHRQPGSEhOhIUJEnyP3FCVbIPgw+XrMqdI9HRyqhZU7Z27RRRo4ZsxhTp+oGC4DsH8Ay5A3iG3AE8Q+4AniF3kCmhTRudPtcOO3lSgRxny1NYWJiOePv65qWc1wv1lStLVapIjRo5Ty+qjqt///230tLSdP3112vkyJGaPn26Vq9erddff11xcXH68MMPFXOu91mki4SLjIzUDz/8kOc6pk+frieffDLH9Ntvv12BgYGFsyFAGTBgwABL1rvQGO2WZIKDdct//qPy2Yf/AEoAq3IHxcOx8HDNOtduGhKiG0ePtjSekqSoc+fDU6f0lyRTsaIGTZigKidOFOn6gcLAdw7gGXIH8Ay5A3iG3AE8Q+7go6uu0s5z7Vs6dlTlxo0tjae4S05O1vbt260Oo0TzeqF+9WpvryFviYmJSkpK0v/93//ptddekyTdeOONSk1N1dy5c/XUU0/pzLmiXEBAQI7nBwYGOubnZuLEiRo7dqzjcUJCgqKiojR//nx61ANuCA8P14ABA/TJ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1q9fr0GDBqlr16667777FBsb6/jbfvHFF1qzZo06dOigDh066JdfftHZs2c1Y8YM9e7dW5dddpn69eun+fPn5/m3QzG0aZPUp490+rR7y/v7S9OmeTcmANbK3qOea9SjsBw5InXtKlWqJL322oWX9/Gx97jftEn6/nvp66/tvfABAAAAAABKguyFeoa+RzFTZnrUF2e3Nmum4+XKFfl6q5w9qwU7dri9vK+vr+655x49/vjjuummmxQREeHxun/++WdVq1ZNc+fO1e+//66pU6fq999/V7t27TR//nytWrVK06dPV8eOHV2uJz4+Xhs2bNDdd9+twMBAp3nh4eHq3bu3Vq1apUceeUQ2m02TJ0/WH3/8oXHjxqlRo0Y6dOiQ4uLiJElHjx7V6NGj1a5dO73xxhsqX768fvvtN6WlpeVrm95//32NGDFCo0aN0oYNG/TSSy+pTp066tixoyTJZrNp3LhxqlGjhqKjo/Xcc8/ptdde04QJExyvkZycrPfff19PPvmkfHx89MQTT+iVV17R008/reHDh+vff//V6dOn9cQTT0iSQkND9dFHH2nt2rWaPn26qlevriNHjujIkSP5ih3FxLp1Urt20vDhUlBQ7ssNHCjVrWvvUX/XXfZh8LPbt0/atcuLgQIoEvSohzfFx0sPPCB98429cO9KaKj9e0aSOnTImn755fbvoWPHvB4mAAAAAABAgTD0PYoxCvXFwPFy5XTU39/qMNzSo0cPNW7cWPPmzdPjjz/u8euEhIRo3Lhx8vHxUd26dbVgwQKlpKTo9ttvlySNGDFC7733nn777Tf16tUrx/MPHDggY4zq1avn8vXr1aunhIQEnTx5UqdOndI333yjmTNnOormtbIVP5YsWaLy5ctr2rRp8vOzp0SdOnXyvU2tW7fWiBEjHM//7bff9MEHHzjWmX2kgRo1aujuu+/W9OnTnQr1aWlpmjhxoiO+QYMG6a233pIkBQcHKyAgQGfPnlV4eLjjOUeOHFFUVJTatGkjm82myMjIfMeOYmTXLunciRi5+v13acECe3vePNfLvPiiNG5c4cYGoGhRqEdR+Owz+y0369dLzz0nVa2aNS04WHrwQWnSJO/HBwAAAAAAUBD0qEcxRqG+GKhy9myJWu+YMWN0zz33aPjw4R6vu379+vLxybryQuXKldUg21lNvr6+Cg0N1YkTJ/J8HWPMBde1a9cu+fr6qn379rnOb9u2raNI76lWrVrlePzRRx85Hm/cuFHvvvuu9u3bp9OnTys9PV0pKSlKTk52jAoQGBjodBJBeHi4Tp48med6r732Wo0ZM0YDBw5U586ddfnll6tTp04F2hYUcx9+KD32mNS4ce7LPPSQ/Tr3yck55xkjffWVNHWqZNH/HwBuYOh7FAfz50vvvSf5+UmRkdJff0kBAdKYMdJLL0nnLtEDAAAAAABQLGXWnmJipGyXIwaKAwr1xUB+hp8vDtq1a6dOnTpp1qxZuvbaa53m2Wy2HMunp6fnmHZ+Udxms7mclpGR4TKGWrVqyWazae/5Q36f8++//yokJERhYWEKCAjIa3MuON/HxyfHCQH5HRb/0KFDGjt2rAYMGKB77rlHISEh+u233zR16lSdPXvWUah39Te40MkITZs21X//+1/99NNP2rRpkyZOnKhLLrlEzz33XL5iRAmSlib16iUNHSqdd+kHVa4s3Xefvd2yZe6v0aGDff7ChTnnbd2aczh9AEUv88St06elc5drASyRkSGlptovrfLOO9Ldd0sVK0orV0o9e0oJCVZHCAAAAAAAkFOFCvaOBxK96VEsUaiHR8aMGaNhw4blGCI+LCxMx48flzHGUbT/66+/Cn39lSpVUseOHbV06VINHTrU6Tr1sbGx+uqrr9S3b1/ZbDY1bNhQGRkZ+uWXXxzD0GfXqFEjff7550pLS3PZq75SpUo6fvy443F6erp2796do4f+tm3bcjyuW7euJGnnzp3KyMjQf/7zH8dIAt98802+t7tcuXIuT3yoUKGCevXqpV69eunKK6/U/fffr/j4eIWGhuZ7HSgh9u2Tnn3W9bzNm6Vp06SICNfzy5Wz3/fvb7+dLyNDuvdeac6cwokVgGcyC/UMe4/iZOpU+3dH9er2k76+/NI+gktiotWRAQAAAAAAOGvaNKu9c6d1cQC58LnwIkBODRs2VO/evfXxxx87TW/fvr1OnjypBQsW6ODBg1q8eLHWr1/vlRjGjx+v1NRU3X///dqyZYsOHz6sn376SWPGjFG1atV09913S7JfD75v376aOnWqVq9erejoaP3yyy9atWqVJPt14E+fPq1JkyZp+/bt2r9/v1auXOnord+hQwf9+OOP+vHHH7V37149++yzOnXqVI54fvvtNy1YsED79u3T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f//9SkxMdFpmxIgRecYdHR2d43Vff/11hYaG6uzZs5KkjIwMzZgxQ/Xq1VNgYKBat26tDz/80GVMGRkZmj17ttq0aaOgoCBVqVJFV1xxhX777bcLbs/HH3+s4cOHq1GjRrLZbOrevbvL5TZv3qwxY8aoRYsWKl++vGrXrq3Bgwdr165dF1xHditWrFC7du0UGBio2rVra/LkyUpLS8uxXFxcnEaNGqWqVauqfPny6tGjh7Zs2ZKvdcHZu+++m+tncsKECYW2npSUFD3yyCOqUaOGgoKC1LFjR61atcppmb179+aZI3fddVeO183IyFDVqlU1Y8YMx7QdO3aod+/eqlChgipXrqxbbrlFx44dc3relClT8lzXunXrLrhN+fk8uvsZz40725T593D3fwQKhtzxLHdiYmI0YcIE9ejRQxUrVsz1ezspKUmzZs1Sr169FBkZqYoVK6pt27aaPXu20tPT3f77FWWeInd//PGHBg4cqDp16igwMFA1a9bUVVddpddff92j13vjjTf07rvv5us57ry/3bt3z/WzXa5cOZev+9BDD6l58+aOx+7krGTPwTlz5qhNmzaqUKGCIiIidM011+inn35ye5vefvttNWvWTIGBgWrUqFGuf8/o6GgNHjxYlSpVUkhIiK6//nrt2bPH7fW4u02Se7+J4T5yp/BzZ/bs2Ro0aJBq164tm82mESNGuFzu22+/1R133KHGjRsrODhY9evX15133qmYmBi31pOpqPIUhZ8vhcGd9zWv35Q2m02LFi3K8bp//PGHbDabNm3a5Jjm7u+YVatWOf5Ph4WFaeDAgdq7d6/b21SU+yUcJyga5I73c2fTpk2655571L59e5UrV042m83lcgcOHNCTTz6pSy65RGFhYQoPD1f37t31zTffuLWeTBw/8J7sn7sff/wxx3xjjKKiomSz2XTttddaEKGdO78/6tatm2v+NGrUyOXrDhgwQH369JHk/r59poLuJ7DvU7KRO9bkTqnf9zEAitzChQudbldddZWRlGP64cOHzffff28kmSVLlng9rq1bt5rAwEDTtm1bM3v2bPPoo4+agIAA07t3b6flfvrppxyxLliwwAQHB5vmzZu7fO2rr77aDBw40PF4woQJRpK56667zLx580zfvn2NJPPhhx/meO5tt91m/Pz8zB133GHefPNN88orr5jbbrvN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O9tUkN/EcI3cKfzcKahXXnlFqampuummmy64bFHmKfKXL/nVtm1bvf32247Hx48f19tvv63nnnsu1+cU5H09ceKEvvrqK91www2qWLFijvlffPGFLrvsMoWGhkpyP1cjIiJUqVIlrVu3zmmZ48ePa/v27ZLsRb7q1au73Kai3C/hOEHRIXe8nzsF9c8//2jZsmUaNGiQfH1981yW4wdF6+abb9bEiRN15swZBQUFadGiRerWrZtq1KiRY9kVK1bou+++09NPP+04UfLee+/VoEGD9Oqrr2rMmDFq0KCBY/kdO3Zo+/btjmk9evTQRRddpA8//FBjxozJNSZ3f3+4smjRIkly+fvt33//1c6dO51+v7mroPsJ7PuUPuSOe6z+nJWEfR961AMlxO233+7Ue7FLly6SpD179hTK6585c0aSXBYvAgMDHfNd+eCDD1SuXDkNHjw4x7xt27Zp//796tu3r9O6cltP9lgSExMl2XcaPv30U9199926+eab9e2336pKlSp6+umn87GF+bNz507de++96ty5s2677TaneSNGjJAxRiNGjHBMy8/fz93th2dmzZqlVatWOd2yu+222zwqNEqev3e7du3SL7/8oiFDhuToISHZi409evRwxHWhz1Ne68rrR5Ur7m5Tfj7jdevWlTFG7777rtN68nr++esiR4oeuZO/3CmIMWPGaPv27Zo5c6ajF2amvXv3au/evU7TvJGnyL+rrrpK69ev13XXXaeFX303AAEAAElEQVTffvtNM2bM0NVXX62aNWtqxYoVTstmz5XM0Sq6deumPXv2KD4+3qP1F/S3WtWqVXXVVVflmPfdd98pJSVF11xzjdO63M2jihUrqkWLFrr33nu1bNkyvfHGG0pLS9MNN9yQY2QOV9uU2+gc2bcpv7m9evVqpxON8rNN5FHhI3cKP3cKYu3atXryySc1ePDgHCfBTZkyRcYYde/e3THNW3kK1/KTL/n1f//3f06Pu3TpouPHjyshISHX5xTkfV26dKlSU1Nd/rbKyMjQV199leM4QV7rypzv4+Oj0aNH69tvv9XEiRP1999/65dfftHgwYOVmpqaZ0z53ab85DTHCaxF7ng/dwoiKSlJgwYNUlBQkJ599lmneRw/sN7gwYN15swZff755zp16pQ+//zzPHvU+vr66v7773ea/tBDD8kYoy+//NJpes+ePZ2Kj61bt1ZISMgFj2e7+/vjfBkZGfroo4/Utm3bHL3MJfuJLqGhobr88svzXH9uMUme7yew71P6kDvusfJzVlL2fSjUAyVE7dq1nR6HhYVJkk6ePFkor595UCxzKKzskpOTcy3OJCYm6tNPP9XVV1+tKlWq5Jj/xRdfKCIiwmkYkKCgoFzXkz2WzPt69eqpY8eOjuUqVKigfv36adOmTUpLS3N3E912+PBh9e3bV6GhoVq6dOkFz/TNHqs7fz93tx+eueSSS9SzZ0+nW3b16tXz+LU9fe/yKgCePXtWq1atctrRvtDnKbd1GWP0wQcfqGXLlmrduvWFNsfxOvnJx/z+j8i+nryef/66yJGiR+7kL3c89fzzz+vNN9/U1KlT3R4yrKjyFBfWoUMHLVu2TCdPntSmTZs0ceJEnTp1SgMHDnT0RJKkdevWqWfPnipfvrwqVaqkqlWratKkSZLkcbHR0/d3z549Wr9+vW666aYcJ4ZI9t9qF198seMSRZnrcuczl5aWpp49eyo0NFQzZ85U//79dffdd+ubb77R7t279fzzz19wmzIPDOe1TZ7m9vnrIo+sQ+4Ubu54aufOnerfv79atmypt956y63nFGWews7dfMkvT44pFOR9XbRokSpXrux0MkumzZs369ixY/n6HZd9PU899ZRGjhypGTNmqHHjxrr44ovl5+enkSNHSrIfMyiMbSrofgnHCYoWuePd3PFUenq6hgwZou3bt2vp0qUue5qej+MHRatq1arq2bOnPvjgAy1btkzp6ekaOHCgy2X37dunGjVq5BjtIbOwt2/fPqfp5+ePZM+hCx3Pdvf3x/nWrFmj6OjoXE/A/+KLL9SrVy+Xv+0upDCOi7HvU7qQO+6x6nNWkvZ9KNQDJURuxeLsZ8zlNlRvenr6BV8/c0iOzKFIsouJicn1h/R///tfJSUl5Tnsfe/evZ1ii4yM1OHDh3Oc7Ze57sx1Zd5nP/iVqVq1ajp79qxOnz59oU3Ll/j4eF1zzTWKi4vTV1995dYOhJS/v19kZGSuy0lye53wTEG+/D197z744AM1adJE7du3zzHvxx9/VEJCglPB7kKfp8qVK7s8Y2/dunXat29fvnoEu7tNnv6PyL6evJ6ffZvc/R+BokXuFNy7776rRx55RP/3f/+nxx57zO3nFVWewn3+/v7q0KGDpk2bptmzZ+vs2bNasmSJJPule6688krFxsbqpZde0hdffKFVq1bpwQcflGQ/U90Tnr6/H3zwgaTcR4twdZ05dz9za9eu1bZt23Tdddc5LdeoUSM1a9Ysx9Cq54uMjFR6erqOHj3qND01NVXHjx93rCczdwvy+4k8Kh7IncLJHU8cOHBAvXr1UmhoqFauXOlyOGVXijJP4SyvfPFk39+dYwrn8/R93b9/v3744QcNGjTI5bDjK1euVN26ddW8eXPHtPzkqr+/v9566y0dOnRIa9eu1V9//aWvv/5a8fHx8vHxUcOGDXPdpqLcL+E4gTXIHed1FVbueOquu+7S559/rnfffdfl5cxc4fhB0bv55pv15Zdfas6cObrmmmtUqVKlQnldT/JHcv/3x/kWLVokHx8fDR06NMe8zMsWeXKN7cyYpIIdF2Pfp/Qhdy7Mis9ZSdv3oVAPlCJhYWGKi4vLMf38M7Jcadmypfz8/PTzzz87TU9NTdWvv/6qNm3auHzeokWLVKFChRwHmSQpLi5OP/30k9OZvpLUpk0bJSUlaceOHU7TN27c6Jgv2f+ZVa9eXdHR0Tle+9ChQwoMDHT7n6w7kpOT1a9fP+3atUuff/65047PhWTGfP7f79ChQzp48KDT369NmzbasmVLjoONGzduVHBwsBo3buzxNsC72rRpo127duUY4u78z+758/755588z0hs3ry56tat65hWs2ZNVa1aNcfnSZI2bdqUZz7abLZch1lyxd3PY34+467kZ5vc/R+BkqM05k5+ffrpp7rzzjt14403atasWfl6blHlKTyTOWpQ5s7YZ599ppSUFK1YsUKjR49Wnz591LNnT5cnu+R2sNgVT9/fDz74QA0aNFCnTp1yzHN1iaLMdbmTs0eOHJHk+uD22bNnLzjyUW7b9PPPPysjI8Mx38fHR61atXKZ2xs3blT9+vUv+JvQ3W3y9Dcx8o/c8Tx38uv48ePq1auXUlJS9PXXX7u8lmJuijJPkbvz8yWzR+/5+//u7Pvnh6fv64cffihjTJ6/484/2OtJrkZERKhLly5q3Lix0tPTtXr1anXs2DHPXsFFuV/CcQLrkTuFlzueGD9+vObPn6+XX37ZZfEnNxw/KHr9+/eXj4+PNmzYkOd+cZ06dXTo0CGdOnXKafrOnTsd8wuDu78/sktJSdEnn3yi7t27uyyQubpsUX4UdD+BfZ/Sidy5sKL+nJXEfR8K9UAp0qBBA23YsMFpeI7PP/9cBw4cuOBzQ0ND1bNnT73//vtOXxgLFy5UYmKiBg0alOM5x44d0zfffKP+/fsrODg4x/z//e9/kqRevXo5Tb/++utVrlw5vfHGG45pxhjNmTNHNWvW1KWXXuqYftNNN+nAgQNO10qOjY3Vp59+qiuuuMLlNYs9kZ6erptuuknr16/XkiVL1Llz51yXjY+P186dO52G32zRooWaNm2qefPmOR1wmz17tmw2m9OwNwMHDtSRI0e0bNkyp21asmSJ+vXr57K3J4qHgQMHKj09XfPmzXNMS0lJ0fz589WxY0dFRUXleE5mb6y8rlF0/kFeSRowYECO/P3222+1a9cul/mY2Uvg8ssvdzk8Ul7b5M7nMT+f8bNnz2rnzp05zip0d5vy8z8CJUNpzJ38WLt2rYYMGaKuXbs6zlLOze7du7V7926nad7IU+Tf999/7/Ls9ZUrV0qSmjRpIinrzPfsy8bHx2v+/Pk5nlu+fHmXJ1m64sn7u3XrVu3YsSPPPDr/EkWS+zmbWTT46KOPnJ6/ZcsW/fXXX2rbtm2e23TFFVeocuXKmj17ttP02bNnKzg42CnHBw4cqM2bNzvtCP/111/67rvvcuT2/v37HQc88rtNnvwmRt7IncLPnfw4ffq0+vTpo+joaK1cuVKNGjXKddnY2Fjt3LlTSUlJjmneylO45m6+hISEKDw8XGvXrnVaLvvv58Liyfv6wQcfqHbt2i6vY3rkyBFt2bIlx++4gv6OeeGFFxQTE6OHHnrogtvkjf0SjhNYi9wpmtzJj+eff14vvPCCJk2apAceeCDX5Th+UDxUqFBBs2fP1pQpU9SvX79cl+vTp4/S09M1c+ZMp+kvv/yybDabx4W88+Xn90emlStXKi4uLs/RkM6/bFF+FHQ/gX2f0oncubCi/JyV2H0fA8By9957r8ktHb///nsjySxZssRp+r///mskmfnz5zumffXVV0aS6dGjh5k9e7YZN26cqV69umnQoIHp1q3bBeP45ZdfTEBAgGnbtq2ZPXu2efTRR01gYKDp1auXy+Vff/11I8l89dVXLuffeuutpnv37i7njR8/3kgyo0aNMm+++abp27evkWQWLVrktNzhw4dNZGSkqVixopk8ebJ56aWXTOPGjU1QUJD59ddfL7hNa9asMVOnTjVTp0411apVM3Xr1nU8XrNmjWO5Bx54wEgy/fr1MwsXLsxxy27+/Pk5/vbGGPPZZ58Zm81mrrjiCjNv3jxz//33Gx8fH3PXXXc5LZeWlmY6depkKlSoYJ588kkza9Ys06JFC1OxYkWzc+fOC24TXMt8XzZv3uxyfm65lH3e999/f8H1DBo0yPj5+Znx48ebuXPnmksvvdT4+fk5fZ4ypaWlmYiICNOpUyeXr7Vnzx4jyaxevTrHvP3795sqVaqYBg0amNdee81MmzbNhIWFmVatWpnk5OQcy3/22WdGkpkzZ84Ft+H8GN39PLr7Gc/8/3Tbbbd5vE3u/o9AwZE7nuWOMcbxfTJkyBAjydxxxx2OaZn27t1rQkNDTVBQkJk1a1aO75fffvvN6TXr1Klj6tSpk+PvUdh5ivxr0aKFqVevnhk7dqyZN2+emTlzprn55puNr6+vqVu3rjl58qQxxpidO3caf39/06pVKzNz5kzz7LPPmgYNGpiLLrrISDL//vuv4zXvueceY7PZzNSpU82HH35ovv322zxjyO/7+9BDDxlJuf6+6Nq1qxkxYoTLee7m7FVXXWUkmf79+5vZs2ebJ554woSFhZny5cu79btm1qxZRpIZOHCgefPNN82tt95qJJlnnnnGabmEhATToEEDU61aNTNjxgzz8ssvm6ioKFOjRg1z9OhRp2W7devm8re1u9uU39/EyBu5453cWbFiheM7x9/f37Rt29bxOPt3y/XXX+/4jjr/O2j58uVOrzl58mSX3+veyFO45m6+GGPMhAkTjCQzcuRIM3v2bDN06FDTvn17I8lMnjzZsVzm+3rs2DGndWX+BsyeW67k9339448/jCQzYcIEl6/3zjvvmKCgIJOUlJRjnru5unDhQnPDDTeYl156ycybN88MHjzYSDJ33nlnntuSyRv7JRwnsBa5UzS5s3fvXsd3TceOHY0kx+MFCxY4llu2bJmRZBo1auTyGNvhw4cdy3L8wBoXOg6QqU6dOqZv376Ox+np6aZHjx7GZrOZUaNGmVmzZjl+a/znP/9xeq4kc++997p8zfPfb1fc/f2RacCAASYgIMDExcXlui1TpkxxOc+dfXtjCr6fwL5PyUfuOCuq3Cnt+z4U6oFioLAK9cYY8+KLL5qaNWuagIAAc9lll5mff/7ZdOvWza1CvTHG/PDDD+bSSy81gYGBpmrVqubee+81CQkJLpft1KmTqVatmklLS8sxLyMjw/FPypX09HQzbdo0U6dOHePv729atGhh3n//fZfL7t692/Tv39+EhISYoKAgc8UVV5hNmza5tT2Z/3Bd3bLvgGX+qMntll1uO+DGGLN8+XLTpk0bExAQYGrVqmUee+wxk5qammO5EydOmJEjR5oqVaqY4OBg061btwt+wSNvRVVsPHPmjOMkmICAANOhQ4dcT1bJPHnmtddeczl/5syZJjQ01Jw9e9bl/G3btplevXqZ4OBgU6lSJTNs2DCnHdrshgwZYsqVK2eOHz9+wW04X34+j+58xnPb0c7PNuXnfwQKhtzxPHfc+d7I/Bu5811kjOtCvTGFn6fIvy+//NLccccdpmnTpqZChQrG39/fNGzY0Nx3333myJEjTsuuWLHCtG7d2gQGBpq6deua5557zrzzzjs5DuoePnzY9O3b11SsWNFIcuv3mrvvb3p6uqlZs6Zp166dy9eJi4szfn5+ZvHixS7nu5uzSUlJ5qmnnjLNmzc3QUFBJjQ01Fx77bVm69atF9yWTPPmzTNNmjQx/v7+pkGDBubll182GRkZOZY7cOCAGThwoAkJCTEVKlQw1157rfn7779zLJfbwar8/B/Kz29i5I3c8U7u3Hbbbbl+t2TfT6lTp06uy53/fZPbwSpjCj9P4Vp+8iUpKcmMHDnShIaGmooVK5rBgwebo0ePFnqx0Zj8va+ZRdDff//d5fyBAweaPn365Loud3J148aNpmvXriYsLMwEBgaaiy66yMyZM8flZzI3hb1fwnECa5E7RZM7ee3bZP8uzutY3PnfMxw/sIanxUZjjDl16pR58MEHTY0aNUy5cuVMo0aNzPPPP5/jc1TQYqMx7v/+iI+PN4GBgebGG290+Trbtm0zknI9nuzuMWFjCr6fwL5PyUbuOCuq3Cnt+z42Y1yMCwQABbRp0yZ17NhRf/75Z76u9Q6UJX369FGFChW0ePFiq0MBShRyByi4xYsXa9iwYYqNjVVoaKjV4QAlBrkDeC4tLU1VqlTR9OnTdc8991gdDlBikDtAwcyYMUMvvfSSYmJiZLPZrA4HKDHInaLhZ3UAAEqvadOmUaQH8tC9e3d16dLF6jCAEofcAQquUqVKeu211yg0AvlE7gCeO3HihB588EH179/f6lCAEoXcAQqmbt26jmuBA3AfuVM06FEPAAAAAAAAAAAAAEAR8rE6AAAAAAAAAAAAAAAAyhIK9QAAAAAAAAAAAAAAFCEK9QAAAAAAAAAAAAAAFCEK9QAAAAAAAAAAAAAAFCEK9QAAAAAAAAAAAAAAFCEK9QAsl5KSoilTpiglJcXqUIAShdwBPEPuAPlH3gCeIXcAz5A7gGfIHcAz5A7gGXKn4GzGGGN1EADKtoSEBIWGhio+Pl4hISFWhwOUGOQO4BlyB8g/8gbwDLkDeIbcATxD7gCeIXcAz5A7BUePegAAAAAAAAAAAAAAihCFegAAAAAAAAAAAAAAipCf1QF42+bNm/Xee+/p+++/1969e1WlShV16tRJTz/9tBo3buy0bEZGhubOnau5c+fqr7/+UnBwsC666CK9/PLLuuiii9xeZ0ZGhg4dOqSKFSvKZrMV9iYBpU5CQoLTPQD3kDuAZ8gdIP/IG8Az5A7gGXIH8Ay5A3iG3AE8Ex8fL8leF4VnSv016gcOHKh169Zp0KBBat26tQ4fPqyZM2cqMTFRGzZsUMuWLR3LjhgxQosWLdKtt96qzp076/Tp09q6dauGDRumq666yu11Hjx4UFFRUd7YHAAAAAAAAAAAAAAoFnbv3q369etbHUbJZEq5devWmZSUFKdpu3btMgEBAWbYsGGOaR9//LGRZJYtW1bgdcbFxRlJ3Lhxc/MWERFhJkyYYCIiIiyPhRu3knQjd7hx8+xG7nDjlv8becONm2c3cocbN89u5A43bp7dyB1u3Dy7kTvcuHl2q1q1qpFk4uLiClxbLatK/TXqL730Uvn7+ztNa9SokVq0aKEdO3Y4pr300ku65JJL1L9/f2VkZOj06dMer5Ph7oH88fHxUWBgoHx8Sv2/JKBQkTuAZ8gdIP/IG8Az5A7gGXIH8Ay5A3iG3AE8k5kz1EU9V+qvUe+KMUZHjhxRixYtJNmvO7Jp0ybdc889mjRpkl5//XUlJiaqXr16evbZZzV48OA8Xy8lJUUpKSmOx5nXMYmIiOAfO+CG8PBwp3sA7iF3AM+QO0D+kTeAZ8gdwDPkDuAZcgfwDLkDeCYsLExHjhyxOowSrdRfo96V999/X7fccovefvtt3XHHHdq6davatWunKlWqyM/PT5MnT1ZoaKheffVVbd68WStXrlTv3r1zfb0pU6boySefzDF9woQJCgwM9OamAAAAAAAAAAAAAECRSk5O1rPPPqv4+HiFhIRYHU6JVOYK9Tt37lTHjh3VokUL/fDDD/L19dUPP/ygrl27SpI2bNigjh07SpKjV32TJk30448/5vqarnrUR0VF0aMecFN4eLgGDBigTz75RLGxsVaHA5QY5A7gGXIHyD/yBvAMuQN4htwBPEPuAJ4hdwDPhIWFafv27RTqC6BMDX1/+PBh9e3bV6GhoVq6dKl8fX0lSUFBQZKkevXqOYr0klShQgX169dP77//vtLS0uTn5/rPFRAQoICAgBzTGe4ByJ/Y2FjFxMRYHQZQ4pA7gGfIHSD/yBvAM+QO4BlyB/AMuQN4htxBWWKz2VSpUiVVrFjR5TXmjTE6deqU4uLilFuf74yMDG+HWeqVmUJ9fHy8rrnmGsXFxemHH35QjRo1HPMy2xERETmeV61aNZ09e1anT59WaGhokcULAAAAAAAAAAAAAIWpatWquvvuu3XxxRfLz88v10J9WlqaNm/erDlz5ujYsWMWRFr6lYlCfXJysvr166ddu3bpm2++UfPmzZ3m16hRQ9WrV1d0dHSO5x46dEiBgYGqWLFiUYULAAAAAAAAAAAAAIXKz89PL774ourVq6fAwMALLt+rVy81atRId9xxh9LS0oogwrKl1F9APT09XTfddJPWr1+vJUuWqHPnzi6Xu+mmm3TgwAGtWrXKMS02NlaffvqprrjiCq41DwAAAAAAAAAAACBLOasDyJ/IyEiFh4e7VaSXpMDAQIWHh6t69epejqxsKvU96h966CGtWLFC/fr104kTJ/T+++87zR8+fLgkaeLEiVq8eLEGDBigsWPHKjQ0VHPmzNHZs2c1bdo0K0IHAAAAAAAAAAAAUFxVkHTS6iDc5+Pj43Ko+7zYbDb5+vp6KaKyrdQX6n/99VdJ0meffabPPvssx/zMQn1ERIR+/PFHjRs3Ti+//LLOnj2rzp076/3339dFF11UlCEDAAAAAAAAAAAAKO5KWKEexUupL9SvXr3a7WXr16+vZcuWeS8YAAAAAAAAAAAAAKVDRasDQEnGhdcBAAAAAAAAAAAAIL8qWB0ASjIK9QAAAAAAAAAAAABKL38vvS6FehQAhXoAAAAAAAAAAAAApZc3Cuo2ScFeeF0vMsbIGOP158A9FOoBAAAAAAAAAAAAlAw2D57jjUJ9OUkBXnhdLzp+/LhSU1Pz9ZzU1FTFxsZ6KaKyjUI9AAAAAAAAAAAAgJLBk17s5Qs9Cvtw+iWsUH/69GmtWLFCcXFxbi0fFxenFStWKCkpybuBlVF+VgdQmoWESDZPzupBoTt1SsrIsDoKoOwKDJQCStgPlpIgJCRDAQFnFBKSIX4nFR/p6VJiotVRAGVbxYqSD6ckFyq+cwDPkDuAZ8gdwDPkDuAZcqd4yvMYWwVJp/P5gv7nbvnrTJ63EtijXpLmz58vSbruuuvk7+8vm4tipjFGqampWrFihWN5FD6b4aIChS4hIUGhoaGKj7cX62G9Tz6RBg60OgrkJjIyUqNHj9bcuXMVExNjdTgoZOHh0r59UnAJu1YPUBCDBklLl1odBXLD907pNnKk9NZbVkcBAAAAAAAKqk8f6csvXcyoI+mgpPR8vFgHSTskFWYHmwhJ10t6U1IJrLYGBwcrPDw810J9bGxsnj3pIyIidOTIEcXHxyuEgqhH6FHvRbfcIpUrZ3UUGDZMat3a6iiAsqtRI3uR/oEHpOhoq6MpXcLCKumqq67SqlWrdPJknNXh4Jw33pBataJQD1jlooukf/+Vxo+3OpLShe8cwDPkDuAZcgfwDLkDeIbcKZ7eftt+jM1loT6zd/yZfLxg5nMKU2YN0F9SSiG/dhFISkrS/v37rQ6jTKNQ70UrVlgdASSpVi3p6qutjgIou2rWtN8vWCC5edkbuCkyMki1arXQF1/8qJiYOKvDwTnjx2d97gEUvZo1pb/+so+ohMLDdw7gGXIH8Ay5A3iG3AE8Q+4UT5Mn53GMzZNCvTeGqc8s1AeoRBbqYT2u3IhSLzra3pu3UiWrIwHKppo1paQkivQoO6KjKdQDVqpZkxFcAAAAAAAo6fI8xuav/BfdvdGjPvP1SuB16lE8UKhHqXfokP2eoglgjZo1s/IQKAsOHeI7B7AS3zsAAAAAAJR8eR5j86ToXs6D57jzmvLC66LMoFCPUi+zRxVFE8Aa9GxEWUOPesA6Pj5S9ep87wAAAAAAUNJdsEd9fovj9KhHMUShHqUePeoBa1GoR1kTHS1VriwFBlodCVD2RERIfn587wAAAAAAUNJFR0uRkfaT8nMoLoX67NeoBzxQ6gv1mzdv1pgxY9SiRQuVL19etWvX1uDBg7Vr165cn3P27Fk1b95cNptNL7zwQhFGC284e1Y6epRCPWAVCvUoaxjJBbBOZt7xvQMAAAAAQMkWHW0/Gb9aNRczPR36vrAL6v7n3QP55Gd1AN723HPPad26dRo0aJBat26tw4cPa+bMmWrXrp02bNigli1b5njO66+/rv3791sQLbyFYYgB61CoR1mTvVC/e7e1sQBlDYV6AAAAAABKh+zH2A4fPm+mv/JfdKdHPYqhUt+jfuzYsdq3b59ee+013XnnnXrsscf0ww8/KC0tTc8++2yO5Y8ePaqnnnpKjzzyiAXRwlso1APWCAuTgoIomKBsoUc9YJ2aNaXUVOnYMasjAQAAAAAABZHnMbb8Ft1tsnddplCPYqbUF+ovvfRS+fs7Z16jRo3UokUL7dixI8fyEyZMUJMmTTR8+PCCr9xW8JdA4YiOlmrUsDoKoOzJzDsK9ShLEhOlhAS+dwAr1KghxcRIxlgdCQAAAAAAKIhjx+wn47s8xpbfQn3msgx9j2Km1A9974oxRkeOHFGLFi2cpm/atEnvvfeefvzxR9ls7lfZU1JSlJKS4nickJAgSYoYESGfUz7SCUlxkhIknS54/Mi/hIRTiopKUmRkhNWhwIXw8HCne5QerVqlSDqhs2erKjKyTH7leBW5U3wdOXJUjRsHKjIyxOpQ4AK5U3o1bBinY8fSFBnJe1vYyBvAM+QO4BlyB/AMuQN4htwpvo4ePaomTYIUGVnReUYFSWGSIt18oWDZe7+H5uM57gg597r5iaUUCQsL05EjR6wOo0Qrk1WTRYsWKTo6Wk899ZRjmjFG9913n2666SZ17txZe/fudfv1pk+frieffDLH9NsjbldgncDCCBkF1KTJFlWtukJ3332nMjJ8rQ4HuRgwYIDVIaCQtWmzRdIKXXfdaGVklMmvnCJB7hQ/vr7v6bLLgjR69GCrQ0EeyJ3S5+KLFyg5OZDc8yLyBvAMuQN4htwBPEPuAJ4hd4ofY95St27hio+/IefMSEmt8/mCVSU1LnhcLl+3pRdet5hLTk7W9u3brQ6jRCtzVZOdO3fq3nvvVefOnXXbbbc5pr/77rv6448/tPT/2bvv8KiqrYHDv2kptFAiECmCBa4igvSi2EBERA2RIvqhAgp4saKAYgFFkGIFKaICiihdxA7SEYREVES8KoqIhhJKCmnTvj8mE+ZMy2TambJenvPMzN6nrIRMO2uftVesqPQ+n3jiCR599NHyx3l5eTRq1IgFJxagTQjR7AJWwFy2WACTw2P7YnJotzi0OT+2OO3L4rQfe1sUu/rqYm6+GeBVCgpifsaHqFOtWjXatLmc777bQ0FBgdrhiCAyGIo5flzLnDlvqx1KTEpNTSUjI4OVK1eSk5OjdjjCwcUXn6Zt21IKCl5ROxThhrzvxK7k5Hw2bEhi3rx5aocSc+Q9Rwj/yHNHCP/Ic0cI/8hzRwj/yHMncrVpc4oLLzxCQcGfZxt1QCugEPjFxx1Vw5agNwJ7gxhgS2xX1JuAH4O43yih11dRO4SoF1eJ+iNHjtC7d29SUlJYsWIFOp3tyuq8vDyeeOIJHn/8cRo1alTp/SYmJpKY6DqxxVHj0dDPU68tW8LxP+k8EMBxkIDjrWOfL/ftc4g63rprc9fny3rA1t8gLx/Gj8/34wcXoZeLRvMPvXurHYcIhY8/huzsbLXDiGk5OTnyO44wGzdCRgZMnZqrdijCLXnfiVUWC2zaVEh2dqHaocQsec8Rwj/y3BHCP/LcEcI/8twRwj/y3Ik8mzZB795Rco7tDrUDCL+8vFxefFHtKKJb3CTqc3Nz6dWrF6dPn2br1q2ce+655X0zZsygtLSUAQMGlJe8P3z4MACnTp3i4MGDnHvuuSQkJKgReuTQlS1R6DCQ8pjaUQTA6nTf0+MKBiy49Fdm+4q2DeB4aclpDG85nHl755F9Jtt7PL7EUJltPPWHehtP2/rys3jrq+zx3MXqSywVbePcXiuAWEPx/y9EiM2da1tEZEpLS2P48OHMmzdPvoALIYQQQgghhBBCRKiXX7YtCrWB24BSYKGPO7oAuK7s/tvYLiQNlAa41+HxMuB0EPYbRerVqwfIHPWBiItEfXFxMX369OHXX39l/fr1XHLJJYr+Q4cOcerUKVq0aOGy7eTJk5k8eTJ79uyhdevWYYpYCCcaD/djhaHstj620jNChENlB1X4u36g23taHyCp7PZKbKWeAh3kUtGgh0B+Jn9/X97i8mdbf2P0dz/etgvG8fyNRwasCCGEEEIIIYQQQohoZL+m1uB1LffbACRiO5carDjsqhJ3iXoRuJhP1JvNZgYMGMCOHTtYs2YNnTt3dlnnwQcf5NZbb1W0HTt2jOHDh3P33Xdzyy230LRp0zBFLIQQIixiYQCM/cPoOcggF+GfYAw4cGyr7EAEX+5bPPR5Oqa3xb6/6mX3LwUaVWJfvvyszsfyto23/VfmZ6romBX1ycANIYQQQgghhBBCRAv7OVFN2X1fzos6JvUTCE6iPsnpcbUg7FPEHdUS9TffHNj2L7wALVtWvN7o0aP5+OOP6dOnDydPnmTx4sWK/jvvvJM2bdrQpk0bRbu9BH6LFi1ckvhCCCGEEDFB43QbL+xfzpohg1zsnBP/9qS+c3Lf0+OK1qvswAFv27iLs7L7cN7G13348zNVtE1F7c779HYcIYQQQgghhBAi1jlfHe/LuR3nbYKhhtNjSdQLP6iWqP/kE0hNhapVK7edxQKHD8PDD/u2/vfffw/A2rVrWbt2rUv/nXfeWbkAhBBCCCGEiDUalAM2dGoFIvzm6wCIivo8bW+/UqAbZ6dbqcygC3u/r4M4KjOAItiLrz+TL4vjYBYZWCGEEEIIIYQQgUvwcN8bxyvqUwjOtOqSqBdBoGrp+1dfhUGDKrdNTg7Urev7+ps2barcAco0adIEq1XOoAghhBBCCCGigH2gRagGWdhPaqQilSiCpbIJf18HGARjcEGg+3YeoICXfVd2kENl1/H2MwkhhBBCCCGijz+Jesf1agUpjupOjyt5YbIQoGKivlUrqF278tsZDLZtqzs/AYQQQgghhBBCiGjhXMlChJenwQ6Vue/4GJSVGOy39moU1wBFuJ/Owtt+K7pv35/z8X3dZ0XbOe8j0N+TL+tV9HNU9vcTSKwysEMIIYQQIvI4Jt2TfdzG8Wr3mkGKQ66oF0GgWqJ+zx7/tktJ8X9bIYQQQgghhBBCiLANlLBXo6iFnLiLBZUdVOD8uLLrBWMfvu7b3c9TUZ8/cfu67zplbXXwXjWjsnF7m9pECCGEENHBMTlfD/izgvU1gGOl7ppBisM5US9X1As/qFr6XgghhBBCCCGEEEKIqOA8wCNU042Is4NcriJ8U674MvjAeUoPbwMUvA0K8GXwguP+/N2Xt32HYqkoTm9TlvgSmxBCCAHQwOF+mg/r10Y5R30NQIuyOpU/nBP1BiARKAlwvyKuqJqoz82FAQOgWzd48knP673wAmzbBsuXQzUZgS6EEEIIIYQQQgghhAgmjdOtiDzuEvrOj8O9eBt8UNGgg4ruu+vzNuWJlbPzLqdxtjS0p3370lZRPM73K1tpBIdbIYTwRW2Uc8PXwZYg9zawr57TYw2QApwKII5k3GdYawDHA9iviDuqJupnzYJvvoH33vO+3r33wrRp8MYbMHZseGILGecP/TIiVAghhBBCCCGEEEIIIbyzn0+Vahae2a8Y7Uz4qlEEg/NAhMoMJHC3jbf9uOtXcz3748pMMeLpWL78/iqKzZffp3NfRbE6D66RfIgIxHlOj7XYytr/42Ub50Q92MrfB5Kod76a3q4ZkqgXlaJqon71ahg4EM45x/t6devC7bfDypVRlqivBSTh+0hc55GXeLn1haeRwJ7elO3runujdre/YI80DtYbtLUS931ZtzIq+7twXr+ix/4eM1i/21CNKteW3epR/g06CvYHuGD8LJ5ideTc78vP5ss2QgghhBBCCCGEEELEAhmEEX8qGgTg64AFd4MAfNnWealStm4HoMDPeHwZPOEp9sruOxjbuKtO4rgvb4/V1NhNWxr+JeoD4S1RvxsoDXD/Im6omqj/5Re47z7f1m3TBt5/P7TxBJ2WyiUDtRWvIkRMsj9PqqH+G30s8PV36Mt6wVqnovWDMYAhFIMi/H3sbjCQEEIIIYQQQgghhBAi8gZn2KtRNCS6qlGoJZSDALwtFmxXzzu7CFspeovTsS3Y/tbcJdUbA8Vu1vd03/mxu+Q/2P6WWgA/u9mXxcM2Iq6pmqi3VjKBYZE/YiGEqJivA4Rk3r3wc5fA95Tc97aunf3/MImzXyjcredtH576fLlf2TYhhBBCCCGEEEIIIUR00xBZ55arAxdXcpt6eE62B6p92eKOu+S9u1tf+ip67Hzr7/683Sb5+0sSdqom6hs3hqws39bNyrKtH01+fOBHqteojsbNK5bFasGKFavVWn7fYrVgtVoV9x3XA7CWZT40aNBpdWg1WnSastuyx1qNFg0aNBpN+br2+wAmiwmzxYzJYrLdt5pd25z6HeNxXJzb7LF7XcfdfvBhnSBsZ/9ZnBezpXLt5fuyeGgP4BiO/99CiBgT7ClDHBP10fay4U/FA3/XCWYclR204Eu83tpD3R/ofoUQQgghhBBCCCGEEL6xD3KIlQrbvwJ/qh1EdFM1Ud+7N8yZA489Bhdd5Hm9336DxYth5MjwxRYM59U6jxo1PE1UIUR4WLyUorB6ycA4Dw5xfhzMdbBCoiaRh6wPuR2Y4jhwwdN+Kr2OU19lBmn4vVjODuYwWUwYzcbyATFeF7PJZWCNc7vj4mkQSaBLRb8Tx0Ex3gYcCQG4H6wQSSNxRWgE8jIQ6AAMR/a/tepUruyYrzEEI1Zf28P5OJB1hRBCCCGEEEIIIYQQCqom6seMgUWL4Kqr4JVXICMD9A4RmUywciWMHg1VqsDjj6sXqxDRSquNnqFZSVInJeZZLK4VRNzdOib3K7WO03rOxzFZTBgtRoxmY/lAifLHFoc2h8dGi0Obl/Wc9+11uwrWc9y32WJW+79NiOAJZDBGMAdyOM6FFz1vk7HFlwEAvkwTEqy2YGwvhBBCCCGEEEIIIUQlqJqor1sXPvsM0tNh0CBIToZmzaB6dcjPh19/haIiqF8fPv0U6oVqvgghhBBhYR84okOnciTRpdRU6nZQgdVipaqlKgPMAygyF9mS/GaTb4MMAh1U4GlgQwUDIBynWxFCxDGNh/uxwJ/BAZUZPBDM/Vb2uEIIIYQQQgghhBAiaFRN1AO0bw/79sHcubB2LezfD3l5UKMGtGoFffrAiBFQs6bakVZexpIMDMkGQFnm2z5nvONc8vb7Wo0WjUajuK/VaMu3A9BoNC6lqO3zopstZsXVpOBQ4ttqRaOxzW2v1+rRaWy3eq2+vM3xvmN/eYxlt46LPVZFm9N6vmzncR1t5Y6lWE+rdelzXnQanbJN66Hdvr5W5/JYCCFCKUGfQAIJHvtTSQ1jNMFjtpiV0zY4PFbct1a8Xqm5lGJTMcWmYkpMJYpb5/vFpmKKjEU+P5ZBBUKISonVQQj2n6UmZ6eMCOagg8rsz5dqC75WZBBCCCGEEEIIIYRQieqJeoCUFBg71rYE2+7du1m0aBEbN27k4MGD1KlTh06dOjFp0iSaNWsG2Eoxv/vuu6xatYo9e/Zw8uRJmjZtysCBA3nsscdISvKvHPf639dDYjB/GhHJ3CXx3Q4G0HoZJFC2uKPReD7Tq/FwFtifbRy3K79F+dhdmz/r2B+nalK5RX8LH5s/5oT1hNt1fNlPpddx6HM34COoi8MAEMeBMfbFoDNg0Bpc+tyt68vi988TRVMliOin09qeD4kR/mZpMpsoMpUl7o1nk/kl5hJKTGVL2f1Sc6nicUV99v047tdxcR5sIIQQEUHjdBvtgjnNQri3F0IIIYQQQgghRNSKiER9KE2dOpXt27fTr18/LrvsMo4cOcKsWbNo06YNO3fu5NJLL6WwsJB77rmHTp06MWLECOrWrcuOHTt49tln+frrr9mwYYPXhGfEcHfCxtOcn56291bmUoPrybjKlNX0ZS5SX++7e+yOt3Xc/Zf62uZmHUvZP5+2rUy7p6uy3J0g9XTS1Nu63uIJkzRNGm0Mbdhl3EW2NVvdYERAgxYct3WuDKKoiKE9W1HE+da+rl99XraxD6YxaA22gRE6g22QhP2x1qHNy2OD1qHN+bGnfXtYTypyRAe9Tk91XXWqJ1ZXO5TyhL6vyX3HwQUl5hKXwQbFpmKX6gRmqxmT2XaraCtbx7nNl2oI9uo+QggRkSLoc7FfgllhIJzbCyGEEEIIIYQQcU61RP3LL0Pv3tC8eeW2Ky6G2bOhf39o2LDi9R999FGWLFlCQsLZksEDBgygZcuWvPjiiyxevJiEhAS2b99Oly5dyte59957adKkSXmyvnv37pULFGwnICycTVJbHG7dtVemXKQQkagyAwQcb3VALeAMZ0upuluvon1WFE+gfBnI4e1xlJz4tVqttgQdUu471DQajctgAb1O73VQgOPggXq6etyYcCMbLBso0BZ4HRRQ4WCCIA1USNB7LtEvApdkSCLJ4F+lHzVZLBZFst+exC+/72ZAgOM69ul97I893jpMCeQ4HZBeq6daYjUsVgulplL0Fj3nW8+nqbEpueZcSs2lGM1GSs2l5fdNFhNGixGj2YjRYqTEVMLh3MMcOHmAf/L+wWK1VPyDCyFEOETh500FX6sKBFKJQKZLEEIIIYQQQggRgVRL1D/+ONSvX/lE/Zkztm1bt/YtUe+YfLe76KKLaNGiBfv37wcgISHB7Xrp6ek8++yz7N+/379E/UnwMqWwELHHn6oHAIayW2PZEo+8nWD1pRJCRSdofT1p62MFCa/tvgyqcHcba2V0fWC1Wm1JQLPRr7/9NE0aTQ1N+dj4cURVo7BP2eA8CMBxKgedpuy+zuG+mykfPG2jeKzVk6BLsCWx9Ukk6hKV9/VJisfJhmRbW1l7sv7sY5n+ITS0Wi1atBh0hopXDqPLudyv7cwWc3kyX1FtwEM1gooGJ3jqd96386AEx4EE9tcS+337gAPndTy1l/e52ZfRYsRskcFbQogQicbPgJVJ7ts/WlSF8nGwwapQUNn9CCGEEEIIIYSIKKol6q1WWLUKfv+9ctsVFgbj2FaOHj1KixYtvK535MgRAFJTUwM/qBBCeCMn0irm7eRtMPr8qYbgS3tlqkN44mnwhQbbQBcztr8bX6bCCAN7ErGE6JtT3aAznE3clyX3FYl9h8eJukQS9bYlQZdgu29vc+5zeOx8P0mfRKI+UbF/mRYhsum0urj7P7JYLK7JfYuRUlOpxwED9kEBJeYS/jj5B4dOH8JoKatWYD57W2wqpshYRJGpiCJjESWmErfr2ascOD4WQghV+PM5zkDkTD4Y7OkPPLW5e+yt3Zd1pQKCEEIIIYQQIoao+jVx1SrbEm7vv/8+//zzD88995zX9aZNm0aNGjXo1auX1/VKSkooKTmbjMjLywOgnqEeWoNcmSdERVL1qYpbISJCFAyeSNWnQjKkFqVCZfNVvg4c8Gc9XwZARMigAhcWoNS2GMv+5ZMf9jB0Wl158j5Rn0iCPqE8uW9v87gYlOvYt/W0nb0qgVarLa9ioNVolW0aXfn9SLsqXoSHVqslUWv7m4kkJrMJk8Vh8fTYqd1oNpZXRrBXJ3B5bFa2+7Jf+2OP+3VoL6+WUFYpwWKxuFRNKG93mAZCLamknr2NhNdrIaJERD53IiWOcKtoEEFlPv9XZgBCINt4Ws/XygmVGVQRYeQ8gRD+keeOEP6R544Q/qlVpRZHOap2GFFNY7VaI/yjeXD98ssvdOzYkRYtWrB161Z0OvdXQ02ePJnx48cze/ZsRo4c6XWfEyZMYOLEiS7t48aNIykp+uaRFUIIIYSoiFarRavVotFoyu97a3PX7utjjUajuF/Rrf2+ndVqpbS0FACdTueyaLVal8f2NvutwWCgVq1aJCTIvEZCXRaLBavVisViUdx3bPO0TmXW87Rv53Xsi9ls9qmtMut6214IIYQQQgghhBDqKi4u5sUXXyQ3N5caNWqoHU5UiqtE/ZEjR+jatStGo5GdO3dy7rnnul1v6dKl3H777QwZMoS33nqrwv26u6K+UaNG1Lu3HtoEuaJeiIqk6lPJqJXBylMryTHlqB2OEFFDnjtRTIOy+oC7W3fVCbxVLvDUJ1ykkkqGIYOVxpXkULnnTp2qdahfvX55+XudpizBr9Ep29zdd3qs1+rRarRn72u16DSe79urHdirG9grHDjf2hfHdr1OT4IuAb1Oj0FrUNxG2lXyQvjCPh2D2WIur2hgtVrLKw/YF8VjS1mb1axY1/7YZX2Hx+7Wt1daKDWXYjSdne7BXZvj9BClJltbqbm0vAKDc5t9e+e2OPr6HjMCec8RIp5FzHPHW9UCX6sweFrP14oI/mwbyHFFVJPzBEL4R547IuposZ3/szosnrireKp1WHRObTjt08u5xlqHavHzez9Loj4AkTJDWsjl5ubSq1cvTp8+zdatWz0m6detW8fgwYPp3bs3c+fO9WnfiYmJJCa6nuA8ajwqJ8qFqIQcUw7Zxmy1wxAi6shzR3jly6CAim693ff2OFKVxZZDDtnWyj13sguy+angpxAEpS6dVodBW5bk155N9hu0BhJ0CYrHFbUbdA59WgMpSSlcfM7FpCSlKAcTlK2bpE8i2ZBMsj6ZZEMyCboEdFr3Va+EsLNPxxBvTGZbwr7UXIrRYkvil5pKlW0OjyvTZh9UEKw2o9mo6nQNESOA9xwh4lokPnc8TesVyyqb7K/MYIZIexysfUQIOU8ghH/kuSOCQgskAQll989gm24z0aHNzgwYy24dt9c4PXZcPHGc4sjK2eR7ZTi+t2k8tDuwlMp3vkDFRaK+uLiYPn368Ouvv7J+/XouueQSt+t9++23pKen065dO5YtW4ZeHxe/HiGEEELEsopG1YZaRdUCvN3XutnG3eI4wlf4xT4nerGpWO1QANBoNLakvta1YoBzu7s2T+sGu93ffSToZQoF4R+9zlYhowpV1A7FJ2aLueIkv8lh0EFl2kyeByy4G4xQYi6h1GS7LTGV2Nrst+YSqVYghBDuOFfxEr5Ta+CB/TuUPUEUjIEUga4nb7FCiFhlAKpiy7SasCXjtbhmXqt72YeubAmGaLh4RriI+Uy02WxmwIAB7NixgzVr1tC5c2e36+3fv5/evXvTpEkTPvnkE5KTk8McqRBCCCFEDLI63YZaRUl9DbZPwAaghLMjjL0NKJAvOGFnLytuNBvVDiVkFFMhONzqtXrXqRKcb8umS3BuL9/WYT+O6zm3eVzfTVsNbQ1a6lvyP/5HiaYEg9ZQ3uc8EEEx7YLzffs6OvfrSzWF2KLT6kjW2qplRDqT2WRL5jsm8B0S+fYkv8d+d+2mEpItybSxtqF/aX+Omo669Hvb1r5vs8Vc8Q8ghBAisqhVgcF+nCQiP0EeysEAgVSDCNfxhRDRyZ6IT8D2WmsX89lWVylJKYzvP54Hlz6odihRLeb/dEaPHs3HH39Mnz59OHnyJIsXL1b033nnneTn59OzZ09OnTrF448/zqeffqpY54ILLvCY4BdCCCGEEBHElwoCBmyjmYuwlRfzhy8DArytp3WznogrZosZM2ZlebsIlqZJY7hhOPOM80JagtheTcHXxL7jIACtRotWo0Wn0dlutU63Ze0ubVovfW72Y+/Ta/Uk6BJsiz6hfEoI+2P7/fJ2X9qk2oJq7NUKqlI1JPvvQx+/t7VYLH4NEvC3v6JtZYoDIYQQQSEVG85Sa2CBt7Zg9AkRKwxlSwJxkFWFetXq0aFhB86peg65xbkczjtM3ap10Wq0nCk9Q4m5hI4NO/LYlY+RbEnmQSRRH4iY/5P6/vvvAVi7di1r16516b/zzjs5ceIEf//9NwDjxo1zWeeuu+6SRL0QQgghhDgrVFMKeJoGwFtbZW/dDSZwdyuECuKhmkJFDDqDS/K+fACALkHR762tMuv63SYDC8JCq9VGdGUCs8WsmNLAcdoBx+kK7Oso1q1gO4/rBridyWJS+9cmhBBCnBXLgxbCNSjAnz4ZVCA8SSxb9FR+jvcgSNInkWxIJkmfVL6YLLYKYMXGYnJLcjFZTFQ1VKVaYjWKjcWcLDrpdZ8ajYa6VevSMKUhjVIa0bBGQxqmNKRhjYbUrVaX6gnV0Wl1VE2oyn9S/4NW69sPnpeXF4wfOa5FXKL+n39gyxY4dgwyMqBhQzCbITcXUlJAV8lKiJs2bapwnSZNmsh8dEIIIYQQQn2RdsLAl4EDVpQDF9xNJ1DR9AI4bOvu1nl9d3FpvawnRBSxD1Q4wxm1Q/GJorKAQ5UAb1UDwjmYIFGfqOgTwWefkiPJkFTxyhHEZTCByf3AAsUggwoGIXgckOBuO1PlByTIuSshhBBRJ1oGhNvjq4nvlQj87Qvn+vFOg+1KeB0V/w1aytZLIHhzxnsKS6OhSc0mXFL3Ei4+52IuqXsJF9S+gJSkFBqmNKROlTqV3mexsZhfcn7hj5N/kFeSR6IukSRDEnWS69AopRENajSQgdYRKmIS9VYrjB4Ns2aByQQaDbRsaUvUFxRAkybw3HPw8MNqRyqEEEIIIUSciLSBA4GwTzlgHxHvmNh3vtU4rBPpJ5SEUJnJYsJkMVFoLFQ7lAppNVoMOgOJukRFEt/lVpfota+ibR0fV9dXp5G+Ead0p9DqtJ63kZNmYZegj76qECazye+KAxUNLHAZkODj4IWKBjKYLVEyx4sQQgjhTqxUO/B3QEAgbYHsw9t9A5DM2QsHHPuNQHFZX7LDemFWK7kW1RKq0bJ+S7o16UaXxl2olVwLAJ1Gx3k1z6NKQpWgHjPJkETrtNa0Tmsd1P2K0IuYRP306fDaazB2LFx3HfTocbYvJQX69oWVKyVRL4QQQgghhPCDFdt88P7kC+wJ+4qqA9jva50WubpfiIhgsVrK52APlzRNGsMNw5lnnEe2Ndvrus5VAJwT+Y6DALz1VbRtZQclRNuV8rFMr9Oj10XMqTyfWCyWiqdAcJPg15q1NLY25lLjpeSZ84I7XYIPAxKEEEKImBItlQ0ClQhUIWzl6utWrcsdre+gY8OONKjRgAY1GnBujXNJ1CeGJ4AQyi/J54+Tf3BezfOomVyTowVHyS/Jp4qhClUMVThZdJL9x/fz7op31Q416kXMp/v582HwYJg8GU6ccO2/7DL4/PPwxyWEEEIIIYSIc5Yg7stTct/X+5Xpi/WTMELEGHuSsKC0QO1QXOi1etsAAV1i+fQCjtMMKO47THFgnwLB47r2fbnZxuO6zscqm2LBcbtou1I+lmm1WhK1iX6fsG5BiyBH5Bu3Awr8qDjgOJig1FxKiblE8djtYipbz+Gxp3VLTCVYrMH8oCKEEEJEuRAl6asmVKXnRT3JaJFBk5pNqFutLufXOt/nudwjhcls4p+8fzicd5i/c//mn7x/yM7P5nTxaUxmExarhaMFR9lycAvFpmI0Gg2JukSKTcVu91fvQL0w/wSxJ2IS9X//DV26eO6vWhXy8sIXjxBCCCGEEEIEnVrTCbirAmC/rahNg22OPgNQgm3ggqftnI/n7dhCiKhhspgwlZo4wxm1Q/GZXquvcDBBRYMCgjaYwMeBCzptiCdEFT4z6AwYdAa1w/CJ2WJ2m+x3Tuh7HRzgbh0PAwQ87cux3fm+0WLEao2FuZSEEELEOq1Gy6X1LmXgZQNpVb8VtZNrU7tKbc6vdX7QKxudLDzJz8d+5ufjP/PL8V84VnCMnMIc/jz1J3kleRQbiyk2FVNiLkGn0ZGkTyLZkEzNpJrotXoKSgs4U3qGKglVOL/W+VxS9xLqV69PVUPV8u3yS/L5O/dvDufaEvNHC45WapCf1Wr1mKQXwRExifq6dW3Jek+ysqBx4/DFI4QQQgghhBAxI9ABAgagOlCEbd6/YPJ1sEBF/b4MDqjoVggRM0wWEyaLiSJjkdqh+Eyr0boMDAjmYIKgV0GQ6gURQafVkaxNJtmQrHYoXhnNRo/JfJfkvr2igFN1AW+DAXwZNOCtTaY8EEKI2KbVaKmaUJVrz7+WC2pfgE6rQ6fR0fyc5lxa71JqJNagWkI1aifXDtrUT8XGYr49/C1bDm7h52M/lyfIj585zr6j+zh25pjP+zJZTRSUFlBQWsDxM8cVfSeLTnI49zBbDm4JStwivCImUd+3L8ydC3ffbZuTHkBTdrLkq69g4UIYM0at6IQQEcX5BLO1kvcr6vO33dd+X9dRg7eT1L6ewPa0nq/79nc9d9v5ul8h4oEFMJUtZmyvQzpsnwb1ZfejlRE4he1n0Jbd2u9rHdqiqxqZEPHDSmR9NgrG9ASVnb5ACCEAi9VCiamEElOJ2qFUil6rD6jCgLt16+jr0MnQiR/5kVJdqf8DF9xNjaBLiLoytbEgGqoUeKoq4DhwQJHw9zCVgS9VB3w+htM2MtWBEEJUzn/O+Q8LMxbSsVHHkOy/sLSQFftWsPvwbv7J+6e8lHxucS4FpQWx/bptIfgD+eNQxCTqJ06EjRuhdWu48kpbkn7qVHj6adixAy6/HJ58Uu0oRbTSaGBQB6hemSnRrNheaBxPHFrc9Hlrd9fvuDj3Oa/j7rGnddztAw/bVabd3Tqe1qtMv8PjlBpnaNduN0XbzpCb52Y7d9uKqPHdd7Brl9pRuFFReV7H+5Vt83bVX0X9vl5RCHAOcBuwBTjhtE5lEgtaN9t6Sjr4sl1Fi9Zpe8dbb9sE67H9fgilpcDNrSpxGDO29wPHW+f79uS6vd15Mbu577i+loo/+TknuCu679zm3O7c7+svxOrjuqeBY9j+/n19j9c4vO98c4bcApR/G/aBCwanW/tgBvutAd+S/2eA/LPHLv/7c/c36e02kHPJVqAU25cnx/+ryvyfuFPM2b8tFZ5n7lissGoP5ETe9M4imqgxPUFF77ve+vGyjnOfEEKEgL16QaGxMGj7TNOkUWwoZp5xHtnW7KDt106r0QZlugJfplRI1CcqBwqU7TtRl6h47GlJ1CfKtAhhkqhPJFFfmZOH4Wef6sDTYACLyUJtS226m7pTYC5wW5nAlwEC/gw4sO9LqhMIIYKpUQr0bl65bTRo6dT4Lto3uJ2L6/YIWixmi5HfT2xl79FPyS3+l2NnfiM7bx9Gi600fL1qtiVmOJ5b9JATS6pZyKur1AgudkRMoj4lBXbuhJdeghUrICkJNm+GCy6AZ5+Fxx+H5Miu4CQ8cU48eEpEVLSet0REBUvL/8DiuWAygUyJFYny0Go/5/rrY3h0WZzS6WDvXtsgrIgTCwNB7Im7HCD4565in6ckqWNitDKJVId1HxwL4+4Ao5yfiFDyvhMQDRH7umkwQK3DMPU9bAMJNJwdXOE40MK5zXkAg7t1nPvsbY7bSjJU+CtcgwMqSub72uau37FdCCEinMVqodhUHDVzrtoHFjgn+50T+h4T/n4MDvC0D0/rJOoSpVJBGPg61UFj1J1D1jHxH5TKA+7aAzxGTF/lKkQMeewKeLALGM2+btEUnfZdtJorAjqu1fo3FusKrPwM1lPAEax8x/m1izi/dkC7jil5ufm8Ok7tKKJbRCTqi4vhzTdtiZynnrItIkicy9w63jd7ue+tzdNVfu7aIuTzTnLZZ9PWrWHfPlVDEW6kpaUxfPhw5s2bR3a2ZBtjybRpcPPNakchhAf2SiEheK9KLrYNUrnssuDvWwRO3ndi199/Q1IxcLzCVUPDPjDAMXnvaSCAuzZviwGoAlQDkpBkqPBPOKsF+DMYwJdFCCHiULQMLNBpdS4DAtzed/PYMfFf2fvlx3QzIMH5mCI8EvSR//u2VyfwZTBAZac/8GfAgadjCBHvkg2w8xB0nud9vSR9EsPaDWPK9VOoluj5snaj2UjmP5mcLDqJxWrhdNFpdv+zm8O5hykoLSC/JJ8DJw+4zAMfdvYLUe3nLp1zcRFyAUW9X+sBR9UOI6pFRKI+KQnGjoXXX4du3dSOJsys2JLh9nKkjou93eTw2NNi9vA4QhLlakso+1woVzYKEV5G49nnnxDxJCFB3nOEUIPq7ztWwjM/mxaoii1pX63sfjJnE/nVyh7LRW1CTc5TZwWTr8n+ivplEIAQQgSV2WKmyFJEkbFI7VA8sk9X4JjY96UygbcqA54qFfhzDKlMED6+VidQW8ADAdxNf+A84CDA6gZmi8+XOgtRaQk6MHrIcxl0BlrVb8UNzW5gVKdR1KtWz+N+vj7wNY99/hi/nfiNM6VnQhRtJdnzg/b8nz0hHyFJeBEeEZGoB7j0Ujh4UO0oguwAtkR7EVDisJQ63JeT+GFhMNhuS2UQohBhVVp69vknRDwxGOQ9Rwg1xM37jgXIL1u8sSfvq2C7Cj+57DbJoS+5bJGpb0U0CfUgAPutP1f7a522l1yLEEJEFKPZiNFs5AwRkqRxw3mqA5fEvpcBAnX1deme0J2d7KRIV+TzgANF5QFfBiHoE9X+NcWNaKhOYLFYlFUBgjA1geNjo9movLUYFW1Gi9N9U6myzWk7k8Wk9q9MVIJBB6VuxoLcdultzLxpJvWr1/e47aHTh5ifOZ9P//cpe/7dE8IoK8GK5AeFQsQk6l94AQYNgmuuge7d1Y4mSLaqHYCwkyvqhVCH6lc2CqESuaJeCHXI+46TorLlhA/rGlAm8e2JfHtbbeAc4Ay25GM8DIgQ8SnY0wMYsD13TmO7SsbXq/4r047DrRBCiKgXyFQHaZo0ahtqs8C4gGxraKf5slcn8KsigUPiPyjVDTy063URk/6IaVqtliRtEkmGJLVD8ZlzMt9kNpFsSeZO850UmYs8J/0d2jwNHKhoAIHjdi5tPgw8sFjjq4xygk45P32DGg2YfP1kBl8+2Ot2b+5+k0c/e1T9q+cdp5i2V9EWwkHEvFPNmgW1a0PPntC0qW1Jdqo6o9HAmjXqxCeim1xRL4Q64ubKRiGcyBX1QqhD3ncCYJ9+y9NV+mlAS+BLIBvbFfiOSf3EssWe2E/0sEgyUcSzUFYCsPOU0K/osXObL9sLIYSIa9FYncCXAQL+DDgIZPoDqU6gjgR9AgkkUJWqivZa1FIpIt/ZKxh4S/AHNFjA3cCDsjZ3j52rFzgf0zmeyk6VYL+ivluTbky5fgqdGnXyOkXIV799xeTNk9n85+ZAf9X+sZeyty9Sxl5UIGIS9T/+aEvEN24MZjP8/rvrOhr5Mij8ZD9hK1c3ChFeRqMkTER8MhjkPUcINcj7ThiZsV1dX9nzsgbOJu0TOJvctz9OcNNvv5Xy/EJULByDARxVZlCAt/Uqc18IIYTwUSDVCcJJr9X7PjWBm2kIAq084Mv0B1KdIHKUVzAgeioYOCsxlXhM5Dsn+/9zjpFEXUNuvvhCj/s7kn+EL3/7ktd2vBb+EvdmziblS5HEvKi0iHl1DdX89Lt372bRokVs3LiRgwcPUqdOHTp16sSkSZNo1qyZYt39+/fzyCOPsG3bNhISEujduzcvv/wy55xzTmiCE2Ejpe+FUIeUIBbxSkrfC6EOed+JAvYTGAV+bKtDmcRP4GziP8HN4ryuHknyCRFswZ4qwFfekvgVJfkr2++pTQghhAgSk8WEyWKi0FiodigeaTVaxXQHngYC+DPgwFvlgURdIgadAYPWUH58++Py+/b2sjYZVBD5EvWJQakmkVecx4OfPMiiPYuCEFUlmLHNMV8MxNdMBCIEYv4Va+rUqWzfvp1+/fpx2WWXceTIEWbNmkWbNm3YuXMnl156KQCHDx+mW7dupKSkMHnyZAoKCpgxYwZ79+5l165dJMgZv6gmpe+FUEdpqSRMRHwyGKAwcr9fCxGzpPR9jDMDhWWLPzQoE/kGN/fdtTk/jvlv0UJEAbUGCDjzZxCAr+v52iaEEEKEgcVqocRUQompRO1QKqTRaMqrFDgn+N21GbQG6uvr0yehD+ut6zmjO2NL+uud1vUyWKCiAQS+xGC/r9NKKbGKFJYWsviHxTyz/hmOFhwN7cEc55e3L2p/BhUxJWJOMRw65Nt6jRtXbr+PPvooS5YsUSTaBwwYQMuWLXnxxRdZvHgxAJMnT+bMmTNkZWXRuOwgHTp0oEePHixcuJD77ruvcgcWEUVK38e+BBKoRjVOclLtUGhMY2pSU+0wADjEIU5zWrXj259zOp1tWhMh4oWUvhdCHVL6XnhlxXbVQ6DnFjXYkvbOyX3nxL7zYnBaR67wF2F27plzSS1OVTsMAP6t8i85yTlqhxG4SBkwAIEn/CszMMDTQAMhhBAiAlit1vL50n2VpknjP4b/8IXxC7Kt2SGMrmL26gW+JP1DNVjAl3152t7b/PGBslgsvLD5BV7Y9ELoBo2Uli32pLwQIRYxifomTXybg76yiZ4uXbq4tF100UW0aNGC/fv3l7etXLmSm266qTxJD9C9e3eaNWvGsmXLJFEf5RISwCQvqjHrUR7lKZ6iOtVZznJGMII88sIex4VcyEIW0pWuYT+2J6WUspjFPMADFPp9+Zn/7InKhAQoKgr74YVQjZS+F0IdUvpehIWVsydvzgSwH8eEv+PimNRPdGrXO906riuJMuFBw4KGLNy0kOv+vU7tUMqZNCZWNl3J8CuHk5uYq3Y4scFK5AwYcL71p5KADttrm+NcrzItgRBCiDhQXr0g4BHG6nAcaOCcyHf32HkwgPPj8Vcb+Cc3geU/weaDm0M3B739+51cbCbCLGIS9e+845qoN5ttc9e/+y7UrQv//W9wjmW1Wjl69CgtWrQA4J9//uHYsWO0a9fOZd0OHTrw2Wefed1fSUkJJSVnXzTz8mwJwnr16oV09JDwXWrqGYzGPNLS0tQORbiRmpqquPVVFUsVXs59mZuLby5vu53b6aDrwJBaQ/jN8FtQ4/Sme3F3Zp6eSYo1JWzH9EUCCQxhCB31HRlWaxh/6f8K6/GrVi0CTtOoUT3y8+X1MNj8fe6I0KtSJQe9Xk9aWk21QxFuyHMndmm1J0lOhrS02mqHEnPkeRMmgVz1r8P2Dd+AayLf3p7gcN95YEDEnB2ILan6VMVtuHX+pzPzvpxHalFkPXf1Vj0D/hhAuxPtGNprKL/W+VXtkES4+FiFoPy5U5rq/9Vs3pL6ntqd+71NNyCDBUQESiX17K38PQrhM3nuBJm5bDHaH9r+FVNc6V091PE4+/9NYOkO23n3NE2QczxWbNOrGQFt2SJ8VqtKLY4S4ukHYlzEfBW/+27PfWPHQseOkBukQdbvv/8+//zzD8899xwA2dm2UibukrhpaWmcPHmSkpISEhMT3e5vypQpTJw40aX9nnvuISkpKThBi4B07rwdjWYLw4cPVzsU4UVGRobP69Y6UYsBSwdQr7ieS98F5gv4Ku8r1ty6hv2X7HezdRBZ4KotV3H1pqtDe5wAtTC1YEP+BlZmrOTARQfCdtzmzfcDSxk2bDCFhVXDdtx4U5nnjgiPc8+dB5zL8OF91A5FeCHPndjTuPFyqlQpZPjwu9QOJWbJ80YI/2TUCvNzxwqddnaix1c90Foj92zjBbkX8NXKr/jo1o/Y3yLE391EVAr7c0eIGJFhkOeOEP6Q507kqaufxSVcxHBDz9AdRCrz+a24ejE/f/az2mFENY3Vao2EwlgVeuklmDUL/vwzsP388ssvdOzYkRYtWrB161Z0Oh1bt26lW7duLF26lP79+yvWf+aZZ3j++ec5deoUNWvWdLtPd1fUN2rUSK6ojyCjRhUwfPgZWrZ0TeoK9aWmppKRkcHKlSvJyal4nsLriq9j1ulZPl29PrPqTKZWn4pFYwlGqArVLdWZeXom15dc79JnxoyF4B+zMgy4TtJrwcLU6lOZWXVmWEaHXnttMYsXn+Lyy+ty9Kgu9AeMM5V97ojwWb/+ODt2JPD005FVZUPYyHMndr3++mkaNDCTkVFH7VBijjxvhE/0nL2a37mMv+OV/Z6WGPy4mKpPJaNWBitPrSTHFJ7nTrIxmekbp9P3t74ufRYsmLXq1vPUWXRo3VyqNKvNLF7s+CIWrbrfo0RkUOO5E3M8TTWAm3ZvlQR83U5EhFRSyTBksNK4khzkuSOEr+S5E7m2P3KMT35KYsq6GoHvzAwUU36lvwhcrT9r8fNnP5Obm0uNGkH4P4pDEXNFfUUsFjhyJLB9HDlyhN69e5OSksKKFSvQ6WxnAZKTkwEUyXa74uJixTruJCYmur3a/uhRKfcQKYqLoaTkbPUEEZlycnK8/h9p0DCe8UxkosuJndOc5hCHuIzLFO0PnHmAZmeacTu3c4pTQYv1Yi7mIz6iGc1c+j7gA4YxTJU54R1dyIV8xEe0oEV5mxYtT+Q/QfP85tzN3eSTH9IY7C+DJ08eQ55+oVPRc0eEn0YDp0+byM5W93VAeCfPndiTlwfnniuf+UJJnjcipHRAImfL9ie6eWxwaHPss5f1j1A5phyyjaF/7jTNa8qqr1bR6mQrl761jdfyf9f8n+pzwjcqaMTKdStpf7y9on3Ud6NofrQ5A68byMmkkypFJyJNuJ47Igick/eekvru7lf2sfCs7PeTQw7ZVnnuCOEzee5ELK0WTpnPkG094/9OTEA+Mv98CFgKZZBtoCL4a6xNXh5s2QLTp8Pll/u/n9zcXHr16sXp06fZunUr5557bnmfveS9uxNO2dnZ1K5d22PZexEdEhLAKKOkoloNavAu73ILt7j07WUv6aTzD/8wl7nchbLcbU96kkkm6aTzIz8GHEsGGSxkIdWopmg3YWIMY3iFVwI+RjD8zu90pCMLWEA/+in6+tKXi7mYdNL5H/8LWQz2512ClA8ScUbed4RQh9Eo7zlCRDUztvkh/R3npsF9At/5sfPimPyP4qv6e/7dkyUbllC7pLZL34Q2E3iu7XNYNeoXVfy72t9c2edKZm+bzZBfhyj6evzTg6xVWaRfn873qd+rE6AQwj/WsiWc/BkE4Gufu/tCCCHCLkEPxkBywUVAADl+IUItYhL1Wq3t6jN3rFZo3Bhmz/Zv38XFxfTp04dff/2V9evXc8kllyj6GzRowDnnnENmZqbLtrt27aJ169b+HVhEDIMBSkvVjkL462IuZjWraU5zl76lLGUoQzlT9m57N3ezm928wiuK0u/ncz472MG93MsSlvgVhxYtL/AC4xjn0nec4/SnP5vY5Ne+Q+UMZ+hPfx7ncaYwBZ3DmceLuZhd7GIwg1nDmpAc3/68M7hW4Rcipsn7jhDqKC2V9xwh4poVKClb/KXDe1LflwEA4Z4BzwpPfP8Ek3ZPcqk8lmvI5Y5r7+DT8z4Nc1DelehLGHrVUHbX3c1r37xGguXsKKsmBU34Zs033HflfSxutljFKIUQEU+twQH221ANDJDBAUIIUc6ghVKTHxuWYkvSy4U0IsJFTKL+mWdcE/UaDdSqBRdcANdfD3o/ojWbzQwYMIAdO3awZs0aOnfu7Ha9jIwMFi1axN9//02jRo0A+Prrr/n111955JFHKn9gEVHkysbo1Ze+LGQh1amuaDdjZixjeYmXXLZ5gzf4gR9YznLqU7+8vQpVeJ/3aU97HudxTPj+Dl+b2nzAB1yP63z0mWTSl778zd+V+MnCazrT2cMePuRD6nB23t4a1OAjPmISk3iWZ7EQ3FI1ckW9iFfyviOEOuSKeiFEwMzYTugVBbAPPWev1D8XGADswHYlj/OV/AY39+2LDwma6qXVWbhpIX0Pus5Hv6/WPtJ7pPNbzd8C+GFCSANzL5nLD7V/YMX6FZxbeLbyYbI5mfc2vUf74+0Z3Xk0Jq0/Z2eFECIErE634eDr9AAabAPODNjmYLb4uK3zfSGEiCAJukpcUW/BNmi3GClzL6JGxCTqJ0wIzX5Hjx7Nxx9/TJ8+fTh58iSLFytHY995550APPnkkyxfvpxrrrmGhx56iIKCAqZPn07Lli255557QhOcCBuDQRIm0UaLlklM4gmecOnLIYcBDGADGzxuv41ttKUtK1hBZ5QDdB7mYVrTmgEM4BjHKoylNa1ZxSqa0tSlbwELuJ/7KabYh59KXetZT1vasprVXI5yLpGneIq2tGUQgzjN6aAd0/68k6sbRbyR9x0h1GE0ynuOECICmMoWgCplt9llS2W4S+I73Da3NGf1n6u5uPhil02XN1zOkC5DKKhaYEsmRXDyZUf9HbTt25YV61bQ9WhXRd+D+x6k9YnW9O/en6NVjqoUoRBCqKwylQPsn4WLCewqUn+nB/B3GyGE8MCgA2NFSXcLtkGxgVTWEkIlEZOov/ZaGD8errvOff/GjfD887DBc17Ore+//x6AtWvXsnbtWpd+e6K+UaNGbN68mUcffZRx48aRkJBA7969eemll2R++hggJYijS21qs4Ql9KSnS18mmWSQwSEOVbiff/mXq7maV3mVkYxU9F3N1WSRRV/6spvdHvdxB3cwn/kkk6xoL6WUh3iIucz18aeKDH/xF13pyjzm8X/8n6KvF73IJJN00tnL3qAcT0rfi3gl7ztCqENK3wshYooRj0mWW7iFd3mXGtRQtJsx8yRPMu3wNFhW1qjBdvbHMeHv+Nh5sVcE8LSeHhxm1AqKI1WOcM1N1/DKjlf478//VfR1O9KNrFVZZPTI4Nt63wb3wEIIIdxTY1oBqFzi39P6/twXQkQsgxZKvSXqzUAuBLlQrBBhEzGJ+k2bYNgwz/3HjsHmzf7sd5PP67Zo0YIvv/yy8gcREU9KEEePVrRiNauDdvV6KaXcz/3sZjdzmEMiZwfeNKQhW9nKf/kvb/O2Yjs9emYwg4d4yGWf2WSTQQY72FGJnyxyFFHEYAazi128zMsYOJvRuIAL2MEOhjKUpSwN+FhS+l7EK3nfEUIdUvpeCBHrtGiZyESe4imXvhOcYCADWc96ZYcVr0l/vzgn//VOt85tzotzuwGMeiOjOo5i9zm7mbttLknmpPLDNShswJa1WxjVdRTzL54fxB9ECCFERFFrgABUbhCAr23u+ivahxCinEYDem+l783AadR73RAiCCImUQ+uc9Q7+v13qF7dc78Q3siVjdEhvSid6UynSnl9SBsjRh7iIeYwx+99L2ABe9nLKlbRiEbl7Ykk8hZv0Z72PMiDlFJKXeqyjGVcxVUu+9nOdm7jNo5wxO9YIsUsZvEDP7Cc5dSjXnl7VaryIR/SnvaMZSzmACb0kSvqRbyS9x0h1CFX1AshYllNarKEJfSil0vfHvbQl74c5GB4gglF8r/MIhbxk/YnVrGKxjQub0+wJPDm1jdp/117RtUdRamh9OzV/faEv6f7nvp1gDb4P4MQQogoZHW6VZOvSX5/1g3kVogwM5R9Tis1uem0AnlExnM23jh+F5DznwFTNVG/aJFtsZs0Cea7GRh9+jT8+CPceGPYQhMxRuYKjmx6q56en/ek0+lOLn3ZZHMbt/EN3wR8nEwyaUtblrKUa7hG0Tec4bSiFVOYwhu8QUMaumz/Bm/wCI9gDMXZKJVsZSttaMNKVtIJ5e9/NKO5nMsZwAByyPFr/zJHvYhHWi3odPK+I4QaZI56IUSsaklLVrOaC7jApe893mM4wymiSIXIQiPLkkVb2vIhH3IdyjkS7z1zL5f9eRkZZPAP/wR+MHt1AC1nk/eOiXx3j7VOj31ZtE73nY+pRRIhQgghbNSsLFCRUA4gqOz+Pe1DxAxD2XRLbq+oz4MAri+LP1ZsSXWjm1t3be767Pcdf+/1EAFSNVFfWAjHj599nJ9vO7ntSKOBqlVhxAh45pnwxidih5Qgjlx1qcvSk0vpdMQ1Sb+d7fSjH9lkB+14xzlOD3owjWk8yqOKvk50Yg1rXLYpppgRjGARi1z6YsG//MtVXMXrvM5whiv6ruVassgigwwyyaz0vqX0vYhH9iShvO+IeFKf+vSlL7/wCxvZiFWls0pS+l4IEYsGMIC3eZuqVFW0GzHyKI8yi1kqRRZaOeTQk55MYQqP87iiryMdySKL/vRnC1sCO5D9iqBI4DwAwDmR7y357/i4onUdBwo4DxhwXl8IIVRyYe6F9P2zLymlKWqHEjTHko+x/Pzl/Fv1X7VD8V8kVR7wprKDAHRALeAMyrnOQzHYwFObcJFgT9Q7J+QLiJzPb+Fg/7xagi1R7nzrbjE63Y+n31eUUTVRP3KkbQFo2hReew1uvlnNiESskhLEkakDHVjJShqWul69PpvZPMzDIbl63YyZ0Ywmk0ze4i2XUvuODnGIvvQli6ygxxFJSillBCPYzW7e4A0SSSzva0xjtrKV+7mfBSyo3H6l9L2IQ/a/d3nfEfGiL31ZyEKqY5un6hM+4U7uJJfcsMcipe+FELFEh46pTGU0o136jnKUfvRjK1tViCx8zJgZwxgyyeQd3lEMVqhHPb7ma0Yzmtd5XcUog8hStkTSidSKKgl4SvT7UmHAuVKB42L/mm7CdnJaEhlCxA8rPLr3UaZ9Ow2dNfZGDL2w+wWGdhvK0guXqh1KbKvsgAL790i1E5qBVBLwZ93K7stTW4iUl753TNQXAsWhP3ZIlGKLvcTLYl/HnmQvwfY3GemDY4TfImaO+j//VDsCEcsSEqAodqoAxoRhDGMWsxQJYbBdvT6SkSxkYchj+IAP2Mc+VrOa8znfpf9rvmYgA/0u+x6N3uZt9rLXNoDCofx/Ekm8wzu0pz0P8ZDPAyjkinoRj+x/73JFvYh1WrRMYhJP8ISi/SZuYje7SSedfewLa0xGI+j1tqpcVvkSK4SIYqmkspSlXMu1Ln072UkGGfxLFF+NV0nLWMbP/MxqVnMhF5a369HzGq/Rnvbcx30xVf4/YphRp6xsGjAc+BjI5uxgAG/JfU+L3um+3k2bt3VlkIAQYVPFWIW3trzF7QduVzuUkKlqqsqHGz6k/fH2jO04FrNWancLB9FSscAdf5P/XtYpP8dWiC1BX4ptEF8ksGBLqBdhi80+gMDdYk/CR+P/qwi5iEnUO8rPh9xcsLiZd6Jx4/DHI6KfXFEfORJIYCYzuY/7XPr+0f7DLZZbwnr1+o/8SDvasYQl3MAN5e0zmME4xmGOw4ludrGLtrRlGcu4iqsUfSMZSStacRu3+TQlgVxRL+KRXFEv4kFtarOEJfSkp9v+i7iInexkCENYzvKwxeX4viPPQSFEtGpLW1axisa4ngCZxzwe5EFKib8XuZ/4ifa0ZzGL6U1vRd+d3EkLWtCXvhzkoDoBitBSs9qA8yABT4MFHPud13Vu87TY+4WIQ+fnnc/qr1Zz2cnL1A4lLEbvHc3lJy5nwHUDyEmOn4uERAyzergfAENZMaXSM9gS4aFkxZZMtyfe7Un4Is4m3B2T8SUhjkfEjYj66DdnDrz8Mvzxh+d1zPGXMxNBYDDIlY2RoAENWMEKOuE6H/2fTf6kT2Ef9h0L75V3AKc4RW96k0EGnejEalazjW1hjyOSHOMY3enONKbxCI8o+rrQhSyy6Ec/trPd637sr9mSqBfxROaoF7GuFa1YzWqa0tTretWoxjKWMY1pPMmTYRn8Zn/eSaJeCBGt7uZu5jCHJJIU7SWU8F/+y9u8rVJkkeE0p+lDHyYwgWd4RtF3OZeTRRYDGcg61qkUoYhJ4R4koMF9Yt9dkl+HrVyztwEABg/tsVdRXESxGw7dwJINS6hVWkvRbsHCmiZrKNSHOkMXeqnFqfQ8rBzofO2/15K1KouMHhlk1s1UKTIhIpfB0xz1gbAC/wCHgFzOJuMLkSvehSoiJlE/dy7897/QsycMGQLjx8Mjj0BSEixcCPXqwYMPqh2liFYJCZIwUduVXMlyllOPei59c6vO5dj/HePkWydViMzGgoXlZf+EjQkTj/IomWQyn/lUKZ8kENJIYyMbeZiHmc1sr/spLZXS9yK+SOl7EcsGMcjlPQGglFKe5mkyyKADHRR9YxhDG9owkIGc4ERI43OccuXMmZAeSgghgsqAgVd5lfu536XvMIfJIINd7FIhsshjxcqzPEsWWbzHe9SgRnlfbWrzBV8wnvG8yIsqRilEAKyEZ45kDWeT+O6S+QYv7e7Wc15fCB9orBrG7xnPxMyJaNEq+k4nnOaOa+/gs8afqRRd8A39ZShvbHuDRMvZqUAbn2nM1rVbub/r/Sz4zwIVoxMi8iQEO1F/CNgNIT41IUSlRMzHppkzbUn6zz+HEydsifreveHaa2HMGGjXztYuhD/kqip1PcADvMRLGFBeVn2GMwxlKFtqbGG4brhK0YmKLGEJ+9jHKlZxPueXtxsw8AZv0J72jGQkxRS73b60VK6oF/FFSt+LWKRHz3Sm8zAPu/Rlk00GGexgB6/xGrOYxTCGKdbpTncyyaQvfdnDnpDFKVOuCCGiURppLGc5Xenq0reZzfSnP8c4pkJkke1jPqY97VnNai7hkvJ2LVqmMIV2tONu7qaAAhWjFCKCWbHN9Ruq7y0VXdHvaZCAwanPeT0DyvmMRdSqUVqDRRsXcetft7r0/VTrJ9KvT+f3lN/DH1gIvf2ft9lbey8r162k4ZmG5e1J5iTe2fIO7Y+356EuD2HUych/IeDsFfWlgSbq/wa+A44GuB8hQiBiEvUHDtiuqAfXE9wpKTBsGMyeDaNHqxOfiG5yRb06kklmHvP4P/7Ppe8AB0gnnb3sJY00FaITlfEDP9COdnzABy7zEd/N3bSkJX3pyyEOuWxrNMoV9SK+yBX1ItbUpS7LWMZVXOXSt53t3MZtHOEIYCvNfC/3spvdzGQmCZx9A2hCE7azneEM5z3eC0msjlfUCyFENOhCF1awwu13old5lcd5HBMmFSKLDr/yKx3pyEIWkkGGoi+DDC7mYtJJ51d+VSlCIeKYqWxxP6Y/MM6l/t0l990l+70NFLDfyiCAsPjPqf/w0Vcf0Ty3uUvf0vOXMvSqoZwxxGaJrF11d9E2vS3Lvl7GVdnK71gj94+k1clW3Nb9NrKrZqsUoRCRI6Esg+nXFfUW4E/ge+QKehHRIiZRn5ICprLvnjVqQJUq8PffZ/urV4cjR9SJTUQ/maM+/M7jPFazmsu53KXvMz7jDu7gNKfDH5jw2ylOcSM38jzP8yRPKvra0pYssuhPfzayUdFnNMqVjSK+yBz1IpZ0oAMrWUlDGrr0vcEbPMIjGN3UZX2TN/mRH1nBChrQoLw9mWTe5V060IFHedTttoFwnKNeCCEi3UhG8hqvuVQeK6SQ+7iP93lfpciiSwEF3MZtjGMcL/CConTyJVzCLnbxf/wfa1mrYpRCiKAyly0lIdi3fRCAp0S/u4EA7toTUA4M0IUg1iiV/mc6izYtorqxuqLdrDEztsNYXrrspZgfMHGsyjG69+7OtJ3TeOSnRxR9XY52IWtVFv169GN7/e0qRShEZPBrjnoj8DPwExCb431EjImYRP2ll8IPP5x93KkTzJkDN94IFgvMmwfNmqkXn4huUvo+vLrTnQ/5kDrUcembxCSe5VksWFSITATKgoXxjCeLLBaykOqc/VKVSirrWMdYxvISL5W3S+l7EW+k9L2IFcMYxixmkUiior2YYkYwgkUs8rr9TnbSlrYsZzlXcqWibxSjaEUr+tGPo0GsPSel74UQ0SCJJGYzm3u4x6XvT/4knXR+4Ac3WwpvXuRFvuM7PuADalO7vD2FFD7mYyaW/bNiVTFKIUTEC9UgAA2er+L3VObfXZ+7x1EyCEBr0fJ85vM8+f2TLn05iTkM6D6ADQ02qBCZOkxaE492eZTMczKZv2U+VcxVyvvSitLYuHYjD3d5mNmXzI75gQtCeFJe+t7XAlO/ALsITTUXIUIkYhL1d94Jc+dCSQkkJsLEidC9OzRubOs3GGDlSnVjFNFLSt+HzxjGMJnJ6Jy+JeSRx2AGs4Y1KkUmgmkVq9jPflazmuacLVOmQ8cMZtCOdgxlKIUUSul7EXek9L2IdgkkMJOZ3Md9Ln2HOERf+pJFlk/7OspRruM6XuIlHuABRd+VXEkWWdzGbexkZ1Bil9L3QohI15jGrGQl7Wjn0vclXzKIQZzkpAqRxYav+Ip2tGMVq2hNa0XfszxLO9pxB3eQS646AQoh4pcVKC1bgs0+CMAAnAvcAWwCTnM2me98hb9z4t95agDHvrOFSvxWq7gWSzYs4YbDN7j0ZaVm0bdHXw5Vd51OMR4suWgJ+2rtY9W6VZyff355u8Fq4I3tb9D+eHtGXjGSYr1kHkX88bn0vQnYDBwIcUBChEDEJOrvuce22HXtCvv2wdq1oNPB9df7f0V9QUEB06dP59tvv2XXrl2cOnWKBQsWcPfdd7usu2zZMl5++WV++eUXdDodl156KWPGjKF3797+HVxEBLmiPvSqUY13eId+9HPp289+0knnf/xPhchEqOxnPx3owLu8yy3cougbyEBa0IJ00iktPSBXNoq4IlfUi2jWgAasYAWd6OTSt4ENDGAAOeRUap9GjDzIg+xmN/OYRzLJiuNtZjMP8ABv8mbA8csV9UKISHYN17CUpZzDOS59U5jCUzwllceC4E/+pAtdmM987uAORV9vepNJJrdyK/vYp1KEQggRZI6DAArK2k4CwZriXIPnRL7zVAFulsuKL2P1T6s5v+h8l10vPH8hIzuPpDgpvpPQP6T+QLv0dnyw4QN6Hu6p6Lv717tpebJlXA9mEPGr/Ip6b4n6M8AXyDz0ImpFRKK+uBjefBNat4Zu3c62n38+PPRQ4PvPycnhueeeo3HjxrRq1YpNmza5XW/mzJk8+OCD9O7dmxdffJHi4mIWLlzITTfdxMqVK+nbt2/gwQhVyBz1oXURF7Ga1bSghUvfKlZxN3eTT74KkYlQyyOPdNIZz3gmMlExH2RLWrKb3eR+fQcGw+cqRilEeMkc9SJaXcmVLGc59ajn0jeDGYxjHGYqMzGc0nu8x0/8xGpWcx7nlbcnkMA85tGe9oxiFCUB1BmVOeqFEBHJCiMKRjCe8S6Vx/LJ527uZhWrVAouNhVRxJ3cyW52M4MZ6B1Of13IhXzLt9zDPSxnuYpRCiFElLBim/PZj++4gxjEfOZThSqKdiNGHuZhZv8xG/4oa9RwNvHvOAhA59Turs15XZ2XfTivEyFl5U8lneLGG250Oz1A25y2ZK3Kon/3/mxssFGlCIUIvwrnqM8F1gKFYQpIiBCIiER9UhKMHQuvv65M1AdLWloa2dnZ1K9fn8zMTNq3b+92vZkzZ9K+fXvWrl2LRmN7hx4yZAgNGjRg0aJFkqiPYlL6PnRu4iYWs5gUUhTtFiw8xVO8yIsyB2CMs2JlEpPIIoslLKEmNcv7alGLmqM+oXPvZ9HwgvwtiLggpe9FNHqAB3iJlzCgzHCf4QxDGcpSlgblOHvYQ1va8iEf0p3uir5hDOMyLiODDA5z2K/9S+l7IUSkSbYkk7Eig0vzL3Xp+x//I5109rNfhcjiw2u8xvd8zzKWUZe65e1VqcoyljGd6TzBEwENRBNCCOFKj57pTOdhHnbpyyabfvRjO9uVHVZs5at9nYs6WOwDBHxZtB4ea7FlWrQVrGe/7/y47L5Fa2F82/FknpPJok2LqG6sXh5makkq6z5bx9gOY3npspciZoCBEKGU4C1Rnw98giTpRdSLiEQ9wKWXwsGDodl3YmIi9evXr3C9vLw8mjVrVp6kB6hRowbVqlUjOTnZy5Yi0knpeyU9el7kRXrRiwT8P5OtQcMFXODSfpKTDGIQX/JlIGGKKPM5n9OOdqxmNS1pWd6usWrp+MnzrKYdgxlMHnkqRilE6Enp+9g3kIEMZzgNaah2KEFhwKC4wt3uAAdIJ5297A3q8U5wghu4gclMZgxjFH0d6MDP/MxRjvq1b/0B4EKYlfMP05nP+7wfhIiFEMI/53M+a0+s5ZKjl7j0rWGNfDYOk81spg1tWMlKOtJR0fc4j3M5l5NOOgXl9aKFECJ+taIVYxhDBzoEtJ+qVCWNNJf2b/iG27iN7KDV5Q8CtQYIeLGa1fyi+YXVrKY5zcvbdVYdM76dQbvv2jG0xlAKdYVnE//Oiw5bMt+53T4wwfGxu+01FfR5e+xpHzK4QFRSeel75+fnGWxJ+jNhDkiIEIiYRP0LL8CgQXDNNdC9e8Xrh8LVV1/NihUrmDlzJn369KG4uJiZM2eSm5vLQ15q8JeUlFBScrZEZ16e7Yt2vXr10Gq1njYTYWMlIeEIVaqkkJZWpeLV48DE3IncW3hvSPa9T7+PobWGckh/yO0HcndSU1MVtyJ6FVJIuiWdl3Nf5ubimxV9t3AL3+m+Y0itIfxm+E2lCGOLPHciU716RcBp6tSpR3KyfA6IRP4+dxKtibyQ+wKDigaFIqyI8nXi14yqOYpcba7P7+eV9SqvcqDoAC/nvkxVa9Xy9upl//xiAg5AKy5kMVfRJ7kPT6Q8QbEmvue8DAZ5zxGicq4pvoY3Tr9BTVNNRbsFCzOqzeC1aq9RVVOVqlR1vwMRVBYsDLQOZFLuJO4oUs5b353uLExayAO1HlApOuGOvO8I4Z9Anju3Fd7G1NypJBOaC9YWVVnEMzWeAQ0h+44RS05zmpstN/P66dfpWaKct36gcSCtclsxtNZQDmoO2gYbmMuWSKdxs2i9PLafVnFex1u/p/2520/Z49SqqXAOpGangv3ro6d9Ofe526+XY1XYJ8rVTSwEcknV1gdt2S+oGNgFVCtbhKpq1arF0aP+XWwhbDRWqzUi6hDffDP88gscOABNm9oW54vYNRpYsyaw49hL3y9YsIC7775b0Xfs2DEGDRrE119/Xd6WmprKxx9/TOfOnT3uc8KECUycONGlfdy4cSQlJQUWsAiYVmvm6aef56OPbuWHH1qrHY7qzv3nXIbNH4YmBO/8ey/dy9qb12JMkHrPcc8Knb/pTPf13dFalYnKkoQS1ty6hv2XSIlPEZsuu+x70tM/4vnnn8JiiZgxkSJANXJr0H9pfxr820DtUEJuS7ctbLp6E1ZteL4mnHP0HAYsHUCdk3VCsv9/0/5l2YBl5NbMDcn+hRBCwQLdtnbj6o1Xu3znKk4sZmXGSn5v9rtKwQmANpltuPGzG9FZdIr2xXcu5sCFB1SKSggh1KM1aen5ZU867A7sKnpPTDoTn/b+lO/bfB+S/cc8C1y59Uqu2XiNy2eLoqQiVvVdJZ8tRMxq23Y3vXp9zqRJz6gdivCguLiYF198kdzcXGrUqKF2OFEpYhL1TZrYEvHeaDTwxx+BHcdbor6goICxY8dy5swZbrrpJvLz83nllVc4fvw4W7du5cILL3S7T3dX1Ddq1EiuqI8QyclWDhw4wn//W5PVq+N7CgO9Vc/nOZ/TwtQiqPstppgp1acwv+p8v0b+paamkpGRwcqVK8nJyQlqbEJdV5Rcwfum2RjyXEdyz6w6k6nVp2LRWFSILDbIcycy3X57IS+9lMu559ZHhkNHpso+dzqXdGbe6XmkWmL7iq5TmlOMrjmaL5K+CPuxa1hq8OrpV7mh5IaQ7P+k5iQjao1gW+K2kOw/Hsh7jhAVq26pzmunX3P7WvZb4m/cVeMuDuoPhj8w4aJNaRveP/k+KdaU8ra/dH9x7TnXUqQpUjEyYSfvO0L4p7LPnXPM5/DmqTfpaOxY4br++Ev3FyNqjuCHhB9Csv94cm3xtcw6PYua1pqKdsdqPVZNRKR6opK870SmIUPOMH58Hhc0S7NVjpDTyBGnVq1a/Pzzz5KoD0DEXOYVqvnpK6Nfv37o9XrWrl1b3nbLLbdw0UUXMX78eJYuXep2u8TERBITE13apdxDZEgp+9597NhpsrNPqxqL2h7jMVqgTNLPZCbrWe/3Pk2Y2MY28vLzID+w+HJycsjOjqA5qkTAlrOc4W9/S9vJK6l5oJ2i74EzD9DsTDMGMYiTnFQpwtggz53IUlgIJhNkZx9ROxRRAV+eOw/xEDOYgd7pY3MBBYxjHH/zdyhDDJtCCtli3ULpqVJVjp9NNr3oxYVcyCW4zuXsq+Qk+PClBhQ9NJVk09ny+bWttfng5AeMYxwzmBGMkOOWvOcI4d5/+A8f8ZFiHlm7n1r8xK05t3LgqFytHSk+5VMe4zHmM7+87Tzzedx35D7GMU7FyIQzed8Rwj++PHc60YmVrORcznXpm81svuTLgGI4wQl2mHdgOSGZtWB4n/fZyU5Ws5qWtCxv16JlTMEYmhc0ZzCDySNPxSijn7zvRJaiIigthezD8n8SqSwWeY0PVMQk6tX2xx9/8MUXX/Dmm28q2mvXrs0VV1zB9u3bVYpMBMpgsN2WqnPeOWI0oQkTUU7RsJe9jGY0RqRUvQid3JqH2Dn9SrL7zuYe7lH09aQnmWSSTjo/IKOrRWwwGOQ9JxYkk8x85nMHd7j0/cZvpJPOPvapEFls+73sn78SLMD9MOHzTQz5ZLUiYaZDx3Sm0452DGUoZzgThIiFEALSSWcRi6hOdUW7GTMvVH8B621WCt8sVCk64cnbvM1gBnMlV5a3jWY0S1jCj/yoYmRCCBF6wxnO67xOAgmK9iKKGM5w3uM9lSIT3hzgAJ3pzNu8zQAGKPpu4RZ2sYt00tmPTDcpYoOcYxPxIKLqspvN8OGHMHw4pKfD3r229txcWLUKQnmBuv3qd7PZ7NJnNBoxmUyhO7gIKXui3hjnueg5zKEKVcofW7BwH/dJkl6EnNEIumrFDGEI93O/y99cU5ryDd8wiEEqRShEcBkM8p4T7eyvS+6S9J/wCe1pL0n6CGV/7h0/Zz8d6MAa1risM4AB7GAHF3BBmKMTQsQaLVpe4AVWscolSZ9DDtdzPXOrzZWZcCKUFSv3cR+lnD37q0fPfOajjazTZUIIETSJJPIWbzGXuS5J+oMcpCtdJUkf4c5whoEM5DEew4wyl9Gc5nzLt/Slr0rRCRFcco5NxIOI+eZx+jR07QqDBsEHH8DHH8Px47a+atXgwQfhtddCd/wLL7wQrVbL0qVLsVrPzuVy+PBhtm7dyuWXXx66g4uQSij7zBnPL+gDGcgNKOdJnMMcdrJTpYhEPDEazz4P5zCHa7iGbJTliqpQhfd5n1d4xaW8tBDRJiEhvt9zot31XE8mmbSmtUvfBCZwMzeTS274AxM+sVptg38TEiCPPNJJ5ymewuI0kV1LWpJJJjdyo0qRCiGiXS1q8Smf8iRPuvRlkUVb2rKBDSpEJirjF35hClMUbR3owP3cr1JEQggROg1pyBa2MJShLn3rWEc72rGHPSpEJvzxEi9xPdeTg3I+9epUZyUrmcxkGXgmop6cYxPxIGJeqceNg3374Msv4Y8/bCfZ7HQ6uO02+Owz//c/a9YsJk2axDvvvAPA2rVrmTRpEpMmTSI3N5dzzjmHIUOGsGnTJq677jpmzZrFlClT6Ny5M0VFRTzxxBMB/oRCLfFe+r4WtXgN5SiXf/nX7QklIUKhtPTs8xBgO9tpS1u+4RuXdR/mYdaznrrUDWOEQgSXlOWKXuMYx+d8Tm1qK9pzyaUPfZjIRKxYPWwtIoXj+44VKy/wAjdxE6c4pVivJjVZy1qe5mk0crmrEKISLuMyMsl0GQwNsJCFXMEVHOKQCpEJf0xhCr/wi6JtMpNpSEOVIhJCiOC7iqvIIosOdHDpm8pUetGLE5xQITIRiA1soC1tySTTpe8JnuAzPnP5fitENJFzbCIeREyi/qOP4IEHoEcP0Lg5T9asGRw86P/+Z8yYwdNPP82cOXMAWLVqFU8//TRPP/00p07ZTtrNmTOHmTNncurUKZ544gkmT57MRRddxLp16+jWrZv/Bxeqivcr6qcxzSXpOYpR5JGnUkQi3jheUW+XTTZXczVzmOOyvrcvj0JEAxntG32qUY2VrGQKU1yuOPiZn2lPez7hE5WiE5Xl7n3ncz6nPe1d5hzWouU5nmM1q6lBjTBGKYSIVoMYxA52cD7nK9qNGPkv/+Ue7qGYYpWiE/4ooYThDFe0Vac6s5ilUkRCCBFcni6KKKCAfvRjHONcSqiL6HGIQ1zJlSxggUtfT3qSSSataKVCZEIETs6xiXgQMYn63Fxo2tRzv9EIgUwTf/DgQaxWq9ulSZMmAOj1ekaNGsWePXvIz88nPz+fDRs2cM011/h/YKG6eL6ivhvdGMYwRdsa1rCa1SpFJOKR8xX1dkaM3M/9DGGIy8lMezk2579fIaKBjPaNLs1oxi52uZ3DbwUr6EhHfuM3FSIT/vL0vnOAA3SmMx/yoUvfLdzCLnZxMReHIUIhRDTSo+dlXuZ93qcKVRR92WRzDdcwm9kqRScCtYUtvMVbirZbuIV00lWKSAghAudtmsHf+I1OdGIFK1SKTgRTMcUMYQj3cz9GlFnNpjTlG75hEINUik4I/8k5NhEPIiZRf8EF8N13nvu/+gouuSR88YjYYT9RG28jrxJJZB7zFG355DOKUSpFJOKV0eg+YWK3gAVcyZUu5UETSWQ+85nHPBJI8LC1EJHHYIi/95xo1bO4J7vZ7ZKcNWNmHOPoRz8KKFApOuEvb+87hRRyO7czmtEuVw01pzm72EUGGWGIUggRTc7hHNaxjkd4xKXvG76hLW3ZznYVIhPBNIYxHOWoom0mM6XiihAiKp1nOs9jcnYta2lPe/axT4XIRCjNYQ5XczXZZCvavQ3aECKSyTk2EQ8iJlE/bBi88w4sXXp2fnqNBkpKYPx4+OILGD7c+z6EcCdeS98/wRP8h/8o2sYznsMcVikiEa/clSB2lkkm7WjHRja69N3HfWxmM+dybogiFCK4pCxX5NNatVyz4RoWnFrgcvL9BCfoRS+mMlWl6ESgfHnfeZmX6UEPjnNc0V6NaqxghdtpEIQQ8ak97ckii6u52qXP08lwEZ1OcYqHeVjR1oAGTGayOgEJIYSfLvjtAj7P+dxtufMJTOAWbiGXXBUiE+HgbRChp2kQhIhUco5NxIOIGT710EOwbx/cfjvUrGlrGzQITpywlbwfPhyGDlU1RBGl4rH0/X/4D0/whKJtF7t4gzdUikjEM08liJ0d5zg96MFUpjKa0Yq+TnQiiyz60Y9tbAtRpEIEh5Tlimw1qcmiU4votqWbS98e9tCXvhzkYPgDE0Hj6/vORjbSlrasYhXtaKfoG8c42tCG27mdk5wMUaRCiEg3hCHMZjaJJCraiynmfu53OxesiG4f8iF3cRc3cEN520hGspjF7GSnipEJIeJBE5pQi1oB7WNg/kDueP8ONGgU7bnkcgd38CmfBrR/ER3s0/K8yqvcz/2Kvqu4iiyyuI/7OMKRgI7zO7+TT35A+xDCGznHFjo6dLSgBTp0Ae2nlrGWS1UqUTkRk6jXaGD+fLjrLli+HH7/HSwWW0n8/v2hm+u5VCF8Em9X1GvQ8CZvKkqFmzBxL/diwaJiZCJe+XJlo50ZM4/xGJlk8jZvK+b/rE99NrCB0YxmJjNDFK0QgZPRvpHrUi5lNau5sORCl773eI/hDKeIIhUiE8FUmfedv/mbK7mS2czmHu5R9F3P9exiF13owjGOhSBSIUSkSiCB13iNEYxw6TvEITLIIJNMFSIT4TCSkexjX/l3ES1a3uRN2tAGEyaVoxNCxKILuZB3eZfOdA58Z25m7trHPm7lVn7n98D3L6KGESP/5b/sZjdzmEMSSeV9DWnIZ3wW8DGKKWYucxnDGIzIiRARfHKOLTRu53Ze4RXqUS/gfeWdzCOFlCBEFb8irp7jFVfAa6/Bp5/C55/DrFmSpBeBibc56ocylCu5UtH2Ei/xIz+qFJGIdxXNUe/Oh3xIJzpxgAOKdgMGXud1FrGIZJKDGKUQwSPzZ0WmAQxgJzu5EGWS3oSJB3mQwQyWJH2MqOz7TjHFDGEI93O/y8mlC7iAWcwKcoRCiEh2LueyiU1uk/Qb2Ug72kmSPsYd5CDP8qyirSUteYzHVIpICBHLetOb3ewOTpLejeUspyMdJUkfxxaykCu4gkMcCvq+k0jiYR5mAxuoT/2g718IOccWXHr0vMIrLGFJUJL0IjgiLlF/8iQsWwbTptmW5ctt5e+F8Fc8lb6vRz2mM13R9gd/MJGJKkUkhO8liJ3tZS/tac/nfO7SN5jBbGc753FeECIUIrikLFdk0aFjOtP5kA+pSlVF33Htca7lWqnSEWP8fd/xNNd0P/pxEzcFKTohRCS7givIIsttsuRlXqYHPTjOcRUiE+H2Cq+whz2Ktmd5lgu4QKWIhBCxRoOGZ3iGT/iEmtQM+v7NmBnDGPrTnzOcCfr+RXTJIou2tGUDG0Kyf2+foYQIhJxjC5661GUd63iYh9UORTiJqET9hAnQoAEMHAjjxtmWAQNsbc88o3Z0IlrFU+n7V3nV5cP9SEbKFYJCVZUpQezsFKe4iZuYxCSXvsu5nCyy6E73ACMUIrikLFfkSCWVr/jK7RVwhxsc5obUG9jKVhUiE6EUyPvON3xDO9q5JOLe4A2qUS0I0QkhItUoRrm9GqyQQgYxiNGMxoxZpehEuJkxcx/3Kf7Pk0hiLnNVjEoIEStqUIOP+MjthTUmTJQE+O/geQe5vfbtLhfziPiWQw7Xcz1P8RQHORjw35kzb1WJhPCXnGMLjva0J4ssruZql75SSoP+eiAqJ2IS9c8/D889B92720reHzhgWz77zNb2wgu2dYSorHi5or4XvRjIQEXb+7zPV3ylUkRC2Ph7ZaOdBQtP8zS3cit55Cn66lCHL/iCMYwJMEohgkdG+0aGtrQliyyu5VqXvsXJi1l4z0KyddluthTRLtD3nX/5l0d5VNHWmMY8j3wZESIWJZHEIhYxk5kYUL54/MEfdKYzH/CBStEJNWWS6VJ1pzvd+T/+T6WIhBCx4BIuYTe7uZmbXfqWspSa1CQpgH9N05qy6J5FbEvcpsJPJyKdGTMv8AJNaRrQ31kSSbShDQc5qNh/AgnMYQ5v8zaJJKrzQ4qYIufYAjeUoWxlKw1pqGgvoYQhDCGRxIBeC1rWa6nSTxY7IiZRP3cu9OkDa9dCz57QtKltueEG+OQTuPFGmDNH7ShFNIqHOeqrUpXZzFa0neQkj/CIShEJcZbRCHo9aDSB7WcNa+hAB/azX9GuQ8dUprKMZXK1o4gIMn+W+u7mbraxjcY0VrSXUMK93MuYmmMw6+WqyFhV2Tnq3VnMYtazXtH2AA/QjnaB7VgIEVHO4zy2s53BDHbp+4IvaEc7fuRHFSITkeJpnuZv/la0vczL1KGOShEJIaJZBhl8y7c0o5mi3YyZx3iMgQyUMvUiauxhD+1oxzrWufQNYQhb2UojGqkQmYglco7NfwkkMJe5vMVbLgNn/uZvruAKFrBApeiEo4hJ1Ofm2pLyntx4I+Tnhy8eETvspU/NMXw+fiITaUITRdtjPCbzJ4qIYP8wFWjSBOB//I+OdGQ1q136+tGPnezkIi4K/EBCBEDKcqnHgIFZzGIBC0giSdF3mMN0oxtv8ZZK0YlwCaT0vaMRjFBMH6RDx3zmo0cf+M6FEKq7juvIJJM2tHHpm8QketObU5xSITIRSQoo4L/8V9GWSiov8ZJKEQkhopEWLVOYwgpWuFxgYC9HLq8rIhqd4AS96MVUprr0eSu1LYSv5Bybf+xTUQxnuEvfRjbSlrZkkqlCZMKdiEnUd+0K337ruf/bb23rCFFZBgOUxPA0GZdzOQ/zsKJtIxtlNJSIGPbyRMFI1APkk08GGYxnPBYsir4WtGA3u7mJm4JzMCH8IGW51FGf+mxgg8vJdIDNbKYtbdnFLhUiE+EWaOl7uwMc4DmeU7S1prXL5y4hRPR5nMf5ki9JJVXRnkce6aTzNE+7fM4U8Wsta1nBCkXbXdzldnodIYRwVpvafMEXjGOcS18mmbSlLRvYoEJkQgSHGTPjGEc/+lFAgaLvHM5hHeuk6qvwm5xjq7wruIIssuhMZ5e+l3mZHvSQCzwjTMQk6ufOhR074JFH4PffwWKxLb//Dg8/DDt32tYRorJiedSVDh1v8iY6dOVtJZQwghEqRiWEkv35F4yrG+2sWJnMZLdXOqWQwlrWMoEJaAiw3r4Qfojl951I1ZnOZJHFFVzh0vcqr9Kd7hzjmAqRCTUE64p6gBnMYC97FW3uKhkJIaJDVaqylKVMY5riOxTAL/xCBzrwER+pE5yIaA/yILnkKtrmMtelgo8QQjhqTWuyyKIHPVz6FrCAK7mSQxxSITIhgm8FK+hEJ37jN0W7Hj0v8zJLWEIVqqgUnYhWco6tch7gATawgfrUV7QXUsggBjGa0ZiJ4dLTUSpiEvWXXQaHD8Prr0Pz5pCYaFuaN4eZM+HQIds6NWqcXVJS1I5aRINYHnXlbq7USUziV35VKSIhXAX7inpH3uYOfZZn+ZiPSUHeLER4xfL7TiQayUg2sYlzOVfRXkghd3Inj/AIJkwqRSfUEKwr6gFMmLiXexVX1lahCnOYE5wDCCHC5kIuZCc76U9/l77VrKYDHfgf/1MhMhENssl2uRr2Ii7iKZ5SKSIhRKS7kzv5hm9cBngaMXI/9zOEIRRTrE5wQoTIPvbRnvasZa1L3+3czg52cD7nqxCZiFZyjs03ySSziEW8zusYUJ4Q+YM/6ExnPuADlaITFYmYRH1GBvTvD4MH25Y777Qt9scDBtjWcVz69vVt3wUFBTz77LPccMMN1K5dG41Gw8KFC92ua7FYmDNnDq1btyY5OZk6depw7bXX8sMPPwTvhxVhZTDE5qirxjTmeZ5XtP3Mz27nBBJCTcGco94d+4eNJSxx6buJm9jNblrQIjQHF8KNWH3fiTSJJPIO7zCb2SSgvHz6T/6kC114n/dVik6oyWgM7nvOt3zLbGYr2m7gBgYyMHgHEUKEVG96s5vdXMqlinYLFsYzngwyyCdfpehEtJjHPL7hG0XbGMbIdw0hhIIePa/xGu/xHskkK/qyyeZqrpZBnyKm5ZLLLdzCBCa49F3GZWSSSU96hj8wEZXkHFvFzuM8trOdwQx26fN2kZuIHHq1A7DzkDcPipycHJ577jkaN25Mq1at2LRpk8d1hwwZwvvvv8/gwYMZNWoUZ86cYc+ePRw7JuVSo1Wslkd5gzeoRjVF233ch5EY/GFFVAtF6XtnhRRyB3ewm91MZzp6h7e3i7iInexkCENYzvLQBSFEmVh934kkjWjEKla5VJUB+JIvGcQgTnJShchEJAhm6Xu7J3mSdNJpQIPyttd4jS/50mUKFiFE5NCg4WmeZiITXfpOcYpBDOILvlAhMhGNrFi5j/vYw57yK5UMGHiTN7mCK7BiVTlCIYTa6lKX5SynG91c+raznX70I5tsFSITIrysWJnIRDLJ5H3eV1S7rEUtPuMznuZppjBF3j+FV3KOzbvudOdDPqQOdVz6JjGJZ3lWUSFQRKaIuaI+lNLS0sjOzuavv/5i+vTpHtdbtmwZixYtYtmyZbz99tsMGzaMhx56iIULF9Kjh+tcQiI6xGJ5lNu4jZu4SdE2j3lsZ7tKEQnhWShL3zt7lVfpQQ+XuairUY1lLGMqU13mIxUi2GLxfSeSXMM1ZJHlNkk/hSncyI2SpI9zwSx9b5dPPqMYpWirS12mMS24BxJCBE0NavARH7lN0v/Ij7SjnSTpRaXtY5/La38XujCc4SpFJISIFB3pyHd85zZJP5vZXMM1kqQXcedTPqUd7djHPkW7Fi0v8AIrWUl1qqsUnYgGco7NszGM4Qu+cEnS55FHOuk8zdOSpI8SEXNFvd2WLfDHH3DqFFidBlNpNPDII5XfZ2JiIvXr169wvZdffpkOHTqQnp6OxWKhqKiIqlWrVv6AZZ7lWZJI8nv7WLGf/axiFQUUqHL8WCuPkkIKr/O6oi2bbMYyVqWIhPAu1KXvnW1iE21pyypW0Z72ir4xjKENbRjIQE5wIjwBibgTa+87qaRyB3dQn4o/S4VaTWpyL/e6DLgpoIC7uItVrFIpMhFJgl363u6jsn+3cmt52zCG8R7vsYUtwT+gEHHqUi7lVm6lKv5/FwfoS1+a0cyl/QM+YBjDKKQwoP2L+DWJSfSnPxdxUXnbi7zIGtZIEk6IOHUv9zKTmSSSqGgvppiRjGQhC9UJTIgI8Du/05GOLGAB/ein6EsnnYu5mI/4SJ3gHFTLq0brda2pk1cnoDzGHvbwMR9TTHEQo4tfsXaOLRiqUY13eMfl+QTwC79wK7fyP/6nQmTCXxGTqP/+e9s89L//7pqgt/M3Ue+LvLw8du3axf3338+TTz7JzJkzKSgooGnTprz44ov079+/0vt8lEepQY0QRBt9JjKRdNL5nu/DfuxYKo+SSirLWU4aaYr2h3iIXHJVikoI78JR+t7ZYQ5zJVfyBm8wlKGKvu50J5NM+tKXPewJX1AibsTS+051qrONbTSnudqhePQrv3Irt7Kf/WqHIiJEKErf241iFNdxneKqj3nMozWtKaEkNAcVIk5o0TKRiTzFUyHZvwkTYxjDK7wSkv2L+FFMMSMYwdd8Xd6WQgof8zHppHOYwypGJ4QIpwQSmMUs7uVel75DHKIvfckiS4XIhIgsZzhDf/rzOI8zhSmKwff/4T+MY5yK0ZU5A2yHK7gi4F3tZS/ppHOAA4HHFedi6RxbMFzERaxmNS1o4dK3mtXcxV3kk69CZCIQEZOoHzYMjh2DuXOhY0dISal4m2A6cOAAVquVDz/8EL1ez7Rp00hJSeG1115j4MCB1KhRgxtuuMHttiUlJZSUnD0xl5eXF66wo0YTmvAN3zAmZQwrq6wM67FTUnKxWktJSzsnrMcNtlalrXjr1Fs0sDRQtK9LXMe2WttI06R52DLypaamKm5FbElJMQI5pKXV4ciRMGbrgaetT/Nr4a88n/c8CZw9dhOasJ3tjE0Zy4oqK8IaUzDJcycyJSQcISmpGmlp1dQOJWDP5z5P88LITdJ/lfgVD9R8gHxtvssgNm/kuRPbEhLySEoqJi2tbtD3bcHC1DNTmZQ3qbztP/yHydUmM6P6jKAfL5LI80aEUoolhTdOv8G1JdeGZP8ntCcYXnM43yR+U6n3i2CQ505s2s9+lp5eyoCiAeVt7WjHHu0ehtcczo7EHSpGFxvkuSMiXZo5jfmn5tPG2Malb1vCNkbUHMFJ3Ul53xHCwWIWc6jkELNPzaa2tbba4YRMS1qSpcliVM1RfJ30dcUbCI8MhmySk2uQlhZYta1Y0KO4BzNPz6SGVXlxsAUL06pNY2a1mVTTVKMa4T0fWatWLY4ePRrWY8YajdXq6fr18EpOhueeg8cfD+1xMjMzad++PQsWLODuu+8ub9+6dSvdutnmENq5cycdO3YEKL+qvnnz5mzbts3tPidMmMDEia7z3uWSK1fUu/Fd161s6rMWiy4882Ncf/1X1K59krffdh3dGi1af9ea3p/2Rm9Wjq0pTixm7si55NaUq+lF5KpT5zijRr3Bhx8O5PDhBhVvEAJpB8/jlvcGUy3PdRTYd123sanPx2F7TRKx76GHXuPrr6/j2287qx1KQBocbsDQt4aiQaN2KC6sWNl09Sa2dNsCWrWjEZHm6qs30qZNFvPmhWa+YI1Fw6BZD5D2d+PyNrPOxKJHXuZkvWMhOaYQsSz13zRuXXQXNU+GJqFwpOHfrBm8iPxap0OyfxG/ks9U4a6XHqNavtPJUq2Zzb0/IevKrUTgxyghRBA0PHA+fRb/H1ULXOfW3t1tE1tu/AyrnGMQwqMaJ2txy7t3Ue+fhmqHElJWjYVveqxjx3XrQRsRabio89hjL7F2bR+++66t2qGoxwJXb76aqzZf5dJVlFTEqoxV/H7R7+GPq0xxcTEvvvgiubm51Kgh+VB/REyi/rLLYPBgeOyx0B7HU6Le3t60aVP++OMPxTZDhgxh8eLFFBYWote7FiFwd0V9o0aNyB0wlxoJySH7WaLCT5fCHteRpVy5BZb1h/rhGWmzdWsCAwbUCcuxgslgNfBc3nPcVXiXS9+/2n8ZVmsY3yd8H/7Agiw1NZWMjAxWrlxJTk6O2uGIIKtf38x330VA4iK7PvRbDtvdlLC6Yiss7xe21yQR+0aPTuGDD6qoHYbf9FY9n+d8TgvT2VJaRRTxafKnWFH3o+Mp7SlWJ63mh4Qf/N6HvO/EtuHDC3j22RCXevuxJbT5DhwHUV6xFTZfJSdghKiMDwfA0Leh0OkKGb0RMlZCQqn/+9Za4JqNMGApJMnUFCJEfr4YblkDv1/k2nf7Eph/L1QtDH9cQojQsAKvPwijX1J+DgSocgbeHgoDl6oSmhBRpygJPhxo+w5liZER+Lvbwy8Xu7bfvAbeHQwpUonZHyNH1mTNmvjMs9Ww1GDm6Zn0KOnh0vez/meG1hrKX/q/VIjsrFq1avHzzz9Loj4AEVP6fsIEGD0abr8dGqhwweW5554LQL169Vz66tati9Fo5MyZM6S4qcmfmJhIYmKiS/ttJ0dgMAQ/1miir2dg2Hkv0+evUcqOrd3IaZLF5DYZ/K/WtyGPY+/eUrKzs0N+nGBKI40P+IAudHHp28xm+lv6c+xEBCQ/gygnJyfq/p9ExbKzoUsXqFVL7UiOoK9+LcPOe4k+fz2g7Np2JTlNspjS5jZ+qbVTnfD8ULt2LXr16sXnn3/OyZOn1A5HlDGZYPPmXEpKorfayRjGuMx3NYEJTCuaplJETs4EZzfyvhObpk2DnTtBG9JzPXu5+7wZ9PvDYS7FbVfyequhfNn4rVAeWDXyniOCSWvRcc//ptL3z9EufacSjjKlTT/25W8N/EDLyhYVyXMn1u2natP2PJa7mA7Hb1J2fTCIPz5pwQtt+nKk6h/uNxceyXNHRJpEczIP7H2Ta/6906Uvu8oBJrVJ5+B7e+E9FYJzIM8dET2KgYVli/qC8dxJbFyFh3Lf5qrsgcqOj2/hcINdTGqTzt/V9wch2vhhNMKmTacxGk+rHUrYtaAFq1nNRbgOCF3CEu413UvhcfUHhFosUkEmYNYI8v77VmvVqlbrzTdbrfffb7U+8IByefDBwI+xe/duK2BdsGCBS1/9+vWtjRo1cmn/v//7P2tSUpLVbDb7dIzc3FwrtjGWspQtgxlsLaLIasWqWEoosd7LvarHF2lLV7pa/+Vfl9+XFav1FV6x6tGrHmMwl7S0NOuECROsaWlpqsciS3wsgxlsLaTQ7WvSfdyneny+LvLckSUUy/mcbz3DGcVz43u+j6n3HnnuyBKMJZlk6wEOKJ4rpzhlrUc91WMLxSLPG1mCtaSSav2ar91+19nBDuu5nKt6jMFc5LkTH4sGjfVZnnX7d32Sk9ae9FQ9xmhb5LkjSyQtTWhi/Y7v3D7HP+VTa01qqh6jfZHnjiyy+LcE87nzKI9aTZhcXi/yybdmkKH6zypL5C+3cZs1n3yXvyEjRuvDPKx6fI5LvXq2cyC5ubk+5U+Fq4ipKbJ5M4wcCYWFsHYtzJkDs2a5LqE0YMAA/v77b9atW1felpOTw5o1a7j22mvRhvaynJj2Lu/Sla78hbIMRwIJvFn2LxHXqgTx6H7uZyMbSSNN0V5IIXdyJ4/wCCZMKkUnRGx4l3e5givcvibNYx7zmS+vSSJuzWEOVThbtt+ChXu5V957hHBSRBEjGKFoq0lNXuVVdQISIgq0pS1ZZHEt17r0zWMeV3EV//KvCpEJERgrViYykT70IRdlVaVa1OIzPuNJnkQjk9YLEXV60IMssricy136nud5+tCH05wOf2BCiIj1Mi/Tgx4c57iivRrVWMEKpjAFLZJrEq506HiRF1nOcqpRTdF3jGP0oIecc4hBEfNq8MADUKMGfPklnD4NFovrYjb7v/9Zs2YxadIk3nnnHQDWrl3LpEmTmDRpErm5ti9RTzzxBGlpaWRkZDBhwgReeeUVunbtitFoZPLkyUH4KePbd3xHO9rxNV+79N3LvWxmMw1pqEJkkSGJJBawgDd4AwPKORP+5E+60IX3eV+l6ISIPd5ek4YxjC1sievXJBGfBjGI67le0TaLWexmt0oRCRHZ1rGOxSxWtA1kIL3opVJEQkSuu7mbbWyjMY0V7SWUMIxhjGAEpQQwJ70QEeATPqE97dnHPkW7Fi0v8AIrWUl1qqsUnRCissYxji/4gtrUVrTnkcet3MozPIMFKfkrhHC1kY20pS2ZZLr0jWMcn/O5y2uLiG91qMPnfM5Yxrr07WY3bWnLJjaFPzARchGTqP/9d3j8cejRw5awD7YZM2bw9NNPM2fOHABWrVrF008/zdNPP82pU6cA2/z027Zto3v37rzyyiuMHz+ehg0bsnnzZlq1ahX8oOJQDjn0pCfTme7S15GOZJFFN7qpEJm6GtOYrWzlbu526fuSL2lHO37gh/AHJkSM8/aa1IEOZJHFVVylQmRChF9tavMKryjaDnOYp3hKpYiEiA6P8ignOKFom81sqlJVpYiEiCwGDLzBGyxgAUkkKfoOc5hudONt3lYpOiGC7zd+oxOdWM5yl7500vmWb2lOcxUiE0L4yttVr/vZTwc6sIY1KkUnhIgWf/M3V3IlC1jg0nc915NJJq1pHf7ARMS5nMvJJJMe9HDpe5u3uZIrOcxhFSIT4RAxifoWLSA3t+L1/HXw4EE3swjZliZNmpSvd/7557Nq1Spyc3MpLCzk66+/pn379qELLA6ZMTOGMQxgAGc4o+irS12+5mse4iGVogu/a7iGTDJpRzuXvilM4UZu5CQnVYhMiPhQ0WvSetbzMA+rE5wQYTSd6dSlrqJtFKPIJ1+liISIDsc5zmM8pmhrQhMmMlGliISIHGmksZGN3M/9Ln2b2Uxb2rKLXSpEJkRoFVBAf/ozlrGYUZaHvJiL2cUubuEWlaITQnjTjGZ8y7dkkOHSt4pVdKQj/+N/KkQmhIhGxRQzhCGMZCRGjIq+pjTlG77hDu5QKToRCf6P/2M722lCE0V7KaWMYATDGEYJJeoEJ8IiYhL1M2bAvHmwS76jx41lLKMTnfid3xXtevS8yqssZjHJJKsUXXiMZjTrWMc5nKNoL6CADDJ4kielhJYQYbKMZXSko9vXpFd4JS5ek0T8upqrGcIQRdsqVslVIkL4aCEL2chGRdvDPOx2LlMh4kUXupBFFl3p6tL3Cq/Qne4c45gKkQkRPtOYxg3c4FJ5pQY1+IiPeJ7nZY5aISJIH/qwi11cwiWKdgsWnuRJbuM2GcgshPDLXOZyNVeTTbaiPZlkFrOYV3kVPXqVohNq0KPndV7nXd51Oef8L/9yFVcxj3kqRSfCKWK+Dbz0ElSvDp07Q8uW0Ls33HyzcrlFBhvHnJ/4ifa051M+dem7gzv4hm9oSlMVIgutKlThAz5gBjPQoVP0/cqvdKADq1ilUnRCxK997KMd7Ty+Ju1gR0y+Jon4lkiiywf/PPJ4gAdUikiI6DSc4RRTXP5Yh475zHf5rCdEPBjJSDaxiTTSFO2FFHIHd/Aoj2LCpFJ0QoTXetbTjnbsYY9L31M8xSd8Qk1qhj8wIUQ5DRomMIGP+ZgUUhR9JznJjdzIFKZgxapShEKIWPAN39CWtmxnu0vfQzzEeta7VDoUsake9djABrfn3raxjba0ZSc7VYhMqCFiEvU//gjFxdC4MRQUwM8/w969rouIPac5TR/68BzPufS1pjWZZHI916sQWWhcwAXsZCcDGejS9zEf05727Ge/CpEJIQByyaUPfdyWLG5FKzLJpCc9VYhMiNB4kidpRjNF2xM8wb/8q1JEQkSn3/iNSUxStLWlrQx6EXEliSTe4R1mMxsDBkXfH/xBF7qwhCUqRSeEeg5ykK505T3ec+nrRS8yyaQlLVWITAiRQgprWcuzPOvS9wM/0I52fMmXKkQmhIhF2WRzDdcwm9kufVdxFd/xHR3pqEJkIlw60YkssriSK136ZjKTa7mWIxxRITKhloippXHwoNoRCDVZsfIsz5JFFu/xHjWoUd5Xm9p8zuf8xV8qRhg89ahHFaoo2ixYmMAEJjFJRucKEQGsWJnAhPLXJMcR9bWpzWd8FhGvSbpjOqq/Wp178u9xmfsyGuWTzwpWMI1pMvdSmFzMxYxjnKJtJzuZy1yVIhIiuk1jGrdzOy1oUd42lak8yIMqRmXzF38xhzksY5naoYgYdQ7n8Bmf0Y52Ln1f8iW3czunOKVCZEJEhiKKGMxgdrGLl3lZMZjlAi5gBzsYylCWslTFKIWILy1owUd8xIVc6NK3hCXcy70UUqhCZEKIWGbEyH/5L7vZzRzmkERSeV8DGrCFLfzDPypGGFzf8i0v8iI/8IPaoajuPu5jJjNJIEHRXkQRIxjBu7yrUmRCTRGTqBcCzl5RvprVivmgtGhjttz0aU5zB3fwGZ+pHYoQwsla1tKBDpH7mmQGTkMtaqkdSdBcxmXcxE1kkMFhDqsdTkzToOFN3lR8OTBi5D7uw4JFxciEiF7255BjKcMEEiLiPaMpTbmaq7mGa3iIhyilVO2QRIxZwhK3SfrJTOZpnpb3FiHKzGIWP/ADy1lOPeqVt1elKh/yIe1pz1jGxsRAXCEiWT/6sYAFVKWqot2Eicd4jNd4TaXIhBDxYiEL2cteVrGKxjQub4+U75DB0pSm3MItDGe42+pC8SCRRGYxi2EMc+n7i79IJ93tNEkiPkRM6XsAsxk+/BCGD4f09LOl7nNzYdUqOHpU3fhEePzKr3SkIytZqXYoIfcTP9Ge9pKkFyKC2V+TVrBC7VDiRgc6kEUWV3GV2qHEtHu5lyu4QtE2gxnsReYaEiIQ3/BNRFelGMEIt3OHCxGI/+P/6E53RVs++fSlL+MZL0l6IZxsZSttaON27tHRjOYrviKVVBUiEyL26dAxjWksY5lLkv4Yx+hOd0nSCyHCJoss2tKWDWxQO5SQSiaZd3mX13kdfZxdP9yQhmxhi9sk/XrW05a2kqSPcxGTqD99Grp2hUGD4IMP4OOP4fhxW1+1avDgg/CafEaKGwUUcBu38QRPxGz54yUsoROd+J3f1Q5FCFGBAgroRz/GMS5mX5MiTV3qsp71PMzDaocSk+pTn6lMVbT9zu88x3MqRSREbBnHuIj+ot2ZznzHd3Slq9qhiBhQhzq8zMuKtn/4h450ZDWrVYpKiMj3L/9yFVcxj3kufddyLVlkua1SIYTwXx3q8AVf8DiPu/TtYhdtactmNqsQmRAinuWQw/Vcz3SmY8Kkdjgh9QAPsIENiqpCsewqriKLLDrQwaVvGtO4gRs4wQkVIhORJGKGrowbB/v2wZdfwuWXQ926Z/t0OrjtNvjsM5g8Wb0YRfi9yIvMYQ6d6YwOndrhBM1e9nKIQ2qHIYSopKlMZQ5z6EKXiHhNql2rNjfccANffPEFJ0+dVDucgCSRxGQm04xm5W169LzCK7SnvcwNGGSv8io1qaloG8EIiilWJyAhYkwuuXSiEx3oQAopaodDU5oylalUoUp5W33qs5GNPMIjvMEbKkYnot0MZrhc+TuCEexnv0oRCRE9SillBCPIJJNZzCKRxPK+xjRmK1u5n/tZwAIVoxQiNrShDatYxXmc59L3Fm8xilEyMF8IoRozZsYwhmlMowMd0KBRO6Sg6EUv/st/FW1XciVZZHEbt7mtLhQrHuZhpjPdpYJAAQUMYQjLWa5SZCLSREyi/qOP4IEHoEcPOOFmAEmzZrBwYbijEpEgl1y+4Au1wxBCCADyyIuY16S0pDQuaH4B6zetJ5tstcMJ2HrW8x7v0Yc+ivZBDKIFLehLX/7gD5Wiix03ciMDGKBoe4/3+JqvVYpIiNhUSinb2KZ2GOW2sIXVrOZ8zi9vM2BgFrNoT3sZrCP8ci3Xcjd3K9qWs5xP+ESdgISIUm/xFj/yIytZSUMalrcnkcQ7vEN72vMQD2HEqGKUQkSvwQxmHvNIIknRXkopD/AAb/KmSpEJIYRSDjkxNU3up3zKt3zLPOaRTHJ5ewMasJnNMfkanEwy85nPHdzh0vcbv5FOOvvYp0JkIlJFTOn73Fxo2tRzv9EIptiu+iGEEELEtVxyuYVbmMAEl75WtCKTTHrSM/yBxZCqVGU2sxVtJzjBozyqUkRCiHD5kR9pRzu3g83u4i62sY3GNFYhMhGtkkhiLnMVbbnk8hAPqRSRENHNW9ntkYxkE5tII02FyISIXgYMzGQmi1jkkqT/h3+4iqtiLkEkhBCR5j3eoytdOchBRXsCCcxjHvOZr6gqFM2a0pQd7HCbpP+ET2hPe0nSCxcRk6i/4AL47jvP/V99BZdcEr54hBBCCBF+VqxMZCI3cRO55Cr6alGLz/iMJ3kyZkqAhdtzPOdS6nE0o8khR6WIhBDhdIpT9KY3L/CCS19b2pJFFtdxnQqRiWj0FE9xERcp2sYyNiaq/AihlmMcozvdeZVXXfq60IUssuhK1/AHJkQUqk99NrCBUYxy6dvKVtrSNqZLLgshRCTZwx7a0Y51rHPpG8YwtrBFUVUoGvWkJ5lk0opWLn0TmMDN3OxyrlMIUDlRv2ULHD9uuz9sGLzzDixdClarrU2jgZISGD8evvgChg9XL1YhhBBChM+nfEo72rmMMtWi5QVeYCUrqU51laKLTm1o43KV4wY2sIhFKkUkhFCDBQtP8RTppJNPvqIvlVS+5Ese4zGVohPRogUtGMMYRdt2tstViUIEgQkTj/AId3InhRQq+tJIYyMbGclIlaITIjp0ohNZZHEFV7j0zWQm13EdRzmqQmRCCBG/TnCCXvRiKlNd+jrQgSyyuIqrVIgscE/wBJ/xGbWprWjPJZc+9GEiE7FiVSk6EelUTdRfcw2sKxtA89BDMHgw3H67bT56gEGDoHp1mDIF7rsPhg5VL1YhhBBChNfv/E5HOrKc5S596aTzLd/SnOYqRBZ9dOiYz3x06MrbiilmODIKUoh49REf0YEO/MIvinYdOqYznaUspSpVVYpORDINGt7kTQwYyttKKeU+7pOTT0IE0fu8Txe68Cd/KtoNGJjNbN7hHZdS3kIIGM5wNrOZczlX0V5EEYMZzIM8iBGjStEJIUR8M2NmHOPoRz8KKFD01aUu61nPwzysTnB+qE51VrKSyUxG65Ru3cc+2tOeT/hEpehEtFA1UW91+A6v0cD8+bar7AcPhl69oHVrW4J+0yaYM0etKIUQQgihljOcoT/9GcMYzJgVfRdzMbvYxS3colJ00eNBHqQNbRRtz/M8v/O7ShEJISLBL/xCBzrwER+59PWnPzvZyYVcGP7AREQbznC60EXRNo1p/MzPKkUkROz6gR9oRzu+5EuXvnu4h61spTGNVYhMiMiTSCJv8RZzmUsCCYq+gxykK115j/dUik4IIYSjFaygE534jd8U7Xr0vMIrLGYxySSrFJ1vmtOcb/mWvvR16VvOcrc/nxDuRMwc9XZXXAGvvgqffgqffw6zZkG3boHts6CggGeffZYbbriB2rVro9FoWLhwoddtjEYjl1xyCRqNhhkzZgQWgBBCCCECMp3p3MANnOCEor0GNfiIj5jEJJeRq8LmPM7jeZ5XtP3ET0xnukoRCSEiST759KUvT/EUFiyKvku5lN3spje9VYpORJo00niRFxVtv/EbL/CCShEJEftOcpIbuZEpTHHpa0c7MsnkGq5RITIhIkdDGrKFLQzFtRzrOtbRjnbsYY8KkQkhhPDEfsX5Wta69N3BHexgB01pqkJkFbuZm9nFLi7mYkW7GTNjGUt/+rtUDBDCE9XPaGs0oT9GTk4Ozz33HPv376dVq1Y+bTNz5kwOHToU4siEEEII4av1rKctbfmO71z6xjOeT/iEmtQMf2AR7g3ecClffR/3SblHIUQ5K1Ze4AV605tTnFL01aQmn/AJj+Q/glMeX8Sh13mdFFIUbcMZTjHFKkUkRHywYOFJniSDDPLJV/SdwzmsYx2jGa1SdEKo6yquIossOtDBpW8qU+lFL5cB30IIISJDLrncwi1MYIJLXytakUkmPekZ/sA80KLlOZ5jDWuoQQ1F3wlOcAM3MI1pKkUnopVe7QDuvNO2+EKjAZOp8sdIS0sjOzub+vXrk5mZSfv27b2uf+zYMZ577jnGjh3LM888U/kDCiGEECIk/uIvutKVecxjMIMVfb3oRSaZ3M/9nOSkShFGlo50dLkSdg5z2MEOlSISQkSyL/iCdrRjNau5jMsUfY8XPM7/Pvwfu0p30YAGKkV41j72UUSR2mHElT704TZuU7QtZCEb2ahSRELEn1WsYj/7Wc1qmtO8vF2HjhnMoB3tGMpQCilUMUohwudhHmY609E7neIuoIB7uIcVrFApMiGEEL6yYmUiE8kkk/d5XzEwuDa1+YzPeJZn+YIvVIzS9nnrGZ7hRm506dvDHvrSl4McDH9gIuqpnqjv3h2aNQvtMRITE6lfv77P648bN47mzZtz5513SqJeCCGEiDDFFHMXd7Gb3bzMyxgwlPddwAVu5/AUNtlk8wRPqB2GECKC/cEfdKYzb/EWt3O7oq/5r835lE9VikypgAJe5EUmMxkrVrXDiXnVqMYbvKFoO85xHuMxlSISIn7tZz8d6MC7vMst3KLoG8hAWtCCdNI5wAGVIhQi9KpQhfnMZxCDXPp+4zfSSWcf+1SI7P/Zu+/4KKr1j+PfDekJCSWFUKQqAkoVEJUqooggSBHRiyAK2CsqXhWwIDawIcUCXgUVFBWvFQuogCDFgoKoCAiEEiAJIT05vz+42R/LbkJ2N8kkO5+3L16YM7O7z4Q5e/Y5z54ZAICvPtJHOktn6X29r1Zq5WwPUpAe/t9/ldHrel3jNI4vksNnlhfqr75aGuH+mcoya9eu1WuvvabvvvtOjlJelz8nJ0c5OTnOn9PT0yVJiYmJCgqy/O4CQKUXFxfn8jeA0rF733lX7+qf3H809/BcJRQmWB1OlfBgjQcVGRGpSEVaHYql7N53gNK409yp34/+rgeOPKBqqmZ1OG6iFa1H9Ii6hnXVLTVu0ZGgIyd/EHz2UNpDapDZwLUt9iGFRoYqSUkWRVU1MOagvNxgbtDvGb/rroy7FHTcnS3P1Jla51inm2rcpK/Cv7IwQv/Qd1CchvkN9fLhl9Uqv5XbtmVhy3RzjZuVHpRu2/GJvgP4hr5TORzVUV1aeKlmpM1Q/+z+VodTojzlaUrMFL0a+apqOGrY9nacNWvW1L59+6wOo0pzGGMsW34QFCS98UbFFuqLLn0/b948jRo1ymWbMUZnn322mjZtqoULF2r79u1q3LixnnzySd11V/ErBSZPnqwpU6a4td97770KDw8v60MAAADHqZ5eXUMXDVWDXQ1OvrON/X7a73rrirek0n0PEQAkSY22NdKQd4YoKjPK6lCKlVI7RW9f/rZSElKsDiUg1d1VV9e+fK0cxw0gfzX5S2/86w3GFKASaLa1mQa/O1jhOa7zT0ZGy3su1zddv5FYQ4IA0fSPphr87mBFZEe4bVvefblWdF/B+Q4AgcBI5648V72+7KUgU/ne2DOiMrR46GLtbLTT6lAsl52drWnTpiktLU0xMTFWh1MlWb6ivjKZP3++fvnlF73zjnf3L5o4caLuuOMO58/p6elq0KCB5s2bx4p6oBTi4uI0ePBgvfvuu0pJYYIVKC36zv97zjynW6Nv1dCsoapdUNvqcCqVfEe+Voau1O1ptyttbprV4VQK9B3AOy9Ev6DJIZPVK6eXlCNZfaX5CLlOzscdjNPVs67WbbG36eOIjy2KKjAFm2B9kvKJS5E+S1m66shV2jF3h4WRVR2MOagIM2Nm6pXDr6hFfgtnm0MO9fy6p3JX5VbJK4/Qd3A8h3Ho5oybNSJjhMsVJCQp3ZGum2rcpC+2fiFttSjASoS+A/iGvlP5zNEcnVfzPN2acava57a3OhxJUo4jR1+Ef6HHoh5T8mfJVodTKdSsWdPqEKo8CvX/k56erokTJ2rChAlq0MC7FXlhYWEKCwtza+dyD4B3UlJSlJzMAAd4i75zzB3/+w8nMDpWWONjiRv6DlA6yUrWdUnXadzt4zRnzhzL+00v9dLbeltx+v/LUkabaL2c+rIeS31M9+t+FarQwggDx126y+X+kJL0kB7S9we+tyiiqosxB+UpWcnqqI56Ra/ocl3usu3CnAu1dN9SDdIgbdZmiyL0HX0H1VVdr+k1DdIgt22/6lcNNAP15+E/LYiscqPvAL6h71Qui//3X6VhJGX97w8kSYWF5N7+snS5d2Fh5bk//VNPPaXc3Fxdfvnl2r59u7Zv365du3ZJkg4fPqzt27crNzfX4igBAAAAwN6+0lfqoA5ar/Vu2yZqoj7Wx6qlWhZEFlgaqZGmyPUWb7/oFz2lpyyKCEBJjuqohmu47tJdKlCBy7bmaq41WqPLdJlF0QG+KTp3PRXpF2uxOquz/hRFegAAUHVxXfb/2blzpw4fPqxWrVqpcePGaty4sbp27SpJmjp1qho3bqzffvvN4igBAAAAADu1U+fpPM3XfLdtF+pCrdM6tVGbig8sgMzSLEUq0vlzoQp1na5TvvItjArAyTytp9VHfZQi18v2Vld1vat39agedbt0OFAZXapLtVZr1UItXNoLVKB7dI+GaZiO6qhF0QEAAJQNLn3/P7fccosGDhzo0rZ//36NGzdOo0aN0qWXXqrGjRtbExwAAAAAwEW2sjVao/WDftAzekYhCnFua6zGWqVVuk7XaaEWWhhl1TRcw3WRLnJpe1Evao3WWBQRAG8UXXlkiZaogzq4bLtP96m92muERuiwDlsUIVC8IAVpiqboft3vtu2gDmq4husLfWFBZAAAAGXPNoX6F154QampqdqzZ48k6cMPP3Re2v7mm29W+/bt1b59e5fHbN++XZLUqlUrtyI+AAAAAMB6L+pF/aSftFiLlaQkZ3ukIrVAC9RRHTVBE1gJXko1VVPP6lmXtt3arft0n0URAfBF0ZVHZmmWRmmUy7aLdJHWaZ0GaZB+1s/WBAh4UEM1tFAL1Vd93bZt1EZdpsu0XdsrPjAAAIByYptC/VNPPaUdO3Y4f16yZImWLFkiSbrqqqsUGxtrVWgAAAAAAD+s1Ep1UAe9o3d0js5x2XabblNbtdXlulz7td+iCKuOJ/SEEpTg0naTbtIRHbEoIgC+KunKI03URKu1miuPoNI4U2fqPb2npmrqtu11va5xGqcsZVkQGQAAQPmxzU2ptm/fLmOMxz+NGjXy+JhGjRrJGKO77rqrYoMFAAAAAHglWcnqoR6apVlu23qoh9ZrvTqqowWRVR3d1E3X6lqXtvf/9x+AqutFvaie6qlkJbu0F115ZIZmKNg+a3lQCV2uy7Vaq92K9HnK0826WSM1kiI9AAAISLYp1AMAAAAAAlue8nSDbtA1ukbZynbZVl/19a2+1RiNsSi6yi1MYZqjOS5tR3REN+tmiyICUJaKrjyySqvctt2m27RMy9yupgGUt2qqpqf0lN7SW4pSlMu2fdqn83W+XtALFkUHAABQ/ijUAwAAAAACyjzNU1d11U7tdGkPU5he1suardkKVahF0VVOEzVRp+t0l7b7dJ92aZdFEQEoa1x5BJVJnOL0uT7XnbrTbdv3+l7t1V7f6lsLIgMAAKg4XNcKAAAAABBw1mmdztJZeltvq6d6umwbp3Fqr/ZaruXWBHecHOXoI32k7/W9ZTGcrtM1URNd2tZojV7UixZFBKC8FF155Af9oBf1osIV7txWdOWRl/WyMpVpYZRSdHq02nzeRgnpCcpQhqWxoOw55NAwDdMpOsVt2xzN0S26RbnKtSAyAACAikWhHgAAAAAQkA7ogC7QBXpcj7ut2Ov4v/8qg/t1v2Zrtm7VrRVemDhdp+t9ve9yhYF85WusxqpQhRUaC4CKM0/z9It+0bt616VYGqYw3agbLYzsf45KWiWdo3OsjgQVJEc5ulE36hW9YnUoAAAAFYZL3wMAAAAAAlaBCnSX7tIVusLyFaIlGa/xWq7lqqu6FfaaAzVQa7VWzdXcpf1pPa2f9XOFxQHAGkVXHvlaX1sdCmxul3apm7pRpAcAALZDoR4AAAAAEPDe0ls6W2frL/1ldSjF6qIuWq/1Ok/nlevrBClIj+gRvaf3VF3VXbZt1VZN0ZRyfX0AlUfRlUee1tNWhwKbWqEV6qAOWqu1VocCAABQ4bj0PQAAAADAFn7RL2qv9hqhEeqkTlaHo2qqpiEaokhFOtvqqI6+0le6Q3foBb1Q5q9ZUzW1UAt1kS5y27ZBGzRQA5WlrDJ/XQCVV9GVR5ZoiYZqqGIVa3VIioyI1GnNT9PW37cqM6vyXg0FvstXvr7Ul3pX7ypf+VaHAwAAYAkK9QAAAAAA20hXumb/77/K4Gk9rff0npqoibMtRCF6Xs+rozpqnMYpW9ll8lqt1drttYq8ptc0XuPL7LUAVD2r/vdfZZBUI0njBo7TnDlzlJyVbHU4AAAAQLng0vcAAAAAAFjkZ/2ss3SWPtWnbttGaqRWaqUaqqHfr3OFrtBqrXYr0ucpTzfpJo3SKIr0AAAAAABUIAr1AAAAAABY6LAOq5/66RE94ratvdprndbpfJ3v03MHK1jTNV0LtdDlEvuStFd71Uu9NFMzfXpuAAAAAADgOwr1AAAAAABYrFCFekAPaJAG6YiOuGyLU5w+02e6S3d59ZzxitcyLdPtut1t22qtVgd10Hf6zq+4AQAAAACAbyjUAwAAAABQSbyv99VJnbRFW1zaq6mantSTeltvK0pRJ32ejuqo9VqvHurhtm22ZquHemiP9pRV2AAAAAAAwEsU6gEAAAAAqES2aIs6qZPe1/tu24ZpmL7X92qmZsU+/hpdo2/1rRqogUt7jnI0RmN0va5XrnLLOmwAAAAAAOCFgC/UZ2RkaNKkSbroootUq1YtORwOzZ8/32WfwsJCzZ8/XwMGDFCDBg0UFRWlM844Q4888oiys7OtCRwAAAAAYFtHdESX6TLdr/tVqEKXbWfoDP2gH9RP/VzaQxWqWZqlV/SKwhTmsu0f/aOu6qpX9Wq5xw4AAAAAAE4u4Av1KSkpeuihh7R582a1adPG4z6ZmZkaPXq0Dhw4oPHjx+uZZ55Rp06dNGnSJPXt21fGmAqOGgAAAABgd0ZGj+pR9VM/HdZhl201VEP/1X/1oB6UQw7VVV0t13KN13i351mu5eqgDvpBP1RU6AAAAAAA4CSCrQ6gvCUlJSk5OVl16tTRunXr1LFjR7d9QkNDtXLlSp1zzjnOtuuuu06NGjXSpEmT9OWXX6p3794VGTYAAAAAAJKkT/WpztJZek/vqbVau2yboik6V+eqtVqrjuq4PXaGZuhu3a185VdUuAAAAAAAoBQCfkV9WFiY6tRxn6w4XmhoqEuRvsigQYMkSZs3by6X2AAAAAAAKI1t2qYu6qI39abbtj7q41akz1SmRmiE7tAdFOkBAAAAAKiEAn5FvT/27t0rSYqLiytxv5ycHOXk5Dh/Tk9PlyQlJiYqKCjgvwsB+K2oj52srwFwRd8BfEPfAbxHv6k87jR36vejv+v+I/cruJiUfke1HRpTc4x+C/lNSUqq4AhxPPoO4Bv6DuAb+g7gG/oO4JuaNWtq3759VodRpTmMjW7AXnTp+3nz5mnUqFEn3f+CCy7Q2rVrtWPHDtWoUaPY/SZPnqwpU6a4td97770KDw/3I2IAAAAAANw1+ruRhiweoqjMKJf2P5v+qXcHv6vsyGyLIgMAAAAA2EF2dramTZumtLQ0xcTEWB1OlcSK+mJMnTpVX3zxhV588cUSi/SSNHHiRN1xxx3On9PT09WgQQPNmzePFfVAKcTFxWnw4MF69913lZKSYnU4QJVB3wF8Q98BvEe/qZxeiH5Bs/Jm6ay8s5SrXM2KmqUnjz6pwtcLrQ4N/0PfAXxD3wF8Q98BfEPfAXxTs2ZNq0Oo8ijUe/D222/r/vvv15gxY3T99defdP+wsDCFhYW5tXO5B8A7KSkpSk5OtjoMoMqh7wC+oe8A3qPfVC7JSlZHdVRLtVSyknX46GHpqNVRwRP6DuAb+g7gG/oO4Bv6DuCdwkK+JO4vCvUnWLZsmUaOHKl+/fpp9uzZVocDAAAAAECJftNvVocAAAAAAAC8xHXZj7NmzRoNGjRIZ511lhYtWqTgYL7HAAAAAAAAAAAAAAAoWxTq/2fz5s3q16+fGjVqpP/+97+KiIiwOiQAAAAAAAAAAAAAQACyxZLxF154QampqdqzZ48k6cMPP9SuXbskSTfffLOCgoJ04YUX6vDhw5owYYI++ugjl8c3bdpUXbp0qfC4AQAAAAAAAAAAAACBxxaF+qeeeko7duxw/rxkyRItWbJEknTVVVdJkv755x9J0r333uv2+KuvvppCPQAAAAAAAAAAAACgTNiiUL99+/aT7mOMKf9AAAAAAAAAAAAAAAC2xz3qywFFf8A7hYWFys7OVmFhodWhAFUKfQfwDX0H8B79BvANfQfwDX0H8A19B/ANfQfwTVGfoS7qO4fht1fmdu3apQYNGlgdBgAAAAAAAAAAAACUm3/++Uf169e3OowqiUJ9OSgsLNSePXtUvXp1ORwOq8MBAAAAAAAAAAAAgDJjjNGRI0dUt25dBQVxEXdfUKgHAAAAAAAAAAAAAKAC8fUGAAAAAAAAAAAAAAAqEIV6AAAAAAAAAAAAAAAqEIV6AAAAAAAAAAAAAAAqEIV6AAAAAAAAAAAAAAAqEIV6AAAAAAAAAAAAAAAqEIV6AAAAAAAAAAAAAAAqEIV6AAAAAAAAAAAAAAAqEIV6AAAAAAAAAAAAAAAqEIV6AAAAAAAAAAAAAAAqEIV6AAAAAAAAAAAAAAAqEIV6AAAAAAAAAAAAAAAqEIX6ALF8+XI5HA698847VocCVCn0HaD8FfWz5cuXWx0KUGXQbwAAAAAAAIDARqG+EnM4HKX6Y8UE7qpVq3TeeecpMjJSderU0S233KKMjAyXfUaNGlVi3Lt373Z73ueff16xsbHKy8uTJBUWFuqJJ55Q48aNFR4ertatW+vNN9/0GFNhYaFmzZqltm3bKiIiQrVr11avXr30008/leqYli5dqvbt2ys8PFynnHKKJk2apPz8fJd95s+fX+zx7N27t1Sv480xbd68WRdddJGio6NVq1Yt/etf/9KBAwdK9Tp2Rt+puL7z9ttv66qrrtKpp54qh8OhHj16eNzPl2Py5JVXXlGLFi0UHh6uU089Vc8//7zH/Xbv3q1hw4apRo0aiomJ0aWXXqpt27aV6jXgWUnvf/fee2+ZvU5OTo7uuece1a1bVxEREercubOWLVvmss/27dtLPJ+uu+46t+ctLCxUfHy8nnjiCWdbad5jJ0+eXOJrrVy58qTHlJqaqrFjxyo+Pl5RUVHq2bOnNmzY4LZfo0aNPL7G+PHjS/vrK/W44c17BHxHv/Gt3yQnJ+vee+9Vz549Vb169WLHbF+OyRNvxozSjkPwzS+//KIhQ4aoYcOGCg8PV7169XTBBRf4/Ht+8cUXNX/+fK8eU5qcoEePHsWedyEhIR6f984771TLli2dP5em30rH+uHs2bPVtm1bRUdHKzExUX379tWqVatKfUylOW+L67fh4eGlfp3SHpNUus/EKB36Tdn3m1mzZmno0KE65ZRT5HA4NGrUKI/7+XJMnmJlfqBilXWfKQul+SxS0udKh8OhBQsWuD3vL7/8IofDobVr1zrbStNfJWnZsmXO9+maNWtqyJAh2r59e6mPqTTna0mf5d56661Sv1Zpj6m0eRk8o++Uf99Zu3atbrjhBnXo0EEhISFyOBwe9/PlmDwp7ecxbz7j4Zjj/42+++47t+3GGDVo0EAOh0OXXHKJBREeU5o8obi5KofDoVNPPdXj8w4ePFgXX3yxpNLn90X8zRPIfVAVBVsdAIr3+uuvu/z8n//8R8uWLXNrb9GihTZv3lxhcf344486//zz1aJFC02fPl27du3SU089pT/++EOffPKJc79x48apd+/eLo81xmj8+PFq1KiR6tWr5/bcH330kfr06eNMav/9739r2rRpuu6669SxY0d98MEHGjFihBwOh4YPH+7y2GuuuUYLFizQyJEjddNNN+no0aPauHGj9u/ff9Jj+uSTTzRw4ED16NFDzz//vH755Rc98sgj2r9/v2bNmuW2/0MPPaTGjRu7tNWoUeOkr+PNMe3atUvdunVTbGyspk6dqoyMDD311FP65ZdftHbtWoWGhpbq9eyIvlNxfWfWrFlav369OnbsqIMHDxa7ny/HdKI5c+Zo/PjxGjx4sO644w59++23uuWWW5SZmal77rnHuV9GRoZ69uyptLQ03XfffQoJCdGMGTPUvXt3/fjjj6pdu/ZJXwvF8/T+d8YZZ5T4mG7duikrK6tU71ujRo3SO++8o9tuu02nnnqq5s+fr4svvlhff/21zjvvPElSfHy8W3+WpE8//VQLFixQnz593LatXbtWKSkp6tevn6TSv8dedtllatasmdvz3XfffcrIyFDHjh1LPJ7CwkL169dPP/30kyZMmKC4uDi9+OKL6tGjh9avX++W1LRt21Z33nmnS9tpp51W4msU8Wbc8OY9Av6j3xxT2n7z+++/6/HHH9epp56qM888U6tXr/a4ny/HdCJvxozSjkPwzapVq9Sz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/PPP3fZ577331KJFC7333nvONm/eg7zNy+CKvlP+fcdfxR3T2rVr1aJFC73wwgvONm8+j/mTb+LY/d27dOmiN99809n2ySefKC0tzeNtB40xGjBggGbMmKGLLrpI06dPV/PmzTVhwgTdcccdbvt/9913uuGGGzR8+HA98cQTys7O1uDBg0u8PankX367ceNGbd68WSNGjPC4/eOPP3a7nUlp+JsnkPugKuMe9QEmOztbP/74o3OCt2bNmrr11lu1adOmk94LtTSK7s+WlJTkti0pKUnffvttsY/97LPPdPDgwWKLnx9//LFGjx7t8lqJiYlyOBxuryNJe/bskST99ddfMsborbfeUnBwsJ544gnFxsbq2Wef1fDhwxUTE6OLLrrI52Mqeh3p2AerUaNGOQv169ev1/Tp03XOOedow4YNatCgQbGv480xnSymQ4cOKScnx9L72AQa+o73fccfJzumEyUnJ6tatWpKSEhwaQ8NDVXt2rWdx1TUN4r7PUvHjr958+Z+HoF99e7d263NGOP8/+zsbK1bt85jcnoyycnJJ/23K86CBQuUlJSkXr16uW37+OOPFR4e7tzmz3vsr7/+qp9//ll33323Wx8r7pg8FSaPP6YzzzxTktS6dWudd955at68uQ4ePKj58+frtttu0549e/T444+f9HVKe0ylfY9A2aHfeNdv/FHSMZ3ImzGjtOMQfHfXXXepb9++atu2rTp16qSuXbvq/PPPV8+ePRUSEuKy74oVK1z6y0033eScyLrxxhslSQMHDtT999+vuLg4XXXVVSd9fW9yghO9/fbbys/P9/i5JjMzU8uXL3e5f6k3/faNN97Q5Zdf7nIMTZo00cqVK9WkSZOTHlNpz9uaNWvqpptuUpcuXRQWFqZvv/1WM2fO1Nq1a7Vu3Tq3SShPr1WaY/LnMzHc0W/Kvt/4o6Rj8oT5gYrnTZ/xVrt27fTKK684fz548KBeeeWVEj/H+5O/Hjp0SJ9++qkGDhyo6tWru23/6KOPdO655yo2NlZS6ftrYmKiatSooZUrV7rsc/DgQf3222+SjhXj69Sp4/GYvDlfg4KC1KdPHw0aNEj16tXTtm3bNH36dPXt21dLly5Vv379PL5GaV/r+PcFb/IyuKPvlH/f8cfJjulE3nwe8yffxDEjRozQxIkTlZWVpYiICC1YsEDdu3dX3bp1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gc/jDmBj9JuqKzQ0VAUFBc5isTHW3+TcGKO8vLyT7peSkqJ7771Xt9xyi3r06KHMzExt3LhRubm5MsaosLDQ5Xk8tb322msaNWqUrr32Wn3//fd68sknVb9+fXXu3Nm5z8yZM3XTTTfp9ttv18cff6x7771XDRs2VOPGjZ2/t/z8fOXn56t///56//33NWLECOfj33vvPbVr105JSUlux5Wfn+9sa9OmjZYsWaLs7GxVq1ZN69atU40aNbRmzRp16tRJ+/fv1z///KO2bduqsLBQmUcy1e/qfprw/AQZY7Tg6QW68YYbteTdJYqKitJrr72mPn366MEHH1SXLl1UrVo15eXlaePGjbr//vt11113qW3bttq9e7emTp2qwsJCXXfddc7YZs+erRtvvFG33XabgoODS/w3ef755/XXX3/pmWeeUY0aNfTPP/8oJydHeXl5ys/P1/XXX68zzzxTL730kqpVq6ZXXnlFN9xwg958802NGDFCf/31l44ePaoHH3xQ0rGrABR9WWP69Om688471bhxYy1YsEC33nqr3n//fdWoUUP79+/XTTfdpEsuuUSTJ0/W9u3b9eijjyo4OFhjx44t9t/99ddf17hx43T11Vfryy+/1NSpU9WmTRs1atRI8+fP16hRozRz5kw1adJEISEhxR57QUGB9u/fz/tfObBsuXfjxlLTplLRv3njxlKTJiX/adrU+9ep+7+b3ScmJrq0JyQcu3fZ4cOHnZe893SCJScnO58DVVhxZzpf9kGg8nRuc+sloOIw7sBOijuvubAUUHE89TfGHAQqch0AAGAzKSkpKigoUM+ePVW3bl01a9ZMQ4cOdS5CLY3WrVtr1KhRatiwoS6//HL16tVLCxcudNmnd+/eGjhwoBo2bKjrr79eLVq00Ntvv+3x+S655BLt3LlTv/567IrF+fn5+uyzzzRgwICTxtKuXTtlZmbq999/lzFGGzdu1JVXXqkNGzZIktavX6+EhAQ1aHDsdnode3XUxVddrEanN1LjFo1139z7lJOd49y/6LL61atXV1xcnPPnl156SVdffbUuueQS55cSxo0bpyVLlrjEc+GFF2rAgAGqX7++6tSpU2Lse/fuVfPmzdWyZUvVrVtXnTt3Vrdu3SRJn3/+uQoLC3X//ferWbNmaty4sSZNmqS9e/dq/fr1ioyMVFhYmEJDQxUXF6e4uDiXy+wPGzZMvXr1UuPGjXXvvfcqKipKS5culSS98847SkxM1N13361GjRqpR48eGjt2rBYsWFDiqvZzzjlHQ4cOVYMGDXT11VerRo0aWr9+vcvvLTY2VnFxcYqN5XadVrBsRX337sfuOV90Zfiin8tahw4dtGzZMu3evVvNmzd3tu/Zc+z+ffHx8TrjjDMUHBysdevWadiwYc59cnNz9eOPP7q0oYqiYAK78XRuUzABKg7jDuyEQj1gPQr1sBNyHQAAYDOnnnqqOnbsqCuuuEJnn322OnfurPPPP18xMTGlfo4zzzzT7ee33nrrpPts3brV4/PFx8fr3HPP1dKlS9WqVSt98803ysvLU+/evU8aS/Xq1XXqqadq/fr1CgkJUXBwsAYNGqS5c+cqMzNTGzZsULt27Zz7H9x3ULPun6UNyzfo0P5DKiwoVHZmtvbuLfmylX/88Yd+/vlnzZs3z9lWWFionJwcZWdnKzw8XJLUokWLk8ZcZPDgwbrnnnu0ZcsWnX322erevbvatGnjfL1du3ape/fuLo/Jzc11u2S8J8f//oODg9WyZUv9/fffkqS///5bZ555phzHFVLbtGmjzMxM7d+/v9gvGJx66qnO/3c4HKpdu7YOHTpU6uNF+bOsUD9/fsk/l5Vhw4Zp2rRpeuWVV9SrVy9n+8svv6zg4GD16NFDsbGx6t27t9544w098MADql69uqRjl4TIyMjQ0KFDyyc4VBwKJrAbD+e2CbL+ck6AbTDuwE4o1APWo1APO6FQDwAAykCTrCZWh1DqGKpVq6aZM2fq559/1vfff69FixZp1qxZmjdvnoKCgtwu4190mfrydumll2rSpEm6/fbb9eGHH6p3797O4vfJdOjQQRs2bFBoaKjat2+v2NhYNWrUSD/++KM2bNigK6+88tiODmny1ZOVdjBNdz57p+o0rKPQsFBd0/Gak942ICsrS2PHjlXPnj3dtoWGhjr//2S3vz7eueeeqw8//NB5T/sbb7xRQ4YM0W233aasrCydfvrpevjhh90eV7R6vaJVq+Z+X+jKcNsH/L9Kc4/6//xH6tZNatTI8/YdO6QVK6SRI7173nbt2umaa67Rq6++qvz8fHXv3l3Lly/X4sWLNXHiROdl7R999FGdc8456t69u8aOHatdu3bp6aefVp8+fXTRRRf5d3CwXnFXa2DyCoGKySvAWhTqYSfFnddchhioOBTqYSdc+h4AAJSB+3fcb3UIXnE4HGrTpo3atGmja6+9VgMGDNDy5ctVo0YNHTx40LlfQUGB/vrrL3Xo0MHl8Zs2bXL7udEJBblffvlF/fr1c9nntNNOKzamc889VxEREXr33Xe1evVqzZ07t9TH0759ey1dulTVqlVTly5dJB0r3n/++efauXOnS/w/r/xZ97x4j869+FxJ0t5/9io1NdXl+YKDg90uAd+8eXPt2LHDeQn9slKzZk1dcskluuSSS7RkyRI999xzuu2229S8eXMtW7ZMNWvWVHR0tMfHhoSEqKCgwOO2TZs2qX379pKOfdli8+bNzit+N27cWF999ZWMMc5V9T/99JOioqKct/r2VtFl90u6dD7KX6Up24weLa1aVfz2778/to8vZs+ercmTJ2vNmjW67bbbtHHjRs2YMUNTp0517tO+fXt98cUXioiI0O233665c+dqzJgxeuedd3x7UVQuFExgNxTqAWsx7sBOWFEPWI9CPeyEq4cBAACb2bRpk+bNm6fffvtNe/fu1ddff63Dhw+rUaNG6tixo7777jt999132r59u6ZNm6YjR464PcdPP/2k//znP9qxY4cWLVqkL7/8UsOHD3fZ58svv9TSpUu1Y8cOzZkzR7/++muJt4auVq2aLrnkEs2cOVOnnHKKWrduXepjKrpP/Xfffecsynfo0EGffvqp4uLi1LBhw2M7OqQGpzbQx69/rL83/61NazbpwSsfVFhYmMvz1a1bV2vXrlVKSorS09MlSddee60++ugjvfTSS/rrr7/0999/6/PPP9esWbNKHeeJZs+erRUrVuiff/7RX3/9pW+//db5hYe+ffuqRo0auuuuu7Rx40bt3r1b69ev11NPPaV9+/Y54/zzzz+1fft2paamulz9YPHixfr666+1fft2PfHEEzpy5IgGDBggSRoyZIj27dunJ598Utu3b9eKFSs0d+5cjRgxQkFBvk3A1KxZU2FhYVq9erUOHjyojIwMn38v8F2lWVF/sistHD0qBfsYbUhIiCZNmqRJkyaVuN95552nlStX+vYiqNwomMBuWGUCWItxB3ZCoR6wHoV62Am5DgAAsJmoqCht2LBBb775po4ePao6derotttu07nnnqv8/Hxt3bpVkydPVrVq1XTFFVforLPOcnuOK6+8Ups3b9ZLL72kqKgo3Xbbbc6V7EXGjh2rzz//XI8//rji4uL0yCOPqEmTki/PP2DAAM2bN0/9+/f36phiYmLUtGlTHTp0yFnobteunQoLC52ryos88MoDenTso/pX+38psUGibph6g5695VmXfW699VY988wzev/995WQkKClS5eqS5cumjFjhl5++WW99tprCg4OVqNGjXTppZd6FevxQkJCNHPmTO3Zs0fh4eFq27atHn30UUlSeHi45syZoxdeeEF33323MjMzFR8fr44dOyoqKkqSNHDgQK1fv15XX321MjMzNXv2bCUlJUmSbrrpJr322mvaunWr6tevr6efflo1atSQJCUkJOiZZ57Rc889pxEjRigmJkYDBgzQNddc4/OxBAcH66677tLLL7+sOXPmqG3btpozZ47PzwffWFqo//ln6ccf///nb7+VPN06IzVVmj1bKuEKG0DJKJjAblhRD1iLcQd2QqEesB6FetgJuQ4AALCZxo0b6/nnn/e4LTg4WPfee6/uvffeEp8jKipKjz32WIn7xMfH64UXXvC4rW7duvrhhx/c2g8cOKDg4GBdfPHFJT63JwsXLnT5OTY2VmvXrnXbr3m75vrPD/9xaTu/0fkuP3fr1k3dunVze2yXLl3cvpBwPE/HVJIxY8ZozJgxxW6Pi4vT5MmTi91es2ZNt9/xnj17JEmNGjXS/Pnzi31shw4d9NprrxW7/cQi+9KlS932OfF3PnDgQA0cOLDY50T5s7RQ/9570pQpx/7f4ZDmzDn2x5MaNY7dxx7wCQUT2A2XgwSsxbgDO6FQD1iPQj3shEI9AACA5XJzc3X48GHNnTtX559/vmrXrl0+L+TpyklMcyOAWFqoHztWuuSSY5e979RJeughqW9f130cDikqSmra1PdL3wMUTGA7TF4B1mLcgZ1QqAesR6EedkKuAwAAYLnPPvtMjzzyiE477TRNKVqR+z+ffPKJy+p9h8Mh87/7X9epU0eLFi2q0Fi98dhjj+mTTz7xuK1v376aOHFiBUeEQGdp6Tsp6dgfSfr6a6llSyk+3sqIELAomMBumLwCrMW4AzuhUA9Yj0I97ISrhwEAAHjF0yXQT+TtJeD79+9f7H3pu3XrpjPOOEPSsUvz16pVS4cOHVJ+fr6CvV2RW8Er6seNG6errrrK47ai+8yXteJuKwB7qDRr1M88U9q1q/hC/S+/SPXrSzVrVmxcCBAUTGA3ns5tTx9qAJQPxh3YCYV6wHoU6mEn5DoAAACVWlRUlLOoHRISovj4eEVHRysvL8/iyE6uVq1aqlWrltVhwEYqzfTZ7bcfuxR+ccaNk+66q+LiQYChYAK7YUU9YC3GHdgJhXrAehTqYSfkOgAAwAeFhYXOy6+jiuOfscIZY1RQUGB1GAGp0qQyX30lDRhQ/Pb+/aUvvqi4eBBgKJjAbrgcJGCtSvMJC6gAFOoB61Goh51QqAcAAD5ITk5WSkqKsrOzrQ7FVowxys/P9/1LEvmSsj38QYXJzs5WSkqK9u7da3UoAanSXPr+wAEpLq747bVrS/v3e/+8y5cvV8+ePT1uW716tc4++2znz7m5uXrqqaf0n//8R9u3b1dsbKzOOusszZkzR/Xr1/f+xVF5UKiH3TB5BVjLU3/jS6cIVBTqAetRqIedkOsAAAAf5Ofn684779T111+vs846S8HBwXI4uH9OeatWrZqysrKUkZHh24rsQklpHtpSyiA4lKjoSxY//PCDZs+erfz8fKtDCkiVplCflCRt3Fj89vXri79/fWnccsst6tixo0tbs2bNnP+fl5enfv36adWqVbruuuvUunVrHT58WGvWrFFaWhqF+qqOQj3shskrwFoUTGAnFOoB6zHuwE7IdQAAgI8OHDighx9+WLGxsYqJiaFQXwESEhI0bNgwLVq0SPt9WY37qKTBJ7SlS+pXBsGhRMYYpaenKy0tjdtGlKNKU6gfOFCaOVPq29f9EvgffCDNmyddf73vz9+1a1cNGTKk2O0zZszQihUr9N1336lTp06+vxAqJwr1sBtP5zafO4GKQ8EEdkKhHrAe4w7spLhz2yHuVwoAAE7KGKPU1FSlpqZaHYot5Obm6ujRo9q1a5eSk5O9f4I8SeEntGVK2lEGwQGVQKUp1E+efOwe9IMGSW3aSGeccax90ybpxx+lli2lKVP8e40jR44oIiJCwcGuh11YWKhnn31WgwYNUqdOnZSfn6/c3FxFRkb694KoPCjUw25YZQJYi4IJ7IRCPWA9xh3YSUnjDrcaAgAACCzkOghwlWb6LDZW+v576f77pbw86Z13jv3Jy5MefFBau1by58oKo0ePVkxMjMLDw9WzZ0+tW7fOue23337Tnj171Lp1a40dO1ZRUVGKiopS69at9fXXX5fB0cFyFOphNxTqAWuRRMBOKNQD1mPcgZ0w7gAAANgHuQ4CXKVZUS9JUVHHVs0fv3I+O1v68ENpxAjp00+P/eyN0NBQDR48WBdffLHi4uL022+/6amnnlLXrl21atUqtWvXTn/88YekY5e/r1WrlubMmSNJmjp1qi666CL98MMPat26dbGvkZOTo5ycHOfP6enpkqTExEQFBZEplpW4uDiXv72RE5+jQzrk1l6zRk2FJ5143RSg6jsQdED5yndpCwkLUa2kWhZFBFQt/ow5kpQanaosZbm0OYxDdZLq+B0bUNnk1c5TilLc2mNrxSoyiStUAaXh77izt9pemROu+R0RHqEaSTX8DQ2odNIj03VUR93a69SrI0cO9/sCSsPfcQewI/oN4Bt/+87hqMPKlmthMEhBSkxK9Ds2+K+wsFD79u2zOowqzWGMP+vUy4cx0pdfSgsWSO+9Jx05IsXFSf36Sa++6v/z//nnn2rdurW6deumTz/9VK+//rpGjhyp0NBQ/fnnn2rQoIEkaefOnWrWrJmGDRumN954o9jnmzx5sqZ4uC7/vffeq/BwisCVwV+N/9LrI193ax+xYIRO+/M0CyICyteL41/U/sT9Lm2NtzXW1a9fbVFEgL18MOADbWy30aUtLDtMEx+faFFEQPnZH79fL97wolv7gKUD1H5jewsiAuznkfseUX6I65c0O6zroP4f9bcoIqD8fNnzS33b7Vu39vsevU+h+aEWRAQAAIDysnjwYv16xq8ubdFHonXX9LssigjHy87O1rRp05SWlqaYmBirw6mSKlWhfv36Y8X5t96S9u6VHA5p+HDpppuks88+9nNZueKKK7RkyRJlZmbqvffe09ChQ9WzZ0999dVXLvv16tVL27dv17Zt24p9Lk8r6hs0aMCK+jIWFxenwYMH691331VKivuqrZLkdM/RoTc9rKi/sqbCv+bLFAg8B5YdUH4r18naqLVRihnIYAmUhj9jjiSlzkhV1uUnrKhPc6hOC1bUI/DknZqnlBUeVtTfFavIhayoB0rD33EneVuydEJaE/lapGInxpZRhEDlcWTCEWXcnuHWntgsUUGZzMEApeHvuAPYEf0G8I2/fefw7MPKHnDCivrkICV2YEV9ZVC0op5Cve8sv/T9tm3HivMLFkh//CHVqyddeaXUqZN0+eXS4MFSly5l/7oNGjRQbm6ujh49qrp160o6dqn6EyUkJGjjxo1u7ccLCwtTWFiYWzuXeygfKSkpSk5O9u5Bh4tpTjkseflUQJWQ696Ul5/nfd8BbM6nMUeSPNyqxxQY+iACUzF5WNqRNKUlp1VsLEAV5/O446E2mZmRqczkTP+DAiqbdM/N+/bvk45UbChAVefzuAPYGP0G8I3PfcfDPHdhfiH9EAHD0kJ9ly7S2rXHLms/ZIj08svSeecd2/bXX+X72tu2bVN4eLiio6N15plnKiQkRLt373bbb8+ePYqPjy/fYFD+ivtSfWGFRgFUHE/nNotLgIrjqb8x5iBQFXduM+4AFYdxB3bCuAMAAGAf5DoIcJamMWvWSI0aSXPnSs8++/9F+rJ04MABt7affvpJS5cuVZ8+fRQUFKTq1avr4osv1qpVq7Rlyxbnfps3b9aqVat0wQUXlH1gqFgU6mE3Hs5tE1Rp7nQCBD6SCNgJBRPAeow7sBPGHQAAAPsg10GAs3RF/QsvSAsXSoMGSbVqHbvM/fDhUo8eZfcal19+uSIiInTOOecoISFBv/32m+bOnavIyEhNmzbNud/UqVP15ZdfqlevXrrlllskSc8995xq1aql++67r+wCgjUo1MNuWFEPWIskAnZCwQSwHuMO7IRxBwAAwD7IdRDgLE1jbrhB+u67Y5e5v+026dtvpfPPP3af+gcflByOY3/8MXDgQKWkpGj69Om64YYb9Pbbb+uyyy7TunXr1KJFC+d+LVu21IoVK9SqVSs98sgjmjp1qjp16qSVK1eqXr16/gUB61Goh914Orf9fD8F4AWSCNgJBRPAWsV9xmPcQaBi3AEAALAP5tgQ4CxdUV+kcWPp/vuP/Vm/XlqwQHr7bcmYY8X8Tz6RBgyQeveWwsO9e+5bbrnFuUL+ZNq3b69ly5b5cASo9CjUw25YUQ9YiyQCdkLBBLAWuQ7shnEHAADAPphjQ4CrdGlMhw7S9OnSP/9In38uXXjhsaL9gAFSXJzV0aHKYvIKdkOhHrAWSQTshIIJYC1yHdgN4w4AAIB9MMeGAFdp05igoGMr6OfPl/btk95889hl8QGfMHkFu/FwbhuHqfg4ALvydBlixhwEKgomgLW49D3shnEHAADAPphjQ4CrEmlMeLh0+eXSBx9YHQmqLAr1sBtW1APW4tu+sBMKJoC1yHVgN4w7AAAA9sEcGwIcaQzsgckr2I2nc7u41VYAyh5JBOyEgglgLXId2A3jDgAAgH0wx4YARxoDe2DyCnbDinrAWiQRsBMKJoC1yHVgN4w7AAAA9sEcGwIcaQzsgckr2A2FesBaJBGwEwomgLXIdWA3jDsAAAD2wRwbAhxpDOyBySvYjYdz2wSZio8DsCuSCNgJBRPAWuQ6sBvGHQAAAPtgjg0BjjQG9sDkFeyGFfWAtUgiYCcUTABrkevAbhh3AAAA7IM5NgS4gE9jli9fLofD4fHP999/L0nKzMzUzJkz1adPHyUlJal69epq166dZs2apYKCAouPAGWCySvYjadz21HhUQD2RRIBO6FgAliLXAd2w7gDAABgH8yxIcAFWx1ARbnlllvUsWNHl7ZmzZpJkrZt26abb75Z559/vu644w7FxMTos88+0w033KDvv/9er732mhUhoywxeQW7YUU9YC2SCNgJBRPAWuQ6sBvGHQAAAPtgjg0BzjaF+q5du2rIkCEet9WpU0e//PKLWrVq5WwbN26crrnmGs2bN08PPPCAs6iPKorJK9gNhXrAWiQRsBMKJoC1yHVgN4w7AAAA9sEcGwKcrdKYI0eOKD8/3609Li7OpUhfZNCgQZKkzZs3l3tsKGdMXsFuKNQD1iKJgJ1QMAGsRa4Du2HcAQAAsA/m2BDgbLOifvTo0crIyFC1atXUtWtXPfnkkzrrrLNKfMzevXslHSvklyQnJ0c5OTnOn9PT0yVJiYmJCgoiUywrRf8OJ/v38ORozaNKV7pbe3xcvIKP2qYbwEYOhx5WtrJd2oKCg5SQlGBRREDV4s+YI0kp4SnKU55LW0i1EMUl+fZ8QGVmqhnt1V639qiYKMUkxVgQEVD1+DPuFCQVaL/2u7VXj66u6KRov2MDKpvMmEylKc2tPS4xTiFJIRZEBFQ9/uY7gB3RbwDf+Nt3DoQdUL5cF+CGBoeqdlJtv2OD/woLC7Vv3z6rw6jSHMYYY3UQ5WnVqlWaPn26Lr74YsXFxem3337TU089paNHj2rVqlVq166dx8fl5uaqXbt2ysrK0tatWxUcXHwxd/LkyZoyZYpb+7333qvw8PAyOxb47vtO3+vTvp+6td/67K2qmVrTgoiA8rV48GL9esavLm3V06vrzhl3WhQRYC8vX/OydjXY5dJWb1c9XffKdRZFBJSfQhXqoUkPubV3Wd1FF35+oQURAfaSGpuqZ257xq39ok8v0tlrzq74gIBy9vOZP2vJZUvc2q+be53qJdezICIAAACUl1njZmlfHddCcONtjXX161dbFBGOl52drWnTpiktLU0xMSzW8EXAF+o9+fPPP9W6dWt169ZNn37qXryVpLFjx+qll17SRx99pIsvvrjE5/O0or5BgwasqC9jcXFxGjx4sN59912lpKR49dijY44q/WEPK+o7xit4NyvqEXgOv3hY2QNdV9QHHwhWfJt4iyICqhZ/xhxJSvkwRXkdTlhRvy5EcQP45j0Cj5HR3j0eVtTPiVLMFJI0oDT8GXfyG+TrwJoDbu0x98co6tWosgoRqDSyBmYp9cVUt/bafWsr9KfQig8IqIL8zXcAO6LfAL7xt+8c+PKA8lucsKL+m1DVHs6K+sqgaEU9hXrf2bJC2axZM1166aVasmSJCgoKVK1aNZftTz75pF566SU9/PDDJy3SS1JYWJjCwsLc2rncQ/lISUlRcnKydw/K8Nx8YO8BycunAqqEo+5NhSr0vu8ANufTmCNJBe5Nedl59EEErkK53TfuaNZRHU32MCABKJZP406E5+b0w+lKT3b/sjJQ5R0spvnQQfJ7wEs+5zuAjdFvAN/43Hc83I8+NyuXfoiAYdvl3g0aNFBubq6OHnWdPJw/f77uuecejR8/Xvfff79F0aHMFXeme3iTBwKCp3Pbtu/4gAU89TfGHAQyxh3AOuQ6sJvizm3GHQAAgMDDHBsCnG3TmG3btik8PFzR0dHOtg8++EDXXnutLrvsMs2cOdPC6FDmmLyC3Xg4t43Ddnc6AaxDEgG7oVAPWIdcB3ZDoR4AAMA+mGNDgAv4NObAAfd79f30009aunSp+vTp47yH/DfffKPhw4erW7duWrBgAfeWDzRMXsFuKJgA1iKJgN0w7gDWIdeB3VCoBwAAsA/m2BDgAv4e9ZdffrkiIiJ0zjnnKCEhQb/99pvmzp2ryMhITZs2TZK0Y8cODRgwQA6HQ0OGDNHixYtdnqN169Zq3bq1FeGjrDB5BbuhYAJYiyQCdsO4A1iHXAd2Q6EeAADAPphjQ4AL+EL9wIEDtWDBAk2fPl3p6emKj4/XZZddpkmTJqlZs2aSpL///ltpaWmSpBtvvNHtOSZNmkShvqpj8gp2Q8EEsBZJBOyGcQewDrkO7IZCPQAAgH0wx4YAF/CF+ltuuUW33HJLifv06NFDxnDv5oDG5BXshoIJYC2SCNgN4w5gHXId2A2FegAAAPtgjg0BjjQG9sDkFezGw7ltHHwhCagwJBGwGwr1gHXIdWA3FOoBAADsgzk2BDjSGNgDk1ewGwomgLVIImA3jDuAdch1YDcU6gEAAOyDOTYEONIY2AOTV7AbCiaAtUgiYDeMO4B1yHVgNxTqAQAA7IM5NgQ40hjYA5NXsBsKJoC1SCJgN4w7gHXIdWA3FOoBAADsgzk2BDjSGNgDk1ewG0/ndrUKjwKwL5II2A2FesA65DqwGwr1AAAA9sEcGwIcaQzsgckr2A3nNmAtkgjYDYV6wDrkOrAbCvUAAAD2wRwbAhxpDOyBySvYDZNXgLVIImA3FOoB65DrwG7IdQAAAOyDOTYEOFumMY8++qgcDofOOOMMl/bCwkLNnj1bbdu2VXR0tBITE9W3b1+tWrXKokhRZpi8gt0weQVYiyQCdkOhHrAOuQ7shlwHAADAPphjQ4CzXRqza9cuTZ06VVFRUW7bJkyYoOuvv15nnnmmpk+frjvvvFNbt25V9+7dtXbtWguiRZmx3ZkO22PyCrAWSQTshkI9YB0K9bAbch0AAAD7YI4NAS7Y6gAq2l133aWzzz5bBQUFSklJcbbn5+dr1qxZGjJkiF5//XVn+9ChQ9WkSRMtWLBAnTp1siJklAXezGE3pph2Jq+AiuGprxXXL4FA4On8ZswBKkZxfY1xB4GKXAcAAMA+mGNDgLNVGvPNN9/onXfe0TPPPOO2LS8vT1lZWUpMTHRpT0hIUFBQkCIiIiooSpQLCvWwG1aZANZi3IHdsKIesA4r6mE35DoAAAD2wRwbApxtVtQXFBTo5ptv1rXXXqszzzzTbXtERIQ6d+6s+fPnq0uXLuratatSU1P18MMPq2bNmho7dmyxz52Tk6OcnBznz+np6ZKkxMREBQWRKZaVuLg4l7+9kVY9TZnKdG0slJKSksoiNKDSORJ1RBnKcGtPrJuooKO8LwEn48+YI0l7q+2VOeHrvRFhEaqRVMPf0IBKab9jvwpU4NIWFhGmWkm1LIoIqFr8GXdy4nJ0SIfc2mvWqKnwpHC/YwMqm9xauTqog27tNWrVUEQSiyyA0vA33wHsiH4D+MbfvpMclOzWFhkeqdikWL/iQtkoLCzUvn37rA6jSrNNoX727NnasWOHvvjii2L3eeONN3T55ZfrqquucrY1adJEK1euVJMmTYp93GOPPaYpU6a4tY8ePVrh4UyMlLXBgwd7/Zj/nvFfrdM6l7ZqQdU0bty4sgoLqFS+bve1VmiFW/voMaMVnsP7ElBavow5kvRYxGPKUY5LW/NTm2vguIFlEBVQ+Twf87xb0aRBowa6atxVxTwCgCe+jDt/NPtDC7TArb1f335q1rxZWYQFVCp76uzRXM11a+/Zu6faJLSxICKg6vI13wHsjH4D+MbXvvNQ8EMqPGEJfauWrdRvXL+yCAt+ys7O1rRp06wOo0pzGGMC/m4OBw8e1Gmnnab77rtPd955pySpR48eSklJ0aZNm5z77du3TxMmTFBMTIzOP/987d27V9OmTVNkZKS+/fbbYr/x42lFfYMGDVhRX8bi4uI0ePD/sXff8VFV6R/Hv5OEdJIAARI60hZQARWxIaCg2BAEwYKKFUVBUazogugCooIICKIuWLCg4E8Re8GCqwiigovoqoCQUALpjZT7+4NNlmFmkinJ3GTO5/168dKcuTPz3OSeOfc5z5x7h2vFihXKyMjw6bnZj2Sr4IojVtQXSqkdWFGP0JQ7MVd5d7pZUd+1ucKy+VwCqhPImCNJu7fultXwiBX1r8Qo6Y6kGooQqFv2fr5XZZ2OWFH/WZQaX86KesAbgYw7RWcWKfPFTJf2xqMaK+rLqJoKEagzSrqXKOMj136SeGuiYl+PtSEioP4JNN8BTES/AfwTaN9J/ytdCndui30uVokPsKK+LqhYUZ+dna2EhAS7w6mXjFhRf//996tx48YaP368x21KS0s1cOBA9e/fX/PmzatsHzhwoLp3765HH31UjzzyiNvnRkVFKSrKdQKEyz3UjoyMDKWnu17upEpFbtrK5PvrAPVFtvvmPXv3yM2VUQF44NeYI0kO16bCvEIVphcGHhRQFx10bSouKeZcC/CRX+NOlvvmA/sOSHRBhCIPV03NzslWdrqHRAiAW37nO4DB6DeAf/zuO+GuTQW5BSpIL3B9AKiHQr5Q/9tvv2nx4sV64oknlJaWVtleVFSkkpISbdu2TQkJCfrhhx+0efNmzZ492+n5nTp1UteuXbV27dpgh46a5G4BcbmbNiBUeDq+WUwPBAfjDkzj7vhmzAGCw1NfY9xBqCLXAQAAMBu5DkJIyBfqd+3apfLyck2YMEETJkxwebx9+/a69dZb1adPH0lSWVmZyzYlJSUqLS2t9VhRiyiYwDRMXgH2YtyBaSjUA/ahUA/TkOsAAACYgVwHBgj5Qv3RRx+tN99806X9/vvvV25urubOnasOHTro4MFD1+t89dVXNXjw4Mrtvv/+e23dulU33HBD0GJGLaBgAtMweQXYi3EHpqFQD9iHySuYhlwHAADADOQ6MEDIF+qTk5M1dOhQl/YnnnhCkpweGzRokJ5//nnl5OTorLPOUnp6uubNm6eYmBjddtttQYkXtYSCCUzD5BVgL8YdmIZCPWAfJq9gGnIdAAAAM5DrwAAhX6j3xVtvvaXHHntMr776qt5//31FRkaqb9++euihh9SlSxe7w0MgKJjANExeAfZi3IFpKNQD9mHyCqYh1wEAADADuQ4MYGyhfs2aNS5tMTExeuCBB/TAAw8EPyDULgomMA2TV4C9GHdgGgr1gH2YvIJpyHUAAADMQK4DA5DGwAwUTGAaJq8A+zg8tDPuIJRRqAfsw+QVTEOuAwAAYAZyHRiANAZmoFAP0zB5BdiHJAImolAP2IdxB6Yh1wEAADADuQ4MQBoDM1Coh2mYvALsQxIBE1GoB+zDuAPTkOsAAACYgVwHBiCNgRko1MM0TF4B9iGJgIko1AP2YdyBach1AAAAzECuAwOQxsAMFOphGiavAPuQRMBEFOoB+zDuwDTkOgAAAGYg14EBSGNgBgr1MA2TV4B9SCJgIgr1gH0Yd2Aach0AAAAzkOvAAKQxMAOFepjG0/HtCGoUgJk89TPGHYQyCvWAfRh3YBoK9QAAAGYg14EBjExj/vGPf8jhcOjoo4/2uE1WVpaaNWsmh8OhN954I4jRoVZQqIdpmLwC7MO3fWEiCvWAfRh3YBpyHQAAADOQ68AAxqUxO3fu1PTp0xUXF1fldn//+99VUFAQpKhQ6yjUwzRMXgH2IYmAiSjUA/Zh3IFpyHUAAADMQK4DAxiXxkyaNEknnXSSTjjhBI/bbN68WQsXLtTdd98dxMhQq9xdIoUPc4QyJq8A+5BEwETujm9utwIEB+MOTMNtvgAAAMxArgMDGFWy+eKLL/TGG2/oiSeeqHK7W2+9VcOGDVPfvn2DExhqHyvqYRoK9YB9SCJgIlbUA/Zh3IFpyHUAAADMQK4DA0TYHUCwlJWVafz48bruuut0zDHHeNzu9ddf19dff60tW7Zo27ZtwQsQtYtCPUzD5BVgH5IImIhCPWAfxh2YhlwHAADADOQ6MIAxhfpFixZp+/bt+vjjjz1uU1hYqEmTJmnixIlq166d14X64uJiFRcXV/6ck5MjSWrevLnCwsgUa0pycrLTf32xP3q/DuqgU1tEeISapjatkdiAuqYwsVBZynJpb9KsiSJTI4MfEFDPBDLmlDUr017tdWlvGN9Q8anxAccG1EUHIg+oWMVObeENwtUstZlNEQH1SyDjTl5SnnKV69LerGkzhZeGBxwbUNdYUZZ2a7dLe1xCnBJSE2yICKh/Ahl3AFPRbwD/BNJ3SlNKtU/7XNoTGiYoLjUu4NgQuPLycu3Zs8fuMOo1Iwr1+/fv19///nc98MADatrUc2F25syZKikp0X333efT68+YMUMPPvigS/vVV1+t6Ohon+NF1YYPH+7zc/7Z8p/aoR1ObU2bNNXYsWNrKiygTvm56896Xa+7tF847EK16d3GhoiA+smfMSenYY5ma7ZL+8l9TtYp5afURFhAnfNa29e0RVuc2uIT4jnXAnzkz7iz9uS1+kgfubSPvmy0EvIoWiL0lIaV6mE97NLe87ieGjR2kA0RAfWXP+MOYDr6DeAff/pORuMMzdd8l/a+p/ZV7+jeNREWAlRUVKSZM2faHUa95rAsy7I7iNp200036eOPP9bPP/+syMhDK0n79++vjIwMbd68WZK0bds2devWTQsWLNDVV18tSVqzZo0GDBig119/XSNGjPD4+u5W1Ldu3ZoV9TUsOTlZw4cP14oVK5SRkeHTczP+L0MlJ5Y4tTXY2EDJ5/ENSISmwnMKlfVclkt7k6FNFLmOFfVAdQIZc8palGnvejcr6qc0VPwzrKhHaMp8OlNFFxQ5tYWlhan5Cc1tigioXwIZd/LG5Sn3fjcr6ns0U/g+VtQj9Fjhlnb/5WZF/VNxSniYL6cA3ghk3AFMRb8B/BNI3yntWKp9X7iuqE+8M1Gxy2JrKkQEoGJFfXZ2thISOBf3R8ivqP/tt9+0ePFiPfHEE0pLS6tsLyoqUklJibZt26aEhAT9/e9/V8uWLdW/f//KS97v3n0o8du3b5+2bdumNm3auC28R0VFKSoqyqWdyz3UjoyMDKWnp/v2pFLXppLiEt9fB6gv9ntoPrBf4rAHvObXmNPAfXNuVq5y010LKUBIKHBtKrfKOdcCfOTXuJPnvnlv+l65uUokUP853DfnF+QrPz0/uLEA9Zxf4w5gOPoN4B+/+k6S++bszGxlp2cHHBNQF4R8oX7Xrl0qLy/XhAkTNGHCBJfH27dvr1tvvVU7duzQf/7zHx111FEu24wbN06SlJmZqaSkpNoOGbXB3YUNyoMeBRA8no5vLvIB1D5P/YxxB6HM3fHNmAMEB+MOTOPpupCMOwAAAKGFXAcGCPlC/dFHH60333zTpf3+++9Xbm6u5s6dqw4dOig7O9vlshubN2/WAw88oLvuuksnn3yy4uLighU2ahqFepiGQj1gH5IImIhCPWAfxh2YqFyuxz7jDgAAQGgh14EBQr5Qn5ycrKFDh7q0P/HEE5Lk9rEKFavne/fuXeV2qAco1MM0FOoB+5BEwEQU6gH7MO7ARBTqAQAAQh+5DgxAGgMzUKiHaSjUA/YhiYCJKNQD9mHcgYkYdwAAAEIfuQ4MEPIr6j1Zs2ZNtdv0799fluXp5meoVyjUwzQU6gH7kETARBRMAPsw7sBEjDsAAAChj1wHBnBYVKJrXE5OjhITE6VvJMXbHU3oiIiIUKNGjZSZmanS0lLfntxRUtQRbR9LGlRDwQF1zZk6dIwfaYek3CDHAtRDAY050ZI6uGm/VtI/ayA4oC56VoeO8cOVS9piQyxAPRTQuNNcUrKb9lhJhTUQHFAX5evQMX64TElpNsQC1EMBjTuAoeg3gH8C6jsxko5y036JpNdqIDjUmOzsbCUkJNgdRr1k7Ir6oOgqieOyxpSqVPu0T2pWQy/It64Qyjwd322CGgVQb9X4mCMx7iC0eVrZ2D3YgQD1E+MO4CN3x3ej//4DUK1aGXeAEEe/AfxDrgNUjQuDwVxcSwKhjJMVoO5h3EEoY9wB6h7GHYQyxh0AAABzkesghFCoh7m22h0AUIt+szsAAC4YdxDKfrU7AABOtkk6aHcQQC1i3AEAADAXc2wIIRTqYaZcSUvsDgKoRWmS3rA7CACVvpH0nd1BALXodUm77Q4CQKV5dgcA1DKOcQAAADOtkbTJ7iCAmsM96mvTx5Li7A4idERGRap1q9b6a+dfOlgcwPKQX3WoSP9DDQUG1FWXSVorRZ0dpVYdWwXedwCD1NiYU6JDRfp5kspqKDigLvpL0mlS3O1xSjkrhTEH8FGNjTv7Jb0laXlNRQbUUS9IOiDFXBmjFr1aMO4APqqxcQcwCP0G8E+N9Z2DktaKL2wi5FCor03D7Q4gtDRJbaIrxl6hp59+Wunp6XaHA9R9JZKekBq/1pi+A/iIMQfww+9SwsMJumIffQfwFeMO4Id3pKQNSfQdwA+MO4Dv6DeAf+g7QNW49D0AAAAAAAAAAAAAAEFEoR4AAAAAAAAAAAAAgCCiUA8AAAAAAAAAAAAAQBBRqAcAAAAAAAAAAAAAIIgo1NcCy7LsDiEklZeXq6ioSOXl5XaHAtQr9B3Ad/QbwD/0HcA/9B3AP/QdwD/0HcB39BvAP/QdM1AX9Z/D4rdX43bu3KnWrVvbHQYAAAAAAAAAAAAA1Jq//vpLrVq1sjuMeolCfS0oLy9XWlqaGjZsKIfDYXc4AAAAAAAAAAAAAFBjLMtSbm6uWrRoobAwLuLuDwr1AAAAAAAAAAAAAAAEEV9vAAAAAAAAAAAAAAAgiCjUAwAAAAAAAAAAAAAQRBTqAQAAAAAAAAAAAAAIIgr1AAAAAAAAAAAAAAAEEYV6AAAAAAAAAAAAAACCiEI9AAAAAAAAAAAAAABBRKEeAAAAAAAAAAAAAIAgolAPAAAAAAAAAAAAAEAQUagHAAAAAAAAAAAAACCIKNQDAAAAAAAAAAAAABBEFOoBAAAAAAAAAAAAAAgiCvUAAAAAAAAAAAAAAAQRhfoQsWbNGjkcDr3xxht2hwLUK/QdoPZV9LM1a9bYHQpQb9BvAAAAAAAAgNBGob4OczgcXv2zYwL366+/1mmnnabY2FilpKRowoQJysvLc9pmzJgxVca9a9cul9edN2+eEhMTVVJSIkkqLy/XrFmz1L59e0VHR+vYY4/VK6+84jam8vJyLVy4UD179lRMTIyaNGmiM844Qz/++KNX+/T222/ruOOOU3R0tNq0aaMpU6aotLTUaZulS5d63J/du3d79T6+7NOWLVs0ePBgxcfHq3Hjxrriiiu0b98+r97HZPSd4PWd1157TaNHj1anTp3kcDjUv39/t9v5s0/uPPfcc+ratauio6PVqVMnzZs3z+12u3bt0siRI5WUlKSEhARdeOGF+uOPP7x6D7hX1effPffcU2PvU1xcrLvvvlstWrRQTEyM+vTpo48++shpm23btlV5PF1//fUur1teXq6mTZtq1qxZlW3efMZOnTq1yvdau3ZttfuUlZWlG264QU2bNlVcXJwGDBig77//3mW7du3auX2PG2+80dtfn9fjhi+fEfAf/ca/fpOenq577rlHAwYMUMOGDT2O2f7skzu+jBnejkPwz6ZNmzRixAi1bdtW0dHRatmypQYNGuT37/mpp57S0qVLfXqONzlB//79PR53DRo0cPu6d9xxh7p161b5szf9VjrUDxctWqSePXsqPj5ezZs31znnnKOvv/7a633y5rj11G+jo6O9fh9v90ny7pwY3qHf1Hy/WbhwoS6++GK1adNGDodDY8aMcbudP/vkLlbmB4KrpvtMTfDmXKSq80qHw6Fly5a5vO6mTZvkcDi0bt26yjZv+qskffTRR5Wf040aNdKIESO0bds2r/fJm+O1qnO5V1991ev38nafvM3L4B59p/b7zrp16zRu3Dgdf/zxatCggRwOh9vt/Nknd7w9H/PlHA+HHP43+uqrr1wetyxLrVu3lsPh0Pnnn29DhId4kyd4mqtyOBzq1KmT29cdPny4zj33XEne5/cVAs0TyH1QH0XYHQA8e/HFF51+fuGFF/TRRx+5tHft2lVbtmwJWlw//PCDzjzzTHXt2lWzZ8/Wzp079dhjj+m3337Te++9V7nd2LFjNXDgQKfnWpalG2+8Ue3atVPLli1dXnv16tU666yzKpPayZMna+bMmbr++uvVu3dvvfXWW7rsssvkcDh0ySWXOD33mmuu0bJly3TllVfqlltuUX5+vjZu3Ki9e/dWu0/vvfeehg4dqv79+2vevHnatGmTHn74Ye3du1cLFy502X7atGlq3769U1tSUlK17+PLPu3cuVOnn366EhMTNX36dOXl5emxxx7Tpk2btG7dOkVGRnr1fiai7wSv7yxcuFAbNmxQ7969tX//fo/b+bNPR3r66ad14403avjw4br99tv15ZdfasKECSooKNDdd99duV1eXp4GDBig7Oxs3XfffWrQoIHmzJmjfv366YcfflCTJk2qfS945u7z7+ijj67yOaeffroKCwu9+twaM2aM3njjDd12223q1KmTli5dqnPPPVefffaZTjvtNElS06ZNXfqzJL3//vtatmyZzjrrLJfH1q1bp4yMDJ133nmSvP+Mveiii9SxY0eX17vvvvuUl5en3r17V7k/5eXlOu+88/Tjjz/qzjvvVHJysp566in1799fGzZscElqevbsqTvuuMOprXPnzlW+RwVfxg1fPiMQOPrNId72m61bt+qRRx5Rp06ddMwxx+hf//qX2+382acj+TJmeDsOwT9ff/21BgwYoDZt2uj6669XSkqK/vrrL33zzTeaO3euxo8f7/NrPvXUU0pOTvZYZDuStznB5MmTdd111zk9Nz8/XzfeeKPH42716tW64IILKn/2pt9K0p133qnZs2dr9OjRGjdunLKysvT000+rX79+Wrt2rU488cQq98nX43bhwoWKj4+v/Dk8PLzqX9phvN0nb8+JUT36Te30m0ceeUS5ubk68cQTlZ6e7nE7f/bJ3WswPxA8tdFnAuXtucjpp5/u9rxnzpw5+vHHH3XmmWe6PLZ69Wo1a9as8tzL2/76zjvv6MILL9Rxxx2nmTNnKicnR3PnztVpp52mjRs3qmnTplXuk6/H66WXXlpZ0Klw8skne/X783affM3L4Iy+E5y+8+677+rZZ5/Vscceq6OOOkq//vqr2+382acj+XI+5u34C1fR0dF6+eWXXX5Pn3/+uXbu3KmoqCibIvM+T3jiiSdcisrbt2/X/fff7/Z8p6SkRB999JFmzJghyfv8Xgo8TyD3Qb1lod64+eabLU9/ss8++8ySZL3++uu1Hsc555xjpaamWtnZ2ZVtzzzzjCXJ+uCDD6p87pdffmlJsv7xj3+4PJafn29FR0dbS5YssSzLsnbu3Gk1aNDAuvnmmyu3KS8vt/r27Wu1atXKKi0trWx/7bXXLEnWypUr/dqnbt26WT169LBKSkoq2yZPnmw5HA5ry5YtlW1LliyxJFnfffedX+/jyz7ddNNNVkxMjLV9+/bKto8++siSZD399NN+vb+p6Du113d27NhhlZWVWZZlWd27d7f69evn9XOr2qcjFRQUWE2aNLHOO+88p/bLL7/ciouLsw4cOFDZ9sgjj1iSrHXr1lW2bdmyxQoPD7fuvfder+ODM38+/woLCyuPD298++23liTr0UcfdXqNDh06WCeffHK1zz/zzDOthIQEq7Cw0OWxBx54wGrbtm3lz4F8xu7YscNyOBzW9ddfX21MFX3s8M+YvXv3WklJSdall17qtG3btm1djnFfeLtPvnxGIDD0m//xpd/k5ORY+/fvtyzLsl5//XVLkvXZZ59V+7wKVe3TkbwdM3wZh+Cfc88912ratKmVmZnp8tiePXv8ek1fz028zQncefHFFy1J1rJly1we+/33352OY2/7bUlJiRUTE2ONGDHC6fX++OMPS5I1YcKEKmPy5bidMmWKJcnat29fla/piS+fRYGcE8MZ/abm+41lWda2bdus8vJyy7IsKy4uzrrqqquqfY43+3Qk5geCrzb6TKACyV8LCgqshg0bWoMGDXL7eN++fZ2OX2/7a7du3ayOHTtaxcXFlW0//PCDFRYWZt1+++3V7pO3x+uff/7p0q995e0++ZKXwRV9Jzh9Z/fu3VZBQYFlWVXPZfqzT0fy9nws0HzTVBVzARdddJGVnJzsdOxYlmVdf/311vHHHx/wPJC/As1vH3roIUuStXbtWpfHPvnkE0uS9eeff1qW5Vt+H0ieQO6D+oxCfT3iTbHxtddesx5++GGrZcuWVlRUlHXGGWdYv/32m9O2bdu2dZto9uvXr9qEPDs724qIiLDuvPNOp/bi4mIrPj7euvbaa6t8/k033WQ5HI7KD+rDvf3225bD4bB2795tWZZlLViwwJJk/fzzz07bvfzyy5Yk68svv6xs69Onj3XiiSdalmVZZWVlVl5eXpVxHO7nn3+2JFkLFixwat+1a5clyXrooYcq2w6fcM/JyamymJGWlmZt2bLFOnjwYGWbL/vUrFkz6+KLL3Z53c6dO1tnnnmm1/sH+k6Fmu47R/J1Us/TPu3bt8/asmWLlZ+fX9m2evVqS5K1evVqp22//vprS5L14osvVrb17t3b6t27t8v7nXXWWVaHDh28jg/Oqis4VvSlV155xZo8ebLVokULy+FwWJmZmZWPVVdou/POO63w8HCnk1fLsqzp06dbkqwdO3Z4fG5aWpoVFhZmjRkzxu3jxx13nDVu3LjKnwP5jK2YEFizZk2V21mWZV188cVW8+bNXQqvN9xwgxUbG2sVFRVVtlUkaMXFxVX2xYMHD1pbtmyx0tLSnNq93SdfPiMQGPrN//jSbw7na6G+qn3asmWL04SxZXk/ZvgyDsE/Xbp0sfr37+/Vtv/85z+tAQMGWE2bNrUiIyOtrl27Wk899ZTTNm3btrUkOf2r6jzFl5zAnXPOOceKi4tz+/n95JNPWomJiZUTdN7224KCAkuSUxHPsiwrLy/PCgsLs+6+++4qY/LluK2YrNq7d6+VnZ1dWaR0Z/v27S4FWG/3KdBzYjij39R8vzmSr4V6T/vE/EDd4G2fqSggV3wZ/nCSrClTplT+XPH5+dtvv1lXXXWVlZiYaCUkJFhjxoxxymk9CSR/rSg+L1261OWxzMxMKzw83Fq+fLllWd731/3791uSXD6nLetQzt+iRYtq98nb4/XwQn1eXp5TcfNIWVlZ1pYtW6ysrKzKNl8+g3zJy+CKvhOcvnM4Xwv1nvYpPz/f2rJli1NB0pfzsUDyTZNVzAW8/vrrlsPhsN59993Kx4qLi61GjRpZjz/+uNtCfV5ennX77bdbrVq1siIjI63OnTtbjz76qMv5ecX5zptvvml1797dioyMtLp162a999571cYXaH7btWtXq3379m4fu/32261u3bq5fayq/D7QPIHcB/UZ96gPMTNnztSbb76pSZMm6d5779U333yjyy+/vMZef9OmTSotLdUJJ5zg1B4ZGamePXtq48aNHp9bUlKi5cuX65RTTlG7du1cHn/33Xd1/PHHq3nz5pKkjRs3Ki4uTl27dnXaruIydRXvlZOTo3Xr1ql379667777lJiYqPj4eB111FFavnx5tftU8TpH7lOLFi3UqlUrt/s0YMAAJSQkKDY2VkOGDNFvv/3mss29996rrl27Ot1729t92rVrl/bu3esSU8W2Vf2e4R/6ju99JxBV7dP8+fPVtWtXp3uBeeqnxx9/vMLCwiofLy8v108//eSx7/z+++/Kzc2t4b0xS3Z2tjIyMpz+He6hhx7S6tWrNWnSJE2fPt2ny3Bu3LhRnTt3VkJCglN7xbH7ww8/eHzuq6++qvLycrf9dvfu3dq4cWPl5RQD/YxdtmyZWrdurdNPP726XdLGjRt13HHHKSzM+ZTrxBNPVEFBgcul7D799FPFxsYqPj5e7dq109y5c11ec9euXeratavuvfdepzZv98nbzwjUHPqNb/0mEFXtU9euXXXllVdW/uzLmOHtOAT/tW3bVhs2bNDmzZur3XbhwoVq27at7rvvPj3++ONq3bq1xo0bpwULFlRu88QTT6hVq1b629/+phdffFEvvviiJk+e7PE1/ckJKuzbt08fffSRhg4dqri4OJfH3333XQ0aNEgRERGV7+VNv6241+HSpUu1bNky7dixQz/99JPGjBmjRo0a6YYbbqjit+TfcXvUUUcpMTFRDRs21OjRo7Vnzx6Xba688kqXMcTbfQrknBiu6Dc1328CUdU+MT9QN/jSZ3w1cuRI5ebmasaMGRo5cqSWLl2qBx98sMrnBJq/Llu2TDExMbroootcHvvggw/kcDgqL0vsbX8tLi6WdKgvHSk2NlZpaWnavXu3x5j8OV4ffPBBxcfHKzo6Wr1799aHH37oss2bb76prl276s0336xs8+UzyNe8DM7oO7XfdwLlaZ/WrVunrl27av78+ZVtvpyPBZJv4tD93U8++WS98sorlW3vvfeesrOz3d520LIsDRkyRHPmzNHgwYM1e/ZsdenSRXfeeaduv/12l+2/+uorjRs3TpdccolmzZqloqIiDR8+vMrbk0qB5bcbN27Uli1bdNlll7l9/N1333W5nYk3As0TyH1Qn3GP+hBTVFSkH374oXKCt1GjRrr11lu1efPmau+F6o2K+7Olpqa6PJaamqovv/zS43M/+OAD7d+/32Px891339XVV1/t9F7NmzeXw+FweR9JSktLkyT9/vvvsixLr776qiIiIjRr1iwlJiZq7ty5uuSSS5SQkKDBgwf7vU8V7yMdOrEaM2ZMZaF+w4YNmj17tk455RR9//33at26tcf38WWfqovpwIEDKi4utvU+NqGGvuN73wlEdft0pPT0dIWHh6tZs2ZO7ZGRkWrSpEnlPlX0DU+/Z+nQ/nfp0iXAPTDXwIEDXdosy6r8/6KiIq1fv95tclqd9PT0av92nixbtkypqak644wzXB579913FR0dXflYIJ+xP//8s3766SfdddddLn3M0z65K0wevk/HHHOMJOnYY4/Vaaedpi5dumj//v1aunSpbrvtNqWlpemRRx6p9n283SdvPyNQc+g3vvWbQFS1T0fyZczwdhyC/yZNmqRzzjlHPXv21Iknnqi+ffvqzDPP1IABA9SgQQOnbT///HOn/nLLLbdUTmTdfPPNkqShQ4fq/vvvV3JyskaPHl3t+/uSExzptddeU2lpqdvzmoKCAq1Zs8bp/qW+9NuXXnpJo0aNctqHo446SmvXrtVRRx1V7T55e9w2atRIt9xyi04++WRFRUXpyy+/1IIFC7Ru3TqtX7/eZRLK3Xt5s0+BnBPDFf2m5vtNIKraJ3eYHwg+X/qMr3r16qXnnnuu8uf9+/frueeeq/I8PpD89cCBA3r//fc1dOhQNWzY0OXx1atX69RTT1ViYqIk7/tr8+bNlZSUpLVr1zpts3//fv373/+WdKgYn5KS4naffDlew8LCdNZZZ2nYsGFq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kUesRYsWWTfccIMVERFhtW7d2tq9e7fTtldddZUlyfrzzz/92qcdO3ZYTZo0sTp06GA9+eST1vTp061GjRpZxxxzjFVUVFTtPuF/6Du113c+//xz66GHHrIeeughq1mzZla7du0qf/7888993ifLsqwpU6ZYkqzPPvvMqX3BggWWJGvEiBHWM888Y1155ZWWJOsf//iH03Y5OTlWhw4drGbNmlmzZs2y5syZY7Vu3dpq0aKFtXfv3mr3Ce4tWbLEkmR99913bh/31JcOf+zIv6k7F198sRUREWHdeeed1tNPP22dcsopVkREhNvjqbS01GrevLl10kknuX2tP/74w5JkrVmzxuUxXz9jV61aZUmyFi1aVO0+HBnjSSedZMXHx1sPPvigtWDBAqt79+5Ww4YNrV9++aVyuyVLllgdOnSw7r77bmvRokXW9OnTraOPPtqSZE2fPt3pNSs+n6666iq/98nbzwgEhn7jX7+xLKtyLLnkkkssSdY111xT2ebrPlWQ5DJe+zJmeDsOwT/du3e32rdvb91+++3W4sWLrfnz51uXXXaZFR4ebrVr187KzMy0LMuyfvnlFysyMtI65phjrPnz51szZ860OnToYPXo0cPl3HvcuHGWw+GwHnroIeuVV16xPvnkkypj8DYnqHDHHXdYkpw+zw93+umnW2PGjHH7mLf9dtCgQZYka9iwYdbChQutv//971ajRo2suLg4j+97OG+P25iYGGvMmDHW448/bi1YsMC69NJLLYfDYfXs2dPKz8932rZfv35uz6293Sdfz4nhGf2mdvrN22+/XTnmREZGWr169ar8+ccff/R5nyyL+YG6wts+Y1mWdc8991iSrGuvvdZauHChdemll1rHH3+8JcmaMmVK5XYV+eu+ffuc3qviPPDIv/mRfM1fN23aZEmy7rnnHrev989//tOKiYmxCgoKXB7ztr+++OKL1tChQ63Zs2dbixcvtkaOHGlJsq677roq96WCt8frmDFjrL59+1pTp061Fi9ebN13331WkyZNrMjISJdz4Irf5+FzNL7sk7d5Gdyj7wSn72zbtq1yvOnTp48lqfLnF154wed9sqz/5ZWH/+4ty7fzMV/yTRxS3VxAhbZt21rnnXde5c9lZWXWgAEDLIfDYd1www3WggULrAsvvNCSZN12221Oz5Vk3XzzzW5f88j5Ind8zW+HDx9uRUVFWVlZWR73ZerUqW4f8za/DzRPIPdBfUWhvh6pqWKjZVnW448/brVs2dKKioqyTj31VGv9+vVWv379vCo2WpZlffnll9Ypp5xiRUdHW02bNrVuvvlmKycnx+22J510ktWsWTOrtLTU5bHy8vLKEyp3ysrKrOnTp1tt27a1IiMjre7du1svvfSS221///13a9iwYVZCQoIVExNjnXHGGda6deu82h/Lsqw333zT6tmzpxUVFWW1atXKuv/++62DBw86bTN58mSrZ8+eVmJiotWgQQOrTZs21k033eRSpLcsz4m4L/u0efNm66yzzrJiY2OtpKQk6/LLL3f7Xqgafaf2+k5FYuXu35FJQHX7dORruitOLV682OrSpYsVGRlpdejQwZozZ45VXl7ust1ff/1ljRgxwkpISLDi4+Ot888/3/rtt9+82ie4F6yCY2FhYeWXYKKioqzevXt7/GJHxZdnnnzySbePz58/30pMTLRKSkrcPu7LZ+wll1xiNWjQwNq/f3+1+3CkAwcOWNdee63VpEkTKzY21urXr5/L73H9+vXWBRdcYLVs2dKKjIy04uPjrdNOO81avny5y+t5KtT7sk++fEbAf/Qb//uNp7HF3Xhe3T4d/pruxmtfxgxvxyH47r333rOuueYa629/+5sVHx9vRUZGWh07drTGjx9v7dmzx2nbt99+2zr22GOt6Ohoq127dtYjjzxi/fOf/3Q59969e7d13nnnWQ0bNvT49z+SNzmBZR36HG3ZsqV13HHHuX2drKwsKyIiwu3nuGV5328LCgqsadOmWd26dbNiYmKsxMRE6/zzz7c2btxY7b5U8Oa4ve6666xu3bpZDRs2tBo0aGB17NjRuvvuu92ep3qarPLls8iXc2J4Rr+pnX5Tkcu7+3dkfljdPh35mswP2MuXPlNQUGBde+21VmJiotWwYUNr5MiR1t69e2u82GhZvp2LVBRBf/rpJ7ePjxgxwjr33HM9vpc3/fXbb7+1Tj/9dKtRo0ZWdHS01aNHD2vRokU+nfN4c7y+/PLL1umnn241bdrUioiIsJKTk61hw4ZZGzZscHk9T4V6b/fJsrzLy+AefSc4faciB3T3z914XN0+Hf6a7ubovD0f8+UcD4f4W6i3LMvKzc21Jk6caLVo0cJq0KCB1alTJ+vRRx91OY4CLdRblvf5bXZ2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rzjuvv76a3333Xe64oordO2112r69Olav3699u/fr+bNm2vEiBG69NJLD/0uH1+s1c+vPvR8R29J0qLPFkm/STfecKM+/fRTNWzYUNL/jsm33npLLVq0qIx76tSpWrBggXbs2KGVK1cqOTlZTz31lD788EPl5uaqQ4cOGj9+vI4//vhqj7H09HTNmjVLP/74o0pKSpSamqpbb71Vp556qiTpP//5j5588kn98MMPiomJUZ8+fXT77bcrKSlJU6dO1ffff6/vv/9er776qiTprbfeUnp6um688UbNmTOnMs7OnTtr8uTJ6tixY+V7f/rpp1q0aJF27typ5ORkjRw5UqNHj658fMiQIbrkkkt02WWXVf6+J0+erLVr1+pf//qXmjVrpltvvVX9+vVTWlqabrzxRknSGWecIUk677zzKj9HEDx1rlAP1AoKJjBNuVwK9UxeAUHEuAOTUKgH7EehHiahUA8A8MMfMX9oU/ymwF8oMvCXqE5GRoYmT56sCRMmqH///iooKNDGjRt9+oLASy+9pDFjxuiGG27QN998o9mzZ6tt27aVBWdJWrRokW655RbdcccdevfddzV58mQdddRRat++vdNrORwODRkyRKtWrXIq1K9atUq9evWqtkhf8RqTJk1SixYttGvXLj3yyCN68skndc8993h8zs6dO/Xpp59q1qxZXq+Afuedd3T55ZdryZIl2rRpkx588EH16NGjcr/vueceRUVFae7cuYqPj9fKlSs1btw4rVixQomJiSooKNCpp56qm266SZGRkVq9erXuuOMOvfHGG0pJSdGsWbN02WWXadiwYRo6dGiVsezatUtr1qzR7NmzlZubq3vvvVfPP/+8xo0bJ0maM2eOfvrpJz3++ONq3Lixnn76aW3durXySwNV8RTHzp07NWHCBN1444164IEHlJmZqUcffVSzZs3SlClTKrd75ZVXNG7cOF177bV6+eWXNWXKFB177LEaMmSIJkyYoPnz52vq1Kl67bXX5Pjvpa6Lior0z3/+U1OnTlWDBg30yCOPaPLkyXruueckSRs3btSUKVM0adIk9ezZU7t27dL06dMVFhamBx54oPK9n3nmGd188826/fbbFRERIcuy1KxZM82YMUOJiYn66aefNH36dCUnJ2vQoEEafeNo/bnrT+Xn5OvvS/4uSUpsnKiffvup+gPiv3G/8MILmjx5shITE9W4cWPNmjVLf/75p/7xj3+oadOm+uyzzzRhwgS98soratOmTbW/+5KSEi1evFjR0dH6888/K78EkZubq3HjxunCCy/U7bffruLiYs2bN0/33nuvFi5cqEmTJmnHjh3q0KGDxo4dK+nQKvj09HRJ0pNPPqk77rhDTZo00YIFC3THHXdoxYoVioiI0JYtW3Tvvffq+uuv16BBg/TTTz/pkUceUWJioi644AKP8T7zzDOaMGGCJkyYoNdee01///vf9fbbb6t58+Z65JFHdPfdd+uNN95QXFwcV4WwiW2pTPv2UocOUknJ/34+6qiq/3XoYFe0qPcomMA0TF4B9mLcgUko1AP2o1APk7g5trl6GAAglGRkZKisrEwDBgxQixYt1LFjR1188cWVq8+9ceyxx2rMmDFq27atRo0apTPOOMPlfuYDBw7U0KFD1bZtW910003q2rWrXnvtNbevd/7552vHjh36+eefJR26ZPkHH3ygIUOGeBXPZZddphNOOEEtWrRQ7969ddNNN+njjz+u8jklJSV68MEH1aVLF3Xq1Mmr9+nUqZOuv/56tWnTRuedd566du1auRL/hx9+0M8//6yZM2eqW7duatOmjW677TY1bNhQn3zyiSSpc+fOuuiii9SxY0e1adNGN910k1q2bKkvvvhCkpSYmKjw8HDFxsYqOTlZycnJHmMpLy/XlClT1LFjR/Xq1Uvnnntu5ar3/Px8rV69WrfeeqtOPPFEdezYUVOmTFFZWZlX++kpjqVLl2rw4MG67LLL1KZNG/Xo0UOTJk3Su+++q+Li4srnn3LKKbrooovUpk0bXXfddcrPz1e3bt00cOBAtW3bVldeeaX+/PNP7d+/v/I5paWluuuuu3Tssceqa9eumjp1qn766afKY+KZZ57RVVddpfPPP1+tWrVSnz59NHbsWK1YscIp9rPPPltDhgxRq1atlJKSooiICI0dO1bdunVTy5Ytdc455+iCCy6oPD5i42MVFROlyKhIJackKzklWQ0iG0henv6Vlpbq7rvvVo8ePdSuXTtlZWXpnXfe0cyZM9WrVy+1atVKV1xxhXr06KFVq1ZV+3q7d+9Wjx491LFjR7Vq1Up9+/bVcccdJ0lavny5unTpoptvvlnt2rVTly5d9MADD2j9+vXavn274uPj1aBBA0VHR1f+3cLD/7fa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0KOPPqpJkyYpPDxcjz76qI455pjKwv11112niRMnKiUlRWeccYbCwsL022+/6c8//9SDDz7o8XVbt26t1atX61//+pdatGihd999V//+97+dvkzRol0LffPBN9q2dZuSmiQpPjFerVu3VvPmzfXMM8/opptu0o4dO7Rs2bJq96Nt27YaPHiwpk6dqltvvVVdunRRVlaW1q1bp06dOum0006r8vmPP/64TjnlFLVp00a5ubnasGFDZTH94osv1v/93//p/vvv1xVXXKHExET99ddf+vDDD3X//fcrPDxcqamp2rx5s9LS0hQbG+t0S4tnn31WiYmJaty4sRYuXKikpCT1799fkjR69GhdddVVevbZZzVo0CBt2rRJy5cv1913313tPnuSmpoqh8Ohr776SqeeeqqioqIUGxvr9+vBP3WmUF/dl9Dy8yUPX0ABqkfBBKbhvo2AvTz1N8YdhCIK9YD93I07jDkIVe6uHubg6mEAgNARFxen77//Xq+88ory8/OVkpKi2267TaeeeqpKS0v166+/aurUqQoPD9ell16qE044weU1Lr/8cm3ZskXPPPOM4uLidNttt+nkk0922uaGG27Qhx9+qEceeUTJycl6+OGHddRRVa/6HzJkiJYsWaILLrjA6/3p3LmzJk6cqBdeeEELFixQr169dPPNN2vKlClev0ZNcDgceuKJJ7Rw4UJNmzZNmZmZatKkiXr16lV5T/aJEyfqoYce0rXXXqukpCRdeeWVys/Pd3qdsWPHasaMGRo2bJgOHjyo7777zq94Jk6cqBkzZmjixImKi4vTlVdeqT179igyMtKr57uLo1OnTnr66ae1cOFC3XDDDbIsS61atdKgQYP8ivFw0dHRuvLKK3X//fdr37596tmzpx544IHKx08++WTNmTNHzz77rJ5//nlFRESoXbt2uuiii6p83Ysuukhbt27VfffdJ4fDobPOOksjRozQ119/fWgDhzT0+qHasGaDrjrhKhXkFWjRZ4t0fPzx+sc//qGZM2fqsssuU7du3XTTTTfpnnvuqXZfpkyZoueee05z587V3r17lZSUpKOPPlp9+/at9rnl5eWaNWuW9u7dq7i4OJ188smaOHGiJKlp06Z69tlnNW/ePI0fP14HDx5UamqqTj755MqrCowePVoPPvigRo4cqeLiYr311luVr33LLbfo8ccf119//aXOnTtr9uzZatCggaRDV4SYMWOGFi1apOeee07JyckaO3asT33xSM2aNdMNN9yg+fPna9q0aTr33HM1depUv18P/nFYtX1TjCr89JP0ww+H/n/MGGnsWOmIsUKSlJUlLVokhYdLmzb5/j55eXl69NFH9e2332rdunXKzMzUkiVLNGbMGKftxowZo+eff97l+V26dNEvv/zi9fvl5OQoMTHR90BRpdTUVI0dO1ZPP/20y+VmqvU3SVvctN8g6ZkaCA6oa/ZLauzcFPNajAovKbQlHKC+CWjMkaSpktzlmw0l5QUWG1DnnCXpAzftgz20A3AR8LizVdKRVyl9R5L/czZA3bVE0hjnJkeWQ1YjivWAtwIed4B6om3btlq0aFGN3Bs6mCvqAzVkyBBdcskluuyyyzxu07t3bz366KOVq3W9tXHjRo0bN07vvPOOmjRpEmCkOFxhYaHOPfdc3XbbbbrwwgvtDsfJqlWrNHv2bH322Wc+PzfgvtNKUoqb9vW+v1RdtWHDBt1444369NNP1bBhQ7vDcSsjI0M33nijtm/f7vbx7Oxsp6sDwHu2rlF/802p4ooXDof09NOH/rmTlHToPvb+yMjI0LRp09SmTRv16NFDa9as8bhtVFSUnn32Wac2iu4hgBX1MA2XgwTsxbgDk7CiHrAfl76HSch1AAAIuoMHDyozM1OLFy/WmWeeSZG+BmzdulXbtm1T9+7dlZeXV1mX6tevn82RAQgmWwv1N9wgnX/+ocven3iiNG2adM45zts4HFJcnNShg/+Xvk9NTVV6erpSUlK0fv169e7d2+O2ERERGj16tH9vhLqLgglM4+5ykGGsMAGChnEHJqFQD9iPQj1MQqEeAICg++CDD/Twww+rc+fOLvcbf++99zRjxgy3z0tJSdHy5csDfv/du3dr5MiRHh9fvny5UlLcLbuu21566SVt375dDRo00N/+9jc988wzSkpK0saNG3Xrrbd6fN4XX3wRxCht5u42X7U4zT1hwgT9UHEp8CNcffXVuvrqq2vvzWEkWwv1qamH/knSZ59J3bpJTZvW/PtERUX59CFdVlam/Px8LtMQSiiYwDRMXgH2YtyBSSjUA/ajUA+TkOsAAFClt99+u9ptfL2v+gUXXODxXtinn366jj76aLePRfi7+vIIycnJWrZsWZWP1zddunTRiy++6Pax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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
\n", - "
\n", - "
Environment 2023-07-10 19:00:00+00:00
" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Step 1296 of 4032 ( 35%) Sim Time: 2023-07-10 12:00 Reward: -0.39 Cumulative Reward: -60.70 Execution Time: 0 days 00:27:44.544381 Mean Execution Time: 1.16s Replay Buffer Size: 1438\n", - "Step 1297 of 4032 ( 35%) Sim Time: 2023-07-10 12:05 Reward: -0.38 Cumulative Reward: -61.08 Execution Time: 0 days 00:27:45.672679 Mean Execution Time: 1.16s Replay Buffer Size: 1438\n", - "Step 1298 of 4032 ( 35%) Sim Time: 2023-07-10 12:10 Reward: -0.38 Cumulative Reward: -61.45 Execution Time: 0 days 00:27:46.730182 Mean Execution Time: 1.16s Replay Buffer Size: 1439\n", - "Step 1299 of 4032 ( 35%) Sim Time: 2023-07-10 12:15 Reward: -0.38 Cumulative Reward: -61.83 Execution Time: 0 days 00:27:47.844765 Mean Execution Time: 1.16s Replay Buffer Size: 1441\n", - "Step 1300 of 4032 ( 35%) Sim Time: 2023-07-10 12:20 Reward: -0.38 Cumulative Reward: -62.20 Execution Time: 0 days 00:27:48.893277 Mean Execution Time: 1.16s Replay Buffer Size: 1441\n", - "Step 1301 of 4032 ( 35%) Sim Time: 2023-07-10 12:25 Reward: -0.36 Cumulative Reward: -62.57 Execution Time: 0 days 00:27:49.965041 Mean Execution Time: 1.16s Replay Buffer Size: 1442\n", - "Step 1302 of 4032 ( 35%) Sim Time: 2023-07-10 12:30 Reward: -0.36 Cumulative Reward: -62.93 Execution Time: 0 days 00:27:51.028879 Mean Execution Time: 1.16s Replay Buffer Size: 1444\n", - "Step 1303 of 4032 ( 35%) Sim Time: 2023-07-10 12:35 Reward: -0.37 Cumulative Reward: -63.30 Execution Time: 0 days 00:27:52.054325 Mean Execution Time: 1.16s Replay Buffer Size: 1444\n", - "Step 1304 of 4032 ( 35%) Sim Time: 2023-07-10 12:40 Reward: -0.37 Cumulative Reward: -63.67 Execution Time: 0 days 00:27:53.084290 Mean Execution Time: 1.16s Replay Buffer Size: 1445\n", - "Step 1305 of 4032 ( 35%) Sim Time: 2023-07-10 12:45 Reward: -0.37 Cumulative Reward: -64.03 Execution Time: 0 days 00:27:54.099040 Mean Execution Time: 1.16s Replay Buffer Size: 1447\n", - "Step 1306 of 4032 ( 35%) Sim Time: 2023-07-10 12:50 Reward: -0.35 Cumulative Reward: -64.39 Execution Time: 0 days 00:27:55.173611 Mean Execution Time: 1.16s Replay Buffer Size: 1447\n", - "Step 1307 of 4032 ( 35%) Sim Time: 2023-07-10 12:55 Reward: -0.35 Cumulative Reward: -64.74 Execution Time: 0 days 00:27:56.214643 Mean Execution Time: 1.16s Replay Buffer Size: 1448\n", - "Step 1308 of 4032 ( 35%) Sim Time: 2023-07-10 13:00 Reward: -0.36 Cumulative Reward: -65.10 Execution Time: 0 days 00:27:57.299522 Mean Execution Time: 1.16s Replay Buffer Size: 1450\n", - "Step 1309 of 4032 ( 36%) Sim Time: 2023-07-10 13:05 Reward: -0.35 Cumulative Reward: -65.45 Execution Time: 0 days 00:27:58.325862 Mean Execution Time: 1.16s Replay Buffer Size: 1450\n", - "Step 1310 of 4032 ( 36%) Sim Time: 2023-07-10 13:10 Reward: -0.35 Cumulative Reward: -65.79 Execution Time: 0 days 00:27:59.394641 Mean Execution Time: 1.16s Replay Buffer Size: 1451\n", - "Step 1311 of 4032 ( 36%) Sim Time: 2023-07-10 13:15 Reward: -0.34 Cumulative Reward: -66.13 Execution Time: 0 days 00:28:00.442649 Mean Execution Time: 1.16s Replay Buffer Size: 1453\n", - "Step 1312 of 4032 ( 36%) Sim Time: 2023-07-10 13:20 Reward: -0.34 Cumulative Reward: -66.47 Execution Time: 0 days 00:28:01.535049 Mean Execution Time: 1.16s Replay Buffer Size: 1453\n", - "Step 1313 of 4032 ( 36%) Sim Time: 2023-07-10 13:25 Reward: -0.33 Cumulative Reward: -66.80 Execution Time: 0 days 00:28:02.570886 Mean Execution Time: 1.16s Replay Buffer Size: 1453\n", - "Step 1314 of 4032 ( 36%) Sim Time: 2023-07-10 13:30 Reward: -0.34 Cumulative Reward: -67.14 Execution Time: 0 days 00:28:03.576865 Mean Execution Time: 1.16s Replay Buffer Size: 1456\n", - "Step 1315 of 4032 ( 36%) Sim Time: 2023-07-10 13:35 Reward: -0.34 Cumulative Reward: -67.48 Execution Time: 0 days 00:28:04.577944 Mean Execution Time: 1.16s Replay Buffer Size: 1456\n", - "Step 1316 of 4032 ( 36%) Sim Time: 2023-07-10 13:40 Reward: -0.33 Cumulative Reward: -67.81 Execution Time: 0 days 00:28:05.568125 Mean Execution Time: 1.16s Replay Buffer Size: 1457\n", - "Step 1317 of 4032 ( 36%) Sim Time: 2023-07-10 13:45 Reward: -0.33 Cumulative Reward: -68.14 Execution Time: 0 days 00:28:06.535106 Mean Execution Time: 1.16s Replay Buffer Size: 1459\n", - "Step 1318 of 4032 ( 36%) Sim Time: 2023-07-10 13:50 Reward: -0.33 Cumulative Reward: -68.47 Execution Time: 0 days 00:28:07.527335 Mean Execution Time: 1.16s Replay Buffer Size: 1459\n", - "Step 1319 of 4032 ( 36%) Sim Time: 2023-07-10 13:55 Reward: -0.33 Cumulative Reward: -68.80 Execution Time: 0 days 00:28:08.529822 Mean Execution Time: 1.15s Replay Buffer Size: 1460\n", - "Step 1320 of 4032 ( 36%) Sim Time: 2023-07-10 14:00 Reward: -0.33 Cumulative Reward: -69.12 Execution Time: 0 days 00:28:09.527285 Mean Execution Time: 1.15s Replay Buffer Size: 1462\n", - "Step 1321 of 4032 ( 36%) Sim Time: 2023-07-10 14:05 Reward: -0.33 Cumulative Reward: -69.45 Execution Time: 0 days 00:28:10.514692 Mean Execution Time: 1.15s Replay Buffer Size: 1462\n", - "Step 1322 of 4032 ( 36%) Sim Time: 2023-07-10 14:10 Reward: -0.32 Cumulative Reward: -69.77 Execution Time: 0 days 00:28:11.553862 Mean Execution Time: 1.15s Replay Buffer Size: 1462\n", - "Step 1323 of 4032 ( 36%) Sim Time: 2023-07-10 14:15 Reward: -0.33 Cumulative Reward: -70.10 Execution Time: 0 days 00:28:12.561822 Mean Execution Time: 1.15s Replay Buffer Size: 1465\n", - "Step 1324 of 4032 ( 36%) Sim Time: 2023-07-10 14:20 Reward: -0.33 Cumulative Reward: -70.43 Execution Time: 0 days 00:28:13.648014 Mean Execution Time: 1.15s Replay Buffer Size: 1465\n", - "Step 1325 of 4032 ( 36%) Sim Time: 2023-07-10 14:25 Reward: -0.32 Cumulative Reward: -70.75 Execution Time: 0 days 00:28:14.709232 Mean Execution Time: 1.15s Replay Buffer Size: 1465\n", - "Step 1326 of 4032 ( 36%) Sim Time: 2023-07-10 14:30 Reward: -0.31 Cumulative Reward: -71.06 Execution Time: 0 days 00:28:15.800185 Mean Execution Time: 1.15s Replay Buffer Size: 1468\n", - "Step 1327 of 4032 ( 36%) Sim Time: 2023-07-10 14:35 Reward: -0.32 Cumulative Reward: -71.38 Execution Time: 0 days 00:28:16.812447 Mean Execution Time: 1.15s Replay Buffer Size: 1468\n", - "Step 1328 of 4032 ( 36%) Sim Time: 2023-07-10 14:40 Reward: -0.31 Cumulative Reward: -71.69 Execution Time: 0 days 00:28:17.924793 Mean Execution Time: 1.15s Replay Buffer Size: 1468\n", - "Step 1329 of 4032 ( 36%) Sim Time: 2023-07-10 14:45 Reward: -0.31 Cumulative Reward: -72.00 Execution Time: 0 days 00:28:18.951399 Mean Execution Time: 1.15s Replay Buffer Size: 1471\n", - "Step 1330 of 4032 ( 36%) Sim Time: 2023-07-10 14:50 Reward: -0.32 Cumulative Reward: -72.32 Execution Time: 0 days 00:28:19.985151 Mean Execution Time: 1.15s Replay Buffer Size: 1471\n", - "Step 1331 of 4032 ( 36%) Sim Time: 2023-07-10 14:55 Reward: -0.32 Cumulative Reward: -72.64 Execution Time: 0 days 00:28:21.002635 Mean Execution Time: 1.15s Replay Buffer Size: 1472\n", - "Step 1332 of 4032 ( 36%) Sim Time: 2023-07-10 15:00 Reward: -0.31 Cumulative Reward: -72.95 Execution Time: 0 days 00:28:22.014685 Mean Execution Time: 1.15s Replay Buffer Size: 1474\n", - "Step 1333 of 4032 ( 36%) Sim Time: 2023-07-10 15:05 Reward: -0.31 Cumulative Reward: -73.26 Execution Time: 0 days 00:28:23.038025 Mean Execution Time: 1.15s Replay Buffer Size: 1474\n", - "Step 1334 of 4032 ( 36%) Sim Time: 2023-07-10 15:10 Reward: -0.31 Cumulative Reward: -73.57 Execution Time: 0 days 00:28:24.048418 Mean Execution Time: 1.15s Replay Buffer Size: 1475\n", - "Step 1335 of 4032 ( 36%) Sim Time: 2023-07-10 15:15 Reward: -0.31 Cumulative Reward: -73.89 Execution Time: 0 days 00:28:25.125959 Mean Execution Time: 1.15s Replay Buffer Size: 1477\n", - "Step 1336 of 4032 ( 36%) Sim Time: 2023-07-10 15:20 Reward: -0.31 Cumulative Reward: -74.20 Execution Time: 0 days 00:28:26.160068 Mean Execution Time: 1.15s Replay Buffer Size: 1477\n", - "Step 1337 of 4032 ( 36%) Sim Time: 2023-07-10 15:25 Reward: -0.31 Cumulative Reward: -74.51 Execution Time: 0 days 00:28:27.184388 Mean Execution Time: 1.15s Replay Buffer Size: 1477\n", - "Step 1338 of 4032 ( 36%) Sim Time: 2023-07-10 15:30 Reward: -0.31 Cumulative Reward: -74.83 Execution Time: 0 days 00:28:28.271358 Mean Execution Time: 1.15s Replay Buffer Size: 1480\n", - "Step 1339 of 4032 ( 36%) Sim Time: 2023-07-10 15:35 Reward: -0.31 Cumulative Reward: -75.14 Execution Time: 0 days 00:28:29.300125 Mean Execution Time: 1.15s Replay Buffer Size: 1480\n", - "Step 1340 of 4032 ( 36%) Sim Time: 2023-07-10 15:40 Reward: -0.30 Cumulative Reward: -75.44 Execution Time: 0 days 00:28:30.368209 Mean Execution Time: 1.15s Replay Buffer Size: 1481\n", - "Step 1341 of 4032 ( 36%) Sim Time: 2023-07-10 15:45 Reward: -0.30 Cumulative Reward: -75.74 Execution Time: 0 days 00:28:31.410740 Mean Execution Time: 1.15s Replay Buffer Size: 1483\n", - "Step 1342 of 4032 ( 36%) Sim Time: 2023-07-10 15:50 Reward: -0.30 Cumulative Reward: -76.05 Execution Time: 0 days 00:28:32.423447 Mean Execution Time: 1.15s Replay Buffer Size: 1483\n", - "Step 1343 of 4032 ( 36%) Sim Time: 2023-07-10 15:55 Reward: -0.32 Cumulative Reward: -76.36 Execution Time: 0 days 00:28:33.424809 Mean Execution Time: 1.15s Replay Buffer Size: 1484\n", - "Step 1344 of 4032 ( 36%) Sim Time: 2023-07-10 16:00 Reward: -0.31 Cumulative Reward: -76.67 Execution Time: 0 days 00:28:34.466492 Mean Execution Time: 1.15s Replay Buffer Size: 1486\n", - "Step 1345 of 4032 ( 36%) Sim Time: 2023-07-10 16:05 Reward: -0.32 Cumulative Reward: -77.00 Execution Time: 0 days 00:28:35.506967 Mean Execution Time: 1.15s Replay Buffer Size: 1486\n", - "Step 1346 of 4032 ( 36%) Sim Time: 2023-07-10 16:10 Reward: -0.32 Cumulative Reward: -77.32 Execution Time: 0 days 00:28:36.585209 Mean Execution Time: 1.15s Replay Buffer Size: 1487\n", - "Step 1347 of 4032 ( 36%) Sim Time: 2023-07-10 16:15 Reward: -0.32 Cumulative Reward: -77.63 Execution Time: 0 days 00:28:37.594530 Mean Execution Time: 1.15s Replay Buffer Size: 1489\n", - "Step 1348 of 4032 ( 36%) Sim Time: 2023-07-10 16:20 Reward: -0.32 Cumulative Reward: -77.95 Execution Time: 0 days 00:28:38.624821 Mean Execution Time: 1.15s Replay Buffer Size: 1489\n", - "Step 1349 of 4032 ( 37%) Sim Time: 2023-07-10 16:25 Reward: -0.32 Cumulative Reward: -78.27 Execution Time: 0 days 00:28:39.655895 Mean Execution Time: 1.15s Replay Buffer Size: 1490\n", - "Step 1350 of 4032 ( 37%) Sim Time: 2023-07-10 16:30 Reward: -0.31 Cumulative Reward: -78.57 Execution Time: 0 days 00:28:40.661936 Mean Execution Time: 1.15s Replay Buffer Size: 1492\n", - "Step 1351 of 4032 ( 37%) Sim Time: 2023-07-10 16:35 Reward: -0.31 Cumulative Reward: -78.88 Execution Time: 0 days 00:28:41.673675 Mean Execution Time: 1.15s Replay Buffer Size: 1492\n", - "Step 1352 of 4032 ( 37%) Sim Time: 2023-07-10 16:40 Reward: -0.29 Cumulative Reward: -79.17 Execution Time: 0 days 00:28:42.724488 Mean Execution Time: 1.15s Replay Buffer Size: 1495\n", - "Step 1353 of 4032 ( 37%) Sim Time: 2023-07-10 16:45 Reward: -0.29 Cumulative Reward: -79.47 Execution Time: 0 days 00:28:43.797057 Mean Execution Time: 1.15s Replay Buffer Size: 1495\n", - "Step 1354 of 4032 ( 37%) Sim Time: 2023-07-10 16:50 Reward: -0.29 Cumulative Reward: -79.76 Execution Time: 0 days 00:28:44.879945 Mean Execution Time: 1.15s Replay Buffer Size: 1495\n" + "Step 1 of 4032 ( 0%) Sim Time: 2023-07-06 00:05 Reward: -0.02 Cumulative Reward: -0.02 Execution Time: 0 days 00:00:00.000015 Mean Execution Time: 0.00s Replay Buffer Size: 4030\n", + "Step 2 of 4032 ( 0%) Sim Time: 2023-07-06 00:10 Reward: -0.02 Cumulative Reward: -0.04 Execution Time: 0 days 00:00:02.372179 Mean Execution Time: 1.19s Replay Buffer Size: 4030\n", + "Step 3 of 4032 ( 0%) Sim Time: 2023-07-06 00:15 Reward: -0.02 Cumulative Reward: -0.06 Execution Time: 0 days 00:00:04.600293 Mean Execution Time: 1.53s Replay Buffer Size: 4031\n", + "Step 4 of 4032 ( 0%) Sim Time: 2023-07-06 00:20 Reward: -0.02 Cumulative Reward: -0.08 Execution Time: 0 days 00:00:06.763945 Mean Execution Time: 1.69s Replay Buffer Size: 4032\n" ] }, { @@ -2310,17 +2460,16 @@ "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[21], line 8\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;66;03m# @title Populate the replay buffer with data from baseline control\u001b[39;00m\n\u001b[1;32m 2\u001b[0m initial_collect_actor \u001b[38;5;241m=\u001b[39m actor\u001b[38;5;241m.\u001b[39mActor(\n\u001b[1;32m 3\u001b[0m initial_collect_env,\n\u001b[1;32m 4\u001b[0m schedule_policy,\n\u001b[1;32m 5\u001b[0m train_step,\n\u001b[1;32m 6\u001b[0m steps_per_run\u001b[38;5;241m=\u001b[39minitial_collect_env\u001b[38;5;241m.\u001b[39m_num_timesteps_in_episode,\n\u001b[1;32m 7\u001b[0m observers\u001b[38;5;241m=\u001b[39m[rb_observer, initial_collect_print_status_observer, initial_collect_render_plot_observer])\n\u001b[0;32m----> 8\u001b[0m \u001b[43minitial_collect_actor\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrun\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 9\u001b[0m reverb_replay\u001b[38;5;241m.\u001b[39mpy_client\u001b[38;5;241m.\u001b[39mcheckpoint()\n", - "File \u001b[0;32m~/sbsim/sbsim/.venv/lib/python3.10/site-packages/tf_agents/train/actor.py:167\u001b[0m, in \u001b[0;36mActor.run\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 166\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mrun\u001b[39m(\u001b[38;5;28mself\u001b[39m):\n\u001b[0;32m--> 167\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_time_step, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_policy_state \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_driver\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrun\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 168\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_time_step\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_policy_state\u001b[49m\n\u001b[1;32m 169\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 171\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m (\n\u001b[1;32m 172\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_write_summaries\n\u001b[1;32m 173\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_summary_interval \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m0\u001b[39m\n\u001b[1;32m 174\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_train_step \u001b[38;5;241m-\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_last_summary \u001b[38;5;241m>\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_summary_interval\n\u001b[1;32m 175\u001b[0m ):\n\u001b[1;32m 176\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mwrite_metric_summaries()\n", - "File \u001b[0;32m~/sbsim/sbsim/.venv/lib/python3.10/site-packages/tf_agents/drivers/py_driver.py:120\u001b[0m, in \u001b[0;36mPyDriver.run\u001b[0;34m(self, time_step, policy_state)\u001b[0m\n\u001b[1;32m 117\u001b[0m policy_state \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_policy\u001b[38;5;241m.\u001b[39mget_initial_state(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39menv\u001b[38;5;241m.\u001b[39mbatch_size \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;241m1\u001b[39m)\n\u001b[1;32m 119\u001b[0m action_step \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mpolicy\u001b[38;5;241m.\u001b[39maction(time_step, policy_state)\n\u001b[0;32m--> 120\u001b[0m next_time_step \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43menv\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mstep\u001b[49m\u001b[43m(\u001b[49m\u001b[43maction_step\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43maction\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 122\u001b[0m \u001b[38;5;66;03m# When using observer (for the purpose of training), only the previous\u001b[39;00m\n\u001b[1;32m 123\u001b[0m \u001b[38;5;66;03m# policy_state is useful. Therefore substitube it in the PolicyStep and\u001b[39;00m\n\u001b[1;32m 124\u001b[0m \u001b[38;5;66;03m# consume it w/ the observer.\u001b[39;00m\n\u001b[1;32m 125\u001b[0m action_step_with_previous_state \u001b[38;5;241m=\u001b[39m action_step\u001b[38;5;241m.\u001b[39m_replace(state\u001b[38;5;241m=\u001b[39mpolicy_state)\n", - "File \u001b[0;32m~/sbsim/sbsim/.venv/lib/python3.10/site-packages/tf_agents/environments/py_environment.py:236\u001b[0m, in \u001b[0;36mPyEnvironment.step\u001b[0;34m(self, action)\u001b[0m\n\u001b[1;32m 231\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_current_time_step \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mshould_reset(\n\u001b[1;32m 232\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_current_time_step\n\u001b[1;32m 233\u001b[0m ):\n\u001b[1;32m 234\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mreset()\n\u001b[0;32m--> 236\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_current_time_step \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_step\u001b[49m\u001b[43m(\u001b[49m\u001b[43maction\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 237\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_current_time_step\n", - "File \u001b[0;32m~/sbsim/sbsim/smart_control/environment/environment.py:1297\u001b[0m, in \u001b[0;36mEnvironment._step\u001b[0;34m(self, action)\u001b[0m\n\u001b[1;32m 1291\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_metrics_writer\u001b[38;5;241m.\u001b[39mwrite_action_response(\n\u001b[1;32m 1292\u001b[0m action_response, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcurrent_simulation_timestamp\n\u001b[1;32m 1293\u001b[0m )\n\u001b[1;32m 1295\u001b[0m last_timestamp \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcurrent_simulation_timestamp\n\u001b[0;32m-> 1297\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbuilding\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mwait_time\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1299\u001b[0m observation \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_get_observation()\n\u001b[1;32m 1301\u001b[0m \u001b[38;5;66;03m# We need to signal to the Actor that action was rejected and not to\u001b[39;00m\n\u001b[1;32m 1302\u001b[0m \u001b[38;5;66;03m# append this observation/action request to the trajectory.\u001b[39;00m\n\u001b[1;32m 1303\u001b[0m \u001b[38;5;66;03m# Since TimeStep cannot be extended and it is checked for NaNs,\u001b[39;00m\n\u001b[1;32m 1304\u001b[0m \u001b[38;5;66;03m# we apply -inf as a reward to indicate the rejection.\u001b[39;00m\n\u001b[1;32m 1305\u001b[0m \u001b[38;5;66;03m# This requires a specialized Actor extension class to handle the\u001b[39;00m\n\u001b[1;32m 1306\u001b[0m \u001b[38;5;66;03m# rejection.\u001b[39;00m\n", - "File \u001b[0;32m~/sbsim/sbsim/smart_control/simulator/simulator_building.py:268\u001b[0m, in \u001b[0;36mSimulatorBuilding.wait_time\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 266\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"Returns after a certain amount of time.\"\"\"\u001b[39;00m\n\u001b[1;32m 267\u001b[0m \u001b[38;5;66;03m# Update the building state.\u001b[39;00m\n\u001b[0;32m--> 268\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_simulator\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mexecute_step_sim\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/sbsim/sbsim/smart_control/simulator/simulator_flexible_floor_plan.py:156\u001b[0m, in \u001b[0;36mSimulatorFlexibleGeometries.execute_step_sim\u001b[0;34m(self, video_filename)\u001b[0m\n\u001b[1;32m 150\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfinite_differences_timestep(\n\u001b[1;32m 151\u001b[0m ambient_temperature\u001b[38;5;241m=\u001b[39mambient_temperature,\n\u001b[1;32m 152\u001b[0m convection_coefficient\u001b[38;5;241m=\u001b[39mconvection_coefficient,\n\u001b[1;32m 153\u001b[0m )\n\u001b[1;32m 155\u001b[0m \u001b[38;5;66;03m# Simulate airflow\u001b[39;00m\n\u001b[0;32m--> 156\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_building\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mapply_convection\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 158\u001b[0m \u001b[38;5;66;03m# Reset the air handler and boiler flow rate demand before accumulating.\u001b[39;00m\n\u001b[1;32m 159\u001b[0m hvac\u001b[38;5;241m.\u001b[39mair_handler\u001b[38;5;241m.\u001b[39mreset_demand()\n", - "File \u001b[0;32m~/sbsim/sbsim/smart_control/simulator/building.py:893\u001b[0m, in \u001b[0;36mFloorPlanBasedBuilding.apply_convection\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 891\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mapply_convection\u001b[39m(\u001b[38;5;28mself\u001b[39m) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 892\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_convection_simulator \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m--> 893\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_convection_simulator\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mapply_convection\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_room_dict\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtemp\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/sbsim/sbsim/smart_control/simulator/stochastic_convection_simulator.py:81\u001b[0m, in \u001b[0;36mStochasticConvectionSimulator.apply_convection\u001b[0;34m(self, room_dict, temp)\u001b[0m\n\u001b[1;32m 79\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_shuffle_no_max_dist(v, temp)\n\u001b[1;32m 80\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m---> 81\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_shuffle_max_dist\u001b[49m\u001b[43m(\u001b[49m\u001b[43mp\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mv\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdistance\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtemp\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/sbsim/sbsim/smart_control/simulator/stochastic_convection_simulator.py:136\u001b[0m, in \u001b[0;36mStochasticConvectionSimulator._shuffle_max_dist\u001b[0;34m(self, p, v, max_dist, temp)\u001b[0m\n\u001b[1;32m 133\u001b[0m candidates\u001b[38;5;241m.\u001b[39mappend(cv_2)\n\u001b[1;32m 134\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_cache[max_dist][val] \u001b[38;5;241m=\u001b[39m candidates\n\u001b[0;32m--> 136\u001b[0m swap_list\u001b[38;5;241m.\u001b[39mappend((val, \u001b[43mrandom\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mchoice\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcandidates\u001b[49m\u001b[43m)\u001b[49m))\n\u001b[1;32m 137\u001b[0m random\u001b[38;5;241m.\u001b[39mshuffle(swap_list)\n\u001b[1;32m 139\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m i, _ \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28menumerate\u001b[39m(swap_list):\n", - "File \u001b[0;32m/usr/lib/python3.10/random.py:375\u001b[0m, in \u001b[0;36mRandom.choice\u001b[0;34m(self, seq)\u001b[0m\n\u001b[1;32m 370\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mrandrange(a, b\u001b[38;5;241m+\u001b[39m\u001b[38;5;241m1\u001b[39m)\n\u001b[1;32m 373\u001b[0m \u001b[38;5;66;03m## -------------------- sequence methods -------------------\u001b[39;00m\n\u001b[0;32m--> 375\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mchoice\u001b[39m(\u001b[38;5;28mself\u001b[39m, seq):\n\u001b[1;32m 376\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Choose a random element from a non-empty sequence.\"\"\"\u001b[39;00m\n\u001b[1;32m 377\u001b[0m \u001b[38;5;66;03m# raises IndexError if seq is empty\u001b[39;00m\n", + "Cell \u001b[0;32mIn[18], line 8\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;66;03m# @title Populate the replay buffer with data from baseline control\u001b[39;00m\n\u001b[1;32m 2\u001b[0m initial_collect_actor \u001b[38;5;241m=\u001b[39m actor\u001b[38;5;241m.\u001b[39mActor(\n\u001b[1;32m 3\u001b[0m initial_collect_env,\n\u001b[1;32m 4\u001b[0m schedule_policy,\n\u001b[1;32m 5\u001b[0m train_step,\n\u001b[1;32m 6\u001b[0m steps_per_run\u001b[38;5;241m=\u001b[39minitial_collect_env\u001b[38;5;241m.\u001b[39m_num_timesteps_in_episode,\n\u001b[1;32m 7\u001b[0m observers\u001b[38;5;241m=\u001b[39m[rb_observer, initial_collect_print_status_observer, initial_collect_render_plot_observer])\n\u001b[0;32m----> 8\u001b[0m \u001b[43minitial_collect_actor\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrun\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 9\u001b[0m reverb_replay\u001b[38;5;241m.\u001b[39mpy_client\u001b[38;5;241m.\u001b[39mcheckpoint()\n", + "File \u001b[0;32m~/projects/sbsim/.venv/lib/python3.10/site-packages/tf_agents/train/actor.py:167\u001b[0m, in \u001b[0;36mActor.run\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 166\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mrun\u001b[39m(\u001b[38;5;28mself\u001b[39m):\n\u001b[0;32m--> 167\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_time_step, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_policy_state \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_driver\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrun\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 168\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_time_step\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_policy_state\u001b[49m\n\u001b[1;32m 169\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 171\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m (\n\u001b[1;32m 172\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_write_summaries\n\u001b[1;32m 173\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_summary_interval \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m0\u001b[39m\n\u001b[1;32m 174\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_train_step \u001b[38;5;241m-\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_last_summary \u001b[38;5;241m>\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_summary_interval\n\u001b[1;32m 175\u001b[0m ):\n\u001b[1;32m 176\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mwrite_metric_summaries()\n", + "File \u001b[0;32m~/projects/sbsim/.venv/lib/python3.10/site-packages/tf_agents/drivers/py_driver.py:120\u001b[0m, in \u001b[0;36mPyDriver.run\u001b[0;34m(self, time_step, policy_state)\u001b[0m\n\u001b[1;32m 117\u001b[0m policy_state \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_policy\u001b[38;5;241m.\u001b[39mget_initial_state(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39menv\u001b[38;5;241m.\u001b[39mbatch_size \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;241m1\u001b[39m)\n\u001b[1;32m 119\u001b[0m action_step \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mpolicy\u001b[38;5;241m.\u001b[39maction(time_step, policy_state)\n\u001b[0;32m--> 120\u001b[0m next_time_step \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43menv\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mstep\u001b[49m\u001b[43m(\u001b[49m\u001b[43maction_step\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43maction\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 122\u001b[0m \u001b[38;5;66;03m# When using observer (for the purpose of training), only the previous\u001b[39;00m\n\u001b[1;32m 123\u001b[0m \u001b[38;5;66;03m# policy_state is useful. Therefore substitube it in the PolicyStep and\u001b[39;00m\n\u001b[1;32m 124\u001b[0m \u001b[38;5;66;03m# consume it w/ the observer.\u001b[39;00m\n\u001b[1;32m 125\u001b[0m action_step_with_previous_state \u001b[38;5;241m=\u001b[39m action_step\u001b[38;5;241m.\u001b[39m_replace(state\u001b[38;5;241m=\u001b[39mpolicy_state)\n", + "File \u001b[0;32m~/projects/sbsim/.venv/lib/python3.10/site-packages/tf_agents/environments/py_environment.py:236\u001b[0m, in \u001b[0;36mPyEnvironment.step\u001b[0;34m(self, action)\u001b[0m\n\u001b[1;32m 231\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_current_time_step \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mshould_reset(\n\u001b[1;32m 232\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_current_time_step\n\u001b[1;32m 233\u001b[0m ):\n\u001b[1;32m 234\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mreset()\n\u001b[0;32m--> 236\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_current_time_step \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_step\u001b[49m\u001b[43m(\u001b[49m\u001b[43maction\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 237\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_current_time_step\n", + "File \u001b[0;32m~/projects/sbsim/smart_control/environment/environment.py:1297\u001b[0m, in \u001b[0;36mEnvironment._step\u001b[0;34m(self, action)\u001b[0m\n\u001b[1;32m 1291\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_metrics_writer\u001b[38;5;241m.\u001b[39mwrite_action_response(\n\u001b[1;32m 1292\u001b[0m action_response, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcurrent_simulation_timestamp\n\u001b[1;32m 1293\u001b[0m )\n\u001b[1;32m 1295\u001b[0m last_timestamp \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcurrent_simulation_timestamp\n\u001b[0;32m-> 1297\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbuilding\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mwait_time\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1299\u001b[0m observation \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_get_observation()\n\u001b[1;32m 1301\u001b[0m \u001b[38;5;66;03m# We need to signal to the Actor that action was rejected and not to\u001b[39;00m\n\u001b[1;32m 1302\u001b[0m \u001b[38;5;66;03m# append this observation/action request to the trajectory.\u001b[39;00m\n\u001b[1;32m 1303\u001b[0m \u001b[38;5;66;03m# Since TimeStep cannot be extended and it is checked for NaNs,\u001b[39;00m\n\u001b[1;32m 1304\u001b[0m \u001b[38;5;66;03m# we apply -inf as a reward to indicate the rejection.\u001b[39;00m\n\u001b[1;32m 1305\u001b[0m \u001b[38;5;66;03m# This requires a specialized Actor extension class to handle the\u001b[39;00m\n\u001b[1;32m 1306\u001b[0m \u001b[38;5;66;03m# rejection.\u001b[39;00m\n", + "File \u001b[0;32m~/projects/sbsim/smart_control/simulator/simulator_building.py:268\u001b[0m, in \u001b[0;36mSimulatorBuilding.wait_time\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 266\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"Returns after a certain amount of time.\"\"\"\u001b[39;00m\n\u001b[1;32m 267\u001b[0m \u001b[38;5;66;03m# Update the building state.\u001b[39;00m\n\u001b[0;32m--> 268\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_simulator\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mexecute_step_sim\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/projects/sbsim/smart_control/simulator/simulator_flexible_floor_plan.py:150\u001b[0m, in \u001b[0;36mSimulatorFlexibleGeometries.execute_step_sim\u001b[0;34m(self, video_filename)\u001b[0m\n\u001b[1;32m 145\u001b[0m convection_coefficient \u001b[38;5;241m=\u001b[39m (\n\u001b[1;32m 146\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_weather_controller\u001b[38;5;241m.\u001b[39mget_air_convection_coefficient(current_ts)\n\u001b[1;32m 147\u001b[0m )\n\u001b[1;32m 149\u001b[0m \u001b[38;5;66;03m# Update each control volume.\u001b[39;00m\n\u001b[0;32m--> 150\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfinite_differences_timestep\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 151\u001b[0m \u001b[43m \u001b[49m\u001b[43mambient_temperature\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mambient_temperature\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 152\u001b[0m \u001b[43m \u001b[49m\u001b[43mconvection_coefficient\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mconvection_coefficient\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 153\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 155\u001b[0m \u001b[38;5;66;03m# Simulate airflow\u001b[39;00m\n\u001b[1;32m 156\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_building\u001b[38;5;241m.\u001b[39mapply_convection()\n", + "File \u001b[0;32m~/projects/sbsim/smart_control/simulator/simulator.py:349\u001b[0m, in \u001b[0;36mSimulator.finite_differences_timestep\u001b[0;34m(self, ambient_temperature, convection_coefficient)\u001b[0m\n\u001b[1;32m 347\u001b[0m converged_successfully \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mFalse\u001b[39;00m\n\u001b[1;32m 348\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m iteration_count \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_iteration_limit):\n\u001b[0;32m--> 349\u001b[0m temp_estimate, max_delta \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mupdate_temperature_estimates\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 350\u001b[0m \u001b[43m \u001b[49m\u001b[43mtemp_estimate\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 351\u001b[0m \u001b[43m \u001b[49m\u001b[43mambient_temperature\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mambient_temperature\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 352\u001b[0m \u001b[43m \u001b[49m\u001b[43mconvection_coefficient\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mconvection_coefficient\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 353\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 354\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m iteration_count \u001b[38;5;241m+\u001b[39m \u001b[38;5;241m1\u001b[39m \u001b[38;5;241m==\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_iteration_warning:\n\u001b[1;32m 355\u001b[0m logging\u001b[38;5;241m.\u001b[39mwarning(\n\u001b[1;32m 356\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mStep \u001b[39m\u001b[38;5;132;01m%d\u001b[39;00m\u001b[38;5;124m, not converged in \u001b[39m\u001b[38;5;132;01m%d\u001b[39;00m\u001b[38;5;124m steps, max_delta = \u001b[39m\u001b[38;5;132;01m%3.3f\u001b[39;00m\u001b[38;5;124m'\u001b[39m,\n\u001b[1;32m 357\u001b[0m iteration_count,\n\u001b[1;32m 358\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_iteration_warning,\n\u001b[1;32m 359\u001b[0m max_delta,\n\u001b[1;32m 360\u001b[0m )\n", + "File \u001b[0;32m~/projects/sbsim/smart_control/simulator/tf_simulator.py:773\u001b[0m, in \u001b[0;36mTFSimulator.update_temperature_estimates\u001b[0;34m(self, temperature_estimates, ambient_temperature, convection_coefficient)\u001b[0m\n\u001b[1;32m 757\u001b[0m \u001b[38;5;66;03m# Get the inputs to the equation as Tensors from the building.\u001b[39;00m\n\u001b[1;32m 758\u001b[0m (\n\u001b[1;32m 759\u001b[0m t_temp,\n\u001b[1;32m 760\u001b[0m t_temp_old,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 765\u001b[0m t_z,\n\u001b[1;32m 766\u001b[0m ) \u001b[38;5;241m=\u001b[39m _get_input_tensors(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_building)\n\u001b[1;32m 768\u001b[0m (\n\u001b[1;32m 769\u001b[0m t_convection_left_edge,\n\u001b[1;32m 770\u001b[0m t_convection_right_edge,\n\u001b[1;32m 771\u001b[0m t_convection_top_edge,\n\u001b[1;32m 772\u001b[0m t_convection_bottom_edge,\n\u001b[0;32m--> 773\u001b[0m ) \u001b[38;5;241m=\u001b[39m \u001b[43mget_oriented_convection_coefficient_tensors\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 774\u001b[0m \u001b[43m \u001b[49m\u001b[43mconvection_coefficient\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 775\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_building\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtemp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mshape\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 776\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_boundary_cv_mapping\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 777\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 779\u001b[0m \u001b[38;5;66;03m# Create shifted tensor to be able to evaluate neighbors in the equation.\u001b[39;00m\n\u001b[1;32m 780\u001b[0m t_temp_left, t_temp_right, t_temp_above, t_temp_below \u001b[38;5;241m=\u001b[39m _get_neighbor_temps(\n\u001b[1;32m 781\u001b[0m t_temp, ambient_temperature\n\u001b[1;32m 782\u001b[0m )\n", + "File \u001b[0;32m~/projects/sbsim/smart_control/simulator/tf_simulator.py:389\u001b[0m, in \u001b[0;36mget_oriented_convection_coefficient_tensors\u001b[0;34m(convection_coefficient_air, shape, boundary_cv_mapping)\u001b[0m\n\u001b[1;32m 387\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m cv_type\u001b[38;5;241m.\u001b[39mposition \u001b[38;5;241m==\u001b[39m CVPositionType\u001b[38;5;241m.\u001b[39mBOUNDARY:\n\u001b[1;32m 388\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m cv_type\u001b[38;5;241m.\u001b[39mboundary \u001b[38;5;241m==\u001b[39m CVBoundaryType\u001b[38;5;241m.\u001b[39mEDGE:\n\u001b[0;32m--> 389\u001b[0m \u001b[43m_set_edge_convection_coefficient\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcv_type\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 391\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m cv_type\u001b[38;5;241m.\u001b[39mboundary \u001b[38;5;241m==\u001b[39m CVBoundaryType\u001b[38;5;241m.\u001b[39mCORNER:\n\u001b[1;32m 392\u001b[0m _set_corner_convection_coefficient(cv_type)\n", "\u001b[0;31mKeyboardInterrupt\u001b[0m: " ] } @@ -2348,12 +2497,30 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "metadata": { "cellView": "form", "id": "ba7bilizt_qW" }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "<_PrefetchDataset element_spec=(Trajectory(\n", + "{'action': TensorSpec(shape=(256, 2, 2), dtype=tf.float32, name=None),\n", + " 'discount': TensorSpec(shape=(256, 2), dtype=tf.float32, name=None),\n", + " 'next_step_type': TensorSpec(shape=(256, 2), dtype=tf.int32, name=None),\n", + " 'observation': TensorSpec(shape=(256, 2, 53), dtype=tf.float32, name=None),\n", + " 'policy_info': (),\n", + " 'reward': TensorSpec(shape=(256, 2), dtype=tf.float32, name=None),\n", + " 'step_type': TensorSpec(shape=(256, 2), dtype=tf.int32, name=None)}), SampleInfo(key=TensorSpec(shape=(256, 2), dtype=tf.uint64, name=None), probability=TensorSpec(shape=(256, 2), dtype=tf.float64, name=None), table_size=TensorSpec(shape=(256, 2), dtype=tf.int64, name=None), priority=TensorSpec(shape=(256, 2), dtype=tf.float64, name=None), times_sampled=TensorSpec(shape=(256, 2), dtype=tf.int32, name=None)))>" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# @title Make a TF Dataset\n", "# Dataset generates trajectories with shape [Bx2x...]\n", @@ -2376,7 +2543,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 20, "metadata": { "cellView": "form", "id": "TzwSaxYkeTh5" @@ -2406,7 +2573,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 21, "metadata": { "id": "xums9Kxkxylw" }, @@ -2429,12 +2596,44 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 22, "metadata": { "cellView": "form", "id": "Ah4oS9HLwOid" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Policies will be saved to saved_model_dir: /home/gabriel-user/projects/sbsim/policies\n" + ] + }, + { + "ename": "TypeError", + "evalue": "this __dict__ descriptor does not support '_DictWrapper' objects", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[22], line 9\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mPolicies will be saved to saved_model_dir: \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m'\u001b[39m \u001b[38;5;241m%\u001b[39msaved_model_dir)\n\u001b[1;32m 7\u001b[0m env_step_metric \u001b[38;5;241m=\u001b[39m py_metrics\u001b[38;5;241m.\u001b[39mEnvironmentSteps()\n\u001b[1;32m 8\u001b[0m learning_triggers \u001b[38;5;241m=\u001b[39m [\n\u001b[0;32m----> 9\u001b[0m \u001b[43mtriggers\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mPolicySavedModelTrigger\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 10\u001b[0m \u001b[43m \u001b[49m\u001b[43msaved_model_dir\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 11\u001b[0m \u001b[43m \u001b[49m\u001b[43magent\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 12\u001b[0m \u001b[43m \u001b[49m\u001b[43mtrain_step\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 13\u001b[0m \u001b[43m \u001b[49m\u001b[43minterval\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mpolicy_save_interval\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 14\u001b[0m \u001b[43m \u001b[49m\u001b[43mmetadata_metrics\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m{\u001b[49m\u001b[43mtriggers\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mENV_STEP_METADATA_KEY\u001b[49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43menv_step_metric\u001b[49m\u001b[43m}\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 15\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m,\n\u001b[1;32m 16\u001b[0m triggers\u001b[38;5;241m.\u001b[39mStepPerSecondLogTrigger(train_step, interval\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m10\u001b[39m),\n\u001b[1;32m 17\u001b[0m ]\n\u001b[1;32m 19\u001b[0m agent_learner \u001b[38;5;241m=\u001b[39m learner\u001b[38;5;241m.\u001b[39mLearner(\n\u001b[1;32m 20\u001b[0m root_dir,\n\u001b[1;32m 21\u001b[0m train_step,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 26\u001b[0m summary_interval\u001b[38;5;241m=\u001b[39mlearner_summary_interval,\n\u001b[1;32m 27\u001b[0m )\n", + "File \u001b[0;32m~/projects/sbsim/.venv/lib/python3.10/site-packages/tf_agents/train/triggers.py:129\u001b[0m, in \u001b[0;36mPolicySavedModelTrigger.__init__\u001b[0;34m(self, saved_model_dir, agent, train_step, interval, async_saving, metadata_metrics, start, extra_concrete_functions, batch_size, use_nest_path_signatures, save_greedy_policy, save_collect_policy, input_fn_and_spec)\u001b[0m\n\u001b[1;32m 126\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m save_greedy_policy:\n\u001b[1;32m 127\u001b[0m greedy \u001b[38;5;241m=\u001b[39m greedy_policy\u001b[38;5;241m.\u001b[39mGreedyPolicy(agent\u001b[38;5;241m.\u001b[39mpolicy)\n\u001b[0;32m--> 129\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_raw_policy_saver \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_build_saver\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 130\u001b[0m \u001b[43m \u001b[49m\u001b[43mraw_policy\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mbatch_size\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43muse_nest_path_signatures\u001b[49m\n\u001b[1;32m 131\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 132\u001b[0m savers \u001b[38;5;241m=\u001b[39m [(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_raw_policy_saver, learner\u001b[38;5;241m.\u001b[39mRAW_POLICY_SAVED_MODEL_DIR)]\n\u001b[1;32m 134\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m save_collect_policy:\n", + "File \u001b[0;32m~/projects/sbsim/.venv/lib/python3.10/site-packages/tf_agents/train/triggers.py:177\u001b[0m, in \u001b[0;36mPolicySavedModelTrigger._build_saver\u001b[0;34m(self, policy, batch_size, use_nest_path_signatures)\u001b[0m\n\u001b[1;32m 171\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_build_saver\u001b[39m(\n\u001b[1;32m 172\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 173\u001b[0m policy: tf_policy\u001b[38;5;241m.\u001b[39mTFPolicy,\n\u001b[1;32m 174\u001b[0m batch_size: Optional[\u001b[38;5;28mint\u001b[39m] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 175\u001b[0m use_nest_path_signatures: \u001b[38;5;28mbool\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m,\n\u001b[1;32m 176\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Union[policy_saver\u001b[38;5;241m.\u001b[39mPolicySaver, async_policy_saver\u001b[38;5;241m.\u001b[39mAsyncPolicySaver]:\n\u001b[0;32m--> 177\u001b[0m saver \u001b[38;5;241m=\u001b[39m \u001b[43mpolicy_saver\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mPolicySaver\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 178\u001b[0m \u001b[43m \u001b[49m\u001b[43mpolicy\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 179\u001b[0m \u001b[43m \u001b[49m\u001b[43mbatch_size\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mbatch_size\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 180\u001b[0m \u001b[43m \u001b[49m\u001b[43mtrain_step\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_train_step\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 181\u001b[0m \u001b[43m \u001b[49m\u001b[43mmetadata\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_metadata\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 182\u001b[0m \u001b[43m \u001b[49m\u001b[43muse_nest_path_signatures\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43muse_nest_path_signatures\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 183\u001b[0m \u001b[43m \u001b[49m\u001b[43minput_fn_and_spec\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_input_fn_and_spec\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 184\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 185\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_async_saving:\n\u001b[1;32m 186\u001b[0m saver \u001b[38;5;241m=\u001b[39m async_policy_saver\u001b[38;5;241m.\u001b[39mAsyncPolicySaver(saver)\n", + "File \u001b[0;32m~/projects/sbsim/.venv/lib/python3.10/site-packages/tf_agents/policies/policy_saver.py:333\u001b[0m, in \u001b[0;36mPolicySaver.__init__\u001b[0;34m(self, policy, batch_size, use_nest_path_signatures, seed, train_step, input_fn_and_spec, metadata)\u001b[0m\n\u001b[1;32m 326\u001b[0m get_initial_state_fn\u001b[38;5;241m.\u001b[39mget_concrete_function(\u001b[38;5;241m*\u001b[39mget_initial_state_input_specs)\n\u001b[1;32m 328\u001b[0m train_step_fn \u001b[38;5;241m=\u001b[39m common\u001b[38;5;241m.\u001b[39mfunction(\n\u001b[1;32m 329\u001b[0m \u001b[38;5;28;01mlambda\u001b[39;00m: saved_policy\u001b[38;5;241m.\u001b[39mtrain_step\n\u001b[1;32m 330\u001b[0m )\u001b[38;5;241m.\u001b[39mget_concrete_function()\n\u001b[1;32m 331\u001b[0m get_metadata_fn \u001b[38;5;241m=\u001b[39m \u001b[43mcommon\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfunction\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 332\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43;01mlambda\u001b[39;49;00m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43msaved_policy\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmetadata\u001b[49m\n\u001b[0;32m--> 333\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_concrete_function\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 335\u001b[0m batched_time_step_spec \u001b[38;5;241m=\u001b[39m tf\u001b[38;5;241m.\u001b[39mnest\u001b[38;5;241m.\u001b[39mmap_structure(\n\u001b[1;32m 336\u001b[0m \u001b[38;5;28;01mlambda\u001b[39;00m spec: add_batch_dim(spec, [batch_size]), policy\u001b[38;5;241m.\u001b[39mtime_step_spec\n\u001b[1;32m 337\u001b[0m )\n\u001b[1;32m 338\u001b[0m batched_time_step_spec \u001b[38;5;241m=\u001b[39m cast(ts\u001b[38;5;241m.\u001b[39mTimeStep, batched_time_step_spec)\n", + "File \u001b[0;32m~/projects/sbsim/.venv/lib/python3.10/site-packages/tensorflow/python/eager/polymorphic_function/polymorphic_function.py:1227\u001b[0m, in \u001b[0;36mFunction.get_concrete_function\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1225\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mget_concrete_function\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 1226\u001b[0m \u001b[38;5;66;03m# Implements PolymorphicFunction.get_concrete_function.\u001b[39;00m\n\u001b[0;32m-> 1227\u001b[0m concrete \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_get_concrete_function_garbage_collected\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1228\u001b[0m concrete\u001b[38;5;241m.\u001b[39m_garbage_collector\u001b[38;5;241m.\u001b[39mrelease() \u001b[38;5;66;03m# pylint: disable=protected-access\u001b[39;00m\n\u001b[1;32m 1229\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m concrete\n", + "File \u001b[0;32m~/projects/sbsim/.venv/lib/python3.10/site-packages/tensorflow/python/eager/polymorphic_function/polymorphic_function.py:1197\u001b[0m, in \u001b[0;36mFunction._get_concrete_function_garbage_collected\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1195\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_variable_creation_config \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 1196\u001b[0m initializers \u001b[38;5;241m=\u001b[39m []\n\u001b[0;32m-> 1197\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_initialize\u001b[49m\u001b[43m(\u001b[49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkwargs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43madd_initializers_to\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43minitializers\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1198\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_initialize_uninitialized_variables(initializers)\n\u001b[1;32m 1200\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_created_variables:\n\u001b[1;32m 1201\u001b[0m \u001b[38;5;66;03m# In this case we have created variables on the first call, so we run the\u001b[39;00m\n\u001b[1;32m 1202\u001b[0m \u001b[38;5;66;03m# version which is guaranteed to never create variables.\u001b[39;00m\n", + "File \u001b[0;32m~/projects/sbsim/.venv/lib/python3.10/site-packages/tensorflow/python/eager/polymorphic_function/polymorphic_function.py:695\u001b[0m, in \u001b[0;36mFunction._initialize\u001b[0;34m(self, args, kwds, add_initializers_to)\u001b[0m\n\u001b[1;32m 690\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_variable_creation_config \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_generate_scoped_tracing_options(\n\u001b[1;32m 691\u001b[0m variable_capturing_scope,\n\u001b[1;32m 692\u001b[0m tracing_compilation\u001b[38;5;241m.\u001b[39mScopeType\u001b[38;5;241m.\u001b[39mVARIABLE_CREATION,\n\u001b[1;32m 693\u001b[0m )\n\u001b[1;32m 694\u001b[0m \u001b[38;5;66;03m# Force the definition of the function for these arguments\u001b[39;00m\n\u001b[0;32m--> 695\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_concrete_variable_creation_fn \u001b[38;5;241m=\u001b[39m \u001b[43mtracing_compilation\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtrace_function\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 696\u001b[0m \u001b[43m \u001b[49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkwds\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_variable_creation_config\u001b[49m\n\u001b[1;32m 697\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 699\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21minvalid_creator_scope\u001b[39m(\u001b[38;5;241m*\u001b[39munused_args, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39munused_kwds):\n\u001b[1;32m 700\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Disables variable creation.\"\"\"\u001b[39;00m\n", + "File \u001b[0;32m~/projects/sbsim/.venv/lib/python3.10/site-packages/tensorflow/python/eager/polymorphic_function/tracing_compilation.py:178\u001b[0m, in \u001b[0;36mtrace_function\u001b[0;34m(args, kwargs, tracing_options)\u001b[0m\n\u001b[1;32m 175\u001b[0m args \u001b[38;5;241m=\u001b[39m tracing_options\u001b[38;5;241m.\u001b[39minput_signature\n\u001b[1;32m 176\u001b[0m kwargs \u001b[38;5;241m=\u001b[39m {}\n\u001b[0;32m--> 178\u001b[0m concrete_function \u001b[38;5;241m=\u001b[39m \u001b[43m_maybe_define_function\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 179\u001b[0m \u001b[43m \u001b[49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkwargs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtracing_options\u001b[49m\n\u001b[1;32m 180\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 182\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m tracing_options\u001b[38;5;241m.\u001b[39mbind_graph_to_function:\n\u001b[1;32m 183\u001b[0m concrete_function\u001b[38;5;241m.\u001b[39m_garbage_collector\u001b[38;5;241m.\u001b[39mrelease() \u001b[38;5;66;03m# pylint: disable=protected-access\u001b[39;00m\n", + "File \u001b[0;32m~/projects/sbsim/.venv/lib/python3.10/site-packages/tensorflow/python/eager/polymorphic_function/tracing_compilation.py:283\u001b[0m, in \u001b[0;36m_maybe_define_function\u001b[0;34m(args, kwargs, tracing_options)\u001b[0m\n\u001b[1;32m 281\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 282\u001b[0m target_func_type \u001b[38;5;241m=\u001b[39m lookup_func_type\n\u001b[0;32m--> 283\u001b[0m concrete_function \u001b[38;5;241m=\u001b[39m \u001b[43m_create_concrete_function\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 284\u001b[0m \u001b[43m \u001b[49m\u001b[43mtarget_func_type\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mlookup_func_context\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfunc_graph\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtracing_options\u001b[49m\n\u001b[1;32m 285\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 287\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m tracing_options\u001b[38;5;241m.\u001b[39mfunction_cache \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 288\u001b[0m tracing_options\u001b[38;5;241m.\u001b[39mfunction_cache\u001b[38;5;241m.\u001b[39madd(\n\u001b[1;32m 289\u001b[0m concrete_function, current_func_context\n\u001b[1;32m 290\u001b[0m )\n", + "File \u001b[0;32m~/projects/sbsim/.venv/lib/python3.10/site-packages/tensorflow/python/eager/polymorphic_function/tracing_compilation.py:331\u001b[0m, in \u001b[0;36m_create_concrete_function\u001b[0;34m(function_type, type_context, func_graph, tracing_options)\u001b[0m\n\u001b[1;32m 328\u001b[0m tracing_options\u001b[38;5;241m.\u001b[39mfunction_captures\u001b[38;5;241m.\u001b[39mmerge_by_ref_with(graph_capture_container)\n\u001b[1;32m 330\u001b[0m \u001b[38;5;66;03m# Create a new FunctionType including captures and outputs.\u001b[39;00m\n\u001b[0;32m--> 331\u001b[0m output_type \u001b[38;5;241m=\u001b[39m \u001b[43mtrace_type\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfrom_value\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 332\u001b[0m \u001b[43m \u001b[49m\u001b[43mtraced_func_graph\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mstructured_outputs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtype_context\u001b[49m\n\u001b[1;32m 333\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 334\u001b[0m traced_func_type \u001b[38;5;241m=\u001b[39m function_type_lib\u001b[38;5;241m.\u001b[39mFunctionType(\n\u001b[1;32m 335\u001b[0m function_type\u001b[38;5;241m.\u001b[39mparameters\u001b[38;5;241m.\u001b[39mvalues(),\n\u001b[1;32m 336\u001b[0m traced_func_graph\u001b[38;5;241m.\u001b[39mfunction_captures\u001b[38;5;241m.\u001b[39mcapture_types,\n\u001b[1;32m 337\u001b[0m return_annotation\u001b[38;5;241m=\u001b[39moutput_type,\n\u001b[1;32m 338\u001b[0m )\n\u001b[1;32m 340\u001b[0m concrete_function \u001b[38;5;241m=\u001b[39m concrete_function_lib\u001b[38;5;241m.\u001b[39mConcreteFunction\u001b[38;5;241m.\u001b[39mfrom_func_graph(\n\u001b[1;32m 341\u001b[0m traced_func_graph,\n\u001b[1;32m 342\u001b[0m traced_func_type,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 348\u001b[0m shared_func_graph\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m,\n\u001b[1;32m 349\u001b[0m )\n", + "File \u001b[0;32m~/projects/sbsim/.venv/lib/python3.10/site-packages/tensorflow/core/function/trace_type/trace_type_builder.py:144\u001b[0m, in \u001b[0;36mfrom_value\u001b[0;34m(value, context)\u001b[0m\n\u001b[1;32m 142\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m context\u001b[38;5;241m.\u001b[39mis_legacy_signature \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(value, trace\u001b[38;5;241m.\u001b[39mTraceType):\n\u001b[1;32m 143\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m value\n\u001b[0;32m--> 144\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28;43misinstance\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mvalue\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtrace\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mSupportsTracingProtocol\u001b[49m\u001b[43m)\u001b[49m:\n\u001b[1;32m 145\u001b[0m generated_type \u001b[38;5;241m=\u001b[39m value\u001b[38;5;241m.\u001b[39m__tf_tracing_type__(context)\n\u001b[1;32m 146\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(generated_type, trace\u001b[38;5;241m.\u001b[39mTraceType):\n", + "File \u001b[0;32m~/projects/sbsim/.venv/lib/python3.10/site-packages/typing_extensions.py:647\u001b[0m, in \u001b[0;36m_ProtocolMeta.__instancecheck__\u001b[0;34m(cls, instance)\u001b[0m\n\u001b[1;32m 645\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m attr \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mcls\u001b[39m\u001b[38;5;241m.\u001b[39m__protocol_attrs__:\n\u001b[1;32m 646\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 647\u001b[0m val \u001b[38;5;241m=\u001b[39m \u001b[43minspect\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgetattr_static\u001b[49m\u001b[43m(\u001b[49m\u001b[43minstance\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mattr\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 648\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mAttributeError\u001b[39;00m:\n\u001b[1;32m 649\u001b[0m \u001b[38;5;28;01mbreak\u001b[39;00m\n", + "File \u001b[0;32m/usr/lib/python3.10/inspect.py:1743\u001b[0m, in \u001b[0;36mgetattr_static\u001b[0;34m(obj, attr, default)\u001b[0m\n\u001b[1;32m 1740\u001b[0m dict_attr \u001b[38;5;241m=\u001b[39m _shadowed_dict(klass)\n\u001b[1;32m 1741\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m (dict_attr \u001b[38;5;129;01mis\u001b[39;00m _sentinel \u001b[38;5;129;01mor\u001b[39;00m\n\u001b[1;32m 1742\u001b[0m \u001b[38;5;28mtype\u001b[39m(dict_attr) \u001b[38;5;129;01mis\u001b[39;00m types\u001b[38;5;241m.\u001b[39mMemberDescriptorType):\n\u001b[0;32m-> 1743\u001b[0m instance_result \u001b[38;5;241m=\u001b[39m \u001b[43m_check_instance\u001b[49m\u001b[43m(\u001b[49m\u001b[43mobj\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mattr\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1744\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 1745\u001b[0m klass \u001b[38;5;241m=\u001b[39m obj\n", + "File \u001b[0;32m/usr/lib/python3.10/inspect.py:1690\u001b[0m, in \u001b[0;36m_check_instance\u001b[0;34m(obj, attr)\u001b[0m\n\u001b[1;32m 1688\u001b[0m instance_dict \u001b[38;5;241m=\u001b[39m {}\n\u001b[1;32m 1689\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 1690\u001b[0m instance_dict \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mobject\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[38;5;21;43m__getattribute__\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mobj\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43m__dict__\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1691\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mAttributeError\u001b[39;00m:\n\u001b[1;32m 1692\u001b[0m \u001b[38;5;28;01mpass\u001b[39;00m\n", + "\u001b[0;31mTypeError\u001b[0m: this __dict__ descriptor does not support '_DictWrapper' objects" + ] + } + ], "source": [ "# @title Define an Agent Learner\n", "\n", @@ -2555,7 +2754,7 @@ "source": [ "Finally we're ready to execute the RL traiing loop with SAC!\n", "\n", - "You can sepcify the total number of trainng iterations, and the number of gradient steps per iteration. With fewer steps, the model will train more slowly, but more steps may make the agent less stable." + "You can sepcify the total number of training iterations, and the number of gradient steps per iteration. With fewer steps, the model will train more slowly, but more steps may make the agent less stable." ] }, { @@ -2578,7 +2777,7 @@ "logging_info('Training.')\n", "for iter in range(num_training_iterations):\n", " print('Training iteration: ', iter)\n", - " # Let the collect actor run, using its stochastic actio selection policy.\n", + " # Let the collect actor run, using its stochastic action selection policy.\n", " collect_actor.run()\n", " logging_info(\n", " 'Executing %d gradient updates.'\n", @@ -2607,6 +2806,13 @@ "rb_observer.close()\n", "reverb_server.stop()" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { @@ -2631,7 +2837,8 @@ "toc_visible": true }, "kernelspec": { - "display_name": "Python 3", + "display_name": ".venv", + "language": "python", "name": "python3" }, "language_info": { @@ -2644,7 +2851,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.12" + "version": "3.10.16" } }, "nbformat": 4, diff --git a/smart_control/notebooks/test.ipynb b/smart_control/notebooks/test.ipynb new file mode 100644 index 00000000..e69de29b diff --git a/smart_control/refactor/agents/__init__.py b/smart_control/refactor/agents/__init__.py new file mode 100644 index 00000000..ad746024 --- /dev/null +++ b/smart_control/refactor/agents/__init__.py @@ -0,0 +1,8 @@ +from smart_control.refactor.agents.base_agent import BaseAgent, TFAgentWrapper +from smart_control.refactor.agents.sac_agent import create_sac_agent + +__all__ = [ + 'BaseAgent', + 'TFAgentWrapper', + 'create_sac_agent', +] \ No newline at end of file diff --git a/smart_control/refactor/agents/base_agent.py b/smart_control/refactor/agents/base_agent.py new file mode 100644 index 00000000..032c1db7 --- /dev/null +++ b/smart_control/refactor/agents/base_agent.py @@ -0,0 +1,132 @@ +import abc +import logging +from typing import Any, Dict + +import tensorflow as tf +from tf_agents.agents import tf_agent +from tf_agents.policies import tf_policy + + +logger = logging.getLogger(__name__) + + +class BaseAgent(abc.ABC): + """Abstract base class for all RL agents. + + This class defines the core interface that all agents must implement. + """ + + @abc.abstractmethod + def initialize(self) -> None: + """Initialize the agent. + + This method should be called before using the agent. + """ + pass + + @abc.abstractmethod + def train(self, experience) -> Dict[str, Any]: + """Train the agent on a batch of experience. + + Args: + experience: A batch of experience data for training. + + Returns: + A dictionary of loss metrics from training. + """ + pass + + @property + @abc.abstractmethod + def policy(self) -> tf_policy.TFPolicy: + """Returns the agent's main policy.""" + pass + + @property + @abc.abstractmethod + def collect_policy(self) -> tf_policy.TFPolicy: + """Returns the agent's collection policy.""" + pass + + @property + @abc.abstractmethod + def collect_data_spec(self): + """Returns the agent's data collection specification.""" + pass + + @property + @abc.abstractmethod + def train_step_counter(self) -> tf.Variable: + """Returns the agent's training step counter.""" + pass + + +class TFAgentWrapper(BaseAgent): + """Wrapper class for TF-Agents agents to conform to BaseAgent interface.""" + + def __init__(self, tf_agent_instance: tf_agent.TFAgent): + """Initialize with a TF-Agents agent instance. + + Args: + tf_agent_instance: A TF-Agents agent instance. + """ + self._agent = tf_agent_instance + + def initialize(self) -> None: + """Initialize the agent.""" + self._agent.initialize() + + def train(self, experience) -> Dict[str, Any]: + """Train the agent on a batch of experience. + + Args: + experience: A batch of experience data for training. + + Returns: + A dictionary of loss metrics from training. + """ + loss_info = self._agent.train(experience) + + result = {'loss': loss_info.loss.numpy()} + + # Handle different types of extra info that might be returned by different agents + if hasattr(loss_info, 'extra'): + logger.info('Extra loss info found in agent training result') + logger.info('Extra loss info type: %s', loss_info.extra) + extra = loss_info.extra + + # SAC agent's extra is a LossInfo with fields like actor_loss, critic_loss, alpha_loss + extra_dict = {} + for attr_name in dir(extra): + # Skip private attributes and methods + if not attr_name.startswith('_') and not callable(getattr(extra, attr_name)): + attr_value = getattr(extra, attr_name) + # Convert TensorFlow tensors to numpy arrays + if hasattr(attr_value, 'numpy'): + extra_dict[attr_name] = attr_value.numpy() + else: + extra_dict[attr_name] = attr_value + + result['extra'] = extra_dict + + return result + + @property + def policy(self) -> tf_policy.TFPolicy: + """Returns the agent's main policy.""" + return self._agent.policy + + @property + def collect_policy(self) -> tf_policy.TFPolicy: + """Returns the agent's collection policy.""" + return self._agent.collect_policy + + @property + def collect_data_spec(self): + """Returns the agent's data collection specification.""" + return self._agent.collect_data_spec + + @property + def train_step_counter(self) -> tf.Variable: + """Returns the agent's training step counter.""" + return self._agent.train_step_counter diff --git a/smart_control/refactor/agents/networks/__init__.py b/smart_control/refactor/agents/networks/__init__.py new file mode 100644 index 00000000..e090ebd1 --- /dev/null +++ b/smart_control/refactor/agents/networks/__init__.py @@ -0,0 +1,9 @@ +from smart_control.refactor.agents.networks.sac_networks import ( + create_sequential_actor_network, + create_sequential_critic_network, +) + +__all__ = [ + 'create_sequential_actor_network', + 'create_sequential_critic_network', +] \ No newline at end of file diff --git a/smart_control/refactor/agents/networks/sac_networks.py b/smart_control/refactor/agents/networks/sac_networks.py new file mode 100644 index 00000000..0bc4e15e --- /dev/null +++ b/smart_control/refactor/agents/networks/sac_networks.py @@ -0,0 +1,151 @@ +"""Network architectures for SAC agent. + +This module provides functions to create actor and critic networks for SAC agents. +""" + +import functools +from typing import Callable, Optional, Sequence, Tuple + +import tensorflow as tf +from tf_agents.networks import nest_map +from tf_agents.networks import sequential +from tf_agents.agents.sac import tanh_normal_projection_network +from tf_agents.keras_layers import inner_reshape +from tf_agents.typing import types + + +# Utility to create dense layers with consistent initialization and activation +dense = functools.partial( + tf.keras.layers.Dense, + activation=tf.keras.activations.relu, + kernel_initializer='glorot_uniform', +) + + +def create_fc_network(layer_units: Sequence[int]) -> tf.keras.Model: + """Creates a fully connected network. + + Args: + layer_units: A sequence of layer units. + + Returns: + A sequential model of dense layers. + """ + return sequential.Sequential([dense(num_units) for num_units in layer_units]) + + +def create_identity_layer() -> tf.keras.layers.Layer: + """Creates an identity layer. + + Returns: + A Lambda layer that returns its input. + """ + return tf.keras.layers.Lambda(lambda x: x) + + +def create_sequential_critic_network( + obs_fc_layer_units: Sequence[int], + action_fc_layer_units: Sequence[int], + joint_fc_layer_units: Sequence[int] +) -> sequential.Sequential: + """Create a sequential critic network for SAC. + + Args: + obs_fc_layer_units: Units for observation network layers. + action_fc_layer_units: Units for action network layers. + joint_fc_layer_units: Units for joint network layers. + + Returns: + A sequential critic network. + """ + # Split the inputs into observations and actions. + def split_inputs(inputs): + return {'observation': inputs[0], 'action': inputs[1]} + + # Create an observation network. + obs_network = ( + create_fc_network(obs_fc_layer_units) + if obs_fc_layer_units + else create_identity_layer() + ) + + # Create an action network. + action_network = ( + create_fc_network(action_fc_layer_units) + if action_fc_layer_units + else create_identity_layer() + ) + + # Create a joint network. + joint_network = ( + create_fc_network(joint_fc_layer_units) + if joint_fc_layer_units + else create_identity_layer() + ) + + # Final layer. + value_layer = tf.keras.layers.Dense(1, kernel_initializer='glorot_uniform') + + return sequential.Sequential( + [ + tf.keras.layers.Lambda(split_inputs), + nest_map.NestMap( + {'observation': obs_network, 'action': action_network} + ), + nest_map.NestFlatten(), + tf.keras.layers.Concatenate(), + joint_network, + value_layer, + inner_reshape.InnerReshape(current_shape=[1], new_shape=[]), + ], + name='sequential_critic', + ) + + +class _TanhNormalProjectionNetworkWrapper( + tanh_normal_projection_network.TanhNormalProjectionNetwork +): + """Wrapper to pass predefined `outer_rank` to underlying projection net.""" + + def __init__(self, sample_spec, predefined_outer_rank=1): + super(_TanhNormalProjectionNetworkWrapper, self).__init__(sample_spec) + self.predefined_outer_rank = predefined_outer_rank + + def call(self, inputs, network_state=(), **kwargs): + kwargs['outer_rank'] = self.predefined_outer_rank + if 'step_type' in kwargs: + del kwargs['step_type'] + return super(_TanhNormalProjectionNetworkWrapper, self).call( + inputs, **kwargs + ) + + +def create_sequential_actor_network( + actor_fc_layers: Sequence[int], + action_tensor_spec: types.NestedTensorSpec, +) -> sequential.Sequential: + """Create a sequential actor network for SAC. + + Args: + actor_fc_layers: Units for actor network fully connected layers. + action_tensor_spec: The action tensor spec. + + Returns: + A sequential actor network. + """ + def tile_as_nest(non_nested_output): + return tf.nest.map_structure( + lambda _: non_nested_output, action_tensor_spec + ) + + return sequential.Sequential( + [dense(num_units) for num_units in actor_fc_layers] + + [tf.keras.layers.Lambda(tile_as_nest)] + + [ + nest_map.NestMap( + tf.nest.map_structure( + _TanhNormalProjectionNetworkWrapper, action_tensor_spec + ) + ) + ] + ) \ No newline at end of file diff --git a/smart_control/refactor/agents/sac_agent.py b/smart_control/refactor/agents/sac_agent.py new file mode 100644 index 00000000..5c461cfb --- /dev/null +++ b/smart_control/refactor/agents/sac_agent.py @@ -0,0 +1,135 @@ +from typing import Optional, Sequence + +import tensorflow as tf +from tf_agents.agents.sac import sac_agent +from tf_agents.networks import actor_distribution_network +from tf_agents.networks import network +from tf_agents.specs import tensor_spec +from tf_agents.typing import types + +from smart_control.refactor.agents.base_agent import BaseAgent, TFAgentWrapper +from smart_control.refactor.agents.networks.sac_networks import ( + create_sequential_actor_network, + create_sequential_critic_network +) + + +def create_sac_agent( + time_step_spec: types.TimeStep, + action_spec: types.NestedTensorSpec, + + # Actor network parameters + actor_fc_layers: Sequence[int] = (256, 256), + actor_network: Optional[network.Network] = None, + + # Critic network parameters + critic_obs_fc_layers: Sequence[int] = (256, 128), + critic_action_fc_layers: Sequence[int] = (256, 128), + critic_joint_fc_layers: Sequence[int] = (256, 128), + critic_network: Optional[network.Network] = None, + + # Optimizer parameters + actor_learning_rate: float = 3e-4, + critic_learning_rate: float = 3e-4, + alpha_learning_rate: float = 3e-4, + + # Agent parameters + gamma: float = 0.99, + target_update_tau: float = 0.005, + target_update_period: int = 1, + reward_scale_factor: float = 1.0, + + # Training parameters + gradient_clipping: Optional[float] = None, + debug_summaries: bool = False, + summarize_grads_and_vars: bool = False, + train_step_counter: Optional[tf.Variable] = None, +) -> BaseAgent: + """Creates a SAC Agent. + + Args: + time_step_spec: A `TimeStep` spec of the expected time_steps. + + action_spec: A nest of BoundedTensorSpec representing the actions. + + actor_fc_layers: Iterable of fully connected layer units for the actor network. + + actor_network: Optional custom actor network to use. + + critic_obs_fc_layers: Iterable of fully connected layer units for the critic + observation network. + + critic_action_fc_layers: Iterable of fully connected layer units for the critic + action network. + + critic_joint_fc_layers: Iterable of fully connected layer units for the joint + part of the critic network. + + critic_network: Optional custom critic network to use. + + actor_learning_rate: Actor network learning rate. + + critic_learning_rate: Critic network learning rate. + + alpha_learning_rate: Alpha (entropy regularization) learning rate. + + gamma: Discount factor for future rewards. + + target_update_tau: Factor for soft update of target networks. + + target_update_period: Period for soft update of target networks. + + reward_scale_factor: Multiplicative scale for the reward. + + gradient_clipping: Norm length to clip gradients. + + debug_summaries: Whether to emit debug summaries. + + summarize_grads_and_vars: Whether to summarize gradients and variables. + + train_step_counter: An optional counter to increment every time the train + op is run. Defaults to the global_step. + + Returns: + A BaseAgent instance with the SAC agent. + """ + # Create train step counter if not provided + if train_step_counter is None: + train_step_counter = tf.Variable(0, trainable=False, dtype=tf.int64) + + # Create networks if not provided + if actor_network is None: + actor_network = create_sequential_actor_network( + actor_fc_layers=actor_fc_layers, + action_tensor_spec=action_spec + ) + + if critic_network is None: + critic_network = create_sequential_critic_network( + obs_fc_layer_units=critic_obs_fc_layers, + action_fc_layer_units=critic_action_fc_layers, + joint_fc_layer_units=critic_joint_fc_layers + ) + + # Create agent + tf_agent = sac_agent.SacAgent( + time_step_spec=time_step_spec, + action_spec=action_spec, + actor_network=actor_network, + critic_network=critic_network, + actor_optimizer=tf.keras.optimizers.Adam(learning_rate=actor_learning_rate), + critic_optimizer=tf.keras.optimizers.Adam(learning_rate=critic_learning_rate), + alpha_optimizer=tf.keras.optimizers.Adam(learning_rate=alpha_learning_rate), + target_update_tau=target_update_tau, + target_update_period=target_update_period, + td_errors_loss_fn=tf.math.squared_difference, + gamma=gamma, + reward_scale_factor=reward_scale_factor, + gradient_clipping=gradient_clipping, + debug_summaries=debug_summaries, + summarize_grads_and_vars=summarize_grads_and_vars, + train_step_counter=train_step_counter + ) + + # Wrap TF-Agents agent with our interface + return TFAgentWrapper(tf_agent) diff --git a/smart_control/refactor/observers/__init__.py b/smart_control/refactor/observers/__init__.py new file mode 100644 index 00000000..e54cf8e4 --- /dev/null +++ b/smart_control/refactor/observers/__init__.py @@ -0,0 +1,11 @@ +from smart_control.refactor.observers.base_observer import Observer +from smart_control.refactor.observers.rendering_observer import RenderingObserver +from smart_control.refactor.observers.print_status_observer import PrintStatusObserver +from smart_control.refactor.observers.composite_observer import CompositeObserver + +__all__ = [ + 'Observer', + 'RenderingObserver', + 'PrintStatusObserver', + 'CompositeObserver', +] \ No newline at end of file diff --git a/smart_control/refactor/observers/base_observer.py b/smart_control/refactor/observers/base_observer.py new file mode 100644 index 00000000..f15d7084 --- /dev/null +++ b/smart_control/refactor/observers/base_observer.py @@ -0,0 +1,40 @@ +"""Base observer interface for all RL observers. + +This module defines the Observer abstract class that all RL observers should implement. +""" + +import abc + +from tf_agents.trajectories import trajectory as trajectory_lib + + +class Observer(abc.ABC): + """Abstract base class for all observers. + + Observers are objects that monitor the training process, collect metrics, + and visualize the agent's behavior. They are called with trajectories + during data collection. + """ + + @abc.abstractmethod + def __call__(self, trajectory: trajectory_lib.Trajectory) -> None: + """Process a trajectory. + + Args: + trajectory: A trajectory to process. + """ + pass + + def reset(self) -> None: + """Reset the observer to its initial state. + + This method is called when a new episode starts. + """ + pass + + def close(self) -> None: + """Clean up resources. + + This method is called when the observer is no longer needed. + """ + pass diff --git a/smart_control/refactor/observers/composite_observer.py b/smart_control/refactor/observers/composite_observer.py new file mode 100644 index 00000000..8e6c5d6a --- /dev/null +++ b/smart_control/refactor/observers/composite_observer.py @@ -0,0 +1,57 @@ +from typing import Sequence + +from tf_agents.trajectories import trajectory as trajectory_lib + +from smart_control.refactor.observers.base_observer import Observer + + +class CompositeObserver(Observer): + """Observer that combines multiple observers. + + This observer calls all of its constituent observers whenever it is called. + It provides a convenient way to use multiple observers together. + """ + + def __init__(self, observers: Sequence[Observer]): + """Initialize the observer. + + Args: + observers: A sequence of observers to combine. + """ + self._observers = list(observers) + + def __call__(self, trajectory: trajectory_lib.Trajectory) -> None: + """Process a trajectory with all observers. + + Args: + trajectory: A trajectory to process. + """ + for observer in self._observers: + observer(trajectory) + + def reset(self) -> None: + """Reset all observers.""" + for observer in self._observers: + observer.reset() + + def close(self) -> None: + """Close all observers.""" + for observer in self._observers: + observer.close() + + def add_observer(self, observer: Observer) -> None: + """Add an observer to the composite. + + Args: + observer: The observer to add. + """ + self._observers.append(observer) + + def remove_observer(self, observer: Observer) -> None: + """Remove an observer from the composite. + + Args: + observer: The observer to remove. + """ + if observer in self._observers: + self._observers.remove(observer) diff --git a/smart_control/refactor/observers/print_status_observer.py b/smart_control/refactor/observers/print_status_observer.py new file mode 100644 index 00000000..516405ad --- /dev/null +++ b/smart_control/refactor/observers/print_status_observer.py @@ -0,0 +1,79 @@ +import logging +import pandas as pd + +from tf_agents.trajectories import trajectory as trajectory_lib + +from smart_control.refactor.observers.base_observer import Observer + + +logger = logging.getLogger(__name__) + + +class PrintStatusObserver(Observer): + """Observer that prints status information. + + This observer prints information about the training progress, including + rewards, execution time, and replay buffer size. + """ + + def __init__( + self, + status_interval_steps: int=1, + environment=None, + replay_buffer=None, + time_zone='US/Pacific' + ): + self._counter = 0 + self._status_interval_steps = status_interval_steps + self._environment = environment + self._cumulative_reward = 0.0 + self._replay_buffer = replay_buffer + self._time_zone = time_zone + + self._start_time = None + if self._environment is not None: + self._num_timesteps_in_episode = (self._environment.pyenv.envs[0]._num_timesteps_in_episode) + self._environment.pyenv.envs[0]._end_timestamp + + def __call__(self, trajectory: trajectory_lib.Trajectory) -> None: + reward = trajectory.reward + self._cumulative_reward += reward + self._counter += 1 + if self._start_time is None: + self._start_time = pd.Timestamp.now() + + if self._counter % self._status_interval_steps == 0 and self._environment: + + execution_time = pd.Timestamp.now() - self._start_time + mean_execution_time = execution_time.total_seconds() / self._counter + + sim_time = self._environment.pyenv.envs[0].current_simulation_timestamp.tz_convert(self._time_zone) + percent_complete = int(100.0 * (self._counter / self._num_timesteps_in_episode)) + + rb_string = "" + if self._replay_buffer is not None: + rb_size = self._replay_buffer.num_frames() + rb_string = "Replay Buffer Size: %d" % rb_size + + logger.info( + "[Step %d of %d %d%%] [Sim Time: %s] [Reward: %.2f] [Cum Reward: %.2f]" + % ( + self._environment.pyenv.envs[0]._step_count, + self._num_timesteps_in_episode, + percent_complete, + sim_time.strftime("%Y-%m-%d %H:%M"), + reward, + self._cumulative_reward + ) + ) + + logger.info( + "[Exec Time: %s] [Mean Exec Time: %.2fs] [%s]" + % (execution_time, mean_execution_time, rb_string) + ) + + def reset(self) -> None: + """Reset the observer to its initial state.""" + self._counter = 0 + self._cumulative_reward = 0.0 + self._start_time = None diff --git a/smart_control/refactor/observers/rendering_observer.py b/smart_control/refactor/observers/rendering_observer.py new file mode 100644 index 00000000..36f27548 --- /dev/null +++ b/smart_control/refactor/observers/rendering_observer.py @@ -0,0 +1,536 @@ +"""Observer for rendering and visualizing environments. + +This module provides an observer for rendering RL environments and visualizing +agent behavior through plots. +""" + +import os +import logging +import pytz +import pandas as pd +from typing import Optional, Callable +from IPython.display import clear_output + +import mediapy as media +from tf_agents.trajectories import trajectory as trajectory_lib +from matplotlib.ticker import MaxNLocator +import matplotlib.pyplot as plt +import matplotlib.dates as mdates + +from smart_control.refactor.observers.base_observer import Observer +from smart_control.environment import environment +from smart_control.utils import building_renderer +from smart_control.refactor.utils.data_processing import get_latest_episode_reader, get_action_timeseries, \ + get_reward_timeseries, get_outside_air_temperature_timeseries, \ + get_zone_timeseries, get_energy_timeseries + + +logger = logging.getLogger(__name__) + + +class RenderingObserver(Observer): + """Observer that renders the environment and plots metrics. + + This observer renders the environment at specified intervals and can + also show plots of metrics. + """ + + # Class constant + KELVIN_TO_CELSIUS = 273.15 + + def __init__( + self, + render_interval_steps: int = 10, + environment = None, + render_fn: Optional[Callable] = None, + plot_fn: Optional[Callable] = None, + clear_output_before_render: bool = True, + time_zone: str = 'US/Pacific', + save_path: str = './renders', + ): + """Initialize the observer. + + Args: + metrics_path: Path to metrics directory. + render_interval_steps: Number of steps between renders. + environment: The environment to render. This must support the + current_simulation_timestamp property if plot_fn is specified. + render_fn: Optional function to use for rendering. If not provided, + environment.render() will be used. + plot_fn: Optional function to use for plotting. If not provided, + no plotting will be done. + clear_output_before_render: Whether to clear output before rendering. + time_zone: Time zone for plotting timestamps. + save_path: Directory path to save rendered visualizations. + """ + self._counter = 0 + self._render_interval_steps = render_interval_steps + self._environment = environment + self._render_fn = render_fn + self._plot_fn = plot_fn + self._clear_output_before_render = clear_output_before_render + self._time_zone = time_zone + self._cumulative_reward = 0.0 + self._start_time = None + self._save_path = save_path + + logger.warning(f"Created RenderingObserver with metrics path: {self._environment.pyenv.envs[0]._metrics_path}") + + # Create save directory if it doesn't exist + os.makedirs(self._save_path, exist_ok=True) + + if self._environment is not None: + # Store environment properties if available + if hasattr(self._environment.pyenv.envs[0], '_num_timesteps_in_episode'): + self._num_timesteps_in_episode = (self._environment.pyenv.envs[0]._num_timesteps_in_episode) + + def _format_plot( + self, ax1, xlabel: str, start_time: int, end_time: int, time_zone: str + ): + """Formats a plot with common attributes.""" + ax1.set_facecolor('black') + ax1.xaxis.tick_top() + ax1.tick_params(axis='x', labelsize=12) + ax1.tick_params(axis='y', labelsize=12) + ax1.xaxis.set_major_formatter(mdates.DateFormatter('%a %m/%d %H:%M', tz=pytz.timezone(time_zone))) + ax1.grid(color='gray', linestyle='-', linewidth=1.0) + ax1.set_ylabel(xlabel, color='blue', fontsize=12) + ax1.set_xlim(left=start_time, right=end_time) + ax1.yaxis.set_major_locator(MaxNLocator(integer=True)) + ax1.legend(prop={'size': 10}) + + def _plot_reward_timeline(self, ax1, reward_timeseries, time_zone): + local_times = [ts.tz_convert(time_zone) for ts in reward_timeseries.index] + + ax1.plot( + local_times, + reward_timeseries['cumulative_reward'], + color='royalblue', + marker=None, + alpha=1, + lw=6, + linestyle='-', + label='reward', + ) + self._format_plot( + ax1, + 'Agent Reward', + reward_timeseries.index.min(), + reward_timeseries.index.max(), + time_zone, + ) + + def _plot_energy_timeline(self, ax1, energy_timeseries, time_zone, cumulative=False): + def _to_kwh( + energy_rate: float, + step_interval: pd.Timedelta = pd.Timedelta(5, unit='minute'), + ) -> float: + kw_power = energy_rate / 1000.0 + hwh_power = kw_power * step_interval / pd.Timedelta(1, unit='hour') + return hwh_power.cumsum() + + timeseries = energy_timeseries[energy_timeseries['device_type'] == 'air_handler'] + + if cumulative: + feature_timeseries_ac = _to_kwh(timeseries['air_handler_air_conditioner_energy_rate']) + feature_timeseries_blower = _to_kwh(timeseries['air_handler_blower_electrical_energy_rate']) + else: + feature_timeseries_ac = (timeseries['air_handler_air_conditioner_energy_rate'] / 1000.0) + feature_timeseries_blower = (timeseries['air_handler_blower_electrical_energy_rate'] / 1000.0) + + ax1.plot( + timeseries['start_time'], + feature_timeseries_ac, + color='magenta', + marker=None, + alpha=1, + lw=4, + linestyle='-', + label='AHU Electricity', + ) + + ax1.plot( + timeseries['start_time'], + feature_timeseries_blower, + color='magenta', + marker=None, + alpha=1, + lw=4, + linestyle='--', + label='FAN Electricity', + ) + + timeseries = energy_timeseries[energy_timeseries['device_type'] == 'boiler'] + + if cumulative: + feature_timeseries_gas = _to_kwh(timeseries['boiler_natural_gas_heating_energy_rate']) + feature_timeseries_pump = _to_kwh(timeseries['boiler_pump_electrical_energy_rate']) + else: + feature_timeseries_gas = (timeseries['boiler_natural_gas_heating_energy_rate'] / 1000.0) + feature_timeseries_pump = (timeseries['boiler_pump_electrical_energy_rate'] / 1000.0) + + ax1.plot( + timeseries['start_time'], + feature_timeseries_gas, + color='lime', + marker=None, + alpha=1, + lw=4, + linestyle='-', + label='BLR Gas', + ) + + ax1.plot( + timeseries['start_time'], + feature_timeseries_pump, + color='lime', + marker=None, + alpha=1, + lw=4, + linestyle='--', + label='Pump Electricity', + ) + + if cumulative: + label = 'HVAC Energy Consumption [kWh]' + else: + label = 'HVAC Power Consumption [kW]' + + self._format_plot( + ax1, + label, + timeseries['start_time'].min(), + timeseries['end_time'].max(), + time_zone, + ) + + def _plot_energy_cost_timeline( + self, + ax1, + reward_timeseries: pd.DataFrame, + time_zone: str, + cumulative: bool = False, + ): + local_times = [ts.tz_convert(time_zone) for ts in reward_timeseries.index] + + if cumulative: + feature_timeseries_cost = reward_timeseries['electricity_energy_cost'].cumsum() + else: + feature_timeseries_cost = reward_timeseries['electricity_energy_cost'] + + ax1.plot( + local_times, + feature_timeseries_cost, + color='magenta', + marker=None, + alpha=1, + lw=2, + linestyle='-', + label='Electricity', + ) + + self._format_plot( + ax1, + 'Energy Cost [$]', + reward_timeseries.index.min(), + reward_timeseries.index.max(), + time_zone, + ) + + def _plot_carbon_timeline(self, ax1, reward_timeseries, time_zone, cumulative=False): + """Plots carbon-emission timeline.""" + + if cumulative: + feature_timeseries_carbon = reward_timeseries['carbon_emitted'].cumsum() + else: + feature_timeseries_carbon = reward_timeseries['carbon_emitted'] + + ax1.plot( + reward_timeseries.index, + feature_timeseries_carbon, + color='white', + marker=None, + alpha=1, + lw=4, + linestyle='-', + label='Carbon', + ) + + self._format_plot( + ax1, + 'Carbon emission [kg]', + reward_timeseries.index.min(), + reward_timeseries.index.max(), + time_zone, + ) + + def _plot_occupancy_timeline(self, ax1, reward_timeseries: pd.DataFrame, time_zone: str): + local_times = [ts.tz_convert(time_zone) for ts in reward_timeseries.index] + + ax1.plot( + local_times, + reward_timeseries['occupancy'], + color='cyan', + marker=None, + alpha=1, + lw=2, + linestyle='-', + label='Num Occupants', + ) + + self._format_plot( + ax1, + 'Occupancy', + reward_timeseries.index.min(), + reward_timeseries.index.max(), + time_zone, + ) + + def _plot_temperature_timeline(self, ax1, zone_timeseries, outside_air_temperature_timeseries, time_zone): + zone_temps = pd.pivot_table( + zone_timeseries, + index=zone_timeseries['start_time'], + columns='zone', + values='zone_air_temperature', + ).sort_index() + + zone_temps.quantile(q=0.25, axis=1) + + zone_temp_stats = pd.DataFrame({ + 'min_temp': zone_temps.min(axis=1), + 'q25_temp': zone_temps.quantile(q=0.25, axis=1), + 'median_temp': zone_temps.median(axis=1), + 'q75_temp': zone_temps.quantile(q=0.75, axis=1), + 'max_temp': zone_temps.max(axis=1), + }) + + zone_heating_setpoints = ( + pd.pivot_table( + zone_timeseries, + index=zone_timeseries['start_time'], + columns='zone', + values='heating_setpoint_temperature', + ) + .sort_index() + .min(axis=1) + ) + + zone_cooling_setpoints = ( + pd.pivot_table( + zone_timeseries, + index=zone_timeseries['start_time'], + columns='zone', + values='cooling_setpoint_temperature', + ) + .sort_index() + .max(axis=1) + ) + + ax1.plot( + zone_cooling_setpoints.index, + zone_cooling_setpoints - self.KELVIN_TO_CELSIUS, + color='yellow', + lw=1, + ) + + ax1.plot( + zone_cooling_setpoints.index, + zone_heating_setpoints - self.KELVIN_TO_CELSIUS, + color='yellow', + lw=1, + ) + + ax1.fill_between( + zone_temp_stats.index, + zone_temp_stats['min_temp'] - self.KELVIN_TO_CELSIUS, + zone_temp_stats['max_temp'] - self.KELVIN_TO_CELSIUS, + facecolor='green', + alpha=0.8, + ) + + ax1.fill_between( + zone_temp_stats.index, + zone_temp_stats['q25_temp'] - self.KELVIN_TO_CELSIUS, + zone_temp_stats['q75_temp'] - self.KELVIN_TO_CELSIUS, + facecolor='green', + alpha=0.8, + ) + + ax1.plot( + zone_temp_stats.index, + zone_temp_stats['median_temp'] - self.KELVIN_TO_CELSIUS, + color='white', + lw=3, + alpha=1.0, + ) + + ax1.plot( + outside_air_temperature_timeseries.index, + outside_air_temperature_timeseries - self.KELVIN_TO_CELSIUS, + color='magenta', + lw=3, + alpha=1.0, + ) + + self._format_plot( + ax1, + 'Temperature [C]', + zone_temp_stats.index.min(), + zone_temp_stats.index.max(), + time_zone, + ) + + def _plot_action_timeline(self, ax1, action_timeseries, action_tuple, time_zone): + """Plots action timeline.""" + + single_action_timeseries = action_timeseries[ + (action_timeseries['device_id'] == action_tuple[0]) + & (action_timeseries['setpoint_name'] == action_tuple[1]) + ] + + single_action_timeseries = single_action_timeseries.sort_values(by='timestamp') + + if action_tuple[1] in ['supply_water_setpoint','supply_air_heating_temperature_setpoint']: + single_action_timeseries['setpoint_value'] = (single_action_timeseries['setpoint_value'] - self.KELVIN_TO_CELSIUS) + + ax1.plot( + single_action_timeseries['timestamp'], + single_action_timeseries['setpoint_value'], + color='lime', + marker=None, + alpha=1, + lw=4, + linestyle='-', + label=action_tuple[1], + ) + title = '%s %s' % (action_tuple[0], action_tuple[1]) + self._format_plot( + ax1, + 'Action', + single_action_timeseries['timestamp'].min(), + single_action_timeseries['timestamp'].max(), + time_zone, + ) + + def _plot_timeseries_charts(self, reader, time_zone, step_count): + """Plots timeseries charts and saves to file.""" + + observation_responses = reader.read_observation_responses(pd.Timestamp.min, pd.Timestamp.max) + action_responses = reader.read_action_responses(pd.Timestamp.min, pd.Timestamp.max) + reward_infos = reader.read_reward_infos(pd.Timestamp.min, pd.Timestamp.max) + reward_responses = reader.read_reward_responses(pd.Timestamp.min, pd.Timestamp.max) + + if len(reward_infos) == 0 or len(reward_responses) == 0: + logger.info("No reward data available for plotting") + return + + action_timeseries = get_action_timeseries(action_responses) + + action_tuples = list( + set([(row['device_id'], row['setpoint_name']) for _, row in action_timeseries.iterrows()]) + ) + + reward_timeseries = get_reward_timeseries( + reward_infos, + reward_responses, + time_zone + ).sort_index() + + outside_air_temperature_timeseries = get_outside_air_temperature_timeseries( + observation_responses, + time_zone + ) + + zone_timeseries = get_zone_timeseries(reward_infos, time_zone) + + fig, axes = plt.subplots( + nrows=6 + len(action_tuples), + ncols=1, + gridspec_kw={'height_ratios': [1, 1, 1, 1, 1, 1] + [1] * len(action_tuples)}, + squeeze=True, + ) + fig.set_size_inches(24, 25) + + energy_timeseries = get_energy_timeseries(reward_infos, time_zone) + self._plot_reward_timeline(axes[0], reward_timeseries, time_zone) + self._plot_energy_timeline(axes[1], energy_timeseries,time_zone, cumulative=True) + self._plot_energy_cost_timeline(axes[2], reward_timeseries, time_zone, cumulative=True) + self._plot_carbon_timeline(axes[3], reward_timeseries, time_zone, cumulative=True) + self._plot_occupancy_timeline(axes[4], reward_timeseries, time_zone) + self._plot_temperature_timeline(axes[5], zone_timeseries, outside_air_temperature_timeseries, time_zone) + + for i, action_tuple in enumerate(action_tuples): + self._plot_action_timeline(axes[6 + i], action_timeseries, action_tuple, time_zone) + + # Save figure instead of displaying + fig_path = os.path.join(self._save_path, f'timeseries_step_{step_count}.png') + fig.savefig(fig_path, bbox_inches='tight', dpi=100) + plt.close(fig) + logger.info(f"Saved timeseries plot to {fig_path}") + + def _render_env(self, env: environment.Environment, step_count: int): + """Renders the environment and saves to file.""" + building_layout = env.building._simulator._building._floor_plan + + # Create a renderer + renderer = building_renderer.BuildingRenderer(building_layout, 1) + + # Get the current temps to render + temps = env.building._simulator._building.temp + input_q = env.building._simulator._building.input_q + + # Render + vmin = 285 + vmax = 305 + image = renderer.render( + temps, + cmap='bwr', + vmin=vmin, + vmax=vmax, + colorbar=False, + input_q=input_q, + diff_range=0.5, + diff_size=1, + ).convert('RGB') + + # Save image instead of displaying + timestamp = env.current_simulation_timestamp.strftime("%Y%m%d_%H%M%S") + img_path = os.path.join(self._save_path, f'env_render_{step_count}_{timestamp}.png') + image.save(img_path) + logger.info(f"Saved environment render to {img_path}") + + def __call__(self, trajectory: trajectory_lib.Trajectory) -> None: + """Process a trajectory and render/plot if interval is reached. + + Args: + trajectory: The trajectory to process. + """ + logger.info("Called RenderingObserver observer...") + + reward = trajectory.reward + self._cumulative_reward += reward + self._counter += 1 + if self._start_time is None: + self._start_time = pd.Timestamp.now() + + if self._counter % self._render_interval_steps == 0 and self._environment: + logger.info(f"Rendering environment at step {self._counter}...") + execution_time = pd.Timestamp.now() - self._start_time + mean_execution_time = execution_time.total_seconds() / self._counter + + logger.info(f"Step {self._counter}: Cumulative reward = {float(self._cumulative_reward):.2f}, Mean execution time = {mean_execution_time:.2f}s") + + logger.warning(f"Metrics path: {self._environment.pyenv.envs[0]._metrics_path}") + + if self._environment.pyenv.envs[0]._metrics_path is not None: + logger.warning("Plotting timeseries charts...") + reader = get_latest_episode_reader(self._environment.pyenv.envs[0]._metrics_path) + self._plot_timeseries_charts(reader, self._time_zone, self._counter) + + self._render_env(self._environment.pyenv.envs[0], self._counter) + + def reset(self) -> None: + """Reset the observer to its initial state.""" + self._counter = 0 + self._cumulative_reward = 0.0 + self._start_time = None diff --git a/smart_control/refactor/refactor_test.py b/smart_control/refactor/refactor_test.py new file mode 100644 index 00000000..1a0cbd27 --- /dev/null +++ b/smart_control/refactor/refactor_test.py @@ -0,0 +1,184 @@ +import os +import logging +import tensorflow as tf +from tf_agents.environments import tf_py_environment +from tf_agents.trajectories import time_step as ts +from tf_agents.drivers import dynamic_step_driver +from tf_agents.replay_buffers import tf_uniform_replay_buffer + + +from smart_control.refactor.agents import create_sac_agent +from smart_control.refactor.observers import (RenderingObserver, PrintStatusObserver, CompositeObserver) +from smart_control.refactor.utils.metrics import compute_avg_return +from smart_control.refactor.utils.config import CONFIG_PATH, METRICS_PATH, DATA_PATH, OUTPUT_DATA_PATH, ROOT_DIR +from smart_control.learning.reinforcement_learning.sac.learning_utils import load_environment +from smart_control.refactor.replay_buffer.replay_buffer import ReplayBufferManager + +logging.basicConfig( + level=logging.INFO, + format='[%(levelname)s] [%(filename)s:%(lineno)d] [%(message)s]' +) + +# Set up logging +logger = logging.getLogger(__name__) # Uses the module name + + +# Instantiate the environments +logger.info("Instantiating the collect environment...") + +collect_scenario_config = os.path.join(CONFIG_PATH, "sim_config_4_day.gin") +collect_env = load_environment(collect_scenario_config) +collect_env._metrics_path = None # Collect env does not need metrics path +collect_env._occupancy_normalization_constant = 125.0 +# the collect_env is of type PyEnvironment. Let's wrap it in a TFPyEnvironment +collect_tf_env = tf_py_environment.TFPyEnvironment(collect_env) + + +logger.info("Instantiating the eval environment...") + +eval_scenario_config = os.path.join(CONFIG_PATH, "sim_config_4_day.gin") +eval_env = load_environment(collect_scenario_config) +eval_env._metrics_path = METRICS_PATH +eval_env._occupancy_normalization_constant = 125.0 +# the collect_env is of type PyEnvironment. Let's wrap it in a TFPyEnvironment +eval_tf_env = tf_py_environment.TFPyEnvironment(eval_env) + + +# Now, let's create the agent +logger.info("Creating the SAC agent...") + +train_step = tf.Variable(0, trainable=False, dtype=tf.int64) +agent = create_sac_agent( + time_step_spec=collect_tf_env.time_step_spec(), + action_spec=collect_tf_env.action_spec(), + actor_fc_layers=(64, 64), + critic_obs_fc_layers=(64, 32), + critic_action_fc_layers=(64, 32), + critic_joint_fc_layers=(64, 32), + actor_learning_rate=3e-4, + critic_learning_rate=3e-4, + alpha_learning_rate=3e-4, + target_update_tau=0.005, + target_update_period=1, + gamma=0.99, + reward_scale_factor=1.0, + train_step_counter=train_step +) + +agent.initialize() # Initialize the agent + +# Get specs from the environment +observation_spec = collect_tf_env.observation_spec() +action_spec = collect_tf_env.action_spec() +time_step_spec = ts.time_step_spec(observation_spec) + + +# Create the replay buffer +# Initialize the manager with your agent's data spec +replay_manager = ReplayBufferManager( + data_spec=agent.collect_data_spec, + capacity=50000, + checkpoint_dir=f"{OUTPUT_DATA_PATH}/reverb_checkpoint", + sequence_length=2 +) + +# Create the replay buffer +replay_buffer, replay_buffer_observer = replay_manager.create_replay_buffer() + + +# Setup the observers +logger.info("Setting up the observers...") + +# Vizualization functions +def render_env(environment): + pass + +def plot_metrics(environment, time_zone): + pass + +# Create individual observers +render_observer = RenderingObserver( + render_interval_steps=5, + environment=collect_tf_env, + render_fn=render_env, plot_fn=plot_metrics, time_zone='US/Pacific' +) +print_observer = PrintStatusObserver( + status_interval_steps=1, + environment=collect_tf_env, + replay_buffer=replay_buffer +) + +eval_render_observer = RenderingObserver( + render_interval_steps=5, + environment=eval_tf_env, + render_fn=render_env, plot_fn=plot_metrics, time_zone='US/Pacific' +) +eval_print_observer = PrintStatusObserver( + status_interval_steps=1, + environment=eval_tf_env, + replay_buffer=replay_buffer +) + +# Composite observer aggregates the individual observers neatly +observers = CompositeObserver([render_observer, print_observer, replay_buffer_observer]) +eval_observers = CompositeObserver([eval_render_observer, eval_print_observer]) + + +# Setup collect driver +logger.info("Setting up the collect driver...") + +collect_driver = dynamic_step_driver.DynamicStepDriver( + collect_tf_env, + agent.collect_policy, + observers=[observers], + num_steps=1 +) # Collect one step at a time + + +# Run a short collect loop +logger.info("Running a short collect loop...") + +# Reset the environment +time_step = collect_tf_env.reset() + +# Collect a few steps of experience +logger.info("Collecting experience...") +for _ in range(20): # Collect 20 steps of experience + collect_driver.run(time_step) + time_step = collect_tf_env.current_time_step() + + +# Let's test the training loop +logger.info("Running test training...") +logger.warning("Replay buffer num frames: {}".format(replay_buffer.num_frames())) + +if replay_buffer.num_frames() > 0: + # Sample a batch + dataset = replay_buffer.as_dataset( + num_parallel_calls=3, + sample_batch_size=64, + num_steps=2 + ).prefetch(3) + + iterator = iter(dataset) + + # Run a few training steps + for _ in range(5): # Train for 5 steps + experience, _ = next(iterator) + train_info = agent.train(experience) + logger.info(f"Training step {agent.train_step_counter.numpy()}, Loss: {train_info['loss']}") + + +# Now, run an evaluation with the trained agent policy +logger.info("Running evaluation...") +logger.warning(f"Metrics path: {eval_tf_env.pyenv.envs[0]._metrics_path}") +compute_avg_return( + environment=eval_tf_env, + policy=agent.policy, + num_episodes=1, + num_steps=10, + trajectory_observers=[eval_observers] +) + + +logger.info("Done!") diff --git a/smart_control/refactor/replay_buffer/replay_buffer.py b/smart_control/refactor/replay_buffer/replay_buffer.py new file mode 100644 index 00000000..efc311b4 --- /dev/null +++ b/smart_control/refactor/replay_buffer/replay_buffer.py @@ -0,0 +1,164 @@ +import os +import logging +from typing import Optional, Tuple, List, Dict, Any + +import numpy as np +import tensorflow as tf +import reverb +from tf_agents.replay_buffers import reverb_replay_buffer +from tf_agents.replay_buffers import reverb_utils + +from smart_control.refactor.utils.config import OUTPUT_DATA_PATH + + +class ReplayBufferManager: + """Manager for creating and interacting with Reverb replay buffers. + + This class simplifies the setup, interaction, and checkpointing of Reverb replay + buffers for reinforcement learning agents. It provides methods to create a new + buffer, add data, sample from the buffer, and save/restore buffer state. + """ + + def __init__(self, + data_spec: Any, + capacity: int = 50000, + checkpoint_dir: str = f"{OUTPUT_DATA_PATH}/reverb_checkpoint", + table_name: str = 'uniform_table', + sequence_length: int = 2, + port: Optional[int] = None, + min_size_to_sample: int = 1, + stride_length: int = 1): + """Initialize the ReplayBufferManager. + + Args: + data_spec: The data specification for items stored in the buffer. + capacity: Maximum number of items stored in the buffer. + checkpoint_dir: Directory path for saving checkpoints. + table_name: Name of the reverb table. + sequence_length: Length of sequences sampled from the buffer. + port: Port for the reverb server. If None, a port is automatically chosen. + min_size_to_sample: Minimum number of items in buffer before sampling. + stride_length: Stride length for adding trajectories to buffer. + """ + self.data_spec = data_spec + self.capacity = capacity + self.checkpoint_dir = checkpoint_dir + self.table_name = table_name + self.sequence_length = sequence_length + self.port = port + self.min_size_to_sample = min_size_to_sample + self.stride_length = stride_length + + # Initialize as None, to be created in create_replay_buffer + self.server = None + self.replay_buffer = None + self.observer = None + self._is_initialized = False + + def create_replay_buffer(self) -> Tuple[reverb_replay_buffer.ReverbReplayBuffer, reverb_utils.ReverbAddTrajectoryObserver]: + """Create and initialize the replay buffer. + + Returns: + A tuple of (replay_buffer, observer) for interacting with the buffer. + """ + # Create the table + table = reverb.Table( + name=self.table_name, + max_size=self.capacity, + sampler=reverb.selectors.Uniform(), + remover=reverb.selectors.Fifo(), + rate_limiter=reverb.rate_limiters.MinSize(self.min_size_to_sample), + ) + + # Set up checkpointing + os.makedirs(self.checkpoint_dir, exist_ok=True) + checkpointer = reverb.platform.checkpointers_lib.DefaultCheckpointer(path=self.checkpoint_dir) + + # Create the server + self.server = reverb.Server( + tables=[table], + port=self.port, + checkpointer=checkpointer + ) + + # Create the replay buffer + self.replay_buffer = reverb_replay_buffer.ReverbReplayBuffer( + data_spec=self.data_spec, + sequence_length=self.sequence_length, + table_name=self.table_name, + local_server=self.server, + ) + + # Create the observer to add data to the buffer + self.observer = reverb_utils.ReverbAddTrajectoryObserver( + py_client=self.replay_buffer.py_client, + table_name=self.table_name, + sequence_length=self.sequence_length, + stride_length=self.stride_length + ) + + self._is_initialized = True + logging.info(f"Replay buffer created with server running on port {self.server.port}") + + return self.replay_buffer, self.observer + + def get_replay_buffer_and_observer(self) -> Tuple[reverb_replay_buffer.ReverbReplayBuffer, reverb_utils.ReverbAddTrajectoryObserver]: + """Get the replay buffer and observer. Creates them if not already initialized. + + Returns: + A tuple of (replay_buffer, observer). + """ + if not self._is_initialized: + return self.create_replay_buffer() + return self.replay_buffer, self.observer + + def get_dataset(self, batch_size: int = 64, num_steps: Optional[int] = None) -> tf.data.Dataset: + """Get a TensorFlow dataset for sampling from the replay buffer. + + Args: + batch_size: Number of sequences to sample in each batch. + num_steps: Number of steps to sample for each sequence. If None, + defaults to sequence_length. + + Returns: + A TensorFlow dataset that samples from the replay buffer. + """ + if not self._is_initialized: + raise RuntimeError("Replay buffer not initialized. Call create_replay_buffer first.") + + if num_steps is None: + num_steps = self.sequence_length + + return self.replay_buffer.as_dataset( + sample_batch_size=batch_size, + num_steps=num_steps + ) + + def num_frames(self) -> int: + """Get the current number of frames in the replay buffer. + + Returns: + The number of frames currently in the buffer. + """ + if not self._is_initialized: + return 0 + return self.replay_buffer.num_frames() + + def clear(self) -> None: + """Clear all data from the replay buffer.""" + if not self._is_initialized: + return + + # Close the existing server and create a new one + self.server.stop() + + # Recreate everything + self.create_replay_buffer() + logging.info("Replay buffer cleared and recreated") + + def close(self) -> None: + """Close the replay buffer server and clean up resources.""" + if self._is_initialized and self.server: + self.server.stop() + self._is_initialized = False + logging.info("Replay buffer server stopped") \ No newline at end of file diff --git a/smart_control/refactor/replay_buffer_test.py b/smart_control/refactor/replay_buffer_test.py new file mode 100644 index 00000000..eb50c83c --- /dev/null +++ b/smart_control/refactor/replay_buffer_test.py @@ -0,0 +1,165 @@ + + +from smart_control.refactor.replay_buffer.replay_buffer import ReplayBufferManager + +import os +import logging +import tensorflow as tf +from tf_agents.environments import tf_py_environment +from tf_agents.trajectories import time_step as ts +from tf_agents.drivers import dynamic_step_driver +from tf_agents.replay_buffers import tf_uniform_replay_buffer + + +from smart_control.refactor.agents import create_sac_agent +from smart_control.refactor.observers import (RenderingObserver, PrintStatusObserver, CompositeObserver) +from smart_control.refactor.utils.metrics import compute_avg_return +from smart_control.refactor.utils.config import CONFIG_PATH, METRICS_PATH, DATA_PATH, OUTPUT_DATA_PATH, ROOT_DIR +from smart_control.learning.reinforcement_learning.sac.learning_utils import load_environment + +logging.basicConfig( + level=logging.INFO, + format='[%(levelname)s] [%(filename)s:%(lineno)d] [%(message)s]' +) + +# Set up logging +logger = logging.getLogger(__name__) # Uses the module name + + +# Instantiate the environments +logger.info("Instantiating the collect environment...") + +collect_scenario_config = os.path.join(CONFIG_PATH, "sim_config_4_day.gin") +collect_env = load_environment(collect_scenario_config) +collect_env._metrics_path = None # Collect env does not need metrics path +collect_env._occupancy_normalization_constant = 125.0 +# the collect_env is of type PyEnvironment. Let's wrap it in a TFPyEnvironment +collect_tf_env = tf_py_environment.TFPyEnvironment(collect_env) + + +logger.info("Instantiating the eval environment...") + +eval_scenario_config = os.path.join(CONFIG_PATH, "sim_config_4_day.gin") +eval_env = load_environment(collect_scenario_config) +eval_env._metrics_path = METRICS_PATH +eval_env._occupancy_normalization_constant = 125.0 +# the collect_env is of type PyEnvironment. Let's wrap it in a TFPyEnvironment +eval_tf_env = tf_py_environment.TFPyEnvironment(eval_env) + + +# Now, let's create the agent +logger.info("Creating the SAC agent...") + +train_step = tf.Variable(0, trainable=False, dtype=tf.int64) +agent = create_sac_agent( + time_step_spec=collect_tf_env.time_step_spec(), + action_spec=collect_tf_env.action_spec(), + actor_fc_layers=(64, 64), + critic_obs_fc_layers=(64, 32), + critic_action_fc_layers=(64, 32), + critic_joint_fc_layers=(64, 32), + actor_learning_rate=3e-4, + critic_learning_rate=3e-4, + alpha_learning_rate=3e-4, + target_update_tau=0.005, + target_update_period=1, + gamma=0.99, + reward_scale_factor=1.0, + train_step_counter=train_step +) + +agent.initialize() # Initialize the agent + + +# Initialize the manager with your agent's data spec +replay_manager = ReplayBufferManager( + data_spec=agent.collect_data_spec, + capacity=50000, + checkpoint_dir=f"{OUTPUT_DATA_PATH}/reverb_checkpoint", + sequence_length=2 +) + +# Create the replay buffer +replay_buffer, replay_buffer_observer = replay_manager.create_replay_buffer() + + +# Get specs from the environment +observation_spec = collect_tf_env.observation_spec() +action_spec = collect_tf_env.action_spec() +time_step_spec = ts.time_step_spec(observation_spec) + + +# Create the replay buffer +logger.info("Creating the replay buffer...") +replay_buffer = tf_uniform_replay_buffer.TFUniformReplayBuffer( + agent.collect_data_spec, + batch_size=1, + max_length=1000 +) + + +# Setup the observers +logger.info("Setting up the observers...") + +# Vizualization functions +def render_env(environment): + pass + +def plot_metrics(environment, time_zone): + pass + +# Create individual observers +render_observer = RenderingObserver( + render_interval_steps=5, + environment=collect_tf_env, + render_fn=render_env, plot_fn=plot_metrics, time_zone='US/Pacific' +) +print_observer = PrintStatusObserver( + status_interval_steps=1, + environment=collect_tf_env, + replay_buffer=replay_buffer +) + +eval_render_observer = RenderingObserver( + render_interval_steps=5, + environment=eval_tf_env, + render_fn=render_env, plot_fn=plot_metrics, time_zone='US/Pacific' +) +eval_print_observer = PrintStatusObserver( + status_interval_steps=1, + environment=eval_tf_env, + replay_buffer=replay_buffer +) + +# Composite observer aggregates the individual observers neatly +observers = CompositeObserver([render_observer, print_observer, replay_buffer.add_batch, replay_buffer_observer]) +eval_observers = CompositeObserver([eval_render_observer, eval_print_observer]) + + +# Setup collect driver +logger.info("Setting up the collect driver...") + +collect_driver = dynamic_step_driver.DynamicStepDriver( + collect_tf_env, + agent.collect_policy, + observers=[observers], + num_steps=1 +) # Collect one step at a time + +# Run a short collect loop +logger.info("Running a short collect loop...") + +# Reset the environment +time_step = collect_tf_env.reset() + +# Collect a few steps of experience +logger.info("Collecting experience...") +for _ in range(20): # Collect 20 steps of experience + collect_driver.run(time_step) + time_step = collect_tf_env.current_time_step() + +logger.info("Replay buffer size: {}".format(replay_buffer.num_frames())) + + +# Close resources when done +replay_manager.close() \ No newline at end of file diff --git a/smart_control/refactor/utils/__init__.py b/smart_control/refactor/utils/__init__.py new file mode 100644 index 00000000..8692ab8b --- /dev/null +++ b/smart_control/refactor/utils/__init__.py @@ -0,0 +1,53 @@ +from smart_control.refactor.utils.config import ( + load_environment, + get_histogram_reducer, + get_reset_temp_values, + get_histogram_path, + get_zone_path, + get_metrics_path, + get_weather_path, + remap_filepath, +) + +from smart_control.refactor.utils.metrics import ( + compute_avg_return, +) + +from smart_control.refactor.utils.data_processing import ( + get_energy_timeseries, + get_reward_timeseries, + get_zone_timeseries, + get_action_timeseries, + get_outside_air_temperature_timeseries, +) + +from smart_control.refactor.utils.constants import ( + KELVIN_TO_CELSIUS, + DEFAULT_TIME_ZONE, +) + +__all__ = [ + # From config.py + 'load_environment', + 'get_histogram_reducer', + 'get_reset_temp_values', + 'get_histogram_path', + 'get_zone_path', + 'get_metrics_path', + 'get_weather_path', + 'remap_filepath', + + # From data_processing.py + 'get_energy_timeseries', + 'get_reward_timeseries', + 'get_zone_timeseries', + 'get_action_timeseries', + 'get_outside_air_temperature_times', + + # From metrics.py + 'compute_avg_return', + + # From constants.py + 'KELVIN_TO_CELSIUS', + 'DEFAULT_TIME_ZONE', +] \ No newline at end of file diff --git a/smart_control/refactor/utils/config.py b/smart_control/refactor/utils/config.py new file mode 100644 index 00000000..26cd525a --- /dev/null +++ b/smart_control/refactor/utils/config.py @@ -0,0 +1,167 @@ +import os +import gin +import numpy as np +from typing import Any, Optional + +from smart_control.refactor.utils.constants import ( + DEFAULT_DATA_PATH, + DEFAULT_CONFIG_PATH, + DEFAULT_METRICS_PATH, + DEFAULT_OUTPUT_DATA_PATH, + DEFAULT_ROOT_DIR, +) +from smart_control.utils import histogram_reducer +from smart_control.utils import controller_reader + +# Global path variables - can be overridden by config +DATA_PATH = DEFAULT_DATA_PATH +CONFIG_PATH = DEFAULT_CONFIG_PATH +METRICS_PATH = DEFAULT_METRICS_PATH +OUTPUT_DATA_PATH = DEFAULT_OUTPUT_DATA_PATH +ROOT_DIR = DEFAULT_ROOT_DIR + + +def set_global_paths( + data_path: Optional[str] = None, + config_path: Optional[str] = None, + metrics_path: Optional[str] = None, + output_data_path: Optional[str] = None, + root_dir: Optional[str] = None, +) -> None: + """Set global path variables. + + Args: + data_path: Path to data directory. + config_path: Path to config directory. + metrics_path: Path to metrics directory. + output_data_path: Path to output data directory. + root_dir: Root directory. + """ + global DATA_PATH, CONFIG_PATH, METRICS_PATH, OUTPUT_DATA_PATH, ROOT_DIR + + if data_path is not None: + DATA_PATH = data_path + if config_path is not None: + CONFIG_PATH = config_path + if metrics_path is not None: + METRICS_PATH = metrics_path + if output_data_path is not None: + OUTPUT_DATA_PATH = output_data_path + if root_dir is not None: + ROOT_DIR = root_dir + + # Create directories if they don't exist + for path in [DATA_PATH, CONFIG_PATH, METRICS_PATH, OUTPUT_DATA_PATH, ROOT_DIR]: + os.makedirs(path, exist_ok=True) + + +def remap_filepath(filepath: str) -> str: + """Remap filepath based on environment variables or other rules. + + Args: + filepath: Original filepath. + + Returns: + Remapped filepath. + """ + # This function can be extended to handle more complex filepath remapping + return filepath + + +@gin.configurable +def get_histogram_path() -> str: + """Get path to histogram data. + + Returns: + Path to histogram data. + """ + return DATA_PATH + + +@gin.configurable +def get_reset_temp_values() -> np.ndarray: + """Get reset temperature values. + + Returns: + Reset temperature values. + """ + reset_temps_filepath = remap_filepath( + os.path.join(DATA_PATH, "reset_temps.npy") + ) + + return np.load(reset_temps_filepath) + + +@gin.configurable +def get_zone_path() -> str: + """Get path to zone data. + + Returns: + Path to zone data. + """ + return remap_filepath( + os.path.join(DATA_PATH, "double_resolution_zone_1_2.npy") + ) + + +@gin.configurable +def get_metrics_path() -> str: + """Get path to metrics. + + Returns: + Path to metrics. + """ + return os.path.join(METRICS_PATH, "metrics") + + +@gin.configurable +def get_weather_path() -> str: + """Get path to weather data. + + Returns: + Path to weather data. + """ + return remap_filepath(os.path.join(DATA_PATH, "local_weather_moffett_field_20230701_20231122.csv")) + + +def load_environment(gin_config_file: str) -> Any: + """Load environment from gin config file. + + Args: + gin_config_file: Path to gin config file. + + Returns: + Environment. + """ + # Import here to avoid circular imports + from smart_control.environment.environment import Environment + + with gin.unlock_config(): + gin.clear_config() + gin.parse_config_file(gin_config_file) + return Environment() # pylint: disable=no-value-for-parameter + + +@gin.configurable +def get_histogram_reducer() -> Any: + """Get histogram reducer. + + Returns: + Histogram reducer. + """ + + histogram_parameters_tuples = ( + ('zone_air_temperature_sensor', (285., 286., 287., 288, 289., 290., 291., + 292., 293., 294., 295., 296., 297., 298., 299., 300., 301, 302, 303)), + ('supply_air_damper_percentage_command', (0.0, 0.2, 0.4, 0.6, 0.8, 1.0)), + ('supply_air_flowrate_setpoint', (0., 0.05, .1, .2, .3, .4, .5, .7, .9)), + ) + + reader = controller_reader.ProtoReader(DATA_PATH) + + hr = histogram_reducer.HistogramReducer( + histogram_parameters_tuples=histogram_parameters_tuples, + reader=reader, + normalize_reduce=True, + ) + return hr diff --git a/smart_control/refactor/utils/constants.py b/smart_control/refactor/utils/constants.py new file mode 100644 index 00000000..6eceb12a --- /dev/null +++ b/smart_control/refactor/utils/constants.py @@ -0,0 +1,19 @@ +# Temperature conversion +KELVIN_TO_CELSIUS = 273.15 + +# Default time zone for plotting and simulations +DEFAULT_TIME_ZONE = 'US/Pacific' + +# Economic constants +PERSON_PRODUCTIVITY_HOUR = 300.0 + +# Reward adjustments +REWARD_SHIFT = 0 +REWARD_SCALE = 1.0 + +# Default directory paths - to be overridden by config +DEFAULT_DATA_PATH = "/home/gabriel-user/projects/sbsim/smart_control/configs/resources/sb1/" +DEFAULT_CONFIG_PATH = "/home/gabriel-user/projects/sbsim/smart_control/configs/resources/sb1/train_sim_configs/" +DEFAULT_METRICS_PATH = "/home/gabriel-user/projects/sbsim/smart_control/output/metrics/" +DEFAULT_OUTPUT_DATA_PATH = "/home/gabriel-user/projects/sbsim/smart_control/output/output_data" +DEFAULT_ROOT_DIR = "/home/gabriel-user/projects/sbsim/smart_control/refactor/" diff --git a/smart_control/refactor/utils/data_processing.py b/smart_control/refactor/utils/data_processing.py new file mode 100644 index 00000000..c6f27467 --- /dev/null +++ b/smart_control/refactor/utils/data_processing.py @@ -0,0 +1,330 @@ +import os +import numpy as np +import pandas as pd +from typing import Any, Union, List + +from smart_control.refactor.utils.constants import DEFAULT_TIME_ZONE +from smart_control.utils import controller_reader +from smart_control.utils import conversion_utils + + +def get_latest_episode_reader( + metrics_path: str, +) -> 'controller_reader.ProtoReader': + """Get reader for the latest episode. + + Args: + metrics_path: Path to metrics directory. + + Returns: + Reader for the latest episode. + """ + episode_infos = controller_reader.get_episode_data( + metrics_path).sort_index() + selected_episode = episode_infos.index[-1] + episode_path = os.path.join(metrics_path, selected_episode) + reader = controller_reader.ProtoReader(episode_path) + return reader + + +def get_energy_timeseries(reward_infos: List[Any], time_zone: str = DEFAULT_TIME_ZONE) -> pd.DataFrame: + """Returns a timeseries of energy rates. + + Args: + reward_infos: List of reward info objects. + time_zone: Time zone for the timestamps. + + Returns: + DataFrame with energy timeseries data. + """ + start_times = [] + end_times = [] + + device_ids = [] + device_types = [] + air_handler_blower_electrical_energy_rates = [] + air_handler_air_conditioner_energy_rates = [] + boiler_natural_gas_heating_energy_rates = [] + boiler_pump_electrical_energy_rates = [] + + for reward_info in reward_infos: + end_timestamp = conversion_utils.proto_to_pandas_timestamp( + reward_info.end_timestamp + ).tz_convert(time_zone) + start_timestamp = end_timestamp - pd.Timedelta(300, unit='second') + + for air_handler_id in reward_info.air_handler_reward_infos: + start_times.append(start_timestamp) + end_times.append(end_timestamp) + + device_ids.append(air_handler_id) + device_types.append('air_handler') + + air_handler_blower_electrical_energy_rates.append( + reward_info.air_handler_reward_infos[ + air_handler_id + ].blower_electrical_energy_rate + ) + air_handler_air_conditioner_energy_rates.append( + reward_info.air_handler_reward_infos[ + air_handler_id + ].air_conditioning_electrical_energy_rate + ) + boiler_natural_gas_heating_energy_rates.append(0) + boiler_pump_electrical_energy_rates.append(0) + + for boiler_id in reward_info.boiler_reward_infos: + start_times.append(start_timestamp) + end_times.append(end_timestamp) + + device_ids.append(boiler_id) + device_types.append('boiler') + + air_handler_blower_electrical_energy_rates.append(0) + air_handler_air_conditioner_energy_rates.append(0) + + boiler_natural_gas_heating_energy_rates.append( + reward_info.boiler_reward_infos[ + boiler_id + ].natural_gas_heating_energy_rate + ) + boiler_pump_electrical_energy_rates.append( + reward_info.boiler_reward_infos[boiler_id].pump_electrical_energy_rate + ) + + df_map = { + 'start_time': start_times, + 'end_time': end_times, + 'device_id': device_ids, + 'device_type': device_types, + 'air_handler_blower_electrical_energy_rate': ( + air_handler_blower_electrical_energy_rates + ), + 'air_handler_air_conditioner_energy_rate': ( + air_handler_air_conditioner_energy_rates + ), + 'boiler_natural_gas_heating_energy_rate': ( + boiler_natural_gas_heating_energy_rates + ), + 'boiler_pump_electrical_energy_rate': boiler_pump_electrical_energy_rates, + } + return pd.DataFrame(df_map).sort_values('start_time') + + +def get_outside_air_temperature_timeseries( + observation_responses: List[Any], + time_zone: str = DEFAULT_TIME_ZONE, +) -> pd.Series: + """Returns a timeseries of outside air temperature. + + Args: + observation_responses: List of observation response objects. + time_zone: Time zone for the timestamps. + + Returns: + Series with outside air temperature timeseries data. + """ + temps = [] + for i in range(len(observation_responses)): + temp = [ + ( + conversion_utils.proto_to_pandas_timestamp( + sor.timestamp + ).tz_convert(time_zone), + sor.continuous_value, + ) + for sor in observation_responses[i].single_observation_responses + if sor.single_observation_request.measurement_name + == 'outside_air_temperature_sensor' + ][0] + temps.append(temp) + + res = list(zip(*temps)) + return pd.Series(res[1], index=res[0]).sort_index() + + +def get_reward_timeseries( + reward_infos: List[Any], + reward_responses: List[Any], + time_zone: str = DEFAULT_TIME_ZONE, +) -> pd.DataFrame: + """Returns a timeseries of reward values. + + Args: + reward_infos: List of reward info objects. + reward_responses: List of reward response objects. + time_zone: Time zone for the timestamps. + + Returns: + DataFrame with reward timeseries data. + """ + + cols = [ + 'agent_reward_value', + 'electricity_energy_cost', + 'carbon_emitted', + 'occupancy', + ] + df = pd.DataFrame(columns=cols) + + for i in range(min(len(reward_responses), len(reward_infos))): + step_start_timestamp = conversion_utils.proto_to_pandas_timestamp( + reward_infos[i].start_timestamp + ).tz_convert(time_zone) + step_end_timestamp = conversion_utils.proto_to_pandas_timestamp( + reward_infos[i].end_timestamp + ).tz_convert(time_zone) + delta_time_sec = (step_end_timestamp - + step_start_timestamp).total_seconds() + occupancy = np.sum([ + reward_infos[i].zone_reward_infos[zone_id].average_occupancy + for zone_id in reward_infos[i].zone_reward_infos + ]) + + df.loc[ + conversion_utils.proto_to_pandas_timestamp( + reward_infos[i].start_timestamp + ).tz_convert(time_zone) + ] = [ + reward_responses[i].agent_reward_value, + reward_responses[i].electricity_energy_cost, + reward_responses[i].carbon_emitted, + occupancy, + ] + + df = df.sort_index() + df['cumulative_reward'] = df['agent_reward_value'].cumsum() + return df + + +def get_zone_timeseries(reward_infos: List[Any], time_zone: str = DEFAULT_TIME_ZONE) -> pd.DataFrame: + """Converts reward infos to a timeseries dataframe. + + Args: + reward_infos: List of reward info objects. + time_zone: Time zone for the timestamps. + + Returns: + DataFrame with zone timeseries data. + """ + start_times = [] + end_times = [] + zones = [] + heating_setpoints = [] + cooling_setpoints = [] + zone_air_temperatures = [] + air_flow_rate_setpoints = [] + air_flow_rates = [] + average_occupancies = [] + + for reward_info in reward_infos: + start_timestamp = conversion_utils.proto_to_pandas_timestamp( + reward_info.end_timestamp + ).tz_convert(time_zone) - pd.Timedelta(300, unit='second') + end_timestamp = conversion_utils.proto_to_pandas_timestamp( + reward_info.end_timestamp + ).tz_convert(time_zone) + + for zone_id in reward_info.zone_reward_infos: + zones.append(zone_id) + start_times.append(start_timestamp) + end_times.append(end_timestamp) + + heating_setpoints.append( + reward_info.zone_reward_infos[zone_id].heating_setpoint_temperature + ) + cooling_setpoints.append( + reward_info.zone_reward_infos[zone_id].cooling_setpoint_temperature + ) + + zone_air_temperatures.append( + reward_info.zone_reward_infos[zone_id].zone_air_temperature + ) + air_flow_rate_setpoints.append( + reward_info.zone_reward_infos[zone_id].air_flow_rate_setpoint + ) + air_flow_rates.append( + reward_info.zone_reward_infos[zone_id].air_flow_rate + ) + average_occupancies.append( + reward_info.zone_reward_infos[zone_id].average_occupancy + ) + + df_map = { + 'start_time': start_times, + 'end_time': end_times, + 'zone': zones, + 'heating_setpoint_temperature': heating_setpoints, + 'cooling_setpoint_temperature': cooling_setpoints, + 'zone_air_temperature': zone_air_temperatures, + 'air_flow_rate_setpoint': air_flow_rate_setpoints, + 'air_flow_rate': air_flow_rates, + 'average_occupancy': average_occupancies, + } + return pd.DataFrame(df_map).sort_values('start_time') + + +def get_action_timeseries(action_responses: List[Any]) -> pd.DataFrame: + """Converts action responses to a dataframe. + + Args: + action_responses: List of action response objects. + + Returns: + DataFrame with action timeseries data. + """ + timestamps = [] + device_ids = [] + setpoint_names = [] + setpoint_values = [] + response_types = [] + for action_response in action_responses: + + timestamp = conversion_utils.proto_to_pandas_timestamp( + action_response.timestamp + ) + for single_action_response in action_response.single_action_responses: + device_id = single_action_response.request.device_id + setpoint_name = single_action_response.request.setpoint_name + setpoint_value = single_action_response.request.continuous_value + response_type = single_action_response.response_type + + timestamps.append(timestamp) + device_ids.append(device_id) + setpoint_names.append(setpoint_name) + setpoint_values.append(setpoint_value) + response_types.append(response_type) + + return pd.DataFrame({ + 'timestamp': timestamps, + 'device_id': device_ids, + 'setpoint_name': setpoint_names, + 'setpoint_value': setpoint_values, + 'response_type': response_types, + }) + + +def convert_kelvin_to_celsius(temperature_kelvin: Union[float, np.ndarray, pd.Series]) -> Union[float, np.ndarray, pd.Series]: + """Convert temperature from Kelvin to Celsius. + + Args: + temperature_kelvin: Temperature in Kelvin. + + Returns: + Temperature in Celsius. + """ + from smart_control.utils.constants import KELVIN_TO_CELSIUS + return temperature_kelvin - KELVIN_TO_CELSIUS + + +def convert_celsius_to_kelvin(temperature_celsius: Union[float, np.ndarray, pd.Series]) -> Union[float, np.ndarray, pd.Series]: + """Convert temperature from Celsius to Kelvin. + + Args: + temperature_celsius: Temperature in Celsius. + + Returns: + Temperature in Kelvin. + """ + from smart_control.utils.constants import KELVIN_TO_CELSIUS + return temperature_celsius + KELVIN_TO_CELSIUS diff --git a/smart_control/refactor/utils/metrics.py b/smart_control/refactor/utils/metrics.py new file mode 100644 index 00000000..529da44e --- /dev/null +++ b/smart_control/refactor/utils/metrics.py @@ -0,0 +1,100 @@ +import time +import numpy as np +import logging +from typing import Any, List, Optional, Tuple, Callable + +from tf_agents.policies import py_policy +from tf_agents.trajectories import policy_step +from tf_agents.trajectories import trajectory +from tf_agents.trajectories import time_step as ts + +from smart_control.refactor.utils.constants import DEFAULT_TIME_ZONE +from tf_agents.trajectories import TimeStep + + +logger = logging.getLogger(__name__) + +def get_trajectory(time_step: ts.TimeStep, current_action: policy_step.PolicyStep) -> trajectory.Trajectory: + """Get the trajectory for the current action and time step. + + Args: + time_step: Current time step. + current_action: Current action. + + Returns: + Trajectory for the current action and time step. + """ + observation = time_step.observation + action = current_action.action + policy_info = () + reward = time_step.reward + discount = time_step.discount + + if time_step.is_first(): + return trajectory.first(observation, action, policy_info, reward, discount) + + if time_step.is_last(): + return trajectory.last(observation, action, policy_info, reward, discount) + + return trajectory.mid(observation, action, policy_info, reward, discount) + + +def compute_avg_return(environment: Any, + policy: py_policy.PyPolicy, + num_episodes: int = 1, + time_zone: str = DEFAULT_TIME_ZONE, + render_interval_steps: int = 24, + trajectory_observers: Optional[List[Callable]] = None, + num_steps: int = 6) -> Tuple[float, List[List[Any]]]: + """Computes the average return of the policy on the environment. + + Args: + environment: Environment to evaluate on. + policy: Policy to evaluate. + num_episodes: Total number of episodes to run. + time_zone: Time zone for timestamps. + render_interval_steps: Number of steps between renderings. + trajectory_observers: List of trajectory observers. + num_steps: Number of steps to take per episode. + + Returns: + Tuple of (average return, list of [simulation time, episode return] pairs). + """ + total_return = 0.0 + return_by_simtime = [] + + for _ in range(num_episodes): + time_step = environment.reset() + episode_return = 0.0 + t0 = time.time() + epoch = t0 + step_id = 0 + execution_times = [] + + for _ in range(num_steps): + action_step = policy.action(time_step) + time_step = environment.step(action_step.action) + + if trajectory_observers is not None: + traj = get_trajectory(time_step, action_step) + for observer in trajectory_observers: + observer(traj) + + episode_return += time_step.reward + t1 = time.time() + dt = t1 - t0 + episode_seconds = t1 - epoch + execution_times.append(dt) + sim_time = environment.pyenv.envs[0].current_simulation_timestamp.tz_convert(time_zone) + + return_by_simtime.append([sim_time, episode_return]) + + logger.info("[Step %d] [Sim Time: %s] [Reward: %.2f] [Return: %.2f] [Mean Step Time: %.2fs] [Episode Time: %.2fs]" + % (step_id, sim_time.strftime("%Y-%m-%d %H:%M"), time_step.reward, episode_return, np.mean(execution_times), episode_seconds)) + + t0 = t1 + step_id += 1 + total_return += episode_return + + avg_return = total_return / num_episodes + return avg_return, return_by_simtime diff --git a/smart_control/simulator/constants.py b/smart_control/simulator/constants.py index 566057d8..0f7db178 100644 --- a/smart_control/simulator/constants.py +++ b/smart_control/simulator/constants.py @@ -122,7 +122,7 @@ ROOM_STRING_DESIGNATOR = "room" # Path to save videos generated by the simulation's visual logger. -VIDEO_PATH_ROOT = "/cns/oz-d/home/smart-buildings-control-team/smart-buildings/geometric_sim_videos/" # pylint: disable=line-too-long +VIDEO_PATH_ROOT = "/home/gabriel-user/projects/sbsim/videos/" # pylint: disable=line-too-long # The limit above which we do not want thermal diffusers to be dispensing energy WATT_LIMIT = 500 From 31332ce56cf79827190f5c85d3f455472bbbcc85 Mon Sep 17 00:00:00 2001 From: Gabriel Guerra Trigo Date: Thu, 6 Mar 2025 13:03:38 -0500 Subject: [PATCH 4/9] squash --- .../refactor/observers/rendering_observer.py | 4 - smart_control/refactor/refactor_test.py | 53 +++--- .../refactor/replay_buffer/replay_buffer.py | 86 +++------ smart_control/refactor/replay_buffer_test.py | 165 ------------------ smart_control/refactor/scripts/train.py | 0 smart_control/refactor/utils/constants.py | 2 +- 6 files changed, 47 insertions(+), 263 deletions(-) delete mode 100644 smart_control/refactor/replay_buffer_test.py create mode 100644 smart_control/refactor/scripts/train.py diff --git a/smart_control/refactor/observers/rendering_observer.py b/smart_control/refactor/observers/rendering_observer.py index 36f27548..46542802 100644 --- a/smart_control/refactor/observers/rendering_observer.py +++ b/smart_control/refactor/observers/rendering_observer.py @@ -74,8 +74,6 @@ def __init__( self._start_time = None self._save_path = save_path - logger.warning(f"Created RenderingObserver with metrics path: {self._environment.pyenv.envs[0]._metrics_path}") - # Create save directory if it doesn't exist os.makedirs(self._save_path, exist_ok=True) @@ -520,8 +518,6 @@ def __call__(self, trajectory: trajectory_lib.Trajectory) -> None: logger.info(f"Step {self._counter}: Cumulative reward = {float(self._cumulative_reward):.2f}, Mean execution time = {mean_execution_time:.2f}s") - logger.warning(f"Metrics path: {self._environment.pyenv.envs[0]._metrics_path}") - if self._environment.pyenv.envs[0]._metrics_path is not None: logger.warning("Plotting timeseries charts...") reader = get_latest_episode_reader(self._environment.pyenv.envs[0]._metrics_path) diff --git a/smart_control/refactor/refactor_test.py b/smart_control/refactor/refactor_test.py index 1a0cbd27..aa3c75a2 100644 --- a/smart_control/refactor/refactor_test.py +++ b/smart_control/refactor/refactor_test.py @@ -3,14 +3,13 @@ import tensorflow as tf from tf_agents.environments import tf_py_environment from tf_agents.trajectories import time_step as ts -from tf_agents.drivers import dynamic_step_driver -from tf_agents.replay_buffers import tf_uniform_replay_buffer +from tf_agents.train import actor from smart_control.refactor.agents import create_sac_agent from smart_control.refactor.observers import (RenderingObserver, PrintStatusObserver, CompositeObserver) from smart_control.refactor.utils.metrics import compute_avg_return -from smart_control.refactor.utils.config import CONFIG_PATH, METRICS_PATH, DATA_PATH, OUTPUT_DATA_PATH, ROOT_DIR +from smart_control.refactor.utils.config import CONFIG_PATH, METRICS_PATH, OUTPUT_DATA_PATH from smart_control.learning.reinforcement_learning.sac.learning_utils import load_environment from smart_control.refactor.replay_buffer.replay_buffer import ReplayBufferManager @@ -40,7 +39,7 @@ eval_env = load_environment(collect_scenario_config) eval_env._metrics_path = METRICS_PATH eval_env._occupancy_normalization_constant = 125.0 -# the collect_env is of type PyEnvironment. Let's wrap it in a TFPyEnvironment +# the eval_env is of type PyEnvironment. Let's wrap it in a TFPyEnvironment eval_tf_env = tf_py_environment.TFPyEnvironment(eval_env) @@ -76,9 +75,9 @@ # Create the replay buffer # Initialize the manager with your agent's data spec replay_manager = ReplayBufferManager( - data_spec=agent.collect_data_spec, - capacity=50000, - checkpoint_dir=f"{OUTPUT_DATA_PATH}/reverb_checkpoint", + agent.collect_data_spec, + 50000, + f"{OUTPUT_DATA_PATH}/refactor_test_collect_buffer", sequence_length=2 ) @@ -124,35 +123,28 @@ def plot_metrics(environment, time_zone): eval_observers = CompositeObserver([eval_render_observer, eval_print_observer]) -# Setup collect driver -logger.info("Setting up the collect driver...") - -collect_driver = dynamic_step_driver.DynamicStepDriver( - collect_tf_env, - agent.collect_policy, - observers=[observers], - num_steps=1 -) # Collect one step at a time - - -# Run a short collect loop -logger.info("Running a short collect loop...") +from tf_agents.policies import py_tf_eager_policy -# Reset the environment -time_step = collect_tf_env.reset() - -# Collect a few steps of experience -logger.info("Collecting experience...") -for _ in range(20): # Collect 20 steps of experience - collect_driver.run(time_step) - time_step = collect_tf_env.current_time_step() +# Setup collect actor +logger.info("Setting up the collect actor...") +collect_actor = actor.Actor( + collect_tf_env.pyenv.envs[0], # Have to use the underlying pyenv because the actor doesn't support TFEnvironments yet + py_tf_eager_policy.PyTFEagerPolicy(agent.collect_policy), # Have to wrap it like this because using underlying pyenv instead of tf env + steps_per_run=10, + train_step=agent.train_step_counter, + observers=[observers] +) +collect_actor.run() +logger.info("Collect actor has run, now running checkpoint...") +replay_buffer.py_client.checkpoint() +logger.info("Replay buffer num frames: {}".format(replay_buffer.num_frames())) # Let's test the training loop logger.info("Running test training...") -logger.warning("Replay buffer num frames: {}".format(replay_buffer.num_frames())) -if replay_buffer.num_frames() > 0: +if replay_buffer.num_frames() > 0: + # Sample a batch dataset = replay_buffer.as_dataset( num_parallel_calls=3, @@ -171,7 +163,6 @@ def plot_metrics(environment, time_zone): # Now, run an evaluation with the trained agent policy logger.info("Running evaluation...") -logger.warning(f"Metrics path: {eval_tf_env.pyenv.envs[0]._metrics_path}") compute_avg_return( environment=eval_tf_env, policy=agent.policy, diff --git a/smart_control/refactor/replay_buffer/replay_buffer.py b/smart_control/refactor/replay_buffer/replay_buffer.py index efc311b4..762434df 100644 --- a/smart_control/refactor/replay_buffer/replay_buffer.py +++ b/smart_control/refactor/replay_buffer/replay_buffer.py @@ -1,14 +1,14 @@ import os import logging -from typing import Optional, Tuple, List, Dict, Any +from typing import Optional, Tuple -import numpy as np import tensorflow as tf import reverb from tf_agents.replay_buffers import reverb_replay_buffer from tf_agents.replay_buffers import reverb_utils -from smart_control.refactor.utils.config import OUTPUT_DATA_PATH + +logger = logging.getLogger(__name__) class ReplayBufferManager: @@ -19,88 +19,50 @@ class ReplayBufferManager: buffer, add data, sample from the buffer, and save/restore buffer state. """ - def __init__(self, - data_spec: Any, - capacity: int = 50000, - checkpoint_dir: str = f"{OUTPUT_DATA_PATH}/reverb_checkpoint", - table_name: str = 'uniform_table', - sequence_length: int = 2, - port: Optional[int] = None, - min_size_to_sample: int = 1, - stride_length: int = 1): - """Initialize the ReplayBufferManager. - - Args: - data_spec: The data specification for items stored in the buffer. - capacity: Maximum number of items stored in the buffer. - checkpoint_dir: Directory path for saving checkpoints. - table_name: Name of the reverb table. - sequence_length: Length of sequences sampled from the buffer. - port: Port for the reverb server. If None, a port is automatically chosen. - min_size_to_sample: Minimum number of items in buffer before sampling. - stride_length: Stride length for adding trajectories to buffer. - """ + def __init__(self, data_spec, capacity, checkpoint_dir, sequence_length=2): self.data_spec = data_spec self.capacity = capacity self.checkpoint_dir = checkpoint_dir - self.table_name = table_name self.sequence_length = sequence_length - self.port = port - self.min_size_to_sample = min_size_to_sample - self.stride_length = stride_length - - # Initialize as None, to be created in create_replay_buffer - self.server = None - self.replay_buffer = None - self.observer = None - self._is_initialized = False - - def create_replay_buffer(self) -> Tuple[reverb_replay_buffer.ReverbReplayBuffer, reverb_utils.ReverbAddTrajectoryObserver]: - """Create and initialize the replay buffer. + self.table_name = 'uniform_table' - Returns: - A tuple of (replay_buffer, observer) for interacting with the buffer. - """ + def create_replay_buffer(self): # Create the table table = reverb.Table( - name=self.table_name, + self.table_name, max_size=self.capacity, sampler=reverb.selectors.Uniform(), remover=reverb.selectors.Fifo(), - rate_limiter=reverb.rate_limiters.MinSize(self.min_size_to_sample), + rate_limiter=reverb.rate_limiters.MinSize(1), ) - # Set up checkpointing - os.makedirs(self.checkpoint_dir, exist_ok=True) - checkpointer = reverb.platform.checkpointers_lib.DefaultCheckpointer(path=self.checkpoint_dir) + # Create the checkpointer + reverb_checkpointer = reverb.platform.checkpointers_lib.DefaultCheckpointer( + path=self.checkpoint_dir + ) # Create the server - self.server = reverb.Server( - tables=[table], - port=self.port, - checkpointer=checkpointer + reverb_server = reverb.Server( + [table], port=None, checkpointer=reverb_checkpointer ) # Create the replay buffer - self.replay_buffer = reverb_replay_buffer.ReverbReplayBuffer( - data_spec=self.data_spec, + replay_buffer = reverb_replay_buffer.ReverbReplayBuffer( + self.data_spec, sequence_length=self.sequence_length, table_name=self.table_name, - local_server=self.server, + local_server=reverb_server, ) - # Create the observer to add data to the buffer - self.observer = reverb_utils.ReverbAddTrajectoryObserver( - py_client=self.replay_buffer.py_client, - table_name=self.table_name, - sequence_length=self.sequence_length, - stride_length=self.stride_length + # Create the observer that adds trajectories to the buffer + observer = reverb_utils.ReverbAddTrajectoryObserver( + replay_buffer.py_client, + self.table_name, + sequence_length=self.sequence_length, + stride_length=1 ) - self._is_initialized = True - logging.info(f"Replay buffer created with server running on port {self.server.port}") - - return self.replay_buffer, self.observer + return replay_buffer, observer def get_replay_buffer_and_observer(self) -> Tuple[reverb_replay_buffer.ReverbReplayBuffer, reverb_utils.ReverbAddTrajectoryObserver]: """Get the replay buffer and observer. Creates them if not already initialized. diff --git a/smart_control/refactor/replay_buffer_test.py b/smart_control/refactor/replay_buffer_test.py deleted file mode 100644 index eb50c83c..00000000 --- a/smart_control/refactor/replay_buffer_test.py +++ /dev/null @@ -1,165 +0,0 @@ - - -from smart_control.refactor.replay_buffer.replay_buffer import ReplayBufferManager - -import os -import logging -import tensorflow as tf -from tf_agents.environments import tf_py_environment -from tf_agents.trajectories import time_step as ts -from tf_agents.drivers import dynamic_step_driver -from tf_agents.replay_buffers import tf_uniform_replay_buffer - - -from smart_control.refactor.agents import create_sac_agent -from smart_control.refactor.observers import (RenderingObserver, PrintStatusObserver, CompositeObserver) -from smart_control.refactor.utils.metrics import compute_avg_return -from smart_control.refactor.utils.config import CONFIG_PATH, METRICS_PATH, DATA_PATH, OUTPUT_DATA_PATH, ROOT_DIR -from smart_control.learning.reinforcement_learning.sac.learning_utils import load_environment - -logging.basicConfig( - level=logging.INFO, - format='[%(levelname)s] [%(filename)s:%(lineno)d] [%(message)s]' -) - -# Set up logging -logger = logging.getLogger(__name__) # Uses the module name - - -# Instantiate the environments -logger.info("Instantiating the collect environment...") - -collect_scenario_config = os.path.join(CONFIG_PATH, "sim_config_4_day.gin") -collect_env = load_environment(collect_scenario_config) -collect_env._metrics_path = None # Collect env does not need metrics path -collect_env._occupancy_normalization_constant = 125.0 -# the collect_env is of type PyEnvironment. Let's wrap it in a TFPyEnvironment -collect_tf_env = tf_py_environment.TFPyEnvironment(collect_env) - - -logger.info("Instantiating the eval environment...") - -eval_scenario_config = os.path.join(CONFIG_PATH, "sim_config_4_day.gin") -eval_env = load_environment(collect_scenario_config) -eval_env._metrics_path = METRICS_PATH -eval_env._occupancy_normalization_constant = 125.0 -# the collect_env is of type PyEnvironment. Let's wrap it in a TFPyEnvironment -eval_tf_env = tf_py_environment.TFPyEnvironment(eval_env) - - -# Now, let's create the agent -logger.info("Creating the SAC agent...") - -train_step = tf.Variable(0, trainable=False, dtype=tf.int64) -agent = create_sac_agent( - time_step_spec=collect_tf_env.time_step_spec(), - action_spec=collect_tf_env.action_spec(), - actor_fc_layers=(64, 64), - critic_obs_fc_layers=(64, 32), - critic_action_fc_layers=(64, 32), - critic_joint_fc_layers=(64, 32), - actor_learning_rate=3e-4, - critic_learning_rate=3e-4, - alpha_learning_rate=3e-4, - target_update_tau=0.005, - target_update_period=1, - gamma=0.99, - reward_scale_factor=1.0, - train_step_counter=train_step -) - -agent.initialize() # Initialize the agent - - -# Initialize the manager with your agent's data spec -replay_manager = ReplayBufferManager( - data_spec=agent.collect_data_spec, - capacity=50000, - checkpoint_dir=f"{OUTPUT_DATA_PATH}/reverb_checkpoint", - sequence_length=2 -) - -# Create the replay buffer -replay_buffer, replay_buffer_observer = replay_manager.create_replay_buffer() - - -# Get specs from the environment -observation_spec = collect_tf_env.observation_spec() -action_spec = collect_tf_env.action_spec() -time_step_spec = ts.time_step_spec(observation_spec) - - -# Create the replay buffer -logger.info("Creating the replay buffer...") -replay_buffer = tf_uniform_replay_buffer.TFUniformReplayBuffer( - agent.collect_data_spec, - batch_size=1, - max_length=1000 -) - - -# Setup the observers -logger.info("Setting up the observers...") - -# Vizualization functions -def render_env(environment): - pass - -def plot_metrics(environment, time_zone): - pass - -# Create individual observers -render_observer = RenderingObserver( - render_interval_steps=5, - environment=collect_tf_env, - render_fn=render_env, plot_fn=plot_metrics, time_zone='US/Pacific' -) -print_observer = PrintStatusObserver( - status_interval_steps=1, - environment=collect_tf_env, - replay_buffer=replay_buffer -) - -eval_render_observer = RenderingObserver( - render_interval_steps=5, - environment=eval_tf_env, - render_fn=render_env, plot_fn=plot_metrics, time_zone='US/Pacific' -) -eval_print_observer = PrintStatusObserver( - status_interval_steps=1, - environment=eval_tf_env, - replay_buffer=replay_buffer -) - -# Composite observer aggregates the individual observers neatly -observers = CompositeObserver([render_observer, print_observer, replay_buffer.add_batch, replay_buffer_observer]) -eval_observers = CompositeObserver([eval_render_observer, eval_print_observer]) - - -# Setup collect driver -logger.info("Setting up the collect driver...") - -collect_driver = dynamic_step_driver.DynamicStepDriver( - collect_tf_env, - agent.collect_policy, - observers=[observers], - num_steps=1 -) # Collect one step at a time - -# Run a short collect loop -logger.info("Running a short collect loop...") - -# Reset the environment -time_step = collect_tf_env.reset() - -# Collect a few steps of experience -logger.info("Collecting experience...") -for _ in range(20): # Collect 20 steps of experience - collect_driver.run(time_step) - time_step = collect_tf_env.current_time_step() - -logger.info("Replay buffer size: {}".format(replay_buffer.num_frames())) - - -# Close resources when done -replay_manager.close() \ No newline at end of file diff --git a/smart_control/refactor/scripts/train.py b/smart_control/refactor/scripts/train.py new file mode 100644 index 00000000..e69de29b diff --git a/smart_control/refactor/utils/constants.py b/smart_control/refactor/utils/constants.py index 6eceb12a..adaed96c 100644 --- a/smart_control/refactor/utils/constants.py +++ b/smart_control/refactor/utils/constants.py @@ -15,5 +15,5 @@ DEFAULT_DATA_PATH = "/home/gabriel-user/projects/sbsim/smart_control/configs/resources/sb1/" DEFAULT_CONFIG_PATH = "/home/gabriel-user/projects/sbsim/smart_control/configs/resources/sb1/train_sim_configs/" DEFAULT_METRICS_PATH = "/home/gabriel-user/projects/sbsim/smart_control/output/metrics/" -DEFAULT_OUTPUT_DATA_PATH = "/home/gabriel-user/projects/sbsim/smart_control/output/output_data" +DEFAULT_OUTPUT_DATA_PATH = "/home/gabriel-user/projects/sbsim/smart_control/refactor/data/replay_buffers/shared_initial_buffers" DEFAULT_ROOT_DIR = "/home/gabriel-user/projects/sbsim/smart_control/refactor/" From 1e8ef80e3bcf301bc792dbc8565f00384cdd19be Mon Sep 17 00:00:00 2001 From: Gabriel Guerra Trigo Date: Thu, 6 Mar 2025 17:31:54 -0500 Subject: [PATCH 5/9] squash --- .../refactor/observers/rendering_observer.py | 8 +- .../refactor/policies/schedule_policy.py | 257 ++++++++++++++++++ smart_control/refactor/refactor_test.py | 5 +- .../scripts/populate_starter_buffer.py | 145 ++++++++++ smart_control/refactor/utils/config.py | 2 + smart_control/refactor/utils/constants.py | 5 +- smart_control/refactor/utils/time_utils.py | 18 ++ .../utils/bounded_action_normalizer.py | 7 + 8 files changed, 440 insertions(+), 7 deletions(-) create mode 100644 smart_control/refactor/policies/schedule_policy.py create mode 100644 smart_control/refactor/scripts/populate_starter_buffer.py create mode 100644 smart_control/refactor/utils/time_utils.py diff --git a/smart_control/refactor/observers/rendering_observer.py b/smart_control/refactor/observers/rendering_observer.py index 46542802..559f3727 100644 --- a/smart_control/refactor/observers/rendering_observer.py +++ b/smart_control/refactor/observers/rendering_observer.py @@ -9,9 +9,7 @@ import pytz import pandas as pd from typing import Optional, Callable -from IPython.display import clear_output -import mediapy as media from tf_agents.trajectories import trajectory as trajectory_lib from matplotlib.ticker import MaxNLocator import matplotlib.pyplot as plt @@ -23,6 +21,8 @@ from smart_control.refactor.utils.data_processing import get_latest_episode_reader, get_action_timeseries, \ get_reward_timeseries, get_outside_air_temperature_timeseries, \ get_zone_timeseries, get_energy_timeseries +from smart_control.refactor.utils.config import RENDERS_PATH +from smart_control.refactor.utils.constants import DEFAULT_TIME_ZONE logger = logging.getLogger(__name__) @@ -45,8 +45,8 @@ def __init__( render_fn: Optional[Callable] = None, plot_fn: Optional[Callable] = None, clear_output_before_render: bool = True, - time_zone: str = 'US/Pacific', - save_path: str = './renders', + time_zone: str = DEFAULT_TIME_ZONE, + save_path: str = RENDERS_PATH, ): """Initialize the observer. diff --git a/smart_control/refactor/policies/schedule_policy.py b/smart_control/refactor/policies/schedule_policy.py new file mode 100644 index 00000000..8e15f5d8 --- /dev/null +++ b/smart_control/refactor/policies/schedule_policy.py @@ -0,0 +1,257 @@ +from typing import Optional, Union, List, Dict, Tuple +from dataclasses import dataclass +import enum +import logging + +import numpy as np +import pandas as pd +import tensorflow as tf +from tf_agents.trajectories import policy_step +from tf_agents.policies import tf_policy +from tf_agents.typing import types +from tf_agents.environments import tf_py_environment as tf_env +from tf_agents.train.utils import spec_utils + +from smart_control.refactor.utils.time_utils import to_dow, to_hod + + +logger = logging.getLogger(__name__) + + +# Device types that can be controlled +class DeviceType(enum.Enum): + AC = 0 + HWS = 1 + +# Type aliases for clarity +SetpointName = str +SetpointValue = Union[float, int, bool] +ActionSequence = List[Tuple[DeviceType, SetpointName]] + +@dataclass +class ScheduleEvent: + """An event that sets a specific value at a specific time""" + start_time: pd.Timedelta + device: DeviceType + setpoint_name: SetpointName + setpoint_value: SetpointValue + +# A schedule is a list of times and setpoints for devices +Schedule = List[ScheduleEvent] + + +def get_active_setpoint( + schedule: Schedule, + device: DeviceType, + setpoint_name: SetpointName, + timestamp: pd.Timedelta +) -> SetpointValue: + """Find the active setpoint value at a given time""" + logger.debug("Getting active setpoint...") + + # Create a dictionary of {time: value} for the specific device and setpoint + events = { + event.start_time: event.setpoint_value + for event in schedule + if event.device == device and event.setpoint_name == setpoint_name + } + + if not events: + logger.exception("Events is None...") + return None + + # Convert to Series for easier time-based lookup + series = pd.Series(events) + + # Find events that happened at or before the timestamp + prior_events = series.index[series.index <= timestamp] + + # If no prior events, wrap around and take the last event + if prior_events.empty: + return series.iloc[-1] + else: + return series.loc[prior_events[-1]] + +class SchedulePolicy(tf_policy.TFPolicy): + """Policy that selects actions based on time-dependent schedules""" + + def __init__( + self, + time_step_spec, + action_spec: types.NestedTensorSpec, + action_sequence: ActionSequence, + weekday_schedule: Schedule, + weekend_schedule: Schedule, + dow_sin_index: int, + dow_cos_index: int, + hod_sin_index: int, + hod_cos_index: int, + action_normalizers: dict, + local_start_time: pd.Timestamp, + name: Optional[str] = None, + ): + self.weekday_schedule = weekday_schedule + self.weekend_schedule = weekend_schedule + self.dow_sin_index = dow_sin_index + self.dow_cos_index = dow_cos_index + self.hod_sin_index = hod_sin_index + self.hod_cos_index = hod_cos_index + self.action_sequence = action_sequence + self.action_normalizers = action_normalizers + self.local_start_time = local_start_time + self.norm_mean = 0.0 + self.norm_std = 1.0 + + super().__init__( + time_step_spec=time_step_spec, + action_spec=action_spec, + policy_state_spec=(), + info_spec=(), + clip=False, + observation_and_action_constraint_splitter=None, + name=name, + ) + + def _normalize_actions(self, action_map: Dict[Tuple[DeviceType, SetpointName], SetpointValue]) -> Dict: + """Normalize action values using the provided normalizers""" + normalized = {} + for (device, setpoint_name), value in action_map.items(): + # Find the matching normalizer for this setpoint + for normalizer_key, normalizer in self.action_normalizers.items(): + if normalizer_key.endswith(setpoint_name): + normalized[(device, setpoint_name)] = normalizer.agent_value(value) + break + return normalized + + def _get_action_map(self, time_step) -> Dict: + """Determine the appropriate actions based on time""" + observation = time_step.observation + + # Denormalize the time signals + dow_sin = (observation[0][self.dow_sin_index] * self.norm_std) + self.norm_mean + dow_cos = (observation[0][self.dow_cos_index] * self.norm_std) + self.norm_mean + hod_sin = (observation[0][self.hod_sin_index] * self.norm_std) + self.norm_mean + hod_cos = (observation[0][self.hod_cos_index] * self.norm_std) + self.norm_mean + + # Convert to day of week and hour of day + dow = to_dow(dow_sin, dow_cos) + hod = to_hod(hod_sin, hod_cos) + + # Create timestamp + timestamp = pd.Timedelta(hod, unit='hour') + self.local_start_time.utcoffset() + + # Use appropriate schedule based on day type + schedule = self.weekday_schedule if dow < 5 else self.weekend_schedule + + # Get active setpoints for each device/setpoint pair + return { + (device, setpoint): get_active_setpoint(schedule, device, setpoint, timestamp) + for device, setpoint in self.action_sequence + } + + def _action(self, time_step, policy_state, seed): + """Generate the policy action""" + del seed, policy_state + + # Get and normalize actions + action_map = self._get_action_map(time_step) + normalized_map = self._normalize_actions(action_map) + + # Convert to array in the correct order + action_array = np.array([ + normalized_map[(device, setpoint)] + for device, setpoint in self.action_sequence + ], dtype=np.float32) + + # Add batch dimension - this is the key fix + action_array = np.expand_dims(action_array, axis=0) + + return policy_step.PolicyStep(tf.convert_to_tensor(action_array), (), ()) + + +# This is the baseline default policy that we use for benchmarking/initial data collection +def create_baseline_schedule_policy(tf_env: tf_env.TFPyEnvironment): + env = tf_env.pyenv.envs[0] + + _, action_spec, time_step_spec = spec_utils.get_tensor_specs(tf_env) + + hod_cos_index = env._field_names.index('hod_cos_000') + hod_sin_index = env._field_names.index('hod_sin_000') + dow_cos_index = env._field_names.index('dow_cos_000') + dow_sin_index = env._field_names.index('dow_sin_000') + + # Note that temperatures are specified in Kelvin: + weekday_schedule_events = [ + ScheduleEvent( + pd.Timedelta(6, unit='hour'), + DeviceType.AC, + 'supply_air_heating_temperature_setpoint', + 292.0, + ), + ScheduleEvent( + pd.Timedelta(19, unit='hour'), + DeviceType.AC, + 'supply_air_heating_temperature_setpoint', + 285.0, + ), + ScheduleEvent( + pd.Timedelta(6, unit='hour'), + DeviceType.HWS, + 'supply_water_setpoint', + 350.0, + ), + ScheduleEvent( + pd.Timedelta(19, unit='hour'), + DeviceType.HWS, + 'supply_water_setpoint', + 315.0, + ), + ] + + weekend_holiday_schedule_events = [ + ScheduleEvent( + pd.Timedelta(6, unit='hour'), + DeviceType.AC, + 'supply_air_heating_temperature_setpoint', + 285.0, + ), + ScheduleEvent( + pd.Timedelta(19, unit='hour'), + DeviceType.AC, + 'supply_air_heating_temperature_setpoint', + 285.0, + ), + ScheduleEvent( + pd.Timedelta(6, unit='hour'), + DeviceType.HWS, + 'supply_water_setpoint', + 315.0, + ), + ScheduleEvent( + pd.Timedelta(19, unit='hour'), + DeviceType.HWS, + 'supply_water_setpoint', + 315.0, + ), + ] + + local_start_time = env.current_simulation_timestamp.tz_convert(tz='US/Pacific') + + baseline_schedule_policy = SchedulePolicy( + time_step_spec=time_step_spec, + action_spec=action_spec, + action_sequence=[ + (DeviceType.AC, 'supply_air_heating_temperature_setpoint'), + (DeviceType.HWS, 'supply_water_setpoint') + ], + weekday_schedule=weekday_schedule_events, + weekend_schedule=weekend_holiday_schedule_events, + action_normalizers=env._action_normalizers, + hod_cos_index=hod_cos_index, + hod_sin_index=hod_sin_index, + dow_cos_index=dow_cos_index, + dow_sin_index=dow_sin_index, + local_start_time=local_start_time + ) + + return baseline_schedule_policy diff --git a/smart_control/refactor/refactor_test.py b/smart_control/refactor/refactor_test.py index aa3c75a2..37da53ed 100644 --- a/smart_control/refactor/refactor_test.py +++ b/smart_control/refactor/refactor_test.py @@ -74,6 +74,7 @@ # Create the replay buffer # Initialize the manager with your agent's data spec +logger.critical(f"Agent collect_data_spec: {agent.collect_data_spec}") replay_manager = ReplayBufferManager( agent.collect_data_spec, 50000, @@ -99,7 +100,9 @@ def plot_metrics(environment, time_zone): render_observer = RenderingObserver( render_interval_steps=5, environment=collect_tf_env, - render_fn=render_env, plot_fn=plot_metrics, time_zone='US/Pacific' + render_fn=render_env, + plot_fn=plot_metrics, + time_zone='US/Pacific' ) print_observer = PrintStatusObserver( status_interval_steps=1, diff --git a/smart_control/refactor/scripts/populate_starter_buffer.py b/smart_control/refactor/scripts/populate_starter_buffer.py new file mode 100644 index 00000000..0cb10b27 --- /dev/null +++ b/smart_control/refactor/scripts/populate_starter_buffer.py @@ -0,0 +1,145 @@ +#!/usr/bin/env python3 +""" +Script to populate an initial replay buffer for RL training. +This creates a starter buffer with exploration data that can be used +to bootstrap the training process. +""" + +import os +import logging + +import tensorflow as tf +from tf_agents.environments import tf_py_environment +from tf_agents.train import actor +from tf_agents.policies import py_tf_eager_policy +from tf_agents.train.utils import spec_utils + +from smart_control.refactor.observers import (PrintStatusObserver, CompositeObserver) +from smart_control.refactor.utils.config import CONFIG_PATH, OUTPUT_DATA_PATH +from smart_control.learning.reinforcement_learning.sac.learning_utils import load_environment +from smart_control.refactor.replay_buffer.replay_buffer import ReplayBufferManager +from smart_control.refactor.policies.schedule_policy import create_baseline_schedule_policy + +# Configure logging +logging.basicConfig( + level=logging.INFO, + format='[%(levelname)s] [%(filename)s:%(lineno)d] [%(message)s]' +) +logger = logging.getLogger(__name__) + +def populate_replay_buffer( + buffer_capacity=50000, + buffer_path=None, + steps_per_run=100, + num_runs=100 +): + """ + Populates a replay buffer with initial exploration data. + + Args: + buffer_capacity: Maximum size of the replay buffer + buffer_path: Directory to save the replay buffer + steps_per_run: Number of steps per actor run + num_runs: Number of actor runs to perform + use_random_policy: Whether to use a random policy for exploration (True) + or create a SAC agent (False) + """ + # Use the standard config file + scenario_config_path = os.path.join(CONFIG_PATH, "sim_config_4_day.gin") + + # Default buffer path if not provided + if buffer_path is None: + buffer_path = os.path.join(OUTPUT_DATA_PATH, "initial_replay_buffer") + + # Create directory if it doesn't exist + os.makedirs(os.path.dirname(buffer_path), exist_ok=True) + + # Load environment + logger.info("Loading environment from standard config") + collect_env = load_environment(scenario_config_path) + collect_env._metrics_path = None # Collection env doesn't need metrics + collect_env._occupancy_normalization_constant = 125.0 + + # Wrap in TF environment + collect_tf_env = tf_py_environment.TFPyEnvironment(collect_env) + + # Create policy for collection + train_step = tf.Variable(0, trainable=False, dtype=tf.int64) + _, __, time_step_spec = spec_utils.get_tensor_specs(collect_tf_env) + + collection_policy = create_baseline_schedule_policy(collect_tf_env) + + # Initialize replay buffer + logger.info(f"Creating replay buffer at: {buffer_path}") + logger.info(f"Buffer capacity: {buffer_capacity}, Sequence length: 2") + + # Always use sequence_length of 2 + replay_manager = ReplayBufferManager( + time_step_spec, + buffer_capacity, + buffer_path, + sequence_length=2 + ) + + replay_buffer, replay_buffer_observer = replay_manager.create_replay_buffer() + + # Create observers + print_observer = PrintStatusObserver( + status_interval_steps=1, # Print status every 100 steps + environment=collect_tf_env, + replay_buffer=replay_buffer + ) + + # Combine observers + observers = CompositeObserver([print_observer, replay_buffer_observer]) + + # Create collect actor + logger.info("Setting up collect actor") + collect_actor = actor.Actor( + collect_tf_env.pyenv.envs[0], # Use underlying PyEnv + py_tf_eager_policy.PyTFEagerPolicy(collection_policy), + steps_per_run=steps_per_run, + train_step=train_step, + observers=[observers] + ) + + # Run collection + logger.info(f"Starting collection for {num_runs} runs of {steps_per_run} steps each") + total_steps = 0 + + for current_run in range(num_runs): + # Run collection + logger.info(f"Run {current_run+1}/{num_runs} (total steps so far: {total_steps})") + collect_actor.run() + + # Update total steps + total_steps += steps_per_run + + # Checkpoint buffer periodically + logger.info(f"Completed run {current_run+1}/{num_runs}. Checkpointing buffer...") + replay_buffer.py_client.checkpoint() + + # Final checkpoint and stats + logger.info(f"Completed all runs, total steps: {total_steps}. Checkpointing buffer one last time...") + replay_buffer.py_client.checkpoint() + logger.info(f"Final replay buffer size: {replay_buffer.num_frames()} frames") + + return replay_buffer + +if __name__ == "__main__": + import argparse + + parser = argparse.ArgumentParser(description='Populate a replay buffer with initial exploration data') + parser.add_argument('--capacity', type=int, default=50000, help='Replay buffer capacity') + parser.add_argument('--buffer-path', type=str, default=None, help='Path to save the replay buffer') + parser.add_argument('--steps-per-run', type=int, default=10, help='Number of steps per actor run') + parser.add_argument('--num-runs', type=int, default=2, help='Number of actor runs to perform') + + args = parser.parse_args() + + populate_replay_buffer( + buffer_capacity=args.capacity, + buffer_path=args.buffer_path, + steps_per_run=args.steps_per_run, + num_runs=args.num_runs + ) diff --git a/smart_control/refactor/utils/config.py b/smart_control/refactor/utils/config.py index 26cd525a..ad98c41a 100644 --- a/smart_control/refactor/utils/config.py +++ b/smart_control/refactor/utils/config.py @@ -9,6 +9,7 @@ DEFAULT_METRICS_PATH, DEFAULT_OUTPUT_DATA_PATH, DEFAULT_ROOT_DIR, + DEFAULT_RENDERS_PATH ) from smart_control.utils import histogram_reducer from smart_control.utils import controller_reader @@ -19,6 +20,7 @@ METRICS_PATH = DEFAULT_METRICS_PATH OUTPUT_DATA_PATH = DEFAULT_OUTPUT_DATA_PATH ROOT_DIR = DEFAULT_ROOT_DIR +RENDERS_PATH = DEFAULT_RENDERS_PATH def set_global_paths( diff --git a/smart_control/refactor/utils/constants.py b/smart_control/refactor/utils/constants.py index adaed96c..16d0f6b0 100644 --- a/smart_control/refactor/utils/constants.py +++ b/smart_control/refactor/utils/constants.py @@ -14,6 +14,7 @@ # Default directory paths - to be overridden by config DEFAULT_DATA_PATH = "/home/gabriel-user/projects/sbsim/smart_control/configs/resources/sb1/" DEFAULT_CONFIG_PATH = "/home/gabriel-user/projects/sbsim/smart_control/configs/resources/sb1/train_sim_configs/" -DEFAULT_METRICS_PATH = "/home/gabriel-user/projects/sbsim/smart_control/output/metrics/" -DEFAULT_OUTPUT_DATA_PATH = "/home/gabriel-user/projects/sbsim/smart_control/refactor/data/replay_buffers/shared_initial_buffers" +DEFAULT_METRICS_PATH = "/home/gabriel-user/projects/sbsim/smart_control/refactor/experiment_results/metrics/" +DEFAULT_RENDERS_PATH = "/home/gabriel-user/projects/sbsim/smart_control/refactor/experiment_results/renders" +DEFAULT_OUTPUT_DATA_PATH = "/home/gabriel-user/projects/sbsim/smart_control/refactor/data/starter_buffers" DEFAULT_ROOT_DIR = "/home/gabriel-user/projects/sbsim/smart_control/refactor/" diff --git a/smart_control/refactor/utils/time_utils.py b/smart_control/refactor/utils/time_utils.py new file mode 100644 index 00000000..3476cbf0 --- /dev/null +++ b/smart_control/refactor/utils/time_utils.py @@ -0,0 +1,18 @@ +import numpy as np + +def time_from_sin_cos(sin_theta: float, cos_theta: float) -> float: + """Converts sin/cos representation to radians (time angle)""" + if sin_theta >= 0: + return cos_theta >= 0 and np.arccos(cos_theta) or np.pi - np.arcsin(sin_theta) + else: + return cos_theta < 0 and np.pi - np.arcsin(sin_theta) or 2 * np.pi - np.arccos(cos_theta) + +def to_dow(sin_theta: float, cos_theta: float) -> int: + """Converts sin/cos to day of week (0-6)""" + theta = time_from_sin_cos(sin_theta, cos_theta) + return int(np.floor(7 * theta / (2 * np.pi))) + +def to_hod(sin_theta: float, cos_theta: float) -> int: + """Converts sin/cos to hour of day (0-23)""" + theta = time_from_sin_cos(sin_theta, cos_theta) + return int(np.floor(24 * theta / (2 * np.pi))) diff --git a/smart_control/utils/bounded_action_normalizer.py b/smart_control/utils/bounded_action_normalizer.py index b9595b50..08a3708a 100644 --- a/smart_control/utils/bounded_action_normalizer.py +++ b/smart_control/utils/bounded_action_normalizer.py @@ -15,6 +15,7 @@ limitations under the License. """ +import logging import numpy as np from smart_control.models import base_normalizer @@ -24,6 +25,8 @@ # allows the action values to range within a narrow range. ACTION_TOLERANCE = 0.00001 +logger = logging.getLogger(__name__) + class BoundedActionNormalizer(base_normalizer.BaseActionNormalizer): """Translates normalized agent action values into native setpoint values. @@ -103,10 +106,14 @@ def agent_value(self, setpoint_value: float) -> float: Args: setpoint_value: Value in native units. """ + logger.debug(f"setpoint_value: {setpoint_value}") + logger.debug(f"max_native_value: {self._max_native_value}") + logger.debug(f"min_native_value: {self._min_native_value}") if ( setpoint_value > self._max_native_value or setpoint_value < self._min_native_value ): + logger.exception("setpoint_value is out of bounds") raise ValueError( f'setpoint_value {setpoint_value} not within bounds' f' [{self._min_native_value}, {self._max_native_value}]' From 74a9ffa11bd40524a1de20569209153094734403 Mon Sep 17 00:00:00 2001 From: Gabriel Guerra Trigo Date: Thu, 6 Mar 2025 19:17:00 -0500 Subject: [PATCH 6/9] squash: script to populate starter buffer done! --- .../scripts/populate_starter_buffer.py | 29 ++-- smart_control/refactor/utils/__init__.py | 11 -- smart_control/refactor/utils/config.py | 158 +++++++++--------- smart_control/refactor/utils/constants.py | 2 + smart_control/refactor/utils/environment.py | 132 +++++++++++++++ 5 files changed, 227 insertions(+), 105 deletions(-) create mode 100644 smart_control/refactor/utils/environment.py diff --git a/smart_control/refactor/scripts/populate_starter_buffer.py b/smart_control/refactor/scripts/populate_starter_buffer.py index 0cb10b27..b46dc7a3 100644 --- a/smart_control/refactor/scripts/populate_starter_buffer.py +++ b/smart_control/refactor/scripts/populate_starter_buffer.py @@ -16,7 +16,7 @@ from smart_control.refactor.observers import (PrintStatusObserver, CompositeObserver) from smart_control.refactor.utils.config import CONFIG_PATH, OUTPUT_DATA_PATH -from smart_control.learning.reinforcement_learning.sac.learning_utils import load_environment +from smart_control.refactor.utils.environment import create_and_setup_environment from smart_control.refactor.replay_buffer.replay_buffer import ReplayBufferManager from smart_control.refactor.policies.schedule_policy import create_baseline_schedule_policy @@ -29,7 +29,7 @@ def populate_replay_buffer( buffer_capacity=50000, - buffer_path=None, + buffer_name=None, steps_per_run=100, num_runs=100 ): @@ -38,27 +38,26 @@ def populate_replay_buffer( Args: buffer_capacity: Maximum size of the replay buffer - buffer_path: Directory to save the replay buffer + buffer_name: Name with which to safe replay buffer. Buffer will be at + smart_control/refactor/data/starter_buffers/{buffer_name} steps_per_run: Number of steps per actor run num_runs: Number of actor runs to perform - use_random_policy: Whether to use a random policy for exploration (True) - or create a SAC agent (False) """ - # Use the standard config file scenario_config_path = os.path.join(CONFIG_PATH, "sim_config_4_day.gin") - # Default buffer path if not provided - if buffer_path is None: - buffer_path = os.path.join(OUTPUT_DATA_PATH, "initial_replay_buffer") + buffer_path = os.path.join(OUTPUT_DATA_PATH, buffer_name) # Create directory if it doesn't exist - os.makedirs(os.path.dirname(buffer_path), exist_ok=True) + try: + os.makedirs(os.path.dirname(buffer_path), exist_ok=False) + except FileExistsError: + logger.exception("This buffer path already exists. This would override the existing buffer. \ + Please use another name") + raise FileExistsError("Buffer name already exists, would be overriden") # Load environment logger.info("Loading environment from standard config") - collect_env = load_environment(scenario_config_path) - collect_env._metrics_path = None # Collection env doesn't need metrics - collect_env._occupancy_normalization_constant = 125.0 + collect_env = create_and_setup_environment(scenario_config_path, metrics_path=None) # Wrap in TF environment collect_tf_env = tf_py_environment.TFPyEnvironment(collect_env) @@ -131,7 +130,7 @@ def populate_replay_buffer( parser = argparse.ArgumentParser(description='Populate a replay buffer with initial exploration data') parser.add_argument('--capacity', type=int, default=50000, help='Replay buffer capacity') - parser.add_argument('--buffer-path', type=str, default=None, help='Path to save the replay buffer') + parser.add_argument('--buffer-name', type=str, required=True, help='Name to identify the saved replay buffer') parser.add_argument('--steps-per-run', type=int, default=10, help='Number of steps per actor run') parser.add_argument('--num-runs', type=int, default=2, help='Number of actor runs to perform') @@ -139,7 +138,7 @@ def populate_replay_buffer( populate_replay_buffer( buffer_capacity=args.capacity, - buffer_path=args.buffer_path, + buffer_name=args.buffer_name, steps_per_run=args.steps_per_run, num_runs=args.num_runs ) diff --git a/smart_control/refactor/utils/__init__.py b/smart_control/refactor/utils/__init__.py index 8692ab8b..db6ea7c9 100644 --- a/smart_control/refactor/utils/__init__.py +++ b/smart_control/refactor/utils/__init__.py @@ -1,14 +1,3 @@ -from smart_control.refactor.utils.config import ( - load_environment, - get_histogram_reducer, - get_reset_temp_values, - get_histogram_path, - get_zone_path, - get_metrics_path, - get_weather_path, - remap_filepath, -) - from smart_control.refactor.utils.metrics import ( compute_avg_return, ) diff --git a/smart_control/refactor/utils/config.py b/smart_control/refactor/utils/config.py index ad98c41a..e9f13396 100644 --- a/smart_control/refactor/utils/config.py +++ b/smart_control/refactor/utils/config.py @@ -70,100 +70,100 @@ def remap_filepath(filepath: str) -> str: return filepath -@gin.configurable -def get_histogram_path() -> str: - """Get path to histogram data. +# @gin.configurable +# def get_histogram_path() -> str: +# """Get path to histogram data. - Returns: - Path to histogram data. - """ - return DATA_PATH +# Returns: +# Path to histogram data. +# """ +# return DATA_PATH -@gin.configurable -def get_reset_temp_values() -> np.ndarray: - """Get reset temperature values. +# @gin.configurable +# def get_reset_temp_values() -> np.ndarray: +# """Get reset temperature values. - Returns: - Reset temperature values. - """ - reset_temps_filepath = remap_filepath( - os.path.join(DATA_PATH, "reset_temps.npy") - ) +# Returns: +# Reset temperature values. +# """ +# reset_temps_filepath = remap_filepath( +# os.path.join(DATA_PATH, "reset_temps.npy") +# ) - return np.load(reset_temps_filepath) +# return np.load(reset_temps_filepath) -@gin.configurable -def get_zone_path() -> str: - """Get path to zone data. +# @gin.configurable +# def get_zone_path() -> str: +# """Get path to zone data. - Returns: - Path to zone data. - """ - return remap_filepath( - os.path.join(DATA_PATH, "double_resolution_zone_1_2.npy") - ) +# Returns: +# Path to zone data. +# """ +# return remap_filepath( +# os.path.join(DATA_PATH, "double_resolution_zone_1_2.npy") +# ) -@gin.configurable -def get_metrics_path() -> str: - """Get path to metrics. +# @gin.configurable +# def get_metrics_path() -> str: +# """Get path to metrics. - Returns: - Path to metrics. - """ - return os.path.join(METRICS_PATH, "metrics") +# Returns: +# Path to metrics. +# """ +# return os.path.join(METRICS_PATH, "metrics") -@gin.configurable -def get_weather_path() -> str: - """Get path to weather data. +# @gin.configurable +# def get_weather_path() -> str: +# """Get path to weather data. - Returns: - Path to weather data. - """ - return remap_filepath(os.path.join(DATA_PATH, "local_weather_moffett_field_20230701_20231122.csv")) +# Returns: +# Path to weather data. +# """ +# return remap_filepath(os.path.join(DATA_PATH, "local_weather_moffett_field_20230701_20231122.csv")) -def load_environment(gin_config_file: str) -> Any: - """Load environment from gin config file. +# def load_environment(gin_config_file: str) -> Any: +# """Load environment from gin config file. - Args: - gin_config_file: Path to gin config file. +# Args: +# gin_config_file: Path to gin config file. - Returns: - Environment. - """ - # Import here to avoid circular imports - from smart_control.environment.environment import Environment - - with gin.unlock_config(): - gin.clear_config() - gin.parse_config_file(gin_config_file) - return Environment() # pylint: disable=no-value-for-parameter - - -@gin.configurable -def get_histogram_reducer() -> Any: - """Get histogram reducer. - - Returns: - Histogram reducer. - """ - - histogram_parameters_tuples = ( - ('zone_air_temperature_sensor', (285., 286., 287., 288, 289., 290., 291., - 292., 293., 294., 295., 296., 297., 298., 299., 300., 301, 302, 303)), - ('supply_air_damper_percentage_command', (0.0, 0.2, 0.4, 0.6, 0.8, 1.0)), - ('supply_air_flowrate_setpoint', (0., 0.05, .1, .2, .3, .4, .5, .7, .9)), - ) - - reader = controller_reader.ProtoReader(DATA_PATH) - - hr = histogram_reducer.HistogramReducer( - histogram_parameters_tuples=histogram_parameters_tuples, - reader=reader, - normalize_reduce=True, - ) - return hr +# Returns: +# Environment. +# """ +# # Import here to avoid circular imports +# from smart_control.environment.environment import Environment + +# with gin.unlock_config(): +# gin.clear_config() +# gin.parse_config_file(gin_config_file) +# return Environment() # pylint: disable=no-value-for-parameter + + +# @gin.configurable +# def get_histogram_reducer() -> Any: +# """Get histogram reducer. + +# Returns: +# Histogram reducer. +# """ + +# histogram_parameters_tuples = ( +# ('zone_air_temperature_sensor', (285., 286., 287., 288, 289., 290., 291., +# 292., 293., 294., 295., 296., 297., 298., 299., 300., 301, 302, 303)), +# ('supply_air_damper_percentage_command', (0.0, 0.2, 0.4, 0.6, 0.8, 1.0)), +# ('supply_air_flowrate_setpoint', (0., 0.05, .1, .2, .3, .4, .5, .7, .9)), +# ) + +# reader = controller_reader.ProtoReader(DATA_PATH) + +# hr = histogram_reducer.HistogramReducer( +# histogram_parameters_tuples=histogram_parameters_tuples, +# reader=reader, +# normalize_reduce=True, +# ) +# return hr diff --git a/smart_control/refactor/utils/constants.py b/smart_control/refactor/utils/constants.py index 16d0f6b0..7294200d 100644 --- a/smart_control/refactor/utils/constants.py +++ b/smart_control/refactor/utils/constants.py @@ -18,3 +18,5 @@ DEFAULT_RENDERS_PATH = "/home/gabriel-user/projects/sbsim/smart_control/refactor/experiment_results/renders" DEFAULT_OUTPUT_DATA_PATH = "/home/gabriel-user/projects/sbsim/smart_control/refactor/data/starter_buffers" DEFAULT_ROOT_DIR = "/home/gabriel-user/projects/sbsim/smart_control/refactor/" + +DEFAULT_OCCUPANCY_NORMALIZATION_CONSTANT = 125.0 diff --git a/smart_control/refactor/utils/environment.py b/smart_control/refactor/utils/environment.py new file mode 100644 index 00000000..22710969 --- /dev/null +++ b/smart_control/refactor/utils/environment.py @@ -0,0 +1,132 @@ +import gin +import numpy as np +import os +from typing import Any + +from smart_control.simulator.weather_controller import ReplayWeatherController +from smart_control.simulator.stochastic_convection_simulator import StochasticConvectionSimulator +from smart_control.simulator.building import MaterialProperties +from smart_control.simulator.air_handler import AirHandler +from smart_control.simulator.boiler import Boiler +from smart_control.simulator.hvac_floorplan_based import FloorPlanBasedHvac +from smart_control.utils.environment_utils import to_timestamp +from smart_control.simulator.tf_simulator import TFSimulator +from smart_control.simulator.simulator_building import SimulatorBuilding +from smart_control.reward.setpoint_energy_carbon_regret import SetpointEnergyCarbonRegretFunction +from smart_control.simulator.randomized_arrival_departure_occupancy import RandomizedArrivalDepartureOccupancy +from smart_control.reward.electricity_energy_cost import ElectricityEnergyCost +from smart_control.reward.natural_gas_energy_cost import NaturalGasEnergyCost +from smart_control.utils.observation_normalizer import StandardScoreObservationNormalizer +from smart_control.utils.controller_writer import ProtoWriterFactory + +from smart_control.refactor.utils.config import DATA_PATH, METRICS_PATH, remap_filepath +from smart_control.refactor.utils.constants import DEFAULT_OCCUPANCY_NORMALIZATION_CONSTANT +from smart_control.environment.environment import Environment +from smart_control.utils import histogram_reducer +from smart_control.utils import controller_reader + + +@gin.configurable +def get_histogram_path() -> str: + """Get path to histogram data. + + Returns: + Path to histogram data. + """ + return DATA_PATH + + +@gin.configurable +def get_reset_temp_values() -> np.ndarray: + """Get reset temperature values. + + Returns: + Reset temperature values. + """ + reset_temps_filepath = remap_filepath( + os.path.join(DATA_PATH, "reset_temps.npy") + ) + + return np.load(reset_temps_filepath) + + +@gin.configurable +def get_zone_path() -> str: + """Get path to zone data. + + Returns: + Path to zone data. + """ + return remap_filepath( + os.path.join(DATA_PATH, "double_resolution_zone_1_2.npy") + ) + + +@gin.configurable +def get_metrics_path() -> str: + """Get path to metrics. + + Returns: + Path to metrics. + """ + return os.path.join(METRICS_PATH, "metrics") + + +@gin.configurable +def get_weather_path() -> str: + """Get path to weather data. + + Returns: + Path to weather data. + """ + return remap_filepath(os.path.join(DATA_PATH, "local_weather_moffett_field_20230701_20231122.csv")) + + +@gin.configurable +def get_histogram_reducer() -> Any: + """Get histogram reducer. + + Returns: + Histogram reducer. + """ + + histogram_parameters_tuples = ( + ('zone_air_temperature_sensor', (285., 286., 287., 288, 289., 290., 291., + 292., 293., 294., 295., 296., 297., 298., 299., 300., 301, 302, 303)), + ('supply_air_damper_percentage_command', (0.0, 0.2, 0.4, 0.6, 0.8, 1.0)), + ('supply_air_flowrate_setpoint', (0., 0.05, .1, .2, .3, .4, .5, .7, .9)), + ) + + reader = controller_reader.ProtoReader(DATA_PATH) + + hr = histogram_reducer.HistogramReducer( + histogram_parameters_tuples=histogram_parameters_tuples, + reader=reader, + normalize_reduce=True, + ) + return hr + + +def load_environment(gin_config_file: str): + """Returns an Environment from a config file.""" + # Global definition is required by Gin library to instantiate Environment. + # global environment # pylint: disable=global-variable-not-assigned + + with gin.unlock_config(): + gin.clear_config() + gin.parse_config_file(gin_config_file) + return Environment() # pylint: disable=no-value-for-parameter + + +def create_and_setup_environment( + gin_config_file: str, + metrics_path: str = None, + occupancy_normalization_constant: float = DEFAULT_OCCUPANCY_NORMALIZATION_CONSTANT +): + """Creates and sets up the environment.""" + env = load_environment(gin_config_file) + env._metrics_path = metrics_path + env._occupancy_normalization_constant = occupancy_normalization_constant + + return env + \ No newline at end of file From 8e6a2f08fd83a0d478033c476f0b36e7ed053dda Mon Sep 17 00:00:00 2001 From: Gabriel Guerra Trigo Date: Sat, 8 Mar 2025 01:07:39 -0500 Subject: [PATCH 7/9] squash. Still haven't debugged the error in the train script --- ...ig_1_day copy.gin => sim_config_1_day.gin} | 0 smart_control/refactor/agents/base_agent.py | 7 +- smart_control/refactor/refactor_test.py | 3 +- .../refactor/replay_buffer/replay_buffer.py | 64 +++- .../scripts/populate_starter_buffer.py | 28 +- smart_control/refactor/scripts/train.py | 288 ++++++++++++++++++ smart_control/refactor/utils/config.py | 108 +------ smart_control/refactor/utils/constants.py | 1 + 8 files changed, 388 insertions(+), 111 deletions(-) rename smart_control/configs/resources/sb1/train_sim_configs/{sim_config_1_day copy.gin => sim_config_1_day.gin} (100%) diff --git a/smart_control/configs/resources/sb1/train_sim_configs/sim_config_1_day copy.gin b/smart_control/configs/resources/sb1/train_sim_configs/sim_config_1_day.gin similarity index 100% rename from smart_control/configs/resources/sb1/train_sim_configs/sim_config_1_day copy.gin rename to smart_control/configs/resources/sb1/train_sim_configs/sim_config_1_day.gin diff --git a/smart_control/refactor/agents/base_agent.py b/smart_control/refactor/agents/base_agent.py index 032c1db7..61cee7b0 100644 --- a/smart_control/refactor/agents/base_agent.py +++ b/smart_control/refactor/agents/base_agent.py @@ -87,7 +87,7 @@ def train(self, experience) -> Dict[str, Any]: """ loss_info = self._agent.train(experience) - result = {'loss': loss_info.loss.numpy()} + result = {'loss': loss_info.loss} # Handle different types of extra info that might be returned by different agents if hasattr(loss_info, 'extra'): @@ -111,6 +111,11 @@ def train(self, experience) -> Dict[str, Any]: return result + # Expose the underlying agent directly for checkpointing + @property + def agent(self): + return self._agent + @property def policy(self) -> tf_policy.TFPolicy: """Returns the agent's main policy.""" diff --git a/smart_control/refactor/refactor_test.py b/smart_control/refactor/refactor_test.py index 37da53ed..9b1cb412 100644 --- a/smart_control/refactor/refactor_test.py +++ b/smart_control/refactor/refactor_test.py @@ -101,8 +101,7 @@ def plot_metrics(environment, time_zone): render_interval_steps=5, environment=collect_tf_env, render_fn=render_env, - plot_fn=plot_metrics, - time_zone='US/Pacific' + plot_fn=plot_metrics ) print_observer = PrintStatusObserver( status_interval_steps=1, diff --git a/smart_control/refactor/replay_buffer/replay_buffer.py b/smart_control/refactor/replay_buffer/replay_buffer.py index 762434df..f94956a5 100644 --- a/smart_control/refactor/replay_buffer/replay_buffer.py +++ b/smart_control/refactor/replay_buffer/replay_buffer.py @@ -25,6 +25,10 @@ def __init__(self, data_spec, capacity, checkpoint_dir, sequence_length=2): self.checkpoint_dir = checkpoint_dir self.sequence_length = sequence_length self.table_name = 'uniform_table' + self._is_initialized = False + self.server = None + self.replay_buffer = None + self.observer = None def create_replay_buffer(self): # Create the table @@ -62,6 +66,64 @@ def create_replay_buffer(self): stride_length=1 ) + # Save as attributes and mark as initialized + self.server = reverb_server + self.replay_buffer = replay_buffer + self.observer = observer + self._is_initialized = True + + return replay_buffer, observer + + def load_replay_buffer(self) -> Tuple[reverb_replay_buffer.ReverbReplayBuffer, reverb_utils.ReverbAddTrajectoryObserver]: + """Load an existing replay buffer from a saved checkpoint. + + This method reconstructs the replay buffer, server, and observer based on the + saved state in the checkpoint directory. + + Returns: + A tuple of (replay_buffer, observer). + """ + # Create the table with the same parameters as before + table = reverb.Table( + self.table_name, + max_size=self.capacity, + sampler=reverb.selectors.Uniform(), + remover=reverb.selectors.Fifo(), + rate_limiter=reverb.rate_limiters.MinSize(1), + ) + + # Create the checkpointer pointing to the checkpoint directory + reverb_checkpointer = reverb.platform.checkpointers_lib.DefaultCheckpointer( + path=self.checkpoint_dir + ) + + # Create the server with the existing table and checkpointer. + reverb_server = reverb.Server( + [table], port=None, checkpointer=reverb_checkpointer + ) + + # Create the replay buffer and observer using the restored server. + replay_buffer = reverb_replay_buffer.ReverbReplayBuffer( + self.data_spec, + sequence_length=self.sequence_length, + table_name=self.table_name, + local_server=reverb_server, + ) + + observer = reverb_utils.ReverbAddTrajectoryObserver( + replay_buffer.py_client, + self.table_name, + sequence_length=self.sequence_length, + stride_length=1 + ) + + # Save as attributes and mark as initialized. + self.server = reverb_server + self.replay_buffer = replay_buffer + self.observer = observer + self._is_initialized = True + + logging.info("Replay buffer loaded from checkpoint") return replay_buffer, observer def get_replay_buffer_and_observer(self) -> Tuple[reverb_replay_buffer.ReverbReplayBuffer, reverb_utils.ReverbAddTrajectoryObserver]: @@ -86,7 +148,7 @@ def get_dataset(self, batch_size: int = 64, num_steps: Optional[int] = None) -> A TensorFlow dataset that samples from the replay buffer. """ if not self._is_initialized: - raise RuntimeError("Replay buffer not initialized. Call create_replay_buffer first.") + raise RuntimeError("Replay buffer not initialized. Call create_replay_buffer or load_replay_buffer first.") if num_steps is None: num_steps = self.sequence_length diff --git a/smart_control/refactor/scripts/populate_starter_buffer.py b/smart_control/refactor/scripts/populate_starter_buffer.py index b46dc7a3..351ef2e4 100644 --- a/smart_control/refactor/scripts/populate_starter_buffer.py +++ b/smart_control/refactor/scripts/populate_starter_buffer.py @@ -1,4 +1,3 @@ -#!/usr/bin/env python3 """ Script to populate an initial replay buffer for RL training. This creates a starter buffer with exploration data that can be used @@ -13,6 +12,7 @@ from tf_agents.train import actor from tf_agents.policies import py_tf_eager_policy from tf_agents.train.utils import spec_utils +from tf_agents.trajectories import trajectory from smart_control.refactor.observers import (PrintStatusObserver, CompositeObserver) from smart_control.refactor.utils.config import CONFIG_PATH, OUTPUT_DATA_PATH @@ -43,13 +43,15 @@ def populate_replay_buffer( steps_per_run: Number of steps per actor run num_runs: Number of actor runs to perform """ - scenario_config_path = os.path.join(CONFIG_PATH, "sim_config_4_day.gin") + scenario_config_path = os.path.join(CONFIG_PATH, "sim_config_1_day.gin") buffer_path = os.path.join(OUTPUT_DATA_PATH, buffer_name) + logger.info("Buffer path: %s", buffer_path) # Create directory if it doesn't exist try: - os.makedirs(os.path.dirname(buffer_path), exist_ok=False) + os.makedirs(os.path.dirname(buffer_path + '/anything-here'), exist_ok=False) # added '/anything-here' such that + # the path is a directory except FileExistsError: logger.exception("This buffer path already exists. This would override the existing buffer. \ Please use another name") @@ -64,7 +66,7 @@ def populate_replay_buffer( # Create policy for collection train_step = tf.Variable(0, trainable=False, dtype=tf.int64) - _, __, time_step_spec = spec_utils.get_tensor_specs(collect_tf_env) + observation_spec, action_spec, time_step_spec = spec_utils.get_tensor_specs(collect_tf_env) collection_policy = create_baseline_schedule_policy(collect_tf_env) @@ -72,9 +74,23 @@ def populate_replay_buffer( logger.info(f"Creating replay buffer at: {buffer_path}") logger.info(f"Buffer capacity: {buffer_capacity}, Sequence length: 2") - # Always use sequence_length of 2 + # Get the policy's info spec + policy_info_spec = collection_policy.info_spec + + # Create a trajectory spec properly + collect_data_spec = trajectory.Trajectory( + step_type=time_step_spec.step_type, + observation=time_step_spec.observation, + action=action_spec, + policy_info=policy_info_spec, + next_step_type=time_step_spec.step_type, + reward=time_step_spec.reward, + discount=time_step_spec.discount + ) + + # Use this data spec when creating the replay buffer replay_manager = ReplayBufferManager( - time_step_spec, + collect_data_spec, # Use the complete data spec buffer_capacity, buffer_path, sequence_length=2 diff --git a/smart_control/refactor/scripts/train.py b/smart_control/refactor/scripts/train.py index e69de29b..227a4005 100644 --- a/smart_control/refactor/scripts/train.py +++ b/smart_control/refactor/scripts/train.py @@ -0,0 +1,288 @@ +""" +Script to train a reinforcement learning agent using a pre-populated replay buffer. +This script sets up the training process with separate collection and evaluation components. +""" + +import os +os.environ['WRAPT_DISABLE_EXTENSIONS'] = 'true' +import logging +import time +from datetime import datetime + +import tensorflow as tf +from tf_agents.environments import tf_py_environment +from tf_agents.metrics import tf_metrics +from tf_agents.policies import greedy_policy +from tf_agents.train import actor, learner, triggers +from tf_agents.train.utils import spec_utils +from tf_agents.policies import py_tf_eager_policy + +from smart_control.refactor.observers import (PrintStatusObserver, CompositeObserver) +from smart_control.refactor.utils.config import CONFIG_PATH, EXPERIMENT_RESULTS_PATH +from smart_control.refactor.utils.environment import create_and_setup_environment +from smart_control.refactor.replay_buffer.replay_buffer import ReplayBufferManager +from smart_control.refactor.agents.sac_agent import create_sac_agent + +# Configure logging +logging.basicConfig( + level=logging.INFO, + format='[%(levelname)s] [%(filename)s:%(lineno)d] [%(message)s]' +) +logger = logging.getLogger(__name__) + +def train_agent( + starter_buffer_path, + experiment_name, + agent_type='sac', + train_iterations=100000, + collect_steps_per_iteration=1, + batch_size=256, + log_interval=100, + eval_interval=1000, + num_eval_episodes=5 +): + """ + Trains a reinforcement learning agent using a pre-populated replay buffer. + + Args: + buffer_path: Path to the pre-populated replay buffer + agent_type: Type of agent to train ('sac' or 'td3') + train_iterations: Number of training iterations + collect_steps_per_iteration: Number of collection steps per training iteration + batch_size: Batch size for training + log_interval: Interval for logging training metrics + eval_interval: Interval for evaluating the agent + num_eval_episodes: Number of episodes for evaluation + summary_dir: Directory to save TensorBoard summaries + """ + # Set up scenario config path + scenario_config_path = os.path.join(CONFIG_PATH, "sim_config_1_day.gin") + + # Generate timestamp for summary directory + current_time = datetime.now().strftime("%Y_%m_%d-%H_%M") + summary_dir = os.path.join(EXPERIMENT_RESULTS_PATH, f"{experiment_name}_{current_time}") + logger.info(f"Experiment results will be saved to {summary_dir}") + + try: + os.makedirs(summary_dir, exist_ok=False) + except FileExistsError: + logger.exception(f"Directory {summary_dir} already exists. Exiting.") + raise FileExistsError(f"Directory {summary_dir} already exists. Exiting.") + + train_summary_writer = tf.summary.create_file_writer(os.path.join(summary_dir, 'train')) + eval_summary_writer = tf.summary.create_file_writer(os.path.join(summary_dir, 'eval')) + logger.info("Created summary writers") + + # Create train and eval environments + logger.info("Creating train and eval environments") + train_env = create_and_setup_environment(scenario_config_path, metrics_path=os.path.join(summary_dir, 'metrics')) + eval_env = create_and_setup_environment(scenario_config_path, metrics_path=None) + + + # Wrap in TF environments + train_tf_env = tf_py_environment.TFPyEnvironment(train_env) + eval_tf_env = tf_py_environment.TFPyEnvironment(eval_env) + + # Create global step for training + train_step = tf.Variable(0, trainable=False, dtype=tf.int64) + + # Get specs + _, action_spec, time_step_spec = spec_utils.get_tensor_specs(train_tf_env) + + # Create agent based on type + logger.info(f"Creating {agent_type} agent") + if agent_type.lower() == 'sac': + logger.info("Creating SAC agent") + agent = create_sac_agent(time_step_spec=time_step_spec, action_spec=action_spec) + else: + logger.exception(f"Unsupported agent type: {agent_type}. Choose from 'sac' or 'td3'.") + raise ValueError(f"Unsupported agent type: {agent_type}. Choose from 'sac' or 'td3'.") + + # Create policies + collect_policy = agent.collect_policy + eval_policy = greedy_policy.GreedyPolicy(agent.policy) + + # Set up metrics + train_metrics = [ + tf_metrics.NumberOfEpisodes(), + tf_metrics.EnvironmentSteps(), + tf_metrics.AverageReturnMetric(), + tf_metrics.AverageEpisodeLengthMetric(), + ] + + eval_metrics = [ + tf_metrics.AverageReturnMetric(buffer_size=num_eval_episodes), + tf_metrics.AverageEpisodeLengthMetric(buffer_size=num_eval_episodes) + ] + + # Load replay buffer from existing path + logger.info(f"Instantiating replay buffer manager") + # Create replay buffer manager and load existing buffer + replay_manager = ReplayBufferManager( + agent.collect_data_spec, + 50000, # Use default capacity + starter_buffer_path, + sequence_length=2 + ) + logger.info(f"Replay buffer size before loading starter buffer: {replay_manager.num_frames()} frames") + + logger.info(f"Loading starter replay buffer from {starter_buffer_path}") + replay_buffer, replay_buffer_observer = replay_manager.load_replay_buffer() + logger.info(f"Replay buffer size after loading starter buffer: {replay_manager.num_frames()} frames") + + + # Create dataset for sampling from the buffer + logger.info("Creating dataset for sampling from replay buffer") + dataset = replay_buffer.as_dataset( + sample_batch_size=batch_size, + num_steps=2, + num_parallel_calls=3 + ).prefetch(3) + + + # Create print observer for collection + print_observer = PrintStatusObserver( + status_interval_steps=100, # Print status every 100 steps + environment=train_tf_env, + replay_buffer=replay_buffer + ) + + # Combine observers + collect_observers = CompositeObserver([print_observer, replay_buffer_observer] + train_metrics) + + # Create collect actor + logger.info("Creating collect and eval actors") + collect_actor = actor.Actor( + train_env, + py_tf_eager_policy.PyTFEagerPolicy(collect_policy), + train_step, + steps_per_run=collect_steps_per_iteration, + observers=[collect_observers] + ) + + # Create eval actor + logger.info("Creating eval actor") + eval_actor = actor.Actor( + eval_env, + eval_policy, + train_step, + episodes_per_run=num_eval_episodes, + observers=eval_metrics + ) + + # Create learner + logger.info("Creating learner") + agent_learner = learner.Learner( + root_dir=summary_dir, + train_step=train_step, + agent=agent._agent, + experience_dataset_fn=lambda: dataset, + triggers=[ + triggers.PolicySavedModelTrigger( + os.path.join(summary_dir, 'policies'), + agent, + train_step, + interval=eval_interval + ), + triggers.StepPerSecondLogTrigger(train_step, interval=log_interval) + ] + ) + + + # Training loop + logger.info(f"Starting training for {train_iterations} iterations") + + # Reset metrics + for m in train_metrics: + m.reset() + + + # Initial evaluation + logger.info("Performing initial evaluation") + collect_actor.run() + for m in eval_metrics: + with eval_summary_writer.as_default(): + tf.summary.scalar(m.name, m.result(), step=train_step.numpy()) + logger.info(f"{m.name}: {m.result()}") + + + logger.info("Done!") + return + + # Main training loop + for i in range(train_iterations): + # Collect experience + collect_actor.run() + + # Train the agent + loss_info = agent_learner.run(iterations=1) + + # Log metrics periodically + if i % log_interval == 0: + logger.info(f"Iteration {i}/{train_iterations}") + logger.info(f"Step: {train_step.numpy()}") + + with train_summary_writer.as_default(): + for m in train_metrics: + tf.summary.scalar(m.name, m.result(), step=train_step.numpy()) + logger.info(f"{m.name}: {m.result()}") + + if loss_info: + for name, loss in loss_info.items(): + tf.summary.scalar(f"losses/{name}", loss, step=train_step.numpy()) + logger.info(f"Loss/{name}: {loss}") + + # Evaluate periodically + if i % eval_interval == 0: + logger.info(f"Evaluating at iteration {i}") + eval_actor.run() + + with eval_summary_writer.as_default(): + for m in eval_metrics: + tf.summary.scalar(m.name, m.result(), step=train_step.numpy()) + logger.info(f"Eval {m.name}: {m.result()}") + + # Checkpoint replay buffer periodically + if i % 1000 == 0: + logger.info("Checkpointing replay buffer") + replay_buffer.py_client.checkpoint() + + # Final checkpoint and evaluation + logger.info("Training complete. Performing final evaluation and checkpointing.") + replay_buffer.py_client.checkpoint() + eval_actor.run() + + for m in eval_metrics: + logger.info(f"Final Eval {m.name}: {m.result()}") + + logger.info(f"Agent training completed. Saved models in {summary_dir}") + return agent + +if __name__ == "__main__": + import argparse + + parser = argparse.ArgumentParser(description='Train a reinforcement learning agent using a pre-populated replay buffer') + parser.add_argument('--starter-buffer-path', type=str, required=True, help='Path to the starter replay buffer') + parser.add_argument('--agent-type', type=str, default='sac', choices=['sac', 'td3'], + help='Type of agent to train (sac or td3)') + parser.add_argument('--train-iterations', type=int, default=100000, help='Number of training iterations') + parser.add_argument('--collect-steps-per-training-iteration', type=int, default=1, help='Number of collection steps per iteration') + parser.add_argument('--batch-size', type=int, default=256, help='Batch size for training') + parser.add_argument('--eval-interval', type=int, default=1000, help='Interval for evaluating the agent') + parser.add_argument('--num-eval-episodes', type=int, default=1, help='Number of episodes for evaluation') + parser.add_argument('--log-interval', type=int, default=100, help='Interval for logging training metrics') + parser.add_argument('--experiment-name', type=str, required=True, help='Name of the experiment. Will be used to save TensorBoard summaries') + + args = parser.parse_args() + + train_agent( + starter_buffer_path=args.starter_buffer_path, + experiment_name=args.experiment_name, + agent_type=args.agent_type, + train_iterations=args.train_iterations, + collect_steps_per_iteration=args.collect_steps_per_training_iteration, + batch_size=args.batch_size, + eval_interval=args.eval_interval, + num_eval_episodes=args.num_eval_episodes, + log_interval=args.log_interval, + ) \ No newline at end of file diff --git a/smart_control/refactor/utils/config.py b/smart_control/refactor/utils/config.py index e9f13396..b33e3db5 100644 --- a/smart_control/refactor/utils/config.py +++ b/smart_control/refactor/utils/config.py @@ -9,7 +9,8 @@ DEFAULT_METRICS_PATH, DEFAULT_OUTPUT_DATA_PATH, DEFAULT_ROOT_DIR, - DEFAULT_RENDERS_PATH + DEFAULT_RENDERS_PATH, + DEFAULT_EXPERIMENT_RESULTS_PATH ) from smart_control.utils import histogram_reducer from smart_control.utils import controller_reader @@ -21,6 +22,7 @@ OUTPUT_DATA_PATH = DEFAULT_OUTPUT_DATA_PATH ROOT_DIR = DEFAULT_ROOT_DIR RENDERS_PATH = DEFAULT_RENDERS_PATH +EXPERIMENT_RESULTS_PATH = DEFAULT_EXPERIMENT_RESULTS_PATH def set_global_paths( @@ -29,6 +31,7 @@ def set_global_paths( metrics_path: Optional[str] = None, output_data_path: Optional[str] = None, root_dir: Optional[str] = None, + experiment_results_path: Optional[str] = None ) -> None: """Set global path variables. @@ -51,9 +54,11 @@ def set_global_paths( OUTPUT_DATA_PATH = output_data_path if root_dir is not None: ROOT_DIR = root_dir + if experiment_results_path is not None: + EXPERIMENT_RESULTS_PATH = experiment_results_path # Create directories if they don't exist - for path in [DATA_PATH, CONFIG_PATH, METRICS_PATH, OUTPUT_DATA_PATH, ROOT_DIR]: + for path in [DATA_PATH, CONFIG_PATH, METRICS_PATH, OUTPUT_DATA_PATH, ROOT_DIR, EXPERIMENT_RESULTS_PATH]: os.makedirs(path, exist_ok=True) @@ -68,102 +73,3 @@ def remap_filepath(filepath: str) -> str: """ # This function can be extended to handle more complex filepath remapping return filepath - - -# @gin.configurable -# def get_histogram_path() -> str: -# """Get path to histogram data. - -# Returns: -# Path to histogram data. -# """ -# return DATA_PATH - - -# @gin.configurable -# def get_reset_temp_values() -> np.ndarray: -# """Get reset temperature values. - -# Returns: -# Reset temperature values. -# """ -# reset_temps_filepath = remap_filepath( -# os.path.join(DATA_PATH, "reset_temps.npy") -# ) - -# return np.load(reset_temps_filepath) - - -# @gin.configurable -# def get_zone_path() -> str: -# """Get path to zone data. - -# Returns: -# Path to zone data. -# """ -# return remap_filepath( -# os.path.join(DATA_PATH, "double_resolution_zone_1_2.npy") -# ) - - -# @gin.configurable -# def get_metrics_path() -> str: -# """Get path to metrics. - -# Returns: -# Path to metrics. -# """ -# return os.path.join(METRICS_PATH, "metrics") - - -# @gin.configurable -# def get_weather_path() -> str: -# """Get path to weather data. - -# Returns: -# Path to weather data. -# """ -# return remap_filepath(os.path.join(DATA_PATH, "local_weather_moffett_field_20230701_20231122.csv")) - - -# def load_environment(gin_config_file: str) -> Any: -# """Load environment from gin config file. - -# Args: -# gin_config_file: Path to gin config file. - -# Returns: -# Environment. -# """ -# # Import here to avoid circular imports -# from smart_control.environment.environment import Environment - -# with gin.unlock_config(): -# gin.clear_config() -# gin.parse_config_file(gin_config_file) -# return Environment() # pylint: disable=no-value-for-parameter - - -# @gin.configurable -# def get_histogram_reducer() -> Any: -# """Get histogram reducer. - -# Returns: -# Histogram reducer. -# """ - -# histogram_parameters_tuples = ( -# ('zone_air_temperature_sensor', (285., 286., 287., 288, 289., 290., 291., -# 292., 293., 294., 295., 296., 297., 298., 299., 300., 301, 302, 303)), -# ('supply_air_damper_percentage_command', (0.0, 0.2, 0.4, 0.6, 0.8, 1.0)), -# ('supply_air_flowrate_setpoint', (0., 0.05, .1, .2, .3, .4, .5, .7, .9)), -# ) - -# reader = controller_reader.ProtoReader(DATA_PATH) - -# hr = histogram_reducer.HistogramReducer( -# histogram_parameters_tuples=histogram_parameters_tuples, -# reader=reader, -# normalize_reduce=True, -# ) -# return hr diff --git a/smart_control/refactor/utils/constants.py b/smart_control/refactor/utils/constants.py index 7294200d..2e160198 100644 --- a/smart_control/refactor/utils/constants.py +++ b/smart_control/refactor/utils/constants.py @@ -18,5 +18,6 @@ DEFAULT_RENDERS_PATH = "/home/gabriel-user/projects/sbsim/smart_control/refactor/experiment_results/renders" DEFAULT_OUTPUT_DATA_PATH = "/home/gabriel-user/projects/sbsim/smart_control/refactor/data/starter_buffers" DEFAULT_ROOT_DIR = "/home/gabriel-user/projects/sbsim/smart_control/refactor/" +DEFAULT_EXPERIMENT_RESULTS_PATH = "/home/gabriel-user/projects/sbsim/smart_control/refactor/experiment_results/" DEFAULT_OCCUPANCY_NORMALIZATION_CONSTANT = 125.0 From 439805b8d935a88e83270129cbb6fb6c08c010f1 Mon Sep 17 00:00:00 2001 From: Gabriel Guerra Trigo Date: Sat, 8 Mar 2025 12:38:20 -0500 Subject: [PATCH 8/9] squash laterrrrr, but training script seems to be working --- .../observers/print_status_observer.py | 5 +- .../scripts/populate_starter_buffer.py | 15 ++- smart_control/refactor/scripts/train.py | 111 ++++++++---------- 3 files changed, 58 insertions(+), 73 deletions(-) diff --git a/smart_control/refactor/observers/print_status_observer.py b/smart_control/refactor/observers/print_status_observer.py index 516405ad..325947b2 100644 --- a/smart_control/refactor/observers/print_status_observer.py +++ b/smart_control/refactor/observers/print_status_observer.py @@ -31,9 +31,8 @@ def __init__( self._time_zone = time_zone self._start_time = None - if self._environment is not None: - self._num_timesteps_in_episode = (self._environment.pyenv.envs[0]._num_timesteps_in_episode) - self._environment.pyenv.envs[0]._end_timestamp + self._num_timesteps_in_episode = (self._environment.pyenv.envs[0]._num_timesteps_in_episode) + self._environment.pyenv.envs[0]._end_timestamp def __call__(self, trajectory: trajectory_lib.Trajectory) -> None: reward = trajectory.reward diff --git a/smart_control/refactor/scripts/populate_starter_buffer.py b/smart_control/refactor/scripts/populate_starter_buffer.py index 351ef2e4..7143d38c 100644 --- a/smart_control/refactor/scripts/populate_starter_buffer.py +++ b/smart_control/refactor/scripts/populate_starter_buffer.py @@ -31,7 +31,8 @@ def populate_replay_buffer( buffer_capacity=50000, buffer_name=None, steps_per_run=100, - num_runs=100 + num_runs=100, + sequence_length=2 ): """ Populates a replay buffer with initial exploration data. @@ -45,7 +46,7 @@ def populate_replay_buffer( """ scenario_config_path = os.path.join(CONFIG_PATH, "sim_config_1_day.gin") - buffer_path = os.path.join(OUTPUT_DATA_PATH, buffer_name) + buffer_path = os.path.join(OUTPUT_DATA_PATH, f'{buffer_name}_seqlen{sequence_length}_exp{num_runs*steps_per_run}') logger.info("Buffer path: %s", buffer_path) # Create directory if it doesn't exist @@ -93,7 +94,7 @@ def populate_replay_buffer( collect_data_spec, # Use the complete data spec buffer_capacity, buffer_path, - sequence_length=2 + sequence_length=sequence_length ) replay_buffer, replay_buffer_observer = replay_manager.create_replay_buffer() @@ -147,8 +148,9 @@ def populate_replay_buffer( parser = argparse.ArgumentParser(description='Populate a replay buffer with initial exploration data') parser.add_argument('--capacity', type=int, default=50000, help='Replay buffer capacity') parser.add_argument('--buffer-name', type=str, required=True, help='Name to identify the saved replay buffer') - parser.add_argument('--steps-per-run', type=int, default=10, help='Number of steps per actor run') - parser.add_argument('--num-runs', type=int, default=2, help='Number of actor runs to perform') + parser.add_argument('--steps-per-run', type=int, default=100, help='Number of steps per actor run') + parser.add_argument('--num-runs', type=int, default=5, help='Number of actor runs to perform') + parser.add_argument('--sequence-length', type=int, default=2, help='Sequence length for the replay buffer') args = parser.parse_args() @@ -156,5 +158,6 @@ def populate_replay_buffer( buffer_capacity=args.capacity, buffer_name=args.buffer_name, steps_per_run=args.steps_per_run, - num_runs=args.num_runs + num_runs=args.num_runs, + sequence_length=args.sequence_length ) diff --git a/smart_control/refactor/scripts/train.py b/smart_control/refactor/scripts/train.py index 227a4005..451691f5 100644 --- a/smart_control/refactor/scripts/train.py +++ b/smart_control/refactor/scripts/train.py @@ -6,7 +6,6 @@ import os os.environ['WRAPT_DISABLE_EXTENSIONS'] = 'true' import logging -import time from datetime import datetime import tensorflow as tf @@ -39,13 +38,15 @@ def train_agent( batch_size=256, log_interval=100, eval_interval=1000, - num_eval_episodes=5 + num_eval_episodes=5, + checkpoint_interval=1000, # New parameter for checkpointing frequency + learner_iterations=200 # New parameter for learner iterations per loop ): """ Trains a reinforcement learning agent using a pre-populated replay buffer. Args: - buffer_path: Path to the pre-populated replay buffer + starter_buffer_path: Path to the pre-populated replay buffer agent_type: Type of agent to train ('sac' or 'td3') train_iterations: Number of training iterations collect_steps_per_iteration: Number of collection steps per training iteration @@ -53,13 +54,14 @@ def train_agent( log_interval: Interval for logging training metrics eval_interval: Interval for evaluating the agent num_eval_episodes: Number of episodes for evaluation - summary_dir: Directory to save TensorBoard summaries + checkpoint_interval: Interval for checkpointing the replay buffer + learner_iterations: Number of iterations to run the agent learner per training loop """ # Set up scenario config path scenario_config_path = os.path.join(CONFIG_PATH, "sim_config_1_day.gin") # Generate timestamp for summary directory - current_time = datetime.now().strftime("%Y_%m_%d-%H_%M") + current_time = datetime.now().strftime("%Y_%m_%d-%H:%M:%S") summary_dir = os.path.join(EXPERIMENT_RESULTS_PATH, f"{experiment_name}_{current_time}") logger.info(f"Experiment results will be saved to {summary_dir}") @@ -69,15 +71,10 @@ def train_agent( logger.exception(f"Directory {summary_dir} already exists. Exiting.") raise FileExistsError(f"Directory {summary_dir} already exists. Exiting.") - train_summary_writer = tf.summary.create_file_writer(os.path.join(summary_dir, 'train')) - eval_summary_writer = tf.summary.create_file_writer(os.path.join(summary_dir, 'eval')) - logger.info("Created summary writers") - # Create train and eval environments logger.info("Creating train and eval environments") train_env = create_and_setup_environment(scenario_config_path, metrics_path=os.path.join(summary_dir, 'metrics')) eval_env = create_and_setup_environment(scenario_config_path, metrics_path=None) - # Wrap in TF environments train_tf_env = tf_py_environment.TFPyEnvironment(train_env) @@ -117,7 +114,6 @@ def train_agent( # Load replay buffer from existing path logger.info(f"Instantiating replay buffer manager") - # Create replay buffer manager and load existing buffer replay_manager = ReplayBufferManager( agent.collect_data_spec, 50000, # Use default capacity @@ -130,7 +126,6 @@ def train_agent( replay_buffer, replay_buffer_observer = replay_manager.load_replay_buffer() logger.info(f"Replay buffer size after loading starter buffer: {replay_manager.num_frames()} frames") - # Create dataset for sampling from the buffer logger.info("Creating dataset for sampling from replay buffer") dataset = replay_buffer.as_dataset( @@ -139,16 +134,21 @@ def train_agent( num_parallel_calls=3 ).prefetch(3) - # Create print observer for collection print_observer = PrintStatusObserver( - status_interval_steps=100, # Print status every 100 steps + status_interval_steps=1, # Print status every 100 steps environment=train_tf_env, replay_buffer=replay_buffer ) + eval_print_observer = PrintStatusObserver( + status_interval_steps=1, + environment=eval_tf_env, + replay_buffer=replay_buffer + ) + # Combine observers - collect_observers = CompositeObserver([print_observer, replay_buffer_observer] + train_metrics) + collect_observers = CompositeObserver([print_observer, replay_buffer_observer]) # Create collect actor logger.info("Creating collect and eval actors") @@ -157,17 +157,23 @@ def train_agent( py_tf_eager_policy.PyTFEagerPolicy(collect_policy), train_step, steps_per_run=collect_steps_per_iteration, - observers=[collect_observers] + metrics=actor.collect_metrics(1), + observers=[collect_observers], + summary_dir=os.path.join(summary_dir, 'collect'), + summary_interval=1 ) # Create eval actor logger.info("Creating eval actor") eval_actor = actor.Actor( eval_env, - eval_policy, + py_tf_eager_policy.PyTFEagerPolicy(eval_policy), train_step, episodes_per_run=num_eval_episodes, - observers=eval_metrics + metrics=actor.eval_metrics(num_eval_episodes), + observers=[eval_print_observer], + summary_dir=os.path.join(summary_dir, 'eval'), + summary_interval=1 ) # Create learner @@ -177,6 +183,7 @@ def train_agent( train_step=train_step, agent=agent._agent, experience_dataset_fn=lambda: dataset, + summary_interval=1, triggers=[ triggers.PolicySavedModelTrigger( os.path.join(summary_dir, 'policies'), @@ -188,7 +195,6 @@ def train_agent( ] ) - # Training loop logger.info(f"Starting training for {train_iterations} iterations") @@ -196,54 +202,23 @@ def train_agent( for m in train_metrics: m.reset() - - # Initial evaluation - logger.info("Performing initial evaluation") - collect_actor.run() - for m in eval_metrics: - with eval_summary_writer.as_default(): - tf.summary.scalar(m.name, m.result(), step=train_step.numpy()) - logger.info(f"{m.name}: {m.result()}") - - - logger.info("Done!") - return - # Main training loop for i in range(train_iterations): - # Collect experience - collect_actor.run() - - # Train the agent - loss_info = agent_learner.run(iterations=1) - - # Log metrics periodically - if i % log_interval == 0: - logger.info(f"Iteration {i}/{train_iterations}") - logger.info(f"Step: {train_step.numpy()}") - - with train_summary_writer.as_default(): - for m in train_metrics: - tf.summary.scalar(m.name, m.result(), step=train_step.numpy()) - logger.info(f"{m.name}: {m.result()}") - - if loss_info: - for name, loss in loss_info.items(): - tf.summary.scalar(f"losses/{name}", loss, step=train_step.numpy()) - logger.info(f"Loss/{name}: {loss}") - # Evaluate periodically - if i % eval_interval == 0: + if (i % eval_interval == 2): logger.info(f"Evaluating at iteration {i}") eval_actor.run() - - with eval_summary_writer.as_default(): - for m in eval_metrics: - tf.summary.scalar(m.name, m.result(), step=train_step.numpy()) - logger.info(f"Eval {m.name}: {m.result()}") - # Checkpoint replay buffer periodically - if i % 1000 == 0: + # Collect experience + logger.info(f"Starting collection for loop iteration {i}") + collect_actor.run() + + # Train the agent using the specified learner iterations + logger.info(f"Training agent for loop iteration {i}") + agent_learner.run(iterations=learner_iterations) + + # Checkpoint replay buffer periodically based on the new argument + if (i % checkpoint_interval == 0): logger.info("Checkpointing replay buffer") replay_buffer.py_client.checkpoint() @@ -266,12 +241,18 @@ def train_agent( parser.add_argument('--agent-type', type=str, default='sac', choices=['sac', 'td3'], help='Type of agent to train (sac or td3)') parser.add_argument('--train-iterations', type=int, default=100000, help='Number of training iterations') - parser.add_argument('--collect-steps-per-training-iteration', type=int, default=1, help='Number of collection steps per iteration') - parser.add_argument('--batch-size', type=int, default=256, help='Batch size for training') + parser.add_argument('--collect-steps-per-training-iteration', type=int, default=20, help='Number of collection steps per iteration') + parser.add_argument('--batch-size', type=int, default=256, help='Batch size for training (each gradient update uses \ + this many elements from the replay buffer batched)') + parser.add_argument('--eval-interval', type=int, default=1000, help='Interval for evaluating the agent') parser.add_argument('--num-eval-episodes', type=int, default=1, help='Number of episodes for evaluation') parser.add_argument('--log-interval', type=int, default=100, help='Interval for logging training metrics') - parser.add_argument('--experiment-name', type=str, required=True, help='Name of the experiment. Will be used to save TensorBoard summaries') + parser.add_argument('--experiment-name', type=str, required=True, help='Name of the experiment. This be used to \ + save TensorBoard summaries') + parser.add_argument('--checkpoint-interval', type=int, default=1000, help='Interval for checkpointing the replay buffer') + parser.add_argument('--learner-iterations', type=int, default=200, help='Number of iterations (gradient updates) \ + to run the agent learner per training loop') args = parser.parse_args() @@ -285,4 +266,6 @@ def train_agent( eval_interval=args.eval_interval, num_eval_episodes=args.num_eval_episodes, log_interval=args.log_interval, + checkpoint_interval=args.checkpoint_interval, + learner_iterations=args.learner_iterations ) \ No newline at end of file From 20626db4c7ba5b1aede4b855c263c8b8df531d6f Mon Sep 17 00:00:00 2001 From: Gabriel Guerra Trigo Date: Sat, 8 Mar 2025 21:27:34 -0500 Subject: [PATCH 9/9] squash --- poetry.lock | 99 ++++++++++++++++++- pyproject.toml | 1 + .../scripts/populate_starter_buffer.py | 10 +- smart_control/refactor/scripts/train.py | 12 +-- 4 files changed, 111 insertions(+), 11 deletions(-) diff --git a/poetry.lock b/poetry.lock index 2b6975cc..dad642c9 100644 --- a/poetry.lock +++ b/poetry.lock @@ -994,6 +994,19 @@ files = [ {file = "idna-3.8.tar.gz", hash = "sha256:d838c2c0ed6fced7693d5e8ab8e734d5f8fda53a039c0164afb0b82e771e3603"}, ] +[[package]] +name = "iniconfig" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" +optional = false +python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\"" +files = [ + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, +] + [[package]] name = "ipykernel" version = "6.29.5" @@ -1943,6 +1956,23 @@ docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx- test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] type = ["mypy (>=1.8)"] +[[package]] +name = "pluggy" +version = "1.5.0" +description = "plugin and hook calling mechanisms for python" +optional = false +python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\"" +files = [ + {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, + {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, +] + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + [[package]] name = "portpicker" version = "1.6.0" @@ -2224,6 +2254,30 @@ files = [ [package.extras] diagrams = ["jinja2", "railroad-diagrams"] +[[package]] +name = "pytest" +version = "8.3.5" +description = "pytest: simple powerful testing with Python" +optional = false +python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\"" +files = [ + {file = "pytest-8.3.5-py3-none-any.whl", hash = "sha256:c69214aa47deac29fad6c2a4f590b9c4a9fdb16a403176fe154b79c0b4d4d820"}, + {file = "pytest-8.3.5.tar.gz", hash = "sha256:f4efe70cc14e511565ac476b57c279e12a855b11f48f212af1080ef2263d3845"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=1.5,<2" +tomli = {version = ">=1", markers = "python_version < \"3.11\""} + +[package.extras] +dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] + [[package]] name = "python-dateutil" version = "2.9.0.post0" @@ -3009,6 +3063,49 @@ files = [ {file = "threadpoolctl-3.5.0.tar.gz", hash = "sha256:082433502dd922bf738de0d8bcc4fdcbf0979ff44c42bd40f5af8a282f6fa107"}, ] +[[package]] +name = "tomli" +version = "2.2.1" +description = "A lil' TOML parser" +optional = false +python-versions = ">=3.8" +groups = ["main"] +markers = "python_version < \"3.11\"" +files = [ + {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, + {file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8"}, + {file = "tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff"}, + {file = "tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b"}, + {file = "tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea"}, + {file = "tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e"}, + {file = "tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98"}, + {file = "tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4"}, + {file = "tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7"}, + {file = "tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744"}, + {file = "tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec"}, + {file = "tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69"}, + {file = "tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc"}, + {file = "tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff"}, +] + [[package]] name = "tornado" version = "6.4.1" @@ -3252,4 +3349,4 @@ files = [ [metadata] lock-version = "2.1" python-versions = ">=3.10.12,<3.12" -content-hash = "b423a73c9df62e91d6914b1b0e3da1aeaa2152e15b6655a854aef1ad7e3dc581" +content-hash = "d683ba7c948ed1466f0f2f1800c92ec08b681243f4696d9277447d5ec4e7c2c9" diff --git a/pyproject.toml b/pyproject.toml index b4fab52b..aaae4fa4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -30,6 +30,7 @@ mctspy = "^0.1.1" tqdm = "^4.67.0" wrapt = "1.14.1" pyyaml = "^6.0.2" +pytest = "^8.3.5" [build-system] diff --git a/smart_control/refactor/scripts/populate_starter_buffer.py b/smart_control/refactor/scripts/populate_starter_buffer.py index 7143d38c..8e8a3278 100644 --- a/smart_control/refactor/scripts/populate_starter_buffer.py +++ b/smart_control/refactor/scripts/populate_starter_buffer.py @@ -32,7 +32,8 @@ def populate_replay_buffer( buffer_name=None, steps_per_run=100, num_runs=100, - sequence_length=2 + sequence_length=2, + env_gin_config_file_path='/home/gabriel-user/projects/sbsim/smart_control/configs/resources/sb1/train_sim_configs/sim_config_1_day.gin' ): """ Populates a replay buffer with initial exploration data. @@ -44,7 +45,6 @@ def populate_replay_buffer( steps_per_run: Number of steps per actor run num_runs: Number of actor runs to perform """ - scenario_config_path = os.path.join(CONFIG_PATH, "sim_config_1_day.gin") buffer_path = os.path.join(OUTPUT_DATA_PATH, f'{buffer_name}_seqlen{sequence_length}_exp{num_runs*steps_per_run}') logger.info("Buffer path: %s", buffer_path) @@ -60,7 +60,7 @@ def populate_replay_buffer( # Load environment logger.info("Loading environment from standard config") - collect_env = create_and_setup_environment(scenario_config_path, metrics_path=None) + collect_env = create_and_setup_environment(env_gin_config_file_path, metrics_path=None) # Wrap in TF environment collect_tf_env = tf_py_environment.TFPyEnvironment(collect_env) @@ -151,6 +151,7 @@ def populate_replay_buffer( parser.add_argument('--steps-per-run', type=int, default=100, help='Number of steps per actor run') parser.add_argument('--num-runs', type=int, default=5, help='Number of actor runs to perform') parser.add_argument('--sequence-length', type=int, default=2, help='Sequence length for the replay buffer') + parser.add_argument('--env-gin-config-file_path', type=str, default='/home/gabriel-user/projects/sbsim/smart_control/configs/resources/sb1/train_sim_configs/sim_config_1_day.gin', help='Environment config file') args = parser.parse_args() @@ -159,5 +160,6 @@ def populate_replay_buffer( buffer_name=args.buffer_name, steps_per_run=args.steps_per_run, num_runs=args.num_runs, - sequence_length=args.sequence_length + sequence_length=args.sequence_length, + env_gin_config_file_path=args.env_gin_config_file_path ) diff --git a/smart_control/refactor/scripts/train.py b/smart_control/refactor/scripts/train.py index 451691f5..39884998 100644 --- a/smart_control/refactor/scripts/train.py +++ b/smart_control/refactor/scripts/train.py @@ -205,7 +205,7 @@ def train_agent( # Main training loop for i in range(train_iterations): # Evaluate periodically - if (i % eval_interval == 2): + if (i % eval_interval == 0): logger.info(f"Evaluating at iteration {i}") eval_actor.run() @@ -240,17 +240,17 @@ def train_agent( parser.add_argument('--starter-buffer-path', type=str, required=True, help='Path to the starter replay buffer') parser.add_argument('--agent-type', type=str, default='sac', choices=['sac', 'td3'], help='Type of agent to train (sac or td3)') - parser.add_argument('--train-iterations', type=int, default=100000, help='Number of training iterations') - parser.add_argument('--collect-steps-per-training-iteration', type=int, default=20, help='Number of collection steps per iteration') + parser.add_argument('--train-iterations', type=int, default=100, help='Number of training iterations') + parser.add_argument('--collect-steps-per-training-iteration', type=int, default=50, help='Number of collection steps per iteration') parser.add_argument('--batch-size', type=int, default=256, help='Batch size for training (each gradient update uses \ this many elements from the replay buffer batched)') - parser.add_argument('--eval-interval', type=int, default=1000, help='Interval for evaluating the agent') + parser.add_argument('--eval-interval', type=int, default=10, help='Interval for evaluating the agent') parser.add_argument('--num-eval-episodes', type=int, default=1, help='Number of episodes for evaluation') - parser.add_argument('--log-interval', type=int, default=100, help='Interval for logging training metrics') + parser.add_argument('--log-interval', type=int, default=1, help='Interval for logging training metrics') parser.add_argument('--experiment-name', type=str, required=True, help='Name of the experiment. This be used to \ save TensorBoard summaries') - parser.add_argument('--checkpoint-interval', type=int, default=1000, help='Interval for checkpointing the replay buffer') + parser.add_argument('--checkpoint-interval', type=int, default=10, help='Interval for checkpointing the replay buffer') parser.add_argument('--learner-iterations', type=int, default=200, help='Number of iterations (gradient updates) \ to run the agent learner per training loop')